1.1 --- a/CONTRIBUTORS Tue Oct 20 08:10:47 2009 +0200
1.2 +++ b/CONTRIBUTORS Tue Oct 20 10:11:30 2009 +0200
1.3 @@ -7,10 +7,13 @@
1.4 Contributions to this Isabelle version
1.5 --------------------------------------
1.6
1.7 -* Oktober 2009: Florian Haftmann, TUM
1.8 +* October 2009: Sascha Boehme, TUM
1.9 + Extension of SMT method: proof-reconstruction for the SMT solver Z3
1.10 +
1.11 +* October 2009: Florian Haftmann, TUM
1.12 Refinement of parts of the HOL datatype package
1.13
1.14 -* Oktober 2009: Florian Haftmann, TUM
1.15 +* October 2009: Florian Haftmann, TUM
1.16 Generic term styles for term antiquotations
1.17
1.18 * September 2009: Thomas Sewell, NICTA
2.1 --- a/NEWS Tue Oct 20 08:10:47 2009 +0200
2.2 +++ b/NEWS Tue Oct 20 10:11:30 2009 +0200
2.3 @@ -46,7 +46,9 @@
2.4 arithmetic, and fixed-size bitvectors; there is also basic
2.5 support for higher-order features (esp. lambda abstractions).
2.6 It is an incomplete decision procedure based on external SMT
2.7 -solvers using the oracle mechanism.
2.8 +solvers using the oracle mechanism; for the SMT solver Z3,
2.9 +this method is proof-producing. Certificates are provided to
2.10 +avoid calling the external solvers solely for re-checking proofs.
2.11
2.12 * Reorganization of number theory:
2.13 * former session NumberTheory now named Old_Number_Theory
3.1 --- a/src/HOL/IsaMakefile Tue Oct 20 08:10:47 2009 +0200
3.2 +++ b/src/HOL/IsaMakefile Tue Oct 20 10:11:30 2009 +0200
3.3 @@ -6,7 +6,7 @@
3.4
3.5 default: HOL
3.6 generate: HOL-Generate-HOL HOL-Generate-HOLLight
3.7 -images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-Word TLA HOL4
3.8 +images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-SMT HOL-Word TLA HOL4
3.9
3.10 #Note: keep targets sorted (except for HOL-Library and HOL-ex)
3.11 test: \
3.12 @@ -40,7 +40,7 @@
3.13 HOL-Prolog \
3.14 HOL-SET-Protocol \
3.15 HOL-SizeChange \
3.16 - HOL-SMT \
3.17 + HOL-SMT-Examples \
3.18 HOL-Statespace \
3.19 HOL-Subst \
3.20 TLA-Buffer \
3.21 @@ -1146,15 +1146,222 @@
3.22
3.23 HOL-SMT: HOL-Word $(LOG)/HOL-SMT.gz
3.24
3.25 -$(LOG)/HOL-SMT.gz: $(OUT)/HOL-Word SMT/SMT_Definitions.thy SMT/SMT.thy \
3.26 +$(LOG)/HOL-SMT.gz: $(OUT)/HOL-Word SMT/SMT_Base.thy SMT/Z3.thy SMT/SMT.thy \
3.27 SMT/Tools/smt_normalize.ML SMT/Tools/smt_monomorph.ML \
3.28 SMT/Tools/smt_translate.ML SMT/Tools/smt_builtin.ML \
3.29 SMT/Tools/smtlib_interface.ML SMT/Tools/smt_solver.ML \
3.30 SMT/Tools/cvc3_solver.ML SMT/Tools/yices_solver.ML \
3.31 - SMT/Tools/z3_interface.ML SMT/Tools/z3_solver.ML SMT/Tools/z3_model.ML
3.32 + SMT/Tools/z3_proof_terms.ML SMT/Tools/z3_proof_rules.ML \
3.33 + SMT/Tools/z3_proof.ML SMT/Tools/z3_model.ML SMT/Tools/z3_interface.ML \
3.34 + SMT/Tools/z3_solver.ML
3.35 @cd SMT; $(ISABELLE_TOOL) usedir -b -g true $(OUT)/HOL-Word HOL-SMT
3.36
3.37
3.38 +## HOL-SMT-Examples
3.39 +
3.40 +HOL-SMT-Examples: HOL-SMT $(LOG)/HOL-SMT-Examples.gz
3.41 +
3.42 +$(LOG)/HOL-SMT-Examples.gz: $(OUT)/HOL-SMT SMT/Examples/ROOT.ML \
3.43 + SMT/Examples/SMT_Examples.thy \
3.44 + SMT/Examples/cert/z3_arith_quant_01 \
3.45 + SMT/Examples/cert/z3_arith_quant_01.proof \
3.46 + SMT/Examples/cert/z3_arith_quant_02 \
3.47 + SMT/Examples/cert/z3_arith_quant_02.proof \
3.48 + SMT/Examples/cert/z3_arith_quant_03 \
3.49 + SMT/Examples/cert/z3_arith_quant_03.proof \
3.50 + SMT/Examples/cert/z3_arith_quant_04 \
3.51 + SMT/Examples/cert/z3_arith_quant_04.proof \
3.52 + SMT/Examples/cert/z3_arith_quant_05 \
3.53 + SMT/Examples/cert/z3_arith_quant_05.proof \
3.54 + SMT/Examples/cert/z3_arith_quant_06 \
3.55 + SMT/Examples/cert/z3_arith_quant_06.proof \
3.56 + SMT/Examples/cert/z3_arith_quant_07 \
3.57 + SMT/Examples/cert/z3_arith_quant_07.proof \
3.58 + SMT/Examples/cert/z3_arith_quant_08 \
3.59 + SMT/Examples/cert/z3_arith_quant_08.proof \
3.60 + SMT/Examples/cert/z3_arith_quant_09 \
3.61 + SMT/Examples/cert/z3_arith_quant_09.proof \
3.62 + SMT/Examples/cert/z3_arith_quant_10 \
3.63 + SMT/Examples/cert/z3_arith_quant_10.proof \
3.64 + SMT/Examples/cert/z3_arith_quant_11 \
3.65 + SMT/Examples/cert/z3_arith_quant_11.proof \
3.66 + SMT/Examples/cert/z3_arith_quant_12 \
3.67 + SMT/Examples/cert/z3_arith_quant_12.proof \
3.68 + SMT/Examples/cert/z3_arith_quant_13 \
3.69 + SMT/Examples/cert/z3_arith_quant_13.proof \
3.70 + SMT/Examples/cert/z3_arith_quant_14 \
3.71 + SMT/Examples/cert/z3_arith_quant_14.proof \
3.72 + SMT/Examples/cert/z3_arith_quant_15 \
3.73 + SMT/Examples/cert/z3_arith_quant_15.proof \
3.74 + SMT/Examples/cert/z3_arith_quant_16 \
3.75 + SMT/Examples/cert/z3_arith_quant_16.proof \
3.76 + SMT/Examples/cert/z3_arith_quant_17 \
3.77 + SMT/Examples/cert/z3_arith_quant_17.proof \
3.78 + SMT/Examples/cert/z3_arith_quant_18 \
3.79 + SMT/Examples/cert/z3_arith_quant_18.proof \
3.80 + SMT/Examples/cert/z3_bv_01 \
3.81 + SMT/Examples/cert/z3_bv_01.proof \
3.82 + SMT/Examples/cert/z3_bv_02 \
3.83 + SMT/Examples/cert/z3_bv_02.proof \
3.84 + SMT/Examples/cert/z3_bv_arith_01 \
3.85 + SMT/Examples/cert/z3_bv_arith_01.proof \
3.86 + SMT/Examples/cert/z3_bv_arith_02 \
3.87 + SMT/Examples/cert/z3_bv_arith_02.proof \
3.88 + SMT/Examples/cert/z3_bv_arith_03 \
3.89 + SMT/Examples/cert/z3_bv_arith_03.proof \
3.90 + SMT/Examples/cert/z3_bv_arith_04 \
3.91 + SMT/Examples/cert/z3_bv_arith_04.proof \
3.92 + SMT/Examples/cert/z3_bv_arith_05 \
3.93 + SMT/Examples/cert/z3_bv_arith_05.proof \
3.94 + SMT/Examples/cert/z3_bv_arith_06 \
3.95 + SMT/Examples/cert/z3_bv_arith_06.proof \
3.96 + SMT/Examples/cert/z3_bv_arith_07 \
3.97 + SMT/Examples/cert/z3_bv_arith_07.proof \
3.98 + SMT/Examples/cert/z3_bv_arith_08 \
3.99 + SMT/Examples/cert/z3_bv_arith_08.proof \
3.100 + SMT/Examples/cert/z3_bv_arith_09 \
3.101 + SMT/Examples/cert/z3_bv_arith_09.proof \
3.102 + SMT/Examples/cert/z3_bv_arith_10 \
3.103 + SMT/Examples/cert/z3_bv_arith_10.proof \
3.104 + SMT/Examples/cert/z3_bv_bit_01 \
3.105 + SMT/Examples/cert/z3_bv_bit_01.proof \
3.106 + SMT/Examples/cert/z3_bv_bit_02 \
3.107 + SMT/Examples/cert/z3_bv_bit_02.proof \
3.108 + SMT/Examples/cert/z3_bv_bit_03 \
3.109 + SMT/Examples/cert/z3_bv_bit_03.proof \
3.110 + SMT/Examples/cert/z3_bv_bit_04 \
3.111 + SMT/Examples/cert/z3_bv_bit_04.proof \
3.112 + SMT/Examples/cert/z3_bv_bit_05 \
3.113 + SMT/Examples/cert/z3_bv_bit_05.proof \
3.114 + SMT/Examples/cert/z3_bv_bit_06 \
3.115 + SMT/Examples/cert/z3_bv_bit_06.proof \
3.116 + SMT/Examples/cert/z3_bv_bit_07 \
3.117 + SMT/Examples/cert/z3_bv_bit_07.proof \
3.118 + SMT/Examples/cert/z3_bv_bit_08 \
3.119 + SMT/Examples/cert/z3_bv_bit_08.proof \
3.120 + SMT/Examples/cert/z3_bv_bit_09 \
3.121 + SMT/Examples/cert/z3_bv_bit_09.proof \
3.122 + SMT/Examples/cert/z3_bv_bit_10 \
3.123 + SMT/Examples/cert/z3_bv_bit_10.proof \
3.124 + SMT/Examples/cert/z3_bv_bit_11 \
3.125 + SMT/Examples/cert/z3_bv_bit_11.proof \
3.126 + SMT/Examples/cert/z3_bv_bit_12 \
3.127 + SMT/Examples/cert/z3_bv_bit_12.proof \
3.128 + SMT/Examples/cert/z3_bv_bit_13 \
3.129 + SMT/Examples/cert/z3_bv_bit_13.proof \
3.130 + SMT/Examples/cert/z3_bv_bit_14 \
3.131 + SMT/Examples/cert/z3_bv_bit_14.proof \
3.132 + SMT/Examples/cert/z3_bv_bit_15 \
3.133 + SMT/Examples/cert/z3_bv_bit_15.proof \
3.134 + SMT/Examples/cert/z3_fol_01 \
3.135 + SMT/Examples/cert/z3_fol_01.proof \
3.136 + SMT/Examples/cert/z3_fol_02 \
3.137 + SMT/Examples/cert/z3_fol_02.proof \
3.138 + SMT/Examples/cert/z3_fol_03 \
3.139 + SMT/Examples/cert/z3_fol_03.proof \
3.140 + SMT/Examples/cert/z3_fol_04 \
3.141 + SMT/Examples/cert/z3_fol_04.proof \
3.142 + SMT/Examples/cert/z3_hol_01 \
3.143 + SMT/Examples/cert/z3_hol_01.proof \
3.144 + SMT/Examples/cert/z3_hol_02 \
3.145 + SMT/Examples/cert/z3_hol_02.proof \
3.146 + SMT/Examples/cert/z3_hol_03 \
3.147 + SMT/Examples/cert/z3_hol_03.proof \
3.148 + SMT/Examples/cert/z3_hol_04 \
3.149 + SMT/Examples/cert/z3_hol_04.proof \
3.150 + SMT/Examples/cert/z3_hol_05 \
3.151 + SMT/Examples/cert/z3_hol_05.proof \
3.152 + SMT/Examples/cert/z3_hol_06 \
3.153 + SMT/Examples/cert/z3_hol_06.proof \
3.154 + SMT/Examples/cert/z3_hol_07 \
3.155 + SMT/Examples/cert/z3_hol_07.proof \
3.156 + SMT/Examples/cert/z3_hol_08 \
3.157 + SMT/Examples/cert/z3_hol_08.proof \
3.158 + SMT/Examples/cert/z3_linarith_01 \
3.159 + SMT/Examples/cert/z3_linarith_01.proof \
3.160 + SMT/Examples/cert/z3_linarith_02 \
3.161 + SMT/Examples/cert/z3_linarith_02.proof \
3.162 + SMT/Examples/cert/z3_linarith_03 \
3.163 + SMT/Examples/cert/z3_linarith_03.proof \
3.164 + SMT/Examples/cert/z3_linarith_04 \
3.165 + SMT/Examples/cert/z3_linarith_04.proof \
3.166 + SMT/Examples/cert/z3_linarith_05 \
3.167 + SMT/Examples/cert/z3_linarith_05.proof \
3.168 + SMT/Examples/cert/z3_linarith_06 \
3.169 + SMT/Examples/cert/z3_linarith_06.proof \
3.170 + SMT/Examples/cert/z3_linarith_07 \
3.171 + SMT/Examples/cert/z3_linarith_07.proof \
3.172 + SMT/Examples/cert/z3_linarith_08 \
3.173 + SMT/Examples/cert/z3_linarith_08.proof \
3.174 + SMT/Examples/cert/z3_linarith_09 \
3.175 + SMT/Examples/cert/z3_linarith_09.proof \
3.176 + SMT/Examples/cert/z3_linarith_10 \
3.177 + SMT/Examples/cert/z3_linarith_10.proof \
3.178 + SMT/Examples/cert/z3_linarith_11 \
3.179 + SMT/Examples/cert/z3_linarith_11.proof \
3.180 + SMT/Examples/cert/z3_linarith_12 \
3.181 + SMT/Examples/cert/z3_linarith_12.proof \
3.182 + SMT/Examples/cert/z3_linarith_13 \
3.183 + SMT/Examples/cert/z3_linarith_13.proof \
3.184 + SMT/Examples/cert/z3_linarith_14 \
3.185 + SMT/Examples/cert/z3_linarith_14.proof \
3.186 + SMT/Examples/cert/z3_linarith_15 \
3.187 + SMT/Examples/cert/z3_linarith_15.proof \
3.188 + SMT/Examples/cert/z3_linarith_16 \
3.189 + SMT/Examples/cert/z3_linarith_16.proof \
3.190 + SMT/Examples/cert/z3_mono_01 \
3.191 + SMT/Examples/cert/z3_mono_01.proof \
3.192 + SMT/Examples/cert/z3_mono_02 \
3.193 + SMT/Examples/cert/z3_mono_02.proof \
3.194 + SMT/Examples/cert/z3_nat_arith_01 \
3.195 + SMT/Examples/cert/z3_nat_arith_01.proof \
3.196 + SMT/Examples/cert/z3_nat_arith_02 \
3.197 + SMT/Examples/cert/z3_nat_arith_02.proof \
3.198 + SMT/Examples/cert/z3_nat_arith_03 \
3.199 + SMT/Examples/cert/z3_nat_arith_03.proof \
3.200 + SMT/Examples/cert/z3_nat_arith_04 \
3.201 + SMT/Examples/cert/z3_nat_arith_04.proof \
3.202 + SMT/Examples/cert/z3_nat_arith_05 \
3.203 + SMT/Examples/cert/z3_nat_arith_05.proof \
3.204 + SMT/Examples/cert/z3_nat_arith_06 \
3.205 + SMT/Examples/cert/z3_nat_arith_06.proof \
3.206 + SMT/Examples/cert/z3_nat_arith_07 \
3.207 + SMT/Examples/cert/z3_nat_arith_07.proof \
3.208 + SMT/Examples/cert/z3_nlarith_01 \
3.209 + SMT/Examples/cert/z3_nlarith_01.proof \
3.210 + SMT/Examples/cert/z3_nlarith_02 \
3.211 + SMT/Examples/cert/z3_nlarith_02.proof \
3.212 + SMT/Examples/cert/z3_nlarith_03 \
3.213 + SMT/Examples/cert/z3_nlarith_03.proof \
3.214 + SMT/Examples/cert/z3_nlarith_04 \
3.215 + SMT/Examples/cert/z3_nlarith_04.proof \
3.216 + SMT/Examples/cert/z3_pair_01 \
3.217 + SMT/Examples/cert/z3_pair_01.proof \
3.218 + SMT/Examples/cert/z3_pair_02 \
3.219 + SMT/Examples/cert/z3_pair_02.proof \
3.220 + SMT/Examples/cert/z3_prop_01 \
3.221 + SMT/Examples/cert/z3_prop_01.proof \
3.222 + SMT/Examples/cert/z3_prop_02 \
3.223 + SMT/Examples/cert/z3_prop_02.proof \
3.224 + SMT/Examples/cert/z3_prop_03 \
3.225 + SMT/Examples/cert/z3_prop_03.proof \
3.226 + SMT/Examples/cert/z3_prop_04 \
3.227 + SMT/Examples/cert/z3_prop_04.proof \
3.228 + SMT/Examples/cert/z3_prop_05 \
3.229 + SMT/Examples/cert/z3_prop_05.proof \
3.230 + SMT/Examples/cert/z3_prop_06 \
3.231 + SMT/Examples/cert/z3_prop_06.proof \
3.232 + SMT/Examples/cert/z3_prop_07 \
3.233 + SMT/Examples/cert/z3_prop_07.proof \
3.234 + SMT/Examples/cert/z3_prop_08 \
3.235 + SMT/Examples/cert/z3_prop_08.proof \
3.236 + SMT/Examples/cert/z3_prop_09 \
3.237 + SMT/Examples/cert/z3_prop_09.proof \
3.238 + SMT/Examples/cert/z3_prop_10 \
3.239 + SMT/Examples/cert/z3_prop_10.proof
3.240 + @cd SMT; $(ISABELLE_TOOL) usedir $(OUT)/HOL-SMT Examples
3.241 +
3.242 +
3.243 ## clean
3.244
3.245 clean:
3.246 @@ -1177,4 +1384,6 @@
3.247 $(LOG)/HOL-Unix.gz $(OUT)/HOL-Word $(LOG)/HOL-Word.gz \
3.248 $(LOG)/HOL-Word-Examples.gz $(OUT)/HOL-NSA \
3.249 $(LOG)/HOL-NSA.gz $(LOG)/HOL-NSA-Examples.gz \
3.250 - $(LOG)/HOL-Mirabelle.gz $(LOG)/HOL-SMT.gz
3.251 + $(LOG)/HOL-Mirabelle.gz $(LOG)/HOL-SMT.gz \
3.252 + $(LOG)/HOL-SMT-Examples.gz
3.253 +
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
4.2 +++ b/src/HOL/SMT/Examples/ROOT.ML Tue Oct 20 10:11:30 2009 +0200
4.3 @@ -0,0 +1,1 @@
4.4 +use_thy "SMT_Examples";
5.1 --- a/src/HOL/SMT/Examples/SMT_Examples.thy Tue Oct 20 08:10:47 2009 +0200
5.2 +++ b/src/HOL/SMT/Examples/SMT_Examples.thy Tue Oct 20 10:11:30 2009 +0200
5.3 @@ -5,35 +5,361 @@
5.4 header {* Examples for the 'smt' tactic. *}
5.5
5.6 theory SMT_Examples
5.7 -imports "../SMT"
5.8 +imports SMT
5.9 begin
5.10
5.11 -declare [[smt_solver=z3, z3_proofs=false]]
5.12 -declare [[smt_trace=false]]
5.13 +declare [[smt_solver=z3, z3_proofs=true]]
5.14
5.15
5.16 section {* Propositional and first-order logic *}
5.17
5.18 -lemma "True" by smt
5.19 -lemma "p \<or> \<not>p" by smt
5.20 -lemma "(p \<and> True) = p" by smt
5.21 -lemma "(p \<or> q) \<and> \<not>p \<Longrightarrow> q" by smt
5.22 -lemma "(a \<and> b) \<or> (c \<and> d) \<Longrightarrow> (a \<and> b) \<or> (c \<and> d)" by smt
5.23 -lemma "P=P=P=P=P=P=P=P=P=P" by smt
5.24 +lemma "True"
5.25 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_01"]]
5.26 + by smt
5.27 +
5.28 +lemma "p \<or> \<not>p"
5.29 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_02"]]
5.30 + by smt
5.31 +
5.32 +lemma "(p \<and> True) = p"
5.33 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_03"]]
5.34 + by smt
5.35 +
5.36 +lemma "(p \<or> q) \<and> \<not>p \<Longrightarrow> q"
5.37 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_04"]]
5.38 + by smt
5.39 +
5.40 +lemma "(a \<and> b) \<or> (c \<and> d) \<Longrightarrow> (a \<and> b) \<or> (c \<and> d)"
5.41 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_05"]]
5.42 + using [[z3_proofs=false]] (* no Z3 proof *)
5.43 + by smt
5.44 +
5.45 +lemma "(p1 \<and> p2) \<or> p3 \<longrightarrow> (p1 \<longrightarrow> (p3 \<and> p2) \<or> (p1 \<and> p3)) \<or> p1"
5.46 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_06"]]
5.47 + by smt
5.48 +
5.49 +lemma "P=P=P=P=P=P=P=P=P=P"
5.50 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_07"]]
5.51 + by smt
5.52 +
5.53 +lemma
5.54 + assumes "a | b | c | d"
5.55 + and "e | f | (a & d)"
5.56 + and "~(a | (c & ~c)) | b"
5.57 + and "~(b & (x | ~x)) | c"
5.58 + and "~(d | False) | c"
5.59 + and "~(c | (~p & (p | (q & ~q))))"
5.60 + shows False
5.61 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_08"]]
5.62 + using assms by smt
5.63
5.64 axiomatization symm_f :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" where
5.65 symm_f: "symm_f x y = symm_f y x"
5.66 -lemma "a = a \<and> symm_f a b = symm_f b a" by (smt add: symm_f)
5.67 +lemma "a = a \<and> symm_f a b = symm_f b a"
5.68 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_09"]]
5.69 + by (smt add: symm_f)
5.70
5.71 +(*
5.72 +Taken from ~~/src/HOL/ex/SAT_Examples.thy.
5.73 +Translated from TPTP problem library: PUZ015-2.006.dimacs
5.74 +*)
5.75 +lemma
5.76 + assumes "~x0"
5.77 + and "~x30"
5.78 + and "~x29"
5.79 + and "~x59"
5.80 + and "x1 | x31 | x0"
5.81 + and "x2 | x32 | x1"
5.82 + and "x3 | x33 | x2"
5.83 + and "x4 | x34 | x3"
5.84 + and "x35 | x4"
5.85 + and "x5 | x36 | x30"
5.86 + and "x6 | x37 | x5 | x31"
5.87 + and "x7 | x38 | x6 | x32"
5.88 + and "x8 | x39 | x7 | x33"
5.89 + and "x9 | x40 | x8 | x34"
5.90 + and "x41 | x9 | x35"
5.91 + and "x10 | x42 | x36"
5.92 + and "x11 | x43 | x10 | x37"
5.93 + and "x12 | x44 | x11 | x38"
5.94 + and "x13 | x45 | x12 | x39"
5.95 + and "x14 | x46 | x13 | x40"
5.96 + and "x47 | x14 | x41"
5.97 + and "x15 | x48 | x42"
5.98 + and "x16 | x49 | x15 | x43"
5.99 + and "x17 | x50 | x16 | x44"
5.100 + and "x18 | x51 | x17 | x45"
5.101 + and "x19 | x52 | x18 | x46"
5.102 + and "x53 | x19 | x47"
5.103 + and "x20 | x54 | x48"
5.104 + and "x21 | x55 | x20 | x49"
5.105 + and "x22 | x56 | x21 | x50"
5.106 + and "x23 | x57 | x22 | x51"
5.107 + and "x24 | x58 | x23 | x52"
5.108 + and "x59 | x24 | x53"
5.109 + and "x25 | x54"
5.110 + and "x26 | x25 | x55"
5.111 + and "x27 | x26 | x56"
5.112 + and "x28 | x27 | x57"
5.113 + and "x29 | x28 | x58"
5.114 + and "~x1 | ~x31"
5.115 + and "~x1 | ~x0"
5.116 + and "~x31 | ~x0"
5.117 + and "~x2 | ~x32"
5.118 + and "~x2 | ~x1"
5.119 + and "~x32 | ~x1"
5.120 + and "~x3 | ~x33"
5.121 + and "~x3 | ~x2"
5.122 + and "~x33 | ~x2"
5.123 + and "~x4 | ~x34"
5.124 + and "~x4 | ~x3"
5.125 + and "~x34 | ~x3"
5.126 + and "~x35 | ~x4"
5.127 + and "~x5 | ~x36"
5.128 + and "~x5 | ~x30"
5.129 + and "~x36 | ~x30"
5.130 + and "~x6 | ~x37"
5.131 + and "~x6 | ~x5"
5.132 + and "~x6 | ~x31"
5.133 + and "~x37 | ~x5"
5.134 + and "~x37 | ~x31"
5.135 + and "~x5 | ~x31"
5.136 + and "~x7 | ~x38"
5.137 + and "~x7 | ~x6"
5.138 + and "~x7 | ~x32"
5.139 + and "~x38 | ~x6"
5.140 + and "~x38 | ~x32"
5.141 + and "~x6 | ~x32"
5.142 + and "~x8 | ~x39"
5.143 + and "~x8 | ~x7"
5.144 + and "~x8 | ~x33"
5.145 + and "~x39 | ~x7"
5.146 + and "~x39 | ~x33"
5.147 + and "~x7 | ~x33"
5.148 + and "~x9 | ~x40"
5.149 + and "~x9 | ~x8"
5.150 + and "~x9 | ~x34"
5.151 + and "~x40 | ~x8"
5.152 + and "~x40 | ~x34"
5.153 + and "~x8 | ~x34"
5.154 + and "~x41 | ~x9"
5.155 + and "~x41 | ~x35"
5.156 + and "~x9 | ~x35"
5.157 + and "~x10 | ~x42"
5.158 + and "~x10 | ~x36"
5.159 + and "~x42 | ~x36"
5.160 + and "~x11 | ~x43"
5.161 + and "~x11 | ~x10"
5.162 + and "~x11 | ~x37"
5.163 + and "~x43 | ~x10"
5.164 + and "~x43 | ~x37"
5.165 + and "~x10 | ~x37"
5.166 + and "~x12 | ~x44"
5.167 + and "~x12 | ~x11"
5.168 + and "~x12 | ~x38"
5.169 + and "~x44 | ~x11"
5.170 + and "~x44 | ~x38"
5.171 + and "~x11 | ~x38"
5.172 + and "~x13 | ~x45"
5.173 + and "~x13 | ~x12"
5.174 + and "~x13 | ~x39"
5.175 + and "~x45 | ~x12"
5.176 + and "~x45 | ~x39"
5.177 + and "~x12 | ~x39"
5.178 + and "~x14 | ~x46"
5.179 + and "~x14 | ~x13"
5.180 + and "~x14 | ~x40"
5.181 + and "~x46 | ~x13"
5.182 + and "~x46 | ~x40"
5.183 + and "~x13 | ~x40"
5.184 + and "~x47 | ~x14"
5.185 + and "~x47 | ~x41"
5.186 + and "~x14 | ~x41"
5.187 + and "~x15 | ~x48"
5.188 + and "~x15 | ~x42"
5.189 + and "~x48 | ~x42"
5.190 + and "~x16 | ~x49"
5.191 + and "~x16 | ~x15"
5.192 + and "~x16 | ~x43"
5.193 + and "~x49 | ~x15"
5.194 + and "~x49 | ~x43"
5.195 + and "~x15 | ~x43"
5.196 + and "~x17 | ~x50"
5.197 + and "~x17 | ~x16"
5.198 + and "~x17 | ~x44"
5.199 + and "~x50 | ~x16"
5.200 + and "~x50 | ~x44"
5.201 + and "~x16 | ~x44"
5.202 + and "~x18 | ~x51"
5.203 + and "~x18 | ~x17"
5.204 + and "~x18 | ~x45"
5.205 + and "~x51 | ~x17"
5.206 + and "~x51 | ~x45"
5.207 + and "~x17 | ~x45"
5.208 + and "~x19 | ~x52"
5.209 + and "~x19 | ~x18"
5.210 + and "~x19 | ~x46"
5.211 + and "~x52 | ~x18"
5.212 + and "~x52 | ~x46"
5.213 + and "~x18 | ~x46"
5.214 + and "~x53 | ~x19"
5.215 + and "~x53 | ~x47"
5.216 + and "~x19 | ~x47"
5.217 + and "~x20 | ~x54"
5.218 + and "~x20 | ~x48"
5.219 + and "~x54 | ~x48"
5.220 + and "~x21 | ~x55"
5.221 + and "~x21 | ~x20"
5.222 + and "~x21 | ~x49"
5.223 + and "~x55 | ~x20"
5.224 + and "~x55 | ~x49"
5.225 + and "~x20 | ~x49"
5.226 + and "~x22 | ~x56"
5.227 + and "~x22 | ~x21"
5.228 + and "~x22 | ~x50"
5.229 + and "~x56 | ~x21"
5.230 + and "~x56 | ~x50"
5.231 + and "~x21 | ~x50"
5.232 + and "~x23 | ~x57"
5.233 + and "~x23 | ~x22"
5.234 + and "~x23 | ~x51"
5.235 + and "~x57 | ~x22"
5.236 + and "~x57 | ~x51"
5.237 + and "~x22 | ~x51"
5.238 + and "~x24 | ~x58"
5.239 + and "~x24 | ~x23"
5.240 + and "~x24 | ~x52"
5.241 + and "~x58 | ~x23"
5.242 + and "~x58 | ~x52"
5.243 + and "~x23 | ~x52"
5.244 + and "~x59 | ~x24"
5.245 + and "~x59 | ~x53"
5.246 + and "~x24 | ~x53"
5.247 + and "~x25 | ~x54"
5.248 + and "~x26 | ~x25"
5.249 + and "~x26 | ~x55"
5.250 + and "~x25 | ~x55"
5.251 + and "~x27 | ~x26"
5.252 + and "~x27 | ~x56"
5.253 + and "~x26 | ~x56"
5.254 + and "~x28 | ~x27"
5.255 + and "~x28 | ~x57"
5.256 + and "~x27 | ~x57"
5.257 + and "~x29 | ~x28"
5.258 + and "~x29 | ~x58"
5.259 + and "~x28 | ~x58"
5.260 + shows False
5.261 + using assms
5.262 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_10"]]
5.263 + by smt
5.264
5.265 -section {* Linear arithmetic *}
5.266 +lemma "\<forall>x::int. P x \<longrightarrow> (\<forall>y::int. P x \<or> P y)"
5.267 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_01"]]
5.268 + by smt
5.269
5.270 -lemma "(3::int) = 3" by smt
5.271 -lemma "(3::real) = 3" by smt
5.272 -lemma "(3 :: int) + 1 = 4" by smt
5.273 -lemma "max (3::int) 8 > 5" by smt
5.274 -lemma "abs (x :: real) + abs y \<ge> abs (x + y)" by smt
5.275 -lemma "let x = (2 :: int) in x + x \<noteq> 5" by smt
5.276 +lemma
5.277 + assumes "(\<forall>x y. P x y = x)"
5.278 + shows "(\<exists>y. P x y) = P x c"
5.279 + using assms
5.280 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_02"]]
5.281 + by smt
5.282 +
5.283 +lemma
5.284 + assumes "(\<forall>x y. P x y = x)"
5.285 + and "(\<forall>x. \<exists>y. P x y) = (\<forall>x. P x c)"
5.286 + shows "(EX y. P x y) = P x c"
5.287 + using assms
5.288 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_03"]]
5.289 + by smt
5.290 +
5.291 +lemma
5.292 + assumes "if P x then \<not>(\<exists>y. P y) else (\<forall>y. \<not>P y)"
5.293 + shows "P x \<longrightarrow> P y"
5.294 + using assms
5.295 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_04"]]
5.296 + by smt
5.297 +
5.298 +
5.299 +section {* Arithmetic *}
5.300 +
5.301 +subsection {* Linear arithmetic over integers and reals *}
5.302 +
5.303 +lemma "(3::int) = 3"
5.304 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_01"]]
5.305 + by smt
5.306 +
5.307 +lemma "(3::real) = 3"
5.308 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_02"]]
5.309 + by smt
5.310 +
5.311 +lemma "(3 :: int) + 1 = 4"
5.312 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_03"]]
5.313 + by smt
5.314 +
5.315 +lemma "x + (y + z) = y + (z + (x::int))"
5.316 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_04"]]
5.317 + by smt
5.318 +
5.319 +lemma "max (3::int) 8 > 5"
5.320 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_05"]]
5.321 + by smt
5.322 +
5.323 +lemma "abs (x :: real) + abs y \<ge> abs (x + y)"
5.324 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_06"]]
5.325 + by smt
5.326 +
5.327 +lemma "P ((2::int) < 3) = P True"
5.328 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_07"]]
5.329 + by smt
5.330 +
5.331 +lemma "x + 3 \<ge> 4 \<or> x < (1::int)"
5.332 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_08"]]
5.333 + by smt
5.334 +
5.335 +lemma
5.336 + assumes "x \<ge> (3::int)" and "y = x + 4"
5.337 + shows "y - x > 0"
5.338 + using assms
5.339 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_09"]]
5.340 + by smt
5.341 +
5.342 +lemma "let x = (2 :: int) in x + x \<noteq> 5"
5.343 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_10"]]
5.344 + by smt
5.345 +
5.346 +lemma
5.347 + fixes x :: real
5.348 + assumes "3 * x + 7 * a < 4" and "3 < 2 * x"
5.349 + shows "a < 0"
5.350 + using assms
5.351 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_11"]]
5.352 + by smt
5.353 +
5.354 +lemma "(0 \<le> y + -1 * x \<or> \<not> 0 \<le> x \<or> 0 \<le> (x::int)) = (\<not> False)"
5.355 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_12"]]
5.356 + by smt
5.357 +
5.358 +lemma "distinct [x < (3::int), 3 \<le> x]"
5.359 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_13"]]
5.360 + by smt
5.361 +
5.362 +lemma
5.363 + assumes "a > (0::int)"
5.364 + shows "distinct [a, a * 2, a - a]"
5.365 + using assms
5.366 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_14"]]
5.367 + by smt
5.368 +
5.369 +lemma "
5.370 + (n < m & m < n') | (n < m & m = n') | (n < n' & n' < m) |
5.371 + (n = n' & n' < m) | (n = m & m < n') |
5.372 + (n' < m & m < n) | (n' < m & m = n) |
5.373 + (n' < n & n < m) | (n' = n & n < m) | (n' = m & m < n) |
5.374 + (m < n & n < n') | (m < n & n' = n) | (m < n' & n' < n) |
5.375 + (m = n & n < n') | (m = n' & n' < n) |
5.376 + (n' = m & m = (n::int))"
5.377 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_15"]]
5.378 + by smt
5.379
5.380 text{*
5.381 The following example was taken from HOL/ex/PresburgerEx.thy, where it says:
5.382 @@ -47,107 +373,333 @@
5.383 Warning: it takes (in 2006) over 4.2 minutes!
5.384
5.385 There, it is proved by "arith". SMT is able to prove this within a fraction
5.386 -of one second.
5.387 +of one second. With proof reconstruction, it takes about 13 seconds on a Core2
5.388 +processor.
5.389 *}
5.390
5.391 lemma "\<lbrakk> x3 = abs x2 - x1; x4 = abs x3 - x2; x5 = abs x4 - x3;
5.392 x6 = abs x5 - x4; x7 = abs x6 - x5; x8 = abs x7 - x6;
5.393 x9 = abs x8 - x7; x10 = abs x9 - x8; x11 = abs x10 - x9 \<rbrakk>
5.394 \<Longrightarrow> x1 = x10 & x2 = (x11::int)"
5.395 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_16"]]
5.396 by smt
5.397
5.398 -lemma "\<exists>x::int. 0 < x" by smt
5.399 -lemma "\<exists>x::real. 0 < x" by smt
5.400 -lemma "\<forall>x y::int. x < y \<longrightarrow> (2 * x + 1) < (2 * y)" by smt
5.401 -lemma "\<forall>x y::int. (2 * x + 1) \<noteq> (2 * y)" by smt
5.402 -lemma "~ (\<exists>x y z::int. 4 * x + -6 * y = (1::int))" by smt
5.403 -lemma "~ (\<exists>x::int. False)" by smt
5.404
5.405 +subsection {* Linear arithmetic with quantifiers *}
5.406
5.407 -section {* Non-linear arithmetic *}
5.408 +lemma "~ (\<exists>x::int. False)"
5.409 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_01"]]
5.410 + by smt
5.411
5.412 -lemma "((x::int) * (1 + y) - x * (1 - y)) = (2 * x * y)" by smt
5.413 +lemma "~ (\<exists>x::real. False)"
5.414 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_02"]]
5.415 + by smt
5.416 +
5.417 +lemma "\<exists>x::int. 0 < x"
5.418 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_03"]]
5.419 + using [[z3_proofs=false]] (* no Z3 proof *)
5.420 + by smt
5.421 +
5.422 +lemma "\<exists>x::real. 0 < x"
5.423 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_04"]]
5.424 + using [[z3_proofs=false]] (* no Z3 proof *)
5.425 + by smt
5.426 +
5.427 +lemma "\<forall>x::int. \<exists>y. y > x"
5.428 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_05"]]
5.429 + using [[z3_proofs=false]] (* no Z3 proof *)
5.430 + by smt
5.431 +
5.432 +lemma "\<forall>x y::int. (x = 0 \<and> y = 1) \<longrightarrow> x \<noteq> y"
5.433 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_06"]]
5.434 + by smt
5.435 +
5.436 +lemma "\<exists>x::int. \<forall>y. x < y \<longrightarrow> y < 0 \<or> y >= 0"
5.437 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_07"]]
5.438 + by smt
5.439 +
5.440 +lemma "\<forall>x y::int. x < y \<longrightarrow> (2 * x + 1) < (2 * y)"
5.441 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_08"]]
5.442 + by smt
5.443 +
5.444 +lemma "\<forall>x y::int. (2 * x + 1) \<noteq> (2 * y)"
5.445 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_09"]]
5.446 + by smt
5.447 +
5.448 +lemma "\<forall>x y::int. x + y > 2 \<or> x + y = 2 \<or> x + y < 2"
5.449 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_10"]]
5.450 + by smt
5.451 +
5.452 +lemma "\<forall>x::int. if x > 0 then x + 1 > 0 else 1 > x"
5.453 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_11"]]
5.454 + by smt
5.455 +
5.456 +lemma "if (ALL x::int. x < 0 \<or> x > 0) then False else True"
5.457 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_12"]]
5.458 + by smt
5.459 +
5.460 +lemma "(if (ALL x::int. x < 0 \<or> x > 0) then -1 else 3) > (0::int)"
5.461 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_13"]]
5.462 + by smt
5.463 +
5.464 +lemma "~ (\<exists>x y z::int. 4 * x + -6 * y = (1::int))"
5.465 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_14"]]
5.466 + by smt
5.467 +
5.468 +lemma "\<exists>x::int. \<forall>x y. 0 < x \<and> 0 < y \<longrightarrow> (0::int) < x + y"
5.469 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_15"]]
5.470 + by smt
5.471 +
5.472 +lemma "\<exists>u::int. \<forall>(x::int) y::real. 0 < x \<and> 0 < y \<longrightarrow> -1 < x"
5.473 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_16"]]
5.474 + by smt
5.475 +
5.476 +lemma "\<exists>x::int. (\<forall>y. y \<ge> x \<longrightarrow> y > 0) \<longrightarrow> x > 0"
5.477 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_17"]]
5.478 + by smt
5.479 +
5.480 +lemma "\<forall>x::int. trigger [pat x] (x < a \<longrightarrow> 2 * x < 2 * a)"
5.481 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_18"]]
5.482 + by smt
5.483 +
5.484 +
5.485 +subsection {* Non-linear arithmetic over integers and reals *}
5.486 +
5.487 +lemma "a > (0::int) \<Longrightarrow> a*b > 0 \<Longrightarrow> b > 0"
5.488 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_01"]]
5.489 + using [[z3_proofs=false]] -- {* Isabelle's arithmetic decision procedures
5.490 + are too weak to automatically prove @{thm zero_less_mult_pos}. *}
5.491 + by smt
5.492 +
5.493 +lemma "(a::int) * (x + 1 + y) = a * x + a * (y + 1)"
5.494 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_02"]]
5.495 + by smt
5.496 +
5.497 +lemma "((x::real) * (1 + y) - x * (1 - y)) = (2 * x * y)"
5.498 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_03"]]
5.499 + by smt
5.500 +
5.501 lemma
5.502 "(U::int) + (1 + p) * (b + e) + p * d =
5.503 U + (2 * (1 + p) * (b + e) + (1 + p) * d + d * p) - (1 + p) * (b + d + e)"
5.504 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_04"]]
5.505 by smt
5.506
5.507
5.508 -section {* Linear arithmetic for natural numbers *}
5.509 +subsection {* Linear arithmetic for natural numbers *}
5.510
5.511 -lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a" by smt
5.512 -lemma "let x = (1::nat) + y in x - y > 0 * x" by smt
5.513 +lemma "2 * (x::nat) ~= 1"
5.514 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_01"]]
5.515 + by smt
5.516 +
5.517 +lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a"
5.518 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_02"]]
5.519 + by smt
5.520 +
5.521 +lemma "let x = (1::nat) + y in x - y > 0 * x"
5.522 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_03"]]
5.523 + by smt
5.524 +
5.525 lemma
5.526 "let x = (1::nat) + y in
5.527 let P = (if x > 0 then True else False) in
5.528 False \<or> P = (x - 1 = y) \<or> (\<not>P \<longrightarrow> False)"
5.529 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_04"]]
5.530 by smt
5.531
5.532 +lemma "distinct [a + (1::nat), a * 2 + 3, a - a]"
5.533 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_05"]]
5.534 + by smt
5.535 +
5.536 +lemma "int (nat \<bar>x::int\<bar>) = \<bar>x\<bar>"
5.537 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_06"]]
5.538 + by smt
5.539 +
5.540 +definition prime_nat :: "nat \<Rightarrow> bool" where
5.541 + "prime_nat p = (1 < p \<and> (\<forall>m. m dvd p --> m = 1 \<or> m = p))"
5.542 +lemma "prime_nat (4*m + 1) \<Longrightarrow> m \<ge> (1::nat)"
5.543 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_07"]]
5.544 + by (smt add: prime_nat_def)
5.545 +
5.546
5.547 section {* Bitvectors *}
5.548
5.549 locale bv
5.550 begin
5.551
5.552 -declare [[smt_solver=z3]]
5.553 +text {*
5.554 +The following examples only work for Z3, and only without proof reconstruction.
5.555 +*}
5.556
5.557 -lemma "(27 :: 4 word) = -5" by smt
5.558 -lemma "(27 :: 4 word) = 11" by smt
5.559 -lemma "23 < (27::8 word)" by smt
5.560 -lemma "27 + 11 = (6::5 word)" by smt
5.561 -lemma "7 * 3 = (21::8 word)" by smt
5.562 -lemma "11 - 27 = (-16::8 word)" by smt
5.563 -lemma "- -11 = (11::5 word)" by smt
5.564 -lemma "-40 + 1 = (-39::7 word)" by smt
5.565 -lemma "a + 2 * b + c - b = (b + c) + (a :: 32 word)" by smt
5.566 +declare [[smt_solver=z3, z3_proofs=false]]
5.567
5.568 -lemma "0b110 AND 0b101 = (0b100 :: 32 word)" by smt
5.569 -lemma "0b110 OR 0b011 = (0b111 :: 8 word)" by smt
5.570 -lemma "0xF0 XOR 0xFF = (0x0F :: 8 word)" by smt
5.571 -lemma "NOT (0xF0 :: 16 word) = 0xFF0F" by smt
5.572
5.573 -lemma "word_cat (27::4 word) (27::8 word) = (2843::12 word)" by smt
5.574 -lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)"
5.575 +subsection {* Bitvector arithmetic *}
5.576 +
5.577 +lemma "(27 :: 4 word) = -5"
5.578 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_01"]]
5.579 by smt
5.580
5.581 -lemma "slice 1 (0b10110 :: 4 word) = (0b11 :: 2 word)" by smt
5.582 +lemma "(27 :: 4 word) = 11"
5.583 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_02"]]
5.584 + by smt
5.585
5.586 -lemma "ucast (0b1010 :: 4 word) = (0b1010 :: 10 word)" by smt
5.587 -lemma "scast (0b1010 :: 4 word) = (0b111010 :: 6 word)" by smt
5.588 +lemma "23 < (27::8 word)"
5.589 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_03"]]
5.590 + by smt
5.591
5.592 -lemma "bv_lshr 0b10011 2 = (0b100::8 word)" by smt
5.593 -lemma "bv_ashr 0b10011 2 = (0b100::8 word)" by smt
5.594 +lemma "27 + 11 = (6::5 word)"
5.595 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_04"]]
5.596 + by smt
5.597
5.598 -lemma "word_rotr 2 0b0110 = (0b1001::4 word)" by smt
5.599 -lemma "word_rotl 1 0b1110 = (0b1101::4 word)" by smt
5.600 +lemma "7 * 3 = (21::8 word)"
5.601 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_05"]]
5.602 + by smt
5.603 +lemma "11 - 27 = (-16::8 word)"
5.604 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_06"]]
5.605 + by smt
5.606
5.607 -lemma "(x AND 0xff00) OR (x AND 0x00ff) = (x::16 word)" by smt
5.608 +lemma "- -11 = (11::5 word)"
5.609 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_07"]]
5.610 + by smt
5.611
5.612 -lemma "w < 256 \<Longrightarrow> (w :: 16 word) AND 0x00FF = w" by smt
5.613 +lemma "-40 + 1 = (-39::7 word)"
5.614 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_08"]]
5.615 + by smt
5.616 +
5.617 +lemma "a + 2 * b + c - b = (b + c) + (a :: 32 word)"
5.618 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_09"]]
5.619 + by smt
5.620 +
5.621 +lemma "x = (5 :: 4 word) \<Longrightarrow> 4 * x = 4"
5.622 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_10"]]
5.623 + by smt
5.624 +
5.625 +
5.626 +subsection {* Bit-level logic *}
5.627 +
5.628 +lemma "0b110 AND 0b101 = (0b100 :: 32 word)"
5.629 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_01"]]
5.630 + by smt
5.631 +
5.632 +lemma "0b110 OR 0b011 = (0b111 :: 8 word)"
5.633 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_02"]]
5.634 + by smt
5.635 +
5.636 +lemma "0xF0 XOR 0xFF = (0x0F :: 8 word)"
5.637 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_03"]]
5.638 + by smt
5.639 +
5.640 +lemma "NOT (0xF0 :: 16 word) = 0xFF0F"
5.641 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_04"]]
5.642 + by smt
5.643 +
5.644 +lemma "word_cat (27::4 word) (27::8 word) = (2843::12 word)"
5.645 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_05"]]
5.646 + by smt
5.647 +
5.648 +lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)"
5.649 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_06"]]
5.650 + by smt
5.651 +
5.652 +lemma "slice 1 (0b10110 :: 4 word) = (0b11 :: 2 word)"
5.653 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_07"]]
5.654 + by smt
5.655 +
5.656 +lemma "ucast (0b1010 :: 4 word) = (0b1010 :: 10 word)"
5.657 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_08"]]
5.658 + by smt
5.659 +
5.660 +lemma "scast (0b1010 :: 4 word) = (0b111010 :: 6 word)"
5.661 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_09"]]
5.662 + by smt
5.663 +
5.664 +lemma "bv_lshr 0b10011 2 = (0b100::8 word)"
5.665 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_10"]]
5.666 + by smt
5.667 +
5.668 +lemma "bv_ashr 0b10011 2 = (0b100::8 word)"
5.669 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_11"]]
5.670 + by smt
5.671 +
5.672 +lemma "word_rotr 2 0b0110 = (0b1001::4 word)"
5.673 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_12"]]
5.674 + by smt
5.675 +
5.676 +lemma "word_rotl 1 0b1110 = (0b1101::4 word)"
5.677 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_13"]]
5.678 + by smt
5.679 +
5.680 +lemma "(x AND 0xff00) OR (x AND 0x00ff) = (x::16 word)"
5.681 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_14"]]
5.682 + by smt
5.683 +
5.684 +lemma "w < 256 \<Longrightarrow> (w :: 16 word) AND 0x00FF = w"
5.685 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_15"]]
5.686 + by smt
5.687
5.688 end
5.689
5.690 +lemma
5.691 + assumes "bv2int 0 = 0"
5.692 + and "bv2int 1 = 1"
5.693 + and "bv2int 2 = 2"
5.694 + and "bv2int 3 = 3"
5.695 + and "\<forall>x::2 word. bv2int x > 0"
5.696 + shows "\<forall>i::int. i < 0 \<longrightarrow> (\<forall>x::2 word. bv2int x > i)"
5.697 + using assms
5.698 + using [[smt_solver=z3]]
5.699 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_01"]]
5.700 + by smt
5.701 +
5.702 +lemma "P (0 \<le> (a :: 4 word)) = P True"
5.703 + using [[smt_solver=z3, z3_proofs=false]]
5.704 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_02"]]
5.705 + by smt
5.706 +
5.707
5.708 section {* Pairs *}
5.709
5.710 -lemma "fst (x, y) = a \<Longrightarrow> x = a" by smt
5.711 -lemma "p1 = (x, y) \<and> p2 = (y, x) \<Longrightarrow> fst p1 = snd p2" by smt
5.712 +lemma "fst (x, y) = a \<Longrightarrow> x = a"
5.713 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_pair_01"]]
5.714 + by smt
5.715 +
5.716 +lemma "p1 = (x, y) \<and> p2 = (y, x) \<Longrightarrow> fst p1 = snd p2"
5.717 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_pair_02"]]
5.718 + by smt
5.719
5.720
5.721 section {* Higher-order problems and recursion *}
5.722
5.723 -lemma "(f g x = (g x \<and> True)) \<or> (f g x = True) \<or> (g x = True)" by smt
5.724 -lemma "P ((2::int) < 3) = P True" by smt
5.725 -lemma "P ((2::int) < 3) = (P True :: bool)" by smt
5.726 -lemma "P (0 \<le> (a :: 4 word)) = P True" using [[smt_solver=z3]] by smt
5.727 -lemma "id 3 = 3 \<and> id True = True" by (smt add: id_def)
5.728 -lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> ((f (i1 := v1)) (i2 := v2)) i = f i" by smt
5.729 -lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]" by (smt add: map.simps)
5.730 -lemma "(ALL x. P x) | ~ All P" by smt
5.731 +lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> (f (i1 := v1, i2 := v2)) i = f i"
5.732 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_01"]]
5.733 + by smt
5.734 +
5.735 +lemma "(f g x = (g x \<and> True)) \<or> (f g x = True) \<or> (g x = True)"
5.736 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_02"]]
5.737 + by smt
5.738 +
5.739 +lemma "id 3 = 3 \<and> id True = True"
5.740 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_03"]]
5.741 + by (smt add: id_def)
5.742 +
5.743 +lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> ((f (i1 := v1)) (i2 := v2)) i = f i"
5.744 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_04"]]
5.745 + by smt
5.746 +
5.747 +lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]"
5.748 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_05"]]
5.749 + by (smt add: map.simps)
5.750 +
5.751 +lemma "(ALL x. P x) | ~ All P"
5.752 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_06"]]
5.753 + by smt
5.754
5.755 fun dec_10 :: "nat \<Rightarrow> nat" where
5.756 "dec_10 n = (if n < 10 then n else dec_10 (n - 10))"
5.757 -lemma "dec_10 (4 * dec_10 4) = 6" by (smt add: dec_10.simps)
5.758 +lemma "dec_10 (4 * dec_10 4) = 6"
5.759 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_07"]]
5.760 + by (smt add: dec_10.simps)
5.761
5.762 axiomatization
5.763 eval_dioph :: "int list \<Rightarrow> nat list \<Rightarrow> int"
5.764 @@ -163,7 +715,7 @@
5.765 (eval_dioph ks (map (\<lambda>x. x mod 2) xs) mod 2 = l mod 2 \<and>
5.766 eval_dioph ks (map (\<lambda>x. x div 2) xs) =
5.767 (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)"
5.768 - using [[smt_solver=z3]]
5.769 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_08"]]
5.770 by (smt add: eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2])
5.771
5.772
5.773 @@ -171,13 +723,17 @@
5.774
5.775 definition P :: "'a \<Rightarrow> bool" where "P x = True"
5.776 lemma poly_P: "P x \<and> (P [x] \<or> \<not>P[x])" by (simp add: P_def)
5.777 -lemma "P (1::int)" by (smt add: poly_P)
5.778 +lemma "P (1::int)"
5.779 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_mono_01"]]
5.780 + by (smt add: poly_P)
5.781
5.782 consts g :: "'a \<Rightarrow> nat"
5.783 axioms
5.784 g1: "g (Some x) = g [x]"
5.785 g2: "g None = g []"
5.786 g3: "g xs = length xs"
5.787 -lemma "g (Some (3::int)) = g (Some True)" by (smt add: g1 g2 g3 list.size)
5.788 +lemma "g (Some (3::int)) = g (Some True)"
5.789 + using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_mono_02"]]
5.790 + by (smt add: g1 g2 g3 list.size)
5.791
5.792 end
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
6.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_01 Tue Oct 20 10:11:30 2009 +0200
6.3 @@ -0,0 +1,4 @@
6.4 +(benchmark Isabelle
6.5 +:assumption (not (not (exists (?x1 Int) false)))
6.6 +:formula true
6.7 +)
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
7.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_01.proof Tue Oct 20 10:11:30 2009 +0200
7.3 @@ -0,0 +1,24 @@
7.4 +#2 := false
7.5 +#4 := (exists (vars (?x1 int)) false)
7.6 +#5 := (not #4)
7.7 +#6 := (not #5)
7.8 +#37 := (iff #6 false)
7.9 +#1 := true
7.10 +#32 := (not true)
7.11 +#35 := (iff #32 false)
7.12 +#36 := [rewrite]: #35
7.13 +#33 := (iff #6 #32)
7.14 +#30 := (iff #5 true)
7.15 +#25 := (not false)
7.16 +#28 := (iff #25 true)
7.17 +#29 := [rewrite]: #28
7.18 +#26 := (iff #5 #25)
7.19 +#23 := (iff #4 false)
7.20 +#24 := [elim-unused]: #23
7.21 +#27 := [monotonicity #24]: #26
7.22 +#31 := [trans #27 #29]: #30
7.23 +#34 := [monotonicity #31]: #33
7.24 +#38 := [trans #34 #36]: #37
7.25 +#22 := [asserted]: #6
7.26 +[mp #22 #38]: false
7.27 +unsat
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
8.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_02 Tue Oct 20 10:11:30 2009 +0200
8.3 @@ -0,0 +1,4 @@
8.4 +(benchmark Isabelle
8.5 +:assumption (not (not (exists (?x1 Real) false)))
8.6 +:formula true
8.7 +)
9.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
9.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_02.proof Tue Oct 20 10:11:30 2009 +0200
9.3 @@ -0,0 +1,24 @@
9.4 +#2 := false
9.5 +#4 := (exists (vars (?x1 real)) false)
9.6 +#5 := (not #4)
9.7 +#6 := (not #5)
9.8 +#37 := (iff #6 false)
9.9 +#1 := true
9.10 +#32 := (not true)
9.11 +#35 := (iff #32 false)
9.12 +#36 := [rewrite]: #35
9.13 +#33 := (iff #6 #32)
9.14 +#30 := (iff #5 true)
9.15 +#25 := (not false)
9.16 +#28 := (iff #25 true)
9.17 +#29 := [rewrite]: #28
9.18 +#26 := (iff #5 #25)
9.19 +#23 := (iff #4 false)
9.20 +#24 := [elim-unused]: #23
9.21 +#27 := [monotonicity #24]: #26
9.22 +#31 := [trans #27 #29]: #30
9.23 +#34 := [monotonicity #31]: #33
9.24 +#38 := [trans #34 #36]: #37
9.25 +#22 := [asserted]: #6
9.26 +[mp #22 #38]: false
9.27 +unsat
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
10.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_03 Tue Oct 20 10:11:30 2009 +0200
10.3 @@ -0,0 +1,4 @@
10.4 +(benchmark Isabelle
10.5 +:assumption (not (exists (?x1 Int) (< 0 ?x1)))
10.6 +:formula true
10.7 +)
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_03.proof Tue Oct 20 10:11:30 2009 +0200
11.3 @@ -0,0 +1,1 @@
11.4 +unsat
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
12.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_04 Tue Oct 20 10:11:30 2009 +0200
12.3 @@ -0,0 +1,4 @@
12.4 +(benchmark Isabelle
12.5 +:assumption (not (exists (?x1 Real) (< 0.0 ?x1)))
12.6 +:formula true
12.7 +)
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
13.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_04.proof Tue Oct 20 10:11:30 2009 +0200
13.3 @@ -0,0 +1,1 @@
13.4 +unsat
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
14.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_05 Tue Oct 20 10:11:30 2009 +0200
14.3 @@ -0,0 +1,4 @@
14.4 +(benchmark Isabelle
14.5 +:assumption (not (forall (?x1 Int) (exists (?x2 Int) (< ?x1 ?x2))))
14.6 +:formula true
14.7 +)
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
15.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_05.proof Tue Oct 20 10:11:30 2009 +0200
15.3 @@ -0,0 +1,1 @@
15.4 +unsat
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
16.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_06 Tue Oct 20 10:11:30 2009 +0200
16.3 @@ -0,0 +1,4 @@
16.4 +(benchmark Isabelle
16.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (implies (and (= ?x1 0) (= ?x2 1)) (not (= ?x1 ?x2)))))
16.6 +:formula true
16.7 +)
17.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
17.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_06.proof Tue Oct 20 10:11:30 2009 +0200
17.3 @@ -0,0 +1,73 @@
17.4 +#2 := false
17.5 +#5 := 0::int
17.6 +#8 := 1::int
17.7 +#143 := (= 1::int 0::int)
17.8 +#145 := (iff #143 false)
17.9 +#146 := [rewrite]: #145
17.10 +decl ?x1!1 :: int
17.11 +#47 := ?x1!1
17.12 +#51 := (= ?x1!1 0::int)
17.13 +decl ?x2!0 :: int
17.14 +#46 := ?x2!0
17.15 +#50 := (= ?x2!0 1::int)
17.16 +#63 := (and #50 #51)
17.17 +#69 := (= ?x2!0 ?x1!1)
17.18 +#72 := (not #69)
17.19 +#66 := (not #63)
17.20 +#75 := (or #66 #72)
17.21 +#78 := (not #75)
17.22 +#48 := (= ?x1!1 ?x2!0)
17.23 +#49 := (not #48)
17.24 +#52 := (and #51 #50)
17.25 +#53 := (not #52)
17.26 +#54 := (or #53 #49)
17.27 +#55 := (not #54)
17.28 +#79 := (iff #55 #78)
17.29 +#76 := (iff #54 #75)
17.30 +#73 := (iff #49 #72)
17.31 +#70 := (iff #48 #69)
17.32 +#71 := [rewrite]: #70
17.33 +#74 := [monotonicity #71]: #73
17.34 +#67 := (iff #53 #66)
17.35 +#64 := (iff #52 #63)
17.36 +#65 := [rewrite]: #64
17.37 +#68 := [monotonicity #65]: #67
17.38 +#77 := [monotonicity #68 #74]: #76
17.39 +#80 := [monotonicity #77]: #79
17.40 +#7 := (:var 0 int)
17.41 +#4 := (:var 1 int)
17.42 +#11 := (= #4 #7)
17.43 +#12 := (not #11)
17.44 +#9 := (= #7 1::int)
17.45 +#6 := (= #4 0::int)
17.46 +#10 := (and #6 #9)
17.47 +#32 := (not #10)
17.48 +#33 := (or #32 #12)
17.49 +#36 := (forall (vars (?x1 int) (?x2 int)) #33)
17.50 +#39 := (not #36)
17.51 +#56 := (~ #39 #55)
17.52 +#57 := [sk]: #56
17.53 +#13 := (implies #10 #12)
17.54 +#14 := (forall (vars (?x1 int) (?x2 int)) #13)
17.55 +#15 := (not #14)
17.56 +#40 := (iff #15 #39)
17.57 +#37 := (iff #14 #36)
17.58 +#34 := (iff #13 #33)
17.59 +#35 := [rewrite]: #34
17.60 +#38 := [quant-intro #35]: #37
17.61 +#41 := [monotonicity #38]: #40
17.62 +#31 := [asserted]: #15
17.63 +#44 := [mp #31 #41]: #39
17.64 +#60 := [mp~ #44 #57]: #55
17.65 +#61 := [mp #60 #80]: #78
17.66 +#62 := [not-or-elim #61]: #63
17.67 +#82 := [and-elim #62]: #51
17.68 +#141 := (= 1::int ?x1!1)
17.69 +#83 := [not-or-elim #61]: #69
17.70 +#139 := (= 1::int ?x2!0)
17.71 +#81 := [and-elim #62]: #50
17.72 +#140 := [symm #81]: #139
17.73 +#142 := [trans #140 #83]: #141
17.74 +#144 := [trans #142 #82]: #143
17.75 +[mp #144 #146]: false
17.76 +unsat
18.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
18.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_07 Tue Oct 20 10:11:30 2009 +0200
18.3 @@ -0,0 +1,4 @@
18.4 +(benchmark Isabelle
18.5 +:assumption (not (exists (?x1 Int) (forall (?x2 Int) (implies (< ?x1 ?x2) (or (< ?x2 0) (<= 0 ?x2))))))
18.6 +:formula true
18.7 +)
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
19.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_07.proof Tue Oct 20 10:11:30 2009 +0200
19.3 @@ -0,0 +1,82 @@
19.4 +#2 := false
19.5 +#5 := (:var 0 int)
19.6 +#7 := 0::int
19.7 +#9 := (<= 0::int #5)
19.8 +#8 := (< #5 0::int)
19.9 +#10 := (or #8 #9)
19.10 +#4 := (:var 1 int)
19.11 +#6 := (< #4 #5)
19.12 +#11 := (implies #6 #10)
19.13 +#12 := (forall (vars (?x2 int)) #11)
19.14 +#13 := (exists (vars (?x1 int)) #12)
19.15 +#14 := (not #13)
19.16 +#95 := (iff #14 false)
19.17 +#31 := (not #6)
19.18 +#32 := (or #31 #10)
19.19 +#35 := (forall (vars (?x2 int)) #32)
19.20 +#38 := (exists (vars (?x1 int)) #35)
19.21 +#41 := (not #38)
19.22 +#93 := (iff #41 false)
19.23 +#1 := true
19.24 +#88 := (not true)
19.25 +#91 := (iff #88 false)
19.26 +#92 := [rewrite]: #91
19.27 +#89 := (iff #41 #88)
19.28 +#86 := (iff #38 true)
19.29 +#81 := (exists (vars (?x1 int)) true)
19.30 +#84 := (iff #81 true)
19.31 +#85 := [elim-unused]: #84
19.32 +#82 := (iff #38 #81)
19.33 +#79 := (iff #35 true)
19.34 +#74 := (forall (vars (?x2 int)) true)
19.35 +#77 := (iff #74 true)
19.36 +#78 := [elim-unused]: #77
19.37 +#75 := (iff #35 #74)
19.38 +#72 := (iff #32 true)
19.39 +#46 := (>= #5 0::int)
19.40 +#44 := (not #46)
19.41 +#64 := (or #44 #46)
19.42 +#50 := -1::int
19.43 +#53 := (* -1::int #5)
19.44 +#54 := (+ #4 #53)
19.45 +#52 := (>= #54 0::int)
19.46 +#67 := (or #52 #64)
19.47 +#70 := (iff #67 true)
19.48 +#71 := [rewrite]: #70
19.49 +#68 := (iff #32 #67)
19.50 +#65 := (iff #10 #64)
19.51 +#48 := (iff #9 #46)
19.52 +#49 := [rewrite]: #48
19.53 +#45 := (iff #8 #44)
19.54 +#47 := [rewrite]: #45
19.55 +#66 := [monotonicity #47 #49]: #65
19.56 +#62 := (iff #31 #52)
19.57 +#51 := (not #52)
19.58 +#57 := (not #51)
19.59 +#60 := (iff #57 #52)
19.60 +#61 := [rewrite]: #60
19.61 +#58 := (iff #31 #57)
19.62 +#55 := (iff #6 #51)
19.63 +#56 := [rewrite]: #55
19.64 +#59 := [monotonicity #56]: #58
19.65 +#63 := [trans #59 #61]: #62
19.66 +#69 := [monotonicity #63 #66]: #68
19.67 +#73 := [trans #69 #71]: #72
19.68 +#76 := [quant-intro #73]: #75
19.69 +#80 := [trans #76 #78]: #79
19.70 +#83 := [quant-intro #80]: #82
19.71 +#87 := [trans #83 #85]: #86
19.72 +#90 := [monotonicity #87]: #89
19.73 +#94 := [trans #90 #92]: #93
19.74 +#42 := (iff #14 #41)
19.75 +#39 := (iff #13 #38)
19.76 +#36 := (iff #12 #35)
19.77 +#33 := (iff #11 #32)
19.78 +#34 := [rewrite]: #33
19.79 +#37 := [quant-intro #34]: #36
19.80 +#40 := [quant-intro #37]: #39
19.81 +#43 := [monotonicity #40]: #42
19.82 +#96 := [trans #43 #94]: #95
19.83 +#30 := [asserted]: #14
19.84 +[mp #30 #96]: false
19.85 +unsat
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
20.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_08 Tue Oct 20 10:11:30 2009 +0200
20.3 @@ -0,0 +1,4 @@
20.4 +(benchmark Isabelle
20.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (implies (< ?x1 ?x2) (< (+ (* 2 ?x1) 1) (* 2 ?x2)))))
20.6 +:formula true
20.7 +)
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
21.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_08.proof Tue Oct 20 10:11:30 2009 +0200
21.3 @@ -0,0 +1,128 @@
21.4 +#2 := false
21.5 +#9 := 1::int
21.6 +decl ?x1!1 :: int
21.7 +#91 := ?x1!1
21.8 +#68 := -2::int
21.9 +#129 := (* -2::int ?x1!1)
21.10 +decl ?x2!0 :: int
21.11 +#90 := ?x2!0
21.12 +#7 := 2::int
21.13 +#128 := (* 2::int ?x2!0)
21.14 +#130 := (+ #128 #129)
21.15 +#131 := (<= #130 1::int)
21.16 +#136 := (not #131)
21.17 +#55 := 0::int
21.18 +#53 := -1::int
21.19 +#115 := (* -1::int ?x1!1)
21.20 +#116 := (+ ?x2!0 #115)
21.21 +#117 := (<= #116 0::int)
21.22 +#139 := (or #117 #136)
21.23 +#142 := (not #139)
21.24 +#92 := (* -2::int ?x2!0)
21.25 +#93 := (* 2::int ?x1!1)
21.26 +#94 := (+ #93 #92)
21.27 +#95 := (>= #94 -1::int)
21.28 +#96 := (not #95)
21.29 +#97 := (* -1::int ?x2!0)
21.30 +#98 := (+ ?x1!1 #97)
21.31 +#99 := (>= #98 0::int)
21.32 +#100 := (or #99 #96)
21.33 +#101 := (not #100)
21.34 +#143 := (iff #101 #142)
21.35 +#140 := (iff #100 #139)
21.36 +#137 := (iff #96 #136)
21.37 +#134 := (iff #95 #131)
21.38 +#122 := (+ #92 #93)
21.39 +#125 := (>= #122 -1::int)
21.40 +#132 := (iff #125 #131)
21.41 +#133 := [rewrite]: #132
21.42 +#126 := (iff #95 #125)
21.43 +#123 := (= #94 #122)
21.44 +#124 := [rewrite]: #123
21.45 +#127 := [monotonicity #124]: #126
21.46 +#135 := [trans #127 #133]: #134
21.47 +#138 := [monotonicity #135]: #137
21.48 +#120 := (iff #99 #117)
21.49 +#109 := (+ #97 ?x1!1)
21.50 +#112 := (>= #109 0::int)
21.51 +#118 := (iff #112 #117)
21.52 +#119 := [rewrite]: #118
21.53 +#113 := (iff #99 #112)
21.54 +#110 := (= #98 #109)
21.55 +#111 := [rewrite]: #110
21.56 +#114 := [monotonicity #111]: #113
21.57 +#121 := [trans #114 #119]: #120
21.58 +#141 := [monotonicity #121 #138]: #140
21.59 +#144 := [monotonicity #141]: #143
21.60 +#5 := (:var 0 int)
21.61 +#71 := (* -2::int #5)
21.62 +#4 := (:var 1 int)
21.63 +#8 := (* 2::int #4)
21.64 +#72 := (+ #8 #71)
21.65 +#70 := (>= #72 -1::int)
21.66 +#69 := (not #70)
21.67 +#57 := (* -1::int #5)
21.68 +#58 := (+ #4 #57)
21.69 +#56 := (>= #58 0::int)
21.70 +#75 := (or #56 #69)
21.71 +#78 := (forall (vars (?x1 int) (?x2 int)) #75)
21.72 +#81 := (not #78)
21.73 +#102 := (~ #81 #101)
21.74 +#103 := [sk]: #102
21.75 +#11 := (* 2::int #5)
21.76 +#10 := (+ #8 1::int)
21.77 +#12 := (< #10 #11)
21.78 +#6 := (< #4 #5)
21.79 +#13 := (implies #6 #12)
21.80 +#14 := (forall (vars (?x1 int) (?x2 int)) #13)
21.81 +#15 := (not #14)
21.82 +#84 := (iff #15 #81)
21.83 +#32 := (+ 1::int #8)
21.84 +#35 := (< #32 #11)
21.85 +#41 := (not #6)
21.86 +#42 := (or #41 #35)
21.87 +#47 := (forall (vars (?x1 int) (?x2 int)) #42)
21.88 +#50 := (not #47)
21.89 +#82 := (iff #50 #81)
21.90 +#79 := (iff #47 #78)
21.91 +#76 := (iff #42 #75)
21.92 +#73 := (iff #35 #69)
21.93 +#74 := [rewrite]: #73
21.94 +#66 := (iff #41 #56)
21.95 +#54 := (not #56)
21.96 +#61 := (not #54)
21.97 +#64 := (iff #61 #56)
21.98 +#65 := [rewrite]: #64
21.99 +#62 := (iff #41 #61)
21.100 +#59 := (iff #6 #54)
21.101 +#60 := [rewrite]: #59
21.102 +#63 := [monotonicity #60]: #62
21.103 +#67 := [trans #63 #65]: #66
21.104 +#77 := [monotonicity #67 #74]: #76
21.105 +#80 := [quant-intro #77]: #79
21.106 +#83 := [monotonicity #80]: #82
21.107 +#51 := (iff #15 #50)
21.108 +#48 := (iff #14 #47)
21.109 +#45 := (iff #13 #42)
21.110 +#38 := (implies #6 #35)
21.111 +#43 := (iff #38 #42)
21.112 +#44 := [rewrite]: #43
21.113 +#39 := (iff #13 #38)
21.114 +#36 := (iff #12 #35)
21.115 +#33 := (= #10 #32)
21.116 +#34 := [rewrite]: #33
21.117 +#37 := [monotonicity #34]: #36
21.118 +#40 := [monotonicity #37]: #39
21.119 +#46 := [trans #40 #44]: #45
21.120 +#49 := [quant-intro #46]: #48
21.121 +#52 := [monotonicity #49]: #51
21.122 +#85 := [trans #52 #83]: #84
21.123 +#31 := [asserted]: #15
21.124 +#86 := [mp #31 #85]: #81
21.125 +#106 := [mp~ #86 #103]: #101
21.126 +#107 := [mp #106 #144]: #142
21.127 +#146 := [not-or-elim #107]: #131
21.128 +#108 := (not #117)
21.129 +#145 := [not-or-elim #107]: #108
21.130 +[th-lemma #145 #146]: false
21.131 +unsat
22.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
22.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_09 Tue Oct 20 10:11:30 2009 +0200
22.3 @@ -0,0 +1,4 @@
22.4 +(benchmark Isabelle
22.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (not (= (+ (* 2 ?x1) 1) (* 2 ?x2)))))
22.6 +:formula true
22.7 +)
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
23.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_09.proof Tue Oct 20 10:11:30 2009 +0200
23.3 @@ -0,0 +1,100 @@
23.4 +#2 := false
23.5 +#7 := 1::int
23.6 +decl ?x1!1 :: int
23.7 +#74 := ?x1!1
23.8 +#51 := -2::int
23.9 +#96 := (* -2::int ?x1!1)
23.10 +decl ?x2!0 :: int
23.11 +#73 := ?x2!0
23.12 +#4 := 2::int
23.13 +#95 := (* 2::int ?x2!0)
23.14 +#97 := (+ #95 #96)
23.15 +#166 := (<= #97 1::int)
23.16 +#94 := (= #97 1::int)
23.17 +#53 := -1::int
23.18 +#75 := (* -2::int ?x2!0)
23.19 +#76 := (* 2::int ?x1!1)
23.20 +#77 := (+ #76 #75)
23.21 +#78 := (= #77 -1::int)
23.22 +#79 := (not #78)
23.23 +#80 := (not #79)
23.24 +#110 := (iff #80 #94)
23.25 +#102 := (not #94)
23.26 +#105 := (not #102)
23.27 +#108 := (iff #105 #94)
23.28 +#109 := [rewrite]: #108
23.29 +#106 := (iff #80 #105)
23.30 +#103 := (iff #79 #102)
23.31 +#100 := (iff #78 #94)
23.32 +#88 := (+ #75 #76)
23.33 +#91 := (= #88 -1::int)
23.34 +#98 := (iff #91 #94)
23.35 +#99 := [rewrite]: #98
23.36 +#92 := (iff #78 #91)
23.37 +#89 := (= #77 #88)
23.38 +#90 := [rewrite]: #89
23.39 +#93 := [monotonicity #90]: #92
23.40 +#101 := [trans #93 #99]: #100
23.41 +#104 := [monotonicity #101]: #103
23.42 +#107 := [monotonicity #104]: #106
23.43 +#111 := [trans #107 #109]: #110
23.44 +#9 := (:var 0 int)
23.45 +#55 := (* -2::int #9)
23.46 +#5 := (:var 1 int)
23.47 +#6 := (* 2::int #5)
23.48 +#56 := (+ #6 #55)
23.49 +#54 := (= #56 -1::int)
23.50 +#58 := (not #54)
23.51 +#61 := (forall (vars (?x1 int) (?x2 int)) #58)
23.52 +#64 := (not #61)
23.53 +#81 := (~ #64 #80)
23.54 +#82 := [sk]: #81
23.55 +#10 := (* 2::int #9)
23.56 +#8 := (+ #6 1::int)
23.57 +#11 := (= #8 #10)
23.58 +#12 := (not #11)
23.59 +#13 := (forall (vars (?x1 int) (?x2 int)) #12)
23.60 +#14 := (not #13)
23.61 +#67 := (iff #14 #64)
23.62 +#31 := (+ 1::int #6)
23.63 +#37 := (= #10 #31)
23.64 +#42 := (not #37)
23.65 +#45 := (forall (vars (?x1 int) (?x2 int)) #42)
23.66 +#48 := (not #45)
23.67 +#65 := (iff #48 #64)
23.68 +#62 := (iff #45 #61)
23.69 +#59 := (iff #42 #58)
23.70 +#52 := (iff #37 #54)
23.71 +#57 := [rewrite]: #52
23.72 +#60 := [monotonicity #57]: #59
23.73 +#63 := [quant-intro #60]: #62
23.74 +#66 := [monotonicity #63]: #65
23.75 +#49 := (iff #14 #48)
23.76 +#46 := (iff #13 #45)
23.77 +#43 := (iff #12 #42)
23.78 +#40 := (iff #11 #37)
23.79 +#34 := (= #31 #10)
23.80 +#38 := (iff #34 #37)
23.81 +#39 := [rewrite]: #38
23.82 +#35 := (iff #11 #34)
23.83 +#32 := (= #8 #31)
23.84 +#33 := [rewrite]: #32
23.85 +#36 := [monotonicity #33]: #35
23.86 +#41 := [trans #36 #39]: #40
23.87 +#44 := [monotonicity #41]: #43
23.88 +#47 := [quant-intro #44]: #46
23.89 +#50 := [monotonicity #47]: #49
23.90 +#68 := [trans #50 #66]: #67
23.91 +#30 := [asserted]: #14
23.92 +#69 := [mp #30 #68]: #64
23.93 +#85 := [mp~ #69 #82]: #80
23.94 +#86 := [mp #85 #111]: #94
23.95 +#168 := (or #102 #166)
23.96 +#169 := [th-lemma]: #168
23.97 +#170 := [unit-resolution #169 #86]: #166
23.98 +#167 := (>= #97 1::int)
23.99 +#171 := (or #102 #167)
23.100 +#172 := [th-lemma]: #171
23.101 +#173 := [unit-resolution #172 #86]: #167
23.102 +[th-lemma #173 #170]: false
23.103 +unsat
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
24.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_10 Tue Oct 20 10:11:30 2009 +0200
24.3 @@ -0,0 +1,4 @@
24.4 +(benchmark Isabelle
24.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (or (< 2 (+ ?x1 ?x2)) (or (= (+ ?x1 ?x2) 2) (< (+ ?x1 ?x2) 2)))))
24.6 +:formula true
24.7 +)
25.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
25.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_10.proof Tue Oct 20 10:11:30 2009 +0200
25.3 @@ -0,0 +1,111 @@
25.4 +#2 := false
25.5 +#4 := 2::int
25.6 +decl ?x1!1 :: int
25.7 +#85 := ?x1!1
25.8 +decl ?x2!0 :: int
25.9 +#84 := ?x2!0
25.10 +#101 := (+ ?x2!0 ?x1!1)
25.11 +#107 := (>= #101 2::int)
25.12 +#113 := (<= #101 2::int)
25.13 +#116 := (not #113)
25.14 +#110 := (not #107)
25.15 +#104 := (= #101 2::int)
25.16 +#119 := (or #104 #110 #116)
25.17 +#122 := (not #119)
25.18 +#86 := (+ ?x1!1 ?x2!0)
25.19 +#87 := (<= #86 2::int)
25.20 +#88 := (not #87)
25.21 +#89 := (>= #86 2::int)
25.22 +#90 := (not #89)
25.23 +#91 := (= #86 2::int)
25.24 +#92 := (or #91 #90 #88)
25.25 +#93 := (not #92)
25.26 +#123 := (iff #93 #122)
25.27 +#120 := (iff #92 #119)
25.28 +#117 := (iff #88 #116)
25.29 +#114 := (iff #87 #113)
25.30 +#102 := (= #86 #101)
25.31 +#103 := [rewrite]: #102
25.32 +#115 := [monotonicity #103]: #114
25.33 +#118 := [monotonicity #115]: #117
25.34 +#111 := (iff #90 #110)
25.35 +#108 := (iff #89 #107)
25.36 +#109 := [monotonicity #103]: #108
25.37 +#112 := [monotonicity #109]: #111
25.38 +#105 := (iff #91 #104)
25.39 +#106 := [monotonicity #103]: #105
25.40 +#121 := [monotonicity #106 #112 #118]: #120
25.41 +#124 := [monotonicity #121]: #123
25.42 +#6 := (:var 0 int)
25.43 +#5 := (:var 1 int)
25.44 +#7 := (+ #5 #6)
25.45 +#56 := (<= #7 2::int)
25.46 +#58 := (not #56)
25.47 +#54 := (>= #7 2::int)
25.48 +#51 := (not #54)
25.49 +#9 := (= #7 2::int)
25.50 +#67 := (or #9 #51 #58)
25.51 +#72 := (forall (vars (?x1 int) (?x2 int)) #67)
25.52 +#75 := (not #72)
25.53 +#94 := (~ #75 #93)
25.54 +#95 := [sk]: #94
25.55 +#10 := (< #7 2::int)
25.56 +#11 := (or #9 #10)
25.57 +#8 := (< 2::int #7)
25.58 +#12 := (or #8 #11)
25.59 +#13 := (forall (vars (?x1 int) (?x2 int)) #12)
25.60 +#14 := (not #13)
25.61 +#78 := (iff #14 #75)
25.62 +#31 := (= 2::int #7)
25.63 +#37 := (or #10 #31)
25.64 +#42 := (or #8 #37)
25.65 +#45 := (forall (vars (?x1 int) (?x2 int)) #42)
25.66 +#48 := (not #45)
25.67 +#76 := (iff #48 #75)
25.68 +#73 := (iff #45 #72)
25.69 +#70 := (iff #42 #67)
25.70 +#61 := (or #51 #9)
25.71 +#64 := (or #58 #61)
25.72 +#68 := (iff #64 #67)
25.73 +#69 := [rewrite]: #68
25.74 +#65 := (iff #42 #64)
25.75 +#62 := (iff #37 #61)
25.76 +#55 := (iff #31 #9)
25.77 +#57 := [rewrite]: #55
25.78 +#53 := (iff #10 #51)
25.79 +#52 := [rewrite]: #53
25.80 +#63 := [monotonicity #52 #57]: #62
25.81 +#59 := (iff #8 #58)
25.82 +#60 := [rewrite]: #59
25.83 +#66 := [monotonicity #60 #63]: #65
25.84 +#71 := [trans #66 #69]: #70
25.85 +#74 := [quant-intro #71]: #73
25.86 +#77 := [monotonicity #74]: #76
25.87 +#49 := (iff #14 #48)
25.88 +#46 := (iff #13 #45)
25.89 +#43 := (iff #12 #42)
25.90 +#40 := (iff #11 #37)
25.91 +#34 := (or #31 #10)
25.92 +#38 := (iff #34 #37)
25.93 +#39 := [rewrite]: #38
25.94 +#35 := (iff #11 #34)
25.95 +#32 := (iff #9 #31)
25.96 +#33 := [rewrite]: #32
25.97 +#36 := [monotonicity #33]: #35
25.98 +#41 := [trans #36 #39]: #40
25.99 +#44 := [monotonicity #41]: #43
25.100 +#47 := [quant-intro #44]: #46
25.101 +#50 := [monotonicity #47]: #49
25.102 +#79 := [trans #50 #77]: #78
25.103 +#30 := [asserted]: #14
25.104 +#80 := [mp #30 #79]: #75
25.105 +#98 := [mp~ #80 #95]: #93
25.106 +#99 := [mp #98 #124]: #122
25.107 +#126 := [not-or-elim #99]: #107
25.108 +#100 := (not #104)
25.109 +#125 := [not-or-elim #99]: #100
25.110 +#127 := [not-or-elim #99]: #113
25.111 +#183 := (or #104 #116 #110)
25.112 +#184 := [th-lemma]: #183
25.113 +[unit-resolution #184 #127 #125 #126]: false
25.114 +unsat
26.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
26.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_11 Tue Oct 20 10:11:30 2009 +0200
26.3 @@ -0,0 +1,4 @@
26.4 +(benchmark Isabelle
26.5 +:assumption (not (forall (?x1 Int) (if_then_else (< 0 ?x1) (< 0 (+ ?x1 1)) (< ?x1 1))))
26.6 +:formula true
26.7 +)
27.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
27.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_11.proof Tue Oct 20 10:11:30 2009 +0200
27.3 @@ -0,0 +1,89 @@
27.4 +#2 := false
27.5 +#4 := 0::int
27.6 +decl ?x1!0 :: int
27.7 +#78 := ?x1!0
27.8 +#83 := (<= ?x1!0 0::int)
27.9 +#146 := (not #83)
27.10 +#155 := [hypothesis]: #83
27.11 +#7 := 1::int
27.12 +#81 := (>= ?x1!0 1::int)
27.13 +#82 := (not #81)
27.14 +#156 := (or #82 #146)
27.15 +#157 := [th-lemma]: #156
27.16 +#158 := [unit-resolution #157 #155]: #82
27.17 +#159 := (or #146 #81)
27.18 +#49 := -1::int
27.19 +#79 := (<= ?x1!0 -1::int)
27.20 +#80 := (not #79)
27.21 +#84 := (ite #83 #82 #80)
27.22 +#85 := (not #84)
27.23 +#5 := (:var 0 int)
27.24 +#50 := (<= #5 -1::int)
27.25 +#51 := (not #50)
27.26 +#55 := (>= #5 1::int)
27.27 +#54 := (not #55)
27.28 +#45 := (<= #5 0::int)
27.29 +#61 := (ite #45 #54 #51)
27.30 +#66 := (forall (vars (?x1 int)) #61)
27.31 +#69 := (not #66)
27.32 +#86 := (~ #69 #85)
27.33 +#87 := [sk]: #86
27.34 +#10 := (< #5 1::int)
27.35 +#8 := (+ #5 1::int)
27.36 +#9 := (< 0::int #8)
27.37 +#6 := (< 0::int #5)
27.38 +#11 := (ite #6 #9 #10)
27.39 +#12 := (forall (vars (?x1 int)) #11)
27.40 +#13 := (not #12)
27.41 +#72 := (iff #13 #69)
27.42 +#30 := (+ 1::int #5)
27.43 +#33 := (< 0::int #30)
27.44 +#36 := (ite #6 #33 #10)
27.45 +#39 := (forall (vars (?x1 int)) #36)
27.46 +#42 := (not #39)
27.47 +#70 := (iff #42 #69)
27.48 +#67 := (iff #39 #66)
27.49 +#64 := (iff #36 #61)
27.50 +#46 := (not #45)
27.51 +#58 := (ite #46 #51 #54)
27.52 +#62 := (iff #58 #61)
27.53 +#63 := [rewrite]: #62
27.54 +#59 := (iff #36 #58)
27.55 +#56 := (iff #10 #54)
27.56 +#57 := [rewrite]: #56
27.57 +#52 := (iff #33 #51)
27.58 +#53 := [rewrite]: #52
27.59 +#47 := (iff #6 #46)
27.60 +#48 := [rewrite]: #47
27.61 +#60 := [monotonicity #48 #53 #57]: #59
27.62 +#65 := [trans #60 #63]: #64
27.63 +#68 := [quant-intro #65]: #67
27.64 +#71 := [monotonicity #68]: #70
27.65 +#43 := (iff #13 #42)
27.66 +#40 := (iff #12 #39)
27.67 +#37 := (iff #11 #36)
27.68 +#34 := (iff #9 #33)
27.69 +#31 := (= #8 #30)
27.70 +#32 := [rewrite]: #31
27.71 +#35 := [monotonicity #32]: #34
27.72 +#38 := [monotonicity #35]: #37
27.73 +#41 := [quant-intro #38]: #40
27.74 +#44 := [monotonicity #41]: #43
27.75 +#73 := [trans #44 #71]: #72
27.76 +#29 := [asserted]: #13
27.77 +#74 := [mp #29 #73]: #69
27.78 +#90 := [mp~ #74 #87]: #85
27.79 +#151 := (or #84 #146 #81)
27.80 +#152 := [def-axiom]: #151
27.81 +#160 := [unit-resolution #152 #90]: #159
27.82 +#161 := [unit-resolution #160 #158 #155]: false
27.83 +#162 := [lemma #161]: #146
27.84 +#163 := (or #80 #83)
27.85 +#164 := [th-lemma]: #163
27.86 +#165 := [unit-resolution #164 #162]: #80
27.87 +#166 := (or #83 #79)
27.88 +#153 := (or #84 #83 #79)
27.89 +#154 := [def-axiom]: #153
27.90 +#167 := [unit-resolution #154 #90]: #166
27.91 +[unit-resolution #167 #165 #162]: false
27.92 +unsat
28.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
28.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_12 Tue Oct 20 10:11:30 2009 +0200
28.3 @@ -0,0 +1,4 @@
28.4 +(benchmark Isabelle
28.5 +:assumption (not (if_then_else (forall (?x1 Int) (or (< ?x1 0) (< 0 ?x1))) false true))
28.6 +:formula true
28.7 +)
29.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
29.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_12.proof Tue Oct 20 10:11:30 2009 +0200
29.3 @@ -0,0 +1,83 @@
29.4 +#2 := false
29.5 +#5 := 0::int
29.6 +#4 := (:var 0 int)
29.7 +#42 := (<= #4 0::int)
29.8 +#43 := (not #42)
29.9 +#40 := (>= #4 0::int)
29.10 +#38 := (not #40)
29.11 +#46 := (or #38 #43)
29.12 +#49 := (forall (vars (?x1 int)) #46)
29.13 +#524 := (not #49)
29.14 +#118 := (<= 0::int 0::int)
29.15 +#205 := (not #118)
29.16 +#119 := (>= 0::int 0::int)
29.17 +#206 := (not #119)
29.18 +#120 := (or #206 #205)
29.19 +#183 := (or #524 #120)
29.20 +#172 := (iff #183 #524)
29.21 +#525 := (or #524 false)
29.22 +#168 := (iff #525 #524)
29.23 +#510 := [rewrite]: #168
29.24 +#184 := (iff #183 #525)
29.25 +#528 := (iff #120 false)
29.26 +#197 := (or false false)
29.27 +#532 := (iff #197 false)
29.28 +#533 := [rewrite]: #532
29.29 +#530 := (iff #120 #197)
29.30 +#523 := (iff #205 false)
29.31 +#1 := true
29.32 +#209 := (not true)
29.33 +#211 := (iff #209 false)
29.34 +#208 := [rewrite]: #211
29.35 +#185 := (iff #205 #209)
29.36 +#527 := (iff #118 true)
29.37 +#529 := [rewrite]: #527
29.38 +#316 := [monotonicity #529]: #185
29.39 +#196 := [trans #316 #208]: #523
29.40 +#212 := (iff #206 false)
29.41 +#210 := (iff #206 #209)
29.42 +#207 := (iff #119 true)
29.43 +#198 := [rewrite]: #207
29.44 +#138 := [monotonicity #198]: #210
29.45 +#191 := [trans #138 #208]: #212
29.46 +#531 := [monotonicity #191 #196]: #530
29.47 +#534 := [trans #531 #533]: #528
29.48 +#526 := [monotonicity #534]: #184
29.49 +#173 := [trans #526 #510]: #172
29.50 +#188 := [quant-inst]: #183
29.51 +#174 := [mp #188 #173]: #524
29.52 +#60 := (~ #49 #49)
29.53 +#58 := (~ #46 #46)
29.54 +#59 := [refl]: #58
29.55 +#61 := [nnf-pos #59]: #60
29.56 +#7 := (< 0::int #4)
29.57 +#6 := (< #4 0::int)
29.58 +#8 := (or #6 #7)
29.59 +#9 := (forall (vars (?x1 int)) #8)
29.60 +#10 := (ite #9 false true)
29.61 +#11 := (not #10)
29.62 +#52 := (iff #11 #49)
29.63 +#50 := (iff #9 #49)
29.64 +#47 := (iff #8 #46)
29.65 +#44 := (iff #7 #43)
29.66 +#45 := [rewrite]: #44
29.67 +#39 := (iff #6 #38)
29.68 +#41 := [rewrite]: #39
29.69 +#48 := [monotonicity #41 #45]: #47
29.70 +#51 := [quant-intro #48]: #50
29.71 +#36 := (iff #11 #9)
29.72 +#28 := (not #9)
29.73 +#31 := (not #28)
29.74 +#34 := (iff #31 #9)
29.75 +#35 := [rewrite]: #34
29.76 +#32 := (iff #11 #31)
29.77 +#29 := (iff #10 #28)
29.78 +#30 := [rewrite]: #29
29.79 +#33 := [monotonicity #30]: #32
29.80 +#37 := [trans #33 #35]: #36
29.81 +#53 := [trans #37 #51]: #52
29.82 +#27 := [asserted]: #11
29.83 +#54 := [mp #27 #53]: #49
29.84 +#62 := [mp~ #54 #61]: #49
29.85 +[unit-resolution #62 #174]: false
29.86 +unsat
30.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
30.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_13 Tue Oct 20 10:11:30 2009 +0200
30.3 @@ -0,0 +1,4 @@
30.4 +(benchmark Isabelle
30.5 +:assumption (not (< 0 (ite (forall (?x1 Int) (or (< ?x1 0) (< 0 ?x1))) (~ 1) 3)))
30.6 +:formula true
30.7 +)
31.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
31.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_13.proof Tue Oct 20 10:11:30 2009 +0200
31.3 @@ -0,0 +1,180 @@
31.4 +#2 := false
31.5 +#4 := 0::int
31.6 +#5 := (:var 0 int)
31.7 +#48 := (<= #5 0::int)
31.8 +#49 := (not #48)
31.9 +#45 := (>= #5 0::int)
31.10 +#44 := (not #45)
31.11 +#52 := (or #44 #49)
31.12 +#55 := (forall (vars (?x1 int)) #52)
31.13 +#86 := (not #55)
31.14 +#604 := (<= 0::int 0::int)
31.15 +#264 := (not #604)
31.16 +#269 := (>= 0::int 0::int)
31.17 +#605 := (not #269)
31.18 +#265 := (or #605 #264)
31.19 +#588 := (or #86 #265)
31.20 +#584 := (iff #588 #86)
31.21 +#311 := (or #86 false)
31.22 +#314 := (iff #311 #86)
31.23 +#208 := [rewrite]: #314
31.24 +#312 := (iff #588 #311)
31.25 +#599 := (iff #265 false)
31.26 +#598 := (or false false)
31.27 +#241 := (iff #598 false)
31.28 +#601 := [rewrite]: #241
31.29 +#600 := (iff #265 #598)
31.30 +#597 := (iff #264 false)
31.31 +#1 := true
31.32 +#590 := (not true)
31.33 +#255 := (iff #590 false)
31.34 +#256 := [rewrite]: #255
31.35 +#596 := (iff #264 #590)
31.36 +#594 := (iff #604 true)
31.37 +#595 := [rewrite]: #594
31.38 +#591 := [monotonicity #595]: #596
31.39 +#235 := [trans #591 #256]: #597
31.40 +#592 := (iff #605 false)
31.41 +#253 := (iff #605 #590)
31.42 +#606 := (iff #269 true)
31.43 +#249 := [rewrite]: #606
31.44 +#254 := [monotonicity #249]: #253
31.45 +#593 := [trans #254 #256]: #592
31.46 +#240 := [monotonicity #593 #235]: #600
31.47 +#602 := [trans #240 #601]: #599
31.48 +#313 := [monotonicity #602]: #312
31.49 +#585 := [trans #313 #208]: #584
31.50 +#589 := [quant-inst]: #588
31.51 +#307 := [mp #589 #585]: #86
31.52 +decl z3name!0 :: bool
31.53 +#83 := z3name!0
31.54 +#12 := 3::int
31.55 +#32 := -1::int
31.56 +#92 := (ite z3name!0 -1::int 3::int)
31.57 +#290 := (= #92 3::int)
31.58 +#610 := (not #290)
31.59 +#607 := (>= #92 3::int)
31.60 +#609 := (not #607)
31.61 +#95 := (<= #92 0::int)
31.62 +#58 := (ite #55 -1::int 3::int)
31.63 +#64 := (<= #58 0::int)
31.64 +#96 := (~ #64 #95)
31.65 +#93 := (= #58 #92)
31.66 +#90 := (~ #55 z3name!0)
31.67 +#87 := (or z3name!0 #86)
31.68 +#84 := (not z3name!0)
31.69 +#85 := (or #84 #55)
31.70 +#88 := (and #85 #87)
31.71 +#89 := [intro-def]: #88
31.72 +#91 := [apply-def #89]: #90
31.73 +#94 := [monotonicity #91]: #93
31.74 +#97 := [monotonicity #94]: #96
31.75 +#10 := 1::int
31.76 +#11 := (- 1::int)
31.77 +#7 := (< 0::int #5)
31.78 +#6 := (< #5 0::int)
31.79 +#8 := (or #6 #7)
31.80 +#9 := (forall (vars (?x1 int)) #8)
31.81 +#13 := (ite #9 #11 3::int)
31.82 +#14 := (< 0::int #13)
31.83 +#15 := (not #14)
31.84 +#77 := (iff #15 #64)
31.85 +#35 := (ite #9 -1::int 3::int)
31.86 +#38 := (< 0::int #35)
31.87 +#41 := (not #38)
31.88 +#75 := (iff #41 #64)
31.89 +#65 := (not #64)
31.90 +#70 := (not #65)
31.91 +#73 := (iff #70 #64)
31.92 +#74 := [rewrite]: #73
31.93 +#71 := (iff #41 #70)
31.94 +#68 := (iff #38 #65)
31.95 +#61 := (< 0::int #58)
31.96 +#66 := (iff #61 #65)
31.97 +#67 := [rewrite]: #66
31.98 +#62 := (iff #38 #61)
31.99 +#59 := (= #35 #58)
31.100 +#56 := (iff #9 #55)
31.101 +#53 := (iff #8 #52)
31.102 +#50 := (iff #7 #49)
31.103 +#51 := [rewrite]: #50
31.104 +#46 := (iff #6 #44)
31.105 +#47 := [rewrite]: #46
31.106 +#54 := [monotonicity #47 #51]: #53
31.107 +#57 := [quant-intro #54]: #56
31.108 +#60 := [monotonicity #57]: #59
31.109 +#63 := [monotonicity #60]: #62
31.110 +#69 := [trans #63 #67]: #68
31.111 +#72 := [monotonicity #69]: #71
31.112 +#76 := [trans #72 #74]: #75
31.113 +#42 := (iff #15 #41)
31.114 +#39 := (iff #14 #38)
31.115 +#36 := (= #13 #35)
31.116 +#33 := (= #11 -1::int)
31.117 +#34 := [rewrite]: #33
31.118 +#37 := [monotonicity #34]: #36
31.119 +#40 := [monotonicity #37]: #39
31.120 +#43 := [monotonicity #40]: #42
31.121 +#78 := [trans #43 #76]: #77
31.122 +#31 := [asserted]: #15
31.123 +#79 := [mp #31 #78]: #64
31.124 +#126 := [mp~ #79 #97]: #95
31.125 +#266 := (not #95)
31.126 +#396 := (or #609 #266)
31.127 +#603 := [th-lemma]: #396
31.128 +#277 := [unit-resolution #603 #126]: #609
31.129 +#278 := [hypothesis]: #290
31.130 +#611 := (or #610 #607)
31.131 +#612 := [th-lemma]: #611
31.132 +#613 := [unit-resolution #612 #278 #277]: false
31.133 +#608 := [lemma #613]: #610
31.134 +#289 := (or z3name!0 #290)
31.135 +#293 := [def-axiom]: #289
31.136 +#308 := [unit-resolution #293 #608]: z3name!0
31.137 +#129 := (or #55 #84)
31.138 +decl ?x1!1 :: int
31.139 +#108 := ?x1!1
31.140 +#111 := (>= ?x1!1 0::int)
31.141 +#112 := (not #111)
31.142 +#109 := (<= ?x1!1 0::int)
31.143 +#110 := (not #109)
31.144 +#132 := (or #110 #112)
31.145 +#135 := (not #132)
31.146 +#138 := (or z3name!0 #135)
31.147 +#141 := (and #129 #138)
31.148 +#113 := (or #112 #110)
31.149 +#114 := (not #113)
31.150 +#119 := (or z3name!0 #114)
31.151 +#122 := (and #85 #119)
31.152 +#142 := (iff #122 #141)
31.153 +#139 := (iff #119 #138)
31.154 +#136 := (iff #114 #135)
31.155 +#133 := (iff #113 #132)
31.156 +#134 := [rewrite]: #133
31.157 +#137 := [monotonicity #134]: #136
31.158 +#140 := [monotonicity #137]: #139
31.159 +#130 := (iff #85 #129)
31.160 +#131 := [rewrite]: #130
31.161 +#143 := [monotonicity #131 #140]: #142
31.162 +#123 := (~ #88 #122)
31.163 +#120 := (~ #87 #119)
31.164 +#115 := (~ #86 #114)
31.165 +#116 := [sk]: #115
31.166 +#106 := (~ z3name!0 z3name!0)
31.167 +#107 := [refl]: #106
31.168 +#121 := [monotonicity #107 #116]: #120
31.169 +#104 := (~ #85 #85)
31.170 +#102 := (~ #55 #55)
31.171 +#100 := (~ #52 #52)
31.172 +#101 := [refl]: #100
31.173 +#103 := [nnf-pos #101]: #102
31.174 +#98 := (~ #84 #84)
31.175 +#99 := [refl]: #98
31.176 +#105 := [monotonicity #99 #103]: #104
31.177 +#124 := [monotonicity #105 #121]: #123
31.178 +#125 := [mp~ #89 #124]: #122
31.179 +#127 := [mp #125 #143]: #141
31.180 +#128 := [and-elim #127]: #129
31.181 +#582 := [unit-resolution #128 #308]: #55
31.182 +[unit-resolution #582 #307]: false
31.183 +unsat
32.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
32.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_14 Tue Oct 20 10:11:30 2009 +0200
32.3 @@ -0,0 +1,4 @@
32.4 +(benchmark Isabelle
32.5 +:assumption (not (not (exists (?x1 Int) (?x2 Int) (?x3 Int) (= (+ (* 4 ?x1) (* (~ 6) ?x2)) 1))))
32.6 +:formula true
32.7 +)
33.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
33.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_14.proof Tue Oct 20 10:11:30 2009 +0200
33.3 @@ -0,0 +1,103 @@
33.4 +#2 := false
33.5 +#104 := -1::int
33.6 +decl ?x1!1 :: int
33.7 +#86 := ?x1!1
33.8 +#106 := -4::int
33.9 +#107 := (* -4::int ?x1!1)
33.10 +decl ?x2!0 :: int
33.11 +#85 := ?x2!0
33.12 +#7 := 6::int
33.13 +#105 := (* 6::int ?x2!0)
33.14 +#108 := (+ #105 #107)
33.15 +#168 := (<= #108 -1::int)
33.16 +#109 := (= #108 -1::int)
33.17 +#12 := 1::int
33.18 +#33 := -6::int
33.19 +#87 := (* -6::int ?x2!0)
33.20 +#4 := 4::int
33.21 +#88 := (* 4::int ?x1!1)
33.22 +#89 := (+ #88 #87)
33.23 +#90 := (= #89 1::int)
33.24 +#112 := (iff #90 #109)
33.25 +#98 := (+ #87 #88)
33.26 +#101 := (= #98 1::int)
33.27 +#110 := (iff #101 #109)
33.28 +#111 := [rewrite]: #110
33.29 +#102 := (iff #90 #101)
33.30 +#99 := (= #89 #98)
33.31 +#100 := [rewrite]: #99
33.32 +#103 := [monotonicity #100]: #102
33.33 +#113 := [trans #103 #111]: #112
33.34 +#53 := (:var 0 int)
33.35 +#54 := (* -6::int #53)
33.36 +#9 := (:var 1 int)
33.37 +#55 := (* 4::int #9)
33.38 +#56 := (+ #55 #54)
33.39 +#76 := (= #56 1::int)
33.40 +#74 := (exists (vars (?x1 int) (?x2 int)) #76)
33.41 +#91 := (~ #74 #90)
33.42 +#92 := [sk]: #91
33.43 +#8 := (- 6::int)
33.44 +#10 := (* #8 #9)
33.45 +#5 := (:var 2 int)
33.46 +#6 := (* 4::int #5)
33.47 +#11 := (+ #6 #10)
33.48 +#13 := (= #11 1::int)
33.49 +#14 := (exists (vars (?x1 int) (?x2 int) (?x3 int)) #13)
33.50 +#15 := (not #14)
33.51 +#16 := (not #15)
33.52 +#79 := (iff #16 #74)
33.53 +#57 := (= 1::int #56)
33.54 +#58 := (exists (vars (?x1 int) (?x2 int)) #57)
33.55 +#77 := (iff #58 #74)
33.56 +#75 := (iff #57 #76)
33.57 +#73 := [rewrite]: #75
33.58 +#78 := [quant-intro #73]: #77
33.59 +#71 := (iff #16 #58)
33.60 +#63 := (not #58)
33.61 +#66 := (not #63)
33.62 +#69 := (iff #66 #58)
33.63 +#70 := [rewrite]: #69
33.64 +#67 := (iff #16 #66)
33.65 +#64 := (iff #15 #63)
33.66 +#61 := (iff #14 #58)
33.67 +#36 := (* -6::int #9)
33.68 +#39 := (+ #6 #36)
33.69 +#45 := (= 1::int #39)
33.70 +#50 := (exists (vars (?x1 int) (?x2 int) (?x3 int)) #45)
33.71 +#59 := (iff #50 #58)
33.72 +#60 := [elim-unused]: #59
33.73 +#51 := (iff #14 #50)
33.74 +#48 := (iff #13 #45)
33.75 +#42 := (= #39 1::int)
33.76 +#46 := (iff #42 #45)
33.77 +#47 := [rewrite]: #46
33.78 +#43 := (iff #13 #42)
33.79 +#40 := (= #11 #39)
33.80 +#37 := (= #10 #36)
33.81 +#34 := (= #8 -6::int)
33.82 +#35 := [rewrite]: #34
33.83 +#38 := [monotonicity #35]: #37
33.84 +#41 := [monotonicity #38]: #40
33.85 +#44 := [monotonicity #41]: #43
33.86 +#49 := [trans #44 #47]: #48
33.87 +#52 := [quant-intro #49]: #51
33.88 +#62 := [trans #52 #60]: #61
33.89 +#65 := [monotonicity #62]: #64
33.90 +#68 := [monotonicity #65]: #67
33.91 +#72 := [trans #68 #70]: #71
33.92 +#80 := [trans #72 #78]: #79
33.93 +#32 := [asserted]: #16
33.94 +#81 := [mp #32 #80]: #74
33.95 +#95 := [mp~ #81 #92]: #90
33.96 +#96 := [mp #95 #113]: #109
33.97 +#170 := (not #109)
33.98 +#171 := (or #170 #168)
33.99 +#172 := [th-lemma]: #171
33.100 +#173 := [unit-resolution #172 #96]: #168
33.101 +#169 := (>= #108 -1::int)
33.102 +#174 := (or #170 #169)
33.103 +#175 := [th-lemma]: #174
33.104 +#176 := [unit-resolution #175 #96]: #169
33.105 +[th-lemma #176 #173]: false
33.106 +unsat
34.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
34.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_15 Tue Oct 20 10:11:30 2009 +0200
34.3 @@ -0,0 +1,4 @@
34.4 +(benchmark Isabelle
34.5 +:assumption (not (exists (?x1 Int) (forall (?x2 Int) (?x3 Int) (implies (and (< 0 ?x2) (< 0 ?x3)) (< 0 (+ ?x2 ?x3))))))
34.6 +:formula true
34.7 +)
35.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
35.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_15.proof Tue Oct 20 10:11:30 2009 +0200
35.3 @@ -0,0 +1,107 @@
35.4 +#2 := false
35.5 +#4 := 0::int
35.6 +decl ?x2!1 :: int
35.7 +#83 := ?x2!1
35.8 +decl ?x3!0 :: int
35.9 +#82 := ?x3!0
35.10 +#108 := (+ ?x3!0 ?x2!1)
35.11 +#111 := (<= #108 0::int)
35.12 +#114 := (not #111)
35.13 +#89 := (<= ?x2!1 0::int)
35.14 +#90 := (not #89)
35.15 +#87 := (<= ?x3!0 0::int)
35.16 +#88 := (not #87)
35.17 +#102 := (and #88 #90)
35.18 +#105 := (not #102)
35.19 +#117 := (or #105 #114)
35.20 +#120 := (not #117)
35.21 +#84 := (+ ?x2!1 ?x3!0)
35.22 +#85 := (<= #84 0::int)
35.23 +#86 := (not #85)
35.24 +#91 := (and #90 #88)
35.25 +#92 := (not #91)
35.26 +#93 := (or #92 #86)
35.27 +#94 := (not #93)
35.28 +#121 := (iff #94 #120)
35.29 +#118 := (iff #93 #117)
35.30 +#115 := (iff #86 #114)
35.31 +#112 := (iff #85 #111)
35.32 +#109 := (= #84 #108)
35.33 +#110 := [rewrite]: #109
35.34 +#113 := [monotonicity #110]: #112
35.35 +#116 := [monotonicity #113]: #115
35.36 +#106 := (iff #92 #105)
35.37 +#103 := (iff #91 #102)
35.38 +#104 := [rewrite]: #103
35.39 +#107 := [monotonicity #104]: #106
35.40 +#119 := [monotonicity #107 #116]: #118
35.41 +#122 := [monotonicity #119]: #121
35.42 +#7 := (:var 0 int)
35.43 +#5 := (:var 1 int)
35.44 +#10 := (+ #5 #7)
35.45 +#63 := (<= #10 0::int)
35.46 +#64 := (not #63)
35.47 +#53 := (<= #7 0::int)
35.48 +#54 := (not #53)
35.49 +#49 := (<= #5 0::int)
35.50 +#50 := (not #49)
35.51 +#57 := (and #50 #54)
35.52 +#60 := (not #57)
35.53 +#67 := (or #60 #64)
35.54 +#70 := (forall (vars (?x2 int) (?x3 int)) #67)
35.55 +#73 := (not #70)
35.56 +#95 := (~ #73 #94)
35.57 +#96 := [sk]: #95
35.58 +#11 := (< 0::int #10)
35.59 +#8 := (< 0::int #7)
35.60 +#6 := (< 0::int #5)
35.61 +#9 := (and #6 #8)
35.62 +#12 := (implies #9 #11)
35.63 +#13 := (forall (vars (?x2 int) (?x3 int)) #12)
35.64 +#14 := (exists (vars (?x1 int)) #13)
35.65 +#15 := (not #14)
35.66 +#76 := (iff #15 #73)
35.67 +#32 := (not #9)
35.68 +#33 := (or #32 #11)
35.69 +#36 := (forall (vars (?x2 int) (?x3 int)) #33)
35.70 +#46 := (not #36)
35.71 +#74 := (iff #46 #73)
35.72 +#71 := (iff #36 #70)
35.73 +#68 := (iff #33 #67)
35.74 +#65 := (iff #11 #64)
35.75 +#66 := [rewrite]: #65
35.76 +#61 := (iff #32 #60)
35.77 +#58 := (iff #9 #57)
35.78 +#55 := (iff #8 #54)
35.79 +#56 := [rewrite]: #55
35.80 +#51 := (iff #6 #50)
35.81 +#52 := [rewrite]: #51
35.82 +#59 := [monotonicity #52 #56]: #58
35.83 +#62 := [monotonicity #59]: #61
35.84 +#69 := [monotonicity #62 #66]: #68
35.85 +#72 := [quant-intro #69]: #71
35.86 +#75 := [monotonicity #72]: #74
35.87 +#47 := (iff #15 #46)
35.88 +#44 := (iff #14 #36)
35.89 +#39 := (exists (vars (?x1 int)) #36)
35.90 +#42 := (iff #39 #36)
35.91 +#43 := [elim-unused]: #42
35.92 +#40 := (iff #14 #39)
35.93 +#37 := (iff #13 #36)
35.94 +#34 := (iff #12 #33)
35.95 +#35 := [rewrite]: #34
35.96 +#38 := [quant-intro #35]: #37
35.97 +#41 := [quant-intro #38]: #40
35.98 +#45 := [trans #41 #43]: #44
35.99 +#48 := [monotonicity #45]: #47
35.100 +#77 := [trans #48 #75]: #76
35.101 +#31 := [asserted]: #15
35.102 +#78 := [mp #31 #77]: #73
35.103 +#99 := [mp~ #78 #96]: #94
35.104 +#100 := [mp #99 #122]: #120
35.105 +#125 := [not-or-elim #100]: #111
35.106 +#101 := [not-or-elim #100]: #102
35.107 +#124 := [and-elim #101]: #90
35.108 +#123 := [and-elim #101]: #88
35.109 +[th-lemma #123 #124 #125]: false
35.110 +unsat
36.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
36.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_16 Tue Oct 20 10:11:30 2009 +0200
36.3 @@ -0,0 +1,4 @@
36.4 +(benchmark Isabelle
36.5 +:assumption (not (exists (?x1 Int) (forall (?x2 Int) (?x3 Real) (implies (and (< 0 ?x2) (< 0.0 ?x3)) (< (~ 1) ?x2)))))
36.6 +:formula true
36.7 +)
37.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
37.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_16.proof Tue Oct 20 10:11:30 2009 +0200
37.3 @@ -0,0 +1,117 @@
37.4 +#2 := false
37.5 +#4 := 0::int
37.6 +decl ?x2!1 :: int
37.7 +#91 := ?x2!1
37.8 +#98 := (<= ?x2!1 0::int)
37.9 +#99 := (not #98)
37.10 +#7 := 0::real
37.11 +decl ?x3!0 :: real
37.12 +#93 := ?x3!0
37.13 +#96 := (<= ?x3!0 0::real)
37.14 +#97 := (not #96)
37.15 +#111 := (and #97 #99)
37.16 +#114 := (not #111)
37.17 +#33 := -1::int
37.18 +#94 := (<= ?x2!1 -1::int)
37.19 +#95 := (not #94)
37.20 +#120 := (or #95 #114)
37.21 +#125 := (not #120)
37.22 +#100 := (and #99 #97)
37.23 +#101 := (not #100)
37.24 +#102 := (or #101 #95)
37.25 +#103 := (not #102)
37.26 +#126 := (iff #103 #125)
37.27 +#123 := (iff #102 #120)
37.28 +#117 := (or #114 #95)
37.29 +#121 := (iff #117 #120)
37.30 +#122 := [rewrite]: #121
37.31 +#118 := (iff #102 #117)
37.32 +#115 := (iff #101 #114)
37.33 +#112 := (iff #100 #111)
37.34 +#113 := [rewrite]: #112
37.35 +#116 := [monotonicity #113]: #115
37.36 +#119 := [monotonicity #116]: #118
37.37 +#124 := [trans #119 #122]: #123
37.38 +#127 := [monotonicity #124]: #126
37.39 +#5 := (:var 1 int)
37.40 +#75 := (<= #5 -1::int)
37.41 +#76 := (not #75)
37.42 +#8 := (:var 0 real)
37.43 +#65 := (<= #8 0::real)
37.44 +#66 := (not #65)
37.45 +#61 := (<= #5 0::int)
37.46 +#62 := (not #61)
37.47 +#69 := (and #62 #66)
37.48 +#72 := (not #69)
37.49 +#79 := (or #72 #76)
37.50 +#82 := (forall (vars (?x2 int) (?x3 real)) #79)
37.51 +#85 := (not #82)
37.52 +#104 := (~ #85 #103)
37.53 +#105 := [sk]: #104
37.54 +#11 := 1::int
37.55 +#12 := (- 1::int)
37.56 +#13 := (< #12 #5)
37.57 +#9 := (< 0::real #8)
37.58 +#6 := (< 0::int #5)
37.59 +#10 := (and #6 #9)
37.60 +#14 := (implies #10 #13)
37.61 +#15 := (forall (vars (?x2 int) (?x3 real)) #14)
37.62 +#16 := (exists (vars (?x1 int)) #15)
37.63 +#17 := (not #16)
37.64 +#88 := (iff #17 #85)
37.65 +#36 := (< -1::int #5)
37.66 +#42 := (not #10)
37.67 +#43 := (or #42 #36)
37.68 +#48 := (forall (vars (?x2 int) (?x3 real)) #43)
37.69 +#58 := (not #48)
37.70 +#86 := (iff #58 #85)
37.71 +#83 := (iff #48 #82)
37.72 +#80 := (iff #43 #79)
37.73 +#77 := (iff #36 #76)
37.74 +#78 := [rewrite]: #77
37.75 +#73 := (iff #42 #72)
37.76 +#70 := (iff #10 #69)
37.77 +#67 := (iff #9 #66)
37.78 +#68 := [rewrite]: #67
37.79 +#63 := (iff #6 #62)
37.80 +#64 := [rewrite]: #63
37.81 +#71 := [monotonicity #64 #68]: #70
37.82 +#74 := [monotonicity #71]: #73
37.83 +#81 := [monotonicity #74 #78]: #80
37.84 +#84 := [quant-intro #81]: #83
37.85 +#87 := [monotonicity #84]: #86
37.86 +#59 := (iff #17 #58)
37.87 +#56 := (iff #16 #48)
37.88 +#51 := (exists (vars (?x1 int)) #48)
37.89 +#54 := (iff #51 #48)
37.90 +#55 := [elim-unused]: #54
37.91 +#52 := (iff #16 #51)
37.92 +#49 := (iff #15 #48)
37.93 +#46 := (iff #14 #43)
37.94 +#39 := (implies #10 #36)
37.95 +#44 := (iff #39 #43)
37.96 +#45 := [rewrite]: #44
37.97 +#40 := (iff #14 #39)
37.98 +#37 := (iff #13 #36)
37.99 +#34 := (= #12 -1::int)
37.100 +#35 := [rewrite]: #34
37.101 +#38 := [monotonicity #35]: #37
37.102 +#41 := [monotonicity #38]: #40
37.103 +#47 := [trans #41 #45]: #46
37.104 +#50 := [quant-intro #47]: #49
37.105 +#53 := [quant-intro #50]: #52
37.106 +#57 := [trans #53 #55]: #56
37.107 +#60 := [monotonicity #57]: #59
37.108 +#89 := [trans #60 #87]: #88
37.109 +#32 := [asserted]: #17
37.110 +#90 := [mp #32 #89]: #85
37.111 +#108 := [mp~ #90 #105]: #103
37.112 +#109 := [mp #108 #127]: #125
37.113 +#128 := [not-or-elim #109]: #111
37.114 +#130 := [and-elim #128]: #99
37.115 +#110 := [not-or-elim #109]: #94
37.116 +#186 := (or #95 #98)
37.117 +#187 := [th-lemma]: #186
37.118 +#188 := [unit-resolution #187 #110]: #98
37.119 +[unit-resolution #188 #130]: false
37.120 +unsat
38.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
38.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_17 Tue Oct 20 10:11:30 2009 +0200
38.3 @@ -0,0 +1,4 @@
38.4 +(benchmark Isabelle
38.5 +:assumption (not (exists (?x1 Int) (implies (forall (?x2 Int) (implies (<= ?x1 ?x2) (< 0 ?x2))) (< 0 ?x1))))
38.6 +:formula true
38.7 +)
39.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
39.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_17.proof Tue Oct 20 10:11:30 2009 +0200
39.3 @@ -0,0 +1,148 @@
39.4 +#2 := false
39.5 +#144 := (not false)
39.6 +#7 := 0::int
39.7 +#5 := (:var 0 int)
39.8 +#52 := (<= #5 0::int)
39.9 +#53 := (not #52)
39.10 +#147 := (or #53 #144)
39.11 +#150 := (not #147)
39.12 +#153 := (forall (vars (?x1 int)) #150)
39.13 +#180 := (iff #153 false)
39.14 +#175 := (forall (vars (?x1 int)) false)
39.15 +#178 := (iff #175 false)
39.16 +#179 := [elim-unused]: #178
39.17 +#176 := (iff #153 #175)
39.18 +#173 := (iff #150 false)
39.19 +#1 := true
39.20 +#168 := (not true)
39.21 +#171 := (iff #168 false)
39.22 +#172 := [rewrite]: #171
39.23 +#169 := (iff #150 #168)
39.24 +#166 := (iff #147 true)
39.25 +#161 := (or #53 true)
39.26 +#164 := (iff #161 true)
39.27 +#165 := [rewrite]: #164
39.28 +#162 := (iff #147 #161)
39.29 +#159 := (iff #144 true)
39.30 +#160 := [rewrite]: #159
39.31 +#163 := [monotonicity #160]: #162
39.32 +#167 := [trans #163 #165]: #166
39.33 +#170 := [monotonicity #167]: #169
39.34 +#174 := [trans #170 #172]: #173
39.35 +#177 := [quant-intro #174]: #176
39.36 +#181 := [trans #177 #179]: #180
39.37 +#56 := -1::int
39.38 +#57 := (* -1::int #5)
39.39 +#4 := (:var 1 int)
39.40 +#58 := (+ #4 #57)
39.41 +#59 := (<= #58 0::int)
39.42 +#62 := (not #59)
39.43 +#68 := (or #53 #62)
39.44 +#73 := (forall (vars (?x2 int)) #68)
39.45 +#76 := (not #73)
39.46 +#79 := (or #53 #76)
39.47 +#105 := (not #79)
39.48 +#123 := (forall (vars (?x1 int)) #105)
39.49 +#156 := (iff #123 #153)
39.50 +#127 := (forall (vars (?x2 int)) #53)
39.51 +#130 := (not #127)
39.52 +#133 := (or #53 #130)
39.53 +#136 := (not #133)
39.54 +#139 := (forall (vars (?x1 int)) #136)
39.55 +#154 := (iff #139 #153)
39.56 +#155 := [rewrite]: #154
39.57 +#140 := (iff #123 #139)
39.58 +#141 := [rewrite]: #140
39.59 +#157 := [trans #141 #155]: #156
39.60 +#116 := (and #52 #73)
39.61 +#119 := (forall (vars (?x1 int)) #116)
39.62 +#124 := (iff #119 #123)
39.63 +#113 := (iff #116 #105)
39.64 +#122 := [rewrite]: #113
39.65 +#125 := [quant-intro #122]: #124
39.66 +#94 := (not #53)
39.67 +#104 := (and #94 #73)
39.68 +#108 := (forall (vars (?x1 int)) #104)
39.69 +#120 := (iff #108 #119)
39.70 +#117 := (iff #104 #116)
39.71 +#114 := (iff #94 #52)
39.72 +#115 := [rewrite]: #114
39.73 +#118 := [monotonicity #115]: #117
39.74 +#121 := [quant-intro #118]: #120
39.75 +#82 := (exists (vars (?x1 int)) #79)
39.76 +#85 := (not #82)
39.77 +#109 := (~ #85 #108)
39.78 +#106 := (~ #105 #104)
39.79 +#101 := (not #76)
39.80 +#102 := (~ #101 #73)
39.81 +#99 := (~ #73 #73)
39.82 +#97 := (~ #68 #68)
39.83 +#98 := [refl]: #97
39.84 +#100 := [nnf-pos #98]: #99
39.85 +#103 := [nnf-neg #100]: #102
39.86 +#95 := (~ #94 #94)
39.87 +#96 := [refl]: #95
39.88 +#107 := [nnf-neg #96 #103]: #106
39.89 +#110 := [nnf-neg #107]: #109
39.90 +#8 := (< 0::int #5)
39.91 +#6 := (<= #4 #5)
39.92 +#9 := (implies #6 #8)
39.93 +#10 := (forall (vars (?x2 int)) #9)
39.94 +#11 := (implies #10 #8)
39.95 +#12 := (exists (vars (?x1 int)) #11)
39.96 +#13 := (not #12)
39.97 +#88 := (iff #13 #85)
39.98 +#30 := (not #6)
39.99 +#31 := (or #30 #8)
39.100 +#34 := (forall (vars (?x2 int)) #31)
39.101 +#40 := (not #34)
39.102 +#41 := (or #8 #40)
39.103 +#46 := (exists (vars (?x1 int)) #41)
39.104 +#49 := (not #46)
39.105 +#86 := (iff #49 #85)
39.106 +#83 := (iff #46 #82)
39.107 +#80 := (iff #41 #79)
39.108 +#77 := (iff #40 #76)
39.109 +#74 := (iff #34 #73)
39.110 +#71 := (iff #31 #68)
39.111 +#65 := (or #62 #53)
39.112 +#69 := (iff #65 #68)
39.113 +#70 := [rewrite]: #69
39.114 +#66 := (iff #31 #65)
39.115 +#54 := (iff #8 #53)
39.116 +#55 := [rewrite]: #54
39.117 +#63 := (iff #30 #62)
39.118 +#60 := (iff #6 #59)
39.119 +#61 := [rewrite]: #60
39.120 +#64 := [monotonicity #61]: #63
39.121 +#67 := [monotonicity #64 #55]: #66
39.122 +#72 := [trans #67 #70]: #71
39.123 +#75 := [quant-intro #72]: #74
39.124 +#78 := [monotonicity #75]: #77
39.125 +#81 := [monotonicity #55 #78]: #80
39.126 +#84 := [quant-intro #81]: #83
39.127 +#87 := [monotonicity #84]: #86
39.128 +#50 := (iff #13 #49)
39.129 +#47 := (iff #12 #46)
39.130 +#44 := (iff #11 #41)
39.131 +#37 := (implies #34 #8)
39.132 +#42 := (iff #37 #41)
39.133 +#43 := [rewrite]: #42
39.134 +#38 := (iff #11 #37)
39.135 +#35 := (iff #10 #34)
39.136 +#32 := (iff #9 #31)
39.137 +#33 := [rewrite]: #32
39.138 +#36 := [quant-intro #33]: #35
39.139 +#39 := [monotonicity #36]: #38
39.140 +#45 := [trans #39 #43]: #44
39.141 +#48 := [quant-intro #45]: #47
39.142 +#51 := [monotonicity #48]: #50
39.143 +#89 := [trans #51 #87]: #88
39.144 +#29 := [asserted]: #13
39.145 +#90 := [mp #29 #89]: #85
39.146 +#111 := [mp~ #90 #110]: #108
39.147 +#112 := [mp #111 #121]: #119
39.148 +#126 := [mp #112 #125]: #123
39.149 +#158 := [mp #126 #157]: #153
39.150 +[mp #158 #181]: false
39.151 +unsat
40.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
40.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_18 Tue Oct 20 10:11:30 2009 +0200
40.3 @@ -0,0 +1,7 @@
40.4 +(benchmark Isabelle
40.5 +:extrafuns (
40.6 + (uf_1 Int)
40.7 + )
40.8 +:assumption (not (forall (?x1 Int) (implies (< ?x1 uf_1) (< (* 2 ?x1) (* 2 uf_1))) :pat{ ?x1 }))
40.9 +:formula true
40.10 +)
41.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
41.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_18.proof Tue Oct 20 10:11:30 2009 +0200
41.3 @@ -0,0 +1,112 @@
41.4 +#2 := false
41.5 +#43 := 0::int
41.6 +decl ?x1!0 :: int
41.7 +#78 := ?x1!0
41.8 +#56 := -2::int
41.9 +#113 := (* -2::int ?x1!0)
41.10 +decl uf_1 :: int
41.11 +#6 := uf_1
41.12 +#8 := 2::int
41.13 +#10 := (* 2::int uf_1)
41.14 +#114 := (+ #10 #113)
41.15 +#115 := (<= #114 0::int)
41.16 +#120 := (not #115)
41.17 +#41 := -1::int
41.18 +#100 := (* -1::int ?x1!0)
41.19 +#101 := (+ uf_1 #100)
41.20 +#102 := (<= #101 0::int)
41.21 +#123 := (or #102 #120)
41.22 +#126 := (not #123)
41.23 +#59 := (* -2::int uf_1)
41.24 +#79 := (* 2::int ?x1!0)
41.25 +#80 := (+ #79 #59)
41.26 +#81 := (>= #80 0::int)
41.27 +#82 := (not #81)
41.28 +#45 := (* -1::int uf_1)
41.29 +#83 := (+ ?x1!0 #45)
41.30 +#84 := (>= #83 0::int)
41.31 +#85 := (or #84 #82)
41.32 +#86 := (not #85)
41.33 +#127 := (iff #86 #126)
41.34 +#124 := (iff #85 #123)
41.35 +#121 := (iff #82 #120)
41.36 +#118 := (iff #81 #115)
41.37 +#107 := (+ #59 #79)
41.38 +#110 := (>= #107 0::int)
41.39 +#116 := (iff #110 #115)
41.40 +#117 := [rewrite]: #116
41.41 +#111 := (iff #81 #110)
41.42 +#108 := (= #80 #107)
41.43 +#109 := [rewrite]: #108
41.44 +#112 := [monotonicity #109]: #111
41.45 +#119 := [trans #112 #117]: #118
41.46 +#122 := [monotonicity #119]: #121
41.47 +#105 := (iff #84 #102)
41.48 +#94 := (+ #45 ?x1!0)
41.49 +#97 := (>= #94 0::int)
41.50 +#103 := (iff #97 #102)
41.51 +#104 := [rewrite]: #103
41.52 +#98 := (iff #84 #97)
41.53 +#95 := (= #83 #94)
41.54 +#96 := [rewrite]: #95
41.55 +#99 := [monotonicity #96]: #98
41.56 +#106 := [trans #99 #104]: #105
41.57 +#125 := [monotonicity #106 #122]: #124
41.58 +#128 := [monotonicity #125]: #127
41.59 +#4 := (:var 0 int)
41.60 +#5 := (pattern #4)
41.61 +#9 := (* 2::int #4)
41.62 +#60 := (+ #9 #59)
41.63 +#58 := (>= #60 0::int)
41.64 +#57 := (not #58)
41.65 +#46 := (+ #4 #45)
41.66 +#44 := (>= #46 0::int)
41.67 +#63 := (or #44 #57)
41.68 +#66 := (forall (vars (?x1 int)) (:pat #5) #63)
41.69 +#69 := (not #66)
41.70 +#87 := (~ #69 #86)
41.71 +#88 := [sk]: #87
41.72 +#11 := (< #9 #10)
41.73 +#7 := (< #4 uf_1)
41.74 +#12 := (implies #7 #11)
41.75 +#13 := (forall (vars (?x1 int)) (:pat #5) #12)
41.76 +#14 := (not #13)
41.77 +#72 := (iff #14 #69)
41.78 +#31 := (not #7)
41.79 +#32 := (or #31 #11)
41.80 +#35 := (forall (vars (?x1 int)) (:pat #5) #32)
41.81 +#38 := (not #35)
41.82 +#70 := (iff #38 #69)
41.83 +#67 := (iff #35 #66)
41.84 +#64 := (iff #32 #63)
41.85 +#61 := (iff #11 #57)
41.86 +#62 := [rewrite]: #61
41.87 +#54 := (iff #31 #44)
41.88 +#42 := (not #44)
41.89 +#49 := (not #42)
41.90 +#52 := (iff #49 #44)
41.91 +#53 := [rewrite]: #52
41.92 +#50 := (iff #31 #49)
41.93 +#47 := (iff #7 #42)
41.94 +#48 := [rewrite]: #47
41.95 +#51 := [monotonicity #48]: #50
41.96 +#55 := [trans #51 #53]: #54
41.97 +#65 := [monotonicity #55 #62]: #64
41.98 +#68 := [quant-intro #65]: #67
41.99 +#71 := [monotonicity #68]: #70
41.100 +#39 := (iff #14 #38)
41.101 +#36 := (iff #13 #35)
41.102 +#33 := (iff #12 #32)
41.103 +#34 := [rewrite]: #33
41.104 +#37 := [quant-intro #34]: #36
41.105 +#40 := [monotonicity #37]: #39
41.106 +#73 := [trans #40 #71]: #72
41.107 +#30 := [asserted]: #14
41.108 +#74 := [mp #30 #73]: #69
41.109 +#91 := [mp~ #74 #88]: #86
41.110 +#92 := [mp #91 #128]: #126
41.111 +#130 := [not-or-elim #92]: #115
41.112 +#93 := (not #102)
41.113 +#129 := [not-or-elim #92]: #93
41.114 +[th-lemma #129 #130]: false
41.115 +unsat
42.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
42.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_01 Tue Oct 20 10:11:30 2009 +0200
42.3 @@ -0,0 +1,12 @@
42.4 +(benchmark Isabelle
42.5 +:extrafuns (
42.6 + (uf_1 BitVec[2] Int)
42.7 + )
42.8 +:assumption (= (uf_1 bv0[2]) 0)
42.9 +:assumption (= (uf_1 bv1[2]) 1)
42.10 +:assumption (= (uf_1 bv2[2]) 2)
42.11 +:assumption (= (uf_1 bv3[2]) 3)
42.12 +:assumption (forall (?x1 BitVec[2]) (< 0 (uf_1 ?x1)))
42.13 +:assumption (not (forall (?x2 Int) (implies (< ?x2 0) (forall (?x3 BitVec[2]) (< ?x2 (uf_1 ?x3))))))
42.14 +:formula true
42.15 +)
43.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
43.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_01.proof Tue Oct 20 10:11:30 2009 +0200
43.3 @@ -0,0 +1,43 @@
43.4 +#2 := false
43.5 +#6 := 0::int
43.6 +decl uf_1 :: (-> bv[2] int)
43.7 +#4 := bv[0:2]
43.8 +#5 := (uf_1 bv[0:2])
43.9 +#225 := (<= #5 0::int)
43.10 +#311 := (not #225)
43.11 +#20 := (:var 0 bv[2])
43.12 +#21 := (uf_1 #20)
43.13 +#640 := (pattern #21)
43.14 +#54 := (<= #21 0::int)
43.15 +#55 := (not #54)
43.16 +#641 := (forall (vars (?x1 bv[2])) (:pat #640) #55)
43.17 +#58 := (forall (vars (?x1 bv[2])) #55)
43.18 +#644 := (iff #58 #641)
43.19 +#642 := (iff #55 #55)
43.20 +#643 := [refl]: #642
43.21 +#645 := [quant-intro #643]: #644
43.22 +#113 := (~ #58 #58)
43.23 +#115 := (~ #55 #55)
43.24 +#116 := [refl]: #115
43.25 +#114 := [nnf-pos #116]: #113
43.26 +#22 := (< 0::int #21)
43.27 +#23 := (forall (vars (?x1 bv[2])) #22)
43.28 +#59 := (iff #23 #58)
43.29 +#56 := (iff #22 #55)
43.30 +#57 := [rewrite]: #56
43.31 +#60 := [quant-intro #57]: #59
43.32 +#51 := [asserted]: #23
43.33 +#61 := [mp #51 #60]: #58
43.34 +#111 := [mp~ #61 #114]: #58
43.35 +#646 := [mp #111 #645]: #641
43.36 +#227 := (not #641)
43.37 +#313 := (or #227 #311)
43.38 +#304 := [quant-inst]: #313
43.39 +#635 := [unit-resolution #304 #646]: #311
43.40 +#7 := (= #5 0::int)
43.41 +#47 := [asserted]: #7
43.42 +#638 := (not #7)
43.43 +#633 := (or #638 #225)
43.44 +#639 := [th-lemma]: #633
43.45 +[unit-resolution #639 #47 #635]: false
43.46 +unsat
44.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
44.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_02 Tue Oct 20 10:11:30 2009 +0200
44.3 @@ -0,0 +1,12 @@
44.4 +(benchmark Isabelle
44.5 +:extrasorts ( T2 T1)
44.6 +:extrafuns (
44.7 + (uf_2 T1)
44.8 + (uf_1 BitVec[4] BitVec[4] T1)
44.9 + (uf_3 T1 T2)
44.10 + (uf_4 BitVec[4])
44.11 + )
44.12 +:assumption (forall (?x1 BitVec[4]) (?x2 BitVec[4]) (iff (= (uf_1 ?x1 ?x2) uf_2) (bvule ?x1 ?x2)))
44.13 +:assumption (not (= (uf_3 (uf_1 bv0[4] uf_4)) (uf_3 uf_2)))
44.14 +:formula true
44.15 +)
45.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
45.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_02.proof Tue Oct 20 10:11:30 2009 +0200
45.3 @@ -0,0 +1,1 @@
45.4 +unsat
46.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
46.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_01 Tue Oct 20 10:11:30 2009 +0200
46.3 @@ -0,0 +1,4 @@
46.4 +(benchmark Isabelle
46.5 +:assumption (not (= bv27[4] (bvneg bv5[4])))
46.6 +:formula true
46.7 +)
47.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
47.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_01.proof Tue Oct 20 10:11:30 2009 +0200
47.3 @@ -0,0 +1,1 @@
47.4 +unsat
48.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
48.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_02 Tue Oct 20 10:11:30 2009 +0200
48.3 @@ -0,0 +1,4 @@
48.4 +(benchmark Isabelle
48.5 +:assumption (not (= bv27[4] bv11[4]))
48.6 +:formula true
48.7 +)
49.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
49.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_02.proof Tue Oct 20 10:11:30 2009 +0200
49.3 @@ -0,0 +1,1 @@
49.4 +unsat
50.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
50.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_03 Tue Oct 20 10:11:30 2009 +0200
50.3 @@ -0,0 +1,4 @@
50.4 +(benchmark Isabelle
50.5 +:assumption (not (bvult bv23[8] bv27[8]))
50.6 +:formula true
50.7 +)
51.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
51.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_03.proof Tue Oct 20 10:11:30 2009 +0200
51.3 @@ -0,0 +1,1 @@
51.4 +unsat
52.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
52.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_04 Tue Oct 20 10:11:30 2009 +0200
52.3 @@ -0,0 +1,4 @@
52.4 +(benchmark Isabelle
52.5 +:assumption (not (= (bvadd bv27[5] bv11[5]) bv6[5]))
52.6 +:formula true
52.7 +)
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
53.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_04.proof Tue Oct 20 10:11:30 2009 +0200
53.3 @@ -0,0 +1,1 @@
53.4 +unsat
54.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
54.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_05 Tue Oct 20 10:11:30 2009 +0200
54.3 @@ -0,0 +1,4 @@
54.4 +(benchmark Isabelle
54.5 +:assumption (not (= (bvmul bv7[8] bv3[8]) bv21[8]))
54.6 +:formula true
54.7 +)
55.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
55.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_05.proof Tue Oct 20 10:11:30 2009 +0200
55.3 @@ -0,0 +1,1 @@
55.4 +unsat
56.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
56.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_06 Tue Oct 20 10:11:30 2009 +0200
56.3 @@ -0,0 +1,4 @@
56.4 +(benchmark Isabelle
56.5 +:assumption (not (= (bvsub bv11[8] bv27[8]) (bvneg bv16[8])))
56.6 +:formula true
56.7 +)
57.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
57.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_06.proof Tue Oct 20 10:11:30 2009 +0200
57.3 @@ -0,0 +1,1 @@
57.4 +unsat
58.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
58.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_07 Tue Oct 20 10:11:30 2009 +0200
58.3 @@ -0,0 +1,4 @@
58.4 +(benchmark Isabelle
58.5 +:assumption (not (= (bvneg (bvneg bv11[5])) bv11[5]))
58.6 +:formula true
58.7 +)
59.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
59.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_07.proof Tue Oct 20 10:11:30 2009 +0200
59.3 @@ -0,0 +1,1 @@
59.4 +unsat
60.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
60.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_08 Tue Oct 20 10:11:30 2009 +0200
60.3 @@ -0,0 +1,4 @@
60.4 +(benchmark Isabelle
60.5 +:assumption (not (= (bvadd (bvneg bv40[7]) bv1[7]) (bvneg bv39[7])))
60.6 +:formula true
60.7 +)
61.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
61.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_08.proof Tue Oct 20 10:11:30 2009 +0200
61.3 @@ -0,0 +1,1 @@
61.4 +unsat
62.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
62.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_09 Tue Oct 20 10:11:30 2009 +0200
62.3 @@ -0,0 +1,9 @@
62.4 +(benchmark Isabelle
62.5 +:extrafuns (
62.6 + (uf_1 BitVec[32])
62.7 + (uf_2 BitVec[32])
62.8 + (uf_3 BitVec[32])
62.9 + )
62.10 +:assumption (not (= (bvsub (bvadd (bvadd uf_1 (bvmul bv2[32] uf_2)) uf_3) uf_2) (bvadd (bvadd uf_2 uf_3) uf_1)))
62.11 +:formula true
62.12 +)
63.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
63.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_09.proof Tue Oct 20 10:11:30 2009 +0200
63.3 @@ -0,0 +1,1 @@
63.4 +unsat
64.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
64.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_10 Tue Oct 20 10:11:30 2009 +0200
64.3 @@ -0,0 +1,8 @@
64.4 +(benchmark Isabelle
64.5 +:extrafuns (
64.6 + (uf_1 BitVec[4])
64.7 + )
64.8 +:assumption (= uf_1 bv5[4])
64.9 +:assumption (not (= (bvmul bv4[4] uf_1) bv4[4]))
64.10 +:formula true
64.11 +)
65.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
65.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_10.proof Tue Oct 20 10:11:30 2009 +0200
65.3 @@ -0,0 +1,1 @@
65.4 +unsat
66.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
66.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_01 Tue Oct 20 10:11:30 2009 +0200
66.3 @@ -0,0 +1,4 @@
66.4 +(benchmark Isabelle
66.5 +:assumption (not (= (bvand bv6[32] bv5[32]) bv4[32]))
66.6 +:formula true
66.7 +)
67.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
67.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_01.proof Tue Oct 20 10:11:30 2009 +0200
67.3 @@ -0,0 +1,1 @@
67.4 +unsat
68.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
68.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_02 Tue Oct 20 10:11:30 2009 +0200
68.3 @@ -0,0 +1,4 @@
68.4 +(benchmark Isabelle
68.5 +:assumption (not (= (bvor bv6[8] bv3[8]) bv7[8]))
68.6 +:formula true
68.7 +)
69.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
69.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_02.proof Tue Oct 20 10:11:30 2009 +0200
69.3 @@ -0,0 +1,1 @@
69.4 +unsat
70.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
70.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_03 Tue Oct 20 10:11:30 2009 +0200
70.3 @@ -0,0 +1,4 @@
70.4 +(benchmark Isabelle
70.5 +:assumption (not (= (bvxor bv240[8] bv255[8]) bv15[8]))
70.6 +:formula true
70.7 +)
71.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
71.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_03.proof Tue Oct 20 10:11:30 2009 +0200
71.3 @@ -0,0 +1,1 @@
71.4 +unsat
72.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
72.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_04 Tue Oct 20 10:11:30 2009 +0200
72.3 @@ -0,0 +1,4 @@
72.4 +(benchmark Isabelle
72.5 +:assumption (not (= (bvnot bv240[16]) bv65295[16]))
72.6 +:formula true
72.7 +)
73.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
73.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_04.proof Tue Oct 20 10:11:30 2009 +0200
73.3 @@ -0,0 +1,1 @@
73.4 +unsat
74.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
74.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_05 Tue Oct 20 10:11:30 2009 +0200
74.3 @@ -0,0 +1,4 @@
74.4 +(benchmark Isabelle
74.5 +:assumption (not (= (concat bv27[4] bv27[8]) bv2843[12]))
74.6 +:formula true
74.7 +)
75.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
75.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_05.proof Tue Oct 20 10:11:30 2009 +0200
75.3 @@ -0,0 +1,1 @@
75.4 +unsat
76.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
76.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_06 Tue Oct 20 10:11:30 2009 +0200
76.3 @@ -0,0 +1,4 @@
76.4 +(benchmark Isabelle
76.5 +:assumption (not (= (concat bv3[4] bv15[6]) bv207[10]))
76.6 +:formula true
76.7 +)
77.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
77.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_06.proof Tue Oct 20 10:11:30 2009 +0200
77.3 @@ -0,0 +1,1 @@
77.4 +unsat
78.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
78.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_07 Tue Oct 20 10:11:30 2009 +0200
78.3 @@ -0,0 +1,12 @@
78.4 +(benchmark Isabelle
78.5 +:extrasorts ( T1)
78.6 +:extrafuns (
78.7 + (uf_1 Int T1)
78.8 + (uf_2 T1 Int)
78.9 + )
78.10 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
78.11 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
78.12 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
78.13 +:assumption (not (= (extract[2:1] bv22[4]) bv3[2]))
78.14 +:formula true
78.15 +)
79.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
79.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_07.proof Tue Oct 20 10:11:30 2009 +0200
79.3 @@ -0,0 +1,1 @@
79.4 +unsat
80.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
80.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_08 Tue Oct 20 10:11:30 2009 +0200
80.3 @@ -0,0 +1,4 @@
80.4 +(benchmark Isabelle
80.5 +:assumption (not (= (zero_extend[6] bv10[4]) bv10[10]))
80.6 +:formula true
80.7 +)
81.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
81.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_08.proof Tue Oct 20 10:11:30 2009 +0200
81.3 @@ -0,0 +1,1 @@
81.4 +unsat
82.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
82.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_09 Tue Oct 20 10:11:30 2009 +0200
82.3 @@ -0,0 +1,4 @@
82.4 +(benchmark Isabelle
82.5 +:assumption (not (= (sign_extend[2] bv10[4]) bv58[6]))
82.6 +:formula true
82.7 +)
83.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
83.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_09.proof Tue Oct 20 10:11:30 2009 +0200
83.3 @@ -0,0 +1,1 @@
83.4 +unsat
84.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
84.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_10 Tue Oct 20 10:11:30 2009 +0200
84.3 @@ -0,0 +1,4 @@
84.4 +(benchmark Isabelle
84.5 +:assumption (not (= (bvlshr bv19[8] bv2[8]) bv4[8]))
84.6 +:formula true
84.7 +)
85.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
85.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_10.proof Tue Oct 20 10:11:30 2009 +0200
85.3 @@ -0,0 +1,1 @@
85.4 +unsat
86.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
86.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_11 Tue Oct 20 10:11:30 2009 +0200
86.3 @@ -0,0 +1,4 @@
86.4 +(benchmark Isabelle
86.5 +:assumption (not (= (bvashr bv19[8] bv2[8]) bv4[8]))
86.6 +:formula true
86.7 +)
87.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
87.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_11.proof Tue Oct 20 10:11:30 2009 +0200
87.3 @@ -0,0 +1,1 @@
87.4 +unsat
88.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
88.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_12 Tue Oct 20 10:11:30 2009 +0200
88.3 @@ -0,0 +1,12 @@
88.4 +(benchmark Isabelle
88.5 +:extrasorts ( T1)
88.6 +:extrafuns (
88.7 + (uf_1 Int T1)
88.8 + (uf_2 T1 Int)
88.9 + )
88.10 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
88.11 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
88.12 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
88.13 +:assumption (not (= (rotate_right[2] bv6[4]) bv9[4]))
88.14 +:formula true
88.15 +)
89.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
89.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_12.proof Tue Oct 20 10:11:30 2009 +0200
89.3 @@ -0,0 +1,1 @@
89.4 +unsat
90.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
90.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_13 Tue Oct 20 10:11:30 2009 +0200
90.3 @@ -0,0 +1,12 @@
90.4 +(benchmark Isabelle
90.5 +:extrasorts ( T1)
90.6 +:extrafuns (
90.7 + (uf_1 Int T1)
90.8 + (uf_2 T1 Int)
90.9 + )
90.10 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
90.11 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
90.12 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
90.13 +:assumption (not (= (rotate_left[1] bv14[4]) bv13[4]))
90.14 +:formula true
90.15 +)
91.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
91.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_13.proof Tue Oct 20 10:11:30 2009 +0200
91.3 @@ -0,0 +1,1 @@
91.4 +unsat
92.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
92.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_14 Tue Oct 20 10:11:30 2009 +0200
92.3 @@ -0,0 +1,7 @@
92.4 +(benchmark Isabelle
92.5 +:extrafuns (
92.6 + (uf_1 BitVec[16])
92.7 + )
92.8 +:assumption (not (= (bvor (bvand uf_1 bv65280[16]) (bvand uf_1 bv255[16])) uf_1))
92.9 +:formula true
92.10 +)
93.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
93.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_14.proof Tue Oct 20 10:11:30 2009 +0200
93.3 @@ -0,0 +1,1 @@
93.4 +unsat
94.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
94.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_15 Tue Oct 20 10:11:30 2009 +0200
94.3 @@ -0,0 +1,8 @@
94.4 +(benchmark Isabelle
94.5 +:extrafuns (
94.6 + (uf_1 BitVec[16])
94.7 + )
94.8 +:assumption (bvult uf_1 bv256[16])
94.9 +:assumption (not (= (bvand uf_1 bv255[16]) uf_1))
94.10 +:formula true
94.11 +)
95.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
95.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_15.proof Tue Oct 20 10:11:30 2009 +0200
95.3 @@ -0,0 +1,1 @@
95.4 +unsat
96.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
96.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_01 Tue Oct 20 10:11:30 2009 +0200
96.3 @@ -0,0 +1,8 @@
96.4 +(benchmark Isabelle
96.5 +:extrasorts ( T1)
96.6 +:extrapreds (
96.7 + (up_1 Int)
96.8 + )
96.9 +:assumption (not (forall (?x1 Int) (implies (up_1 ?x1) (forall (?x2 Int) (or (up_1 ?x1) (up_1 ?x2))))))
96.10 +:formula true
96.11 +)
97.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
97.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_01.proof Tue Oct 20 10:11:30 2009 +0200
97.3 @@ -0,0 +1,78 @@
97.4 +#2 := false
97.5 +decl up_1 :: (-> int bool)
97.6 +decl ?x1!0 :: int
97.7 +#54 := ?x1!0
97.8 +#55 := (up_1 ?x1!0)
97.9 +#58 := (not #55)
97.10 +decl ?x2!1 :: int
97.11 +#66 := ?x2!1
97.12 +#67 := (up_1 ?x2!1)
97.13 +#85 := (or #55 #67)
97.14 +#88 := (not #85)
97.15 +#91 := (and #55 #88)
97.16 +#68 := (or #67 #55)
97.17 +#69 := (not #68)
97.18 +#63 := (not #58)
97.19 +#75 := (and #63 #69)
97.20 +#92 := (iff #75 #91)
97.21 +#89 := (iff #69 #88)
97.22 +#86 := (iff #68 #85)
97.23 +#87 := [rewrite]: #86
97.24 +#90 := [monotonicity #87]: #89
97.25 +#83 := (iff #63 #55)
97.26 +#84 := [rewrite]: #83
97.27 +#93 := [monotonicity #84 #90]: #92
97.28 +#6 := (:var 1 int)
97.29 +#7 := (up_1 #6)
97.30 +#4 := (:var 0 int)
97.31 +#5 := (up_1 #4)
97.32 +#29 := (or #5 #7)
97.33 +#32 := (forall (vars (?x2 int)) #29)
97.34 +#38 := (not #5)
97.35 +#39 := (or #38 #32)
97.36 +#44 := (forall (vars (?x1 int)) #39)
97.37 +#47 := (not #44)
97.38 +#78 := (~ #47 #75)
97.39 +#56 := (or #5 #55)
97.40 +#57 := (forall (vars (?x2 int)) #56)
97.41 +#59 := (or #58 #57)
97.42 +#60 := (not #59)
97.43 +#76 := (~ #60 #75)
97.44 +#70 := (not #57)
97.45 +#71 := (~ #70 #69)
97.46 +#72 := [sk]: #71
97.47 +#64 := (~ #63 #63)
97.48 +#65 := [refl]: #64
97.49 +#77 := [nnf-neg #65 #72]: #76
97.50 +#61 := (~ #47 #60)
97.51 +#62 := [sk]: #61
97.52 +#79 := [trans #62 #77]: #78
97.53 +#8 := (or #7 #5)
97.54 +#9 := (forall (vars (?x2 int)) #8)
97.55 +#10 := (implies #5 #9)
97.56 +#11 := (forall (vars (?x1 int)) #10)
97.57 +#12 := (not #11)
97.58 +#48 := (iff #12 #47)
97.59 +#45 := (iff #11 #44)
97.60 +#42 := (iff #10 #39)
97.61 +#35 := (implies #5 #32)
97.62 +#40 := (iff #35 #39)
97.63 +#41 := [rewrite]: #40
97.64 +#36 := (iff #10 #35)
97.65 +#33 := (iff #9 #32)
97.66 +#30 := (iff #8 #29)
97.67 +#31 := [rewrite]: #30
97.68 +#34 := [quant-intro #31]: #33
97.69 +#37 := [monotonicity #34]: #36
97.70 +#43 := [trans #37 #41]: #42
97.71 +#46 := [quant-intro #43]: #45
97.72 +#49 := [monotonicity #46]: #48
97.73 +#28 := [asserted]: #12
97.74 +#52 := [mp #28 #49]: #47
97.75 +#80 := [mp~ #52 #79]: #75
97.76 +#81 := [mp #80 #93]: #91
97.77 +#94 := [and-elim #81]: #88
97.78 +#95 := [not-or-elim #94]: #58
97.79 +#82 := [and-elim #81]: #55
97.80 +[unit-resolution #82 #95]: false
97.81 +unsat
98.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
98.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_02 Tue Oct 20 10:11:30 2009 +0200
98.3 @@ -0,0 +1,14 @@
98.4 +(benchmark Isabelle
98.5 +:extrasorts ( T2 T1)
98.6 +:extrafuns (
98.7 + (uf_2 T1)
98.8 + (uf_4 T2)
98.9 + (uf_3 T1)
98.10 + )
98.11 +:extrapreds (
98.12 + (up_1 T1 T2)
98.13 + )
98.14 +:assumption (forall (?x1 T1) (?x2 T2) (iff (up_1 ?x1 ?x2) (= ?x1 uf_2)))
98.15 +:assumption (not (iff (exists (?x3 T2) (up_1 uf_3 ?x3)) (up_1 uf_3 uf_4)))
98.16 +:formula true
98.17 +)
99.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
99.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_02.proof Tue Oct 20 10:11:30 2009 +0200
99.3 @@ -0,0 +1,135 @@
99.4 +#2 := false
99.5 +decl up_1 :: (-> T1 T2 bool)
99.6 +#5 := (:var 0 T2)
99.7 +decl uf_3 :: T1
99.8 +#11 := uf_3
99.9 +#12 := (up_1 uf_3 #5)
99.10 +#560 := (pattern #12)
99.11 +#57 := (not #12)
99.12 +#561 := (forall (vars (?x3 T2)) (:pat #560) #57)
99.13 +decl uf_4 :: T2
99.14 +#14 := uf_4
99.15 +#15 := (up_1 uf_3 uf_4)
99.16 +decl uf_2 :: T1
99.17 +#7 := uf_2
99.18 +#136 := (= uf_2 uf_3)
99.19 +#543 := (iff #15 #136)
99.20 +#4 := (:var 1 T1)
99.21 +#6 := (up_1 #4 #5)
99.22 +#553 := (pattern #6)
99.23 +#8 := (= #4 uf_2)
99.24 +#9 := (iff #6 #8)
99.25 +#554 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #553) #9)
99.26 +#10 := (forall (vars (?x1 T1) (?x2 T2)) #9)
99.27 +#557 := (iff #10 #554)
99.28 +#555 := (iff #9 #9)
99.29 +#556 := [refl]: #555
99.30 +#558 := [quant-intro #556]: #557
99.31 +#47 := (~ #10 #10)
99.32 +#45 := (~ #9 #9)
99.33 +#46 := [refl]: #45
99.34 +#48 := [nnf-pos #46]: #47
99.35 +#33 := [asserted]: #10
99.36 +#49 := [mp~ #33 #48]: #10
99.37 +#559 := [mp #49 #558]: #554
99.38 +#227 := (not #554)
99.39 +#185 := (or #227 #543)
99.40 +#135 := (= uf_3 uf_2)
99.41 +#205 := (iff #15 #135)
99.42 +#528 := (or #227 #205)
99.43 +#190 := (iff #528 #185)
99.44 +#192 := (iff #185 #185)
99.45 +#530 := [rewrite]: #192
99.46 +#201 := (iff #205 #543)
99.47 +#223 := (iff #135 #136)
99.48 +#137 := [rewrite]: #223
99.49 +#544 := [monotonicity #137]: #201
99.50 +#191 := [monotonicity #544]: #190
99.51 +#531 := [trans #191 #530]: #190
99.52 +#189 := [quant-inst]: #528
99.53 +#532 := [mp #189 #531]: #185
99.54 +#539 := [unit-resolution #532 #559]: #543
99.55 +decl ?x3!0 :: T2
99.56 +#50 := ?x3!0
99.57 +#51 := (up_1 uf_3 ?x3!0)
99.58 +#224 := (iff #51 #136)
99.59 +#155 := (or #227 #224)
99.60 +#222 := (iff #51 #135)
99.61 +#228 := (or #227 #222)
99.62 +#229 := (iff #228 #155)
99.63 +#545 := (iff #155 #155)
99.64 +#547 := [rewrite]: #545
99.65 +#215 := (iff #222 #224)
99.66 +#226 := [monotonicity #137]: #215
99.67 +#208 := [monotonicity #226]: #229
99.68 +#202 := [trans #208 #547]: #229
99.69 +#225 := [quant-inst]: #228
99.70 +#334 := [mp #225 #202]: #155
99.71 +#537 := [unit-resolution #334 #559]: #224
99.72 +#541 := (not #224)
99.73 +#527 := (or #541 #136)
99.74 +#63 := (not #15)
99.75 +#540 := [hypothesis]: #63
99.76 +#68 := (or #15 #51)
99.77 +#60 := (forall (vars (?x3 T2)) #57)
99.78 +#69 := (or #63 #60)
99.79 +#76 := (and #68 #69)
99.80 +#70 := (and #69 #68)
99.81 +#77 := (iff #70 #76)
99.82 +#78 := [rewrite]: #77
99.83 +#13 := (exists (vars (?x3 T2)) #12)
99.84 +#35 := (not #13)
99.85 +#36 := (iff #15 #35)
99.86 +#71 := (~ #36 #70)
99.87 +#61 := (~ #35 #60)
99.88 +#58 := (~ #57 #57)
99.89 +#59 := [refl]: #58
99.90 +#62 := [nnf-neg #59]: #61
99.91 +#54 := (not #35)
99.92 +#55 := (~ #54 #51)
99.93 +#42 := (~ #13 #51)
99.94 +#39 := [sk]: #42
99.95 +#56 := [nnf-neg #39]: #55
99.96 +#66 := (~ #15 #15)
99.97 +#67 := [refl]: #66
99.98 +#64 := (~ #63 #63)
99.99 +#65 := [refl]: #64
99.100 +#72 := [nnf-pos #65 #67 #56 #62]: #71
99.101 +#16 := (iff #13 #15)
99.102 +#17 := (not #16)
99.103 +#37 := (iff #17 #36)
99.104 +#38 := [rewrite]: #37
99.105 +#34 := [asserted]: #17
99.106 +#41 := [mp #34 #38]: #36
99.107 +#73 := [mp~ #41 #72]: #70
99.108 +#74 := [mp #73 #78]: #76
99.109 +#75 := [and-elim #74]: #68
99.110 +#526 := [unit-resolution #75 #540]: #51
99.111 +#549 := (not #51)
99.112 +#550 := (or #541 #549 #136)
99.113 +#551 := [def-axiom]: #550
99.114 +#233 := [unit-resolution #551 #526]: #527
99.115 +#249 := [unit-resolution #233 #537]: #136
99.116 +#213 := (not #136)
99.117 +#533 := (not #543)
99.118 +#250 := (or #533 #213)
99.119 +#534 := (or #533 #15 #213)
99.120 +#529 := [def-axiom]: #534
99.121 +#251 := [unit-resolution #529 #540]: #250
99.122 +#237 := [unit-resolution #251 #249 #539]: false
99.123 +#252 := [lemma #237]: #15
99.124 +#566 := (or #63 #561)
99.125 +#567 := (iff #69 #566)
99.126 +#564 := (iff #60 #561)
99.127 +#562 := (iff #57 #57)
99.128 +#563 := [refl]: #562
99.129 +#565 := [quant-intro #563]: #564
99.130 +#568 := [monotonicity #565]: #567
99.131 +#79 := [and-elim #74]: #69
99.132 +#569 := [mp #79 #568]: #566
99.133 +#535 := [unit-resolution #569 #252]: #561
99.134 +#536 := (not #561)
99.135 +#538 := (or #536 #63)
99.136 +#176 := [quant-inst]: #538
99.137 +[unit-resolution #176 #252 #535]: false
99.138 +unsat
100.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
100.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_03 Tue Oct 20 10:11:30 2009 +0200
100.3 @@ -0,0 +1,15 @@
100.4 +(benchmark Isabelle
100.5 +:extrasorts ( T2 T1)
100.6 +:extrafuns (
100.7 + (uf_2 T1)
100.8 + (uf_3 T2)
100.9 + (uf_4 T1)
100.10 + )
100.11 +:extrapreds (
100.12 + (up_1 T1 T2)
100.13 + )
100.14 +:assumption (forall (?x1 T1) (?x2 T2) (iff (up_1 ?x1 ?x2) (= ?x1 uf_2)))
100.15 +:assumption (iff (forall (?x3 T1) (exists (?x4 T2) (up_1 ?x3 ?x4))) (forall (?x5 T1) (up_1 ?x5 uf_3)))
100.16 +:assumption (not (iff (exists (?x6 T2) (up_1 uf_4 ?x6)) (up_1 uf_4 uf_3)))
100.17 +:formula true
100.18 +)
101.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
101.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_03.proof Tue Oct 20 10:11:30 2009 +0200
101.3 @@ -0,0 +1,135 @@
101.4 +#2 := false
101.5 +decl up_1 :: (-> T1 T2 bool)
101.6 +#5 := (:var 0 T2)
101.7 +decl uf_4 :: T1
101.8 +#18 := uf_4
101.9 +#19 := (up_1 uf_4 #5)
101.10 +#635 := (pattern #19)
101.11 +#116 := (not #19)
101.12 +#636 := (forall (vars (?x6 T2)) (:pat #635) #116)
101.13 +decl uf_3 :: T2
101.14 +#14 := uf_3
101.15 +#21 := (up_1 uf_4 uf_3)
101.16 +decl uf_2 :: T1
101.17 +#7 := uf_2
101.18 +#195 := (= uf_2 uf_4)
101.19 +#602 := (iff #21 #195)
101.20 +#4 := (:var 1 T1)
101.21 +#6 := (up_1 #4 #5)
101.22 +#612 := (pattern #6)
101.23 +#8 := (= #4 uf_2)
101.24 +#9 := (iff #6 #8)
101.25 +#613 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #612) #9)
101.26 +#10 := (forall (vars (?x1 T1) (?x2 T2)) #9)
101.27 +#616 := (iff #10 #613)
101.28 +#614 := (iff #9 #9)
101.29 +#615 := [refl]: #614
101.30 +#617 := [quant-intro #615]: #616
101.31 +#56 := (~ #10 #10)
101.32 +#54 := (~ #9 #9)
101.33 +#55 := [refl]: #54
101.34 +#57 := [nnf-pos #55]: #56
101.35 +#39 := [asserted]: #10
101.36 +#58 := [mp~ #39 #57]: #10
101.37 +#618 := [mp #58 #617]: #613
101.38 +#286 := (not #613)
101.39 +#244 := (or #286 #602)
101.40 +#194 := (= uf_4 uf_2)
101.41 +#264 := (iff #21 #194)
101.42 +#587 := (or #286 #264)
101.43 +#249 := (iff #587 #244)
101.44 +#251 := (iff #244 #244)
101.45 +#589 := [rewrite]: #251
101.46 +#260 := (iff #264 #602)
101.47 +#282 := (iff #194 #195)
101.48 +#196 := [rewrite]: #282
101.49 +#603 := [monotonicity #196]: #260
101.50 +#250 := [monotonicity #603]: #249
101.51 +#590 := [trans #250 #589]: #249
101.52 +#248 := [quant-inst]: #587
101.53 +#591 := [mp #248 #590]: #244
101.54 +#598 := [unit-resolution #591 #618]: #602
101.55 +decl ?x6!3 :: T2
101.56 +#63 := ?x6!3
101.57 +#64 := (up_1 uf_4 ?x6!3)
101.58 +#283 := (iff #64 #195)
101.59 +#214 := (or #286 #283)
101.60 +#281 := (iff #64 #194)
101.61 +#287 := (or #286 #281)
101.62 +#288 := (iff #287 #214)
101.63 +#604 := (iff #214 #214)
101.64 +#606 := [rewrite]: #604
101.65 +#274 := (iff #281 #283)
101.66 +#285 := [monotonicity #196]: #274
101.67 +#267 := [monotonicity #285]: #288
101.68 +#261 := [trans #267 #606]: #288
101.69 +#284 := [quant-inst]: #287
101.70 +#393 := [mp #284 #261]: #214
101.71 +#596 := [unit-resolution #393 #618]: #283
101.72 +#600 := (not #283)
101.73 +#586 := (or #600 #195)
101.74 +#122 := (not #21)
101.75 +#599 := [hypothesis]: #122
101.76 +#127 := (or #21 #64)
101.77 +#119 := (forall (vars (?x6 T2)) #116)
101.78 +#128 := (or #122 #119)
101.79 +#135 := (and #127 #128)
101.80 +#129 := (and #128 #127)
101.81 +#136 := (iff #129 #135)
101.82 +#137 := [rewrite]: #136
101.83 +#20 := (exists (vars (?x6 T2)) #19)
101.84 +#42 := (not #20)
101.85 +#43 := (iff #21 #42)
101.86 +#130 := (~ #43 #129)
101.87 +#120 := (~ #42 #119)
101.88 +#117 := (~ #116 #116)
101.89 +#118 := [refl]: #117
101.90 +#121 := [nnf-neg #118]: #120
101.91 +#113 := (not #42)
101.92 +#114 := (~ #113 #64)
101.93 +#88 := (~ #20 #64)
101.94 +#89 := [sk]: #88
101.95 +#115 := [nnf-neg #89]: #114
101.96 +#125 := (~ #21 #21)
101.97 +#126 := [refl]: #125
101.98 +#123 := (~ #122 #122)
101.99 +#124 := [refl]: #123
101.100 +#131 := [nnf-pos #124 #126 #115 #121]: #130
101.101 +#22 := (iff #20 #21)
101.102 +#23 := (not #22)
101.103 +#44 := (iff #23 #43)
101.104 +#45 := [rewrite]: #44
101.105 +#41 := [asserted]: #23
101.106 +#48 := [mp #41 #45]: #43
101.107 +#132 := [mp~ #48 #131]: #129
101.108 +#133 := [mp #132 #137]: #135
101.109 +#134 := [and-elim #133]: #127
101.110 +#585 := [unit-resolution #134 #599]: #64
101.111 +#608 := (not #64)
101.112 +#609 := (or #600 #608 #195)
101.113 +#610 := [def-axiom]: #609
101.114 +#292 := [unit-resolution #610 #585]: #586
101.115 +#308 := [unit-resolution #292 #596]: #195
101.116 +#272 := (not #195)
101.117 +#592 := (not #602)
101.118 +#309 := (or #592 #272)
101.119 +#593 := (or #592 #21 #272)
101.120 +#588 := [def-axiom]: #593
101.121 +#310 := [unit-resolution #588 #599]: #309
101.122 +#296 := [unit-resolution #310 #308 #598]: false
101.123 +#311 := [lemma #296]: #21
101.124 +#641 := (or #122 #636)
101.125 +#642 := (iff #128 #641)
101.126 +#639 := (iff #119 #636)
101.127 +#637 := (iff #116 #116)
101.128 +#638 := [refl]: #637
101.129 +#640 := [quant-intro #638]: #639
101.130 +#643 := [monotonicity #640]: #642
101.131 +#138 := [and-elim #133]: #128
101.132 +#644 := [mp #138 #643]: #641
101.133 +#594 := [unit-resolution #644 #311]: #636
101.134 +#595 := (not #636)
101.135 +#597 := (or #595 #122)
101.136 +#235 := [quant-inst]: #597
101.137 +[unit-resolution #235 #311 #594]: false
101.138 +unsat
102.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
102.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_04 Tue Oct 20 10:11:30 2009 +0200
102.3 @@ -0,0 +1,13 @@
102.4 +(benchmark Isabelle
102.5 +:extrasorts ( T1 T2)
102.6 +:extrafuns (
102.7 + (uf_2 T1)
102.8 + (uf_3 T1)
102.9 + )
102.10 +:extrapreds (
102.11 + (up_1 T1)
102.12 + )
102.13 +:assumption (if_then_else (up_1 uf_2) (not (exists (?x1 T1) (up_1 ?x1))) (forall (?x2 T1) (not (up_1 ?x2))))
102.14 +:assumption (not (implies (up_1 uf_2) (up_1 uf_3)))
102.15 +:formula true
102.16 +)
103.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
103.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_04.proof Tue Oct 20 10:11:30 2009 +0200
103.3 @@ -0,0 +1,56 @@
103.4 +#2 := false
103.5 +decl up_1 :: (-> T1 bool)
103.6 +decl uf_2 :: T1
103.7 +#4 := uf_2
103.8 +#5 := (up_1 uf_2)
103.9 +decl uf_3 :: T1
103.10 +#13 := uf_3
103.11 +#14 := (up_1 uf_3)
103.12 +#34 := (not #5)
103.13 +#35 := (or #34 #14)
103.14 +#38 := (not #35)
103.15 +#15 := (implies #5 #14)
103.16 +#16 := (not #15)
103.17 +#39 := (iff #16 #38)
103.18 +#36 := (iff #15 #35)
103.19 +#37 := [rewrite]: #36
103.20 +#40 := [monotonicity #37]: #39
103.21 +#33 := [asserted]: #16
103.22 +#43 := [mp #33 #40]: #38
103.23 +#41 := [not-or-elim #43]: #5
103.24 +#6 := (:var 0 T1)
103.25 +#7 := (up_1 #6)
103.26 +#536 := (pattern #7)
103.27 +#10 := (not #7)
103.28 +#537 := (forall (vars (?x2 T1)) (:pat #536) #10)
103.29 +#11 := (forall (vars (?x2 T1)) #10)
103.30 +#540 := (iff #11 #537)
103.31 +#538 := (iff #10 #10)
103.32 +#539 := [refl]: #538
103.33 +#541 := [quant-intro #539]: #540
103.34 +#8 := (exists (vars (?x1 T1)) #7)
103.35 +#9 := (not #8)
103.36 +#45 := (~ #9 #11)
103.37 +#50 := (~ #10 #10)
103.38 +#51 := [refl]: #50
103.39 +#59 := [nnf-neg #51]: #45
103.40 +#12 := (ite #5 #9 #11)
103.41 +#57 := (iff #12 #9)
103.42 +#1 := true
103.43 +#52 := (ite true #9 #11)
103.44 +#55 := (iff #52 #9)
103.45 +#56 := [rewrite]: #55
103.46 +#53 := (iff #12 #52)
103.47 +#48 := (iff #5 true)
103.48 +#49 := [iff-true #41]: #48
103.49 +#54 := [monotonicity #49]: #53
103.50 +#58 := [trans #54 #56]: #57
103.51 +#32 := [asserted]: #12
103.52 +#47 := [mp #32 #58]: #9
103.53 +#60 := [mp~ #47 #59]: #11
103.54 +#542 := [mp #60 #541]: #537
103.55 +#119 := (not #537)
103.56 +#206 := (or #119 #34)
103.57 +#120 := [quant-inst]: #206
103.58 +[unit-resolution #120 #542 #41]: false
103.59 +unsat
104.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
104.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_01 Tue Oct 20 10:11:30 2009 +0200
104.3 @@ -0,0 +1,18 @@
104.4 +(benchmark Isabelle
104.5 +:extrasorts ( T2 T3 T1)
104.6 +:extrafuns (
104.7 + (uf_2 T1 T2 T3 T1)
104.8 + (uf_1 T1 T2 T3)
104.9 + (uf_6 T1)
104.10 + (uf_3 T2)
104.11 + (uf_4 T2)
104.12 + (uf_5 T2)
104.13 + (uf_7 T3)
104.14 + (uf_8 T3)
104.15 + )
104.16 +:assumption (forall (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2) (= (uf_1 (uf_2 ?x1 ?x2 ?x3) ?x4) (ite (= ?x4 ?x2) ?x3 (uf_1 ?x1 ?x4))))
104.17 +:assumption (forall (?x5 T1) (?x6 T2) (?x7 T3) (= (uf_1 (uf_2 ?x5 ?x6 ?x7) ?x6) ?x7))
104.18 +:assumption (and (not (= uf_3 uf_4)) (not (= uf_3 uf_5)))
104.19 +:assumption (not (= (uf_1 (uf_2 (uf_2 uf_6 uf_4 uf_7) uf_5 uf_8) uf_3) (uf_1 uf_6 uf_3)))
104.20 +:formula true
104.21 +)
105.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
105.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_01.proof Tue Oct 20 10:11:30 2009 +0200
105.3 @@ -0,0 +1,181 @@
105.4 +#2 := false
105.5 +decl uf_1 :: (-> T1 T2 T3)
105.6 +decl uf_3 :: T2
105.7 +#22 := uf_3
105.8 +decl uf_6 :: T1
105.9 +#30 := uf_6
105.10 +#36 := (uf_1 uf_6 uf_3)
105.11 +decl uf_2 :: (-> T1 T2 T3 T1)
105.12 +decl uf_8 :: T3
105.13 +#33 := uf_8
105.14 +decl uf_5 :: T2
105.15 +#26 := uf_5
105.16 +decl uf_7 :: T3
105.17 +#31 := uf_7
105.18 +decl uf_4 :: T2
105.19 +#23 := uf_4
105.20 +#32 := (uf_2 uf_6 uf_4 uf_7)
105.21 +#34 := (uf_2 #32 uf_5 uf_8)
105.22 +#35 := (uf_1 #34 uf_3)
105.23 +#37 := (= #35 #36)
105.24 +#223 := (uf_1 #32 uf_4)
105.25 +#214 := (uf_2 uf_6 uf_4 #223)
105.26 +#552 := (uf_1 #214 uf_3)
105.27 +#555 := (= #552 #36)
105.28 +#560 := (= #36 #552)
105.29 +#556 := (= #223 #552)
105.30 +#24 := (= uf_3 uf_4)
105.31 +#561 := (ite #24 #556 #560)
105.32 +#8 := (:var 0 T2)
105.33 +#6 := (:var 1 T3)
105.34 +#5 := (:var 2 T2)
105.35 +#4 := (:var 3 T1)
105.36 +#7 := (uf_2 #4 #5 #6)
105.37 +#9 := (uf_1 #7 #8)
105.38 +#575 := (pattern #9)
105.39 +#11 := (uf_1 #4 #8)
105.40 +#100 := (= #9 #11)
105.41 +#99 := (= #6 #9)
105.42 +#55 := (= #5 #8)
105.43 +#83 := (ite #55 #99 #100)
105.44 +#576 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) (:pat #575) #83)
105.45 +#90 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #83)
105.46 +#579 := (iff #90 #576)
105.47 +#577 := (iff #83 #83)
105.48 +#578 := [refl]: #577
105.49 +#580 := [quant-intro #578]: #579
105.50 +#58 := (ite #55 #6 #11)
105.51 +#61 := (= #9 #58)
105.52 +#64 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #61)
105.53 +#87 := (iff #64 #90)
105.54 +#84 := (iff #61 #83)
105.55 +#89 := [rewrite]: #84
105.56 +#88 := [quant-intro #89]: #87
105.57 +#93 := (~ #64 #64)
105.58 +#91 := (~ #61 #61)
105.59 +#92 := [refl]: #91
105.60 +#94 := [nnf-pos #92]: #93
105.61 +#10 := (= #8 #5)
105.62 +#12 := (ite #10 #6 #11)
105.63 +#13 := (= #9 #12)
105.64 +#14 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #13)
105.65 +#65 := (iff #14 #64)
105.66 +#62 := (iff #13 #61)
105.67 +#59 := (= #12 #58)
105.68 +#56 := (iff #10 #55)
105.69 +#57 := [rewrite]: #56
105.70 +#60 := [monotonicity #57]: #59
105.71 +#63 := [monotonicity #60]: #62
105.72 +#66 := [quant-intro #63]: #65
105.73 +#54 := [asserted]: #14
105.74 +#69 := [mp #54 #66]: #64
105.75 +#95 := [mp~ #69 #94]: #64
105.76 +#85 := [mp #95 #88]: #90
105.77 +#581 := [mp #85 #580]: #576
105.78 +#250 := (not #576)
105.79 +#548 := (or #250 #561)
105.80 +#551 := (= uf_4 uf_3)
105.81 +#557 := (ite #551 #556 #555)
105.82 +#549 := (or #250 #557)
105.83 +#271 := (iff #549 #548)
105.84 +#273 := (iff #548 #548)
105.85 +#259 := [rewrite]: #273
105.86 +#559 := (iff #557 #561)
105.87 +#198 := (iff #555 #560)
105.88 +#199 := [rewrite]: #198
105.89 +#193 := (iff #551 #24)
105.90 +#558 := [rewrite]: #193
105.91 +#562 := [monotonicity #558 #199]: #559
105.92 +#272 := [monotonicity #562]: #271
105.93 +#274 := [trans #272 #259]: #271
105.94 +#255 := [quant-inst]: #549
105.95 +#165 := [mp #255 #274]: #548
105.96 +#510 := [unit-resolution #165 #581]: #561
105.97 +#544 := (not #561)
105.98 +#497 := (or #544 #560)
105.99 +#25 := (not #24)
105.100 +#27 := (= uf_3 uf_5)
105.101 +#28 := (not #27)
105.102 +#29 := (and #25 #28)
105.103 +#75 := [asserted]: #29
105.104 +#79 := [and-elim #75]: #25
105.105 +#268 := (or #544 #24 #560)
105.106 +#542 := [def-axiom]: #268
105.107 +#499 := [unit-resolution #542 #79]: #497
105.108 +#491 := [unit-resolution #499 #510]: #560
105.109 +#493 := [symm #491]: #555
105.110 +#494 := (= #35 #552)
105.111 +#157 := (uf_1 #32 uf_3)
105.112 +#503 := (= #157 #552)
105.113 +#502 := (= #552 #157)
105.114 +#509 := (= #214 #32)
105.115 +#415 := (= #223 uf_7)
105.116 +#566 := (= uf_7 #223)
105.117 +#17 := (:var 0 T3)
105.118 +#16 := (:var 1 T2)
105.119 +#15 := (:var 2 T1)
105.120 +#18 := (uf_2 #15 #16 #17)
105.121 +#582 := (pattern #18)
105.122 +#19 := (uf_1 #18 #16)
105.123 +#68 := (= #17 #19)
105.124 +#584 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) (:pat #582) #68)
105.125 +#72 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #68)
105.126 +#583 := (iff #72 #584)
105.127 +#586 := (iff #584 #584)
105.128 +#587 := [rewrite]: #586
105.129 +#585 := [rewrite]: #583
105.130 +#588 := [trans #585 #587]: #583
105.131 +#82 := (~ #72 #72)
105.132 +#96 := (~ #68 #68)
105.133 +#97 := [refl]: #96
105.134 +#78 := [nnf-pos #97]: #82
105.135 +#20 := (= #19 #17)
105.136 +#21 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #20)
105.137 +#73 := (iff #21 #72)
105.138 +#70 := (iff #20 #68)
105.139 +#71 := [rewrite]: #70
105.140 +#74 := [quant-intro #71]: #73
105.141 +#67 := [asserted]: #21
105.142 +#77 := [mp #67 #74]: #72
105.143 +#98 := [mp~ #77 #78]: #72
105.144 +#589 := [mp #98 #588]: #584
105.145 +#211 := (not #584)
105.146 +#212 := (or #211 #566)
105.147 +#213 := [quant-inst]: #212
105.148 +#414 := [unit-resolution #213 #589]: #566
105.149 +#416 := [symm #414]: #415
105.150 +#506 := [monotonicity #416]: #509
105.151 +#498 := [monotonicity #506]: #502
105.152 +#492 := [symm #498]: #503
105.153 +#244 := (= #35 #157)
105.154 +#158 := (= uf_8 #35)
105.155 +#248 := (ite #27 #158 #244)
105.156 +#247 := (or #250 #248)
105.157 +#245 := (= uf_5 uf_3)
105.158 +#159 := (ite #245 #158 #244)
105.159 +#251 := (or #250 #159)
105.160 +#567 := (iff #251 #247)
105.161 +#224 := (iff #247 #247)
105.162 +#356 := [rewrite]: #224
105.163 +#249 := (iff #159 #248)
105.164 +#246 := (iff #245 #27)
105.165 +#237 := [rewrite]: #246
105.166 +#177 := [monotonicity #237]: #249
105.167 +#569 := [monotonicity #177]: #567
105.168 +#563 := [trans #569 #356]: #567
105.169 +#230 := [quant-inst]: #251
105.170 +#235 := [mp #230 #563]: #247
105.171 +#488 := [unit-resolution #235 #581]: #248
105.172 +#236 := (not #248)
105.173 +#490 := (or #236 #244)
105.174 +#80 := [and-elim #75]: #28
105.175 +#572 := (or #236 #27 #244)
105.176 +#573 := [def-axiom]: #572
105.177 +#500 := [unit-resolution #573 #80]: #490
105.178 +#501 := [unit-resolution #500 #488]: #244
105.179 +#495 := [trans #501 #492]: #494
105.180 +#489 := [trans #495 #493]: #37
105.181 +#38 := (not #37)
105.182 +#76 := [asserted]: #38
105.183 +[unit-resolution #76 #489]: false
105.184 +unsat
106.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
106.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_02 Tue Oct 20 10:11:30 2009 +0200
106.3 @@ -0,0 +1,13 @@
106.4 +(benchmark Isabelle
106.5 +:extrasorts ( T2 T1 T3)
106.6 +:extrafuns (
106.7 + (uf_2 T1)
106.8 + (uf_3 T2)
106.9 + )
106.10 +:extrapreds (
106.11 + (up_4 T1 T2)
106.12 + (up_1 T1 T2)
106.13 + )
106.14 +:assumption (not (or (iff (up_1 uf_2 uf_3) (and (up_4 uf_2 uf_3) true)) (or (iff (up_1 uf_2 uf_3) true) (iff (up_4 uf_2 uf_3) true))))
106.15 +:formula true
106.16 +)
107.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
107.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_02.proof Tue Oct 20 10:11:30 2009 +0200
107.3 @@ -0,0 +1,62 @@
107.4 +#2 := false
107.5 +decl up_4 :: (-> T1 T2 bool)
107.6 +decl uf_3 :: T2
107.7 +#5 := uf_3
107.8 +decl uf_2 :: T1
107.9 +#4 := uf_2
107.10 +#7 := (up_4 uf_2 uf_3)
107.11 +#60 := (not #7)
107.12 +decl up_1 :: (-> T1 T2 bool)
107.13 +#6 := (up_1 uf_2 uf_3)
107.14 +#33 := (iff #6 #7)
107.15 +#49 := (or #6 #7 #33)
107.16 +#52 := (not #49)
107.17 +#1 := true
107.18 +#11 := (iff #7 true)
107.19 +#10 := (iff #6 true)
107.20 +#12 := (or #10 #11)
107.21 +#8 := (and #7 true)
107.22 +#9 := (iff #6 #8)
107.23 +#13 := (or #9 #12)
107.24 +#14 := (not #13)
107.25 +#55 := (iff #14 #52)
107.26 +#40 := (or #6 #7)
107.27 +#43 := (or #33 #40)
107.28 +#46 := (not #43)
107.29 +#53 := (iff #46 #52)
107.30 +#50 := (iff #43 #49)
107.31 +#51 := [rewrite]: #50
107.32 +#54 := [monotonicity #51]: #53
107.33 +#47 := (iff #14 #46)
107.34 +#44 := (iff #13 #43)
107.35 +#41 := (iff #12 #40)
107.36 +#38 := (iff #11 #7)
107.37 +#39 := [rewrite]: #38
107.38 +#36 := (iff #10 #6)
107.39 +#37 := [rewrite]: #36
107.40 +#42 := [monotonicity #37 #39]: #41
107.41 +#34 := (iff #9 #33)
107.42 +#31 := (iff #8 #7)
107.43 +#32 := [rewrite]: #31
107.44 +#35 := [monotonicity #32]: #34
107.45 +#45 := [monotonicity #35 #42]: #44
107.46 +#48 := [monotonicity #45]: #47
107.47 +#56 := [trans #48 #54]: #55
107.48 +#30 := [asserted]: #14
107.49 +#57 := [mp #30 #56]: #52
107.50 +#61 := [not-or-elim #57]: #60
107.51 +#58 := (not #6)
107.52 +#59 := [not-or-elim #57]: #58
107.53 +#72 := (or #7 #6)
107.54 +#66 := (iff #7 #58)
107.55 +#62 := (not #33)
107.56 +#64 := (iff #62 #66)
107.57 +#67 := [rewrite]: #64
107.58 +#63 := [not-or-elim #57]: #62
107.59 +#68 := [mp #63 #67]: #66
107.60 +#69 := (not #66)
107.61 +#70 := (or #7 #6 #69)
107.62 +#71 := [def-axiom]: #70
107.63 +#73 := [unit-resolution #71 #68]: #72
107.64 +[unit-resolution #73 #59 #61]: false
107.65 +unsat
108.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
108.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_03 Tue Oct 20 10:11:30 2009 +0200
108.3 @@ -0,0 +1,13 @@
108.4 +(benchmark Isabelle
108.5 +:extrasorts ( T1 T2)
108.6 +:extrafuns (
108.7 + (uf_3 T2)
108.8 + (uf_1 T1 T1)
108.9 + (uf_2 T2 T2)
108.10 + (uf_4 T1)
108.11 + )
108.12 +:assumption (forall (?x1 T1) (= (uf_1 ?x1) ?x1))
108.13 +:assumption (forall (?x2 T2) (iff (= (uf_2 ?x2) uf_3) (= ?x2 uf_3)))
108.14 +:assumption (not (and (= (uf_1 uf_4) uf_4) (iff (= (uf_2 uf_3) uf_3) true)))
108.15 +:formula true
108.16 +)
109.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
109.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_03.proof Tue Oct 20 10:11:30 2009 +0200
109.3 @@ -0,0 +1,120 @@
109.4 +#2 := false
109.5 +decl uf_1 :: (-> T1 T1)
109.6 +decl uf_4 :: T1
109.7 +#15 := uf_4
109.8 +#16 := (uf_1 uf_4)
109.9 +#48 := (= uf_4 #16)
109.10 +#83 := (not #48)
109.11 +decl uf_2 :: (-> T2 T2)
109.12 +decl uf_3 :: T2
109.13 +#10 := uf_3
109.14 +#18 := (uf_2 uf_3)
109.15 +#51 := (= uf_3 #18)
109.16 +#84 := (not #51)
109.17 +#556 := [hypothesis]: #84
109.18 +#8 := (:var 0 T2)
109.19 +#9 := (uf_2 #8)
109.20 +#575 := (pattern #9)
109.21 +#12 := (= #8 uf_3)
109.22 +#11 := (= #9 uf_3)
109.23 +#13 := (iff #11 #12)
109.24 +#576 := (forall (vars (?x2 T2)) (:pat #575) #13)
109.25 +#14 := (forall (vars (?x2 T2)) #13)
109.26 +#579 := (iff #14 #576)
109.27 +#577 := (iff #13 #13)
109.28 +#578 := [refl]: #577
109.29 +#580 := [quant-intro #578]: #579
109.30 +#70 := (~ #14 #14)
109.31 +#80 := (~ #13 #13)
109.32 +#81 := [refl]: #80
109.33 +#67 := [nnf-pos #81]: #70
109.34 +#45 := [asserted]: #14
109.35 +#82 := [mp~ #45 #67]: #14
109.36 +#581 := [mp #82 #580]: #576
109.37 +#242 := (not #576)
109.38 +#170 := (or #242 #51)
109.39 +#150 := (= uf_3 uf_3)
109.40 +#19 := (= #18 uf_3)
109.41 +#237 := (iff #19 #150)
109.42 +#243 := (or #242 #237)
109.43 +#244 := (iff #243 #170)
109.44 +#560 := (iff #170 #170)
109.45 +#562 := [rewrite]: #560
109.46 +#230 := (iff #237 #51)
109.47 +#1 := true
109.48 +#54 := (iff #51 true)
109.49 +#57 := (iff #54 #51)
109.50 +#58 := [rewrite]: #57
109.51 +#152 := (iff #237 #54)
109.52 +#151 := (iff #150 true)
109.53 +#238 := [rewrite]: #151
109.54 +#52 := (iff #19 #51)
109.55 +#53 := [rewrite]: #52
109.56 +#239 := [monotonicity #53 #238]: #152
109.57 +#241 := [trans #239 #58]: #230
109.58 +#223 := [monotonicity #241]: #244
109.59 +#217 := [trans #223 #562]: #244
109.60 +#240 := [quant-inst]: #243
109.61 +#349 := [mp #240 #217]: #170
109.62 +#228 := [unit-resolution #349 #581 #556]: false
109.63 +#229 := [lemma #228]: #51
109.64 +#71 := (or #83 #84)
109.65 +#61 := (and #48 #51)
109.66 +#64 := (not #61)
109.67 +#90 := (iff #64 #71)
109.68 +#72 := (not #71)
109.69 +#85 := (not #72)
109.70 +#88 := (iff #85 #71)
109.71 +#89 := [rewrite]: #88
109.72 +#86 := (iff #64 #85)
109.73 +#73 := (iff #61 #72)
109.74 +#74 := [rewrite]: #73
109.75 +#87 := [monotonicity #74]: #86
109.76 +#91 := [trans #87 #89]: #90
109.77 +#20 := (iff #19 true)
109.78 +#17 := (= #16 uf_4)
109.79 +#21 := (and #17 #20)
109.80 +#22 := (not #21)
109.81 +#65 := (iff #22 #64)
109.82 +#62 := (iff #21 #61)
109.83 +#59 := (iff #20 #51)
109.84 +#55 := (iff #20 #54)
109.85 +#56 := [monotonicity #53]: #55
109.86 +#60 := [trans #56 #58]: #59
109.87 +#49 := (iff #17 #48)
109.88 +#50 := [rewrite]: #49
109.89 +#63 := [monotonicity #50 #60]: #62
109.90 +#66 := [monotonicity #63]: #65
109.91 +#46 := [asserted]: #22
109.92 +#69 := [mp #46 #66]: #64
109.93 +#92 := [mp #69 #91]: #71
109.94 +#563 := [unit-resolution #92 #229]: #83
109.95 +#4 := (:var 0 T1)
109.96 +#5 := (uf_1 #4)
109.97 +#568 := (pattern #5)
109.98 +#39 := (= #4 #5)
109.99 +#569 := (forall (vars (?x1 T1)) (:pat #568) #39)
109.100 +#42 := (forall (vars (?x1 T1)) #39)
109.101 +#572 := (iff #42 #569)
109.102 +#570 := (iff #39 #39)
109.103 +#571 := [refl]: #570
109.104 +#573 := [quant-intro #571]: #572
109.105 +#77 := (~ #42 #42)
109.106 +#75 := (~ #39 #39)
109.107 +#76 := [refl]: #75
109.108 +#78 := [nnf-pos #76]: #77
109.109 +#6 := (= #5 #4)
109.110 +#7 := (forall (vars (?x1 T1)) #6)
109.111 +#43 := (iff #7 #42)
109.112 +#40 := (iff #6 #39)
109.113 +#41 := [rewrite]: #40
109.114 +#44 := [quant-intro #41]: #43
109.115 +#38 := [asserted]: #7
109.116 +#47 := [mp #38 #44]: #42
109.117 +#79 := [mp~ #47 #78]: #42
109.118 +#574 := [mp #79 #573]: #569
109.119 +#565 := (not #569)
109.120 +#566 := (or #565 #48)
109.121 +#561 := [quant-inst]: #566
109.122 +[unit-resolution #561 #574 #563]: false
109.123 +unsat
110.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
110.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_04 Tue Oct 20 10:11:30 2009 +0200
110.3 @@ -0,0 +1,18 @@
110.4 +(benchmark Isabelle
110.5 +:extrasorts ( T2 T3 T1)
110.6 +:extrafuns (
110.7 + (uf_2 T1 T2 T3 T1)
110.8 + (uf_1 T1 T2 T3)
110.9 + (uf_6 T1)
110.10 + (uf_3 T2)
110.11 + (uf_4 T2)
110.12 + (uf_5 T2)
110.13 + (uf_7 T3)
110.14 + (uf_8 T3)
110.15 + )
110.16 +:assumption (forall (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2) (= (uf_1 (uf_2 ?x1 ?x2 ?x3) ?x4) (ite (= ?x4 ?x2) ?x3 (uf_1 ?x1 ?x4))))
110.17 +:assumption (forall (?x5 T1) (?x6 T2) (?x7 T3) (= (uf_1 (uf_2 ?x5 ?x6 ?x7) ?x6) ?x7))
110.18 +:assumption (and (not (= uf_3 uf_4)) (not (= uf_3 uf_5)))
110.19 +:assumption (not (= (uf_1 (uf_2 (uf_2 uf_6 uf_4 uf_7) uf_5 uf_8) uf_3) (uf_1 uf_6 uf_3)))
110.20 +:formula true
110.21 +)
111.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
111.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_04.proof Tue Oct 20 10:11:30 2009 +0200
111.3 @@ -0,0 +1,181 @@
111.4 +#2 := false
111.5 +decl uf_1 :: (-> T1 T2 T3)
111.6 +decl uf_3 :: T2
111.7 +#22 := uf_3
111.8 +decl uf_6 :: T1
111.9 +#30 := uf_6
111.10 +#36 := (uf_1 uf_6 uf_3)
111.11 +decl uf_2 :: (-> T1 T2 T3 T1)
111.12 +decl uf_8 :: T3
111.13 +#33 := uf_8
111.14 +decl uf_5 :: T2
111.15 +#26 := uf_5
111.16 +decl uf_7 :: T3
111.17 +#31 := uf_7
111.18 +decl uf_4 :: T2
111.19 +#23 := uf_4
111.20 +#32 := (uf_2 uf_6 uf_4 uf_7)
111.21 +#34 := (uf_2 #32 uf_5 uf_8)
111.22 +#35 := (uf_1 #34 uf_3)
111.23 +#37 := (= #35 #36)
111.24 +#223 := (uf_1 #32 uf_4)
111.25 +#214 := (uf_2 uf_6 uf_4 #223)
111.26 +#552 := (uf_1 #214 uf_3)
111.27 +#555 := (= #552 #36)
111.28 +#560 := (= #36 #552)
111.29 +#556 := (= #223 #552)
111.30 +#24 := (= uf_3 uf_4)
111.31 +#561 := (ite #24 #556 #560)
111.32 +#8 := (:var 0 T2)
111.33 +#6 := (:var 1 T3)
111.34 +#5 := (:var 2 T2)
111.35 +#4 := (:var 3 T1)
111.36 +#7 := (uf_2 #4 #5 #6)
111.37 +#9 := (uf_1 #7 #8)
111.38 +#575 := (pattern #9)
111.39 +#11 := (uf_1 #4 #8)
111.40 +#100 := (= #9 #11)
111.41 +#99 := (= #6 #9)
111.42 +#55 := (= #5 #8)
111.43 +#83 := (ite #55 #99 #100)
111.44 +#576 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) (:pat #575) #83)
111.45 +#90 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #83)
111.46 +#579 := (iff #90 #576)
111.47 +#577 := (iff #83 #83)
111.48 +#578 := [refl]: #577
111.49 +#580 := [quant-intro #578]: #579
111.50 +#58 := (ite #55 #6 #11)
111.51 +#61 := (= #9 #58)
111.52 +#64 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #61)
111.53 +#87 := (iff #64 #90)
111.54 +#84 := (iff #61 #83)
111.55 +#89 := [rewrite]: #84
111.56 +#88 := [quant-intro #89]: #87
111.57 +#93 := (~ #64 #64)
111.58 +#91 := (~ #61 #61)
111.59 +#92 := [refl]: #91
111.60 +#94 := [nnf-pos #92]: #93
111.61 +#10 := (= #8 #5)
111.62 +#12 := (ite #10 #6 #11)
111.63 +#13 := (= #9 #12)
111.64 +#14 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #13)
111.65 +#65 := (iff #14 #64)
111.66 +#62 := (iff #13 #61)
111.67 +#59 := (= #12 #58)
111.68 +#56 := (iff #10 #55)
111.69 +#57 := [rewrite]: #56
111.70 +#60 := [monotonicity #57]: #59
111.71 +#63 := [monotonicity #60]: #62
111.72 +#66 := [quant-intro #63]: #65
111.73 +#54 := [asserted]: #14
111.74 +#69 := [mp #54 #66]: #64
111.75 +#95 := [mp~ #69 #94]: #64
111.76 +#85 := [mp #95 #88]: #90
111.77 +#581 := [mp #85 #580]: #576
111.78 +#250 := (not #576)
111.79 +#548 := (or #250 #561)
111.80 +#551 := (= uf_4 uf_3)
111.81 +#557 := (ite #551 #556 #555)
111.82 +#549 := (or #250 #557)
111.83 +#271 := (iff #549 #548)
111.84 +#273 := (iff #548 #548)
111.85 +#259 := [rewrite]: #273
111.86 +#559 := (iff #557 #561)
111.87 +#198 := (iff #555 #560)
111.88 +#199 := [rewrite]: #198
111.89 +#193 := (iff #551 #24)
111.90 +#558 := [rewrite]: #193
111.91 +#562 := [monotonicity #558 #199]: #559
111.92 +#272 := [monotonicity #562]: #271
111.93 +#274 := [trans #272 #259]: #271
111.94 +#255 := [quant-inst]: #549
111.95 +#165 := [mp #255 #274]: #548
111.96 +#510 := [unit-resolution #165 #581]: #561
111.97 +#544 := (not #561)
111.98 +#497 := (or #544 #560)
111.99 +#25 := (not #24)
111.100 +#27 := (= uf_3 uf_5)
111.101 +#28 := (not #27)
111.102 +#29 := (and #25 #28)
111.103 +#75 := [asserted]: #29
111.104 +#79 := [and-elim #75]: #25
111.105 +#268 := (or #544 #24 #560)
111.106 +#542 := [def-axiom]: #268
111.107 +#499 := [unit-resolution #542 #79]: #497
111.108 +#491 := [unit-resolution #499 #510]: #560
111.109 +#493 := [symm #491]: #555
111.110 +#494 := (= #35 #552)
111.111 +#157 := (uf_1 #32 uf_3)
111.112 +#503 := (= #157 #552)
111.113 +#502 := (= #552 #157)
111.114 +#509 := (= #214 #32)
111.115 +#415 := (= #223 uf_7)
111.116 +#566 := (= uf_7 #223)
111.117 +#17 := (:var 0 T3)
111.118 +#16 := (:var 1 T2)
111.119 +#15 := (:var 2 T1)
111.120 +#18 := (uf_2 #15 #16 #17)
111.121 +#582 := (pattern #18)
111.122 +#19 := (uf_1 #18 #16)
111.123 +#68 := (= #17 #19)
111.124 +#584 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) (:pat #582) #68)
111.125 +#72 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #68)
111.126 +#583 := (iff #72 #584)
111.127 +#586 := (iff #584 #584)
111.128 +#587 := [rewrite]: #586
111.129 +#585 := [rewrite]: #583
111.130 +#588 := [trans #585 #587]: #583
111.131 +#82 := (~ #72 #72)
111.132 +#96 := (~ #68 #68)
111.133 +#97 := [refl]: #96
111.134 +#78 := [nnf-pos #97]: #82
111.135 +#20 := (= #19 #17)
111.136 +#21 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #20)
111.137 +#73 := (iff #21 #72)
111.138 +#70 := (iff #20 #68)
111.139 +#71 := [rewrite]: #70
111.140 +#74 := [quant-intro #71]: #73
111.141 +#67 := [asserted]: #21
111.142 +#77 := [mp #67 #74]: #72
111.143 +#98 := [mp~ #77 #78]: #72
111.144 +#589 := [mp #98 #588]: #584
111.145 +#211 := (not #584)
111.146 +#212 := (or #211 #566)
111.147 +#213 := [quant-inst]: #212
111.148 +#414 := [unit-resolution #213 #589]: #566
111.149 +#416 := [symm #414]: #415
111.150 +#506 := [monotonicity #416]: #509
111.151 +#498 := [monotonicity #506]: #502
111.152 +#492 := [symm #498]: #503
111.153 +#244 := (= #35 #157)
111.154 +#158 := (= uf_8 #35)
111.155 +#248 := (ite #27 #158 #244)
111.156 +#247 := (or #250 #248)
111.157 +#245 := (= uf_5 uf_3)
111.158 +#159 := (ite #245 #158 #244)
111.159 +#251 := (or #250 #159)
111.160 +#567 := (iff #251 #247)
111.161 +#224 := (iff #247 #247)
111.162 +#356 := [rewrite]: #224
111.163 +#249 := (iff #159 #248)
111.164 +#246 := (iff #245 #27)
111.165 +#237 := [rewrite]: #246
111.166 +#177 := [monotonicity #237]: #249
111.167 +#569 := [monotonicity #177]: #567
111.168 +#563 := [trans #569 #356]: #567
111.169 +#230 := [quant-inst]: #251
111.170 +#235 := [mp #230 #563]: #247
111.171 +#488 := [unit-resolution #235 #581]: #248
111.172 +#236 := (not #248)
111.173 +#490 := (or #236 #244)
111.174 +#80 := [and-elim #75]: #28
111.175 +#572 := (or #236 #27 #244)
111.176 +#573 := [def-axiom]: #572
111.177 +#500 := [unit-resolution #573 #80]: #490
111.178 +#501 := [unit-resolution #500 #488]: #244
111.179 +#495 := [trans #501 #492]: #494
111.180 +#489 := [trans #495 #493]: #37
111.181 +#38 := (not #37)
111.182 +#76 := [asserted]: #38
111.183 +[unit-resolution #76 #489]: false
111.184 +unsat
112.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
112.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_05 Tue Oct 20 10:11:30 2009 +0200
112.3 @@ -0,0 +1,20 @@
112.4 +(benchmark Isabelle
112.5 +:extrasorts ( T1 T2 T3)
112.6 +:extrafuns (
112.7 + (uf_6 Int T2)
112.8 + (uf_1 T1 T3 T3)
112.9 + (uf_4 T3)
112.10 + (uf_2 T2 T3 T3)
112.11 + (uf_3 T1 T2 T2)
112.12 + (uf_7 T2 Int)
112.13 + (uf_5 T1)
112.14 + )
112.15 +:assumption (forall (?x1 T1) (?x2 T2) (?x3 T3) (= (uf_1 ?x1 (uf_2 ?x2 ?x3)) (uf_2 (uf_3 ?x1 ?x2) (uf_1 ?x1 ?x3))))
112.16 +:assumption (forall (?x4 T1) (= (uf_1 ?x4 uf_4) uf_4))
112.17 +:assumption (forall (?x5 T2) (= (uf_3 uf_5 ?x5) (uf_6 (+ (uf_7 ?x5) 1))))
112.18 +:assumption (forall (?x6 T2) (= (uf_6 (uf_7 ?x6)) ?x6))
112.19 +:assumption (forall (?x7 Int) (implies (<= 0 ?x7) (= (uf_7 (uf_6 ?x7)) ?x7)))
112.20 +:assumption (forall (?x8 Int) (implies (< ?x8 0) (= (uf_7 (uf_6 ?x8)) 0)))
112.21 +:assumption (not (= (uf_1 uf_5 (uf_2 (uf_6 0) (uf_2 (uf_6 1) uf_4))) (uf_2 (uf_6 1) (uf_2 (uf_6 2) uf_4))))
112.22 +:formula true
112.23 +)
113.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
113.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_05.proof Tue Oct 20 10:11:30 2009 +0200
113.3 @@ -0,0 +1,464 @@
113.4 +#2 := false
113.5 +decl uf_2 :: (-> T2 T3 T3)
113.6 +decl uf_4 :: T3
113.7 +#15 := uf_4
113.8 +decl uf_6 :: (-> int T2)
113.9 +#48 := 2::int
113.10 +#49 := (uf_6 2::int)
113.11 +#50 := (uf_2 #49 uf_4)
113.12 +#23 := 1::int
113.13 +#44 := (uf_6 1::int)
113.14 +#51 := (uf_2 #44 #50)
113.15 +decl uf_1 :: (-> T1 T3 T3)
113.16 +#45 := (uf_2 #44 uf_4)
113.17 +#31 := 0::int
113.18 +#43 := (uf_6 0::int)
113.19 +#46 := (uf_2 #43 #45)
113.20 +decl uf_5 :: T1
113.21 +#19 := uf_5
113.22 +#47 := (uf_1 uf_5 #46)
113.23 +#52 := (= #47 #51)
113.24 +#266 := (uf_1 uf_5 #45)
113.25 +decl uf_3 :: (-> T1 T2 T2)
113.26 +#352 := (uf_3 uf_5 #43)
113.27 +#267 := (uf_2 #352 #266)
113.28 +#797 := (= #267 #51)
113.29 +#795 := (= #51 #267)
113.30 +#758 := (= #50 #266)
113.31 +#521 := (uf_1 uf_5 uf_4)
113.32 +#522 := (uf_3 uf_5 #44)
113.33 +#523 := (uf_2 #522 #521)
113.34 +#756 := (= #523 #266)
113.35 +#616 := (= #266 #523)
113.36 +#6 := (:var 0 T3)
113.37 +#4 := (:var 2 T1)
113.38 +#10 := (uf_1 #4 #6)
113.39 +#5 := (:var 1 T2)
113.40 +#9 := (uf_3 #4 #5)
113.41 +#11 := (uf_2 #9 #10)
113.42 +#683 := (pattern #11)
113.43 +#7 := (uf_2 #5 #6)
113.44 +#8 := (uf_1 #4 #7)
113.45 +#682 := (pattern #8)
113.46 +#12 := (= #8 #11)
113.47 +#684 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3)) (:pat #682 #683) #12)
113.48 +#13 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3)) #12)
113.49 +#687 := (iff #13 #684)
113.50 +#685 := (iff #12 #12)
113.51 +#686 := [refl]: #685
113.52 +#688 := [quant-intro #686]: #687
113.53 +#195 := (~ #13 #13)
113.54 +#193 := (~ #12 #12)
113.55 +#194 := [refl]: #193
113.56 +#196 := [nnf-pos #194]: #195
113.57 +#69 := [asserted]: #13
113.58 +#197 := [mp~ #69 #196]: #13
113.59 +#689 := [mp #197 #688]: #684
113.60 +#345 := (not #684)
113.61 +#604 := (or #345 #616)
113.62 +#606 := [quant-inst]: #604
113.63 +#277 := [unit-resolution #606 #689]: #616
113.64 +#757 := [symm #277]: #756
113.65 +#754 := (= #50 #523)
113.66 +#569 := (= uf_4 #521)
113.67 +#14 := (:var 0 T1)
113.68 +#16 := (uf_1 #14 uf_4)
113.69 +#690 := (pattern #16)
113.70 +#71 := (= uf_4 #16)
113.71 +#691 := (forall (vars (?x4 T1)) (:pat #690) #71)
113.72 +#74 := (forall (vars (?x4 T1)) #71)
113.73 +#694 := (iff #74 #691)
113.74 +#692 := (iff #71 #71)
113.75 +#693 := [refl]: #692
113.76 +#695 := [quant-intro #693]: #694
113.77 +#180 := (~ #74 #74)
113.78 +#198 := (~ #71 #71)
113.79 +#199 := [refl]: #198
113.80 +#178 := [nnf-pos #199]: #180
113.81 +#17 := (= #16 uf_4)
113.82 +#18 := (forall (vars (?x4 T1)) #17)
113.83 +#75 := (iff #18 #74)
113.84 +#72 := (iff #17 #71)
113.85 +#73 := [rewrite]: #72
113.86 +#76 := [quant-intro #73]: #75
113.87 +#70 := [asserted]: #18
113.88 +#79 := [mp #70 #76]: #74
113.89 +#200 := [mp~ #79 #178]: #74
113.90 +#696 := [mp #200 #695]: #691
113.91 +#572 := (not #691)
113.92 +#573 := (or #572 #569)
113.93 +#574 := [quant-inst]: #573
113.94 +#282 := [unit-resolution #574 #696]: #569
113.95 +#752 := (= #49 #522)
113.96 +decl uf_7 :: (-> T2 int)
113.97 +#666 := (uf_7 #44)
113.98 +#595 := (+ 1::int #666)
113.99 +#597 := (uf_6 #595)
113.100 +#748 := (= #597 #522)
113.101 +#605 := (= #522 #597)
113.102 +#20 := (:var 0 T2)
113.103 +#22 := (uf_7 #20)
113.104 +#698 := (pattern #22)
113.105 +#21 := (uf_3 uf_5 #20)
113.106 +#697 := (pattern #21)
113.107 +#78 := (+ 1::int #22)
113.108 +#82 := (uf_6 #78)
113.109 +#85 := (= #21 #82)
113.110 +#699 := (forall (vars (?x5 T2)) (:pat #697 #698) #85)
113.111 +#88 := (forall (vars (?x5 T2)) #85)
113.112 +#702 := (iff #88 #699)
113.113 +#700 := (iff #85 #85)
113.114 +#701 := [refl]: #700
113.115 +#703 := [quant-intro #701]: #702
113.116 +#181 := (~ #88 #88)
113.117 +#201 := (~ #85 #85)
113.118 +#202 := [refl]: #201
113.119 +#182 := [nnf-pos #202]: #181
113.120 +#24 := (+ #22 1::int)
113.121 +#25 := (uf_6 #24)
113.122 +#26 := (= #21 #25)
113.123 +#27 := (forall (vars (?x5 T2)) #26)
113.124 +#89 := (iff #27 #88)
113.125 +#86 := (iff #26 #85)
113.126 +#83 := (= #25 #82)
113.127 +#80 := (= #24 #78)
113.128 +#81 := [rewrite]: #80
113.129 +#84 := [monotonicity #81]: #83
113.130 +#87 := [monotonicity #84]: #86
113.131 +#90 := [quant-intro #87]: #89
113.132 +#77 := [asserted]: #27
113.133 +#93 := [mp #77 #90]: #88
113.134 +#203 := [mp~ #93 #182]: #88
113.135 +#704 := [mp #203 #703]: #699
113.136 +#607 := (not #699)
113.137 +#600 := (or #607 #605)
113.138 +#601 := [quant-inst]: #600
113.139 +#269 := [unit-resolution #601 #704]: #605
113.140 +#749 := [symm #269]: #748
113.141 +#750 := (= #49 #597)
113.142 +#499 := (uf_7 #597)
113.143 +#337 := (uf_6 #499)
113.144 +#318 := (= #337 #597)
113.145 +#28 := (uf_6 #22)
113.146 +#92 := (= #20 #28)
113.147 +#705 := (forall (vars (?x6 T2)) (:pat #698) #92)
113.148 +#96 := (forall (vars (?x6 T2)) #92)
113.149 +#706 := (iff #96 #705)
113.150 +#708 := (iff #705 #705)
113.151 +#709 := [rewrite]: #708
113.152 +#707 := [rewrite]: #706
113.153 +#710 := [trans #707 #709]: #706
113.154 +#183 := (~ #96 #96)
113.155 +#204 := (~ #92 #92)
113.156 +#205 := [refl]: #204
113.157 +#184 := [nnf-pos #205]: #183
113.158 +#29 := (= #28 #20)
113.159 +#30 := (forall (vars (?x6 T2)) #29)
113.160 +#97 := (iff #30 #96)
113.161 +#94 := (iff #29 #92)
113.162 +#95 := [rewrite]: #94
113.163 +#98 := [quant-intro #95]: #97
113.164 +#91 := [asserted]: #30
113.165 +#101 := [mp #91 #98]: #96
113.166 +#206 := [mp~ #101 #184]: #96
113.167 +#711 := [mp #206 #710]: #705
113.168 +#376 := (not #705)
113.169 +#325 := (or #376 #318)
113.170 +#316 := (= #597 #337)
113.171 +#326 := (or #376 #316)
113.172 +#328 := (iff #326 #325)
113.173 +#329 := (iff #325 #325)
113.174 +#310 := [rewrite]: #329
113.175 +#323 := (iff #316 #318)
113.176 +#324 := [rewrite]: #323
113.177 +#317 := [monotonicity #324]: #328
113.178 +#312 := [trans #317 #310]: #328
113.179 +#327 := [quant-inst]: #326
113.180 +#313 := [mp #327 #312]: #325
113.181 +#271 := [unit-resolution #313 #711]: #318
113.182 +#746 := (= #49 #337)
113.183 +#744 := (= 2::int #499)
113.184 +#742 := (= #499 2::int)
113.185 +#578 := -1::int
113.186 +#513 := (* -1::int #666)
113.187 +#514 := (+ #499 #513)
113.188 +#474 := (<= #514 1::int)
113.189 +#512 := (= #514 1::int)
113.190 +#504 := (>= #666 -1::int)
113.191 +#586 := (>= #666 1::int)
113.192 +#378 := (= #666 1::int)
113.193 +#32 := (:var 0 int)
113.194 +#34 := (uf_6 #32)
113.195 +#712 := (pattern #34)
113.196 +#118 := (>= #32 0::int)
113.197 +#119 := (not #118)
113.198 +#35 := (uf_7 #34)
113.199 +#100 := (= #32 #35)
113.200 +#125 := (or #100 #119)
113.201 +#713 := (forall (vars (?x7 int)) (:pat #712) #125)
113.202 +#130 := (forall (vars (?x7 int)) #125)
113.203 +#716 := (iff #130 #713)
113.204 +#714 := (iff #125 #125)
113.205 +#715 := [refl]: #714
113.206 +#717 := [quant-intro #715]: #716
113.207 +#185 := (~ #130 #130)
113.208 +#207 := (~ #125 #125)
113.209 +#208 := [refl]: #207
113.210 +#186 := [nnf-pos #208]: #185
113.211 +#36 := (= #35 #32)
113.212 +#33 := (<= 0::int #32)
113.213 +#37 := (implies #33 #36)
113.214 +#38 := (forall (vars (?x7 int)) #37)
113.215 +#133 := (iff #38 #130)
113.216 +#107 := (not #33)
113.217 +#108 := (or #107 #100)
113.218 +#113 := (forall (vars (?x7 int)) #108)
113.219 +#131 := (iff #113 #130)
113.220 +#128 := (iff #108 #125)
113.221 +#122 := (or #119 #100)
113.222 +#126 := (iff #122 #125)
113.223 +#127 := [rewrite]: #126
113.224 +#123 := (iff #108 #122)
113.225 +#120 := (iff #107 #119)
113.226 +#116 := (iff #33 #118)
113.227 +#117 := [rewrite]: #116
113.228 +#121 := [monotonicity #117]: #120
113.229 +#124 := [monotonicity #121]: #123
113.230 +#129 := [trans #124 #127]: #128
113.231 +#132 := [quant-intro #129]: #131
113.232 +#114 := (iff #38 #113)
113.233 +#111 := (iff #37 #108)
113.234 +#104 := (implies #33 #100)
113.235 +#109 := (iff #104 #108)
113.236 +#110 := [rewrite]: #109
113.237 +#105 := (iff #37 #104)
113.238 +#102 := (iff #36 #100)
113.239 +#103 := [rewrite]: #102
113.240 +#106 := [monotonicity #103]: #105
113.241 +#112 := [trans #106 #110]: #111
113.242 +#115 := [quant-intro #112]: #114
113.243 +#134 := [trans #115 #132]: #133
113.244 +#99 := [asserted]: #38
113.245 +#135 := [mp #99 #134]: #130
113.246 +#209 := [mp~ #135 #186]: #130
113.247 +#718 := [mp #209 #717]: #713
113.248 +#673 := (not #713)
113.249 +#365 := (or #673 #378)
113.250 +#307 := (>= 1::int 0::int)
113.251 +#668 := (not #307)
113.252 +#669 := (= 1::int #666)
113.253 +#655 := (or #669 #668)
113.254 +#366 := (or #673 #655)
113.255 +#645 := (iff #366 #365)
113.256 +#360 := (iff #365 #365)
113.257 +#643 := [rewrite]: #360
113.258 +#654 := (iff #655 #378)
113.259 +#374 := (or #378 false)
113.260 +#653 := (iff #374 #378)
113.261 +#650 := [rewrite]: #653
113.262 +#375 := (iff #655 #374)
113.263 +#651 := (iff #668 false)
113.264 +#1 := true
113.265 +#670 := (not true)
113.266 +#677 := (iff #670 false)
113.267 +#678 := [rewrite]: #677
113.268 +#381 := (iff #668 #670)
113.269 +#379 := (iff #307 true)
113.270 +#380 := [rewrite]: #379
113.271 +#274 := [monotonicity #380]: #381
113.272 +#652 := [trans #274 #678]: #651
113.273 +#656 := (iff #669 #378)
113.274 +#363 := [rewrite]: #656
113.275 +#649 := [monotonicity #363 #652]: #375
113.276 +#364 := [trans #649 #650]: #654
113.277 +#646 := [monotonicity #364]: #645
113.278 +#647 := [trans #646 #643]: #645
113.279 +#367 := [quant-inst]: #366
113.280 +#644 := [mp #367 #647]: #365
113.281 +#272 := [unit-resolution #644 #718]: #378
113.282 +#270 := (not #378)
113.283 +#273 := (or #270 #586)
113.284 +#725 := [th-lemma]: #273
113.285 +#726 := [unit-resolution #725 #272]: #586
113.286 +#727 := (not #586)
113.287 +#728 := (or #727 #504)
113.288 +#729 := [th-lemma]: #728
113.289 +#730 := [unit-resolution #729 #726]: #504
113.290 +#481 := (not #504)
113.291 +#496 := (or #673 #481 #512)
113.292 +#509 := (>= #595 0::int)
113.293 +#468 := (not #509)
113.294 +#501 := (= #595 #499)
113.295 +#503 := (or #501 #468)
113.296 +#497 := (or #673 #503)
113.297 +#470 := (iff #497 #496)
113.298 +#491 := (or #481 #512)
113.299 +#498 := (or #673 #491)
113.300 +#467 := (iff #498 #496)
113.301 +#469 := [rewrite]: #467
113.302 +#459 := (iff #497 #498)
113.303 +#494 := (iff #503 #491)
113.304 +#488 := (or #512 #481)
113.305 +#492 := (iff #488 #491)
113.306 +#493 := [rewrite]: #492
113.307 +#489 := (iff #503 #488)
113.308 +#486 := (iff #468 #481)
113.309 +#525 := (iff #509 #504)
113.310 +#480 := [rewrite]: #525
113.311 +#487 := [monotonicity #480]: #486
113.312 +#510 := (iff #501 #512)
113.313 +#524 := [rewrite]: #510
113.314 +#490 := [monotonicity #524 #487]: #489
113.315 +#495 := [trans #490 #493]: #494
113.316 +#460 := [monotonicity #495]: #459
113.317 +#471 := [trans #460 #469]: #470
113.318 +#482 := [quant-inst]: #497
113.319 +#473 := [mp #482 #471]: #496
113.320 +#731 := [unit-resolution #473 #718 #730]: #512
113.321 +#732 := (not #512)
113.322 +#733 := (or #732 #474)
113.323 +#734 := [th-lemma]: #733
113.324 +#735 := [unit-resolution #734 #731]: #474
113.325 +#475 := (>= #514 1::int)
113.326 +#736 := (or #732 #475)
113.327 +#737 := [th-lemma]: #736
113.328 +#738 := [unit-resolution #737 #731]: #475
113.329 +#582 := (<= #666 1::int)
113.330 +#739 := (or #270 #582)
113.331 +#740 := [th-lemma]: #739
113.332 +#741 := [unit-resolution #740 #272]: #582
113.333 +#743 := [th-lemma #726 #741 #738 #735]: #742
113.334 +#745 := [symm #743]: #744
113.335 +#747 := [monotonicity #745]: #746
113.336 +#751 := [trans #747 #271]: #750
113.337 +#753 := [trans #751 #749]: #752
113.338 +#755 := [monotonicity #753 #282]: #754
113.339 +#759 := [trans #755 #757]: #758
113.340 +#792 := (= #44 #352)
113.341 +#358 := (uf_7 #43)
113.342 +#613 := (+ 1::int #358)
113.343 +#617 := (uf_6 #613)
113.344 +#788 := (= #617 #352)
113.345 +#598 := (= #352 #617)
113.346 +#608 := (or #607 #598)
113.347 +#609 := [quant-inst]: #608
113.348 +#760 := [unit-resolution #609 #704]: #598
113.349 +#789 := [symm #760]: #788
113.350 +#790 := (= #44 #617)
113.351 +#575 := (uf_7 #617)
113.352 +#390 := (uf_6 #575)
113.353 +#382 := (= #390 #617)
113.354 +#385 := (or #376 #382)
113.355 +#392 := (= #617 #390)
113.356 +#386 := (or #376 #392)
113.357 +#387 := (iff #386 #385)
113.358 +#369 := (iff #385 #385)
113.359 +#370 := [rewrite]: #369
113.360 +#383 := (iff #392 #382)
113.361 +#384 := [rewrite]: #383
113.362 +#368 := [monotonicity #384]: #387
113.363 +#361 := [trans #368 #370]: #387
113.364 +#377 := [quant-inst]: #386
113.365 +#371 := [mp #377 #361]: #385
113.366 +#761 := [unit-resolution #371 #711]: #382
113.367 +#786 := (= #44 #390)
113.368 +#784 := (= 1::int #575)
113.369 +#782 := (= #575 1::int)
113.370 +#568 := (* -1::int #575)
113.371 +#579 := (+ #358 #568)
113.372 +#535 := (<= #579 -1::int)
113.373 +#557 := (= #579 -1::int)
113.374 +#561 := (>= #358 -1::int)
113.375 +#585 := (>= #358 0::int)
113.376 +#676 := (= #358 0::int)
113.377 +#315 := (or #673 #676)
113.378 +#268 := (>= 0::int 0::int)
113.379 +#354 := (not #268)
113.380 +#355 := (= 0::int #358)
113.381 +#359 := (or #355 #354)
113.382 +#657 := (or #673 #359)
113.383 +#320 := (iff #657 #315)
113.384 +#322 := (iff #315 #315)
113.385 +#659 := [rewrite]: #322
113.386 +#672 := (iff #359 #676)
113.387 +#675 := (or #676 false)
113.388 +#330 := (iff #675 #676)
113.389 +#335 := [rewrite]: #330
113.390 +#681 := (iff #359 #675)
113.391 +#679 := (iff #354 false)
113.392 +#343 := (iff #354 #670)
113.393 +#332 := (iff #268 true)
113.394 +#463 := [rewrite]: #332
113.395 +#344 := [monotonicity #463]: #343
113.396 +#680 := [trans #344 #678]: #679
113.397 +#338 := (iff #355 #676)
113.398 +#674 := [rewrite]: #338
113.399 +#671 := [monotonicity #674 #680]: #681
113.400 +#331 := [trans #671 #335]: #672
113.401 +#321 := [monotonicity #331]: #320
113.402 +#660 := [trans #321 #659]: #320
113.403 +#319 := [quant-inst]: #657
113.404 +#661 := [mp #319 #660]: #315
113.405 +#762 := [unit-resolution #661 #718]: #676
113.406 +#763 := (not #676)
113.407 +#764 := (or #763 #585)
113.408 +#765 := [th-lemma]: #764
113.409 +#766 := [unit-resolution #765 #762]: #585
113.410 +#767 := (not #585)
113.411 +#768 := (or #767 #561)
113.412 +#769 := [th-lemma]: #768
113.413 +#770 := [unit-resolution #769 #766]: #561
113.414 +#564 := (not #561)
113.415 +#549 := (or #673 #557 #564)
113.416 +#570 := (>= #613 0::int)
113.417 +#571 := (not #570)
113.418 +#576 := (= #613 #575)
113.419 +#577 := (or #576 #571)
113.420 +#552 := (or #673 #577)
113.421 +#530 := (iff #552 #549)
113.422 +#551 := (or #557 #564)
113.423 +#554 := (or #673 #551)
113.424 +#556 := (iff #554 #549)
113.425 +#529 := [rewrite]: #556
113.426 +#555 := (iff #552 #554)
113.427 +#547 := (iff #577 #551)
113.428 +#559 := (iff #571 #564)
113.429 +#562 := (iff #570 #561)
113.430 +#563 := [rewrite]: #562
113.431 +#565 := [monotonicity #563]: #559
113.432 +#558 := (iff #576 #557)
113.433 +#560 := [rewrite]: #558
113.434 +#548 := [monotonicity #560 #565]: #547
113.435 +#550 := [monotonicity #548]: #555
113.436 +#531 := [trans #550 #529]: #530
113.437 +#553 := [quant-inst]: #552
113.438 +#424 := [mp #553 #531]: #549
113.439 +#771 := [unit-resolution #424 #718 #770]: #557
113.440 +#772 := (not #557)
113.441 +#773 := (or #772 #535)
113.442 +#774 := [th-lemma]: #773
113.443 +#775 := [unit-resolution #774 #771]: #535
113.444 +#536 := (>= #579 -1::int)
113.445 +#776 := (or #772 #536)
113.446 +#777 := [th-lemma]: #776
113.447 +#778 := [unit-resolution #777 #771]: #536
113.448 +#584 := (<= #358 0::int)
113.449 +#779 := (or #763 #584)
113.450 +#780 := [th-lemma]: #779
113.451 +#781 := [unit-resolution #780 #762]: #584
113.452 +#783 := [th-lemma #766 #781 #778 #775]: #782
113.453 +#785 := [symm #783]: #784
113.454 +#787 := [monotonicity #785]: #786
113.455 +#791 := [trans #787 #761]: #790
113.456 +#793 := [trans #791 #789]: #792
113.457 +#796 := [monotonicity #793 #759]: #795
113.458 +#798 := [symm #796]: #797
113.459 +#353 := (= #47 #267)
113.460 +#356 := (or #345 #353)
113.461 +#357 := [quant-inst]: #356
113.462 +#794 := [unit-resolution #357 #689]: #353
113.463 +#799 := [trans #794 #798]: #52
113.464 +#53 := (not #52)
113.465 +#177 := [asserted]: #53
113.466 +[unit-resolution #177 #799]: false
113.467 +unsat
114.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
114.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_06 Tue Oct 20 10:11:30 2009 +0200
114.3 @@ -0,0 +1,8 @@
114.4 +(benchmark Isabelle
114.5 +:extrasorts ( T1 T2)
114.6 +:extrapreds (
114.7 + (up_1 T1)
114.8 + )
114.9 +:assumption (not (or (forall (?x1 T1) (up_1 ?x1)) (not (forall (?x2 T1) (up_1 ?x2)))))
114.10 +:formula true
114.11 +)
115.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
115.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_06.proof Tue Oct 20 10:11:30 2009 +0200
115.3 @@ -0,0 +1,21 @@
115.4 +#2 := false
115.5 +decl up_1 :: (-> T1 bool)
115.6 +#4 := (:var 0 T1)
115.7 +#5 := (up_1 #4)
115.8 +#6 := (forall (vars (?x1 T1)) #5)
115.9 +#7 := (not #6)
115.10 +#8 := (or #6 #7)
115.11 +#9 := (not #8)
115.12 +#33 := (iff #9 false)
115.13 +#1 := true
115.14 +#28 := (not true)
115.15 +#31 := (iff #28 false)
115.16 +#32 := [rewrite]: #31
115.17 +#29 := (iff #9 #28)
115.18 +#26 := (iff #8 true)
115.19 +#27 := [rewrite]: #26
115.20 +#30 := [monotonicity #27]: #29
115.21 +#34 := [trans #30 #32]: #33
115.22 +#25 := [asserted]: #9
115.23 +[mp #25 #34]: false
115.24 +unsat
116.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
116.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_07 Tue Oct 20 10:11:30 2009 +0200
116.3 @@ -0,0 +1,14 @@
116.4 +(benchmark Isabelle
116.5 +:extrasorts ( T1)
116.6 +:extrafuns (
116.7 + (uf_1 Int T1)
116.8 + (uf_3 T1 T1)
116.9 + (uf_2 T1 Int)
116.10 + )
116.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
116.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
116.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
116.14 +:assumption (forall (?x4 T1) (= (uf_3 ?x4) (ite (< (uf_2 ?x4) 10) ?x4 (uf_3 (uf_1 (- (uf_2 ?x4) 10))))))
116.15 +:assumption (not (= (uf_3 (uf_1 (* 4 (uf_2 (uf_3 (uf_1 4)))))) (uf_1 6)))
116.16 +:formula true
116.17 +)
117.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
117.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_07.proof Tue Oct 20 10:11:30 2009 +0200
117.3 @@ -0,0 +1,373 @@
117.4 +#2 := false
117.5 +decl uf_1 :: (-> int T1)
117.6 +#37 := 6::int
117.7 +#38 := (uf_1 6::int)
117.8 +decl uf_3 :: (-> T1 T1)
117.9 +decl uf_2 :: (-> T1 int)
117.10 +#30 := 4::int
117.11 +#31 := (uf_1 4::int)
117.12 +#32 := (uf_3 #31)
117.13 +#33 := (uf_2 #32)
117.14 +#34 := (* 4::int #33)
117.15 +#35 := (uf_1 #34)
117.16 +#36 := (uf_3 #35)
117.17 +#39 := (= #36 #38)
117.18 +#548 := (uf_3 #38)
117.19 +#394 := (= #548 #38)
117.20 +#549 := (= #38 #548)
117.21 +#523 := (uf_2 #38)
117.22 +#142 := -10::int
117.23 +#513 := (+ -10::int #523)
117.24 +#537 := (uf_1 #513)
117.25 +#538 := (uf_3 #537)
117.26 +#514 := (= #538 #548)
117.27 +#22 := 10::int
117.28 +#539 := (>= #523 10::int)
117.29 +#506 := (ite #539 #514 #549)
117.30 +#4 := (:var 0 T1)
117.31 +#21 := (uf_3 #4)
117.32 +#708 := (pattern #21)
117.33 +#5 := (uf_2 #4)
117.34 +#687 := (pattern #5)
117.35 +#209 := (= #4 #21)
117.36 +#143 := (+ -10::int #5)
117.37 +#146 := (uf_1 #143)
117.38 +#149 := (uf_3 #146)
117.39 +#208 := (= #21 #149)
117.40 +#163 := (>= #5 10::int)
117.41 +#190 := (ite #163 #208 #209)
117.42 +#709 := (forall (vars (?x4 T1)) (:pat #687 #708) #190)
117.43 +#193 := (forall (vars (?x4 T1)) #190)
117.44 +#712 := (iff #193 #709)
117.45 +#710 := (iff #190 #190)
117.46 +#711 := [refl]: #710
117.47 +#713 := [quant-intro #711]: #712
117.48 +#168 := (ite #163 #149 #4)
117.49 +#173 := (= #21 #168)
117.50 +#176 := (forall (vars (?x4 T1)) #173)
117.51 +#210 := (iff #176 #193)
117.52 +#191 := (iff #173 #190)
117.53 +#192 := [rewrite]: #191
117.54 +#211 := [quant-intro #192]: #210
117.55 +#188 := (~ #176 #176)
117.56 +#205 := (~ #173 #173)
117.57 +#206 := [refl]: #205
117.58 +#189 := [nnf-pos #206]: #188
117.59 +#24 := (- #5 10::int)
117.60 +#25 := (uf_1 #24)
117.61 +#26 := (uf_3 #25)
117.62 +#23 := (< #5 10::int)
117.63 +#27 := (ite #23 #4 #26)
117.64 +#28 := (= #21 #27)
117.65 +#29 := (forall (vars (?x4 T1)) #28)
117.66 +#179 := (iff #29 #176)
117.67 +#152 := (ite #23 #4 #149)
117.68 +#155 := (= #21 #152)
117.69 +#158 := (forall (vars (?x4 T1)) #155)
117.70 +#177 := (iff #158 #176)
117.71 +#174 := (iff #155 #173)
117.72 +#171 := (= #152 #168)
117.73 +#161 := (not #163)
117.74 +#165 := (ite #161 #4 #149)
117.75 +#169 := (= #165 #168)
117.76 +#170 := [rewrite]: #169
117.77 +#166 := (= #152 #165)
117.78 +#162 := (iff #23 #161)
117.79 +#164 := [rewrite]: #162
117.80 +#167 := [monotonicity #164]: #166
117.81 +#172 := [trans #167 #170]: #171
117.82 +#175 := [monotonicity #172]: #174
117.83 +#178 := [quant-intro #175]: #177
117.84 +#159 := (iff #29 #158)
117.85 +#156 := (iff #28 #155)
117.86 +#153 := (= #27 #152)
117.87 +#150 := (= #26 #149)
117.88 +#147 := (= #25 #146)
117.89 +#144 := (= #24 #143)
117.90 +#145 := [rewrite]: #144
117.91 +#148 := [monotonicity #145]: #147
117.92 +#151 := [monotonicity #148]: #150
117.93 +#154 := [monotonicity #151]: #153
117.94 +#157 := [monotonicity #154]: #156
117.95 +#160 := [quant-intro #157]: #159
117.96 +#180 := [trans #160 #178]: #179
117.97 +#141 := [asserted]: #29
117.98 +#181 := [mp #141 #180]: #176
117.99 +#207 := [mp~ #181 #189]: #176
117.100 +#212 := [mp #207 #211]: #193
117.101 +#714 := [mp #212 #713]: #709
117.102 +#681 := (not #709)
117.103 +#517 := (or #681 #506)
117.104 +#533 := (= #548 #538)
117.105 +#507 := (ite #539 #533 #549)
117.106 +#518 := (or #681 #507)
117.107 +#529 := (iff #518 #517)
117.108 +#530 := (iff #517 #517)
117.109 +#485 := [rewrite]: #530
117.110 +#508 := (iff #507 #506)
117.111 +#473 := (iff #533 #514)
117.112 +#504 := [rewrite]: #473
117.113 +#515 := [monotonicity #504]: #508
117.114 +#509 := [monotonicity #515]: #529
117.115 +#486 := [trans #509 #485]: #529
117.116 +#519 := [quant-inst]: #518
117.117 +#491 := [mp #519 #486]: #517
117.118 +#484 := [unit-resolution #491 #714]: #506
117.119 +#493 := (not #539)
117.120 +#465 := (<= #523 6::int)
117.121 +#526 := (= #523 6::int)
117.122 +#10 := (:var 0 int)
117.123 +#12 := (uf_1 #10)
117.124 +#695 := (pattern #12)
117.125 +#9 := 0::int
117.126 +#82 := (>= #10 0::int)
117.127 +#83 := (not #82)
117.128 +#13 := (uf_2 #12)
117.129 +#64 := (= #10 #13)
117.130 +#89 := (or #64 #83)
117.131 +#696 := (forall (vars (?x2 int)) (:pat #695) #89)
117.132 +#94 := (forall (vars (?x2 int)) #89)
117.133 +#699 := (iff #94 #696)
117.134 +#697 := (iff #89 #89)
117.135 +#698 := [refl]: #697
117.136 +#700 := [quant-intro #698]: #699
117.137 +#185 := (~ #94 #94)
117.138 +#199 := (~ #89 #89)
117.139 +#200 := [refl]: #199
117.140 +#183 := [nnf-pos #200]: #185
117.141 +#14 := (= #13 #10)
117.142 +#11 := (<= 0::int #10)
117.143 +#15 := (implies #11 #14)
117.144 +#16 := (forall (vars (?x2 int)) #15)
117.145 +#97 := (iff #16 #94)
117.146 +#71 := (not #11)
117.147 +#72 := (or #71 #64)
117.148 +#77 := (forall (vars (?x2 int)) #72)
117.149 +#95 := (iff #77 #94)
117.150 +#92 := (iff #72 #89)
117.151 +#86 := (or #83 #64)
117.152 +#90 := (iff #86 #89)
117.153 +#91 := [rewrite]: #90
117.154 +#87 := (iff #72 #86)
117.155 +#84 := (iff #71 #83)
117.156 +#80 := (iff #11 #82)
117.157 +#81 := [rewrite]: #80
117.158 +#85 := [monotonicity #81]: #84
117.159 +#88 := [monotonicity #85]: #87
117.160 +#93 := [trans #88 #91]: #92
117.161 +#96 := [quant-intro #93]: #95
117.162 +#78 := (iff #16 #77)
117.163 +#75 := (iff #15 #72)
117.164 +#68 := (implies #11 #64)
117.165 +#73 := (iff #68 #72)
117.166 +#74 := [rewrite]: #73
117.167 +#69 := (iff #15 #68)
117.168 +#66 := (iff #14 #64)
117.169 +#67 := [rewrite]: #66
117.170 +#70 := [monotonicity #67]: #69
117.171 +#76 := [trans #70 #74]: #75
117.172 +#79 := [quant-intro #76]: #78
117.173 +#98 := [trans #79 #96]: #97
117.174 +#63 := [asserted]: #16
117.175 +#99 := [mp #63 #98]: #94
117.176 +#201 := [mp~ #99 #183]: #94
117.177 +#701 := [mp #201 #700]: #696
117.178 +#671 := (not #696)
117.179 +#615 := (or #671 #526)
117.180 +#520 := (>= 6::int 0::int)
117.181 +#522 := (not #520)
117.182 +#516 := (= 6::int #523)
117.183 +#524 := (or #516 #522)
117.184 +#604 := (or #671 #524)
117.185 +#606 := (iff #604 #615)
117.186 +#601 := (iff #615 #615)
117.187 +#608 := [rewrite]: #601
117.188 +#614 := (iff #524 #526)
117.189 +#603 := (or #526 false)
117.190 +#612 := (iff #603 #526)
117.191 +#613 := [rewrite]: #612
117.192 +#600 := (iff #524 #603)
117.193 +#609 := (iff #522 false)
117.194 +#1 := true
117.195 +#327 := (not true)
117.196 +#666 := (iff #327 false)
117.197 +#667 := [rewrite]: #666
117.198 +#618 := (iff #522 #327)
117.199 +#528 := (iff #520 true)
117.200 +#621 := [rewrite]: #528
117.201 +#622 := [monotonicity #621]: #618
117.202 +#611 := [trans #622 #667]: #609
117.203 +#525 := (iff #516 #526)
117.204 +#527 := [rewrite]: #525
117.205 +#602 := [monotonicity #527 #611]: #600
117.206 +#610 := [trans #602 #613]: #614
117.207 +#607 := [monotonicity #610]: #606
117.208 +#592 := [trans #607 #608]: #606
117.209 +#605 := [quant-inst]: #604
117.210 +#593 := [mp #605 #592]: #615
117.211 +#454 := [unit-resolution #593 #701]: #526
117.212 +#303 := (not #526)
117.213 +#462 := (or #303 #465)
117.214 +#458 := [th-lemma]: #462
117.215 +#463 := [unit-resolution #458 #454]: #465
117.216 +#442 := (not #465)
117.217 +#445 := (or #442 #493)
117.218 +#449 := [th-lemma]: #445
117.219 +#451 := [unit-resolution #449 #463]: #493
117.220 +#492 := (not #506)
117.221 +#496 := (or #492 #539 #549)
117.222 +#497 := [def-axiom]: #496
117.223 +#452 := [unit-resolution #497 #451 #484]: #549
117.224 +#395 := [symm #452]: #394
117.225 +#397 := (= #36 #548)
117.226 +#372 := (uf_2 #35)
117.227 +#576 := (+ -10::int #372)
117.228 +#568 := (uf_1 #576)
117.229 +#569 := (uf_3 #568)
117.230 +#408 := (= #569 #548)
117.231 +#401 := (= #568 #38)
117.232 +#422 := (= #576 6::int)
117.233 +#677 := (uf_2 #31)
117.234 +#365 := -1::int
117.235 +#478 := (* -1::int #677)
117.236 +#479 := (+ #33 #478)
117.237 +#480 := (<= #479 0::int)
117.238 +#476 := (= #33 #677)
117.239 +#431 := (= #32 #31)
117.240 +#589 := (= #31 #32)
117.241 +#590 := (+ -10::int #677)
117.242 +#587 := (uf_1 #590)
117.243 +#591 := (uf_3 #587)
117.244 +#571 := (= #32 #591)
117.245 +#572 := (>= #677 10::int)
117.246 +#574 := (ite #572 #571 #589)
117.247 +#577 := (or #681 #574)
117.248 +#578 := [quant-inst]: #577
117.249 +#450 := [unit-resolution #578 #714]: #574
117.250 +#580 := (not #572)
117.251 +#552 := (<= #677 4::int)
117.252 +#324 := (= #677 4::int)
117.253 +#674 := (or #671 #324)
117.254 +#343 := (>= 4::int 0::int)
117.255 +#679 := (not #343)
117.256 +#336 := (= 4::int #677)
117.257 +#678 := (or #336 #679)
117.258 +#660 := (or #671 #678)
117.259 +#368 := (iff #660 #674)
117.260 +#384 := (iff #674 #674)
117.261 +#385 := [rewrite]: #384
117.262 +#312 := (iff #678 #324)
117.263 +#669 := (or #324 false)
117.264 +#672 := (iff #669 #324)
117.265 +#311 := [rewrite]: #672
117.266 +#306 := (iff #678 #669)
117.267 +#668 := (iff #679 false)
117.268 +#664 := (iff #679 #327)
117.269 +#325 := (iff #343 true)
117.270 +#326 := [rewrite]: #325
117.271 +#665 := [monotonicity #326]: #664
117.272 +#663 := [trans #665 #667]: #668
117.273 +#320 := (iff #336 #324)
117.274 +#662 := [rewrite]: #320
117.275 +#670 := [monotonicity #662 #663]: #306
117.276 +#673 := [trans #670 #311]: #312
117.277 +#383 := [monotonicity #673]: #368
117.278 +#386 := [trans #383 #385]: #368
117.279 +#661 := [quant-inst]: #660
117.280 +#278 := [mp #661 #386]: #674
117.281 +#453 := [unit-resolution #278 #701]: #324
117.282 +#441 := (not #324)
117.283 +#444 := (or #441 #552)
117.284 +#446 := [th-lemma]: #444
117.285 +#447 := [unit-resolution #446 #453]: #552
117.286 +#443 := (not #552)
117.287 +#448 := (or #443 #580)
117.288 +#438 := [th-lemma]: #448
117.289 +#428 := [unit-resolution #438 #447]: #580
117.290 +#579 := (not #574)
117.291 +#583 := (or #579 #572 #589)
117.292 +#573 := [def-axiom]: #583
117.293 +#430 := [unit-resolution #573 #428 #450]: #589
117.294 +#434 := [symm #430]: #431
117.295 +#435 := [monotonicity #434]: #476
117.296 +#439 := (not #476)
117.297 +#432 := (or #439 #480)
117.298 +#440 := [th-lemma]: #432
117.299 +#433 := [unit-resolution #440 #435]: #480
117.300 +#481 := (>= #479 0::int)
117.301 +#436 := (or #439 #481)
117.302 +#437 := [th-lemma]: #436
117.303 +#423 := [unit-resolution #437 #435]: #481
117.304 +#553 := (>= #677 4::int)
117.305 +#425 := (or #441 #553)
117.306 +#426 := [th-lemma]: #425
117.307 +#424 := [unit-resolution #426 #453]: #553
117.308 +#648 := (* -1::int #372)
117.309 +#652 := (+ #34 #648)
117.310 +#631 := (<= #652 0::int)
117.311 +#649 := (= #652 0::int)
117.312 +#370 := (>= #34 0::int)
117.313 +#409 := (not #481)
117.314 +#427 := (not #553)
117.315 +#411 := (or #370 #427 #409)
117.316 +#412 := [th-lemma]: #411
117.317 +#413 := [unit-resolution #412 #424 #423]: #370
117.318 +#371 := (not #370)
117.319 +#640 := (or #371 #649)
117.320 +#488 := (or #671 #371 #649)
117.321 +#650 := (= #34 #372)
117.322 +#651 := (or #650 #371)
117.323 +#489 := (or #671 #651)
117.324 +#630 := (iff #489 #488)
117.325 +#632 := (or #671 #640)
117.326 +#635 := (iff #632 #488)
117.327 +#629 := [rewrite]: #635
117.328 +#633 := (iff #489 #632)
117.329 +#641 := (iff #651 #640)
117.330 +#643 := (or #649 #371)
117.331 +#645 := (iff #643 #640)
117.332 +#646 := [rewrite]: #645
117.333 +#644 := (iff #651 #643)
117.334 +#653 := (iff #650 #649)
117.335 +#642 := [rewrite]: #653
117.336 +#639 := [monotonicity #642]: #644
117.337 +#647 := [trans #639 #646]: #641
117.338 +#634 := [monotonicity #647]: #633
117.339 +#636 := [trans #634 #629]: #630
117.340 +#490 := [quant-inst]: #489
117.341 +#637 := [mp #490 #636]: #488
117.342 +#414 := [unit-resolution #637 #701]: #640
117.343 +#415 := [unit-resolution #414 #413]: #649
117.344 +#416 := (not #649)
117.345 +#417 := (or #416 #631)
117.346 +#418 := [th-lemma]: #417
117.347 +#419 := [unit-resolution #418 #415]: #631
117.348 +#638 := (>= #652 0::int)
117.349 +#420 := (or #416 #638)
117.350 +#421 := [th-lemma]: #420
117.351 +#410 := [unit-resolution #421 #415]: #638
117.352 +#399 := [th-lemma #410 #419 #424 #447 #423 #433]: #422
117.353 +#402 := [monotonicity #399]: #401
117.354 +#393 := [monotonicity #402]: #408
117.355 +#564 := (= #36 #569)
117.356 +#575 := (= #35 #36)
117.357 +#570 := (>= #372 10::int)
117.358 +#556 := (ite #570 #564 #575)
117.359 +#554 := (or #681 #556)
117.360 +#557 := [quant-inst]: #554
117.361 +#403 := [unit-resolution #557 #714]: #556
117.362 +#404 := (not #631)
117.363 +#405 := (or #570 #404 #427 #409)
117.364 +#406 := [th-lemma]: #405
117.365 +#407 := [unit-resolution #406 #419 #424 #423]: #570
117.366 +#559 := (not #570)
117.367 +#558 := (not #556)
117.368 +#560 := (or #558 #559 #564)
117.369 +#555 := [def-axiom]: #560
117.370 +#400 := [unit-resolution #555 #407 #403]: #564
117.371 +#396 := [trans #400 #393]: #397
117.372 +#398 := [trans #396 #395]: #39
117.373 +#40 := (not #39)
117.374 +#182 := [asserted]: #40
117.375 +[unit-resolution #182 #398]: false
117.376 +unsat
118.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
118.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_08 Tue Oct 20 10:11:30 2009 +0200
118.3 @@ -0,0 +1,24 @@
118.4 +(benchmark Isabelle
118.5 +:extrasorts ( T2 T1 T4 T3)
118.6 +:extrafuns (
118.7 + (uf_3 Int T1)
118.8 + (uf_7 T2 T4 T4)
118.9 + (uf_1 T2 T1 T1)
118.10 + (uf_6 T3 T4 Int)
118.11 + (uf_4 T1 Int)
118.12 + (uf_5 T2)
118.13 + (uf_2 T2)
118.14 + (uf_10 Int)
118.15 + (uf_8 T3)
118.16 + (uf_9 T4)
118.17 + )
118.18 +:assumption (forall (?x1 T1) (= (uf_1 uf_2 ?x1) (uf_3 (div (uf_4 ?x1) 2))))
118.19 +:assumption (forall (?x2 T1) (= (uf_1 uf_5 ?x2) (uf_3 (mod (uf_4 ?x2) 2))))
118.20 +:assumption (forall (?x3 T1) (= (uf_3 (uf_4 ?x3)) ?x3))
118.21 +:assumption (forall (?x4 Int) (implies (<= 0 ?x4) (= (uf_4 (uf_3 ?x4)) ?x4)))
118.22 +:assumption (forall (?x5 Int) (implies (< ?x5 0) (= (uf_4 (uf_3 ?x5)) 0)))
118.23 +:assumption (forall (?x6 T3) (?x7 T4) (= (mod (uf_6 ?x6 ?x7) 2) (mod (uf_6 ?x6 (uf_7 uf_5 ?x7)) 2)))
118.24 +:assumption (forall (?x8 T3) (?x9 T4) (= (+ (* (uf_6 ?x8 (uf_7 uf_2 ?x9)) 2) (uf_6 ?x8 (uf_7 uf_5 ?x9))) (uf_6 ?x8 ?x9)))
118.25 +:assumption (iff (= (uf_6 uf_8 uf_9) uf_10) (implies (= (mod (uf_6 uf_8 (uf_7 uf_5 uf_9)) 2) (mod uf_10 2)) (not (= (uf_6 uf_8 (uf_7 uf_2 uf_9)) (div (- uf_10 (uf_6 uf_8 (uf_7 uf_5 uf_9))) 2)))))
118.26 +:formula true
118.27 +)
119.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
119.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_08.proof Tue Oct 20 10:11:30 2009 +0200
119.3 @@ -0,0 +1,410 @@
119.4 +#2 := false
119.5 +#22 := 0::int
119.6 +decl uf_6 :: (-> T3 T4 int)
119.7 +decl uf_7 :: (-> T2 T4 T4)
119.8 +decl uf_9 :: T4
119.9 +#50 := uf_9
119.10 +decl uf_2 :: T2
119.11 +#4 := uf_2
119.12 +#59 := (uf_7 uf_2 uf_9)
119.13 +decl uf_8 :: T3
119.14 +#49 := uf_8
119.15 +#60 := (uf_6 uf_8 #59)
119.16 +#204 := -2::int
119.17 +#683 := (* -2::int #60)
119.18 +decl uf_5 :: T2
119.19 +#13 := uf_5
119.20 +#54 := (uf_7 uf_5 uf_9)
119.21 +#55 := (uf_6 uf_8 #54)
119.22 +#172 := -1::int
119.23 +#218 := (* -1::int #55)
119.24 +#685 := (+ #218 #683)
119.25 +#51 := (uf_6 uf_8 uf_9)
119.26 +#686 := (+ #51 #685)
119.27 +#679 := (>= #686 0::int)
119.28 +#687 := (= #686 0::int)
119.29 +#35 := (:var 0 T4)
119.30 +#43 := (uf_7 uf_2 #35)
119.31 +#34 := (:var 1 T3)
119.32 +#44 := (uf_6 #34 #43)
119.33 +#819 := (pattern #44)
119.34 +#38 := (uf_7 uf_5 #35)
119.35 +#39 := (uf_6 #34 #38)
119.36 +#812 := (pattern #39)
119.37 +#205 := (* -2::int #44)
119.38 +#203 := (* -1::int #39)
119.39 +#206 := (+ #203 #205)
119.40 +#36 := (uf_6 #34 #35)
119.41 +#207 := (+ #36 #206)
119.42 +#208 := (= #207 0::int)
119.43 +#820 := (forall (vars (?x8 T3) (?x9 T4)) (:pat #812 #819) #208)
119.44 +#211 := (forall (vars (?x8 T3) (?x9 T4)) #208)
119.45 +#823 := (iff #211 #820)
119.46 +#821 := (iff #208 #208)
119.47 +#822 := [refl]: #821
119.48 +#824 := [quant-intro #822]: #823
119.49 +#279 := (~ #211 #211)
119.50 +#305 := (~ #208 #208)
119.51 +#306 := [refl]: #305
119.52 +#280 := [nnf-pos #306]: #279
119.53 +#8 := 2::int
119.54 +#45 := (* #44 2::int)
119.55 +#46 := (+ #45 #39)
119.56 +#47 := (= #46 #36)
119.57 +#48 := (forall (vars (?x8 T3) (?x9 T4)) #47)
119.58 +#214 := (iff #48 #211)
119.59 +#171 := (* 2::int #44)
119.60 +#187 := (+ #39 #171)
119.61 +#195 := (= #36 #187)
119.62 +#200 := (forall (vars (?x8 T3) (?x9 T4)) #195)
119.63 +#212 := (iff #200 #211)
119.64 +#209 := (iff #195 #208)
119.65 +#210 := [rewrite]: #209
119.66 +#213 := [quant-intro #210]: #212
119.67 +#201 := (iff #48 #200)
119.68 +#198 := (iff #47 #195)
119.69 +#192 := (= #187 #36)
119.70 +#196 := (iff #192 #195)
119.71 +#197 := [rewrite]: #196
119.72 +#193 := (iff #47 #192)
119.73 +#190 := (= #46 #187)
119.74 +#184 := (+ #171 #39)
119.75 +#188 := (= #184 #187)
119.76 +#189 := [rewrite]: #188
119.77 +#185 := (= #46 #184)
119.78 +#182 := (= #45 #171)
119.79 +#183 := [rewrite]: #182
119.80 +#186 := [monotonicity #183]: #185
119.81 +#191 := [trans #186 #189]: #190
119.82 +#194 := [monotonicity #191]: #193
119.83 +#199 := [trans #194 #197]: #198
119.84 +#202 := [quant-intro #199]: #201
119.85 +#215 := [trans #202 #213]: #214
119.86 +#170 := [asserted]: #48
119.87 +#216 := [mp #170 #215]: #211
119.88 +#307 := [mp~ #216 #280]: #211
119.89 +#825 := [mp #307 #824]: #820
119.90 +#689 := (not #820)
119.91 +#675 := (or #689 #687)
119.92 +#676 := [quant-inst]: #675
119.93 +#536 := [unit-resolution #676 #825]: #687
119.94 +#537 := (not #687)
119.95 +#533 := (or #537 #679)
119.96 +#538 := [th-lemma]: #533
119.97 +#528 := [unit-resolution #538 #536]: #679
119.98 +decl uf_10 :: int
119.99 +#52 := uf_10
119.100 +#219 := (+ uf_10 #218)
119.101 +#222 := (div #219 2::int)
119.102 +#251 := (* -1::int #222)
119.103 +#252 := (+ #60 #251)
119.104 +#449 := (<= #252 0::int)
119.105 +#399 := (not #449)
119.106 +#253 := (= #252 0::int)
119.107 +#256 := (not #253)
119.108 +#57 := (mod uf_10 2::int)
119.109 +#243 := (* -1::int #57)
119.110 +#56 := (mod #55 2::int)
119.111 +#244 := (+ #56 #243)
119.112 +#245 := (= #244 0::int)
119.113 +#448 := (>= #244 0::int)
119.114 +#688 := (mod #51 2::int)
119.115 +#666 := (* -1::int #688)
119.116 +#667 := (+ #56 #666)
119.117 +#660 := (>= #667 0::int)
119.118 +#668 := (= #667 0::int)
119.119 +#40 := (mod #39 2::int)
119.120 +#173 := (* -1::int #40)
119.121 +#37 := (mod #36 2::int)
119.122 +#174 := (+ #37 #173)
119.123 +#175 := (= #174 0::int)
119.124 +#813 := (forall (vars (?x6 T3) (?x7 T4)) (:pat #812) #175)
119.125 +#178 := (forall (vars (?x6 T3) (?x7 T4)) #175)
119.126 +#816 := (iff #178 #813)
119.127 +#814 := (iff #175 #175)
119.128 +#815 := [refl]: #814
119.129 +#817 := [quant-intro #815]: #816
119.130 +#277 := (~ #178 #178)
119.131 +#302 := (~ #175 #175)
119.132 +#303 := [refl]: #302
119.133 +#278 := [nnf-pos #303]: #277
119.134 +#41 := (= #37 #40)
119.135 +#42 := (forall (vars (?x6 T3) (?x7 T4)) #41)
119.136 +#179 := (iff #42 #178)
119.137 +#176 := (iff #41 #175)
119.138 +#177 := [rewrite]: #176
119.139 +#180 := [quant-intro #177]: #179
119.140 +#169 := [asserted]: #42
119.141 +#181 := [mp #169 #180]: #178
119.142 +#304 := [mp~ #181 #278]: #178
119.143 +#818 := [mp #304 #817]: #813
119.144 +#673 := (not #813)
119.145 +#663 := (or #673 #668)
119.146 +#756 := (* -1::int #56)
119.147 +#684 := (+ #688 #756)
119.148 +#680 := (= #684 0::int)
119.149 +#674 := (or #673 #680)
119.150 +#653 := (iff #674 #663)
119.151 +#656 := (iff #663 #663)
119.152 +#657 := [rewrite]: #656
119.153 +#671 := (iff #680 #668)
119.154 +#677 := (+ #756 #688)
119.155 +#662 := (= #677 0::int)
119.156 +#669 := (iff #662 #668)
119.157 +#670 := [rewrite]: #669
119.158 +#664 := (iff #680 #662)
119.159 +#681 := (= #684 #677)
119.160 +#661 := [rewrite]: #681
119.161 +#665 := [monotonicity #661]: #664
119.162 +#672 := [trans #665 #670]: #671
119.163 +#655 := [monotonicity #672]: #653
119.164 +#658 := [trans #655 #657]: #653
119.165 +#652 := [quant-inst]: #674
119.166 +#659 := [mp #652 #658]: #663
119.167 +#394 := [unit-resolution #659 #818]: #668
119.168 +#552 := (not #668)
119.169 +#514 := (or #552 #660)
119.170 +#517 := [th-lemma]: #514
119.171 +#499 := [unit-resolution #517 #394]: #660
119.172 +#503 := (not #448)
119.173 +#414 := [hypothesis]: #503
119.174 +#561 := (+ #57 #666)
119.175 +#709 := (<= #561 0::int)
119.176 +#602 := (= #57 #688)
119.177 +#468 := (= #688 #57)
119.178 +#53 := (= #51 uf_10)
119.179 +#248 := (not #245)
119.180 +#259 := (or #248 #256)
119.181 +#362 := (mod #219 2::int)
119.182 +#699 := (>= #362 0::int)
119.183 +#1 := true
119.184 +#81 := [true-axiom]: true
119.185 +#604 := (or false #699)
119.186 +#506 := [th-lemma]: #604
119.187 +#507 := [unit-resolution #506 #81]: #699
119.188 +#628 := (* -1::int uf_10)
119.189 +#623 := (+ #51 #628)
119.190 +#629 := (<= #623 0::int)
119.191 +#498 := (not #629)
119.192 +#597 := (>= #623 0::int)
119.193 +#381 := (not #259)
119.194 +#508 := [hypothesis]: #381
119.195 +#450 := (or #259 #245)
119.196 +#441 := [def-axiom]: #450
119.197 +#509 := [unit-resolution #441 #508]: #245
119.198 +#510 := (or #248 #448)
119.199 +#511 := [th-lemma]: #510
119.200 +#500 := [unit-resolution #511 #509]: #448
119.201 +#743 := (div uf_10 2::int)
119.202 +#723 := (* -2::int #743)
119.203 +#545 := (* -2::int #688)
119.204 +#546 := (+ #545 #723)
119.205 +#646 := (div #51 2::int)
119.206 +#645 := (* -2::int #646)
119.207 +#547 := (+ #645 #546)
119.208 +#605 := (* -2::int #57)
119.209 +#549 := (+ #605 #547)
119.210 +#594 := (* 2::int #56)
119.211 +#550 := (+ #594 #549)
119.212 +#598 := (* 2::int uf_10)
119.213 +#551 := (+ #598 #550)
119.214 +#563 := (>= #551 2::int)
119.215 +#520 := (not #563)
119.216 +#361 := (<= #244 0::int)
119.217 +#512 := (or #248 #361)
119.218 +#489 := [th-lemma]: #512
119.219 +#491 := [unit-resolution #489 #509]: #361
119.220 +#363 := (>= #252 0::int)
119.221 +#452 := (or #259 #253)
119.222 +#453 := [def-axiom]: #452
119.223 +#492 := [unit-resolution #453 #508]: #253
119.224 +#493 := (or #256 #363)
119.225 +#494 := [th-lemma]: #493
119.226 +#495 := [unit-resolution #494 #492]: #363
119.227 +#556 := (not #361)
119.228 +#573 := (not #363)
119.229 +#521 := (or #520 #573 #556)
119.230 +#703 := (>= #362 2::int)
119.231 +#704 := (not #703)
119.232 +#599 := (or false #704)
119.233 +#620 := [th-lemma]: #599
119.234 +#575 := [unit-resolution #620 #81]: #704
119.235 +#654 := (<= #667 0::int)
119.236 +#548 := (or #552 #654)
119.237 +#553 := [th-lemma]: #548
119.238 +#532 := [unit-resolution #553 #394]: #654
119.239 +#651 := (+ #645 #666)
119.240 +#624 := (+ #51 #651)
119.241 +#626 := (<= #624 0::int)
119.242 +#650 := (= #624 0::int)
119.243 +#535 := (or false #650)
119.244 +#539 := [th-lemma]: #535
119.245 +#541 := [unit-resolution #539 #81]: #650
119.246 +#542 := (not #650)
119.247 +#540 := (or #542 #626)
119.248 +#543 := [th-lemma]: #540
119.249 +#531 := [unit-resolution #543 #541]: #626
119.250 +#587 := [hypothesis]: #361
119.251 +#724 := (+ #243 #723)
119.252 +#725 := (+ uf_10 #724)
119.253 +#727 := (<= #725 0::int)
119.254 +#722 := (= #725 0::int)
119.255 +#576 := (or false #722)
119.256 +#581 := [th-lemma]: #576
119.257 +#582 := [unit-resolution #581 #81]: #722
119.258 +#583 := (not #722)
119.259 +#584 := (or #583 #727)
119.260 +#585 := [th-lemma]: #584
119.261 +#586 := [unit-resolution #585 #582]: #727
119.262 +#534 := [hypothesis]: #563
119.263 +#555 := [hypothesis]: #363
119.264 +#616 := (* -1::int #362)
119.265 +#615 := (* -2::int #222)
119.266 +#617 := (+ #615 #616)
119.267 +#618 := (+ #218 #617)
119.268 +#711 := (+ uf_10 #618)
119.269 +#708 := (<= #711 0::int)
119.270 +#606 := (= #711 0::int)
119.271 +#562 := (or false #606)
119.272 +#564 := [th-lemma]: #562
119.273 +#565 := [unit-resolution #564 #81]: #606
119.274 +#566 := (not #606)
119.275 +#568 := (or #566 #708)
119.276 +#569 := [th-lemma]: #568
119.277 +#570 := [unit-resolution #569 #565]: #708
119.278 +#518 := [th-lemma #570 #555 #528 #534 #586 #587 #531 #532 #575]: false
119.279 +#524 := [lemma #518]: #521
119.280 +#496 := [unit-resolution #524 #495 #491]: #520
119.281 +#504 := (or #597 #563 #503)
119.282 +#529 := (not #597)
119.283 +#522 := [hypothesis]: #529
119.284 +#519 := (>= #624 0::int)
119.285 +#530 := (or #542 #519)
119.286 +#523 := [th-lemma]: #530
119.287 +#526 := [unit-resolution #523 #541]: #519
119.288 +#527 := [hypothesis]: #448
119.289 +#721 := (>= #725 0::int)
119.290 +#513 := (or #583 #721)
119.291 +#515 := [th-lemma]: #513
119.292 +#516 := [unit-resolution #515 #582]: #721
119.293 +#501 := [th-lemma #499 #516 #527 #526 #522]: #563
119.294 +#525 := [hypothesis]: #520
119.295 +#502 := [unit-resolution #525 #501]: false
119.296 +#505 := [lemma #502]: #504
119.297 +#497 := [unit-resolution #505 #496 #500]: #597
119.298 +#485 := (or #498 #529)
119.299 +#558 := (not #53)
119.300 +#440 := (or #558 #259)
119.301 +#262 := (iff #53 #259)
119.302 +#61 := (- uf_10 #55)
119.303 +#62 := (div #61 2::int)
119.304 +#63 := (= #60 #62)
119.305 +#64 := (not #63)
119.306 +#58 := (= #56 #57)
119.307 +#65 := (implies #58 #64)
119.308 +#66 := (iff #53 #65)
119.309 +#265 := (iff #66 #262)
119.310 +#225 := (= #60 #222)
119.311 +#228 := (not #225)
119.312 +#234 := (not #58)
119.313 +#235 := (or #234 #228)
119.314 +#240 := (iff #53 #235)
119.315 +#263 := (iff #240 #262)
119.316 +#260 := (iff #235 #259)
119.317 +#257 := (iff #228 #256)
119.318 +#254 := (iff #225 #253)
119.319 +#255 := [rewrite]: #254
119.320 +#258 := [monotonicity #255]: #257
119.321 +#249 := (iff #234 #248)
119.322 +#246 := (iff #58 #245)
119.323 +#247 := [rewrite]: #246
119.324 +#250 := [monotonicity #247]: #249
119.325 +#261 := [monotonicity #250 #258]: #260
119.326 +#264 := [monotonicity #261]: #263
119.327 +#241 := (iff #66 #240)
119.328 +#238 := (iff #65 #235)
119.329 +#231 := (implies #58 #228)
119.330 +#236 := (iff #231 #235)
119.331 +#237 := [rewrite]: #236
119.332 +#232 := (iff #65 #231)
119.333 +#229 := (iff #64 #228)
119.334 +#226 := (iff #63 #225)
119.335 +#223 := (= #62 #222)
119.336 +#220 := (= #61 #219)
119.337 +#221 := [rewrite]: #220
119.338 +#224 := [monotonicity #221]: #223
119.339 +#227 := [monotonicity #224]: #226
119.340 +#230 := [monotonicity #227]: #229
119.341 +#233 := [monotonicity #230]: #232
119.342 +#239 := [trans #233 #237]: #238
119.343 +#242 := [monotonicity #239]: #241
119.344 +#266 := [trans #242 #264]: #265
119.345 +#217 := [asserted]: #66
119.346 +#267 := [mp #217 #266]: #262
119.347 +#455 := (not #262)
119.348 +#765 := (or #558 #259 #455)
119.349 +#439 := [def-axiom]: #765
119.350 +#772 := [unit-resolution #439 #267]: #440
119.351 +#490 := [unit-resolution #772 #508]: #558
119.352 +#483 := (or #53 #498 #529)
119.353 +#484 := [th-lemma]: #483
119.354 +#487 := [unit-resolution #484 #490]: #485
119.355 +#486 := [unit-resolution #487 #497]: #498
119.356 +#678 := (<= #686 0::int)
119.357 +#488 := (or #537 #678)
119.358 +#477 := [th-lemma]: #488
119.359 +#478 := [unit-resolution #477 #536]: #678
119.360 +#479 := (or #256 #449)
119.361 +#471 := [th-lemma]: #479
119.362 +#480 := [unit-resolution #471 #492]: #449
119.363 +#712 := (>= #711 0::int)
119.364 +#481 := (or #566 #712)
119.365 +#472 := [th-lemma]: #481
119.366 +#482 := [unit-resolution #472 #565]: #712
119.367 +#463 := [th-lemma #482 #480 #478 #486 #507]: false
119.368 +#464 := [lemma #463]: #259
119.369 +#771 := (or #53 #381)
119.370 +#434 := (or #53 #381 #455)
119.371 +#769 := [def-axiom]: #434
119.372 +#428 := [unit-resolution #769 #267]: #771
119.373 +#442 := [unit-resolution #428 #464]: #53
119.374 +#435 := [monotonicity #442]: #468
119.375 +#437 := [symm #435]: #602
119.376 +#438 := (not #602)
119.377 +#419 := (or #438 #709)
119.378 +#420 := [th-lemma]: #419
119.379 +#421 := [unit-resolution #420 #437]: #709
119.380 +#422 := [th-lemma #421 #414 #499]: false
119.381 +#423 := [lemma #422]: #448
119.382 +#410 := (or #245 #503)
119.383 +#611 := (>= #561 0::int)
119.384 +#682 := (or #438 #611)
119.385 +#447 := [th-lemma]: #682
119.386 +#430 := [unit-resolution #447 #437]: #611
119.387 +#432 := [hypothesis]: #556
119.388 +#433 := [th-lemma #532 #432 #430]: false
119.389 +#412 := [lemma #433]: #361
119.390 +#409 := (or #245 #556 #503)
119.391 +#407 := [th-lemma]: #409
119.392 +#398 := [unit-resolution #407 #412]: #410
119.393 +#400 := [unit-resolution #398 #423]: #245
119.394 +#454 := (or #381 #248 #256)
119.395 +#451 := [def-axiom]: #454
119.396 +#401 := [unit-resolution #451 #464]: #259
119.397 +#404 := [unit-resolution #401 #400]: #256
119.398 +#384 := (or #253 #399)
119.399 +#429 := [hypothesis]: #573
119.400 +#443 := (or #558 #597)
119.401 +#444 := [th-lemma]: #443
119.402 +#445 := [unit-resolution #444 #442]: #597
119.403 +#446 := [th-lemma #445 #507 #482 #429 #478]: false
119.404 +#436 := [lemma #446]: #363
119.405 +#405 := (or #253 #399 #573)
119.406 +#379 := [th-lemma]: #405
119.407 +#385 := [unit-resolution #379 #436]: #384
119.408 +#390 := [unit-resolution #385 #404]: #399
119.409 +#392 := (or #558 #629)
119.410 +#393 := [th-lemma]: #392
119.411 +#395 := [unit-resolution #393 #442]: #629
119.412 +[th-lemma #395 #575 #570 #390 #528]: false
119.413 +unsat
120.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
120.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_01 Tue Oct 20 10:11:30 2009 +0200
120.3 @@ -0,0 +1,4 @@
120.4 +(benchmark Isabelle
120.5 +:assumption (not (= 3 3))
120.6 +:formula true
120.7 +)
121.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
121.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_01.proof Tue Oct 20 10:11:30 2009 +0200
121.3 @@ -0,0 +1,17 @@
121.4 +#2 := false
121.5 +#4 := 3::int
121.6 +#5 := (= 3::int 3::int)
121.7 +#6 := (not #5)
121.8 +#30 := (iff #6 false)
121.9 +#1 := true
121.10 +#25 := (not true)
121.11 +#28 := (iff #25 false)
121.12 +#29 := [rewrite]: #28
121.13 +#26 := (iff #6 #25)
121.14 +#23 := (iff #5 true)
121.15 +#24 := [rewrite]: #23
121.16 +#27 := [monotonicity #24]: #26
121.17 +#31 := [trans #27 #29]: #30
121.18 +#22 := [asserted]: #6
121.19 +[mp #22 #31]: false
121.20 +unsat
122.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
122.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_02 Tue Oct 20 10:11:30 2009 +0200
122.3 @@ -0,0 +1,4 @@
122.4 +(benchmark Isabelle
122.5 +:assumption (not (= 3.0 3.0))
122.6 +:formula true
122.7 +)
123.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
123.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_02.proof Tue Oct 20 10:11:30 2009 +0200
123.3 @@ -0,0 +1,17 @@
123.4 +#2 := false
123.5 +#4 := 3::real
123.6 +#5 := (= 3::real 3::real)
123.7 +#6 := (not #5)
123.8 +#30 := (iff #6 false)
123.9 +#1 := true
123.10 +#25 := (not true)
123.11 +#28 := (iff #25 false)
123.12 +#29 := [rewrite]: #28
123.13 +#26 := (iff #6 #25)
123.14 +#23 := (iff #5 true)
123.15 +#24 := [rewrite]: #23
123.16 +#27 := [monotonicity #24]: #26
123.17 +#31 := [trans #27 #29]: #30
123.18 +#22 := [asserted]: #6
123.19 +[mp #22 #31]: false
123.20 +unsat
124.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
124.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_03 Tue Oct 20 10:11:30 2009 +0200
124.3 @@ -0,0 +1,4 @@
124.4 +(benchmark Isabelle
124.5 +:assumption (not (= (+ 3 1) 4))
124.6 +:formula true
124.7 +)
125.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
125.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_03.proof Tue Oct 20 10:11:30 2009 +0200
125.3 @@ -0,0 +1,26 @@
125.4 +#2 := false
125.5 +#7 := 4::int
125.6 +#5 := 1::int
125.7 +#4 := 3::int
125.8 +#6 := (+ 3::int 1::int)
125.9 +#8 := (= #6 4::int)
125.10 +#9 := (not #8)
125.11 +#39 := (iff #9 false)
125.12 +#1 := true
125.13 +#34 := (not true)
125.14 +#37 := (iff #34 false)
125.15 +#38 := [rewrite]: #37
125.16 +#35 := (iff #9 #34)
125.17 +#32 := (iff #8 true)
125.18 +#27 := (= 4::int 4::int)
125.19 +#30 := (iff #27 true)
125.20 +#31 := [rewrite]: #30
125.21 +#28 := (iff #8 #27)
125.22 +#26 := [rewrite]: #8
125.23 +#29 := [monotonicity #26]: #28
125.24 +#33 := [trans #29 #31]: #32
125.25 +#36 := [monotonicity #33]: #35
125.26 +#40 := [trans #36 #38]: #39
125.27 +#25 := [asserted]: #9
125.28 +[mp #25 #40]: false
125.29 +unsat
126.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
126.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_04 Tue Oct 20 10:11:30 2009 +0200
126.3 @@ -0,0 +1,9 @@
126.4 +(benchmark Isabelle
126.5 +:extrafuns (
126.6 + (uf_1 Int)
126.7 + (uf_2 Int)
126.8 + (uf_3 Int)
126.9 + )
126.10 +:assumption (not (= (+ uf_1 (+ uf_2 uf_3)) (+ uf_2 (+ uf_3 uf_1))))
126.11 +:formula true
126.12 +)
127.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
127.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_04.proof Tue Oct 20 10:11:30 2009 +0200
127.3 @@ -0,0 +1,41 @@
127.4 +#2 := false
127.5 +decl uf_1 :: int
127.6 +#4 := uf_1
127.7 +decl uf_3 :: int
127.8 +#6 := uf_3
127.9 +#9 := (+ uf_3 uf_1)
127.10 +decl uf_2 :: int
127.11 +#5 := uf_2
127.12 +#10 := (+ uf_2 #9)
127.13 +#7 := (+ uf_2 uf_3)
127.14 +#8 := (+ uf_1 #7)
127.15 +#11 := (= #8 #10)
127.16 +#12 := (not #11)
127.17 +#51 := (iff #12 false)
127.18 +#1 := true
127.19 +#46 := (not true)
127.20 +#49 := (iff #46 false)
127.21 +#50 := [rewrite]: #49
127.22 +#47 := (iff #12 #46)
127.23 +#44 := (iff #11 true)
127.24 +#39 := (= #8 #8)
127.25 +#42 := (iff #39 true)
127.26 +#43 := [rewrite]: #42
127.27 +#40 := (iff #11 #39)
127.28 +#37 := (= #10 #8)
127.29 +#29 := (+ uf_1 uf_3)
127.30 +#32 := (+ uf_2 #29)
127.31 +#35 := (= #32 #8)
127.32 +#36 := [rewrite]: #35
127.33 +#33 := (= #10 #32)
127.34 +#30 := (= #9 #29)
127.35 +#31 := [rewrite]: #30
127.36 +#34 := [monotonicity #31]: #33
127.37 +#38 := [trans #34 #36]: #37
127.38 +#41 := [monotonicity #38]: #40
127.39 +#45 := [trans #41 #43]: #44
127.40 +#48 := [monotonicity #45]: #47
127.41 +#52 := [trans #48 #50]: #51
127.42 +#28 := [asserted]: #12
127.43 +[mp #28 #52]: false
127.44 +unsat
128.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
128.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_05 Tue Oct 20 10:11:30 2009 +0200
128.3 @@ -0,0 +1,4 @@
128.4 +(benchmark Isabelle
128.5 +:assumption (not (< 5 (ite (<= 3 8) 8 3)))
128.6 +:formula true
128.7 +)
129.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
129.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_05.proof Tue Oct 20 10:11:30 2009 +0200
129.3 @@ -0,0 +1,35 @@
129.4 +#2 := false
129.5 +#5 := 3::int
129.6 +#6 := 8::int
129.7 +#7 := (<= 3::int 8::int)
129.8 +#8 := (ite #7 8::int 3::int)
129.9 +#4 := 5::int
129.10 +#9 := (< 5::int #8)
129.11 +#10 := (not #9)
129.12 +#50 := (iff #10 false)
129.13 +#1 := true
129.14 +#45 := (not true)
129.15 +#48 := (iff #45 false)
129.16 +#49 := [rewrite]: #48
129.17 +#46 := (iff #10 #45)
129.18 +#43 := (iff #9 true)
129.19 +#38 := (< 5::int 8::int)
129.20 +#41 := (iff #38 true)
129.21 +#42 := [rewrite]: #41
129.22 +#39 := (iff #9 #38)
129.23 +#36 := (= #8 8::int)
129.24 +#31 := (ite true 8::int 3::int)
129.25 +#34 := (= #31 8::int)
129.26 +#35 := [rewrite]: #34
129.27 +#32 := (= #8 #31)
129.28 +#29 := (iff #7 true)
129.29 +#30 := [rewrite]: #29
129.30 +#33 := [monotonicity #30]: #32
129.31 +#37 := [trans #33 #35]: #36
129.32 +#40 := [monotonicity #37]: #39
129.33 +#44 := [trans #40 #42]: #43
129.34 +#47 := [monotonicity #44]: #46
129.35 +#51 := [trans #47 #49]: #50
129.36 +#26 := [asserted]: #10
129.37 +[mp #26 #51]: false
129.38 +unsat
130.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
130.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_06 Tue Oct 20 10:11:30 2009 +0200
130.3 @@ -0,0 +1,8 @@
130.4 +(benchmark Isabelle
130.5 +:extrafuns (
130.6 + (uf_1 Real)
130.7 + (uf_2 Real)
130.8 + )
130.9 +:assumption (not (<= (ite (< (+ uf_1 uf_2) 0.0) (~ (+ uf_1 uf_2)) (+ uf_1 uf_2)) (+ (ite (< uf_1 0.0) (~ uf_1) uf_1) (ite (< uf_2 0.0) (~ uf_2) uf_2))))
130.10 +:formula true
130.11 +)
131.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
131.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_06.proof Tue Oct 20 10:11:30 2009 +0200
131.3 @@ -0,0 +1,250 @@
131.4 +#2 := false
131.5 +#7 := 0::real
131.6 +decl uf_2 :: real
131.7 +#5 := uf_2
131.8 +#143 := 2::real
131.9 +#144 := (* 2::real uf_2)
131.10 +#165 := (<= #144 0::real)
131.11 +#188 := (not #165)
131.12 +#88 := (>= uf_2 0::real)
131.13 +#166 := (or #88 #165)
131.14 +#191 := (not #166)
131.15 +decl uf_1 :: real
131.16 +#4 := uf_1
131.17 +#76 := (>= uf_1 0::real)
131.18 +#89 := (not #88)
131.19 +#146 := (* 2::real uf_1)
131.20 +#167 := (<= #146 0::real)
131.21 +#199 := (not #167)
131.22 +#263 := [hypothesis]: #88
131.23 +#147 := (+ #146 #144)
131.24 +#168 := (<= #147 0::real)
131.25 +#169 := (ite #88 #167 #168)
131.26 +#194 := (not #169)
131.27 +#186 := (or #166 #89)
131.28 +#187 := [def-axiom]: #186
131.29 +#271 := [unit-resolution #187 #263]: #166
131.30 +#170 := (ite #76 #166 #169)
131.31 +#205 := (not #170)
131.32 +#6 := (+ uf_1 uf_2)
131.33 +#64 := (>= #6 0::real)
131.34 +#269 := (or #64 #89)
131.35 +#65 := (not #64)
131.36 +#262 := [hypothesis]: #65
131.37 +#174 := (>= #144 0::real)
131.38 +#175 := (or #89 #174)
131.39 +#230 := (not #175)
131.40 +#257 := [hypothesis]: #230
131.41 +#225 := (or #175 #88)
131.42 +#226 := [def-axiom]: #225
131.43 +#258 := [unit-resolution #226 #257]: #88
131.44 +#227 := (not #174)
131.45 +#228 := (or #175 #227)
131.46 +#229 := [def-axiom]: #228
131.47 +#259 := [unit-resolution #229 #257]: #227
131.48 +#260 := [th-lemma #259 #258]: false
131.49 +#261 := [lemma #260]: #175
131.50 +#172 := (>= #146 0::real)
131.51 +#171 := (>= #147 0::real)
131.52 +#173 := (ite #88 #171 #172)
131.53 +#176 := (ite #76 #173 #175)
131.54 +#233 := (not #176)
131.55 +#264 := (or #64 #233)
131.56 +#177 := (ite #64 #170 #176)
131.57 +#182 := (not #177)
131.58 +#36 := -1::real
131.59 +#38 := (* -1::real uf_2)
131.60 +#95 := (ite #88 uf_2 #38)
131.61 +#107 := (* -1::real #95)
131.62 +#37 := (* -1::real uf_1)
131.63 +#83 := (ite #76 uf_1 #37)
131.64 +#106 := (* -1::real #83)
131.65 +#108 := (+ #106 #107)
131.66 +#39 := (+ #37 #38)
131.67 +#71 := (ite #64 #6 #39)
131.68 +#109 := (+ #71 #108)
131.69 +#110 := (<= #109 0::real)
131.70 +#115 := (not #110)
131.71 +#183 := (iff #115 #182)
131.72 +#180 := (iff #110 #177)
131.73 +#150 := -2::real
131.74 +#152 := (* -2::real uf_2)
131.75 +#155 := (ite #88 #152 0::real)
131.76 +#151 := (* -2::real uf_1)
131.77 +#153 := (+ #151 #152)
131.78 +#154 := (ite #88 #153 #151)
131.79 +#156 := (ite #76 #154 #155)
131.80 +#148 := (ite #88 #146 #147)
131.81 +#145 := (ite #88 0::real #144)
131.82 +#149 := (ite #76 #145 #148)
131.83 +#157 := (ite #64 #149 #156)
131.84 +#162 := (<= #157 0::real)
131.85 +#178 := (iff #162 #177)
131.86 +#179 := [rewrite]: #178
131.87 +#163 := (iff #110 #162)
131.88 +#160 := (= #109 #157)
131.89 +#133 := (+ uf_1 #38)
131.90 +#134 := (ite #88 #133 #6)
131.91 +#131 := (+ #37 uf_2)
131.92 +#132 := (ite #88 #39 #131)
131.93 +#135 := (ite #76 #132 #134)
131.94 +#140 := (+ #71 #135)
131.95 +#158 := (= #140 #157)
131.96 +#159 := [rewrite]: #158
131.97 +#141 := (= #109 #140)
131.98 +#138 := (= #108 #135)
131.99 +#125 := (ite #88 #38 uf_2)
131.100 +#123 := (ite #76 #37 uf_1)
131.101 +#128 := (+ #123 #125)
131.102 +#136 := (= #128 #135)
131.103 +#137 := [rewrite]: #136
131.104 +#129 := (= #108 #128)
131.105 +#126 := (= #107 #125)
131.106 +#127 := [rewrite]: #126
131.107 +#121 := (= #106 #123)
131.108 +#124 := [rewrite]: #121
131.109 +#130 := [monotonicity #124 #127]: #129
131.110 +#139 := [trans #130 #137]: #138
131.111 +#142 := [monotonicity #139]: #141
131.112 +#161 := [trans #142 #159]: #160
131.113 +#164 := [monotonicity #161]: #163
131.114 +#181 := [trans #164 #179]: #180
131.115 +#184 := [monotonicity #181]: #183
131.116 +#15 := (- uf_2)
131.117 +#14 := (< uf_2 0::real)
131.118 +#16 := (ite #14 #15 uf_2)
131.119 +#12 := (- uf_1)
131.120 +#11 := (< uf_1 0::real)
131.121 +#13 := (ite #11 #12 uf_1)
131.122 +#17 := (+ #13 #16)
131.123 +#9 := (- #6)
131.124 +#8 := (< #6 0::real)
131.125 +#10 := (ite #8 #9 #6)
131.126 +#18 := (<= #10 #17)
131.127 +#19 := (not #18)
131.128 +#118 := (iff #19 #115)
131.129 +#52 := (ite #14 #38 uf_2)
131.130 +#47 := (ite #11 #37 uf_1)
131.131 +#55 := (+ #47 #52)
131.132 +#42 := (ite #8 #39 #6)
131.133 +#58 := (<= #42 #55)
131.134 +#61 := (not #58)
131.135 +#116 := (iff #61 #115)
131.136 +#113 := (iff #58 #110)
131.137 +#100 := (+ #83 #95)
131.138 +#103 := (<= #71 #100)
131.139 +#111 := (iff #103 #110)
131.140 +#112 := [rewrite]: #111
131.141 +#104 := (iff #58 #103)
131.142 +#101 := (= #55 #100)
131.143 +#98 := (= #52 #95)
131.144 +#92 := (ite #89 #38 uf_2)
131.145 +#96 := (= #92 #95)
131.146 +#97 := [rewrite]: #96
131.147 +#93 := (= #52 #92)
131.148 +#90 := (iff #14 #89)
131.149 +#91 := [rewrite]: #90
131.150 +#94 := [monotonicity #91]: #93
131.151 +#99 := [trans #94 #97]: #98
131.152 +#86 := (= #47 #83)
131.153 +#77 := (not #76)
131.154 +#80 := (ite #77 #37 uf_1)
131.155 +#84 := (= #80 #83)
131.156 +#85 := [rewrite]: #84
131.157 +#81 := (= #47 #80)
131.158 +#78 := (iff #11 #77)
131.159 +#79 := [rewrite]: #78
131.160 +#82 := [monotonicity #79]: #81
131.161 +#87 := [trans #82 #85]: #86
131.162 +#102 := [monotonicity #87 #99]: #101
131.163 +#74 := (= #42 #71)
131.164 +#68 := (ite #65 #39 #6)
131.165 +#72 := (= #68 #71)
131.166 +#73 := [rewrite]: #72
131.167 +#69 := (= #42 #68)
131.168 +#66 := (iff #8 #65)
131.169 +#67 := [rewrite]: #66
131.170 +#70 := [monotonicity #67]: #69
131.171 +#75 := [trans #70 #73]: #74
131.172 +#105 := [monotonicity #75 #102]: #104
131.173 +#114 := [trans #105 #112]: #113
131.174 +#117 := [monotonicity #114]: #116
131.175 +#62 := (iff #19 #61)
131.176 +#59 := (iff #18 #58)
131.177 +#56 := (= #17 #55)
131.178 +#53 := (= #16 #52)
131.179 +#50 := (= #15 #38)
131.180 +#51 := [rewrite]: #50
131.181 +#54 := [monotonicity #51]: #53
131.182 +#48 := (= #13 #47)
131.183 +#45 := (= #12 #37)
131.184 +#46 := [rewrite]: #45
131.185 +#49 := [monotonicity #46]: #48
131.186 +#57 := [monotonicity #49 #54]: #56
131.187 +#43 := (= #10 #42)
131.188 +#40 := (= #9 #39)
131.189 +#41 := [rewrite]: #40
131.190 +#44 := [monotonicity #41]: #43
131.191 +#60 := [monotonicity #44 #57]: #59
131.192 +#63 := [monotonicity #60]: #62
131.193 +#119 := [trans #63 #117]: #118
131.194 +#35 := [asserted]: #19
131.195 +#120 := [mp #35 #119]: #115
131.196 +#185 := [mp #120 #184]: #182
131.197 +#248 := (or #177 #64 #233)
131.198 +#249 := [def-axiom]: #248
131.199 +#265 := [unit-resolution #249 #185]: #264
131.200 +#266 := [unit-resolution #265 #262]: #233
131.201 +#240 := (or #176 #76 #230)
131.202 +#241 := [def-axiom]: #240
131.203 +#267 := [unit-resolution #241 #266 #261]: #76
131.204 +#268 := [th-lemma #267 #263 #262]: false
131.205 +#270 := [lemma #268]: #269
131.206 +#272 := [unit-resolution #270 #263]: #64
131.207 +#273 := (or #65 #205)
131.208 +#246 := (or #177 #65 #205)
131.209 +#247 := [def-axiom]: #246
131.210 +#274 := [unit-resolution #247 #185]: #273
131.211 +#275 := [unit-resolution #274 #272]: #205
131.212 +#255 := (or #170 #194 #191)
131.213 +#250 := [hypothesis]: #169
131.214 +#251 := [hypothesis]: #205
131.215 +#252 := [hypothesis]: #166
131.216 +#210 := (or #170 #77 #191)
131.217 +#211 := [def-axiom]: #210
131.218 +#253 := [unit-resolution #211 #251 #252]: #77
131.219 +#212 := (or #170 #76 #194)
131.220 +#213 := [def-axiom]: #212
131.221 +#254 := [unit-resolution #213 #253 #251 #250]: false
131.222 +#256 := [lemma #254]: #255
131.223 +#276 := [unit-resolution #256 #275 #271]: #194
131.224 +#200 := (or #169 #89 #199)
131.225 +#201 := [def-axiom]: #200
131.226 +#277 := [unit-resolution #201 #276 #263]: #199
131.227 +#278 := [unit-resolution #211 #275 #271]: #77
131.228 +#279 := [th-lemma #278 #277]: false
131.229 +#280 := [lemma #279]: #89
131.230 +#281 := [hypothesis]: #77
131.231 +#282 := [unit-resolution #241 #281 #261]: #176
131.232 +#283 := [unit-resolution #265 #282]: #64
131.233 +#284 := [th-lemma #281 #283 #280]: false
131.234 +#285 := [lemma #284]: #76
131.235 +#222 := (not #172)
131.236 +#286 := [hypothesis]: #222
131.237 +#287 := [th-lemma #285 #286]: false
131.238 +#288 := [lemma #287]: #172
131.239 +#223 := (or #173 #88 #222)
131.240 +#224 := [def-axiom]: #223
131.241 +#289 := [unit-resolution #224 #288 #280]: #173
131.242 +#214 := (not #173)
131.243 +#238 := (or #176 #77 #214)
131.244 +#239 := [def-axiom]: #238
131.245 +#290 := [unit-resolution #239 #289 #285]: #176
131.246 +#291 := [unit-resolution #265 #290]: #64
131.247 +#292 := [unit-resolution #274 #291]: #205
131.248 +#293 := [unit-resolution #211 #292 #285]: #191
131.249 +#189 := (or #166 #188)
131.250 +#190 := [def-axiom]: #189
131.251 +#294 := [unit-resolution #190 #293]: #188
131.252 +[th-lemma #280 #294]: false
131.253 +unsat
132.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
132.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_07 Tue Oct 20 10:11:30 2009 +0200
132.3 @@ -0,0 +1,11 @@
132.4 +(benchmark Isabelle
132.5 +:extrasorts ( T2 T1)
132.6 +:extrafuns (
132.7 + (uf_2 T1)
132.8 + (uf_1 Int Int T1)
132.9 + (uf_3 T1 T2)
132.10 + )
132.11 +:assumption (forall (?x1 Int) (?x2 Int) (iff (= (uf_1 ?x1 ?x2) uf_2) (< ?x1 ?x2)))
132.12 +:assumption (not (= (uf_3 (uf_1 2 3)) (uf_3 uf_2)))
132.13 +:formula true
132.14 +)
133.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
133.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_07.proof Tue Oct 20 10:11:30 2009 +0200
133.3 @@ -0,0 +1,105 @@
133.4 +#2 := false
133.5 +decl uf_3 :: (-> T1 T2)
133.6 +decl uf_2 :: T1
133.7 +#7 := uf_2
133.8 +#16 := (uf_3 uf_2)
133.9 +decl uf_1 :: (-> int int T1)
133.10 +#13 := 3::int
133.11 +#12 := 2::int
133.12 +#14 := (uf_1 2::int 3::int)
133.13 +#15 := (uf_3 #14)
133.14 +#17 := (= #15 #16)
133.15 +#516 := (= #16 #15)
133.16 +#194 := (= uf_2 #14)
133.17 +#5 := (:var 0 int)
133.18 +#4 := (:var 1 int)
133.19 +#6 := (uf_1 #4 #5)
133.20 +#530 := (pattern #6)
133.21 +#39 := 0::int
133.22 +#37 := -1::int
133.23 +#41 := (* -1::int #5)
133.24 +#42 := (+ #4 #41)
133.25 +#40 := (>= #42 0::int)
133.26 +#38 := (not #40)
133.27 +#8 := (= #6 uf_2)
133.28 +#45 := (iff #8 #38)
133.29 +#531 := (forall (vars (?x1 int) (?x2 int)) (:pat #530) #45)
133.30 +#48 := (forall (vars (?x1 int) (?x2 int)) #45)
133.31 +#534 := (iff #48 #531)
133.32 +#532 := (iff #45 #45)
133.33 +#533 := [refl]: #532
133.34 +#535 := [quant-intro #533]: #534
133.35 +#58 := (~ #48 #48)
133.36 +#56 := (~ #45 #45)
133.37 +#57 := [refl]: #56
133.38 +#59 := [nnf-pos #57]: #58
133.39 +#9 := (< #4 #5)
133.40 +#10 := (iff #8 #9)
133.41 +#11 := (forall (vars (?x1 int) (?x2 int)) #10)
133.42 +#49 := (iff #11 #48)
133.43 +#46 := (iff #10 #45)
133.44 +#43 := (iff #9 #38)
133.45 +#44 := [rewrite]: #43
133.46 +#47 := [monotonicity #44]: #46
133.47 +#50 := [quant-intro #47]: #49
133.48 +#34 := [asserted]: #11
133.49 +#51 := [mp #34 #50]: #48
133.50 +#60 := [mp~ #51 #59]: #48
133.51 +#536 := [mp #60 #535]: #531
133.52 +#508 := (not #531)
133.53 +#509 := (or #508 #194)
133.54 +#201 := (* -1::int 3::int)
133.55 +#115 := (+ 2::int #201)
133.56 +#202 := (>= #115 0::int)
133.57 +#116 := (not #202)
133.58 +#114 := (= #14 uf_2)
133.59 +#203 := (iff #114 #116)
133.60 +#510 := (or #508 #203)
133.61 +#506 := (iff #510 #509)
133.62 +#150 := (iff #509 #509)
133.63 +#513 := [rewrite]: #150
133.64 +#171 := (iff #203 #194)
133.65 +#1 := true
133.66 +#164 := (iff #194 true)
133.67 +#169 := (iff #164 #194)
133.68 +#170 := [rewrite]: #169
133.69 +#505 := (iff #203 #164)
133.70 +#180 := (iff #116 true)
133.71 +#529 := (not false)
133.72 +#184 := (iff #529 true)
133.73 +#520 := [rewrite]: #184
133.74 +#519 := (iff #116 #529)
133.75 +#528 := (iff #202 false)
133.76 +#192 := (>= -1::int 0::int)
133.77 +#526 := (iff #192 false)
133.78 +#527 := [rewrite]: #526
133.79 +#193 := (iff #202 #192)
133.80 +#311 := (= #115 -1::int)
133.81 +#134 := -3::int
133.82 +#208 := (+ 2::int -3::int)
133.83 +#524 := (= #208 -1::int)
133.84 +#181 := [rewrite]: #524
133.85 +#187 := (= #115 #208)
133.86 +#207 := (= #201 -3::int)
133.87 +#204 := [rewrite]: #207
133.88 +#522 := [monotonicity #204]: #187
133.89 +#518 := [trans #522 #181]: #311
133.90 +#525 := [monotonicity #518]: #193
133.91 +#523 := [trans #525 #527]: #528
133.92 +#179 := [monotonicity #523]: #519
133.93 +#521 := [trans #179 #520]: #180
133.94 +#205 := (iff #114 #194)
133.95 +#206 := [rewrite]: #205
133.96 +#168 := [monotonicity #206 #521]: #505
133.97 +#507 := [trans #168 #170]: #171
133.98 +#512 := [monotonicity #507]: #506
133.99 +#515 := [trans #512 #513]: #506
133.100 +#511 := [quant-inst]: #510
133.101 +#155 := [mp #511 #515]: #509
133.102 +#156 := [unit-resolution #155 #536]: #194
133.103 +#514 := [monotonicity #156]: #516
133.104 +#517 := [symm #514]: #17
133.105 +#18 := (not #17)
133.106 +#35 := [asserted]: #18
133.107 +[unit-resolution #35 #517]: false
133.108 +unsat
134.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
134.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_08 Tue Oct 20 10:11:30 2009 +0200
134.3 @@ -0,0 +1,7 @@
134.4 +(benchmark Isabelle
134.5 +:extrafuns (
134.6 + (uf_1 Int)
134.7 + )
134.8 +:assumption (not (or (<= 4 (+ uf_1 3)) (< uf_1 1)))
134.9 +:formula true
134.10 +)
135.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
135.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_08.proof Tue Oct 20 10:11:30 2009 +0200
135.3 @@ -0,0 +1,54 @@
135.4 +#2 := false
135.5 +#9 := 1::int
135.6 +decl uf_1 :: int
135.7 +#5 := uf_1
135.8 +#10 := (< uf_1 1::int)
135.9 +#6 := 3::int
135.10 +#7 := (+ uf_1 3::int)
135.11 +#4 := 4::int
135.12 +#8 := (<= 4::int #7)
135.13 +#11 := (or #8 #10)
135.14 +#12 := (not #11)
135.15 +#66 := (iff #12 false)
135.16 +#29 := (+ 3::int uf_1)
135.17 +#32 := (<= 4::int #29)
135.18 +#38 := (or #10 #32)
135.19 +#43 := (not #38)
135.20 +#64 := (iff #43 false)
135.21 +#1 := true
135.22 +#59 := (not true)
135.23 +#62 := (iff #59 false)
135.24 +#63 := [rewrite]: #62
135.25 +#60 := (iff #43 #59)
135.26 +#57 := (iff #38 true)
135.27 +#48 := (>= uf_1 1::int)
135.28 +#46 := (not #48)
135.29 +#52 := (or #46 #48)
135.30 +#55 := (iff #52 true)
135.31 +#56 := [rewrite]: #55
135.32 +#53 := (iff #38 #52)
135.33 +#50 := (iff #32 #48)
135.34 +#51 := [rewrite]: #50
135.35 +#47 := (iff #10 #46)
135.36 +#49 := [rewrite]: #47
135.37 +#54 := [monotonicity #49 #51]: #53
135.38 +#58 := [trans #54 #56]: #57
135.39 +#61 := [monotonicity #58]: #60
135.40 +#65 := [trans #61 #63]: #64
135.41 +#44 := (iff #12 #43)
135.42 +#41 := (iff #11 #38)
135.43 +#35 := (or #32 #10)
135.44 +#39 := (iff #35 #38)
135.45 +#40 := [rewrite]: #39
135.46 +#36 := (iff #11 #35)
135.47 +#33 := (iff #8 #32)
135.48 +#30 := (= #7 #29)
135.49 +#31 := [rewrite]: #30
135.50 +#34 := [monotonicity #31]: #33
135.51 +#37 := [monotonicity #34]: #36
135.52 +#42 := [trans #37 #40]: #41
135.53 +#45 := [monotonicity #42]: #44
135.54 +#67 := [trans #45 #65]: #66
135.55 +#28 := [asserted]: #12
135.56 +[mp #28 #67]: false
135.57 +unsat
136.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
136.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_09 Tue Oct 20 10:11:30 2009 +0200
136.3 @@ -0,0 +1,10 @@
136.4 +(benchmark Isabelle
136.5 +:extrafuns (
136.6 + (uf_1 Int)
136.7 + (uf_2 Int)
136.8 + )
136.9 +:assumption (<= 3 uf_1)
136.10 +:assumption (= uf_2 (+ uf_1 4))
136.11 +:assumption (not (< 0 (- uf_2 uf_1)))
136.12 +:formula true
136.13 +)
137.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
137.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_09.proof Tue Oct 20 10:11:30 2009 +0200
137.3 @@ -0,0 +1,63 @@
137.4 +#2 := false
137.5 +#11 := 0::int
137.6 +decl uf_2 :: int
137.7 +#7 := uf_2
137.8 +#42 := -1::int
137.9 +#45 := (* -1::int uf_2)
137.10 +decl uf_1 :: int
137.11 +#5 := uf_1
137.12 +#46 := (+ uf_1 #45)
137.13 +#63 := (>= #46 0::int)
137.14 +#83 := (iff #63 false)
137.15 +#44 := -4::int
137.16 +#79 := (>= -4::int 0::int)
137.17 +#81 := (iff #79 false)
137.18 +#82 := [rewrite]: #81
137.19 +#77 := (iff #63 #79)
137.20 +#47 := (= #46 -4::int)
137.21 +#8 := 4::int
137.22 +#9 := (+ uf_1 4::int)
137.23 +#10 := (= uf_2 #9)
137.24 +#49 := (iff #10 #47)
137.25 +#32 := (+ 4::int uf_1)
137.26 +#39 := (= uf_2 #32)
137.27 +#43 := (iff #39 #47)
137.28 +#48 := [rewrite]: #43
137.29 +#40 := (iff #10 #39)
137.30 +#37 := (= #9 #32)
137.31 +#38 := [rewrite]: #37
137.32 +#41 := [monotonicity #38]: #40
137.33 +#50 := [trans #41 #48]: #49
137.34 +#31 := [asserted]: #10
137.35 +#51 := [mp #31 #50]: #47
137.36 +#80 := [monotonicity #51]: #77
137.37 +#84 := [trans #80 #82]: #83
137.38 +#12 := (- uf_2 uf_1)
137.39 +#13 := (< 0::int #12)
137.40 +#14 := (not #13)
137.41 +#74 := (iff #14 #63)
137.42 +#53 := (* -1::int uf_1)
137.43 +#54 := (+ #53 uf_2)
137.44 +#57 := (< 0::int #54)
137.45 +#60 := (not #57)
137.46 +#72 := (iff #60 #63)
137.47 +#64 := (not #63)
137.48 +#67 := (not #64)
137.49 +#70 := (iff #67 #63)
137.50 +#71 := [rewrite]: #70
137.51 +#68 := (iff #60 #67)
137.52 +#65 := (iff #57 #64)
137.53 +#66 := [rewrite]: #65
137.54 +#69 := [monotonicity #66]: #68
137.55 +#73 := [trans #69 #71]: #72
137.56 +#61 := (iff #14 #60)
137.57 +#58 := (iff #13 #57)
137.58 +#55 := (= #12 #54)
137.59 +#56 := [rewrite]: #55
137.60 +#59 := [monotonicity #56]: #58
137.61 +#62 := [monotonicity #59]: #61
137.62 +#75 := [trans #62 #73]: #74
137.63 +#52 := [asserted]: #14
137.64 +#76 := [mp #52 #75]: #63
137.65 +[mp #76 #84]: false
137.66 +unsat
138.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
138.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_10 Tue Oct 20 10:11:30 2009 +0200
138.3 @@ -0,0 +1,4 @@
138.4 +(benchmark Isabelle
138.5 +:assumption (not (let (?x1 2) (not (= (+ ?x1 ?x1) 5))))
138.6 +:formula true
138.7 +)
139.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
139.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_10.proof Tue Oct 20 10:11:30 2009 +0200
139.3 @@ -0,0 +1,35 @@
139.4 +#2 := false
139.5 +#6 := 5::int
139.6 +#4 := 2::int
139.7 +#5 := (+ 2::int 2::int)
139.8 +#7 := (= #5 5::int)
139.9 +#8 := (not #7)
139.10 +#9 := (not #8)
139.11 +#48 := (iff #9 false)
139.12 +#1 := true
139.13 +#43 := (not true)
139.14 +#46 := (iff #43 false)
139.15 +#47 := [rewrite]: #46
139.16 +#44 := (iff #9 #43)
139.17 +#41 := (iff #8 true)
139.18 +#36 := (not false)
139.19 +#39 := (iff #36 true)
139.20 +#40 := [rewrite]: #39
139.21 +#37 := (iff #8 #36)
139.22 +#34 := (iff #7 false)
139.23 +#26 := 4::int
139.24 +#29 := (= 4::int 5::int)
139.25 +#32 := (iff #29 false)
139.26 +#33 := [rewrite]: #32
139.27 +#30 := (iff #7 #29)
139.28 +#27 := (= #5 4::int)
139.29 +#28 := [rewrite]: #27
139.30 +#31 := [monotonicity #28]: #30
139.31 +#35 := [trans #31 #33]: #34
139.32 +#38 := [monotonicity #35]: #37
139.33 +#42 := [trans #38 #40]: #41
139.34 +#45 := [monotonicity #42]: #44
139.35 +#49 := [trans #45 #47]: #48
139.36 +#25 := [asserted]: #9
139.37 +[mp #25 #49]: false
139.38 +unsat
140.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
140.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_11 Tue Oct 20 10:11:30 2009 +0200
140.3 @@ -0,0 +1,10 @@
140.4 +(benchmark Isabelle
140.5 +:extrafuns (
140.6 + (uf_2 Real)
140.7 + (uf_1 Real)
140.8 + )
140.9 +:assumption (< (+ (* 3.0 uf_1) (* 7.0 uf_2)) 4.0)
140.10 +:assumption (< 3.0 (* 2.0 uf_1))
140.11 +:assumption (not (< uf_2 0.0))
140.12 +:formula true
140.13 +)
141.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
141.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_11.proof Tue Oct 20 10:11:30 2009 +0200
141.3 @@ -0,0 +1,45 @@
141.4 +#2 := false
141.5 +#11 := 4::real
141.6 +decl uf_2 :: real
141.7 +#8 := uf_2
141.8 +#7 := 7::real
141.9 +#9 := (* 7::real uf_2)
141.10 +decl uf_1 :: real
141.11 +#5 := uf_1
141.12 +#4 := 3::real
141.13 +#6 := (* 3::real uf_1)
141.14 +#10 := (+ #6 #9)
141.15 +#41 := (>= #10 4::real)
141.16 +#39 := (not #41)
141.17 +#12 := (< #10 4::real)
141.18 +#40 := (iff #12 #39)
141.19 +#37 := [rewrite]: #40
141.20 +#34 := [asserted]: #12
141.21 +#38 := [mp #34 #37]: #39
141.22 +#13 := 2::real
141.23 +#14 := (* 2::real uf_1)
141.24 +#43 := (<= #14 3::real)
141.25 +#44 := (not #43)
141.26 +#15 := (< 3::real #14)
141.27 +#45 := (iff #15 #44)
141.28 +#46 := [rewrite]: #45
141.29 +#35 := [asserted]: #15
141.30 +#47 := [mp #35 #46]: #44
141.31 +#16 := 0::real
141.32 +#51 := (>= uf_2 0::real)
141.33 +#17 := (< uf_2 0::real)
141.34 +#18 := (not #17)
141.35 +#58 := (iff #18 #51)
141.36 +#49 := (not #51)
141.37 +#53 := (not #49)
141.38 +#56 := (iff #53 #51)
141.39 +#57 := [rewrite]: #56
141.40 +#54 := (iff #18 #53)
141.41 +#50 := (iff #17 #49)
141.42 +#52 := [rewrite]: #50
141.43 +#55 := [monotonicity #52]: #54
141.44 +#59 := [trans #55 #57]: #58
141.45 +#36 := [asserted]: #18
141.46 +#60 := [mp #36 #59]: #51
141.47 +[th-lemma #60 #47 #38]: false
141.48 +unsat
142.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
142.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_12 Tue Oct 20 10:11:30 2009 +0200
142.3 @@ -0,0 +1,8 @@
142.4 +(benchmark Isabelle
142.5 +:extrafuns (
142.6 + (uf_2 Int)
142.7 + (uf_1 Int)
142.8 + )
142.9 +:assumption (not (iff (or (<= 0 (+ uf_1 (* (~ 1) uf_2))) (or (not (<= 0 uf_2)) (<= 0 uf_2))) (not false)))
142.10 +:formula true
142.11 +)
143.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
143.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_12.proof Tue Oct 20 10:11:30 2009 +0200
143.3 @@ -0,0 +1,59 @@
143.4 +#2 := false
143.5 +#16 := (not false)
143.6 +decl uf_2 :: int
143.7 +#8 := uf_2
143.8 +#4 := 0::int
143.9 +#12 := (<= 0::int uf_2)
143.10 +#13 := (not #12)
143.11 +#14 := (or #13 #12)
143.12 +#6 := 1::int
143.13 +#7 := (- 1::int)
143.14 +#9 := (* #7 uf_2)
143.15 +decl uf_1 :: int
143.16 +#5 := uf_1
143.17 +#10 := (+ uf_1 #9)
143.18 +#11 := (<= 0::int #10)
143.19 +#15 := (or #11 #14)
143.20 +#17 := (iff #15 #16)
143.21 +#18 := (not #17)
143.22 +#70 := (iff #18 false)
143.23 +#1 := true
143.24 +#65 := (not true)
143.25 +#68 := (iff #65 false)
143.26 +#69 := [rewrite]: #68
143.27 +#66 := (iff #18 #65)
143.28 +#63 := (iff #17 true)
143.29 +#58 := (iff true true)
143.30 +#61 := (iff #58 true)
143.31 +#62 := [rewrite]: #61
143.32 +#59 := (iff #17 #58)
143.33 +#56 := (iff #16 true)
143.34 +#57 := [rewrite]: #56
143.35 +#54 := (iff #15 true)
143.36 +#35 := -1::int
143.37 +#38 := (* -1::int uf_2)
143.38 +#41 := (+ uf_1 #38)
143.39 +#44 := (<= 0::int #41)
143.40 +#49 := (or #44 true)
143.41 +#52 := (iff #49 true)
143.42 +#53 := [rewrite]: #52
143.43 +#50 := (iff #15 #49)
143.44 +#47 := (iff #14 true)
143.45 +#48 := [rewrite]: #47
143.46 +#45 := (iff #11 #44)
143.47 +#42 := (= #10 #41)
143.48 +#39 := (= #9 #38)
143.49 +#36 := (= #7 -1::int)
143.50 +#37 := [rewrite]: #36
143.51 +#40 := [monotonicity #37]: #39
143.52 +#43 := [monotonicity #40]: #42
143.53 +#46 := [monotonicity #43]: #45
143.54 +#51 := [monotonicity #46 #48]: #50
143.55 +#55 := [trans #51 #53]: #54
143.56 +#60 := [monotonicity #55 #57]: #59
143.57 +#64 := [trans #60 #62]: #63
143.58 +#67 := [monotonicity #64]: #66
143.59 +#71 := [trans #67 #69]: #70
143.60 +#34 := [asserted]: #18
143.61 +[mp #34 #71]: false
143.62 +unsat
144.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
144.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_13 Tue Oct 20 10:11:30 2009 +0200
144.3 @@ -0,0 +1,13 @@
144.4 +(benchmark Isabelle
144.5 +:extrasorts ( T1)
144.6 +:extrafuns (
144.7 + (uf_2 T1)
144.8 + (uf_3 Int Int T1)
144.9 + (uf_1 Int Int T1)
144.10 + (uf_4 Int)
144.11 + )
144.12 +:assumption (forall (?x1 Int) (?x2 Int) (iff (= (uf_1 ?x1 ?x2) uf_2) (<= ?x1 ?x2)))
144.13 +:assumption (forall (?x3 Int) (?x4 Int) (iff (= (uf_3 ?x3 ?x4) uf_2) (< ?x3 ?x4)))
144.14 +:assumption (not (distinct (uf_3 uf_4 3) (uf_1 3 uf_4)))
144.15 +:formula true
144.16 +)
145.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
145.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_13.proof Tue Oct 20 10:11:30 2009 +0200
145.3 @@ -0,0 +1,212 @@
145.4 +#2 := false
145.5 +decl uf_3 :: (-> int int T1)
145.6 +#18 := 3::int
145.7 +decl uf_4 :: int
145.8 +#17 := uf_4
145.9 +#19 := (uf_3 uf_4 3::int)
145.10 +decl uf_2 :: T1
145.11 +#7 := uf_2
145.12 +#221 := (= uf_2 #19)
145.13 +decl uf_1 :: (-> int int T1)
145.14 +#20 := (uf_1 3::int uf_4)
145.15 +#256 := (= uf_2 #20)
145.16 +#531 := (iff #256 #221)
145.17 +#529 := (iff #221 #256)
145.18 +#87 := (= #19 #20)
145.19 +#21 := (distinct #19 #20)
145.20 +#22 := (not #21)
145.21 +#96 := (iff #22 #87)
145.22 +#88 := (not #87)
145.23 +#91 := (not #88)
145.24 +#94 := (iff #91 #87)
145.25 +#95 := [rewrite]: #94
145.26 +#92 := (iff #22 #91)
145.27 +#89 := (iff #21 #88)
145.28 +#90 := [rewrite]: #89
145.29 +#93 := [monotonicity #90]: #92
145.30 +#97 := [trans #93 #95]: #96
145.31 +#86 := [asserted]: #22
145.32 +#100 := [mp #86 #97]: #87
145.33 +#530 := [monotonicity #100]: #529
145.34 +#525 := [symm #530]: #531
145.35 +#548 := (not #221)
145.36 +#232 := (not #256)
145.37 +#526 := (iff #232 #548)
145.38 +#532 := [monotonicity #525]: #526
145.39 +#536 := [hypothesis]: #232
145.40 +#533 := [mp #536 #532]: #548
145.41 +#259 := (>= uf_4 3::int)
145.42 +#576 := (not #259)
145.43 +#542 := (or #256 #576)
145.44 +#257 := (iff #256 #259)
145.45 +#5 := (:var 0 int)
145.46 +#4 := (:var 1 int)
145.47 +#6 := (uf_1 #4 #5)
145.48 +#583 := (pattern #6)
145.49 +#44 := 0::int
145.50 +#41 := -1::int
145.51 +#42 := (* -1::int #5)
145.52 +#43 := (+ #4 #42)
145.53 +#45 := (<= #43 0::int)
145.54 +#8 := (= #6 uf_2)
145.55 +#48 := (iff #8 #45)
145.56 +#584 := (forall (vars (?x1 int) (?x2 int)) (:pat #583) #48)
145.57 +#51 := (forall (vars (?x1 int) (?x2 int)) #48)
145.58 +#587 := (iff #51 #584)
145.59 +#585 := (iff #48 #48)
145.60 +#586 := [refl]: #585
145.61 +#588 := [quant-intro #586]: #587
145.62 +#108 := (~ #51 #51)
145.63 +#106 := (~ #48 #48)
145.64 +#107 := [refl]: #106
145.65 +#109 := [nnf-pos #107]: #108
145.66 +#9 := (<= #4 #5)
145.67 +#10 := (iff #8 #9)
145.68 +#11 := (forall (vars (?x1 int) (?x2 int)) #10)
145.69 +#52 := (iff #11 #51)
145.70 +#49 := (iff #10 #48)
145.71 +#46 := (iff #9 #45)
145.72 +#47 := [rewrite]: #46
145.73 +#50 := [monotonicity #47]: #49
145.74 +#53 := [quant-intro #50]: #52
145.75 +#38 := [asserted]: #11
145.76 +#54 := [mp #38 #53]: #51
145.77 +#110 := [mp~ #54 #109]: #51
145.78 +#589 := [mp #110 #588]: #584
145.79 +#575 := (not #584)
145.80 +#577 := (or #575 #257)
145.81 +#167 := (* -1::int uf_4)
145.82 +#254 := (+ 3::int #167)
145.83 +#168 := (<= #254 0::int)
145.84 +#255 := (= #20 uf_2)
145.85 +#169 := (iff #255 #168)
145.86 +#234 := (or #575 #169)
145.87 +#571 := (iff #234 #577)
145.88 +#246 := (iff #577 #577)
145.89 +#578 := [rewrite]: #246
145.90 +#261 := (iff #169 #257)
145.91 +#187 := (iff #168 #259)
145.92 +#260 := [rewrite]: #187
145.93 +#247 := (iff #255 #256)
145.94 +#258 := [rewrite]: #247
145.95 +#240 := [monotonicity #258 #260]: #261
145.96 +#245 := [monotonicity #240]: #571
145.97 +#579 := [trans #245 #578]: #571
145.98 +#364 := [quant-inst]: #234
145.99 +#580 := [mp #364 #579]: #577
145.100 +#541 := [unit-resolution #580 #589]: #257
145.101 +#581 := (not #257)
145.102 +#582 := (or #581 #256 #576)
145.103 +#572 := [def-axiom]: #582
145.104 +#537 := [unit-resolution #572 #541]: #542
145.105 +#543 := [unit-resolution #537 #536]: #576
145.106 +#385 := (or #221 #259)
145.107 +#552 := (iff #221 #576)
145.108 +#12 := (uf_3 #4 #5)
145.109 +#590 := (pattern #12)
145.110 +#69 := (>= #43 0::int)
145.111 +#68 := (not #69)
145.112 +#40 := (= uf_2 #12)
145.113 +#75 := (iff #40 #68)
145.114 +#591 := (forall (vars (?x3 int) (?x4 int)) (:pat #590) #75)
145.115 +#80 := (forall (vars (?x3 int) (?x4 int)) #75)
145.116 +#594 := (iff #80 #591)
145.117 +#592 := (iff #75 #75)
145.118 +#593 := [refl]: #592
145.119 +#595 := [quant-intro #593]: #594
145.120 +#101 := (~ #80 #80)
145.121 +#111 := (~ #75 #75)
145.122 +#112 := [refl]: #111
145.123 +#98 := [nnf-pos #112]: #101
145.124 +#14 := (< #4 #5)
145.125 +#13 := (= #12 uf_2)
145.126 +#15 := (iff #13 #14)
145.127 +#16 := (forall (vars (?x3 int) (?x4 int)) #15)
145.128 +#83 := (iff #16 #80)
145.129 +#60 := (iff #14 #40)
145.130 +#65 := (forall (vars (?x3 int) (?x4 int)) #60)
145.131 +#81 := (iff #65 #80)
145.132 +#78 := (iff #60 #75)
145.133 +#72 := (iff #68 #40)
145.134 +#76 := (iff #72 #75)
145.135 +#77 := [rewrite]: #76
145.136 +#73 := (iff #60 #72)
145.137 +#70 := (iff #14 #68)
145.138 +#71 := [rewrite]: #70
145.139 +#74 := [monotonicity #71]: #73
145.140 +#79 := [trans #74 #77]: #78
145.141 +#82 := [quant-intro #79]: #81
145.142 +#66 := (iff #16 #65)
145.143 +#63 := (iff #15 #60)
145.144 +#57 := (iff #40 #14)
145.145 +#61 := (iff #57 #60)
145.146 +#62 := [rewrite]: #61
145.147 +#58 := (iff #15 #57)
145.148 +#55 := (iff #13 #40)
145.149 +#56 := [rewrite]: #55
145.150 +#59 := [monotonicity #56]: #58
145.151 +#64 := [trans #59 #62]: #63
145.152 +#67 := [quant-intro #64]: #66
145.153 +#84 := [trans #67 #82]: #83
145.154 +#39 := [asserted]: #16
145.155 +#85 := [mp #39 #84]: #80
145.156 +#113 := [mp~ #85 #98]: #80
145.157 +#596 := [mp #113 #595]: #591
145.158 +#276 := (not #591)
145.159 +#550 := (or #276 #552)
145.160 +#222 := (* -1::int 3::int)
145.161 +#223 := (+ uf_4 #222)
145.162 +#224 := (>= #223 0::int)
145.163 +#560 := (not #224)
145.164 +#561 := (iff #221 #560)
145.165 +#554 := (or #276 #561)
145.166 +#555 := (iff #554 #550)
145.167 +#266 := (iff #550 #550)
145.168 +#267 := [rewrite]: #266
145.169 +#553 := (iff #561 #552)
145.170 +#282 := (iff #560 #576)
145.171 +#280 := (iff #224 #259)
145.172 +#562 := -3::int
145.173 +#566 := (+ -3::int uf_4)
145.174 +#567 := (>= #566 0::int)
145.175 +#557 := (iff #567 #259)
145.176 +#279 := [rewrite]: #557
145.177 +#570 := (iff #224 #567)
145.178 +#209 := (= #223 #566)
145.179 +#559 := (+ uf_4 -3::int)
145.180 +#568 := (= #559 #566)
145.181 +#208 := [rewrite]: #568
145.182 +#565 := (= #223 #559)
145.183 +#563 := (= #222 -3::int)
145.184 +#564 := [rewrite]: #563
145.185 +#203 := [monotonicity #564]: #565
145.186 +#569 := [trans #203 #208]: #209
145.187 +#556 := [monotonicity #569]: #570
145.188 +#281 := [trans #556 #279]: #280
145.189 +#175 := [monotonicity #281]: #282
145.190 +#275 := [monotonicity #175]: #553
145.191 +#265 := [monotonicity #275]: #555
145.192 +#268 := [trans #265 #267]: #555
145.193 +#551 := [quant-inst]: #554
145.194 +#546 := [mp #551 #268]: #550
145.195 +#384 := [unit-resolution #546 #596]: #552
145.196 +#547 := (not #552)
145.197 +#262 := (or #547 #221 #259)
145.198 +#544 := [def-axiom]: #262
145.199 +#386 := [unit-resolution #544 #384]: #385
145.200 +#528 := [unit-resolution #386 #543]: #221
145.201 +#527 := [unit-resolution #528 #533]: false
145.202 +#534 := [lemma #527]: #256
145.203 +#523 := [mp #534 #525]: #221
145.204 +#363 := (or #232 #259)
145.205 +#237 := (or #581 #232 #259)
145.206 +#573 := [def-axiom]: #237
145.207 +#365 := [unit-resolution #573 #541]: #363
145.208 +#366 := [unit-resolution #365 #534]: #259
145.209 +#519 := (or #548 #576)
145.210 +#545 := (or #547 #548 #576)
145.211 +#549 := [def-axiom]: #545
145.212 +#520 := [unit-resolution #549 #384]: #519
145.213 +#522 := [unit-resolution #520 #366]: #548
145.214 +[unit-resolution #522 #523]: false
145.215 +unsat
146.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
146.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_14 Tue Oct 20 10:11:30 2009 +0200
146.3 @@ -0,0 +1,8 @@
146.4 +(benchmark Isabelle
146.5 +:extrafuns (
146.6 + (uf_1 Int)
146.7 + )
146.8 +:assumption (< 0 uf_1)
146.9 +:assumption (not (distinct uf_1 (* uf_1 2) (- uf_1 uf_1)))
146.10 +:formula true
146.11 +)
147.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
147.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_14.proof Tue Oct 20 10:11:30 2009 +0200
147.3 @@ -0,0 +1,86 @@
147.4 +#2 := false
147.5 +decl uf_1 :: int
147.6 +#5 := uf_1
147.7 +#7 := 2::int
147.8 +#29 := (* 2::int uf_1)
147.9 +#4 := 0::int
147.10 +#54 := (= 0::int #29)
147.11 +#55 := (not #54)
147.12 +#61 := (= #29 0::int)
147.13 +#104 := (not #61)
147.14 +#110 := (iff #104 #55)
147.15 +#108 := (iff #61 #54)
147.16 +#109 := [commutativity]: #108
147.17 +#111 := [monotonicity #109]: #110
147.18 +#62 := (<= #29 0::int)
147.19 +#100 := (not #62)
147.20 +#30 := (<= uf_1 0::int)
147.21 +#31 := (not #30)
147.22 +#6 := (< 0::int uf_1)
147.23 +#32 := (iff #6 #31)
147.24 +#33 := [rewrite]: #32
147.25 +#27 := [asserted]: #6
147.26 +#34 := [mp #27 #33]: #31
147.27 +#101 := (or #100 #30)
147.28 +#102 := [th-lemma]: #101
147.29 +#103 := [unit-resolution #102 #34]: #100
147.30 +#105 := (or #104 #62)
147.31 +#106 := [th-lemma]: #105
147.32 +#107 := [unit-resolution #106 #103]: #104
147.33 +#112 := [mp #107 #111]: #55
147.34 +#56 := (= uf_1 #29)
147.35 +#57 := (not #56)
147.36 +#53 := (= 0::int uf_1)
147.37 +#50 := (not #53)
147.38 +#58 := (and #50 #55 #57)
147.39 +#69 := (not #58)
147.40 +#42 := (distinct 0::int uf_1 #29)
147.41 +#47 := (not #42)
147.42 +#9 := (- uf_1 uf_1)
147.43 +#8 := (* uf_1 2::int)
147.44 +#10 := (distinct uf_1 #8 #9)
147.45 +#11 := (not #10)
147.46 +#48 := (iff #11 #47)
147.47 +#45 := (iff #10 #42)
147.48 +#39 := (distinct uf_1 #29 0::int)
147.49 +#43 := (iff #39 #42)
147.50 +#44 := [rewrite]: #43
147.51 +#40 := (iff #10 #39)
147.52 +#37 := (= #9 0::int)
147.53 +#38 := [rewrite]: #37
147.54 +#35 := (= #8 #29)
147.55 +#36 := [rewrite]: #35
147.56 +#41 := [monotonicity #36 #38]: #40
147.57 +#46 := [trans #41 #44]: #45
147.58 +#49 := [monotonicity #46]: #48
147.59 +#28 := [asserted]: #11
147.60 +#52 := [mp #28 #49]: #47
147.61 +#80 := (or #42 #69)
147.62 +#81 := [def-axiom]: #80
147.63 +#82 := [unit-resolution #81 #52]: #69
147.64 +#59 := (= uf_1 0::int)
147.65 +#83 := (not #59)
147.66 +#89 := (iff #83 #50)
147.67 +#87 := (iff #59 #53)
147.68 +#88 := [commutativity]: #87
147.69 +#90 := [monotonicity #88]: #89
147.70 +#84 := (or #83 #30)
147.71 +#85 := [th-lemma]: #84
147.72 +#86 := [unit-resolution #85 #34]: #83
147.73 +#91 := [mp #86 #90]: #50
147.74 +#64 := -1::int
147.75 +#65 := (* -1::int #29)
147.76 +#66 := (+ uf_1 #65)
147.77 +#68 := (>= #66 0::int)
147.78 +#92 := (not #68)
147.79 +#93 := (or #92 #30)
147.80 +#94 := [th-lemma]: #93
147.81 +#95 := [unit-resolution #94 #34]: #92
147.82 +#96 := (or #57 #68)
147.83 +#97 := [th-lemma]: #96
147.84 +#98 := [unit-resolution #97 #95]: #57
147.85 +#76 := (or #58 #53 #54 #56)
147.86 +#77 := [def-axiom]: #76
147.87 +#99 := [unit-resolution #77 #98 #91 #82]: #54
147.88 +[unit-resolution #99 #112]: false
147.89 +unsat
148.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
148.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_15 Tue Oct 20 10:11:30 2009 +0200
148.3 @@ -0,0 +1,9 @@
148.4 +(benchmark Isabelle
148.5 +:extrafuns (
148.6 + (uf_2 Int)
148.7 + (uf_1 Int)
148.8 + (uf_3 Int)
148.9 + )
148.10 +:assumption (not (or (and (< uf_1 uf_2) (< uf_2 uf_3)) (or (and (< uf_1 uf_2) (= uf_2 uf_3)) (or (and (< uf_1 uf_3) (< uf_3 uf_2)) (or (and (= uf_1 uf_3) (< uf_3 uf_2)) (or (and (= uf_1 uf_2) (< uf_2 uf_3)) (or (and (< uf_3 uf_2) (< uf_2 uf_1)) (or (and (< uf_3 uf_2) (= uf_2 uf_1)) (or (and (< uf_3 uf_1) (< uf_1 uf_2)) (or (and (= uf_3 uf_1) (< uf_1 uf_2)) (or (and (= uf_3 uf_2) (< uf_2 uf_1)) (or (and (< uf_2 uf_1) (< uf_1 uf_3)) (or (and (< uf_2 uf_1) (= uf_3 uf_1)) (or (and (< uf_2 uf_3) (< uf_3 uf_1)) (or (and (= uf_2 uf_1) (< uf_1 uf_3)) (or (and (= uf_2 uf_3) (< uf_3 uf_1)) (and (= uf_3 uf_2) (= uf_2 uf_1))))))))))))))))))
148.11 +:formula true
148.12 +)
149.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
149.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_15.proof Tue Oct 20 10:11:30 2009 +0200
149.3 @@ -0,0 +1,673 @@
149.4 +#2 := false
149.5 +#169 := 0::int
149.6 +decl uf_2 :: int
149.7 +#5 := uf_2
149.8 +#166 := -1::int
149.9 +#202 := (* -1::int uf_2)
149.10 +decl uf_1 :: int
149.11 +#4 := uf_1
149.12 +#203 := (+ uf_1 #202)
149.13 +#218 := (>= #203 0::int)
149.14 +decl uf_3 :: int
149.15 +#7 := uf_3
149.16 +#167 := (* -1::int uf_3)
149.17 +#168 := (+ uf_1 #167)
149.18 +#178 := (>= #168 0::int)
149.19 +#217 := (not #218)
149.20 +#204 := (<= #203 0::int)
149.21 +#205 := (not #204)
149.22 +#692 := [hypothesis]: #205
149.23 +#177 := (not #178)
149.24 +#693 := (or #177 #204)
149.25 +#170 := (<= #168 0::int)
149.26 +#191 := (+ uf_2 #167)
149.27 +#237 := (<= #191 0::int)
149.28 +#238 := (not #237)
149.29 +#171 := (not #170)
149.30 +#685 := [hypothesis]: #171
149.31 +#190 := (>= #191 0::int)
149.32 +#455 := (or #170 #190)
149.33 +#189 := (not #190)
149.34 +#197 := (and #171 #189)
149.35 +#354 := (not #197)
149.36 +#464 := (iff #354 #455)
149.37 +#456 := (not #455)
149.38 +#459 := (not #456)
149.39 +#462 := (iff #459 #455)
149.40 +#463 := [rewrite]: #462
149.41 +#460 := (iff #354 #459)
149.42 +#457 := (iff #197 #456)
149.43 +#458 := [rewrite]: #457
149.44 +#461 := [monotonicity #458]: #460
149.45 +#465 := [trans #461 #463]: #464
149.46 +#287 := (and #189 #217)
149.47 +#10 := (= uf_2 uf_3)
149.48 +#279 := (and #10 #217)
149.49 +#273 := (and #177 #238)
149.50 +#15 := (= uf_1 uf_3)
149.51 +#268 := (and #15 #238)
149.52 +#17 := (= uf_1 uf_2)
149.53 +#260 := (and #17 #189)
149.54 +#252 := (and #205 #238)
149.55 +#244 := (and #17 #238)
149.56 +#232 := (and #171 #217)
149.57 +#224 := (and #15 #217)
149.58 +#214 := (and #10 #205)
149.59 +#211 := (and #177 #205)
149.60 +#208 := (and #15 #205)
149.61 +#184 := (and #17 #177)
149.62 +#174 := (and #10 #171)
149.63 +#115 := (and #10 #17)
149.64 +#337 := (or #115 #174 #184 #197 #208 #211 #214 #224 #232 #244 #252 #260 #268 #273 #279 #287)
149.65 +#342 := (not #337)
149.66 +#21 := (= uf_2 uf_1)
149.67 +#27 := (= uf_3 uf_2)
149.68 +#34 := (and #27 #21)
149.69 +#23 := (< uf_3 uf_1)
149.70 +#33 := (and #10 #23)
149.71 +#35 := (or #33 #34)
149.72 +#12 := (< uf_1 uf_3)
149.73 +#32 := (and #21 #12)
149.74 +#36 := (or #32 #35)
149.75 +#8 := (< uf_2 uf_3)
149.76 +#31 := (and #8 #23)
149.77 +#37 := (or #31 #36)
149.78 +#25 := (= uf_3 uf_1)
149.79 +#19 := (< uf_2 uf_1)
149.80 +#30 := (and #19 #25)
149.81 +#38 := (or #30 #37)
149.82 +#29 := (and #19 #12)
149.83 +#39 := (or #29 #38)
149.84 +#28 := (and #27 #19)
149.85 +#40 := (or #28 #39)
149.86 +#6 := (< uf_1 uf_2)
149.87 +#26 := (and #25 #6)
149.88 +#41 := (or #26 #40)
149.89 +#24 := (and #23 #6)
149.90 +#42 := (or #24 #41)
149.91 +#13 := (< uf_3 uf_2)
149.92 +#22 := (and #13 #21)
149.93 +#43 := (or #22 #42)
149.94 +#20 := (and #13 #19)
149.95 +#44 := (or #20 #43)
149.96 +#18 := (and #17 #8)
149.97 +#45 := (or #18 #44)
149.98 +#16 := (and #15 #13)
149.99 +#46 := (or #16 #45)
149.100 +#14 := (and #12 #13)
149.101 +#47 := (or #14 #46)
149.102 +#11 := (and #6 #10)
149.103 +#48 := (or #11 #47)
149.104 +#9 := (and #6 #8)
149.105 +#49 := (or #9 #48)
149.106 +#50 := (not #49)
149.107 +#345 := (iff #50 #342)
149.108 +#118 := (or #33 #115)
149.109 +#110 := (and #12 #17)
149.110 +#121 := (or #110 #118)
149.111 +#124 := (or #31 #121)
149.112 +#102 := (and #15 #19)
149.113 +#127 := (or #102 #124)
149.114 +#96 := (and #12 #19)
149.115 +#130 := (or #96 #127)
149.116 +#93 := (and #10 #19)
149.117 +#133 := (or #93 #130)
149.118 +#86 := (and #6 #15)
149.119 +#136 := (or #86 #133)
149.120 +#78 := (and #6 #23)
149.121 +#139 := (or #78 #136)
149.122 +#75 := (and #13 #17)
149.123 +#142 := (or #75 #139)
149.124 +#145 := (or #20 #142)
149.125 +#70 := (and #8 #17)
149.126 +#148 := (or #70 #145)
149.127 +#67 := (and #13 #15)
149.128 +#151 := (or #67 #148)
149.129 +#154 := (or #14 #151)
149.130 +#157 := (or #11 #154)
149.131 +#160 := (or #9 #157)
149.132 +#163 := (not #160)
149.133 +#343 := (iff #163 #342)
149.134 +#340 := (iff #160 #337)
149.135 +#292 := (or #174 #115)
149.136 +#295 := (or #184 #292)
149.137 +#298 := (or #197 #295)
149.138 +#301 := (or #208 #298)
149.139 +#304 := (or #211 #301)
149.140 +#307 := (or #214 #304)
149.141 +#310 := (or #224 #307)
149.142 +#313 := (or #232 #310)
149.143 +#316 := (or #244 #313)
149.144 +#319 := (or #252 #316)
149.145 +#322 := (or #260 #319)
149.146 +#325 := (or #268 #322)
149.147 +#328 := (or #273 #325)
149.148 +#331 := (or #279 #328)
149.149 +#334 := (or #287 #331)
149.150 +#338 := (iff #334 #337)
149.151 +#339 := [rewrite]: #338
149.152 +#335 := (iff #160 #334)
149.153 +#332 := (iff #157 #331)
149.154 +#329 := (iff #154 #328)
149.155 +#326 := (iff #151 #325)
149.156 +#323 := (iff #148 #322)
149.157 +#320 := (iff #145 #319)
149.158 +#317 := (iff #142 #316)
149.159 +#314 := (iff #139 #313)
149.160 +#311 := (iff #136 #310)
149.161 +#308 := (iff #133 #307)
149.162 +#305 := (iff #130 #304)
149.163 +#302 := (iff #127 #301)
149.164 +#299 := (iff #124 #298)
149.165 +#296 := (iff #121 #295)
149.166 +#293 := (iff #118 #292)
149.167 +#175 := (iff #33 #174)
149.168 +#172 := (iff #23 #171)
149.169 +#173 := [rewrite]: #172
149.170 +#176 := [monotonicity #173]: #175
149.171 +#294 := [monotonicity #176]: #293
149.172 +#187 := (iff #110 #184)
149.173 +#181 := (and #177 #17)
149.174 +#185 := (iff #181 #184)
149.175 +#186 := [rewrite]: #185
149.176 +#182 := (iff #110 #181)
149.177 +#179 := (iff #12 #177)
149.178 +#180 := [rewrite]: #179
149.179 +#183 := [monotonicity #180]: #182
149.180 +#188 := [trans #183 #186]: #187
149.181 +#297 := [monotonicity #188 #294]: #296
149.182 +#200 := (iff #31 #197)
149.183 +#194 := (and #189 #171)
149.184 +#198 := (iff #194 #197)
149.185 +#199 := [rewrite]: #198
149.186 +#195 := (iff #31 #194)
149.187 +#192 := (iff #8 #189)
149.188 +#193 := [rewrite]: #192
149.189 +#196 := [monotonicity #193 #173]: #195
149.190 +#201 := [trans #196 #199]: #200
149.191 +#300 := [monotonicity #201 #297]: #299
149.192 +#209 := (iff #102 #208)
149.193 +#206 := (iff #19 #205)
149.194 +#207 := [rewrite]: #206
149.195 +#210 := [monotonicity #207]: #209
149.196 +#303 := [monotonicity #210 #300]: #302
149.197 +#212 := (iff #96 #211)
149.198 +#213 := [monotonicity #180 #207]: #212
149.199 +#306 := [monotonicity #213 #303]: #305
149.200 +#215 := (iff #93 #214)
149.201 +#216 := [monotonicity #207]: #215
149.202 +#309 := [monotonicity #216 #306]: #308
149.203 +#227 := (iff #86 #224)
149.204 +#221 := (and #217 #15)
149.205 +#225 := (iff #221 #224)
149.206 +#226 := [rewrite]: #225
149.207 +#222 := (iff #86 #221)
149.208 +#219 := (iff #6 #217)
149.209 +#220 := [rewrite]: #219
149.210 +#223 := [monotonicity #220]: #222
149.211 +#228 := [trans #223 #226]: #227
149.212 +#312 := [monotonicity #228 #309]: #311
149.213 +#235 := (iff #78 #232)
149.214 +#229 := (and #217 #171)
149.215 +#233 := (iff #229 #232)
149.216 +#234 := [rewrite]: #233
149.217 +#230 := (iff #78 #229)
149.218 +#231 := [monotonicity #220 #173]: #230
149.219 +#236 := [trans #231 #234]: #235
149.220 +#315 := [monotonicity #236 #312]: #314
149.221 +#247 := (iff #75 #244)
149.222 +#241 := (and #238 #17)
149.223 +#245 := (iff #241 #244)
149.224 +#246 := [rewrite]: #245
149.225 +#242 := (iff #75 #241)
149.226 +#239 := (iff #13 #238)
149.227 +#240 := [rewrite]: #239
149.228 +#243 := [monotonicity #240]: #242
149.229 +#248 := [trans #243 #246]: #247
149.230 +#318 := [monotonicity #248 #315]: #317
149.231 +#255 := (iff #20 #252)
149.232 +#249 := (and #238 #205)
149.233 +#253 := (iff #249 #252)
149.234 +#254 := [rewrite]: #253
149.235 +#250 := (iff #20 #249)
149.236 +#251 := [monotonicity #240 #207]: #250
149.237 +#256 := [trans #251 #254]: #255
149.238 +#321 := [monotonicity #256 #318]: #320
149.239 +#263 := (iff #70 #260)
149.240 +#257 := (and #189 #17)
149.241 +#261 := (iff #257 #260)
149.242 +#262 := [rewrite]: #261
149.243 +#258 := (iff #70 #257)
149.244 +#259 := [monotonicity #193]: #258
149.245 +#264 := [trans #259 #262]: #263
149.246 +#324 := [monotonicity #264 #321]: #323
149.247 +#271 := (iff #67 #268)
149.248 +#265 := (and #238 #15)
149.249 +#269 := (iff #265 #268)
149.250 +#270 := [rewrite]: #269
149.251 +#266 := (iff #67 #265)
149.252 +#267 := [monotonicity #240]: #266
149.253 +#272 := [trans #267 #270]: #271
149.254 +#327 := [monotonicity #272 #324]: #326
149.255 +#274 := (iff #14 #273)
149.256 +#275 := [monotonicity #180 #240]: #274
149.257 +#330 := [monotonicity #275 #327]: #329
149.258 +#282 := (iff #11 #279)
149.259 +#276 := (and #217 #10)
149.260 +#280 := (iff #276 #279)
149.261 +#281 := [rewrite]: #280
149.262 +#277 := (iff #11 #276)
149.263 +#278 := [monotonicity #220]: #277
149.264 +#283 := [trans #278 #281]: #282
149.265 +#333 := [monotonicity #283 #330]: #332
149.266 +#290 := (iff #9 #287)
149.267 +#284 := (and #217 #189)
149.268 +#288 := (iff #284 #287)
149.269 +#289 := [rewrite]: #288
149.270 +#285 := (iff #9 #284)
149.271 +#286 := [monotonicity #220 #193]: #285
149.272 +#291 := [trans #286 #289]: #290
149.273 +#336 := [monotonicity #291 #333]: #335
149.274 +#341 := [trans #336 #339]: #340
149.275 +#344 := [monotonicity #341]: #343
149.276 +#164 := (iff #50 #163)
149.277 +#161 := (iff #49 #160)
149.278 +#158 := (iff #48 #157)
149.279 +#155 := (iff #47 #154)
149.280 +#152 := (iff #46 #151)
149.281 +#149 := (iff #45 #148)
149.282 +#146 := (iff #44 #145)
149.283 +#143 := (iff #43 #142)
149.284 +#140 := (iff #42 #139)
149.285 +#137 := (iff #41 #136)
149.286 +#134 := (iff #40 #133)
149.287 +#131 := (iff #39 #130)
149.288 +#128 := (iff #38 #127)
149.289 +#125 := (iff #37 #124)
149.290 +#122 := (iff #36 #121)
149.291 +#119 := (iff #35 #118)
149.292 +#116 := (iff #34 #115)
149.293 +#73 := (iff #21 #17)
149.294 +#74 := [rewrite]: #73
149.295 +#91 := (iff #27 #10)
149.296 +#92 := [rewrite]: #91
149.297 +#117 := [monotonicity #92 #74]: #116
149.298 +#120 := [monotonicity #117]: #119
149.299 +#113 := (iff #32 #110)
149.300 +#107 := (and #17 #12)
149.301 +#111 := (iff #107 #110)
149.302 +#112 := [rewrite]: #111
149.303 +#108 := (iff #32 #107)
149.304 +#109 := [monotonicity #74]: #108
149.305 +#114 := [trans #109 #112]: #113
149.306 +#123 := [monotonicity #114 #120]: #122
149.307 +#126 := [monotonicity #123]: #125
149.308 +#105 := (iff #30 #102)
149.309 +#99 := (and #19 #15)
149.310 +#103 := (iff #99 #102)
149.311 +#104 := [rewrite]: #103
149.312 +#100 := (iff #30 #99)
149.313 +#81 := (iff #25 #15)
149.314 +#82 := [rewrite]: #81
149.315 +#101 := [monotonicity #82]: #100
149.316 +#106 := [trans #101 #104]: #105
149.317 +#129 := [monotonicity #106 #126]: #128
149.318 +#97 := (iff #29 #96)
149.319 +#98 := [rewrite]: #97
149.320 +#132 := [monotonicity #98 #129]: #131
149.321 +#94 := (iff #28 #93)
149.322 +#95 := [monotonicity #92]: #94
149.323 +#135 := [monotonicity #95 #132]: #134
149.324 +#89 := (iff #26 #86)
149.325 +#83 := (and #15 #6)
149.326 +#87 := (iff #83 #86)
149.327 +#88 := [rewrite]: #87
149.328 +#84 := (iff #26 #83)
149.329 +#85 := [monotonicity #82]: #84
149.330 +#90 := [trans #85 #88]: #89
149.331 +#138 := [monotonicity #90 #135]: #137
149.332 +#79 := (iff #24 #78)
149.333 +#80 := [rewrite]: #79
149.334 +#141 := [monotonicity #80 #138]: #140
149.335 +#76 := (iff #22 #75)
149.336 +#77 := [monotonicity #74]: #76
149.337 +#144 := [monotonicity #77 #141]: #143
149.338 +#147 := [monotonicity #144]: #146
149.339 +#71 := (iff #18 #70)
149.340 +#72 := [rewrite]: #71
149.341 +#150 := [monotonicity #72 #147]: #149
149.342 +#68 := (iff #16 #67)
149.343 +#69 := [rewrite]: #68
149.344 +#153 := [monotonicity #69 #150]: #152
149.345 +#156 := [monotonicity #153]: #155
149.346 +#159 := [monotonicity #156]: #158
149.347 +#162 := [monotonicity #159]: #161
149.348 +#165 := [monotonicity #162]: #164
149.349 +#346 := [trans #165 #344]: #345
149.350 +#66 := [asserted]: #50
149.351 +#347 := [mp #66 #346]: #342
149.352 +#355 := [not-or-elim #347]: #354
149.353 +#466 := [mp #355 #465]: #455
149.354 +#686 := [unit-resolution #466 #685]: #190
149.355 +#427 := (or #170 #189 #238)
149.356 +#350 := (not #174)
149.357 +#430 := (iff #350 #427)
149.358 +#382 := (or #189 #238)
149.359 +#414 := (or #170 #382)
149.360 +#428 := (iff #414 #427)
149.361 +#429 := [rewrite]: #428
149.362 +#425 := (iff #350 #414)
149.363 +#415 := (not #414)
149.364 +#420 := (not #415)
149.365 +#423 := (iff #420 #414)
149.366 +#424 := [rewrite]: #423
149.367 +#421 := (iff #350 #420)
149.368 +#418 := (iff #174 #415)
149.369 +#380 := (not #382)
149.370 +#411 := (and #380 #171)
149.371 +#416 := (iff #411 #415)
149.372 +#417 := [rewrite]: #416
149.373 +#412 := (iff #174 #411)
149.374 +#383 := (iff #10 #380)
149.375 +#384 := [rewrite]: #383
149.376 +#413 := [monotonicity #384]: #412
149.377 +#419 := [trans #413 #417]: #418
149.378 +#422 := [monotonicity #419]: #421
149.379 +#426 := [trans #422 #424]: #425
149.380 +#431 := [trans #426 #429]: #430
149.381 +#351 := [not-or-elim #347]: #350
149.382 +#432 := [mp #351 #431]: #427
149.383 +#687 := [unit-resolution #432 #686 #685]: #238
149.384 +#549 := (or #170 #218)
149.385 +#364 := (not #232)
149.386 +#558 := (iff #364 #549)
149.387 +#550 := (not #549)
149.388 +#553 := (not #550)
149.389 +#556 := (iff #553 #549)
149.390 +#557 := [rewrite]: #556
149.391 +#554 := (iff #364 #553)
149.392 +#551 := (iff #232 #550)
149.393 +#552 := [rewrite]: #551
149.394 +#555 := [monotonicity #552]: #554
149.395 +#559 := [trans #555 #557]: #558
149.396 +#365 := [not-or-elim #347]: #364
149.397 +#560 := [mp #365 #559]: #549
149.398 +#688 := [unit-resolution #560 #685]: #218
149.399 +#577 := (or #205 #217 #237)
149.400 +#366 := (not #244)
149.401 +#580 := (iff #366 #577)
149.402 +#385 := (or #205 #217)
149.403 +#564 := (or #237 #385)
149.404 +#578 := (iff #564 #577)
149.405 +#579 := [rewrite]: #578
149.406 +#575 := (iff #366 #564)
149.407 +#565 := (not #564)
149.408 +#570 := (not #565)
149.409 +#573 := (iff #570 #564)
149.410 +#574 := [rewrite]: #573
149.411 +#571 := (iff #366 #570)
149.412 +#568 := (iff #244 #565)
149.413 +#386 := (not #385)
149.414 +#561 := (and #386 #238)
149.415 +#566 := (iff #561 #565)
149.416 +#567 := [rewrite]: #566
149.417 +#562 := (iff #244 #561)
149.418 +#387 := (iff #17 #386)
149.419 +#388 := [rewrite]: #387
149.420 +#563 := [monotonicity #388]: #562
149.421 +#569 := [trans #563 #567]: #568
149.422 +#572 := [monotonicity #569]: #571
149.423 +#576 := [trans #572 #574]: #575
149.424 +#581 := [trans #576 #579]: #580
149.425 +#367 := [not-or-elim #347]: #366
149.426 +#582 := [mp #367 #581]: #577
149.427 +#689 := [unit-resolution #582 #688 #687]: #205
149.428 +#583 := (or #204 #237)
149.429 +#368 := (not #252)
149.430 +#592 := (iff #368 #583)
149.431 +#584 := (not #583)
149.432 +#587 := (not #584)
149.433 +#590 := (iff #587 #583)
149.434 +#591 := [rewrite]: #590
149.435 +#588 := (iff #368 #587)
149.436 +#585 := (iff #252 #584)
149.437 +#586 := [rewrite]: #585
149.438 +#589 := [monotonicity #586]: #588
149.439 +#593 := [trans #589 #591]: #592
149.440 +#369 := [not-or-elim #347]: #368
149.441 +#594 := [mp #369 #593]: #583
149.442 +#690 := [unit-resolution #594 #689 #687]: false
149.443 +#691 := [lemma #690]: #170
149.444 +#487 := (or #171 #177 #204)
149.445 +#356 := (not #208)
149.446 +#490 := (iff #356 #487)
149.447 +#467 := (or #171 #177)
149.448 +#474 := (or #204 #467)
149.449 +#488 := (iff #474 #487)
149.450 +#489 := [rewrite]: #488
149.451 +#485 := (iff #356 #474)
149.452 +#475 := (not #474)
149.453 +#480 := (not #475)
149.454 +#483 := (iff #480 #474)
149.455 +#484 := [rewrite]: #483
149.456 +#481 := (iff #356 #480)
149.457 +#478 := (iff #208 #475)
149.458 +#468 := (not #467)
149.459 +#471 := (and #468 #205)
149.460 +#476 := (iff #471 #475)
149.461 +#477 := [rewrite]: #476
149.462 +#472 := (iff #208 #471)
149.463 +#469 := (iff #15 #468)
149.464 +#470 := [rewrite]: #469
149.465 +#473 := [monotonicity #470]: #472
149.466 +#479 := [trans #473 #477]: #478
149.467 +#482 := [monotonicity #479]: #481
149.468 +#486 := [trans #482 #484]: #485
149.469 +#491 := [trans #486 #489]: #490
149.470 +#357 := [not-or-elim #347]: #356
149.471 +#492 := [mp #357 #491]: #487
149.472 +#694 := [unit-resolution #492 #691]: #693
149.473 +#695 := [unit-resolution #694 #692]: #177
149.474 +#493 := (or #178 #204)
149.475 +#358 := (not #211)
149.476 +#502 := (iff #358 #493)
149.477 +#494 := (not #493)
149.478 +#497 := (not #494)
149.479 +#500 := (iff #497 #493)
149.480 +#501 := [rewrite]: #500
149.481 +#498 := (iff #358 #497)
149.482 +#495 := (iff #211 #494)
149.483 +#496 := [rewrite]: #495
149.484 +#499 := [monotonicity #496]: #498
149.485 +#503 := [trans #499 #501]: #502
149.486 +#359 := [not-or-elim #347]: #358
149.487 +#504 := [mp #359 #503]: #493
149.488 +#696 := [unit-resolution #504 #695 #692]: false
149.489 +#697 := [lemma #696]: #204
149.490 +#698 := [hypothesis]: #177
149.491 +#449 := (or #178 #205 #217)
149.492 +#352 := (not #184)
149.493 +#452 := (iff #352 #449)
149.494 +#436 := (or #178 #385)
149.495 +#450 := (iff #436 #449)
149.496 +#451 := [rewrite]: #450
149.497 +#447 := (iff #352 #436)
149.498 +#437 := (not #436)
149.499 +#442 := (not #437)
149.500 +#445 := (iff #442 #436)
149.501 +#446 := [rewrite]: #445
149.502 +#443 := (iff #352 #442)
149.503 +#440 := (iff #184 #437)
149.504 +#433 := (and #386 #177)
149.505 +#438 := (iff #433 #437)
149.506 +#439 := [rewrite]: #438
149.507 +#434 := (iff #184 #433)
149.508 +#435 := [monotonicity #388]: #434
149.509 +#441 := [trans #435 #439]: #440
149.510 +#444 := [monotonicity #441]: #443
149.511 +#448 := [trans #444 #446]: #447
149.512 +#453 := [trans #448 #451]: #452
149.513 +#353 := [not-or-elim #347]: #352
149.514 +#454 := [mp #353 #453]: #449
149.515 +#699 := [unit-resolution #454 #698 #697]: #217
149.516 +#639 := (or #178 #237)
149.517 +#374 := (not #273)
149.518 +#648 := (iff #374 #639)
149.519 +#640 := (not #639)
149.520 +#643 := (not #640)
149.521 +#646 := (iff #643 #639)
149.522 +#647 := [rewrite]: #646
149.523 +#644 := (iff #374 #643)
149.524 +#641 := (iff #273 #640)
149.525 +#642 := [rewrite]: #641
149.526 +#645 := [monotonicity #642]: #644
149.527 +#649 := [trans #645 #647]: #648
149.528 +#375 := [not-or-elim #347]: #374
149.529 +#650 := [mp #375 #649]: #639
149.530 +#700 := [unit-resolution #650 #698]: #237
149.531 +#667 := (or #189 #218 #238)
149.532 +#376 := (not #279)
149.533 +#670 := (iff #376 #667)
149.534 +#654 := (or #218 #382)
149.535 +#668 := (iff #654 #667)
149.536 +#669 := [rewrite]: #668
149.537 +#665 := (iff #376 #654)
149.538 +#655 := (not #654)
149.539 +#660 := (not #655)
149.540 +#663 := (iff #660 #654)
149.541 +#664 := [rewrite]: #663
149.542 +#661 := (iff #376 #660)
149.543 +#658 := (iff #279 #655)
149.544 +#651 := (and #380 #217)
149.545 +#656 := (iff #651 #655)
149.546 +#657 := [rewrite]: #656
149.547 +#652 := (iff #279 #651)
149.548 +#653 := [monotonicity #384]: #652
149.549 +#659 := [trans #653 #657]: #658
149.550 +#662 := [monotonicity #659]: #661
149.551 +#666 := [trans #662 #664]: #665
149.552 +#671 := [trans #666 #669]: #670
149.553 +#377 := [not-or-elim #347]: #376
149.554 +#672 := [mp #377 #671]: #667
149.555 +#701 := [unit-resolution #672 #699 #700]: #189
149.556 +#673 := (or #190 #218)
149.557 +#378 := (not #287)
149.558 +#682 := (iff #378 #673)
149.559 +#674 := (not #673)
149.560 +#677 := (not #674)
149.561 +#680 := (iff #677 #673)
149.562 +#681 := [rewrite]: #680
149.563 +#678 := (iff #378 #677)
149.564 +#675 := (iff #287 #674)
149.565 +#676 := [rewrite]: #675
149.566 +#679 := [monotonicity #676]: #678
149.567 +#683 := [trans #679 #681]: #682
149.568 +#379 := [not-or-elim #347]: #378
149.569 +#684 := [mp #379 #683]: #673
149.570 +#702 := [unit-resolution #684 #701 #699]: false
149.571 +#703 := [lemma #702]: #178
149.572 +#704 := (or #177 #218)
149.573 +#543 := (or #171 #177 #218)
149.574 +#362 := (not #224)
149.575 +#546 := (iff #362 #543)
149.576 +#530 := (or #218 #467)
149.577 +#544 := (iff #530 #543)
149.578 +#545 := [rewrite]: #544
149.579 +#541 := (iff #362 #530)
149.580 +#531 := (not #530)
149.581 +#536 := (not #531)
149.582 +#539 := (iff #536 #530)
149.583 +#540 := [rewrite]: #539
149.584 +#537 := (iff #362 #536)
149.585 +#534 := (iff #224 #531)
149.586 +#527 := (and #468 #217)
149.587 +#532 := (iff #527 #531)
149.588 +#533 := [rewrite]: #532
149.589 +#528 := (iff #224 #527)
149.590 +#529 := [monotonicity #470]: #528
149.591 +#535 := [trans #529 #533]: #534
149.592 +#538 := [monotonicity #535]: #537
149.593 +#542 := [trans #538 #540]: #541
149.594 +#547 := [trans #542 #545]: #546
149.595 +#363 := [not-or-elim #347]: #362
149.596 +#548 := [mp #363 #547]: #543
149.597 +#705 := [unit-resolution #548 #691]: #704
149.598 +#706 := [unit-resolution #705 #703]: #218
149.599 +#707 := (or #177 #237)
149.600 +#633 := (or #171 #177 #237)
149.601 +#372 := (not #268)
149.602 +#636 := (iff #372 #633)
149.603 +#620 := (or #237 #467)
149.604 +#634 := (iff #620 #633)
149.605 +#635 := [rewrite]: #634
149.606 +#631 := (iff #372 #620)
149.607 +#621 := (not #620)
149.608 +#626 := (not #621)
149.609 +#629 := (iff #626 #620)
149.610 +#630 := [rewrite]: #629
149.611 +#627 := (iff #372 #626)
149.612 +#624 := (iff #268 #621)
149.613 +#617 := (and #468 #238)
149.614 +#622 := (iff #617 #621)
149.615 +#623 := [rewrite]: #622
149.616 +#618 := (iff #268 #617)
149.617 +#619 := [monotonicity #470]: #618
149.618 +#625 := [trans #619 #623]: #624
149.619 +#628 := [monotonicity #625]: #627
149.620 +#632 := [trans #628 #630]: #631
149.621 +#637 := [trans #632 #635]: #636
149.622 +#373 := [not-or-elim #347]: #372
149.623 +#638 := [mp #373 #637]: #633
149.624 +#708 := [unit-resolution #638 #691]: #707
149.625 +#709 := [unit-resolution #708 #703]: #237
149.626 +#611 := (or #190 #205 #217)
149.627 +#370 := (not #260)
149.628 +#614 := (iff #370 #611)
149.629 +#598 := (or #190 #385)
149.630 +#612 := (iff #598 #611)
149.631 +#613 := [rewrite]: #612
149.632 +#609 := (iff #370 #598)
149.633 +#599 := (not #598)
149.634 +#604 := (not #599)
149.635 +#607 := (iff #604 #598)
149.636 +#608 := [rewrite]: #607
149.637 +#605 := (iff #370 #604)
149.638 +#602 := (iff #260 #599)
149.639 +#595 := (and #386 #189)
149.640 +#600 := (iff #595 #599)
149.641 +#601 := [rewrite]: #600
149.642 +#596 := (iff #260 #595)
149.643 +#597 := [monotonicity #388]: #596
149.644 +#603 := [trans #597 #601]: #602
149.645 +#606 := [monotonicity #603]: #605
149.646 +#610 := [trans #606 #608]: #609
149.647 +#615 := [trans #610 #613]: #614
149.648 +#371 := [not-or-elim #347]: #370
149.649 +#616 := [mp #371 #615]: #611
149.650 +#710 := [unit-resolution #616 #706 #697]: #190
149.651 +#405 := (or #189 #205 #217 #238)
149.652 +#348 := (not #115)
149.653 +#408 := (iff #348 #405)
149.654 +#392 := (or #382 #385)
149.655 +#406 := (iff #392 #405)
149.656 +#407 := [rewrite]: #406
149.657 +#403 := (iff #348 #392)
149.658 +#393 := (not #392)
149.659 +#398 := (not #393)
149.660 +#401 := (iff #398 #392)
149.661 +#402 := [rewrite]: #401
149.662 +#399 := (iff #348 #398)
149.663 +#396 := (iff #115 #393)
149.664 +#389 := (and #380 #386)
149.665 +#394 := (iff #389 #393)
149.666 +#395 := [rewrite]: #394
149.667 +#390 := (iff #115 #389)
149.668 +#391 := [monotonicity #384 #388]: #390
149.669 +#397 := [trans #391 #395]: #396
149.670 +#400 := [monotonicity #397]: #399
149.671 +#404 := [trans #400 #402]: #403
149.672 +#409 := [trans #404 #407]: #408
149.673 +#349 := [not-or-elim #347]: #348
149.674 +#410 := [mp #349 #409]: #405
149.675 +[unit-resolution #410 #710 #709 #697 #706]: false
149.676 +unsat
150.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
150.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_16 Tue Oct 20 10:11:30 2009 +0200
150.3 @@ -0,0 +1,26 @@
150.4 +(benchmark Isabelle
150.5 +:extrafuns (
150.6 + (uf_3 Int)
150.7 + (uf_2 Int)
150.8 + (uf_1 Int)
150.9 + (uf_4 Int)
150.10 + (uf_5 Int)
150.11 + (uf_6 Int)
150.12 + (uf_7 Int)
150.13 + (uf_8 Int)
150.14 + (uf_9 Int)
150.15 + (uf_10 Int)
150.16 + (uf_11 Int)
150.17 + )
150.18 +:assumption (= uf_1 (- (ite (< uf_2 0) (~ uf_2) uf_2) uf_3))
150.19 +:assumption (= uf_4 (- (ite (< uf_1 0) (~ uf_1) uf_1) uf_2))
150.20 +:assumption (= uf_5 (- (ite (< uf_4 0) (~ uf_4) uf_4) uf_1))
150.21 +:assumption (= uf_6 (- (ite (< uf_5 0) (~ uf_5) uf_5) uf_4))
150.22 +:assumption (= uf_7 (- (ite (< uf_6 0) (~ uf_6) uf_6) uf_5))
150.23 +:assumption (= uf_8 (- (ite (< uf_7 0) (~ uf_7) uf_7) uf_6))
150.24 +:assumption (= uf_9 (- (ite (< uf_8 0) (~ uf_8) uf_8) uf_7))
150.25 +:assumption (= uf_10 (- (ite (< uf_9 0) (~ uf_9) uf_9) uf_8))
150.26 +:assumption (= uf_11 (- (ite (< uf_10 0) (~ uf_10) uf_10) uf_9))
150.27 +:assumption (not (and (= uf_3 uf_10) (= uf_2 uf_11)))
150.28 +:formula true
150.29 +)
151.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
151.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_16.proof Tue Oct 20 10:11:30 2009 +0200
151.3 @@ -0,0 +1,2291 @@
151.4 +#2 := false
151.5 +#6 := 0::int
151.6 +decl z3name!0 :: int
151.7 +#647 := z3name!0
151.8 +#81 := -1::int
151.9 +#656 := (* -1::int z3name!0)
151.10 +decl uf_2 :: int
151.11 +#5 := uf_2
151.12 +#882 := (+ uf_2 #656)
151.13 +#883 := (<= #882 0::int)
151.14 +#885 := (not #883)
151.15 +#881 := (>= #882 0::int)
151.16 +#884 := (not #881)
151.17 +#886 := (or #884 #885)
151.18 +decl uf_11 :: int
151.19 +#55 := uf_11
151.20 +#513 := (* -1::int uf_11)
151.21 +#514 := (+ uf_2 #513)
151.22 +#515 := (<= #514 0::int)
151.23 +decl z3name!5 :: int
151.24 +#777 := z3name!5
151.25 +decl uf_7 :: int
151.26 +#31 := uf_7
151.27 +#1083 := (+ uf_7 z3name!5)
151.28 +#1084 := (<= #1083 0::int)
151.29 +#335 := (>= uf_7 0::int)
151.30 +#1085 := (>= #1083 0::int)
151.31 +#1087 := (not #1085)
151.32 +#1086 := (not #1084)
151.33 +#1088 := (or #1086 #1087)
151.34 +#2302 := [hypothesis]: #1086
151.35 +#1289 := (or #1088 #1084)
151.36 +#1290 := [def-axiom]: #1289
151.37 +#2303 := [unit-resolution #1290 #2302]: #1088
151.38 +#1089 := (not #1088)
151.39 +#1092 := (or #335 #1089)
151.40 +#1099 := (not #1092)
151.41 +#786 := (* -1::int z3name!5)
151.42 +#1072 := (+ uf_7 #786)
151.43 +#1073 := (<= #1072 0::int)
151.44 +#1075 := (not #1073)
151.45 +#1071 := (>= #1072 0::int)
151.46 +#1074 := (not #1071)
151.47 +#1076 := (or #1074 #1075)
151.48 +#1077 := (not #1076)
151.49 +#336 := (not #335)
151.50 +#1080 := (or #336 #1077)
151.51 +#1098 := (not #1080)
151.52 +#1100 := (or #1098 #1099)
151.53 +#1101 := (not #1100)
151.54 +#318 := (* -1::int uf_7)
151.55 +#780 := (= z3name!5 #318)
151.56 +#781 := (or #335 #780)
151.57 +#778 := (= z3name!5 uf_7)
151.58 +#779 := (or #336 #778)
151.59 +#782 := (and #779 #781)
151.60 +#1104 := (iff #782 #1101)
151.61 +#1095 := (and #1080 #1092)
151.62 +#1102 := (iff #1095 #1101)
151.63 +#1103 := [rewrite]: #1102
151.64 +#1096 := (iff #782 #1095)
151.65 +#1093 := (iff #781 #1092)
151.66 +#1090 := (iff #780 #1089)
151.67 +#1091 := [rewrite]: #1090
151.68 +#1094 := [monotonicity #1091]: #1093
151.69 +#1081 := (iff #779 #1080)
151.70 +#1078 := (iff #778 #1077)
151.71 +#1079 := [rewrite]: #1078
151.72 +#1082 := [monotonicity #1079]: #1081
151.73 +#1097 := [monotonicity #1082 #1094]: #1096
151.74 +#1105 := [trans #1097 #1103]: #1104
151.75 +#783 := [intro-def]: #782
151.76 +#1106 := [mp #783 #1105]: #1101
151.77 +#1108 := [not-or-elim #1106]: #1092
151.78 +#2304 := [unit-resolution #1108 #2303]: #335
151.79 +decl uf_4 :: int
151.80 +#13 := uf_4
151.81 +#194 := (>= uf_4 0::int)
151.82 +decl uf_10 :: int
151.83 +#49 := uf_10
151.84 +#459 := (* -1::int uf_10)
151.85 +decl uf_3 :: int
151.86 +#10 := uf_3
151.87 +#508 := (+ uf_3 #459)
151.88 +#509 := (>= #508 0::int)
151.89 +decl z3name!1 :: int
151.90 +#673 := z3name!1
151.91 +#682 := (* -1::int z3name!1)
151.92 +decl uf_1 :: int
151.93 +#4 := uf_1
151.94 +#920 := (+ uf_1 #682)
151.95 +#921 := (<= #920 0::int)
151.96 +#931 := (+ uf_1 z3name!1)
151.97 +#933 := (>= #931 0::int)
151.98 +#935 := (not #933)
151.99 +#932 := (<= #931 0::int)
151.100 +#934 := (not #932)
151.101 +#936 := (or #934 #935)
151.102 +#937 := (not #936)
151.103 +#147 := (>= uf_1 0::int)
151.104 +#148 := (not #147)
151.105 +#923 := (not #921)
151.106 +#919 := (>= #920 0::int)
151.107 +#922 := (not #919)
151.108 +#924 := (or #922 #923)
151.109 +#2022 := [hypothesis]: #923
151.110 +#1237 := (or #924 #921)
151.111 +#1238 := [def-axiom]: #1237
151.112 +#2023 := [unit-resolution #1238 #2022]: #924
151.113 +#925 := (not #924)
151.114 +#928 := (or #148 #925)
151.115 +#940 := (or #147 #937)
151.116 +#947 := (not #940)
151.117 +#946 := (not #928)
151.118 +#948 := (or #946 #947)
151.119 +#949 := (not #948)
151.120 +#130 := (* -1::int uf_1)
151.121 +#676 := (= z3name!1 #130)
151.122 +#677 := (or #147 #676)
151.123 +#674 := (= z3name!1 uf_1)
151.124 +#675 := (or #148 #674)
151.125 +#678 := (and #675 #677)
151.126 +#952 := (iff #678 #949)
151.127 +#943 := (and #928 #940)
151.128 +#950 := (iff #943 #949)
151.129 +#951 := [rewrite]: #950
151.130 +#944 := (iff #678 #943)
151.131 +#941 := (iff #677 #940)
151.132 +#938 := (iff #676 #937)
151.133 +#939 := [rewrite]: #938
151.134 +#942 := [monotonicity #939]: #941
151.135 +#929 := (iff #675 #928)
151.136 +#926 := (iff #674 #925)
151.137 +#927 := [rewrite]: #926
151.138 +#930 := [monotonicity #927]: #929
151.139 +#945 := [monotonicity #930 #942]: #944
151.140 +#953 := [trans #945 #951]: #952
151.141 +#679 := [intro-def]: #678
151.142 +#954 := [mp #679 #953]: #949
151.143 +#955 := [not-or-elim #954]: #928
151.144 +#2024 := [unit-resolution #955 #2023]: #148
151.145 +#956 := [not-or-elim #954]: #940
151.146 +#2025 := [unit-resolution #956 #2024]: #937
151.147 +#2026 := (or #921 #919)
151.148 +#2027 := [th-lemma]: #2026
151.149 +#2028 := [unit-resolution #2027 #2022]: #919
151.150 +#2029 := (or #922 #147 #935)
151.151 +#2030 := [th-lemma]: #2029
151.152 +#2031 := [unit-resolution #2030 #2024 #2028]: #935
151.153 +#1243 := (or #936 #933)
151.154 +#1244 := [def-axiom]: #1243
151.155 +#2032 := [unit-resolution #1244 #2031 #2025]: false
151.156 +#2033 := [lemma #2032]: #921
151.157 +decl z3name!7 :: int
151.158 +#829 := z3name!7
151.159 +decl uf_9 :: int
151.160 +#43 := uf_9
151.161 +#1159 := (+ uf_9 z3name!7)
151.162 +#1160 := (<= #1159 0::int)
151.163 +#838 := (* -1::int z3name!7)
151.164 +#1148 := (+ uf_9 #838)
151.165 +#1147 := (>= #1148 0::int)
151.166 +decl z3name!4 :: int
151.167 +#751 := z3name!4
151.168 +#760 := (* -1::int z3name!4)
151.169 +decl uf_6 :: int
151.170 +#25 := uf_6
151.171 +#1034 := (+ uf_6 #760)
151.172 +#1033 := (>= #1034 0::int)
151.173 +#1035 := (<= #1034 0::int)
151.174 +#1037 := (not #1035)
151.175 +#1036 := (not #1033)
151.176 +#1038 := (or #1036 #1037)
151.177 +#1039 := (not #1038)
151.178 +#288 := (>= uf_6 0::int)
151.179 +#893 := (+ uf_2 z3name!0)
151.180 +#895 := (>= #893 0::int)
151.181 +#897 := (not #895)
151.182 +#894 := (<= #893 0::int)
151.183 +#896 := (not #894)
151.184 +#898 := (or #896 #897)
151.185 +#899 := (not #898)
151.186 +#100 := (>= uf_2 0::int)
151.187 +#101 := (not #100)
151.188 +#1736 := [hypothesis]: #885
151.189 +#1225 := (or #886 #883)
151.190 +#1226 := [def-axiom]: #1225
151.191 +#1737 := [unit-resolution #1226 #1736]: #886
151.192 +#887 := (not #886)
151.193 +#890 := (or #101 #887)
151.194 +#902 := (or #100 #899)
151.195 +#909 := (not #902)
151.196 +#908 := (not #890)
151.197 +#910 := (or #908 #909)
151.198 +#911 := (not #910)
151.199 +#82 := (* -1::int uf_2)
151.200 +#650 := (= z3name!0 #82)
151.201 +#651 := (or #100 #650)
151.202 +#648 := (= z3name!0 uf_2)
151.203 +#649 := (or #101 #648)
151.204 +#652 := (and #649 #651)
151.205 +#914 := (iff #652 #911)
151.206 +#905 := (and #890 #902)
151.207 +#912 := (iff #905 #911)
151.208 +#913 := [rewrite]: #912
151.209 +#906 := (iff #652 #905)
151.210 +#903 := (iff #651 #902)
151.211 +#900 := (iff #650 #899)
151.212 +#901 := [rewrite]: #900
151.213 +#904 := [monotonicity #901]: #903
151.214 +#891 := (iff #649 #890)
151.215 +#888 := (iff #648 #887)
151.216 +#889 := [rewrite]: #888
151.217 +#892 := [monotonicity #889]: #891
151.218 +#907 := [monotonicity #892 #904]: #906
151.219 +#915 := [trans #907 #913]: #914
151.220 +#653 := [intro-def]: #652
151.221 +#916 := [mp #653 #915]: #911
151.222 +#917 := [not-or-elim #916]: #890
151.223 +#1738 := [unit-resolution #917 #1737]: #101
151.224 +#918 := [not-or-elim #916]: #902
151.225 +#1739 := [unit-resolution #918 #1738]: #899
151.226 +#1231 := (or #898 #895)
151.227 +#1232 := [def-axiom]: #1231
151.228 +#1740 := [unit-resolution #1232 #1739]: #895
151.229 +#1741 := [th-lemma #1736 #1738 #1740]: false
151.230 +#1742 := [lemma #1741]: #883
151.231 +#1149 := (<= #1148 0::int)
151.232 +#1151 := (not #1149)
151.233 +#1150 := (not #1147)
151.234 +#1152 := (or #1150 #1151)
151.235 +#1153 := (not #1152)
151.236 +#429 := (>= uf_9 0::int)
151.237 +decl z3name!6 :: int
151.238 +#803 := z3name!6
151.239 +#812 := (* -1::int z3name!6)
151.240 +decl uf_8 :: int
151.241 +#37 := uf_8
151.242 +#1110 := (+ uf_8 #812)
151.243 +#1111 := (<= #1110 0::int)
151.244 +#1113 := (not #1111)
151.245 +#1109 := (>= #1110 0::int)
151.246 +#1112 := (not #1109)
151.247 +#1114 := (or #1112 #1113)
151.248 +#1865 := [hypothesis]: #1113
151.249 +#1297 := (or #1114 #1111)
151.250 +#1298 := [def-axiom]: #1297
151.251 +#1866 := [unit-resolution #1298 #1865]: #1114
151.252 +#382 := (>= uf_8 0::int)
151.253 +#1685 := (or #1111 #1109)
151.254 +#1686 := [th-lemma]: #1685
151.255 +#1867 := [unit-resolution #1686 #1865]: #1109
151.256 +#1734 := (or #382 #1112)
151.257 +#1121 := (+ uf_8 z3name!6)
151.258 +#1123 := (>= #1121 0::int)
151.259 +#1125 := (not #1123)
151.260 +#1122 := (<= #1121 0::int)
151.261 +#1124 := (not #1122)
151.262 +#1126 := (or #1124 #1125)
151.263 +#1127 := (not #1126)
151.264 +#383 := (not #382)
151.265 +#1428 := [hypothesis]: #383
151.266 +#1130 := (or #382 #1127)
151.267 +#1137 := (not #1130)
151.268 +#1115 := (not #1114)
151.269 +#1118 := (or #383 #1115)
151.270 +#1136 := (not #1118)
151.271 +#1138 := (or #1136 #1137)
151.272 +#1139 := (not #1138)
151.273 +#365 := (* -1::int uf_8)
151.274 +#806 := (= z3name!6 #365)
151.275 +#807 := (or #382 #806)
151.276 +#804 := (= z3name!6 uf_8)
151.277 +#805 := (or #383 #804)
151.278 +#808 := (and #805 #807)
151.279 +#1142 := (iff #808 #1139)
151.280 +#1133 := (and #1118 #1130)
151.281 +#1140 := (iff #1133 #1139)
151.282 +#1141 := [rewrite]: #1140
151.283 +#1134 := (iff #808 #1133)
151.284 +#1131 := (iff #807 #1130)
151.285 +#1128 := (iff #806 #1127)
151.286 +#1129 := [rewrite]: #1128
151.287 +#1132 := [monotonicity #1129]: #1131
151.288 +#1119 := (iff #805 #1118)
151.289 +#1116 := (iff #804 #1115)
151.290 +#1117 := [rewrite]: #1116
151.291 +#1120 := [monotonicity #1117]: #1119
151.292 +#1135 := [monotonicity #1120 #1132]: #1134
151.293 +#1143 := [trans #1135 #1141]: #1142
151.294 +#809 := [intro-def]: #808
151.295 +#1144 := [mp #809 #1143]: #1139
151.296 +#1146 := [not-or-elim #1144]: #1130
151.297 +#1729 := [unit-resolution #1146 #1428]: #1127
151.298 +#1637 := [hypothesis]: #1109
151.299 +#1730 := (or #1112 #1125 #382)
151.300 +#1731 := [th-lemma]: #1730
151.301 +#1732 := [unit-resolution #1731 #1428 #1637]: #1125
151.302 +#1303 := (or #1126 #1123)
151.303 +#1304 := [def-axiom]: #1303
151.304 +#1733 := [unit-resolution #1304 #1732 #1729]: false
151.305 +#1735 := [lemma #1733]: #1734
151.306 +#1868 := [unit-resolution #1735 #1867]: #382
151.307 +#1145 := [not-or-elim #1144]: #1118
151.308 +#1869 := [unit-resolution #1145 #1868 #1866]: false
151.309 +#1870 := [lemma #1869]: #1111
151.310 +#289 := (not #288)
151.311 +#1405 := [hypothesis]: #289
151.312 +#1688 := (or #288 #429 #1113)
151.313 +#815 := (+ uf_9 #812)
151.314 +#818 := (+ uf_7 #815)
151.315 +#825 := (>= #818 0::int)
151.316 +#389 := (ite #382 uf_8 #365)
151.317 +#400 := (* -1::int #389)
151.318 +#401 := (+ uf_9 #400)
151.319 +#402 := (+ uf_7 #401)
151.320 +#599 := (>= #402 0::int)
151.321 +#826 := (= #599 #825)
151.322 +#819 := (~ #402 #818)
151.323 +#816 := (~ #401 #815)
151.324 +#813 := (~ #400 #812)
151.325 +#810 := (~ #389 z3name!6)
151.326 +#811 := [apply-def #809]: #810
151.327 +#814 := [monotonicity #811]: #813
151.328 +#817 := [monotonicity #814]: #816
151.329 +#820 := [monotonicity #817]: #819
151.330 +#827 := [monotonicity #820]: #826
151.331 +#601 := (not #599)
151.332 +#598 := (<= #402 0::int)
151.333 +#600 := (not #598)
151.334 +#602 := (or #600 #601)
151.335 +#603 := (not #602)
151.336 +#403 := (= #402 0::int)
151.337 +#604 := (iff #403 #603)
151.338 +#605 := [rewrite]: #604
151.339 +#45 := (- uf_8)
151.340 +#44 := (< uf_8 0::int)
151.341 +#46 := (ite #44 #45 uf_8)
151.342 +#47 := (- #46 uf_7)
151.343 +#48 := (= uf_9 #47)
151.344 +#408 := (iff #48 #403)
151.345 +#368 := (ite #44 #365 uf_8)
151.346 +#374 := (+ #318 #368)
151.347 +#379 := (= uf_9 #374)
151.348 +#406 := (iff #379 #403)
151.349 +#394 := (+ #318 #389)
151.350 +#397 := (= uf_9 #394)
151.351 +#404 := (iff #397 #403)
151.352 +#405 := [rewrite]: #404
151.353 +#398 := (iff #379 #397)
151.354 +#395 := (= #374 #394)
151.355 +#392 := (= #368 #389)
151.356 +#386 := (ite #383 #365 uf_8)
151.357 +#390 := (= #386 #389)
151.358 +#391 := [rewrite]: #390
151.359 +#387 := (= #368 #386)
151.360 +#384 := (iff #44 #383)
151.361 +#385 := [rewrite]: #384
151.362 +#388 := [monotonicity #385]: #387
151.363 +#393 := [trans #388 #391]: #392
151.364 +#396 := [monotonicity #393]: #395
151.365 +#399 := [monotonicity #396]: #398
151.366 +#407 := [trans #399 #405]: #406
151.367 +#380 := (iff #48 #379)
151.368 +#377 := (= #47 #374)
151.369 +#371 := (- #368 uf_7)
151.370 +#375 := (= #371 #374)
151.371 +#376 := [rewrite]: #375
151.372 +#372 := (= #47 #371)
151.373 +#369 := (= #46 #368)
151.374 +#366 := (= #45 #365)
151.375 +#367 := [rewrite]: #366
151.376 +#370 := [monotonicity #367]: #369
151.377 +#373 := [monotonicity #370]: #372
151.378 +#378 := [trans #373 #376]: #377
151.379 +#381 := [monotonicity #378]: #380
151.380 +#409 := [trans #381 #407]: #408
151.381 +#364 := [asserted]: #48
151.382 +#410 := [mp #364 #409]: #403
151.383 +#606 := [mp #410 #605]: #603
151.384 +#608 := [not-or-elim #606]: #599
151.385 +#828 := [mp~ #608 #827]: #825
151.386 +#1441 := [hypothesis]: #1075
151.387 +#1285 := (or #1076 #1073)
151.388 +#1286 := [def-axiom]: #1285
151.389 +#1442 := [unit-resolution #1286 #1441]: #1076
151.390 +#1107 := [not-or-elim #1106]: #1080
151.391 +#1443 := [unit-resolution #1107 #1442]: #336
151.392 +#1444 := [unit-resolution #1108 #1443]: #1089
151.393 +#1291 := (or #1088 #1085)
151.394 +#1292 := [def-axiom]: #1291
151.395 +#1445 := [unit-resolution #1292 #1444]: #1085
151.396 +#1446 := [th-lemma #1441 #1445 #1443]: false
151.397 +#1447 := [lemma #1446]: #1073
151.398 +#789 := (+ uf_8 #786)
151.399 +#792 := (+ uf_6 #789)
151.400 +#799 := (>= #792 0::int)
151.401 +#342 := (ite #335 uf_7 #318)
151.402 +#353 := (* -1::int #342)
151.403 +#354 := (+ uf_8 #353)
151.404 +#355 := (+ uf_6 #354)
151.405 +#588 := (>= #355 0::int)
151.406 +#800 := (= #588 #799)
151.407 +#793 := (~ #355 #792)
151.408 +#790 := (~ #354 #789)
151.409 +#787 := (~ #353 #786)
151.410 +#784 := (~ #342 z3name!5)
151.411 +#785 := [apply-def #783]: #784
151.412 +#788 := [monotonicity #785]: #787
151.413 +#791 := [monotonicity #788]: #790
151.414 +#794 := [monotonicity #791]: #793
151.415 +#801 := [monotonicity #794]: #800
151.416 +#590 := (not #588)
151.417 +#587 := (<= #355 0::int)
151.418 +#589 := (not #587)
151.419 +#591 := (or #589 #590)
151.420 +#592 := (not #591)
151.421 +#356 := (= #355 0::int)
151.422 +#593 := (iff #356 #592)
151.423 +#594 := [rewrite]: #593
151.424 +#39 := (- uf_7)
151.425 +#38 := (< uf_7 0::int)
151.426 +#40 := (ite #38 #39 uf_7)
151.427 +#41 := (- #40 uf_6)
151.428 +#42 := (= uf_8 #41)
151.429 +#361 := (iff #42 #356)
151.430 +#321 := (ite #38 #318 uf_7)
151.431 +#271 := (* -1::int uf_6)
151.432 +#327 := (+ #271 #321)
151.433 +#332 := (= uf_8 #327)
151.434 +#359 := (iff #332 #356)
151.435 +#347 := (+ #271 #342)
151.436 +#350 := (= uf_8 #347)
151.437 +#357 := (iff #350 #356)
151.438 +#358 := [rewrite]: #357
151.439 +#351 := (iff #332 #350)
151.440 +#348 := (= #327 #347)
151.441 +#345 := (= #321 #342)
151.442 +#339 := (ite #336 #318 uf_7)
151.443 +#343 := (= #339 #342)
151.444 +#344 := [rewrite]: #343
151.445 +#340 := (= #321 #339)
151.446 +#337 := (iff #38 #336)
151.447 +#338 := [rewrite]: #337
151.448 +#341 := [monotonicity #338]: #340
151.449 +#346 := [trans #341 #344]: #345
151.450 +#349 := [monotonicity #346]: #348
151.451 +#352 := [monotonicity #349]: #351
151.452 +#360 := [trans #352 #358]: #359
151.453 +#333 := (iff #42 #332)
151.454 +#330 := (= #41 #327)
151.455 +#324 := (- #321 uf_6)
151.456 +#328 := (= #324 #327)
151.457 +#329 := [rewrite]: #328
151.458 +#325 := (= #41 #324)
151.459 +#322 := (= #40 #321)
151.460 +#319 := (= #39 #318)
151.461 +#320 := [rewrite]: #319
151.462 +#323 := [monotonicity #320]: #322
151.463 +#326 := [monotonicity #323]: #325
151.464 +#331 := [trans #326 #329]: #330
151.465 +#334 := [monotonicity #331]: #333
151.466 +#362 := [trans #334 #360]: #361
151.467 +#317 := [asserted]: #42
151.468 +#363 := [mp #317 #362]: #356
151.469 +#595 := [mp #363 #594]: #592
151.470 +#597 := [not-or-elim #595]: #588
151.471 +#802 := [mp~ #597 #801]: #799
151.472 +#1343 := (not #825)
151.473 +#1350 := (not #799)
151.474 +#1351 := (or #288 #1075 #1350 #429 #1113 #1343)
151.475 +#1352 := [th-lemma]: #1351
151.476 +#1689 := [unit-resolution #1352 #802 #1447 #828]: #1688
151.477 +#2046 := [unit-resolution #1689 #1405 #1870]: #429
151.478 +#430 := (not #429)
151.479 +#1156 := (or #430 #1153)
151.480 +#1161 := (>= #1159 0::int)
151.481 +#1163 := (not #1161)
151.482 +#1162 := (not #1160)
151.483 +#1164 := (or #1162 #1163)
151.484 +#1165 := (not #1164)
151.485 +#1168 := (or #429 #1165)
151.486 +#1175 := (not #1168)
151.487 +#1174 := (not #1156)
151.488 +#1176 := (or #1174 #1175)
151.489 +#1177 := (not #1176)
151.490 +#412 := (* -1::int uf_9)
151.491 +#832 := (= z3name!7 #412)
151.492 +#833 := (or #429 #832)
151.493 +#830 := (= z3name!7 uf_9)
151.494 +#831 := (or #430 #830)
151.495 +#834 := (and #831 #833)
151.496 +#1180 := (iff #834 #1177)
151.497 +#1171 := (and #1156 #1168)
151.498 +#1178 := (iff #1171 #1177)
151.499 +#1179 := [rewrite]: #1178
151.500 +#1172 := (iff #834 #1171)
151.501 +#1169 := (iff #833 #1168)
151.502 +#1166 := (iff #832 #1165)
151.503 +#1167 := [rewrite]: #1166
151.504 +#1170 := [monotonicity #1167]: #1169
151.505 +#1157 := (iff #831 #1156)
151.506 +#1154 := (iff #830 #1153)
151.507 +#1155 := [rewrite]: #1154
151.508 +#1158 := [monotonicity #1155]: #1157
151.509 +#1173 := [monotonicity #1158 #1170]: #1172
151.510 +#1181 := [trans #1173 #1179]: #1180
151.511 +#835 := [intro-def]: #834
151.512 +#1182 := [mp #835 #1181]: #1177
151.513 +#1183 := [not-or-elim #1182]: #1156
151.514 +#2047 := [unit-resolution #1183 #2046]: #1153
151.515 +#1307 := (or #1152 #1147)
151.516 +#1308 := [def-axiom]: #1307
151.517 +#2112 := [unit-resolution #1308 #2047]: #1147
151.518 +#2009 := (or #288 #382)
151.519 +#1998 := (or #1036 #288)
151.520 +#1045 := (+ uf_6 z3name!4)
151.521 +#1047 := (>= #1045 0::int)
151.522 +#1049 := (not #1047)
151.523 +#1046 := (<= #1045 0::int)
151.524 +#1048 := (not #1046)
151.525 +#1050 := (or #1048 #1049)
151.526 +#1460 := [hypothesis]: #1049
151.527 +#1279 := (or #1050 #1047)
151.528 +#1280 := [def-axiom]: #1279
151.529 +#1461 := [unit-resolution #1280 #1460]: #1050
151.530 +#1464 := (or #1047 #289)
151.531 +#1051 := (not #1050)
151.532 +#1448 := [hypothesis]: #1037
151.533 +#1273 := (or #1038 #1035)
151.534 +#1274 := [def-axiom]: #1273
151.535 +#1449 := [unit-resolution #1274 #1448]: #1038
151.536 +#1042 := (or #289 #1039)
151.537 +#1054 := (or #288 #1051)
151.538 +#1061 := (not #1054)
151.539 +#1060 := (not #1042)
151.540 +#1062 := (or #1060 #1061)
151.541 +#1063 := (not #1062)
151.542 +#754 := (= z3name!4 #271)
151.543 +#755 := (or #288 #754)
151.544 +#752 := (= z3name!4 uf_6)
151.545 +#753 := (or #289 #752)
151.546 +#756 := (and #753 #755)
151.547 +#1066 := (iff #756 #1063)
151.548 +#1057 := (and #1042 #1054)
151.549 +#1064 := (iff #1057 #1063)
151.550 +#1065 := [rewrite]: #1064
151.551 +#1058 := (iff #756 #1057)
151.552 +#1055 := (iff #755 #1054)
151.553 +#1052 := (iff #754 #1051)
151.554 +#1053 := [rewrite]: #1052
151.555 +#1056 := [monotonicity #1053]: #1055
151.556 +#1043 := (iff #753 #1042)
151.557 +#1040 := (iff #752 #1039)
151.558 +#1041 := [rewrite]: #1040
151.559 +#1044 := [monotonicity #1041]: #1043
151.560 +#1059 := [monotonicity #1044 #1056]: #1058
151.561 +#1067 := [trans #1059 #1065]: #1066
151.562 +#757 := [intro-def]: #756
151.563 +#1068 := [mp #757 #1067]: #1063
151.564 +#1069 := [not-or-elim #1068]: #1042
151.565 +#1450 := [unit-resolution #1069 #1449]: #289
151.566 +#1070 := [not-or-elim #1068]: #1054
151.567 +#1451 := [unit-resolution #1070 #1450]: #1051
151.568 +#1452 := (or #1035 #1033)
151.569 +#1453 := [th-lemma]: #1452
151.570 +#1454 := [unit-resolution #1453 #1448]: #1033
151.571 +#1455 := (or #1036 #288 #1049)
151.572 +#1456 := [th-lemma]: #1455
151.573 +#1457 := [unit-resolution #1456 #1450 #1454]: #1049
151.574 +#1458 := [unit-resolution #1280 #1457 #1451]: false
151.575 +#1459 := [lemma #1458]: #1035
151.576 +#1462 := (or #1047 #1037 #289)
151.577 +#1463 := [th-lemma]: #1462
151.578 +#1465 := [unit-resolution #1463 #1459]: #1464
151.579 +#1466 := [unit-resolution #1465 #1460]: #289
151.580 +#1467 := [unit-resolution #1070 #1466 #1461]: false
151.581 +#1468 := [lemma #1467]: #1047
151.582 +#1999 := [unit-resolution #1456 #1468]: #1998
151.583 +#2000 := [unit-resolution #1999 #1405]: #1036
151.584 +#1407 := [unit-resolution #1070 #1405]: #1051
151.585 +#1277 := (or #1050 #1046)
151.586 +#1278 := [def-axiom]: #1277
151.587 +#1497 := [unit-resolution #1278 #1407]: #1046
151.588 +#2001 := (or #336 #1048 #1033 #382 #1350 #1075)
151.589 +#2002 := [th-lemma]: #2001
151.590 +#2003 := [unit-resolution #2002 #1497 #2000 #1447 #802 #1428]: #336
151.591 +#2004 := (or #1087 #1075 #1048 #1033 #382 #1350)
151.592 +#2005 := [th-lemma]: #2004
151.593 +#2006 := [unit-resolution #2005 #1497 #1447 #2000 #802 #1428]: #1087
151.594 +#2007 := [unit-resolution #1292 #2006]: #1088
151.595 +#2008 := [unit-resolution #1108 #2007 #2003]: false
151.596 +#2010 := [lemma #2008]: #2009
151.597 +#2113 := [unit-resolution #2010 #1405]: #382
151.598 +#2114 := [unit-resolution #1145 #2113]: #1115
151.599 +#1295 := (or #1114 #1109)
151.600 +#1296 := [def-axiom]: #1295
151.601 +#2115 := [unit-resolution #1296 #2114]: #1109
151.602 +decl z3name!2 :: int
151.603 +#699 := z3name!2
151.604 +#708 := (* -1::int z3name!2)
151.605 +#958 := (+ uf_4 #708)
151.606 +#957 := (>= #958 0::int)
151.607 +#959 := (<= #958 0::int)
151.608 +#961 := (not #959)
151.609 +#960 := (not #957)
151.610 +#962 := (or #960 #961)
151.611 +#963 := (not #962)
151.612 +decl uf_5 :: int
151.613 +#19 := uf_5
151.614 +#241 := (>= uf_5 0::int)
151.615 +#242 := (not #241)
151.616 +#1406 := [hypothesis]: #242
151.617 +#1579 := (or #1048 #241)
151.618 +#516 := (>= #514 0::int)
151.619 +#476 := (>= uf_10 0::int)
151.620 +#477 := (not #476)
151.621 +#1484 := (or #382 #241)
151.622 +#1430 := (or #382 #241 #1075 #1037)
151.623 +#1421 := [hypothesis]: #1035
151.624 +#1427 := [hypothesis]: #1073
151.625 +#763 := (+ uf_7 #760)
151.626 +#766 := (+ uf_5 #763)
151.627 +#773 := (>= #766 0::int)
151.628 +#295 := (ite #288 uf_6 #271)
151.629 +#306 := (* -1::int #295)
151.630 +#307 := (+ uf_7 #306)
151.631 +#308 := (+ uf_5 #307)
151.632 +#577 := (>= #308 0::int)
151.633 +#774 := (= #577 #773)
151.634 +#767 := (~ #308 #766)
151.635 +#764 := (~ #307 #763)
151.636 +#761 := (~ #306 #760)
151.637 +#758 := (~ #295 z3name!4)
151.638 +#759 := [apply-def #757]: #758
151.639 +#762 := [monotonicity #759]: #761
151.640 +#765 := [monotonicity #762]: #764
151.641 +#768 := [monotonicity #765]: #767
151.642 +#775 := [monotonicity #768]: #774
151.643 +#579 := (not #577)
151.644 +#576 := (<= #308 0::int)
151.645 +#578 := (not #576)
151.646 +#580 := (or #578 #579)
151.647 +#581 := (not #580)
151.648 +#309 := (= #308 0::int)
151.649 +#582 := (iff #309 #581)
151.650 +#583 := [rewrite]: #582
151.651 +#33 := (- uf_6)
151.652 +#32 := (< uf_6 0::int)
151.653 +#34 := (ite #32 #33 uf_6)
151.654 +#35 := (- #34 uf_5)
151.655 +#36 := (= uf_7 #35)
151.656 +#314 := (iff #36 #309)
151.657 +#274 := (ite #32 #271 uf_6)
151.658 +#224 := (* -1::int uf_5)
151.659 +#280 := (+ #224 #274)
151.660 +#285 := (= uf_7 #280)
151.661 +#312 := (iff #285 #309)
151.662 +#300 := (+ #224 #295)
151.663 +#303 := (= uf_7 #300)
151.664 +#310 := (iff #303 #309)
151.665 +#311 := [rewrite]: #310
151.666 +#304 := (iff #285 #303)
151.667 +#301 := (= #280 #300)
151.668 +#298 := (= #274 #295)
151.669 +#292 := (ite #289 #271 uf_6)
151.670 +#296 := (= #292 #295)
151.671 +#297 := [rewrite]: #296
151.672 +#293 := (= #274 #292)
151.673 +#290 := (iff #32 #289)
151.674 +#291 := [rewrite]: #290
151.675 +#294 := [monotonicity #291]: #293
151.676 +#299 := [trans #294 #297]: #298
151.677 +#302 := [monotonicity #299]: #301
151.678 +#305 := [monotonicity #302]: #304
151.679 +#313 := [trans #305 #311]: #312
151.680 +#286 := (iff #36 #285)
151.681 +#283 := (= #35 #280)
151.682 +#277 := (- #274 uf_5)
151.683 +#281 := (= #277 #280)
151.684 +#282 := [rewrite]: #281
151.685 +#278 := (= #35 #277)
151.686 +#275 := (= #34 #274)
151.687 +#272 := (= #33 #271)
151.688 +#273 := [rewrite]: #272
151.689 +#276 := [monotonicity #273]: #275
151.690 +#279 := [monotonicity #276]: #278
151.691 +#284 := [trans #279 #282]: #283
151.692 +#287 := [monotonicity #284]: #286
151.693 +#315 := [trans #287 #313]: #314
151.694 +#270 := [asserted]: #36
151.695 +#316 := [mp #270 #315]: #309
151.696 +#584 := [mp #316 #583]: #581
151.697 +#586 := [not-or-elim #584]: #577
151.698 +#776 := [mp~ #586 #775]: #773
151.699 +#1429 := [th-lemma #776 #1406 #1428 #1427 #802 #1421]: false
151.700 +#1431 := [lemma #1429]: #1430
151.701 +#1485 := [unit-resolution #1431 #1447 #1459]: #1484
151.702 +#1486 := [unit-resolution #1485 #1406]: #382
151.703 +#1487 := [unit-resolution #1145 #1486]: #1115
151.704 +#1496 := [unit-resolution #1298 #1487]: #1111
151.705 +#1545 := [hypothesis]: #1046
151.706 +#1548 := (or #1048 #1113 #429)
151.707 +#1546 := (or #1048 #1113 #429 #1343 #1075 #1350 #1037)
151.708 +#1547 := [th-lemma]: #1546
151.709 +#1549 := [unit-resolution #1547 #1447 #802 #1459 #828]: #1548
151.710 +#1550 := [unit-resolution #1549 #1545 #1496]: #429
151.711 +#1551 := [unit-resolution #1183 #1550]: #1153
151.712 +#1552 := [unit-resolution #1308 #1551]: #1147
151.713 +#1543 := (or #477 #241 #1150)
151.714 +#1488 := [unit-resolution #1296 #1487]: #1109
151.715 +#821 := (<= #818 0::int)
151.716 +#822 := (= #598 #821)
151.717 +#823 := [monotonicity #820]: #822
151.718 +#607 := [not-or-elim #606]: #598
151.719 +#824 := [mp~ #607 #823]: #821
151.720 +#841 := (+ uf_10 #838)
151.721 +#844 := (+ uf_8 #841)
151.722 +#847 := (<= #844 0::int)
151.723 +#436 := (ite #429 uf_9 #412)
151.724 +#447 := (* -1::int #436)
151.725 +#448 := (+ uf_10 #447)
151.726 +#449 := (+ uf_8 #448)
151.727 +#609 := (<= #449 0::int)
151.728 +#848 := (= #609 #847)
151.729 +#845 := (~ #449 #844)
151.730 +#842 := (~ #448 #841)
151.731 +#839 := (~ #447 #838)
151.732 +#836 := (~ #436 z3name!7)
151.733 +#837 := [apply-def #835]: #836
151.734 +#840 := [monotonicity #837]: #839
151.735 +#843 := [monotonicity #840]: #842
151.736 +#846 := [monotonicity #843]: #845
151.737 +#849 := [monotonicity #846]: #848
151.738 +#610 := (>= #449 0::int)
151.739 +#612 := (not #610)
151.740 +#611 := (not #609)
151.741 +#613 := (or #611 #612)
151.742 +#614 := (not #613)
151.743 +#450 := (= #449 0::int)
151.744 +#615 := (iff #450 #614)
151.745 +#616 := [rewrite]: #615
151.746 +#51 := (- uf_9)
151.747 +#50 := (< uf_9 0::int)
151.748 +#52 := (ite #50 #51 uf_9)
151.749 +#53 := (- #52 uf_8)
151.750 +#54 := (= uf_10 #53)
151.751 +#455 := (iff #54 #450)
151.752 +#415 := (ite #50 #412 uf_9)
151.753 +#421 := (+ #365 #415)
151.754 +#426 := (= uf_10 #421)
151.755 +#453 := (iff #426 #450)
151.756 +#441 := (+ #365 #436)
151.757 +#444 := (= uf_10 #441)
151.758 +#451 := (iff #444 #450)
151.759 +#452 := [rewrite]: #451
151.760 +#445 := (iff #426 #444)
151.761 +#442 := (= #421 #441)
151.762 +#439 := (= #415 #436)
151.763 +#433 := (ite #430 #412 uf_9)
151.764 +#437 := (= #433 #436)
151.765 +#438 := [rewrite]: #437
151.766 +#434 := (= #415 #433)
151.767 +#431 := (iff #50 #430)
151.768 +#432 := [rewrite]: #431
151.769 +#435 := [monotonicity #432]: #434
151.770 +#440 := [trans #435 #438]: #439
151.771 +#443 := [monotonicity #440]: #442
151.772 +#446 := [monotonicity #443]: #445
151.773 +#454 := [trans #446 #452]: #453
151.774 +#427 := (iff #54 #426)
151.775 +#424 := (= #53 #421)
151.776 +#418 := (- #415 uf_8)
151.777 +#422 := (= #418 #421)
151.778 +#423 := [rewrite]: #422
151.779 +#419 := (= #53 #418)
151.780 +#416 := (= #52 #415)
151.781 +#413 := (= #51 #412)
151.782 +#414 := [rewrite]: #413
151.783 +#417 := [monotonicity #414]: #416
151.784 +#420 := [monotonicity #417]: #419
151.785 +#425 := [trans #420 #423]: #424
151.786 +#428 := [monotonicity #425]: #427
151.787 +#456 := [trans #428 #454]: #455
151.788 +#411 := [asserted]: #54
151.789 +#457 := [mp #411 #456]: #450
151.790 +#617 := [mp #457 #616]: #614
151.791 +#618 := [not-or-elim #617]: #609
151.792 +#850 := [mp~ #618 #849]: #847
151.793 +#1540 := [hypothesis]: #1147
151.794 +#1541 := [hypothesis]: #476
151.795 +#1542 := [th-lemma #1468 #1406 #1541 #1540 #850 #824 #1488 #776 #1459]: false
151.796 +#1544 := [lemma #1542]: #1543
151.797 +#1553 := [unit-resolution #1544 #1552 #1406]: #477
151.798 +#851 := (>= #844 0::int)
151.799 +#852 := (= #610 #851)
151.800 +#853 := [monotonicity #846]: #852
151.801 +#619 := [not-or-elim #617]: #610
151.802 +#854 := [mp~ #619 #853]: #851
151.803 +#1309 := (or #1152 #1149)
151.804 +#1310 := [def-axiom]: #1309
151.805 +#1554 := [unit-resolution #1310 #1551]: #1149
151.806 +#769 := (<= #766 0::int)
151.807 +#770 := (= #576 #769)
151.808 +#771 := [monotonicity #768]: #770
151.809 +#585 := [not-or-elim #584]: #576
151.810 +#772 := [mp~ #585 #771]: #769
151.811 +decl z3name!3 :: int
151.812 +#725 := z3name!3
151.813 +#1007 := (+ uf_5 z3name!3)
151.814 +#1009 := (>= #1007 0::int)
151.815 +#1011 := (not #1009)
151.816 +#1398 := [hypothesis]: #1011
151.817 +#734 := (* -1::int z3name!3)
151.818 +#996 := (+ uf_5 #734)
151.819 +#997 := (<= #996 0::int)
151.820 +#999 := (not #997)
151.821 +#995 := (>= #996 0::int)
151.822 +#998 := (not #995)
151.823 +#1000 := (or #998 #999)
151.824 +#1001 := (not #1000)
151.825 +#1008 := (<= #1007 0::int)
151.826 +#1010 := (not #1008)
151.827 +#1012 := (or #1010 #1011)
151.828 +#1267 := (or #1012 #1009)
151.829 +#1268 := [def-axiom]: #1267
151.830 +#1399 := [unit-resolution #1268 #1398]: #1012
151.831 +#1013 := (not #1012)
151.832 +#1016 := (or #241 #1013)
151.833 +#1023 := (not #1016)
151.834 +#1004 := (or #242 #1001)
151.835 +#1022 := (not #1004)
151.836 +#1024 := (or #1022 #1023)
151.837 +#1025 := (not #1024)
151.838 +#728 := (= z3name!3 #224)
151.839 +#729 := (or #241 #728)
151.840 +#726 := (= z3name!3 uf_5)
151.841 +#727 := (or #242 #726)
151.842 +#730 := (and #727 #729)
151.843 +#1028 := (iff #730 #1025)
151.844 +#1019 := (and #1004 #1016)
151.845 +#1026 := (iff #1019 #1025)
151.846 +#1027 := [rewrite]: #1026
151.847 +#1020 := (iff #730 #1019)
151.848 +#1017 := (iff #729 #1016)
151.849 +#1014 := (iff #728 #1013)
151.850 +#1015 := [rewrite]: #1014
151.851 +#1018 := [monotonicity #1015]: #1017
151.852 +#1005 := (iff #727 #1004)
151.853 +#1002 := (iff #726 #1001)
151.854 +#1003 := [rewrite]: #1002
151.855 +#1006 := [monotonicity #1003]: #1005
151.856 +#1021 := [monotonicity #1006 #1018]: #1020
151.857 +#1029 := [trans #1021 #1027]: #1028
151.858 +#731 := [intro-def]: #730
151.859 +#1030 := [mp #731 #1029]: #1025
151.860 +#1032 := [not-or-elim #1030]: #1016
151.861 +#1400 := [unit-resolution #1032 #1399]: #241
151.862 +#1031 := [not-or-elim #1030]: #1004
151.863 +#1401 := [unit-resolution #1031 #1400]: #1001
151.864 +#1261 := (or #1000 #997)
151.865 +#1262 := [def-axiom]: #1261
151.866 +#1402 := [unit-resolution #1262 #1401]: #997
151.867 +#1403 := [th-lemma #1400 #1402 #1398]: false
151.868 +#1404 := [lemma #1403]: #1009
151.869 +#737 := (+ uf_6 #734)
151.870 +#740 := (+ uf_4 #737)
151.871 +#747 := (>= #740 0::int)
151.872 +#248 := (ite #241 uf_5 #224)
151.873 +#259 := (* -1::int #248)
151.874 +#260 := (+ uf_6 #259)
151.875 +#261 := (+ uf_4 #260)
151.876 +#566 := (>= #261 0::int)
151.877 +#748 := (= #566 #747)
151.878 +#741 := (~ #261 #740)
151.879 +#738 := (~ #260 #737)
151.880 +#735 := (~ #259 #734)
151.881 +#732 := (~ #248 z3name!3)
151.882 +#733 := [apply-def #731]: #732
151.883 +#736 := [monotonicity #733]: #735
151.884 +#739 := [monotonicity #736]: #738
151.885 +#742 := [monotonicity #739]: #741
151.886 +#749 := [monotonicity #742]: #748
151.887 +#568 := (not #566)
151.888 +#565 := (<= #261 0::int)
151.889 +#567 := (not #565)
151.890 +#569 := (or #567 #568)
151.891 +#570 := (not #569)
151.892 +#262 := (= #261 0::int)
151.893 +#571 := (iff #262 #570)
151.894 +#572 := [rewrite]: #571
151.895 +#27 := (- uf_5)
151.896 +#26 := (< uf_5 0::int)
151.897 +#28 := (ite #26 #27 uf_5)
151.898 +#29 := (- #28 uf_4)
151.899 +#30 := (= uf_6 #29)
151.900 +#267 := (iff #30 #262)
151.901 +#227 := (ite #26 #224 uf_5)
151.902 +#177 := (* -1::int uf_4)
151.903 +#233 := (+ #177 #227)
151.904 +#238 := (= uf_6 #233)
151.905 +#265 := (iff #238 #262)
151.906 +#253 := (+ #177 #248)
151.907 +#256 := (= uf_6 #253)
151.908 +#263 := (iff #256 #262)
151.909 +#264 := [rewrite]: #263
151.910 +#257 := (iff #238 #256)
151.911 +#254 := (= #233 #253)
151.912 +#251 := (= #227 #248)
151.913 +#245 := (ite #242 #224 uf_5)
151.914 +#249 := (= #245 #248)
151.915 +#250 := [rewrite]: #249
151.916 +#246 := (= #227 #245)
151.917 +#243 := (iff #26 #242)
151.918 +#244 := [rewrite]: #243
151.919 +#247 := [monotonicity #244]: #246
151.920 +#252 := [trans #247 #250]: #251
151.921 +#255 := [monotonicity #252]: #254
151.922 +#258 := [monotonicity #255]: #257
151.923 +#266 := [trans #258 #264]: #265
151.924 +#239 := (iff #30 #238)
151.925 +#236 := (= #29 #233)
151.926 +#230 := (- #227 uf_4)
151.927 +#234 := (= #230 #233)
151.928 +#235 := [rewrite]: #234
151.929 +#231 := (= #29 #230)
151.930 +#228 := (= #28 #227)
151.931 +#225 := (= #27 #224)
151.932 +#226 := [rewrite]: #225
151.933 +#229 := [monotonicity #226]: #228
151.934 +#232 := [monotonicity #229]: #231
151.935 +#237 := [trans #232 #235]: #236
151.936 +#240 := [monotonicity #237]: #239
151.937 +#268 := [trans #240 #266]: #267
151.938 +#223 := [asserted]: #30
151.939 +#269 := [mp #223 #268]: #262
151.940 +#573 := [mp #269 #572]: #570
151.941 +#575 := [not-or-elim #573]: #566
151.942 +#750 := [mp~ #575 #749]: #747
151.943 +#1364 := (not #747)
151.944 +#1357 := (not #769)
151.945 +#1337 := (not #851)
151.946 +#1555 := (or #194 #476 #1151 #1337 #1343 #1113 #1048 #1357 #1364 #1011)
151.947 +#1556 := [th-lemma]: #1555
151.948 +#1557 := [unit-resolution #1556 #1545 #750 #1404 #772 #1496 #828 #1554 #854 #1553]: #194
151.949 +#195 := (not #194)
151.950 +#966 := (or #195 #963)
151.951 +#969 := (+ uf_4 z3name!2)
151.952 +#971 := (>= #969 0::int)
151.953 +#973 := (not #971)
151.954 +#970 := (<= #969 0::int)
151.955 +#972 := (not #970)
151.956 +#974 := (or #972 #973)
151.957 +#975 := (not #974)
151.958 +#978 := (or #194 #975)
151.959 +#985 := (not #978)
151.960 +#984 := (not #966)
151.961 +#986 := (or #984 #985)
151.962 +#987 := (not #986)
151.963 +#702 := (= z3name!2 #177)
151.964 +#703 := (or #194 #702)
151.965 +#700 := (= z3name!2 uf_4)
151.966 +#701 := (or #195 #700)
151.967 +#704 := (and #701 #703)
151.968 +#990 := (iff #704 #987)
151.969 +#981 := (and #966 #978)
151.970 +#988 := (iff #981 #987)
151.971 +#989 := [rewrite]: #988
151.972 +#982 := (iff #704 #981)
151.973 +#979 := (iff #703 #978)
151.974 +#976 := (iff #702 #975)
151.975 +#977 := [rewrite]: #976
151.976 +#980 := [monotonicity #977]: #979
151.977 +#967 := (iff #701 #966)
151.978 +#964 := (iff #700 #963)
151.979 +#965 := [rewrite]: #964
151.980 +#968 := [monotonicity #965]: #967
151.981 +#983 := [monotonicity #968 #980]: #982
151.982 +#991 := [trans #983 #989]: #990
151.983 +#705 := [intro-def]: #704
151.984 +#992 := [mp #705 #991]: #987
151.985 +#993 := [not-or-elim #992]: #966
151.986 +#1558 := [unit-resolution #993 #1557]: #963
151.987 +#1249 := (or #962 #959)
151.988 +#1250 := [def-axiom]: #1249
151.989 +#1559 := [unit-resolution #1250 #1558]: #959
151.990 +decl z3name!8 :: int
151.991 +#855 := z3name!8
151.992 +#864 := (* -1::int z3name!8)
151.993 +#867 := (+ uf_11 #864)
151.994 +#870 := (+ uf_9 #867)
151.995 +#873 := (<= #870 0::int)
151.996 +#483 := (ite #476 uf_10 #459)
151.997 +#494 := (* -1::int #483)
151.998 +#495 := (+ uf_11 #494)
151.999 +#496 := (+ uf_9 #495)
151.1000 +#620 := (<= #496 0::int)
151.1001 +#874 := (= #620 #873)
151.1002 +#871 := (~ #496 #870)
151.1003 +#868 := (~ #495 #867)
151.1004 +#865 := (~ #494 #864)
151.1005 +#862 := (~ #483 z3name!8)
151.1006 +#858 := (= z3name!8 #459)
151.1007 +#859 := (or #476 #858)
151.1008 +#856 := (= z3name!8 uf_10)
151.1009 +#857 := (or #477 #856)
151.1010 +#860 := (and #857 #859)
151.1011 +#861 := [intro-def]: #860
151.1012 +#863 := [apply-def #861]: #862
151.1013 +#866 := [monotonicity #863]: #865
151.1014 +#869 := [monotonicity #866]: #868
151.1015 +#872 := [monotonicity #869]: #871
151.1016 +#875 := [monotonicity #872]: #874
151.1017 +#621 := (>= #496 0::int)
151.1018 +#623 := (not #621)
151.1019 +#622 := (not #620)
151.1020 +#624 := (or #622 #623)
151.1021 +#625 := (not #624)
151.1022 +#497 := (= #496 0::int)
151.1023 +#626 := (iff #497 #625)
151.1024 +#627 := [rewrite]: #626
151.1025 +#57 := (- uf_10)
151.1026 +#56 := (< uf_10 0::int)
151.1027 +#58 := (ite #56 #57 uf_10)
151.1028 +#59 := (- #58 uf_9)
151.1029 +#60 := (= uf_11 #59)
151.1030 +#502 := (iff #60 #497)
151.1031 +#462 := (ite #56 #459 uf_10)
151.1032 +#468 := (+ #412 #462)
151.1033 +#473 := (= uf_11 #468)
151.1034 +#500 := (iff #473 #497)
151.1035 +#488 := (+ #412 #483)
151.1036 +#491 := (= uf_11 #488)
151.1037 +#498 := (iff #491 #497)
151.1038 +#499 := [rewrite]: #498
151.1039 +#492 := (iff #473 #491)
151.1040 +#489 := (= #468 #488)
151.1041 +#486 := (= #462 #483)
151.1042 +#480 := (ite #477 #459 uf_10)
151.1043 +#484 := (= #480 #483)
151.1044 +#485 := [rewrite]: #484
151.1045 +#481 := (= #462 #480)
151.1046 +#478 := (iff #56 #477)
151.1047 +#479 := [rewrite]: #478
151.1048 +#482 := [monotonicity #479]: #481
151.1049 +#487 := [trans #482 #485]: #486
151.1050 +#490 := [monotonicity #487]: #489
151.1051 +#493 := [monotonicity #490]: #492
151.1052 +#501 := [trans #493 #499]: #500
151.1053 +#474 := (iff #60 #473)
151.1054 +#471 := (= #59 #468)
151.1055 +#465 := (- #462 uf_9)
151.1056 +#469 := (= #465 #468)
151.1057 +#470 := [rewrite]: #469
151.1058 +#466 := (= #59 #465)
151.1059 +#463 := (= #58 #462)
151.1060 +#460 := (= #57 #459)
151.1061 +#461 := [rewrite]: #460
151.1062 +#464 := [monotonicity #461]: #463
151.1063 +#467 := [monotonicity #464]: #466
151.1064 +#472 := [trans #467 #470]: #471
151.1065 +#475 := [monotonicity #472]: #474
151.1066 +#503 := [trans #475 #501]: #502
151.1067 +#458 := [asserted]: #60
151.1068 +#504 := [mp #458 #503]: #497
151.1069 +#628 := [mp #504 #627]: #625
151.1070 +#629 := [not-or-elim #628]: #620
151.1071 +#876 := [mp~ #629 #875]: #873
151.1072 +#1197 := (+ uf_10 z3name!8)
151.1073 +#1198 := (<= #1197 0::int)
151.1074 +#1199 := (>= #1197 0::int)
151.1075 +#1201 := (not #1199)
151.1076 +#1200 := (not #1198)
151.1077 +#1202 := (or #1200 #1201)
151.1078 +#1203 := (not #1202)
151.1079 +#1206 := (or #476 #1203)
151.1080 +#1213 := (not #1206)
151.1081 +#1186 := (+ uf_10 #864)
151.1082 +#1187 := (<= #1186 0::int)
151.1083 +#1189 := (not #1187)
151.1084 +#1185 := (>= #1186 0::int)
151.1085 +#1188 := (not #1185)
151.1086 +#1190 := (or #1188 #1189)
151.1087 +#1191 := (not #1190)
151.1088 +#1194 := (or #477 #1191)
151.1089 +#1212 := (not #1194)
151.1090 +#1214 := (or #1212 #1213)
151.1091 +#1215 := (not #1214)
151.1092 +#1218 := (iff #860 #1215)
151.1093 +#1209 := (and #1194 #1206)
151.1094 +#1216 := (iff #1209 #1215)
151.1095 +#1217 := [rewrite]: #1216
151.1096 +#1210 := (iff #860 #1209)
151.1097 +#1207 := (iff #859 #1206)
151.1098 +#1204 := (iff #858 #1203)
151.1099 +#1205 := [rewrite]: #1204
151.1100 +#1208 := [monotonicity #1205]: #1207
151.1101 +#1195 := (iff #857 #1194)
151.1102 +#1192 := (iff #856 #1191)
151.1103 +#1193 := [rewrite]: #1192
151.1104 +#1196 := [monotonicity #1193]: #1195
151.1105 +#1211 := [monotonicity #1196 #1208]: #1210
151.1106 +#1219 := [trans #1211 #1217]: #1218
151.1107 +#1220 := [mp #861 #1219]: #1215
151.1108 +#1222 := [not-or-elim #1220]: #1206
151.1109 +#1560 := [unit-resolution #1222 #1553]: #1203
151.1110 +#1325 := (or #1202 #1198)
151.1111 +#1326 := [def-axiom]: #1325
151.1112 +#1561 := [unit-resolution #1326 #1560]: #1198
151.1113 +#711 := (+ uf_5 #708)
151.1114 +#714 := (+ uf_1 #711)
151.1115 +#721 := (>= #714 0::int)
151.1116 +#201 := (ite #194 uf_4 #177)
151.1117 +#212 := (* -1::int #201)
151.1118 +#213 := (+ uf_5 #212)
151.1119 +#214 := (+ uf_1 #213)
151.1120 +#555 := (>= #214 0::int)
151.1121 +#722 := (= #555 #721)
151.1122 +#715 := (~ #214 #714)
151.1123 +#712 := (~ #213 #711)
151.1124 +#709 := (~ #212 #708)
151.1125 +#706 := (~ #201 z3name!2)
151.1126 +#707 := [apply-def #705]: #706
151.1127 +#710 := [monotonicity #707]: #709
151.1128 +#713 := [monotonicity #710]: #712
151.1129 +#716 := [monotonicity #713]: #715
151.1130 +#723 := [monotonicity #716]: #722
151.1131 +#557 := (not #555)
151.1132 +#554 := (<= #214 0::int)
151.1133 +#556 := (not #554)
151.1134 +#558 := (or #556 #557)
151.1135 +#559 := (not #558)
151.1136 +#215 := (= #214 0::int)
151.1137 +#560 := (iff #215 #559)
151.1138 +#561 := [rewrite]: #560
151.1139 +#21 := (- uf_4)
151.1140 +#20 := (< uf_4 0::int)
151.1141 +#22 := (ite #20 #21 uf_4)
151.1142 +#23 := (- #22 uf_1)
151.1143 +#24 := (= uf_5 #23)
151.1144 +#220 := (iff #24 #215)
151.1145 +#180 := (ite #20 #177 uf_4)
151.1146 +#186 := (+ #130 #180)
151.1147 +#191 := (= uf_5 #186)
151.1148 +#218 := (iff #191 #215)
151.1149 +#206 := (+ #130 #201)
151.1150 +#209 := (= uf_5 #206)
151.1151 +#216 := (iff #209 #215)
151.1152 +#217 := [rewrite]: #216
151.1153 +#210 := (iff #191 #209)
151.1154 +#207 := (= #186 #206)
151.1155 +#204 := (= #180 #201)
151.1156 +#198 := (ite #195 #177 uf_4)
151.1157 +#202 := (= #198 #201)
151.1158 +#203 := [rewrite]: #202
151.1159 +#199 := (= #180 #198)
151.1160 +#196 := (iff #20 #195)
151.1161 +#197 := [rewrite]: #196
151.1162 +#200 := [monotonicity #197]: #199
151.1163 +#205 := [trans #200 #203]: #204
151.1164 +#208 := [monotonicity #205]: #207
151.1165 +#211 := [monotonicity #208]: #210
151.1166 +#219 := [trans #211 #217]: #218
151.1167 +#192 := (iff #24 #191)
151.1168 +#189 := (= #23 #186)
151.1169 +#183 := (- #180 uf_1)
151.1170 +#187 := (= #183 #186)
151.1171 +#188 := [rewrite]: #187
151.1172 +#184 := (= #23 #183)
151.1173 +#181 := (= #22 #180)
151.1174 +#178 := (= #21 #177)
151.1175 +#179 := [rewrite]: #178
151.1176 +#182 := [monotonicity #179]: #181
151.1177 +#185 := [monotonicity #182]: #184
151.1178 +#190 := [trans #185 #188]: #189
151.1179 +#193 := [monotonicity #190]: #192
151.1180 +#221 := [trans #193 #219]: #220
151.1181 +#176 := [asserted]: #24
151.1182 +#222 := [mp #176 #221]: #215
151.1183 +#562 := [mp #222 #561]: #559
151.1184 +#564 := [not-or-elim #562]: #555
151.1185 +#724 := [mp~ #564 #723]: #721
151.1186 +#685 := (+ uf_4 #682)
151.1187 +#688 := (+ uf_2 #685)
151.1188 +#695 := (>= #688 0::int)
151.1189 +#154 := (ite #147 uf_1 #130)
151.1190 +#165 := (* -1::int #154)
151.1191 +#166 := (+ uf_4 #165)
151.1192 +#167 := (+ uf_2 #166)
151.1193 +#544 := (>= #167 0::int)
151.1194 +#696 := (= #544 #695)
151.1195 +#689 := (~ #167 #688)
151.1196 +#686 := (~ #166 #685)
151.1197 +#683 := (~ #165 #682)
151.1198 +#680 := (~ #154 z3name!1)
151.1199 +#681 := [apply-def #679]: #680
151.1200 +#684 := [monotonicity #681]: #683
151.1201 +#687 := [monotonicity #684]: #686
151.1202 +#690 := [monotonicity #687]: #689
151.1203 +#697 := [monotonicity #690]: #696
151.1204 +#546 := (not #544)
151.1205 +#543 := (<= #167 0::int)
151.1206 +#545 := (not #543)
151.1207 +#547 := (or #545 #546)
151.1208 +#548 := (not #547)
151.1209 +#168 := (= #167 0::int)
151.1210 +#549 := (iff #168 #548)
151.1211 +#550 := [rewrite]: #549
151.1212 +#15 := (- uf_1)
151.1213 +#14 := (< uf_1 0::int)
151.1214 +#16 := (ite #14 #15 uf_1)
151.1215 +#17 := (- #16 uf_2)
151.1216 +#18 := (= uf_4 #17)
151.1217 +#173 := (iff #18 #168)
151.1218 +#133 := (ite #14 #130 uf_1)
151.1219 +#139 := (+ #82 #133)
151.1220 +#144 := (= uf_4 #139)
151.1221 +#171 := (iff #144 #168)
151.1222 +#159 := (+ #82 #154)
151.1223 +#162 := (= uf_4 #159)
151.1224 +#169 := (iff #162 #168)
151.1225 +#170 := [rewrite]: #169
151.1226 +#163 := (iff #144 #162)
151.1227 +#160 := (= #139 #159)
151.1228 +#157 := (= #133 #154)
151.1229 +#151 := (ite #148 #130 uf_1)
151.1230 +#155 := (= #151 #154)
151.1231 +#156 := [rewrite]: #155
151.1232 +#152 := (= #133 #151)
151.1233 +#149 := (iff #14 #148)
151.1234 +#150 := [rewrite]: #149
151.1235 +#153 := [monotonicity #150]: #152
151.1236 +#158 := [trans #153 #156]: #157
151.1237 +#161 := [monotonicity #158]: #160
151.1238 +#164 := [monotonicity #161]: #163
151.1239 +#172 := [trans #164 #170]: #171
151.1240 +#145 := (iff #18 #144)
151.1241 +#142 := (= #17 #139)
151.1242 +#136 := (- #133 uf_2)
151.1243 +#140 := (= #136 #139)
151.1244 +#141 := [rewrite]: #140
151.1245 +#137 := (= #17 #136)
151.1246 +#134 := (= #16 #133)
151.1247 +#131 := (= #15 #130)
151.1248 +#132 := [rewrite]: #131
151.1249 +#135 := [monotonicity #132]: #134
151.1250 +#138 := [monotonicity #135]: #137
151.1251 +#143 := [trans #138 #141]: #142
151.1252 +#146 := [monotonicity #143]: #145
151.1253 +#174 := [trans #146 #172]: #173
151.1254 +#129 := [asserted]: #18
151.1255 +#175 := [mp #129 #174]: #168
151.1256 +#551 := [mp #175 #550]: #548
151.1257 +#553 := [not-or-elim #551]: #544
151.1258 +#698 := [mp~ #553 #697]: #695
151.1259 +#1373 := (not #721)
151.1260 +#1562 := (or #147 #1373 #961 #241 #195)
151.1261 +#1563 := [th-lemma]: #1562
151.1262 +#1564 := [unit-resolution #1563 #1559 #1557 #724 #1406]: #147
151.1263 +#1565 := [unit-resolution #955 #1564]: #925
151.1264 +#1566 := [unit-resolution #1238 #1565]: #921
151.1265 +#1372 := (not #873)
151.1266 +#1371 := (not #695)
151.1267 +#1498 := (or #516 #923 #1373 #1371 #1372 #1343 #1200 #1075 #1350 #1113 #961 #1151 #1337 #1048 #1357)
151.1268 +#1499 := [th-lemma]: #1498
151.1269 +#1567 := [unit-resolution #1499 #1566 #698 #724 #1545 #772 #1447 #802 #1496 #828 #1554 #854 #1561 #876 #1559]: #516
151.1270 +#1247 := (or #962 #957)
151.1271 +#1248 := [def-axiom]: #1247
151.1272 +#1568 := [unit-resolution #1248 #1558]: #957
151.1273 +#877 := (>= #870 0::int)
151.1274 +#878 := (= #621 #877)
151.1275 +#879 := [monotonicity #872]: #878
151.1276 +#630 := [not-or-elim #628]: #621
151.1277 +#880 := [mp~ #630 #879]: #877
151.1278 +#1327 := (or #1202 #1199)
151.1279 +#1328 := [def-axiom]: #1327
151.1280 +#1569 := [unit-resolution #1328 #1560]: #1199
151.1281 +#795 := (<= #792 0::int)
151.1282 +#796 := (= #587 #795)
151.1283 +#797 := [monotonicity #794]: #796
151.1284 +#596 := [not-or-elim #595]: #587
151.1285 +#798 := [mp~ #596 #797]: #795
151.1286 +#1503 := (or #335 #1049 #241)
151.1287 +#1425 := (or #335 #1049 #241 #1037)
151.1288 +#1422 := [hypothesis]: #336
151.1289 +#1423 := [hypothesis]: #1047
151.1290 +#1424 := [th-lemma #1423 #1422 #776 #1406 #1421]: false
151.1291 +#1426 := [lemma #1424]: #1425
151.1292 +#1504 := [unit-resolution #1426 #1459]: #1503
151.1293 +#1505 := [unit-resolution #1504 #1406 #1468]: #335
151.1294 +#1506 := [unit-resolution #1107 #1505]: #1077
151.1295 +#1283 := (or #1076 #1071)
151.1296 +#1284 := [def-axiom]: #1283
151.1297 +#1507 := [unit-resolution #1284 #1506]: #1071
151.1298 +#717 := (<= #714 0::int)
151.1299 +#718 := (= #554 #717)
151.1300 +#719 := [monotonicity #716]: #718
151.1301 +#563 := [not-or-elim #562]: #554
151.1302 +#720 := [mp~ #563 #719]: #717
151.1303 +#691 := (<= #688 0::int)
151.1304 +#692 := (= #543 #691)
151.1305 +#693 := [monotonicity #690]: #692
151.1306 +#552 := [not-or-elim #551]: #543
151.1307 +#694 := [mp~ #552 #693]: #691
151.1308 +#1235 := (or #924 #919)
151.1309 +#1236 := [def-axiom]: #1235
151.1310 +#1570 := [unit-resolution #1236 #1565]: #919
151.1311 +#1409 := (not #773)
151.1312 +#1489 := (not #847)
151.1313 +#1358 := (not #795)
151.1314 +#1365 := (not #821)
151.1315 +#1511 := (not #877)
151.1316 +#1510 := (not #691)
151.1317 +#1509 := (not #717)
151.1318 +#1512 := (or #515 #922 #1509 #1510 #1511 #1365 #1201 #1074 #1358 #1112 #960 #1150 #1489 #1049 #1409)
151.1319 +#1513 := [th-lemma]: #1512
151.1320 +#1571 := [unit-resolution #1513 #1570 #694 #720 #1468 #776 #1507 #798 #1488 #824 #1552 #850 #1569 #880 #1568]: #515
151.1321 +#506 := (<= #508 0::int)
151.1322 +#659 := (+ uf_3 #656)
151.1323 +#662 := (+ uf_1 #659)
151.1324 +#665 := (<= #662 0::int)
151.1325 +#107 := (ite #100 uf_2 #82)
151.1326 +#118 := (* -1::int #107)
151.1327 +#119 := (+ uf_3 #118)
151.1328 +#120 := (+ uf_1 #119)
151.1329 +#532 := (<= #120 0::int)
151.1330 +#666 := (= #532 #665)
151.1331 +#663 := (~ #120 #662)
151.1332 +#660 := (~ #119 #659)
151.1333 +#657 := (~ #118 #656)
151.1334 +#654 := (~ #107 z3name!0)
151.1335 +#655 := [apply-def #653]: #654
151.1336 +#658 := [monotonicity #655]: #657
151.1337 +#661 := [monotonicity #658]: #660
151.1338 +#664 := [monotonicity #661]: #663
151.1339 +#667 := [monotonicity #664]: #666
151.1340 +#533 := (>= #120 0::int)
151.1341 +#535 := (not #533)
151.1342 +#534 := (not #532)
151.1343 +#536 := (or #534 #535)
151.1344 +#537 := (not #536)
151.1345 +#121 := (= #120 0::int)
151.1346 +#538 := (iff #121 #537)
151.1347 +#539 := [rewrite]: #538
151.1348 +#8 := (- uf_2)
151.1349 +#7 := (< uf_2 0::int)
151.1350 +#9 := (ite #7 #8 uf_2)
151.1351 +#11 := (- #9 uf_3)
151.1352 +#12 := (= uf_1 #11)
151.1353 +#126 := (iff #12 #121)
151.1354 +#85 := (ite #7 #82 uf_2)
151.1355 +#91 := (* -1::int uf_3)
151.1356 +#92 := (+ #91 #85)
151.1357 +#97 := (= uf_1 #92)
151.1358 +#124 := (iff #97 #121)
151.1359 +#112 := (+ #91 #107)
151.1360 +#115 := (= uf_1 #112)
151.1361 +#122 := (iff #115 #121)
151.1362 +#123 := [rewrite]: #122
151.1363 +#116 := (iff #97 #115)
151.1364 +#113 := (= #92 #112)
151.1365 +#110 := (= #85 #107)
151.1366 +#104 := (ite #101 #82 uf_2)
151.1367 +#108 := (= #104 #107)
151.1368 +#109 := [rewrite]: #108
151.1369 +#105 := (= #85 #104)
151.1370 +#102 := (iff #7 #101)
151.1371 +#103 := [rewrite]: #102
151.1372 +#106 := [monotonicity #103]: #105
151.1373 +#111 := [trans #106 #109]: #110
151.1374 +#114 := [monotonicity #111]: #113
151.1375 +#117 := [monotonicity #114]: #116
151.1376 +#125 := [trans #117 #123]: #124
151.1377 +#98 := (iff #12 #97)
151.1378 +#95 := (= #11 #92)
151.1379 +#88 := (- #85 uf_3)
151.1380 +#93 := (= #88 #92)
151.1381 +#94 := [rewrite]: #93
151.1382 +#89 := (= #11 #88)
151.1383 +#86 := (= #9 #85)
151.1384 +#83 := (= #8 #82)
151.1385 +#84 := [rewrite]: #83
151.1386 +#87 := [monotonicity #84]: #86
151.1387 +#90 := [monotonicity #87]: #89
151.1388 +#96 := [trans #90 #94]: #95
151.1389 +#99 := [monotonicity #96]: #98
151.1390 +#127 := [trans #99 #125]: #126
151.1391 +#80 := [asserted]: #12
151.1392 +#128 := [mp #80 #127]: #121
151.1393 +#540 := [mp #128 #539]: #537
151.1394 +#541 := [not-or-elim #540]: #532
151.1395 +#668 := [mp~ #541 #667]: #665
151.1396 +#1515 := (or #100 #241 #923 #1373 #1371 #961)
151.1397 +#1516 := [th-lemma]: #1515
151.1398 +#1572 := [unit-resolution #1516 #1566 #698 #1559 #724 #1406]: #100
151.1399 +#1573 := [unit-resolution #917 #1572]: #887
151.1400 +#1223 := (or #886 #881)
151.1401 +#1224 := [def-axiom]: #1223
151.1402 +#1574 := [unit-resolution #1224 #1573]: #881
151.1403 +#1528 := (not #665)
151.1404 +#1529 := (or #506 #884 #1528 #1364 #1011 #1343 #1113 #1151 #1337 #1048 #1357 #922 #1510)
151.1405 +#1530 := [th-lemma]: #1529
151.1406 +#1575 := [unit-resolution #1530 #1574 #668 #694 #1404 #750 #1545 #772 #1496 #828 #1554 #854 #1570]: #506
151.1407 +#743 := (<= #740 0::int)
151.1408 +#744 := (= #565 #743)
151.1409 +#745 := [monotonicity #742]: #744
151.1410 +#574 := [not-or-elim #573]: #565
151.1411 +#746 := [mp~ #574 #745]: #743
151.1412 +#1520 := [unit-resolution #1032 #1406]: #1013
151.1413 +#1265 := (or #1012 #1008)
151.1414 +#1266 := [def-axiom]: #1265
151.1415 +#1521 := [unit-resolution #1266 #1520]: #1008
151.1416 +#669 := (>= #662 0::int)
151.1417 +#670 := (= #533 #669)
151.1418 +#671 := [monotonicity #664]: #670
151.1419 +#542 := [not-or-elim #540]: #533
151.1420 +#672 := [mp~ #542 #671]: #669
151.1421 +#1576 := [unit-resolution #1226 #1573]: #883
151.1422 +#1523 := (not #743)
151.1423 +#1522 := (not #669)
151.1424 +#1524 := (or #509 #885 #1522 #1523 #1010 #1365 #1112 #1150 #1489 #1049 #1409 #923 #1371)
151.1425 +#1525 := [th-lemma]: #1524
151.1426 +#1577 := [unit-resolution #1525 #1576 #672 #698 #1521 #746 #1468 #776 #1488 #824 #1552 #850 #1566]: #509
151.1427 +#634 := (not #516)
151.1428 +#633 := (not #515)
151.1429 +#632 := (not #509)
151.1430 +#631 := (not #506)
151.1431 +#635 := (or #631 #632 #633 #634)
151.1432 +#523 := (and #506 #509 #515 #516)
151.1433 +#528 := (not #523)
151.1434 +#644 := (iff #528 #635)
151.1435 +#636 := (not #635)
151.1436 +#639 := (not #636)
151.1437 +#642 := (iff #639 #635)
151.1438 +#643 := [rewrite]: #642
151.1439 +#640 := (iff #528 #639)
151.1440 +#637 := (iff #523 #636)
151.1441 +#638 := [rewrite]: #637
151.1442 +#641 := [monotonicity #638]: #640
151.1443 +#645 := [trans #641 #643]: #644
151.1444 +#62 := (= uf_2 uf_11)
151.1445 +#61 := (= uf_3 uf_10)
151.1446 +#63 := (and #61 #62)
151.1447 +#64 := (not #63)
151.1448 +#529 := (iff #64 #528)
151.1449 +#526 := (iff #63 #523)
151.1450 +#517 := (and #515 #516)
151.1451 +#510 := (and #506 #509)
151.1452 +#520 := (and #510 #517)
151.1453 +#524 := (iff #520 #523)
151.1454 +#525 := [rewrite]: #524
151.1455 +#521 := (iff #63 #520)
151.1456 +#518 := (iff #62 #517)
151.1457 +#519 := [rewrite]: #518
151.1458 +#511 := (iff #61 #510)
151.1459 +#512 := [rewrite]: #511
151.1460 +#522 := [monotonicity #512 #519]: #521
151.1461 +#527 := [trans #522 #525]: #526
151.1462 +#530 := [monotonicity #527]: #529
151.1463 +#505 := [asserted]: #64
151.1464 +#531 := [mp #505 #530]: #528
151.1465 +#646 := [mp #531 #645]: #635
151.1466 +#1578 := [unit-resolution #646 #1577 #1575 #1571 #1567]: false
151.1467 +#1580 := [lemma #1578]: #1579
151.1468 +#1657 := [unit-resolution #1580 #1406]: #1048
151.1469 +#1625 := (or #194 #241)
151.1470 +#1535 := [hypothesis]: #195
151.1471 +#1538 := (or #194 #960)
151.1472 +#1432 := [hypothesis]: #973
151.1473 +#1255 := (or #974 #971)
151.1474 +#1256 := [def-axiom]: #1255
151.1475 +#1433 := [unit-resolution #1256 #1432]: #974
151.1476 +#994 := [not-or-elim #992]: #978
151.1477 +#1434 := [unit-resolution #994 #1433]: #194
151.1478 +#1435 := [unit-resolution #993 #1434]: #963
151.1479 +#1436 := (or #971 #195 #961)
151.1480 +#1437 := [th-lemma]: #1436
151.1481 +#1438 := [unit-resolution #1437 #1434 #1432]: #961
151.1482 +#1439 := [unit-resolution #1250 #1438 #1435]: false
151.1483 +#1440 := [lemma #1439]: #971
151.1484 +#1536 := [hypothesis]: #957
151.1485 +#1537 := [th-lemma #1536 #1535 #1440]: false
151.1486 +#1539 := [lemma #1537]: #1538
151.1487 +#1581 := [unit-resolution #1539 #1535]: #960
151.1488 +#1582 := (or #959 #957)
151.1489 +#1583 := [th-lemma]: #1582
151.1490 +#1584 := [unit-resolution #1583 #1581]: #959
151.1491 +#1585 := (or #147 #1373 #241 #194 #973)
151.1492 +#1586 := [th-lemma]: #1585
151.1493 +#1587 := [unit-resolution #1586 #1535 #1440 #724 #1406]: #147
151.1494 +#1588 := [unit-resolution #955 #1587]: #925
151.1495 +#1589 := [unit-resolution #1238 #1588]: #921
151.1496 +#1590 := [unit-resolution #1516 #1589 #698 #1584 #724 #1406]: #100
151.1497 +#1591 := [unit-resolution #917 #1590]: #887
151.1498 +#1592 := [unit-resolution #1224 #1591]: #881
151.1499 +#1593 := (or #430 #1365 #1074 #1358 #1112 #194 #1364 #1011 #241)
151.1500 +#1594 := [th-lemma]: #1593
151.1501 +#1595 := [unit-resolution #1594 #1535 #1404 #750 #1507 #798 #1488 #824 #1406]: #430
151.1502 +#1184 := [not-or-elim #1182]: #1168
151.1503 +#1596 := [unit-resolution #1184 #1595]: #1165
151.1504 +#1315 := (or #1164 #1161)
151.1505 +#1316 := [def-axiom]: #1315
151.1506 +#1597 := [unit-resolution #1316 #1596]: #1161
151.1507 +#1533 := (or #288 #241)
151.1508 +#1471 := (or #194 #288 #241)
151.1509 +#1469 := (or #194 #288 #241 #1364 #1011)
151.1510 +#1470 := [th-lemma]: #1469
151.1511 +#1472 := [unit-resolution #1470 #1404 #750]: #1471
151.1512 +#1473 := [unit-resolution #1472 #1405 #1406]: #194
151.1513 +#1474 := [unit-resolution #993 #1473]: #963
151.1514 +#1475 := [unit-resolution #1250 #1474]: #959
151.1515 +#1476 := (or #147 #1373 #1364 #1011 #961 #241 #288)
151.1516 +#1477 := [th-lemma]: #1476
151.1517 +#1478 := [unit-resolution #1477 #1475 #724 #1406 #1404 #750 #1405]: #147
151.1518 +#1479 := [unit-resolution #955 #1478]: #925
151.1519 +#1480 := [unit-resolution #1238 #1479]: #921
151.1520 +#1419 := (or #288 #241 #429)
151.1521 +#1333 := [hypothesis]: #430
151.1522 +#1408 := [unit-resolution #1280 #1407]: #1047
151.1523 +#1410 := (or #335 #1049 #1409 #288 #241)
151.1524 +#1411 := [th-lemma]: #1410
151.1525 +#1412 := [unit-resolution #1411 #1405 #1408 #776 #1406]: #335
151.1526 +#1413 := [unit-resolution #1107 #1412]: #1077
151.1527 +#1414 := [unit-resolution #1286 #1413]: #1073
151.1528 +#1415 := [unit-resolution #1352 #1414 #802 #1405 #828 #1333]: #1113
151.1529 +#1416 := [unit-resolution #1298 #1415]: #1114
151.1530 +#1417 := [unit-resolution #1145 #1416]: #383
151.1531 +#1418 := [th-lemma #1414 #802 #1405 #1408 #776 #1406 #1417]: false
151.1532 +#1420 := [lemma #1418]: #1419
151.1533 +#1481 := [unit-resolution #1420 #1405 #1406]: #429
151.1534 +#1482 := [unit-resolution #1183 #1481]: #1153
151.1535 +#1483 := [unit-resolution #1308 #1482]: #1147
151.1536 +#1490 := (or #477 #1150 #1489 #1365 #1112 #1049 #241 #1409 #288)
151.1537 +#1491 := [th-lemma]: #1490
151.1538 +#1492 := [unit-resolution #1491 #1405 #1468 #776 #1488 #824 #1483 #850 #1406]: #477
151.1539 +#1493 := [unit-resolution #1222 #1492]: #1203
151.1540 +#1494 := [unit-resolution #1326 #1493]: #1198
151.1541 +#1495 := [unit-resolution #1310 #1482]: #1149
151.1542 +#1500 := [unit-resolution #1499 #1475 #698 #724 #1497 #772 #1447 #802 #1496 #828 #1495 #854 #1494 #876 #1480]: #516
151.1543 +#1501 := [unit-resolution #1236 #1479]: #919
151.1544 +#1502 := [unit-resolution #1328 #1493]: #1199
151.1545 +#1508 := [unit-resolution #1248 #1474]: #957
151.1546 +#1514 := [unit-resolution #1513 #1508 #694 #720 #1468 #776 #1507 #798 #1488 #824 #1483 #850 #1502 #880 #1501]: #515
151.1547 +#1517 := [unit-resolution #1516 #1480 #698 #1475 #724 #1406]: #100
151.1548 +#1518 := [unit-resolution #917 #1517]: #887
151.1549 +#1519 := [unit-resolution #1226 #1518]: #883
151.1550 +#1526 := [unit-resolution #1525 #1480 #672 #698 #1521 #746 #1468 #776 #1488 #824 #1483 #850 #1519]: #509
151.1551 +#1527 := [unit-resolution #1224 #1518]: #881
151.1552 +#1531 := [unit-resolution #1530 #1501 #668 #694 #1404 #750 #1497 #772 #1496 #828 #1495 #854 #1527]: #506
151.1553 +#1532 := [unit-resolution #646 #1531 #1526 #1514 #1500]: false
151.1554 +#1534 := [lemma #1532]: #1533
151.1555 +#1598 := [unit-resolution #1534 #1406]: #288
151.1556 +#1599 := [unit-resolution #1069 #1598]: #1039
151.1557 +#1271 := (or #1038 #1033)
151.1558 +#1272 := [def-axiom]: #1271
151.1559 +#1600 := [unit-resolution #1272 #1599]: #1033
151.1560 +#1601 := [unit-resolution #1236 #1588]: #919
151.1561 +#1602 := (or #506 #884 #1528 #1364 #1011 #1365 #1112 #1337 #1357 #922 #1510 #1036 #1163 #1074 #1358)
151.1562 +#1603 := [th-lemma]: #1602
151.1563 +#1604 := [unit-resolution #1603 #1601 #668 #694 #1404 #750 #1600 #772 #1507 #798 #1488 #824 #1597 #854 #1592]: #506
151.1564 +#1605 := [unit-resolution #1226 #1591]: #883
151.1565 +#1313 := (or #1164 #1160)
151.1566 +#1314 := [def-axiom]: #1313
151.1567 +#1606 := [unit-resolution #1314 #1596]: #1160
151.1568 +#1607 := (or #509 #885 #1522 #1523 #1010 #1343 #1113 #1489 #1409 #923 #1371 #1037 #1162 #1075 #1350)
151.1569 +#1608 := [th-lemma]: #1607
151.1570 +#1609 := [unit-resolution #1608 #1589 #672 #698 #1521 #746 #1459 #776 #1447 #802 #1496 #828 #1606 #850 #1605]: #509
151.1571 +#1610 := (or #476 #1036 #1337 #1365 #1112 #1357 #194 #1364 #1011 #1163 #1074 #1358)
151.1572 +#1611 := [th-lemma]: #1610
151.1573 +#1612 := [unit-resolution #1611 #1597 #750 #1600 #772 #1507 #798 #1488 #824 #1404 #854 #1535]: #476
151.1574 +#1221 := [not-or-elim #1220]: #1194
151.1575 +#1613 := [unit-resolution #1221 #1612]: #1191
151.1576 +#1319 := (or #1190 #1185)
151.1577 +#1320 := [def-axiom]: #1319
151.1578 +#1614 := [unit-resolution #1320 #1613]: #1185
151.1579 +#1615 := (or #516 #923 #1373 #1371 #1372 #1075 #1350 #1489 #1409 #1037 #973 #1162 #1188 #1343 #1113 #1523 #1010)
151.1580 +#1616 := [th-lemma]: #1615
151.1581 +#1617 := [unit-resolution #1616 #1606 #1440 #724 #1521 #746 #1459 #776 #1447 #802 #1496 #828 #698 #850 #1614 #876 #1589]: #516
151.1582 +#1321 := (or #1190 #1187)
151.1583 +#1322 := [def-axiom]: #1321
151.1584 +#1618 := [unit-resolution #1322 #1613]: #1187
151.1585 +#1619 := [unit-resolution #994 #1535]: #975
151.1586 +#1253 := (or #974 #970)
151.1587 +#1254 := [def-axiom]: #1253
151.1588 +#1620 := [unit-resolution #1254 #1619]: #970
151.1589 +#1621 := (or #515 #922 #1509 #1510 #1511 #1074 #1358 #1337 #1357 #1036 #972 #1163 #1189 #1365 #1112 #1364 #1011)
151.1590 +#1622 := [th-lemma]: #1621
151.1591 +#1623 := [unit-resolution #1622 #1620 #694 #720 #1404 #750 #1600 #772 #1507 #798 #1488 #824 #1597 #854 #1618 #880 #1601]: #515
151.1592 +#1624 := [unit-resolution #646 #1623 #1617 #1609 #1604]: false
151.1593 +#1626 := [lemma #1624]: #1625
151.1594 +#1658 := [unit-resolution #1626 #1406]: #194
151.1595 +#1659 := [unit-resolution #993 #1658]: #963
151.1596 +#1660 := [unit-resolution #1250 #1659]: #959
151.1597 +#1661 := [unit-resolution #1563 #1660 #1658 #724 #1406]: #147
151.1598 +#1662 := [unit-resolution #955 #1661]: #925
151.1599 +#1663 := [unit-resolution #1238 #1662]: #921
151.1600 +#1664 := [unit-resolution #1516 #1663 #698 #1660 #724 #1406]: #100
151.1601 +#1665 := [unit-resolution #917 #1664]: #887
151.1602 +#1666 := [unit-resolution #1226 #1665]: #883
151.1603 +#1667 := [unit-resolution #1224 #1665]: #881
151.1604 +#1668 := [unit-resolution #1236 #1662]: #919
151.1605 +#1669 := [unit-resolution #1248 #1659]: #957
151.1606 +#1655 := (or #429 #1113 #1010 #960 #1036 #1074 #1112 #922 #923 #884 #885)
151.1607 +#1632 := [hypothesis]: #919
151.1608 +#1636 := [hypothesis]: #881
151.1609 +#1638 := [hypothesis]: #1071
151.1610 +#1639 := [hypothesis]: #1033
151.1611 +#1334 := [unit-resolution #1184 #1333]: #1165
151.1612 +#1335 := [unit-resolution #1316 #1334]: #1161
151.1613 +#1640 := [unit-resolution #1603 #1335 #668 #694 #1404 #750 #1639 #772 #1638 #798 #1637 #824 #1632 #854 #1636]: #506
151.1614 +#1641 := [hypothesis]: #883
151.1615 +#1642 := [hypothesis]: #921
151.1616 +#1643 := [hypothesis]: #1111
151.1617 +#1644 := [hypothesis]: #1008
151.1618 +#1631 := [unit-resolution #1314 #1334]: #1160
151.1619 +#1645 := [unit-resolution #1608 #1631 #672 #698 #1644 #746 #1459 #776 #1447 #802 #1643 #828 #1642 #850 #1641]: #509
151.1620 +#1634 := (or #1202 #922 #960 #632 #631 #429)
151.1621 +#1627 := [hypothesis]: #506
151.1622 +#1628 := [hypothesis]: #509
151.1623 +#1384 := [hypothesis]: #1203
151.1624 +#1396 := (or #1202 #516 #429)
151.1625 +#1331 := [hypothesis]: #634
151.1626 +#1385 := [unit-resolution #1326 #1384]: #1198
151.1627 +#1382 := (or #1189 #1200 #516 #429)
151.1628 +#1332 := [hypothesis]: #1198
151.1629 +#1336 := [hypothesis]: #1187
151.1630 +#1338 := (or #382 #1189 #1337 #429 #1163 #1200)
151.1631 +#1339 := [th-lemma]: #1338
151.1632 +#1340 := [unit-resolution #1339 #1336 #1335 #854 #1333 #1332]: #382
151.1633 +#1341 := [unit-resolution #1145 #1340]: #1115
151.1634 +#1342 := [unit-resolution #1298 #1341]: #1111
151.1635 +#1344 := (or #335 #1113 #429 #1343 #1189 #1337 #1163 #1200)
151.1636 +#1345 := [th-lemma]: #1344
151.1637 +#1346 := [unit-resolution #1345 #1342 #828 #1333 #1335 #854 #1336 #1332]: #335
151.1638 +#1347 := [unit-resolution #1107 #1346]: #1077
151.1639 +#1348 := [unit-resolution #1284 #1347]: #1071
151.1640 +#1349 := [unit-resolution #1286 #1347]: #1073
151.1641 +#1353 := [unit-resolution #1352 #1349 #802 #1342 #828 #1333]: #288
151.1642 +#1354 := [unit-resolution #1069 #1353]: #1039
151.1643 +#1355 := [unit-resolution #1272 #1354]: #1033
151.1644 +#1356 := [unit-resolution #1296 #1341]: #1109
151.1645 +#1359 := (or #242 #1036 #1357 #429 #1189 #1337 #1163 #1200 #1074 #1358)
151.1646 +#1360 := [th-lemma]: #1359
151.1647 +#1361 := [unit-resolution #1360 #1355 #772 #1348 #798 #1333 #1335 #854 #1336 #1332]: #242
151.1648 +#1362 := [unit-resolution #1032 #1361]: #1013
151.1649 +#1363 := [unit-resolution #1268 #1362]: #1009
151.1650 +#1366 := (or #194 #1011 #1364 #1074 #1358 #1112 #1365 #1036 #1357 #1189 #1337 #1163 #1200)
151.1651 +#1367 := [th-lemma]: #1366
151.1652 +#1368 := [unit-resolution #1367 #1363 #750 #1355 #772 #1348 #798 #1356 #824 #1335 #854 #1336 #1332]: #194
151.1653 +#1369 := [unit-resolution #993 #1368]: #963
151.1654 +#1370 := [unit-resolution #1250 #1369]: #959
151.1655 +#1374 := (or #923 #1371 #516 #1372 #1200 #961 #1373 #1036 #1357 #1337 #1163 #1074 #1358)
151.1656 +#1375 := [th-lemma]: #1374
151.1657 +#1376 := [unit-resolution #1375 #1370 #698 #724 #1355 #772 #1348 #798 #1335 #854 #1332 #876 #1331]: #923
151.1658 +#1377 := (or #147 #195 #961 #1373 #1036 #1357 #429 #1189 #1337 #1163 #1200 #1074 #1358)
151.1659 +#1378 := [th-lemma]: #1377
151.1660 +#1379 := [unit-resolution #1378 #1368 #1370 #724 #1355 #772 #1348 #798 #1333 #1335 #854 #1336 #1332]: #147
151.1661 +#1380 := [unit-resolution #955 #1379]: #925
151.1662 +#1381 := [unit-resolution #1238 #1380 #1376]: false
151.1663 +#1383 := [lemma #1381]: #1382
151.1664 +#1386 := [unit-resolution #1383 #1385 #1331 #1333]: #1189
151.1665 +#1387 := [unit-resolution #1322 #1386]: #1190
151.1666 +#1388 := [unit-resolution #1328 #1384]: #1199
151.1667 +#1389 := (or #1187 #1185)
151.1668 +#1390 := [th-lemma]: #1389
151.1669 +#1391 := [unit-resolution #1390 #1386]: #1185
151.1670 +#1392 := (or #476 #1188 #1201)
151.1671 +#1393 := [th-lemma]: #1392
151.1672 +#1394 := [unit-resolution #1393 #1391 #1388]: #476
151.1673 +#1395 := [unit-resolution #1221 #1394 #1387]: false
151.1674 +#1397 := [lemma #1395]: #1396
151.1675 +#1629 := [unit-resolution #1397 #1384 #1333]: #516
151.1676 +#1630 := [unit-resolution #646 #1629 #1628 #1627]: #633
151.1677 +#1633 := [th-lemma #1632 #720 #694 #880 #1447 #802 #850 #776 #1459 #1631 #1536 #1388 #1630]: false
151.1678 +#1635 := [lemma #1633]: #1634
151.1679 +#1646 := [unit-resolution #1635 #1645 #1536 #1632 #1640 #1333]: #1202
151.1680 +#1647 := [unit-resolution #1222 #1646]: #476
151.1681 +#1648 := [unit-resolution #1221 #1647]: #1191
151.1682 +#1649 := [unit-resolution #1322 #1648]: #1187
151.1683 +#1650 := [unit-resolution #1320 #1648]: #1185
151.1684 +#1651 := [unit-resolution #1616 #1650 #1440 #724 #1644 #746 #1459 #776 #1447 #802 #1643 #828 #698 #850 #1631 #876 #1642]: #516
151.1685 +#1652 := [unit-resolution #646 #1651 #1645 #1640]: #633
151.1686 +#1653 := [unit-resolution #1622 #1652 #694 #720 #1404 #750 #1639 #772 #1638 #798 #1637 #824 #1335 #854 #1649 #880 #1632]: #972
151.1687 +#1654 := [th-lemma #1459 #1647 #850 #828 #1643 #776 #746 #1644 #1631 #1447 #802 #1536 #1653]: false
151.1688 +#1656 := [lemma #1654]: #1655
151.1689 +#1670 := [unit-resolution #1656 #1496 #1521 #1669 #1600 #1507 #1488 #1668 #1663 #1667 #1666]: #429
151.1690 +#1671 := [th-lemma #1600 #1670 #824 #1507 #798 #1488 #1657]: false
151.1691 +#1672 := [lemma #1671]: #241
151.1692 +#1683 := [unit-resolution #1031 #1672]: #1001
151.1693 +#1703 := [unit-resolution #1262 #1683]: #997
151.1694 +#1920 := (or #194 #242 #1364 #999 #288)
151.1695 +#1921 := [th-lemma]: #1920
151.1696 +#1922 := [unit-resolution #1921 #1405 #1703 #750 #1672]: #194
151.1697 +#1923 := [unit-resolution #993 #1922]: #963
151.1698 +#1924 := [unit-resolution #1248 #1923]: #957
151.1699 +#1925 := [unit-resolution #1250 #1923]: #959
151.1700 +#1843 := (or #288 #961 #147)
151.1701 +#1763 := [hypothesis]: #148
151.1702 +#1828 := [hypothesis]: #959
151.1703 +#1842 := [th-lemma #724 #750 #1703 #1828 #1405 #1763]: false
151.1704 +#1844 := [lemma #1842]: #1843
151.1705 +#1926 := [unit-resolution #1844 #1925 #1405]: #147
151.1706 +#1927 := [unit-resolution #955 #1926]: #925
151.1707 +#1928 := [unit-resolution #1236 #1927]: #919
151.1708 +#2116 := [unit-resolution #1310 #2047]: #1149
151.1709 +#2084 := (or #288 #516)
151.1710 +#2050 := (or #288 #961 #516)
151.1711 +#2037 := [hypothesis]: #1087
151.1712 +#2038 := [unit-resolution #1292 #2037]: #1088
151.1713 +#2041 := (or #1085 #336)
151.1714 +#2039 := (or #1085 #1075 #336)
151.1715 +#2040 := [th-lemma]: #2039
151.1716 +#2042 := [unit-resolution #2040 #1447]: #2041
151.1717 +#2043 := [unit-resolution #2042 #2037]: #336
151.1718 +#2044 := [unit-resolution #1108 #2043 #2038]: false
151.1719 +#2045 := [lemma #2044]: #1085
151.1720 +#2035 := (or #1087 #1150 #961 #1048 #516)
151.1721 +#1845 := [hypothesis]: #1085
151.1722 +#1874 := [hypothesis]: #477
151.1723 +#1901 := (or #335 #476)
151.1724 +#1895 := [unit-resolution #1222 #1874]: #1203
151.1725 +#1896 := [unit-resolution #1326 #1895]: #1198
151.1726 +#1893 := (or #429 #1200)
151.1727 +#1880 := (or #335 #1113 #429 #1163 #1200)
151.1728 +#1857 := [hypothesis]: #1189
151.1729 +#1858 := [unit-resolution #1322 #1857]: #1190
151.1730 +#1859 := [unit-resolution #1221 #1858]: #477
151.1731 +#1860 := [unit-resolution #1222 #1859]: #1203
151.1732 +#1861 := [unit-resolution #1390 #1857]: #1185
151.1733 +#1862 := [unit-resolution #1393 #1859 #1861]: #1201
151.1734 +#1863 := [unit-resolution #1328 #1862 #1860]: false
151.1735 +#1864 := [lemma #1863]: #1187
151.1736 +#1878 := (or #335 #1113 #429 #1189 #1163 #1200)
151.1737 +#1879 := [unit-resolution #1345 #828 #854]: #1878
151.1738 +#1881 := [unit-resolution #1879 #1864]: #1880
151.1739 +#1882 := [unit-resolution #1881 #1335 #1870 #1333 #1332]: #335
151.1740 +#1883 := [unit-resolution #1107 #1882]: #1077
151.1741 +#1884 := [unit-resolution #1689 #1333 #1870]: #288
151.1742 +#1885 := [unit-resolution #1069 #1884]: #1039
151.1743 +#1886 := [unit-resolution #1272 #1885]: #1033
151.1744 +#1889 := (or #1036 #429 #1163 #1200 #1074)
151.1745 +#1887 := (or #242 #1036 #429 #1189 #1163 #1200 #1074)
151.1746 +#1888 := [unit-resolution #1360 #772 #798 #854]: #1887
151.1747 +#1890 := [unit-resolution #1888 #1672 #1864]: #1889
151.1748 +#1891 := [unit-resolution #1890 #1886 #1332 #1333 #1335]: #1074
151.1749 +#1892 := [unit-resolution #1284 #1891 #1883]: false
151.1750 +#1894 := [lemma #1892]: #1893
151.1751 +#1897 := [unit-resolution #1894 #1896]: #429
151.1752 +#1898 := [unit-resolution #1183 #1897]: #1153
151.1753 +#1899 := [unit-resolution #1310 #1898]: #1149
151.1754 +#1900 := [th-lemma #854 #1899 #1870 #828 #1422 #1874]: false
151.1755 +#1902 := [lemma #1900]: #1901
151.1756 +#1950 := [unit-resolution #1902 #1874]: #335
151.1757 +#1951 := [unit-resolution #1107 #1950]: #1077
151.1758 +#1952 := [unit-resolution #1284 #1951]: #1071
151.1759 +#1953 := [unit-resolution #1328 #1895]: #1199
151.1760 +#1876 := (or #1109 #476)
151.1761 +#1673 := [hypothesis]: #1112
151.1762 +#1760 := (or #429 #1109)
151.1763 +#1674 := [unit-resolution #1296 #1673]: #1114
151.1764 +#1675 := [unit-resolution #1145 #1674]: #383
151.1765 +#1676 := [unit-resolution #1146 #1675]: #1127
151.1766 +#1677 := [unit-resolution #1304 #1676]: #1123
151.1767 +#1687 := [unit-resolution #1686 #1673]: #1111
151.1768 +#1743 := [unit-resolution #1689 #1333 #1687]: #288
151.1769 +#1744 := [unit-resolution #1069 #1743]: #1039
151.1770 +#1745 := [unit-resolution #1272 #1744]: #1033
151.1771 +#1678 := (or #335 #1343 #429 #382 #1125)
151.1772 +#1679 := [th-lemma]: #1678
151.1773 +#1746 := [unit-resolution #1679 #1333 #1675 #828 #1677]: #335
151.1774 +#1747 := [unit-resolution #1107 #1746]: #1077
151.1775 +#1748 := [unit-resolution #1284 #1747]: #1071
151.1776 +#1259 := (or #1000 #995)
151.1777 +#1260 := [def-axiom]: #1259
151.1778 +#1684 := [unit-resolution #1260 #1683]: #995
151.1779 +#1693 := (or #147 #1373 #1343 #1074 #1358 #1523 #429 #973 #998 #1036 #1357 #1125)
151.1780 +#1694 := [th-lemma]: #1693
151.1781 +#1749 := [unit-resolution #1694 #1745 #724 #1684 #746 #1440 #772 #1748 #798 #1677 #828 #1333]: #147
151.1782 +#1750 := [unit-resolution #955 #1749]: #925
151.1783 +#1751 := [unit-resolution #1238 #1750]: #921
151.1784 +#1714 := (or #100 #923 #1373 #1371 #1343 #1523 #1074 #1358 #973 #429 #382 #1036 #1357 #998 #1125)
151.1785 +#1715 := [th-lemma]: #1714
151.1786 +#1752 := [unit-resolution #1715 #1751 #698 #1440 #724 #1684 #746 #1675 #772 #1748 #798 #1745 #1677 #828 #1333]: #100
151.1787 +#1753 := [unit-resolution #1236 #1750]: #919
151.1788 +#1727 := (or #1109 #429 #972)
151.1789 +#1680 := [unit-resolution #1679 #1675 #1677 #828 #1333]: #335
151.1790 +#1681 := [unit-resolution #1107 #1680]: #1077
151.1791 +#1682 := [unit-resolution #1284 #1681]: #1071
151.1792 +#1690 := [unit-resolution #1689 #1687 #1333]: #288
151.1793 +#1691 := [unit-resolution #1069 #1690]: #1039
151.1794 +#1692 := [unit-resolution #1272 #1691]: #1033
151.1795 +#1695 := [unit-resolution #1694 #1692 #724 #1684 #746 #1440 #772 #1682 #798 #1677 #828 #1333]: #147
151.1796 +#1696 := [unit-resolution #955 #1695]: #925
151.1797 +#1697 := [unit-resolution #1236 #1696]: #919
151.1798 +#1698 := (or #476 #429 #1337 #1163 #382)
151.1799 +#1699 := [th-lemma]: #1698
151.1800 +#1700 := [unit-resolution #1699 #1675 #1335 #854 #1333]: #476
151.1801 +#1701 := [unit-resolution #1221 #1700]: #1191
151.1802 +#1702 := [unit-resolution #1322 #1701]: #1187
151.1803 +#1704 := [hypothesis]: #970
151.1804 +#1301 := (or #1126 #1122)
151.1805 +#1302 := [def-axiom]: #1301
151.1806 +#1705 := [unit-resolution #1302 #1676]: #1122
151.1807 +#1706 := (or #515 #922 #1509 #1510 #1511 #1075 #1350 #1337 #1409 #1037 #1163 #1365 #1364 #972 #999 #1124 #1189)
151.1808 +#1707 := [th-lemma]: #1706
151.1809 +#1708 := [unit-resolution #1707 #1705 #1704 #720 #1703 #750 #1459 #776 #1447 #802 #694 #824 #1335 #854 #1702 #880 #1697]: #515
151.1810 +#1709 := [unit-resolution #1238 #1696]: #921
151.1811 +#1710 := [unit-resolution #1320 #1701]: #1185
151.1812 +#1711 := (or #516 #923 #1373 #1371 #1372 #1074 #1358 #1489 #1357 #1036 #1162 #1343 #1523 #973 #998 #1125 #1188)
151.1813 +#1712 := [th-lemma]: #1711
151.1814 +#1713 := [unit-resolution #1712 #1692 #1440 #724 #1684 #746 #698 #772 #1682 #798 #1677 #828 #1631 #850 #1710 #876 #1709]: #516
151.1815 +#1716 := [unit-resolution #1715 #1709 #698 #1440 #724 #1684 #746 #1692 #772 #1682 #798 #1675 #1677 #828 #1333]: #100
151.1816 +#1717 := [unit-resolution #917 #1716]: #887
151.1817 +#1718 := [unit-resolution #1226 #1717]: #883
151.1818 +#1719 := (or #509 #885 #1522 #1523 #1343 #1489 #1357 #923 #1371 #1036 #1162 #998 #1125)
151.1819 +#1720 := [th-lemma]: #1719
151.1820 +#1721 := [unit-resolution #1720 #1709 #672 #698 #1684 #746 #1692 #772 #1677 #828 #1631 #850 #1718]: #509
151.1821 +#1722 := [unit-resolution #1224 #1717]: #881
151.1822 +#1723 := (or #506 #884 #1528 #1364 #1365 #1337 #1409 #922 #1510 #1037 #1163 #999 #1124)
151.1823 +#1724 := [th-lemma]: #1723
151.1824 +#1725 := [unit-resolution #1724 #1697 #668 #694 #1703 #750 #1459 #776 #1705 #824 #1335 #854 #1722]: #506
151.1825 +#1726 := [unit-resolution #646 #1725 #1721 #1713 #1708]: false
151.1826 +#1728 := [lemma #1726]: #1727
151.1827 +#1754 := [unit-resolution #1728 #1333 #1673]: #972
151.1828 +#1755 := [unit-resolution #1254 #1754]: #974
151.1829 +#1756 := [unit-resolution #994 #1755]: #194
151.1830 +#1757 := [unit-resolution #993 #1756]: #963
151.1831 +#1758 := [unit-resolution #1248 #1757]: #957
151.1832 +#1759 := [th-lemma #1758 #1753 #720 #694 #1675 #1459 #776 #1447 #802 #1752]: false
151.1833 +#1761 := [lemma #1759]: #1760
151.1834 +#1871 := [unit-resolution #1761 #1673]: #429
151.1835 +#1872 := [unit-resolution #1183 #1871]: #1153
151.1836 +#1873 := [unit-resolution #1310 #1872]: #1149
151.1837 +#1875 := [th-lemma #1675 #1874 #854 #1873 #1871]: false
151.1838 +#1877 := [lemma #1875]: #1876
151.1839 +#1954 := [unit-resolution #1877 #1874]: #1109
151.1840 +#1948 := (or #288 #1112 #1200 #1201 #1074)
151.1841 +#1917 := [unit-resolution #1894 #1332]: #429
151.1842 +#1918 := [unit-resolution #1183 #1917]: #1153
151.1843 +#1919 := [unit-resolution #1308 #1918]: #1147
151.1844 +#1929 := [unit-resolution #1310 #1918]: #1149
151.1845 +#1930 := [unit-resolution #1238 #1927]: #921
151.1846 +#1931 := [hypothesis]: #1199
151.1847 +#1932 := (or #515 #922 #1201 #1074 #1112 #960 #1150)
151.1848 +#1933 := [unit-resolution #1513 #694 #720 #1468 #776 #798 #824 #850 #880]: #1932
151.1849 +#1934 := [unit-resolution #1933 #1928 #1931 #1637 #1638 #1919 #1924]: #515
151.1850 +#1935 := (or #516 #923 #1200 #1113 #961 #1151 #1048)
151.1851 +#1936 := [unit-resolution #1499 #698 #724 #772 #1447 #802 #828 #854 #876]: #1935
151.1852 +#1937 := [unit-resolution #1936 #1930 #1870 #1332 #1929 #1497 #1925]: #516
151.1853 +#1915 := (or #898 #634 #633 #923 #961 #1048 #1151 #922 #960 #1112 #1150)
151.1854 +#1903 := [hypothesis]: #515
151.1855 +#1904 := [hypothesis]: #516
151.1856 +#1905 := [hypothesis]: #899
151.1857 +#1906 := [unit-resolution #1232 #1905]: #895
151.1858 +#1907 := (or #509 #1522 #1523 #897 #998 #1489 #1150 #960 #1509 #1112 #1365 #1049 #922 #1510 #1409)
151.1859 +#1908 := [th-lemma]: #1907
151.1860 +#1909 := [unit-resolution #1908 #1906 #1632 #694 #1536 #720 #1684 #746 #1468 #776 #1637 #824 #1540 #850 #672]: #509
151.1861 +#1774 := [hypothesis]: #1149
151.1862 +#1229 := (or #898 #894)
151.1863 +#1230 := [def-axiom]: #1229
151.1864 +#1910 := [unit-resolution #1230 #1905]: #894
151.1865 +#1911 := (or #506 #1528 #1364 #896 #999 #1337 #1151 #961 #1373 #1113 #1343 #1048 #923 #1371 #1357)
151.1866 +#1912 := [th-lemma]: #1911
151.1867 +#1913 := [unit-resolution #1912 #1910 #1642 #698 #1828 #724 #1703 #750 #1545 #772 #1870 #828 #1774 #854 #668]: #506
151.1868 +#1914 := [unit-resolution #646 #1913 #1909 #1904 #1903]: false
151.1869 +#1916 := [lemma #1914]: #1915
151.1870 +#1938 := [unit-resolution #1916 #1937 #1934 #1930 #1925 #1497 #1929 #1928 #1924 #1637 #1919]: #898
151.1871 +#1939 := [unit-resolution #918 #1938]: #100
151.1872 +#1940 := [unit-resolution #917 #1939]: #887
151.1873 +#1941 := [unit-resolution #1224 #1940]: #881
151.1874 +#1942 := (or #506 #884 #1113 #1151 #1048 #922)
151.1875 +#1943 := [unit-resolution #1530 #668 #694 #1404 #750 #772 #828 #854]: #1942
151.1876 +#1944 := [unit-resolution #1943 #1941 #1497 #1870 #1929 #1928]: #506
151.1877 +#1945 := [unit-resolution #646 #1944 #1937 #1934]: #632
151.1878 +#1946 := [unit-resolution #1908 #1945 #1928 #694 #1924 #720 #1684 #746 #1468 #776 #1637 #824 #1919 #850 #672]: #897
151.1879 +#1947 := [th-lemma #1946 #1939 #1742]: false
151.1880 +#1949 := [lemma #1947]: #1948
151.1881 +#1955 := [unit-resolution #1949 #1954 #1896 #1953 #1952]: #288
151.1882 +#1956 := [unit-resolution #1069 #1955]: #1039
151.1883 +#1957 := [unit-resolution #1272 #1956]: #1033
151.1884 +#1958 := [unit-resolution #1735 #1954]: #382
151.1885 +#1959 := (or #1123 #383 #1113)
151.1886 +#1960 := [th-lemma]: #1959
151.1887 +#1961 := [unit-resolution #1960 #1958 #1870]: #1123
151.1888 +#1962 := [unit-resolution #1308 #1898]: #1147
151.1889 +#1965 := (or #1160 #1112 #1074 #289 #1150)
151.1890 +#1963 := (or #1160 #1365 #1112 #1074 #1358 #289 #1150)
151.1891 +#1964 := [th-lemma]: #1963
151.1892 +#1966 := [unit-resolution #1964 #798 #824]: #1965
151.1893 +#1967 := [unit-resolution #1966 #1955 #1954 #1962 #1952]: #1160
151.1894 +#1970 := (or #1162 #1151 #1036 #1125 #147 #1074)
151.1895 +#1968 := (or #1162 #1151 #1343 #1523 #998 #1036 #1357 #1125 #973 #147 #1373 #1074 #1358)
151.1896 +#1969 := [th-lemma]: #1968
151.1897 +#1971 := [unit-resolution #1969 #724 #1684 #746 #1440 #772 #798 #828]: #1970
151.1898 +#1972 := [unit-resolution #1971 #1967 #1952 #1961 #1899 #1957]: #147
151.1899 +#1973 := [unit-resolution #955 #1972]: #925
151.1900 +#1974 := [unit-resolution #1236 #1973]: #919
151.1901 +#1975 := (or #1161 #1151 #430)
151.1902 +#1976 := [th-lemma]: #1975
151.1903 +#1977 := [unit-resolution #1976 #1899 #1897]: #1161
151.1904 +#1978 := (or #476 #1036 #1112 #194 #1163 #1074)
151.1905 +#1979 := [unit-resolution #1611 #750 #772 #798 #824 #1404 #854]: #1978
151.1906 +#1980 := [unit-resolution #1979 #1957 #1874 #1954 #1952 #1977]: #194
151.1907 +#1981 := [unit-resolution #993 #1980]: #963
151.1908 +#1982 := [unit-resolution #1248 #1981]: #957
151.1909 +#1983 := [unit-resolution #1933 #1974 #1953 #1954 #1952 #1962 #1982]: #515
151.1910 +#1984 := [unit-resolution #1238 #1973]: #921
151.1911 +#1985 := [unit-resolution #1250 #1981]: #959
151.1912 +#1849 := (or #923 #516 #1200 #961 #1036 #1163 #1074)
151.1913 +#1850 := [unit-resolution #1375 #698 #724 #772 #798 #854 #876]: #1849
151.1914 +#1986 := [unit-resolution #1850 #1985 #1896 #1952 #1977 #1957 #1984]: #516
151.1915 +#1987 := (or #509 #923 #1036 #1162 #1125)
151.1916 +#1988 := [unit-resolution #1720 #672 #698 #1684 #746 #1742 #772 #828 #850]: #1987
151.1917 +#1989 := [unit-resolution #1988 #1984 #1961 #1967 #1957]: #509
151.1918 +#1990 := [unit-resolution #646 #1989 #1986 #1983]: #631
151.1919 +#1991 := (or #506 #884 #1112 #922 #1036 #1163 #1074)
151.1920 +#1992 := [unit-resolution #1603 #668 #694 #1404 #750 #772 #798 #824 #854]: #1991
151.1921 +#1993 := [unit-resolution #1992 #1990 #1977 #1954 #1952 #1957 #1974]: #884
151.1922 +#1994 := [unit-resolution #1224 #1993]: #886
151.1923 +#1995 := [unit-resolution #917 #1994]: #101
151.1924 +#1996 := [th-lemma #746 #1684 #1957 #1874 #854 #1899 #1870 #828 #1984 #1995 #698 #772 #1972]: false
151.1925 +#1997 := [lemma #1996]: #476
151.1926 +#2014 := [unit-resolution #1221 #1997]: #1191
151.1927 +#2015 := [unit-resolution #1320 #2014]: #1185
151.1928 +#2034 := [th-lemma #876 #850 #1540 #2015 #802 #2033 #698 #772 #1828 #724 #1545 #1845 #1331]: false
151.1929 +#2036 := [lemma #2034]: #2035
151.1930 +#2048 := [unit-resolution #2036 #1497 #2045 #1828 #1331]: #1150
151.1931 +#2049 := [unit-resolution #1308 #2048 #2047]: false
151.1932 +#2051 := [lemma #2049]: #2050
151.1933 +#2082 := [unit-resolution #2051 #1405 #1331]: #961
151.1934 +#2083 := [unit-resolution #1250 #1923 #2082]: false
151.1935 +#2085 := [lemma #2083]: #2084
151.1936 +#2089 := [unit-resolution #2085 #1331]: #288
151.1937 +#2090 := [unit-resolution #1069 #2089]: #1039
151.1938 +#2091 := [unit-resolution #1272 #2090]: #1033
151.1939 +#2065 := [hypothesis]: #935
151.1940 +#2066 := [unit-resolution #1244 #2065]: #936
151.1941 +#2067 := [unit-resolution #956 #2066]: #147
151.1942 +#2068 := [th-lemma #2065 #2033 #2067]: false
151.1943 +#2069 := [lemma #2068]: #933
151.1944 +#2100 := (or #429 #516)
151.1945 +#2063 := (or #429 #1086 #516)
151.1946 +#2052 := [unit-resolution #1761 #1333]: #1109
151.1947 +#2053 := [unit-resolution #1735 #2052]: #382
151.1948 +#2054 := [hypothesis]: #1084
151.1949 +#2055 := (or #1200 #516 #429)
151.1950 +#2056 := [unit-resolution #1383 #1864]: #2055
151.1951 +#2057 := [unit-resolution #2056 #1333 #1331]: #1200
151.1952 +#2060 := (or #1086 #383 #1113 #1188 #1162 #1198)
151.1953 +#2058 := (or #1086 #383 #1113 #1343 #1188 #1489 #1162 #1198 #1075)
151.1954 +#2059 := [th-lemma]: #2058
151.1955 +#2061 := [unit-resolution #2059 #1447 #828 #850]: #2060
151.1956 +#2062 := [unit-resolution #2061 #1631 #2057 #2015 #1870 #2054 #2053]: false
151.1957 +#2064 := [lemma #2062]: #2063
151.1958 +#2086 := [unit-resolution #2064 #1333 #1331]: #1086
151.1959 +#2087 := [unit-resolution #1290 #2086]: #1088
151.1960 +#2088 := [unit-resolution #1108 #2087]: #335
151.1961 +#2080 := (or #1109 #516)
151.1962 +#2070 := [unit-resolution #1308 #1872]: #1147
151.1963 +#2020 := (or #194 #1150 #516 #1125 #1151 #1124)
151.1964 +#1762 := [hypothesis]: #1122
151.1965 +#1775 := [hypothesis]: #1123
151.1966 +#1803 := (or #194 #1151 #1150 #1125 #147 #1124)
151.1967 +#1764 := [unit-resolution #956 #1763]: #937
151.1968 +#1765 := [unit-resolution #1244 #1764]: #933
151.1969 +#1766 := (or #509 #885 #1522 #1364 #1365 #1489 #999 #1124 #1371 #1037 #1409 #935 #1150 #972 #1509 #1075 #1350)
151.1970 +#1767 := [th-lemma]: #1766
151.1971 +#1768 := [unit-resolution #1767 #1620 #1765 #698 #672 #720 #1703 #750 #1459 #776 #1447 #802 #1762 #824 #1540 #850 #1742]: #509
151.1972 +#1769 := (or #100 #1371 #935 #194 #147)
151.1973 +#1770 := [th-lemma]: #1769
151.1974 +#1771 := [unit-resolution #1770 #1535 #1765 #698 #1763]: #100
151.1975 +#1772 := [unit-resolution #917 #1771]: #887
151.1976 +#1773 := [unit-resolution #1224 #1772]: #881
151.1977 +#1776 := (or #335 #194 #1364 #1037 #1409 #999)
151.1978 +#1777 := [th-lemma]: #1776
151.1979 +#1778 := [unit-resolution #1777 #1535 #750 #1459 #776 #1703]: #335
151.1980 +#1779 := [unit-resolution #1107 #1778]: #1077
151.1981 +#1780 := [unit-resolution #1284 #1779]: #1071
151.1982 +#1241 := (or #936 #932)
151.1983 +#1242 := [def-axiom]: #1241
151.1984 +#1781 := [unit-resolution #1242 #1764]: #932
151.1985 +#1782 := (or #288 #1364 #999 #973 #147 #1373 #194)
151.1986 +#1783 := [th-lemma]: #1782
151.1987 +#1784 := [unit-resolution #1783 #1535 #1440 #724 #1703 #750 #1763]: #288
151.1988 +#1785 := [unit-resolution #1069 #1784]: #1039
151.1989 +#1786 := [unit-resolution #1272 #1785]: #1033
151.1990 +#1787 := (or #506 #884 #1528 #1523 #1343 #1337 #998 #1125 #1510 #1036 #1357 #934 #1151 #973 #1373 #1074 #1358)
151.1991 +#1788 := [th-lemma]: #1787
151.1992 +#1789 := [unit-resolution #1788 #1786 #1781 #694 #1440 #724 #1684 #746 #668 #772 #1780 #798 #1775 #828 #1774 #854 #1773]: #506
151.1993 +#1790 := (or #476 #1337 #1343 #1523 #1036 #1357 #998 #1125 #973 #147 #1373 #1074 #1358 #1151 #194)
151.1994 +#1791 := [th-lemma]: #1790
151.1995 +#1792 := [unit-resolution #1791 #1535 #1440 #724 #1684 #746 #1786 #772 #1780 #798 #1775 #828 #1774 #854 #1763]: #476
151.1996 +#1793 := [unit-resolution #1221 #1792]: #1191
151.1997 +#1794 := [unit-resolution #1320 #1793]: #1185
151.1998 +#1795 := (or #516 #1372 #1489 #1409 #1037 #1188 #1371 #935 #972 #1509 #1075 #1350 #1150)
151.1999 +#1796 := [th-lemma]: #1795
151.2000 +#1797 := [unit-resolution #1796 #1620 #698 #720 #1459 #776 #1447 #802 #1540 #850 #1794 #876 #1765]: #516
151.2001 +#1798 := [unit-resolution #1322 #1793]: #1187
151.2002 +#1799 := (or #515 #1511 #1337 #1357 #1036 #1189 #1510 #934 #973 #1373 #1074 #1358 #1151)
151.2003 +#1800 := [th-lemma]: #1799
151.2004 +#1801 := [unit-resolution #1800 #1786 #1440 #724 #694 #772 #1780 #798 #1774 #854 #1798 #880 #1781]: #515
151.2005 +#1802 := [unit-resolution #646 #1801 #1797 #1789 #1768]: false
151.2006 +#1804 := [lemma #1802]: #1803
151.2007 +#2011 := [unit-resolution #1804 #1535 #1540 #1775 #1774 #1762]: #147
151.2008 +#2012 := [unit-resolution #955 #2011]: #925
151.2009 +#2013 := [unit-resolution #1238 #2012]: #921
151.2010 +#2016 := (or #516 #1188 #935 #972 #1150)
151.2011 +#2017 := [unit-resolution #1796 #698 #720 #1459 #776 #1447 #802 #850 #876]: #2016
151.2012 +#2018 := [unit-resolution #2017 #1620 #2015 #1540 #1331]: #935
151.2013 +#2019 := [th-lemma #2018 #2013 #2011]: false
151.2014 +#2021 := [lemma #2019]: #2020
151.2015 +#2071 := [unit-resolution #2021 #2070 #1331 #1677 #1873 #1705]: #194
151.2016 +#2072 := [unit-resolution #993 #2071]: #963
151.2017 +#2073 := [unit-resolution #2010 #1675]: #288
151.2018 +#2074 := [unit-resolution #1069 #2073]: #1039
151.2019 +#2075 := [unit-resolution #1272 #2074]: #1033
151.2020 +#2076 := (or #516 #1036 #1188 #935 #1150 #960 #1087)
151.2021 +#1823 := (or #516 #1372 #1489 #1357 #1036 #1188 #1371 #935 #1509 #1350 #1150 #960 #1523 #998 #1087)
151.2022 +#1824 := [th-lemma]: #1823
151.2023 +#2077 := [unit-resolution #1824 #720 #1684 #746 #698 #772 #802 #850 #876]: #2076
151.2024 +#2078 := [unit-resolution #2077 #2075 #2015 #2045 #2069 #1331 #2070]: #960
151.2025 +#2079 := [unit-resolution #1248 #2078 #2072]: false
151.2026 +#2081 := [lemma #2079]: #2080
151.2027 +#2092 := [unit-resolution #2081 #1331]: #1109
151.2028 +#2093 := [unit-resolution #1735 #2092]: #382
151.2029 +#2094 := [unit-resolution #1960 #2093 #1870]: #1123
151.2030 +#2095 := (or #516 #923 #1074 #1036 #1162 #1125 #1188)
151.2031 +#2096 := [unit-resolution #1712 #1440 #724 #1684 #746 #698 #772 #798 #828 #850 #876]: #2095
151.2032 +#2097 := [unit-resolution #2096 #1631 #2015 #2094 #1331 #2091 #2033]: #1074
151.2033 +#2098 := [unit-resolution #1284 #2097]: #1076
151.2034 +#2099 := [unit-resolution #1107 #2098 #2088]: false
151.2035 +#2101 := [lemma #2099]: #2100
151.2036 +#2102 := [unit-resolution #2101 #1331]: #429
151.2037 +#2103 := [unit-resolution #1183 #2102]: #1153
151.2038 +#2104 := [unit-resolution #1308 #2103]: #1147
151.2039 +#2105 := [unit-resolution #2077 #2104 #2015 #2045 #2069 #1331 #2091]: #960
151.2040 +#2106 := [unit-resolution #1248 #2105]: #962
151.2041 +#2107 := [unit-resolution #2017 #2104 #2015 #2069 #1331]: #972
151.2042 +#2108 := [unit-resolution #1254 #2107]: #974
151.2043 +#2109 := [unit-resolution #994 #2108]: #194
151.2044 +#2110 := [unit-resolution #993 #2109 #2106]: false
151.2045 +#2111 := [lemma #2110]: #516
151.2046 +#2127 := (or #1199 #1189 #477)
151.2047 +#2128 := [th-lemma]: #2127
151.2048 +#2129 := [unit-resolution #2128 #1864 #1997]: #1199
151.2049 +#2125 := (or #335 #288)
151.2050 +#1806 := [unit-resolution #1108 #1422]: #1089
151.2051 +#1829 := [unit-resolution #1290 #1806]: #1084
151.2052 +#2117 := (or #515 #1511 #1337 #1151 #1189 #1358 #922 #1510 #1409 #960 #1509 #1049 #1086)
151.2053 +#2118 := [th-lemma]: #2117
151.2054 +#2119 := [unit-resolution #2118 #1829 #1924 #720 #1468 #776 #694 #798 #2116 #854 #1864 #880 #1928]: #515
151.2055 +#2120 := (or #101 #922 #1510 #1409 #960 #1509 #1049 #335 #288)
151.2056 +#2121 := [th-lemma]: #2120
151.2057 +#2122 := [unit-resolution #2121 #1422 #694 #1924 #720 #1405 #1468 #776 #1928]: #101
151.2058 +#2123 := [unit-resolution #918 #2122]: #899
151.2059 +#2124 := [unit-resolution #1916 #2123 #2119 #2111 #1497 #1925 #2033 #2116 #1928 #1924 #2115 #2112]: false
151.2060 +#2126 := [lemma #2124]: #2125
151.2061 +#2130 := [unit-resolution #2126 #1405]: #335
151.2062 +#2131 := [unit-resolution #1107 #2130]: #1077
151.2063 +#2132 := [unit-resolution #1284 #2131]: #1071
151.2064 +#2133 := [unit-resolution #1933 #2132 #2129 #2115 #1928 #2112 #1924]: #515
151.2065 +#2134 := [unit-resolution #1916 #2133 #2111 #1497 #1925 #2033 #2116 #1928 #1924 #2115 #2112]: #898
151.2066 +#2135 := [unit-resolution #918 #2134]: #100
151.2067 +#2136 := [unit-resolution #917 #2135]: #887
151.2068 +#2137 := [unit-resolution #1224 #2136]: #881
151.2069 +#2138 := [unit-resolution #1943 #2137 #1497 #1870 #2116 #1928]: #506
151.2070 +#2139 := [unit-resolution #646 #2138 #2111 #2133]: #632
151.2071 +#2140 := [unit-resolution #1908 #2139 #1928 #694 #1924 #720 #1684 #746 #1468 #776 #2115 #824 #2112 #850 #672]: #897
151.2072 +#2141 := [th-lemma #2140 #2135 #1742]: false
151.2073 +#2142 := [lemma #2141]: #288
151.2074 +#2143 := [unit-resolution #1069 #2142]: #1039
151.2075 +#2144 := [unit-resolution #1272 #2143]: #1033
151.2076 +#2145 := [hypothesis]: #1150
151.2077 +#2146 := [unit-resolution #1308 #2145]: #1152
151.2078 +#2147 := [unit-resolution #1183 #2146]: #430
151.2079 +#2148 := [unit-resolution #1184 #2147]: #1165
151.2080 +#2149 := [unit-resolution #1314 #2148]: #1160
151.2081 +#2150 := [unit-resolution #1761 #2147]: #1109
151.2082 +#2151 := [unit-resolution #1735 #2150]: #382
151.2083 +#2152 := [unit-resolution #1960 #2151 #1870]: #1123
151.2084 +#2153 := [unit-resolution #1988 #2152 #2149 #2033 #2144]: #509
151.2085 +#2154 := (or #1149 #1147)
151.2086 +#2155 := [th-lemma]: #2154
151.2087 +#2156 := [unit-resolution #2155 #2145]: #1149
151.2088 +#2157 := [unit-resolution #1894 #2147]: #1200
151.2089 +#2158 := [unit-resolution #2061 #2149 #2015 #1870 #2157 #2151]: #1086
151.2090 +#2159 := [unit-resolution #1290 #2158]: #1088
151.2091 +#2160 := [unit-resolution #1108 #2159]: #335
151.2092 +#2161 := [unit-resolution #1107 #2160]: #1077
151.2093 +#2162 := [unit-resolution #1284 #2161]: #1071
151.2094 +#2163 := [unit-resolution #1971 #2162 #2149 #2152 #2156 #2144]: #147
151.2095 +#2164 := [unit-resolution #955 #2163]: #925
151.2096 +#2165 := [unit-resolution #1236 #2164]: #919
151.2097 +#2166 := [unit-resolution #1316 #2148]: #1161
151.2098 +#2167 := (or #100 #923 #1371 #1357 #1523 #998 #1036 #383 #429 #1343 #1113 #973 #1373 #1074 #1358)
151.2099 +#2168 := [th-lemma]: #2167
151.2100 +#2169 := [unit-resolution #2168 #2162 #698 #1440 #724 #1684 #746 #2144 #772 #2033 #798 #2151 #1870 #828 #2147]: #100
151.2101 +#2170 := [unit-resolution #917 #2169]: #887
151.2102 +#2171 := [unit-resolution #1224 #2170]: #881
151.2103 +#2172 := [unit-resolution #1992 #2171 #2166 #2150 #2162 #2144 #2165]: #506
151.2104 +#2173 := (or #195 #1357 #1523 #998 #1036 #383 #429 #1343 #1113)
151.2105 +#2174 := [th-lemma]: #2173
151.2106 +#2175 := [unit-resolution #2174 #2151 #746 #2144 #772 #1684 #1870 #828 #2147]: #195
151.2107 +#2176 := [unit-resolution #994 #2175]: #975
151.2108 +#2177 := [unit-resolution #1254 #2176]: #970
151.2109 +#2178 := (or #515 #922 #1074 #1036 #972 #1163 #1112)
151.2110 +#2179 := [unit-resolution #1622 #694 #720 #1404 #750 #772 #1864 #798 #824 #854 #880]: #2178
151.2111 +#2180 := [unit-resolution #2179 #2177 #2150 #2162 #2166 #2144 #2165]: #515
151.2112 +#2181 := [unit-resolution #646 #2180 #2172 #2111 #2153]: false
151.2113 +#2182 := [lemma #2181]: #1147
151.2114 +#1805 := [unit-resolution #1302 #1729]: #1122
151.2115 +#2231 := (or #194 #382)
151.2116 +#2183 := (or #1150 #429 #1163)
151.2117 +#2184 := [th-lemma]: #2183
151.2118 +#2185 := [unit-resolution #2184 #1333 #2182]: #1163
151.2119 +#2186 := [unit-resolution #1316 #2185 #1334]: false
151.2120 +#2187 := [lemma #2186]: #429
151.2121 +#2196 := [unit-resolution #1183 #2187]: #1153
151.2122 +#2197 := [unit-resolution #1310 #2196]: #1149
151.2123 +#1817 := [unit-resolution #1304 #1729]: #1123
151.2124 +#2217 := [unit-resolution #1804 #1535 #2182 #1817 #2197 #1805]: #147
151.2125 +#2218 := [unit-resolution #955 #2217]: #925
151.2126 +#2219 := [unit-resolution #1236 #2218]: #919
151.2127 +#2210 := [unit-resolution #1976 #2197 #2187]: #1161
151.2128 +#2220 := (or #509 #1124 #935 #1150 #972)
151.2129 +#2221 := [unit-resolution #1767 #698 #672 #720 #1703 #750 #1459 #776 #1447 #802 #824 #850 #1742]: #2220
151.2130 +#2222 := [unit-resolution #2221 #1620 #2069 #1805 #2182]: #509
151.2131 +#2223 := (or #515 #922 #1163 #972 #1124)
151.2132 +#2224 := [unit-resolution #1707 #720 #1703 #750 #1459 #776 #1447 #802 #694 #824 #854 #880 #1864]: #2223
151.2133 +#2225 := [unit-resolution #2224 #2219 #1805 #1620 #2210]: #515
151.2134 +#2226 := [unit-resolution #646 #2225 #2111 #2222]: #631
151.2135 +#2211 := (or #506 #884 #922 #1163 #1124)
151.2136 +#2212 := [unit-resolution #1724 #668 #694 #1703 #750 #1459 #776 #824 #854]: #2211
151.2137 +#2227 := [unit-resolution #2212 #2226 #1805 #2210 #2219]: #884
151.2138 +#2228 := [unit-resolution #1224 #2227]: #886
151.2139 +#2229 := [unit-resolution #917 #2228]: #101
151.2140 +#2230 := [th-lemma #1620 #720 #1459 #776 #1447 #802 #2033 #2229 #698 #1428 #2217]: false
151.2141 +#2232 := [lemma #2230]: #2231
151.2142 +#2242 := [unit-resolution #2232 #1428]: #194
151.2143 +#2243 := [unit-resolution #993 #2242]: #963
151.2144 +#2244 := [unit-resolution #1248 #2243]: #957
151.2145 +#2193 := (or #509 #1124 #1036 #935 #1150 #960 #1087)
151.2146 +#1814 := (or #509 #885 #1522 #1523 #1365 #1489 #998 #1124 #1371 #1036 #1357 #935 #1150 #1509 #1350 #960 #1087)
151.2147 +#1815 := [th-lemma]: #1814
151.2148 +#2194 := [unit-resolution #1815 #698 #720 #1684 #746 #672 #772 #802 #824 #850 #1742]: #2193
151.2149 +#2245 := [unit-resolution #2194 #2244 #2069 #2144 #2045 #1805 #2182]: #509
151.2150 +#2205 := (or #100 #935 #1036 #382 #960 #1087)
151.2151 +#1834 := (or #100 #1371 #935 #1523 #1036 #1357 #998 #1509 #382 #1350 #960 #1087)
151.2152 +#1835 := [th-lemma]: #1834
151.2153 +#2206 := [unit-resolution #1835 #698 #720 #1684 #746 #772 #802]: #2205
151.2154 +#2246 := [unit-resolution #2206 #2244 #2045 #2069 #2144 #1428]: #100
151.2155 +#2247 := [unit-resolution #917 #2246]: #887
151.2156 +#2248 := [unit-resolution #1224 #2247]: #881
151.2157 +#2215 := (or #335 #382)
151.2158 +#2188 := (or #335 #194)
151.2159 +#2189 := [unit-resolution #1777 #750 #1459 #776 #1703]: #2188
151.2160 +#2190 := [unit-resolution #2189 #1422]: #194
151.2161 +#2191 := [unit-resolution #993 #2190]: #963
151.2162 +#2192 := [unit-resolution #1248 #2191]: #957
151.2163 +#2195 := [unit-resolution #2194 #2192 #2069 #2144 #2045 #1805 #2182]: #509
151.2164 +#2198 := [unit-resolution #1250 #2191]: #959
151.2165 +#1840 := (or #335 #934 #1151 #961 #935 #960 #1150 #382)
151.2166 +#1807 := [unit-resolution #1292 #1806]: #1085
151.2167 +#1808 := [hypothesis]: #933
151.2168 +#1809 := (or #288 #382 #1350 #335 #1087)
151.2169 +#1810 := [th-lemma]: #1809
151.2170 +#1811 := [unit-resolution #1810 #1422 #1807 #802 #1428]: #288
151.2171 +#1812 := [unit-resolution #1069 #1811]: #1039
151.2172 +#1813 := [unit-resolution #1272 #1812]: #1033
151.2173 +#1816 := [unit-resolution #1815 #1813 #1808 #698 #1536 #720 #1684 #746 #672 #772 #1807 #802 #1805 #824 #1540 #850 #1742]: #509
151.2174 +#1818 := (or #476 #1337 #1343 #1125 #1151 #335 #382)
151.2175 +#1819 := [th-lemma]: #1818
151.2176 +#1820 := [unit-resolution #1819 #1422 #1817 #828 #1774 #854 #1428]: #476
151.2177 +#1821 := [unit-resolution #1221 #1820]: #1191
151.2178 +#1822 := [unit-resolution #1320 #1821]: #1185
151.2179 +#1825 := [unit-resolution #1824 #1813 #1536 #720 #1684 #746 #698 #772 #1807 #802 #1540 #850 #1822 #876 #1808]: #516
151.2180 +#1826 := [hypothesis]: #932
151.2181 +#1827 := [unit-resolution #1322 #1821]: #1187
151.2182 +#1830 := (or #515 #1511 #1337 #1409 #1037 #1189 #1510 #934 #1373 #1358 #1151 #961 #1364 #999 #1086)
151.2183 +#1831 := [th-lemma]: #1830
151.2184 +#1832 := [unit-resolution #1831 #1829 #1828 #724 #1703 #750 #1459 #776 #694 #798 #1774 #854 #1827 #880 #1826]: #515
151.2185 +#1833 := [unit-resolution #646 #1832 #1825 #1816]: #631
151.2186 +#1836 := [unit-resolution #1835 #1813 #698 #1536 #720 #1684 #746 #1808 #772 #1807 #802 #1428]: #100
151.2187 +#1837 := [unit-resolution #917 #1836]: #887
151.2188 +#1838 := [unit-resolution #1224 #1837]: #881
151.2189 +#1839 := [th-lemma #1838 #668 #750 #828 #854 #1703 #1817 #694 #1459 #776 #1826 #1774 #724 #798 #1828 #1829 #1833]: false
151.2190 +#1841 := [lemma #1839]: #1840
151.2191 +#2199 := [unit-resolution #1841 #2198 #2069 #1422 #2197 #2192 #2182 #1428]: #934
151.2192 +#2200 := [unit-resolution #1242 #2199]: #936
151.2193 +#2201 := [unit-resolution #956 #2200]: #147
151.2194 +#2202 := [unit-resolution #955 #2201]: #925
151.2195 +#2203 := [unit-resolution #1236 #2202]: #919
151.2196 +#2204 := [unit-resolution #2118 #2203 #1829 #720 #1468 #776 #694 #798 #2197 #854 #1864 #880 #2192]: #515
151.2197 +#2207 := [unit-resolution #2206 #2192 #2045 #2069 #2144 #1428]: #100
151.2198 +#2208 := [unit-resolution #917 #2207]: #887
151.2199 +#2209 := [unit-resolution #1224 #2208]: #881
151.2200 +#2213 := [unit-resolution #2212 #2203 #1805 #2210 #2209]: #506
151.2201 +#2214 := [unit-resolution #646 #2213 #2204 #2111 #2195]: false
151.2202 +#2216 := [lemma #2214]: #2215
151.2203 +#2249 := [unit-resolution #2216 #1428]: #335
151.2204 +#2250 := [unit-resolution #1107 #2249]: #1077
151.2205 +#2251 := [unit-resolution #1284 #2250]: #1071
151.2206 +#2252 := (or #1084 #1074 #1357 #1523 #998 #1036 #195)
151.2207 +#2253 := [th-lemma]: #2252
151.2208 +#2254 := [unit-resolution #2253 #2251 #746 #2144 #772 #1684 #2242]: #1084
151.2209 +#2255 := [unit-resolution #1250 #2243]: #959
151.2210 +#2240 := (or #934 #632 #884 #1074 #1125 #961 #1086)
151.2211 +#2233 := (or #515 #934 #1151 #961 #1086)
151.2212 +#2234 := [unit-resolution #1831 #1864 #724 #1703 #750 #1459 #776 #694 #798 #854 #880]: #2233
151.2213 +#2235 := [unit-resolution #2234 #1826 #2197 #1828 #2054]: #515
151.2214 +#2236 := (or #506 #884 #1125 #1036 #934 #1151 #1074)
151.2215 +#2237 := [unit-resolution #1788 #694 #1440 #724 #1684 #746 #668 #772 #798 #828 #854]: #2236
151.2216 +#2238 := [unit-resolution #2237 #1826 #1636 #1638 #1775 #2197 #2144]: #506
151.2217 +#2239 := [unit-resolution #646 #2238 #2235 #2111 #1628]: false
151.2218 +#2241 := [lemma #2239]: #2240
151.2219 +#2256 := [unit-resolution #2241 #2245 #2248 #2251 #1817 #2255 #2254]: #934
151.2220 +#2257 := [unit-resolution #1242 #2256]: #936
151.2221 +#2258 := [unit-resolution #956 #2257]: #147
151.2222 +#2259 := [unit-resolution #955 #2258]: #925
151.2223 +#2260 := [unit-resolution #1236 #2259]: #919
151.2224 +#2261 := [unit-resolution #2212 #2260 #1805 #2210 #2248]: #506
151.2225 +#2262 := [unit-resolution #2118 #2260 #2254 #720 #1468 #776 #694 #798 #2197 #854 #1864 #880 #2244]: #515
151.2226 +#2263 := [unit-resolution #646 #2262 #2261 #2111 #2245]: false
151.2227 +#2264 := [lemma #2263]: #382
151.2228 +#2265 := [unit-resolution #1145 #2264]: #1115
151.2229 +#2266 := [unit-resolution #1296 #2265]: #1109
151.2230 +#2267 := [unit-resolution #2189 #1535]: #335
151.2231 +#2268 := [unit-resolution #1107 #2267]: #1077
151.2232 +#2269 := [unit-resolution #1284 #2268]: #1071
151.2233 +#2270 := [unit-resolution #1966 #2269 #2142 #2266 #2182]: #1160
151.2234 +#2271 := (or #1008 #998 #1036 #1357 #1074 #1358 #383)
151.2235 +#2272 := [th-lemma]: #2271
151.2236 +#2273 := [unit-resolution #2272 #2269 #2144 #772 #1684 #798 #2264]: #1008
151.2237 +#2274 := (or #509 #1010 #1113 #923 #1162)
151.2238 +#2275 := [unit-resolution #1608 #672 #698 #1742 #746 #1459 #776 #1447 #802 #828 #850]: #2274
151.2239 +#2276 := [unit-resolution #2275 #2273 #1870 #2270 #2033]: #509
151.2240 +#2277 := [unit-resolution #1960 #2264 #1870]: #1123
151.2241 +#2278 := [unit-resolution #1971 #2270 #2269 #2277 #2197 #2144]: #147
151.2242 +#2279 := [unit-resolution #955 #2278]: #925
151.2243 +#2280 := [unit-resolution #1236 #2279]: #919
151.2244 +#2281 := (or #1010 #999 #923 #100 #1371 #961 #1373)
151.2245 +#2282 := [th-lemma]: #2281
151.2246 +#2283 := [unit-resolution #2282 #2273 #698 #1584 #724 #1703 #2033]: #100
151.2247 +#2284 := [unit-resolution #917 #2283]: #887
151.2248 +#2285 := [unit-resolution #1224 #2284]: #881
151.2249 +#2286 := [unit-resolution #1992 #2285 #2210 #2266 #2269 #2144 #2280]: #506
151.2250 +#2287 := [unit-resolution #2179 #2280 #2266 #1620 #2210 #2144 #2269]: #515
151.2251 +#2288 := [unit-resolution #646 #2287 #2286 #2111 #2276]: false
151.2252 +#2289 := [lemma #2288]: #194
151.2253 +#2305 := [unit-resolution #2253 #2302 #746 #2144 #772 #1684 #2289]: #1074
151.2254 +#2306 := [unit-resolution #1284 #2305]: #1076
151.2255 +#2307 := [unit-resolution #1107 #2306 #2304]: false
151.2256 +#2308 := [lemma #2307]: #1084
151.2257 +#2300 := (or #1086 #515)
151.2258 +#2290 := [hypothesis]: #633
151.2259 +#2291 := [unit-resolution #993 #2289]: #963
151.2260 +#2292 := [unit-resolution #1250 #2291]: #959
151.2261 +#2293 := [unit-resolution #2234 #2054 #2197 #2292 #2290]: #934
151.2262 +#2294 := [unit-resolution #1242 #2293]: #936
151.2263 +#2295 := [unit-resolution #1248 #2291]: #957
151.2264 +#2296 := [unit-resolution #2118 #2054 #2290 #720 #1468 #776 #694 #798 #2197 #854 #1864 #880 #2295]: #922
151.2265 +#2297 := [unit-resolution #1236 #2296]: #924
151.2266 +#2298 := [unit-resolution #955 #2297]: #148
151.2267 +#2299 := [unit-resolution #956 #2298 #2294]: false
151.2268 +#2301 := [lemma #2299]: #2300
151.2269 +#1848 := [unit-resolution #2301 #2308]: #515
151.2270 +#1851 := [hypothesis]: #632
151.2271 +#1852 := (or #897 #1522 #509 #1523 #998 #1365 #1489 #1150 #1509 #1350 #633 #1372 #1188 #960 #1087 #1112)
151.2272 +#1853 := [th-lemma]: #1852
151.2273 +#1846 := [unit-resolution #1853 #1851 #2295 #720 #1684 #746 #2045 #802 #2266 #824 #2182 #850 #2015 #876 #672 #1848]: #897
151.2274 +#1847 := [unit-resolution #1232 #1846]: #898
151.2275 +#1854 := [unit-resolution #918 #1847]: #100
151.2276 +#1855 := (or #509 #1124)
151.2277 +#1856 := [unit-resolution #2194 #2069 #2144 #2045 #2295 #2182]: #1855
151.2278 +#2309 := [unit-resolution #1856 #1851]: #1124
151.2279 +#2310 := [th-lemma #1848 #876 #850 #2182 #2015 #2309 #2266 #1854]: false
151.2280 +#2311 := [lemma #2310]: #509
151.2281 +#2312 := (or #631 #632)
151.2282 +#2313 := [unit-resolution #646 #2111 #1848]: #2312
151.2283 +#2314 := [unit-resolution #2313 #2311]: #631
151.2284 +#2315 := (or #884 #633 #1372 #1188 #1125 #1528 #506 #1364 #999 #1343 #1373 #1358 #961 #1086)
151.2285 +#2316 := [th-lemma]: #2315
151.2286 +#2317 := [unit-resolution #2316 #668 #2292 #724 #1703 #750 #2308 #798 #2277 #828 #2015 #876 #2314 #1848]: #884
151.2287 +#2318 := [unit-resolution #1224 #2317]: #886
151.2288 +#2319 := (or #896 #1528 #506 #1364 #999 #1343 #1337 #1151 #1373 #1358 #634 #1511 #1189 #961 #1086 #1113)
151.2289 +#2320 := [th-lemma]: #2319
151.2290 +#2321 := [unit-resolution #2320 #668 #2292 #724 #1703 #750 #2308 #798 #1870 #828 #2197 #854 #1864 #880 #2314 #2111]: #896
151.2291 +#2322 := [unit-resolution #1230 #2321]: #898
151.2292 +#2323 := [unit-resolution #918 #2322]: #100
151.2293 +[unit-resolution #917 #2323 #2318]: false
151.2294 +unsat
152.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
152.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_01 Tue Oct 20 10:11:30 2009 +0200
152.3 @@ -0,0 +1,58 @@
152.4 +(benchmark Isabelle
152.5 +:extrasorts ( T2 T13 T12 T11 T10 T9 T8 T7 T6 T5 T4 T1 T3)
152.6 +:extrafuns (
152.7 + (uf_37 T13)
152.8 + (uf_34 T12)
152.9 + (uf_31 T11)
152.10 + (uf_28 T10)
152.11 + (uf_25 T9)
152.12 + (uf_22 T8)
152.13 + (uf_19 T7)
152.14 + (uf_16 T6)
152.15 + (uf_13 T5)
152.16 + (uf_10 T4)
152.17 + (uf_7 T1)
152.18 + (uf_4 T3)
152.19 + (uf_36 Int T13 T13)
152.20 + (uf_33 T13 T12 T12)
152.21 + (uf_30 T12 T11 T11)
152.22 + (uf_27 T11 T10 T10)
152.23 + (uf_24 T10 T9 T9)
152.24 + (uf_21 T9 T8 T8)
152.25 + (uf_18 T8 T7 T7)
152.26 + (uf_15 T7 T6 T6)
152.27 + (uf_12 T6 T5 T5)
152.28 + (uf_9 T5 T4 T4)
152.29 + (uf_6 T4 T1 T1)
152.30 + (uf_3 T1 T3 T3)
152.31 + )
152.32 +:extrapreds (
152.33 + (up_35 Int)
152.34 + (up_32 T13)
152.35 + (up_29 T12)
152.36 + (up_26 T11)
152.37 + (up_23 T10)
152.38 + (up_20 T9)
152.39 + (up_17 T8)
152.40 + (up_14 T7)
152.41 + (up_11 T6)
152.42 + (up_8 T5)
152.43 + (up_5 T4)
152.44 + (up_1 T1)
152.45 + (up_2 T3)
152.46 + )
152.47 +:assumption (forall (?x1 T1) (and (up_1 ?x1) (or (up_2 (uf_3 ?x1 uf_4)) (not (up_2 (uf_3 ?x1 uf_4))))))
152.48 +:assumption (forall (?x2 T4) (and (up_5 ?x2) (or (up_1 (uf_6 ?x2 uf_7)) (not (up_1 (uf_6 ?x2 uf_7))))))
152.49 +:assumption (forall (?x3 T5) (and (up_8 ?x3) (or (up_5 (uf_9 ?x3 uf_10)) (not (up_5 (uf_9 ?x3 uf_10))))))
152.50 +:assumption (forall (?x4 T6) (and (up_11 ?x4) (or (up_8 (uf_12 ?x4 uf_13)) (not (up_8 (uf_12 ?x4 uf_13))))))
152.51 +:assumption (forall (?x5 T7) (and (up_14 ?x5) (or (up_11 (uf_15 ?x5 uf_16)) (not (up_11 (uf_15 ?x5 uf_16))))))
152.52 +:assumption (forall (?x6 T8) (and (up_17 ?x6) (or (up_14 (uf_18 ?x6 uf_19)) (not (up_14 (uf_18 ?x6 uf_19))))))
152.53 +:assumption (forall (?x7 T9) (and (up_20 ?x7) (or (up_17 (uf_21 ?x7 uf_22)) (not (up_17 (uf_21 ?x7 uf_22))))))
152.54 +:assumption (forall (?x8 T10) (and (up_23 ?x8) (or (up_20 (uf_24 ?x8 uf_25)) (not (up_20 (uf_24 ?x8 uf_25))))))
152.55 +:assumption (forall (?x9 T11) (and (up_26 ?x9) (or (up_23 (uf_27 ?x9 uf_28)) (not (up_23 (uf_27 ?x9 uf_28))))))
152.56 +:assumption (forall (?x10 T12) (and (up_29 ?x10) (or (up_26 (uf_30 ?x10 uf_31)) (not (up_26 (uf_30 ?x10 uf_31))))))
152.57 +:assumption (forall (?x11 T13) (and (up_32 ?x11) (or (up_29 (uf_33 ?x11 uf_34)) (not (up_29 (uf_33 ?x11 uf_34))))))
152.58 +:assumption (forall (?x12 Int) (and (up_35 ?x12) (or (up_32 (uf_36 ?x12 uf_37)) (not (up_32 (uf_36 ?x12 uf_37))))))
152.59 +:assumption (not (up_35 1))
152.60 +:formula true
152.61 +)
153.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
153.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_01.proof Tue Oct 20 10:11:30 2009 +0200
153.3 @@ -0,0 +1,50 @@
153.4 +#2 := false
153.5 +decl up_35 :: (-> int bool)
153.6 +#112 := 1::int
153.7 +#113 := (up_35 1::int)
153.8 +#114 := (not #113)
153.9 +#297 := [asserted]: #114
153.10 +#103 := (:var 0 int)
153.11 +#104 := (up_35 #103)
153.12 +#911 := (pattern #104)
153.13 +#912 := (forall (vars (?x12 int)) (:pat #911) #104)
153.14 +#294 := (forall (vars (?x12 int)) #104)
153.15 +#915 := (iff #294 #912)
153.16 +#913 := (iff #104 #104)
153.17 +#914 := [refl]: #913
153.18 +#916 := [quant-intro #914]: #915
153.19 +#320 := (~ #294 #294)
153.20 +#361 := (~ #104 #104)
153.21 +#362 := [refl]: #361
153.22 +#321 := [nnf-pos #362]: #320
153.23 +decl up_32 :: (-> T13 bool)
153.24 +decl uf_36 :: (-> int T13 T13)
153.25 +decl uf_37 :: T13
153.26 +#105 := uf_37
153.27 +#106 := (uf_36 #103 uf_37)
153.28 +#107 := (up_32 #106)
153.29 +#108 := (not #107)
153.30 +#109 := (or #107 #108)
153.31 +#110 := (and #104 #109)
153.32 +#111 := (forall (vars (?x12 int)) #110)
153.33 +#295 := (iff #111 #294)
153.34 +#292 := (iff #110 #104)
153.35 +#1 := true
153.36 +#287 := (and #104 true)
153.37 +#290 := (iff #287 #104)
153.38 +#291 := [rewrite]: #290
153.39 +#288 := (iff #110 #287)
153.40 +#284 := (iff #109 true)
153.41 +#286 := [rewrite]: #284
153.42 +#289 := [monotonicity #286]: #288
153.43 +#293 := [trans #289 #291]: #292
153.44 +#296 := [quant-intro #293]: #295
153.45 +#283 := [asserted]: #111
153.46 +#299 := [mp #283 #296]: #294
153.47 +#363 := [mp~ #299 #321]: #294
153.48 +#917 := [mp #363 #916]: #912
153.49 +#418 := (not #912)
153.50 +#504 := (or #418 #113)
153.51 +#419 := [quant-inst]: #504
153.52 +[unit-resolution #419 #917 #297]: false
153.53 +unsat
154.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
154.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_02 Tue Oct 20 10:11:30 2009 +0200
154.3 @@ -0,0 +1,41 @@
154.4 +(benchmark Isabelle
154.5 +:extrasorts ( T5 T6 T3 T1 T2 T4 T8 T7)
154.6 +:extrafuns (
154.7 + (uf_19 T1)
154.8 + (uf_3 Int T3)
154.9 + (uf_7 T2)
154.10 + (uf_8 T4)
154.11 + (uf_2 T1 T2 T2)
154.12 + (uf_6 Int T4 T4)
154.13 + (uf_10 T5 T1 T3)
154.14 + (uf_12 T6 Int T3)
154.15 + (uf_13 T2 T3)
154.16 + (uf_14 T4 T3)
154.17 + (uf_17 T8 T3)
154.18 + (uf_15 T7 T3)
154.19 + (uf_18 T1 T8)
154.20 + (uf_16 Int T7)
154.21 + (uf_9 T5 T2 T3)
154.22 + (uf_11 T6 T4 T3)
154.23 + (uf_1 T2 T3)
154.24 + (uf_5 T4 T3)
154.25 + (uf_4 T3 Int)
154.26 + )
154.27 +:assumption (forall (?x1 T1) (?x2 T2) (= (uf_1 (uf_2 ?x1 ?x2)) (uf_3 (+ (uf_4 (uf_1 ?x2)) (uf_4 (uf_3 (+ 0 1)))))))
154.28 +:assumption (forall (?x3 Int) (?x4 T4) (= (uf_5 (uf_6 ?x3 ?x4)) (uf_3 (+ (uf_4 (uf_5 ?x4)) (uf_4 (uf_3 (+ 0 1)))))))
154.29 +:assumption (= (uf_1 uf_7) (uf_3 0))
154.30 +:assumption (= (uf_5 uf_8) (uf_3 0))
154.31 +:assumption (forall (?x5 T5) (?x6 T1) (?x7 T2) (= (uf_9 ?x5 (uf_2 ?x6 ?x7)) (uf_3 (+ (+ (uf_4 (uf_10 ?x5 ?x6)) (uf_4 (uf_9 ?x5 ?x7))) (uf_4 (uf_3 (+ 0 1)))))))
154.32 +:assumption (forall (?x8 T6) (?x9 Int) (?x10 T4) (= (uf_11 ?x8 (uf_6 ?x9 ?x10)) (uf_3 (+ (+ (uf_4 (uf_12 ?x8 ?x9)) (uf_4 (uf_11 ?x8 ?x10))) (uf_4 (uf_3 (+ 0 1)))))))
154.33 +:assumption (forall (?x11 T5) (= (uf_9 ?x11 uf_7) (uf_3 0)))
154.34 +:assumption (forall (?x12 T6) (= (uf_11 ?x12 uf_8) (uf_3 0)))
154.35 +:assumption (forall (?x13 T2) (= (uf_13 ?x13) (uf_1 ?x13)))
154.36 +:assumption (forall (?x14 T4) (= (uf_14 ?x14) (uf_5 ?x14)))
154.37 +:assumption (forall (?x15 Int) (= (uf_15 (uf_16 ?x15)) (uf_14 (uf_6 ?x15 uf_8))))
154.38 +:assumption (forall (?x16 T1) (= (uf_17 (uf_18 ?x16)) (uf_13 (uf_2 ?x16 uf_7))))
154.39 +:assumption (forall (?x17 T3) (= (uf_3 (uf_4 ?x17)) ?x17))
154.40 +:assumption (forall (?x18 Int) (implies (<= 0 ?x18) (= (uf_4 (uf_3 ?x18)) ?x18)))
154.41 +:assumption (forall (?x19 Int) (implies (< ?x19 0) (= (uf_4 (uf_3 ?x19)) 0)))
154.42 +:assumption (not (= (uf_15 (uf_16 3)) (uf_17 (uf_18 uf_19))))
154.43 +:formula true
154.44 +)
155.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
155.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_02.proof Tue Oct 20 10:11:30 2009 +0200
155.3 @@ -0,0 +1,492 @@
155.4 +#2 := false
155.5 +decl uf_17 :: (-> T8 T3)
155.6 +decl uf_18 :: (-> T1 T8)
155.7 +decl uf_19 :: T1
155.8 +#104 := uf_19
155.9 +#105 := (uf_18 uf_19)
155.10 +#106 := (uf_17 #105)
155.11 +decl uf_15 :: (-> T7 T3)
155.12 +decl uf_16 :: (-> int T7)
155.13 +#101 := 3::int
155.14 +#102 := (uf_16 3::int)
155.15 +#103 := (uf_15 #102)
155.16 +#107 := (= #103 #106)
155.17 +decl uf_13 :: (-> T2 T3)
155.18 +decl uf_2 :: (-> T1 T2 T2)
155.19 +decl uf_7 :: T2
155.20 +#29 := uf_7
155.21 +#857 := (uf_2 uf_19 uf_7)
155.22 +#859 := (uf_13 #857)
155.23 +#599 := (= #859 #106)
155.24 +#526 := (= #106 #859)
155.25 +#79 := (:var 0 T1)
155.26 +#82 := (uf_2 #79 uf_7)
155.27 +#932 := (pattern #82)
155.28 +#80 := (uf_18 #79)
155.29 +#931 := (pattern #80)
155.30 +#83 := (uf_13 #82)
155.31 +#81 := (uf_17 #80)
155.32 +#84 := (= #81 #83)
155.33 +#933 := (forall (vars (?x16 T1)) (:pat #931 #932) #84)
155.34 +#85 := (forall (vars (?x16 T1)) #84)
155.35 +#936 := (iff #85 #933)
155.36 +#934 := (iff #84 #84)
155.37 +#935 := [refl]: #934
155.38 +#937 := [quant-intro #935]: #936
155.39 +#347 := (~ #85 #85)
155.40 +#384 := (~ #84 #84)
155.41 +#385 := [refl]: #384
155.42 +#348 := [nnf-pos #385]: #347
155.43 +#238 := [asserted]: #85
155.44 +#386 := [mp~ #238 #348]: #85
155.45 +#938 := [mp #386 #937]: #933
155.46 +#861 := (not #933)
155.47 +#862 := (or #861 #526)
155.48 +#863 := [quant-inst]: #862
155.49 +#601 := [unit-resolution #863 #938]: #526
155.50 +#588 := [symm #601]: #599
155.51 +#586 := (= #103 #859)
155.52 +decl uf_1 :: (-> T2 T3)
155.53 +#558 := (uf_1 #857)
155.54 +#832 := (= #558 #859)
155.55 +#5 := (:var 0 T2)
155.56 +#66 := (uf_13 #5)
155.57 +#908 := (pattern #66)
155.58 +#8 := (uf_1 #5)
155.59 +#907 := (pattern #8)
155.60 +#222 := (= #8 #66)
155.61 +#909 := (forall (vars (?x13 T2)) (:pat #907 #908) #222)
155.62 +#226 := (forall (vars (?x13 T2)) #222)
155.63 +#912 := (iff #226 #909)
155.64 +#910 := (iff #222 #222)
155.65 +#911 := [refl]: #910
155.66 +#913 := [quant-intro #911]: #912
155.67 +#341 := (~ #226 #226)
155.68 +#375 := (~ #222 #222)
155.69 +#376 := [refl]: #375
155.70 +#342 := [nnf-pos #376]: #341
155.71 +#67 := (= #66 #8)
155.72 +#68 := (forall (vars (?x13 T2)) #67)
155.73 +#227 := (iff #68 #226)
155.74 +#224 := (iff #67 #222)
155.75 +#225 := [rewrite]: #224
155.76 +#228 := [quant-intro #225]: #227
155.77 +#221 := [asserted]: #68
155.78 +#231 := [mp #221 #228]: #226
155.79 +#377 := [mp~ #231 #342]: #226
155.80 +#914 := [mp #377 #913]: #909
155.81 +#451 := (not #909)
155.82 +#837 := (or #451 #832)
155.83 +#547 := [quant-inst]: #837
155.84 +#615 := [unit-resolution #547 #914]: #832
155.85 +#585 := (= #103 #558)
155.86 +decl uf_3 :: (-> int T3)
155.87 +decl uf_4 :: (-> T3 int)
155.88 +#30 := (uf_1 uf_7)
155.89 +#806 := (uf_4 #30)
155.90 +#11 := 1::int
155.91 +#127 := (uf_3 1::int)
155.92 +#130 := (uf_4 #127)
155.93 +#649 := (+ #130 #806)
155.94 +#794 := (uf_3 #649)
155.95 +#597 := (= #794 #558)
155.96 +#683 := (= #558 #794)
155.97 +#4 := (:var 1 T1)
155.98 +#6 := (uf_2 #4 #5)
155.99 +#865 := (pattern #6)
155.100 +#9 := (uf_4 #8)
155.101 +#133 := (+ #9 #130)
155.102 +#136 := (uf_3 #133)
155.103 +#7 := (uf_1 #6)
155.104 +#139 := (= #7 #136)
155.105 +#866 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #865) #139)
155.106 +#142 := (forall (vars (?x1 T1) (?x2 T2)) #139)
155.107 +#869 := (iff #142 #866)
155.108 +#867 := (iff #139 #139)
155.109 +#868 := [refl]: #867
155.110 +#870 := [quant-intro #868]: #869
155.111 +#361 := (~ #142 #142)
155.112 +#359 := (~ #139 #139)
155.113 +#360 := [refl]: #359
155.114 +#362 := [nnf-pos #360]: #361
155.115 +#10 := 0::int
155.116 +#12 := (+ 0::int 1::int)
155.117 +#13 := (uf_3 #12)
155.118 +#14 := (uf_4 #13)
155.119 +#15 := (+ #9 #14)
155.120 +#16 := (uf_3 #15)
155.121 +#17 := (= #7 #16)
155.122 +#18 := (forall (vars (?x1 T1) (?x2 T2)) #17)
155.123 +#143 := (iff #18 #142)
155.124 +#140 := (iff #17 #139)
155.125 +#137 := (= #16 #136)
155.126 +#134 := (= #15 #133)
155.127 +#131 := (= #14 #130)
155.128 +#128 := (= #13 #127)
155.129 +#125 := (= #12 1::int)
155.130 +#126 := [rewrite]: #125
155.131 +#129 := [monotonicity #126]: #128
155.132 +#132 := [monotonicity #129]: #131
155.133 +#135 := [monotonicity #132]: #134
155.134 +#138 := [monotonicity #135]: #137
155.135 +#141 := [monotonicity #138]: #140
155.136 +#144 := [quant-intro #141]: #143
155.137 +#124 := [asserted]: #18
155.138 +#147 := [mp #124 #144]: #142
155.139 +#363 := [mp~ #147 #362]: #142
155.140 +#871 := [mp #363 #870]: #866
155.141 +#701 := (not #866)
155.142 +#694 := (or #701 #683)
155.143 +#688 := (+ #806 #130)
155.144 +#689 := (uf_3 #688)
155.145 +#690 := (= #558 #689)
155.146 +#702 := (or #701 #690)
155.147 +#704 := (iff #702 #694)
155.148 +#706 := (iff #694 #694)
155.149 +#799 := [rewrite]: #706
155.150 +#698 := (iff #690 #683)
155.151 +#795 := (= #689 #794)
155.152 +#797 := (= #688 #649)
155.153 +#699 := [rewrite]: #797
155.154 +#798 := [monotonicity #699]: #795
155.155 +#700 := [monotonicity #798]: #698
155.156 +#705 := [monotonicity #700]: #704
155.157 +#796 := [trans #705 #799]: #704
155.158 +#703 := [quant-inst]: #702
155.159 +#800 := [mp #703 #796]: #694
155.160 +#614 := [unit-resolution #800 #871]: #683
155.161 +#598 := [symm #614]: #597
155.162 +#583 := (= #103 #794)
155.163 +#595 := (= #127 #794)
155.164 +#605 := (= #794 #127)
155.165 +#618 := (= #649 1::int)
155.166 +#780 := (<= #806 0::int)
155.167 +#778 := (= #806 0::int)
155.168 +#31 := (uf_3 0::int)
155.169 +#858 := (uf_4 #31)
155.170 +#855 := (= #858 0::int)
155.171 +#72 := (:var 0 int)
155.172 +#92 := (uf_3 #72)
155.173 +#947 := (pattern #92)
155.174 +#266 := (>= #72 0::int)
155.175 +#267 := (not #266)
155.176 +#93 := (uf_4 #92)
155.177 +#248 := (= #72 #93)
155.178 +#273 := (or #248 #267)
155.179 +#948 := (forall (vars (?x18 int)) (:pat #947) #273)
155.180 +#278 := (forall (vars (?x18 int)) #273)
155.181 +#951 := (iff #278 #948)
155.182 +#949 := (iff #273 #273)
155.183 +#950 := [refl]: #949
155.184 +#952 := [quant-intro #950]: #951
155.185 +#351 := (~ #278 #278)
155.186 +#390 := (~ #273 #273)
155.187 +#391 := [refl]: #390
155.188 +#352 := [nnf-pos #391]: #351
155.189 +#94 := (= #93 #72)
155.190 +#91 := (<= 0::int #72)
155.191 +#95 := (implies #91 #94)
155.192 +#96 := (forall (vars (?x18 int)) #95)
155.193 +#281 := (iff #96 #278)
155.194 +#255 := (not #91)
155.195 +#256 := (or #255 #248)
155.196 +#261 := (forall (vars (?x18 int)) #256)
155.197 +#279 := (iff #261 #278)
155.198 +#276 := (iff #256 #273)
155.199 +#270 := (or #267 #248)
155.200 +#274 := (iff #270 #273)
155.201 +#275 := [rewrite]: #274
155.202 +#271 := (iff #256 #270)
155.203 +#268 := (iff #255 #267)
155.204 +#264 := (iff #91 #266)
155.205 +#265 := [rewrite]: #264
155.206 +#269 := [monotonicity #265]: #268
155.207 +#272 := [monotonicity #269]: #271
155.208 +#277 := [trans #272 #275]: #276
155.209 +#280 := [quant-intro #277]: #279
155.210 +#262 := (iff #96 #261)
155.211 +#259 := (iff #95 #256)
155.212 +#252 := (implies #91 #248)
155.213 +#257 := (iff #252 #256)
155.214 +#258 := [rewrite]: #257
155.215 +#253 := (iff #95 #252)
155.216 +#250 := (iff #94 #248)
155.217 +#251 := [rewrite]: #250
155.218 +#254 := [monotonicity #251]: #253
155.219 +#260 := [trans #254 #258]: #259
155.220 +#263 := [quant-intro #260]: #262
155.221 +#282 := [trans #263 #280]: #281
155.222 +#247 := [asserted]: #96
155.223 +#283 := [mp #247 #282]: #278
155.224 +#392 := [mp~ #283 #352]: #278
155.225 +#953 := [mp #392 #952]: #948
155.226 +#848 := (not #948)
155.227 +#850 := (or #848 #855)
155.228 +#527 := (>= 0::int 0::int)
155.229 +#860 := (not #527)
155.230 +#864 := (= 0::int #858)
155.231 +#854 := (or #864 #860)
155.232 +#489 := (or #848 #854)
155.233 +#851 := (iff #489 #850)
155.234 +#852 := (iff #850 #850)
155.235 +#838 := [rewrite]: #852
155.236 +#847 := (iff #854 #855)
155.237 +#843 := (or #855 false)
155.238 +#846 := (iff #843 #855)
155.239 +#841 := [rewrite]: #846
155.240 +#844 := (iff #854 #843)
155.241 +#505 := (iff #860 false)
155.242 +#1 := true
155.243 +#498 := (not true)
155.244 +#503 := (iff #498 false)
155.245 +#504 := [rewrite]: #503
155.246 +#840 := (iff #860 #498)
155.247 +#514 := (iff #527 true)
155.248 +#856 := [rewrite]: #514
155.249 +#502 := [monotonicity #856]: #840
155.250 +#842 := [trans #502 #504]: #505
155.251 +#513 := (iff #864 #855)
155.252 +#518 := [rewrite]: #513
155.253 +#845 := [monotonicity #518 #842]: #844
155.254 +#484 := [trans #845 #841]: #847
155.255 +#849 := [monotonicity #484]: #851
155.256 +#839 := [trans #849 #838]: #851
155.257 +#490 := [quant-inst]: #489
155.258 +#546 := [mp #490 #839]: #850
155.259 +#644 := [unit-resolution #546 #953]: #855
155.260 +#621 := (= #806 #858)
155.261 +#32 := (= #30 #31)
155.262 +#159 := [asserted]: #32
155.263 +#626 := [monotonicity #159]: #621
155.264 +#616 := [trans #626 #644]: #778
155.265 +#606 := (not #778)
155.266 +#608 := (or #606 #780)
155.267 +#609 := [th-lemma]: #608
155.268 +#612 := [unit-resolution #609 #616]: #780
155.269 +#790 := (>= #806 0::int)
155.270 +#613 := (or #606 #790)
155.271 +#617 := [th-lemma]: #613
155.272 +#610 := [unit-resolution #617 #616]: #790
155.273 +#723 := (<= #130 1::int)
155.274 +#746 := (= #130 1::int)
155.275 +#713 := (or #848 #746)
155.276 +#755 := (>= 1::int 0::int)
155.277 +#756 := (not #755)
155.278 +#743 := (= 1::int #130)
155.279 +#744 := (or #743 #756)
155.280 +#714 := (or #848 #744)
155.281 +#718 := (iff #714 #713)
155.282 +#720 := (iff #713 #713)
155.283 +#725 := [rewrite]: #720
155.284 +#739 := (iff #744 #746)
155.285 +#735 := (or #746 false)
155.286 +#738 := (iff #735 #746)
155.287 +#733 := [rewrite]: #738
155.288 +#736 := (iff #744 #735)
155.289 +#731 := (iff #756 false)
155.290 +#734 := (iff #756 #498)
155.291 +#742 := (iff #755 true)
155.292 +#748 := [rewrite]: #742
155.293 +#730 := [monotonicity #748]: #734
155.294 +#732 := [trans #730 #504]: #731
155.295 +#745 := (iff #743 #746)
155.296 +#747 := [rewrite]: #745
155.297 +#737 := [monotonicity #747 #732]: #736
155.298 +#712 := [trans #737 #733]: #739
155.299 +#719 := [monotonicity #712]: #718
155.300 +#721 := [trans #719 #725]: #718
155.301 +#607 := [quant-inst]: #714
155.302 +#722 := [mp #607 #721]: #713
155.303 +#641 := [unit-resolution #722 #953]: #746
155.304 +#620 := (not #746)
155.305 +#623 := (or #620 #723)
155.306 +#627 := [th-lemma]: #623
155.307 +#629 := [unit-resolution #627 #641]: #723
155.308 +#726 := (>= #130 1::int)
155.309 +#630 := (or #620 #726)
155.310 +#628 := [th-lemma]: #630
155.311 +#631 := [unit-resolution #628 #641]: #726
155.312 +#611 := [th-lemma #631 #629 #610 #612]: #618
155.313 +#587 := [monotonicity #611]: #605
155.314 +#596 := [symm #587]: #595
155.315 +#581 := (= #103 #127)
155.316 +decl uf_5 :: (-> T4 T3)
155.317 +decl uf_8 :: T4
155.318 +#33 := uf_8
155.319 +#34 := (uf_5 uf_8)
155.320 +#822 := (uf_4 #34)
155.321 +#824 := (+ #130 #822)
155.322 +#666 := (uf_3 #824)
155.323 +#593 := (= #666 #127)
155.324 +#589 := (= #127 #666)
155.325 +#624 := (= 1::int #824)
155.326 +#619 := (= #824 1::int)
155.327 +#789 := (<= #822 0::int)
155.328 +#787 := (= #822 0::int)
155.329 +#632 := (= #822 #858)
155.330 +#35 := (= #34 #31)
155.331 +#162 := (= #31 #34)
155.332 +#163 := (iff #35 #162)
155.333 +#164 := [rewrite]: #163
155.334 +#160 := [asserted]: #35
155.335 +#167 := [mp #160 #164]: #162
155.336 +#662 := [symm #167]: #35
155.337 +#633 := [monotonicity #662]: #632
155.338 +#634 := [trans #633 #644]: #787
155.339 +#635 := (not #787)
155.340 +#637 := (or #635 #789)
155.341 +#638 := [th-lemma]: #637
155.342 +#639 := [unit-resolution #638 #634]: #789
155.343 +#781 := (>= #822 0::int)
155.344 +#481 := (or #635 #781)
155.345 +#640 := [th-lemma]: #481
155.346 +#636 := [unit-resolution #640 #634]: #781
155.347 +#622 := [th-lemma #631 #629 #636 #639]: #619
155.348 +#625 := [symm #622]: #624
155.349 +#590 := [monotonicity #625]: #589
155.350 +#594 := [symm #590]: #593
155.351 +#579 := (= #103 #666)
155.352 +decl uf_6 :: (-> int T4 T4)
155.353 +#539 := (uf_6 3::int uf_8)
155.354 +#836 := (uf_5 #539)
155.355 +#810 := (= #836 #666)
155.356 +#813 := (= #666 #836)
155.357 +#20 := (:var 0 T4)
155.358 +#19 := (:var 1 int)
155.359 +#21 := (uf_6 #19 #20)
155.360 +#872 := (pattern #21)
155.361 +#23 := (uf_5 #20)
155.362 +#24 := (uf_4 #23)
155.363 +#146 := (+ #24 #130)
155.364 +#150 := (uf_3 #146)
155.365 +#22 := (uf_5 #21)
155.366 +#153 := (= #22 #150)
155.367 +#873 := (forall (vars (?x3 int) (?x4 T4)) (:pat #872) #153)
155.368 +#156 := (forall (vars (?x3 int) (?x4 T4)) #153)
155.369 +#876 := (iff #156 #873)
155.370 +#874 := (iff #153 #153)
155.371 +#875 := [refl]: #874
155.372 +#877 := [quant-intro #875]: #876
155.373 +#328 := (~ #156 #156)
155.374 +#364 := (~ #153 #153)
155.375 +#365 := [refl]: #364
155.376 +#326 := [nnf-pos #365]: #328
155.377 +#25 := (+ #24 #14)
155.378 +#26 := (uf_3 #25)
155.379 +#27 := (= #22 #26)
155.380 +#28 := (forall (vars (?x3 int) (?x4 T4)) #27)
155.381 +#157 := (iff #28 #156)
155.382 +#154 := (iff #27 #153)
155.383 +#151 := (= #26 #150)
155.384 +#148 := (= #25 #146)
155.385 +#149 := [monotonicity #132]: #148
155.386 +#152 := [monotonicity #149]: #151
155.387 +#155 := [monotonicity #152]: #154
155.388 +#158 := [quant-intro #155]: #157
155.389 +#145 := [asserted]: #28
155.390 +#161 := [mp #145 #158]: #156
155.391 +#366 := [mp~ #161 #326]: #156
155.392 +#878 := [mp #366 #877]: #873
155.393 +#809 := (not #873)
155.394 +#816 := (or #809 #813)
155.395 +#817 := (+ #822 #130)
155.396 +#818 := (uf_3 #817)
155.397 +#823 := (= #836 #818)
155.398 +#645 := (or #809 #823)
155.399 +#648 := (iff #645 #816)
155.400 +#802 := (iff #816 #816)
155.401 +#804 := [rewrite]: #802
155.402 +#814 := (iff #823 #813)
155.403 +#807 := (iff #810 #813)
155.404 +#808 := [rewrite]: #807
155.405 +#811 := (iff #823 #810)
155.406 +#667 := (= #818 #666)
155.407 +#819 := (= #817 #824)
155.408 +#825 := [rewrite]: #819
155.409 +#668 := [monotonicity #825]: #667
155.410 +#812 := [monotonicity #668]: #811
155.411 +#815 := [trans #812 #808]: #814
155.412 +#801 := [monotonicity #815]: #648
155.413 +#805 := [trans #801 #804]: #648
155.414 +#647 := [quant-inst]: #645
155.415 +#803 := [mp #647 #805]: #816
155.416 +#658 := [unit-resolution #803 #878]: #813
155.417 +#592 := [symm #658]: #810
155.418 +#600 := (= #103 #836)
155.419 +decl uf_14 :: (-> T4 T3)
155.420 +#540 := (uf_14 #539)
155.421 +#548 := (= #540 #836)
155.422 +#69 := (uf_14 #20)
155.423 +#916 := (pattern #69)
155.424 +#915 := (pattern #23)
155.425 +#230 := (= #23 #69)
155.426 +#917 := (forall (vars (?x14 T4)) (:pat #915 #916) #230)
155.427 +#234 := (forall (vars (?x14 T4)) #230)
155.428 +#920 := (iff #234 #917)
155.429 +#918 := (iff #230 #230)
155.430 +#919 := [refl]: #918
155.431 +#921 := [quant-intro #919]: #920
155.432 +#343 := (~ #234 #234)
155.433 +#378 := (~ #230 #230)
155.434 +#379 := [refl]: #378
155.435 +#344 := [nnf-pos #379]: #343
155.436 +#70 := (= #69 #23)
155.437 +#71 := (forall (vars (?x14 T4)) #70)
155.438 +#235 := (iff #71 #234)
155.439 +#232 := (iff #70 #230)
155.440 +#233 := [rewrite]: #232
155.441 +#236 := [quant-intro #233]: #235
155.442 +#229 := [asserted]: #71
155.443 +#239 := [mp #229 #236]: #234
155.444 +#380 := [mp~ #239 #344]: #234
155.445 +#922 := [mp #380 #921]: #917
155.446 +#541 := (not #917)
155.447 +#828 := (or #541 #548)
155.448 +#833 := (= #836 #540)
155.449 +#829 := (or #541 #833)
155.450 +#826 := (iff #829 #828)
155.451 +#827 := (iff #828 #828)
155.452 +#831 := [rewrite]: #827
155.453 +#549 := (iff #833 #548)
155.454 +#550 := [rewrite]: #549
155.455 +#830 := [monotonicity #550]: #826
155.456 +#820 := [trans #830 #831]: #826
155.457 +#543 := [quant-inst]: #829
155.458 +#821 := [mp #543 #820]: #828
155.459 +#657 := [unit-resolution #821 #922]: #548
155.460 +#521 := (= #103 #540)
155.461 +#75 := (uf_6 #72 uf_8)
155.462 +#924 := (pattern #75)
155.463 +#73 := (uf_16 #72)
155.464 +#923 := (pattern #73)
155.465 +#76 := (uf_14 #75)
155.466 +#74 := (uf_15 #73)
155.467 +#77 := (= #74 #76)
155.468 +#925 := (forall (vars (?x15 int)) (:pat #923 #924) #77)
155.469 +#78 := (forall (vars (?x15 int)) #77)
155.470 +#928 := (iff #78 #925)
155.471 +#926 := (iff #77 #77)
155.472 +#927 := [refl]: #926
155.473 +#929 := [quant-intro #927]: #928
155.474 +#345 := (~ #78 #78)
155.475 +#381 := (~ #77 #77)
155.476 +#382 := [refl]: #381
155.477 +#346 := [nnf-pos #382]: #345
155.478 +#237 := [asserted]: #78
155.479 +#383 := [mp~ #237 #346]: #78
155.480 +#930 := [mp #383 #929]: #925
155.481 +#515 := (not #925)
155.482 +#646 := (or #515 #521)
155.483 +#853 := [quant-inst]: #646
155.484 +#603 := [unit-resolution #853 #930]: #521
155.485 +#577 := [trans #603 #657]: #600
155.486 +#580 := [trans #577 #592]: #579
155.487 +#582 := [trans #580 #594]: #581
155.488 +#584 := [trans #582 #596]: #583
155.489 +#578 := [trans #584 #598]: #585
155.490 +#571 := [trans #578 #615]: #586
155.491 +#572 := [trans #571 #588]: #107
155.492 +#108 := (not #107)
155.493 +#325 := [asserted]: #108
155.494 +[unit-resolution #325 #572]: false
155.495 +unsat
156.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
156.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_01 Tue Oct 20 10:11:30 2009 +0200
156.3 @@ -0,0 +1,13 @@
156.4 +(benchmark Isabelle
156.5 +:extrasorts ( T1)
156.6 +:extrafuns (
156.7 + (uf_1 Int T1)
156.8 + (uf_2 T1 Int)
156.9 + (uf_3 T1)
156.10 + )
156.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
156.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
156.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
156.14 +:assumption (= (uf_1 (* 2 (uf_2 uf_3))) (uf_1 1))
156.15 +:formula true
156.16 +)
157.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
157.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_01.proof Tue Oct 20 10:11:30 2009 +0200
157.3 @@ -0,0 +1,246 @@
157.4 +#2 := false
157.5 +#9 := 0::int
157.6 +decl uf_2 :: (-> T1 int)
157.7 +decl uf_1 :: (-> int T1)
157.8 +decl uf_3 :: T1
157.9 +#22 := uf_3
157.10 +#23 := (uf_2 uf_3)
157.11 +#21 := 2::int
157.12 +#24 := (* 2::int #23)
157.13 +#25 := (uf_1 #24)
157.14 +#293 := (uf_2 #25)
157.15 +#292 := -1::int
157.16 +#296 := (* -1::int #293)
157.17 +#275 := (+ #24 #296)
157.18 +#258 := (<= #275 0::int)
157.19 +#611 := (= #275 0::int)
157.20 +#204 := (>= #24 0::int)
157.21 +#596 := (= #293 0::int)
157.22 +#541 := (not #596)
157.23 +#300 := (<= #293 0::int)
157.24 +#460 := (not #300)
157.25 +#26 := 1::int
157.26 +#570 := (>= #293 1::int)
157.27 +#569 := (= #293 1::int)
157.28 +#27 := (uf_1 1::int)
157.29 +#318 := (uf_2 #27)
157.30 +#311 := (= #318 1::int)
157.31 +#10 := (:var 0 int)
157.32 +#12 := (uf_1 #10)
157.33 +#627 := (pattern #12)
157.34 +#70 := (>= #10 0::int)
157.35 +#71 := (not #70)
157.36 +#13 := (uf_2 #12)
157.37 +#52 := (= #10 #13)
157.38 +#77 := (or #52 #71)
157.39 +#628 := (forall (vars (?x2 int)) (:pat #627) #77)
157.40 +#82 := (forall (vars (?x2 int)) #77)
157.41 +#631 := (iff #82 #628)
157.42 +#629 := (iff #77 #77)
157.43 +#630 := [refl]: #629
157.44 +#632 := [quant-intro #630]: #631
157.45 +#132 := (~ #82 #82)
157.46 +#144 := (~ #77 #77)
157.47 +#145 := [refl]: #144
157.48 +#130 := [nnf-pos #145]: #132
157.49 +#14 := (= #13 #10)
157.50 +#11 := (<= 0::int #10)
157.51 +#15 := (implies #11 #14)
157.52 +#16 := (forall (vars (?x2 int)) #15)
157.53 +#85 := (iff #16 #82)
157.54 +#59 := (not #11)
157.55 +#60 := (or #59 #52)
157.56 +#65 := (forall (vars (?x2 int)) #60)
157.57 +#83 := (iff #65 #82)
157.58 +#80 := (iff #60 #77)
157.59 +#74 := (or #71 #52)
157.60 +#78 := (iff #74 #77)
157.61 +#79 := [rewrite]: #78
157.62 +#75 := (iff #60 #74)
157.63 +#72 := (iff #59 #71)
157.64 +#68 := (iff #11 #70)
157.65 +#69 := [rewrite]: #68
157.66 +#73 := [monotonicity #69]: #72
157.67 +#76 := [monotonicity #73]: #75
157.68 +#81 := [trans #76 #79]: #80
157.69 +#84 := [quant-intro #81]: #83
157.70 +#66 := (iff #16 #65)
157.71 +#63 := (iff #15 #60)
157.72 +#56 := (implies #11 #52)
157.73 +#61 := (iff #56 #60)
157.74 +#62 := [rewrite]: #61
157.75 +#57 := (iff #15 #56)
157.76 +#54 := (iff #14 #52)
157.77 +#55 := [rewrite]: #54
157.78 +#58 := [monotonicity #55]: #57
157.79 +#64 := [trans #58 #62]: #63
157.80 +#67 := [quant-intro #64]: #66
157.81 +#86 := [trans #67 #84]: #85
157.82 +#51 := [asserted]: #16
157.83 +#87 := [mp #51 #86]: #82
157.84 +#146 := [mp~ #87 #130]: #82
157.85 +#633 := [mp #146 #632]: #628
157.86 +#612 := (not #628)
157.87 +#575 := (or #612 #311)
157.88 +#316 := (>= 1::int 0::int)
157.89 +#317 := (not #316)
157.90 +#211 := (= 1::int #318)
157.91 +#588 := (or #211 #317)
157.92 +#576 := (or #612 #588)
157.93 +#572 := (iff #576 #575)
157.94 +#578 := (iff #575 #575)
157.95 +#573 := [rewrite]: #578
157.96 +#585 := (iff #588 #311)
157.97 +#583 := (or #311 false)
157.98 +#584 := (iff #583 #311)
157.99 +#581 := [rewrite]: #584
157.100 +#297 := (iff #588 #583)
157.101 +#304 := (iff #317 false)
157.102 +#1 := true
157.103 +#587 := (not true)
157.104 +#302 := (iff #587 false)
157.105 +#303 := [rewrite]: #302
157.106 +#591 := (iff #317 #587)
157.107 +#586 := (iff #316 true)
157.108 +#590 := [rewrite]: #586
157.109 +#301 := [monotonicity #590]: #591
157.110 +#582 := [trans #301 #303]: #304
157.111 +#589 := (iff #211 #311)
157.112 +#312 := [rewrite]: #589
157.113 +#580 := [monotonicity #312 #582]: #297
157.114 +#574 := [trans #580 #581]: #585
157.115 +#577 := [monotonicity #574]: #572
157.116 +#579 := [trans #577 #573]: #572
157.117 +#571 := [quant-inst]: #576
157.118 +#420 := [mp #571 #579]: #575
157.119 +#437 := [unit-resolution #420 #633]: #311
157.120 +#452 := (= #293 #318)
157.121 +#28 := (= #25 #27)
157.122 +#129 := [asserted]: #28
157.123 +#454 := [monotonicity #129]: #452
157.124 +#455 := [trans #454 #437]: #569
157.125 +#448 := (not #569)
157.126 +#456 := (or #448 #570)
157.127 +#457 := [th-lemma]: #456
157.128 +#458 := [unit-resolution #457 #455]: #570
157.129 +#459 := (not #570)
157.130 +#553 := (or #459 #460)
157.131 +#550 := [th-lemma]: #553
157.132 +#554 := [unit-resolution #550 #458]: #460
157.133 +#543 := (or #541 #300)
157.134 +#535 := [th-lemma]: #543
157.135 +#532 := [unit-resolution #535 #554]: #541
157.136 +#598 := (or #204 #596)
157.137 +#18 := (= #13 0::int)
157.138 +#118 := (or #18 #70)
157.139 +#634 := (forall (vars (?x3 int)) (:pat #627) #118)
157.140 +#123 := (forall (vars (?x3 int)) #118)
157.141 +#637 := (iff #123 #634)
157.142 +#635 := (iff #118 #118)
157.143 +#636 := [refl]: #635
157.144 +#638 := [quant-intro #636]: #637
157.145 +#133 := (~ #123 #123)
157.146 +#147 := (~ #118 #118)
157.147 +#148 := [refl]: #147
157.148 +#134 := [nnf-pos #148]: #133
157.149 +#17 := (< #10 0::int)
157.150 +#19 := (implies #17 #18)
157.151 +#20 := (forall (vars (?x3 int)) #19)
157.152 +#126 := (iff #20 #123)
157.153 +#89 := (= 0::int #13)
157.154 +#95 := (not #17)
157.155 +#96 := (or #95 #89)
157.156 +#101 := (forall (vars (?x3 int)) #96)
157.157 +#124 := (iff #101 #123)
157.158 +#121 := (iff #96 #118)
157.159 +#115 := (or #70 #18)
157.160 +#119 := (iff #115 #118)
157.161 +#120 := [rewrite]: #119
157.162 +#116 := (iff #96 #115)
157.163 +#113 := (iff #89 #18)
157.164 +#114 := [rewrite]: #113
157.165 +#111 := (iff #95 #70)
157.166 +#106 := (not #71)
157.167 +#109 := (iff #106 #70)
157.168 +#110 := [rewrite]: #109
157.169 +#107 := (iff #95 #106)
157.170 +#104 := (iff #17 #71)
157.171 +#105 := [rewrite]: #104
157.172 +#108 := [monotonicity #105]: #107
157.173 +#112 := [trans #108 #110]: #111
157.174 +#117 := [monotonicity #112 #114]: #116
157.175 +#122 := [trans #117 #120]: #121
157.176 +#125 := [quant-intro #122]: #124
157.177 +#102 := (iff #20 #101)
157.178 +#99 := (iff #19 #96)
157.179 +#92 := (implies #17 #89)
157.180 +#97 := (iff #92 #96)
157.181 +#98 := [rewrite]: #97
157.182 +#93 := (iff #19 #92)
157.183 +#90 := (iff #18 #89)
157.184 +#91 := [rewrite]: #90
157.185 +#94 := [monotonicity #91]: #93
157.186 +#100 := [trans #94 #98]: #99
157.187 +#103 := [quant-intro #100]: #102
157.188 +#127 := [trans #103 #125]: #126
157.189 +#88 := [asserted]: #20
157.190 +#128 := [mp #88 #127]: #123
157.191 +#149 := [mp~ #128 #134]: #123
157.192 +#639 := [mp #149 #638]: #634
157.193 +#595 := (not #634)
157.194 +#601 := (or #595 #204 #596)
157.195 +#597 := (or #596 #204)
157.196 +#238 := (or #595 #597)
157.197 +#606 := (iff #238 #601)
157.198 +#604 := (or #595 #598)
157.199 +#605 := (iff #604 #601)
157.200 +#603 := [rewrite]: #605
157.201 +#243 := (iff #238 #604)
157.202 +#599 := (iff #597 #598)
157.203 +#600 := [rewrite]: #599
157.204 +#244 := [monotonicity #600]: #243
157.205 +#592 := [trans #244 #603]: #606
157.206 +#602 := [quant-inst]: #238
157.207 +#593 := [mp #602 #592]: #601
157.208 +#534 := [unit-resolution #593 #639]: #598
157.209 +#544 := [unit-resolution #534 #532]: #204
157.210 +#290 := (not #204)
157.211 +#281 := (or #290 #611)
157.212 +#618 := (or #612 #290 #611)
157.213 +#294 := (= #24 #293)
157.214 +#295 := (or #294 #290)
157.215 +#608 := (or #612 #295)
157.216 +#594 := (iff #608 #618)
157.217 +#272 := (or #612 #281)
157.218 +#610 := (iff #272 #618)
157.219 +#252 := [rewrite]: #610
157.220 +#609 := (iff #608 #272)
157.221 +#616 := (iff #295 #281)
157.222 +#400 := (or #611 #290)
157.223 +#614 := (iff #400 #281)
157.224 +#615 := [rewrite]: #614
157.225 +#607 := (iff #295 #400)
157.226 +#613 := (iff #294 #611)
157.227 +#269 := [rewrite]: #613
157.228 +#280 := [monotonicity #269]: #607
157.229 +#617 := [trans #280 #615]: #616
157.230 +#268 := [monotonicity #617]: #609
157.231 +#256 := [trans #268 #252]: #594
157.232 +#267 := [quant-inst]: #608
157.233 +#257 := [mp #267 #256]: #618
157.234 +#545 := [unit-resolution #257 #633]: #281
157.235 +#546 := [unit-resolution #545 #544]: #611
157.236 +#542 := (not #611)
157.237 +#547 := (or #542 #258)
157.238 +#536 := [th-lemma]: #547
157.239 +#537 := [unit-resolution #536 #546]: #258
157.240 +#259 := (>= #275 0::int)
157.241 +#538 := (or #542 #259)
157.242 +#539 := [th-lemma]: #538
157.243 +#533 := [unit-resolution #539 #546]: #259
157.244 +#563 := (<= #293 1::int)
157.245 +#540 := (or #448 #563)
157.246 +#524 := [th-lemma]: #540
157.247 +#525 := [unit-resolution #524 #455]: #563
157.248 +[th-lemma #458 #525 #533 #537]: false
157.249 +unsat
158.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
158.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_02 Tue Oct 20 10:11:30 2009 +0200
158.3 @@ -0,0 +1,14 @@
158.4 +(benchmark Isabelle
158.5 +:extrasorts ( T1)
158.6 +:extrafuns (
158.7 + (uf_1 Int T1)
158.8 + (uf_2 T1 Int)
158.9 + (uf_3 T1)
158.10 + )
158.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
158.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
158.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
158.14 +:assumption (< (uf_2 uf_3) 3)
158.15 +:assumption (not (< (uf_2 (uf_1 (* 2 (uf_2 uf_3)))) 7))
158.16 +:formula true
158.17 +)
159.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
159.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_02.proof Tue Oct 20 10:11:30 2009 +0200
159.3 @@ -0,0 +1,199 @@
159.4 +#2 := false
159.5 +#23 := 3::int
159.6 +decl uf_2 :: (-> T1 int)
159.7 +decl uf_3 :: T1
159.8 +#21 := uf_3
159.9 +#22 := (uf_2 uf_3)
159.10 +#137 := (>= #22 3::int)
159.11 +#135 := (not #137)
159.12 +#24 := (< #22 3::int)
159.13 +#136 := (iff #24 #135)
159.14 +#138 := [rewrite]: #136
159.15 +#132 := [asserted]: #24
159.16 +#139 := [mp #132 #138]: #135
159.17 +#9 := 0::int
159.18 +decl uf_1 :: (-> int T1)
159.19 +#25 := 2::int
159.20 +#26 := (* 2::int #22)
159.21 +#27 := (uf_1 #26)
159.22 +#28 := (uf_2 #27)
159.23 +#297 := -1::int
159.24 +#633 := (* -1::int #28)
159.25 +#635 := (+ #26 #633)
159.26 +#278 := (>= #635 0::int)
159.27 +#291 := (= #635 0::int)
159.28 +#315 := (>= #26 0::int)
159.29 +#279 := (= #28 0::int)
159.30 +#627 := (not #279)
159.31 +#624 := (<= #28 0::int)
159.32 +#281 := (not #624)
159.33 +#29 := 7::int
159.34 +#143 := (>= #28 7::int)
159.35 +#30 := (< #28 7::int)
159.36 +#31 := (not #30)
159.37 +#150 := (iff #31 #143)
159.38 +#141 := (not #143)
159.39 +#145 := (not #141)
159.40 +#148 := (iff #145 #143)
159.41 +#149 := [rewrite]: #148
159.42 +#146 := (iff #31 #145)
159.43 +#142 := (iff #30 #141)
159.44 +#144 := [rewrite]: #142
159.45 +#147 := [monotonicity #144]: #146
159.46 +#151 := [trans #147 #149]: #150
159.47 +#133 := [asserted]: #31
159.48 +#152 := [mp #133 #151]: #143
159.49 +#618 := (or #281 #141)
159.50 +#265 := [th-lemma]: #618
159.51 +#266 := [unit-resolution #265 #152]: #281
159.52 +#625 := (or #627 #624)
159.53 +#628 := [th-lemma]: #625
159.54 +#614 := [unit-resolution #628 #266]: #627
159.55 +#10 := (:var 0 int)
159.56 +#12 := (uf_1 #10)
159.57 +#649 := (pattern #12)
159.58 +#73 := (>= #10 0::int)
159.59 +#13 := (uf_2 #12)
159.60 +#18 := (= #13 0::int)
159.61 +#121 := (or #18 #73)
159.62 +#656 := (forall (vars (?x3 int)) (:pat #649) #121)
159.63 +#126 := (forall (vars (?x3 int)) #121)
159.64 +#659 := (iff #126 #656)
159.65 +#657 := (iff #121 #121)
159.66 +#658 := [refl]: #657
159.67 +#660 := [quant-intro #658]: #659
159.68 +#154 := (~ #126 #126)
159.69 +#170 := (~ #121 #121)
159.70 +#171 := [refl]: #170
159.71 +#155 := [nnf-pos #171]: #154
159.72 +#17 := (< #10 0::int)
159.73 +#19 := (implies #17 #18)
159.74 +#20 := (forall (vars (?x3 int)) #19)
159.75 +#129 := (iff #20 #126)
159.76 +#92 := (= 0::int #13)
159.77 +#98 := (not #17)
159.78 +#99 := (or #98 #92)
159.79 +#104 := (forall (vars (?x3 int)) #99)
159.80 +#127 := (iff #104 #126)
159.81 +#124 := (iff #99 #121)
159.82 +#118 := (or #73 #18)
159.83 +#122 := (iff #118 #121)
159.84 +#123 := [rewrite]: #122
159.85 +#119 := (iff #99 #118)
159.86 +#116 := (iff #92 #18)
159.87 +#117 := [rewrite]: #116
159.88 +#114 := (iff #98 #73)
159.89 +#74 := (not #73)
159.90 +#109 := (not #74)
159.91 +#112 := (iff #109 #73)
159.92 +#113 := [rewrite]: #112
159.93 +#110 := (iff #98 #109)
159.94 +#107 := (iff #17 #74)
159.95 +#108 := [rewrite]: #107
159.96 +#111 := [monotonicity #108]: #110
159.97 +#115 := [trans #111 #113]: #114
159.98 +#120 := [monotonicity #115 #117]: #119
159.99 +#125 := [trans #120 #123]: #124
159.100 +#128 := [quant-intro #125]: #127
159.101 +#105 := (iff #20 #104)
159.102 +#102 := (iff #19 #99)
159.103 +#95 := (implies #17 #92)
159.104 +#100 := (iff #95 #99)
159.105 +#101 := [rewrite]: #100
159.106 +#96 := (iff #19 #95)
159.107 +#93 := (iff #18 #92)
159.108 +#94 := [rewrite]: #93
159.109 +#97 := [monotonicity #94]: #96
159.110 +#103 := [trans #97 #101]: #102
159.111 +#106 := [quant-intro #103]: #105
159.112 +#130 := [trans #106 #128]: #129
159.113 +#91 := [asserted]: #20
159.114 +#131 := [mp #91 #130]: #126
159.115 +#172 := [mp~ #131 #155]: #126
159.116 +#661 := [mp #172 #660]: #656
159.117 +#619 := (not #656)
159.118 +#620 := (or #619 #279 #315)
159.119 +#280 := (or #279 #315)
159.120 +#621 := (or #619 #280)
159.121 +#617 := (iff #621 #620)
159.122 +#623 := [rewrite]: #617
159.123 +#622 := [quant-inst]: #621
159.124 +#260 := [mp #622 #623]: #620
159.125 +#615 := [unit-resolution #260 #661 #614]: #315
159.126 +#316 := (not #315)
159.127 +#302 := (or #291 #316)
159.128 +#55 := (= #10 #13)
159.129 +#80 := (or #55 #74)
159.130 +#650 := (forall (vars (?x2 int)) (:pat #649) #80)
159.131 +#85 := (forall (vars (?x2 int)) #80)
159.132 +#653 := (iff #85 #650)
159.133 +#651 := (iff #80 #80)
159.134 +#652 := [refl]: #651
159.135 +#654 := [quant-intro #652]: #653
159.136 +#153 := (~ #85 #85)
159.137 +#167 := (~ #80 #80)
159.138 +#168 := [refl]: #167
159.139 +#134 := [nnf-pos #168]: #153
159.140 +#14 := (= #13 #10)
159.141 +#11 := (<= 0::int #10)
159.142 +#15 := (implies #11 #14)
159.143 +#16 := (forall (vars (?x2 int)) #15)
159.144 +#88 := (iff #16 #85)
159.145 +#62 := (not #11)
159.146 +#63 := (or #62 #55)
159.147 +#68 := (forall (vars (?x2 int)) #63)
159.148 +#86 := (iff #68 #85)
159.149 +#83 := (iff #63 #80)
159.150 +#77 := (or #74 #55)
159.151 +#81 := (iff #77 #80)
159.152 +#82 := [rewrite]: #81
159.153 +#78 := (iff #63 #77)
159.154 +#75 := (iff #62 #74)
159.155 +#71 := (iff #11 #73)
159.156 +#72 := [rewrite]: #71
159.157 +#76 := [monotonicity #72]: #75
159.158 +#79 := [monotonicity #76]: #78
159.159 +#84 := [trans #79 #82]: #83
159.160 +#87 := [quant-intro #84]: #86
159.161 +#69 := (iff #16 #68)
159.162 +#66 := (iff #15 #63)
159.163 +#59 := (implies #11 #55)
159.164 +#64 := (iff #59 #63)
159.165 +#65 := [rewrite]: #64
159.166 +#60 := (iff #15 #59)
159.167 +#57 := (iff #14 #55)
159.168 +#58 := [rewrite]: #57
159.169 +#61 := [monotonicity #58]: #60
159.170 +#67 := [trans #61 #65]: #66
159.171 +#70 := [quant-intro #67]: #69
159.172 +#89 := [trans #70 #87]: #88
159.173 +#54 := [asserted]: #16
159.174 +#90 := [mp #54 #89]: #85
159.175 +#169 := [mp~ #90 #134]: #85
159.176 +#655 := [mp #169 #654]: #650
159.177 +#637 := (not #650)
159.178 +#638 := (or #637 #291 #316)
159.179 +#314 := (= #26 #28)
159.180 +#318 := (or #314 #316)
159.181 +#639 := (or #637 #318)
159.182 +#290 := (iff #639 #638)
159.183 +#640 := (or #637 #302)
159.184 +#294 := (iff #640 #638)
159.185 +#631 := [rewrite]: #294
159.186 +#630 := (iff #639 #640)
159.187 +#303 := (iff #318 #302)
159.188 +#422 := (iff #314 #291)
159.189 +#629 := [rewrite]: #422
159.190 +#636 := [monotonicity #629]: #303
159.191 +#289 := [monotonicity #636]: #630
159.192 +#632 := [trans #289 #631]: #290
159.193 +#634 := [quant-inst]: #639
159.194 +#274 := [mp #634 #632]: #638
159.195 +#322 := [unit-resolution #274 #655]: #302
159.196 +#337 := [unit-resolution #322 #615]: #291
159.197 +#338 := (not #291)
159.198 +#339 := (or #338 #278)
159.199 +#340 := [th-lemma]: #339
159.200 +#232 := [unit-resolution #340 #337]: #278
159.201 +[th-lemma #152 #232 #139]: false
159.202 +unsat
160.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
160.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_03 Tue Oct 20 10:11:30 2009 +0200
160.3 @@ -0,0 +1,13 @@
160.4 +(benchmark Isabelle
160.5 +:extrasorts ( T1)
160.6 +:extrafuns (
160.7 + (uf_1 Int T1)
160.8 + (uf_2 T1 Int)
160.9 + (uf_3 T1)
160.10 + )
160.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
160.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
160.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
160.14 +:assumption (not (let (?x4 (uf_1 (+ 1 (uf_2 uf_3)))) (< (uf_2 (uf_1 (* 0 (uf_2 ?x4)))) (uf_2 (uf_1 (- (uf_2 ?x4) (uf_2 uf_3)))))))
160.15 +:formula true
160.16 +)
161.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
161.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_03.proof Tue Oct 20 10:11:30 2009 +0200
161.3 @@ -0,0 +1,367 @@
161.4 +#2 := false
161.5 +#9 := 0::int
161.6 +decl uf_2 :: (-> T1 int)
161.7 +decl uf_3 :: T1
161.8 +#22 := uf_3
161.9 +#23 := (uf_2 uf_3)
161.10 +#469 := (= #23 0::int)
161.11 +decl uf_1 :: (-> int T1)
161.12 +#251 := (uf_1 #23)
161.13 +#557 := (uf_2 #251)
161.14 +#558 := (= #557 0::int)
161.15 +#556 := (>= #23 0::int)
161.16 +#477 := (not #556)
161.17 +#144 := -1::int
161.18 +#348 := (>= #23 -1::int)
161.19 +#628 := (not #348)
161.20 +#21 := 1::int
161.21 +#24 := (+ 1::int #23)
161.22 +#25 := (uf_1 #24)
161.23 +#26 := (uf_2 #25)
161.24 +#632 := (* -1::int #26)
161.25 +#636 := (+ #23 #632)
161.26 +#633 := (= #636 -1::int)
161.27 +#471 := (not #633)
161.28 +#613 := (<= #636 -1::int)
161.29 +#527 := (not #613)
161.30 +#145 := (* -1::int #23)
161.31 +#146 := (+ #145 #26)
161.32 +#149 := (uf_1 #146)
161.33 +#152 := (uf_2 #149)
161.34 +#504 := (+ #632 #152)
161.35 +#505 := (+ #23 #504)
161.36 +#573 := (>= #505 0::int)
161.37 +#502 := (= #505 0::int)
161.38 +#599 := (<= #636 0::int)
161.39 +#526 := [hypothesis]: #613
161.40 +#491 := (or #527 #599)
161.41 +#515 := [th-lemma]: #491
161.42 +#516 := [unit-resolution #515 #526]: #599
161.43 +#587 := (not #599)
161.44 +#578 := (or #502 #587)
161.45 +#10 := (:var 0 int)
161.46 +#12 := (uf_1 #10)
161.47 +#673 := (pattern #12)
161.48 +#76 := (>= #10 0::int)
161.49 +#77 := (not #76)
161.50 +#13 := (uf_2 #12)
161.51 +#58 := (= #10 #13)
161.52 +#83 := (or #58 #77)
161.53 +#674 := (forall (vars (?x2 int)) (:pat #673) #83)
161.54 +#88 := (forall (vars (?x2 int)) #83)
161.55 +#677 := (iff #88 #674)
161.56 +#675 := (iff #83 #83)
161.57 +#676 := [refl]: #675
161.58 +#678 := [quant-intro #676]: #677
161.59 +#179 := (~ #88 #88)
161.60 +#191 := (~ #83 #83)
161.61 +#192 := [refl]: #191
161.62 +#177 := [nnf-pos #192]: #179
161.63 +#14 := (= #13 #10)
161.64 +#11 := (<= 0::int #10)
161.65 +#15 := (implies #11 #14)
161.66 +#16 := (forall (vars (?x2 int)) #15)
161.67 +#91 := (iff #16 #88)
161.68 +#65 := (not #11)
161.69 +#66 := (or #65 #58)
161.70 +#71 := (forall (vars (?x2 int)) #66)
161.71 +#89 := (iff #71 #88)
161.72 +#86 := (iff #66 #83)
161.73 +#80 := (or #77 #58)
161.74 +#84 := (iff #80 #83)
161.75 +#85 := [rewrite]: #84
161.76 +#81 := (iff #66 #80)
161.77 +#78 := (iff #65 #77)
161.78 +#74 := (iff #11 #76)
161.79 +#75 := [rewrite]: #74
161.80 +#79 := [monotonicity #75]: #78
161.81 +#82 := [monotonicity #79]: #81
161.82 +#87 := [trans #82 #85]: #86
161.83 +#90 := [quant-intro #87]: #89
161.84 +#72 := (iff #16 #71)
161.85 +#69 := (iff #15 #66)
161.86 +#62 := (implies #11 #58)
161.87 +#67 := (iff #62 #66)
161.88 +#68 := [rewrite]: #67
161.89 +#63 := (iff #15 #62)
161.90 +#60 := (iff #14 #58)
161.91 +#61 := [rewrite]: #60
161.92 +#64 := [monotonicity #61]: #63
161.93 +#70 := [trans #64 #68]: #69
161.94 +#73 := [quant-intro #70]: #72
161.95 +#92 := [trans #73 #90]: #91
161.96 +#57 := [asserted]: #16
161.97 +#93 := [mp #57 #92]: #88
161.98 +#193 := [mp~ #93 #177]: #88
161.99 +#679 := [mp #193 #678]: #674
161.100 +#644 := (not #674)
161.101 +#591 := (or #644 #502 #587)
161.102 +#498 := (>= #146 0::int)
161.103 +#500 := (not #498)
161.104 +#501 := (= #146 #152)
161.105 +#494 := (or #501 #500)
161.106 +#592 := (or #644 #494)
161.107 +#579 := (iff #592 #591)
161.108 +#593 := (or #644 #578)
161.109 +#584 := (iff #593 #591)
161.110 +#585 := [rewrite]: #584
161.111 +#582 := (iff #592 #593)
161.112 +#580 := (iff #494 #578)
161.113 +#589 := (iff #500 #587)
161.114 +#596 := (iff #498 #599)
161.115 +#600 := [rewrite]: #596
161.116 +#581 := [monotonicity #600]: #589
161.117 +#503 := (iff #501 #502)
161.118 +#506 := [rewrite]: #503
161.119 +#590 := [monotonicity #506 #581]: #580
161.120 +#583 := [monotonicity #590]: #582
161.121 +#586 := [trans #583 #585]: #579
161.122 +#588 := [quant-inst]: #592
161.123 +#570 := [mp #588 #586]: #591
161.124 +#511 := [unit-resolution #570 #679]: #578
161.125 +#517 := [unit-resolution #511 #516]: #502
161.126 +#485 := (not #502)
161.127 +#492 := (or #485 #573)
161.128 +#451 := [th-lemma]: #492
161.129 +#482 := [unit-resolution #451 #517]: #573
161.130 +#554 := (<= #152 0::int)
161.131 +#163 := (* -1::int #152)
161.132 +#138 := (uf_1 0::int)
161.133 +#141 := (uf_2 #138)
161.134 +#164 := (+ #141 #163)
161.135 +#162 := (>= #164 0::int)
161.136 +#30 := (- #26 #23)
161.137 +#31 := (uf_1 #30)
161.138 +#32 := (uf_2 #31)
161.139 +#27 := (* 0::int #26)
161.140 +#28 := (uf_1 #27)
161.141 +#29 := (uf_2 #28)
161.142 +#33 := (< #29 #32)
161.143 +#34 := (not #33)
161.144 +#174 := (iff #34 #162)
161.145 +#155 := (< #141 #152)
161.146 +#158 := (not #155)
161.147 +#172 := (iff #158 #162)
161.148 +#161 := (not #162)
161.149 +#167 := (not #161)
161.150 +#170 := (iff #167 #162)
161.151 +#171 := [rewrite]: #170
161.152 +#168 := (iff #158 #167)
161.153 +#165 := (iff #155 #161)
161.154 +#166 := [rewrite]: #165
161.155 +#169 := [monotonicity #166]: #168
161.156 +#173 := [trans #169 #171]: #172
161.157 +#159 := (iff #34 #158)
161.158 +#156 := (iff #33 #155)
161.159 +#153 := (= #32 #152)
161.160 +#150 := (= #31 #149)
161.161 +#147 := (= #30 #146)
161.162 +#148 := [rewrite]: #147
161.163 +#151 := [monotonicity #148]: #150
161.164 +#154 := [monotonicity #151]: #153
161.165 +#142 := (= #29 #141)
161.166 +#139 := (= #28 #138)
161.167 +#136 := (= #27 0::int)
161.168 +#137 := [rewrite]: #136
161.169 +#140 := [monotonicity #137]: #139
161.170 +#143 := [monotonicity #140]: #142
161.171 +#157 := [monotonicity #143 #154]: #156
161.172 +#160 := [monotonicity #157]: #159
161.173 +#175 := [trans #160 #173]: #174
161.174 +#135 := [asserted]: #34
161.175 +#176 := [mp #135 #175]: #162
161.176 +#651 := (<= #141 0::int)
161.177 +#662 := (= #141 0::int)
161.178 +#645 := (or #644 #662)
161.179 +#316 := (>= 0::int 0::int)
161.180 +#446 := (not #316)
161.181 +#328 := (= 0::int #141)
161.182 +#660 := (or #328 #446)
161.183 +#646 := (or #644 #660)
161.184 +#647 := (iff #646 #645)
161.185 +#648 := (iff #645 #645)
161.186 +#650 := [rewrite]: #648
161.187 +#642 := (iff #660 #662)
161.188 +#640 := (or #662 false)
161.189 +#305 := (iff #640 #662)
161.190 +#306 := [rewrite]: #305
161.191 +#303 := (iff #660 #640)
161.192 +#656 := (iff #446 false)
161.193 +#1 := true
161.194 +#654 := (not true)
161.195 +#655 := (iff #654 false)
161.196 +#315 := [rewrite]: #655
161.197 +#314 := (iff #446 #654)
161.198 +#658 := (iff #316 true)
161.199 +#664 := [rewrite]: #658
161.200 +#319 := [monotonicity #664]: #314
161.201 +#299 := [trans #319 #315]: #656
161.202 +#661 := (iff #328 #662)
161.203 +#663 := [rewrite]: #661
161.204 +#304 := [monotonicity #663 #299]: #303
161.205 +#643 := [trans #304 #306]: #642
161.206 +#285 := [monotonicity #643]: #647
161.207 +#290 := [trans #285 #650]: #647
161.208 +#641 := [quant-inst]: #646
161.209 +#291 := [mp #641 #290]: #645
161.210 +#484 := [unit-resolution #291 #679]: #662
161.211 +#486 := (not #662)
161.212 +#493 := (or #486 #651)
161.213 +#495 := [th-lemma]: #493
161.214 +#496 := [unit-resolution #495 #484]: #651
161.215 +#497 := (not #651)
161.216 +#507 := (or #554 #497 #161)
161.217 +#487 := [th-lemma]: #507
161.218 +#508 := [unit-resolution #487 #496 #176]: #554
161.219 +#463 := [th-lemma #508 #526 #482]: false
161.220 +#464 := [lemma #463]: #527
161.221 +#472 := (or #471 #613)
161.222 +#473 := [th-lemma]: #472
161.223 +#474 := [unit-resolution #473 #464]: #471
161.224 +#631 := (or #628 #633)
161.225 +#618 := (or #644 #628 #633)
161.226 +#634 := (>= #24 0::int)
161.227 +#635 := (not #634)
161.228 +#357 := (= #24 #26)
161.229 +#358 := (or #357 #635)
161.230 +#623 := (or #644 #358)
161.231 +#610 := (iff #623 #618)
161.232 +#619 := (or #644 #631)
161.233 +#467 := (iff #619 #618)
161.234 +#468 := [rewrite]: #467
161.235 +#625 := (iff #623 #619)
161.236 +#622 := (iff #358 #631)
161.237 +#626 := (or #633 #628)
161.238 +#620 := (iff #626 #631)
161.239 +#621 := [rewrite]: #620
161.240 +#630 := (iff #358 #626)
161.241 +#629 := (iff #635 #628)
161.242 +#349 := (iff #634 #348)
161.243 +#350 := [rewrite]: #349
161.244 +#344 := [monotonicity #350]: #629
161.245 +#637 := (iff #357 #633)
161.246 +#347 := [rewrite]: #637
161.247 +#627 := [monotonicity #347 #344]: #630
161.248 +#617 := [trans #627 #621]: #622
161.249 +#466 := [monotonicity #617]: #625
161.250 +#611 := [trans #466 #468]: #610
161.251 +#624 := [quant-inst]: #623
161.252 +#612 := [mp #624 #611]: #618
161.253 +#475 := [unit-resolution #612 #679]: #631
161.254 +#476 := [unit-resolution #475 #474]: #628
161.255 +#478 := (or #477 #348)
161.256 +#479 := [th-lemma]: #478
161.257 +#480 := [unit-resolution #479 #476]: #477
161.258 +#560 := (or #556 #558)
161.259 +#18 := (= #13 0::int)
161.260 +#124 := (or #18 #76)
161.261 +#680 := (forall (vars (?x3 int)) (:pat #673) #124)
161.262 +#129 := (forall (vars (?x3 int)) #124)
161.263 +#683 := (iff #129 #680)
161.264 +#681 := (iff #124 #124)
161.265 +#682 := [refl]: #681
161.266 +#684 := [quant-intro #682]: #683
161.267 +#180 := (~ #129 #129)
161.268 +#194 := (~ #124 #124)
161.269 +#195 := [refl]: #194
161.270 +#181 := [nnf-pos #195]: #180
161.271 +#17 := (< #10 0::int)
161.272 +#19 := (implies #17 #18)
161.273 +#20 := (forall (vars (?x3 int)) #19)
161.274 +#132 := (iff #20 #129)
161.275 +#95 := (= 0::int #13)
161.276 +#101 := (not #17)
161.277 +#102 := (or #101 #95)
161.278 +#107 := (forall (vars (?x3 int)) #102)
161.279 +#130 := (iff #107 #129)
161.280 +#127 := (iff #102 #124)
161.281 +#121 := (or #76 #18)
161.282 +#125 := (iff #121 #124)
161.283 +#126 := [rewrite]: #125
161.284 +#122 := (iff #102 #121)
161.285 +#119 := (iff #95 #18)
161.286 +#120 := [rewrite]: #119
161.287 +#117 := (iff #101 #76)
161.288 +#112 := (not #77)
161.289 +#115 := (iff #112 #76)
161.290 +#116 := [rewrite]: #115
161.291 +#113 := (iff #101 #112)
161.292 +#110 := (iff #17 #77)
161.293 +#111 := [rewrite]: #110
161.294 +#114 := [monotonicity #111]: #113
161.295 +#118 := [trans #114 #116]: #117
161.296 +#123 := [monotonicity #118 #120]: #122
161.297 +#128 := [trans #123 #126]: #127
161.298 +#131 := [quant-intro #128]: #130
161.299 +#108 := (iff #20 #107)
161.300 +#105 := (iff #19 #102)
161.301 +#98 := (implies #17 #95)
161.302 +#103 := (iff #98 #102)
161.303 +#104 := [rewrite]: #103
161.304 +#99 := (iff #19 #98)
161.305 +#96 := (iff #18 #95)
161.306 +#97 := [rewrite]: #96
161.307 +#100 := [monotonicity #97]: #99
161.308 +#106 := [trans #100 #104]: #105
161.309 +#109 := [quant-intro #106]: #108
161.310 +#133 := [trans #109 #131]: #132
161.311 +#94 := [asserted]: #20
161.312 +#134 := [mp #94 #133]: #129
161.313 +#196 := [mp~ #134 #181]: #129
161.314 +#685 := [mp #196 #684]: #680
161.315 +#604 := (not #680)
161.316 +#562 := (or #604 #556 #558)
161.317 +#559 := (or #558 #556)
161.318 +#540 := (or #604 #559)
161.319 +#542 := (iff #540 #562)
161.320 +#543 := (or #604 #560)
161.321 +#546 := (iff #543 #562)
161.322 +#547 := [rewrite]: #546
161.323 +#544 := (iff #540 #543)
161.324 +#561 := (iff #559 #560)
161.325 +#551 := [rewrite]: #561
161.326 +#545 := [monotonicity #551]: #544
161.327 +#548 := [trans #545 #547]: #542
161.328 +#541 := [quant-inst]: #540
161.329 +#534 := [mp #541 #548]: #562
161.330 +#465 := [unit-resolution #534 #685]: #560
161.331 +#481 := [unit-resolution #465 #480]: #558
161.332 +#443 := (= #23 #557)
161.333 +#337 := (= uf_3 #251)
161.334 +#4 := (:var 0 T1)
161.335 +#5 := (uf_2 #4)
161.336 +#665 := (pattern #5)
161.337 +#6 := (uf_1 #5)
161.338 +#51 := (= #4 #6)
161.339 +#666 := (forall (vars (?x1 T1)) (:pat #665) #51)
161.340 +#54 := (forall (vars (?x1 T1)) #51)
161.341 +#667 := (iff #54 #666)
161.342 +#669 := (iff #666 #666)
161.343 +#670 := [rewrite]: #669
161.344 +#668 := [rewrite]: #667
161.345 +#671 := [trans #668 #670]: #667
161.346 +#188 := (~ #54 #54)
161.347 +#186 := (~ #51 #51)
161.348 +#187 := [refl]: #186
161.349 +#189 := [nnf-pos #187]: #188
161.350 +#7 := (= #6 #4)
161.351 +#8 := (forall (vars (?x1 T1)) #7)
161.352 +#55 := (iff #8 #54)
161.353 +#52 := (iff #7 #51)
161.354 +#53 := [rewrite]: #52
161.355 +#56 := [quant-intro #53]: #55
161.356 +#50 := [asserted]: #8
161.357 +#59 := [mp #50 #56]: #54
161.358 +#190 := [mp~ #59 #189]: #54
161.359 +#672 := [mp #190 #671]: #666
161.360 +#252 := (not #666)
161.361 +#342 := (or #252 #337)
161.362 +#339 := [quant-inst]: #342
161.363 +#442 := [unit-resolution #339 #672]: #337
161.364 +#450 := [monotonicity #442]: #443
161.365 +#452 := [trans #450 #481]: #469
161.366 +#453 := (not #469)
161.367 +#454 := (or #453 #556)
161.368 +#456 := [th-lemma]: #454
161.369 +[unit-resolution #456 #480 #452]: false
161.370 +unsat
162.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
162.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_04 Tue Oct 20 10:11:30 2009 +0200
162.3 @@ -0,0 +1,13 @@
162.4 +(benchmark Isabelle
162.5 +:extrasorts ( T1 T2)
162.6 +:extrafuns (
162.7 + (uf_1 Int T1)
162.8 + (uf_2 T1 Int)
162.9 + (uf_3 T1)
162.10 + )
162.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
162.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
162.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
162.14 +:assumption (not (let (?x4 (uf_1 (+ 1 (uf_2 uf_3)))) (flet ($x5 (if_then_else (< 0 (uf_2 ?x4)) true false)) (or (iff $x5 (= (uf_1 (- (uf_2 ?x4) 1)) uf_3)) $x5))))
162.15 +:formula true
162.16 +)
163.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
163.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_04.proof Tue Oct 20 10:11:30 2009 +0200
163.3 @@ -0,0 +1,302 @@
163.4 +#2 := false
163.5 +#9 := 0::int
163.6 +decl uf_2 :: (-> T1 int)
163.7 +decl uf_1 :: (-> int T1)
163.8 +decl uf_3 :: T1
163.9 +#22 := uf_3
163.10 +#23 := (uf_2 uf_3)
163.11 +#21 := 1::int
163.12 +#24 := (+ 1::int #23)
163.13 +#25 := (uf_1 #24)
163.14 +#26 := (uf_2 #25)
163.15 +#138 := -1::int
163.16 +#139 := (+ -1::int #26)
163.17 +#142 := (uf_1 #139)
163.18 +#289 := (uf_2 #142)
163.19 +#383 := (* -1::int #289)
163.20 +#542 := (+ #23 #383)
163.21 +#544 := (>= #542 0::int)
163.22 +#541 := (= #23 #289)
163.23 +#148 := (= uf_3 #142)
163.24 +#167 := (<= #26 0::int)
163.25 +#168 := (not #167)
163.26 +#174 := (iff #148 #168)
163.27 +#189 := (not #174)
163.28 +#220 := (iff #189 #148)
163.29 +#210 := (not #148)
163.30 +#215 := (not #210)
163.31 +#218 := (iff #215 #148)
163.32 +#219 := [rewrite]: #218
163.33 +#216 := (iff #189 #215)
163.34 +#213 := (iff #174 #210)
163.35 +#207 := (iff #148 false)
163.36 +#211 := (iff #207 #210)
163.37 +#212 := [rewrite]: #211
163.38 +#208 := (iff #174 #207)
163.39 +#205 := (iff #168 false)
163.40 +#1 := true
163.41 +#200 := (not true)
163.42 +#203 := (iff #200 false)
163.43 +#204 := [rewrite]: #203
163.44 +#201 := (iff #168 #200)
163.45 +#198 := (iff #167 true)
163.46 +#179 := (or #168 #174)
163.47 +#182 := (not #179)
163.48 +#27 := (< 0::int #26)
163.49 +#28 := (ite #27 true false)
163.50 +#29 := (- #26 1::int)
163.51 +#30 := (uf_1 #29)
163.52 +#31 := (= #30 uf_3)
163.53 +#32 := (iff #28 #31)
163.54 +#33 := (or #32 #28)
163.55 +#34 := (not #33)
163.56 +#185 := (iff #34 #182)
163.57 +#153 := (iff #27 #148)
163.58 +#159 := (or #27 #153)
163.59 +#164 := (not #159)
163.60 +#183 := (iff #164 #182)
163.61 +#180 := (iff #159 #179)
163.62 +#177 := (iff #153 #174)
163.63 +#171 := (iff #168 #148)
163.64 +#175 := (iff #171 #174)
163.65 +#176 := [rewrite]: #175
163.66 +#172 := (iff #153 #171)
163.67 +#169 := (iff #27 #168)
163.68 +#170 := [rewrite]: #169
163.69 +#173 := [monotonicity #170]: #172
163.70 +#178 := [trans #173 #176]: #177
163.71 +#181 := [monotonicity #170 #178]: #180
163.72 +#184 := [monotonicity #181]: #183
163.73 +#165 := (iff #34 #164)
163.74 +#162 := (iff #33 #159)
163.75 +#156 := (or #153 #27)
163.76 +#160 := (iff #156 #159)
163.77 +#161 := [rewrite]: #160
163.78 +#157 := (iff #33 #156)
163.79 +#136 := (iff #28 #27)
163.80 +#137 := [rewrite]: #136
163.81 +#154 := (iff #32 #153)
163.82 +#151 := (iff #31 #148)
163.83 +#145 := (= #142 uf_3)
163.84 +#149 := (iff #145 #148)
163.85 +#150 := [rewrite]: #149
163.86 +#146 := (iff #31 #145)
163.87 +#143 := (= #30 #142)
163.88 +#140 := (= #29 #139)
163.89 +#141 := [rewrite]: #140
163.90 +#144 := [monotonicity #141]: #143
163.91 +#147 := [monotonicity #144]: #146
163.92 +#152 := [trans #147 #150]: #151
163.93 +#155 := [monotonicity #137 #152]: #154
163.94 +#158 := [monotonicity #155 #137]: #157
163.95 +#163 := [trans #158 #161]: #162
163.96 +#166 := [monotonicity #163]: #165
163.97 +#186 := [trans #166 #184]: #185
163.98 +#135 := [asserted]: #34
163.99 +#187 := [mp #135 #186]: #182
163.100 +#188 := [not-or-elim #187]: #167
163.101 +#199 := [iff-true #188]: #198
163.102 +#202 := [monotonicity #199]: #201
163.103 +#206 := [trans #202 #204]: #205
163.104 +#209 := [monotonicity #206]: #208
163.105 +#214 := [trans #209 #212]: #213
163.106 +#217 := [monotonicity #214]: #216
163.107 +#221 := [trans #217 #219]: #220
163.108 +#190 := [not-or-elim #187]: #189
163.109 +#222 := [mp #190 #221]: #148
163.110 +#624 := [monotonicity #222]: #541
163.111 +#618 := (not #541)
163.112 +#625 := (or #618 #544)
163.113 +#609 := [th-lemma]: #625
163.114 +#610 := [unit-resolution #609 #624]: #544
163.115 +#698 := (* -1::int #26)
163.116 +#355 := (+ #23 #698)
163.117 +#324 := (<= #355 -1::int)
163.118 +#485 := (= #355 -1::int)
163.119 +#367 := (>= #23 -1::int)
163.120 +#533 := (>= #289 0::int)
163.121 +#643 := (= #289 0::int)
163.122 +#659 := (>= #26 1::int)
163.123 +#656 := (not #659)
163.124 +#612 := (or #656 #168)
163.125 +#613 := [th-lemma]: #612
163.126 +#614 := [unit-resolution #613 #188]: #656
163.127 +#10 := (:var 0 int)
163.128 +#12 := (uf_1 #10)
163.129 +#712 := (pattern #12)
163.130 +#76 := (>= #10 0::int)
163.131 +#13 := (uf_2 #12)
163.132 +#18 := (= #13 0::int)
163.133 +#124 := (or #18 #76)
163.134 +#719 := (forall (vars (?x3 int)) (:pat #712) #124)
163.135 +#129 := (forall (vars (?x3 int)) #124)
163.136 +#722 := (iff #129 #719)
163.137 +#720 := (iff #124 #124)
163.138 +#721 := [refl]: #720
163.139 +#723 := [quant-intro #721]: #722
163.140 +#229 := (~ #129 #129)
163.141 +#227 := (~ #124 #124)
163.142 +#228 := [refl]: #227
163.143 +#230 := [nnf-pos #228]: #229
163.144 +#17 := (< #10 0::int)
163.145 +#19 := (implies #17 #18)
163.146 +#20 := (forall (vars (?x3 int)) #19)
163.147 +#132 := (iff #20 #129)
163.148 +#95 := (= 0::int #13)
163.149 +#101 := (not #17)
163.150 +#102 := (or #101 #95)
163.151 +#107 := (forall (vars (?x3 int)) #102)
163.152 +#130 := (iff #107 #129)
163.153 +#127 := (iff #102 #124)
163.154 +#121 := (or #76 #18)
163.155 +#125 := (iff #121 #124)
163.156 +#126 := [rewrite]: #125
163.157 +#122 := (iff #102 #121)
163.158 +#119 := (iff #95 #18)
163.159 +#120 := [rewrite]: #119
163.160 +#117 := (iff #101 #76)
163.161 +#77 := (not #76)
163.162 +#112 := (not #77)
163.163 +#115 := (iff #112 #76)
163.164 +#116 := [rewrite]: #115
163.165 +#113 := (iff #101 #112)
163.166 +#110 := (iff #17 #77)
163.167 +#111 := [rewrite]: #110
163.168 +#114 := [monotonicity #111]: #113
163.169 +#118 := [trans #114 #116]: #117
163.170 +#123 := [monotonicity #118 #120]: #122
163.171 +#128 := [trans #123 #126]: #127
163.172 +#131 := [quant-intro #128]: #130
163.173 +#108 := (iff #20 #107)
163.174 +#105 := (iff #19 #102)
163.175 +#98 := (implies #17 #95)
163.176 +#103 := (iff #98 #102)
163.177 +#104 := [rewrite]: #103
163.178 +#99 := (iff #19 #98)
163.179 +#96 := (iff #18 #95)
163.180 +#97 := [rewrite]: #96
163.181 +#100 := [monotonicity #97]: #99
163.182 +#106 := [trans #100 #104]: #105
163.183 +#109 := [quant-intro #106]: #108
163.184 +#133 := [trans #109 #131]: #132
163.185 +#94 := [asserted]: #20
163.186 +#134 := [mp #94 #133]: #129
163.187 +#231 := [mp~ #134 #230]: #129
163.188 +#724 := [mp #231 #723]: #719
163.189 +#402 := (not #719)
163.190 +#528 := (or #402 #643 #659)
163.191 +#388 := (>= #139 0::int)
163.192 +#644 := (or #643 #388)
163.193 +#529 := (or #402 #644)
163.194 +#522 := (iff #529 #528)
163.195 +#642 := (or #643 #659)
163.196 +#636 := (or #402 #642)
163.197 +#634 := (iff #636 #528)
163.198 +#637 := [rewrite]: #634
163.199 +#538 := (iff #529 #636)
163.200 +#645 := (iff #644 #642)
163.201 +#660 := (iff #388 #659)
163.202 +#661 := [rewrite]: #660
163.203 +#527 := [monotonicity #661]: #645
163.204 +#633 := [monotonicity #527]: #538
163.205 +#537 := [trans #633 #637]: #522
163.206 +#488 := [quant-inst]: #529
163.207 +#539 := [mp #488 #537]: #528
163.208 +#615 := [unit-resolution #539 #724 #614]: #643
163.209 +#611 := (not #643)
163.210 +#616 := (or #611 #533)
163.211 +#602 := [th-lemma]: #616
163.212 +#603 := [unit-resolution #602 #615]: #533
163.213 +#606 := (not #544)
163.214 +#605 := (not #533)
163.215 +#607 := (or #367 #605 #606)
163.216 +#604 := [th-lemma]: #607
163.217 +#608 := [unit-resolution #604 #603 #610]: #367
163.218 +#701 := (not #367)
163.219 +#358 := (or #701 #485)
163.220 +#58 := (= #10 #13)
163.221 +#83 := (or #58 #77)
163.222 +#713 := (forall (vars (?x2 int)) (:pat #712) #83)
163.223 +#88 := (forall (vars (?x2 int)) #83)
163.224 +#716 := (iff #88 #713)
163.225 +#714 := (iff #83 #83)
163.226 +#715 := [refl]: #714
163.227 +#717 := [quant-intro #715]: #716
163.228 +#191 := (~ #88 #88)
163.229 +#195 := (~ #83 #83)
163.230 +#193 := [refl]: #195
163.231 +#225 := [nnf-pos #193]: #191
163.232 +#14 := (= #13 #10)
163.233 +#11 := (<= 0::int #10)
163.234 +#15 := (implies #11 #14)
163.235 +#16 := (forall (vars (?x2 int)) #15)
163.236 +#91 := (iff #16 #88)
163.237 +#65 := (not #11)
163.238 +#66 := (or #65 #58)
163.239 +#71 := (forall (vars (?x2 int)) #66)
163.240 +#89 := (iff #71 #88)
163.241 +#86 := (iff #66 #83)
163.242 +#80 := (or #77 #58)
163.243 +#84 := (iff #80 #83)
163.244 +#85 := [rewrite]: #84
163.245 +#81 := (iff #66 #80)
163.246 +#78 := (iff #65 #77)
163.247 +#74 := (iff #11 #76)
163.248 +#75 := [rewrite]: #74
163.249 +#79 := [monotonicity #75]: #78
163.250 +#82 := [monotonicity #79]: #81
163.251 +#87 := [trans #82 #85]: #86
163.252 +#90 := [quant-intro #87]: #89
163.253 +#72 := (iff #16 #71)
163.254 +#69 := (iff #15 #66)
163.255 +#62 := (implies #11 #58)
163.256 +#67 := (iff #62 #66)
163.257 +#68 := [rewrite]: #67
163.258 +#63 := (iff #15 #62)
163.259 +#60 := (iff #14 #58)
163.260 +#61 := [rewrite]: #60
163.261 +#64 := [monotonicity #61]: #63
163.262 +#70 := [trans #64 #68]: #69
163.263 +#73 := [quant-intro #70]: #72
163.264 +#92 := [trans #73 #90]: #91
163.265 +#57 := [asserted]: #16
163.266 +#93 := [mp #57 #92]: #88
163.267 +#226 := [mp~ #93 #225]: #88
163.268 +#718 := [mp #226 #717]: #713
163.269 +#679 := (not #713)
163.270 +#342 := (or #679 #701 #485)
163.271 +#380 := (>= #24 0::int)
163.272 +#381 := (not #380)
163.273 +#361 := (= #24 #26)
163.274 +#696 := (or #361 #381)
163.275 +#343 := (or #679 #696)
163.276 +#685 := (iff #343 #342)
163.277 +#345 := (or #679 #358)
163.278 +#683 := (iff #345 #342)
163.279 +#684 := [rewrite]: #683
163.280 +#681 := (iff #343 #345)
163.281 +#695 := (iff #696 #358)
163.282 +#703 := (or #485 #701)
163.283 +#694 := (iff #703 #358)
163.284 +#354 := [rewrite]: #694
163.285 +#693 := (iff #696 #703)
163.286 +#702 := (iff #381 #701)
163.287 +#699 := (iff #380 #367)
163.288 +#700 := [rewrite]: #699
163.289 +#697 := [monotonicity #700]: #702
163.290 +#692 := (iff #361 #485)
163.291 +#366 := [rewrite]: #692
163.292 +#353 := [monotonicity #366 #697]: #693
163.293 +#338 := [trans #353 #354]: #695
163.294 +#682 := [monotonicity #338]: #681
163.295 +#680 := [trans #682 #684]: #685
163.296 +#344 := [quant-inst]: #343
163.297 +#686 := [mp #344 #680]: #342
163.298 +#588 := [unit-resolution #686 #718]: #358
163.299 +#589 := [unit-resolution #588 #608]: #485
163.300 +#591 := (not #485)
163.301 +#592 := (or #591 #324)
163.302 +#593 := [th-lemma]: #592
163.303 +#594 := [unit-resolution #593 #589]: #324
163.304 +[th-lemma #603 #188 #594 #610]: false
163.305 +unsat
164.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
164.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_05 Tue Oct 20 10:11:30 2009 +0200
164.3 @@ -0,0 +1,13 @@
164.4 +(benchmark Isabelle
164.5 +:extrasorts ( T1)
164.6 +:extrafuns (
164.7 + (uf_1 Int T1)
164.8 + (uf_2 T1 Int)
164.9 + (uf_3 T1)
164.10 + )
164.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
164.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
164.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
164.14 +:assumption (not (distinct (uf_1 (+ (uf_2 uf_3) 1)) (uf_1 (+ (uf_2 (uf_1 (* (uf_2 uf_3) 2))) 3)) (uf_1 (- (uf_2 uf_3) (uf_2 uf_3)))))
164.15 +:formula true
164.16 +)
165.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
165.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_05.proof Tue Oct 20 10:11:30 2009 +0200
165.3 @@ -0,0 +1,525 @@
165.4 +#2 := false
165.5 +decl uf_2 :: (-> T1 int)
165.6 +decl uf_1 :: (-> int T1)
165.7 +decl uf_3 :: T1
165.8 +#21 := uf_3
165.9 +#22 := (uf_2 uf_3)
165.10 +#23 := 1::int
165.11 +#138 := (+ 1::int #22)
165.12 +#141 := (uf_1 #138)
165.13 +#656 := (uf_2 #141)
165.14 +#26 := 2::int
165.15 +#144 := (* 2::int #22)
165.16 +#147 := (uf_1 #144)
165.17 +#150 := (uf_2 #147)
165.18 +#30 := 3::int
165.19 +#156 := (+ 3::int #150)
165.20 +#161 := (uf_1 #156)
165.21 +#494 := (uf_2 #161)
165.22 +#288 := (= #494 #656)
165.23 +#266 := (= #161 #141)
165.24 +#249 := (= #141 #161)
165.25 +#9 := 0::int
165.26 +#166 := (uf_1 0::int)
165.27 +#251 := (= #161 #166)
165.28 +#337 := (not #251)
165.29 +#567 := (= #494 0::int)
165.30 +#543 := (uf_2 #166)
165.31 +#547 := (= #543 0::int)
165.32 +#10 := (:var 0 int)
165.33 +#12 := (uf_1 #10)
165.34 +#673 := (pattern #12)
165.35 +#78 := (>= #10 0::int)
165.36 +#79 := (not #78)
165.37 +#13 := (uf_2 #12)
165.38 +#60 := (= #10 #13)
165.39 +#85 := (or #60 #79)
165.40 +#674 := (forall (vars (?x2 int)) (:pat #673) #85)
165.41 +#90 := (forall (vars (?x2 int)) #85)
165.42 +#677 := (iff #90 #674)
165.43 +#675 := (iff #85 #85)
165.44 +#676 := [refl]: #675
165.45 +#678 := [quant-intro #676]: #677
165.46 +#178 := (~ #90 #90)
165.47 +#190 := (~ #85 #85)
165.48 +#191 := [refl]: #190
165.49 +#175 := [nnf-pos #191]: #178
165.50 +#14 := (= #13 #10)
165.51 +#11 := (<= 0::int #10)
165.52 +#15 := (implies #11 #14)
165.53 +#16 := (forall (vars (?x2 int)) #15)
165.54 +#93 := (iff #16 #90)
165.55 +#67 := (not #11)
165.56 +#68 := (or #67 #60)
165.57 +#73 := (forall (vars (?x2 int)) #68)
165.58 +#91 := (iff #73 #90)
165.59 +#88 := (iff #68 #85)
165.60 +#82 := (or #79 #60)
165.61 +#86 := (iff #82 #85)
165.62 +#87 := [rewrite]: #86
165.63 +#83 := (iff #68 #82)
165.64 +#80 := (iff #67 #79)
165.65 +#76 := (iff #11 #78)
165.66 +#77 := [rewrite]: #76
165.67 +#81 := [monotonicity #77]: #80
165.68 +#84 := [monotonicity #81]: #83
165.69 +#89 := [trans #84 #87]: #88
165.70 +#92 := [quant-intro #89]: #91
165.71 +#74 := (iff #16 #73)
165.72 +#71 := (iff #15 #68)
165.73 +#64 := (implies #11 #60)
165.74 +#69 := (iff #64 #68)
165.75 +#70 := [rewrite]: #69
165.76 +#65 := (iff #15 #64)
165.77 +#62 := (iff #14 #60)
165.78 +#63 := [rewrite]: #62
165.79 +#66 := [monotonicity #63]: #65
165.80 +#72 := [trans #66 #70]: #71
165.81 +#75 := [quant-intro #72]: #74
165.82 +#94 := [trans #75 #92]: #93
165.83 +#59 := [asserted]: #16
165.84 +#95 := [mp #59 #94]: #90
165.85 +#192 := [mp~ #95 #175]: #90
165.86 +#679 := [mp #192 #678]: #674
165.87 +#290 := (not #674)
165.88 +#519 := (or #290 #547)
165.89 +#540 := (>= 0::int 0::int)
165.90 +#541 := (not #540)
165.91 +#544 := (= 0::int #543)
165.92 +#545 := (or #544 #541)
165.93 +#520 := (or #290 #545)
165.94 +#521 := (iff #520 #519)
165.95 +#523 := (iff #519 #519)
165.96 +#526 := [rewrite]: #523
165.97 +#407 := (iff #545 #547)
165.98 +#533 := (or #547 false)
165.99 +#513 := (iff #533 #547)
165.100 +#514 := [rewrite]: #513
165.101 +#539 := (iff #545 #533)
165.102 +#537 := (iff #541 false)
165.103 +#1 := true
165.104 +#530 := (not true)
165.105 +#535 := (iff #530 false)
165.106 +#536 := [rewrite]: #535
165.107 +#531 := (iff #541 #530)
165.108 +#548 := (iff #540 true)
165.109 +#534 := [rewrite]: #548
165.110 +#532 := [monotonicity #534]: #531
165.111 +#538 := [trans #532 #536]: #537
165.112 +#546 := (iff #544 #547)
165.113 +#542 := [rewrite]: #546
165.114 +#512 := [monotonicity #542 #538]: #539
165.115 +#518 := [trans #512 #514]: #407
165.116 +#522 := [monotonicity #518]: #521
165.117 +#527 := [trans #522 #526]: #521
165.118 +#525 := [quant-inst]: #520
165.119 +#528 := [mp #525 #527]: #519
165.120 +#316 := [unit-resolution #528 #679]: #547
165.121 +#286 := (= #494 #543)
165.122 +#287 := [hypothesis]: #251
165.123 +#292 := [monotonicity #287]: #286
165.124 +#267 := [trans #292 #316]: #567
165.125 +#296 := (not #567)
165.126 +#551 := (<= #494 0::int)
165.127 +#300 := (not #551)
165.128 +#501 := (>= #150 0::int)
165.129 +#622 := (>= #144 0::int)
165.130 +#302 := -1::int
165.131 +#303 := (* -1::int #656)
165.132 +#304 := (+ #22 #303)
165.133 +#635 := (>= #304 -1::int)
165.134 +#305 := (= #304 -1::int)
165.135 +#644 := (>= #22 -1::int)
165.136 +#511 := (>= #22 0::int)
165.137 +#487 := (= #22 0::int)
165.138 +#660 := (uf_1 #22)
165.139 +#517 := (uf_2 #660)
165.140 +#485 := (= #517 0::int)
165.141 +#389 := (not #511)
165.142 +#390 := [hypothesis]: #389
165.143 +#492 := (or #485 #511)
165.144 +#18 := (= #13 0::int)
165.145 +#126 := (or #18 #78)
165.146 +#680 := (forall (vars (?x3 int)) (:pat #673) #126)
165.147 +#131 := (forall (vars (?x3 int)) #126)
165.148 +#683 := (iff #131 #680)
165.149 +#681 := (iff #126 #126)
165.150 +#682 := [refl]: #681
165.151 +#684 := [quant-intro #682]: #683
165.152 +#179 := (~ #131 #131)
165.153 +#193 := (~ #126 #126)
165.154 +#194 := [refl]: #193
165.155 +#180 := [nnf-pos #194]: #179
165.156 +#17 := (< #10 0::int)
165.157 +#19 := (implies #17 #18)
165.158 +#20 := (forall (vars (?x3 int)) #19)
165.159 +#134 := (iff #20 #131)
165.160 +#97 := (= 0::int #13)
165.161 +#103 := (not #17)
165.162 +#104 := (or #103 #97)
165.163 +#109 := (forall (vars (?x3 int)) #104)
165.164 +#132 := (iff #109 #131)
165.165 +#129 := (iff #104 #126)
165.166 +#123 := (or #78 #18)
165.167 +#127 := (iff #123 #126)
165.168 +#128 := [rewrite]: #127
165.169 +#124 := (iff #104 #123)
165.170 +#121 := (iff #97 #18)
165.171 +#122 := [rewrite]: #121
165.172 +#119 := (iff #103 #78)
165.173 +#114 := (not #79)
165.174 +#117 := (iff #114 #78)
165.175 +#118 := [rewrite]: #117
165.176 +#115 := (iff #103 #114)
165.177 +#112 := (iff #17 #79)
165.178 +#113 := [rewrite]: #112
165.179 +#116 := [monotonicity #113]: #115
165.180 +#120 := [trans #116 #118]: #119
165.181 +#125 := [monotonicity #120 #122]: #124
165.182 +#130 := [trans #125 #128]: #129
165.183 +#133 := [quant-intro #130]: #132
165.184 +#110 := (iff #20 #109)
165.185 +#107 := (iff #19 #104)
165.186 +#100 := (implies #17 #97)
165.187 +#105 := (iff #100 #104)
165.188 +#106 := [rewrite]: #105
165.189 +#101 := (iff #19 #100)
165.190 +#98 := (iff #18 #97)
165.191 +#99 := [rewrite]: #98
165.192 +#102 := [monotonicity #99]: #101
165.193 +#108 := [trans #102 #106]: #107
165.194 +#111 := [quant-intro #108]: #110
165.195 +#135 := [trans #111 #133]: #134
165.196 +#96 := [asserted]: #20
165.197 +#136 := [mp #96 #135]: #131
165.198 +#195 := [mp~ #136 #180]: #131
165.199 +#685 := [mp #195 #684]: #680
165.200 +#637 := (not #680)
165.201 +#484 := (or #637 #485 #511)
165.202 +#486 := (or #637 #492)
165.203 +#495 := (iff #486 #484)
165.204 +#496 := [rewrite]: #495
165.205 +#493 := [quant-inst]: #486
165.206 +#497 := [mp #493 #496]: #484
165.207 +#391 := [unit-resolution #497 #685]: #492
165.208 +#392 := [unit-resolution #391 #390]: #485
165.209 +#394 := (= #22 #517)
165.210 +#661 := (= uf_3 #660)
165.211 +#4 := (:var 0 T1)
165.212 +#5 := (uf_2 #4)
165.213 +#665 := (pattern #5)
165.214 +#6 := (uf_1 #5)
165.215 +#53 := (= #4 #6)
165.216 +#666 := (forall (vars (?x1 T1)) (:pat #665) #53)
165.217 +#56 := (forall (vars (?x1 T1)) #53)
165.218 +#667 := (iff #56 #666)
165.219 +#669 := (iff #666 #666)
165.220 +#670 := [rewrite]: #669
165.221 +#668 := [rewrite]: #667
165.222 +#671 := [trans #668 #670]: #667
165.223 +#187 := (~ #56 #56)
165.224 +#185 := (~ #53 #53)
165.225 +#186 := [refl]: #185
165.226 +#188 := [nnf-pos #186]: #187
165.227 +#7 := (= #6 #4)
165.228 +#8 := (forall (vars (?x1 T1)) #7)
165.229 +#57 := (iff #8 #56)
165.230 +#54 := (iff #7 #53)
165.231 +#55 := [rewrite]: #54
165.232 +#58 := [quant-intro #55]: #57
165.233 +#52 := [asserted]: #8
165.234 +#61 := [mp #52 #58]: #56
165.235 +#189 := [mp~ #61 #188]: #56
165.236 +#672 := [mp #189 #671]: #666
165.237 +#658 := (not #666)
165.238 +#664 := (or #658 #661)
165.239 +#654 := [quant-inst]: #664
165.240 +#393 := [unit-resolution #654 #672]: #661
165.241 +#395 := [monotonicity #393]: #394
165.242 +#396 := [trans #395 #392]: #487
165.243 +#397 := (not #487)
165.244 +#398 := (or #397 #511)
165.245 +#399 := [th-lemma]: #398
165.246 +#388 := [unit-resolution #399 #390 #396]: false
165.247 +#400 := [lemma #388]: #511
165.248 +#366 := (or #389 #644)
165.249 +#367 := [th-lemma]: #366
165.250 +#352 := [unit-resolution #367 #400]: #644
165.251 +#641 := (not #644)
165.252 +#648 := (or #305 #641)
165.253 +#651 := (or #290 #305 #641)
165.254 +#313 := (>= #138 0::int)
165.255 +#318 := (not #313)
165.256 +#298 := (= #138 #656)
165.257 +#640 := (or #298 #318)
165.258 +#649 := (or #290 #640)
165.259 +#363 := (iff #649 #651)
165.260 +#638 := (or #290 #648)
165.261 +#361 := (iff #638 #651)
165.262 +#362 := [rewrite]: #361
165.263 +#639 := (iff #649 #638)
165.264 +#650 := (iff #640 #648)
165.265 +#647 := (iff #318 #641)
165.266 +#645 := (iff #313 #644)
165.267 +#646 := [rewrite]: #645
165.268 +#284 := [monotonicity #646]: #647
165.269 +#642 := (iff #298 #305)
165.270 +#643 := [rewrite]: #642
165.271 +#289 := [monotonicity #643 #284]: #650
165.272 +#346 := [monotonicity #289]: #639
165.273 +#364 := [trans #346 #362]: #363
165.274 +#652 := [quant-inst]: #649
165.275 +#257 := [mp #652 #364]: #651
165.276 +#424 := [unit-resolution #257 #679]: #648
165.277 +#353 := [unit-resolution #424 #352]: #305
165.278 +#439 := (not #305)
165.279 +#281 := (or #439 #635)
165.280 +#440 := [th-lemma]: #281
165.281 +#330 := [unit-resolution #440 #353]: #635
165.282 +#620 := (<= #656 0::int)
165.283 +#441 := (not #620)
165.284 +#634 := (<= #304 -1::int)
165.285 +#344 := (or #439 #634)
165.286 +#354 := [th-lemma]: #344
165.287 +#355 := [unit-resolution #354 #353]: #634
165.288 +#345 := (not #634)
165.289 +#356 := (or #441 #389 #345)
165.290 +#322 := [th-lemma]: #356
165.291 +#324 := [unit-resolution #322 #355 #400]: #441
165.292 +#432 := (not #635)
165.293 +#331 := (or #622 #432 #620)
165.294 +#319 := [th-lemma]: #331
165.295 +#320 := [unit-resolution #319 #324 #330]: #622
165.296 +#624 := (* -1::int #150)
165.297 +#619 := (+ #144 #624)
165.298 +#606 := (<= #619 0::int)
165.299 +#625 := (= #619 0::int)
165.300 +#617 := (not #622)
165.301 +#612 := (or #617 #625)
165.302 +#615 := (or #290 #617 #625)
165.303 +#618 := (= #144 #150)
165.304 +#623 := (or #618 #617)
165.305 +#609 := (or #290 #623)
165.306 +#604 := (iff #609 #615)
165.307 +#445 := (or #290 #612)
165.308 +#601 := (iff #445 #615)
165.309 +#602 := [rewrite]: #601
165.310 +#447 := (iff #609 #445)
165.311 +#608 := (iff #623 #612)
165.312 +#468 := (or #625 #617)
165.313 +#613 := (iff #468 #612)
165.314 +#607 := [rewrite]: #613
165.315 +#610 := (iff #623 #468)
165.316 +#466 := (iff #618 #625)
165.317 +#467 := [rewrite]: #466
165.318 +#611 := [monotonicity #467]: #610
165.319 +#614 := [trans #611 #607]: #608
165.320 +#448 := [monotonicity #614]: #447
165.321 +#605 := [trans #448 #602]: #604
165.322 +#616 := [quant-inst]: #609
165.323 +#603 := [mp #616 #605]: #615
165.324 +#480 := [unit-resolution #603 #679]: #612
165.325 +#299 := [unit-resolution #480 #320]: #625
165.326 +#406 := (not #625)
165.327 +#408 := (or #406 #606)
165.328 +#409 := [th-lemma]: #408
165.329 +#301 := [unit-resolution #409 #299]: #606
165.330 +#413 := (not #606)
165.331 +#306 := (or #501 #413 #617)
165.332 +#307 := [th-lemma]: #306
165.333 +#308 := [unit-resolution #307 #301 #320]: #501
165.334 +#506 := -3::int
165.335 +#504 := (* -1::int #494)
165.336 +#505 := (+ #150 #504)
165.337 +#564 := (<= #505 -3::int)
165.338 +#599 := (= #505 -3::int)
165.339 +#587 := (>= #150 -3::int)
165.340 +#417 := (or #587 #413 #617)
165.341 +#410 := [th-lemma]: #417
165.342 +#309 := [unit-resolution #410 #301 #320]: #587
165.343 +#578 := (not #587)
165.344 +#593 := (or #578 #599)
165.345 +#579 := (or #290 #578 #599)
165.346 +#449 := (>= #156 0::int)
165.347 +#597 := (not #449)
165.348 +#502 := (= #156 #494)
165.349 +#503 := (or #502 #597)
165.350 +#586 := (or #290 #503)
165.351 +#572 := (iff #586 #579)
165.352 +#571 := (or #290 #593)
165.353 +#575 := (iff #571 #579)
165.354 +#576 := [rewrite]: #575
165.355 +#573 := (iff #586 #571)
165.356 +#584 := (iff #503 #593)
165.357 +#591 := (or #599 #578)
165.358 +#582 := (iff #591 #593)
165.359 +#583 := [rewrite]: #582
165.360 +#592 := (iff #503 #591)
165.361 +#580 := (iff #597 #578)
165.362 +#589 := (iff #449 #587)
165.363 +#581 := [rewrite]: #589
165.364 +#590 := [monotonicity #581]: #580
165.365 +#596 := (iff #502 #599)
165.366 +#600 := [rewrite]: #596
165.367 +#588 := [monotonicity #600 #590]: #592
165.368 +#585 := [trans #588 #583]: #584
165.369 +#574 := [monotonicity #585]: #573
165.370 +#577 := [trans #574 #576]: #572
165.371 +#570 := [quant-inst]: #586
165.372 +#563 := [mp #570 #577]: #579
165.373 +#458 := [unit-resolution #563 #679]: #593
165.374 +#310 := [unit-resolution #458 #309]: #599
165.375 +#460 := (not #599)
165.376 +#461 := (or #460 #564)
165.377 +#444 := [th-lemma]: #461
165.378 +#311 := [unit-resolution #444 #310]: #564
165.379 +#434 := (not #564)
165.380 +#453 := (not #501)
165.381 +#312 := (or #300 #453 #434)
165.382 +#293 := [th-lemma]: #312
165.383 +#295 := [unit-resolution #293 #311 #308]: #300
165.384 +#294 := (or #296 #551)
165.385 +#297 := [th-lemma]: #294
165.386 +#285 := [unit-resolution #297 #295]: #296
165.387 +#271 := [unit-resolution #285 #267]: false
165.388 +#272 := [lemma #271]: #337
165.389 +#282 := (or #249 #251)
165.390 +#250 := (= #141 #166)
165.391 +#336 := (not #250)
165.392 +#357 := (= #656 0::int)
165.393 +#332 := (= #656 #543)
165.394 +#329 := [hypothesis]: #250
165.395 +#333 := [monotonicity #329]: #332
165.396 +#323 := [trans #333 #316]: #357
165.397 +#429 := (not #357)
165.398 +#430 := (or #429 #620)
165.399 +#428 := [th-lemma]: #430
165.400 +#325 := [unit-resolution #428 #324]: #429
165.401 +#334 := [unit-resolution #325 #323]: false
165.402 +#317 := [lemma #334]: #336
165.403 +#279 := (or #249 #250 #251)
165.404 +#335 := (not #249)
165.405 +#328 := (and #335 #336 #337)
165.406 +#339 := (not #328)
165.407 +#169 := (distinct #141 #161 #166)
165.408 +#172 := (not #169)
165.409 +#33 := (- #22 #22)
165.410 +#34 := (uf_1 #33)
165.411 +#27 := (* #22 2::int)
165.412 +#28 := (uf_1 #27)
165.413 +#29 := (uf_2 #28)
165.414 +#31 := (+ #29 3::int)
165.415 +#32 := (uf_1 #31)
165.416 +#24 := (+ #22 1::int)
165.417 +#25 := (uf_1 #24)
165.418 +#35 := (distinct #25 #32 #34)
165.419 +#36 := (not #35)
165.420 +#173 := (iff #36 #172)
165.421 +#170 := (iff #35 #169)
165.422 +#167 := (= #34 #166)
165.423 +#164 := (= #33 0::int)
165.424 +#165 := [rewrite]: #164
165.425 +#168 := [monotonicity #165]: #167
165.426 +#162 := (= #32 #161)
165.427 +#159 := (= #31 #156)
165.428 +#153 := (+ #150 3::int)
165.429 +#157 := (= #153 #156)
165.430 +#158 := [rewrite]: #157
165.431 +#154 := (= #31 #153)
165.432 +#151 := (= #29 #150)
165.433 +#148 := (= #28 #147)
165.434 +#145 := (= #27 #144)
165.435 +#146 := [rewrite]: #145
165.436 +#149 := [monotonicity #146]: #148
165.437 +#152 := [monotonicity #149]: #151
165.438 +#155 := [monotonicity #152]: #154
165.439 +#160 := [trans #155 #158]: #159
165.440 +#163 := [monotonicity #160]: #162
165.441 +#142 := (= #25 #141)
165.442 +#139 := (= #24 #138)
165.443 +#140 := [rewrite]: #139
165.444 +#143 := [monotonicity #140]: #142
165.445 +#171 := [monotonicity #143 #163 #168]: #170
165.446 +#174 := [monotonicity #171]: #173
165.447 +#137 := [asserted]: #36
165.448 +#177 := [mp #137 #174]: #172
165.449 +#326 := (or #169 #339)
165.450 +#327 := [def-axiom]: #326
165.451 +#277 := [unit-resolution #327 #177]: #339
165.452 +#659 := (or #328 #249 #250 #251)
165.453 +#315 := [def-axiom]: #659
165.454 +#280 := [unit-resolution #315 #277]: #279
165.455 +#278 := [unit-resolution #280 #317]: #282
165.456 +#283 := [unit-resolution #278 #272]: #249
165.457 +#269 := [symm #283]: #266
165.458 +#270 := [monotonicity #269]: #288
165.459 +#508 := (+ #494 #303)
165.460 +#473 := (<= #508 0::int)
165.461 +#433 := (not #473)
165.462 +#477 := [hypothesis]: #473
165.463 +#421 := (or #622 #433)
165.464 +#489 := (= #150 0::int)
165.465 +#478 := [hypothesis]: #617
165.466 +#490 := (or #489 #622)
165.467 +#499 := (or #637 #489 #622)
165.468 +#594 := (or #637 #490)
165.469 +#598 := (iff #594 #499)
165.470 +#483 := [rewrite]: #598
165.471 +#595 := [quant-inst]: #594
165.472 +#498 := [mp #595 #483]: #499
165.473 +#465 := [unit-resolution #498 #685]: #490
165.474 +#481 := [unit-resolution #465 #478]: #489
165.475 +#442 := (not #489)
165.476 +#443 := (or #442 #501)
165.477 +#450 := [th-lemma]: #443
165.478 +#452 := [unit-resolution #450 #481]: #501
165.479 +#454 := (or #453 #587)
165.480 +#456 := [th-lemma]: #454
165.481 +#457 := [unit-resolution #456 #452]: #587
165.482 +#459 := [unit-resolution #458 #457]: #599
165.483 +#462 := [unit-resolution #444 #459]: #564
165.484 +#435 := (or #432 #622 #433 #453 #434)
165.485 +#437 := [th-lemma]: #435
165.486 +#438 := [unit-resolution #437 #478 #452 #462 #477]: #432
165.487 +#436 := [unit-resolution #440 #438]: #439
165.488 +#420 := (or #441 #433 #453 #434)
165.489 +#423 := [th-lemma]: #420
165.490 +#427 := [unit-resolution #423 #452 #462 #477]: #441
165.491 +#431 := [unit-resolution #428 #427]: #429
165.492 +#632 := (or #357 #644)
165.493 +#347 := (or #637 #357 #644)
165.494 +#358 := (or #357 #313)
165.495 +#348 := (or #637 #358)
165.496 +#630 := (iff #348 #347)
165.497 +#350 := (or #637 #632)
165.498 +#343 := (iff #350 #347)
165.499 +#626 := [rewrite]: #343
165.500 +#628 := (iff #348 #350)
165.501 +#636 := (iff #358 #632)
165.502 +#633 := [monotonicity #646]: #636
165.503 +#629 := [monotonicity #633]: #628
165.504 +#627 := [trans #629 #626]: #630
165.505 +#349 := [quant-inst]: #348
165.506 +#631 := [mp #349 #627]: #347
165.507 +#419 := [unit-resolution #631 #685]: #632
165.508 +#422 := [unit-resolution #419 #431]: #644
165.509 +#425 := [unit-resolution #424 #422 #436]: false
165.510 +#426 := [lemma #425]: #421
165.511 +#479 := [unit-resolution #426 #477]: #622
165.512 +#416 := [unit-resolution #480 #479]: #625
165.513 +#412 := [unit-resolution #409 #416]: #606
165.514 +#418 := [unit-resolution #410 #412 #479]: #587
165.515 +#411 := [unit-resolution #458 #418]: #599
165.516 +#414 := [unit-resolution #444 #411]: #564
165.517 +#415 := (or #644 #617)
165.518 +#401 := [th-lemma]: #415
165.519 +#403 := [unit-resolution #401 #479]: #644
165.520 +#404 := [unit-resolution #424 #403]: #305
165.521 +#402 := [unit-resolution #440 #404]: #635
165.522 +#405 := [th-lemma #418 #402 #477 #414 #412]: false
165.523 +#387 := [lemma #405]: #433
165.524 +#273 := (not #288)
165.525 +#274 := (or #273 #473)
165.526 +#275 := [th-lemma]: #274
165.527 +[unit-resolution #275 #387 #270]: false
165.528 +unsat
166.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
166.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_06 Tue Oct 20 10:11:30 2009 +0200
166.3 @@ -0,0 +1,13 @@
166.4 +(benchmark Isabelle
166.5 +:extrasorts ( T1)
166.6 +:extrafuns (
166.7 + (uf_1 Int T1)
166.8 + (uf_2 T1 Int)
166.9 + (uf_3 Int)
166.10 + )
166.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
166.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
166.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
166.14 +:assumption (not (= (uf_2 (uf_1 (ite (< uf_3 0) (~ uf_3) uf_3))) (ite (< uf_3 0) (~ uf_3) uf_3)))
166.15 +:formula true
166.16 +)
167.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
167.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_06.proof Tue Oct 20 10:11:30 2009 +0200
167.3 @@ -0,0 +1,161 @@
167.4 +#2 := false
167.5 +#9 := 0::int
167.6 +decl uf_3 :: int
167.7 +#21 := uf_3
167.8 +#130 := -1::int
167.9 +#131 := (* -1::int uf_3)
167.10 +#154 := (>= uf_3 0::int)
167.11 +#161 := (ite #154 uf_3 #131)
167.12 +#648 := (* -1::int #161)
167.13 +#651 := (+ #131 #648)
167.14 +#657 := (<= #651 0::int)
167.15 +#341 := (= #131 #161)
167.16 +#155 := (not #154)
167.17 +#649 := (+ uf_3 #648)
167.18 +#650 := (<= #649 0::int)
167.19 +#254 := (= uf_3 #161)
167.20 +#646 := [hypothesis]: #154
167.21 +#255 := (or #155 #254)
167.22 +#342 := [def-axiom]: #255
167.23 +#652 := [unit-resolution #342 #646]: #254
167.24 +#290 := (not #254)
167.25 +#653 := (or #290 #650)
167.26 +#655 := [th-lemma]: #653
167.27 +#295 := [unit-resolution #655 #652]: #650
167.28 +#346 := (>= #161 0::int)
167.29 +#274 := (not #346)
167.30 +decl uf_2 :: (-> T1 int)
167.31 +decl uf_1 :: (-> int T1)
167.32 +#166 := (uf_1 #161)
167.33 +#169 := (uf_2 #166)
167.34 +#172 := (= #161 #169)
167.35 +#175 := (not #172)
167.36 +#23 := (- uf_3)
167.37 +#22 := (< uf_3 0::int)
167.38 +#24 := (ite #22 #23 uf_3)
167.39 +#25 := (uf_1 #24)
167.40 +#26 := (uf_2 #25)
167.41 +#27 := (= #26 #24)
167.42 +#28 := (not #27)
167.43 +#178 := (iff #28 #175)
167.44 +#134 := (ite #22 #131 uf_3)
167.45 +#137 := (uf_1 #134)
167.46 +#140 := (uf_2 #137)
167.47 +#146 := (= #134 #140)
167.48 +#151 := (not #146)
167.49 +#176 := (iff #151 #175)
167.50 +#173 := (iff #146 #172)
167.51 +#170 := (= #140 #169)
167.52 +#167 := (= #137 #166)
167.53 +#164 := (= #134 #161)
167.54 +#158 := (ite #155 #131 uf_3)
167.55 +#162 := (= #158 #161)
167.56 +#163 := [rewrite]: #162
167.57 +#159 := (= #134 #158)
167.58 +#156 := (iff #22 #155)
167.59 +#157 := [rewrite]: #156
167.60 +#160 := [monotonicity #157]: #159
167.61 +#165 := [trans #160 #163]: #164
167.62 +#168 := [monotonicity #165]: #167
167.63 +#171 := [monotonicity #168]: #170
167.64 +#174 := [monotonicity #165 #171]: #173
167.65 +#177 := [monotonicity #174]: #176
167.66 +#152 := (iff #28 #151)
167.67 +#149 := (iff #27 #146)
167.68 +#143 := (= #140 #134)
167.69 +#147 := (iff #143 #146)
167.70 +#148 := [rewrite]: #147
167.71 +#144 := (iff #27 #143)
167.72 +#135 := (= #24 #134)
167.73 +#132 := (= #23 #131)
167.74 +#133 := [rewrite]: #132
167.75 +#136 := [monotonicity #133]: #135
167.76 +#141 := (= #26 #140)
167.77 +#138 := (= #25 #137)
167.78 +#139 := [monotonicity #136]: #138
167.79 +#142 := [monotonicity #139]: #141
167.80 +#145 := [monotonicity #142 #136]: #144
167.81 +#150 := [trans #145 #148]: #149
167.82 +#153 := [monotonicity #150]: #152
167.83 +#179 := [trans #153 #177]: #178
167.84 +#129 := [asserted]: #28
167.85 +#180 := [mp #129 #179]: #175
167.86 +#10 := (:var 0 int)
167.87 +#12 := (uf_1 #10)
167.88 +#678 := (pattern #12)
167.89 +#70 := (>= #10 0::int)
167.90 +#71 := (not #70)
167.91 +#13 := (uf_2 #12)
167.92 +#52 := (= #10 #13)
167.93 +#77 := (or #52 #71)
167.94 +#679 := (forall (vars (?x2 int)) (:pat #678) #77)
167.95 +#82 := (forall (vars (?x2 int)) #77)
167.96 +#682 := (iff #82 #679)
167.97 +#680 := (iff #77 #77)
167.98 +#681 := [refl]: #680
167.99 +#683 := [quant-intro #681]: #682
167.100 +#183 := (~ #82 #82)
167.101 +#195 := (~ #77 #77)
167.102 +#196 := [refl]: #195
167.103 +#181 := [nnf-pos #196]: #183
167.104 +#14 := (= #13 #10)
167.105 +#11 := (<= 0::int #10)
167.106 +#15 := (implies #11 #14)
167.107 +#16 := (forall (vars (?x2 int)) #15)
167.108 +#85 := (iff #16 #82)
167.109 +#59 := (not #11)
167.110 +#60 := (or #59 #52)
167.111 +#65 := (forall (vars (?x2 int)) #60)
167.112 +#83 := (iff #65 #82)
167.113 +#80 := (iff #60 #77)
167.114 +#74 := (or #71 #52)
167.115 +#78 := (iff #74 #77)
167.116 +#79 := [rewrite]: #78
167.117 +#75 := (iff #60 #74)
167.118 +#72 := (iff #59 #71)
167.119 +#68 := (iff #11 #70)
167.120 +#69 := [rewrite]: #68
167.121 +#73 := [monotonicity #69]: #72
167.122 +#76 := [monotonicity #73]: #75
167.123 +#81 := [trans #76 #79]: #80
167.124 +#84 := [quant-intro #81]: #83
167.125 +#66 := (iff #16 #65)
167.126 +#63 := (iff #15 #60)
167.127 +#56 := (implies #11 #52)
167.128 +#61 := (iff #56 #60)
167.129 +#62 := [rewrite]: #61
167.130 +#57 := (iff #15 #56)
167.131 +#54 := (iff #14 #52)
167.132 +#55 := [rewrite]: #54
167.133 +#58 := [monotonicity #55]: #57
167.134 +#64 := [trans #58 #62]: #63
167.135 +#67 := [quant-intro #64]: #66
167.136 +#86 := [trans #67 #84]: #85
167.137 +#51 := [asserted]: #16
167.138 +#87 := [mp #51 #86]: #82
167.139 +#197 := [mp~ #87 #181]: #82
167.140 +#684 := [mp #197 #683]: #679
167.141 +#321 := (not #679)
167.142 +#451 := (or #321 #172 #274)
167.143 +#327 := (or #172 #274)
167.144 +#658 := (or #321 #327)
167.145 +#333 := (iff #658 #451)
167.146 +#665 := [rewrite]: #333
167.147 +#332 := [quant-inst]: #658
167.148 +#666 := [mp #332 #665]: #451
167.149 +#296 := [unit-resolution #666 #684 #180]: #274
167.150 +#656 := [th-lemma #646 #296 #295]: false
167.151 +#654 := [lemma #656]: #155
167.152 +#256 := (or #154 #341)
167.153 +#343 := [def-axiom]: #256
167.154 +#644 := [unit-resolution #343 #654]: #341
167.155 +#366 := (not #341)
167.156 +#367 := (or #366 #657)
167.157 +#368 := [th-lemma]: #367
167.158 +#369 := [unit-resolution #368 #644]: #657
167.159 +#647 := (<= #161 0::int)
167.160 +#262 := (or #647 #346)
167.161 +#639 := [th-lemma]: #262
167.162 +#640 := [unit-resolution #639 #296]: #647
167.163 +[th-lemma #654 #640 #369]: false
167.164 +unsat
168.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
168.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_07 Tue Oct 20 10:11:30 2009 +0200
168.3 @@ -0,0 +1,19 @@
168.4 +(benchmark Isabelle
168.5 +:extrasorts ( T1 T2)
168.6 +:extrafuns (
168.7 + (uf_1 Int T1)
168.8 + (uf_2 T1 Int)
168.9 + (uf_5 T1)
168.10 + )
168.11 +:extrapreds (
168.12 + (up_3 T1)
168.13 + (up_4 T1 T1)
168.14 + )
168.15 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
168.16 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
168.17 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
168.18 +:assumption (forall (?x4 T1) (iff (up_3 ?x4) (and (< 1 (uf_2 ?x4)) (forall (?x5 T1) (implies (up_4 ?x5 ?x4) (or (= ?x5 (uf_1 1)) (= ?x5 ?x4)))))))
168.19 +:assumption (up_3 (uf_1 (+ (uf_2 (uf_1 (* 4 (uf_2 uf_5)))) 1)))
168.20 +:assumption (not (<= 1 (uf_2 uf_5)))
168.21 +:formula true
168.22 +)
169.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
169.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_07.proof Tue Oct 20 10:11:30 2009 +0200
169.3 @@ -0,0 +1,553 @@
169.4 +#2 := false
169.5 +#9 := 0::int
169.6 +decl uf_2 :: (-> T1 int)
169.7 +decl uf_1 :: (-> int T1)
169.8 +decl uf_5 :: T1
169.9 +#36 := uf_5
169.10 +#37 := (uf_2 uf_5)
169.11 +#35 := 4::int
169.12 +#38 := (* 4::int #37)
169.13 +#39 := (uf_1 #38)
169.14 +#40 := (uf_2 #39)
169.15 +#549 := (= #40 0::int)
169.16 +#963 := (not #549)
169.17 +#537 := (<= #40 0::int)
169.18 +#958 := (not #537)
169.19 +#22 := 1::int
169.20 +#186 := (+ 1::int #40)
169.21 +#189 := (uf_1 #186)
169.22 +#524 := (uf_2 #189)
169.23 +#452 := (<= #524 1::int)
169.24 +#874 := (not #452)
169.25 +decl up_4 :: (-> T1 T1 bool)
169.26 +#4 := (:var 0 T1)
169.27 +#456 := (up_4 #4 #189)
169.28 +#440 := (pattern #456)
169.29 +#446 := (not #456)
169.30 +#455 := (= #4 #189)
169.31 +#26 := (uf_1 1::int)
169.32 +#27 := (= #4 #26)
169.33 +#434 := (or #27 #455 #446)
169.34 +#416 := (forall (vars (?x5 T1)) (:pat #440) #434)
169.35 +#417 := (not #416)
169.36 +#409 := (or #417 #452)
169.37 +#400 := (not #409)
169.38 +decl up_3 :: (-> T1 bool)
169.39 +#192 := (up_3 #189)
169.40 +#429 := (not #192)
169.41 +#405 := (or #429 #400)
169.42 +#389 := (not #405)
169.43 +decl ?x5!0 :: (-> T1 T1)
169.44 +#478 := (?x5!0 #189)
169.45 +#479 := (= #26 #478)
169.46 +#468 := (= #189 #478)
169.47 +#445 := (up_4 #478 #189)
169.48 +#447 := (not #445)
169.49 +#396 := (or #447 #468 #479)
169.50 +#391 := (not #396)
169.51 +#386 := (or #192 #391 #452)
169.52 +#377 := (not #386)
169.53 +#843 := (or #377 #389)
169.54 +#848 := (not #843)
169.55 +#5 := (uf_2 #4)
169.56 +#788 := (pattern #5)
169.57 +#21 := (up_3 #4)
169.58 +#836 := (pattern #21)
169.59 +#210 := (?x5!0 #4)
169.60 +#274 := (= #4 #210)
169.61 +#271 := (= #26 #210)
169.62 +#232 := (up_4 #210 #4)
169.63 +#233 := (not #232)
169.64 +#277 := (or #233 #271 #274)
169.65 +#280 := (not #277)
169.66 +#163 := (<= #5 1::int)
169.67 +#289 := (or #21 #163 #280)
169.68 +#304 := (not #289)
169.69 +#24 := (:var 1 T1)
169.70 +#25 := (up_4 #4 #24)
169.71 +#809 := (pattern #25)
169.72 +#28 := (= #4 #24)
169.73 +#147 := (not #25)
169.74 +#167 := (or #147 #27 #28)
169.75 +#810 := (forall (vars (?x5 T1)) (:pat #809) #167)
169.76 +#815 := (not #810)
169.77 +#818 := (or #163 #815)
169.78 +#821 := (not #818)
169.79 +#253 := (not #21)
169.80 +#824 := (or #253 #821)
169.81 +#827 := (not #824)
169.82 +#830 := (or #827 #304)
169.83 +#833 := (not #830)
169.84 +#837 := (forall (vars (?x4 T1)) (:pat #836 #788) #833)
169.85 +#170 := (forall (vars (?x5 T1)) #167)
169.86 +#236 := (not #170)
169.87 +#239 := (or #163 #236)
169.88 +#240 := (not #239)
169.89 +#215 := (or #253 #240)
169.90 +#303 := (not #215)
169.91 +#305 := (or #303 #304)
169.92 +#306 := (not #305)
169.93 +#311 := (forall (vars (?x4 T1)) #306)
169.94 +#838 := (iff #311 #837)
169.95 +#834 := (iff #306 #833)
169.96 +#831 := (iff #305 #830)
169.97 +#828 := (iff #303 #827)
169.98 +#825 := (iff #215 #824)
169.99 +#822 := (iff #240 #821)
169.100 +#819 := (iff #239 #818)
169.101 +#816 := (iff #236 #815)
169.102 +#813 := (iff #170 #810)
169.103 +#811 := (iff #167 #167)
169.104 +#812 := [refl]: #811
169.105 +#814 := [quant-intro #812]: #813
169.106 +#817 := [monotonicity #814]: #816
169.107 +#820 := [monotonicity #817]: #819
169.108 +#823 := [monotonicity #820]: #822
169.109 +#826 := [monotonicity #823]: #825
169.110 +#829 := [monotonicity #826]: #828
169.111 +#832 := [monotonicity #829]: #831
169.112 +#835 := [monotonicity #832]: #834
169.113 +#839 := [quant-intro #835]: #838
169.114 +#164 := (not #163)
169.115 +#173 := (and #164 #170)
169.116 +#259 := (or #253 #173)
169.117 +#294 := (and #259 #289)
169.118 +#297 := (forall (vars (?x4 T1)) #294)
169.119 +#312 := (iff #297 #311)
169.120 +#309 := (iff #294 #306)
169.121 +#214 := (and #215 #289)
169.122 +#307 := (iff #214 #306)
169.123 +#308 := [rewrite]: #307
169.124 +#301 := (iff #294 #214)
169.125 +#216 := (iff #259 #215)
169.126 +#268 := (iff #173 #240)
169.127 +#300 := [rewrite]: #268
169.128 +#213 := [monotonicity #300]: #216
169.129 +#302 := [monotonicity #213]: #301
169.130 +#310 := [trans #302 #308]: #309
169.131 +#313 := [quant-intro #310]: #312
169.132 +#230 := (= #210 #4)
169.133 +#231 := (= #210 #26)
169.134 +#234 := (or #233 #231 #230)
169.135 +#235 := (not #234)
169.136 +#228 := (not #164)
169.137 +#241 := (or #228 #235)
169.138 +#258 := (or #21 #241)
169.139 +#260 := (and #259 #258)
169.140 +#263 := (forall (vars (?x4 T1)) #260)
169.141 +#298 := (iff #263 #297)
169.142 +#295 := (iff #260 #294)
169.143 +#292 := (iff #258 #289)
169.144 +#283 := (or #163 #280)
169.145 +#286 := (or #21 #283)
169.146 +#290 := (iff #286 #289)
169.147 +#291 := [rewrite]: #290
169.148 +#287 := (iff #258 #286)
169.149 +#284 := (iff #241 #283)
169.150 +#281 := (iff #235 #280)
169.151 +#278 := (iff #234 #277)
169.152 +#275 := (iff #230 #274)
169.153 +#276 := [rewrite]: #275
169.154 +#272 := (iff #231 #271)
169.155 +#273 := [rewrite]: #272
169.156 +#279 := [monotonicity #273 #276]: #278
169.157 +#282 := [monotonicity #279]: #281
169.158 +#269 := (iff #228 #163)
169.159 +#270 := [rewrite]: #269
169.160 +#285 := [monotonicity #270 #282]: #284
169.161 +#288 := [monotonicity #285]: #287
169.162 +#293 := [trans #288 #291]: #292
169.163 +#296 := [monotonicity #293]: #295
169.164 +#299 := [quant-intro #296]: #298
169.165 +#176 := (iff #21 #173)
169.166 +#179 := (forall (vars (?x4 T1)) #176)
169.167 +#264 := (~ #179 #263)
169.168 +#261 := (~ #176 #260)
169.169 +#251 := (~ #173 #173)
169.170 +#249 := (~ #170 #170)
169.171 +#247 := (~ #167 #167)
169.172 +#248 := [refl]: #247
169.173 +#250 := [nnf-pos #248]: #249
169.174 +#245 := (~ #164 #164)
169.175 +#246 := [refl]: #245
169.176 +#252 := [monotonicity #246 #250]: #251
169.177 +#242 := (not #173)
169.178 +#243 := (~ #242 #241)
169.179 +#237 := (~ #236 #235)
169.180 +#238 := [sk]: #237
169.181 +#229 := (~ #228 #228)
169.182 +#209 := [refl]: #229
169.183 +#244 := [nnf-neg #209 #238]: #243
169.184 +#256 := (~ #21 #21)
169.185 +#257 := [refl]: #256
169.186 +#254 := (~ #253 #253)
169.187 +#255 := [refl]: #254
169.188 +#262 := [nnf-pos #255 #257 #244 #252]: #261
169.189 +#265 := [nnf-pos #262]: #264
169.190 +#29 := (or #27 #28)
169.191 +#30 := (implies #25 #29)
169.192 +#31 := (forall (vars (?x5 T1)) #30)
169.193 +#23 := (< 1::int #5)
169.194 +#32 := (and #23 #31)
169.195 +#33 := (iff #21 #32)
169.196 +#34 := (forall (vars (?x4 T1)) #33)
169.197 +#182 := (iff #34 #179)
169.198 +#148 := (or #147 #29)
169.199 +#151 := (forall (vars (?x5 T1)) #148)
169.200 +#154 := (and #23 #151)
169.201 +#157 := (iff #21 #154)
169.202 +#160 := (forall (vars (?x4 T1)) #157)
169.203 +#180 := (iff #160 #179)
169.204 +#177 := (iff #157 #176)
169.205 +#174 := (iff #154 #173)
169.206 +#171 := (iff #151 #170)
169.207 +#168 := (iff #148 #167)
169.208 +#169 := [rewrite]: #168
169.209 +#172 := [quant-intro #169]: #171
169.210 +#165 := (iff #23 #164)
169.211 +#166 := [rewrite]: #165
169.212 +#175 := [monotonicity #166 #172]: #174
169.213 +#178 := [monotonicity #175]: #177
169.214 +#181 := [quant-intro #178]: #180
169.215 +#161 := (iff #34 #160)
169.216 +#158 := (iff #33 #157)
169.217 +#155 := (iff #32 #154)
169.218 +#152 := (iff #31 #151)
169.219 +#149 := (iff #30 #148)
169.220 +#150 := [rewrite]: #149
169.221 +#153 := [quant-intro #150]: #152
169.222 +#156 := [monotonicity #153]: #155
169.223 +#159 := [monotonicity #156]: #158
169.224 +#162 := [quant-intro #159]: #161
169.225 +#183 := [trans #162 #181]: #182
169.226 +#146 := [asserted]: #34
169.227 +#184 := [mp #146 #183]: #179
169.228 +#266 := [mp~ #184 #265]: #263
169.229 +#267 := [mp #266 #299]: #297
169.230 +#314 := [mp #267 #313]: #311
169.231 +#840 := [mp #314 #839]: #837
169.232 +#754 := (not #837)
169.233 +#851 := (or #754 #848)
169.234 +#448 := (or #447 #479 #468)
169.235 +#439 := (not #448)
169.236 +#453 := (or #192 #452 #439)
169.237 +#454 := (not #453)
169.238 +#457 := (or #446 #27 #455)
169.239 +#442 := (forall (vars (?x5 T1)) (:pat #440) #457)
169.240 +#443 := (not #442)
169.241 +#422 := (or #452 #443)
169.242 +#424 := (not #422)
169.243 +#430 := (or #429 #424)
169.244 +#431 := (not #430)
169.245 +#432 := (or #431 #454)
169.246 +#433 := (not #432)
169.247 +#852 := (or #754 #433)
169.248 +#854 := (iff #852 #851)
169.249 +#856 := (iff #851 #851)
169.250 +#857 := [rewrite]: #856
169.251 +#849 := (iff #433 #848)
169.252 +#846 := (iff #432 #843)
169.253 +#379 := (or #389 #377)
169.254 +#844 := (iff #379 #843)
169.255 +#845 := [rewrite]: #844
169.256 +#841 := (iff #432 #379)
169.257 +#378 := (iff #454 #377)
169.258 +#388 := (iff #453 #386)
169.259 +#381 := (or #192 #452 #391)
169.260 +#387 := (iff #381 #386)
169.261 +#383 := [rewrite]: #387
169.262 +#382 := (iff #453 #381)
169.263 +#399 := (iff #439 #391)
169.264 +#397 := (iff #448 #396)
169.265 +#398 := [rewrite]: #397
169.266 +#384 := [monotonicity #398]: #399
169.267 +#385 := [monotonicity #384]: #382
169.268 +#375 := [trans #385 #383]: #388
169.269 +#376 := [monotonicity #375]: #378
169.270 +#392 := (iff #431 #389)
169.271 +#401 := (iff #430 #405)
169.272 +#402 := (iff #424 #400)
169.273 +#394 := (iff #422 #409)
169.274 +#410 := (or #452 #417)
169.275 +#415 := (iff #410 #409)
169.276 +#390 := [rewrite]: #415
169.277 +#411 := (iff #422 #410)
169.278 +#420 := (iff #443 #417)
169.279 +#418 := (iff #442 #416)
169.280 +#423 := (iff #457 #434)
169.281 +#435 := [rewrite]: #423
169.282 +#419 := [quant-intro #435]: #418
169.283 +#408 := [monotonicity #419]: #420
169.284 +#414 := [monotonicity #408]: #411
169.285 +#395 := [trans #414 #390]: #394
169.286 +#403 := [monotonicity #395]: #402
169.287 +#406 := [monotonicity #403]: #401
169.288 +#393 := [monotonicity #406]: #392
169.289 +#842 := [monotonicity #393 #376]: #841
169.290 +#847 := [trans #842 #845]: #846
169.291 +#850 := [monotonicity #847]: #849
169.292 +#855 := [monotonicity #850]: #854
169.293 +#858 := [trans #855 #857]: #854
169.294 +#853 := [quant-inst]: #852
169.295 +#859 := [mp #853 #858]: #851
169.296 +#934 := [unit-resolution #859 #840]: #848
169.297 +#893 := (or #843 #405)
169.298 +#894 := [def-axiom]: #893
169.299 +#935 := [unit-resolution #894 #934]: #405
169.300 +#938 := (or #389 #400)
169.301 +#41 := (+ #40 1::int)
169.302 +#42 := (uf_1 #41)
169.303 +#43 := (up_3 #42)
169.304 +#193 := (iff #43 #192)
169.305 +#190 := (= #42 #189)
169.306 +#187 := (= #41 #186)
169.307 +#188 := [rewrite]: #187
169.308 +#191 := [monotonicity #188]: #190
169.309 +#194 := [monotonicity #191]: #193
169.310 +#185 := [asserted]: #43
169.311 +#197 := [mp #185 #194]: #192
169.312 +#889 := (or #389 #429 #400)
169.313 +#890 := [def-axiom]: #889
169.314 +#939 := [unit-resolution #890 #197]: #938
169.315 +#940 := [unit-resolution #939 #935]: #400
169.316 +#881 := (or #409 #874)
169.317 +#882 := [def-axiom]: #881
169.318 +#941 := [unit-resolution #882 #940]: #874
169.319 +#555 := -1::int
169.320 +#525 := (* -1::int #524)
169.321 +#528 := (+ #40 #525)
169.322 +#494 := (>= #528 -1::int)
169.323 +#510 := (= #528 -1::int)
169.324 +#514 := (>= #40 -1::int)
169.325 +#495 := (= #524 0::int)
169.326 +#946 := (not #495)
169.327 +#467 := (<= #524 0::int)
169.328 +#942 := (not #467)
169.329 +#943 := (or #942 #452)
169.330 +#944 := [th-lemma]: #943
169.331 +#945 := [unit-resolution #944 #941]: #942
169.332 +#947 := (or #946 #467)
169.333 +#948 := [th-lemma]: #947
169.334 +#949 := [unit-resolution #948 #945]: #946
169.335 +#498 := (or #495 #514)
169.336 +#10 := (:var 0 int)
169.337 +#12 := (uf_1 #10)
169.338 +#796 := (pattern #12)
169.339 +#87 := (>= #10 0::int)
169.340 +#13 := (uf_2 #12)
169.341 +#18 := (= #13 0::int)
169.342 +#135 := (or #18 #87)
169.343 +#803 := (forall (vars (?x3 int)) (:pat #796) #135)
169.344 +#140 := (forall (vars (?x3 int)) #135)
169.345 +#806 := (iff #140 #803)
169.346 +#804 := (iff #135 #135)
169.347 +#805 := [refl]: #804
169.348 +#807 := [quant-intro #805]: #806
169.349 +#207 := (~ #140 #140)
169.350 +#225 := (~ #135 #135)
169.351 +#226 := [refl]: #225
169.352 +#208 := [nnf-pos #226]: #207
169.353 +#17 := (< #10 0::int)
169.354 +#19 := (implies #17 #18)
169.355 +#20 := (forall (vars (?x3 int)) #19)
169.356 +#143 := (iff #20 #140)
169.357 +#106 := (= 0::int #13)
169.358 +#112 := (not #17)
169.359 +#113 := (or #112 #106)
169.360 +#118 := (forall (vars (?x3 int)) #113)
169.361 +#141 := (iff #118 #140)
169.362 +#138 := (iff #113 #135)
169.363 +#132 := (or #87 #18)
169.364 +#136 := (iff #132 #135)
169.365 +#137 := [rewrite]: #136
169.366 +#133 := (iff #113 #132)
169.367 +#130 := (iff #106 #18)
169.368 +#131 := [rewrite]: #130
169.369 +#128 := (iff #112 #87)
169.370 +#88 := (not #87)
169.371 +#123 := (not #88)
169.372 +#126 := (iff #123 #87)
169.373 +#127 := [rewrite]: #126
169.374 +#124 := (iff #112 #123)
169.375 +#121 := (iff #17 #88)
169.376 +#122 := [rewrite]: #121
169.377 +#125 := [monotonicity #122]: #124
169.378 +#129 := [trans #125 #127]: #128
169.379 +#134 := [monotonicity #129 #131]: #133
169.380 +#139 := [trans #134 #137]: #138
169.381 +#142 := [quant-intro #139]: #141
169.382 +#119 := (iff #20 #118)
169.383 +#116 := (iff #19 #113)
169.384 +#109 := (implies #17 #106)
169.385 +#114 := (iff #109 #113)
169.386 +#115 := [rewrite]: #114
169.387 +#110 := (iff #19 #109)
169.388 +#107 := (iff #18 #106)
169.389 +#108 := [rewrite]: #107
169.390 +#111 := [monotonicity #108]: #110
169.391 +#117 := [trans #111 #115]: #116
169.392 +#120 := [quant-intro #117]: #119
169.393 +#144 := [trans #120 #142]: #143
169.394 +#105 := [asserted]: #20
169.395 +#145 := [mp #105 #144]: #140
169.396 +#227 := [mp~ #145 #208]: #140
169.397 +#808 := [mp #227 #807]: #803
169.398 +#532 := (not #803)
169.399 +#488 := (or #532 #495 #514)
169.400 +#529 := (>= #186 0::int)
169.401 +#496 := (or #495 #529)
169.402 +#489 := (or #532 #496)
169.403 +#474 := (iff #489 #488)
169.404 +#482 := (or #532 #498)
169.405 +#483 := (iff #482 #488)
169.406 +#493 := [rewrite]: #483
169.407 +#491 := (iff #489 #482)
169.408 +#497 := (iff #496 #498)
169.409 +#515 := (iff #529 #514)
169.410 +#516 := [rewrite]: #515
169.411 +#499 := [monotonicity #516]: #497
169.412 +#492 := [monotonicity #499]: #491
169.413 +#475 := [trans #492 #493]: #474
169.414 +#490 := [quant-inst]: #489
169.415 +#476 := [mp #490 #475]: #488
169.416 +#950 := [unit-resolution #476 #808]: #498
169.417 +#951 := [unit-resolution #950 #949]: #514
169.418 +#517 := (not #514)
169.419 +#520 := (or #510 #517)
169.420 +#69 := (= #10 #13)
169.421 +#94 := (or #69 #88)
169.422 +#797 := (forall (vars (?x2 int)) (:pat #796) #94)
169.423 +#99 := (forall (vars (?x2 int)) #94)
169.424 +#800 := (iff #99 #797)
169.425 +#798 := (iff #94 #94)
169.426 +#799 := [refl]: #798
169.427 +#801 := [quant-intro #799]: #800
169.428 +#206 := (~ #99 #99)
169.429 +#222 := (~ #94 #94)
169.430 +#223 := [refl]: #222
169.431 +#196 := [nnf-pos #223]: #206
169.432 +#14 := (= #13 #10)
169.433 +#11 := (<= 0::int #10)
169.434 +#15 := (implies #11 #14)
169.435 +#16 := (forall (vars (?x2 int)) #15)
169.436 +#102 := (iff #16 #99)
169.437 +#76 := (not #11)
169.438 +#77 := (or #76 #69)
169.439 +#82 := (forall (vars (?x2 int)) #77)
169.440 +#100 := (iff #82 #99)
169.441 +#97 := (iff #77 #94)
169.442 +#91 := (or #88 #69)
169.443 +#95 := (iff #91 #94)
169.444 +#96 := [rewrite]: #95
169.445 +#92 := (iff #77 #91)
169.446 +#89 := (iff #76 #88)
169.447 +#85 := (iff #11 #87)
169.448 +#86 := [rewrite]: #85
169.449 +#90 := [monotonicity #86]: #89
169.450 +#93 := [monotonicity #90]: #92
169.451 +#98 := [trans #93 #96]: #97
169.452 +#101 := [quant-intro #98]: #100
169.453 +#83 := (iff #16 #82)
169.454 +#80 := (iff #15 #77)
169.455 +#73 := (implies #11 #69)
169.456 +#78 := (iff #73 #77)
169.457 +#79 := [rewrite]: #78
169.458 +#74 := (iff #15 #73)
169.459 +#71 := (iff #14 #69)
169.460 +#72 := [rewrite]: #71
169.461 +#75 := [monotonicity #72]: #74
169.462 +#81 := [trans #75 #79]: #80
169.463 +#84 := [quant-intro #81]: #83
169.464 +#103 := [trans #84 #101]: #102
169.465 +#68 := [asserted]: #16
169.466 +#104 := [mp #68 #103]: #99
169.467 +#224 := [mp~ #104 #196]: #99
169.468 +#802 := [mp #224 #801]: #797
169.469 +#559 := (not #797)
169.470 +#511 := (or #559 #510 #517)
169.471 +#531 := (not #529)
169.472 +#526 := (= #186 #524)
169.473 +#527 := (or #526 #531)
169.474 +#523 := (or #559 #527)
169.475 +#507 := (iff #523 #511)
169.476 +#502 := (or #559 #520)
169.477 +#505 := (iff #502 #511)
169.478 +#506 := [rewrite]: #505
169.479 +#503 := (iff #523 #502)
169.480 +#521 := (iff #527 #520)
169.481 +#518 := (iff #531 #517)
169.482 +#519 := [monotonicity #516]: #518
169.483 +#512 := (iff #526 #510)
169.484 +#513 := [rewrite]: #512
169.485 +#522 := [monotonicity #513 #519]: #521
169.486 +#504 := [monotonicity #522]: #503
169.487 +#508 := [trans #504 #506]: #507
169.488 +#500 := [quant-inst]: #523
169.489 +#501 := [mp #500 #508]: #511
169.490 +#952 := [unit-resolution #501 #802]: #520
169.491 +#953 := [unit-resolution #952 #951]: #510
169.492 +#954 := (not #510)
169.493 +#955 := (or #954 #494)
169.494 +#956 := [th-lemma]: #955
169.495 +#957 := [unit-resolution #956 #953]: #494
169.496 +#959 := (not #494)
169.497 +#960 := (or #958 #452 #959)
169.498 +#961 := [th-lemma]: #960
169.499 +#962 := [unit-resolution #961 #957 #941]: #958
169.500 +#964 := (or #963 #537)
169.501 +#965 := [th-lemma]: #964
169.502 +#966 := [unit-resolution #965 #962]: #963
169.503 +#583 := (>= #38 0::int)
169.504 +#584 := (not #583)
169.505 +#556 := (* -1::int #40)
169.506 +#557 := (+ #38 #556)
169.507 +#558 := (= #557 0::int)
169.508 +#971 := (not #558)
169.509 +#544 := (>= #557 0::int)
169.510 +#967 := (not #544)
169.511 +#201 := (>= #37 1::int)
169.512 +#202 := (not #201)
169.513 +#44 := (<= 1::int #37)
169.514 +#45 := (not #44)
169.515 +#203 := (iff #45 #202)
169.516 +#199 := (iff #44 #201)
169.517 +#200 := [rewrite]: #199
169.518 +#204 := [monotonicity #200]: #203
169.519 +#195 := [asserted]: #45
169.520 +#205 := [mp #195 #204]: #202
169.521 +#968 := (or #967 #201 #452 #959)
169.522 +#969 := [th-lemma]: #968
169.523 +#970 := [unit-resolution #969 #205 #957 #941]: #967
169.524 +#972 := (or #971 #544)
169.525 +#973 := [th-lemma]: #972
169.526 +#974 := [unit-resolution #973 #970]: #971
169.527 +#562 := (or #558 #584)
169.528 +#564 := (or #559 #558 #584)
169.529 +#567 := (= #38 #40)
169.530 +#585 := (or #567 #584)
169.531 +#543 := (or #559 #585)
169.532 +#542 := (iff #543 #564)
169.533 +#550 := (or #559 #562)
169.534 +#551 := (iff #550 #564)
169.535 +#554 := [rewrite]: #551
169.536 +#552 := (iff #543 #550)
169.537 +#404 := (iff #585 #562)
169.538 +#560 := (iff #567 #558)
169.539 +#561 := [rewrite]: #560
169.540 +#563 := [monotonicity #561]: #404
169.541 +#553 := [monotonicity #563]: #552
169.542 +#545 := [trans #553 #554]: #542
169.543 +#546 := [quant-inst]: #543
169.544 +#547 := [mp #546 #545]: #564
169.545 +#975 := [unit-resolution #547 #802]: #562
169.546 +#976 := [unit-resolution #975 #974]: #584
169.547 +#539 := (or #549 #583)
169.548 +#535 := (or #532 #549 #583)
169.549 +#536 := (or #532 #539)
169.550 +#533 := (iff #536 #535)
169.551 +#541 := [rewrite]: #533
169.552 +#540 := [quant-inst]: #536
169.553 +#534 := [mp #540 #541]: #535
169.554 +#977 := [unit-resolution #534 #808]: #539
169.555 +[unit-resolution #977 #976 #966]: false
169.556 +unsat
170.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
170.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_01 Tue Oct 20 10:11:30 2009 +0200
170.3 @@ -0,0 +1,10 @@
170.4 +(benchmark Isabelle
170.5 +:extrafuns (
170.6 + (uf_1 Int)
170.7 + (uf_2 Int)
170.8 + )
170.9 +:assumption (< 0 uf_1)
170.10 +:assumption (< 0 (* uf_1 uf_2))
170.11 +:assumption (not (< 0 uf_2))
170.12 +:formula true
170.13 +)
171.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
171.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_01.proof Tue Oct 20 10:11:30 2009 +0200
171.3 @@ -0,0 +1,1 @@
171.4 +unsat
172.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
172.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_02 Tue Oct 20 10:11:30 2009 +0200
172.3 @@ -0,0 +1,9 @@
172.4 +(benchmark Isabelle
172.5 +:extrafuns (
172.6 + (uf_1 Int)
172.7 + (uf_2 Int)
172.8 + (uf_3 Int)
172.9 + )
172.10 +:assumption (not (= (* uf_1 (+ (+ uf_2 1) uf_3)) (+ (* uf_1 uf_2) (* uf_1 (+ uf_3 1)))))
172.11 +:formula true
172.12 +)
173.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
173.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_02.proof Tue Oct 20 10:11:30 2009 +0200
173.3 @@ -0,0 +1,75 @@
173.4 +#2 := false
173.5 +#6 := 1::int
173.6 +decl uf_3 :: int
173.7 +#8 := uf_3
173.8 +#12 := (+ uf_3 1::int)
173.9 +decl uf_1 :: int
173.10 +#4 := uf_1
173.11 +#13 := (* uf_1 #12)
173.12 +decl uf_2 :: int
173.13 +#5 := uf_2
173.14 +#11 := (* uf_1 uf_2)
173.15 +#14 := (+ #11 #13)
173.16 +#7 := (+ uf_2 1::int)
173.17 +#9 := (+ #7 uf_3)
173.18 +#10 := (* uf_1 #9)
173.19 +#15 := (= #10 #14)
173.20 +#16 := (not #15)
173.21 +#85 := (iff #16 false)
173.22 +#1 := true
173.23 +#80 := (not true)
173.24 +#83 := (iff #80 false)
173.25 +#84 := [rewrite]: #83
173.26 +#81 := (iff #16 #80)
173.27 +#78 := (iff #15 true)
173.28 +#48 := (* uf_1 uf_3)
173.29 +#49 := (+ #11 #48)
173.30 +#50 := (+ uf_1 #49)
173.31 +#73 := (= #50 #50)
173.32 +#76 := (iff #73 true)
173.33 +#77 := [rewrite]: #76
173.34 +#74 := (iff #15 #73)
173.35 +#71 := (= #14 #50)
173.36 +#61 := (+ uf_1 #48)
173.37 +#66 := (+ #11 #61)
173.38 +#69 := (= #66 #50)
173.39 +#70 := [rewrite]: #69
173.40 +#67 := (= #14 #66)
173.41 +#64 := (= #13 #61)
173.42 +#55 := (+ 1::int uf_3)
173.43 +#58 := (* uf_1 #55)
173.44 +#62 := (= #58 #61)
173.45 +#63 := [rewrite]: #62
173.46 +#59 := (= #13 #58)
173.47 +#56 := (= #12 #55)
173.48 +#57 := [rewrite]: #56
173.49 +#60 := [monotonicity #57]: #59
173.50 +#65 := [trans #60 #63]: #64
173.51 +#68 := [monotonicity #65]: #67
173.52 +#72 := [trans #68 #70]: #71
173.53 +#53 := (= #10 #50)
173.54 +#39 := (+ uf_2 uf_3)
173.55 +#40 := (+ 1::int #39)
173.56 +#45 := (* uf_1 #40)
173.57 +#51 := (= #45 #50)
173.58 +#52 := [rewrite]: #51
173.59 +#46 := (= #10 #45)
173.60 +#43 := (= #9 #40)
173.61 +#33 := (+ 1::int uf_2)
173.62 +#36 := (+ #33 uf_3)
173.63 +#41 := (= #36 #40)
173.64 +#42 := [rewrite]: #41
173.65 +#37 := (= #9 #36)
173.66 +#34 := (= #7 #33)
173.67 +#35 := [rewrite]: #34
173.68 +#38 := [monotonicity #35]: #37
173.69 +#44 := [trans #38 #42]: #43
173.70 +#47 := [monotonicity #44]: #46
173.71 +#54 := [trans #47 #52]: #53
173.72 +#75 := [monotonicity #54 #72]: #74
173.73 +#79 := [trans #75 #77]: #78
173.74 +#82 := [monotonicity #79]: #81
173.75 +#86 := [trans #82 #84]: #85
173.76 +#32 := [asserted]: #16
173.77 +[mp #32 #86]: false
173.78 +unsat
174.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
174.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_03 Tue Oct 20 10:11:30 2009 +0200
174.3 @@ -0,0 +1,8 @@
174.4 +(benchmark Isabelle
174.5 +:extrafuns (
174.6 + (uf_1 Real)
174.7 + (uf_2 Real)
174.8 + )
174.9 +:assumption (not (= (- (* uf_1 (+ 1.0 uf_2)) (* uf_1 (- 1.0 uf_2))) (* (* 2.0 uf_1) uf_2)))
174.10 +:formula true
174.11 +)
175.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
175.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_03.proof Tue Oct 20 10:11:30 2009 +0200
175.3 @@ -0,0 +1,62 @@
175.4 +#2 := false
175.5 +decl uf_2 :: real
175.6 +#6 := uf_2
175.7 +decl uf_1 :: real
175.8 +#4 := uf_1
175.9 +#12 := 2::real
175.10 +#13 := (* 2::real uf_1)
175.11 +#14 := (* #13 uf_2)
175.12 +#5 := 1::real
175.13 +#9 := (- 1::real uf_2)
175.14 +#10 := (* uf_1 #9)
175.15 +#7 := (+ 1::real uf_2)
175.16 +#8 := (* uf_1 #7)
175.17 +#11 := (- #8 #10)
175.18 +#15 := (= #11 #14)
175.19 +#16 := (not #15)
175.20 +#73 := (iff #16 false)
175.21 +#1 := true
175.22 +#68 := (not true)
175.23 +#71 := (iff #68 false)
175.24 +#72 := [rewrite]: #71
175.25 +#69 := (iff #16 #68)
175.26 +#66 := (iff #15 true)
175.27 +#33 := (* uf_1 uf_2)
175.28 +#55 := (* 2::real #33)
175.29 +#61 := (= #55 #55)
175.30 +#64 := (iff #61 true)
175.31 +#65 := [rewrite]: #64
175.32 +#62 := (iff #15 #61)
175.33 +#59 := (= #14 #55)
175.34 +#60 := [rewrite]: #59
175.35 +#57 := (= #11 #55)
175.36 +#37 := -1::real
175.37 +#45 := (* -1::real #33)
175.38 +#46 := (+ uf_1 #45)
175.39 +#34 := (+ uf_1 #33)
175.40 +#51 := (- #34 #46)
175.41 +#54 := (= #51 #55)
175.42 +#56 := [rewrite]: #54
175.43 +#52 := (= #11 #51)
175.44 +#49 := (= #10 #46)
175.45 +#38 := (* -1::real uf_2)
175.46 +#39 := (+ 1::real #38)
175.47 +#42 := (* uf_1 #39)
175.48 +#47 := (= #42 #46)
175.49 +#48 := [rewrite]: #47
175.50 +#43 := (= #10 #42)
175.51 +#40 := (= #9 #39)
175.52 +#41 := [rewrite]: #40
175.53 +#44 := [monotonicity #41]: #43
175.54 +#50 := [trans #44 #48]: #49
175.55 +#35 := (= #8 #34)
175.56 +#36 := [rewrite]: #35
175.57 +#53 := [monotonicity #36 #50]: #52
175.58 +#58 := [trans #53 #56]: #57
175.59 +#63 := [monotonicity #58 #60]: #62
175.60 +#67 := [trans #63 #65]: #66
175.61 +#70 := [monotonicity #67]: #69
175.62 +#74 := [trans #70 #72]: #73
175.63 +#32 := [asserted]: #16
175.64 +[mp #32 #74]: false
175.65 +unsat
176.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
176.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_04 Tue Oct 20 10:11:30 2009 +0200
176.3 @@ -0,0 +1,11 @@
176.4 +(benchmark Isabelle
176.5 +:extrafuns (
176.6 + (uf_1 Int)
176.7 + (uf_3 Int)
176.8 + (uf_5 Int)
176.9 + (uf_4 Int)
176.10 + (uf_2 Int)
176.11 + )
176.12 +:assumption (not (= (+ (+ uf_1 (* (+ 1 uf_2) (+ uf_3 uf_4))) (* uf_2 uf_5)) (- (+ uf_1 (+ (+ (* (* 2 (+ 1 uf_2)) (+ uf_3 uf_4)) (* (+ 1 uf_2) uf_5)) (* uf_5 uf_2))) (* (+ 1 uf_2) (+ (+ uf_3 uf_5) uf_4)))))
176.13 +:formula true
176.14 +)
177.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
177.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_04.proof Tue Oct 20 10:11:30 2009 +0200
177.3 @@ -0,0 +1,141 @@
177.4 +#2 := false
177.5 +decl uf_4 :: int
177.6 +#9 := uf_4
177.7 +decl uf_5 :: int
177.8 +#13 := uf_5
177.9 +decl uf_3 :: int
177.10 +#8 := uf_3
177.11 +#24 := (+ uf_3 uf_5)
177.12 +#25 := (+ #24 uf_4)
177.13 +decl uf_2 :: int
177.14 +#6 := uf_2
177.15 +#5 := 1::int
177.16 +#7 := (+ 1::int uf_2)
177.17 +#26 := (* #7 #25)
177.18 +#21 := (* uf_5 uf_2)
177.19 +#19 := (* #7 uf_5)
177.20 +#10 := (+ uf_3 uf_4)
177.21 +#16 := 2::int
177.22 +#17 := (* 2::int #7)
177.23 +#18 := (* #17 #10)
177.24 +#20 := (+ #18 #19)
177.25 +#22 := (+ #20 #21)
177.26 +decl uf_1 :: int
177.27 +#4 := uf_1
177.28 +#23 := (+ uf_1 #22)
177.29 +#27 := (- #23 #26)
177.30 +#14 := (* uf_2 uf_5)
177.31 +#11 := (* #7 #10)
177.32 +#12 := (+ uf_1 #11)
177.33 +#15 := (+ #12 #14)
177.34 +#28 := (= #15 #27)
177.35 +#29 := (not #28)
177.36 +#149 := (iff #29 false)
177.37 +#1 := true
177.38 +#144 := (not true)
177.39 +#147 := (iff #144 false)
177.40 +#148 := [rewrite]: #147
177.41 +#145 := (iff #29 #144)
177.42 +#142 := (iff #28 true)
177.43 +#47 := (* uf_2 uf_4)
177.44 +#46 := (* uf_2 uf_3)
177.45 +#48 := (+ #46 #47)
177.46 +#59 := (+ #14 #48)
177.47 +#60 := (+ uf_4 #59)
177.48 +#61 := (+ uf_3 #60)
177.49 +#62 := (+ uf_1 #61)
177.50 +#136 := (= #62 #62)
177.51 +#140 := (iff #136 true)
177.52 +#141 := [rewrite]: #140
177.53 +#135 := (iff #28 #136)
177.54 +#138 := (= #27 #62)
177.55 +#123 := (+ uf_5 #59)
177.56 +#124 := (+ uf_4 #123)
177.57 +#125 := (+ uf_3 #124)
177.58 +#77 := (* 2::int #47)
177.59 +#75 := (* 2::int #46)
177.60 +#78 := (+ #75 #77)
177.61 +#104 := (* 2::int #14)
177.62 +#105 := (+ #104 #78)
177.63 +#106 := (+ uf_5 #105)
177.64 +#76 := (* 2::int uf_4)
177.65 +#107 := (+ #76 #106)
177.66 +#74 := (* 2::int uf_3)
177.67 +#108 := (+ #74 #107)
177.68 +#113 := (+ uf_1 #108)
177.69 +#130 := (- #113 #125)
177.70 +#133 := (= #130 #62)
177.71 +#139 := [rewrite]: #133
177.72 +#131 := (= #27 #130)
177.73 +#128 := (= #26 #125)
177.74 +#116 := (+ uf_4 uf_5)
177.75 +#117 := (+ uf_3 #116)
177.76 +#120 := (* #7 #117)
177.77 +#126 := (= #120 #125)
177.78 +#127 := [rewrite]: #126
177.79 +#121 := (= #26 #120)
177.80 +#118 := (= #25 #117)
177.81 +#119 := [rewrite]: #118
177.82 +#122 := [monotonicity #119]: #121
177.83 +#129 := [trans #122 #127]: #128
177.84 +#114 := (= #23 #113)
177.85 +#111 := (= #22 #108)
177.86 +#91 := (+ #14 #78)
177.87 +#92 := (+ uf_5 #91)
177.88 +#93 := (+ #76 #92)
177.89 +#94 := (+ #74 #93)
177.90 +#101 := (+ #94 #14)
177.91 +#109 := (= #101 #108)
177.92 +#110 := [rewrite]: #109
177.93 +#102 := (= #22 #101)
177.94 +#99 := (= #21 #14)
177.95 +#100 := [rewrite]: #99
177.96 +#97 := (= #20 #94)
177.97 +#85 := (+ uf_5 #14)
177.98 +#79 := (+ #76 #78)
177.99 +#80 := (+ #74 #79)
177.100 +#88 := (+ #80 #85)
177.101 +#95 := (= #88 #94)
177.102 +#96 := [rewrite]: #95
177.103 +#89 := (= #20 #88)
177.104 +#86 := (= #19 #85)
177.105 +#87 := [rewrite]: #86
177.106 +#83 := (= #18 #80)
177.107 +#67 := (* 2::int uf_2)
177.108 +#68 := (+ 2::int #67)
177.109 +#71 := (* #68 #10)
177.110 +#81 := (= #71 #80)
177.111 +#82 := [rewrite]: #81
177.112 +#72 := (= #18 #71)
177.113 +#69 := (= #17 #68)
177.114 +#70 := [rewrite]: #69
177.115 +#73 := [monotonicity #70]: #72
177.116 +#84 := [trans #73 #82]: #83
177.117 +#90 := [monotonicity #84 #87]: #89
177.118 +#98 := [trans #90 #96]: #97
177.119 +#103 := [monotonicity #98 #100]: #102
177.120 +#112 := [trans #103 #110]: #111
177.121 +#115 := [monotonicity #112]: #114
177.122 +#132 := [monotonicity #115 #129]: #131
177.123 +#137 := [trans #132 #139]: #138
177.124 +#65 := (= #15 #62)
177.125 +#49 := (+ uf_4 #48)
177.126 +#50 := (+ uf_3 #49)
177.127 +#53 := (+ uf_1 #50)
177.128 +#56 := (+ #53 #14)
177.129 +#63 := (= #56 #62)
177.130 +#64 := [rewrite]: #63
177.131 +#57 := (= #15 #56)
177.132 +#54 := (= #12 #53)
177.133 +#51 := (= #11 #50)
177.134 +#52 := [rewrite]: #51
177.135 +#55 := [monotonicity #52]: #54
177.136 +#58 := [monotonicity #55]: #57
177.137 +#66 := [trans #58 #64]: #65
177.138 +#134 := [monotonicity #66 #137]: #135
177.139 +#143 := [trans #134 #141]: #142
177.140 +#146 := [monotonicity #143]: #145
177.141 +#150 := [trans #146 #148]: #149
177.142 +#45 := [asserted]: #29
177.143 +[mp #45 #150]: false
177.144 +unsat
178.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
178.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_01 Tue Oct 20 10:11:30 2009 +0200
178.3 @@ -0,0 +1,17 @@
178.4 +(benchmark Isabelle
178.5 +:extrasorts ( T2 T3 T1)
178.6 +:extrafuns (
178.7 + (uf_2 T1 T2)
178.8 + (uf_3 T1 T3)
178.9 + (uf_1 T2 T3 T1)
178.10 + (uf_6 T2)
178.11 + (uf_4 T2)
178.12 + (uf_5 T3)
178.13 + )
178.14 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1) (uf_3 ?x1)) ?x1))
178.15 +:assumption (forall (?x2 T2) (?x3 T3) (= (uf_3 (uf_1 ?x2 ?x3)) ?x3))
178.16 +:assumption (forall (?x4 T2) (?x5 T3) (= (uf_2 (uf_1 ?x4 ?x5)) ?x4))
178.17 +:assumption (= (uf_2 (uf_1 uf_4 uf_5)) uf_6)
178.18 +:assumption (not (= uf_4 uf_6))
178.19 +:formula true
178.20 +)
179.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
179.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_01.proof Tue Oct 20 10:11:30 2009 +0200
179.3 @@ -0,0 +1,50 @@
179.4 +#2 := false
179.5 +decl uf_6 :: T2
179.6 +#23 := uf_6
179.7 +decl uf_4 :: T2
179.8 +#19 := uf_4
179.9 +#25 := (= uf_4 uf_6)
179.10 +decl uf_2 :: (-> T1 T2)
179.11 +decl uf_1 :: (-> T2 T3 T1)
179.12 +decl uf_5 :: T3
179.13 +#20 := uf_5
179.14 +#21 := (uf_1 uf_4 uf_5)
179.15 +#22 := (uf_2 #21)
179.16 +#24 := (= #22 uf_6)
179.17 +#65 := [asserted]: #24
179.18 +#143 := (= uf_4 #22)
179.19 +#11 := (:var 0 T3)
179.20 +#10 := (:var 1 T2)
179.21 +#12 := (uf_1 #10 #11)
179.22 +#567 := (pattern #12)
179.23 +#16 := (uf_2 #12)
179.24 +#58 := (= #10 #16)
179.25 +#574 := (forall (vars (?x4 T2) (?x5 T3)) (:pat #567) #58)
179.26 +#62 := (forall (vars (?x4 T2) (?x5 T3)) #58)
179.27 +#577 := (iff #62 #574)
179.28 +#575 := (iff #58 #58)
179.29 +#576 := [refl]: #575
179.30 +#578 := [quant-intro #576]: #577
179.31 +#71 := (~ #62 #62)
179.32 +#87 := (~ #58 #58)
179.33 +#88 := [refl]: #87
179.34 +#72 := [nnf-pos #88]: #71
179.35 +#17 := (= #16 #10)
179.36 +#18 := (forall (vars (?x4 T2) (?x5 T3)) #17)
179.37 +#63 := (iff #18 #62)
179.38 +#60 := (iff #17 #58)
179.39 +#61 := [rewrite]: #60
179.40 +#64 := [quant-intro #61]: #63
179.41 +#57 := [asserted]: #18
179.42 +#67 := [mp #57 #64]: #62
179.43 +#89 := [mp~ #67 #72]: #62
179.44 +#579 := [mp #89 #578]: #574
179.45 +#214 := (not #574)
179.46 +#551 := (or #214 #143)
179.47 +#553 := [quant-inst]: #551
179.48 +#233 := [unit-resolution #553 #579]: #143
179.49 +#235 := [trans #233 #65]: #25
179.50 +#26 := (not #25)
179.51 +#66 := [asserted]: #26
179.52 +[unit-resolution #66 #235]: false
179.53 +unsat
180.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
180.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_02 Tue Oct 20 10:11:30 2009 +0200
180.3 @@ -0,0 +1,24 @@
180.4 +(benchmark Isabelle
180.5 +:extrasorts ( T2 T3 T1 T4)
180.6 +:extrafuns (
180.7 + (uf_2 T1 T2)
180.8 + (uf_5 T4 T3)
180.9 + (uf_3 T1 T3)
180.10 + (uf_6 T4 T2)
180.11 + (uf_1 T2 T3 T1)
180.12 + (uf_4 T3 T2 T4)
180.13 + (uf_8 T2)
180.14 + (uf_9 T3)
180.15 + (uf_7 T1)
180.16 + (uf_10 T4)
180.17 + )
180.18 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1) (uf_3 ?x1)) ?x1))
180.19 +:assumption (forall (?x2 T4) (= (uf_4 (uf_5 ?x2) (uf_6 ?x2)) ?x2))
180.20 +:assumption (forall (?x3 T2) (?x4 T3) (= (uf_3 (uf_1 ?x3 ?x4)) ?x4))
180.21 +:assumption (forall (?x5 T3) (?x6 T2) (= (uf_6 (uf_4 ?x5 ?x6)) ?x6))
180.22 +:assumption (forall (?x7 T2) (?x8 T3) (= (uf_2 (uf_1 ?x7 ?x8)) ?x7))
180.23 +:assumption (forall (?x9 T3) (?x10 T2) (= (uf_5 (uf_4 ?x9 ?x10)) ?x9))
180.24 +:assumption (and (= uf_7 (uf_1 uf_8 uf_9)) (= uf_10 (uf_4 uf_9 uf_8)))
180.25 +:assumption (not (= (uf_2 uf_7) (uf_6 uf_10)))
180.26 +:formula true
180.27 +)
181.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
181.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_02.proof Tue Oct 20 10:11:30 2009 +0200
181.3 @@ -0,0 +1,105 @@
181.4 +#2 := false
181.5 +decl uf_6 :: (-> T4 T2)
181.6 +decl uf_10 :: T4
181.7 +#39 := uf_10
181.8 +#44 := (uf_6 uf_10)
181.9 +decl uf_2 :: (-> T1 T2)
181.10 +decl uf_7 :: T1
181.11 +#34 := uf_7
181.12 +#43 := (uf_2 uf_7)
181.13 +#45 := (= #43 #44)
181.14 +decl uf_4 :: (-> T3 T2 T4)
181.15 +decl uf_8 :: T2
181.16 +#35 := uf_8
181.17 +decl uf_9 :: T3
181.18 +#36 := uf_9
181.19 +#40 := (uf_4 uf_9 uf_8)
181.20 +#204 := (uf_6 #40)
181.21 +#598 := (= #204 #44)
181.22 +#595 := (= #44 #204)
181.23 +#41 := (= uf_10 #40)
181.24 +decl uf_1 :: (-> T2 T3 T1)
181.25 +#37 := (uf_1 uf_8 uf_9)
181.26 +#38 := (= uf_7 #37)
181.27 +#42 := (and #38 #41)
181.28 +#109 := [asserted]: #42
181.29 +#114 := [and-elim #109]: #41
181.30 +#256 := [monotonicity #114]: #595
181.31 +#599 := [symm #256]: #598
181.32 +#596 := (= #43 #204)
181.33 +#269 := (= uf_8 #204)
181.34 +#23 := (:var 0 T2)
181.35 +#22 := (:var 1 T3)
181.36 +#24 := (uf_4 #22 #23)
181.37 +#643 := (pattern #24)
181.38 +#25 := (uf_6 #24)
181.39 +#86 := (= #23 #25)
181.40 +#644 := (forall (vars (?x5 T3) (?x6 T2)) (:pat #643) #86)
181.41 +#90 := (forall (vars (?x5 T3) (?x6 T2)) #86)
181.42 +#647 := (iff #90 #644)
181.43 +#645 := (iff #86 #86)
181.44 +#646 := [refl]: #645
181.45 +#648 := [quant-intro #646]: #647
181.46 +#119 := (~ #90 #90)
181.47 +#144 := (~ #86 #86)
181.48 +#145 := [refl]: #144
181.49 +#120 := [nnf-pos #145]: #119
181.50 +#26 := (= #25 #23)
181.51 +#27 := (forall (vars (?x5 T3) (?x6 T2)) #26)
181.52 +#91 := (iff #27 #90)
181.53 +#88 := (iff #26 #86)
181.54 +#89 := [rewrite]: #88
181.55 +#92 := [quant-intro #89]: #91
181.56 +#85 := [asserted]: #27
181.57 +#95 := [mp #85 #92]: #90
181.58 +#146 := [mp~ #95 #120]: #90
181.59 +#649 := [mp #146 #648]: #644
181.60 +#613 := (not #644)
181.61 +#619 := (or #613 #269)
181.62 +#609 := [quant-inst]: #619
181.63 +#267 := [unit-resolution #609 #649]: #269
181.64 +#600 := (= #43 uf_8)
181.65 +#289 := (uf_2 #37)
181.66 +#259 := (= #289 uf_8)
181.67 +#296 := (= uf_8 #289)
181.68 +#17 := (:var 0 T3)
181.69 +#16 := (:var 1 T2)
181.70 +#18 := (uf_1 #16 #17)
181.71 +#636 := (pattern #18)
181.72 +#28 := (uf_2 #18)
181.73 +#94 := (= #16 #28)
181.74 +#650 := (forall (vars (?x7 T2) (?x8 T3)) (:pat #636) #94)
181.75 +#98 := (forall (vars (?x7 T2) (?x8 T3)) #94)
181.76 +#653 := (iff #98 #650)
181.77 +#651 := (iff #94 #94)
181.78 +#652 := [refl]: #651
181.79 +#654 := [quant-intro #652]: #653
181.80 +#121 := (~ #98 #98)
181.81 +#147 := (~ #94 #94)
181.82 +#148 := [refl]: #147
181.83 +#122 := [nnf-pos #148]: #121
181.84 +#29 := (= #28 #16)
181.85 +#30 := (forall (vars (?x7 T2) (?x8 T3)) #29)
181.86 +#99 := (iff #30 #98)
181.87 +#96 := (iff #29 #94)
181.88 +#97 := [rewrite]: #96
181.89 +#100 := [quant-intro #97]: #99
181.90 +#93 := [asserted]: #30
181.91 +#103 := [mp #93 #100]: #98
181.92 +#149 := [mp~ #103 #122]: #98
181.93 +#655 := [mp #149 #654]: #650
181.94 +#615 := (not #650)
181.95 +#616 := (or #615 #296)
181.96 +#617 := [quant-inst]: #616
181.97 +#618 := [unit-resolution #617 #655]: #296
181.98 +#597 := [symm #618]: #259
181.99 +#611 := (= #43 #289)
181.100 +#113 := [and-elim #109]: #38
181.101 +#252 := [monotonicity #113]: #611
181.102 +#601 := [trans #252 #597]: #600
181.103 +#602 := [trans #601 #267]: #596
181.104 +#238 := [trans #602 #599]: #45
181.105 +#46 := (not #45)
181.106 +#110 := [asserted]: #46
181.107 +[unit-resolution #110 #238]: false
181.108 +unsat
182.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
182.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_01 Tue Oct 20 10:11:30 2009 +0200
182.3 @@ -0,0 +1,4 @@
182.4 +(benchmark Isabelle
182.5 +:assumption (not true)
182.6 +:formula true
182.7 +)
183.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
183.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_01.proof Tue Oct 20 10:11:30 2009 +0200
183.3 @@ -0,0 +1,8 @@
183.4 +#2 := false
183.5 +#1 := true
183.6 +#4 := (not true)
183.7 +#21 := (iff #4 false)
183.8 +#22 := [rewrite]: #21
183.9 +#20 := [asserted]: #4
183.10 +[mp #20 #22]: false
183.11 +unsat
184.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
184.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_02 Tue Oct 20 10:11:30 2009 +0200
184.3 @@ -0,0 +1,8 @@
184.4 +(benchmark Isabelle
184.5 +:extrasorts ( T1)
184.6 +:extrapreds (
184.7 + (up_1)
184.8 + )
184.9 +:assumption (not (or up_1 (not up_1)))
184.10 +:formula true
184.11 +)
185.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
185.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_02.proof Tue Oct 20 10:11:30 2009 +0200
185.3 @@ -0,0 +1,19 @@
185.4 +#2 := false
185.5 +decl up_1 :: bool
185.6 +#4 := up_1
185.7 +#5 := (not up_1)
185.8 +#6 := (or up_1 #5)
185.9 +#7 := (not #6)
185.10 +#31 := (iff #7 false)
185.11 +#1 := true
185.12 +#26 := (not true)
185.13 +#29 := (iff #26 false)
185.14 +#30 := [rewrite]: #29
185.15 +#27 := (iff #7 #26)
185.16 +#24 := (iff #6 true)
185.17 +#25 := [rewrite]: #24
185.18 +#28 := [monotonicity #25]: #27
185.19 +#32 := [trans #28 #30]: #31
185.20 +#23 := [asserted]: #7
185.21 +[mp #23 #32]: false
185.22 +unsat
186.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
186.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_03 Tue Oct 20 10:11:30 2009 +0200
186.3 @@ -0,0 +1,8 @@
186.4 +(benchmark Isabelle
186.5 +:extrasorts ( T1)
186.6 +:extrapreds (
186.7 + (up_1)
186.8 + )
186.9 +:assumption (not (iff (and up_1 true) up_1))
186.10 +:formula true
186.11 +)
187.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
187.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_03.proof Tue Oct 20 10:11:30 2009 +0200
187.3 @@ -0,0 +1,25 @@
187.4 +#2 := false
187.5 +decl up_1 :: bool
187.6 +#4 := up_1
187.7 +#1 := true
187.8 +#5 := (and up_1 true)
187.9 +#6 := (iff #5 up_1)
187.10 +#7 := (not #6)
187.11 +#37 := (iff #7 false)
187.12 +#32 := (not true)
187.13 +#35 := (iff #32 false)
187.14 +#36 := [rewrite]: #35
187.15 +#33 := (iff #7 #32)
187.16 +#30 := (iff #6 true)
187.17 +#25 := (iff up_1 up_1)
187.18 +#28 := (iff #25 true)
187.19 +#29 := [rewrite]: #28
187.20 +#26 := (iff #6 #25)
187.21 +#24 := [rewrite]: #6
187.22 +#27 := [monotonicity #24]: #26
187.23 +#31 := [trans #27 #29]: #30
187.24 +#34 := [monotonicity #31]: #33
187.25 +#38 := [trans #34 #36]: #37
187.26 +#23 := [asserted]: #7
187.27 +[mp #23 #38]: false
187.28 +unsat
188.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
188.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_04 Tue Oct 20 10:11:30 2009 +0200
188.3 @@ -0,0 +1,10 @@
188.4 +(benchmark Isabelle
188.5 +:extrasorts ( T1)
188.6 +:extrapreds (
188.7 + (up_1)
188.8 + (up_2)
188.9 + )
188.10 +:assumption (and (or up_1 up_2) (not up_1))
188.11 +:assumption (not up_2)
188.12 +:formula true
188.13 +)
189.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
189.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_04.proof Tue Oct 20 10:11:30 2009 +0200
189.3 @@ -0,0 +1,38 @@
189.4 +#2 := false
189.5 +decl up_2 :: bool
189.6 +#5 := up_2
189.7 +decl up_1 :: bool
189.8 +#4 := up_1
189.9 +#6 := (or up_1 up_2)
189.10 +#51 := (iff #6 false)
189.11 +#46 := (or false false)
189.12 +#49 := (iff #46 false)
189.13 +#50 := [rewrite]: #49
189.14 +#47 := (iff #6 #46)
189.15 +#40 := (iff up_2 false)
189.16 +#9 := (not up_2)
189.17 +#43 := (iff #9 #40)
189.18 +#41 := (iff #40 #9)
189.19 +#42 := [rewrite]: #41
189.20 +#44 := [symm #42]: #43
189.21 +#32 := [asserted]: #9
189.22 +#45 := [mp #32 #44]: #40
189.23 +#35 := (iff up_1 false)
189.24 +#7 := (not up_1)
189.25 +#37 := (iff #7 #35)
189.26 +#33 := (iff #35 #7)
189.27 +#36 := [rewrite]: #33
189.28 +#38 := [symm #36]: #37
189.29 +#26 := (and #7 #6)
189.30 +#8 := (and #6 #7)
189.31 +#27 := (iff #8 #26)
189.32 +#28 := [rewrite]: #27
189.33 +#25 := [asserted]: #8
189.34 +#31 := [mp #25 #28]: #26
189.35 +#29 := [and-elim #31]: #7
189.36 +#39 := [mp #29 #38]: #35
189.37 +#48 := [monotonicity #39 #45]: #47
189.38 +#52 := [trans #48 #50]: #51
189.39 +#30 := [and-elim #31]: #6
189.40 +[mp #30 #52]: false
189.41 +unsat
190.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
190.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_05 Tue Oct 20 10:11:30 2009 +0200
190.3 @@ -0,0 +1,12 @@
190.4 +(benchmark Isabelle
190.5 +:extrasorts ( T1)
190.6 +:extrapreds (
190.7 + (up_1)
190.8 + (up_2)
190.9 + (up_3)
190.10 + (up_4)
190.11 + )
190.12 +:assumption (or (and up_1 up_2) (and up_3 up_4))
190.13 +:assumption (not (or (and up_1 up_2) (and up_3 up_4)))
190.14 +:formula true
190.15 +)
191.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
191.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_05.proof Tue Oct 20 10:11:30 2009 +0200
191.3 @@ -0,0 +1,1 @@
191.4 +unsat
192.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
192.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_06 Tue Oct 20 10:11:30 2009 +0200
192.3 @@ -0,0 +1,10 @@
192.4 +(benchmark Isabelle
192.5 +:extrasorts ( T1)
192.6 +:extrapreds (
192.7 + (up_1)
192.8 + (up_2)
192.9 + (up_3)
192.10 + )
192.11 +:assumption (not (implies (or (and up_1 up_2) up_3) (or (implies up_1 (or (and up_3 up_2) (and up_1 up_3))) up_1)))
192.12 +:formula true
192.13 +)
193.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
193.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_06.proof Tue Oct 20 10:11:30 2009 +0200
193.3 @@ -0,0 +1,71 @@
193.4 +#2 := false
193.5 +decl up_1 :: bool
193.6 +#4 := up_1
193.7 +decl up_3 :: bool
193.8 +#7 := up_3
193.9 +#10 := (and up_1 up_3)
193.10 +decl up_2 :: bool
193.11 +#5 := up_2
193.12 +#9 := (and up_3 up_2)
193.13 +#11 := (or #9 #10)
193.14 +#12 := (implies up_1 #11)
193.15 +#13 := (or #12 up_1)
193.16 +#6 := (and up_1 up_2)
193.17 +#8 := (or #6 up_3)
193.18 +#14 := (implies #8 #13)
193.19 +#15 := (not #14)
193.20 +#81 := (iff #15 false)
193.21 +#32 := (and up_2 up_3)
193.22 +#38 := (or #10 #32)
193.23 +#46 := (not up_1)
193.24 +#47 := (or #46 #38)
193.25 +#55 := (or up_1 #47)
193.26 +#63 := (not #8)
193.27 +#64 := (or #63 #55)
193.28 +#69 := (not #64)
193.29 +#79 := (iff #69 false)
193.30 +#1 := true
193.31 +#74 := (not true)
193.32 +#77 := (iff #74 false)
193.33 +#78 := [rewrite]: #77
193.34 +#75 := (iff #69 #74)
193.35 +#72 := (iff #64 true)
193.36 +#73 := [rewrite]: #72
193.37 +#76 := [monotonicity #73]: #75
193.38 +#80 := [trans #76 #78]: #79
193.39 +#70 := (iff #15 #69)
193.40 +#67 := (iff #14 #64)
193.41 +#60 := (implies #8 #55)
193.42 +#65 := (iff #60 #64)
193.43 +#66 := [rewrite]: #65
193.44 +#61 := (iff #14 #60)
193.45 +#58 := (iff #13 #55)
193.46 +#52 := (or #47 up_1)
193.47 +#56 := (iff #52 #55)
193.48 +#57 := [rewrite]: #56
193.49 +#53 := (iff #13 #52)
193.50 +#50 := (iff #12 #47)
193.51 +#43 := (implies up_1 #38)
193.52 +#48 := (iff #43 #47)
193.53 +#49 := [rewrite]: #48
193.54 +#44 := (iff #12 #43)
193.55 +#41 := (iff #11 #38)
193.56 +#35 := (or #32 #10)
193.57 +#39 := (iff #35 #38)
193.58 +#40 := [rewrite]: #39
193.59 +#36 := (iff #11 #35)
193.60 +#33 := (iff #9 #32)
193.61 +#34 := [rewrite]: #33
193.62 +#37 := [monotonicity #34]: #36
193.63 +#42 := [trans #37 #40]: #41
193.64 +#45 := [monotonicity #42]: #44
193.65 +#51 := [trans #45 #49]: #50
193.66 +#54 := [monotonicity #51]: #53
193.67 +#59 := [trans #54 #57]: #58
193.68 +#62 := [monotonicity #59]: #61
193.69 +#68 := [trans #62 #66]: #67
193.70 +#71 := [monotonicity #68]: #70
193.71 +#82 := [trans #71 #80]: #81
193.72 +#31 := [asserted]: #15
193.73 +[mp #31 #82]: false
193.74 +unsat
194.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
194.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_07 Tue Oct 20 10:11:30 2009 +0200
194.3 @@ -0,0 +1,8 @@
194.4 +(benchmark Isabelle
194.5 +:extrasorts ( T1)
194.6 +:extrapreds (
194.7 + (up_1)
194.8 + )
194.9 +:assumption (not (iff (iff (iff (iff (iff (iff (iff (iff (iff up_1 up_1) up_1) up_1) up_1) up_1) up_1) up_1) up_1) up_1))
194.10 +:formula true
194.11 +)
195.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
195.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_07.proof Tue Oct 20 10:11:30 2009 +0200
195.3 @@ -0,0 +1,57 @@
195.4 +#2 := false
195.5 +decl up_1 :: bool
195.6 +#4 := up_1
195.7 +#5 := (iff up_1 up_1)
195.8 +#6 := (iff #5 up_1)
195.9 +#7 := (iff #6 up_1)
195.10 +#8 := (iff #7 up_1)
195.11 +#9 := (iff #8 up_1)
195.12 +#10 := (iff #9 up_1)
195.13 +#11 := (iff #10 up_1)
195.14 +#12 := (iff #11 up_1)
195.15 +#13 := (iff #12 up_1)
195.16 +#14 := (not #13)
195.17 +#69 := (iff #14 false)
195.18 +#1 := true
195.19 +#64 := (not true)
195.20 +#67 := (iff #64 false)
195.21 +#68 := [rewrite]: #67
195.22 +#65 := (iff #14 #64)
195.23 +#62 := (iff #13 true)
195.24 +#31 := (iff #5 true)
195.25 +#32 := [rewrite]: #31
195.26 +#60 := (iff #13 #5)
195.27 +#33 := (iff true up_1)
195.28 +#36 := (iff #33 up_1)
195.29 +#37 := [rewrite]: #36
195.30 +#57 := (iff #12 #33)
195.31 +#55 := (iff #11 true)
195.32 +#53 := (iff #11 #5)
195.33 +#50 := (iff #10 #33)
195.34 +#48 := (iff #9 true)
195.35 +#46 := (iff #9 #5)
195.36 +#43 := (iff #8 #33)
195.37 +#41 := (iff #7 true)
195.38 +#39 := (iff #7 #5)
195.39 +#34 := (iff #6 #33)
195.40 +#35 := [monotonicity #32]: #34
195.41 +#38 := [trans #35 #37]: #7
195.42 +#40 := [monotonicity #38]: #39
195.43 +#42 := [trans #40 #32]: #41
195.44 +#44 := [monotonicity #42]: #43
195.45 +#45 := [trans #44 #37]: #9
195.46 +#47 := [monotonicity #45]: #46
195.47 +#49 := [trans #47 #32]: #48
195.48 +#51 := [monotonicity #49]: #50
195.49 +#52 := [trans #51 #37]: #11
195.50 +#54 := [monotonicity #52]: #53
195.51 +#56 := [trans #54 #32]: #55
195.52 +#58 := [monotonicity #56]: #57
195.53 +#59 := [trans #58 #37]: #13
195.54 +#61 := [monotonicity #59]: #60
195.55 +#63 := [trans #61 #32]: #62
195.56 +#66 := [monotonicity #63]: #65
195.57 +#70 := [trans #66 #68]: #69
195.58 +#30 := [asserted]: #14
195.59 +[mp #30 #70]: false
195.60 +unsat
196.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
196.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_08 Tue Oct 20 10:11:30 2009 +0200
196.3 @@ -0,0 +1,22 @@
196.4 +(benchmark Isabelle
196.5 +:extrasorts ( T1)
196.6 +:extrapreds (
196.7 + (up_1)
196.8 + (up_2)
196.9 + (up_3)
196.10 + (up_4)
196.11 + (up_5)
196.12 + (up_6)
196.13 + (up_8)
196.14 + (up_9)
196.15 + (up_7)
196.16 + )
196.17 +:assumption (or up_1 (or up_2 (or up_3 up_4)))
196.18 +:assumption (or up_5 (or up_6 (and up_1 up_4)))
196.19 +:assumption (or (not (or up_1 (and up_3 (not up_3)))) up_2)
196.20 +:assumption (or (not (and up_2 (or up_7 (not up_7)))) up_3)
196.21 +:assumption (or (not (or up_4 false)) up_3)
196.22 +:assumption (not (or up_3 (and (not up_8) (or up_8 (and up_9 (not up_9))))))
196.23 +:assumption (not false)
196.24 +:formula true
196.25 +)
197.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
197.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_08.proof Tue Oct 20 10:11:30 2009 +0200
197.3 @@ -0,0 +1,194 @@
197.4 +#2 := false
197.5 +decl up_1 :: bool
197.6 +#4 := up_1
197.7 +#75 := (not up_1)
197.8 +#246 := (iff #75 false)
197.9 +#1 := true
197.10 +#214 := (not true)
197.11 +#217 := (iff #214 false)
197.12 +#218 := [rewrite]: #217
197.13 +#244 := (iff #75 #214)
197.14 +#238 := (iff up_1 true)
197.15 +#241 := (iff up_1 #238)
197.16 +#239 := (iff #238 up_1)
197.17 +#240 := [rewrite]: #239
197.18 +#242 := [symm #240]: #241
197.19 +decl up_4 :: bool
197.20 +#7 := up_4
197.21 +decl up_2 :: bool
197.22 +#5 := up_2
197.23 +#161 := (or up_1 up_2 up_4)
197.24 +#200 := (iff #161 up_1)
197.25 +#195 := (or up_1 false false)
197.26 +#198 := (iff #195 up_1)
197.27 +#199 := [rewrite]: #198
197.28 +#196 := (iff #161 #195)
197.29 +#189 := (iff up_4 false)
197.30 +#102 := (not up_4)
197.31 +#192 := (iff #102 #189)
197.32 +#190 := (iff #189 #102)
197.33 +#191 := [rewrite]: #190
197.34 +#193 := [symm #191]: #192
197.35 +decl up_3 :: bool
197.36 +#6 := up_3
197.37 +#108 := (or up_3 #102)
197.38 +#180 := (iff #108 #102)
197.39 +#175 := (or false #102)
197.40 +#178 := (iff #175 #102)
197.41 +#179 := [rewrite]: #178
197.42 +#176 := (iff #108 #175)
197.43 +#152 := (iff up_3 false)
197.44 +#16 := (not up_3)
197.45 +#155 := (iff #16 #152)
197.46 +#153 := (iff #152 #16)
197.47 +#154 := [rewrite]: #153
197.48 +#156 := [symm #154]: #155
197.49 +decl up_9 :: bool
197.50 +#32 := up_9
197.51 +#33 := (not up_9)
197.52 +#34 := (and up_9 #33)
197.53 +decl up_8 :: bool
197.54 +#30 := up_8
197.55 +#35 := (or up_8 #34)
197.56 +#31 := (not up_8)
197.57 +#36 := (and #31 #35)
197.58 +#37 := (or up_3 #36)
197.59 +#38 := (not #37)
197.60 +#138 := (iff #38 #16)
197.61 +#136 := (iff #37 up_3)
197.62 +#131 := (or up_3 false)
197.63 +#134 := (iff #131 up_3)
197.64 +#135 := [rewrite]: #134
197.65 +#132 := (iff #37 #131)
197.66 +#129 := (iff #36 false)
197.67 +#124 := (and #31 up_8)
197.68 +#127 := (iff #124 false)
197.69 +#128 := [rewrite]: #127
197.70 +#125 := (iff #36 #124)
197.71 +#122 := (iff #35 up_8)
197.72 +#117 := (or up_8 false)
197.73 +#120 := (iff #117 up_8)
197.74 +#121 := [rewrite]: #120
197.75 +#118 := (iff #35 #117)
197.76 +#114 := (iff #34 false)
197.77 +#116 := [rewrite]: #114
197.78 +#119 := [monotonicity #116]: #118
197.79 +#123 := [trans #119 #121]: #122
197.80 +#126 := [monotonicity #123]: #125
197.81 +#130 := [trans #126 #128]: #129
197.82 +#133 := [monotonicity #130]: #132
197.83 +#137 := [trans #133 #135]: #136
197.84 +#139 := [monotonicity #137]: #138
197.85 +#113 := [asserted]: #38
197.86 +#142 := [mp #113 #139]: #16
197.87 +#157 := [mp #142 #156]: #152
197.88 +#177 := [monotonicity #157]: #176
197.89 +#181 := [trans #177 #179]: #180
197.90 +#27 := (or up_4 false)
197.91 +#28 := (not #27)
197.92 +#29 := (or #28 up_3)
197.93 +#111 := (iff #29 #108)
197.94 +#105 := (or #102 up_3)
197.95 +#109 := (iff #105 #108)
197.96 +#110 := [rewrite]: #109
197.97 +#106 := (iff #29 #105)
197.98 +#103 := (iff #28 #102)
197.99 +#99 := (iff #27 up_4)
197.100 +#101 := [rewrite]: #99
197.101 +#104 := [monotonicity #101]: #103
197.102 +#107 := [monotonicity #104]: #106
197.103 +#112 := [trans #107 #110]: #111
197.104 +#98 := [asserted]: #29
197.105 +#115 := [mp #98 #112]: #108
197.106 +#182 := [mp #115 #181]: #102
197.107 +#194 := [mp #182 #193]: #189
197.108 +#183 := (iff up_2 false)
197.109 +#92 := (not up_2)
197.110 +#186 := (iff #92 #183)
197.111 +#184 := (iff #183 #92)
197.112 +#185 := [rewrite]: #184
197.113 +#187 := [symm #185]: #186
197.114 +#95 := (or #92 up_3)
197.115 +#172 := (iff #95 #92)
197.116 +#167 := (or #92 false)
197.117 +#170 := (iff #167 #92)
197.118 +#171 := [rewrite]: #170
197.119 +#168 := (iff #95 #167)
197.120 +#169 := [monotonicity #157]: #168
197.121 +#173 := [trans #169 #171]: #172
197.122 +decl up_7 :: bool
197.123 +#21 := up_7
197.124 +#22 := (not up_7)
197.125 +#23 := (or up_7 #22)
197.126 +#24 := (and up_2 #23)
197.127 +#25 := (not #24)
197.128 +#26 := (or #25 up_3)
197.129 +#96 := (iff #26 #95)
197.130 +#93 := (iff #25 #92)
197.131 +#90 := (iff #24 up_2)
197.132 +#85 := (and up_2 true)
197.133 +#88 := (iff #85 up_2)
197.134 +#89 := [rewrite]: #88
197.135 +#86 := (iff #24 #85)
197.136 +#82 := (iff #23 true)
197.137 +#84 := [rewrite]: #82
197.138 +#87 := [monotonicity #84]: #86
197.139 +#91 := [trans #87 #89]: #90
197.140 +#94 := [monotonicity #91]: #93
197.141 +#97 := [monotonicity #94]: #96
197.142 +#81 := [asserted]: #26
197.143 +#100 := [mp #81 #97]: #95
197.144 +#174 := [mp #100 #173]: #92
197.145 +#188 := [mp #174 #187]: #183
197.146 +#197 := [monotonicity #188 #194]: #196
197.147 +#201 := [trans #197 #199]: #200
197.148 +#58 := (or up_1 up_2 up_3 up_4)
197.149 +#164 := (iff #58 #161)
197.150 +#158 := (or up_1 up_2 false up_4)
197.151 +#162 := (iff #158 #161)
197.152 +#163 := [rewrite]: #162
197.153 +#159 := (iff #58 #158)
197.154 +#160 := [monotonicity #157]: #159
197.155 +#165 := [trans #160 #163]: #164
197.156 +#8 := (or up_3 up_4)
197.157 +#9 := (or up_2 #8)
197.158 +#10 := (or up_1 #9)
197.159 +#59 := (iff #10 #58)
197.160 +#60 := [rewrite]: #59
197.161 +#55 := [asserted]: #10
197.162 +#61 := [mp #55 #60]: #58
197.163 +#166 := [mp #61 #165]: #161
197.164 +#202 := [mp #166 #201]: up_1
197.165 +#243 := [mp #202 #242]: #238
197.166 +#245 := [monotonicity #243]: #244
197.167 +#247 := [trans #245 #218]: #246
197.168 +#78 := (or #75 up_2)
197.169 +#235 := (iff #78 #75)
197.170 +#230 := (or #75 false)
197.171 +#233 := (iff #230 #75)
197.172 +#234 := [rewrite]: #233
197.173 +#231 := (iff #78 #230)
197.174 +#232 := [monotonicity #188]: #231
197.175 +#236 := [trans #232 #234]: #235
197.176 +#17 := (and up_3 #16)
197.177 +#18 := (or up_1 #17)
197.178 +#19 := (not #18)
197.179 +#20 := (or #19 up_2)
197.180 +#79 := (iff #20 #78)
197.181 +#76 := (iff #19 #75)
197.182 +#73 := (iff #18 up_1)
197.183 +#68 := (or up_1 false)
197.184 +#71 := (iff #68 up_1)
197.185 +#72 := [rewrite]: #71
197.186 +#69 := (iff #18 #68)
197.187 +#62 := (iff #17 false)
197.188 +#67 := [rewrite]: #62
197.189 +#70 := [monotonicity #67]: #69
197.190 +#74 := [trans #70 #72]: #73
197.191 +#77 := [monotonicity #74]: #76
197.192 +#80 := [monotonicity #77]: #79
197.193 +#57 := [asserted]: #20
197.194 +#83 := [mp #57 #80]: #78
197.195 +#237 := [mp #83 #236]: #75
197.196 +[mp #237 #247]: false
197.197 +unsat
198.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
198.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_09 Tue Oct 20 10:11:30 2009 +0200
198.3 @@ -0,0 +1,11 @@
198.4 +(benchmark Isabelle
198.5 +:extrasorts ( T1)
198.6 +:extrafuns (
198.7 + (uf_1 T1 T1 T1)
198.8 + (uf_2 T1)
198.9 + (uf_3 T1)
198.10 + )
198.11 +:assumption (forall (?x1 T1) (?x2 T1) (= (uf_1 ?x1 ?x2) (uf_1 ?x2 ?x1)))
198.12 +:assumption (not (and (= uf_2 uf_2) (= (uf_1 uf_2 uf_3) (uf_1 uf_3 uf_2))))
198.13 +:formula true
198.14 +)
199.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
199.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_09.proof Tue Oct 20 10:11:30 2009 +0200
199.3 @@ -0,0 +1,52 @@
199.4 +#2 := false
199.5 +decl uf_1 :: (-> T1 T1 T1)
199.6 +decl uf_2 :: T1
199.7 +#10 := uf_2
199.8 +decl uf_3 :: T1
199.9 +#12 := uf_3
199.10 +#14 := (uf_1 uf_3 uf_2)
199.11 +#13 := (uf_1 uf_2 uf_3)
199.12 +#15 := (= #13 #14)
199.13 +#44 := (not #15)
199.14 +#11 := (= uf_2 uf_2)
199.15 +#16 := (and #11 #15)
199.16 +#17 := (not #16)
199.17 +#45 := (iff #17 #44)
199.18 +#42 := (iff #16 #15)
199.19 +#1 := true
199.20 +#37 := (and true #15)
199.21 +#40 := (iff #37 #15)
199.22 +#41 := [rewrite]: #40
199.23 +#38 := (iff #16 #37)
199.24 +#35 := (iff #11 true)
199.25 +#36 := [rewrite]: #35
199.26 +#39 := [monotonicity #36]: #38
199.27 +#43 := [trans #39 #41]: #42
199.28 +#46 := [monotonicity #43]: #45
199.29 +#34 := [asserted]: #17
199.30 +#49 := [mp #34 #46]: #44
199.31 +#4 := (:var 1 T1)
199.32 +#5 := (:var 0 T1)
199.33 +#7 := (uf_1 #5 #4)
199.34 +#530 := (pattern #7)
199.35 +#6 := (uf_1 #4 #5)
199.36 +#529 := (pattern #6)
199.37 +#8 := (= #6 #7)
199.38 +#531 := (forall (vars (?x1 T1) (?x2 T1)) (:pat #529 #530) #8)
199.39 +#9 := (forall (vars (?x1 T1) (?x2 T1)) #8)
199.40 +#534 := (iff #9 #531)
199.41 +#532 := (iff #8 #8)
199.42 +#533 := [refl]: #532
199.43 +#535 := [quant-intro #533]: #534
199.44 +#55 := (~ #9 #9)
199.45 +#53 := (~ #8 #8)
199.46 +#54 := [refl]: #53
199.47 +#56 := [nnf-pos #54]: #55
199.48 +#33 := [asserted]: #9
199.49 +#57 := [mp~ #33 #56]: #9
199.50 +#536 := [mp #57 #535]: #531
199.51 +#112 := (not #531)
199.52 +#199 := (or #112 #15)
199.53 +#113 := [quant-inst]: #199
199.54 +[unit-resolution #113 #536 #49]: false
199.55 +unsat
200.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
200.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_10 Tue Oct 20 10:11:30 2009 +0200
200.3 @@ -0,0 +1,251 @@
200.4 +(benchmark Isabelle
200.5 +:extrasorts ( T1)
200.6 +:extrapreds (
200.7 + (up_1)
200.8 + (up_5)
200.9 + (up_7)
200.10 + (up_9)
200.11 + (up_11)
200.12 + (up_14)
200.13 + (up_16)
200.14 + (up_18)
200.15 + (up_20)
200.16 + (up_22)
200.17 + (up_25)
200.18 + (up_27)
200.19 + (up_29)
200.20 + (up_31)
200.21 + (up_33)
200.22 + (up_36)
200.23 + (up_38)
200.24 + (up_40)
200.25 + (up_42)
200.26 + (up_44)
200.27 + (up_47)
200.28 + (up_49)
200.29 + (up_51)
200.30 + (up_53)
200.31 + (up_55)
200.32 + (up_57)
200.33 + (up_58)
200.34 + (up_59)
200.35 + (up_60)
200.36 + (up_3)
200.37 + (up_2)
200.38 + (up_6)
200.39 + (up_8)
200.40 + (up_10)
200.41 + (up_12)
200.42 + (up_13)
200.43 + (up_15)
200.44 + (up_17)
200.45 + (up_19)
200.46 + (up_21)
200.47 + (up_23)
200.48 + (up_24)
200.49 + (up_26)
200.50 + (up_28)
200.51 + (up_30)
200.52 + (up_32)
200.53 + (up_34)
200.54 + (up_35)
200.55 + (up_37)
200.56 + (up_39)
200.57 + (up_41)
200.58 + (up_43)
200.59 + (up_45)
200.60 + (up_46)
200.61 + (up_48)
200.62 + (up_50)
200.63 + (up_52)
200.64 + (up_54)
200.65 + (up_56)
200.66 + (up_4)
200.67 + )
200.68 +:assumption (not up_1)
200.69 +:assumption (not up_2)
200.70 +:assumption (not up_3)
200.71 +:assumption (not up_4)
200.72 +:assumption (or up_5 (or up_6 up_1))
200.73 +:assumption (or up_7 (or up_8 up_5))
200.74 +:assumption (or up_9 (or up_10 up_7))
200.75 +:assumption (or up_11 (or up_12 up_9))
200.76 +:assumption (or up_13 up_11)
200.77 +:assumption (or up_14 (or up_15 up_2))
200.78 +:assumption (or up_16 (or up_17 (or up_14 up_6)))
200.79 +:assumption (or up_18 (or up_19 (or up_16 up_8)))
200.80 +:assumption (or up_20 (or up_21 (or up_18 up_10)))
200.81 +:assumption (or up_22 (or up_23 (or up_20 up_12)))
200.82 +:assumption (or up_24 (or up_22 up_13))
200.83 +:assumption (or up_25 (or up_26 up_15))
200.84 +:assumption (or up_27 (or up_28 (or up_25 up_17)))
200.85 +:assumption (or up_29 (or up_30 (or up_27 up_19)))
200.86 +:assumption (or up_31 (or up_32 (or up_29 up_21)))
200.87 +:assumption (or up_33 (or up_34 (or up_31 up_23)))
200.88 +:assumption (or up_35 (or up_33 up_24))
200.89 +:assumption (or up_36 (or up_37 up_26))
200.90 +:assumption (or up_38 (or up_39 (or up_36 up_28)))
200.91 +:assumption (or up_40 (or up_41 (or up_38 up_30)))
200.92 +:assumption (or up_42 (or up_43 (or up_40 up_32)))
200.93 +:assumption (or up_44 (or up_45 (or up_42 up_34)))
200.94 +:assumption (or up_46 (or up_44 up_35))
200.95 +:assumption (or up_47 (or up_48 up_37))
200.96 +:assumption (or up_49 (or up_50 (or up_47 up_39)))
200.97 +:assumption (or up_51 (or up_52 (or up_49 up_41)))
200.98 +:assumption (or up_53 (or up_54 (or up_51 up_43)))
200.99 +:assumption (or up_55 (or up_56 (or up_53 up_45)))
200.100 +:assumption (or up_4 (or up_55 up_46))
200.101 +:assumption (or up_57 up_48)
200.102 +:assumption (or up_58 (or up_57 up_50))
200.103 +:assumption (or up_59 (or up_58 up_52))
200.104 +:assumption (or up_60 (or up_59 up_54))
200.105 +:assumption (or up_3 (or up_60 up_56))
200.106 +:assumption (or (not up_5) (not up_6))
200.107 +:assumption (or (not up_5) (not up_1))
200.108 +:assumption (or (not up_6) (not up_1))
200.109 +:assumption (or (not up_7) (not up_8))
200.110 +:assumption (or (not up_7) (not up_5))
200.111 +:assumption (or (not up_8) (not up_5))
200.112 +:assumption (or (not up_9) (not up_10))
200.113 +:assumption (or (not up_9) (not up_7))
200.114 +:assumption (or (not up_10) (not up_7))
200.115 +:assumption (or (not up_11) (not up_12))
200.116 +:assumption (or (not up_11) (not up_9))
200.117 +:assumption (or (not up_12) (not up_9))
200.118 +:assumption (or (not up_13) (not up_11))
200.119 +:assumption (or (not up_14) (not up_15))
200.120 +:assumption (or (not up_14) (not up_2))
200.121 +:assumption (or (not up_15) (not up_2))
200.122 +:assumption (or (not up_16) (not up_17))
200.123 +:assumption (or (not up_16) (not up_14))
200.124 +:assumption (or (not up_16) (not up_6))
200.125 +:assumption (or (not up_17) (not up_14))
200.126 +:assumption (or (not up_17) (not up_6))
200.127 +:assumption (or (not up_14) (not up_6))
200.128 +:assumption (or (not up_18) (not up_19))
200.129 +:assumption (or (not up_18) (not up_16))
200.130 +:assumption (or (not up_18) (not up_8))
200.131 +:assumption (or (not up_19) (not up_16))
200.132 +:assumption (or (not up_19) (not up_8))
200.133 +:assumption (or (not up_16) (not up_8))
200.134 +:assumption (or (not up_20) (not up_21))
200.135 +:assumption (or (not up_20) (not up_18))
200.136 +:assumption (or (not up_20) (not up_10))
200.137 +:assumption (or (not up_21) (not up_18))
200.138 +:assumption (or (not up_21) (not up_10))
200.139 +:assumption (or (not up_18) (not up_10))
200.140 +:assumption (or (not up_22) (not up_23))
200.141 +:assumption (or (not up_22) (not up_20))
200.142 +:assumption (or (not up_22) (not up_12))
200.143 +:assumption (or (not up_23) (not up_20))
200.144 +:assumption (or (not up_23) (not up_12))
200.145 +:assumption (or (not up_20) (not up_12))
200.146 +:assumption (or (not up_24) (not up_22))
200.147 +:assumption (or (not up_24) (not up_13))
200.148 +:assumption (or (not up_22) (not up_13))
200.149 +:assumption (or (not up_25) (not up_26))
200.150 +:assumption (or (not up_25) (not up_15))
200.151 +:assumption (or (not up_26) (not up_15))
200.152 +:assumption (or (not up_27) (not up_28))
200.153 +:assumption (or (not up_27) (not up_25))
200.154 +:assumption (or (not up_27) (not up_17))
200.155 +:assumption (or (not up_28) (not up_25))
200.156 +:assumption (or (not up_28) (not up_17))
200.157 +:assumption (or (not up_25) (not up_17))
200.158 +:assumption (or (not up_29) (not up_30))
200.159 +:assumption (or (not up_29) (not up_27))
200.160 +:assumption (or (not up_29) (not up_19))
200.161 +:assumption (or (not up_30) (not up_27))
200.162 +:assumption (or (not up_30) (not up_19))
200.163 +:assumption (or (not up_27) (not up_19))
200.164 +:assumption (or (not up_31) (not up_32))
200.165 +:assumption (or (not up_31) (not up_29))
200.166 +:assumption (or (not up_31) (not up_21))
200.167 +:assumption (or (not up_32) (not up_29))
200.168 +:assumption (or (not up_32) (not up_21))
200.169 +:assumption (or (not up_29) (not up_21))
200.170 +:assumption (or (not up_33) (not up_34))
200.171 +:assumption (or (not up_33) (not up_31))
200.172 +:assumption (or (not up_33) (not up_23))
200.173 +:assumption (or (not up_34) (not up_31))
200.174 +:assumption (or (not up_34) (not up_23))
200.175 +:assumption (or (not up_31) (not up_23))
200.176 +:assumption (or (not up_35) (not up_33))
200.177 +:assumption (or (not up_35) (not up_24))
200.178 +:assumption (or (not up_33) (not up_24))
200.179 +:assumption (or (not up_36) (not up_37))
200.180 +:assumption (or (not up_36) (not up_26))
200.181 +:assumption (or (not up_37) (not up_26))
200.182 +:assumption (or (not up_38) (not up_39))
200.183 +:assumption (or (not up_38) (not up_36))
200.184 +:assumption (or (not up_38) (not up_28))
200.185 +:assumption (or (not up_39) (not up_36))
200.186 +:assumption (or (not up_39) (not up_28))
200.187 +:assumption (or (not up_36) (not up_28))
200.188 +:assumption (or (not up_40) (not up_41))
200.189 +:assumption (or (not up_40) (not up_38))
200.190 +:assumption (or (not up_40) (not up_30))
200.191 +:assumption (or (not up_41) (not up_38))
200.192 +:assumption (or (not up_41) (not up_30))
200.193 +:assumption (or (not up_38) (not up_30))
200.194 +:assumption (or (not up_42) (not up_43))
200.195 +:assumption (or (not up_42) (not up_40))
200.196 +:assumption (or (not up_42) (not up_32))
200.197 +:assumption (or (not up_43) (not up_40))
200.198 +:assumption (or (not up_43) (not up_32))
200.199 +:assumption (or (not up_40) (not up_32))
200.200 +:assumption (or (not up_44) (not up_45))
200.201 +:assumption (or (not up_44) (not up_42))
200.202 +:assumption (or (not up_44) (not up_34))
200.203 +:assumption (or (not up_45) (not up_42))
200.204 +:assumption (or (not up_45) (not up_34))
200.205 +:assumption (or (not up_42) (not up_34))
200.206 +:assumption (or (not up_46) (not up_44))
200.207 +:assumption (or (not up_46) (not up_35))
200.208 +:assumption (or (not up_44) (not up_35))
200.209 +:assumption (or (not up_47) (not up_48))
200.210 +:assumption (or (not up_47) (not up_37))
200.211 +:assumption (or (not up_48) (not up_37))
200.212 +:assumption (or (not up_49) (not up_50))
200.213 +:assumption (or (not up_49) (not up_47))
200.214 +:assumption (or (not up_49) (not up_39))
200.215 +:assumption (or (not up_50) (not up_47))
200.216 +:assumption (or (not up_50) (not up_39))
200.217 +:assumption (or (not up_47) (not up_39))
200.218 +:assumption (or (not up_51) (not up_52))
200.219 +:assumption (or (not up_51) (not up_49))
200.220 +:assumption (or (not up_51) (not up_41))
200.221 +:assumption (or (not up_52) (not up_49))
200.222 +:assumption (or (not up_52) (not up_41))
200.223 +:assumption (or (not up_49) (not up_41))
200.224 +:assumption (or (not up_53) (not up_54))
200.225 +:assumption (or (not up_53) (not up_51))
200.226 +:assumption (or (not up_53) (not up_43))
200.227 +:assumption (or (not up_54) (not up_51))
200.228 +:assumption (or (not up_54) (not up_43))
200.229 +:assumption (or (not up_51) (not up_43))
200.230 +:assumption (or (not up_55) (not up_56))
200.231 +:assumption (or (not up_55) (not up_53))
200.232 +:assumption (or (not up_55) (not up_45))
200.233 +:assumption (or (not up_56) (not up_53))
200.234 +:assumption (or (not up_56) (not up_45))
200.235 +:assumption (or (not up_53) (not up_45))
200.236 +:assumption (or (not up_4) (not up_55))
200.237 +:assumption (or (not up_4) (not up_46))
200.238 +:assumption (or (not up_55) (not up_46))
200.239 +:assumption (or (not up_57) (not up_48))
200.240 +:assumption (or (not up_58) (not up_57))
200.241 +:assumption (or (not up_58) (not up_50))
200.242 +:assumption (or (not up_57) (not up_50))
200.243 +:assumption (or (not up_59) (not up_58))
200.244 +:assumption (or (not up_59) (not up_52))
200.245 +:assumption (or (not up_58) (not up_52))
200.246 +:assumption (or (not up_60) (not up_59))
200.247 +:assumption (or (not up_60) (not up_54))
200.248 +:assumption (or (not up_59) (not up_54))
200.249 +:assumption (or (not up_3) (not up_60))
200.250 +:assumption (or (not up_3) (not up_56))
200.251 +:assumption (or (not up_60) (not up_56))
200.252 +:assumption (not false)
200.253 +:formula true
200.254 +)
201.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
201.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_10.proof Tue Oct 20 10:11:30 2009 +0200
201.3 @@ -0,0 +1,1667 @@
201.4 +#2 := false
201.5 +decl up_54 :: bool
201.6 +#126 := up_54
201.7 +#317 := (not up_54)
201.8 +decl up_60 :: bool
201.9 +#145 := up_60
201.10 +decl up_56 :: bool
201.11 +#131 := up_56
201.12 +#325 := (not up_56)
201.13 +decl up_55 :: bool
201.14 +#130 := up_55
201.15 +decl up_46 :: bool
201.16 +#108 := up_46
201.17 +#291 := (not up_46)
201.18 +decl up_35 :: bool
201.19 +#81 := up_35
201.20 +decl up_29 :: bool
201.21 +#66 := up_29
201.22 +decl up_32 :: bool
201.23 +#72 := up_32
201.24 +#235 := (not up_32)
201.25 +decl up_34 :: bool
201.26 +#77 := up_34
201.27 +#243 := (not up_34)
201.28 +decl up_33 :: bool
201.29 +#76 := up_33
201.30 +#250 := (not up_35)
201.31 +#1611 := [hypothesis]: #250
201.32 +decl up_24 :: bool
201.33 +#54 := up_24
201.34 +#209 := (not up_24)
201.35 +decl up_13 :: bool
201.36 +#28 := up_13
201.37 +decl up_11 :: bool
201.38 +#24 := up_11
201.39 +#165 := (not up_11)
201.40 +decl up_12 :: bool
201.41 +#25 := up_12
201.42 +#2327 := (or up_12 up_35)
201.43 +#345 := (not up_60)
201.44 +decl up_59 :: bool
201.45 +#142 := up_59
201.46 +decl up_19 :: bool
201.47 +#40 := up_19
201.48 +decl up_8 :: bool
201.49 +#17 := up_8
201.50 +#156 := (not up_8)
201.51 +decl up_7 :: bool
201.52 +#16 := up_7
201.53 +#166 := (not up_12)
201.54 +#1457 := [hypothesis]: #166
201.55 +#2183 := (or up_7 up_12 up_35)
201.56 +#155 := (not up_7)
201.57 +#1612 := [hypothesis]: #155
201.58 +decl up_10 :: bool
201.59 +#21 := up_10
201.60 +#161 := (not up_10)
201.61 +decl up_20 :: bool
201.62 +#44 := up_20
201.63 +decl up_23 :: bool
201.64 +#50 := up_23
201.65 +#202 := (not up_23)
201.66 +#2170 := (or up_34 up_7 up_35 up_12)
201.67 +#1605 := [hypothesis]: #243
201.68 +#2164 := (or up_29 up_34 up_7 up_35 up_12)
201.69 +decl up_42 :: bool
201.70 +#98 := up_42
201.71 +#275 := (not up_42)
201.72 +#226 := (not up_29)
201.73 +#907 := [hypothesis]: #226
201.74 +#2136 := (or up_29 up_12 up_7 up_35 up_32)
201.75 +decl up_22 :: bool
201.76 +#49 := up_22
201.77 +#895 := [hypothesis]: #235
201.78 +#1624 := (or up_29 up_22 up_12 up_32 up_35 up_7)
201.79 +decl up_21 :: bool
201.80 +#45 := up_21
201.81 +decl up_31 :: bool
201.82 +#71 := up_31
201.83 +#234 := (not up_31)
201.84 +decl up_9 :: bool
201.85 +#20 := up_9
201.86 +#201 := (not up_22)
201.87 +#1456 := [hypothesis]: #201
201.88 +#847 := (or #161 up_32 up_29 up_22 up_12)
201.89 +#193 := (not up_20)
201.90 +#1400 := [hypothesis]: up_10
201.91 +#964 := (or #161 #193)
201.92 +#197 := (or #193 #161)
201.93 +#966 := (iff #197 #964)
201.94 +#967 := [rewrite]: #966
201.95 +#963 := [asserted]: #197
201.96 +#970 := [mp #963 #967]: #964
201.97 +#1399 := [unit-resolution #970 #1400]: #193
201.98 +#500 := (or up_12 up_20 up_22 up_23)
201.99 +#51 := (or up_20 up_12)
201.100 +#52 := (or up_23 #51)
201.101 +#53 := (or up_22 #52)
201.102 +#503 := (iff #53 #500)
201.103 +#491 := (or up_12 up_20)
201.104 +#494 := (or up_23 #491)
201.105 +#497 := (or up_22 #494)
201.106 +#501 := (iff #497 #500)
201.107 +#502 := [rewrite]: #501
201.108 +#498 := (iff #53 #497)
201.109 +#495 := (iff #52 #494)
201.110 +#492 := (iff #51 #491)
201.111 +#493 := [rewrite]: #492
201.112 +#496 := [monotonicity #493]: #495
201.113 +#499 := [monotonicity #496]: #498
201.114 +#504 := [trans #499 #502]: #503
201.115 +#490 := [asserted]: #53
201.116 +#505 := [mp #490 #504]: #500
201.117 +#900 := [unit-resolution #505 #1399 #1456 #1457]: up_23
201.118 +#194 := (not up_21)
201.119 +#974 := (or #161 #194)
201.120 +#199 := (or #194 #161)
201.121 +#976 := (iff #199 #974)
201.122 +#977 := [rewrite]: #976
201.123 +#973 := [asserted]: #199
201.124 +#980 := [mp #973 #977]: #974
201.125 +#902 := [unit-resolution #980 #1400]: #194
201.126 +#574 := (or up_21 up_29 up_31 up_32)
201.127 +#73 := (or up_29 up_21)
201.128 +#74 := (or up_32 #73)
201.129 +#75 := (or up_31 #74)
201.130 +#577 := (iff #75 #574)
201.131 +#565 := (or up_21 up_29)
201.132 +#568 := (or up_32 #565)
201.133 +#571 := (or up_31 #568)
201.134 +#575 := (iff #571 #574)
201.135 +#576 := [rewrite]: #575
201.136 +#572 := (iff #75 #571)
201.137 +#569 := (iff #74 #568)
201.138 +#566 := (iff #73 #565)
201.139 +#567 := [rewrite]: #566
201.140 +#570 := [monotonicity #567]: #569
201.141 +#573 := [monotonicity #570]: #572
201.142 +#578 := [trans #573 #576]: #577
201.143 +#564 := [asserted]: #75
201.144 +#579 := [mp #564 #578]: #574
201.145 +#851 := [unit-resolution #579 #902 #895 #907]: up_31
201.146 +#1135 := (or #202 #234)
201.147 +#249 := (or #234 #202)
201.148 +#1137 := (iff #249 #1135)
201.149 +#1138 := [rewrite]: #1137
201.150 +#1134 := [asserted]: #249
201.151 +#1141 := [mp #1134 #1138]: #1135
201.152 +#858 := [unit-resolution #1141 #851 #900]: false
201.153 +#853 := [lemma #858]: #847
201.154 +#1613 := [unit-resolution #853 #907 #1456 #895 #1457]: #161
201.155 +#405 := (or up_7 up_9 up_10)
201.156 +#22 := (or up_10 up_7)
201.157 +#23 := (or up_9 #22)
201.158 +#408 := (iff #23 #405)
201.159 +#399 := (or up_7 up_10)
201.160 +#402 := (or up_9 #399)
201.161 +#406 := (iff #402 #405)
201.162 +#407 := [rewrite]: #406
201.163 +#403 := (iff #23 #402)
201.164 +#400 := (iff #22 #399)
201.165 +#401 := [rewrite]: #400
201.166 +#404 := [monotonicity #401]: #403
201.167 +#409 := [trans #404 #407]: #408
201.168 +#398 := [asserted]: #23
201.169 +#410 := [mp #398 #409]: #405
201.170 +#1614 := [unit-resolution #410 #1613 #1612]: up_9
201.171 +#160 := (not up_9)
201.172 +#881 := (or #160 #165)
201.173 +#168 := (or #165 #160)
201.174 +#882 := (iff #168 #881)
201.175 +#883 := [rewrite]: #882
201.176 +#879 := [asserted]: #168
201.177 +#886 := [mp #879 #883]: #881
201.178 +#1615 := [unit-resolution #886 #1614]: #165
201.179 +#425 := (or up_11 up_13)
201.180 +#29 := (or up_13 up_11)
201.181 +#426 := (iff #29 #425)
201.182 +#427 := [rewrite]: #426
201.183 +#424 := [asserted]: #29
201.184 +#430 := [mp #424 #427]: #425
201.185 +#1616 := [unit-resolution #430 #1615]: up_13
201.186 +#170 := (not up_13)
201.187 +#1015 := (or #170 #209)
201.188 +#211 := (or #209 #170)
201.189 +#1017 := (iff #211 #1015)
201.190 +#1018 := [rewrite]: #1017
201.191 +#1014 := [asserted]: #211
201.192 +#1021 := [mp #1014 #1018]: #1015
201.193 +#1617 := [unit-resolution #1021 #1616]: #209
201.194 +#603 := (or up_24 up_33 up_35)
201.195 +#82 := (or up_33 up_24)
201.196 +#83 := (or up_35 #82)
201.197 +#606 := (iff #83 #603)
201.198 +#597 := (or up_24 up_33)
201.199 +#600 := (or up_35 #597)
201.200 +#604 := (iff #600 #603)
201.201 +#605 := [rewrite]: #604
201.202 +#601 := (iff #83 #600)
201.203 +#598 := (iff #82 #597)
201.204 +#599 := [rewrite]: #598
201.205 +#602 := [monotonicity #599]: #601
201.206 +#607 := [trans #602 #605]: #606
201.207 +#596 := [asserted]: #83
201.208 +#608 := [mp #596 #607]: #603
201.209 +#1618 := [unit-resolution #608 #1617 #1611]: up_33
201.210 +#242 := (not up_33)
201.211 +#1116 := (or #234 #242)
201.212 +#245 := (or #242 #234)
201.213 +#1117 := (iff #245 #1116)
201.214 +#1118 := [rewrite]: #1117
201.215 +#1114 := [asserted]: #245
201.216 +#1121 := [mp #1114 #1118]: #1116
201.217 +#1619 := [unit-resolution #1121 #1618]: #234
201.218 +#1620 := [unit-resolution #579 #1619 #895 #907]: up_21
201.219 +#1120 := (or #202 #242)
201.220 +#246 := (or #242 #202)
201.221 +#1122 := (iff #246 #1120)
201.222 +#1123 := [rewrite]: #1122
201.223 +#1119 := [asserted]: #246
201.224 +#1126 := [mp #1119 #1123]: #1120
201.225 +#1621 := [unit-resolution #1126 #1618]: #202
201.226 +#1622 := [unit-resolution #505 #1621 #1456 #1457]: up_20
201.227 +#195 := (or #193 #194)
201.228 +#957 := [asserted]: #195
201.229 +#1623 := [unit-resolution #957 #1622 #1620]: false
201.230 +#1625 := [lemma #1623]: #1624
201.231 +#2132 := [unit-resolution #1625 #907 #1611 #1457 #895 #1612]: up_22
201.232 +#1978 := (or up_32 up_35 up_29 up_21 up_12 up_7)
201.233 +#1972 := [unit-resolution #1625 #895 #907 #1457 #1611 #1612]: up_22
201.234 +#1010 := (or #201 #209)
201.235 +#210 := (or #209 #201)
201.236 +#1012 := (iff #210 #1010)
201.237 +#1013 := [rewrite]: #1012
201.238 +#1009 := [asserted]: #210
201.239 +#1016 := [mp #1009 #1013]: #1010
201.240 +#1973 := [unit-resolution #1016 #1972]: #209
201.241 +#1974 := [hypothesis]: #194
201.242 +#1975 := [unit-resolution #579 #895 #907 #1974]: up_31
201.243 +#1976 := [unit-resolution #1121 #1975]: #242
201.244 +#1977 := [unit-resolution #608 #1976 #1973 #1611]: false
201.245 +#1979 := [lemma #1977]: #1978
201.246 +#2133 := [unit-resolution #1979 #907 #1611 #1457 #895 #1612]: up_21
201.247 +#1682 := (or #194 up_7 up_12 up_23)
201.248 +#1673 := [hypothesis]: #202
201.249 +#1674 := [hypothesis]: up_21
201.250 +#1675 := [unit-resolution #957 #1674]: #193
201.251 +#1676 := [unit-resolution #505 #1675 #1457 #1673]: up_22
201.252 +#1020 := (or #170 #201)
201.253 +#212 := (or #201 #170)
201.254 +#1022 := (iff #212 #1020)
201.255 +#1023 := [rewrite]: #1022
201.256 +#1019 := [asserted]: #212
201.257 +#1026 := [mp #1019 #1023]: #1020
201.258 +#1677 := [unit-resolution #1026 #1676]: #170
201.259 +#1678 := [unit-resolution #980 #1674]: #161
201.260 +#1679 := [unit-resolution #410 #1678 #1612]: up_9
201.261 +#1680 := [unit-resolution #886 #1679]: #165
201.262 +#1681 := [unit-resolution #430 #1680 #1677]: false
201.263 +#1683 := [lemma #1681]: #1682
201.264 +#2134 := [unit-resolution #1683 #2133 #1457 #1612]: up_23
201.265 +#203 := (or #201 #202)
201.266 +#983 := [asserted]: #203
201.267 +#2135 := [unit-resolution #983 #2134 #2132]: false
201.268 +#2137 := [lemma #2135]: #2136
201.269 +#2156 := [unit-resolution #2137 #907 #1612 #1611 #1457]: up_32
201.270 +#1224 := (or #235 #275)
201.271 +#279 := (or #275 #235)
201.272 +#1226 := (iff #279 #1224)
201.273 +#1227 := [rewrite]: #1226
201.274 +#1223 := [asserted]: #279
201.275 +#1230 := [mp #1223 #1227]: #1224
201.276 +#2157 := [unit-resolution #1230 #2156]: #275
201.277 +#2158 := (or up_12 up_29 up_7 up_54)
201.278 +decl up_26 :: bool
201.279 +#58 := up_26
201.280 +#214 := (not up_26)
201.281 +decl up_15 :: bool
201.282 +#31 := up_15
201.283 +decl up_14 :: bool
201.284 +#30 := up_14
201.285 +#172 := (not up_14)
201.286 +decl up_6 :: bool
201.287 +#13 := up_6
201.288 +decl up_5 :: bool
201.289 +#12 := up_5
201.290 +#150 := (not up_5)
201.291 +decl up_25 :: bool
201.292 +#57 := up_25
201.293 +#2099 := [hypothesis]: up_5
201.294 +#859 := (or #150 #155)
201.295 +#158 := (or #155 #150)
201.296 +#860 := (iff #158 #859)
201.297 +#861 := [rewrite]: #860
201.298 +#857 := [asserted]: #158
201.299 +#864 := [mp #857 #861]: #859
201.300 +#2100 := [unit-resolution #864 #2099]: #155
201.301 +#863 := (or #150 #156)
201.302 +#159 := (or #156 #150)
201.303 +#865 := (iff #159 #863)
201.304 +#866 := [rewrite]: #865
201.305 +#862 := [asserted]: #159
201.306 +#869 := [mp #862 #866]: #863
201.307 +#2101 := [unit-resolution #869 #2099]: #156
201.308 +#2097 := (or up_12 up_7 up_8)
201.309 +#1626 := [hypothesis]: #156
201.310 +#2054 := (or up_54 up_7 up_8)
201.311 +decl up_16 :: bool
201.312 +#34 := up_16
201.313 +#1597 := [hypothesis]: #317
201.314 +#1888 := (or up_16 up_8 up_7 up_54)
201.315 +decl up_45 :: bool
201.316 +#104 := up_45
201.317 +#284 := (not up_45)
201.318 +decl up_52 :: bool
201.319 +#121 := up_52
201.320 +#309 := (not up_52)
201.321 +decl up_51 :: bool
201.322 +#120 := up_51
201.323 +#177 := (not up_16)
201.324 +#1627 := [hypothesis]: #177
201.325 +#1733 := (or up_51 up_7 up_54 up_8 up_16)
201.326 +decl up_53 :: bool
201.327 +#125 := up_53
201.328 +#308 := (not up_51)
201.329 +#1598 := [hypothesis]: #308
201.330 +decl up_43 :: bool
201.331 +#99 := up_43
201.332 +#276 := (not up_43)
201.333 +#1710 := (or up_32 up_16 up_8 up_7 up_51 up_54)
201.334 +#1671 := (or up_35 up_16 up_8 up_32 up_7)
201.335 +#1655 := (or #166 up_32 up_16 up_8 up_35 up_7)
201.336 +#1642 := [hypothesis]: up_12
201.337 +#885 := (or #160 #166)
201.338 +#169 := (or #166 #160)
201.339 +#887 := (iff #169 #885)
201.340 +#888 := [rewrite]: #887
201.341 +#884 := [asserted]: #169
201.342 +#891 := [mp #884 #888]: #885
201.343 +#1643 := [unit-resolution #891 #1642]: #160
201.344 +#1644 := [unit-resolution #410 #1643 #1612]: up_10
201.345 +#1645 := [unit-resolution #980 #1644]: #194
201.346 +#167 := (or #165 #166)
201.347 +#878 := [asserted]: #167
201.348 +#1646 := [unit-resolution #878 #1642]: #165
201.349 +#1647 := [unit-resolution #430 #1646]: up_13
201.350 +#1648 := [unit-resolution #1021 #1647]: #209
201.351 +#1649 := [unit-resolution #608 #1648 #1611]: up_33
201.352 +#1650 := [unit-resolution #1121 #1649]: #234
201.353 +decl up_18 :: bool
201.354 +#39 := up_18
201.355 +#185 := (not up_18)
201.356 +#979 := (or #161 #185)
201.357 +#200 := (or #185 #161)
201.358 +#981 := (iff #200 #979)
201.359 +#982 := [rewrite]: #981
201.360 +#978 := [asserted]: #200
201.361 +#985 := [mp #978 #982]: #979
201.362 +#1651 := [unit-resolution #985 #1644]: #185
201.363 +#468 := (or up_8 up_16 up_18 up_19)
201.364 +#41 := (or up_16 up_8)
201.365 +#42 := (or up_19 #41)
201.366 +#43 := (or up_18 #42)
201.367 +#471 := (iff #43 #468)
201.368 +#459 := (or up_8 up_16)
201.369 +#462 := (or up_19 #459)
201.370 +#465 := (or up_18 #462)
201.371 +#469 := (iff #465 #468)
201.372 +#470 := [rewrite]: #469
201.373 +#466 := (iff #43 #465)
201.374 +#463 := (iff #42 #462)
201.375 +#460 := (iff #41 #459)
201.376 +#461 := [rewrite]: #460
201.377 +#464 := [monotonicity #461]: #463
201.378 +#467 := [monotonicity #464]: #466
201.379 +#472 := [trans #467 #470]: #471
201.380 +#458 := [asserted]: #43
201.381 +#473 := [mp #458 #472]: #468
201.382 +#1652 := [unit-resolution #473 #1651 #1627 #1626]: up_19
201.383 +#186 := (not up_19)
201.384 +#1068 := (or #186 #226)
201.385 +#230 := (or #226 #186)
201.386 +#1070 := (iff #230 #1068)
201.387 +#1071 := [rewrite]: #1070
201.388 +#1067 := [asserted]: #230
201.389 +#1074 := [mp #1067 #1071]: #1068
201.390 +#1653 := [unit-resolution #1074 #1652]: #226
201.391 +#1654 := [unit-resolution #579 #1653 #1650 #895 #1645]: false
201.392 +#1656 := [lemma #1654]: #1655
201.393 +#1657 := [unit-resolution #1656 #1611 #1627 #1626 #895 #1612]: #166
201.394 +#1640 := (or up_12 up_35 up_7 up_22 up_16 up_8 up_32)
201.395 +#1628 := [unit-resolution #1625 #1457 #1456 #895 #1611 #1612]: up_29
201.396 +#1629 := [unit-resolution #1074 #1628]: #186
201.397 +#1630 := [unit-resolution #473 #1629 #1627 #1626]: up_18
201.398 +#960 := (or #185 #193)
201.399 +#196 := (or #193 #185)
201.400 +#961 := (iff #196 #960)
201.401 +#962 := [rewrite]: #961
201.402 +#958 := [asserted]: #196
201.403 +#965 := [mp #958 #962]: #960
201.404 +#1631 := [unit-resolution #965 #1630]: #193
201.405 +#1632 := [unit-resolution #505 #1631 #1456 #1457]: up_23
201.406 +#1633 := [unit-resolution #1126 #1632]: #242
201.407 +#1634 := [unit-resolution #608 #1633 #1611]: up_24
201.408 +#1635 := [unit-resolution #985 #1630]: #161
201.409 +#1636 := [unit-resolution #410 #1635 #1612]: up_9
201.410 +#1637 := [unit-resolution #886 #1636]: #165
201.411 +#1638 := [unit-resolution #430 #1637]: up_13
201.412 +#1639 := [unit-resolution #1021 #1638 #1634]: false
201.413 +#1641 := [lemma #1639]: #1640
201.414 +#1658 := [unit-resolution #1641 #1657 #1612 #1611 #1627 #1626 #895]: up_22
201.415 +#1659 := [unit-resolution #1016 #1658]: #209
201.416 +#1660 := [unit-resolution #608 #1659 #1611]: up_33
201.417 +#1661 := [unit-resolution #1121 #1660]: #234
201.418 +#1662 := [unit-resolution #1026 #1658]: #170
201.419 +#1663 := [unit-resolution #430 #1662]: up_11
201.420 +#1664 := [unit-resolution #886 #1663]: #160
201.421 +#1665 := [unit-resolution #410 #1664 #1612]: up_10
201.422 +#1666 := [unit-resolution #980 #1665]: #194
201.423 +#1667 := [unit-resolution #579 #1666 #895 #1661]: up_29
201.424 +#1668 := [unit-resolution #985 #1665]: #185
201.425 +#1669 := [unit-resolution #473 #1668 #1627 #1626]: up_19
201.426 +#1670 := [unit-resolution #1074 #1669 #1667]: false
201.427 +#1672 := [lemma #1670]: #1671
201.428 +#1698 := [unit-resolution #1672 #895 #1626 #1627 #1612]: up_35
201.429 +#1609 := (or #250 up_34 up_51 up_54)
201.430 +#316 := (not up_53)
201.431 +#1599 := [hypothesis]: up_35
201.432 +#1275 := (or #250 #291)
201.433 +#293 := (or #291 #250)
201.434 +#1277 := (iff #293 #1275)
201.435 +#1278 := [rewrite]: #1277
201.436 +#1274 := [asserted]: #293
201.437 +#1281 := [mp #1274 #1278]: #1275
201.438 +#1600 := [unit-resolution #1281 #1599]: #291
201.439 +#777 := (or up_46 up_55)
201.440 +decl up_4 :: bool
201.441 +#10 := up_4
201.442 +#783 := (or up_4 up_46 up_55)
201.443 +#1514 := (iff #783 #777)
201.444 +#1509 := (or false up_46 up_55)
201.445 +#1512 := (iff #1509 #777)
201.446 +#1513 := [rewrite]: #1512
201.447 +#1510 := (iff #783 #1509)
201.448 +#1485 := (iff up_4 false)
201.449 +#11 := (not up_4)
201.450 +#1488 := (iff #11 #1485)
201.451 +#1486 := (iff #1485 #11)
201.452 +#1487 := [rewrite]: #1486
201.453 +#1489 := [symm #1487]: #1488
201.454 +#371 := [asserted]: #11
201.455 +#1490 := [mp #371 #1489]: #1485
201.456 +#1511 := [monotonicity #1490]: #1510
201.457 +#1515 := [trans #1511 #1513]: #1514
201.458 +#135 := (or up_55 up_46)
201.459 +#136 := (or up_4 #135)
201.460 +#786 := (iff #136 #783)
201.461 +#780 := (or up_4 #777)
201.462 +#784 := (iff #780 #783)
201.463 +#785 := [rewrite]: #784
201.464 +#781 := (iff #136 #780)
201.465 +#778 := (iff #135 #777)
201.466 +#779 := [rewrite]: #778
201.467 +#782 := [monotonicity #779]: #781
201.468 +#787 := [trans #782 #785]: #786
201.469 +#776 := [asserted]: #136
201.470 +#788 := [mp #776 #787]: #783
201.471 +#1516 := [mp #788 #1515]: #777
201.472 +#1601 := [unit-resolution #1516 #1600]: up_55
201.473 +#324 := (not up_55)
201.474 +#1376 := (or #316 #324)
201.475 +#327 := (or #324 #316)
201.476 +#1377 := (iff #327 #1376)
201.477 +#1378 := [rewrite]: #1377
201.478 +#1374 := [asserted]: #327
201.479 +#1381 := [mp #1374 #1378]: #1376
201.480 +#1602 := [unit-resolution #1381 #1601]: #316
201.481 +#754 := (or up_43 up_51 up_53 up_54)
201.482 +#127 := (or up_51 up_43)
201.483 +#128 := (or up_54 #127)
201.484 +#129 := (or up_53 #128)
201.485 +#757 := (iff #129 #754)
201.486 +#745 := (or up_43 up_51)
201.487 +#748 := (or up_54 #745)
201.488 +#751 := (or up_53 #748)
201.489 +#755 := (iff #751 #754)
201.490 +#756 := [rewrite]: #755
201.491 +#752 := (iff #129 #751)
201.492 +#749 := (iff #128 #748)
201.493 +#746 := (iff #127 #745)
201.494 +#747 := [rewrite]: #746
201.495 +#750 := [monotonicity #747]: #749
201.496 +#753 := [monotonicity #750]: #752
201.497 +#758 := [trans #753 #756]: #757
201.498 +#744 := [asserted]: #129
201.499 +#759 := [mp #744 #758]: #754
201.500 +#1603 := [unit-resolution #759 #1602 #1598 #1597]: up_43
201.501 +decl up_44 :: bool
201.502 +#103 := up_44
201.503 +#283 := (not up_44)
201.504 +#1280 := (or #250 #283)
201.505 +#294 := (or #283 #250)
201.506 +#1282 := (iff #294 #1280)
201.507 +#1283 := [rewrite]: #1282
201.508 +#1279 := [asserted]: #294
201.509 +#1286 := [mp #1279 #1283]: #1280
201.510 +#1604 := [unit-resolution #1286 #1599]: #283
201.511 +#1380 := (or #284 #324)
201.512 +#328 := (or #324 #284)
201.513 +#1382 := (iff #328 #1380)
201.514 +#1383 := [rewrite]: #1382
201.515 +#1379 := [asserted]: #328
201.516 +#1386 := [mp #1379 #1383]: #1380
201.517 +#1606 := [unit-resolution #1386 #1601]: #284
201.518 +#680 := (or up_34 up_42 up_44 up_45)
201.519 +#105 := (or up_42 up_34)
201.520 +#106 := (or up_45 #105)
201.521 +#107 := (or up_44 #106)
201.522 +#683 := (iff #107 #680)
201.523 +#671 := (or up_34 up_42)
201.524 +#674 := (or up_45 #671)
201.525 +#677 := (or up_44 #674)
201.526 +#681 := (iff #677 #680)
201.527 +#682 := [rewrite]: #681
201.528 +#678 := (iff #107 #677)
201.529 +#675 := (iff #106 #674)
201.530 +#672 := (iff #105 #671)
201.531 +#673 := [rewrite]: #672
201.532 +#676 := [monotonicity #673]: #675
201.533 +#679 := [monotonicity #676]: #678
201.534 +#684 := [trans #679 #682]: #683
201.535 +#670 := [asserted]: #107
201.536 +#685 := [mp #670 #684]: #680
201.537 +#1607 := [unit-resolution #685 #1606 #1605 #1604]: up_42
201.538 +#277 := (or #275 #276)
201.539 +#1217 := [asserted]: #277
201.540 +#1608 := [unit-resolution #1217 #1607 #1603]: false
201.541 +#1610 := [lemma #1608]: #1609
201.542 +#1699 := [unit-resolution #1610 #1698 #1598 #1597]: up_34
201.543 +#1125 := (or #234 #243)
201.544 +#247 := (or #243 #234)
201.545 +#1127 := (iff #247 #1125)
201.546 +#1128 := [rewrite]: #1127
201.547 +#1124 := [asserted]: #247
201.548 +#1131 := [mp #1124 #1128]: #1125
201.549 +#1700 := [unit-resolution #1131 #1699]: #234
201.550 +#1130 := (or #202 #243)
201.551 +#248 := (or #243 #202)
201.552 +#1132 := (iff #248 #1130)
201.553 +#1133 := [rewrite]: #1132
201.554 +#1129 := [asserted]: #248
201.555 +#1136 := [mp #1129 #1133]: #1130
201.556 +#1701 := [unit-resolution #1136 #1699]: #202
201.557 +#1696 := (or up_12 up_7 up_23 up_16 up_8 up_32 up_31)
201.558 +#1684 := [hypothesis]: #234
201.559 +#1685 := [unit-resolution #1683 #1457 #1612 #1673]: #194
201.560 +#1686 := [unit-resolution #579 #1685 #895 #1684]: up_29
201.561 +#1687 := [unit-resolution #1074 #1686]: #186
201.562 +#1688 := [unit-resolution #473 #1687 #1627 #1626]: up_18
201.563 +#1689 := [unit-resolution #965 #1688]: #193
201.564 +#1690 := [unit-resolution #505 #1689 #1457 #1673]: up_22
201.565 +#1691 := [unit-resolution #1026 #1690]: #170
201.566 +#1692 := [unit-resolution #985 #1688]: #161
201.567 +#1693 := [unit-resolution #410 #1692 #1612]: up_9
201.568 +#1694 := [unit-resolution #886 #1693]: #165
201.569 +#1695 := [unit-resolution #430 #1694 #1691]: false
201.570 +#1697 := [lemma #1695]: #1696
201.571 +#1702 := [unit-resolution #1697 #1701 #1612 #1627 #1626 #895 #1700]: up_12
201.572 +#1703 := [unit-resolution #891 #1702]: #160
201.573 +#1704 := [unit-resolution #410 #1703 #1612]: up_10
201.574 +#1705 := [unit-resolution #980 #1704]: #194
201.575 +#1706 := [unit-resolution #579 #1705 #895 #1700]: up_29
201.576 +#1707 := [unit-resolution #985 #1704]: #185
201.577 +#1708 := [unit-resolution #473 #1707 #1627 #1626]: up_19
201.578 +#1709 := [unit-resolution #1074 #1708 #1706]: false
201.579 +#1711 := [lemma #1709]: #1710
201.580 +#1712 := [unit-resolution #1711 #1598 #1626 #1612 #1627 #1597]: up_32
201.581 +#1234 := (or #235 #276)
201.582 +#281 := (or #276 #235)
201.583 +#1236 := (iff #281 #1234)
201.584 +#1237 := [rewrite]: #1236
201.585 +#1233 := [asserted]: #281
201.586 +#1240 := [mp #1233 #1237]: #1234
201.587 +#1713 := [unit-resolution #1240 #1712]: #276
201.588 +#1714 := [unit-resolution #759 #1713 #1598 #1597]: up_53
201.589 +#1395 := (or #284 #316)
201.590 +#331 := (or #316 #284)
201.591 +#1397 := (iff #331 #1395)
201.592 +#1398 := [rewrite]: #1397
201.593 +#1394 := [asserted]: #331
201.594 +#1401 := [mp #1394 #1398]: #1395
201.595 +#1715 := [unit-resolution #1401 #1714]: #284
201.596 +#1716 := [unit-resolution #1230 #1712]: #275
201.597 +#1717 := [unit-resolution #1381 #1714]: #324
201.598 +#1718 := [unit-resolution #1516 #1717]: up_46
201.599 +#1270 := (or #283 #291)
201.600 +#292 := (or #291 #283)
201.601 +#1272 := (iff #292 #1270)
201.602 +#1273 := [rewrite]: #1272
201.603 +#1269 := [asserted]: #292
201.604 +#1276 := [mp #1269 #1273]: #1270
201.605 +#1719 := [unit-resolution #1276 #1718]: #283
201.606 +#1720 := [unit-resolution #685 #1719 #1716 #1715]: up_34
201.607 +#1721 := [unit-resolution #1136 #1720]: #202
201.608 +#1722 := [unit-resolution #1281 #1718]: #250
201.609 +#244 := (or #242 #243)
201.610 +#1113 := [asserted]: #244
201.611 +#1723 := [unit-resolution #1113 #1720]: #242
201.612 +#1724 := [unit-resolution #608 #1723 #1722]: up_24
201.613 +#1725 := [unit-resolution #1016 #1724]: #201
201.614 +#1726 := [unit-resolution #1021 #1724]: #170
201.615 +#1727 := [unit-resolution #430 #1726]: up_11
201.616 +#1728 := [unit-resolution #878 #1727]: #166
201.617 +#1729 := [unit-resolution #505 #1728 #1725 #1721]: up_20
201.618 +#1730 := [unit-resolution #886 #1727]: #160
201.619 +#1731 := [unit-resolution #410 #1730 #1612]: up_10
201.620 +#1732 := [unit-resolution #970 #1731 #1729]: false
201.621 +#1734 := [lemma #1732]: #1733
201.622 +#1858 := [unit-resolution #1734 #1627 #1597 #1626 #1612]: up_51
201.623 +#310 := (or #308 #309)
201.624 +#1321 := [asserted]: #310
201.625 +#1859 := [unit-resolution #1321 #1858]: #309
201.626 +decl up_58 :: bool
201.627 +#139 := up_58
201.628 +#337 := (not up_58)
201.629 +decl up_49 :: bool
201.630 +#115 := up_49
201.631 +#300 := (not up_49)
201.632 +#1324 := (or #300 #308)
201.633 +#311 := (or #308 #300)
201.634 +#1325 := (iff #311 #1324)
201.635 +#1326 := [rewrite]: #1325
201.636 +#1322 := [asserted]: #311
201.637 +#1329 := [mp #1322 #1326]: #1324
201.638 +#1860 := [unit-resolution #1329 #1858]: #300
201.639 +decl up_39 :: bool
201.640 +#89 := up_39
201.641 +#260 := (not up_39)
201.642 +decl up_38 :: bool
201.643 +#88 := up_38
201.644 +decl up_40 :: bool
201.645 +#93 := up_40
201.646 +#267 := (not up_40)
201.647 +decl up_41 :: bool
201.648 +#94 := up_41
201.649 +#268 := (not up_41)
201.650 +#1328 := (or #268 #308)
201.651 +#312 := (or #308 #268)
201.652 +#1330 := (iff #312 #1328)
201.653 +#1331 := [rewrite]: #1330
201.654 +#1327 := [asserted]: #312
201.655 +#1334 := [mp #1327 #1331]: #1328
201.656 +#1861 := [unit-resolution #1334 #1858]: #268
201.657 +#1771 := (or up_32 up_16 up_8 up_41 up_49 up_52 up_7)
201.658 +#1735 := [unit-resolution #1281 #1698]: #291
201.659 +#1736 := [unit-resolution #1516 #1735]: up_55
201.660 +#1737 := [unit-resolution #1386 #1736]: #284
201.661 +#1738 := [unit-resolution #1286 #1698]: #283
201.662 +#259 := (not up_38)
201.663 +decl up_50 :: bool
201.664 +#116 := up_50
201.665 +#301 := (not up_50)
201.666 +#1739 := [hypothesis]: #309
201.667 +#341 := (not up_59)
201.668 +#326 := (or #324 #325)
201.669 +#1373 := [asserted]: #326
201.670 +#1740 := [unit-resolution #1373 #1736]: #325
201.671 +#834 := (or up_56 up_60)
201.672 +decl up_3 :: bool
201.673 +#8 := up_3
201.674 +#840 := (or up_3 up_56 up_60)
201.675 +#1522 := (iff #840 #834)
201.676 +#1517 := (or false up_56 up_60)
201.677 +#1520 := (iff #1517 #834)
201.678 +#1521 := [rewrite]: #1520
201.679 +#1518 := (iff #840 #1517)
201.680 +#1479 := (iff up_3 false)
201.681 +#9 := (not up_3)
201.682 +#1482 := (iff #9 #1479)
201.683 +#1480 := (iff #1479 #9)
201.684 +#1481 := [rewrite]: #1480
201.685 +#1483 := [symm #1481]: #1482
201.686 +#370 := [asserted]: #9
201.687 +#1484 := [mp #370 #1483]: #1479
201.688 +#1519 := [monotonicity #1484]: #1518
201.689 +#1523 := [trans #1519 #1521]: #1522
201.690 +#148 := (or up_60 up_56)
201.691 +#149 := (or up_3 #148)
201.692 +#843 := (iff #149 #840)
201.693 +#837 := (or up_3 #834)
201.694 +#841 := (iff #837 #840)
201.695 +#842 := [rewrite]: #841
201.696 +#838 := (iff #149 #837)
201.697 +#835 := (iff #148 #834)
201.698 +#836 := [rewrite]: #835
201.699 +#839 := [monotonicity #836]: #838
201.700 +#844 := [trans #839 #842]: #843
201.701 +#833 := [asserted]: #149
201.702 +#845 := [mp #833 #844]: #840
201.703 +#1524 := [mp #845 #1523]: #834
201.704 +#1741 := [unit-resolution #1524 #1740]: up_60
201.705 +#1442 := (or #341 #345)
201.706 +#346 := (or #345 #341)
201.707 +#1444 := (iff #346 #1442)
201.708 +#1445 := [rewrite]: #1444
201.709 +#1441 := [asserted]: #346
201.710 +#1448 := [mp #1441 #1445]: #1442
201.711 +#1742 := [unit-resolution #1448 #1741]: #341
201.712 +#814 := (or up_52 up_58 up_59)
201.713 +#143 := (or up_58 up_52)
201.714 +#144 := (or up_59 #143)
201.715 +#817 := (iff #144 #814)
201.716 +#808 := (or up_52 up_58)
201.717 +#811 := (or up_59 #808)
201.718 +#815 := (iff #811 #814)
201.719 +#816 := [rewrite]: #815
201.720 +#812 := (iff #144 #811)
201.721 +#809 := (iff #143 #808)
201.722 +#810 := [rewrite]: #809
201.723 +#813 := [monotonicity #810]: #812
201.724 +#818 := [trans #813 #816]: #817
201.725 +#807 := [asserted]: #144
201.726 +#819 := [mp #807 #818]: #814
201.727 +#1743 := [unit-resolution #819 #1742 #1739]: up_58
201.728 +#1417 := (or #301 #337)
201.729 +#339 := (or #337 #301)
201.730 +#1419 := (iff #339 #1417)
201.731 +#1420 := [rewrite]: #1419
201.732 +#1416 := [asserted]: #339
201.733 +#1423 := [mp #1416 #1420]: #1417
201.734 +#1744 := [unit-resolution #1423 #1743]: #301
201.735 +#1745 := [hypothesis]: #300
201.736 +decl up_47 :: bool
201.737 +#111 := up_47
201.738 +#295 := (not up_47)
201.739 +decl up_48 :: bool
201.740 +#112 := up_48
201.741 +decl up_57 :: bool
201.742 +#137 := up_57
201.743 +#335 := (not up_57)
201.744 +#1412 := (or #335 #337)
201.745 +#338 := (or #337 #335)
201.746 +#1414 := (iff #338 #1412)
201.747 +#1415 := [rewrite]: #1414
201.748 +#1411 := [asserted]: #338
201.749 +#1418 := [mp #1411 #1415]: #1412
201.750 +#1746 := [unit-resolution #1418 #1743]: #335
201.751 +#790 := (or up_48 up_57)
201.752 +#138 := (or up_57 up_48)
201.753 +#791 := (iff #138 #790)
201.754 +#792 := [rewrite]: #791
201.755 +#789 := [asserted]: #138
201.756 +#795 := [mp #789 #792]: #790
201.757 +#1747 := [unit-resolution #795 #1746]: up_48
201.758 +#296 := (not up_48)
201.759 +#297 := (or #295 #296)
201.760 +#1284 := [asserted]: #297
201.761 +#1748 := [unit-resolution #1284 #1747]: #295
201.762 +#722 := (or up_39 up_47 up_49 up_50)
201.763 +#117 := (or up_47 up_39)
201.764 +#118 := (or up_50 #117)
201.765 +#119 := (or up_49 #118)
201.766 +#725 := (iff #119 #722)
201.767 +#713 := (or up_39 up_47)
201.768 +#716 := (or up_50 #713)
201.769 +#719 := (or up_49 #716)
201.770 +#723 := (iff #719 #722)
201.771 +#724 := [rewrite]: #723
201.772 +#720 := (iff #119 #719)
201.773 +#717 := (iff #118 #716)
201.774 +#714 := (iff #117 #713)
201.775 +#715 := [rewrite]: #714
201.776 +#718 := [monotonicity #715]: #717
201.777 +#721 := [monotonicity #718]: #720
201.778 +#726 := [trans #721 #724]: #725
201.779 +#712 := [asserted]: #119
201.780 +#727 := [mp #712 #726]: #722
201.781 +#1749 := [unit-resolution #727 #1748 #1745 #1744]: up_39
201.782 +#261 := (or #259 #260)
201.783 +#1165 := [asserted]: #261
201.784 +#1750 := [unit-resolution #1165 #1749]: #259
201.785 +#1751 := [hypothesis]: #268
201.786 +decl up_30 :: bool
201.787 +#67 := up_30
201.788 +#227 := (not up_30)
201.789 +decl up_27 :: bool
201.790 +#61 := up_27
201.791 +#213 := (not up_25)
201.792 +decl up_37 :: bool
201.793 +#85 := up_37
201.794 +#255 := (not up_37)
201.795 +#1291 := (or #255 #296)
201.796 +#299 := (or #296 #255)
201.797 +#1293 := (iff #299 #1291)
201.798 +#1294 := [rewrite]: #1293
201.799 +#1290 := [asserted]: #299
201.800 +#1297 := [mp #1290 #1294]: #1291
201.801 +#1752 := [unit-resolution #1297 #1747]: #255
201.802 +decl up_36 :: bool
201.803 +#84 := up_36
201.804 +#254 := (not up_36)
201.805 +#1177 := (or #254 #260)
201.806 +#264 := (or #260 #254)
201.807 +#1179 := (iff #264 #1177)
201.808 +#1180 := [rewrite]: #1179
201.809 +#1176 := [asserted]: #264
201.810 +#1183 := [mp #1176 #1180]: #1177
201.811 +#1753 := [unit-resolution #1183 #1749]: #254
201.812 +#616 := (or up_26 up_36 up_37)
201.813 +#86 := (or up_37 up_26)
201.814 +#87 := (or up_36 #86)
201.815 +#619 := (iff #87 #616)
201.816 +#610 := (or up_26 up_37)
201.817 +#613 := (or up_36 #610)
201.818 +#617 := (iff #613 #616)
201.819 +#618 := [rewrite]: #617
201.820 +#614 := (iff #87 #613)
201.821 +#611 := (iff #86 #610)
201.822 +#612 := [rewrite]: #611
201.823 +#615 := [monotonicity #612]: #614
201.824 +#620 := [trans #615 #618]: #619
201.825 +#609 := [asserted]: #87
201.826 +#621 := [mp #609 #620]: #616
201.827 +#1754 := [unit-resolution #621 #1753 #1752]: up_26
201.828 +#215 := (or #213 #214)
201.829 +#1024 := [asserted]: #215
201.830 +#1755 := [unit-resolution #1024 #1754]: #213
201.831 +decl up_28 :: bool
201.832 +#62 := up_28
201.833 +#219 := (not up_28)
201.834 +#1182 := (or #219 #260)
201.835 +#265 := (or #260 #219)
201.836 +#1184 := (iff #265 #1182)
201.837 +#1185 := [rewrite]: #1184
201.838 +#1181 := [asserted]: #265
201.839 +#1188 := [mp #1181 #1185]: #1182
201.840 +#1756 := [unit-resolution #1188 #1749]: #219
201.841 +decl up_17 :: bool
201.842 +#35 := up_17
201.843 +#178 := (not up_17)
201.844 +#173 := (not up_15)
201.845 +#1031 := (or #173 #214)
201.846 +#217 := (or #214 #173)
201.847 +#1033 := (iff #217 #1031)
201.848 +#1034 := [rewrite]: #1033
201.849 +#1030 := [asserted]: #217
201.850 +#1037 := [mp #1030 #1034]: #1031
201.851 +#1757 := [unit-resolution #1037 #1754]: #173
201.852 +#1503 := (or up_14 up_15)
201.853 +decl up_2 :: bool
201.854 +#6 := up_2
201.855 +#436 := (or up_2 up_14 up_15)
201.856 +#1506 := (iff #436 #1503)
201.857 +#1500 := (or false up_14 up_15)
201.858 +#1504 := (iff #1500 #1503)
201.859 +#1505 := [rewrite]: #1504
201.860 +#1501 := (iff #436 #1500)
201.861 +#1473 := (iff up_2 false)
201.862 +#7 := (not up_2)
201.863 +#1476 := (iff #7 #1473)
201.864 +#1474 := (iff #1473 #7)
201.865 +#1475 := [rewrite]: #1474
201.866 +#1477 := [symm #1475]: #1476
201.867 +#369 := [asserted]: #7
201.868 +#1478 := [mp #369 #1477]: #1473
201.869 +#1502 := [monotonicity #1478]: #1501
201.870 +#1507 := [trans #1502 #1505]: #1506
201.871 +#32 := (or up_15 up_2)
201.872 +#33 := (or up_14 #32)
201.873 +#439 := (iff #33 #436)
201.874 +#429 := (or up_2 up_15)
201.875 +#433 := (or up_14 #429)
201.876 +#437 := (iff #433 #436)
201.877 +#438 := [rewrite]: #437
201.878 +#434 := (iff #33 #433)
201.879 +#431 := (iff #32 #429)
201.880 +#432 := [rewrite]: #431
201.881 +#435 := [monotonicity #432]: #434
201.882 +#440 := [trans #435 #438]: #439
201.883 +#428 := [asserted]: #33
201.884 +#441 := [mp #428 #440]: #436
201.885 +#1508 := [mp #441 #1507]: #1503
201.886 +#1758 := [unit-resolution #1508 #1757]: up_14
201.887 +#917 := (or #172 #178)
201.888 +#182 := (or #178 #172)
201.889 +#919 := (iff #182 #917)
201.890 +#920 := [rewrite]: #919
201.891 +#916 := [asserted]: #182
201.892 +#923 := [mp #916 #920]: #917
201.893 +#1759 := [unit-resolution #923 #1758]: #178
201.894 +#542 := (or up_17 up_25 up_27 up_28)
201.895 +#63 := (or up_25 up_17)
201.896 +#64 := (or up_28 #63)
201.897 +#65 := (or up_27 #64)
201.898 +#545 := (iff #65 #542)
201.899 +#533 := (or up_17 up_25)
201.900 +#536 := (or up_28 #533)
201.901 +#539 := (or up_27 #536)
201.902 +#543 := (iff #539 #542)
201.903 +#544 := [rewrite]: #543
201.904 +#540 := (iff #65 #539)
201.905 +#537 := (iff #64 #536)
201.906 +#534 := (iff #63 #533)
201.907 +#535 := [rewrite]: #534
201.908 +#538 := [monotonicity #535]: #537
201.909 +#541 := [monotonicity #538]: #540
201.910 +#546 := [trans #541 #544]: #545
201.911 +#532 := [asserted]: #65
201.912 +#547 := [mp #532 #546]: #542
201.913 +#1760 := [unit-resolution #547 #1759 #1756 #1755]: up_27
201.914 +#218 := (not up_27)
201.915 +#1073 := (or #218 #227)
201.916 +#231 := (or #227 #218)
201.917 +#1075 := (iff #231 #1073)
201.918 +#1076 := [rewrite]: #1075
201.919 +#1072 := [asserted]: #231
201.920 +#1079 := [mp #1072 #1076]: #1073
201.921 +#1761 := [unit-resolution #1079 #1760]: #227
201.922 +#648 := (or up_30 up_38 up_40 up_41)
201.923 +#95 := (or up_38 up_30)
201.924 +#96 := (or up_41 #95)
201.925 +#97 := (or up_40 #96)
201.926 +#651 := (iff #97 #648)
201.927 +#639 := (or up_30 up_38)
201.928 +#642 := (or up_41 #639)
201.929 +#645 := (or up_40 #642)
201.930 +#649 := (iff #645 #648)
201.931 +#650 := [rewrite]: #649
201.932 +#646 := (iff #97 #645)
201.933 +#643 := (iff #96 #642)
201.934 +#640 := (iff #95 #639)
201.935 +#641 := [rewrite]: #640
201.936 +#644 := [monotonicity #641]: #643
201.937 +#647 := [monotonicity #644]: #646
201.938 +#652 := [trans #647 #650]: #651
201.939 +#638 := [asserted]: #97
201.940 +#653 := [mp #638 #652]: #648
201.941 +#1762 := [unit-resolution #653 #1761 #1751 #1750]: up_40
201.942 +#1220 := (or #267 #275)
201.943 +#278 := (or #275 #267)
201.944 +#1221 := (iff #278 #1220)
201.945 +#1222 := [rewrite]: #1221
201.946 +#1218 := [asserted]: #278
201.947 +#1225 := [mp #1218 #1222]: #1220
201.948 +#1763 := [unit-resolution #1225 #1762]: #275
201.949 +#1764 := [unit-resolution #685 #1763 #1738 #1737]: up_34
201.950 +#1064 := (or #218 #226)
201.951 +#229 := (or #226 #218)
201.952 +#1065 := (iff #229 #1064)
201.953 +#1066 := [rewrite]: #1065
201.954 +#1062 := [asserted]: #229
201.955 +#1069 := [mp #1062 #1066]: #1064
201.956 +#1765 := [unit-resolution #1069 #1760]: #226
201.957 +#1083 := (or #186 #218)
201.958 +#233 := (or #218 #186)
201.959 +#1085 := (iff #233 #1083)
201.960 +#1086 := [rewrite]: #1085
201.961 +#1082 := [asserted]: #233
201.962 +#1089 := [mp #1082 #1086]: #1083
201.963 +#1766 := [unit-resolution #1089 #1760]: #186
201.964 +#1767 := [unit-resolution #473 #1766 #1627 #1626]: up_18
201.965 +#969 := (or #185 #194)
201.966 +#198 := (or #194 #185)
201.967 +#971 := (iff #198 #969)
201.968 +#972 := [rewrite]: #971
201.969 +#968 := [asserted]: #198
201.970 +#975 := [mp #968 #972]: #969
201.971 +#1768 := [unit-resolution #975 #1767]: #194
201.972 +#1769 := [unit-resolution #579 #1768 #895 #1765]: up_31
201.973 +#1770 := [unit-resolution #1131 #1769 #1764]: false
201.974 +#1772 := [lemma #1770]: #1771
201.975 +#1862 := [unit-resolution #1772 #1627 #1626 #1861 #1860 #1859 #1612]: up_32
201.976 +#1239 := (or #235 #267)
201.977 +#282 := (or #267 #235)
201.978 +#1241 := (iff #282 #1239)
201.979 +#1242 := [rewrite]: #1241
201.980 +#1238 := [asserted]: #282
201.981 +#1245 := [mp #1238 #1242]: #1239
201.982 +#1863 := [unit-resolution #1245 #1862]: #267
201.983 +#1856 := (or up_12 up_52 up_49 up_41 up_16 up_8 up_7)
201.984 +#1828 := [unit-resolution #1772 #1627 #1626 #1751 #1745 #1739 #1612]: up_32
201.985 +#1829 := [unit-resolution #1245 #1828]: #267
201.986 +#1830 := [unit-resolution #1230 #1828]: #275
201.987 +#1826 := (or #170 up_41 up_40 up_16 up_8 up_49 up_12 up_52 up_42)
201.988 +#1804 := [hypothesis]: up_13
201.989 +#1805 := [unit-resolution #1026 #1804]: #201
201.990 +#1806 := [unit-resolution #1021 #1804]: #209
201.991 +#1798 := [hypothesis]: #275
201.992 +#1782 := [hypothesis]: #267
201.993 +#1802 := (or #242 up_42 up_52 up_49 up_41 up_40 up_16 up_8 up_12 up_22)
201.994 +#1783 := [hypothesis]: up_33
201.995 +#1784 := [unit-resolution #1126 #1783]: #202
201.996 +#1785 := [unit-resolution #505 #1784 #1457 #1456]: up_20
201.997 +#1786 := [unit-resolution #965 #1785]: #185
201.998 +#1787 := [unit-resolution #473 #1786 #1627 #1626]: up_19
201.999 +#1078 := (or #186 #227)
201.1000 +#232 := (or #227 #186)
201.1001 +#1080 := (iff #232 #1078)
201.1002 +#1081 := [rewrite]: #1080
201.1003 +#1077 := [asserted]: #232
201.1004 +#1084 := [mp #1077 #1081]: #1078
201.1005 +#1788 := [unit-resolution #1084 #1787]: #227
201.1006 +#1789 := [unit-resolution #653 #1788 #1751 #1782]: up_38
201.1007 +#1790 := [unit-resolution #1165 #1789]: #260
201.1008 +#1780 := (or #337 up_49 up_39)
201.1009 +#1773 := [hypothesis]: up_58
201.1010 +#1774 := [unit-resolution #1418 #1773]: #335
201.1011 +#1775 := [unit-resolution #795 #1774]: up_48
201.1012 +#1776 := [hypothesis]: #260
201.1013 +#1777 := [unit-resolution #1423 #1773]: #301
201.1014 +#1778 := [unit-resolution #727 #1777 #1745 #1776]: up_47
201.1015 +#1779 := [unit-resolution #1284 #1778 #1775]: false
201.1016 +#1781 := [lemma #1779]: #1780
201.1017 +#1791 := [unit-resolution #1781 #1790 #1745]: #337
201.1018 +#1792 := [unit-resolution #819 #1791 #1739]: up_59
201.1019 +#1793 := [unit-resolution #1448 #1792]: #345
201.1020 +#1794 := [unit-resolution #1524 #1793]: up_56
201.1021 +#1795 := [unit-resolution #1373 #1794]: #324
201.1022 +#1796 := [unit-resolution #1516 #1795]: up_46
201.1023 +#1797 := [unit-resolution #1113 #1783]: #243
201.1024 +#1390 := (or #284 #325)
201.1025 +#330 := (or #325 #284)
201.1026 +#1392 := (iff #330 #1390)
201.1027 +#1393 := [rewrite]: #1392
201.1028 +#1389 := [asserted]: #330
201.1029 +#1396 := [mp #1389 #1393]: #1390
201.1030 +#1799 := [unit-resolution #1396 #1794]: #284
201.1031 +#1800 := [unit-resolution #685 #1799 #1798 #1797]: up_44
201.1032 +#1801 := [unit-resolution #1276 #1800 #1796]: false
201.1033 +#1803 := [lemma #1801]: #1802
201.1034 +#1807 := [unit-resolution #1803 #1805 #1739 #1745 #1751 #1782 #1627 #1626 #1457 #1798]: #242
201.1035 +#1808 := [unit-resolution #608 #1807 #1806]: up_35
201.1036 +#1809 := [unit-resolution #1286 #1808]: #283
201.1037 +#1810 := [unit-resolution #1281 #1808]: #291
201.1038 +#1811 := [unit-resolution #1516 #1810]: up_55
201.1039 +#1812 := [unit-resolution #1386 #1811]: #284
201.1040 +#1813 := [unit-resolution #685 #1812 #1798 #1809]: up_34
201.1041 +#1814 := [unit-resolution #1136 #1813]: #202
201.1042 +#1815 := [unit-resolution #505 #1814 #1457 #1805]: up_20
201.1043 +#1816 := [unit-resolution #965 #1815]: #185
201.1044 +#1817 := [unit-resolution #473 #1816 #1627 #1626]: up_19
201.1045 +#1818 := [unit-resolution #1373 #1811]: #325
201.1046 +#1819 := [unit-resolution #1524 #1818]: up_60
201.1047 +#1820 := [unit-resolution #1448 #1819]: #341
201.1048 +#1821 := [unit-resolution #819 #1820 #1739]: up_58
201.1049 +#1822 := [unit-resolution #1781 #1821 #1745]: up_39
201.1050 +#1823 := [unit-resolution #1165 #1822]: #259
201.1051 +#1824 := [unit-resolution #653 #1823 #1751 #1782]: up_30
201.1052 +#1825 := [unit-resolution #1084 #1824 #1817]: false
201.1053 +#1827 := [lemma #1825]: #1826
201.1054 +#1831 := [unit-resolution #1827 #1457 #1829 #1627 #1626 #1745 #1751 #1739 #1830]: #170
201.1055 +#1832 := [unit-resolution #430 #1831]: up_11
201.1056 +#1833 := [unit-resolution #886 #1832]: #160
201.1057 +#1834 := [unit-resolution #410 #1833 #1612]: up_10
201.1058 +#1835 := [unit-resolution #985 #1834]: #185
201.1059 +#1836 := [unit-resolution #473 #1835 #1627 #1626]: up_19
201.1060 +#1837 := [unit-resolution #1084 #1836]: #227
201.1061 +#1838 := [unit-resolution #653 #1837 #1751 #1829]: up_38
201.1062 +#1839 := [unit-resolution #1165 #1838]: #260
201.1063 +#1840 := [unit-resolution #1781 #1839 #1745]: #337
201.1064 +#1841 := [unit-resolution #819 #1840 #1739]: up_59
201.1065 +#1842 := [unit-resolution #1448 #1841]: #345
201.1066 +#1843 := [unit-resolution #1524 #1842]: up_56
201.1067 +#1844 := [unit-resolution #1373 #1843]: #324
201.1068 +#1845 := [unit-resolution #1516 #1844]: up_46
201.1069 +#1846 := [unit-resolution #1281 #1845]: #250
201.1070 +#1847 := [unit-resolution #1396 #1843]: #284
201.1071 +#1848 := [unit-resolution #1276 #1845]: #283
201.1072 +#1849 := [unit-resolution #685 #1848 #1830 #1847]: up_34
201.1073 +#1850 := [unit-resolution #1113 #1849]: #242
201.1074 +#1851 := [unit-resolution #608 #1850 #1846]: up_24
201.1075 +#1852 := [unit-resolution #970 #1834]: #193
201.1076 +#1853 := [unit-resolution #1136 #1849]: #202
201.1077 +#1854 := [unit-resolution #505 #1853 #1457 #1852]: up_22
201.1078 +#1855 := [unit-resolution #1016 #1854 #1851]: false
201.1079 +#1857 := [lemma #1855]: #1856
201.1080 +#1864 := [unit-resolution #1857 #1859 #1860 #1861 #1627 #1626 #1612]: up_12
201.1081 +#1865 := [unit-resolution #891 #1864]: #160
201.1082 +#1866 := [unit-resolution #410 #1865 #1612]: up_10
201.1083 +#1867 := [unit-resolution #985 #1866]: #185
201.1084 +#1868 := [unit-resolution #473 #1867 #1627 #1626]: up_19
201.1085 +#1869 := [unit-resolution #1084 #1868]: #227
201.1086 +#1870 := [unit-resolution #653 #1869 #1861 #1863]: up_38
201.1087 +#1871 := [unit-resolution #1165 #1870]: #260
201.1088 +#1872 := [unit-resolution #1781 #1871 #1860]: #337
201.1089 +#1873 := [unit-resolution #819 #1872 #1859]: up_59
201.1090 +#1874 := [unit-resolution #1448 #1873]: #345
201.1091 +#1875 := [unit-resolution #1524 #1874]: up_56
201.1092 +#1876 := [unit-resolution #1396 #1875]: #284
201.1093 +#1877 := [unit-resolution #1230 #1862]: #275
201.1094 +#1878 := [unit-resolution #1373 #1875]: #324
201.1095 +#1879 := [unit-resolution #1516 #1878]: up_46
201.1096 +#1880 := [unit-resolution #1276 #1879]: #283
201.1097 +#1881 := [unit-resolution #685 #1880 #1877 #1876]: up_34
201.1098 +#1882 := [unit-resolution #878 #1864]: #165
201.1099 +#1883 := [unit-resolution #430 #1882]: up_13
201.1100 +#1884 := [unit-resolution #1021 #1883]: #209
201.1101 +#1885 := [unit-resolution #1281 #1879]: #250
201.1102 +#1886 := [unit-resolution #608 #1885 #1884]: up_33
201.1103 +#1887 := [unit-resolution #1113 #1886 #1881]: false
201.1104 +#1889 := [lemma #1887]: #1888
201.1105 +#2026 := [unit-resolution #1889 #1597 #1612 #1626]: up_16
201.1106 +#908 := (or #172 #177)
201.1107 +#180 := (or #177 #172)
201.1108 +#909 := (iff #180 #908)
201.1109 +#910 := [rewrite]: #909
201.1110 +#906 := [asserted]: #180
201.1111 +#913 := [mp #906 #910]: #908
201.1112 +#2027 := [unit-resolution #913 #2026]: #172
201.1113 +#2028 := [unit-resolution #1508 #2027]: up_15
201.1114 +#2029 := [unit-resolution #1037 #2028]: #214
201.1115 +#1027 := (or #173 #213)
201.1116 +#216 := (or #213 #173)
201.1117 +#1028 := (iff #216 #1027)
201.1118 +#1029 := [rewrite]: #1028
201.1119 +#1025 := [asserted]: #216
201.1120 +#1032 := [mp #1025 #1029]: #1027
201.1121 +#2030 := [unit-resolution #1032 #2028]: #213
201.1122 +#179 := (or #177 #178)
201.1123 +#905 := [asserted]: #179
201.1124 +#2031 := [unit-resolution #905 #2026]: #178
201.1125 +#1917 := (or #226 up_54 up_26 up_17 up_25)
201.1126 +#1890 := [hypothesis]: #214
201.1127 +#1891 := [hypothesis]: #213
201.1128 +#1892 := [hypothesis]: #178
201.1129 +#1893 := [hypothesis]: up_29
201.1130 +#1894 := [unit-resolution #1069 #1893]: #218
201.1131 +#1895 := [unit-resolution #547 #1894 #1892 #1891]: up_28
201.1132 +#1187 := (or #219 #254)
201.1133 +#266 := (or #254 #219)
201.1134 +#1189 := (iff #266 #1187)
201.1135 +#1190 := [rewrite]: #1189
201.1136 +#1186 := [asserted]: #266
201.1137 +#1193 := [mp #1186 #1190]: #1187
201.1138 +#1896 := [unit-resolution #1193 #1895]: #254
201.1139 +#1897 := [unit-resolution #621 #1896 #1890]: up_37
201.1140 +#1898 := [unit-resolution #1297 #1897]: #296
201.1141 +#1899 := [unit-resolution #795 #1898]: up_57
201.1142 +#1900 := [unit-resolution #1418 #1899]: #337
201.1143 +#1901 := [unit-resolution #1188 #1895]: #260
201.1144 +#1287 := (or #255 #295)
201.1145 +#298 := (or #295 #255)
201.1146 +#1288 := (iff #298 #1287)
201.1147 +#1289 := [rewrite]: #1288
201.1148 +#1285 := [asserted]: #298
201.1149 +#1292 := [mp #1285 #1289]: #1287
201.1150 +#1902 := [unit-resolution #1292 #1897]: #295
201.1151 +#1422 := (or #301 #335)
201.1152 +#340 := (or #335 #301)
201.1153 +#1424 := (iff #340 #1422)
201.1154 +#1425 := [rewrite]: #1424
201.1155 +#1421 := [asserted]: #340
201.1156 +#1428 := [mp #1421 #1425]: #1422
201.1157 +#1903 := [unit-resolution #1428 #1899]: #301
201.1158 +#1904 := [unit-resolution #727 #1903 #1902 #1901]: up_49
201.1159 +#1333 := (or #300 #309)
201.1160 +#313 := (or #309 #300)
201.1161 +#1335 := (iff #313 #1333)
201.1162 +#1336 := [rewrite]: #1335
201.1163 +#1332 := [asserted]: #313
201.1164 +#1339 := [mp #1332 #1336]: #1333
201.1165 +#1905 := [unit-resolution #1339 #1904]: #309
201.1166 +#1906 := [unit-resolution #819 #1905 #1900]: up_59
201.1167 +#1907 := [unit-resolution #1448 #1906]: #345
201.1168 +#1908 := [unit-resolution #1524 #1907]: up_56
201.1169 +#1909 := [unit-resolution #1329 #1904]: #308
201.1170 +#1172 := (or #219 #259)
201.1171 +#263 := (or #259 #219)
201.1172 +#1174 := (iff #263 #1172)
201.1173 +#1175 := [rewrite]: #1174
201.1174 +#1171 := [asserted]: #263
201.1175 +#1178 := [mp #1171 #1175]: #1172
201.1176 +#1910 := [unit-resolution #1178 #1895]: #259
201.1177 +#228 := (or #226 #227)
201.1178 +#1061 := [asserted]: #228
201.1179 +#1911 := [unit-resolution #1061 #1893]: #227
201.1180 +#1343 := (or #268 #300)
201.1181 +#315 := (or #300 #268)
201.1182 +#1345 := (iff #315 #1343)
201.1183 +#1346 := [rewrite]: #1345
201.1184 +#1342 := [asserted]: #315
201.1185 +#1349 := [mp #1342 #1346]: #1343
201.1186 +#1912 := [unit-resolution #1349 #1904]: #268
201.1187 +#1913 := [unit-resolution #653 #1912 #1911 #1910]: up_40
201.1188 +#1229 := (or #267 #276)
201.1189 +#280 := (or #276 #267)
201.1190 +#1231 := (iff #280 #1229)
201.1191 +#1232 := [rewrite]: #1231
201.1192 +#1228 := [asserted]: #280
201.1193 +#1235 := [mp #1228 #1232]: #1229
201.1194 +#1914 := [unit-resolution #1235 #1913]: #276
201.1195 +#1915 := [unit-resolution #759 #1914 #1909 #1597]: up_53
201.1196 +#1385 := (or #316 #325)
201.1197 +#329 := (or #325 #316)
201.1198 +#1387 := (iff #329 #1385)
201.1199 +#1388 := [rewrite]: #1387
201.1200 +#1384 := [asserted]: #329
201.1201 +#1391 := [mp #1384 #1388]: #1385
201.1202 +#1916 := [unit-resolution #1391 #1915 #1908]: false
201.1203 +#1918 := [lemma #1916]: #1917
201.1204 +#2032 := [unit-resolution #1918 #1597 #2029 #2031 #2030]: #226
201.1205 +#2010 := (or up_12 up_29 up_7 up_54 up_26)
201.1206 +#1993 := (or up_35 up_12 up_54 up_26 up_29 up_7)
201.1207 +#1955 := (or #170 up_54 up_26 up_29 up_12 up_35 up_7)
201.1208 +#1940 := [unit-resolution #1625 #1805 #907 #1457 #1611 #1612]: up_32
201.1209 +#1941 := [unit-resolution #1240 #1940]: #276
201.1210 +#1942 := [unit-resolution #1230 #1940]: #275
201.1211 +#1943 := [unit-resolution #608 #1806 #1611]: up_33
201.1212 +#1944 := [unit-resolution #1113 #1943]: #243
201.1213 +#1925 := (or #325 up_34 up_42)
201.1214 +#1919 := [hypothesis]: up_56
201.1215 +#1920 := [unit-resolution #1373 #1919]: #324
201.1216 +#1921 := [unit-resolution #1516 #1920]: up_46
201.1217 +#1922 := [unit-resolution #1396 #1919]: #284
201.1218 +#1923 := [unit-resolution #685 #1922 #1605 #1798]: up_44
201.1219 +#1924 := [unit-resolution #1276 #1923 #1921]: false
201.1220 +#1926 := [lemma #1924]: #1925
201.1221 +#1945 := [unit-resolution #1926 #1944 #1942]: #325
201.1222 +#1946 := [unit-resolution #1524 #1945]: up_60
201.1223 +#1947 := [unit-resolution #1448 #1946]: #341
201.1224 +#1938 := (or #308 up_26 up_59)
201.1225 +#1927 := [hypothesis]: up_51
201.1226 +#1928 := [unit-resolution #1329 #1927]: #300
201.1227 +#1929 := [hypothesis]: #341
201.1228 +#1930 := [unit-resolution #1321 #1927]: #309
201.1229 +#1931 := [unit-resolution #819 #1930 #1929]: up_58
201.1230 +#1932 := [unit-resolution #1781 #1931 #1928]: up_39
201.1231 +#1933 := [unit-resolution #1183 #1932]: #254
201.1232 +#1934 := [unit-resolution #1418 #1931]: #335
201.1233 +#1935 := [unit-resolution #795 #1934]: up_48
201.1234 +#1936 := [unit-resolution #1297 #1935]: #255
201.1235 +#1937 := [unit-resolution #621 #1936 #1933 #1890]: false
201.1236 +#1939 := [lemma #1937]: #1938
201.1237 +#1948 := [unit-resolution #1939 #1947 #1890]: #308
201.1238 +#1949 := [unit-resolution #759 #1948 #1941 #1597]: up_53
201.1239 +#1950 := [unit-resolution #1381 #1949]: #324
201.1240 +#1951 := [unit-resolution #1516 #1950]: up_46
201.1241 +#1952 := [unit-resolution #1401 #1949]: #284
201.1242 +#1953 := [unit-resolution #685 #1952 #1944 #1942]: up_44
201.1243 +#1954 := [unit-resolution #1276 #1953 #1951]: false
201.1244 +#1956 := [lemma #1954]: #1955
201.1245 +#1980 := [unit-resolution #1956 #1611 #1890 #907 #1457 #1597 #1612]: #170
201.1246 +#1981 := [unit-resolution #430 #1980]: up_11
201.1247 +#1982 := [unit-resolution #886 #1981]: #160
201.1248 +#1983 := [unit-resolution #410 #1982 #1612]: up_10
201.1249 +#1984 := [unit-resolution #980 #1983]: #194
201.1250 +#1985 := [unit-resolution #1979 #1611 #907 #1984 #1457 #1612]: up_32
201.1251 +#1970 := (or #235 up_34 up_54 up_26)
201.1252 +#1957 := [hypothesis]: up_32
201.1253 +#1958 := [unit-resolution #1240 #1957]: #276
201.1254 +#1959 := [unit-resolution #1230 #1957]: #275
201.1255 +#1960 := [unit-resolution #1926 #1959 #1605]: #325
201.1256 +#1961 := [unit-resolution #1524 #1960]: up_60
201.1257 +#1962 := [unit-resolution #1448 #1961]: #341
201.1258 +#1963 := [unit-resolution #1939 #1962 #1890]: #308
201.1259 +#1964 := [unit-resolution #759 #1963 #1958 #1597]: up_53
201.1260 +#1965 := [unit-resolution #1381 #1964]: #324
201.1261 +#1966 := [unit-resolution #1516 #1965]: up_46
201.1262 +#1967 := [unit-resolution #1401 #1964]: #284
201.1263 +#1968 := [unit-resolution #685 #1967 #1605 #1959]: up_44
201.1264 +#1969 := [unit-resolution #1276 #1968 #1966]: false
201.1265 +#1971 := [lemma #1969]: #1970
201.1266 +#1986 := [unit-resolution #1971 #1985 #1597 #1890]: up_34
201.1267 +#1987 := [unit-resolution #1113 #1986]: #242
201.1268 +#1988 := [unit-resolution #608 #1987 #1611]: up_24
201.1269 +#1989 := [unit-resolution #970 #1983]: #193
201.1270 +#1990 := [unit-resolution #1136 #1986]: #202
201.1271 +#1991 := [unit-resolution #505 #1990 #1457 #1989]: up_22
201.1272 +#1992 := [unit-resolution #1016 #1991 #1988]: false
201.1273 +#1994 := [lemma #1992]: #1993
201.1274 +#1995 := [unit-resolution #1994 #1457 #1597 #1890 #907 #1612]: up_35
201.1275 +#1996 := [unit-resolution #1281 #1995]: #291
201.1276 +#1997 := [unit-resolution #1516 #1996]: up_55
201.1277 +#1998 := [unit-resolution #1373 #1997]: #325
201.1278 +#1999 := [unit-resolution #1524 #1998]: up_60
201.1279 +#2000 := [unit-resolution #1448 #1999]: #341
201.1280 +#2001 := [unit-resolution #1939 #2000 #1890]: #308
201.1281 +#2002 := [unit-resolution #1610 #2001 #1995 #1597]: up_34
201.1282 +#2003 := [unit-resolution #1131 #2002]: #234
201.1283 +#2004 := [unit-resolution #1381 #1997]: #316
201.1284 +#2005 := [unit-resolution #759 #2001 #2004 #1597]: up_43
201.1285 +#2006 := [unit-resolution #1240 #2005]: #235
201.1286 +#2007 := [unit-resolution #1136 #2002]: #202
201.1287 +#2008 := [unit-resolution #1683 #2007 #1612 #1457]: #194
201.1288 +#2009 := [unit-resolution #579 #2008 #2006 #907 #2003]: false
201.1289 +#2011 := [lemma #2009]: #2010
201.1290 +#2033 := [unit-resolution #2011 #2032 #1612 #1597 #2029]: up_12
201.1291 +#2034 := [unit-resolution #891 #2033]: #160
201.1292 +#2035 := [unit-resolution #410 #2034 #1612]: up_10
201.1293 +#2036 := [unit-resolution #980 #2035]: #194
201.1294 +#2037 := [unit-resolution #878 #2033]: #165
201.1295 +#2038 := [unit-resolution #430 #2037]: up_13
201.1296 +#2039 := [unit-resolution #1021 #2038]: #209
201.1297 +#2024 := (or #234 up_26 up_54 up_24)
201.1298 +#2012 := [hypothesis]: #209
201.1299 +#2013 := [hypothesis]: up_31
201.1300 +#2014 := [unit-resolution #1121 #2013]: #242
201.1301 +#2015 := [unit-resolution #608 #2014 #2012]: up_35
201.1302 +#2016 := [unit-resolution #1131 #2013]: #243
201.1303 +#2017 := [unit-resolution #1610 #2016 #2015 #1597]: up_51
201.1304 +#2018 := [unit-resolution #1939 #2017 #1890]: up_59
201.1305 +#2019 := [unit-resolution #1448 #2018]: #345
201.1306 +#2020 := [unit-resolution #1281 #2015]: #291
201.1307 +#2021 := [unit-resolution #1516 #2020]: up_55
201.1308 +#2022 := [unit-resolution #1373 #2021]: #325
201.1309 +#2023 := [unit-resolution #1524 #2022 #2019]: false
201.1310 +#2025 := [lemma #2023]: #2024
201.1311 +#2040 := [unit-resolution #2025 #2029 #1597 #2039]: #234
201.1312 +#2041 := [unit-resolution #579 #2040 #2032 #2036]: up_32
201.1313 +#2042 := [unit-resolution #1240 #2041]: #276
201.1314 +#2043 := [unit-resolution #1971 #2041 #1597 #2029]: up_34
201.1315 +#2044 := [unit-resolution #1113 #2043]: #242
201.1316 +#2045 := [unit-resolution #608 #2044 #2039]: up_35
201.1317 +#2046 := [unit-resolution #1281 #2045]: #291
201.1318 +#2047 := [unit-resolution #1516 #2046]: up_55
201.1319 +#2048 := [unit-resolution #1381 #2047]: #316
201.1320 +#2049 := [unit-resolution #759 #2048 #2042 #1597]: up_51
201.1321 +#2050 := [unit-resolution #1373 #2047]: #325
201.1322 +#2051 := [unit-resolution #1524 #2050]: up_60
201.1323 +#2052 := [unit-resolution #1448 #2051]: #341
201.1324 +#2053 := [unit-resolution #1939 #2052 #2049 #2029]: false
201.1325 +#2055 := [lemma #2053]: #2054
201.1326 +#2065 := [unit-resolution #2055 #1612 #1626]: up_54
201.1327 +#1447 := (or #317 #345)
201.1328 +#347 := (or #345 #317)
201.1329 +#1449 := (iff #347 #1447)
201.1330 +#1450 := [rewrite]: #1449
201.1331 +#1446 := [asserted]: #347
201.1332 +#1453 := [mp #1446 #1450]: #1447
201.1333 +#2066 := [unit-resolution #1453 #2065]: #345
201.1334 +#2067 := [unit-resolution #1524 #2066]: up_56
201.1335 +#2083 := (or #275 up_7 up_12 up_8)
201.1336 +#2063 := [hypothesis]: up_42
201.1337 +#2064 := [unit-resolution #1230 #2063]: #235
201.1338 +#2068 := [unit-resolution #1373 #2067]: #324
201.1339 +#2069 := [unit-resolution #1516 #2068]: up_46
201.1340 +#2070 := [unit-resolution #1281 #2069]: #250
201.1341 +#2071 := [unit-resolution #1672 #2064 #1626 #2070 #1612]: up_16
201.1342 +#2072 := [unit-resolution #913 #2071]: #172
201.1343 +#2073 := [unit-resolution #1508 #2072]: up_15
201.1344 +#2074 := [unit-resolution #1032 #2073]: #213
201.1345 +#2075 := [unit-resolution #905 #2071]: #178
201.1346 +#1452 := (or #317 #341)
201.1347 +#348 := (or #341 #317)
201.1348 +#1454 := (iff #348 #1452)
201.1349 +#1455 := [rewrite]: #1454
201.1350 +#1451 := [asserted]: #348
201.1351 +#1458 := [mp #1451 #1455]: #1452
201.1352 +#2076 := [unit-resolution #1458 #2065]: #341
201.1353 +#2077 := [unit-resolution #1225 #2063]: #267
201.1354 +#2061 := (or #226 up_59 up_40 up_17 up_25)
201.1355 +#2056 := [unit-resolution #653 #1910 #1782 #1911]: up_41
201.1356 +#2057 := [unit-resolution #1349 #2056]: #300
201.1357 +#1338 := (or #268 #309)
201.1358 +#314 := (or #309 #268)
201.1359 +#1340 := (iff #314 #1338)
201.1360 +#1341 := [rewrite]: #1340
201.1361 +#1337 := [asserted]: #314
201.1362 +#1344 := [mp #1337 #1341]: #1338
201.1363 +#2058 := [unit-resolution #1344 #2056]: #309
201.1364 +#2059 := [unit-resolution #819 #2058 #1929]: up_58
201.1365 +#2060 := [unit-resolution #1781 #2059 #2057 #1901]: false
201.1366 +#2062 := [lemma #2060]: #2061
201.1367 +#2078 := [unit-resolution #2062 #2077 #2076 #2075 #2074]: #226
201.1368 +#2079 := [unit-resolution #1625 #2078 #2070 #1457 #2064 #1612]: up_22
201.1369 +#2080 := [unit-resolution #1979 #2078 #2070 #1457 #2064 #1612]: up_21
201.1370 +#2081 := [unit-resolution #1683 #2080 #1612 #1457]: up_23
201.1371 +#2082 := [unit-resolution #983 #2081 #2079]: false
201.1372 +#2084 := [lemma #2082]: #2083
201.1373 +#2085 := [unit-resolution #2084 #1457 #1612 #1626]: #275
201.1374 +#2086 := [unit-resolution #1926 #2085 #2067]: up_34
201.1375 +#2087 := [unit-resolution #1136 #2086]: #202
201.1376 +#2088 := [unit-resolution #1113 #2086]: #242
201.1377 +#2089 := [unit-resolution #608 #2088 #2070]: up_24
201.1378 +#2090 := [unit-resolution #1016 #2089]: #201
201.1379 +#2091 := [unit-resolution #505 #2090 #1457 #2087]: up_20
201.1380 +#2092 := [unit-resolution #970 #2091]: #161
201.1381 +#2093 := [unit-resolution #1021 #2089]: #170
201.1382 +#2094 := [unit-resolution #430 #2093]: up_11
201.1383 +#2095 := [unit-resolution #886 #2094]: #160
201.1384 +#2096 := [unit-resolution #410 #2095 #2092 #1612]: false
201.1385 +#2098 := [lemma #2096]: #2097
201.1386 +#2102 := [unit-resolution #2098 #2100 #2101]: up_12
201.1387 +#2103 := [unit-resolution #891 #2102]: #160
201.1388 +#2104 := [unit-resolution #410 #2103 #2100]: up_10
201.1389 +#2105 := [unit-resolution #980 #2104]: #194
201.1390 +#2106 := [unit-resolution #2055 #2100 #2101]: up_54
201.1391 +#2107 := [unit-resolution #1453 #2106]: #345
201.1392 +#2108 := [unit-resolution #1524 #2107]: up_56
201.1393 +#2109 := [unit-resolution #1373 #2108]: #324
201.1394 +#2110 := [unit-resolution #1516 #2109]: up_46
201.1395 +#2111 := [unit-resolution #1281 #2110]: #250
201.1396 +#2112 := [unit-resolution #878 #2102]: #165
201.1397 +#2113 := [unit-resolution #430 #2112]: up_13
201.1398 +#2114 := [unit-resolution #1021 #2113]: #209
201.1399 +#2115 := [unit-resolution #608 #2114 #2111]: up_33
201.1400 +#2116 := [unit-resolution #1121 #2115]: #234
201.1401 +#2117 := [unit-resolution #1276 #2110]: #283
201.1402 +#2118 := [unit-resolution #1396 #2108]: #284
201.1403 +#2119 := [unit-resolution #1113 #2115]: #243
201.1404 +#2120 := [unit-resolution #685 #2119 #2118 #2117]: up_42
201.1405 +#2121 := [unit-resolution #1230 #2120]: #235
201.1406 +#2122 := [unit-resolution #579 #2121 #2116 #2105]: up_29
201.1407 +#2123 := [unit-resolution #1225 #2120]: #267
201.1408 +#2124 := [unit-resolution #1458 #2106]: #341
201.1409 +#2125 := [unit-resolution #1672 #2121 #2101 #2111 #2100]: up_16
201.1410 +#2126 := [unit-resolution #905 #2125]: #178
201.1411 +#2127 := [unit-resolution #2062 #2126 #2124 #2123 #2122]: up_25
201.1412 +#2128 := [unit-resolution #913 #2125]: #172
201.1413 +#2129 := [unit-resolution #1508 #2128]: up_15
201.1414 +#2130 := [unit-resolution #1032 #2129 #2127]: false
201.1415 +#2131 := [lemma #2130]: #150
201.1416 +#1494 := (or up_5 up_6)
201.1417 +decl up_1 :: bool
201.1418 +#4 := up_1
201.1419 +#379 := (or up_1 up_5 up_6)
201.1420 +#1497 := (iff #379 #1494)
201.1421 +#1491 := (or false up_5 up_6)
201.1422 +#1495 := (iff #1491 #1494)
201.1423 +#1496 := [rewrite]: #1495
201.1424 +#1492 := (iff #379 #1491)
201.1425 +#1467 := (iff up_1 false)
201.1426 +#5 := (not up_1)
201.1427 +#1470 := (iff #5 #1467)
201.1428 +#1463 := (iff #1467 #5)
201.1429 +#1468 := [rewrite]: #1463
201.1430 +#1471 := [symm #1468]: #1470
201.1431 +#368 := [asserted]: #5
201.1432 +#1472 := [mp #368 #1471]: #1467
201.1433 +#1493 := [monotonicity #1472]: #1492
201.1434 +#1498 := [trans #1493 #1496]: #1497
201.1435 +#14 := (or up_6 up_1)
201.1436 +#15 := (or up_5 #14)
201.1437 +#382 := (iff #15 #379)
201.1438 +#373 := (or up_1 up_6)
201.1439 +#376 := (or up_5 #373)
201.1440 +#380 := (iff #376 #379)
201.1441 +#381 := [rewrite]: #380
201.1442 +#377 := (iff #15 #376)
201.1443 +#374 := (iff #14 #373)
201.1444 +#375 := [rewrite]: #374
201.1445 +#378 := [monotonicity #375]: #377
201.1446 +#383 := [trans #378 #381]: #382
201.1447 +#372 := [asserted]: #15
201.1448 +#384 := [mp #372 #383]: #379
201.1449 +#1499 := [mp #384 #1498]: #1494
201.1450 +#2138 := [unit-resolution #1499 #2131]: up_6
201.1451 +#151 := (not up_6)
201.1452 +#927 := (or #151 #172)
201.1453 +#184 := (or #172 #151)
201.1454 +#929 := (iff #184 #927)
201.1455 +#930 := [rewrite]: #929
201.1456 +#926 := [asserted]: #184
201.1457 +#933 := [mp #926 #930]: #927
201.1458 +#2139 := [unit-resolution #933 #2138]: #172
201.1459 +#2140 := [unit-resolution #1508 #2139]: up_15
201.1460 +#2147 := [unit-resolution #1037 #2140]: #214
201.1461 +#2159 := [unit-resolution #2011 #2147]: #2158
201.1462 +#2160 := [unit-resolution #2159 #907 #1612 #1457]: up_54
201.1463 +#2161 := [unit-resolution #1453 #2160]: #345
201.1464 +#2162 := [unit-resolution #1524 #2161]: up_56
201.1465 +#2163 := [unit-resolution #1926 #2162 #2157 #1605]: false
201.1466 +#2165 := [lemma #2163]: #2164
201.1467 +#2166 := [unit-resolution #2165 #1605 #1612 #1611 #1457]: up_29
201.1468 +#2148 := (or #226 up_54)
201.1469 +#2141 := [unit-resolution #1032 #2140]: #213
201.1470 +#922 := (or #151 #178)
201.1471 +#183 := (or #178 #151)
201.1472 +#924 := (iff #183 #922)
201.1473 +#925 := [rewrite]: #924
201.1474 +#921 := [asserted]: #183
201.1475 +#928 := [mp #921 #925]: #922
201.1476 +#2142 := [unit-resolution #928 #2138]: #178
201.1477 +#2149 := [unit-resolution #1918 #2147 #2142 #2141]: #2148
201.1478 +#2167 := [unit-resolution #2149 #2166]: up_54
201.1479 +#2154 := (or #226 up_34 up_59)
201.1480 +#2143 := (or #226 up_59 up_40)
201.1481 +#2144 := [unit-resolution #2062 #2142 #2141]: #2143
201.1482 +#2145 := [unit-resolution #2144 #1893 #1929]: up_40
201.1483 +#2146 := [unit-resolution #1225 #2145]: #275
201.1484 +#2150 := [unit-resolution #2149 #1893]: up_54
201.1485 +#2151 := [unit-resolution #1453 #2150]: #345
201.1486 +#2152 := [unit-resolution #1524 #2151]: up_56
201.1487 +#2153 := [unit-resolution #1926 #2152 #2146 #1605]: false
201.1488 +#2155 := [lemma #2153]: #2154
201.1489 +#2168 := [unit-resolution #2155 #2166 #1605]: up_59
201.1490 +#2169 := [unit-resolution #1458 #2168 #2167]: false
201.1491 +#2171 := [lemma #2169]: #2170
201.1492 +#2172 := [unit-resolution #2171 #1612 #1611 #1457]: up_34
201.1493 +#2173 := [unit-resolution #1136 #2172]: #202
201.1494 +#2174 := [unit-resolution #1113 #2172]: #242
201.1495 +#2175 := [unit-resolution #608 #2174 #1611]: up_24
201.1496 +#2176 := [unit-resolution #1016 #2175]: #201
201.1497 +#2177 := [unit-resolution #505 #2176 #1457 #2173]: up_20
201.1498 +#2178 := [unit-resolution #970 #2177]: #161
201.1499 +#2179 := [unit-resolution #1021 #2175]: #170
201.1500 +#2180 := [unit-resolution #430 #2179]: up_11
201.1501 +#2181 := [unit-resolution #886 #2180]: #160
201.1502 +#2182 := [unit-resolution #410 #2181 #2178 #1612]: false
201.1503 +#2184 := [lemma #2182]: #2183
201.1504 +#2235 := [unit-resolution #2184 #1457 #1611]: up_7
201.1505 +#157 := (or #155 #156)
201.1506 +#856 := [asserted]: #157
201.1507 +#2236 := [unit-resolution #856 #2235]: #156
201.1508 +#2299 := (or up_34 up_35 up_12)
201.1509 +#2283 := (or #186 up_34)
201.1510 +#2185 := [hypothesis]: up_19
201.1511 +#2191 := [unit-resolution #1084 #2185]: #227
201.1512 +#2186 := [unit-resolution #1089 #2185]: #218
201.1513 +#2187 := (or up_27 up_28)
201.1514 +#2188 := [unit-resolution #547 #2142 #2141]: #2187
201.1515 +#2189 := [unit-resolution #2188 #2186]: up_28
201.1516 +#2192 := [unit-resolution #1178 #2189]: #259
201.1517 +#2265 := [unit-resolution #1193 #2189]: #254
201.1518 +#2266 := (or up_36 up_37)
201.1519 +#2267 := [unit-resolution #621 #2147]: #2266
201.1520 +#2268 := [unit-resolution #2267 #2265]: up_37
201.1521 +#2269 := [unit-resolution #1292 #2268]: #295
201.1522 +#2190 := [unit-resolution #1188 #2189]: #260
201.1523 +#2270 := [unit-resolution #1297 #2268]: #296
201.1524 +#2271 := [unit-resolution #795 #2270]: up_57
201.1525 +#2272 := [unit-resolution #1428 #2271]: #301
201.1526 +#2273 := [unit-resolution #727 #2272 #2190 #2269]: up_49
201.1527 +#2274 := [unit-resolution #1349 #2273]: #268
201.1528 +#2275 := [unit-resolution #653 #2274 #2192 #2191]: up_40
201.1529 +#2276 := [unit-resolution #1225 #2275]: #275
201.1530 +#2277 := [unit-resolution #1418 #2271]: #337
201.1531 +#2278 := [unit-resolution #1339 #2273]: #309
201.1532 +#2279 := [unit-resolution #819 #2278 #2277]: up_59
201.1533 +#2280 := [unit-resolution #1448 #2279]: #345
201.1534 +#2281 := [unit-resolution #1524 #2280]: up_56
201.1535 +#2282 := [unit-resolution #1926 #2281 #2276 #1605]: false
201.1536 +#2284 := [lemma #2282]: #2283
201.1537 +#2292 := [unit-resolution #2284 #1605]: #186
201.1538 +#2223 := (or up_8 up_18 up_19)
201.1539 +#912 := (or #151 #177)
201.1540 +#181 := (or #177 #151)
201.1541 +#914 := (iff #181 #912)
201.1542 +#915 := [rewrite]: #914
201.1543 +#911 := [asserted]: #181
201.1544 +#918 := [mp #911 #915]: #912
201.1545 +#2222 := [unit-resolution #918 #2138]: #177
201.1546 +#2224 := [unit-resolution #473 #2222]: #2223
201.1547 +#2293 := [unit-resolution #2224 #2292 #2236]: up_18
201.1548 +#2257 := (or #235 up_34)
201.1549 +#2252 := (or #235 up_34 up_54)
201.1550 +#2253 := [unit-resolution #1971 #2147]: #2252
201.1551 +#2254 := [unit-resolution #2253 #1957 #1605]: up_54
201.1552 +#2255 := [unit-resolution #1453 #2254]: #345
201.1553 +#2256 := [unit-resolution #1524 #2255 #1960]: false
201.1554 +#2258 := [lemma #2256]: #2257
201.1555 +#2294 := [unit-resolution #2258 #1605]: #235
201.1556 +#2290 := (or up_29 up_35 up_32 up_12 #185)
201.1557 +#2200 := [hypothesis]: up_18
201.1558 +#2206 := (or #185 up_29 up_32 up_12 up_22)
201.1559 +#2201 := [unit-resolution #965 #2200]: #193
201.1560 +#2202 := [unit-resolution #505 #2201 #1457 #1456]: up_23
201.1561 +#2203 := [unit-resolution #975 #2200]: #194
201.1562 +#2204 := [unit-resolution #579 #2203 #907 #895]: up_31
201.1563 +#2205 := [unit-resolution #1141 #2204 #2202]: false
201.1564 +#2207 := [lemma #2205]: #2206
201.1565 +#2285 := [unit-resolution #2207 #907 #895 #1457 #2200]: up_22
201.1566 +#2286 := [unit-resolution #1016 #2285]: #209
201.1567 +#2287 := [unit-resolution #579 #907 #895 #2203]: up_31
201.1568 +#2288 := [unit-resolution #1121 #2287]: #242
201.1569 +#2289 := [unit-resolution #608 #2288 #2286 #1611]: false
201.1570 +#2291 := [lemma #2289]: #2290
201.1571 +#2295 := [unit-resolution #2291 #2294 #1611 #1457 #2293]: up_29
201.1572 +#2296 := [unit-resolution #2149 #2295]: up_54
201.1573 +#2297 := [unit-resolution #2155 #2295 #1605]: up_59
201.1574 +#2298 := [unit-resolution #1458 #2297 #2296]: false
201.1575 +#2300 := [lemma #2298]: #2299
201.1576 +#2301 := [unit-resolution #2300 #1457 #1611]: up_34
201.1577 +#2302 := [unit-resolution #1136 #2301]: #202
201.1578 +#2303 := [unit-resolution #1113 #2301]: #242
201.1579 +#2304 := [unit-resolution #608 #2303 #1611]: up_24
201.1580 +#2305 := [unit-resolution #1016 #2304]: #201
201.1581 +#2306 := [unit-resolution #505 #2305 #1457 #2302]: up_20
201.1582 +#2307 := [unit-resolution #965 #2306]: #185
201.1583 +#2308 := [unit-resolution #2224 #2307 #2236]: up_19
201.1584 +#2309 := [unit-resolution #957 #2306]: #194
201.1585 +#2310 := [unit-resolution #1131 #2301]: #234
201.1586 +#2311 := [unit-resolution #1074 #2308]: #226
201.1587 +#2312 := [unit-resolution #579 #2311 #2310 #2309]: up_32
201.1588 +#2313 := [unit-resolution #1245 #2312]: #267
201.1589 +#2198 := (or #186 up_59 up_40)
201.1590 +#2193 := [unit-resolution #653 #2192 #1782 #2191]: up_41
201.1591 +#2194 := [unit-resolution #1349 #2193]: #300
201.1592 +#2195 := [unit-resolution #1344 #2193]: #309
201.1593 +#2196 := [unit-resolution #819 #2195 #1929]: up_58
201.1594 +#2197 := [unit-resolution #1781 #2196 #2194 #2190]: false
201.1595 +#2199 := [lemma #2197]: #2198
201.1596 +#2314 := [unit-resolution #2199 #2313 #2308]: up_59
201.1597 +#2315 := [unit-resolution #1448 #2314]: #345
201.1598 +#2316 := [unit-resolution #1524 #2315]: up_56
201.1599 +#2317 := [unit-resolution #1084 #2308]: #227
201.1600 +#2318 := [unit-resolution #1089 #2308]: #218
201.1601 +#2319 := [unit-resolution #2188 #2318]: up_28
201.1602 +#2320 := [unit-resolution #1178 #2319]: #259
201.1603 +#2321 := [unit-resolution #653 #2313 #2320 #2317]: up_41
201.1604 +#2322 := [unit-resolution #1334 #2321]: #308
201.1605 +#2323 := [unit-resolution #1240 #2312]: #276
201.1606 +#2324 := [unit-resolution #1458 #2314]: #317
201.1607 +#2325 := [unit-resolution #759 #2324 #2323 #2322]: up_53
201.1608 +#2326 := [unit-resolution #1391 #2325 #2316]: false
201.1609 +#2328 := [lemma #2326]: #2327
201.1610 +#2337 := [unit-resolution #2328 #1611]: up_12
201.1611 +#2338 := [unit-resolution #878 #2337]: #165
201.1612 +#2339 := [unit-resolution #430 #2338]: up_13
201.1613 +#2340 := [unit-resolution #1021 #2339]: #209
201.1614 +#2341 := [unit-resolution #608 #2340 #1611]: up_33
201.1615 +#2342 := [unit-resolution #1113 #2341]: #243
201.1616 +#2343 := [unit-resolution #2258 #2342]: #235
201.1617 +#2344 := [unit-resolution #1121 #2341]: #234
201.1618 +#2345 := [unit-resolution #2284 #2342]: #186
201.1619 +#2346 := [unit-resolution #891 #2337]: #160
201.1620 +#2335 := (or #194 up_9 up_19)
201.1621 +#2329 := [hypothesis]: #186
201.1622 +#2330 := [unit-resolution #975 #1674]: #185
201.1623 +#2331 := [unit-resolution #2224 #2330 #2329]: up_8
201.1624 +#2332 := [hypothesis]: #160
201.1625 +#2333 := [unit-resolution #410 #1678 #2332]: up_7
201.1626 +#2334 := [unit-resolution #856 #2333 #2331]: false
201.1627 +#2336 := [lemma #2334]: #2335
201.1628 +#2347 := [unit-resolution #2336 #2346 #2345]: #194
201.1629 +#2348 := [unit-resolution #579 #2347 #2344 #2343]: up_29
201.1630 +#2349 := [unit-resolution #2149 #2348]: up_54
201.1631 +#2350 := [unit-resolution #2155 #2348 #2342]: up_59
201.1632 +#2351 := [unit-resolution #1458 #2350 #2349]: false
201.1633 +#2352 := [lemma #2351]: up_35
201.1634 +#2353 := [unit-resolution #1281 #2352]: #291
201.1635 +#2354 := [unit-resolution #1516 #2353]: up_55
201.1636 +#2355 := [unit-resolution #1373 #2354]: #325
201.1637 +#2356 := [unit-resolution #1524 #2355]: up_60
201.1638 +#2357 := [unit-resolution #1453 #2356]: #317
201.1639 +#2358 := [unit-resolution #2149 #2357]: #226
201.1640 +#2359 := [unit-resolution #1448 #2356]: #341
201.1641 +#2217 := (or #308 up_59)
201.1642 +#2218 := [unit-resolution #1939 #2147]: #2217
201.1643 +#2360 := [unit-resolution #2218 #2359]: #308
201.1644 +#2361 := [unit-resolution #1381 #2354]: #316
201.1645 +#2362 := [unit-resolution #759 #2357 #2361 #2360]: up_43
201.1646 +#2363 := [unit-resolution #1235 #2362]: #267
201.1647 +#2364 := [unit-resolution #2199 #2363 #2359]: #186
201.1648 +#1145 := (or #209 #250)
201.1649 +#252 := (or #250 #209)
201.1650 +#1147 := (iff #252 #1145)
201.1651 +#1148 := [rewrite]: #1147
201.1652 +#1144 := [asserted]: #252
201.1653 +#1151 := [mp #1144 #1148]: #1145
201.1654 +#2365 := [unit-resolution #1151 #2352]: #209
201.1655 +#2230 := (or #234 up_54 up_24)
201.1656 +#2231 := [unit-resolution #2025 #2147]: #2230
201.1657 +#2366 := [unit-resolution #2231 #2357 #2365]: #234
201.1658 +#2367 := [unit-resolution #1240 #2362]: #235
201.1659 +#2368 := [unit-resolution #579 #2367 #2366 #2358]: up_21
201.1660 +#2369 := [unit-resolution #2336 #2368 #2364]: up_9
201.1661 +#870 := (or #155 #160)
201.1662 +#163 := (or #160 #155)
201.1663 +#871 := (iff #163 #870)
201.1664 +#872 := [rewrite]: #871
201.1665 +#868 := [asserted]: #163
201.1666 +#875 := [mp #868 #872]: #870
201.1667 +#2370 := [unit-resolution #875 #2369]: #155
201.1668 +#2371 := [unit-resolution #891 #2369]: #166
201.1669 +[unit-resolution #2159 #2371 #2370 #2358 #2357]: false
201.1670 +unsat
202.1 --- a/src/HOL/SMT/SMT.thy Tue Oct 20 08:10:47 2009 +0200
202.2 +++ b/src/HOL/SMT/SMT.thy Tue Oct 20 10:11:30 2009 +0200
202.3 @@ -2,50 +2,20 @@
202.4 Author: Sascha Boehme, TU Muenchen
202.5 *)
202.6
202.7 -header {* SMT method using external SMT solvers (CVC3, Yices, Z3) *}
202.8 +header {* Bindings to several SMT solvers *}
202.9
202.10 theory SMT
202.11 -imports SMT_Definitions
202.12 +imports SMT_Base Z3
202.13 uses
202.14 - "Tools/smt_normalize.ML"
202.15 - "Tools/smt_monomorph.ML"
202.16 - "Tools/smt_translate.ML"
202.17 - "Tools/smt_solver.ML"
202.18 - "Tools/smtlib_interface.ML"
202.19 "Tools/cvc3_solver.ML"
202.20 "Tools/yices_solver.ML"
202.21 - "Tools/z3_model.ML"
202.22 - "Tools/z3_interface.ML"
202.23 - "Tools/z3_solver.ML"
202.24 begin
202.25
202.26 -setup {*
202.27 - SMT_Normalize.setup #>
202.28 - SMT_Solver.setup #>
202.29 - CVC3_Solver.setup #>
202.30 - Yices_Solver.setup #>
202.31 - Z3_Solver.setup
202.32 -*}
202.33 +setup {* CVC3_Solver.setup #> Yices_Solver.setup *}
202.34
202.35 -ML {*
202.36 -OuterSyntax.improper_command "smt_status"
202.37 - "Show the available SMT solvers and the currently selected solver."
202.38 - OuterKeyword.diag
202.39 - (Scan.succeed (Toplevel.no_timing o Toplevel.keep (fn state =>
202.40 - SMT_Solver.print_setup (Context.Proof (Toplevel.context_of state)))))
202.41 -*}
202.42 -
202.43 -method_setup smt = {*
202.44 - let fun solver thms ctxt = SMT_Solver.smt_tac ctxt thms
202.45 - in
202.46 - Scan.optional (Scan.lift (Args.add -- Args.colon) |-- Attrib.thms) [] >>
202.47 - (Method.SIMPLE_METHOD' oo solver)
202.48 - end
202.49 -*} "Applies an SMT solver to the current goal."
202.50 -
202.51 -declare [[ smt_solver = z3, smt_timeout = 20, smt_trace = false ]]
202.52 +declare [[ smt_solver = z3, smt_timeout = 20 ]]
202.53 declare [[ smt_unfold_defs = true ]]
202.54 -declare [[ z3_proofs = false ]]
202.55 +declare [[ smt_trace = false, smt_keep = "", smt_cert = "" ]]
202.56 +declare [[ z3_proofs = false, z3_options = "" ]]
202.57
202.58 end
202.59 -
203.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
203.2 +++ b/src/HOL/SMT/SMT_Base.thy Tue Oct 20 10:11:30 2009 +0200
203.3 @@ -0,0 +1,131 @@
203.4 +(* Title: HOL/SMT/SMT_Base.thy
203.5 + Author: Sascha Boehme, TU Muenchen
203.6 +*)
203.7 +
203.8 +header {* SMT-specific definitions and basic tools *}
203.9 +
203.10 +theory SMT_Base
203.11 +imports Real Word "~~/src/HOL/Decision_Procs/Dense_Linear_Order"
203.12 +uses
203.13 + ("Tools/smt_normalize.ML")
203.14 + ("Tools/smt_monomorph.ML")
203.15 + ("Tools/smt_translate.ML")
203.16 + ("Tools/smt_solver.ML")
203.17 + ("Tools/smtlib_interface.ML")
203.18 +begin
203.19 +
203.20 +section {* Triggers for quantifier instantiation *}
203.21 +
203.22 +text {*
203.23 +Some SMT solvers support triggers for quantifier instantiation. Each trigger
203.24 +consists of one ore more patterns. A pattern may either be a list of positive
203.25 +subterms (the first being tagged by "pat" and the consecutive subterms tagged
203.26 +by "andpat"), or a list of negative subterms (the first being tagged by "nopat"
203.27 +and the consecutive subterms tagged by "andpat").
203.28 +*}
203.29 +
203.30 +datatype pattern = Pattern
203.31 +
203.32 +definition pat :: "'a \<Rightarrow> pattern"
203.33 +where "pat _ = Pattern"
203.34 +
203.35 +definition nopat :: "bool \<Rightarrow> pattern"
203.36 +where "nopat _ = Pattern"
203.37 +
203.38 +definition andpat :: "pattern \<Rightarrow> 'a \<Rightarrow> pattern" (infixl "andpat" 60)
203.39 +where "_ andpat _ = Pattern"
203.40 +
203.41 +definition trigger :: "pattern list \<Rightarrow> bool \<Rightarrow> bool"
203.42 +where "trigger _ P = P"
203.43 +
203.44 +
203.45 +section {* Arithmetic *}
203.46 +
203.47 +text {*
203.48 +The sign of @{term "op mod :: int \<Rightarrow> int \<Rightarrow> int"} follows the sign of the
203.49 +divisor. In contrast to that, the sign of the following operation is that of
203.50 +the dividend.
203.51 +*}
203.52 +
203.53 +definition rem :: "int \<Rightarrow> int \<Rightarrow> int" (infixl "rem" 70)
203.54 +where "a rem b =
203.55 + (if (a \<ge> 0 \<and> b < 0) \<or> (a < 0 \<and> b \<ge> 0) then - (a mod b) else a mod b)"
203.56 +
203.57 +text {* A decision procedure for linear real arithmetic: *}
203.58 +
203.59 +setup {*
203.60 + Arith_Data.add_tactic "Ferrante-Rackoff" (K FerranteRackoff.dlo_tac)
203.61 +*}
203.62 +
203.63 +
203.64 +section {* Bitvectors *}
203.65 +
203.66 +text {*
203.67 +The following definitions provide additional functions not found in HOL-Word.
203.68 +*}
203.69 +
203.70 +definition sdiv :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "sdiv" 70)
203.71 +where "w1 sdiv w2 = word_of_int (sint w1 div sint w2)"
203.72 +
203.73 +definition smod :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "smod" 70)
203.74 + (* sign follows divisor *)
203.75 +where "w1 smod w2 = word_of_int (sint w1 mod sint w2)"
203.76 +
203.77 +definition srem :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "srem" 70)
203.78 + (* sign follows dividend *)
203.79 +where "w1 srem w2 = word_of_int (sint w1 rem sint w2)"
203.80 +
203.81 +definition bv_shl :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
203.82 +where "bv_shl w1 w2 = (w1 << unat w2)"
203.83 +
203.84 +definition bv_lshr :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
203.85 +where "bv_lshr w1 w2 = (w1 >> unat w2)"
203.86 +
203.87 +definition bv_ashr :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word"
203.88 +where "bv_ashr w1 w2 = (w1 >>> unat w2)"
203.89 +
203.90 +
203.91 +section {* Higher-Order Encoding *}
203.92 +
203.93 +definition "apply" where "apply f x = f x"
203.94 +
203.95 +lemmas array_rules = apply_def fun_upd_same fun_upd_other fun_upd_upd ext
203.96 +
203.97 +
203.98 +section {* First-order logic *}
203.99 +
203.100 +text {*
203.101 +Some SMT solver formats require a strict separation between formulas and terms.
203.102 +The following marker symbols are used internally to separate those categories:
203.103 +*}
203.104 +
203.105 +definition formula :: "bool \<Rightarrow> bool" where "formula x = x"
203.106 +definition "term" where "term x = x"
203.107 +
203.108 +text {*
203.109 +Predicate symbols also occurring as function symbols are turned into function
203.110 +symbols by translating atomic formulas into terms:
203.111 +*}
203.112 +
203.113 +abbreviation holds :: "bool \<Rightarrow> bool" where "holds \<equiv> (\<lambda>P. term P = term True)"
203.114 +
203.115 +text {*
203.116 +The following constant represents equivalence, to be treated differently than
203.117 +the (polymorphic) equality predicate:
203.118 +*}
203.119 +
203.120 +definition iff :: "bool \<Rightarrow> bool \<Rightarrow> bool" (infix "iff" 50) where
203.121 + "(x iff y) = (x = y)"
203.122 +
203.123 +
203.124 +section {* Setup *}
203.125 +
203.126 +use "Tools/smt_normalize.ML"
203.127 +use "Tools/smt_monomorph.ML"
203.128 +use "Tools/smt_translate.ML"
203.129 +use "Tools/smt_solver.ML"
203.130 +use "Tools/smtlib_interface.ML"
203.131 +
203.132 +setup {* SMT_Normalize.setup #> SMT_Solver.setup *}
203.133 +
203.134 +end
204.1 --- a/src/HOL/SMT/SMT_Definitions.thy Tue Oct 20 08:10:47 2009 +0200
204.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
204.3 @@ -1,113 +0,0 @@
204.4 -(* Title: HOL/SMT/SMT_Definitions.thy
204.5 - Author: Sascha Boehme, TU Muenchen
204.6 -*)
204.7 -
204.8 -header {* SMT-specific definitions *}
204.9 -
204.10 -theory SMT_Definitions
204.11 -imports Real Word "~~/src/HOL/Decision_Procs/Dense_Linear_Order"
204.12 -begin
204.13 -
204.14 -section {* Triggers for quantifier instantiation *}
204.15 -
204.16 -text {*
204.17 -Some SMT solvers support triggers for quantifier instantiation. Each trigger
204.18 -consists of one ore more patterns. A pattern may either be a list of positive
204.19 -subterms (the first being tagged by "pat" and the consecutive subterms tagged
204.20 -by "andpat"), or a list of negative subterms (the first being tagged by "nopat"
204.21 -and the consecutive subterms tagged by "andpat").
204.22 -*}
204.23 -
204.24 -datatype pattern = Pattern
204.25 -
204.26 -definition pat :: "'a \<Rightarrow> pattern"
204.27 -where "pat _ = Pattern"
204.28 -
204.29 -definition nopat :: "bool \<Rightarrow> pattern"
204.30 -where "nopat _ = Pattern"
204.31 -
204.32 -definition andpat :: "pattern \<Rightarrow> 'a \<Rightarrow> pattern" (infixl "andpat" 60)
204.33 -where "_ andpat _ = Pattern"
204.34 -
204.35 -definition trigger :: "pattern list \<Rightarrow> bool \<Rightarrow> bool"
204.36 -where "trigger _ P = P"
204.37 -
204.38 -
204.39 -section {* Arithmetic *}
204.40 -
204.41 -text {*
204.42 -The sign of @{term "op mod :: int \<Rightarrow> int \<Rightarrow> int"} follows the sign of the
204.43 -divisor. In contrast to that, the sign of the following operation is that of
204.44 -the dividend.
204.45 -*}
204.46 -
204.47 -definition rem :: "int \<Rightarrow> int \<Rightarrow> int" (infixl "rem" 70)
204.48 -where "a rem b =
204.49 - (if (a \<ge> 0 \<and> b < 0) \<or> (a < 0 \<and> b \<ge> 0) then - (a mod b) else a mod b)"
204.50 -
204.51 -text {* A decision procedure for linear real arithmetic: *}
204.52 -
204.53 -setup {*
204.54 - Arith_Data.add_tactic "Ferrante-Rackoff" (K FerranteRackoff.dlo_tac)
204.55 -*}
204.56 -
204.57 -
204.58 -section {* Bitvectors *}
204.59 -
204.60 -text {*
204.61 -The following definitions provide additional functions not found in HOL-Word.
204.62 -*}
204.63 -
204.64 -definition sdiv :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "sdiv" 70)
204.65 -where "w1 sdiv w2 = word_of_int (sint w1 div sint w2)"
204.66 -
204.67 -definition smod :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "smod" 70)
204.68 - (* sign follows divisor *)
204.69 -where "w1 smod w2 = word_of_int (sint w1 mod sint w2)"
204.70 -
204.71 -definition srem :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "srem" 70)
204.72 - (* sign follows dividend *)
204.73 -where "w1 srem w2 = word_of_int (sint w1 rem sint w2)"
204.74 -
204.75 -definition bv_shl :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
204.76 -where "bv_shl w1 w2 = (w1 << unat w2)"
204.77 -
204.78 -definition bv_lshr :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
204.79 -where "bv_lshr w1 w2 = (w1 >> unat w2)"
204.80 -
204.81 -definition bv_ashr :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word"
204.82 -where "bv_ashr w1 w2 = (w1 >>> unat w2)"
204.83 -
204.84 -
204.85 -section {* Higher-order encoding *}
204.86 -
204.87 -definition "apply" where "apply f x = f x"
204.88 -
204.89 -
204.90 -section {* First-order logic *}
204.91 -
204.92 -text {*
204.93 -Some SMT solver formats require a strict separation between formulas and terms.
204.94 -The following marker symbols are used internally to separate those categories:
204.95 -*}
204.96 -
204.97 -definition formula :: "bool \<Rightarrow> bool" where "formula x = x"
204.98 -definition "term" where "term x = x"
204.99 -
204.100 -text {*
204.101 -Predicate symbols also occurring as function symbols are turned into function
204.102 -symbols by translating atomic formulas into terms:
204.103 -*}
204.104 -
204.105 -abbreviation holds :: "bool \<Rightarrow> bool" where "holds \<equiv> (\<lambda>P. term P = term True)"
204.106 -
204.107 -text {*
204.108 -The following constant represents equivalence, to be treated differently than
204.109 -the (polymorphic) equality predicate:
204.110 -*}
204.111 -
204.112 -definition iff :: "bool \<Rightarrow> bool \<Rightarrow> bool" (infix "iff" 50) where
204.113 - "(x iff y) = (x = y)"
204.114 -
204.115 -end
204.116 -
205.1 --- a/src/HOL/SMT/Tools/cvc3_solver.ML Tue Oct 20 08:10:47 2009 +0200
205.2 +++ b/src/HOL/SMT/Tools/cvc3_solver.ML Tue Oct 20 10:11:30 2009 +0200
205.3 @@ -27,10 +27,8 @@
205.4
205.5 fun raise_cex real ctxt recon ls =
205.6 let
205.7 - val start = String.isPrefix "%Satisfiable Variable Assignment: %"
205.8 - val index = find_index start ls
205.9 - val ls = if index > 0 then Library.drop (index + 1, ls) else []
205.10 - val p = Pretty.big_list (cex_kind real ^ " found:") (map Pretty.str ls)
205.11 + val ls' = filter_out (String.isPrefix "%") ls
205.12 + val p = Pretty.big_list (cex_kind real ^ " found:") (map Pretty.str ls')
205.13 in error (Pretty.string_of p) end
205.14
205.15 fun core_oracle (SMT_Solver.ProofData {context, output, recon, ...}) =
205.16 @@ -47,9 +45,9 @@
205.17
205.18 fun smtlib_solver oracle _ =
205.19 SMT_Solver.SolverConfig {
205.20 - name = {env_var=env_var, remote_name=solver_name},
205.21 + command = {env_var=env_var, remote_name=solver_name},
205.22 + arguments = options,
205.23 interface = SMTLIB_Interface.interface,
205.24 - arguments = options,
205.25 reconstruct = oracle }
205.26
205.27 val setup =
206.1 --- a/src/HOL/SMT/Tools/smt_normalize.ML Tue Oct 20 08:10:47 2009 +0200
206.2 +++ b/src/HOL/SMT/Tools/smt_normalize.ML Tue Oct 20 10:11:30 2009 +0200
206.3 @@ -273,59 +273,78 @@
206.4 fun inst_meta cT = Thm.instantiate_cterm ([(meta_eqT, cT)], []) meta_eq
206.5 fun mk_meta_eq ct cu = Thm.mk_binop (inst_meta (Thm.ctyp_of_term ct)) ct cu
206.6
206.7 - fun lambda_conv conv =
206.8 - let
206.9 - fun sub_conv cvs ctxt ct =
206.10 - (case Thm.term_of ct of
206.11 - Const (@{const_name All}, _) $ Abs _ => quant_conv cvs ctxt
206.12 - | Const (@{const_name Ex}, _) $ Abs _ => quant_conv cvs ctxt
206.13 - | Const _ $ Abs _ => Conv.arg_conv (at_lambda_conv cvs ctxt)
206.14 - | Const (@{const_name Let}, _) $ _ $ Abs _ => Conv.combination_conv
206.15 - (Conv.arg_conv (sub_conv cvs ctxt)) (abs_conv cvs ctxt)
206.16 - | Abs _ => at_lambda_conv cvs ctxt
206.17 - | _ $ _ => Conv.comb_conv (sub_conv cvs ctxt)
206.18 - | _ => Conv.all_conv) ct
206.19 - and abs_conv cvs = Conv.abs_conv (fn (cv, cx) => sub_conv (cv::cvs) cx)
206.20 - and quant_conv cvs ctxt = Conv.arg_conv (abs_conv cvs ctxt)
206.21 - and at_lambda_conv cvs ctxt = abs_conv cvs ctxt then_conv conv cvs ctxt
206.22 - in sub_conv [] end
206.23 + val fresh_name = yield_singleton Name.variants
206.24
206.25 fun used_vars cvs ct =
206.26 let
206.27 val lookup = AList.lookup (op aconv) (map (` Thm.term_of) cvs)
206.28 val add = (fn (SOME ct) => insert (op aconvc) ct | _ => I)
206.29 in Term.fold_aterms (add o lookup) (Thm.term_of ct) [] end
206.30 + fun make_def cvs eq = Thm.symmetric (fold norm_meta_def cvs eq)
206.31 + fun add_def ct thm = Termtab.update (Thm.term_of ct, (serial (), thm))
206.32
206.33 - val rev_int_fst_ord = rev_order o int_ord o pairself fst
206.34 - fun ordered_values tab =
206.35 - Termtab.fold (fn (_, x) => OrdList.insert rev_int_fst_ord x) tab []
206.36 - |> map snd
206.37 + fun replace ctxt cvs ct (cx as (nctxt, defs)) =
206.38 + let
206.39 + val cvs' = used_vars cvs ct
206.40 + val ct' = fold Thm.cabs cvs' ct
206.41 + val mk_repl = fold (fn ct => fn cu => Thm.capply cu ct) cvs'
206.42 + in
206.43 + (case Termtab.lookup defs (Thm.term_of ct') of
206.44 + SOME (_, eq) => (make_def cvs' eq, cx)
206.45 + | NONE =>
206.46 + let
206.47 + val {t, T, ...} = Thm.rep_cterm ct'
206.48 + val (n, nctxt') = fresh_name "" nctxt
206.49 + val eq = Thm.assume (mk_meta_eq (cert ctxt (Free (n, T))) ct')
206.50 + in (make_def cvs' eq, (nctxt', add_def ct' eq defs)) end)
206.51 + end
206.52 +
206.53 + fun none ct cx = (Thm.reflexive ct, cx)
206.54 + fun in_comb f g ct cx =
206.55 + let val (cu1, cu2) = Thm.dest_comb ct
206.56 + in cx |> f cu1 ||>> g cu2 |>> uncurry Thm.combination end
206.57 + fun in_arg f = in_comb none f
206.58 + fun in_abs f cvs ct (nctxt, defs) =
206.59 + let
206.60 + val (n, nctxt') = fresh_name Name.uu nctxt
206.61 + val (cv, cu) = Thm.dest_abs (SOME n) ct
206.62 + in f (cv :: cvs) cu (nctxt', defs) |>> Thm.abstract_rule n cv end
206.63 +
206.64 + fun replace_lambdas ctxt =
206.65 + let
206.66 + fun repl cvs ct =
206.67 + (case Thm.term_of ct of
206.68 + Const (@{const_name All}, _) $ Abs _ => in_arg (in_abs repl cvs)
206.69 + | Const (@{const_name Ex}, _) $ Abs _ => in_arg (in_abs repl cvs)
206.70 + | Const _ $ Abs _ => in_arg (at_lambda cvs)
206.71 + | Const (@{const_name Let}, _) $ _ $ Abs _ =>
206.72 + in_comb (in_arg (repl cvs)) (in_abs repl cvs)
206.73 + | Abs _ => at_lambda cvs
206.74 + | _ $ _ => in_comb (repl cvs) (repl cvs)
206.75 + | _ => none) ct
206.76 + and at_lambda cvs ct cx =
206.77 + let
206.78 + val (thm1, cx') = in_abs repl cvs ct cx
206.79 + val (thm2, cx'') = replace ctxt cvs (Thm.rhs_of thm1) cx'
206.80 + in (Thm.transitive thm1 thm2, cx'') end
206.81 + in repl [] end
206.82 in
206.83 fun lift_lambdas ctxt thms =
206.84 let
206.85 val declare_frees = fold (Thm.fold_terms Term.declare_term_frees)
206.86 - val names = Unsynchronized.ref (declare_frees thms (Name.make_context []))
206.87 - val fresh_name = Unsynchronized.change_result names o yield_singleton Name.variants
206.88 + fun rewrite f thm cx =
206.89 + let val (thm', cx') = f (Thm.cprop_of thm) cx
206.90 + in (Thm.equal_elim thm' thm, cx') end
206.91
206.92 - val defs = Unsynchronized.ref (Termtab.empty : (int * thm) Termtab.table)
206.93 - fun add_def t thm = Unsynchronized.change defs (Termtab.update (t, (serial (), thm)))
206.94 - fun make_def cvs eq = Thm.symmetric (fold norm_meta_def cvs eq)
206.95 - fun def_conv cvs ctxt ct =
206.96 - let
206.97 - val cvs' = used_vars cvs ct
206.98 - val ct' = fold Thm.cabs cvs' ct
206.99 - in
206.100 - (case Termtab.lookup (!defs) (Thm.term_of ct') of
206.101 - SOME (_, eq) => make_def cvs' eq
206.102 - | NONE =>
206.103 - let
206.104 - val {t, T, ...} = Thm.rep_cterm ct'
206.105 - val eq = mk_meta_eq (cert ctxt (Free (fresh_name "", T))) ct'
206.106 - val thm = Thm.assume eq
206.107 - in (add_def t thm; make_def cvs' thm) end)
206.108 - end
206.109 - val thms' = map (Conv.fconv_rule (lambda_conv def_conv ctxt)) thms
206.110 - val eqs = ordered_values (!defs)
206.111 + val rev_int_fst_ord = rev_order o int_ord o pairself fst
206.112 + fun ordered_values tab =
206.113 + Termtab.fold (fn (_, x) => OrdList.insert rev_int_fst_ord x) tab []
206.114 + |> map snd
206.115 +
206.116 + val (thms', (_, defs)) =
206.117 + (declare_frees thms (Name.make_context []), Termtab.empty)
206.118 + |> fold_map (rewrite (replace_lambdas ctxt)) thms
206.119 + val eqs = ordered_values defs
206.120 in
206.121 (maps (#hyps o Thm.crep_thm) eqs, map (normalize_rule ctxt) eqs @ thms')
206.122 end
207.1 --- a/src/HOL/SMT/Tools/smt_solver.ML Tue Oct 20 08:10:47 2009 +0200
207.2 +++ b/src/HOL/SMT/Tools/smt_solver.ML Tue Oct 20 10:11:30 2009 +0200
207.3 @@ -19,9 +19,9 @@
207.4 assms: thm list option }
207.5
207.6 datatype solver_config = SolverConfig of {
207.7 - name: {env_var: string, remote_name: string},
207.8 + command: {env_var: string, remote_name: string},
207.9 + arguments: string list,
207.10 interface: interface,
207.11 - arguments: string list,
207.12 reconstruct: proof_data -> thm }
207.13
207.14 (*options*)
207.15 @@ -29,6 +29,8 @@
207.16 val with_timeout: Proof.context -> ('a -> 'b) -> 'a -> 'b
207.17 val trace: bool Config.T
207.18 val trace_msg: Proof.context -> ('a -> string) -> 'a -> unit
207.19 + val keep: string Config.T
207.20 + val cert: string Config.T
207.21
207.22 (*solvers*)
207.23 type solver = Proof.context -> thm list -> thm
207.24 @@ -67,9 +69,9 @@
207.25 assms: thm list option }
207.26
207.27 datatype solver_config = SolverConfig of {
207.28 - name: {env_var: string, remote_name: string},
207.29 + command: {env_var: string, remote_name: string},
207.30 + arguments: string list,
207.31 interface: interface,
207.32 - arguments: string list,
207.33 reconstruct: proof_data -> thm }
207.34
207.35
207.36 @@ -86,17 +88,28 @@
207.37 fun trace_msg ctxt f x =
207.38 if Config.get ctxt trace then tracing (f x) else ()
207.39
207.40 +val (keep, setup_keep) = Attrib.config_string "smt_keep" ""
207.41 +val (cert, setup_cert) = Attrib.config_string "smt_cert" ""
207.42 +
207.43
207.44 (* interface to external solvers *)
207.45
207.46 local
207.47
207.48 -fun with_tmp_files f x =
207.49 +fun with_files ctxt f x =
207.50 let
207.51 - fun tmp_path () = File.tmp_path (Path.explode ("smt-" ^ serial_string ()))
207.52 - val in_path = tmp_path () and out_path = tmp_path ()
207.53 - val y = Exn.capture (f in_path out_path) x
207.54 - val _ = try File.rm in_path and _ = try File.rm out_path
207.55 + fun make_names n = (n, n ^ ".proof")
207.56 +
207.57 + val keep' = Config.get ctxt keep
207.58 + val paths as (problem_path, proof_path) =
207.59 + if keep' <> "" andalso File.exists (Path.dir (Path.explode keep'))
207.60 + then pairself Path.explode (make_names keep')
207.61 + else pairself (File.tmp_path o Path.explode)
207.62 + (make_names ("smt-" ^ serial_string ()))
207.63 +
207.64 + val y = Exn.capture (f problem_path proof_path) x
207.65 +
207.66 + val _ = if keep' = "" then (pairself (try File.rm) paths; ()) else ()
207.67 in Exn.release y end
207.68
207.69 fun run in_path out_path (ctxt, cmd, output) =
207.70 @@ -115,12 +128,18 @@
207.71 fun run_solver ctxt {env_var, remote_name} args output =
207.72 let
207.73 val qf = File.shell_path and qq = File.shell_quote
207.74 - val path = getenv env_var and remote = getenv "REMOTE_SMT_SOLVER"
207.75 + val qs = qf o Path.explode
207.76 + val local_name = getenv env_var
207.77 + val cert_name = Config.get ctxt cert
207.78 + val remote = qs (getenv "REMOTE_SMT_SOLVER")
207.79 + val cert_script = qs (getenv "CERT_SMT_SOLVER")
207.80 fun cmd f1 f2 =
207.81 - if path <> ""
207.82 - then map qq (path :: args) @ [qf f1, ">", qf f2]
207.83 - else "perl -w" :: map qq (remote :: remote_name :: args) @ [qf f1, qf f2]
207.84 - in with_tmp_files run (ctxt, space_implode " " oo cmd, output) end
207.85 + if cert_name <> ""
207.86 + then "perl -w" :: [cert_script, qs cert_name, qf f1, ">", qf f2]
207.87 + else if local_name <> ""
207.88 + then qs local_name :: map qq args @ [qf f1, ">", qf f2]
207.89 + else "perl -w" :: remote :: map qq (remote_name :: args) @ [qf f1, qf f2]
207.90 + in with_files ctxt run (ctxt, space_implode " " oo cmd, output) end
207.91
207.92 end
207.93
207.94 @@ -129,12 +148,12 @@
207.95
207.96 fun gen_solver solver ctxt prems =
207.97 let
207.98 - val SolverConfig {name, interface, arguments, reconstruct} = solver ctxt
207.99 + val SolverConfig {command, arguments, interface, reconstruct} = solver ctxt
207.100 val Interface {normalize=nc, translate=tc} = interface
207.101 val thy = ProofContext.theory_of ctxt
207.102 in
207.103 SMT_Normalize.normalize nc ctxt prems
207.104 - ||> run_solver ctxt name arguments o SMT_Translate.translate tc thy
207.105 + ||> run_solver ctxt command arguments o SMT_Translate.translate tc thy
207.106 ||> reconstruct o make_proof_data ctxt
207.107 |-> fold SMT_Normalize.discharge_definition
207.108 end
207.109 @@ -196,8 +215,8 @@
207.110
207.111 fun pretty_counterex ctxt (real, ex) =
207.112 let
207.113 - val msg = if real then "Counterexample found:"
207.114 - else "Potential counterexample found:"
207.115 + val msg = if real then "SMT: counterexample found:"
207.116 + else "SMT: potential counterexample found:"
207.117 val cex = if null ex then [Pretty.str "(no assignments)"]
207.118 else map (Syntax.pretty_term ctxt) ex
207.119 in Pretty.string_of (Pretty.big_list msg cex) end
207.120 @@ -212,6 +231,11 @@
207.121
207.122 val smt_tac = smt_tac' false
207.123
207.124 +val smt_method =
207.125 + Scan.optional (Scan.lift (Args.add -- Args.colon) |-- Attrib.thms) [] >>
207.126 + (fn thms => fn ctxt => METHOD (fn facts =>
207.127 + HEADGOAL (smt_tac ctxt (thms @ facts))))
207.128 +
207.129
207.130 (* setup *)
207.131
207.132 @@ -221,7 +245,11 @@
207.133 (Thm.declaration_attribute o K o select_solver))
207.134 "SMT solver configuration" #>
207.135 setup_timeout #>
207.136 - setup_trace
207.137 + setup_trace #>
207.138 + setup_keep #>
207.139 + setup_cert #>
207.140 + Method.setup (Binding.name "smt") smt_method
207.141 + "Applies an SMT solver to the current goal."
207.142
207.143 fun print_setup gen =
207.144 let
207.145 @@ -243,4 +271,10 @@
207.146 Pretty.big_list "Solver-specific settings:" infos])
207.147 end
207.148
207.149 +val _ = OuterSyntax.improper_command "smt_status"
207.150 + "Show the available SMT solvers and the currently selected solver."
207.151 + OuterKeyword.diag
207.152 + (Scan.succeed (Toplevel.no_timing o Toplevel.keep (fn state =>
207.153 + print_setup (Context.Proof (Toplevel.context_of state)))))
207.154 +
207.155 end
208.1 --- a/src/HOL/SMT/Tools/yices_solver.ML Tue Oct 20 08:10:47 2009 +0200
208.2 +++ b/src/HOL/SMT/Tools/yices_solver.ML Tue Oct 20 10:11:30 2009 +0200
208.3 @@ -40,9 +40,9 @@
208.4
208.5 fun smtlib_solver oracle _ =
208.6 SMT_Solver.SolverConfig {
208.7 - name = {env_var=env_var, remote_name=solver_name},
208.8 + command = {env_var=env_var, remote_name=solver_name},
208.9 + arguments = options,
208.10 interface = SMTLIB_Interface.interface,
208.11 - arguments = options,
208.12 reconstruct = oracle }
208.13
208.14 val setup =
209.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
209.2 +++ b/src/HOL/SMT/Tools/z3_proof.ML Tue Oct 20 10:11:30 2009 +0200
209.3 @@ -0,0 +1,247 @@
209.4 +(* Title: HOL/SMT/Tools/z3_proof.ML
209.5 + Author: Sascha Boehme, TU Muenchen
209.6 +
209.7 +Proof reconstruction for proofs found by Z3.
209.8 +*)
209.9 +
209.10 +signature Z3_PROOF =
209.11 +sig
209.12 + val reconstruct: Proof.context -> thm list option -> SMT_Translate.recon ->
209.13 + string list -> thm
209.14 +end
209.15 +
209.16 +structure Z3_Proof: Z3_PROOF =
209.17 +struct
209.18 +
209.19 +structure T = Z3_Proof_Terms
209.20 +structure R = Z3_Proof_Rules
209.21 +
209.22 +fun z3_exn msg = error ("Z3 proof reconstruction: " ^ msg)
209.23 +
209.24 +
209.25 +fun lift f (x, y) = apsnd (pair x) (f y)
209.26 +fun lift' f v (x, y) = apsnd (rpair y) (f v x)
209.27 +
209.28 +fun $$ s = lift (Scan.$$ s)
209.29 +fun this s = lift (Scan.this_string s)
209.30 +
209.31 +fun blank s = lift (Scan.many1 Symbol.is_ascii_blank) s
209.32 +
209.33 +fun par scan = $$ "(" |-- scan --| $$ ")"
209.34 +fun bra scan = $$ "[" |-- scan --| $$ "]"
209.35 +
209.36 +val digit = (fn
209.37 + "0" => SOME 0 | "1" => SOME 1 | "2" => SOME 2 | "3" => SOME 3 |
209.38 + "4" => SOME 4 | "5" => SOME 5 | "6" => SOME 6 | "7" => SOME 7 |
209.39 + "8" => SOME 8 | "9" => SOME 9 | _ => NONE)
209.40 +
209.41 +val nat_num = Scan.repeat1 (Scan.some digit) >>
209.42 + (fn ds => fold (fn d => fn i => i * 10 + d) ds 0)
209.43 +val int_num = Scan.optional (Scan.$$ "-" >> K (fn i => ~i)) I :|--
209.44 + (fn sign => nat_num >> sign)
209.45 +
209.46 +val is_char = Symbol.is_ascii_letter orf Symbol.is_ascii_digit orf
209.47 + member (op =) (explode "_+*-/%~=<>$&|?!.@^#")
209.48 +val name = Scan.many1 is_char >> implode
209.49 +
209.50 +datatype sym = Sym of string * sym list
209.51 +
209.52 +datatype context = Context of {
209.53 + Ttab: typ Symtab.table,
209.54 + ttab: Thm.cterm Symtab.table,
209.55 + etab: T.preterm Inttab.table,
209.56 + ptab: R.proof Inttab.table,
209.57 + nctxt: Name.context }
209.58 +
209.59 +fun make_context (Ttab, ttab, etab, ptab, nctxt) =
209.60 + Context {Ttab=Ttab, ttab=ttab, etab=etab, ptab=ptab, nctxt=nctxt}
209.61 +
209.62 +fun empty_context thy (SMT_Translate.Recon {typs, terms=ttab}) =
209.63 + let
209.64 + val ttab' = Symtab.map (fn @{term True} => @{term "~False"} | t => t) ttab
209.65 + val ns = Symtab.fold (Term.add_free_names o snd) ttab' []
209.66 + val nctxt = Name.make_context ns
209.67 + val tt = Symtab.map (Thm.cterm_of thy) ttab'
209.68 + in make_context (typs, tt, Inttab.empty, Inttab.empty, nctxt) end
209.69 +
209.70 +fun map_context f (Context {Ttab, ttab, etab, ptab, nctxt}) =
209.71 + make_context (f (Ttab, ttab, etab, ptab, nctxt))
209.72 +
209.73 +fun map_type_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
209.74 + (f Ttab, ttab, etab, ptab, nctxt))
209.75 +
209.76 +fun map_term_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
209.77 + (Ttab, f ttab, etab, ptab, nctxt))
209.78 +
209.79 +fun map_expr_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
209.80 + (Ttab, ttab, f etab, ptab, nctxt))
209.81 +
209.82 +fun map_proof_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
209.83 + (Ttab, ttab, etab, f ptab, nctxt))
209.84 +
209.85 +val free_prefix = "f"
209.86 +
209.87 +fun fresh_name (cx as Context {nctxt, ...}) =
209.88 + let val (n, nctxt') = yield_singleton Name.variants free_prefix nctxt
209.89 + in
209.90 + (n, map_context (fn (Ttab, ttab, etab, ptab, _) =>
209.91 + (Ttab, ttab, etab, ptab, nctxt')) cx)
209.92 + end
209.93 +
209.94 +fun typ_of_sort name (cx as Context {Ttab, ...}) =
209.95 + (case Symtab.lookup Ttab name of
209.96 + SOME T => (T, cx)
209.97 + | _ => cx |> fresh_name |-> (fn n =>
209.98 + let val T = TFree ("'" ^ n, @{sort type})
209.99 + in pair T o map_type_tab (Symtab.update (name, T)) end))
209.100 +
209.101 +fun lookup_expr id (cx as Context {etab, ...}) =
209.102 + (case Inttab.lookup etab id of
209.103 + SOME e => (e, cx)
209.104 + | _ => z3_exn ("unknown term id: " ^ quote (string_of_int id)))
209.105 +
209.106 +fun add_expr k t = map_expr_tab (Inttab.update (k, t))
209.107 +
209.108 +fun add_proof thy k ((r, ps), t) (cx as Context {nctxt, ...}) =
209.109 + let val p = R.make_proof r ps (T.compile thy nctxt t)
209.110 + in (k, map_proof_tab (Inttab.update (k, p)) cx) end
209.111 +
209.112 +fun mk_app app (cx as Context {ttab, ...}) =
209.113 + let
209.114 + val mk =
209.115 + (fn
209.116 + (Sym ("true", _), _) => T.mk_true
209.117 + | (Sym ("false", _), _) => T.mk_false
209.118 + | (Sym ("=", _), [t, u]) => T.mk_eq t u
209.119 + | (Sym ("distinct", _), ts) => T.mk_distinct ts
209.120 + | (Sym ("ite", _), [s, t, u]) => T.mk_if s t u
209.121 + | (Sym ("and", _), ts) => T.mk_and ts
209.122 + | (Sym ("or", _), ts) => T.mk_or ts
209.123 + | (Sym ("iff", _), [t, u]) => T.mk_iff t u
209.124 + | (Sym ("xor", _), [t, u]) => T.mk_not (T.mk_iff t u)
209.125 + | (Sym ("not", _), [t]) => T.mk_not t
209.126 + | (Sym ("implies", _), [t, u]) => T.mk_implies t u
209.127 + | (Sym ("~", _), [t, u]) => T.mk_eq t u
209.128 + | (Sym ("<", _), [t, u]) => T.mk_lt t u
209.129 + | (Sym ("<=", _), [t, u]) => T.mk_le t u
209.130 + | (Sym (">", _), [t, u]) => T.mk_lt u t
209.131 + | (Sym (">=", _), [t, u]) => T.mk_le u t
209.132 + | (Sym ("+", _), [t, u]) => T.mk_add t u
209.133 + | (Sym ("-", _), [t, u]) => T.mk_sub t u
209.134 + | (Sym ("-", _), [t]) => T.mk_uminus t
209.135 + | (Sym ("*", _), [t, u]) => T.mk_mul t u
209.136 + | (Sym ("/", _), [t, u]) => T.mk_real_div t u
209.137 + | (Sym ("div", _), [t, u]) => T.mk_int_div t u
209.138 + | (Sym ("mod", _), [t, u]) => T.mk_mod t u
209.139 + | (Sym ("rem", _), [t, u]) => T.mk_rem t u
209.140 + | (Sym ("select", _), [m, k]) => T.mk_access m k
209.141 + | (Sym ("store", _), [m, k, v]) => T.mk_update m k v
209.142 + | (Sym ("pattern", _), _) => T.mk_true
209.143 + | (Sym (n, _), ts) =>
209.144 + (case Symtab.lookup ttab n of
209.145 + SOME ct => T.mk_fun ct ts
209.146 + | NONE => z3_exn ("unknown function: " ^ quote n)))
209.147 + in (mk app, cx) end
209.148 +
209.149 +fun add_decl thy (n, T) (cx as Context {ttab, ...}) =
209.150 + (case Symtab.lookup ttab n of
209.151 + SOME _ => cx
209.152 + | _ => cx |> fresh_name |-> (fn n' =>
209.153 + map_term_tab (Symtab.update (n, Thm.cterm_of thy (Free (n', T))))))
209.154 +
209.155 +
209.156 +fun sep scan_sep scan = scan ::: Scan.repeat (scan_sep |-- scan)
209.157 +fun bsep scan = Scan.repeat (blank |-- scan)
209.158 +fun bsep1 scan = Scan.repeat1 (blank |-- scan)
209.159 +
209.160 +val id = Scan.$$ "#" |-- int_num
209.161 +
209.162 +fun sym s =
209.163 + (lift name -- Scan.optional (bra (sep ($$ ":") sym)) [] >> Sym) s
209.164 +
209.165 +fun sort st = Scan.first [
209.166 + this "bool" >> K @{typ bool},
209.167 + this "int" >> K @{typ int},
209.168 + this "real" >> K @{typ real},
209.169 + this "bv" |-- bra (lift int_num) >> T.wordT,
209.170 + this "array" |-- bra (sort --| $$ ":" -- sort) >> (op -->),
209.171 + par (this "->" |-- bsep1 sort) >> ((op --->) o split_last),
209.172 + lift name #-> lift' typ_of_sort] st
209.173 +
209.174 +fun bound thy =
209.175 + par (this ":var" -- blank |-- lift int_num --| blank -- sort) >>
209.176 + uncurry (T.mk_bound thy)
209.177 +
209.178 +val number =
209.179 + int_num -- Scan.option (Scan.$$ "/" |-- int_num) --|
209.180 + Scan.this_string "::" :|-- (fn num as (n, _) =>
209.181 + Scan.this_string "int" >> K (T.mk_int_num n) ||
209.182 + Scan.this_string "real" >> K (T.mk_real_frac_num num))
209.183 +
209.184 +fun bv_number thy =
209.185 + this "bv" |-- bra (lift (int_num --| Scan.$$ ":" -- int_num)) >>
209.186 + uncurry (T.mk_bv_num thy)
209.187 +
209.188 +val constant = sym #-> lift' (mk_app o rpair [])
209.189 +
209.190 +fun arg thy = Scan.first [lift id #-> lift' lookup_expr,
209.191 + lift number, bv_number thy, constant]
209.192 +
209.193 +fun application thy =
209.194 + par (sym -- bsep1 (arg thy)) #-> lift' mk_app
209.195 +
209.196 +val variables =
209.197 + par (this "vars" |-- bsep1 (par ((lift name >> K "x") --| blank -- sort)))
209.198 +val patterns = bsep (par ((this ":pat" || this ":nopat") |-- bsep1 (lift id)))
209.199 +val quant_kind =
209.200 + this "forall" >> K T.mk_forall || this "exists" >> K T.mk_exists
209.201 +fun quantifier thy = par (quant_kind --| blank --
209.202 + variables --| patterns --| blank -- arg thy) >>
209.203 + (fn ((q, vs), body) => fold_rev (q thy) vs body)
209.204 +
209.205 +fun expr thy k = Scan.first [bound thy, quantifier thy, application thy,
209.206 + lift number, bv_number thy, constant] #-> apfst o add_expr k
209.207 +
209.208 +fun rule_name name =
209.209 + (case R.rule_of_string name of
209.210 + SOME r => r
209.211 + | NONE => z3_exn ("unknown proof rule: " ^ quote name))
209.212 +
209.213 +fun rule thy k =
209.214 + bra (lift (name >> rule_name) -- bsep (lift id)) --|
209.215 + ($$ ":" -- blank) -- arg thy #-> lift' (add_proof thy k)
209.216 +
209.217 +fun decl thy = ((this "decl" -- blank) |-- lift name --|
209.218 + (blank -- this "::" -- blank) -- sort) #-> apfst o add_decl thy
209.219 +
209.220 +fun def st = (lift id --| (blank -- this ":=" -- blank)) st
209.221 +
209.222 +fun node thy =
209.223 + decl thy #> pair NONE ||
209.224 + def :|-- (fn k => expr thy k #> pair NONE || rule thy k #>> K NONE) ||
209.225 + rule thy ~1 #>> SOME
209.226 +
209.227 +fun parse_error line_no ((_, xs), _) =
209.228 + "parse error at line " ^ string_of_int line_no ^ ": " ^ quote (implode xs)
209.229 +
209.230 +fun handle_errors ln scan = Scan.error (Scan.!! (parse_error ln) scan)
209.231 +
209.232 +fun parse_line thy l (st as (stop, line_no, cx)) =
209.233 + if is_some stop then st
209.234 + else
209.235 + (cx, explode l)
209.236 + |> handle_errors line_no (Scan.finite' Symbol.stopper (node thy))
209.237 + |> (fn (stop', (cx', _)) => (stop', line_no + 1, cx'))
209.238 +
209.239 +fun reconstruct ctxt assms recon output =
209.240 + let
209.241 + val _ = T.var_prefix <> free_prefix orelse error "Same prefixes"
209.242 +
209.243 + val thy = ProofContext.theory_of ctxt
209.244 + in
209.245 + (case fold (parse_line thy) output (NONE, 1, empty_context thy recon) of
209.246 + (SOME p, _, Context {ptab, ...}) => R.prove ctxt assms ptab p
209.247 + | _ => z3_exn "bad proof")
209.248 + end
209.249 +
209.250 +end
210.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
210.2 +++ b/src/HOL/SMT/Tools/z3_proof_rules.ML Tue Oct 20 10:11:30 2009 +0200
210.3 @@ -0,0 +1,1319 @@
210.4 +(* Title: HOL/SMT/Tools/z3_proof_rules.ML
210.5 + Author: Sascha Boehme, TU Muenchen
210.6 +
210.7 +Z3 proof rules and their reconstruction.
210.8 +*)
210.9 +
210.10 +signature Z3_PROOF_RULES =
210.11 +sig
210.12 + (*proof rule names*)
210.13 + type rule
210.14 + val rule_of_string: string -> rule option
210.15 + val string_of_rule: rule -> string
210.16 +
210.17 + (*proof reconstruction*)
210.18 + type proof
210.19 + val make_proof: rule -> int list -> Thm.cterm * Thm.cterm list -> proof
210.20 + val prove: Proof.context -> thm list option -> proof Inttab.table -> int ->
210.21 + thm
210.22 +
210.23 + (*setup*)
210.24 + val setup: theory -> theory
210.25 +end
210.26 +
210.27 +structure Z3_Proof_Rules: Z3_PROOF_RULES =
210.28 +struct
210.29 +
210.30 +structure T = Z3_Proof_Terms
210.31 +
210.32 +fun z3_exn msg = error ("Z3 proof reconstruction: " ^ msg)
210.33 +
210.34 +
210.35 +(* proof rule names *)
210.36 +
210.37 +datatype rule = TrueAxiom | Asserted | Goal | ModusPonens | Reflexivity |
210.38 + Symmetry | Transitivity | TransitivityStar | Monotonicity | QuantIntro |
210.39 + Distributivity | AndElim | NotOrElim | Rewrite | RewriteStar | PullQuant |
210.40 + PullQuantStar | PushQuant | ElimUnusedVars | DestEqRes | QuantInst |
210.41 + Hypothesis | Lemma | UnitResolution | IffTrue | IffFalse | Commutativity |
210.42 + DefAxiom | IntroDef | ApplyDef | IffOeq | NnfPos | NnfNeg | NnfStar |
210.43 + CnfStar | Skolemize | ModusPonensOeq | ThLemma
210.44 +
210.45 +val rule_names = Symtab.make [
210.46 + ("true-axiom", TrueAxiom),
210.47 + ("asserted", Asserted),
210.48 + ("goal", Goal),
210.49 + ("mp", ModusPonens),
210.50 + ("refl", Reflexivity),
210.51 + ("symm", Symmetry),
210.52 + ("trans", Transitivity),
210.53 + ("trans*", TransitivityStar),
210.54 + ("monotonicity", Monotonicity),
210.55 + ("quant-intro", QuantIntro),
210.56 + ("distributivity", Distributivity),
210.57 + ("and-elim", AndElim),
210.58 + ("not-or-elim", NotOrElim),
210.59 + ("rewrite", Rewrite),
210.60 + ("rewrite*", RewriteStar),
210.61 + ("pull-quant", PullQuant),
210.62 + ("pull-quant*", PullQuantStar),
210.63 + ("push-quant", PushQuant),
210.64 + ("elim-unused", ElimUnusedVars),
210.65 + ("der", DestEqRes),
210.66 + ("quant-inst", QuantInst),
210.67 + ("hypothesis", Hypothesis),
210.68 + ("lemma", Lemma),
210.69 + ("unit-resolution", UnitResolution),
210.70 + ("iff-true", IffTrue),
210.71 + ("iff-false", IffFalse),
210.72 + ("commutativity", Commutativity),
210.73 + ("def-axiom", DefAxiom),
210.74 + ("intro-def", IntroDef),
210.75 + ("apply-def", ApplyDef),
210.76 + ("iff~", IffOeq),
210.77 + ("nnf-pos", NnfPos),
210.78 + ("nnf-neg", NnfNeg),
210.79 + ("nnf*", NnfStar),
210.80 + ("cnf*", CnfStar),
210.81 + ("sk", Skolemize),
210.82 + ("mp~", ModusPonensOeq),
210.83 + ("th-lemma", ThLemma)]
210.84 +
210.85 +val rule_of_string = Symtab.lookup rule_names
210.86 +fun string_of_rule r =
210.87 + let fun fit (s, r') = if r = r' then SOME s else NONE
210.88 + in the (Symtab.get_first NONE fit rule_names) end
210.89 +
210.90 +
210.91 +(* proof representation *)
210.92 +
210.93 +datatype theorem =
210.94 + Thm of thm |
210.95 + MetaEq of thm |
210.96 + Literals of thm * thm Termtab.table
210.97 +
210.98 +fun thm_of (Thm thm) = thm
210.99 + | thm_of (MetaEq thm) = thm COMP @{thm meta_eq_to_obj_eq}
210.100 + | thm_of (Literals (thm, _)) = thm
210.101 +
210.102 +fun meta_eq_of (MetaEq thm) = thm
210.103 + | meta_eq_of p = thm_of p COMP @{thm eq_reflection}
210.104 +
210.105 +datatype proof =
210.106 + Unproved of {
210.107 + rule: rule,
210.108 + subs: int list,
210.109 + prop: Thm.cterm,
210.110 + vars: Thm.cterm list } |
210.111 + Sequent of {
210.112 + hyps: Thm.cterm list,
210.113 + vars: Thm.cterm list,
210.114 + thm: theorem }
210.115 +
210.116 +fun make_proof r ps (ct, cvs) = Unproved {rule=r, subs=ps, prop=ct, vars=cvs}
210.117 +
210.118 +
210.119 +(* proof reconstruction utilities *)
210.120 +
210.121 +fun try_apply ctxt name nfs ct =
210.122 + let
210.123 + val trace = SMT_Solver.trace_msg ctxt I
210.124 +
210.125 + fun first [] = z3_exn (name ^ " failed")
210.126 + | first ((n, f) :: nfs) =
210.127 + (case try f ct of
210.128 + SOME thm => (trace (n ^ " succeeded"); thm)
210.129 + | NONE => (trace (n ^ " failed"); first nfs))
210.130 + in first nfs end
210.131 +
210.132 +fun prop_of thm = (case Thm.prop_of thm of @{term Trueprop} $ t => t | t => t)
210.133 +
210.134 +fun as_meta_eq ct = uncurry T.mk_meta_eq (Thm.dest_binop ct)
210.135 +
210.136 +fun by_tac' tac ct = Goal.norm_result (Goal.prove_internal [] ct (K (tac 1)))
210.137 +fun by_tac tac ct = by_tac' tac (T.mk_prop ct)
210.138 +
210.139 +fun match_instantiate' f ct thm =
210.140 + Thm.instantiate (Thm.match (f (Thm.cprop_of thm), ct)) thm
210.141 +val match_instantiate = match_instantiate' I
210.142 +
210.143 +local
210.144 + fun maybe_instantiate ct thm =
210.145 + try Thm.first_order_match (Thm.cprop_of thm, ct)
210.146 + |> Option.map (fn inst => Thm.instantiate inst thm)
210.147 +in
210.148 +fun thm_net_of thms =
210.149 + let fun insert thm = Net.insert_term (K false) (Thm.prop_of thm, thm)
210.150 + in fold insert thms Net.empty end
210.151 +
210.152 +fun first_of thms ct = get_first (maybe_instantiate ct) thms
210.153 +fun net_instance net ct = first_of (Net.match_term net (Thm.term_of ct)) ct
210.154 +end
210.155 +
210.156 +fun certify ctxt = Thm.cterm_of (ProofContext.theory_of ctxt)
210.157 +fun certify_var ctxt idx T = certify ctxt (Var (("x", idx), T))
210.158 +
210.159 +fun varify ctxt =
210.160 + let
210.161 + fun varify1 cv thm =
210.162 + let
210.163 + val T = Thm.typ_of (Thm.ctyp_of_term cv)
210.164 + val v = certify_var ctxt (Thm.maxidx_of thm + 1) T
210.165 + in SMT_Normalize.instantiate_free (cv, v) thm end
210.166 + in fold varify1 end
210.167 +
210.168 +fun under_assumption f ct =
210.169 + let val ct' = T.mk_prop ct
210.170 + in Thm.implies_intr ct' (f (Thm.assume ct')) end
210.171 +
210.172 +fun with_conv conv prove ct =
210.173 + let val eq = Thm.symmetric (conv ct)
210.174 + in Thm.equal_elim eq (prove (Thm.lhs_of eq)) end
210.175 +
210.176 +fun list2 (x, y) = [x, y]
210.177 +
210.178 +fun precompose f rule = (f (Thm.cprem_of rule 1), f, rule)
210.179 +
210.180 +fun discharge p pq = Thm.implies_elim pq p
210.181 +
210.182 +fun compose (cvs, f, rule) thm =
210.183 + let fun inst thm = Thm.instantiate ([], cvs ~~ f (Thm.cprop_of thm))
210.184 + in discharge thm (inst thm rule) end
210.185 +
210.186 +fun make_hyp_def thm = (* |- c x == t x ==> P (c x) ~~> c == t |- P (c x) *)
210.187 + let
210.188 + val (lhs, rhs) = Thm.dest_binop (Thm.cprem_of thm 1)
210.189 + val (cf, cvs) = Drule.strip_comb lhs
210.190 + val eq = T.mk_meta_eq cf (fold_rev Thm.cabs cvs rhs)
210.191 + fun apply cv th =
210.192 + Thm.combination th (Thm.reflexive cv)
210.193 + |> Conv.fconv_rule (Conv.arg_conv (Thm.beta_conversion false))
210.194 + in ([eq], Thm.implies_elim thm (fold apply cvs (Thm.assume eq))) end
210.195 +
210.196 +val true_thm = @{lemma "~False" by simp}
210.197 +
210.198 +val is_neg = (fn @{term Not} $ _ => true | _ => false)
210.199 +fun is_neg' f = (fn @{term Not} $ t => f t | _ => false)
210.200 +val is_conj = (fn @{term "op &"} $ _ $ _ => true | _ => false)
210.201 +val is_disj = (fn @{term "op |"} $ _ $ _ => true | _ => false)
210.202 +
210.203 +(** explosion of conjunctions and disjunctions **)
210.204 +
210.205 +local
210.206 + val dest_conj_term = (fn @{term "op &"} $ t $ u => SOME (t, u) | _ => NONE)
210.207 +
210.208 + val negate_term = (fn @{term Not} $ t => t | t => @{term Not} $ t)
210.209 + fun dest_disj_term' f = (fn
210.210 + @{term Not} $ (@{term "op |"} $ t $ u) => SOME (f t, f u)
210.211 + | _ => NONE)
210.212 + val dest_disj_term = dest_disj_term' negate_term
210.213 +
210.214 + fun destc ct = list2 (Thm.dest_binop (Thm.dest_arg ct))
210.215 + val dest_conj1 = precompose destc @{thm conjunct1}
210.216 + val dest_conj2 = precompose destc @{thm conjunct2}
210.217 + fun dest_conj_rules t =
210.218 + dest_conj_term t |> Option.map (K (dest_conj1, dest_conj2))
210.219 +
210.220 + fun destd f ct = list2 (f (Thm.dest_binop (Thm.dest_arg (Thm.dest_arg ct))))
210.221 + val dn1 = apfst Thm.dest_arg and dn2 = apsnd Thm.dest_arg
210.222 + val dest_disj1 = precompose (destd I) @{lemma "~(P | Q) ==> ~P" by fast}
210.223 + and dest_disj2 = precompose (destd dn1) @{lemma "~(~P | Q) ==> P" by fast}
210.224 + and dest_disj3 = precompose (destd I) @{lemma "~(P | Q) ==> ~Q" by fast}
210.225 + and dest_disj4 = precompose (destd dn2) @{lemma "~(P | ~Q) ==> Q" by fast}
210.226 +
210.227 + val is_neg = (fn @{term Not} $ _ => true | _ => false)
210.228 + fun dest_disj_rules t =
210.229 + (case dest_disj_term' is_neg t of
210.230 + SOME (true, true) => SOME (dest_disj2, dest_disj4)
210.231 + | SOME (true, false) => SOME (dest_disj2, dest_disj3)
210.232 + | SOME (false, true) => SOME (dest_disj1, dest_disj4)
210.233 + | SOME (false, false) => SOME (dest_disj1, dest_disj3)
210.234 + | NONE => NONE)
210.235 +
210.236 + val is_dneg = is_neg' is_neg
210.237 + fun destn ct = [Thm.dest_arg (Thm.dest_arg (Thm.dest_arg ct))]
210.238 + val dneg_rule = precompose destn @{thm notnotD}
210.239 +in
210.240 +fun exists_lit is_conj P =
210.241 + let
210.242 + val dest = if is_conj then dest_conj_term else dest_disj_term
210.243 + fun exists t = P t orelse
210.244 + (case dest t of
210.245 + SOME (t1, t2) => exists t1 orelse exists t2
210.246 + | NONE => false)
210.247 + in exists end
210.248 +
210.249 +fun explode_term is_conj keep_intermediate =
210.250 + let
210.251 + val dest = if is_conj then dest_conj_term else dest_disj_term
210.252 + val dest_rules = if is_conj then dest_conj_rules else dest_disj_rules
210.253 + fun explode1 rules t =
210.254 + (case dest t of
210.255 + SOME (t1, t2) =>
210.256 + let val (rule1, rule2) = the (dest_rules t)
210.257 + in
210.258 + explode1 (rule1 :: rules) t1 #>
210.259 + explode1 (rule2 :: rules) t2 #>
210.260 + keep_intermediate ? cons (t, rev rules)
210.261 + end
210.262 + | NONE => cons (t, rev rules))
210.263 + fun explode0 (@{term Not} $ (@{term Not} $ t)) = [(t, [dneg_rule])]
210.264 + | explode0 t = explode1 [] t []
210.265 + in explode0 end
210.266 +
210.267 +fun extract_lit thm rules = fold compose rules thm
210.268 +
210.269 +fun explode_thm is_conj full keep_intermediate stop_lits =
210.270 + let
210.271 + val dest_rules = if is_conj then dest_conj_rules else dest_disj_rules
210.272 + val tab = fold (Termtab.update o rpair ()) stop_lits Termtab.empty
210.273 +
210.274 + fun explode1 thm =
210.275 + if Termtab.defined tab (prop_of thm) then cons thm
210.276 + else
210.277 + (case dest_rules (prop_of thm) of
210.278 + SOME (rule1, rule2) => explode2 rule1 thm #> explode2 rule2 thm #>
210.279 + keep_intermediate ? cons thm
210.280 + | NONE => cons thm)
210.281 + and explode2 dest_rule thm =
210.282 + if full orelse exists_lit is_conj (Termtab.defined tab) (prop_of thm)
210.283 + then explode1 (compose dest_rule thm)
210.284 + else cons (compose dest_rule thm)
210.285 + fun explode0 thm =
210.286 + if not is_conj andalso is_dneg (prop_of thm) then [compose dneg_rule thm]
210.287 + else explode1 thm []
210.288 + in explode0 end
210.289 +end
210.290 +
210.291 +(** joining of literals to conjunctions or disjunctions **)
210.292 +
210.293 +local
210.294 + fun precomp2 f g thm =
210.295 + (f (Thm.cprem_of thm 1), g (Thm.cprem_of thm 2), f, g, thm)
210.296 + fun comp2 (cv1, cv2, f, g, rule) thm1 thm2 =
210.297 + let val inst = [(cv1, f (Thm.cprop_of thm1)), (cv2, g (Thm.cprop_of thm2))]
210.298 + in Thm.instantiate ([], inst) rule |> discharge thm1 |> discharge thm2 end
210.299 +
210.300 + fun d1 ct = Thm.dest_arg ct and d2 ct = Thm.dest_arg (Thm.dest_arg ct)
210.301 +
210.302 + val conj_rule = precomp2 d1 d1 @{thm conjI}
210.303 + fun comp_conj ((_, thm1), (_, thm2)) = comp2 conj_rule thm1 thm2
210.304 +
210.305 + val disj1 = precomp2 d2 d2 @{lemma "~P ==> ~Q ==> ~(P | Q)" by fast}
210.306 + val disj2 = precomp2 d2 d1 @{lemma "~P ==> Q ==> ~(P | ~Q)" by fast}
210.307 + val disj3 = precomp2 d1 d2 @{lemma "P ==> ~Q ==> ~(~P | Q)" by fast}
210.308 + val disj4 = precomp2 d1 d1 @{lemma "P ==> Q ==> ~(~P | ~Q)" by fast}
210.309 +
210.310 + fun comp_disj ((false, thm1), (false, thm2)) = comp2 disj1 thm1 thm2
210.311 + | comp_disj ((false, thm1), (true, thm2)) = comp2 disj2 thm1 thm2
210.312 + | comp_disj ((true, thm1), (false, thm2)) = comp2 disj3 thm1 thm2
210.313 + | comp_disj ((true, thm1), (true, thm2)) = comp2 disj4 thm1 thm2
210.314 +
210.315 + fun dest_conj (@{term "op &"} $ t $ u) = ((false, t), (false, u))
210.316 + | dest_conj t = raise TERM ("dest_conj", [t])
210.317 +
210.318 + val neg = (fn @{term Not} $ t => (true, t) | t => (false, @{term Not} $ t))
210.319 + fun dest_disj (@{term Not} $ (@{term "op |"} $ t $ u)) = (neg t, neg u)
210.320 + | dest_disj t = raise TERM ("dest_disj", [t])
210.321 +
210.322 + val dnegE = precompose (single o d2 o d1) @{thm notnotD}
210.323 + val dnegI = precompose (single o d1) @{lemma "P ==> ~~P" by fast}
210.324 + fun as_dneg f t = f (@{term Not} $ (@{term Not} $ t))
210.325 +
210.326 + fun dni f = list2 o apsnd f o Thm.dest_binop o f o d1
210.327 + val negIffE = precompose (dni d1) @{lemma "~(P = (~Q)) ==> Q = P" by fast}
210.328 + val negIffI = precompose (dni I) @{lemma "P = Q ==> ~(Q = (~P))" by fast}
210.329 + val iff_const = @{term "op = :: bool => _"}
210.330 + fun as_negIff f (@{term "op = :: bool => _"} $ t $ u) =
210.331 + f (@{term Not} $ (iff_const $ u $ (@{term Not} $ t)))
210.332 + | as_negIff _ _ = NONE
210.333 +in
210.334 +fun make_lit_tab thms = fold (Termtab.update o ` prop_of) thms Termtab.empty
210.335 +
210.336 +fun join is_conj tab t =
210.337 + let
210.338 + val comp = if is_conj then comp_conj else comp_disj
210.339 + val dest = if is_conj then dest_conj else dest_disj
210.340 +
210.341 + val lookup_lit = Termtab.lookup tab
210.342 + fun lookup_lit' t =
210.343 + (case t of
210.344 + @{term Not} $ (@{term Not} $ t) => (compose dnegI, lookup_lit t)
210.345 + | @{term Not} $ (@{term "op = :: bool => _"} $ t $ (@{term Not} $ u)) =>
210.346 + (compose negIffI, lookup_lit (iff_const $ u $ t))
210.347 + | @{term Not} $ ((eq as Const (@{const_name "op ="}, _)) $ t $ u) =>
210.348 + let fun rewr lit = lit COMP @{thm not_sym}
210.349 + in (rewr, lookup_lit (@{term Not} $ (eq $ u $ t))) end
210.350 + | _ =>
210.351 + (case as_dneg lookup_lit t of
210.352 + NONE => (compose negIffE, as_negIff lookup_lit t)
210.353 + | x => (compose dnegE, x)))
210.354 + fun join1 (s, t) =
210.355 + (case lookup_lit t of
210.356 + SOME lit => (s, lit)
210.357 + | NONE =>
210.358 + (case lookup_lit' t of
210.359 + (rewrite, SOME lit) => (s, rewrite lit)
210.360 + | (_, NONE) => (s, comp (pairself join1 (dest t)))))
210.361 + in snd (join1 (if is_conj then (false, t) else (true, t))) end
210.362 +end
210.363 +
210.364 +(** proving equality of conjunctions or disjunctions **)
210.365 +
210.366 +fun iff_intro thm1 thm2 = thm2 COMP (thm1 COMP @{thm iffI})
210.367 +
210.368 +local
210.369 + val cp1 = @{lemma "(~P) = (~Q) ==> P = Q" by simp}
210.370 + val cp2 = @{lemma "(~P) = Q ==> P = (~Q)" by fastsimp}
210.371 + val cp3 = @{lemma "P = (~Q) ==> (~P) = Q" by simp}
210.372 + val neg = Thm.capply @{cterm Not}
210.373 +in
210.374 +fun contrapos1 prove (ct, cu) = prove (neg ct, neg cu) COMP cp1
210.375 +fun contrapos2 prove (ct, cu) = prove (neg ct, Thm.dest_arg cu) COMP cp2
210.376 +fun contrapos3 prove (ct, cu) = prove (Thm.dest_arg ct, neg cu) COMP cp3
210.377 +end
210.378 +
210.379 +local
210.380 + fun prove_eq l r (cl, cr) =
210.381 + let
210.382 + fun explode is_conj = explode_thm is_conj true (l <> r) []
210.383 + fun make_tab is_conj thm = make_lit_tab (true_thm :: explode is_conj thm)
210.384 + fun prove is_conj ct tab = join is_conj tab (Thm.term_of ct)
210.385 +
210.386 + val thm1 = under_assumption (prove r cr o make_tab l) cl
210.387 + val thm2 = under_assumption (prove l cl o make_tab r) cr
210.388 + in iff_intro thm1 thm2 end
210.389 +
210.390 + datatype conj_disj = CONJ | DISJ | NCON | NDIS
210.391 + fun kind_of t =
210.392 + if is_conj t then CONJ
210.393 + else if is_disj t then DISJ
210.394 + else if is_neg' is_conj t then NCON
210.395 + else if is_neg' is_disj t then NDIS
210.396 + else CONJ (*allows to prove equalities with single literals on each side*)
210.397 +in
210.398 +fun prove_conj_disj_eq ct =
210.399 + let val cp = Thm.dest_binop ct
210.400 + in
210.401 + (case pairself (kind_of o Thm.term_of) cp of
210.402 + (CONJ, CONJ) => prove_eq true true cp
210.403 + | (CONJ, NDIS) => prove_eq true false cp
210.404 + | (DISJ, DISJ) => contrapos1 (prove_eq false false) cp
210.405 + | (DISJ, NCON) => contrapos2 (prove_eq false true) cp
210.406 + | (NCON, NCON) => contrapos1 (prove_eq true true) cp
210.407 + | (NCON, DISJ) => contrapos3 (prove_eq true false) cp
210.408 + | (NDIS, NDIS) => prove_eq false false cp
210.409 + | (NDIS, CONJ) => prove_eq false true cp)
210.410 + end
210.411 +end
210.412 +
210.413 +(** unfolding of distinct **)
210.414 +
210.415 +local
210.416 + val distinct1 = @{lemma "distinct [] == ~False" by simp}
210.417 + val distinct2 = @{lemma "distinct [x] == ~False" by simp}
210.418 + val distinct3 = @{lemma "distinct (x # xs) == x ~: set xs & distinct xs"
210.419 + by simp}
210.420 +
210.421 + val set1 = @{lemma "x ~: set [] == ~False" by simp}
210.422 + val set2 = @{lemma "x ~: set [y] == x ~= y" by simp}
210.423 + val set3 = @{lemma "x ~: set (y # ys) == x ~= y & x ~: set ys" by simp}
210.424 +
210.425 + fun binop_conv cv1 cv2 = Conv.combination_conv (Conv.arg_conv cv1) cv2
210.426 +
210.427 + fun unfold_conv rule1 rule2 rule3 sub_conv =
210.428 + let
210.429 + fun uconv ct =
210.430 + (Conv.rewr_conv rule1 else_conv
210.431 + Conv.rewr_conv rule2 else_conv
210.432 + (Conv.rewr_conv rule3 then_conv binop_conv sub_conv uconv)) ct
210.433 + in uconv end
210.434 +
210.435 + val set_conv = unfold_conv set1 set2 set3 Conv.all_conv
210.436 +in
210.437 +val unfold_distinct_conv = unfold_conv distinct1 distinct2 distinct3 set_conv
210.438 +end
210.439 +
210.440 +
210.441 +(* core proof rules *)
210.442 +
210.443 +datatype assms = Some of thm list | Many of thm Net.net
210.444 +
210.445 +val true_false = @{lemma "True == ~ False" by simp}
210.446 +
210.447 +local
210.448 + val TT_eq = @{lemma "(P = (~False)) == P" by simp}
210.449 + val remove_trigger = @{lemma "trigger t p == p"
210.450 + by (rule eq_reflection, rule trigger_def)}
210.451 + val remove_iff = @{lemma "p iff q == p = q"
210.452 + by (rule eq_reflection, rule iff_def)}
210.453 +
210.454 + fun with_context simpset ctxt = Simplifier.context ctxt simpset
210.455 +
210.456 + val prep_ss = with_context (Simplifier.empty_ss addsimps
210.457 + [@{thm Let_def}, remove_trigger, remove_iff, true_false, TT_eq])
210.458 +
210.459 + val TT_eq_conv = Conv.rewr_conv TT_eq
210.460 + val norm_conv = More_Conv.bottom_conv (K (Conv.try_conv TT_eq_conv))
210.461 +
210.462 + val threshold = 10
210.463 +
210.464 + val lookup = (fn Some thms => first_of thms | Many net => net_instance net)
210.465 + fun lookup_assm ctxt assms ct =
210.466 + (case lookup assms ct of
210.467 + SOME thm => thm
210.468 + | _ => z3_exn ("not asserted: " ^
210.469 + quote (Syntax.string_of_term ctxt (Thm.term_of ct))))
210.470 +in
210.471 +fun prepare_assms ctxt assms =
210.472 + let
210.473 + val rewrite = Conv.fconv_rule (Simplifier.rewrite (prep_ss ctxt))
210.474 + val thms = map rewrite assms
210.475 + in if length assms < threshold then Some thms else Many (thm_net_of thms) end
210.476 +
210.477 +fun asserted _ NONE ct = Thm (Thm.assume (T.mk_prop ct))
210.478 + | asserted ctxt (SOME assms) ct =
210.479 + Thm (with_conv (norm_conv ctxt) (lookup_assm ctxt assms) (T.mk_prop ct))
210.480 +end
210.481 +
210.482 +
210.483 +(** P ==> P = Q ==> Q or P ==> P --> Q ==> Q **)
210.484 +local
210.485 + val meta_iffD1 = @{lemma "P == Q ==> P ==> (Q::bool)" by simp}
210.486 + val meta_iffD1_c = precompose (list2 o Thm.dest_binop) meta_iffD1
210.487 +
210.488 + val iffD1_c = precompose (list2 o Thm.dest_binop o Thm.dest_arg) @{thm iffD1}
210.489 + val mp_c = precompose (list2 o Thm.dest_binop o Thm.dest_arg) @{thm mp}
210.490 +in
210.491 +fun mp (MetaEq thm) p = Thm (Thm.implies_elim (compose meta_iffD1_c thm) p)
210.492 + | mp p_q p =
210.493 + let
210.494 + val pq = thm_of p_q
210.495 + val thm = compose iffD1_c pq handle THM _ => compose mp_c pq
210.496 + in Thm (Thm.implies_elim thm p) end
210.497 +end
210.498 +
210.499 +
210.500 +(** and_elim: P1 & ... & Pn ==> Pi **)
210.501 +(** not_or_elim: ~(P1 | ... | Pn) ==> ~Pi **)
210.502 +local
210.503 + fun get_lit conj t (l, thm) =
210.504 + let val is_sublit_of = exists_lit conj (fn u => u aconv t)
210.505 + in if is_sublit_of (prop_of thm) then SOME (l, thm) else NONE end
210.506 +
210.507 + fun derive conj t lits idx ptab =
210.508 + let
210.509 + val (l, lit) = the (Termtab.get_first NONE (get_lit conj t) lits)
210.510 + val ls = explode_thm conj false false [t] lit
210.511 + val lits' = fold (Termtab.update o ` prop_of) ls (Termtab.delete l lits)
210.512 + fun upd (Sequent {hyps, vars, thm}) =
210.513 + Sequent {hyps=hyps, vars=vars, thm = Literals (thm_of thm, lits')}
210.514 + | upd p = p
210.515 + in (the (Termtab.lookup lits' t), Inttab.map_entry idx upd ptab) end
210.516 +
210.517 + val mk_tab = make_lit_tab o single
210.518 + val literals_of = (fn Literals (_, lits) => lits | p => mk_tab (thm_of p))
210.519 + fun lit_elim conj (p, idx) ct ptab =
210.520 + let val lits = literals_of p
210.521 + in
210.522 + (case Termtab.lookup lits (Thm.term_of ct) of
210.523 + SOME lit => (Thm lit, ptab)
210.524 + | NONE => apfst Thm (derive conj (Thm.term_of ct) lits idx ptab))
210.525 + end
210.526 +in
210.527 +val and_elim = lit_elim true
210.528 +val not_or_elim = lit_elim false
210.529 +end
210.530 +
210.531 +
210.532 +(** P1 ... Pn |- False ==> |- ~P1 | ... | ~Pn **)
210.533 +local
210.534 + fun step lit thm =
210.535 + Thm.implies_elim (Thm.implies_intr (Thm.cprop_of lit) thm) lit
210.536 + val explode_disj = explode_thm false false false
210.537 + fun intro hyps thm th = fold step (explode_disj hyps th) thm
210.538 +
210.539 + fun dest_ccontr ct = [Thm.dest_arg (Thm.dest_arg (Thm.dest_arg1 ct))]
210.540 + val ccontr = precompose dest_ccontr @{thm ccontr}
210.541 +in
210.542 +fun lemma thm ct =
210.543 + let
210.544 + val cu = Thm.capply @{cterm Not} ct
210.545 + val hyps = map_filter (try HOLogic.dest_Trueprop) (#hyps (Thm.rep_thm thm))
210.546 + in Thm (compose ccontr (under_assumption (intro hyps thm) cu)) end
210.547 +end
210.548 +
210.549 +
210.550 +(** \/{P1, ..., Pn, Q1, ..., Qn} & ~P1 & ... & ~Pn ==> \/{Q1, ..., Qn} **)
210.551 +local
210.552 + val explode_disj = explode_thm false true false and join_disj = join false
210.553 + fun unit thm thms th =
210.554 + let val t = @{term Not} $ prop_of thm and ts = map prop_of thms
210.555 + in join_disj (make_lit_tab (thms @ explode_disj ts th)) t end
210.556 +
210.557 + fun dest_arg2 ct = Thm.dest_arg (Thm.dest_arg ct)
210.558 + fun dest ct = list2 (pairself dest_arg2 (Thm.dest_binop ct))
210.559 + val contrapos = precompose dest @{lemma "(~P ==> ~Q) ==> Q ==> P" by fast}
210.560 +in
210.561 +fun unit_resolution thm thms ct =
210.562 + under_assumption (unit thm thms) (Thm.capply @{cterm Not} ct)
210.563 + |> Thm o discharge thm o compose contrapos
210.564 +end
210.565 +
210.566 +
210.567 +local
210.568 + val iff1 = @{lemma "P ==> P == (~ False)" by simp}
210.569 + val iff2 = @{lemma "~P ==> P == False" by simp}
210.570 +in
210.571 +fun iff_true thm = MetaEq (thm COMP iff1)
210.572 +fun iff_false thm = MetaEq (thm COMP iff2)
210.573 +end
210.574 +
210.575 +
210.576 +(** distributivity of | over & **)
210.577 +val distributivity = Thm o by_tac (Classical.fast_tac HOL_cs)
210.578 +
210.579 +
210.580 +(** Tseitin-like axioms **)
210.581 +local
210.582 + val disjI1 = @{lemma "(P ==> Q) ==> ~P | Q" by fast}
210.583 + val disjI2 = @{lemma "(~P ==> Q) ==> P | Q" by fast}
210.584 + val disjI3 = @{lemma "(~Q ==> P) ==> P | Q" by fast}
210.585 + val disjI4 = @{lemma "(Q ==> P) ==> P | ~Q" by fast}
210.586 +
210.587 + fun prove' conj1 conj2 ct2 thm =
210.588 + let val tab =
210.589 + make_lit_tab (true_thm :: explode_thm conj1 true (conj1 <> conj2) [] thm)
210.590 + in join conj2 tab (Thm.term_of ct2) end
210.591 +
210.592 + fun prove rule (ct1, conj1) (ct2, conj2) =
210.593 + under_assumption (prove' conj1 conj2 ct2) ct1 COMP rule
210.594 +
210.595 + fun prove_def_axiom ct =
210.596 + let val (ct1, ct2) = Thm.dest_binop ct
210.597 + in
210.598 + (case Thm.term_of ct1 of
210.599 + @{term Not} $ (@{term "op &"} $ _ $ _) =>
210.600 + prove disjI1 (Thm.dest_arg ct1, true) (ct2, true)
210.601 + | @{term "op &"} $ _ $ _ =>
210.602 + prove disjI3 (Thm.capply @{cterm Not} ct2, false) (ct1, true)
210.603 + | @{term Not} $ (@{term "op |"} $ _ $ _) =>
210.604 + prove disjI3 (Thm.capply @{cterm Not} ct2, false) (ct1, false)
210.605 + | @{term "op |"} $ _ $ _ =>
210.606 + prove disjI2 (Thm.capply @{cterm Not} ct1, false) (ct2, true)
210.607 + | Const (@{const_name distinct}, _) $ _ =>
210.608 + let
210.609 + fun dis_conv cv = Conv.arg_conv (Conv.arg1_conv cv)
210.610 + fun prv cu =
210.611 + let val (cu1, cu2) = Thm.dest_binop (Thm.dest_arg cu)
210.612 + in prove disjI4 (Thm.dest_arg cu2, true) (cu1, true) end
210.613 + in with_conv (dis_conv unfold_distinct_conv) prv (T.mk_prop ct) end
210.614 + | @{term Not} $ (Const (@{const_name distinct}, _) $ _) =>
210.615 + let
210.616 + fun dis_conv cv = Conv.arg_conv (Conv.arg1_conv (Conv.arg_conv cv))
210.617 + fun prv cu =
210.618 + let val (cu1, cu2) = Thm.dest_binop (Thm.dest_arg cu)
210.619 + in prove disjI1 (Thm.dest_arg cu1, true) (cu2, true) end
210.620 + in with_conv (dis_conv unfold_distinct_conv) prv (T.mk_prop ct) end
210.621 + | _ => raise CTERM ("prove_def_axiom", [ct]))
210.622 + end
210.623 +
210.624 + val ifI = @{lemma "(P ==> Q1) ==> (~P ==> Q2) ==> if P then Q1 else Q2"
210.625 + by simp}
210.626 + val ifE = @{lemma
210.627 + "(if P then Q1 else Q2) ==> (P --> Q1 ==> ~P --> Q2 ==> R) ==> R" by simp}
210.628 + val claset = HOL_cs addIs [ifI] addEs [ifE]
210.629 +in
210.630 +fun def_axiom ctxt ct =
210.631 + Thm (try_apply ctxt "def_axiom" [
210.632 + ("conj/disj", prove_def_axiom),
210.633 + ("fast", by_tac (Classical.fast_tac claset)),
210.634 + ("simp+fast", by_tac (Simplifier.simp_tac HOL_ss THEN_ALL_NEW
210.635 + Classical.fast_tac claset))] ct)
210.636 +end
210.637 +
210.638 +
210.639 +(** local definitions **)
210.640 +local
210.641 + val intro_rules = [
210.642 + @{lemma "n == P ==> (~n | P) & (n | ~P)" by simp},
210.643 + @{lemma "n == (if P then s else t) ==> (~P | n = s) & (P | n = t)"
210.644 + by simp},
210.645 + @{lemma "n == P ==> n = P" by (rule meta_eq_to_obj_eq)} ]
210.646 +
210.647 + val apply_rules = [
210.648 + @{lemma "(~n | P) & (n | ~P) ==> P == n" by (atomize(full)) fast},
210.649 + @{lemma "(~P | n = s) & (P | n = t) ==> (if P then s else t) == n"
210.650 + by (atomize(full)) fastsimp} ]
210.651 +
210.652 + val inst_rule = match_instantiate' Thm.dest_arg
210.653 +
210.654 + fun apply_rule ct =
210.655 + (case get_first (try (inst_rule (T.mk_prop ct))) intro_rules of
210.656 + SOME thm => thm
210.657 + | NONE => raise CTERM ("intro_def", [ct]))
210.658 +in
210.659 +fun intro_def ct = apsnd Thm (make_hyp_def (apply_rule ct))
210.660 +
210.661 +fun apply_def thm =
210.662 + get_first (try (fn rule => MetaEq (thm COMP rule))) apply_rules
210.663 + |> the_default (Thm thm)
210.664 +end
210.665 +
210.666 +
210.667 +local
210.668 + val quant_rules1 = ([
210.669 + @{lemma "(!!x. P x == Q) ==> ALL x. P x == Q" by simp},
210.670 + @{lemma "(!!x. P x == Q) ==> EX x. P x == Q" by simp}], [
210.671 + @{lemma "(!!x. P x == Q x) ==> ALL x. P x == ALL x. Q x" by simp},
210.672 + @{lemma "(!!x. P x == Q x) ==> EX x. P x == EX x. Q x" by simp}])
210.673 +
210.674 + val quant_rules2 = ([
210.675 + @{lemma "(!!x. ~P x == Q) ==> ~(ALL x. P x) == Q" by simp},
210.676 + @{lemma "(!!x. ~P x == Q) ==> ~(EX x. P x) == Q" by simp}], [
210.677 + @{lemma "(!!x. ~P x == Q x) ==> ~(ALL x. P x) == EX x. Q x" by simp},
210.678 + @{lemma "(!!x. ~P x == Q x) ==> ~(EX x. P x) == ALL x. Q x" by simp}])
210.679 +
210.680 + fun nnf_quant_tac thm (qs as (qs1, qs2)) i st = (
210.681 + Tactic.rtac thm ORELSE'
210.682 + (Tactic.match_tac qs1 THEN' nnf_quant_tac thm qs) ORELSE'
210.683 + (Tactic.match_tac qs2 THEN' nnf_quant_tac thm qs)) i st
210.684 +
210.685 + fun nnf_quant ctxt qs (p, (vars, _)) ct =
210.686 + as_meta_eq ct
210.687 + |> by_tac' (nnf_quant_tac (varify ctxt vars (meta_eq_of p)) qs)
210.688 +
210.689 + val nnf_rules = thm_net_of [@{thm not_not}]
210.690 +
210.691 + fun prove_nnf ctxt =
210.692 + try_apply ctxt "nnf" [
210.693 + ("conj/disj", prove_conj_disj_eq o Thm.dest_arg),
210.694 + ("rule", the o net_instance nnf_rules),
210.695 + ("tactic", by_tac' (Classical.best_tac HOL_cs))]
210.696 +in
210.697 +fun nnf ctxt ps ct =
210.698 + (case Thm.term_of ct of
210.699 + _ $ (l as Const _ $ Abs _) $ (r as Const _ $ Abs _) =>
210.700 + if l aconv r then MetaEq (Thm.reflexive (Thm.dest_arg ct))
210.701 + else MetaEq (nnf_quant ctxt quant_rules1 (hd ps) ct)
210.702 + | _ $ (@{term Not} $ (Const _ $ Abs _)) $ (Const _ $ Abs _) =>
210.703 + MetaEq (nnf_quant ctxt quant_rules2 (hd ps) ct)
210.704 + | _ =>
210.705 + let
210.706 + val eqs = map (Thm.symmetric o meta_eq_of o fst) ps
210.707 + val nnf_rewr_conv = Conv.arg_conv (Conv.arg_conv
210.708 + (More_Conv.top_sweep_conv (K (More_Conv.rewrs_conv eqs)) ctxt))
210.709 + in Thm (with_conv nnf_rewr_conv (prove_nnf ctxt) (T.mk_prop ct)) end)
210.710 +end
210.711 +
210.712 +
210.713 +(* equality proof rules *)
210.714 +
210.715 +(** t = t **)
210.716 +fun refl ct = MetaEq (Thm.reflexive (Thm.dest_arg ct))
210.717 +
210.718 +
210.719 +(** s = t ==> t = s **)
210.720 +local
210.721 + val symm_rule = @{lemma "s = t ==> t == s" by simp}
210.722 +in
210.723 +fun symm (MetaEq thm) = MetaEq (Thm.symmetric thm)
210.724 + | symm p = MetaEq (thm_of p COMP symm_rule)
210.725 +end
210.726 +
210.727 +
210.728 +(** s = t ==> t = u ==> s = u **)
210.729 +local
210.730 + val trans_rule = @{lemma "s = t ==> t = u ==> s == u" by simp}
210.731 +in
210.732 +fun trans (MetaEq thm) q = MetaEq (Thm.transitive thm (meta_eq_of q))
210.733 + | trans p (MetaEq thm) = MetaEq (Thm.transitive (meta_eq_of p) thm)
210.734 + | trans p q = MetaEq (thm_of q COMP (thm_of p COMP trans_rule))
210.735 +end
210.736 +
210.737 +
210.738 +(** t1 = s1 & ... & tn = sn ==> f t1 ... tn = f s1 .. sn
210.739 + (reflexive antecendents are droppped) **)
210.740 +local
210.741 + exception MONO
210.742 +
210.743 + fun prove_refl (ct, _) = Thm.reflexive ct
210.744 + fun prove_comb f g cp =
210.745 + let val ((ct1, ct2), (cu1, cu2)) = pairself Thm.dest_comb cp
210.746 + in Thm.combination (f (ct1, cu1)) (g (ct2, cu2)) end
210.747 + fun prove_arg f = prove_comb prove_refl f
210.748 +
210.749 + fun prove f cp = prove_comb (prove f) f cp handle CTERM _ => prove_refl cp
210.750 +
210.751 + fun prove_nary is_comb f =
210.752 + let
210.753 + fun prove (cp as (ct, _)) = f cp handle MONO =>
210.754 + if is_comb (Thm.term_of ct)
210.755 + then prove_comb (prove_arg prove) prove cp
210.756 + else prove_refl cp
210.757 + in prove end
210.758 +
210.759 + fun prove_list f n cp =
210.760 + if n = 0 then prove_refl cp
210.761 + else prove_comb (prove_arg f) (prove_list f (n-1)) cp
210.762 +
210.763 + fun with_length f (cp as (cl, _)) =
210.764 + f (length (HOLogic.dest_list (Thm.term_of cl))) cp
210.765 +
210.766 + fun prove_distinct f = prove_arg (with_length (prove_list f))
210.767 +
210.768 + fun prove_eq exn lookup cp =
210.769 + (case lookup (Logic.mk_equals (pairself Thm.term_of cp)) of
210.770 + SOME eq => eq
210.771 + | NONE => if exn then raise MONO else prove_refl cp)
210.772 + val prove_eq_exn = prove_eq true and prove_eq_safe = prove_eq false
210.773 +
210.774 + fun mono f (cp as (cl, _)) =
210.775 + (case Term.head_of (Thm.term_of cl) of
210.776 + @{term "op &"} => prove_nary is_conj (prove_eq_exn f)
210.777 + | @{term "op |"} => prove_nary is_disj (prove_eq_exn f)
210.778 + | Const (@{const_name distinct}, _) => prove_distinct (prove_eq_safe f)
210.779 + | _ => prove (prove_eq_safe f)) cp
210.780 +in
210.781 +fun monotonicity eqs ct =
210.782 + let
210.783 + val tab = map (` Thm.prop_of o meta_eq_of) eqs
210.784 + val lookup = AList.lookup (op aconv) tab
210.785 + val cp = Thm.dest_binop ct
210.786 + in MetaEq (prove_eq_exn lookup cp handle MONO => mono lookup cp) end
210.787 +end
210.788 +
210.789 +
210.790 +(** f a b = f b a **)
210.791 +local
210.792 + val rule = @{lemma "a = b == b = a" by (atomize(full)) (rule eq_commute)}
210.793 +in
210.794 +fun commutativity ct = MetaEq (match_instantiate (as_meta_eq ct) rule)
210.795 +end
210.796 +
210.797 +
210.798 +(* quantifier proof rules *)
210.799 +
210.800 +(** P ?x = Q ?x ==> (ALL x. P x) = (ALL x. Q x)
210.801 + P ?x = Q ?x ==> (EX x. P x) = (EX x. Q x) **)
210.802 +local
210.803 + val rules = [
210.804 + @{lemma "(!!x. P x == Q x) ==> (EX x. P x) == (EX x. Q x)" by simp},
210.805 + @{lemma "(!!x. P x == Q x) ==> (ALL x. P x) == (ALL x. Q x)" by simp}]
210.806 +in
210.807 +fun quant_intro ctxt (p, (vars, _)) ct =
210.808 + let
210.809 + val rules' = varify ctxt vars (meta_eq_of p) :: rules
210.810 + val cu = as_meta_eq ct
210.811 + in MetaEq (by_tac' (REPEAT_ALL_NEW (Tactic.match_tac rules')) cu) end
210.812 +end
210.813 +
210.814 +
210.815 +(** |- ((ALL x. P x) | Q) = (ALL x. P x | Q) **)
210.816 +val pull_quant =
210.817 + Thm o by_tac (Tactic.rtac @{thm refl} ORELSE' Simplifier.simp_tac HOL_ss)
210.818 +
210.819 +
210.820 +(** |- (ALL x. P x & Q x) = ((ALL x. P x) & (ALL x. Q x)) **)
210.821 +val push_quant =
210.822 + Thm o by_tac (Tactic.rtac @{thm refl} ORELSE' Simplifier.simp_tac HOL_ss)
210.823 +
210.824 +
210.825 +(**
210.826 + |- (ALL x1 ... xn y1 ... yn. P x1 ... xn) = (ALL x1 ... xn. P x1 ... xn)
210.827 +**)
210.828 +local
210.829 + val elim_all = @{lemma "ALL x. P == P" by simp}
210.830 + val elim_ex = @{lemma "EX x. P == P" by simp}
210.831 +
210.832 + val rule = (fn @{const_name All} => elim_all | _ => elim_ex)
210.833 +
210.834 + fun collect xs tp =
210.835 + if (op aconv) tp then rev xs
210.836 + else
210.837 + (case tp of
210.838 + (Const (q, _) $ Abs (_, _, l), r' as Const _ $ Abs (_, _, r)) =>
210.839 + if l aconv r then rev xs
210.840 + else if Term.loose_bvar1 (l, 0) then collect (NONE :: xs) (l, r)
210.841 + else collect (SOME (rule q) :: xs) (Term.incr_bv (~1, 0, l), r')
210.842 + | (Const (q, _) $ Abs (_, _, l), r) =>
210.843 + collect (SOME (rule q) :: xs) (Term.incr_bv (~1, 0, l), r)
210.844 + | (l, r) => raise TERM ("elim_unused", [l, r]))
210.845 +
210.846 + fun elim _ [] ct = Conv.all_conv ct
210.847 + | elim ctxt (x::xs) ct =
210.848 + (case x of
210.849 + SOME rule => Conv.rewr_conv rule then_conv elim ctxt xs
210.850 + | _ => Conv.arg_conv (Conv.abs_conv (fn (_,cx) => elim cx xs) ctxt)) ct
210.851 +in
210.852 +fun elim_unused_vars ctxt ct =
210.853 + let val (lhs, rhs) = Thm.dest_binop ct
210.854 + in MetaEq (elim ctxt (collect [] (Thm.term_of lhs, Thm.term_of rhs)) lhs) end
210.855 +end
210.856 +
210.857 +
210.858 +(**
210.859 + |- (ALL x1 ... xn. ~(x1 = t1 & ... xn = tn) | P x1 ... xn) = P t1 ... tn
210.860 +**)
210.861 +val dest_eq_res = Thm o by_tac (Simplifier.simp_tac HOL_ss)
210.862 +
210.863 +
210.864 +(** |- ~(ALL x1...xn. P x1...xn) | P a1...an **)
210.865 +local
210.866 + val rule = @{lemma "~ P x | Q ==> ~(ALL x. P x) | Q" by fast}
210.867 +in
210.868 +val quant_inst = Thm o by_tac (
210.869 + REPEAT_ALL_NEW (Tactic.match_tac [rule])
210.870 + THEN' Tactic.rtac @{thm excluded_middle})
210.871 +end
210.872 +
210.873 +
210.874 +(** c = SOME x. P x |- (EX x. P x) = P c
210.875 + c = SOME x. ~ P x |- ~(ALL x. P x) = ~ P c **)
210.876 +local
210.877 + val elim_ex = @{lemma "EX x. P == P" by simp}
210.878 + val elim_all = @{lemma "~ (ALL x. P) == ~P" by simp}
210.879 + val sk_ex = @{lemma "c == SOME x. P x ==> EX x. P x == P c"
210.880 + by simp (intro eq_reflection some_eq_ex[symmetric])}
210.881 + val sk_all = @{lemma "c == SOME x. ~ P x ==> ~(ALL x. P x) == ~ P c"
210.882 + by (simp only: not_all) (intro eq_reflection some_eq_ex[symmetric])}
210.883 + val sk_ex_rule = ((sk_ex, I), elim_ex)
210.884 + and sk_all_rule = ((sk_all, Thm.dest_arg), elim_all)
210.885 +
210.886 + fun dest f sk_rule =
210.887 + Thm.dest_comb (f (Thm.dest_arg (Thm.dest_arg (Thm.cprop_of sk_rule))))
210.888 + fun type_of f sk_rule = Thm.ctyp_of_term (snd (dest f sk_rule))
210.889 + fun inst_sk (sk_rule, f) p c =
210.890 + Thm.instantiate ([(type_of f sk_rule, Thm.ctyp_of_term c)], []) sk_rule
210.891 + |> (fn sk' => Thm.instantiate ([], (list2 (dest f sk') ~~ [p, c])) sk')
210.892 + |> Conv.fconv_rule (Thm.beta_conversion true)
210.893 +
210.894 + fun kind (Const (q as @{const_name Ex}, _) $ _) = (sk_ex_rule, q, I, I)
210.895 + | kind (@{term Not} $ (Const (q as @{const_name All}, _) $ _)) =
210.896 + (sk_all_rule, q, Thm.dest_arg, Thm.capply @{cterm Not})
210.897 + | kind _ = z3_exn "skolemize: no quantifier"
210.898 +
210.899 + fun bodies_of ctxt ct =
210.900 + let
210.901 + val (rule, q, dest, make) = kind (Thm.term_of ct)
210.902 +
210.903 + fun inst_abs idx T cbs ct =
210.904 + let
210.905 + val cv = certify_var ctxt idx T
210.906 + val cu = Drule.beta_conv (Thm.dest_arg ct) cv
210.907 + in dest_body (idx + 1) ((cv, Thm.dest_arg ct) :: cbs) cu end
210.908 + and dest_body idx cbs ct =
210.909 + (case Thm.term_of ct of
210.910 + Const (qname, _) $ Abs (_, T, _) =>
210.911 + if q = qname then inst_abs idx T cbs ct else (make ct, rev cbs)
210.912 + | _ => (make ct, rev cbs))
210.913 + in (rule, dest_body (#maxidx (Thm.rep_cterm ct) + 1) [] (dest ct)) end
210.914 +
210.915 + fun transitive f thm = Thm.transitive thm (f (Thm.rhs_of thm))
210.916 +
210.917 + fun sk_step (rule, elim) (cv, mct, cb) (is, thm) =
210.918 + (case mct of
210.919 + SOME ct =>
210.920 + make_hyp_def (inst_sk rule (Thm.instantiate_cterm ([], is) cb) ct)
210.921 + |> apsnd (pair ((cv, ct) :: is) o Thm.transitive thm)
210.922 + | NONE => ([], (is, transitive (Conv.rewr_conv elim) thm)))
210.923 +in
210.924 +fun skolemize ctxt ct =
210.925 + let
210.926 + val (lhs, rhs) = Thm.dest_binop ct
210.927 + val (rule, (cu, cbs)) = bodies_of ctxt lhs
210.928 + val ctab = snd (Thm.first_order_match (cu, rhs))
210.929 + fun lookup_var (cv, cb) = (cv, AList.lookup (op aconvc) ctab cv, cb)
210.930 + in
210.931 + ([], Thm.reflexive lhs)
210.932 + |> fold_map (sk_step rule) (map lookup_var cbs)
210.933 + |> apfst (rev o flat) o apsnd (MetaEq o snd)
210.934 + end
210.935 +end
210.936 +
210.937 +
210.938 +(* theory proof rules *)
210.939 +
210.940 +(** prove linear arithmetic problems via generalization **)
210.941 +local
210.942 + val is_numeral = can HOLogic.dest_number
210.943 + fun is_number (Const (@{const_name uminus}, _) $ t) = is_numeral t
210.944 + | is_number t = is_numeral t
210.945 +
210.946 + local
210.947 + val int_distrib = @{lemma "n * (x + y) == n * x + n * (y::int)"
210.948 + by (simp add: int_distrib)}
210.949 + val real_distrib = @{lemma "n * (x + y) == n * x + n * (y::real)"
210.950 + by (simp add: mult.add_right)}
210.951 + val int_assoc = @{lemma "n * (m * x) == (n * m) * (x::int)" by linarith}
210.952 + val real_assoc = @{lemma "n * (m * x) == (n * m) * (x::real)" by linarith}
210.953 +
210.954 + val number_of_cong = @{lemma
210.955 + "number_of x * number_of y == (number_of (x * y) :: int)"
210.956 + "number_of x * number_of y == (number_of (x * y) :: real)"
210.957 + by simp_all}
210.958 + val reduce_ss = HOL_ss addsimps @{thms mult_bin_simps}
210.959 + addsimps @{thms add_bin_simps} addsimps @{thms succ_bin_simps}
210.960 + addsimps @{thms minus_bin_simps} addsimps @{thms pred_bin_simps}
210.961 + addsimps number_of_cong
210.962 + val reduce_conv = Simplifier.rewrite reduce_ss
210.963 +
210.964 + fun apply_conv distrib assoc u ct =
210.965 + ((case u of
210.966 + Const (@{const_name times}, _) $ n $ _ =>
210.967 + if is_number n
210.968 + then Conv.rewr_conv assoc then_conv Conv.arg1_conv reduce_conv
210.969 + else Conv.rewr_conv distrib
210.970 + | _ => Conv.rewr_conv distrib)
210.971 + then_conv Conv.binop_conv (Conv.try_conv distrib_conv)) ct
210.972 +
210.973 + and distrib_conv ct =
210.974 + (case Thm.term_of ct of
210.975 + @{term "op * :: int => _"} $ n $ u =>
210.976 + if is_number n then apply_conv int_distrib int_assoc u
210.977 + else Conv.no_conv
210.978 + | @{term "op * :: real => _"} $ n $ u =>
210.979 + if is_number n then apply_conv real_distrib real_assoc u
210.980 + else Conv.no_conv
210.981 + | _ => Conv.no_conv) ct
210.982 + in
210.983 + val all_distrib_conv = More_Conv.top_sweep_conv (K distrib_conv)
210.984 + end
210.985 +
210.986 + local
210.987 + fun make_ctxt ctxt = (ctxt, Ctermtab.empty, 1)
210.988 + fun fresh ct (cx as (ctxt, tab, idx)) =
210.989 + (case Ctermtab.lookup tab ct of
210.990 + SOME cv => (cv, cx)
210.991 + | NONE =>
210.992 + let val cv = certify_var ctxt idx (#T (Thm.rep_cterm ct))
210.993 + in (cv, (ctxt, Ctermtab.update (ct, cv) tab, idx + 1)) end)
210.994 +
210.995 + fun fold_map_op f ct =
210.996 + let val (cf, cu) = Thm.dest_comb ct
210.997 + in f cu #>> Thm.capply cf end
210.998 +
210.999 + fun fold_map_binop f1 f2 ct =
210.1000 + let val ((cf, cu1), cu2) = apfst Thm.dest_comb (Thm.dest_comb ct)
210.1001 + in f1 cu1 ##>> f2 cu2 #>> uncurry (Thm.mk_binop cf) end
210.1002 +
210.1003 + fun mult f1 f2 ct t u =
210.1004 + if is_number t
210.1005 + then if is_number u then pair ct else fold_map_binop f1 f2 ct
210.1006 + else fresh ct
210.1007 +
210.1008 + fun poly ct =
210.1009 + (case Thm.term_of ct of
210.1010 + Const (@{const_name plus}, _) $ _ $ _ => fold_map_binop poly poly ct
210.1011 + | Const (@{const_name minus}, _) $ _ $ _ => fold_map_binop poly poly ct
210.1012 + | Const (@{const_name times}, _) $ t $ u => mult pair fresh ct t u
210.1013 + | Const (@{const_name div}, _) $ t $ u => mult fresh pair ct t u
210.1014 + | Const (@{const_name mod}, _) $ t $ u => mult fresh pair ct t u
210.1015 + | t => if is_number t then pair ct else fresh ct)
210.1016 +
210.1017 + val ineq_ops = [@{term "op = :: int => _"}, @{term "op < :: int => _"},
210.1018 + @{term "op <= :: int => _"}, @{term "op = :: real => _"},
210.1019 + @{term "op < :: real => _"}, @{term "op <= :: real => _"}]
210.1020 + fun ineq ct =
210.1021 + (case Thm.term_of ct of
210.1022 + t $ _ $ _ =>
210.1023 + if member (op =) ineq_ops t then fold_map_binop poly poly ct
210.1024 + else raise CTERM ("arith_lemma", [ct])
210.1025 + | @{term Not} $ (t $ _ $ _) =>
210.1026 + if member (op =) ineq_ops t
210.1027 + then fold_map_op (fold_map_binop poly poly) ct
210.1028 + else raise CTERM ("arith_lemma", [ct])
210.1029 + | _ => raise CTERM ("arith_lemma", [ct]))
210.1030 +
210.1031 + fun conj ct =
210.1032 + (case Thm.term_of ct of
210.1033 + @{term "op &"} $ _ $ _ => fold_map_binop conj conj ct
210.1034 + | @{term "~False"} => pair ct
210.1035 + | _ => ineq ct)
210.1036 +
210.1037 + fun disj ct =
210.1038 + (case Thm.term_of ct of
210.1039 + @{term "op |"} $ _ $ _ => fold_map_binop disj disj ct
210.1040 + | @{term False} => pair ct
210.1041 + | _ => conj ct)
210.1042 + in
210.1043 + fun prove_arith ctxt thms ct =
210.1044 + let
210.1045 + val (goal, (_, tab, _)) =
210.1046 + make_ctxt ctxt
210.1047 + |> fold_map (fold_map_op ineq o Thm.cprop_of) thms
210.1048 + ||>> fold_map_op disj ct
210.1049 + |>> uncurry (fold_rev (Thm.mk_binop @{cterm "op ==>"}))
210.1050 + in
210.1051 + Goal.prove_internal [] goal (fn _ => Arith_Data.arith_tac ctxt 1)
210.1052 + |> Thm.instantiate ([], map swap (Ctermtab.dest tab))
210.1053 + |> fold (fn th1 => fn th2 => Thm.implies_elim th2 th1) thms
210.1054 + end
210.1055 + end
210.1056 +in
210.1057 +fun arith_lemma ctxt thms ct =
210.1058 + let val thms' = map (Conv.fconv_rule (all_distrib_conv ctxt)) thms
210.1059 + in with_conv (all_distrib_conv ctxt) (prove_arith ctxt thms') ct end
210.1060 +end
210.1061 +
210.1062 +(** theory lemmas: linear arithmetic, arrays **)
210.1063 +local
210.1064 + val array_ss = HOL_ss addsimps @{thms array_rules}
210.1065 + fun array_tac thms =
210.1066 + Tactic.cut_facts_tac thms
210.1067 + THEN' Simplifier.asm_full_simp_tac array_ss
210.1068 +
210.1069 + fun full_arith_tac ctxt thms =
210.1070 + Tactic.cut_facts_tac thms
210.1071 + THEN' Arith_Data.arith_tac ctxt
210.1072 +in
210.1073 +fun th_lemma ctxt thms ct =
210.1074 + Thm (try_apply ctxt "th-lemma" [
210.1075 + ("abstract arith", arith_lemma ctxt thms),
210.1076 + ("array", by_tac' (array_tac thms)),
210.1077 + ("full arith", by_tac' (full_arith_tac ctxt thms))] (T.mk_prop ct))
210.1078 +end
210.1079 +
210.1080 +
210.1081 +(** rewriting: prove equalities:
210.1082 + * ACI of conjunction/disjunction
210.1083 + * contradiction, excluded middle
210.1084 + * logical rewriting rules (for negation, implication, equivalence,
210.1085 + distinct)
210.1086 + * normal forms for polynoms (integer/real arithmetic)
210.1087 + * quantifier elimination over linear arithmetic
210.1088 + * ... ? **)
210.1089 +structure Z3_Rewrite_Rules =
210.1090 +struct
210.1091 + val name = "z3_rewrite"
210.1092 + val descr = "Z3 rewrite rules used in proof reconstruction"
210.1093 +
210.1094 + structure Data = GenericDataFun
210.1095 + (
210.1096 + type T = thm Net.net
210.1097 + val empty = Net.empty
210.1098 + val extend = I
210.1099 + fun merge _ = Net.merge Thm.eq_thm_prop
210.1100 + )
210.1101 + val get = Data.get o Context.Proof
210.1102 +
210.1103 + val entry = ` Thm.prop_of o Simplifier.rewrite_rule [true_false]
210.1104 + val eq = Thm.eq_thm_prop
210.1105 + val ins = Net.insert_term eq o entry and del = Net.delete_term eq o entry
210.1106 + fun insert thm net = ins thm net handle Net.INSERT => net
210.1107 + fun delete thm net = del thm net handle Net.DELETE => net
210.1108 +
210.1109 + val add = Thm.declaration_attribute (Data.map o insert)
210.1110 + val del = Thm.declaration_attribute (Data.map o delete)
210.1111 + val setup = Attrib.setup (Binding.name name) (Attrib.add_del add del) descr
210.1112 +end
210.1113 +
210.1114 +local
210.1115 + val contra_rule = @{lemma "P ==> ~P ==> False" by (rule notE)}
210.1116 + fun contra_left conj thm =
210.1117 + let
210.1118 + fun make_tab xs = fold Termtab.update xs Termtab.empty
210.1119 + val tab = make_tab (explode_term conj true (prop_of thm))
210.1120 + fun pnlits (t, nrs) =
210.1121 + (case t of
210.1122 + @{term Not} $ u => Termtab.lookup tab u |> Option.map (pair nrs)
210.1123 + | _ => NONE)
210.1124 + in
210.1125 + (case Termtab.lookup tab @{term False} of
210.1126 + SOME rs => extract_lit thm rs
210.1127 + | NONE =>
210.1128 + pairself (extract_lit thm) (the (Termtab.get_first NONE pnlits tab))
210.1129 + |> (fn (nlit, plit) => nlit COMP (plit COMP contra_rule)))
210.1130 + end
210.1131 + val falseE_v = Thm.dest_arg (Thm.dest_arg (Thm.cprop_of @{thm FalseE}))
210.1132 + fun contra_right ct = Thm.instantiate ([], [(falseE_v, ct)]) @{thm FalseE}
210.1133 + fun contradiction conj ct =
210.1134 + iff_intro (under_assumption (contra_left conj) ct) (contra_right ct)
210.1135 +
210.1136 + fun conj_disj ct =
210.1137 + let
210.1138 + val cp as (cl, _) = Thm.dest_binop (Thm.dest_arg ct)
210.1139 + val (lhs, rhs) = pairself Thm.term_of cp
210.1140 + in
210.1141 + if is_conj lhs andalso rhs = @{term False}
210.1142 + then contradiction true cl
210.1143 + else if is_disj lhs andalso rhs = @{term "~False"}
210.1144 + then contrapos2 (contradiction false o fst) cp
210.1145 + else prove_conj_disj_eq (Thm.dest_arg ct)
210.1146 + end
210.1147 +
210.1148 + val distinct =
210.1149 + let val try_unfold = Conv.try_conv unfold_distinct_conv
210.1150 + in with_conv (Conv.arg_conv (Conv.binop_conv try_unfold)) conj_disj end
210.1151 +
210.1152 + val nnf_neg_rule = @{lemma "~~P == P" by fastsimp}
210.1153 + val nnf_cd_rules = @{lemma "~(P | Q) == ~P & ~Q" "~(P & Q) == ~P | ~Q"
210.1154 + by fastsimp+}
210.1155 +
210.1156 + fun nnf_conv ct = Conv.try_conv (
210.1157 + (Conv.rewr_conv nnf_neg_rule then_conv nnf_conv) else_conv
210.1158 + (More_Conv.rewrs_conv nnf_cd_rules then_conv Conv.binop_conv nnf_conv)) ct
210.1159 + val iffI_rule = @{lemma "~P | Q ==> ~Q | P ==> P = Q" by fast}
210.1160 + fun arith_tac ctxt = CSUBGOAL (fn (goal, i) =>
210.1161 + let val prep_then = with_conv (Conv.arg_conv (Conv.binop_conv nnf_conv))
210.1162 + in Tactic.rtac (prep_then (arith_lemma ctxt []) goal) i end)
210.1163 + fun arith_eq_tac ctxt =
210.1164 + Tactic.rtac iffI_rule THEN_ALL_NEW arith_tac ctxt
210.1165 + ORELSE' arith_tac ctxt
210.1166 +
210.1167 + val simpset = HOL_ss addsimps @{thms array_rules}
210.1168 + addsimps @{thms ring_distribs} addsimps @{thms field_eq_simps}
210.1169 + addsimps @{thms arith_special} addsimps @{thms less_bin_simps}
210.1170 + addsimps @{thms le_bin_simps} addsimps @{thms eq_bin_simps}
210.1171 + addsimps @{thms add_bin_simps} addsimps @{thms succ_bin_simps}
210.1172 + addsimps @{thms minus_bin_simps} addsimps @{thms pred_bin_simps}
210.1173 + addsimps @{thms mult_bin_simps} addsimps @{thms iszero_simps}
210.1174 + addsimprocs [
210.1175 + Simplifier.simproc @{theory} "fast_int_arith" [
210.1176 + "(m::int) < n", "(m::int) <= n", "(m::int) = n"] (K Lin_Arith.simproc),
210.1177 + Simplifier.simproc @{theory} "fast_real_arith" [
210.1178 + "(m::real) < n", "(m::real) <= n", "(m::real) = n"]
210.1179 + (K Lin_Arith.simproc)]
210.1180 + val simp_tac = CHANGED o Simplifier.simp_tac simpset
210.1181 + ORELSE' Classical.best_tac HOL_cs
210.1182 +in
210.1183 +fun rewrite ctxt thms ct =
210.1184 + let val rules_net = Z3_Rewrite_Rules.get ctxt
210.1185 + in
210.1186 + Thm (try_apply ctxt "rewrite" [
210.1187 + ("schematic rule", the o net_instance rules_net),
210.1188 + ("conj/disj", conj_disj),
210.1189 + ("distinct", distinct),
210.1190 + ("arith", by_tac' (arith_eq_tac ctxt)),
210.1191 + ("classical", by_tac' (Classical.best_tac HOL_cs)),
210.1192 + ("simp", by_tac' simp_tac),
210.1193 + ("full arith", by_tac' (Arith_Data.arith_tac ctxt))] (T.mk_prop ct))
210.1194 + end
210.1195 +end
210.1196 +
210.1197 +
210.1198 +(* tracing and debugging *)
210.1199 +
210.1200 +fun check idx r ct ((_, p), _) =
210.1201 + let val thm = thm_of p |> tap (Thm.join_proofs o single)
210.1202 + in
210.1203 + if (Thm.cprop_of thm) aconvc (T.mk_prop ct) then ()
210.1204 + else z3_exn ("proof step failed: " ^ quote (string_of_rule r) ^
210.1205 + " (#" ^ string_of_int idx ^ ")")
210.1206 + end
210.1207 +
210.1208 +local
210.1209 + fun trace_before ctxt idx (r, ps, ct) =
210.1210 + Pretty.string_of (
210.1211 + Pretty.big_list ("#" ^ string_of_int idx ^ ": " ^ string_of_rule r) [
210.1212 + Pretty.big_list "assumptions:"
210.1213 + (map (Display.pretty_thm ctxt o thm_of o fst) ps),
210.1214 + Pretty.block [Pretty.str "goal: ",
210.1215 + Syntax.pretty_term ctxt (Thm.term_of ct)]])
210.1216 +
210.1217 + fun trace_after ctxt ((_, p), _) = Pretty.string_of (Pretty.block
210.1218 + [Pretty.str "result: ", Display.pretty_thm ctxt (thm_of p)])
210.1219 +in
210.1220 +fun trace_rule ctxt idx prove r ps ct ptab =
210.1221 + let
210.1222 + val _ = SMT_Solver.trace_msg ctxt (trace_before ctxt idx) (r, ps, ct)
210.1223 + val result = prove r ps ct ptab
210.1224 + val _ = SMT_Solver.trace_msg ctxt (trace_after ctxt) result
210.1225 + in result end
210.1226 +end
210.1227 +
210.1228 +
210.1229 +(* overall reconstruction procedure *)
210.1230 +
210.1231 +fun not_supported r =
210.1232 + z3_exn ("proof rule not implemented: " ^ quote (string_of_rule r))
210.1233 +
210.1234 +fun prove ctxt assms =
210.1235 + let
210.1236 + val prems = Option.map (prepare_assms ctxt) assms
210.1237 +
210.1238 + fun step r ps ct ptab =
210.1239 + (case (r, ps) of
210.1240 + (* core rules *)
210.1241 + (TrueAxiom, _) => (([], Thm true_thm), ptab)
210.1242 + | (Asserted, _) => (([], asserted ctxt prems ct), ptab)
210.1243 + | (Goal, _) => (([], asserted ctxt prems ct), ptab)
210.1244 + | (ModusPonens, [(p, _), (q, _)]) => (([], mp q (thm_of p)), ptab)
210.1245 + | (ModusPonensOeq, [(p, _), (q, _)]) => (([], mp q (thm_of p)), ptab)
210.1246 + | (AndElim, [(p, (_, i))]) => apfst (pair []) (and_elim (p, i) ct ptab)
210.1247 + | (NotOrElim, [(p, (_, i))]) =>
210.1248 + apfst (pair []) (not_or_elim (p, i) ct ptab)
210.1249 + | (Hypothesis, _) => (([], Thm (Thm.assume (T.mk_prop ct))), ptab)
210.1250 + | (Lemma, [(p, _)]) => (([], lemma (thm_of p) ct), ptab)
210.1251 + | (UnitResolution, (p, _) :: ps) =>
210.1252 + (([], unit_resolution (thm_of p) (map (thm_of o fst) ps) ct), ptab)
210.1253 + | (IffTrue, [(p, _)]) => (([], iff_true (thm_of p)), ptab)
210.1254 + | (IffFalse, [(p, _)]) => (([], iff_false (thm_of p)), ptab)
210.1255 + | (Distributivity, _) => (([], distributivity ct), ptab)
210.1256 + | (DefAxiom, _) => (([], def_axiom ctxt ct), ptab)
210.1257 + | (IntroDef, _) => (intro_def ct, ptab)
210.1258 + | (ApplyDef, [(p, _)]) => (([], apply_def (thm_of p)), ptab)
210.1259 + | (IffOeq, [(p, _)]) => (([], p), ptab)
210.1260 + | (NnfPos, _) => (([], nnf ctxt ps ct), ptab)
210.1261 + | (NnfNeg, _) => (([], nnf ctxt ps ct), ptab)
210.1262 +
210.1263 + (* equality rules *)
210.1264 + | (Reflexivity, _) => (([], refl ct), ptab)
210.1265 + | (Symmetry, [(p, _)]) => (([], symm p), ptab)
210.1266 + | (Transitivity, [(p, _), (q, _)]) => (([], trans p q), ptab)
210.1267 + | (Monotonicity, _) => (([], monotonicity (map fst ps) ct), ptab)
210.1268 + | (Commutativity, _) => (([], commutativity ct), ptab)
210.1269 +
210.1270 + (* quantifier rules *)
210.1271 + | (QuantIntro, [p]) => (([], quant_intro ctxt p ct), ptab)
210.1272 + | (PullQuant, _) => (([], pull_quant ct), ptab)
210.1273 + | (PushQuant, _) => (([], push_quant ct), ptab)
210.1274 + | (ElimUnusedVars, _) => (([], elim_unused_vars ctxt ct), ptab)
210.1275 + | (DestEqRes, _) => (([], dest_eq_res ct), ptab)
210.1276 + | (QuantInst, _) => (([], quant_inst ct), ptab)
210.1277 + | (Skolemize, _) => (skolemize ctxt ct, ptab)
210.1278 +
210.1279 + (* theory rules *)
210.1280 + | (ThLemma, _) => (([], th_lemma ctxt (map (thm_of o fst) ps) ct), ptab)
210.1281 + | (Rewrite, _) => (([], rewrite ctxt [] ct), ptab)
210.1282 + | (RewriteStar, ps) =>
210.1283 + (([], rewrite ctxt (map (thm_of o fst) ps) ct), ptab)
210.1284 +
210.1285 + | (NnfStar, _) => not_supported r
210.1286 + | (CnfStar, _) => not_supported r
210.1287 + | (TransitivityStar, _) => not_supported r
210.1288 + | (PullQuantStar, _) => not_supported r
210.1289 +
210.1290 + | _ => z3_exn ("Proof rule " ^ quote (string_of_rule r) ^
210.1291 + " has an unexpected number of arguments."))
210.1292 +
210.1293 + fun eq_hyp (ct, cu) = Thm.dest_arg1 ct aconvc Thm.dest_arg1 cu
210.1294 +
210.1295 + fun conclude idx rule prop ((hypss, ps), ptab) =
210.1296 + trace_rule ctxt idx step rule ps prop ptab
210.1297 + |> Config.get ctxt SMT_Solver.trace ? tap (check idx rule prop)
210.1298 + |>> apfst (distinct eq_hyp o fold append hypss)
210.1299 +
210.1300 + fun add_sequent idx vars (hyps, thm) ptab =
210.1301 + let val s = Sequent {hyps=hyps, vars=vars, thm=thm}
210.1302 + in ((hyps, (thm, vars)), Inttab.update (idx, s) ptab) end
210.1303 +
210.1304 + fun lookup idx ptab =
210.1305 + (case Inttab.lookup ptab idx of
210.1306 + SOME (Unproved {rule, subs, vars, prop}) =>
210.1307 + fold_map lookup subs ptab
210.1308 + |>> split_list
210.1309 + |>> apsnd (map2 (fn idx => fn (p, vs) => (p, (vs, idx))) subs)
210.1310 + |> conclude idx rule prop
210.1311 + |-> add_sequent idx vars
210.1312 + | SOME (Sequent {hyps, vars, thm}) => ((hyps, (thm, vars)), ptab)
210.1313 + | NONE => z3_exn ("unknown proof id: " ^ quote (string_of_int idx)))
210.1314 +
210.1315 + fun result (hyps, (thm, _)) =
210.1316 + fold SMT_Normalize.discharge_definition hyps (thm_of thm)
210.1317 +
210.1318 + in (fn ptab => fn idx => result (fst (lookup idx ptab))) end
210.1319 +
210.1320 +val setup = Z3_Rewrite_Rules.setup
210.1321 +
210.1322 +end
211.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
211.2 +++ b/src/HOL/SMT/Tools/z3_proof_terms.ML Tue Oct 20 10:11:30 2009 +0200
211.3 @@ -0,0 +1,246 @@
211.4 +(* Title: HOL/SMT/Tools/z3_proof_terms.ML
211.5 + Author: Sascha Boehme, TU Muenchen
211.6 +
211.7 +Reconstruction functions for terms occurring in Z3 proofs.
211.8 +*)
211.9 +
211.10 +signature Z3_PROOF_TERMS =
211.11 +sig
211.12 + val mk_prop: Thm.cterm -> Thm.cterm
211.13 + val mk_meta_eq: Thm.cterm -> Thm.cterm -> Thm.cterm
211.14 +
211.15 + type preterm
211.16 +
211.17 + val compile: theory -> Name.context -> preterm -> Thm.cterm * Thm.cterm list
211.18 +
211.19 + val mk_bound: theory -> int -> typ -> preterm
211.20 + val mk_fun: Thm.cterm -> preterm list -> preterm
211.21 + val mk_forall: theory -> string * typ -> preterm -> preterm
211.22 + val mk_exists: theory -> string * typ -> preterm -> preterm
211.23 +
211.24 + val mk_true: preterm
211.25 + val mk_false: preterm
211.26 + val mk_not: preterm -> preterm
211.27 + val mk_and: preterm list -> preterm
211.28 + val mk_or: preterm list -> preterm
211.29 + val mk_implies: preterm -> preterm -> preterm
211.30 + val mk_iff: preterm -> preterm -> preterm
211.31 +
211.32 + val mk_eq: preterm -> preterm -> preterm
211.33 + val mk_if: preterm -> preterm -> preterm -> preterm
211.34 + val mk_distinct: preterm list -> preterm
211.35 +
211.36 + val mk_pat: preterm list -> preterm
211.37 + val mk_nopat: preterm list -> preterm
211.38 + val mk_trigger: preterm list -> preterm -> preterm
211.39 +
211.40 + val mk_access: preterm -> preterm -> preterm
211.41 + val mk_update: preterm -> preterm -> preterm -> preterm
211.42 +
211.43 + val mk_int_num: int -> preterm
211.44 + val mk_real_frac_num: int * int option -> preterm
211.45 + val mk_uminus: preterm -> preterm
211.46 + val mk_add: preterm -> preterm -> preterm
211.47 + val mk_sub: preterm -> preterm -> preterm
211.48 + val mk_mul: preterm -> preterm -> preterm
211.49 + val mk_int_div: preterm -> preterm -> preterm
211.50 + val mk_real_div: preterm -> preterm -> preterm
211.51 + val mk_rem: preterm -> preterm -> preterm
211.52 + val mk_mod: preterm -> preterm -> preterm
211.53 + val mk_lt: preterm -> preterm -> preterm
211.54 + val mk_le: preterm -> preterm -> preterm
211.55 +
211.56 + val wordT : int -> typ
211.57 + val mk_bv_num : theory -> int -> int -> preterm
211.58 +
211.59 + val var_prefix: string
211.60 +end
211.61 +
211.62 +structure Z3_Proof_Terms: Z3_PROOF_TERMS =
211.63 +struct
211.64 +
211.65 +fun instTs cUs (cTs, ct) = Thm.instantiate_cterm (cTs ~~ cUs, []) ct
211.66 +fun instT cU (cT, ct) = instTs [cU] ([cT], ct)
211.67 +fun mk_inst_pair destT cpat = (destT (Thm.ctyp_of_term cpat), cpat)
211.68 +val destT1 = hd o Thm.dest_ctyp
211.69 +val destT2 = hd o tl o Thm.dest_ctyp
211.70 +
211.71 +
211.72 +val mk_prop = Thm.capply @{cterm Trueprop}
211.73 +
211.74 +val meta_eq = mk_inst_pair destT1 @{cpat "op =="}
211.75 +fun mk_meta_eq ct = Thm.mk_binop (instT (Thm.ctyp_of_term ct) meta_eq) ct
211.76 +
211.77 +
211.78 +datatype preterm = Preterm of {
211.79 + cterm: Thm.cterm,
211.80 + vars: (int * Thm.cterm) list }
211.81 +
211.82 +fun mk_preterm (ct, vs) = Preterm {cterm=ct, vars=vs}
211.83 +fun dest_preterm (Preterm {cterm, vars}) = (cterm, vars)
211.84 +fun ctyp_of_preterm (Preterm {cterm, ...}) = Thm.ctyp_of_term cterm
211.85 +
211.86 +fun instT' e = instT (ctyp_of_preterm e)
211.87 +
211.88 +val maxidx_of = #maxidx o Thm.rep_cterm
211.89 +
211.90 +val var_prefix = "v"
211.91 +
211.92 +local
211.93 +fun mk_inst nctxt cert vs =
211.94 + let
211.95 + val max = fold (curry Int.max o fst) vs 0
211.96 + val names = fst (Name.variants (replicate (max + 1) var_prefix) nctxt)
211.97 + fun mk (i, v) = (v, cert (Free (nth names i, #T (Thm.rep_cterm v))))
211.98 + in map mk vs end
211.99 +
211.100 +fun fix_vars _ _ ct [] = (ct, [])
211.101 + | fix_vars thy nctxt ct vs =
211.102 + let
211.103 + val cert = Thm.cterm_of thy
211.104 + val inst = mk_inst nctxt cert vs
211.105 + in (Thm.instantiate_cterm ([], inst) ct, map snd inst) end
211.106 +in
211.107 +fun compile thy nctxt (Preterm {cterm, vars}) = fix_vars thy nctxt cterm vars
211.108 +end
211.109 +
211.110 +local
211.111 +fun app e (ct1, vs1) =
211.112 + let
211.113 + fun part (var as (i, v)) (inst, vs) =
211.114 + (case AList.lookup (op =) vs1 i of
211.115 + NONE => (inst, var :: vs)
211.116 + | SOME v' => ((v, v') :: inst, vs))
211.117 +
211.118 + val (ct2, vs2) = dest_preterm e
211.119 + val incr =
211.120 + if maxidx_of ct1 < 0 orelse maxidx_of ct2 < 0 then I
211.121 + else Thm.incr_indexes_cterm (maxidx_of ct1 + 1)
211.122 +
211.123 + val (inst, vs) = fold (part o apsnd incr) vs2 ([], vs1)
211.124 + val ct2' = Thm.instantiate_cterm ([], inst) (incr ct2)
211.125 + in (Thm.capply ct1 ct2', vs) end
211.126 +in
211.127 +fun mk_fun ct es = mk_preterm (fold app es (ct, []))
211.128 +fun mk_binop f t u = mk_fun f [t, u]
211.129 +fun mk_nary _ e [] = e
211.130 + | mk_nary ct _ es = uncurry (fold_rev (mk_binop ct)) (split_last es)
211.131 +end
211.132 +
211.133 +fun mk_bound thy i T =
211.134 + let val ct = Thm.cterm_of thy (Var ((Name.uu, 0), T))
211.135 + in mk_preterm (ct, [(i, ct)]) end
211.136 +
211.137 +local
211.138 +fun mk_quant q thy (n, T) e =
211.139 + let
211.140 + val (ct, vs) = dest_preterm e
211.141 + val cv =
211.142 + (case AList.lookup (op =) vs 0 of
211.143 + SOME cv => cv
211.144 + | _ => Thm.cterm_of thy (Var ((Name.uu, maxidx_of ct + 1), T)))
211.145 + val cq = instT (Thm.ctyp_of_term cv) q
211.146 + fun dec (i, v) = if i = 0 then NONE else SOME (i - 1, v)
211.147 + in mk_preterm (Thm.capply cq (Thm.cabs cv ct), map_filter dec vs) end
211.148 +in
211.149 +val mk_forall = mk_quant (mk_inst_pair (destT1 o destT1) @{cpat All})
211.150 +val mk_exists = mk_quant (mk_inst_pair (destT1 o destT1) @{cpat Ex})
211.151 +end
211.152 +
211.153 +
211.154 +val mk_false = mk_fun @{cterm False} []
211.155 +val mk_not = mk_fun @{cterm Not} o single
211.156 +val mk_true = mk_not mk_false
211.157 +val mk_and = mk_nary @{cterm "op &"} mk_true
211.158 +val mk_or = mk_nary @{cterm "op |"} mk_false
211.159 +val mk_implies = mk_binop @{cterm "op -->"}
211.160 +val mk_iff = mk_binop @{cterm "op = :: bool => _"}
211.161 +
211.162 +val eq = mk_inst_pair destT1 @{cpat "op ="}
211.163 +fun mk_eq t u = mk_binop (instT' t eq) t u
211.164 +
211.165 +val if_term = mk_inst_pair (destT1 o destT2) @{cpat If}
211.166 +fun mk_if c t u = mk_fun (instT' t if_term) [c, t, u]
211.167 +
211.168 +val nil_term = mk_inst_pair destT1 @{cpat Nil}
211.169 +val cons_term = mk_inst_pair destT1 @{cpat Cons}
211.170 +fun mk_list cT es =
211.171 + fold_rev (mk_binop (instT cT cons_term)) es (mk_fun (instT cT nil_term) [])
211.172 +
211.173 +val distinct = mk_inst_pair (destT1 o destT1) @{cpat distinct}
211.174 +fun mk_distinct [] = mk_true
211.175 + | mk_distinct (es as (e :: _)) =
211.176 + mk_fun (instT' e distinct) [mk_list (ctyp_of_preterm e) es]
211.177 +
211.178 +val pat = mk_inst_pair destT1 @{cpat pat}
211.179 +val nopat = mk_inst_pair destT1 @{cpat nopat}
211.180 +val andpat = mk_inst_pair (destT1 o destT2) @{cpat "op andpat"}
211.181 +fun mk_gen_pat _ [] = raise TERM ("mk_gen_pat: empty pattern", [])
211.182 + | mk_gen_pat pat (e :: es) =
211.183 + let fun mk t p = mk_fun (instT' t andpat) [p, t]
211.184 + in fold mk es (mk_fun (instT' e pat) [e]) end
211.185 +val mk_pat = mk_gen_pat pat
211.186 +val mk_nopat = mk_gen_pat nopat
211.187 +
211.188 +fun mk_trigger es e = mk_fun @{cterm trigger} [mk_list @{ctyp pattern} es, e]
211.189 +
211.190 +
211.191 +val access = mk_inst_pair (Thm.dest_ctyp o destT1) @{cpat apply}
211.192 +fun mk_access array index =
211.193 + let val cTs = Thm.dest_ctyp (ctyp_of_preterm array)
211.194 + in mk_fun (instTs cTs access) [array, index] end
211.195 +
211.196 +val update = mk_inst_pair (Thm.dest_ctyp o destT1) @{cpat fun_upd}
211.197 +fun mk_update array index value =
211.198 + let val cTs = Thm.dest_ctyp (ctyp_of_preterm array)
211.199 + in mk_fun (instTs cTs update) [array, index, value] end
211.200 +
211.201 +
211.202 +fun mk_int_num i = mk_fun (Numeral.mk_cnumber @{ctyp int} i) []
211.203 +fun mk_real_num i = mk_fun (Numeral.mk_cnumber @{ctyp real} i) []
211.204 +
211.205 +fun mk_real_frac_num (e, NONE) = mk_real_num e
211.206 + | mk_real_frac_num (e, SOME d) =
211.207 + mk_binop @{cterm "op / :: real => _"} (mk_real_num e) (mk_real_num d)
211.208 +
211.209 +fun has_int_type e = (Thm.typ_of (ctyp_of_preterm e) = @{typ int})
211.210 +fun choose e i r = if has_int_type e then i else r
211.211 +
211.212 +val uminus_i = @{cterm "uminus :: int => _"}
211.213 +val uminus_r = @{cterm "uminus :: real => _"}
211.214 +fun mk_uminus e = mk_fun (choose e uminus_i uminus_r) [e]
211.215 +
211.216 +fun arith_op int_op real_op t u = mk_binop (choose t int_op real_op) t u
211.217 +
211.218 +val mk_add = arith_op @{cterm "op + :: int => _"} @{cterm "op + :: real => _"}
211.219 +val mk_sub = arith_op @{cterm "op - :: int => _"} @{cterm "op - :: real => _"}
211.220 +val mk_mul = arith_op @{cterm "op * :: int => _"} @{cterm "op * :: real => _"}
211.221 +val mk_int_div = mk_binop @{cterm "op div :: int => _"}
211.222 +val mk_real_div = mk_binop @{cterm "op / :: real => _"}
211.223 +val mk_rem = mk_binop @{cterm "op rem :: int => _"}
211.224 +val mk_mod = mk_binop @{cterm "op mod :: int => _"}
211.225 +val mk_lt = arith_op @{cterm "op < :: int => _"} @{cterm "op < :: real => _"}
211.226 +val mk_le = arith_op @{cterm "op <= :: int => _"} @{cterm "op <= :: real => _"}
211.227 +
211.228 +fun binT size =
211.229 + let
211.230 + fun bitT i T =
211.231 + if i = 0
211.232 + then Type (@{type_name "Numeral_Type.bit0"}, [T])
211.233 + else Type (@{type_name "Numeral_Type.bit1"}, [T])
211.234 +
211.235 + fun binT i =
211.236 + if i = 0 then @{typ "Numeral_Type.num0"}
211.237 + else if i = 1 then @{typ "Numeral_Type.num1"}
211.238 + else let val (q, r) = Integer.div_mod i 2 in bitT r (binT q) end
211.239 + in
211.240 + if size >= 0 then binT size
211.241 + else raise TYPE ("mk_binT: " ^ string_of_int size, [], [])
211.242 + end
211.243 +
211.244 +fun wordT size = Type (@{type_name "word"}, [binT size])
211.245 +
211.246 +fun mk_bv_num thy num size =
211.247 + mk_fun (Numeral.mk_cnumber (Thm.ctyp_of thy (wordT size)) num) []
211.248 +
211.249 +end
212.1 --- a/src/HOL/SMT/Tools/z3_solver.ML Tue Oct 20 08:10:47 2009 +0200
212.2 +++ b/src/HOL/SMT/Tools/z3_solver.ML Tue Oct 20 10:11:30 2009 +0200
212.3 @@ -8,7 +8,6 @@
212.4 sig
212.5 val proofs: bool Config.T
212.6 val options: string Config.T
212.7 -
212.8 val setup: theory -> theory
212.9 end
212.10
212.11 @@ -57,20 +56,18 @@
212.12 check_unsat recon output
212.13 |> K @{cprop False}
212.14
212.15 -(* FIXME
212.16 fun prover (SMT_Solver.ProofData {context, output, recon, assms}) =
212.17 check_unsat recon output
212.18 |> Z3_Proof.reconstruct context assms recon
212.19 -*)
212.20
212.21 fun solver oracle ctxt =
212.22 let val with_proof = Config.get ctxt proofs
212.23 in
212.24 SMT_Solver.SolverConfig {
212.25 - name = {env_var=env_var, remote_name=solver_name},
212.26 + command = {env_var=env_var, remote_name=solver_name},
212.27 + arguments = cmdline_options ctxt,
212.28 interface = Z3_Interface.interface,
212.29 - arguments = cmdline_options ctxt,
212.30 - reconstruct = (*FIXME:if with_proof then prover else*) oracle }
212.31 + reconstruct = if with_proof then prover else oracle }
212.32 end
212.33
212.34 val setup =
213.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
213.2 +++ b/src/HOL/SMT/Z3.thy Tue Oct 20 10:11:30 2009 +0200
213.3 @@ -0,0 +1,24 @@
213.4 +(* Title: HOL/SMT/Z3.thy
213.5 + Author: Sascha Boehme, TU Muenchen
213.6 +*)
213.7 +
213.8 +header {* Binding to the SMT solver Z3, with proof reconstruction *}
213.9 +
213.10 +theory Z3
213.11 +imports SMT_Base
213.12 +uses
213.13 + "Tools/z3_proof_terms.ML"
213.14 + "Tools/z3_proof_rules.ML"
213.15 + "Tools/z3_proof.ML"
213.16 + "Tools/z3_model.ML"
213.17 + "Tools/z3_interface.ML"
213.18 + "Tools/z3_solver.ML"
213.19 +begin
213.20 +
213.21 +setup {* Z3_Proof_Rules.setup #> Z3_Solver.setup *}
213.22 +
213.23 +lemmas [z3_rewrite] =
213.24 + refl eq_commute conj_commute disj_commute simp_thms nnf_simps
213.25 + ring_distribs field_eq_simps
213.26 +
213.27 +end
214.1 --- a/src/HOL/SMT/etc/settings Tue Oct 20 08:10:47 2009 +0200
214.2 +++ b/src/HOL/SMT/etc/settings Tue Oct 20 10:11:30 2009 +0200
214.3 @@ -1,9 +1,11 @@
214.4 ISABELLE_SMT="$COMPONENT"
214.5
214.6 -REMOTE_SMT_SOLVER="$ISABELLE_SMT/lib/scripts/remote_smt.pl"
214.7 +REMOTE_SMT_SOLVER="$COMPONENT/lib/scripts/remote_smt.pl"
214.8
214.9 REMOTE_SMT_URL="http://www4.in.tum.de/smt/smt"
214.10
214.11 +CERT_SMT_SOLVER="$COMPONENT/lib/scripts/cert_smt.pl"
214.12 +
214.13 #
214.14 # Paths to local SMT solvers:
214.15 #
215.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
215.2 +++ b/src/HOL/SMT/lib/scripts/cert_smt.pl Tue Oct 20 10:11:30 2009 +0200
215.3 @@ -0,0 +1,33 @@
215.4 +#
215.5 +# Author: Sascha Boehme, TU Muenchen
215.6 +#
215.7 +# Fake SMT solver: check that input matches previously computed input and
215.8 +# and return previously computed output.
215.9 +#
215.10 +
215.11 +use strict;
215.12 +use File::Compare;
215.13 +
215.14 +
215.15 +# arguments
215.16 +
215.17 +my $cert_path = $ARGV[0];
215.18 +my $new_problem = $ARGV[1];
215.19 +
215.20 +
215.21 +# check content of new problem file against old problem file
215.22 +
215.23 +my $old_problem = $cert_path;
215.24 +my $old_proof = $cert_path . ".proof";
215.25 +
215.26 +if (-e $old_problem and compare($old_problem, $new_problem) == 0) {
215.27 + if (-e $old_proof) {
215.28 + open FILE, "<$old_proof";
215.29 + foreach (<FILE>) {
215.30 + print $_;
215.31 + }
215.32 + close FILE;
215.33 + }
215.34 + else { print "ERROR: unable to open proof file\n"; }
215.35 +}
215.36 +else { print "ERROR: bad problem\n"; }
216.1 --- a/src/HOL/SMT/lib/scripts/remote_smt.pl Tue Oct 20 08:10:47 2009 +0200
216.2 +++ b/src/HOL/SMT/lib/scripts/remote_smt.pl Tue Oct 20 10:11:30 2009 +0200
216.3 @@ -1,7 +1,8 @@
216.4 #
216.5 -# Script to invoke remote SMT solvers.
216.6 # Author: Sascha Boehme, TU Muenchen
216.7 #
216.8 +# Invoke remote SMT solvers.
216.9 +#
216.10
216.11 use strict;
216.12 use LWP;