added proof reconstructon for Z3,
authorboehmes
Tue, 20 Oct 2009 10:11:30 +0200
changeset 33010 39f73a59e855
parent 33008 b0ff69f0a248
child 33011 ab599f7f2639
added proof reconstructon for Z3, added certificates for simpler re-checking of proofs (no need to invoke external solvers), added examples and certificates for all examples, removed Unsynchronized.ref (in smt_normalize.ML)
CONTRIBUTORS
NEWS
src/HOL/IsaMakefile
src/HOL/SMT/Examples/ROOT.ML
src/HOL/SMT/Examples/SMT_Examples.thy
src/HOL/SMT/Examples/cert/z3_arith_quant_01
src/HOL/SMT/Examples/cert/z3_arith_quant_01.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_02
src/HOL/SMT/Examples/cert/z3_arith_quant_02.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_03
src/HOL/SMT/Examples/cert/z3_arith_quant_03.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_04
src/HOL/SMT/Examples/cert/z3_arith_quant_04.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_05
src/HOL/SMT/Examples/cert/z3_arith_quant_05.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_06
src/HOL/SMT/Examples/cert/z3_arith_quant_06.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_07
src/HOL/SMT/Examples/cert/z3_arith_quant_07.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_08
src/HOL/SMT/Examples/cert/z3_arith_quant_08.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_09
src/HOL/SMT/Examples/cert/z3_arith_quant_09.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_10
src/HOL/SMT/Examples/cert/z3_arith_quant_10.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_11
src/HOL/SMT/Examples/cert/z3_arith_quant_11.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_12
src/HOL/SMT/Examples/cert/z3_arith_quant_12.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_13
src/HOL/SMT/Examples/cert/z3_arith_quant_13.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_14
src/HOL/SMT/Examples/cert/z3_arith_quant_14.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_15
src/HOL/SMT/Examples/cert/z3_arith_quant_15.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_16
src/HOL/SMT/Examples/cert/z3_arith_quant_16.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_17
src/HOL/SMT/Examples/cert/z3_arith_quant_17.proof
src/HOL/SMT/Examples/cert/z3_arith_quant_18
src/HOL/SMT/Examples/cert/z3_arith_quant_18.proof
src/HOL/SMT/Examples/cert/z3_bv_01
src/HOL/SMT/Examples/cert/z3_bv_01.proof
src/HOL/SMT/Examples/cert/z3_bv_02
src/HOL/SMT/Examples/cert/z3_bv_02.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_01
src/HOL/SMT/Examples/cert/z3_bv_arith_01.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_02
src/HOL/SMT/Examples/cert/z3_bv_arith_02.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_03
src/HOL/SMT/Examples/cert/z3_bv_arith_03.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_04
src/HOL/SMT/Examples/cert/z3_bv_arith_04.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_05
src/HOL/SMT/Examples/cert/z3_bv_arith_05.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_06
src/HOL/SMT/Examples/cert/z3_bv_arith_06.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_07
src/HOL/SMT/Examples/cert/z3_bv_arith_07.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_08
src/HOL/SMT/Examples/cert/z3_bv_arith_08.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_09
src/HOL/SMT/Examples/cert/z3_bv_arith_09.proof
src/HOL/SMT/Examples/cert/z3_bv_arith_10
src/HOL/SMT/Examples/cert/z3_bv_arith_10.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_01
src/HOL/SMT/Examples/cert/z3_bv_bit_01.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_02
src/HOL/SMT/Examples/cert/z3_bv_bit_02.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_03
src/HOL/SMT/Examples/cert/z3_bv_bit_03.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_04
src/HOL/SMT/Examples/cert/z3_bv_bit_04.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_05
src/HOL/SMT/Examples/cert/z3_bv_bit_05.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_06
src/HOL/SMT/Examples/cert/z3_bv_bit_06.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_07
src/HOL/SMT/Examples/cert/z3_bv_bit_07.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_08
src/HOL/SMT/Examples/cert/z3_bv_bit_08.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_09
src/HOL/SMT/Examples/cert/z3_bv_bit_09.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_10
src/HOL/SMT/Examples/cert/z3_bv_bit_10.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_11
src/HOL/SMT/Examples/cert/z3_bv_bit_11.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_12
src/HOL/SMT/Examples/cert/z3_bv_bit_12.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_13
src/HOL/SMT/Examples/cert/z3_bv_bit_13.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_14
src/HOL/SMT/Examples/cert/z3_bv_bit_14.proof
src/HOL/SMT/Examples/cert/z3_bv_bit_15
src/HOL/SMT/Examples/cert/z3_bv_bit_15.proof
src/HOL/SMT/Examples/cert/z3_fol_01
src/HOL/SMT/Examples/cert/z3_fol_01.proof
src/HOL/SMT/Examples/cert/z3_fol_02
src/HOL/SMT/Examples/cert/z3_fol_02.proof
src/HOL/SMT/Examples/cert/z3_fol_03
src/HOL/SMT/Examples/cert/z3_fol_03.proof
src/HOL/SMT/Examples/cert/z3_fol_04
src/HOL/SMT/Examples/cert/z3_fol_04.proof
src/HOL/SMT/Examples/cert/z3_hol_01
src/HOL/SMT/Examples/cert/z3_hol_01.proof
src/HOL/SMT/Examples/cert/z3_hol_02
src/HOL/SMT/Examples/cert/z3_hol_02.proof
src/HOL/SMT/Examples/cert/z3_hol_03
src/HOL/SMT/Examples/cert/z3_hol_03.proof
src/HOL/SMT/Examples/cert/z3_hol_04
src/HOL/SMT/Examples/cert/z3_hol_04.proof
src/HOL/SMT/Examples/cert/z3_hol_05
src/HOL/SMT/Examples/cert/z3_hol_05.proof
src/HOL/SMT/Examples/cert/z3_hol_06
src/HOL/SMT/Examples/cert/z3_hol_06.proof
src/HOL/SMT/Examples/cert/z3_hol_07
src/HOL/SMT/Examples/cert/z3_hol_07.proof
src/HOL/SMT/Examples/cert/z3_hol_08
src/HOL/SMT/Examples/cert/z3_hol_08.proof
src/HOL/SMT/Examples/cert/z3_linarith_01
src/HOL/SMT/Examples/cert/z3_linarith_01.proof
src/HOL/SMT/Examples/cert/z3_linarith_02
src/HOL/SMT/Examples/cert/z3_linarith_02.proof
src/HOL/SMT/Examples/cert/z3_linarith_03
src/HOL/SMT/Examples/cert/z3_linarith_03.proof
src/HOL/SMT/Examples/cert/z3_linarith_04
src/HOL/SMT/Examples/cert/z3_linarith_04.proof
src/HOL/SMT/Examples/cert/z3_linarith_05
src/HOL/SMT/Examples/cert/z3_linarith_05.proof
src/HOL/SMT/Examples/cert/z3_linarith_06
src/HOL/SMT/Examples/cert/z3_linarith_06.proof
src/HOL/SMT/Examples/cert/z3_linarith_07
src/HOL/SMT/Examples/cert/z3_linarith_07.proof
src/HOL/SMT/Examples/cert/z3_linarith_08
src/HOL/SMT/Examples/cert/z3_linarith_08.proof
src/HOL/SMT/Examples/cert/z3_linarith_09
src/HOL/SMT/Examples/cert/z3_linarith_09.proof
src/HOL/SMT/Examples/cert/z3_linarith_10
src/HOL/SMT/Examples/cert/z3_linarith_10.proof
src/HOL/SMT/Examples/cert/z3_linarith_11
src/HOL/SMT/Examples/cert/z3_linarith_11.proof
src/HOL/SMT/Examples/cert/z3_linarith_12
src/HOL/SMT/Examples/cert/z3_linarith_12.proof
src/HOL/SMT/Examples/cert/z3_linarith_13
src/HOL/SMT/Examples/cert/z3_linarith_13.proof
src/HOL/SMT/Examples/cert/z3_linarith_14
src/HOL/SMT/Examples/cert/z3_linarith_14.proof
src/HOL/SMT/Examples/cert/z3_linarith_15
src/HOL/SMT/Examples/cert/z3_linarith_15.proof
src/HOL/SMT/Examples/cert/z3_linarith_16
src/HOL/SMT/Examples/cert/z3_linarith_16.proof
src/HOL/SMT/Examples/cert/z3_mono_01
src/HOL/SMT/Examples/cert/z3_mono_01.proof
src/HOL/SMT/Examples/cert/z3_mono_02
src/HOL/SMT/Examples/cert/z3_mono_02.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_01
src/HOL/SMT/Examples/cert/z3_nat_arith_01.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_02
src/HOL/SMT/Examples/cert/z3_nat_arith_02.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_03
src/HOL/SMT/Examples/cert/z3_nat_arith_03.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_04
src/HOL/SMT/Examples/cert/z3_nat_arith_04.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_05
src/HOL/SMT/Examples/cert/z3_nat_arith_05.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_06
src/HOL/SMT/Examples/cert/z3_nat_arith_06.proof
src/HOL/SMT/Examples/cert/z3_nat_arith_07
src/HOL/SMT/Examples/cert/z3_nat_arith_07.proof
src/HOL/SMT/Examples/cert/z3_nlarith_01
src/HOL/SMT/Examples/cert/z3_nlarith_01.proof
src/HOL/SMT/Examples/cert/z3_nlarith_02
src/HOL/SMT/Examples/cert/z3_nlarith_02.proof
src/HOL/SMT/Examples/cert/z3_nlarith_03
src/HOL/SMT/Examples/cert/z3_nlarith_03.proof
src/HOL/SMT/Examples/cert/z3_nlarith_04
src/HOL/SMT/Examples/cert/z3_nlarith_04.proof
src/HOL/SMT/Examples/cert/z3_pair_01
src/HOL/SMT/Examples/cert/z3_pair_01.proof
src/HOL/SMT/Examples/cert/z3_pair_02
src/HOL/SMT/Examples/cert/z3_pair_02.proof
src/HOL/SMT/Examples/cert/z3_prop_01
src/HOL/SMT/Examples/cert/z3_prop_01.proof
src/HOL/SMT/Examples/cert/z3_prop_02
src/HOL/SMT/Examples/cert/z3_prop_02.proof
src/HOL/SMT/Examples/cert/z3_prop_03
src/HOL/SMT/Examples/cert/z3_prop_03.proof
src/HOL/SMT/Examples/cert/z3_prop_04
src/HOL/SMT/Examples/cert/z3_prop_04.proof
src/HOL/SMT/Examples/cert/z3_prop_05
src/HOL/SMT/Examples/cert/z3_prop_05.proof
src/HOL/SMT/Examples/cert/z3_prop_06
src/HOL/SMT/Examples/cert/z3_prop_06.proof
src/HOL/SMT/Examples/cert/z3_prop_07
src/HOL/SMT/Examples/cert/z3_prop_07.proof
src/HOL/SMT/Examples/cert/z3_prop_08
src/HOL/SMT/Examples/cert/z3_prop_08.proof
src/HOL/SMT/Examples/cert/z3_prop_09
src/HOL/SMT/Examples/cert/z3_prop_09.proof
src/HOL/SMT/Examples/cert/z3_prop_10
src/HOL/SMT/Examples/cert/z3_prop_10.proof
src/HOL/SMT/SMT.thy
src/HOL/SMT/SMT_Base.thy
src/HOL/SMT/SMT_Definitions.thy
src/HOL/SMT/Tools/cvc3_solver.ML
src/HOL/SMT/Tools/smt_normalize.ML
src/HOL/SMT/Tools/smt_solver.ML
src/HOL/SMT/Tools/yices_solver.ML
src/HOL/SMT/Tools/z3_proof.ML
src/HOL/SMT/Tools/z3_proof_rules.ML
src/HOL/SMT/Tools/z3_proof_terms.ML
src/HOL/SMT/Tools/z3_solver.ML
src/HOL/SMT/Z3.thy
src/HOL/SMT/etc/settings
src/HOL/SMT/lib/scripts/cert_smt.pl
src/HOL/SMT/lib/scripts/remote_smt.pl
--- a/CONTRIBUTORS	Tue Oct 20 08:10:47 2009 +0200
+++ b/CONTRIBUTORS	Tue Oct 20 10:11:30 2009 +0200
@@ -7,10 +7,13 @@
 Contributions to this Isabelle version
 --------------------------------------
 
-* Oktober 2009: Florian Haftmann, TUM
+* October 2009: Sascha Boehme, TUM
+  Extension of SMT method: proof-reconstruction for the SMT solver Z3
+
+* October 2009: Florian Haftmann, TUM
   Refinement of parts of the HOL datatype package
 
-* Oktober 2009: Florian Haftmann, TUM
+* October 2009: Florian Haftmann, TUM
   Generic term styles for term antiquotations
 
 * September 2009: Thomas Sewell, NICTA
--- a/NEWS	Tue Oct 20 08:10:47 2009 +0200
+++ b/NEWS	Tue Oct 20 10:11:30 2009 +0200
@@ -46,7 +46,9 @@
 arithmetic, and fixed-size bitvectors; there is also basic
 support for higher-order features (esp. lambda abstractions).
 It is an incomplete decision procedure based on external SMT
-solvers using the oracle mechanism.
+solvers using the oracle mechanism; for the SMT solver Z3,
+this method is proof-producing. Certificates are provided to
+avoid calling the external solvers solely for re-checking proofs.
 
 * Reorganization of number theory:
   * former session NumberTheory now named Old_Number_Theory
--- a/src/HOL/IsaMakefile	Tue Oct 20 08:10:47 2009 +0200
+++ b/src/HOL/IsaMakefile	Tue Oct 20 10:11:30 2009 +0200
@@ -6,7 +6,7 @@
 
 default: HOL
 generate: HOL-Generate-HOL HOL-Generate-HOLLight
-images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-Word TLA HOL4
+images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-SMT HOL-Word TLA HOL4
 
 #Note: keep targets sorted (except for HOL-Library and HOL-ex)
 test: \
@@ -40,7 +40,7 @@
   HOL-Prolog \
   HOL-SET-Protocol \
   HOL-SizeChange \
-  HOL-SMT \
+  HOL-SMT-Examples \
   HOL-Statespace \
   HOL-Subst \
       TLA-Buffer \
@@ -1146,15 +1146,222 @@
 
 HOL-SMT: HOL-Word $(LOG)/HOL-SMT.gz
 
-$(LOG)/HOL-SMT.gz: $(OUT)/HOL-Word SMT/SMT_Definitions.thy SMT/SMT.thy \
+$(LOG)/HOL-SMT.gz: $(OUT)/HOL-Word SMT/SMT_Base.thy SMT/Z3.thy SMT/SMT.thy \
   SMT/Tools/smt_normalize.ML SMT/Tools/smt_monomorph.ML \
   SMT/Tools/smt_translate.ML SMT/Tools/smt_builtin.ML \
   SMT/Tools/smtlib_interface.ML SMT/Tools/smt_solver.ML \
   SMT/Tools/cvc3_solver.ML SMT/Tools/yices_solver.ML \
-  SMT/Tools/z3_interface.ML SMT/Tools/z3_solver.ML SMT/Tools/z3_model.ML
+  SMT/Tools/z3_proof_terms.ML SMT/Tools/z3_proof_rules.ML \
+  SMT/Tools/z3_proof.ML SMT/Tools/z3_model.ML SMT/Tools/z3_interface.ML \
+  SMT/Tools/z3_solver.ML
 	@cd SMT; $(ISABELLE_TOOL) usedir -b -g true $(OUT)/HOL-Word HOL-SMT
 
 
+## HOL-SMT-Examples
+
+HOL-SMT-Examples: HOL-SMT $(LOG)/HOL-SMT-Examples.gz
+
+$(LOG)/HOL-SMT-Examples.gz: $(OUT)/HOL-SMT SMT/Examples/ROOT.ML	\
+  SMT/Examples/SMT_Examples.thy \
+  SMT/Examples/cert/z3_arith_quant_01 \
+  SMT/Examples/cert/z3_arith_quant_01.proof \
+  SMT/Examples/cert/z3_arith_quant_02 \
+  SMT/Examples/cert/z3_arith_quant_02.proof \
+  SMT/Examples/cert/z3_arith_quant_03 \
+  SMT/Examples/cert/z3_arith_quant_03.proof \
+  SMT/Examples/cert/z3_arith_quant_04 \
+  SMT/Examples/cert/z3_arith_quant_04.proof \
+  SMT/Examples/cert/z3_arith_quant_05 \
+  SMT/Examples/cert/z3_arith_quant_05.proof \
+  SMT/Examples/cert/z3_arith_quant_06 \
+  SMT/Examples/cert/z3_arith_quant_06.proof \
+  SMT/Examples/cert/z3_arith_quant_07 \
+  SMT/Examples/cert/z3_arith_quant_07.proof \
+  SMT/Examples/cert/z3_arith_quant_08 \
+  SMT/Examples/cert/z3_arith_quant_08.proof \
+  SMT/Examples/cert/z3_arith_quant_09 \
+  SMT/Examples/cert/z3_arith_quant_09.proof \
+  SMT/Examples/cert/z3_arith_quant_10 \
+  SMT/Examples/cert/z3_arith_quant_10.proof \
+  SMT/Examples/cert/z3_arith_quant_11 \
+  SMT/Examples/cert/z3_arith_quant_11.proof \
+  SMT/Examples/cert/z3_arith_quant_12 \
+  SMT/Examples/cert/z3_arith_quant_12.proof \
+  SMT/Examples/cert/z3_arith_quant_13 \
+  SMT/Examples/cert/z3_arith_quant_13.proof \
+  SMT/Examples/cert/z3_arith_quant_14 \
+  SMT/Examples/cert/z3_arith_quant_14.proof \
+  SMT/Examples/cert/z3_arith_quant_15 \
+  SMT/Examples/cert/z3_arith_quant_15.proof \
+  SMT/Examples/cert/z3_arith_quant_16 \
+  SMT/Examples/cert/z3_arith_quant_16.proof \
+  SMT/Examples/cert/z3_arith_quant_17 \
+  SMT/Examples/cert/z3_arith_quant_17.proof \
+  SMT/Examples/cert/z3_arith_quant_18 \
+  SMT/Examples/cert/z3_arith_quant_18.proof \
+  SMT/Examples/cert/z3_bv_01 \
+  SMT/Examples/cert/z3_bv_01.proof \
+  SMT/Examples/cert/z3_bv_02 \
+  SMT/Examples/cert/z3_bv_02.proof \
+  SMT/Examples/cert/z3_bv_arith_01 \
+  SMT/Examples/cert/z3_bv_arith_01.proof \
+  SMT/Examples/cert/z3_bv_arith_02 \
+  SMT/Examples/cert/z3_bv_arith_02.proof \
+  SMT/Examples/cert/z3_bv_arith_03 \
+  SMT/Examples/cert/z3_bv_arith_03.proof \
+  SMT/Examples/cert/z3_bv_arith_04 \
+  SMT/Examples/cert/z3_bv_arith_04.proof \
+  SMT/Examples/cert/z3_bv_arith_05 \
+  SMT/Examples/cert/z3_bv_arith_05.proof \
+  SMT/Examples/cert/z3_bv_arith_06 \
+  SMT/Examples/cert/z3_bv_arith_06.proof \
+  SMT/Examples/cert/z3_bv_arith_07 \
+  SMT/Examples/cert/z3_bv_arith_07.proof \
+  SMT/Examples/cert/z3_bv_arith_08 \
+  SMT/Examples/cert/z3_bv_arith_08.proof \
+  SMT/Examples/cert/z3_bv_arith_09 \
+  SMT/Examples/cert/z3_bv_arith_09.proof \
+  SMT/Examples/cert/z3_bv_arith_10 \
+  SMT/Examples/cert/z3_bv_arith_10.proof \
+  SMT/Examples/cert/z3_bv_bit_01 \
+  SMT/Examples/cert/z3_bv_bit_01.proof \
+  SMT/Examples/cert/z3_bv_bit_02 \
+  SMT/Examples/cert/z3_bv_bit_02.proof \
+  SMT/Examples/cert/z3_bv_bit_03 \
+  SMT/Examples/cert/z3_bv_bit_03.proof \
+  SMT/Examples/cert/z3_bv_bit_04 \
+  SMT/Examples/cert/z3_bv_bit_04.proof \
+  SMT/Examples/cert/z3_bv_bit_05 \
+  SMT/Examples/cert/z3_bv_bit_05.proof \
+  SMT/Examples/cert/z3_bv_bit_06 \
+  SMT/Examples/cert/z3_bv_bit_06.proof \
+  SMT/Examples/cert/z3_bv_bit_07 \
+  SMT/Examples/cert/z3_bv_bit_07.proof \
+  SMT/Examples/cert/z3_bv_bit_08 \
+  SMT/Examples/cert/z3_bv_bit_08.proof \
+  SMT/Examples/cert/z3_bv_bit_09 \
+  SMT/Examples/cert/z3_bv_bit_09.proof \
+  SMT/Examples/cert/z3_bv_bit_10 \
+  SMT/Examples/cert/z3_bv_bit_10.proof \
+  SMT/Examples/cert/z3_bv_bit_11 \
+  SMT/Examples/cert/z3_bv_bit_11.proof \
+  SMT/Examples/cert/z3_bv_bit_12 \
+  SMT/Examples/cert/z3_bv_bit_12.proof \
+  SMT/Examples/cert/z3_bv_bit_13 \
+  SMT/Examples/cert/z3_bv_bit_13.proof \
+  SMT/Examples/cert/z3_bv_bit_14 \
+  SMT/Examples/cert/z3_bv_bit_14.proof \
+  SMT/Examples/cert/z3_bv_bit_15 \
+  SMT/Examples/cert/z3_bv_bit_15.proof \
+  SMT/Examples/cert/z3_fol_01 \
+  SMT/Examples/cert/z3_fol_01.proof \
+  SMT/Examples/cert/z3_fol_02 \
+  SMT/Examples/cert/z3_fol_02.proof \
+  SMT/Examples/cert/z3_fol_03 \
+  SMT/Examples/cert/z3_fol_03.proof \
+  SMT/Examples/cert/z3_fol_04 \
+  SMT/Examples/cert/z3_fol_04.proof \
+  SMT/Examples/cert/z3_hol_01 \
+  SMT/Examples/cert/z3_hol_01.proof \
+  SMT/Examples/cert/z3_hol_02 \
+  SMT/Examples/cert/z3_hol_02.proof \
+  SMT/Examples/cert/z3_hol_03 \
+  SMT/Examples/cert/z3_hol_03.proof \
+  SMT/Examples/cert/z3_hol_04 \
+  SMT/Examples/cert/z3_hol_04.proof \
+  SMT/Examples/cert/z3_hol_05 \
+  SMT/Examples/cert/z3_hol_05.proof \
+  SMT/Examples/cert/z3_hol_06 \
+  SMT/Examples/cert/z3_hol_06.proof \
+  SMT/Examples/cert/z3_hol_07 \
+  SMT/Examples/cert/z3_hol_07.proof \
+  SMT/Examples/cert/z3_hol_08 \
+  SMT/Examples/cert/z3_hol_08.proof \
+  SMT/Examples/cert/z3_linarith_01 \
+  SMT/Examples/cert/z3_linarith_01.proof \
+  SMT/Examples/cert/z3_linarith_02 \
+  SMT/Examples/cert/z3_linarith_02.proof \
+  SMT/Examples/cert/z3_linarith_03 \
+  SMT/Examples/cert/z3_linarith_03.proof \
+  SMT/Examples/cert/z3_linarith_04 \
+  SMT/Examples/cert/z3_linarith_04.proof \
+  SMT/Examples/cert/z3_linarith_05 \
+  SMT/Examples/cert/z3_linarith_05.proof \
+  SMT/Examples/cert/z3_linarith_06 \
+  SMT/Examples/cert/z3_linarith_06.proof \
+  SMT/Examples/cert/z3_linarith_07 \
+  SMT/Examples/cert/z3_linarith_07.proof \
+  SMT/Examples/cert/z3_linarith_08 \
+  SMT/Examples/cert/z3_linarith_08.proof \
+  SMT/Examples/cert/z3_linarith_09 \
+  SMT/Examples/cert/z3_linarith_09.proof \
+  SMT/Examples/cert/z3_linarith_10 \
+  SMT/Examples/cert/z3_linarith_10.proof \
+  SMT/Examples/cert/z3_linarith_11 \
+  SMT/Examples/cert/z3_linarith_11.proof \
+  SMT/Examples/cert/z3_linarith_12 \
+  SMT/Examples/cert/z3_linarith_12.proof \
+  SMT/Examples/cert/z3_linarith_13 \
+  SMT/Examples/cert/z3_linarith_13.proof \
+  SMT/Examples/cert/z3_linarith_14 \
+  SMT/Examples/cert/z3_linarith_14.proof \
+  SMT/Examples/cert/z3_linarith_15 \
+  SMT/Examples/cert/z3_linarith_15.proof \
+  SMT/Examples/cert/z3_linarith_16 \
+  SMT/Examples/cert/z3_linarith_16.proof \
+  SMT/Examples/cert/z3_mono_01 \
+  SMT/Examples/cert/z3_mono_01.proof \
+  SMT/Examples/cert/z3_mono_02 \
+  SMT/Examples/cert/z3_mono_02.proof \
+  SMT/Examples/cert/z3_nat_arith_01 \
+  SMT/Examples/cert/z3_nat_arith_01.proof \
+  SMT/Examples/cert/z3_nat_arith_02 \
+  SMT/Examples/cert/z3_nat_arith_02.proof \
+  SMT/Examples/cert/z3_nat_arith_03 \
+  SMT/Examples/cert/z3_nat_arith_03.proof \
+  SMT/Examples/cert/z3_nat_arith_04 \
+  SMT/Examples/cert/z3_nat_arith_04.proof \
+  SMT/Examples/cert/z3_nat_arith_05 \
+  SMT/Examples/cert/z3_nat_arith_05.proof \
+  SMT/Examples/cert/z3_nat_arith_06 \
+  SMT/Examples/cert/z3_nat_arith_06.proof \
+  SMT/Examples/cert/z3_nat_arith_07 \
+  SMT/Examples/cert/z3_nat_arith_07.proof \
+  SMT/Examples/cert/z3_nlarith_01 \
+  SMT/Examples/cert/z3_nlarith_01.proof \
+  SMT/Examples/cert/z3_nlarith_02 \
+  SMT/Examples/cert/z3_nlarith_02.proof \
+  SMT/Examples/cert/z3_nlarith_03 \
+  SMT/Examples/cert/z3_nlarith_03.proof \
+  SMT/Examples/cert/z3_nlarith_04 \
+  SMT/Examples/cert/z3_nlarith_04.proof \
+  SMT/Examples/cert/z3_pair_01 \
+  SMT/Examples/cert/z3_pair_01.proof \
+  SMT/Examples/cert/z3_pair_02 \
+  SMT/Examples/cert/z3_pair_02.proof \
+  SMT/Examples/cert/z3_prop_01 \
+  SMT/Examples/cert/z3_prop_01.proof \
+  SMT/Examples/cert/z3_prop_02 \
+  SMT/Examples/cert/z3_prop_02.proof \
+  SMT/Examples/cert/z3_prop_03 \
+  SMT/Examples/cert/z3_prop_03.proof \
+  SMT/Examples/cert/z3_prop_04 \
+  SMT/Examples/cert/z3_prop_04.proof \
+  SMT/Examples/cert/z3_prop_05 \
+  SMT/Examples/cert/z3_prop_05.proof \
+  SMT/Examples/cert/z3_prop_06 \
+  SMT/Examples/cert/z3_prop_06.proof \
+  SMT/Examples/cert/z3_prop_07 \
+  SMT/Examples/cert/z3_prop_07.proof \
+  SMT/Examples/cert/z3_prop_08 \
+  SMT/Examples/cert/z3_prop_08.proof \
+  SMT/Examples/cert/z3_prop_09 \
+  SMT/Examples/cert/z3_prop_09.proof \
+  SMT/Examples/cert/z3_prop_10 \
+  SMT/Examples/cert/z3_prop_10.proof
+	@cd SMT; $(ISABELLE_TOOL) usedir $(OUT)/HOL-SMT Examples
+
+
 ## clean
 
 clean:
@@ -1177,4 +1384,6 @@
 		$(LOG)/HOL-Unix.gz $(OUT)/HOL-Word $(LOG)/HOL-Word.gz	\
 		$(LOG)/HOL-Word-Examples.gz $(OUT)/HOL-NSA		\
 		$(LOG)/HOL-NSA.gz $(LOG)/HOL-NSA-Examples.gz            \
-                $(LOG)/HOL-Mirabelle.gz $(LOG)/HOL-SMT.gz
+                $(LOG)/HOL-Mirabelle.gz $(LOG)/HOL-SMT.gz               \
+                $(LOG)/HOL-SMT-Examples.gz
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/ROOT.ML	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+use_thy "SMT_Examples";
--- a/src/HOL/SMT/Examples/SMT_Examples.thy	Tue Oct 20 08:10:47 2009 +0200
+++ b/src/HOL/SMT/Examples/SMT_Examples.thy	Tue Oct 20 10:11:30 2009 +0200
@@ -5,35 +5,361 @@
 header {* Examples for the 'smt' tactic. *}
 
 theory SMT_Examples
-imports "../SMT"
+imports SMT
 begin
 
-declare [[smt_solver=z3, z3_proofs=false]]
-declare [[smt_trace=false]]
+declare [[smt_solver=z3, z3_proofs=true]]
 
 
 section {* Propositional and first-order logic *}
 
-lemma "True" by smt
-lemma "p \<or> \<not>p" by smt
-lemma "(p \<and> True) = p" by smt
-lemma "(p \<or> q) \<and> \<not>p \<Longrightarrow> q" by smt
-lemma "(a \<and> b) \<or> (c \<and> d) \<Longrightarrow> (a \<and> b) \<or> (c \<and> d)" by smt
-lemma "P=P=P=P=P=P=P=P=P=P" by smt
+lemma "True"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_01"]]
+  by smt
+
+lemma "p \<or> \<not>p"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_02"]]
+  by smt
+
+lemma "(p \<and> True) = p"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_03"]]
+  by smt
+
+lemma "(p \<or> q) \<and> \<not>p \<Longrightarrow> q"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_04"]]
+  by smt
+
+lemma "(a \<and> b) \<or> (c \<and> d) \<Longrightarrow> (a \<and> b) \<or> (c \<and> d)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_05"]]
+  using [[z3_proofs=false]] (* no Z3 proof *)
+  by smt
+
+lemma "(p1 \<and> p2) \<or> p3 \<longrightarrow> (p1 \<longrightarrow> (p3 \<and> p2) \<or> (p1 \<and> p3)) \<or> p1"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_06"]]
+  by smt
+
+lemma "P=P=P=P=P=P=P=P=P=P"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_07"]]
+  by smt
+
+lemma 
+  assumes "a | b | c | d"
+      and "e | f | (a & d)"
+      and "~(a | (c & ~c)) | b"
+      and "~(b & (x | ~x)) | c"
+      and "~(d | False) | c"
+      and "~(c | (~p & (p | (q & ~q))))"
+  shows False
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_08"]]
+  using assms by smt
 
 axiomatization symm_f :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" where
   symm_f: "symm_f x y = symm_f y x"
-lemma "a = a \<and> symm_f a b = symm_f b a" by (smt add: symm_f)
+lemma "a = a \<and> symm_f a b = symm_f b a"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_09"]]
+  by (smt add: symm_f)
+
+(* 
+Taken from ~~/src/HOL/ex/SAT_Examples.thy.
+Translated from TPTP problem library: PUZ015-2.006.dimacs
+*)
+lemma 
+  assumes "~x0"
+  and "~x30"
+  and "~x29"
+  and "~x59"
+  and "x1 | x31 | x0"
+  and "x2 | x32 | x1"
+  and "x3 | x33 | x2"
+  and "x4 | x34 | x3"
+  and "x35 | x4"
+  and "x5 | x36 | x30"
+  and "x6 | x37 | x5 | x31"
+  and "x7 | x38 | x6 | x32"
+  and "x8 | x39 | x7 | x33"
+  and "x9 | x40 | x8 | x34"
+  and "x41 | x9 | x35"
+  and "x10 | x42 | x36"
+  and "x11 | x43 | x10 | x37"
+  and "x12 | x44 | x11 | x38"
+  and "x13 | x45 | x12 | x39"
+  and "x14 | x46 | x13 | x40"
+  and "x47 | x14 | x41"
+  and "x15 | x48 | x42"
+  and "x16 | x49 | x15 | x43"
+  and "x17 | x50 | x16 | x44"
+  and "x18 | x51 | x17 | x45"
+  and "x19 | x52 | x18 | x46"
+  and "x53 | x19 | x47"
+  and "x20 | x54 | x48"
+  and "x21 | x55 | x20 | x49"
+  and "x22 | x56 | x21 | x50"
+  and "x23 | x57 | x22 | x51"
+  and "x24 | x58 | x23 | x52"
+  and "x59 | x24 | x53"
+  and "x25 | x54"
+  and "x26 | x25 | x55"
+  and "x27 | x26 | x56"
+  and "x28 | x27 | x57"
+  and "x29 | x28 | x58"
+  and "~x1 | ~x31"
+  and "~x1 | ~x0"
+  and "~x31 | ~x0"
+  and "~x2 | ~x32"
+  and "~x2 | ~x1"
+  and "~x32 | ~x1"
+  and "~x3 | ~x33"
+  and "~x3 | ~x2"
+  and "~x33 | ~x2"
+  and "~x4 | ~x34"
+  and "~x4 | ~x3"
+  and "~x34 | ~x3"
+  and "~x35 | ~x4"
+  and "~x5 | ~x36"
+  and "~x5 | ~x30"
+  and "~x36 | ~x30"
+  and "~x6 | ~x37"
+  and "~x6 | ~x5"
+  and "~x6 | ~x31"
+  and "~x37 | ~x5"
+  and "~x37 | ~x31"
+  and "~x5 | ~x31"
+  and "~x7 | ~x38"
+  and "~x7 | ~x6"
+  and "~x7 | ~x32"
+  and "~x38 | ~x6"
+  and "~x38 | ~x32"
+  and "~x6 | ~x32"
+  and "~x8 | ~x39"
+  and "~x8 | ~x7"
+  and "~x8 | ~x33"
+  and "~x39 | ~x7"
+  and "~x39 | ~x33"
+  and "~x7 | ~x33"
+  and "~x9 | ~x40"
+  and "~x9 | ~x8"
+  and "~x9 | ~x34"
+  and "~x40 | ~x8"
+  and "~x40 | ~x34"
+  and "~x8 | ~x34"
+  and "~x41 | ~x9"
+  and "~x41 | ~x35"
+  and "~x9 | ~x35"
+  and "~x10 | ~x42"
+  and "~x10 | ~x36"
+  and "~x42 | ~x36"
+  and "~x11 | ~x43"
+  and "~x11 | ~x10"
+  and "~x11 | ~x37"
+  and "~x43 | ~x10"
+  and "~x43 | ~x37"
+  and "~x10 | ~x37"
+  and "~x12 | ~x44"
+  and "~x12 | ~x11"
+  and "~x12 | ~x38"
+  and "~x44 | ~x11"
+  and "~x44 | ~x38"
+  and "~x11 | ~x38"
+  and "~x13 | ~x45"
+  and "~x13 | ~x12"
+  and "~x13 | ~x39"
+  and "~x45 | ~x12"
+  and "~x45 | ~x39"
+  and "~x12 | ~x39"
+  and "~x14 | ~x46"
+  and "~x14 | ~x13"
+  and "~x14 | ~x40"
+  and "~x46 | ~x13"
+  and "~x46 | ~x40"
+  and "~x13 | ~x40"
+  and "~x47 | ~x14"
+  and "~x47 | ~x41"
+  and "~x14 | ~x41"
+  and "~x15 | ~x48"
+  and "~x15 | ~x42"
+  and "~x48 | ~x42"
+  and "~x16 | ~x49"
+  and "~x16 | ~x15"
+  and "~x16 | ~x43"
+  and "~x49 | ~x15"
+  and "~x49 | ~x43"
+  and "~x15 | ~x43"
+  and "~x17 | ~x50"
+  and "~x17 | ~x16"
+  and "~x17 | ~x44"
+  and "~x50 | ~x16"
+  and "~x50 | ~x44"
+  and "~x16 | ~x44"
+  and "~x18 | ~x51"
+  and "~x18 | ~x17"
+  and "~x18 | ~x45"
+  and "~x51 | ~x17"
+  and "~x51 | ~x45"
+  and "~x17 | ~x45"
+  and "~x19 | ~x52"
+  and "~x19 | ~x18"
+  and "~x19 | ~x46"
+  and "~x52 | ~x18"
+  and "~x52 | ~x46"
+  and "~x18 | ~x46"
+  and "~x53 | ~x19"
+  and "~x53 | ~x47"
+  and "~x19 | ~x47"
+  and "~x20 | ~x54"
+  and "~x20 | ~x48"
+  and "~x54 | ~x48"
+  and "~x21 | ~x55"
+  and "~x21 | ~x20"
+  and "~x21 | ~x49"
+  and "~x55 | ~x20"
+  and "~x55 | ~x49"
+  and "~x20 | ~x49"
+  and "~x22 | ~x56"
+  and "~x22 | ~x21"
+  and "~x22 | ~x50"
+  and "~x56 | ~x21"
+  and "~x56 | ~x50"
+  and "~x21 | ~x50"
+  and "~x23 | ~x57"
+  and "~x23 | ~x22"
+  and "~x23 | ~x51"
+  and "~x57 | ~x22"
+  and "~x57 | ~x51"
+  and "~x22 | ~x51"
+  and "~x24 | ~x58"
+  and "~x24 | ~x23"
+  and "~x24 | ~x52"
+  and "~x58 | ~x23"
+  and "~x58 | ~x52"
+  and "~x23 | ~x52"
+  and "~x59 | ~x24"
+  and "~x59 | ~x53"
+  and "~x24 | ~x53"
+  and "~x25 | ~x54"
+  and "~x26 | ~x25"
+  and "~x26 | ~x55"
+  and "~x25 | ~x55"
+  and "~x27 | ~x26"
+  and "~x27 | ~x56"
+  and "~x26 | ~x56"
+  and "~x28 | ~x27"
+  and "~x28 | ~x57"
+  and "~x27 | ~x57"
+  and "~x29 | ~x28"
+  and "~x29 | ~x58"
+  and "~x28 | ~x58"
+  shows False
+  using assms
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_10"]]
+  by smt
+
+lemma "\<forall>x::int. P x \<longrightarrow> (\<forall>y::int. P x \<or> P y)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_01"]]
+  by smt
+
+lemma 
+  assumes "(\<forall>x y. P x y = x)"
+  shows "(\<exists>y. P x y) = P x c"
+  using assms 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_02"]]
+  by smt
+
+lemma 
+  assumes "(\<forall>x y. P x y = x)"
+  and "(\<forall>x. \<exists>y. P x y) = (\<forall>x. P x c)"
+  shows "(EX y. P x y) = P x c"
+  using assms
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_03"]]
+  by smt
+
+lemma
+  assumes "if P x then \<not>(\<exists>y. P y) else (\<forall>y. \<not>P y)"
+  shows "P x \<longrightarrow> P y"
+  using assms
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_04"]]
+  by smt
 
 
-section {* Linear arithmetic *}
+section {* Arithmetic *}
+
+subsection {* Linear arithmetic over integers and reals *}
+
+lemma "(3::int) = 3"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_01"]]
+  by smt
+
+lemma "(3::real) = 3"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_02"]]
+  by smt
+
+lemma "(3 :: int) + 1 = 4"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_03"]]
+  by smt
+
+lemma "x + (y + z) = y + (z + (x::int))"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_04"]]
+  by smt
+
+lemma "max (3::int) 8 > 5"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_05"]]
+  by smt
+
+lemma "abs (x :: real) + abs y \<ge> abs (x + y)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_06"]]
+  by smt
+
+lemma "P ((2::int) < 3) = P True"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_07"]]
+  by smt
+
+lemma "x + 3 \<ge> 4 \<or> x < (1::int)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_08"]]
+  by smt
 
-lemma "(3::int) = 3" by smt
-lemma "(3::real) = 3" by smt
-lemma "(3 :: int) + 1 = 4" by smt
-lemma "max (3::int) 8 > 5" by smt
-lemma "abs (x :: real) + abs y \<ge> abs (x + y)" by smt
-lemma "let x = (2 :: int) in x + x \<noteq> 5" by smt
+lemma
+  assumes "x \<ge> (3::int)" and "y = x + 4"
+  shows "y - x > 0" 
+  using assms
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_09"]]
+  by smt
+
+lemma "let x = (2 :: int) in x + x \<noteq> 5"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_10"]]
+  by smt
+
+lemma
+  fixes x :: real
+  assumes "3 * x + 7 * a < 4" and "3 < 2 * x"
+  shows "a < 0"
+  using assms
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_11"]]
+  by smt
+
+lemma "(0 \<le> y + -1 * x \<or> \<not> 0 \<le> x \<or> 0 \<le> (x::int)) = (\<not> False)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_12"]]
+  by smt
+
+lemma "distinct [x < (3::int), 3 \<le> x]"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_13"]]
+  by smt
+
+lemma
+  assumes "a > (0::int)"
+  shows "distinct [a, a * 2, a - a]"
+  using assms
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_14"]]
+  by smt
+
+lemma "
+  (n < m & m < n') | (n < m & m = n') | (n < n' & n' < m) |
+  (n = n' & n' < m) | (n = m & m < n') |
+  (n' < m & m < n) | (n' < m & m = n) |
+  (n' < n & n < m) | (n' = n & n < m) | (n' = m & m < n) |
+  (m < n & n < n') | (m < n & n' = n) | (m < n' & n' < n) |
+  (m = n & n < n') | (m = n' & n' < n) |
+  (n' = m & m = (n::int))"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_15"]]
+  by smt
 
 text{* 
 The following example was taken from HOL/ex/PresburgerEx.thy, where it says:
@@ -47,107 +373,333 @@
   Warning: it takes (in 2006) over 4.2 minutes! 
 
 There, it is proved by "arith". SMT is able to prove this within a fraction
-of one second.
+of one second. With proof reconstruction, it takes about 13 seconds on a Core2
+processor.
 *}
 
 lemma "\<lbrakk> x3 = abs x2 - x1; x4 = abs x3 - x2; x5 = abs x4 - x3;
          x6 = abs x5 - x4; x7 = abs x6 - x5; x8 = abs x7 - x6;
          x9 = abs x8 - x7; x10 = abs x9 - x8; x11 = abs x10 - x9 \<rbrakk>
  \<Longrightarrow> x1 = x10 & x2 = (x11::int)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_16"]]
+  by smt
+
+
+subsection {* Linear arithmetic with quantifiers *}
+
+lemma "~ (\<exists>x::int. False)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_01"]]
+  by smt
+
+lemma "~ (\<exists>x::real. False)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_02"]]
+  by smt
+
+lemma "\<exists>x::int. 0 < x"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_03"]]
+  using [[z3_proofs=false]] (* no Z3 proof *)
+  by smt
+
+lemma "\<exists>x::real. 0 < x"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_04"]]
+  using [[z3_proofs=false]] (* no Z3 proof *)
+  by smt
+
+lemma "\<forall>x::int. \<exists>y. y > x"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_05"]]
+  using [[z3_proofs=false]] (* no Z3 proof *)
+  by smt
+
+lemma "\<forall>x y::int. (x = 0 \<and> y = 1) \<longrightarrow> x \<noteq> y"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_06"]]
+  by smt
+
+lemma "\<exists>x::int. \<forall>y. x < y \<longrightarrow> y < 0 \<or> y >= 0"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_07"]]
+  by smt
+
+lemma "\<forall>x y::int. x < y \<longrightarrow> (2 * x + 1) < (2 * y)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_08"]]
+  by smt
+
+lemma "\<forall>x y::int. (2 * x + 1) \<noteq> (2 * y)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_09"]]
+  by smt
+
+lemma "\<forall>x y::int. x + y > 2 \<or> x + y = 2 \<or> x + y < 2"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_10"]]
   by smt
 
-lemma "\<exists>x::int. 0 < x" by smt
-lemma "\<exists>x::real. 0 < x" by smt
-lemma "\<forall>x y::int. x < y \<longrightarrow> (2 * x + 1) < (2 * y)" by smt
-lemma "\<forall>x y::int. (2 * x + 1) \<noteq> (2 * y)" by smt
-lemma "~ (\<exists>x y z::int. 4 * x + -6 * y = (1::int))" by smt
-lemma "~ (\<exists>x::int. False)" by smt
+lemma "\<forall>x::int. if x > 0 then x + 1 > 0 else 1 > x"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_11"]]
+  by smt
+
+lemma "if (ALL x::int. x < 0 \<or> x > 0) then False else True"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_12"]]
+  by smt
+
+lemma "(if (ALL x::int. x < 0 \<or> x > 0) then -1 else 3) > (0::int)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_13"]]
+  by smt
+
+lemma "~ (\<exists>x y z::int. 4 * x + -6 * y = (1::int))"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_14"]]
+  by smt
+
+lemma "\<exists>x::int. \<forall>x y. 0 < x \<and> 0 < y \<longrightarrow> (0::int) < x + y"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_15"]]
+  by smt
+
+lemma "\<exists>u::int. \<forall>(x::int) y::real. 0 < x \<and> 0 < y \<longrightarrow> -1 < x"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_16"]]
+  by smt
+
+lemma "\<exists>x::int. (\<forall>y. y \<ge> x \<longrightarrow> y > 0) \<longrightarrow> x > 0"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_17"]]
+  by smt
+
+lemma "\<forall>x::int. trigger [pat x] (x < a \<longrightarrow> 2 * x < 2 * a)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_18"]]
+  by smt
 
 
-section {* Non-linear arithmetic *}
+subsection {* Non-linear arithmetic over integers and reals *}
+
+lemma "a > (0::int) \<Longrightarrow> a*b > 0 \<Longrightarrow> b > 0"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_01"]]
+  using [[z3_proofs=false]]  -- {* Isabelle's arithmetic decision procedures
+    are too weak to automatically prove @{thm zero_less_mult_pos}. *}
+  by smt
 
-lemma "((x::int) * (1 + y) - x * (1 - y)) = (2 * x * y)" by smt
+lemma  "(a::int) * (x + 1 + y) = a * x + a * (y + 1)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_02"]]
+  by smt
+
+lemma "((x::real) * (1 + y) - x * (1 - y)) = (2 * x * y)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_03"]]
+  by smt
+
 lemma
   "(U::int) + (1 + p) * (b + e) + p * d =
    U + (2 * (1 + p) * (b + e) + (1 + p) * d + d * p) - (1 + p) * (b + d + e)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_04"]]
   by smt
 
 
-section {* Linear arithmetic for natural numbers *}
+subsection {* Linear arithmetic for natural numbers *}
+
+lemma "2 * (x::nat) ~= 1"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_01"]]
+  by smt
 
-lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a" by smt
-lemma "let x = (1::nat) + y in x - y > 0 * x" by smt
+lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_02"]]
+  by smt
+
+lemma "let x = (1::nat) + y in x - y > 0 * x"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_03"]]
+  by smt
+
 lemma
   "let x = (1::nat) + y in
    let P = (if x > 0 then True else False) in
    False \<or> P = (x - 1 = y) \<or> (\<not>P \<longrightarrow> False)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_04"]]
   by smt
 
+lemma "distinct [a + (1::nat), a * 2 + 3, a - a]"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_05"]]
+  by smt
+
+lemma "int (nat \<bar>x::int\<bar>) = \<bar>x\<bar>"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_06"]]
+  by smt
+
+definition prime_nat :: "nat \<Rightarrow> bool" where
+  "prime_nat p = (1 < p \<and> (\<forall>m. m dvd p --> m = 1 \<or> m = p))"
+lemma "prime_nat (4*m + 1) \<Longrightarrow> m \<ge> (1::nat)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_07"]]
+  by (smt add: prime_nat_def)
+
 
 section {* Bitvectors *}
 
 locale bv
 begin
 
-declare [[smt_solver=z3]]
+text {*
+The following examples only work for Z3, and only without proof reconstruction.
+*}
+
+declare [[smt_solver=z3, z3_proofs=false]]
+
+
+subsection {* Bitvector arithmetic *}
+
+lemma "(27 :: 4 word) = -5" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_01"]]
+  by smt
+
+lemma "(27 :: 4 word) = 11"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_02"]]
+  by smt
+
+lemma "23 < (27::8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_03"]]
+  by smt
+
+lemma "27 + 11 = (6::5 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_04"]]
+  by smt
 
-lemma "(27 :: 4 word) = -5" by smt
-lemma "(27 :: 4 word) = 11" by smt
-lemma "23 < (27::8 word)" by smt
-lemma "27 + 11 = (6::5 word)" by smt
-lemma "7 * 3 = (21::8 word)" by smt
-lemma "11 - 27 = (-16::8 word)" by smt
-lemma "- -11 = (11::5 word)" by smt
-lemma "-40 + 1 = (-39::7 word)" by smt
-lemma "a + 2 * b + c - b = (b + c) + (a :: 32 word)" by smt
+lemma "7 * 3 = (21::8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_05"]]
+  by smt
+lemma "11 - 27 = (-16::8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_06"]]
+  by smt
+
+lemma "- -11 = (11::5 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_07"]]
+  by smt
+
+lemma "-40 + 1 = (-39::7 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_08"]]
+  by smt
 
-lemma "0b110 AND 0b101 = (0b100 :: 32 word)" by smt
-lemma "0b110 OR 0b011 = (0b111 :: 8 word)" by smt
-lemma "0xF0 XOR 0xFF = (0x0F :: 8 word)" by smt
-lemma "NOT (0xF0 :: 16 word) = 0xFF0F" by smt
+lemma "a + 2 * b + c - b = (b + c) + (a :: 32 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_09"]]
+  by smt
+
+lemma "x = (5 :: 4 word) \<Longrightarrow> 4 * x = 4" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_10"]]
+  by smt
+
+
+subsection {* Bit-level logic *}
 
-lemma "word_cat (27::4 word) (27::8 word) = (2843::12 word)" by smt
-lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)" 
+lemma "0b110 AND 0b101 = (0b100 :: 32 word)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_01"]]
+  by smt
+
+lemma "0b110 OR 0b011 = (0b111 :: 8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_02"]]
+  by smt
+
+lemma "0xF0 XOR 0xFF = (0x0F :: 8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_03"]]
   by smt
 
-lemma "slice 1 (0b10110 :: 4 word) = (0b11 :: 2 word)" by smt
+lemma "NOT (0xF0 :: 16 word) = 0xFF0F" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_04"]]
+  by smt
+
+lemma "word_cat (27::4 word) (27::8 word) = (2843::12 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_05"]]
+  by smt
+
+lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_06"]]
+  by smt
 
-lemma "ucast (0b1010 :: 4 word) = (0b1010 :: 10 word)" by smt
-lemma "scast (0b1010 :: 4 word) = (0b111010 :: 6 word)" by smt
+lemma "slice 1 (0b10110 :: 4 word) = (0b11 :: 2 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_07"]]
+  by smt
+
+lemma "ucast (0b1010 :: 4 word) = (0b1010 :: 10 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_08"]]
+  by smt
+
+lemma "scast (0b1010 :: 4 word) = (0b111010 :: 6 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_09"]]
+  by smt
 
-lemma "bv_lshr 0b10011 2 = (0b100::8 word)" by smt
-lemma "bv_ashr 0b10011 2 = (0b100::8 word)" by smt
+lemma "bv_lshr 0b10011 2 = (0b100::8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_10"]]
+  by smt
+
+lemma "bv_ashr 0b10011 2 = (0b100::8 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_11"]]
+  by smt
+
+lemma "word_rotr 2 0b0110 = (0b1001::4 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_12"]]
+  by smt
 
-lemma "word_rotr 2 0b0110 = (0b1001::4 word)" by smt
-lemma "word_rotl 1 0b1110 = (0b1101::4 word)" by smt
+lemma "word_rotl 1 0b1110 = (0b1101::4 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_13"]]
+  by smt
 
-lemma "(x AND 0xff00) OR (x AND 0x00ff) = (x::16 word)" by smt
+lemma "(x AND 0xff00) OR (x AND 0x00ff) = (x::16 word)" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_14"]]
+  by smt
 
-lemma "w < 256 \<Longrightarrow> (w :: 16 word) AND 0x00FF = w" by smt
+lemma "w < 256 \<Longrightarrow> (w :: 16 word) AND 0x00FF = w" 
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_15"]]
+  by smt
 
 end
 
+lemma
+  assumes "bv2int 0 = 0"
+      and "bv2int 1 = 1"
+      and "bv2int 2 = 2"
+      and "bv2int 3 = 3"
+      and "\<forall>x::2 word. bv2int x > 0"
+  shows "\<forall>i::int. i < 0 \<longrightarrow> (\<forall>x::2 word. bv2int x > i)"
+  using assms 
+  using [[smt_solver=z3]]
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_01"]]
+  by smt
+
+lemma "P (0 \<le> (a :: 4 word)) = P True"
+  using [[smt_solver=z3, z3_proofs=false]]
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_02"]]
+  by smt
+
 
 section {* Pairs *}
 
-lemma "fst (x, y) = a \<Longrightarrow> x = a" by smt
-lemma "p1 = (x, y) \<and> p2 = (y, x) \<Longrightarrow> fst p1 = snd p2" by smt
+lemma "fst (x, y) = a \<Longrightarrow> x = a"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_pair_01"]]
+  by smt
+
+lemma "p1 = (x, y) \<and> p2 = (y, x) \<Longrightarrow> fst p1 = snd p2"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_pair_02"]]
+  by smt
 
 
 section {* Higher-order problems and recursion *}
 
-lemma "(f g x = (g x \<and> True)) \<or> (f g x = True) \<or> (g x = True)" by smt
-lemma "P ((2::int) < 3) = P True" by smt
-lemma "P ((2::int) < 3) = (P True :: bool)" by smt
-lemma "P (0 \<le> (a :: 4 word)) = P True" using [[smt_solver=z3]] by smt
-lemma "id 3 = 3 \<and> id True = True" by (smt add: id_def)
-lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> ((f (i1 := v1)) (i2 := v2)) i = f i" by smt
-lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]" by (smt add: map.simps)
-lemma "(ALL x. P x) | ~ All P" by smt
+lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> (f (i1 := v1, i2 := v2)) i = f i"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_01"]]
+  by smt
+
+lemma "(f g x = (g x \<and> True)) \<or> (f g x = True) \<or> (g x = True)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_02"]]
+  by smt
+
+lemma "id 3 = 3 \<and> id True = True"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_03"]]
+  by (smt add: id_def)
+
+lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> ((f (i1 := v1)) (i2 := v2)) i = f i"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_04"]]
+  by smt
+
+lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_05"]]
+  by (smt add: map.simps)
+
+lemma "(ALL x. P x) | ~ All P"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_06"]]
+  by smt
 
 fun dec_10 :: "nat \<Rightarrow> nat" where
   "dec_10 n = (if n < 10 then n else dec_10 (n - 10))"
-lemma "dec_10 (4 * dec_10 4) = 6" by (smt add: dec_10.simps)
+lemma "dec_10 (4 * dec_10 4) = 6"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_07"]]
+  by (smt add: dec_10.simps)
 
 axiomatization
   eval_dioph :: "int list \<Rightarrow> nat list \<Rightarrow> int"
@@ -163,7 +715,7 @@
    (eval_dioph ks (map (\<lambda>x. x mod 2) xs) mod 2 = l mod 2 \<and>
     eval_dioph ks (map (\<lambda>x. x div 2) xs) =
       (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)"
-  using [[smt_solver=z3]]
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_08"]]
   by (smt add: eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2])
 
 
@@ -171,13 +723,17 @@
 
 definition P :: "'a \<Rightarrow> bool" where "P x = True"
 lemma poly_P: "P x \<and> (P [x] \<or> \<not>P[x])" by (simp add: P_def)
-lemma "P (1::int)" by (smt add: poly_P)
+lemma "P (1::int)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_mono_01"]]
+  by (smt add: poly_P)
 
 consts g :: "'a \<Rightarrow> nat"
 axioms
   g1: "g (Some x) = g [x]"
   g2: "g None = g []"
   g3: "g xs = length xs"
-lemma "g (Some (3::int)) = g (Some True)" by (smt add: g1 g2 g3 list.size)
+lemma "g (Some (3::int)) = g (Some True)"
+  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_mono_02"]]
+  by (smt add: g1 g2 g3 list.size)
 
 end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (not (exists (?x1 Int) false)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,24 @@
+#2 := false
+#4 := (exists (vars (?x1 int)) false)
+#5 := (not #4)
+#6 := (not #5)
+#37 := (iff #6 false)
+#1 := true
+#32 := (not true)
+#35 := (iff #32 false)
+#36 := [rewrite]: #35
+#33 := (iff #6 #32)
+#30 := (iff #5 true)
+#25 := (not false)
+#28 := (iff #25 true)
+#29 := [rewrite]: #28
+#26 := (iff #5 #25)
+#23 := (iff #4 false)
+#24 := [elim-unused]: #23
+#27 := [monotonicity #24]: #26
+#31 := [trans #27 #29]: #30
+#34 := [monotonicity #31]: #33
+#38 := [trans #34 #36]: #37
+#22 := [asserted]: #6
+[mp #22 #38]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (not (exists (?x1 Real) false)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,24 @@
+#2 := false
+#4 := (exists (vars (?x1 real)) false)
+#5 := (not #4)
+#6 := (not #5)
+#37 := (iff #6 false)
+#1 := true
+#32 := (not true)
+#35 := (iff #32 false)
+#36 := [rewrite]: #35
+#33 := (iff #6 #32)
+#30 := (iff #5 true)
+#25 := (not false)
+#28 := (iff #25 true)
+#29 := [rewrite]: #28
+#26 := (iff #5 #25)
+#23 := (iff #4 false)
+#24 := [elim-unused]: #23
+#27 := [monotonicity #24]: #26
+#31 := [trans #27 #29]: #30
+#34 := [monotonicity #31]: #33
+#38 := [trans #34 #36]: #37
+#22 := [asserted]: #6
+[mp #22 #38]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_03	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (exists (?x1 Int) (< 0 ?x1)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_03.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_04	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (exists (?x1 Real) (< 0.0 ?x1)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_04.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_05	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (forall (?x1 Int) (exists (?x2 Int) (< ?x1 ?x2))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_05.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_06	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (forall (?x1 Int) (?x2 Int) (implies (and (= ?x1 0) (= ?x2 1)) (not (= ?x1 ?x2)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_06.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,73 @@
+#2 := false
+#5 := 0::int
+#8 := 1::int
+#143 := (= 1::int 0::int)
+#145 := (iff #143 false)
+#146 := [rewrite]: #145
+decl ?x1!1 :: int
+#47 := ?x1!1
+#51 := (= ?x1!1 0::int)
+decl ?x2!0 :: int
+#46 := ?x2!0
+#50 := (= ?x2!0 1::int)
+#63 := (and #50 #51)
+#69 := (= ?x2!0 ?x1!1)
+#72 := (not #69)
+#66 := (not #63)
+#75 := (or #66 #72)
+#78 := (not #75)
+#48 := (= ?x1!1 ?x2!0)
+#49 := (not #48)
+#52 := (and #51 #50)
+#53 := (not #52)
+#54 := (or #53 #49)
+#55 := (not #54)
+#79 := (iff #55 #78)
+#76 := (iff #54 #75)
+#73 := (iff #49 #72)
+#70 := (iff #48 #69)
+#71 := [rewrite]: #70
+#74 := [monotonicity #71]: #73
+#67 := (iff #53 #66)
+#64 := (iff #52 #63)
+#65 := [rewrite]: #64
+#68 := [monotonicity #65]: #67
+#77 := [monotonicity #68 #74]: #76
+#80 := [monotonicity #77]: #79
+#7 := (:var 0 int)
+#4 := (:var 1 int)
+#11 := (= #4 #7)
+#12 := (not #11)
+#9 := (= #7 1::int)
+#6 := (= #4 0::int)
+#10 := (and #6 #9)
+#32 := (not #10)
+#33 := (or #32 #12)
+#36 := (forall (vars (?x1 int) (?x2 int)) #33)
+#39 := (not #36)
+#56 := (~ #39 #55)
+#57 := [sk]: #56
+#13 := (implies #10 #12)
+#14 := (forall (vars (?x1 int) (?x2 int)) #13)
+#15 := (not #14)
+#40 := (iff #15 #39)
+#37 := (iff #14 #36)
+#34 := (iff #13 #33)
+#35 := [rewrite]: #34
+#38 := [quant-intro #35]: #37
+#41 := [monotonicity #38]: #40
+#31 := [asserted]: #15
+#44 := [mp #31 #41]: #39
+#60 := [mp~ #44 #57]: #55
+#61 := [mp #60 #80]: #78
+#62 := [not-or-elim #61]: #63
+#82 := [and-elim #62]: #51
+#141 := (= 1::int ?x1!1)
+#83 := [not-or-elim #61]: #69
+#139 := (= 1::int ?x2!0)
+#81 := [and-elim #62]: #50
+#140 := [symm #81]: #139
+#142 := [trans #140 #83]: #141
+#144 := [trans #142 #82]: #143
+[mp #144 #146]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_07	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (exists (?x1 Int) (forall (?x2 Int) (implies (< ?x1 ?x2) (or (< ?x2 0) (<= 0 ?x2))))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_07.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,82 @@
+#2 := false
+#5 := (:var 0 int)
+#7 := 0::int
+#9 := (<= 0::int #5)
+#8 := (< #5 0::int)
+#10 := (or #8 #9)
+#4 := (:var 1 int)
+#6 := (< #4 #5)
+#11 := (implies #6 #10)
+#12 := (forall (vars (?x2 int)) #11)
+#13 := (exists (vars (?x1 int)) #12)
+#14 := (not #13)
+#95 := (iff #14 false)
+#31 := (not #6)
+#32 := (or #31 #10)
+#35 := (forall (vars (?x2 int)) #32)
+#38 := (exists (vars (?x1 int)) #35)
+#41 := (not #38)
+#93 := (iff #41 false)
+#1 := true
+#88 := (not true)
+#91 := (iff #88 false)
+#92 := [rewrite]: #91
+#89 := (iff #41 #88)
+#86 := (iff #38 true)
+#81 := (exists (vars (?x1 int)) true)
+#84 := (iff #81 true)
+#85 := [elim-unused]: #84
+#82 := (iff #38 #81)
+#79 := (iff #35 true)
+#74 := (forall (vars (?x2 int)) true)
+#77 := (iff #74 true)
+#78 := [elim-unused]: #77
+#75 := (iff #35 #74)
+#72 := (iff #32 true)
+#46 := (>= #5 0::int)
+#44 := (not #46)
+#64 := (or #44 #46)
+#50 := -1::int
+#53 := (* -1::int #5)
+#54 := (+ #4 #53)
+#52 := (>= #54 0::int)
+#67 := (or #52 #64)
+#70 := (iff #67 true)
+#71 := [rewrite]: #70
+#68 := (iff #32 #67)
+#65 := (iff #10 #64)
+#48 := (iff #9 #46)
+#49 := [rewrite]: #48
+#45 := (iff #8 #44)
+#47 := [rewrite]: #45
+#66 := [monotonicity #47 #49]: #65
+#62 := (iff #31 #52)
+#51 := (not #52)
+#57 := (not #51)
+#60 := (iff #57 #52)
+#61 := [rewrite]: #60
+#58 := (iff #31 #57)
+#55 := (iff #6 #51)
+#56 := [rewrite]: #55
+#59 := [monotonicity #56]: #58
+#63 := [trans #59 #61]: #62
+#69 := [monotonicity #63 #66]: #68
+#73 := [trans #69 #71]: #72
+#76 := [quant-intro #73]: #75
+#80 := [trans #76 #78]: #79
+#83 := [quant-intro #80]: #82
+#87 := [trans #83 #85]: #86
+#90 := [monotonicity #87]: #89
+#94 := [trans #90 #92]: #93
+#42 := (iff #14 #41)
+#39 := (iff #13 #38)
+#36 := (iff #12 #35)
+#33 := (iff #11 #32)
+#34 := [rewrite]: #33
+#37 := [quant-intro #34]: #36
+#40 := [quant-intro #37]: #39
+#43 := [monotonicity #40]: #42
+#96 := [trans #43 #94]: #95
+#30 := [asserted]: #14
+[mp #30 #96]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_08	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (forall (?x1 Int) (?x2 Int) (implies (< ?x1 ?x2) (< (+ (* 2 ?x1) 1) (* 2 ?x2)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_08.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,128 @@
+#2 := false
+#9 := 1::int
+decl ?x1!1 :: int
+#91 := ?x1!1
+#68 := -2::int
+#129 := (* -2::int ?x1!1)
+decl ?x2!0 :: int
+#90 := ?x2!0
+#7 := 2::int
+#128 := (* 2::int ?x2!0)
+#130 := (+ #128 #129)
+#131 := (<= #130 1::int)
+#136 := (not #131)
+#55 := 0::int
+#53 := -1::int
+#115 := (* -1::int ?x1!1)
+#116 := (+ ?x2!0 #115)
+#117 := (<= #116 0::int)
+#139 := (or #117 #136)
+#142 := (not #139)
+#92 := (* -2::int ?x2!0)
+#93 := (* 2::int ?x1!1)
+#94 := (+ #93 #92)
+#95 := (>= #94 -1::int)
+#96 := (not #95)
+#97 := (* -1::int ?x2!0)
+#98 := (+ ?x1!1 #97)
+#99 := (>= #98 0::int)
+#100 := (or #99 #96)
+#101 := (not #100)
+#143 := (iff #101 #142)
+#140 := (iff #100 #139)
+#137 := (iff #96 #136)
+#134 := (iff #95 #131)
+#122 := (+ #92 #93)
+#125 := (>= #122 -1::int)
+#132 := (iff #125 #131)
+#133 := [rewrite]: #132
+#126 := (iff #95 #125)
+#123 := (= #94 #122)
+#124 := [rewrite]: #123
+#127 := [monotonicity #124]: #126
+#135 := [trans #127 #133]: #134
+#138 := [monotonicity #135]: #137
+#120 := (iff #99 #117)
+#109 := (+ #97 ?x1!1)
+#112 := (>= #109 0::int)
+#118 := (iff #112 #117)
+#119 := [rewrite]: #118
+#113 := (iff #99 #112)
+#110 := (= #98 #109)
+#111 := [rewrite]: #110
+#114 := [monotonicity #111]: #113
+#121 := [trans #114 #119]: #120
+#141 := [monotonicity #121 #138]: #140
+#144 := [monotonicity #141]: #143
+#5 := (:var 0 int)
+#71 := (* -2::int #5)
+#4 := (:var 1 int)
+#8 := (* 2::int #4)
+#72 := (+ #8 #71)
+#70 := (>= #72 -1::int)
+#69 := (not #70)
+#57 := (* -1::int #5)
+#58 := (+ #4 #57)
+#56 := (>= #58 0::int)
+#75 := (or #56 #69)
+#78 := (forall (vars (?x1 int) (?x2 int)) #75)
+#81 := (not #78)
+#102 := (~ #81 #101)
+#103 := [sk]: #102
+#11 := (* 2::int #5)
+#10 := (+ #8 1::int)
+#12 := (< #10 #11)
+#6 := (< #4 #5)
+#13 := (implies #6 #12)
+#14 := (forall (vars (?x1 int) (?x2 int)) #13)
+#15 := (not #14)
+#84 := (iff #15 #81)
+#32 := (+ 1::int #8)
+#35 := (< #32 #11)
+#41 := (not #6)
+#42 := (or #41 #35)
+#47 := (forall (vars (?x1 int) (?x2 int)) #42)
+#50 := (not #47)
+#82 := (iff #50 #81)
+#79 := (iff #47 #78)
+#76 := (iff #42 #75)
+#73 := (iff #35 #69)
+#74 := [rewrite]: #73
+#66 := (iff #41 #56)
+#54 := (not #56)
+#61 := (not #54)
+#64 := (iff #61 #56)
+#65 := [rewrite]: #64
+#62 := (iff #41 #61)
+#59 := (iff #6 #54)
+#60 := [rewrite]: #59
+#63 := [monotonicity #60]: #62
+#67 := [trans #63 #65]: #66
+#77 := [monotonicity #67 #74]: #76
+#80 := [quant-intro #77]: #79
+#83 := [monotonicity #80]: #82
+#51 := (iff #15 #50)
+#48 := (iff #14 #47)
+#45 := (iff #13 #42)
+#38 := (implies #6 #35)
+#43 := (iff #38 #42)
+#44 := [rewrite]: #43
+#39 := (iff #13 #38)
+#36 := (iff #12 #35)
+#33 := (= #10 #32)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#40 := [monotonicity #37]: #39
+#46 := [trans #40 #44]: #45
+#49 := [quant-intro #46]: #48
+#52 := [monotonicity #49]: #51
+#85 := [trans #52 #83]: #84
+#31 := [asserted]: #15
+#86 := [mp #31 #85]: #81
+#106 := [mp~ #86 #103]: #101
+#107 := [mp #106 #144]: #142
+#146 := [not-or-elim #107]: #131
+#108 := (not #117)
+#145 := [not-or-elim #107]: #108
+[th-lemma #145 #146]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_09	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (forall (?x1 Int) (?x2 Int) (not (= (+ (* 2 ?x1) 1) (* 2 ?x2)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_09.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,100 @@
+#2 := false
+#7 := 1::int
+decl ?x1!1 :: int
+#74 := ?x1!1
+#51 := -2::int
+#96 := (* -2::int ?x1!1)
+decl ?x2!0 :: int
+#73 := ?x2!0
+#4 := 2::int
+#95 := (* 2::int ?x2!0)
+#97 := (+ #95 #96)
+#166 := (<= #97 1::int)
+#94 := (= #97 1::int)
+#53 := -1::int
+#75 := (* -2::int ?x2!0)
+#76 := (* 2::int ?x1!1)
+#77 := (+ #76 #75)
+#78 := (= #77 -1::int)
+#79 := (not #78)
+#80 := (not #79)
+#110 := (iff #80 #94)
+#102 := (not #94)
+#105 := (not #102)
+#108 := (iff #105 #94)
+#109 := [rewrite]: #108
+#106 := (iff #80 #105)
+#103 := (iff #79 #102)
+#100 := (iff #78 #94)
+#88 := (+ #75 #76)
+#91 := (= #88 -1::int)
+#98 := (iff #91 #94)
+#99 := [rewrite]: #98
+#92 := (iff #78 #91)
+#89 := (= #77 #88)
+#90 := [rewrite]: #89
+#93 := [monotonicity #90]: #92
+#101 := [trans #93 #99]: #100
+#104 := [monotonicity #101]: #103
+#107 := [monotonicity #104]: #106
+#111 := [trans #107 #109]: #110
+#9 := (:var 0 int)
+#55 := (* -2::int #9)
+#5 := (:var 1 int)
+#6 := (* 2::int #5)
+#56 := (+ #6 #55)
+#54 := (= #56 -1::int)
+#58 := (not #54)
+#61 := (forall (vars (?x1 int) (?x2 int)) #58)
+#64 := (not #61)
+#81 := (~ #64 #80)
+#82 := [sk]: #81
+#10 := (* 2::int #9)
+#8 := (+ #6 1::int)
+#11 := (= #8 #10)
+#12 := (not #11)
+#13 := (forall (vars (?x1 int) (?x2 int)) #12)
+#14 := (not #13)
+#67 := (iff #14 #64)
+#31 := (+ 1::int #6)
+#37 := (= #10 #31)
+#42 := (not #37)
+#45 := (forall (vars (?x1 int) (?x2 int)) #42)
+#48 := (not #45)
+#65 := (iff #48 #64)
+#62 := (iff #45 #61)
+#59 := (iff #42 #58)
+#52 := (iff #37 #54)
+#57 := [rewrite]: #52
+#60 := [monotonicity #57]: #59
+#63 := [quant-intro #60]: #62
+#66 := [monotonicity #63]: #65
+#49 := (iff #14 #48)
+#46 := (iff #13 #45)
+#43 := (iff #12 #42)
+#40 := (iff #11 #37)
+#34 := (= #31 #10)
+#38 := (iff #34 #37)
+#39 := [rewrite]: #38
+#35 := (iff #11 #34)
+#32 := (= #8 #31)
+#33 := [rewrite]: #32
+#36 := [monotonicity #33]: #35
+#41 := [trans #36 #39]: #40
+#44 := [monotonicity #41]: #43
+#47 := [quant-intro #44]: #46
+#50 := [monotonicity #47]: #49
+#68 := [trans #50 #66]: #67
+#30 := [asserted]: #14
+#69 := [mp #30 #68]: #64
+#85 := [mp~ #69 #82]: #80
+#86 := [mp #85 #111]: #94
+#168 := (or #102 #166)
+#169 := [th-lemma]: #168
+#170 := [unit-resolution #169 #86]: #166
+#167 := (>= #97 1::int)
+#171 := (or #102 #167)
+#172 := [th-lemma]: #171
+#173 := [unit-resolution #172 #86]: #167
+[th-lemma #173 #170]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_10	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (forall (?x1 Int) (?x2 Int) (or (< 2 (+ ?x1 ?x2)) (or (= (+ ?x1 ?x2) 2) (< (+ ?x1 ?x2) 2)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_10.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,111 @@
+#2 := false
+#4 := 2::int
+decl ?x1!1 :: int
+#85 := ?x1!1
+decl ?x2!0 :: int
+#84 := ?x2!0
+#101 := (+ ?x2!0 ?x1!1)
+#107 := (>= #101 2::int)
+#113 := (<= #101 2::int)
+#116 := (not #113)
+#110 := (not #107)
+#104 := (= #101 2::int)
+#119 := (or #104 #110 #116)
+#122 := (not #119)
+#86 := (+ ?x1!1 ?x2!0)
+#87 := (<= #86 2::int)
+#88 := (not #87)
+#89 := (>= #86 2::int)
+#90 := (not #89)
+#91 := (= #86 2::int)
+#92 := (or #91 #90 #88)
+#93 := (not #92)
+#123 := (iff #93 #122)
+#120 := (iff #92 #119)
+#117 := (iff #88 #116)
+#114 := (iff #87 #113)
+#102 := (= #86 #101)
+#103 := [rewrite]: #102
+#115 := [monotonicity #103]: #114
+#118 := [monotonicity #115]: #117
+#111 := (iff #90 #110)
+#108 := (iff #89 #107)
+#109 := [monotonicity #103]: #108
+#112 := [monotonicity #109]: #111
+#105 := (iff #91 #104)
+#106 := [monotonicity #103]: #105
+#121 := [monotonicity #106 #112 #118]: #120
+#124 := [monotonicity #121]: #123
+#6 := (:var 0 int)
+#5 := (:var 1 int)
+#7 := (+ #5 #6)
+#56 := (<= #7 2::int)
+#58 := (not #56)
+#54 := (>= #7 2::int)
+#51 := (not #54)
+#9 := (= #7 2::int)
+#67 := (or #9 #51 #58)
+#72 := (forall (vars (?x1 int) (?x2 int)) #67)
+#75 := (not #72)
+#94 := (~ #75 #93)
+#95 := [sk]: #94
+#10 := (< #7 2::int)
+#11 := (or #9 #10)
+#8 := (< 2::int #7)
+#12 := (or #8 #11)
+#13 := (forall (vars (?x1 int) (?x2 int)) #12)
+#14 := (not #13)
+#78 := (iff #14 #75)
+#31 := (= 2::int #7)
+#37 := (or #10 #31)
+#42 := (or #8 #37)
+#45 := (forall (vars (?x1 int) (?x2 int)) #42)
+#48 := (not #45)
+#76 := (iff #48 #75)
+#73 := (iff #45 #72)
+#70 := (iff #42 #67)
+#61 := (or #51 #9)
+#64 := (or #58 #61)
+#68 := (iff #64 #67)
+#69 := [rewrite]: #68
+#65 := (iff #42 #64)
+#62 := (iff #37 #61)
+#55 := (iff #31 #9)
+#57 := [rewrite]: #55
+#53 := (iff #10 #51)
+#52 := [rewrite]: #53
+#63 := [monotonicity #52 #57]: #62
+#59 := (iff #8 #58)
+#60 := [rewrite]: #59
+#66 := [monotonicity #60 #63]: #65
+#71 := [trans #66 #69]: #70
+#74 := [quant-intro #71]: #73
+#77 := [monotonicity #74]: #76
+#49 := (iff #14 #48)
+#46 := (iff #13 #45)
+#43 := (iff #12 #42)
+#40 := (iff #11 #37)
+#34 := (or #31 #10)
+#38 := (iff #34 #37)
+#39 := [rewrite]: #38
+#35 := (iff #11 #34)
+#32 := (iff #9 #31)
+#33 := [rewrite]: #32
+#36 := [monotonicity #33]: #35
+#41 := [trans #36 #39]: #40
+#44 := [monotonicity #41]: #43
+#47 := [quant-intro #44]: #46
+#50 := [monotonicity #47]: #49
+#79 := [trans #50 #77]: #78
+#30 := [asserted]: #14
+#80 := [mp #30 #79]: #75
+#98 := [mp~ #80 #95]: #93
+#99 := [mp #98 #124]: #122
+#126 := [not-or-elim #99]: #107
+#100 := (not #104)
+#125 := [not-or-elim #99]: #100
+#127 := [not-or-elim #99]: #113
+#183 := (or #104 #116 #110)
+#184 := [th-lemma]: #183
+[unit-resolution #184 #127 #125 #126]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_11	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (forall (?x1 Int) (if_then_else (< 0 ?x1) (< 0 (+ ?x1 1)) (< ?x1 1))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_11.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,89 @@
+#2 := false
+#4 := 0::int
+decl ?x1!0 :: int
+#78 := ?x1!0
+#83 := (<= ?x1!0 0::int)
+#146 := (not #83)
+#155 := [hypothesis]: #83
+#7 := 1::int
+#81 := (>= ?x1!0 1::int)
+#82 := (not #81)
+#156 := (or #82 #146)
+#157 := [th-lemma]: #156
+#158 := [unit-resolution #157 #155]: #82
+#159 := (or #146 #81)
+#49 := -1::int
+#79 := (<= ?x1!0 -1::int)
+#80 := (not #79)
+#84 := (ite #83 #82 #80)
+#85 := (not #84)
+#5 := (:var 0 int)
+#50 := (<= #5 -1::int)
+#51 := (not #50)
+#55 := (>= #5 1::int)
+#54 := (not #55)
+#45 := (<= #5 0::int)
+#61 := (ite #45 #54 #51)
+#66 := (forall (vars (?x1 int)) #61)
+#69 := (not #66)
+#86 := (~ #69 #85)
+#87 := [sk]: #86
+#10 := (< #5 1::int)
+#8 := (+ #5 1::int)
+#9 := (< 0::int #8)
+#6 := (< 0::int #5)
+#11 := (ite #6 #9 #10)
+#12 := (forall (vars (?x1 int)) #11)
+#13 := (not #12)
+#72 := (iff #13 #69)
+#30 := (+ 1::int #5)
+#33 := (< 0::int #30)
+#36 := (ite #6 #33 #10)
+#39 := (forall (vars (?x1 int)) #36)
+#42 := (not #39)
+#70 := (iff #42 #69)
+#67 := (iff #39 #66)
+#64 := (iff #36 #61)
+#46 := (not #45)
+#58 := (ite #46 #51 #54)
+#62 := (iff #58 #61)
+#63 := [rewrite]: #62
+#59 := (iff #36 #58)
+#56 := (iff #10 #54)
+#57 := [rewrite]: #56
+#52 := (iff #33 #51)
+#53 := [rewrite]: #52
+#47 := (iff #6 #46)
+#48 := [rewrite]: #47
+#60 := [monotonicity #48 #53 #57]: #59
+#65 := [trans #60 #63]: #64
+#68 := [quant-intro #65]: #67
+#71 := [monotonicity #68]: #70
+#43 := (iff #13 #42)
+#40 := (iff #12 #39)
+#37 := (iff #11 #36)
+#34 := (iff #9 #33)
+#31 := (= #8 #30)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#38 := [monotonicity #35]: #37
+#41 := [quant-intro #38]: #40
+#44 := [monotonicity #41]: #43
+#73 := [trans #44 #71]: #72
+#29 := [asserted]: #13
+#74 := [mp #29 #73]: #69
+#90 := [mp~ #74 #87]: #85
+#151 := (or #84 #146 #81)
+#152 := [def-axiom]: #151
+#160 := [unit-resolution #152 #90]: #159
+#161 := [unit-resolution #160 #158 #155]: false
+#162 := [lemma #161]: #146
+#163 := (or #80 #83)
+#164 := [th-lemma]: #163
+#165 := [unit-resolution #164 #162]: #80
+#166 := (or #83 #79)
+#153 := (or #84 #83 #79)
+#154 := [def-axiom]: #153
+#167 := [unit-resolution #154 #90]: #166
+[unit-resolution #167 #165 #162]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_12	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (if_then_else (forall (?x1 Int) (or (< ?x1 0) (< 0 ?x1))) false true))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_12.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,83 @@
+#2 := false
+#5 := 0::int
+#4 := (:var 0 int)
+#42 := (<= #4 0::int)
+#43 := (not #42)
+#40 := (>= #4 0::int)
+#38 := (not #40)
+#46 := (or #38 #43)
+#49 := (forall (vars (?x1 int)) #46)
+#524 := (not #49)
+#118 := (<= 0::int 0::int)
+#205 := (not #118)
+#119 := (>= 0::int 0::int)
+#206 := (not #119)
+#120 := (or #206 #205)
+#183 := (or #524 #120)
+#172 := (iff #183 #524)
+#525 := (or #524 false)
+#168 := (iff #525 #524)
+#510 := [rewrite]: #168
+#184 := (iff #183 #525)
+#528 := (iff #120 false)
+#197 := (or false false)
+#532 := (iff #197 false)
+#533 := [rewrite]: #532
+#530 := (iff #120 #197)
+#523 := (iff #205 false)
+#1 := true
+#209 := (not true)
+#211 := (iff #209 false)
+#208 := [rewrite]: #211
+#185 := (iff #205 #209)
+#527 := (iff #118 true)
+#529 := [rewrite]: #527
+#316 := [monotonicity #529]: #185
+#196 := [trans #316 #208]: #523
+#212 := (iff #206 false)
+#210 := (iff #206 #209)
+#207 := (iff #119 true)
+#198 := [rewrite]: #207
+#138 := [monotonicity #198]: #210
+#191 := [trans #138 #208]: #212
+#531 := [monotonicity #191 #196]: #530
+#534 := [trans #531 #533]: #528
+#526 := [monotonicity #534]: #184
+#173 := [trans #526 #510]: #172
+#188 := [quant-inst]: #183
+#174 := [mp #188 #173]: #524
+#60 := (~ #49 #49)
+#58 := (~ #46 #46)
+#59 := [refl]: #58
+#61 := [nnf-pos #59]: #60
+#7 := (< 0::int #4)
+#6 := (< #4 0::int)
+#8 := (or #6 #7)
+#9 := (forall (vars (?x1 int)) #8)
+#10 := (ite #9 false true)
+#11 := (not #10)
+#52 := (iff #11 #49)
+#50 := (iff #9 #49)
+#47 := (iff #8 #46)
+#44 := (iff #7 #43)
+#45 := [rewrite]: #44
+#39 := (iff #6 #38)
+#41 := [rewrite]: #39
+#48 := [monotonicity #41 #45]: #47
+#51 := [quant-intro #48]: #50
+#36 := (iff #11 #9)
+#28 := (not #9)
+#31 := (not #28)
+#34 := (iff #31 #9)
+#35 := [rewrite]: #34
+#32 := (iff #11 #31)
+#29 := (iff #10 #28)
+#30 := [rewrite]: #29
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#53 := [trans #37 #51]: #52
+#27 := [asserted]: #11
+#54 := [mp #27 #53]: #49
+#62 := [mp~ #54 #61]: #49
+[unit-resolution #62 #174]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_13	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (< 0 (ite (forall (?x1 Int) (or (< ?x1 0) (< 0 ?x1))) (~ 1) 3)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_13.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,180 @@
+#2 := false
+#4 := 0::int
+#5 := (:var 0 int)
+#48 := (<= #5 0::int)
+#49 := (not #48)
+#45 := (>= #5 0::int)
+#44 := (not #45)
+#52 := (or #44 #49)
+#55 := (forall (vars (?x1 int)) #52)
+#86 := (not #55)
+#604 := (<= 0::int 0::int)
+#264 := (not #604)
+#269 := (>= 0::int 0::int)
+#605 := (not #269)
+#265 := (or #605 #264)
+#588 := (or #86 #265)
+#584 := (iff #588 #86)
+#311 := (or #86 false)
+#314 := (iff #311 #86)
+#208 := [rewrite]: #314
+#312 := (iff #588 #311)
+#599 := (iff #265 false)
+#598 := (or false false)
+#241 := (iff #598 false)
+#601 := [rewrite]: #241
+#600 := (iff #265 #598)
+#597 := (iff #264 false)
+#1 := true
+#590 := (not true)
+#255 := (iff #590 false)
+#256 := [rewrite]: #255
+#596 := (iff #264 #590)
+#594 := (iff #604 true)
+#595 := [rewrite]: #594
+#591 := [monotonicity #595]: #596
+#235 := [trans #591 #256]: #597
+#592 := (iff #605 false)
+#253 := (iff #605 #590)
+#606 := (iff #269 true)
+#249 := [rewrite]: #606
+#254 := [monotonicity #249]: #253
+#593 := [trans #254 #256]: #592
+#240 := [monotonicity #593 #235]: #600
+#602 := [trans #240 #601]: #599
+#313 := [monotonicity #602]: #312
+#585 := [trans #313 #208]: #584
+#589 := [quant-inst]: #588
+#307 := [mp #589 #585]: #86
+decl z3name!0 :: bool
+#83 := z3name!0
+#12 := 3::int
+#32 := -1::int
+#92 := (ite z3name!0 -1::int 3::int)
+#290 := (= #92 3::int)
+#610 := (not #290)
+#607 := (>= #92 3::int)
+#609 := (not #607)
+#95 := (<= #92 0::int)
+#58 := (ite #55 -1::int 3::int)
+#64 := (<= #58 0::int)
+#96 := (~ #64 #95)
+#93 := (= #58 #92)
+#90 := (~ #55 z3name!0)
+#87 := (or z3name!0 #86)
+#84 := (not z3name!0)
+#85 := (or #84 #55)
+#88 := (and #85 #87)
+#89 := [intro-def]: #88
+#91 := [apply-def #89]: #90
+#94 := [monotonicity #91]: #93
+#97 := [monotonicity #94]: #96
+#10 := 1::int
+#11 := (- 1::int)
+#7 := (< 0::int #5)
+#6 := (< #5 0::int)
+#8 := (or #6 #7)
+#9 := (forall (vars (?x1 int)) #8)
+#13 := (ite #9 #11 3::int)
+#14 := (< 0::int #13)
+#15 := (not #14)
+#77 := (iff #15 #64)
+#35 := (ite #9 -1::int 3::int)
+#38 := (< 0::int #35)
+#41 := (not #38)
+#75 := (iff #41 #64)
+#65 := (not #64)
+#70 := (not #65)
+#73 := (iff #70 #64)
+#74 := [rewrite]: #73
+#71 := (iff #41 #70)
+#68 := (iff #38 #65)
+#61 := (< 0::int #58)
+#66 := (iff #61 #65)
+#67 := [rewrite]: #66
+#62 := (iff #38 #61)
+#59 := (= #35 #58)
+#56 := (iff #9 #55)
+#53 := (iff #8 #52)
+#50 := (iff #7 #49)
+#51 := [rewrite]: #50
+#46 := (iff #6 #44)
+#47 := [rewrite]: #46
+#54 := [monotonicity #47 #51]: #53
+#57 := [quant-intro #54]: #56
+#60 := [monotonicity #57]: #59
+#63 := [monotonicity #60]: #62
+#69 := [trans #63 #67]: #68
+#72 := [monotonicity #69]: #71
+#76 := [trans #72 #74]: #75
+#42 := (iff #15 #41)
+#39 := (iff #14 #38)
+#36 := (= #13 #35)
+#33 := (= #11 -1::int)
+#34 := [rewrite]: #33
+#37 := [monotonicity #34]: #36
+#40 := [monotonicity #37]: #39
+#43 := [monotonicity #40]: #42
+#78 := [trans #43 #76]: #77
+#31 := [asserted]: #15
+#79 := [mp #31 #78]: #64
+#126 := [mp~ #79 #97]: #95
+#266 := (not #95)
+#396 := (or #609 #266)
+#603 := [th-lemma]: #396
+#277 := [unit-resolution #603 #126]: #609
+#278 := [hypothesis]: #290
+#611 := (or #610 #607)
+#612 := [th-lemma]: #611
+#613 := [unit-resolution #612 #278 #277]: false
+#608 := [lemma #613]: #610
+#289 := (or z3name!0 #290)
+#293 := [def-axiom]: #289
+#308 := [unit-resolution #293 #608]: z3name!0
+#129 := (or #55 #84)
+decl ?x1!1 :: int
+#108 := ?x1!1
+#111 := (>= ?x1!1 0::int)
+#112 := (not #111)
+#109 := (<= ?x1!1 0::int)
+#110 := (not #109)
+#132 := (or #110 #112)
+#135 := (not #132)
+#138 := (or z3name!0 #135)
+#141 := (and #129 #138)
+#113 := (or #112 #110)
+#114 := (not #113)
+#119 := (or z3name!0 #114)
+#122 := (and #85 #119)
+#142 := (iff #122 #141)
+#139 := (iff #119 #138)
+#136 := (iff #114 #135)
+#133 := (iff #113 #132)
+#134 := [rewrite]: #133
+#137 := [monotonicity #134]: #136
+#140 := [monotonicity #137]: #139
+#130 := (iff #85 #129)
+#131 := [rewrite]: #130
+#143 := [monotonicity #131 #140]: #142
+#123 := (~ #88 #122)
+#120 := (~ #87 #119)
+#115 := (~ #86 #114)
+#116 := [sk]: #115
+#106 := (~ z3name!0 z3name!0)
+#107 := [refl]: #106
+#121 := [monotonicity #107 #116]: #120
+#104 := (~ #85 #85)
+#102 := (~ #55 #55)
+#100 := (~ #52 #52)
+#101 := [refl]: #100
+#103 := [nnf-pos #101]: #102
+#98 := (~ #84 #84)
+#99 := [refl]: #98
+#105 := [monotonicity #99 #103]: #104
+#124 := [monotonicity #105 #121]: #123
+#125 := [mp~ #89 #124]: #122
+#127 := [mp #125 #143]: #141
+#128 := [and-elim #127]: #129
+#582 := [unit-resolution #128 #308]: #55
+[unit-resolution #582 #307]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_14	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (not (exists (?x1 Int) (?x2 Int) (?x3 Int) (= (+ (* 4 ?x1) (* (~ 6) ?x2)) 1))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_14.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,103 @@
+#2 := false
+#104 := -1::int
+decl ?x1!1 :: int
+#86 := ?x1!1
+#106 := -4::int
+#107 := (* -4::int ?x1!1)
+decl ?x2!0 :: int
+#85 := ?x2!0
+#7 := 6::int
+#105 := (* 6::int ?x2!0)
+#108 := (+ #105 #107)
+#168 := (<= #108 -1::int)
+#109 := (= #108 -1::int)
+#12 := 1::int
+#33 := -6::int
+#87 := (* -6::int ?x2!0)
+#4 := 4::int
+#88 := (* 4::int ?x1!1)
+#89 := (+ #88 #87)
+#90 := (= #89 1::int)
+#112 := (iff #90 #109)
+#98 := (+ #87 #88)
+#101 := (= #98 1::int)
+#110 := (iff #101 #109)
+#111 := [rewrite]: #110
+#102 := (iff #90 #101)
+#99 := (= #89 #98)
+#100 := [rewrite]: #99
+#103 := [monotonicity #100]: #102
+#113 := [trans #103 #111]: #112
+#53 := (:var 0 int)
+#54 := (* -6::int #53)
+#9 := (:var 1 int)
+#55 := (* 4::int #9)
+#56 := (+ #55 #54)
+#76 := (= #56 1::int)
+#74 := (exists (vars (?x1 int) (?x2 int)) #76)
+#91 := (~ #74 #90)
+#92 := [sk]: #91
+#8 := (- 6::int)
+#10 := (* #8 #9)
+#5 := (:var 2 int)
+#6 := (* 4::int #5)
+#11 := (+ #6 #10)
+#13 := (= #11 1::int)
+#14 := (exists (vars (?x1 int) (?x2 int) (?x3 int)) #13)
+#15 := (not #14)
+#16 := (not #15)
+#79 := (iff #16 #74)
+#57 := (= 1::int #56)
+#58 := (exists (vars (?x1 int) (?x2 int)) #57)
+#77 := (iff #58 #74)
+#75 := (iff #57 #76)
+#73 := [rewrite]: #75
+#78 := [quant-intro #73]: #77
+#71 := (iff #16 #58)
+#63 := (not #58)
+#66 := (not #63)
+#69 := (iff #66 #58)
+#70 := [rewrite]: #69
+#67 := (iff #16 #66)
+#64 := (iff #15 #63)
+#61 := (iff #14 #58)
+#36 := (* -6::int #9)
+#39 := (+ #6 #36)
+#45 := (= 1::int #39)
+#50 := (exists (vars (?x1 int) (?x2 int) (?x3 int)) #45)
+#59 := (iff #50 #58)
+#60 := [elim-unused]: #59
+#51 := (iff #14 #50)
+#48 := (iff #13 #45)
+#42 := (= #39 1::int)
+#46 := (iff #42 #45)
+#47 := [rewrite]: #46
+#43 := (iff #13 #42)
+#40 := (= #11 #39)
+#37 := (= #10 #36)
+#34 := (= #8 -6::int)
+#35 := [rewrite]: #34
+#38 := [monotonicity #35]: #37
+#41 := [monotonicity #38]: #40
+#44 := [monotonicity #41]: #43
+#49 := [trans #44 #47]: #48
+#52 := [quant-intro #49]: #51
+#62 := [trans #52 #60]: #61
+#65 := [monotonicity #62]: #64
+#68 := [monotonicity #65]: #67
+#72 := [trans #68 #70]: #71
+#80 := [trans #72 #78]: #79
+#32 := [asserted]: #16
+#81 := [mp #32 #80]: #74
+#95 := [mp~ #81 #92]: #90
+#96 := [mp #95 #113]: #109
+#170 := (not #109)
+#171 := (or #170 #168)
+#172 := [th-lemma]: #171
+#173 := [unit-resolution #172 #96]: #168
+#169 := (>= #108 -1::int)
+#174 := (or #170 #169)
+#175 := [th-lemma]: #174
+#176 := [unit-resolution #175 #96]: #169
+[th-lemma #176 #173]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_15	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (exists (?x1 Int) (forall (?x2 Int) (?x3 Int) (implies (and (< 0 ?x2) (< 0 ?x3)) (< 0 (+ ?x2 ?x3))))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_15.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,107 @@
+#2 := false
+#4 := 0::int
+decl ?x2!1 :: int
+#83 := ?x2!1
+decl ?x3!0 :: int
+#82 := ?x3!0
+#108 := (+ ?x3!0 ?x2!1)
+#111 := (<= #108 0::int)
+#114 := (not #111)
+#89 := (<= ?x2!1 0::int)
+#90 := (not #89)
+#87 := (<= ?x3!0 0::int)
+#88 := (not #87)
+#102 := (and #88 #90)
+#105 := (not #102)
+#117 := (or #105 #114)
+#120 := (not #117)
+#84 := (+ ?x2!1 ?x3!0)
+#85 := (<= #84 0::int)
+#86 := (not #85)
+#91 := (and #90 #88)
+#92 := (not #91)
+#93 := (or #92 #86)
+#94 := (not #93)
+#121 := (iff #94 #120)
+#118 := (iff #93 #117)
+#115 := (iff #86 #114)
+#112 := (iff #85 #111)
+#109 := (= #84 #108)
+#110 := [rewrite]: #109
+#113 := [monotonicity #110]: #112
+#116 := [monotonicity #113]: #115
+#106 := (iff #92 #105)
+#103 := (iff #91 #102)
+#104 := [rewrite]: #103
+#107 := [monotonicity #104]: #106
+#119 := [monotonicity #107 #116]: #118
+#122 := [monotonicity #119]: #121
+#7 := (:var 0 int)
+#5 := (:var 1 int)
+#10 := (+ #5 #7)
+#63 := (<= #10 0::int)
+#64 := (not #63)
+#53 := (<= #7 0::int)
+#54 := (not #53)
+#49 := (<= #5 0::int)
+#50 := (not #49)
+#57 := (and #50 #54)
+#60 := (not #57)
+#67 := (or #60 #64)
+#70 := (forall (vars (?x2 int) (?x3 int)) #67)
+#73 := (not #70)
+#95 := (~ #73 #94)
+#96 := [sk]: #95
+#11 := (< 0::int #10)
+#8 := (< 0::int #7)
+#6 := (< 0::int #5)
+#9 := (and #6 #8)
+#12 := (implies #9 #11)
+#13 := (forall (vars (?x2 int) (?x3 int)) #12)
+#14 := (exists (vars (?x1 int)) #13)
+#15 := (not #14)
+#76 := (iff #15 #73)
+#32 := (not #9)
+#33 := (or #32 #11)
+#36 := (forall (vars (?x2 int) (?x3 int)) #33)
+#46 := (not #36)
+#74 := (iff #46 #73)
+#71 := (iff #36 #70)
+#68 := (iff #33 #67)
+#65 := (iff #11 #64)
+#66 := [rewrite]: #65
+#61 := (iff #32 #60)
+#58 := (iff #9 #57)
+#55 := (iff #8 #54)
+#56 := [rewrite]: #55
+#51 := (iff #6 #50)
+#52 := [rewrite]: #51
+#59 := [monotonicity #52 #56]: #58
+#62 := [monotonicity #59]: #61
+#69 := [monotonicity #62 #66]: #68
+#72 := [quant-intro #69]: #71
+#75 := [monotonicity #72]: #74
+#47 := (iff #15 #46)
+#44 := (iff #14 #36)
+#39 := (exists (vars (?x1 int)) #36)
+#42 := (iff #39 #36)
+#43 := [elim-unused]: #42
+#40 := (iff #14 #39)
+#37 := (iff #13 #36)
+#34 := (iff #12 #33)
+#35 := [rewrite]: #34
+#38 := [quant-intro #35]: #37
+#41 := [quant-intro #38]: #40
+#45 := [trans #41 #43]: #44
+#48 := [monotonicity #45]: #47
+#77 := [trans #48 #75]: #76
+#31 := [asserted]: #15
+#78 := [mp #31 #77]: #73
+#99 := [mp~ #78 #96]: #94
+#100 := [mp #99 #122]: #120
+#125 := [not-or-elim #100]: #111
+#101 := [not-or-elim #100]: #102
+#124 := [and-elim #101]: #90
+#123 := [and-elim #101]: #88
+[th-lemma #123 #124 #125]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_16	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (exists (?x1 Int) (forall (?x2 Int) (?x3 Real) (implies (and (< 0 ?x2) (< 0.0 ?x3)) (< (~ 1) ?x2)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_16.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,117 @@
+#2 := false
+#4 := 0::int
+decl ?x2!1 :: int
+#91 := ?x2!1
+#98 := (<= ?x2!1 0::int)
+#99 := (not #98)
+#7 := 0::real
+decl ?x3!0 :: real
+#93 := ?x3!0
+#96 := (<= ?x3!0 0::real)
+#97 := (not #96)
+#111 := (and #97 #99)
+#114 := (not #111)
+#33 := -1::int
+#94 := (<= ?x2!1 -1::int)
+#95 := (not #94)
+#120 := (or #95 #114)
+#125 := (not #120)
+#100 := (and #99 #97)
+#101 := (not #100)
+#102 := (or #101 #95)
+#103 := (not #102)
+#126 := (iff #103 #125)
+#123 := (iff #102 #120)
+#117 := (or #114 #95)
+#121 := (iff #117 #120)
+#122 := [rewrite]: #121
+#118 := (iff #102 #117)
+#115 := (iff #101 #114)
+#112 := (iff #100 #111)
+#113 := [rewrite]: #112
+#116 := [monotonicity #113]: #115
+#119 := [monotonicity #116]: #118
+#124 := [trans #119 #122]: #123
+#127 := [monotonicity #124]: #126
+#5 := (:var 1 int)
+#75 := (<= #5 -1::int)
+#76 := (not #75)
+#8 := (:var 0 real)
+#65 := (<= #8 0::real)
+#66 := (not #65)
+#61 := (<= #5 0::int)
+#62 := (not #61)
+#69 := (and #62 #66)
+#72 := (not #69)
+#79 := (or #72 #76)
+#82 := (forall (vars (?x2 int) (?x3 real)) #79)
+#85 := (not #82)
+#104 := (~ #85 #103)
+#105 := [sk]: #104
+#11 := 1::int
+#12 := (- 1::int)
+#13 := (< #12 #5)
+#9 := (< 0::real #8)
+#6 := (< 0::int #5)
+#10 := (and #6 #9)
+#14 := (implies #10 #13)
+#15 := (forall (vars (?x2 int) (?x3 real)) #14)
+#16 := (exists (vars (?x1 int)) #15)
+#17 := (not #16)
+#88 := (iff #17 #85)
+#36 := (< -1::int #5)
+#42 := (not #10)
+#43 := (or #42 #36)
+#48 := (forall (vars (?x2 int) (?x3 real)) #43)
+#58 := (not #48)
+#86 := (iff #58 #85)
+#83 := (iff #48 #82)
+#80 := (iff #43 #79)
+#77 := (iff #36 #76)
+#78 := [rewrite]: #77
+#73 := (iff #42 #72)
+#70 := (iff #10 #69)
+#67 := (iff #9 #66)
+#68 := [rewrite]: #67
+#63 := (iff #6 #62)
+#64 := [rewrite]: #63
+#71 := [monotonicity #64 #68]: #70
+#74 := [monotonicity #71]: #73
+#81 := [monotonicity #74 #78]: #80
+#84 := [quant-intro #81]: #83
+#87 := [monotonicity #84]: #86
+#59 := (iff #17 #58)
+#56 := (iff #16 #48)
+#51 := (exists (vars (?x1 int)) #48)
+#54 := (iff #51 #48)
+#55 := [elim-unused]: #54
+#52 := (iff #16 #51)
+#49 := (iff #15 #48)
+#46 := (iff #14 #43)
+#39 := (implies #10 #36)
+#44 := (iff #39 #43)
+#45 := [rewrite]: #44
+#40 := (iff #14 #39)
+#37 := (iff #13 #36)
+#34 := (= #12 -1::int)
+#35 := [rewrite]: #34
+#38 := [monotonicity #35]: #37
+#41 := [monotonicity #38]: #40
+#47 := [trans #41 #45]: #46
+#50 := [quant-intro #47]: #49
+#53 := [quant-intro #50]: #52
+#57 := [trans #53 #55]: #56
+#60 := [monotonicity #57]: #59
+#89 := [trans #60 #87]: #88
+#32 := [asserted]: #17
+#90 := [mp #32 #89]: #85
+#108 := [mp~ #90 #105]: #103
+#109 := [mp #108 #127]: #125
+#128 := [not-or-elim #109]: #111
+#130 := [and-elim #128]: #99
+#110 := [not-or-elim #109]: #94
+#186 := (or #95 #98)
+#187 := [th-lemma]: #186
+#188 := [unit-resolution #187 #110]: #98
+[unit-resolution #188 #130]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_17	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (exists (?x1 Int) (implies (forall (?x2 Int) (implies (<= ?x1 ?x2) (< 0 ?x2))) (< 0 ?x1))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_17.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,148 @@
+#2 := false
+#144 := (not false)
+#7 := 0::int
+#5 := (:var 0 int)
+#52 := (<= #5 0::int)
+#53 := (not #52)
+#147 := (or #53 #144)
+#150 := (not #147)
+#153 := (forall (vars (?x1 int)) #150)
+#180 := (iff #153 false)
+#175 := (forall (vars (?x1 int)) false)
+#178 := (iff #175 false)
+#179 := [elim-unused]: #178
+#176 := (iff #153 #175)
+#173 := (iff #150 false)
+#1 := true
+#168 := (not true)
+#171 := (iff #168 false)
+#172 := [rewrite]: #171
+#169 := (iff #150 #168)
+#166 := (iff #147 true)
+#161 := (or #53 true)
+#164 := (iff #161 true)
+#165 := [rewrite]: #164
+#162 := (iff #147 #161)
+#159 := (iff #144 true)
+#160 := [rewrite]: #159
+#163 := [monotonicity #160]: #162
+#167 := [trans #163 #165]: #166
+#170 := [monotonicity #167]: #169
+#174 := [trans #170 #172]: #173
+#177 := [quant-intro #174]: #176
+#181 := [trans #177 #179]: #180
+#56 := -1::int
+#57 := (* -1::int #5)
+#4 := (:var 1 int)
+#58 := (+ #4 #57)
+#59 := (<= #58 0::int)
+#62 := (not #59)
+#68 := (or #53 #62)
+#73 := (forall (vars (?x2 int)) #68)
+#76 := (not #73)
+#79 := (or #53 #76)
+#105 := (not #79)
+#123 := (forall (vars (?x1 int)) #105)
+#156 := (iff #123 #153)
+#127 := (forall (vars (?x2 int)) #53)
+#130 := (not #127)
+#133 := (or #53 #130)
+#136 := (not #133)
+#139 := (forall (vars (?x1 int)) #136)
+#154 := (iff #139 #153)
+#155 := [rewrite]: #154
+#140 := (iff #123 #139)
+#141 := [rewrite]: #140
+#157 := [trans #141 #155]: #156
+#116 := (and #52 #73)
+#119 := (forall (vars (?x1 int)) #116)
+#124 := (iff #119 #123)
+#113 := (iff #116 #105)
+#122 := [rewrite]: #113
+#125 := [quant-intro #122]: #124
+#94 := (not #53)
+#104 := (and #94 #73)
+#108 := (forall (vars (?x1 int)) #104)
+#120 := (iff #108 #119)
+#117 := (iff #104 #116)
+#114 := (iff #94 #52)
+#115 := [rewrite]: #114
+#118 := [monotonicity #115]: #117
+#121 := [quant-intro #118]: #120
+#82 := (exists (vars (?x1 int)) #79)
+#85 := (not #82)
+#109 := (~ #85 #108)
+#106 := (~ #105 #104)
+#101 := (not #76)
+#102 := (~ #101 #73)
+#99 := (~ #73 #73)
+#97 := (~ #68 #68)
+#98 := [refl]: #97
+#100 := [nnf-pos #98]: #99
+#103 := [nnf-neg #100]: #102
+#95 := (~ #94 #94)
+#96 := [refl]: #95
+#107 := [nnf-neg #96 #103]: #106
+#110 := [nnf-neg #107]: #109
+#8 := (< 0::int #5)
+#6 := (<= #4 #5)
+#9 := (implies #6 #8)
+#10 := (forall (vars (?x2 int)) #9)
+#11 := (implies #10 #8)
+#12 := (exists (vars (?x1 int)) #11)
+#13 := (not #12)
+#88 := (iff #13 #85)
+#30 := (not #6)
+#31 := (or #30 #8)
+#34 := (forall (vars (?x2 int)) #31)
+#40 := (not #34)
+#41 := (or #8 #40)
+#46 := (exists (vars (?x1 int)) #41)
+#49 := (not #46)
+#86 := (iff #49 #85)
+#83 := (iff #46 #82)
+#80 := (iff #41 #79)
+#77 := (iff #40 #76)
+#74 := (iff #34 #73)
+#71 := (iff #31 #68)
+#65 := (or #62 #53)
+#69 := (iff #65 #68)
+#70 := [rewrite]: #69
+#66 := (iff #31 #65)
+#54 := (iff #8 #53)
+#55 := [rewrite]: #54
+#63 := (iff #30 #62)
+#60 := (iff #6 #59)
+#61 := [rewrite]: #60
+#64 := [monotonicity #61]: #63
+#67 := [monotonicity #64 #55]: #66
+#72 := [trans #67 #70]: #71
+#75 := [quant-intro #72]: #74
+#78 := [monotonicity #75]: #77
+#81 := [monotonicity #55 #78]: #80
+#84 := [quant-intro #81]: #83
+#87 := [monotonicity #84]: #86
+#50 := (iff #13 #49)
+#47 := (iff #12 #46)
+#44 := (iff #11 #41)
+#37 := (implies #34 #8)
+#42 := (iff #37 #41)
+#43 := [rewrite]: #42
+#38 := (iff #11 #37)
+#35 := (iff #10 #34)
+#32 := (iff #9 #31)
+#33 := [rewrite]: #32
+#36 := [quant-intro #33]: #35
+#39 := [monotonicity #36]: #38
+#45 := [trans #39 #43]: #44
+#48 := [quant-intro #45]: #47
+#51 := [monotonicity #48]: #50
+#89 := [trans #51 #87]: #88
+#29 := [asserted]: #13
+#90 := [mp #29 #89]: #85
+#111 := [mp~ #90 #110]: #108
+#112 := [mp #111 #121]: #119
+#126 := [mp #112 #125]: #123
+#158 := [mp #126 #157]: #153
+[mp #158 #181]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_18	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,7 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 Int)
+ )
+:assumption (not (forall (?x1 Int) (implies (< ?x1 uf_1) (< (* 2 ?x1) (* 2 uf_1))) :pat{ ?x1 }))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_18.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,112 @@
+#2 := false
+#43 := 0::int
+decl ?x1!0 :: int
+#78 := ?x1!0
+#56 := -2::int
+#113 := (* -2::int ?x1!0)
+decl uf_1 :: int
+#6 := uf_1
+#8 := 2::int
+#10 := (* 2::int uf_1)
+#114 := (+ #10 #113)
+#115 := (<= #114 0::int)
+#120 := (not #115)
+#41 := -1::int
+#100 := (* -1::int ?x1!0)
+#101 := (+ uf_1 #100)
+#102 := (<= #101 0::int)
+#123 := (or #102 #120)
+#126 := (not #123)
+#59 := (* -2::int uf_1)
+#79 := (* 2::int ?x1!0)
+#80 := (+ #79 #59)
+#81 := (>= #80 0::int)
+#82 := (not #81)
+#45 := (* -1::int uf_1)
+#83 := (+ ?x1!0 #45)
+#84 := (>= #83 0::int)
+#85 := (or #84 #82)
+#86 := (not #85)
+#127 := (iff #86 #126)
+#124 := (iff #85 #123)
+#121 := (iff #82 #120)
+#118 := (iff #81 #115)
+#107 := (+ #59 #79)
+#110 := (>= #107 0::int)
+#116 := (iff #110 #115)
+#117 := [rewrite]: #116
+#111 := (iff #81 #110)
+#108 := (= #80 #107)
+#109 := [rewrite]: #108
+#112 := [monotonicity #109]: #111
+#119 := [trans #112 #117]: #118
+#122 := [monotonicity #119]: #121
+#105 := (iff #84 #102)
+#94 := (+ #45 ?x1!0)
+#97 := (>= #94 0::int)
+#103 := (iff #97 #102)
+#104 := [rewrite]: #103
+#98 := (iff #84 #97)
+#95 := (= #83 #94)
+#96 := [rewrite]: #95
+#99 := [monotonicity #96]: #98
+#106 := [trans #99 #104]: #105
+#125 := [monotonicity #106 #122]: #124
+#128 := [monotonicity #125]: #127
+#4 := (:var 0 int)
+#5 := (pattern #4)
+#9 := (* 2::int #4)
+#60 := (+ #9 #59)
+#58 := (>= #60 0::int)
+#57 := (not #58)
+#46 := (+ #4 #45)
+#44 := (>= #46 0::int)
+#63 := (or #44 #57)
+#66 := (forall (vars (?x1 int)) (:pat #5) #63)
+#69 := (not #66)
+#87 := (~ #69 #86)
+#88 := [sk]: #87
+#11 := (< #9 #10)
+#7 := (< #4 uf_1)
+#12 := (implies #7 #11)
+#13 := (forall (vars (?x1 int)) (:pat #5) #12)
+#14 := (not #13)
+#72 := (iff #14 #69)
+#31 := (not #7)
+#32 := (or #31 #11)
+#35 := (forall (vars (?x1 int)) (:pat #5) #32)
+#38 := (not #35)
+#70 := (iff #38 #69)
+#67 := (iff #35 #66)
+#64 := (iff #32 #63)
+#61 := (iff #11 #57)
+#62 := [rewrite]: #61
+#54 := (iff #31 #44)
+#42 := (not #44)
+#49 := (not #42)
+#52 := (iff #49 #44)
+#53 := [rewrite]: #52
+#50 := (iff #31 #49)
+#47 := (iff #7 #42)
+#48 := [rewrite]: #47
+#51 := [monotonicity #48]: #50
+#55 := [trans #51 #53]: #54
+#65 := [monotonicity #55 #62]: #64
+#68 := [quant-intro #65]: #67
+#71 := [monotonicity #68]: #70
+#39 := (iff #14 #38)
+#36 := (iff #13 #35)
+#33 := (iff #12 #32)
+#34 := [rewrite]: #33
+#37 := [quant-intro #34]: #36
+#40 := [monotonicity #37]: #39
+#73 := [trans #40 #71]: #72
+#30 := [asserted]: #14
+#74 := [mp #30 #73]: #69
+#91 := [mp~ #74 #88]: #86
+#92 := [mp #91 #128]: #126
+#130 := [not-or-elim #92]: #115
+#93 := (not #102)
+#129 := [not-or-elim #92]: #93
+[th-lemma #129 #130]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,12 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 BitVec[2] Int)
+ )
+:assumption (= (uf_1 bv0[2]) 0)
+:assumption (= (uf_1 bv1[2]) 1)
+:assumption (= (uf_1 bv2[2]) 2)
+:assumption (= (uf_1 bv3[2]) 3)
+:assumption (forall (?x1 BitVec[2]) (< 0 (uf_1 ?x1)))
+:assumption (not (forall (?x2 Int) (implies (< ?x2 0) (forall (?x3 BitVec[2]) (< ?x2 (uf_1 ?x3))))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,43 @@
+#2 := false
+#6 := 0::int
+decl uf_1 :: (-> bv[2] int)
+#4 := bv[0:2]
+#5 := (uf_1 bv[0:2])
+#225 := (<= #5 0::int)
+#311 := (not #225)
+#20 := (:var 0 bv[2])
+#21 := (uf_1 #20)
+#640 := (pattern #21)
+#54 := (<= #21 0::int)
+#55 := (not #54)
+#641 := (forall (vars (?x1 bv[2])) (:pat #640) #55)
+#58 := (forall (vars (?x1 bv[2])) #55)
+#644 := (iff #58 #641)
+#642 := (iff #55 #55)
+#643 := [refl]: #642
+#645 := [quant-intro #643]: #644
+#113 := (~ #58 #58)
+#115 := (~ #55 #55)
+#116 := [refl]: #115
+#114 := [nnf-pos #116]: #113
+#22 := (< 0::int #21)
+#23 := (forall (vars (?x1 bv[2])) #22)
+#59 := (iff #23 #58)
+#56 := (iff #22 #55)
+#57 := [rewrite]: #56
+#60 := [quant-intro #57]: #59
+#51 := [asserted]: #23
+#61 := [mp #51 #60]: #58
+#111 := [mp~ #61 #114]: #58
+#646 := [mp #111 #645]: #641
+#227 := (not #641)
+#313 := (or #227 #311)
+#304 := [quant-inst]: #313
+#635 := [unit-resolution #304 #646]: #311
+#7 := (= #5 0::int)
+#47 := [asserted]: #7
+#638 := (not #7)
+#633 := (or #638 #225)
+#639 := [th-lemma]: #633
+[unit-resolution #639 #47 #635]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,12 @@
+(benchmark Isabelle
+:extrasorts ( T2 T1)
+:extrafuns (
+  (uf_2 T1)
+  (uf_1 BitVec[4] BitVec[4] T1)
+  (uf_3 T1 T2)
+  (uf_4 BitVec[4])
+ )
+:assumption (forall (?x1 BitVec[4]) (?x2 BitVec[4]) (iff (= (uf_1 ?x1 ?x2) uf_2) (bvule ?x1 ?x2)))
+:assumption (not (= (uf_3 (uf_1 bv0[4] uf_4)) (uf_3 uf_2)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= bv27[4] (bvneg bv5[4])))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= bv27[4] bv11[4]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_03	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (bvult bv23[8] bv27[8]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_03.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_04	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvadd bv27[5] bv11[5]) bv6[5]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_04.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_05	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvmul bv7[8] bv3[8]) bv21[8]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_05.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_06	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvsub bv11[8] bv27[8]) (bvneg bv16[8])))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_06.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_07	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvneg (bvneg bv11[5])) bv11[5]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_07.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_08	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvadd (bvneg bv40[7]) bv1[7]) (bvneg bv39[7])))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_08.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_09	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,9 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 BitVec[32])
+  (uf_2 BitVec[32])
+  (uf_3 BitVec[32])
+ )
+:assumption (not (= (bvsub (bvadd (bvadd uf_1 (bvmul bv2[32] uf_2)) uf_3) uf_2) (bvadd (bvadd uf_2 uf_3) uf_1)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_09.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_10	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 BitVec[4])
+ )
+:assumption (= uf_1 bv5[4])
+:assumption (not (= (bvmul bv4[4] uf_1) bv4[4]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_10.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvand bv6[32] bv5[32]) bv4[32]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvor bv6[8] bv3[8]) bv7[8]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_03	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvxor bv240[8] bv255[8]) bv15[8]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_03.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_04	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvnot bv240[16]) bv65295[16]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_04.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_05	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (concat bv27[4] bv27[8]) bv2843[12]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_05.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_06	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (concat bv3[4] bv15[6]) bv207[10]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_06.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_07	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,12 @@
+(benchmark Isabelle
+:extrasorts ( T1)
+:extrafuns (
+  (uf_1 Int T1)
+  (uf_2 T1 Int)
+ )
+:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
+:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
+:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
+:assumption (not (= (extract[2:1] bv22[4]) bv3[2]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_07.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_08	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (zero_extend[6] bv10[4]) bv10[10]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_08.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_09	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (sign_extend[2] bv10[4]) bv58[6]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_09.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_10	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvlshr bv19[8] bv2[8]) bv4[8]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_10.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_11	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (bvashr bv19[8] bv2[8]) bv4[8]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_11.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_12	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,12 @@
+(benchmark Isabelle
+:extrasorts ( T1)
+:extrafuns (
+  (uf_1 Int T1)
+  (uf_2 T1 Int)
+ )
+:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
+:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
+:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
+:assumption (not (= (rotate_right[2] bv6[4]) bv9[4]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_12.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_13	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,12 @@
+(benchmark Isabelle
+:extrasorts ( T1)
+:extrafuns (
+  (uf_1 Int T1)
+  (uf_2 T1 Int)
+ )
+:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
+:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
+:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
+:assumption (not (= (rotate_left[1] bv14[4]) bv13[4]))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_13.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_14	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,7 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 BitVec[16])
+ )
+:assumption (not (= (bvor (bvand uf_1 bv65280[16]) (bvand uf_1 bv255[16])) uf_1))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_14.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_15	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 BitVec[16])
+ )
+:assumption (bvult uf_1 bv256[16])
+:assumption (not (= (bvand uf_1 bv255[16]) uf_1))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_15.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,1 @@
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrasorts ( T1)
+:extrapreds (
+  (up_1 Int)
+ )
+:assumption (not (forall (?x1 Int) (implies (up_1 ?x1) (forall (?x2 Int) (or (up_1 ?x1) (up_1 ?x2))))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,78 @@
+#2 := false
+decl up_1 :: (-> int bool)
+decl ?x1!0 :: int
+#54 := ?x1!0
+#55 := (up_1 ?x1!0)
+#58 := (not #55)
+decl ?x2!1 :: int
+#66 := ?x2!1
+#67 := (up_1 ?x2!1)
+#85 := (or #55 #67)
+#88 := (not #85)
+#91 := (and #55 #88)
+#68 := (or #67 #55)
+#69 := (not #68)
+#63 := (not #58)
+#75 := (and #63 #69)
+#92 := (iff #75 #91)
+#89 := (iff #69 #88)
+#86 := (iff #68 #85)
+#87 := [rewrite]: #86
+#90 := [monotonicity #87]: #89
+#83 := (iff #63 #55)
+#84 := [rewrite]: #83
+#93 := [monotonicity #84 #90]: #92
+#6 := (:var 1 int)
+#7 := (up_1 #6)
+#4 := (:var 0 int)
+#5 := (up_1 #4)
+#29 := (or #5 #7)
+#32 := (forall (vars (?x2 int)) #29)
+#38 := (not #5)
+#39 := (or #38 #32)
+#44 := (forall (vars (?x1 int)) #39)
+#47 := (not #44)
+#78 := (~ #47 #75)
+#56 := (or #5 #55)
+#57 := (forall (vars (?x2 int)) #56)
+#59 := (or #58 #57)
+#60 := (not #59)
+#76 := (~ #60 #75)
+#70 := (not #57)
+#71 := (~ #70 #69)
+#72 := [sk]: #71
+#64 := (~ #63 #63)
+#65 := [refl]: #64
+#77 := [nnf-neg #65 #72]: #76
+#61 := (~ #47 #60)
+#62 := [sk]: #61
+#79 := [trans #62 #77]: #78
+#8 := (or #7 #5)
+#9 := (forall (vars (?x2 int)) #8)
+#10 := (implies #5 #9)
+#11 := (forall (vars (?x1 int)) #10)
+#12 := (not #11)
+#48 := (iff #12 #47)
+#45 := (iff #11 #44)
+#42 := (iff #10 #39)
+#35 := (implies #5 #32)
+#40 := (iff #35 #39)
+#41 := [rewrite]: #40
+#36 := (iff #10 #35)
+#33 := (iff #9 #32)
+#30 := (iff #8 #29)
+#31 := [rewrite]: #30
+#34 := [quant-intro #31]: #33
+#37 := [monotonicity #34]: #36
+#43 := [trans #37 #41]: #42
+#46 := [quant-intro #43]: #45
+#49 := [monotonicity #46]: #48
+#28 := [asserted]: #12
+#52 := [mp #28 #49]: #47
+#80 := [mp~ #52 #79]: #75
+#81 := [mp #80 #93]: #91
+#94 := [and-elim #81]: #88
+#95 := [not-or-elim #94]: #58
+#82 := [and-elim #81]: #55
+[unit-resolution #82 #95]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,14 @@
+(benchmark Isabelle
+:extrasorts ( T2 T1)
+:extrafuns (
+  (uf_2 T1)
+  (uf_4 T2)
+  (uf_3 T1)
+ )
+:extrapreds (
+  (up_1 T1 T2)
+ )
+:assumption (forall (?x1 T1) (?x2 T2) (iff (up_1 ?x1 ?x2) (= ?x1 uf_2)))
+:assumption (not (iff (exists (?x3 T2) (up_1 uf_3 ?x3)) (up_1 uf_3 uf_4)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,135 @@
+#2 := false
+decl up_1 :: (-> T1 T2 bool)
+#5 := (:var 0 T2)
+decl uf_3 :: T1
+#11 := uf_3
+#12 := (up_1 uf_3 #5)
+#560 := (pattern #12)
+#57 := (not #12)
+#561 := (forall (vars (?x3 T2)) (:pat #560) #57)
+decl uf_4 :: T2
+#14 := uf_4
+#15 := (up_1 uf_3 uf_4)
+decl uf_2 :: T1
+#7 := uf_2
+#136 := (= uf_2 uf_3)
+#543 := (iff #15 #136)
+#4 := (:var 1 T1)
+#6 := (up_1 #4 #5)
+#553 := (pattern #6)
+#8 := (= #4 uf_2)
+#9 := (iff #6 #8)
+#554 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #553) #9)
+#10 := (forall (vars (?x1 T1) (?x2 T2)) #9)
+#557 := (iff #10 #554)
+#555 := (iff #9 #9)
+#556 := [refl]: #555
+#558 := [quant-intro #556]: #557
+#47 := (~ #10 #10)
+#45 := (~ #9 #9)
+#46 := [refl]: #45
+#48 := [nnf-pos #46]: #47
+#33 := [asserted]: #10
+#49 := [mp~ #33 #48]: #10
+#559 := [mp #49 #558]: #554
+#227 := (not #554)
+#185 := (or #227 #543)
+#135 := (= uf_3 uf_2)
+#205 := (iff #15 #135)
+#528 := (or #227 #205)
+#190 := (iff #528 #185)
+#192 := (iff #185 #185)
+#530 := [rewrite]: #192
+#201 := (iff #205 #543)
+#223 := (iff #135 #136)
+#137 := [rewrite]: #223
+#544 := [monotonicity #137]: #201
+#191 := [monotonicity #544]: #190
+#531 := [trans #191 #530]: #190
+#189 := [quant-inst]: #528
+#532 := [mp #189 #531]: #185
+#539 := [unit-resolution #532 #559]: #543
+decl ?x3!0 :: T2
+#50 := ?x3!0
+#51 := (up_1 uf_3 ?x3!0)
+#224 := (iff #51 #136)
+#155 := (or #227 #224)
+#222 := (iff #51 #135)
+#228 := (or #227 #222)
+#229 := (iff #228 #155)
+#545 := (iff #155 #155)
+#547 := [rewrite]: #545
+#215 := (iff #222 #224)
+#226 := [monotonicity #137]: #215
+#208 := [monotonicity #226]: #229
+#202 := [trans #208 #547]: #229
+#225 := [quant-inst]: #228
+#334 := [mp #225 #202]: #155
+#537 := [unit-resolution #334 #559]: #224
+#541 := (not #224)
+#527 := (or #541 #136)
+#63 := (not #15)
+#540 := [hypothesis]: #63
+#68 := (or #15 #51)
+#60 := (forall (vars (?x3 T2)) #57)
+#69 := (or #63 #60)
+#76 := (and #68 #69)
+#70 := (and #69 #68)
+#77 := (iff #70 #76)
+#78 := [rewrite]: #77
+#13 := (exists (vars (?x3 T2)) #12)
+#35 := (not #13)
+#36 := (iff #15 #35)
+#71 := (~ #36 #70)
+#61 := (~ #35 #60)
+#58 := (~ #57 #57)
+#59 := [refl]: #58
+#62 := [nnf-neg #59]: #61
+#54 := (not #35)
+#55 := (~ #54 #51)
+#42 := (~ #13 #51)
+#39 := [sk]: #42
+#56 := [nnf-neg #39]: #55
+#66 := (~ #15 #15)
+#67 := [refl]: #66
+#64 := (~ #63 #63)
+#65 := [refl]: #64
+#72 := [nnf-pos #65 #67 #56 #62]: #71
+#16 := (iff #13 #15)
+#17 := (not #16)
+#37 := (iff #17 #36)
+#38 := [rewrite]: #37
+#34 := [asserted]: #17
+#41 := [mp #34 #38]: #36
+#73 := [mp~ #41 #72]: #70
+#74 := [mp #73 #78]: #76
+#75 := [and-elim #74]: #68
+#526 := [unit-resolution #75 #540]: #51
+#549 := (not #51)
+#550 := (or #541 #549 #136)
+#551 := [def-axiom]: #550
+#233 := [unit-resolution #551 #526]: #527
+#249 := [unit-resolution #233 #537]: #136
+#213 := (not #136)
+#533 := (not #543)
+#250 := (or #533 #213)
+#534 := (or #533 #15 #213)
+#529 := [def-axiom]: #534
+#251 := [unit-resolution #529 #540]: #250
+#237 := [unit-resolution #251 #249 #539]: false
+#252 := [lemma #237]: #15
+#566 := (or #63 #561)
+#567 := (iff #69 #566)
+#564 := (iff #60 #561)
+#562 := (iff #57 #57)
+#563 := [refl]: #562
+#565 := [quant-intro #563]: #564
+#568 := [monotonicity #565]: #567
+#79 := [and-elim #74]: #69
+#569 := [mp #79 #568]: #566
+#535 := [unit-resolution #569 #252]: #561
+#536 := (not #561)
+#538 := (or #536 #63)
+#176 := [quant-inst]: #538
+[unit-resolution #176 #252 #535]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_03	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,15 @@
+(benchmark Isabelle
+:extrasorts ( T2 T1)
+:extrafuns (
+  (uf_2 T1)
+  (uf_3 T2)
+  (uf_4 T1)
+ )
+:extrapreds (
+  (up_1 T1 T2)
+ )
+:assumption (forall (?x1 T1) (?x2 T2) (iff (up_1 ?x1 ?x2) (= ?x1 uf_2)))
+:assumption (iff (forall (?x3 T1) (exists (?x4 T2) (up_1 ?x3 ?x4))) (forall (?x5 T1) (up_1 ?x5 uf_3)))
+:assumption (not (iff (exists (?x6 T2) (up_1 uf_4 ?x6)) (up_1 uf_4 uf_3)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_03.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,135 @@
+#2 := false
+decl up_1 :: (-> T1 T2 bool)
+#5 := (:var 0 T2)
+decl uf_4 :: T1
+#18 := uf_4
+#19 := (up_1 uf_4 #5)
+#635 := (pattern #19)
+#116 := (not #19)
+#636 := (forall (vars (?x6 T2)) (:pat #635) #116)
+decl uf_3 :: T2
+#14 := uf_3
+#21 := (up_1 uf_4 uf_3)
+decl uf_2 :: T1
+#7 := uf_2
+#195 := (= uf_2 uf_4)
+#602 := (iff #21 #195)
+#4 := (:var 1 T1)
+#6 := (up_1 #4 #5)
+#612 := (pattern #6)
+#8 := (= #4 uf_2)
+#9 := (iff #6 #8)
+#613 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #612) #9)
+#10 := (forall (vars (?x1 T1) (?x2 T2)) #9)
+#616 := (iff #10 #613)
+#614 := (iff #9 #9)
+#615 := [refl]: #614
+#617 := [quant-intro #615]: #616
+#56 := (~ #10 #10)
+#54 := (~ #9 #9)
+#55 := [refl]: #54
+#57 := [nnf-pos #55]: #56
+#39 := [asserted]: #10
+#58 := [mp~ #39 #57]: #10
+#618 := [mp #58 #617]: #613
+#286 := (not #613)
+#244 := (or #286 #602)
+#194 := (= uf_4 uf_2)
+#264 := (iff #21 #194)
+#587 := (or #286 #264)
+#249 := (iff #587 #244)
+#251 := (iff #244 #244)
+#589 := [rewrite]: #251
+#260 := (iff #264 #602)
+#282 := (iff #194 #195)
+#196 := [rewrite]: #282
+#603 := [monotonicity #196]: #260
+#250 := [monotonicity #603]: #249
+#590 := [trans #250 #589]: #249
+#248 := [quant-inst]: #587
+#591 := [mp #248 #590]: #244
+#598 := [unit-resolution #591 #618]: #602
+decl ?x6!3 :: T2
+#63 := ?x6!3
+#64 := (up_1 uf_4 ?x6!3)
+#283 := (iff #64 #195)
+#214 := (or #286 #283)
+#281 := (iff #64 #194)
+#287 := (or #286 #281)
+#288 := (iff #287 #214)
+#604 := (iff #214 #214)
+#606 := [rewrite]: #604
+#274 := (iff #281 #283)
+#285 := [monotonicity #196]: #274
+#267 := [monotonicity #285]: #288
+#261 := [trans #267 #606]: #288
+#284 := [quant-inst]: #287
+#393 := [mp #284 #261]: #214
+#596 := [unit-resolution #393 #618]: #283
+#600 := (not #283)
+#586 := (or #600 #195)
+#122 := (not #21)
+#599 := [hypothesis]: #122
+#127 := (or #21 #64)
+#119 := (forall (vars (?x6 T2)) #116)
+#128 := (or #122 #119)
+#135 := (and #127 #128)
+#129 := (and #128 #127)
+#136 := (iff #129 #135)
+#137 := [rewrite]: #136
+#20 := (exists (vars (?x6 T2)) #19)
+#42 := (not #20)
+#43 := (iff #21 #42)
+#130 := (~ #43 #129)
+#120 := (~ #42 #119)
+#117 := (~ #116 #116)
+#118 := [refl]: #117
+#121 := [nnf-neg #118]: #120
+#113 := (not #42)
+#114 := (~ #113 #64)
+#88 := (~ #20 #64)
+#89 := [sk]: #88
+#115 := [nnf-neg #89]: #114
+#125 := (~ #21 #21)
+#126 := [refl]: #125
+#123 := (~ #122 #122)
+#124 := [refl]: #123
+#131 := [nnf-pos #124 #126 #115 #121]: #130
+#22 := (iff #20 #21)
+#23 := (not #22)
+#44 := (iff #23 #43)
+#45 := [rewrite]: #44
+#41 := [asserted]: #23
+#48 := [mp #41 #45]: #43
+#132 := [mp~ #48 #131]: #129
+#133 := [mp #132 #137]: #135
+#134 := [and-elim #133]: #127
+#585 := [unit-resolution #134 #599]: #64
+#608 := (not #64)
+#609 := (or #600 #608 #195)
+#610 := [def-axiom]: #609
+#292 := [unit-resolution #610 #585]: #586
+#308 := [unit-resolution #292 #596]: #195
+#272 := (not #195)
+#592 := (not #602)
+#309 := (or #592 #272)
+#593 := (or #592 #21 #272)
+#588 := [def-axiom]: #593
+#310 := [unit-resolution #588 #599]: #309
+#296 := [unit-resolution #310 #308 #598]: false
+#311 := [lemma #296]: #21
+#641 := (or #122 #636)
+#642 := (iff #128 #641)
+#639 := (iff #119 #636)
+#637 := (iff #116 #116)
+#638 := [refl]: #637
+#640 := [quant-intro #638]: #639
+#643 := [monotonicity #640]: #642
+#138 := [and-elim #133]: #128
+#644 := [mp #138 #643]: #641
+#594 := [unit-resolution #644 #311]: #636
+#595 := (not #636)
+#597 := (or #595 #122)
+#235 := [quant-inst]: #597
+[unit-resolution #235 #311 #594]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_04	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,13 @@
+(benchmark Isabelle
+:extrasorts ( T1 T2)
+:extrafuns (
+  (uf_2 T1)
+  (uf_3 T1)
+ )
+:extrapreds (
+  (up_1 T1)
+ )
+:assumption (if_then_else (up_1 uf_2) (not (exists (?x1 T1) (up_1 ?x1))) (forall (?x2 T1) (not (up_1 ?x2))))
+:assumption (not (implies (up_1 uf_2) (up_1 uf_3)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_fol_04.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,56 @@
+#2 := false
+decl up_1 :: (-> T1 bool)
+decl uf_2 :: T1
+#4 := uf_2
+#5 := (up_1 uf_2)
+decl uf_3 :: T1
+#13 := uf_3
+#14 := (up_1 uf_3)
+#34 := (not #5)
+#35 := (or #34 #14)
+#38 := (not #35)
+#15 := (implies #5 #14)
+#16 := (not #15)
+#39 := (iff #16 #38)
+#36 := (iff #15 #35)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#33 := [asserted]: #16
+#43 := [mp #33 #40]: #38
+#41 := [not-or-elim #43]: #5
+#6 := (:var 0 T1)
+#7 := (up_1 #6)
+#536 := (pattern #7)
+#10 := (not #7)
+#537 := (forall (vars (?x2 T1)) (:pat #536) #10)
+#11 := (forall (vars (?x2 T1)) #10)
+#540 := (iff #11 #537)
+#538 := (iff #10 #10)
+#539 := [refl]: #538
+#541 := [quant-intro #539]: #540
+#8 := (exists (vars (?x1 T1)) #7)
+#9 := (not #8)
+#45 := (~ #9 #11)
+#50 := (~ #10 #10)
+#51 := [refl]: #50
+#59 := [nnf-neg #51]: #45
+#12 := (ite #5 #9 #11)
+#57 := (iff #12 #9)
+#1 := true
+#52 := (ite true #9 #11)
+#55 := (iff #52 #9)
+#56 := [rewrite]: #55
+#53 := (iff #12 #52)
+#48 := (iff #5 true)
+#49 := [iff-true #41]: #48
+#54 := [monotonicity #49]: #53
+#58 := [trans #54 #56]: #57
+#32 := [asserted]: #12
+#47 := [mp #32 #58]: #9
+#60 := [mp~ #47 #59]: #11
+#542 := [mp #60 #541]: #537
+#119 := (not #537)
+#206 := (or #119 #34)
+#120 := [quant-inst]: #206
+[unit-resolution #120 #542 #41]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,18 @@
+(benchmark Isabelle
+:extrasorts ( T2 T3 T1)
+:extrafuns (
+  (uf_2 T1 T2 T3 T1)
+  (uf_1 T1 T2 T3)
+  (uf_6 T1)
+  (uf_3 T2)
+  (uf_4 T2)
+  (uf_5 T2)
+  (uf_7 T3)
+  (uf_8 T3)
+ )
+: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))))
+:assumption (forall (?x5 T1) (?x6 T2) (?x7 T3) (= (uf_1 (uf_2 ?x5 ?x6 ?x7) ?x6) ?x7))
+:assumption (and (not (= uf_3 uf_4)) (not (= uf_3 uf_5)))
+: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)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,181 @@
+#2 := false
+decl uf_1 :: (-> T1 T2 T3)
+decl uf_3 :: T2
+#22 := uf_3
+decl uf_6 :: T1
+#30 := uf_6
+#36 := (uf_1 uf_6 uf_3)
+decl uf_2 :: (-> T1 T2 T3 T1)
+decl uf_8 :: T3
+#33 := uf_8
+decl uf_5 :: T2
+#26 := uf_5
+decl uf_7 :: T3
+#31 := uf_7
+decl uf_4 :: T2
+#23 := uf_4
+#32 := (uf_2 uf_6 uf_4 uf_7)
+#34 := (uf_2 #32 uf_5 uf_8)
+#35 := (uf_1 #34 uf_3)
+#37 := (= #35 #36)
+#223 := (uf_1 #32 uf_4)
+#214 := (uf_2 uf_6 uf_4 #223)
+#552 := (uf_1 #214 uf_3)
+#555 := (= #552 #36)
+#560 := (= #36 #552)
+#556 := (= #223 #552)
+#24 := (= uf_3 uf_4)
+#561 := (ite #24 #556 #560)
+#8 := (:var 0 T2)
+#6 := (:var 1 T3)
+#5 := (:var 2 T2)
+#4 := (:var 3 T1)
+#7 := (uf_2 #4 #5 #6)
+#9 := (uf_1 #7 #8)
+#575 := (pattern #9)
+#11 := (uf_1 #4 #8)
+#100 := (= #9 #11)
+#99 := (= #6 #9)
+#55 := (= #5 #8)
+#83 := (ite #55 #99 #100)
+#576 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) (:pat #575) #83)
+#90 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #83)
+#579 := (iff #90 #576)
+#577 := (iff #83 #83)
+#578 := [refl]: #577
+#580 := [quant-intro #578]: #579
+#58 := (ite #55 #6 #11)
+#61 := (= #9 #58)
+#64 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #61)
+#87 := (iff #64 #90)
+#84 := (iff #61 #83)
+#89 := [rewrite]: #84
+#88 := [quant-intro #89]: #87
+#93 := (~ #64 #64)
+#91 := (~ #61 #61)
+#92 := [refl]: #91
+#94 := [nnf-pos #92]: #93
+#10 := (= #8 #5)
+#12 := (ite #10 #6 #11)
+#13 := (= #9 #12)
+#14 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #13)
+#65 := (iff #14 #64)
+#62 := (iff #13 #61)
+#59 := (= #12 #58)
+#56 := (iff #10 #55)
+#57 := [rewrite]: #56
+#60 := [monotonicity #57]: #59
+#63 := [monotonicity #60]: #62
+#66 := [quant-intro #63]: #65
+#54 := [asserted]: #14
+#69 := [mp #54 #66]: #64
+#95 := [mp~ #69 #94]: #64
+#85 := [mp #95 #88]: #90
+#581 := [mp #85 #580]: #576
+#250 := (not #576)
+#548 := (or #250 #561)
+#551 := (= uf_4 uf_3)
+#557 := (ite #551 #556 #555)
+#549 := (or #250 #557)
+#271 := (iff #549 #548)
+#273 := (iff #548 #548)
+#259 := [rewrite]: #273
+#559 := (iff #557 #561)
+#198 := (iff #555 #560)
+#199 := [rewrite]: #198
+#193 := (iff #551 #24)
+#558 := [rewrite]: #193
+#562 := [monotonicity #558 #199]: #559
+#272 := [monotonicity #562]: #271
+#274 := [trans #272 #259]: #271
+#255 := [quant-inst]: #549
+#165 := [mp #255 #274]: #548
+#510 := [unit-resolution #165 #581]: #561
+#544 := (not #561)
+#497 := (or #544 #560)
+#25 := (not #24)
+#27 := (= uf_3 uf_5)
+#28 := (not #27)
+#29 := (and #25 #28)
+#75 := [asserted]: #29
+#79 := [and-elim #75]: #25
+#268 := (or #544 #24 #560)
+#542 := [def-axiom]: #268
+#499 := [unit-resolution #542 #79]: #497
+#491 := [unit-resolution #499 #510]: #560
+#493 := [symm #491]: #555
+#494 := (= #35 #552)
+#157 := (uf_1 #32 uf_3)
+#503 := (= #157 #552)
+#502 := (= #552 #157)
+#509 := (= #214 #32)
+#415 := (= #223 uf_7)
+#566 := (= uf_7 #223)
+#17 := (:var 0 T3)
+#16 := (:var 1 T2)
+#15 := (:var 2 T1)
+#18 := (uf_2 #15 #16 #17)
+#582 := (pattern #18)
+#19 := (uf_1 #18 #16)
+#68 := (= #17 #19)
+#584 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) (:pat #582) #68)
+#72 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #68)
+#583 := (iff #72 #584)
+#586 := (iff #584 #584)
+#587 := [rewrite]: #586
+#585 := [rewrite]: #583
+#588 := [trans #585 #587]: #583
+#82 := (~ #72 #72)
+#96 := (~ #68 #68)
+#97 := [refl]: #96
+#78 := [nnf-pos #97]: #82
+#20 := (= #19 #17)
+#21 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #20)
+#73 := (iff #21 #72)
+#70 := (iff #20 #68)
+#71 := [rewrite]: #70
+#74 := [quant-intro #71]: #73
+#67 := [asserted]: #21
+#77 := [mp #67 #74]: #72
+#98 := [mp~ #77 #78]: #72
+#589 := [mp #98 #588]: #584
+#211 := (not #584)
+#212 := (or #211 #566)
+#213 := [quant-inst]: #212
+#414 := [unit-resolution #213 #589]: #566
+#416 := [symm #414]: #415
+#506 := [monotonicity #416]: #509
+#498 := [monotonicity #506]: #502
+#492 := [symm #498]: #503
+#244 := (= #35 #157)
+#158 := (= uf_8 #35)
+#248 := (ite #27 #158 #244)
+#247 := (or #250 #248)
+#245 := (= uf_5 uf_3)
+#159 := (ite #245 #158 #244)
+#251 := (or #250 #159)
+#567 := (iff #251 #247)
+#224 := (iff #247 #247)
+#356 := [rewrite]: #224
+#249 := (iff #159 #248)
+#246 := (iff #245 #27)
+#237 := [rewrite]: #246
+#177 := [monotonicity #237]: #249
+#569 := [monotonicity #177]: #567
+#563 := [trans #569 #356]: #567
+#230 := [quant-inst]: #251
+#235 := [mp #230 #563]: #247
+#488 := [unit-resolution #235 #581]: #248
+#236 := (not #248)
+#490 := (or #236 #244)
+#80 := [and-elim #75]: #28
+#572 := (or #236 #27 #244)
+#573 := [def-axiom]: #572
+#500 := [unit-resolution #573 #80]: #490
+#501 := [unit-resolution #500 #488]: #244
+#495 := [trans #501 #492]: #494
+#489 := [trans #495 #493]: #37
+#38 := (not #37)
+#76 := [asserted]: #38
+[unit-resolution #76 #489]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,13 @@
+(benchmark Isabelle
+:extrasorts ( T2 T1 T3)
+:extrafuns (
+  (uf_2 T1)
+  (uf_3 T2)
+ )
+:extrapreds (
+  (up_4 T1 T2)
+  (up_1 T1 T2)
+ )
+: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))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,62 @@
+#2 := false
+decl up_4 :: (-> T1 T2 bool)
+decl uf_3 :: T2
+#5 := uf_3
+decl uf_2 :: T1
+#4 := uf_2
+#7 := (up_4 uf_2 uf_3)
+#60 := (not #7)
+decl up_1 :: (-> T1 T2 bool)
+#6 := (up_1 uf_2 uf_3)
+#33 := (iff #6 #7)
+#49 := (or #6 #7 #33)
+#52 := (not #49)
+#1 := true
+#11 := (iff #7 true)
+#10 := (iff #6 true)
+#12 := (or #10 #11)
+#8 := (and #7 true)
+#9 := (iff #6 #8)
+#13 := (or #9 #12)
+#14 := (not #13)
+#55 := (iff #14 #52)
+#40 := (or #6 #7)
+#43 := (or #33 #40)
+#46 := (not #43)
+#53 := (iff #46 #52)
+#50 := (iff #43 #49)
+#51 := [rewrite]: #50
+#54 := [monotonicity #51]: #53
+#47 := (iff #14 #46)
+#44 := (iff #13 #43)
+#41 := (iff #12 #40)
+#38 := (iff #11 #7)
+#39 := [rewrite]: #38
+#36 := (iff #10 #6)
+#37 := [rewrite]: #36
+#42 := [monotonicity #37 #39]: #41
+#34 := (iff #9 #33)
+#31 := (iff #8 #7)
+#32 := [rewrite]: #31
+#35 := [monotonicity #32]: #34
+#45 := [monotonicity #35 #42]: #44
+#48 := [monotonicity #45]: #47
+#56 := [trans #48 #54]: #55
+#30 := [asserted]: #14
+#57 := [mp #30 #56]: #52
+#61 := [not-or-elim #57]: #60
+#58 := (not #6)
+#59 := [not-or-elim #57]: #58
+#72 := (or #7 #6)
+#66 := (iff #7 #58)
+#62 := (not #33)
+#64 := (iff #62 #66)
+#67 := [rewrite]: #64
+#63 := [not-or-elim #57]: #62
+#68 := [mp #63 #67]: #66
+#69 := (not #66)
+#70 := (or #7 #6 #69)
+#71 := [def-axiom]: #70
+#73 := [unit-resolution #71 #68]: #72
+[unit-resolution #73 #59 #61]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_03	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,13 @@
+(benchmark Isabelle
+:extrasorts ( T1 T2)
+:extrafuns (
+  (uf_3 T2)
+  (uf_1 T1 T1)
+  (uf_2 T2 T2)
+  (uf_4 T1)
+ )
+:assumption (forall (?x1 T1) (= (uf_1 ?x1) ?x1))
+:assumption (forall (?x2 T2) (iff (= (uf_2 ?x2) uf_3) (= ?x2 uf_3)))
+:assumption (not (and (= (uf_1 uf_4) uf_4) (iff (= (uf_2 uf_3) uf_3) true)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_03.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,120 @@
+#2 := false
+decl uf_1 :: (-> T1 T1)
+decl uf_4 :: T1
+#15 := uf_4
+#16 := (uf_1 uf_4)
+#48 := (= uf_4 #16)
+#83 := (not #48)
+decl uf_2 :: (-> T2 T2)
+decl uf_3 :: T2
+#10 := uf_3
+#18 := (uf_2 uf_3)
+#51 := (= uf_3 #18)
+#84 := (not #51)
+#556 := [hypothesis]: #84
+#8 := (:var 0 T2)
+#9 := (uf_2 #8)
+#575 := (pattern #9)
+#12 := (= #8 uf_3)
+#11 := (= #9 uf_3)
+#13 := (iff #11 #12)
+#576 := (forall (vars (?x2 T2)) (:pat #575) #13)
+#14 := (forall (vars (?x2 T2)) #13)
+#579 := (iff #14 #576)
+#577 := (iff #13 #13)
+#578 := [refl]: #577
+#580 := [quant-intro #578]: #579
+#70 := (~ #14 #14)
+#80 := (~ #13 #13)
+#81 := [refl]: #80
+#67 := [nnf-pos #81]: #70
+#45 := [asserted]: #14
+#82 := [mp~ #45 #67]: #14
+#581 := [mp #82 #580]: #576
+#242 := (not #576)
+#170 := (or #242 #51)
+#150 := (= uf_3 uf_3)
+#19 := (= #18 uf_3)
+#237 := (iff #19 #150)
+#243 := (or #242 #237)
+#244 := (iff #243 #170)
+#560 := (iff #170 #170)
+#562 := [rewrite]: #560
+#230 := (iff #237 #51)
+#1 := true
+#54 := (iff #51 true)
+#57 := (iff #54 #51)
+#58 := [rewrite]: #57
+#152 := (iff #237 #54)
+#151 := (iff #150 true)
+#238 := [rewrite]: #151
+#52 := (iff #19 #51)
+#53 := [rewrite]: #52
+#239 := [monotonicity #53 #238]: #152
+#241 := [trans #239 #58]: #230
+#223 := [monotonicity #241]: #244
+#217 := [trans #223 #562]: #244
+#240 := [quant-inst]: #243
+#349 := [mp #240 #217]: #170
+#228 := [unit-resolution #349 #581 #556]: false
+#229 := [lemma #228]: #51
+#71 := (or #83 #84)
+#61 := (and #48 #51)
+#64 := (not #61)
+#90 := (iff #64 #71)
+#72 := (not #71)
+#85 := (not #72)
+#88 := (iff #85 #71)
+#89 := [rewrite]: #88
+#86 := (iff #64 #85)
+#73 := (iff #61 #72)
+#74 := [rewrite]: #73
+#87 := [monotonicity #74]: #86
+#91 := [trans #87 #89]: #90
+#20 := (iff #19 true)
+#17 := (= #16 uf_4)
+#21 := (and #17 #20)
+#22 := (not #21)
+#65 := (iff #22 #64)
+#62 := (iff #21 #61)
+#59 := (iff #20 #51)
+#55 := (iff #20 #54)
+#56 := [monotonicity #53]: #55
+#60 := [trans #56 #58]: #59
+#49 := (iff #17 #48)
+#50 := [rewrite]: #49
+#63 := [monotonicity #50 #60]: #62
+#66 := [monotonicity #63]: #65
+#46 := [asserted]: #22
+#69 := [mp #46 #66]: #64
+#92 := [mp #69 #91]: #71
+#563 := [unit-resolution #92 #229]: #83
+#4 := (:var 0 T1)
+#5 := (uf_1 #4)
+#568 := (pattern #5)
+#39 := (= #4 #5)
+#569 := (forall (vars (?x1 T1)) (:pat #568) #39)
+#42 := (forall (vars (?x1 T1)) #39)
+#572 := (iff #42 #569)
+#570 := (iff #39 #39)
+#571 := [refl]: #570
+#573 := [quant-intro #571]: #572
+#77 := (~ #42 #42)
+#75 := (~ #39 #39)
+#76 := [refl]: #75
+#78 := [nnf-pos #76]: #77
+#6 := (= #5 #4)
+#7 := (forall (vars (?x1 T1)) #6)
+#43 := (iff #7 #42)
+#40 := (iff #6 #39)
+#41 := [rewrite]: #40
+#44 := [quant-intro #41]: #43
+#38 := [asserted]: #7
+#47 := [mp #38 #44]: #42
+#79 := [mp~ #47 #78]: #42
+#574 := [mp #79 #573]: #569
+#565 := (not #569)
+#566 := (or #565 #48)
+#561 := [quant-inst]: #566
+[unit-resolution #561 #574 #563]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_04	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,18 @@
+(benchmark Isabelle
+:extrasorts ( T2 T3 T1)
+:extrafuns (
+  (uf_2 T1 T2 T3 T1)
+  (uf_1 T1 T2 T3)
+  (uf_6 T1)
+  (uf_3 T2)
+  (uf_4 T2)
+  (uf_5 T2)
+  (uf_7 T3)
+  (uf_8 T3)
+ )
+: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))))
+:assumption (forall (?x5 T1) (?x6 T2) (?x7 T3) (= (uf_1 (uf_2 ?x5 ?x6 ?x7) ?x6) ?x7))
+:assumption (and (not (= uf_3 uf_4)) (not (= uf_3 uf_5)))
+: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)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_04.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,181 @@
+#2 := false
+decl uf_1 :: (-> T1 T2 T3)
+decl uf_3 :: T2
+#22 := uf_3
+decl uf_6 :: T1
+#30 := uf_6
+#36 := (uf_1 uf_6 uf_3)
+decl uf_2 :: (-> T1 T2 T3 T1)
+decl uf_8 :: T3
+#33 := uf_8
+decl uf_5 :: T2
+#26 := uf_5
+decl uf_7 :: T3
+#31 := uf_7
+decl uf_4 :: T2
+#23 := uf_4
+#32 := (uf_2 uf_6 uf_4 uf_7)
+#34 := (uf_2 #32 uf_5 uf_8)
+#35 := (uf_1 #34 uf_3)
+#37 := (= #35 #36)
+#223 := (uf_1 #32 uf_4)
+#214 := (uf_2 uf_6 uf_4 #223)
+#552 := (uf_1 #214 uf_3)
+#555 := (= #552 #36)
+#560 := (= #36 #552)
+#556 := (= #223 #552)
+#24 := (= uf_3 uf_4)
+#561 := (ite #24 #556 #560)
+#8 := (:var 0 T2)
+#6 := (:var 1 T3)
+#5 := (:var 2 T2)
+#4 := (:var 3 T1)
+#7 := (uf_2 #4 #5 #6)
+#9 := (uf_1 #7 #8)
+#575 := (pattern #9)
+#11 := (uf_1 #4 #8)
+#100 := (= #9 #11)
+#99 := (= #6 #9)
+#55 := (= #5 #8)
+#83 := (ite #55 #99 #100)
+#576 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) (:pat #575) #83)
+#90 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #83)
+#579 := (iff #90 #576)
+#577 := (iff #83 #83)
+#578 := [refl]: #577
+#580 := [quant-intro #578]: #579
+#58 := (ite #55 #6 #11)
+#61 := (= #9 #58)
+#64 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #61)
+#87 := (iff #64 #90)
+#84 := (iff #61 #83)
+#89 := [rewrite]: #84
+#88 := [quant-intro #89]: #87
+#93 := (~ #64 #64)
+#91 := (~ #61 #61)
+#92 := [refl]: #91
+#94 := [nnf-pos #92]: #93
+#10 := (= #8 #5)
+#12 := (ite #10 #6 #11)
+#13 := (= #9 #12)
+#14 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #13)
+#65 := (iff #14 #64)
+#62 := (iff #13 #61)
+#59 := (= #12 #58)
+#56 := (iff #10 #55)
+#57 := [rewrite]: #56
+#60 := [monotonicity #57]: #59
+#63 := [monotonicity #60]: #62
+#66 := [quant-intro #63]: #65
+#54 := [asserted]: #14
+#69 := [mp #54 #66]: #64
+#95 := [mp~ #69 #94]: #64
+#85 := [mp #95 #88]: #90
+#581 := [mp #85 #580]: #576
+#250 := (not #576)
+#548 := (or #250 #561)
+#551 := (= uf_4 uf_3)
+#557 := (ite #551 #556 #555)
+#549 := (or #250 #557)
+#271 := (iff #549 #548)
+#273 := (iff #548 #548)
+#259 := [rewrite]: #273
+#559 := (iff #557 #561)
+#198 := (iff #555 #560)
+#199 := [rewrite]: #198
+#193 := (iff #551 #24)
+#558 := [rewrite]: #193
+#562 := [monotonicity #558 #199]: #559
+#272 := [monotonicity #562]: #271
+#274 := [trans #272 #259]: #271
+#255 := [quant-inst]: #549
+#165 := [mp #255 #274]: #548
+#510 := [unit-resolution #165 #581]: #561
+#544 := (not #561)
+#497 := (or #544 #560)
+#25 := (not #24)
+#27 := (= uf_3 uf_5)
+#28 := (not #27)
+#29 := (and #25 #28)
+#75 := [asserted]: #29
+#79 := [and-elim #75]: #25
+#268 := (or #544 #24 #560)
+#542 := [def-axiom]: #268
+#499 := [unit-resolution #542 #79]: #497
+#491 := [unit-resolution #499 #510]: #560
+#493 := [symm #491]: #555
+#494 := (= #35 #552)
+#157 := (uf_1 #32 uf_3)
+#503 := (= #157 #552)
+#502 := (= #552 #157)
+#509 := (= #214 #32)
+#415 := (= #223 uf_7)
+#566 := (= uf_7 #223)
+#17 := (:var 0 T3)
+#16 := (:var 1 T2)
+#15 := (:var 2 T1)
+#18 := (uf_2 #15 #16 #17)
+#582 := (pattern #18)
+#19 := (uf_1 #18 #16)
+#68 := (= #17 #19)
+#584 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) (:pat #582) #68)
+#72 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #68)
+#583 := (iff #72 #584)
+#586 := (iff #584 #584)
+#587 := [rewrite]: #586
+#585 := [rewrite]: #583
+#588 := [trans #585 #587]: #583
+#82 := (~ #72 #72)
+#96 := (~ #68 #68)
+#97 := [refl]: #96
+#78 := [nnf-pos #97]: #82
+#20 := (= #19 #17)
+#21 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #20)
+#73 := (iff #21 #72)
+#70 := (iff #20 #68)
+#71 := [rewrite]: #70
+#74 := [quant-intro #71]: #73
+#67 := [asserted]: #21
+#77 := [mp #67 #74]: #72
+#98 := [mp~ #77 #78]: #72
+#589 := [mp #98 #588]: #584
+#211 := (not #584)
+#212 := (or #211 #566)
+#213 := [quant-inst]: #212
+#414 := [unit-resolution #213 #589]: #566
+#416 := [symm #414]: #415
+#506 := [monotonicity #416]: #509
+#498 := [monotonicity #506]: #502
+#492 := [symm #498]: #503
+#244 := (= #35 #157)
+#158 := (= uf_8 #35)
+#248 := (ite #27 #158 #244)
+#247 := (or #250 #248)
+#245 := (= uf_5 uf_3)
+#159 := (ite #245 #158 #244)
+#251 := (or #250 #159)
+#567 := (iff #251 #247)
+#224 := (iff #247 #247)
+#356 := [rewrite]: #224
+#249 := (iff #159 #248)
+#246 := (iff #245 #27)
+#237 := [rewrite]: #246
+#177 := [monotonicity #237]: #249
+#569 := [monotonicity #177]: #567
+#563 := [trans #569 #356]: #567
+#230 := [quant-inst]: #251
+#235 := [mp #230 #563]: #247
+#488 := [unit-resolution #235 #581]: #248
+#236 := (not #248)
+#490 := (or #236 #244)
+#80 := [and-elim #75]: #28
+#572 := (or #236 #27 #244)
+#573 := [def-axiom]: #572
+#500 := [unit-resolution #573 #80]: #490
+#501 := [unit-resolution #500 #488]: #244
+#495 := [trans #501 #492]: #494
+#489 := [trans #495 #493]: #37
+#38 := (not #37)
+#76 := [asserted]: #38
+[unit-resolution #76 #489]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_05	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,20 @@
+(benchmark Isabelle
+:extrasorts ( T1 T2 T3)
+:extrafuns (
+  (uf_6 Int T2)
+  (uf_1 T1 T3 T3)
+  (uf_4 T3)
+  (uf_2 T2 T3 T3)
+  (uf_3 T1 T2 T2)
+  (uf_7 T2 Int)
+  (uf_5 T1)
+ )
+: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))))
+:assumption (forall (?x4 T1) (= (uf_1 ?x4 uf_4) uf_4))
+:assumption (forall (?x5 T2) (= (uf_3 uf_5 ?x5) (uf_6 (+ (uf_7 ?x5) 1))))
+:assumption (forall (?x6 T2) (= (uf_6 (uf_7 ?x6)) ?x6))
+:assumption (forall (?x7 Int) (implies (<= 0 ?x7) (= (uf_7 (uf_6 ?x7)) ?x7)))
+:assumption (forall (?x8 Int) (implies (< ?x8 0) (= (uf_7 (uf_6 ?x8)) 0)))
+: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))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_05.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,464 @@
+#2 := false
+decl uf_2 :: (-> T2 T3 T3)
+decl uf_4 :: T3
+#15 := uf_4
+decl uf_6 :: (-> int T2)
+#48 := 2::int
+#49 := (uf_6 2::int)
+#50 := (uf_2 #49 uf_4)
+#23 := 1::int
+#44 := (uf_6 1::int)
+#51 := (uf_2 #44 #50)
+decl uf_1 :: (-> T1 T3 T3)
+#45 := (uf_2 #44 uf_4)
+#31 := 0::int
+#43 := (uf_6 0::int)
+#46 := (uf_2 #43 #45)
+decl uf_5 :: T1
+#19 := uf_5
+#47 := (uf_1 uf_5 #46)
+#52 := (= #47 #51)
+#266 := (uf_1 uf_5 #45)
+decl uf_3 :: (-> T1 T2 T2)
+#352 := (uf_3 uf_5 #43)
+#267 := (uf_2 #352 #266)
+#797 := (= #267 #51)
+#795 := (= #51 #267)
+#758 := (= #50 #266)
+#521 := (uf_1 uf_5 uf_4)
+#522 := (uf_3 uf_5 #44)
+#523 := (uf_2 #522 #521)
+#756 := (= #523 #266)
+#616 := (= #266 #523)
+#6 := (:var 0 T3)
+#4 := (:var 2 T1)
+#10 := (uf_1 #4 #6)
+#5 := (:var 1 T2)
+#9 := (uf_3 #4 #5)
+#11 := (uf_2 #9 #10)
+#683 := (pattern #11)
+#7 := (uf_2 #5 #6)
+#8 := (uf_1 #4 #7)
+#682 := (pattern #8)
+#12 := (= #8 #11)
+#684 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3)) (:pat #682 #683) #12)
+#13 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3)) #12)
+#687 := (iff #13 #684)
+#685 := (iff #12 #12)
+#686 := [refl]: #685
+#688 := [quant-intro #686]: #687
+#195 := (~ #13 #13)
+#193 := (~ #12 #12)
+#194 := [refl]: #193
+#196 := [nnf-pos #194]: #195
+#69 := [asserted]: #13
+#197 := [mp~ #69 #196]: #13
+#689 := [mp #197 #688]: #684
+#345 := (not #684)
+#604 := (or #345 #616)
+#606 := [quant-inst]: #604
+#277 := [unit-resolution #606 #689]: #616
+#757 := [symm #277]: #756
+#754 := (= #50 #523)
+#569 := (= uf_4 #521)
+#14 := (:var 0 T1)
+#16 := (uf_1 #14 uf_4)
+#690 := (pattern #16)
+#71 := (= uf_4 #16)
+#691 := (forall (vars (?x4 T1)) (:pat #690) #71)
+#74 := (forall (vars (?x4 T1)) #71)
+#694 := (iff #74 #691)
+#692 := (iff #71 #71)
+#693 := [refl]: #692
+#695 := [quant-intro #693]: #694
+#180 := (~ #74 #74)
+#198 := (~ #71 #71)
+#199 := [refl]: #198
+#178 := [nnf-pos #199]: #180
+#17 := (= #16 uf_4)
+#18 := (forall (vars (?x4 T1)) #17)
+#75 := (iff #18 #74)
+#72 := (iff #17 #71)
+#73 := [rewrite]: #72
+#76 := [quant-intro #73]: #75
+#70 := [asserted]: #18
+#79 := [mp #70 #76]: #74
+#200 := [mp~ #79 #178]: #74
+#696 := [mp #200 #695]: #691
+#572 := (not #691)
+#573 := (or #572 #569)
+#574 := [quant-inst]: #573
+#282 := [unit-resolution #574 #696]: #569
+#752 := (= #49 #522)
+decl uf_7 :: (-> T2 int)
+#666 := (uf_7 #44)
+#595 := (+ 1::int #666)
+#597 := (uf_6 #595)
+#748 := (= #597 #522)
+#605 := (= #522 #597)
+#20 := (:var 0 T2)
+#22 := (uf_7 #20)
+#698 := (pattern #22)
+#21 := (uf_3 uf_5 #20)
+#697 := (pattern #21)
+#78 := (+ 1::int #22)
+#82 := (uf_6 #78)
+#85 := (= #21 #82)
+#699 := (forall (vars (?x5 T2)) (:pat #697 #698) #85)
+#88 := (forall (vars (?x5 T2)) #85)
+#702 := (iff #88 #699)
+#700 := (iff #85 #85)
+#701 := [refl]: #700
+#703 := [quant-intro #701]: #702
+#181 := (~ #88 #88)
+#201 := (~ #85 #85)
+#202 := [refl]: #201
+#182 := [nnf-pos #202]: #181
+#24 := (+ #22 1::int)
+#25 := (uf_6 #24)
+#26 := (= #21 #25)
+#27 := (forall (vars (?x5 T2)) #26)
+#89 := (iff #27 #88)
+#86 := (iff #26 #85)
+#83 := (= #25 #82)
+#80 := (= #24 #78)
+#81 := [rewrite]: #80
+#84 := [monotonicity #81]: #83
+#87 := [monotonicity #84]: #86
+#90 := [quant-intro #87]: #89
+#77 := [asserted]: #27
+#93 := [mp #77 #90]: #88
+#203 := [mp~ #93 #182]: #88
+#704 := [mp #203 #703]: #699
+#607 := (not #699)
+#600 := (or #607 #605)
+#601 := [quant-inst]: #600
+#269 := [unit-resolution #601 #704]: #605
+#749 := [symm #269]: #748
+#750 := (= #49 #597)
+#499 := (uf_7 #597)
+#337 := (uf_6 #499)
+#318 := (= #337 #597)
+#28 := (uf_6 #22)
+#92 := (= #20 #28)
+#705 := (forall (vars (?x6 T2)) (:pat #698) #92)
+#96 := (forall (vars (?x6 T2)) #92)
+#706 := (iff #96 #705)
+#708 := (iff #705 #705)
+#709 := [rewrite]: #708
+#707 := [rewrite]: #706
+#710 := [trans #707 #709]: #706
+#183 := (~ #96 #96)
+#204 := (~ #92 #92)
+#205 := [refl]: #204
+#184 := [nnf-pos #205]: #183
+#29 := (= #28 #20)
+#30 := (forall (vars (?x6 T2)) #29)
+#97 := (iff #30 #96)
+#94 := (iff #29 #92)
+#95 := [rewrite]: #94
+#98 := [quant-intro #95]: #97
+#91 := [asserted]: #30
+#101 := [mp #91 #98]: #96
+#206 := [mp~ #101 #184]: #96
+#711 := [mp #206 #710]: #705
+#376 := (not #705)
+#325 := (or #376 #318)
+#316 := (= #597 #337)
+#326 := (or #376 #316)
+#328 := (iff #326 #325)
+#329 := (iff #325 #325)
+#310 := [rewrite]: #329
+#323 := (iff #316 #318)
+#324 := [rewrite]: #323
+#317 := [monotonicity #324]: #328
+#312 := [trans #317 #310]: #328
+#327 := [quant-inst]: #326
+#313 := [mp #327 #312]: #325
+#271 := [unit-resolution #313 #711]: #318
+#746 := (= #49 #337)
+#744 := (= 2::int #499)
+#742 := (= #499 2::int)
+#578 := -1::int
+#513 := (* -1::int #666)
+#514 := (+ #499 #513)
+#474 := (<= #514 1::int)
+#512 := (= #514 1::int)
+#504 := (>= #666 -1::int)
+#586 := (>= #666 1::int)
+#378 := (= #666 1::int)
+#32 := (:var 0 int)
+#34 := (uf_6 #32)
+#712 := (pattern #34)
+#118 := (>= #32 0::int)
+#119 := (not #118)
+#35 := (uf_7 #34)
+#100 := (= #32 #35)
+#125 := (or #100 #119)
+#713 := (forall (vars (?x7 int)) (:pat #712) #125)
+#130 := (forall (vars (?x7 int)) #125)
+#716 := (iff #130 #713)
+#714 := (iff #125 #125)
+#715 := [refl]: #714
+#717 := [quant-intro #715]: #716
+#185 := (~ #130 #130)
+#207 := (~ #125 #125)
+#208 := [refl]: #207
+#186 := [nnf-pos #208]: #185
+#36 := (= #35 #32)
+#33 := (<= 0::int #32)
+#37 := (implies #33 #36)
+#38 := (forall (vars (?x7 int)) #37)
+#133 := (iff #38 #130)
+#107 := (not #33)
+#108 := (or #107 #100)
+#113 := (forall (vars (?x7 int)) #108)
+#131 := (iff #113 #130)
+#128 := (iff #108 #125)
+#122 := (or #119 #100)
+#126 := (iff #122 #125)
+#127 := [rewrite]: #126
+#123 := (iff #108 #122)
+#120 := (iff #107 #119)
+#116 := (iff #33 #118)
+#117 := [rewrite]: #116
+#121 := [monotonicity #117]: #120
+#124 := [monotonicity #121]: #123
+#129 := [trans #124 #127]: #128
+#132 := [quant-intro #129]: #131
+#114 := (iff #38 #113)
+#111 := (iff #37 #108)
+#104 := (implies #33 #100)
+#109 := (iff #104 #108)
+#110 := [rewrite]: #109
+#105 := (iff #37 #104)
+#102 := (iff #36 #100)
+#103 := [rewrite]: #102
+#106 := [monotonicity #103]: #105
+#112 := [trans #106 #110]: #111
+#115 := [quant-intro #112]: #114
+#134 := [trans #115 #132]: #133
+#99 := [asserted]: #38
+#135 := [mp #99 #134]: #130
+#209 := [mp~ #135 #186]: #130
+#718 := [mp #209 #717]: #713
+#673 := (not #713)
+#365 := (or #673 #378)
+#307 := (>= 1::int 0::int)
+#668 := (not #307)
+#669 := (= 1::int #666)
+#655 := (or #669 #668)
+#366 := (or #673 #655)
+#645 := (iff #366 #365)
+#360 := (iff #365 #365)
+#643 := [rewrite]: #360
+#654 := (iff #655 #378)
+#374 := (or #378 false)
+#653 := (iff #374 #378)
+#650 := [rewrite]: #653
+#375 := (iff #655 #374)
+#651 := (iff #668 false)
+#1 := true
+#670 := (not true)
+#677 := (iff #670 false)
+#678 := [rewrite]: #677
+#381 := (iff #668 #670)
+#379 := (iff #307 true)
+#380 := [rewrite]: #379
+#274 := [monotonicity #380]: #381
+#652 := [trans #274 #678]: #651
+#656 := (iff #669 #378)
+#363 := [rewrite]: #656
+#649 := [monotonicity #363 #652]: #375
+#364 := [trans #649 #650]: #654
+#646 := [monotonicity #364]: #645
+#647 := [trans #646 #643]: #645
+#367 := [quant-inst]: #366
+#644 := [mp #367 #647]: #365
+#272 := [unit-resolution #644 #718]: #378
+#270 := (not #378)
+#273 := (or #270 #586)
+#725 := [th-lemma]: #273
+#726 := [unit-resolution #725 #272]: #586
+#727 := (not #586)
+#728 := (or #727 #504)
+#729 := [th-lemma]: #728
+#730 := [unit-resolution #729 #726]: #504
+#481 := (not #504)
+#496 := (or #673 #481 #512)
+#509 := (>= #595 0::int)
+#468 := (not #509)
+#501 := (= #595 #499)
+#503 := (or #501 #468)
+#497 := (or #673 #503)
+#470 := (iff #497 #496)
+#491 := (or #481 #512)
+#498 := (or #673 #491)
+#467 := (iff #498 #496)
+#469 := [rewrite]: #467
+#459 := (iff #497 #498)
+#494 := (iff #503 #491)
+#488 := (or #512 #481)
+#492 := (iff #488 #491)
+#493 := [rewrite]: #492
+#489 := (iff #503 #488)
+#486 := (iff #468 #481)
+#525 := (iff #509 #504)
+#480 := [rewrite]: #525
+#487 := [monotonicity #480]: #486
+#510 := (iff #501 #512)
+#524 := [rewrite]: #510
+#490 := [monotonicity #524 #487]: #489
+#495 := [trans #490 #493]: #494
+#460 := [monotonicity #495]: #459
+#471 := [trans #460 #469]: #470
+#482 := [quant-inst]: #497
+#473 := [mp #482 #471]: #496
+#731 := [unit-resolution #473 #718 #730]: #512
+#732 := (not #512)
+#733 := (or #732 #474)
+#734 := [th-lemma]: #733
+#735 := [unit-resolution #734 #731]: #474
+#475 := (>= #514 1::int)
+#736 := (or #732 #475)
+#737 := [th-lemma]: #736
+#738 := [unit-resolution #737 #731]: #475
+#582 := (<= #666 1::int)
+#739 := (or #270 #582)
+#740 := [th-lemma]: #739
+#741 := [unit-resolution #740 #272]: #582
+#743 := [th-lemma #726 #741 #738 #735]: #742
+#745 := [symm #743]: #744
+#747 := [monotonicity #745]: #746
+#751 := [trans #747 #271]: #750
+#753 := [trans #751 #749]: #752
+#755 := [monotonicity #753 #282]: #754
+#759 := [trans #755 #757]: #758
+#792 := (= #44 #352)
+#358 := (uf_7 #43)
+#613 := (+ 1::int #358)
+#617 := (uf_6 #613)
+#788 := (= #617 #352)
+#598 := (= #352 #617)
+#608 := (or #607 #598)
+#609 := [quant-inst]: #608
+#760 := [unit-resolution #609 #704]: #598
+#789 := [symm #760]: #788
+#790 := (= #44 #617)
+#575 := (uf_7 #617)
+#390 := (uf_6 #575)
+#382 := (= #390 #617)
+#385 := (or #376 #382)
+#392 := (= #617 #390)
+#386 := (or #376 #392)
+#387 := (iff #386 #385)
+#369 := (iff #385 #385)
+#370 := [rewrite]: #369
+#383 := (iff #392 #382)
+#384 := [rewrite]: #383
+#368 := [monotonicity #384]: #387
+#361 := [trans #368 #370]: #387
+#377 := [quant-inst]: #386
+#371 := [mp #377 #361]: #385
+#761 := [unit-resolution #371 #711]: #382
+#786 := (= #44 #390)
+#784 := (= 1::int #575)
+#782 := (= #575 1::int)
+#568 := (* -1::int #575)
+#579 := (+ #358 #568)
+#535 := (<= #579 -1::int)
+#557 := (= #579 -1::int)
+#561 := (>= #358 -1::int)
+#585 := (>= #358 0::int)
+#676 := (= #358 0::int)
+#315 := (or #673 #676)
+#268 := (>= 0::int 0::int)
+#354 := (not #268)
+#355 := (= 0::int #358)
+#359 := (or #355 #354)
+#657 := (or #673 #359)
+#320 := (iff #657 #315)
+#322 := (iff #315 #315)
+#659 := [rewrite]: #322
+#672 := (iff #359 #676)
+#675 := (or #676 false)
+#330 := (iff #675 #676)
+#335 := [rewrite]: #330
+#681 := (iff #359 #675)
+#679 := (iff #354 false)
+#343 := (iff #354 #670)
+#332 := (iff #268 true)
+#463 := [rewrite]: #332
+#344 := [monotonicity #463]: #343
+#680 := [trans #344 #678]: #679
+#338 := (iff #355 #676)
+#674 := [rewrite]: #338
+#671 := [monotonicity #674 #680]: #681
+#331 := [trans #671 #335]: #672
+#321 := [monotonicity #331]: #320
+#660 := [trans #321 #659]: #320
+#319 := [quant-inst]: #657
+#661 := [mp #319 #660]: #315
+#762 := [unit-resolution #661 #718]: #676
+#763 := (not #676)
+#764 := (or #763 #585)
+#765 := [th-lemma]: #764
+#766 := [unit-resolution #765 #762]: #585
+#767 := (not #585)
+#768 := (or #767 #561)
+#769 := [th-lemma]: #768
+#770 := [unit-resolution #769 #766]: #561
+#564 := (not #561)
+#549 := (or #673 #557 #564)
+#570 := (>= #613 0::int)
+#571 := (not #570)
+#576 := (= #613 #575)
+#577 := (or #576 #571)
+#552 := (or #673 #577)
+#530 := (iff #552 #549)
+#551 := (or #557 #564)
+#554 := (or #673 #551)
+#556 := (iff #554 #549)
+#529 := [rewrite]: #556
+#555 := (iff #552 #554)
+#547 := (iff #577 #551)
+#559 := (iff #571 #564)
+#562 := (iff #570 #561)
+#563 := [rewrite]: #562
+#565 := [monotonicity #563]: #559
+#558 := (iff #576 #557)
+#560 := [rewrite]: #558
+#548 := [monotonicity #560 #565]: #547
+#550 := [monotonicity #548]: #555
+#531 := [trans #550 #529]: #530
+#553 := [quant-inst]: #552
+#424 := [mp #553 #531]: #549
+#771 := [unit-resolution #424 #718 #770]: #557
+#772 := (not #557)
+#773 := (or #772 #535)
+#774 := [th-lemma]: #773
+#775 := [unit-resolution #774 #771]: #535
+#536 := (>= #579 -1::int)
+#776 := (or #772 #536)
+#777 := [th-lemma]: #776
+#778 := [unit-resolution #777 #771]: #536
+#584 := (<= #358 0::int)
+#779 := (or #763 #584)
+#780 := [th-lemma]: #779
+#781 := [unit-resolution #780 #762]: #584
+#783 := [th-lemma #766 #781 #778 #775]: #782
+#785 := [symm #783]: #784
+#787 := [monotonicity #785]: #786
+#791 := [trans #787 #761]: #790
+#793 := [trans #791 #789]: #792
+#796 := [monotonicity #793 #759]: #795
+#798 := [symm #796]: #797
+#353 := (= #47 #267)
+#356 := (or #345 #353)
+#357 := [quant-inst]: #356
+#794 := [unit-resolution #357 #689]: #353
+#799 := [trans #794 #798]: #52
+#53 := (not #52)
+#177 := [asserted]: #53
+[unit-resolution #177 #799]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_06	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrasorts ( T1 T2)
+:extrapreds (
+  (up_1 T1)
+ )
+:assumption (not (or (forall (?x1 T1) (up_1 ?x1)) (not (forall (?x2 T1) (up_1 ?x2)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_06.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,21 @@
+#2 := false
+decl up_1 :: (-> T1 bool)
+#4 := (:var 0 T1)
+#5 := (up_1 #4)
+#6 := (forall (vars (?x1 T1)) #5)
+#7 := (not #6)
+#8 := (or #6 #7)
+#9 := (not #8)
+#33 := (iff #9 false)
+#1 := true
+#28 := (not true)
+#31 := (iff #28 false)
+#32 := [rewrite]: #31
+#29 := (iff #9 #28)
+#26 := (iff #8 true)
+#27 := [rewrite]: #26
+#30 := [monotonicity #27]: #29
+#34 := [trans #30 #32]: #33
+#25 := [asserted]: #9
+[mp #25 #34]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_07	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,14 @@
+(benchmark Isabelle
+:extrasorts ( T1)
+:extrafuns (
+  (uf_1 Int T1)
+  (uf_3 T1 T1)
+  (uf_2 T1 Int)
+ )
+:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
+:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
+:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
+:assumption (forall (?x4 T1) (= (uf_3 ?x4) (ite (< (uf_2 ?x4) 10) ?x4 (uf_3 (uf_1 (- (uf_2 ?x4) 10))))))
+:assumption (not (= (uf_3 (uf_1 (* 4 (uf_2 (uf_3 (uf_1 4)))))) (uf_1 6)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_07.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,373 @@
+#2 := false
+decl uf_1 :: (-> int T1)
+#37 := 6::int
+#38 := (uf_1 6::int)
+decl uf_3 :: (-> T1 T1)
+decl uf_2 :: (-> T1 int)
+#30 := 4::int
+#31 := (uf_1 4::int)
+#32 := (uf_3 #31)
+#33 := (uf_2 #32)
+#34 := (* 4::int #33)
+#35 := (uf_1 #34)
+#36 := (uf_3 #35)
+#39 := (= #36 #38)
+#548 := (uf_3 #38)
+#394 := (= #548 #38)
+#549 := (= #38 #548)
+#523 := (uf_2 #38)
+#142 := -10::int
+#513 := (+ -10::int #523)
+#537 := (uf_1 #513)
+#538 := (uf_3 #537)
+#514 := (= #538 #548)
+#22 := 10::int
+#539 := (>= #523 10::int)
+#506 := (ite #539 #514 #549)
+#4 := (:var 0 T1)
+#21 := (uf_3 #4)
+#708 := (pattern #21)
+#5 := (uf_2 #4)
+#687 := (pattern #5)
+#209 := (= #4 #21)
+#143 := (+ -10::int #5)
+#146 := (uf_1 #143)
+#149 := (uf_3 #146)
+#208 := (= #21 #149)
+#163 := (>= #5 10::int)
+#190 := (ite #163 #208 #209)
+#709 := (forall (vars (?x4 T1)) (:pat #687 #708) #190)
+#193 := (forall (vars (?x4 T1)) #190)
+#712 := (iff #193 #709)
+#710 := (iff #190 #190)
+#711 := [refl]: #710
+#713 := [quant-intro #711]: #712
+#168 := (ite #163 #149 #4)
+#173 := (= #21 #168)
+#176 := (forall (vars (?x4 T1)) #173)
+#210 := (iff #176 #193)
+#191 := (iff #173 #190)
+#192 := [rewrite]: #191
+#211 := [quant-intro #192]: #210
+#188 := (~ #176 #176)
+#205 := (~ #173 #173)
+#206 := [refl]: #205
+#189 := [nnf-pos #206]: #188
+#24 := (- #5 10::int)
+#25 := (uf_1 #24)
+#26 := (uf_3 #25)
+#23 := (< #5 10::int)
+#27 := (ite #23 #4 #26)
+#28 := (= #21 #27)
+#29 := (forall (vars (?x4 T1)) #28)
+#179 := (iff #29 #176)
+#152 := (ite #23 #4 #149)
+#155 := (= #21 #152)
+#158 := (forall (vars (?x4 T1)) #155)
+#177 := (iff #158 #176)
+#174 := (iff #155 #173)
+#171 := (= #152 #168)
+#161 := (not #163)
+#165 := (ite #161 #4 #149)
+#169 := (= #165 #168)
+#170 := [rewrite]: #169
+#166 := (= #152 #165)
+#162 := (iff #23 #161)
+#164 := [rewrite]: #162
+#167 := [monotonicity #164]: #166
+#172 := [trans #167 #170]: #171
+#175 := [monotonicity #172]: #174
+#178 := [quant-intro #175]: #177
+#159 := (iff #29 #158)
+#156 := (iff #28 #155)
+#153 := (= #27 #152)
+#150 := (= #26 #149)
+#147 := (= #25 #146)
+#144 := (= #24 #143)
+#145 := [rewrite]: #144
+#148 := [monotonicity #145]: #147
+#151 := [monotonicity #148]: #150
+#154 := [monotonicity #151]: #153
+#157 := [monotonicity #154]: #156
+#160 := [quant-intro #157]: #159
+#180 := [trans #160 #178]: #179
+#141 := [asserted]: #29
+#181 := [mp #141 #180]: #176
+#207 := [mp~ #181 #189]: #176
+#212 := [mp #207 #211]: #193
+#714 := [mp #212 #713]: #709
+#681 := (not #709)
+#517 := (or #681 #506)
+#533 := (= #548 #538)
+#507 := (ite #539 #533 #549)
+#518 := (or #681 #507)
+#529 := (iff #518 #517)
+#530 := (iff #517 #517)
+#485 := [rewrite]: #530
+#508 := (iff #507 #506)
+#473 := (iff #533 #514)
+#504 := [rewrite]: #473
+#515 := [monotonicity #504]: #508
+#509 := [monotonicity #515]: #529
+#486 := [trans #509 #485]: #529
+#519 := [quant-inst]: #518
+#491 := [mp #519 #486]: #517
+#484 := [unit-resolution #491 #714]: #506
+#493 := (not #539)
+#465 := (<= #523 6::int)
+#526 := (= #523 6::int)
+#10 := (:var 0 int)
+#12 := (uf_1 #10)
+#695 := (pattern #12)
+#9 := 0::int
+#82 := (>= #10 0::int)
+#83 := (not #82)
+#13 := (uf_2 #12)
+#64 := (= #10 #13)
+#89 := (or #64 #83)
+#696 := (forall (vars (?x2 int)) (:pat #695) #89)
+#94 := (forall (vars (?x2 int)) #89)
+#699 := (iff #94 #696)
+#697 := (iff #89 #89)
+#698 := [refl]: #697
+#700 := [quant-intro #698]: #699
+#185 := (~ #94 #94)
+#199 := (~ #89 #89)
+#200 := [refl]: #199
+#183 := [nnf-pos #200]: #185
+#14 := (= #13 #10)
+#11 := (<= 0::int #10)
+#15 := (implies #11 #14)
+#16 := (forall (vars (?x2 int)) #15)
+#97 := (iff #16 #94)
+#71 := (not #11)
+#72 := (or #71 #64)
+#77 := (forall (vars (?x2 int)) #72)
+#95 := (iff #77 #94)
+#92 := (iff #72 #89)
+#86 := (or #83 #64)
+#90 := (iff #86 #89)
+#91 := [rewrite]: #90
+#87 := (iff #72 #86)
+#84 := (iff #71 #83)
+#80 := (iff #11 #82)
+#81 := [rewrite]: #80
+#85 := [monotonicity #81]: #84
+#88 := [monotonicity #85]: #87
+#93 := [trans #88 #91]: #92
+#96 := [quant-intro #93]: #95
+#78 := (iff #16 #77)
+#75 := (iff #15 #72)
+#68 := (implies #11 #64)
+#73 := (iff #68 #72)
+#74 := [rewrite]: #73
+#69 := (iff #15 #68)
+#66 := (iff #14 #64)
+#67 := [rewrite]: #66
+#70 := [monotonicity #67]: #69
+#76 := [trans #70 #74]: #75
+#79 := [quant-intro #76]: #78
+#98 := [trans #79 #96]: #97
+#63 := [asserted]: #16
+#99 := [mp #63 #98]: #94
+#201 := [mp~ #99 #183]: #94
+#701 := [mp #201 #700]: #696
+#671 := (not #696)
+#615 := (or #671 #526)
+#520 := (>= 6::int 0::int)
+#522 := (not #520)
+#516 := (= 6::int #523)
+#524 := (or #516 #522)
+#604 := (or #671 #524)
+#606 := (iff #604 #615)
+#601 := (iff #615 #615)
+#608 := [rewrite]: #601
+#614 := (iff #524 #526)
+#603 := (or #526 false)
+#612 := (iff #603 #526)
+#613 := [rewrite]: #612
+#600 := (iff #524 #603)
+#609 := (iff #522 false)
+#1 := true
+#327 := (not true)
+#666 := (iff #327 false)
+#667 := [rewrite]: #666
+#618 := (iff #522 #327)
+#528 := (iff #520 true)
+#621 := [rewrite]: #528
+#622 := [monotonicity #621]: #618
+#611 := [trans #622 #667]: #609
+#525 := (iff #516 #526)
+#527 := [rewrite]: #525
+#602 := [monotonicity #527 #611]: #600
+#610 := [trans #602 #613]: #614
+#607 := [monotonicity #610]: #606
+#592 := [trans #607 #608]: #606
+#605 := [quant-inst]: #604
+#593 := [mp #605 #592]: #615
+#454 := [unit-resolution #593 #701]: #526
+#303 := (not #526)
+#462 := (or #303 #465)
+#458 := [th-lemma]: #462
+#463 := [unit-resolution #458 #454]: #465
+#442 := (not #465)
+#445 := (or #442 #493)
+#449 := [th-lemma]: #445
+#451 := [unit-resolution #449 #463]: #493
+#492 := (not #506)
+#496 := (or #492 #539 #549)
+#497 := [def-axiom]: #496
+#452 := [unit-resolution #497 #451 #484]: #549
+#395 := [symm #452]: #394
+#397 := (= #36 #548)
+#372 := (uf_2 #35)
+#576 := (+ -10::int #372)
+#568 := (uf_1 #576)
+#569 := (uf_3 #568)
+#408 := (= #569 #548)
+#401 := (= #568 #38)
+#422 := (= #576 6::int)
+#677 := (uf_2 #31)
+#365 := -1::int
+#478 := (* -1::int #677)
+#479 := (+ #33 #478)
+#480 := (<= #479 0::int)
+#476 := (= #33 #677)
+#431 := (= #32 #31)
+#589 := (= #31 #32)
+#590 := (+ -10::int #677)
+#587 := (uf_1 #590)
+#591 := (uf_3 #587)
+#571 := (= #32 #591)
+#572 := (>= #677 10::int)
+#574 := (ite #572 #571 #589)
+#577 := (or #681 #574)
+#578 := [quant-inst]: #577
+#450 := [unit-resolution #578 #714]: #574
+#580 := (not #572)
+#552 := (<= #677 4::int)
+#324 := (= #677 4::int)
+#674 := (or #671 #324)
+#343 := (>= 4::int 0::int)
+#679 := (not #343)
+#336 := (= 4::int #677)
+#678 := (or #336 #679)
+#660 := (or #671 #678)
+#368 := (iff #660 #674)
+#384 := (iff #674 #674)
+#385 := [rewrite]: #384
+#312 := (iff #678 #324)
+#669 := (or #324 false)
+#672 := (iff #669 #324)
+#311 := [rewrite]: #672
+#306 := (iff #678 #669)
+#668 := (iff #679 false)
+#664 := (iff #679 #327)
+#325 := (iff #343 true)
+#326 := [rewrite]: #325
+#665 := [monotonicity #326]: #664
+#663 := [trans #665 #667]: #668
+#320 := (iff #336 #324)
+#662 := [rewrite]: #320
+#670 := [monotonicity #662 #663]: #306
+#673 := [trans #670 #311]: #312
+#383 := [monotonicity #673]: #368
+#386 := [trans #383 #385]: #368
+#661 := [quant-inst]: #660
+#278 := [mp #661 #386]: #674
+#453 := [unit-resolution #278 #701]: #324
+#441 := (not #324)
+#444 := (or #441 #552)
+#446 := [th-lemma]: #444
+#447 := [unit-resolution #446 #453]: #552
+#443 := (not #552)
+#448 := (or #443 #580)
+#438 := [th-lemma]: #448
+#428 := [unit-resolution #438 #447]: #580
+#579 := (not #574)
+#583 := (or #579 #572 #589)
+#573 := [def-axiom]: #583
+#430 := [unit-resolution #573 #428 #450]: #589
+#434 := [symm #430]: #431
+#435 := [monotonicity #434]: #476
+#439 := (not #476)
+#432 := (or #439 #480)
+#440 := [th-lemma]: #432
+#433 := [unit-resolution #440 #435]: #480
+#481 := (>= #479 0::int)
+#436 := (or #439 #481)
+#437 := [th-lemma]: #436
+#423 := [unit-resolution #437 #435]: #481
+#553 := (>= #677 4::int)
+#425 := (or #441 #553)
+#426 := [th-lemma]: #425
+#424 := [unit-resolution #426 #453]: #553
+#648 := (* -1::int #372)
+#652 := (+ #34 #648)
+#631 := (<= #652 0::int)
+#649 := (= #652 0::int)
+#370 := (>= #34 0::int)
+#409 := (not #481)
+#427 := (not #553)
+#411 := (or #370 #427 #409)
+#412 := [th-lemma]: #411
+#413 := [unit-resolution #412 #424 #423]: #370
+#371 := (not #370)
+#640 := (or #371 #649)
+#488 := (or #671 #371 #649)
+#650 := (= #34 #372)
+#651 := (or #650 #371)
+#489 := (or #671 #651)
+#630 := (iff #489 #488)
+#632 := (or #671 #640)
+#635 := (iff #632 #488)
+#629 := [rewrite]: #635
+#633 := (iff #489 #632)
+#641 := (iff #651 #640)
+#643 := (or #649 #371)
+#645 := (iff #643 #640)
+#646 := [rewrite]: #645
+#644 := (iff #651 #643)
+#653 := (iff #650 #649)
+#642 := [rewrite]: #653
+#639 := [monotonicity #642]: #644
+#647 := [trans #639 #646]: #641
+#634 := [monotonicity #647]: #633
+#636 := [trans #634 #629]: #630
+#490 := [quant-inst]: #489
+#637 := [mp #490 #636]: #488
+#414 := [unit-resolution #637 #701]: #640
+#415 := [unit-resolution #414 #413]: #649
+#416 := (not #649)
+#417 := (or #416 #631)
+#418 := [th-lemma]: #417
+#419 := [unit-resolution #418 #415]: #631
+#638 := (>= #652 0::int)
+#420 := (or #416 #638)
+#421 := [th-lemma]: #420
+#410 := [unit-resolution #421 #415]: #638
+#399 := [th-lemma #410 #419 #424 #447 #423 #433]: #422
+#402 := [monotonicity #399]: #401
+#393 := [monotonicity #402]: #408
+#564 := (= #36 #569)
+#575 := (= #35 #36)
+#570 := (>= #372 10::int)
+#556 := (ite #570 #564 #575)
+#554 := (or #681 #556)
+#557 := [quant-inst]: #554
+#403 := [unit-resolution #557 #714]: #556
+#404 := (not #631)
+#405 := (or #570 #404 #427 #409)
+#406 := [th-lemma]: #405
+#407 := [unit-resolution #406 #419 #424 #423]: #570
+#559 := (not #570)
+#558 := (not #556)
+#560 := (or #558 #559 #564)
+#555 := [def-axiom]: #560
+#400 := [unit-resolution #555 #407 #403]: #564
+#396 := [trans #400 #393]: #397
+#398 := [trans #396 #395]: #39
+#40 := (not #39)
+#182 := [asserted]: #40
+[unit-resolution #182 #398]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_08	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,24 @@
+(benchmark Isabelle
+:extrasorts ( T2 T1 T4 T3)
+:extrafuns (
+  (uf_3 Int T1)
+  (uf_7 T2 T4 T4)
+  (uf_1 T2 T1 T1)
+  (uf_6 T3 T4 Int)
+  (uf_4 T1 Int)
+  (uf_5 T2)
+  (uf_2 T2)
+  (uf_10 Int)
+  (uf_8 T3)
+  (uf_9 T4)
+ )
+:assumption (forall (?x1 T1) (= (uf_1 uf_2 ?x1) (uf_3 (div (uf_4 ?x1) 2))))
+:assumption (forall (?x2 T1) (= (uf_1 uf_5 ?x2) (uf_3 (mod (uf_4 ?x2) 2))))
+:assumption (forall (?x3 T1) (= (uf_3 (uf_4 ?x3)) ?x3))
+:assumption (forall (?x4 Int) (implies (<= 0 ?x4) (= (uf_4 (uf_3 ?x4)) ?x4)))
+:assumption (forall (?x5 Int) (implies (< ?x5 0) (= (uf_4 (uf_3 ?x5)) 0)))
+:assumption (forall (?x6 T3) (?x7 T4) (= (mod (uf_6 ?x6 ?x7) 2) (mod (uf_6 ?x6 (uf_7 uf_5 ?x7)) 2)))
+: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)))
+: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)))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_hol_08.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,410 @@
+#2 := false
+#22 := 0::int
+decl uf_6 :: (-> T3 T4 int)
+decl uf_7 :: (-> T2 T4 T4)
+decl uf_9 :: T4
+#50 := uf_9
+decl uf_2 :: T2
+#4 := uf_2
+#59 := (uf_7 uf_2 uf_9)
+decl uf_8 :: T3
+#49 := uf_8
+#60 := (uf_6 uf_8 #59)
+#204 := -2::int
+#683 := (* -2::int #60)
+decl uf_5 :: T2
+#13 := uf_5
+#54 := (uf_7 uf_5 uf_9)
+#55 := (uf_6 uf_8 #54)
+#172 := -1::int
+#218 := (* -1::int #55)
+#685 := (+ #218 #683)
+#51 := (uf_6 uf_8 uf_9)
+#686 := (+ #51 #685)
+#679 := (>= #686 0::int)
+#687 := (= #686 0::int)
+#35 := (:var 0 T4)
+#43 := (uf_7 uf_2 #35)
+#34 := (:var 1 T3)
+#44 := (uf_6 #34 #43)
+#819 := (pattern #44)
+#38 := (uf_7 uf_5 #35)
+#39 := (uf_6 #34 #38)
+#812 := (pattern #39)
+#205 := (* -2::int #44)
+#203 := (* -1::int #39)
+#206 := (+ #203 #205)
+#36 := (uf_6 #34 #35)
+#207 := (+ #36 #206)
+#208 := (= #207 0::int)
+#820 := (forall (vars (?x8 T3) (?x9 T4)) (:pat #812 #819) #208)
+#211 := (forall (vars (?x8 T3) (?x9 T4)) #208)
+#823 := (iff #211 #820)
+#821 := (iff #208 #208)
+#822 := [refl]: #821
+#824 := [quant-intro #822]: #823
+#279 := (~ #211 #211)
+#305 := (~ #208 #208)
+#306 := [refl]: #305
+#280 := [nnf-pos #306]: #279
+#8 := 2::int
+#45 := (* #44 2::int)
+#46 := (+ #45 #39)
+#47 := (= #46 #36)
+#48 := (forall (vars (?x8 T3) (?x9 T4)) #47)
+#214 := (iff #48 #211)
+#171 := (* 2::int #44)
+#187 := (+ #39 #171)
+#195 := (= #36 #187)
+#200 := (forall (vars (?x8 T3) (?x9 T4)) #195)
+#212 := (iff #200 #211)
+#209 := (iff #195 #208)
+#210 := [rewrite]: #209
+#213 := [quant-intro #210]: #212
+#201 := (iff #48 #200)
+#198 := (iff #47 #195)
+#192 := (= #187 #36)
+#196 := (iff #192 #195)
+#197 := [rewrite]: #196
+#193 := (iff #47 #192)
+#190 := (= #46 #187)
+#184 := (+ #171 #39)
+#188 := (= #184 #187)
+#189 := [rewrite]: #188
+#185 := (= #46 #184)
+#182 := (= #45 #171)
+#183 := [rewrite]: #182
+#186 := [monotonicity #183]: #185
+#191 := [trans #186 #189]: #190
+#194 := [monotonicity #191]: #193
+#199 := [trans #194 #197]: #198
+#202 := [quant-intro #199]: #201
+#215 := [trans #202 #213]: #214
+#170 := [asserted]: #48
+#216 := [mp #170 #215]: #211
+#307 := [mp~ #216 #280]: #211
+#825 := [mp #307 #824]: #820
+#689 := (not #820)
+#675 := (or #689 #687)
+#676 := [quant-inst]: #675
+#536 := [unit-resolution #676 #825]: #687
+#537 := (not #687)
+#533 := (or #537 #679)
+#538 := [th-lemma]: #533
+#528 := [unit-resolution #538 #536]: #679
+decl uf_10 :: int
+#52 := uf_10
+#219 := (+ uf_10 #218)
+#222 := (div #219 2::int)
+#251 := (* -1::int #222)
+#252 := (+ #60 #251)
+#449 := (<= #252 0::int)
+#399 := (not #449)
+#253 := (= #252 0::int)
+#256 := (not #253)
+#57 := (mod uf_10 2::int)
+#243 := (* -1::int #57)
+#56 := (mod #55 2::int)
+#244 := (+ #56 #243)
+#245 := (= #244 0::int)
+#448 := (>= #244 0::int)
+#688 := (mod #51 2::int)
+#666 := (* -1::int #688)
+#667 := (+ #56 #666)
+#660 := (>= #667 0::int)
+#668 := (= #667 0::int)
+#40 := (mod #39 2::int)
+#173 := (* -1::int #40)
+#37 := (mod #36 2::int)
+#174 := (+ #37 #173)
+#175 := (= #174 0::int)
+#813 := (forall (vars (?x6 T3) (?x7 T4)) (:pat #812) #175)
+#178 := (forall (vars (?x6 T3) (?x7 T4)) #175)
+#816 := (iff #178 #813)
+#814 := (iff #175 #175)
+#815 := [refl]: #814
+#817 := [quant-intro #815]: #816
+#277 := (~ #178 #178)
+#302 := (~ #175 #175)
+#303 := [refl]: #302
+#278 := [nnf-pos #303]: #277
+#41 := (= #37 #40)
+#42 := (forall (vars (?x6 T3) (?x7 T4)) #41)
+#179 := (iff #42 #178)
+#176 := (iff #41 #175)
+#177 := [rewrite]: #176
+#180 := [quant-intro #177]: #179
+#169 := [asserted]: #42
+#181 := [mp #169 #180]: #178
+#304 := [mp~ #181 #278]: #178
+#818 := [mp #304 #817]: #813
+#673 := (not #813)
+#663 := (or #673 #668)
+#756 := (* -1::int #56)
+#684 := (+ #688 #756)
+#680 := (= #684 0::int)
+#674 := (or #673 #680)
+#653 := (iff #674 #663)
+#656 := (iff #663 #663)
+#657 := [rewrite]: #656
+#671 := (iff #680 #668)
+#677 := (+ #756 #688)
+#662 := (= #677 0::int)
+#669 := (iff #662 #668)
+#670 := [rewrite]: #669
+#664 := (iff #680 #662)
+#681 := (= #684 #677)
+#661 := [rewrite]: #681
+#665 := [monotonicity #661]: #664
+#672 := [trans #665 #670]: #671
+#655 := [monotonicity #672]: #653
+#658 := [trans #655 #657]: #653
+#652 := [quant-inst]: #674
+#659 := [mp #652 #658]: #663
+#394 := [unit-resolution #659 #818]: #668
+#552 := (not #668)
+#514 := (or #552 #660)
+#517 := [th-lemma]: #514
+#499 := [unit-resolution #517 #394]: #660
+#503 := (not #448)
+#414 := [hypothesis]: #503
+#561 := (+ #57 #666)
+#709 := (<= #561 0::int)
+#602 := (= #57 #688)
+#468 := (= #688 #57)
+#53 := (= #51 uf_10)
+#248 := (not #245)
+#259 := (or #248 #256)
+#362 := (mod #219 2::int)
+#699 := (>= #362 0::int)
+#1 := true
+#81 := [true-axiom]: true
+#604 := (or false #699)
+#506 := [th-lemma]: #604
+#507 := [unit-resolution #506 #81]: #699
+#628 := (* -1::int uf_10)
+#623 := (+ #51 #628)
+#629 := (<= #623 0::int)
+#498 := (not #629)
+#597 := (>= #623 0::int)
+#381 := (not #259)
+#508 := [hypothesis]: #381
+#450 := (or #259 #245)
+#441 := [def-axiom]: #450
+#509 := [unit-resolution #441 #508]: #245
+#510 := (or #248 #448)
+#511 := [th-lemma]: #510
+#500 := [unit-resolution #511 #509]: #448
+#743 := (div uf_10 2::int)
+#723 := (* -2::int #743)
+#545 := (* -2::int #688)
+#546 := (+ #545 #723)
+#646 := (div #51 2::int)
+#645 := (* -2::int #646)
+#547 := (+ #645 #546)
+#605 := (* -2::int #57)
+#549 := (+ #605 #547)
+#594 := (* 2::int #56)
+#550 := (+ #594 #549)
+#598 := (* 2::int uf_10)
+#551 := (+ #598 #550)
+#563 := (>= #551 2::int)
+#520 := (not #563)
+#361 := (<= #244 0::int)
+#512 := (or #248 #361)
+#489 := [th-lemma]: #512
+#491 := [unit-resolution #489 #509]: #361
+#363 := (>= #252 0::int)
+#452 := (or #259 #253)
+#453 := [def-axiom]: #452
+#492 := [unit-resolution #453 #508]: #253
+#493 := (or #256 #363)
+#494 := [th-lemma]: #493
+#495 := [unit-resolution #494 #492]: #363
+#556 := (not #361)
+#573 := (not #363)
+#521 := (or #520 #573 #556)
+#703 := (>= #362 2::int)
+#704 := (not #703)
+#599 := (or false #704)
+#620 := [th-lemma]: #599
+#575 := [unit-resolution #620 #81]: #704
+#654 := (<= #667 0::int)
+#548 := (or #552 #654)
+#553 := [th-lemma]: #548
+#532 := [unit-resolution #553 #394]: #654
+#651 := (+ #645 #666)
+#624 := (+ #51 #651)
+#626 := (<= #624 0::int)
+#650 := (= #624 0::int)
+#535 := (or false #650)
+#539 := [th-lemma]: #535
+#541 := [unit-resolution #539 #81]: #650
+#542 := (not #650)
+#540 := (or #542 #626)
+#543 := [th-lemma]: #540
+#531 := [unit-resolution #543 #541]: #626
+#587 := [hypothesis]: #361
+#724 := (+ #243 #723)
+#725 := (+ uf_10 #724)
+#727 := (<= #725 0::int)
+#722 := (= #725 0::int)
+#576 := (or false #722)
+#581 := [th-lemma]: #576
+#582 := [unit-resolution #581 #81]: #722
+#583 := (not #722)
+#584 := (or #583 #727)
+#585 := [th-lemma]: #584
+#586 := [unit-resolution #585 #582]: #727
+#534 := [hypothesis]: #563
+#555 := [hypothesis]: #363
+#616 := (* -1::int #362)
+#615 := (* -2::int #222)
+#617 := (+ #615 #616)
+#618 := (+ #218 #617)
+#711 := (+ uf_10 #618)
+#708 := (<= #711 0::int)
+#606 := (= #711 0::int)
+#562 := (or false #606)
+#564 := [th-lemma]: #562
+#565 := [unit-resolution #564 #81]: #606
+#566 := (not #606)
+#568 := (or #566 #708)
+#569 := [th-lemma]: #568
+#570 := [unit-resolution #569 #565]: #708
+#518 := [th-lemma #570 #555 #528 #534 #586 #587 #531 #532 #575]: false
+#524 := [lemma #518]: #521
+#496 := [unit-resolution #524 #495 #491]: #520
+#504 := (or #597 #563 #503)
+#529 := (not #597)
+#522 := [hypothesis]: #529
+#519 := (>= #624 0::int)
+#530 := (or #542 #519)
+#523 := [th-lemma]: #530
+#526 := [unit-resolution #523 #541]: #519
+#527 := [hypothesis]: #448
+#721 := (>= #725 0::int)
+#513 := (or #583 #721)
+#515 := [th-lemma]: #513
+#516 := [unit-resolution #515 #582]: #721
+#501 := [th-lemma #499 #516 #527 #526 #522]: #563
+#525 := [hypothesis]: #520
+#502 := [unit-resolution #525 #501]: false
+#505 := [lemma #502]: #504
+#497 := [unit-resolution #505 #496 #500]: #597
+#485 := (or #498 #529)
+#558 := (not #53)
+#440 := (or #558 #259)
+#262 := (iff #53 #259)
+#61 := (- uf_10 #55)
+#62 := (div #61 2::int)
+#63 := (= #60 #62)
+#64 := (not #63)
+#58 := (= #56 #57)
+#65 := (implies #58 #64)
+#66 := (iff #53 #65)
+#265 := (iff #66 #262)
+#225 := (= #60 #222)
+#228 := (not #225)
+#234 := (not #58)
+#235 := (or #234 #228)
+#240 := (iff #53 #235)
+#263 := (iff #240 #262)
+#260 := (iff #235 #259)
+#257 := (iff #228 #256)
+#254 := (iff #225 #253)
+#255 := [rewrite]: #254
+#258 := [monotonicity #255]: #257
+#249 := (iff #234 #248)
+#246 := (iff #58 #245)
+#247 := [rewrite]: #246
+#250 := [monotonicity #247]: #249
+#261 := [monotonicity #250 #258]: #260
+#264 := [monotonicity #261]: #263
+#241 := (iff #66 #240)
+#238 := (iff #65 #235)
+#231 := (implies #58 #228)
+#236 := (iff #231 #235)
+#237 := [rewrite]: #236
+#232 := (iff #65 #231)
+#229 := (iff #64 #228)
+#226 := (iff #63 #225)
+#223 := (= #62 #222)
+#220 := (= #61 #219)
+#221 := [rewrite]: #220
+#224 := [monotonicity #221]: #223
+#227 := [monotonicity #224]: #226
+#230 := [monotonicity #227]: #229
+#233 := [monotonicity #230]: #232
+#239 := [trans #233 #237]: #238
+#242 := [monotonicity #239]: #241
+#266 := [trans #242 #264]: #265
+#217 := [asserted]: #66
+#267 := [mp #217 #266]: #262
+#455 := (not #262)
+#765 := (or #558 #259 #455)
+#439 := [def-axiom]: #765
+#772 := [unit-resolution #439 #267]: #440
+#490 := [unit-resolution #772 #508]: #558
+#483 := (or #53 #498 #529)
+#484 := [th-lemma]: #483
+#487 := [unit-resolution #484 #490]: #485
+#486 := [unit-resolution #487 #497]: #498
+#678 := (<= #686 0::int)
+#488 := (or #537 #678)
+#477 := [th-lemma]: #488
+#478 := [unit-resolution #477 #536]: #678
+#479 := (or #256 #449)
+#471 := [th-lemma]: #479
+#480 := [unit-resolution #471 #492]: #449
+#712 := (>= #711 0::int)
+#481 := (or #566 #712)
+#472 := [th-lemma]: #481
+#482 := [unit-resolution #472 #565]: #712
+#463 := [th-lemma #482 #480 #478 #486 #507]: false
+#464 := [lemma #463]: #259
+#771 := (or #53 #381)
+#434 := (or #53 #381 #455)
+#769 := [def-axiom]: #434
+#428 := [unit-resolution #769 #267]: #771
+#442 := [unit-resolution #428 #464]: #53
+#435 := [monotonicity #442]: #468
+#437 := [symm #435]: #602
+#438 := (not #602)
+#419 := (or #438 #709)
+#420 := [th-lemma]: #419
+#421 := [unit-resolution #420 #437]: #709
+#422 := [th-lemma #421 #414 #499]: false
+#423 := [lemma #422]: #448
+#410 := (or #245 #503)
+#611 := (>= #561 0::int)
+#682 := (or #438 #611)
+#447 := [th-lemma]: #682
+#430 := [unit-resolution #447 #437]: #611
+#432 := [hypothesis]: #556
+#433 := [th-lemma #532 #432 #430]: false
+#412 := [lemma #433]: #361
+#409 := (or #245 #556 #503)
+#407 := [th-lemma]: #409
+#398 := [unit-resolution #407 #412]: #410
+#400 := [unit-resolution #398 #423]: #245
+#454 := (or #381 #248 #256)
+#451 := [def-axiom]: #454
+#401 := [unit-resolution #451 #464]: #259
+#404 := [unit-resolution #401 #400]: #256
+#384 := (or #253 #399)
+#429 := [hypothesis]: #573
+#443 := (or #558 #597)
+#444 := [th-lemma]: #443
+#445 := [unit-resolution #444 #442]: #597
+#446 := [th-lemma #445 #507 #482 #429 #478]: false
+#436 := [lemma #446]: #363
+#405 := (or #253 #399 #573)
+#379 := [th-lemma]: #405
+#385 := [unit-resolution #379 #436]: #384
+#390 := [unit-resolution #385 #404]: #399
+#392 := (or #558 #629)
+#393 := [th-lemma]: #392
+#395 := [unit-resolution #393 #442]: #629
+[th-lemma #395 #575 #570 #390 #528]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_01	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= 3 3))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_01.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,17 @@
+#2 := false
+#4 := 3::int
+#5 := (= 3::int 3::int)
+#6 := (not #5)
+#30 := (iff #6 false)
+#1 := true
+#25 := (not true)
+#28 := (iff #25 false)
+#29 := [rewrite]: #28
+#26 := (iff #6 #25)
+#23 := (iff #5 true)
+#24 := [rewrite]: #23
+#27 := [monotonicity #24]: #26
+#31 := [trans #27 #29]: #30
+#22 := [asserted]: #6
+[mp #22 #31]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_02	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= 3.0 3.0))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_02.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,17 @@
+#2 := false
+#4 := 3::real
+#5 := (= 3::real 3::real)
+#6 := (not #5)
+#30 := (iff #6 false)
+#1 := true
+#25 := (not true)
+#28 := (iff #25 false)
+#29 := [rewrite]: #28
+#26 := (iff #6 #25)
+#23 := (iff #5 true)
+#24 := [rewrite]: #23
+#27 := [monotonicity #24]: #26
+#31 := [trans #27 #29]: #30
+#22 := [asserted]: #6
+[mp #22 #31]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_03	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (= (+ 3 1) 4))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_03.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,26 @@
+#2 := false
+#7 := 4::int
+#5 := 1::int
+#4 := 3::int
+#6 := (+ 3::int 1::int)
+#8 := (= #6 4::int)
+#9 := (not #8)
+#39 := (iff #9 false)
+#1 := true
+#34 := (not true)
+#37 := (iff #34 false)
+#38 := [rewrite]: #37
+#35 := (iff #9 #34)
+#32 := (iff #8 true)
+#27 := (= 4::int 4::int)
+#30 := (iff #27 true)
+#31 := [rewrite]: #30
+#28 := (iff #8 #27)
+#26 := [rewrite]: #8
+#29 := [monotonicity #26]: #28
+#33 := [trans #29 #31]: #32
+#36 := [monotonicity #33]: #35
+#40 := [trans #36 #38]: #39
+#25 := [asserted]: #9
+[mp #25 #40]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_04	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,9 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 Int)
+  (uf_2 Int)
+  (uf_3 Int)
+ )
+:assumption (not (= (+ uf_1 (+ uf_2 uf_3)) (+ uf_2 (+ uf_3 uf_1))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_04.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,41 @@
+#2 := false
+decl uf_1 :: int
+#4 := uf_1
+decl uf_3 :: int
+#6 := uf_3
+#9 := (+ uf_3 uf_1)
+decl uf_2 :: int
+#5 := uf_2
+#10 := (+ uf_2 #9)
+#7 := (+ uf_2 uf_3)
+#8 := (+ uf_1 #7)
+#11 := (= #8 #10)
+#12 := (not #11)
+#51 := (iff #12 false)
+#1 := true
+#46 := (not true)
+#49 := (iff #46 false)
+#50 := [rewrite]: #49
+#47 := (iff #12 #46)
+#44 := (iff #11 true)
+#39 := (= #8 #8)
+#42 := (iff #39 true)
+#43 := [rewrite]: #42
+#40 := (iff #11 #39)
+#37 := (= #10 #8)
+#29 := (+ uf_1 uf_3)
+#32 := (+ uf_2 #29)
+#35 := (= #32 #8)
+#36 := [rewrite]: #35
+#33 := (= #10 #32)
+#30 := (= #9 #29)
+#31 := [rewrite]: #30
+#34 := [monotonicity #31]: #33
+#38 := [trans #34 #36]: #37
+#41 := [monotonicity #38]: #40
+#45 := [trans #41 #43]: #44
+#48 := [monotonicity #45]: #47
+#52 := [trans #48 #50]: #51
+#28 := [asserted]: #12
+[mp #28 #52]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_05	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (< 5 (ite (<= 3 8) 8 3)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_05.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,35 @@
+#2 := false
+#5 := 3::int
+#6 := 8::int
+#7 := (<= 3::int 8::int)
+#8 := (ite #7 8::int 3::int)
+#4 := 5::int
+#9 := (< 5::int #8)
+#10 := (not #9)
+#50 := (iff #10 false)
+#1 := true
+#45 := (not true)
+#48 := (iff #45 false)
+#49 := [rewrite]: #48
+#46 := (iff #10 #45)
+#43 := (iff #9 true)
+#38 := (< 5::int 8::int)
+#41 := (iff #38 true)
+#42 := [rewrite]: #41
+#39 := (iff #9 #38)
+#36 := (= #8 8::int)
+#31 := (ite true 8::int 3::int)
+#34 := (= #31 8::int)
+#35 := [rewrite]: #34
+#32 := (= #8 #31)
+#29 := (iff #7 true)
+#30 := [rewrite]: #29
+#33 := [monotonicity #30]: #32
+#37 := [trans #33 #35]: #36
+#40 := [monotonicity #37]: #39
+#44 := [trans #40 #42]: #43
+#47 := [monotonicity #44]: #46
+#51 := [trans #47 #49]: #50
+#26 := [asserted]: #10
+[mp #26 #51]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_06	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 Real)
+  (uf_2 Real)
+ )
+: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))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_06.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,250 @@
+#2 := false
+#7 := 0::real
+decl uf_2 :: real
+#5 := uf_2
+#143 := 2::real
+#144 := (* 2::real uf_2)
+#165 := (<= #144 0::real)
+#188 := (not #165)
+#88 := (>= uf_2 0::real)
+#166 := (or #88 #165)
+#191 := (not #166)
+decl uf_1 :: real
+#4 := uf_1
+#76 := (>= uf_1 0::real)
+#89 := (not #88)
+#146 := (* 2::real uf_1)
+#167 := (<= #146 0::real)
+#199 := (not #167)
+#263 := [hypothesis]: #88
+#147 := (+ #146 #144)
+#168 := (<= #147 0::real)
+#169 := (ite #88 #167 #168)
+#194 := (not #169)
+#186 := (or #166 #89)
+#187 := [def-axiom]: #186
+#271 := [unit-resolution #187 #263]: #166
+#170 := (ite #76 #166 #169)
+#205 := (not #170)
+#6 := (+ uf_1 uf_2)
+#64 := (>= #6 0::real)
+#269 := (or #64 #89)
+#65 := (not #64)
+#262 := [hypothesis]: #65
+#174 := (>= #144 0::real)
+#175 := (or #89 #174)
+#230 := (not #175)
+#257 := [hypothesis]: #230
+#225 := (or #175 #88)
+#226 := [def-axiom]: #225
+#258 := [unit-resolution #226 #257]: #88
+#227 := (not #174)
+#228 := (or #175 #227)
+#229 := [def-axiom]: #228
+#259 := [unit-resolution #229 #257]: #227
+#260 := [th-lemma #259 #258]: false
+#261 := [lemma #260]: #175
+#172 := (>= #146 0::real)
+#171 := (>= #147 0::real)
+#173 := (ite #88 #171 #172)
+#176 := (ite #76 #173 #175)
+#233 := (not #176)
+#264 := (or #64 #233)
+#177 := (ite #64 #170 #176)
+#182 := (not #177)
+#36 := -1::real
+#38 := (* -1::real uf_2)
+#95 := (ite #88 uf_2 #38)
+#107 := (* -1::real #95)
+#37 := (* -1::real uf_1)
+#83 := (ite #76 uf_1 #37)
+#106 := (* -1::real #83)
+#108 := (+ #106 #107)
+#39 := (+ #37 #38)
+#71 := (ite #64 #6 #39)
+#109 := (+ #71 #108)
+#110 := (<= #109 0::real)
+#115 := (not #110)
+#183 := (iff #115 #182)
+#180 := (iff #110 #177)
+#150 := -2::real
+#152 := (* -2::real uf_2)
+#155 := (ite #88 #152 0::real)
+#151 := (* -2::real uf_1)
+#153 := (+ #151 #152)
+#154 := (ite #88 #153 #151)
+#156 := (ite #76 #154 #155)
+#148 := (ite #88 #146 #147)
+#145 := (ite #88 0::real #144)
+#149 := (ite #76 #145 #148)
+#157 := (ite #64 #149 #156)
+#162 := (<= #157 0::real)
+#178 := (iff #162 #177)
+#179 := [rewrite]: #178
+#163 := (iff #110 #162)
+#160 := (= #109 #157)
+#133 := (+ uf_1 #38)
+#134 := (ite #88 #133 #6)
+#131 := (+ #37 uf_2)
+#132 := (ite #88 #39 #131)
+#135 := (ite #76 #132 #134)
+#140 := (+ #71 #135)
+#158 := (= #140 #157)
+#159 := [rewrite]: #158
+#141 := (= #109 #140)
+#138 := (= #108 #135)
+#125 := (ite #88 #38 uf_2)
+#123 := (ite #76 #37 uf_1)
+#128 := (+ #123 #125)
+#136 := (= #128 #135)
+#137 := [rewrite]: #136
+#129 := (= #108 #128)
+#126 := (= #107 #125)
+#127 := [rewrite]: #126
+#121 := (= #106 #123)
+#124 := [rewrite]: #121
+#130 := [monotonicity #124 #127]: #129
+#139 := [trans #130 #137]: #138
+#142 := [monotonicity #139]: #141
+#161 := [trans #142 #159]: #160
+#164 := [monotonicity #161]: #163
+#181 := [trans #164 #179]: #180
+#184 := [monotonicity #181]: #183
+#15 := (- uf_2)
+#14 := (< uf_2 0::real)
+#16 := (ite #14 #15 uf_2)
+#12 := (- uf_1)
+#11 := (< uf_1 0::real)
+#13 := (ite #11 #12 uf_1)
+#17 := (+ #13 #16)
+#9 := (- #6)
+#8 := (< #6 0::real)
+#10 := (ite #8 #9 #6)
+#18 := (<= #10 #17)
+#19 := (not #18)
+#118 := (iff #19 #115)
+#52 := (ite #14 #38 uf_2)
+#47 := (ite #11 #37 uf_1)
+#55 := (+ #47 #52)
+#42 := (ite #8 #39 #6)
+#58 := (<= #42 #55)
+#61 := (not #58)
+#116 := (iff #61 #115)
+#113 := (iff #58 #110)
+#100 := (+ #83 #95)
+#103 := (<= #71 #100)
+#111 := (iff #103 #110)
+#112 := [rewrite]: #111
+#104 := (iff #58 #103)
+#101 := (= #55 #100)
+#98 := (= #52 #95)
+#92 := (ite #89 #38 uf_2)
+#96 := (= #92 #95)
+#97 := [rewrite]: #96
+#93 := (= #52 #92)
+#90 := (iff #14 #89)
+#91 := [rewrite]: #90
+#94 := [monotonicity #91]: #93
+#99 := [trans #94 #97]: #98
+#86 := (= #47 #83)
+#77 := (not #76)
+#80 := (ite #77 #37 uf_1)
+#84 := (= #80 #83)
+#85 := [rewrite]: #84
+#81 := (= #47 #80)
+#78 := (iff #11 #77)
+#79 := [rewrite]: #78
+#82 := [monotonicity #79]: #81
+#87 := [trans #82 #85]: #86
+#102 := [monotonicity #87 #99]: #101
+#74 := (= #42 #71)
+#68 := (ite #65 #39 #6)
+#72 := (= #68 #71)
+#73 := [rewrite]: #72
+#69 := (= #42 #68)
+#66 := (iff #8 #65)
+#67 := [rewrite]: #66
+#70 := [monotonicity #67]: #69
+#75 := [trans #70 #73]: #74
+#105 := [monotonicity #75 #102]: #104
+#114 := [trans #105 #112]: #113
+#117 := [monotonicity #114]: #116
+#62 := (iff #19 #61)
+#59 := (iff #18 #58)
+#56 := (= #17 #55)
+#53 := (= #16 #52)
+#50 := (= #15 #38)
+#51 := [rewrite]: #50
+#54 := [monotonicity #51]: #53
+#48 := (= #13 #47)
+#45 := (= #12 #37)
+#46 := [rewrite]: #45
+#49 := [monotonicity #46]: #48
+#57 := [monotonicity #49 #54]: #56
+#43 := (= #10 #42)
+#40 := (= #9 #39)
+#41 := [rewrite]: #40
+#44 := [monotonicity #41]: #43
+#60 := [monotonicity #44 #57]: #59
+#63 := [monotonicity #60]: #62
+#119 := [trans #63 #117]: #118
+#35 := [asserted]: #19
+#120 := [mp #35 #119]: #115
+#185 := [mp #120 #184]: #182
+#248 := (or #177 #64 #233)
+#249 := [def-axiom]: #248
+#265 := [unit-resolution #249 #185]: #264
+#266 := [unit-resolution #265 #262]: #233
+#240 := (or #176 #76 #230)
+#241 := [def-axiom]: #240
+#267 := [unit-resolution #241 #266 #261]: #76
+#268 := [th-lemma #267 #263 #262]: false
+#270 := [lemma #268]: #269
+#272 := [unit-resolution #270 #263]: #64
+#273 := (or #65 #205)
+#246 := (or #177 #65 #205)
+#247 := [def-axiom]: #246
+#274 := [unit-resolution #247 #185]: #273
+#275 := [unit-resolution #274 #272]: #205
+#255 := (or #170 #194 #191)
+#250 := [hypothesis]: #169
+#251 := [hypothesis]: #205
+#252 := [hypothesis]: #166
+#210 := (or #170 #77 #191)
+#211 := [def-axiom]: #210
+#253 := [unit-resolution #211 #251 #252]: #77
+#212 := (or #170 #76 #194)
+#213 := [def-axiom]: #212
+#254 := [unit-resolution #213 #253 #251 #250]: false
+#256 := [lemma #254]: #255
+#276 := [unit-resolution #256 #275 #271]: #194
+#200 := (or #169 #89 #199)
+#201 := [def-axiom]: #200
+#277 := [unit-resolution #201 #276 #263]: #199
+#278 := [unit-resolution #211 #275 #271]: #77
+#279 := [th-lemma #278 #277]: false
+#280 := [lemma #279]: #89
+#281 := [hypothesis]: #77
+#282 := [unit-resolution #241 #281 #261]: #176
+#283 := [unit-resolution #265 #282]: #64
+#284 := [th-lemma #281 #283 #280]: false
+#285 := [lemma #284]: #76
+#222 := (not #172)
+#286 := [hypothesis]: #222
+#287 := [th-lemma #285 #286]: false
+#288 := [lemma #287]: #172
+#223 := (or #173 #88 #222)
+#224 := [def-axiom]: #223
+#289 := [unit-resolution #224 #288 #280]: #173
+#214 := (not #173)
+#238 := (or #176 #77 #214)
+#239 := [def-axiom]: #238
+#290 := [unit-resolution #239 #289 #285]: #176
+#291 := [unit-resolution #265 #290]: #64
+#292 := [unit-resolution #274 #291]: #205
+#293 := [unit-resolution #211 #292 #285]: #191
+#189 := (or #166 #188)
+#190 := [def-axiom]: #189
+#294 := [unit-resolution #190 #293]: #188
+[th-lemma #280 #294]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_07	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,11 @@
+(benchmark Isabelle
+:extrasorts ( T2 T1)
+:extrafuns (
+  (uf_2 T1)
+  (uf_1 Int Int T1)
+  (uf_3 T1 T2)
+ )
+:assumption (forall (?x1 Int) (?x2 Int) (iff (= (uf_1 ?x1 ?x2) uf_2) (< ?x1 ?x2)))
+:assumption (not (= (uf_3 (uf_1 2 3)) (uf_3 uf_2)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_07.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,105 @@
+#2 := false
+decl uf_3 :: (-> T1 T2)
+decl uf_2 :: T1
+#7 := uf_2
+#16 := (uf_3 uf_2)
+decl uf_1 :: (-> int int T1)
+#13 := 3::int
+#12 := 2::int
+#14 := (uf_1 2::int 3::int)
+#15 := (uf_3 #14)
+#17 := (= #15 #16)
+#516 := (= #16 #15)
+#194 := (= uf_2 #14)
+#5 := (:var 0 int)
+#4 := (:var 1 int)
+#6 := (uf_1 #4 #5)
+#530 := (pattern #6)
+#39 := 0::int
+#37 := -1::int
+#41 := (* -1::int #5)
+#42 := (+ #4 #41)
+#40 := (>= #42 0::int)
+#38 := (not #40)
+#8 := (= #6 uf_2)
+#45 := (iff #8 #38)
+#531 := (forall (vars (?x1 int) (?x2 int)) (:pat #530) #45)
+#48 := (forall (vars (?x1 int) (?x2 int)) #45)
+#534 := (iff #48 #531)
+#532 := (iff #45 #45)
+#533 := [refl]: #532
+#535 := [quant-intro #533]: #534
+#58 := (~ #48 #48)
+#56 := (~ #45 #45)
+#57 := [refl]: #56
+#59 := [nnf-pos #57]: #58
+#9 := (< #4 #5)
+#10 := (iff #8 #9)
+#11 := (forall (vars (?x1 int) (?x2 int)) #10)
+#49 := (iff #11 #48)
+#46 := (iff #10 #45)
+#43 := (iff #9 #38)
+#44 := [rewrite]: #43
+#47 := [monotonicity #44]: #46
+#50 := [quant-intro #47]: #49
+#34 := [asserted]: #11
+#51 := [mp #34 #50]: #48
+#60 := [mp~ #51 #59]: #48
+#536 := [mp #60 #535]: #531
+#508 := (not #531)
+#509 := (or #508 #194)
+#201 := (* -1::int 3::int)
+#115 := (+ 2::int #201)
+#202 := (>= #115 0::int)
+#116 := (not #202)
+#114 := (= #14 uf_2)
+#203 := (iff #114 #116)
+#510 := (or #508 #203)
+#506 := (iff #510 #509)
+#150 := (iff #509 #509)
+#513 := [rewrite]: #150
+#171 := (iff #203 #194)
+#1 := true
+#164 := (iff #194 true)
+#169 := (iff #164 #194)
+#170 := [rewrite]: #169
+#505 := (iff #203 #164)
+#180 := (iff #116 true)
+#529 := (not false)
+#184 := (iff #529 true)
+#520 := [rewrite]: #184
+#519 := (iff #116 #529)
+#528 := (iff #202 false)
+#192 := (>= -1::int 0::int)
+#526 := (iff #192 false)
+#527 := [rewrite]: #526
+#193 := (iff #202 #192)
+#311 := (= #115 -1::int)
+#134 := -3::int
+#208 := (+ 2::int -3::int)
+#524 := (= #208 -1::int)
+#181 := [rewrite]: #524
+#187 := (= #115 #208)
+#207 := (= #201 -3::int)
+#204 := [rewrite]: #207
+#522 := [monotonicity #204]: #187
+#518 := [trans #522 #181]: #311
+#525 := [monotonicity #518]: #193
+#523 := [trans #525 #527]: #528
+#179 := [monotonicity #523]: #519
+#521 := [trans #179 #520]: #180
+#205 := (iff #114 #194)
+#206 := [rewrite]: #205
+#168 := [monotonicity #206 #521]: #505
+#507 := [trans #168 #170]: #171
+#512 := [monotonicity #507]: #506
+#515 := [trans #512 #513]: #506
+#511 := [quant-inst]: #510
+#155 := [mp #511 #515]: #509
+#156 := [unit-resolution #155 #536]: #194
+#514 := [monotonicity #156]: #516
+#517 := [symm #514]: #17
+#18 := (not #17)
+#35 := [asserted]: #18
+[unit-resolution #35 #517]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_08	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,7 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 Int)
+ )
+:assumption (not (or (<= 4 (+ uf_1 3)) (< uf_1 1)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_08.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,54 @@
+#2 := false
+#9 := 1::int
+decl uf_1 :: int
+#5 := uf_1
+#10 := (< uf_1 1::int)
+#6 := 3::int
+#7 := (+ uf_1 3::int)
+#4 := 4::int
+#8 := (<= 4::int #7)
+#11 := (or #8 #10)
+#12 := (not #11)
+#66 := (iff #12 false)
+#29 := (+ 3::int uf_1)
+#32 := (<= 4::int #29)
+#38 := (or #10 #32)
+#43 := (not #38)
+#64 := (iff #43 false)
+#1 := true
+#59 := (not true)
+#62 := (iff #59 false)
+#63 := [rewrite]: #62
+#60 := (iff #43 #59)
+#57 := (iff #38 true)
+#48 := (>= uf_1 1::int)
+#46 := (not #48)
+#52 := (or #46 #48)
+#55 := (iff #52 true)
+#56 := [rewrite]: #55
+#53 := (iff #38 #52)
+#50 := (iff #32 #48)
+#51 := [rewrite]: #50
+#47 := (iff #10 #46)
+#49 := [rewrite]: #47
+#54 := [monotonicity #49 #51]: #53
+#58 := [trans #54 #56]: #57
+#61 := [monotonicity #58]: #60
+#65 := [trans #61 #63]: #64
+#44 := (iff #12 #43)
+#41 := (iff #11 #38)
+#35 := (or #32 #10)
+#39 := (iff #35 #38)
+#40 := [rewrite]: #39
+#36 := (iff #11 #35)
+#33 := (iff #8 #32)
+#30 := (= #7 #29)
+#31 := [rewrite]: #30
+#34 := [monotonicity #31]: #33
+#37 := [monotonicity #34]: #36
+#42 := [trans #37 #40]: #41
+#45 := [monotonicity #42]: #44
+#67 := [trans #45 #65]: #66
+#28 := [asserted]: #12
+[mp #28 #67]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_09	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,10 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 Int)
+  (uf_2 Int)
+ )
+:assumption (<= 3 uf_1)
+:assumption (= uf_2 (+ uf_1 4))
+:assumption (not (< 0 (- uf_2 uf_1)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_09.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,63 @@
+#2 := false
+#11 := 0::int
+decl uf_2 :: int
+#7 := uf_2
+#42 := -1::int
+#45 := (* -1::int uf_2)
+decl uf_1 :: int
+#5 := uf_1
+#46 := (+ uf_1 #45)
+#63 := (>= #46 0::int)
+#83 := (iff #63 false)
+#44 := -4::int
+#79 := (>= -4::int 0::int)
+#81 := (iff #79 false)
+#82 := [rewrite]: #81
+#77 := (iff #63 #79)
+#47 := (= #46 -4::int)
+#8 := 4::int
+#9 := (+ uf_1 4::int)
+#10 := (= uf_2 #9)
+#49 := (iff #10 #47)
+#32 := (+ 4::int uf_1)
+#39 := (= uf_2 #32)
+#43 := (iff #39 #47)
+#48 := [rewrite]: #43
+#40 := (iff #10 #39)
+#37 := (= #9 #32)
+#38 := [rewrite]: #37
+#41 := [monotonicity #38]: #40
+#50 := [trans #41 #48]: #49
+#31 := [asserted]: #10
+#51 := [mp #31 #50]: #47
+#80 := [monotonicity #51]: #77
+#84 := [trans #80 #82]: #83
+#12 := (- uf_2 uf_1)
+#13 := (< 0::int #12)
+#14 := (not #13)
+#74 := (iff #14 #63)
+#53 := (* -1::int uf_1)
+#54 := (+ #53 uf_2)
+#57 := (< 0::int #54)
+#60 := (not #57)
+#72 := (iff #60 #63)
+#64 := (not #63)
+#67 := (not #64)
+#70 := (iff #67 #63)
+#71 := [rewrite]: #70
+#68 := (iff #60 #67)
+#65 := (iff #57 #64)
+#66 := [rewrite]: #65
+#69 := [monotonicity #66]: #68
+#73 := [trans #69 #71]: #72
+#61 := (iff #14 #60)
+#58 := (iff #13 #57)
+#55 := (= #12 #54)
+#56 := [rewrite]: #55
+#59 := [monotonicity #56]: #58
+#62 := [monotonicity #59]: #61
+#75 := [trans #62 #73]: #74
+#52 := [asserted]: #14
+#76 := [mp #52 #75]: #63
+[mp #76 #84]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_10	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,4 @@
+(benchmark Isabelle
+:assumption (not (let (?x1 2) (not (= (+ ?x1 ?x1) 5))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_10.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,35 @@
+#2 := false
+#6 := 5::int
+#4 := 2::int
+#5 := (+ 2::int 2::int)
+#7 := (= #5 5::int)
+#8 := (not #7)
+#9 := (not #8)
+#48 := (iff #9 false)
+#1 := true
+#43 := (not true)
+#46 := (iff #43 false)
+#47 := [rewrite]: #46
+#44 := (iff #9 #43)
+#41 := (iff #8 true)
+#36 := (not false)
+#39 := (iff #36 true)
+#40 := [rewrite]: #39
+#37 := (iff #8 #36)
+#34 := (iff #7 false)
+#26 := 4::int
+#29 := (= 4::int 5::int)
+#32 := (iff #29 false)
+#33 := [rewrite]: #32
+#30 := (iff #7 #29)
+#27 := (= #5 4::int)
+#28 := [rewrite]: #27
+#31 := [monotonicity #28]: #30
+#35 := [trans #31 #33]: #34
+#38 := [monotonicity #35]: #37
+#42 := [trans #38 #40]: #41
+#45 := [monotonicity #42]: #44
+#49 := [trans #45 #47]: #48
+#25 := [asserted]: #9
+[mp #25 #49]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_11	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,10 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_2 Real)
+  (uf_1 Real)
+ )
+:assumption (< (+ (* 3.0 uf_1) (* 7.0 uf_2)) 4.0)
+:assumption (< 3.0 (* 2.0 uf_1))
+:assumption (not (< uf_2 0.0))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_11.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,45 @@
+#2 := false
+#11 := 4::real
+decl uf_2 :: real
+#8 := uf_2
+#7 := 7::real
+#9 := (* 7::real uf_2)
+decl uf_1 :: real
+#5 := uf_1
+#4 := 3::real
+#6 := (* 3::real uf_1)
+#10 := (+ #6 #9)
+#41 := (>= #10 4::real)
+#39 := (not #41)
+#12 := (< #10 4::real)
+#40 := (iff #12 #39)
+#37 := [rewrite]: #40
+#34 := [asserted]: #12
+#38 := [mp #34 #37]: #39
+#13 := 2::real
+#14 := (* 2::real uf_1)
+#43 := (<= #14 3::real)
+#44 := (not #43)
+#15 := (< 3::real #14)
+#45 := (iff #15 #44)
+#46 := [rewrite]: #45
+#35 := [asserted]: #15
+#47 := [mp #35 #46]: #44
+#16 := 0::real
+#51 := (>= uf_2 0::real)
+#17 := (< uf_2 0::real)
+#18 := (not #17)
+#58 := (iff #18 #51)
+#49 := (not #51)
+#53 := (not #49)
+#56 := (iff #53 #51)
+#57 := [rewrite]: #56
+#54 := (iff #18 #53)
+#50 := (iff #17 #49)
+#52 := [rewrite]: #50
+#55 := [monotonicity #52]: #54
+#59 := [trans #55 #57]: #58
+#36 := [asserted]: #18
+#60 := [mp #36 #59]: #51
+[th-lemma #60 #47 #38]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_12	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_2 Int)
+  (uf_1 Int)
+ )
+:assumption (not (iff (or (<= 0 (+ uf_1 (* (~ 1) uf_2))) (or (not (<= 0 uf_2)) (<= 0 uf_2))) (not false)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_12.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,59 @@
+#2 := false
+#16 := (not false)
+decl uf_2 :: int
+#8 := uf_2
+#4 := 0::int
+#12 := (<= 0::int uf_2)
+#13 := (not #12)
+#14 := (or #13 #12)
+#6 := 1::int
+#7 := (- 1::int)
+#9 := (* #7 uf_2)
+decl uf_1 :: int
+#5 := uf_1
+#10 := (+ uf_1 #9)
+#11 := (<= 0::int #10)
+#15 := (or #11 #14)
+#17 := (iff #15 #16)
+#18 := (not #17)
+#70 := (iff #18 false)
+#1 := true
+#65 := (not true)
+#68 := (iff #65 false)
+#69 := [rewrite]: #68
+#66 := (iff #18 #65)
+#63 := (iff #17 true)
+#58 := (iff true true)
+#61 := (iff #58 true)
+#62 := [rewrite]: #61
+#59 := (iff #17 #58)
+#56 := (iff #16 true)
+#57 := [rewrite]: #56
+#54 := (iff #15 true)
+#35 := -1::int
+#38 := (* -1::int uf_2)
+#41 := (+ uf_1 #38)
+#44 := (<= 0::int #41)
+#49 := (or #44 true)
+#52 := (iff #49 true)
+#53 := [rewrite]: #52
+#50 := (iff #15 #49)
+#47 := (iff #14 true)
+#48 := [rewrite]: #47
+#45 := (iff #11 #44)
+#42 := (= #10 #41)
+#39 := (= #9 #38)
+#36 := (= #7 -1::int)
+#37 := [rewrite]: #36
+#40 := [monotonicity #37]: #39
+#43 := [monotonicity #40]: #42
+#46 := [monotonicity #43]: #45
+#51 := [monotonicity #46 #48]: #50
+#55 := [trans #51 #53]: #54
+#60 := [monotonicity #55 #57]: #59
+#64 := [trans #60 #62]: #63
+#67 := [monotonicity #64]: #66
+#71 := [trans #67 #69]: #70
+#34 := [asserted]: #18
+[mp #34 #71]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_13	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,13 @@
+(benchmark Isabelle
+:extrasorts ( T1)
+:extrafuns (
+  (uf_2 T1)
+  (uf_3 Int Int T1)
+  (uf_1 Int Int T1)
+  (uf_4 Int)
+ )
+:assumption (forall (?x1 Int) (?x2 Int) (iff (= (uf_1 ?x1 ?x2) uf_2) (<= ?x1 ?x2)))
+:assumption (forall (?x3 Int) (?x4 Int) (iff (= (uf_3 ?x3 ?x4) uf_2) (< ?x3 ?x4)))
+:assumption (not (distinct (uf_3 uf_4 3) (uf_1 3 uf_4)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_13.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,212 @@
+#2 := false
+decl uf_3 :: (-> int int T1)
+#18 := 3::int
+decl uf_4 :: int
+#17 := uf_4
+#19 := (uf_3 uf_4 3::int)
+decl uf_2 :: T1
+#7 := uf_2
+#221 := (= uf_2 #19)
+decl uf_1 :: (-> int int T1)
+#20 := (uf_1 3::int uf_4)
+#256 := (= uf_2 #20)
+#531 := (iff #256 #221)
+#529 := (iff #221 #256)
+#87 := (= #19 #20)
+#21 := (distinct #19 #20)
+#22 := (not #21)
+#96 := (iff #22 #87)
+#88 := (not #87)
+#91 := (not #88)
+#94 := (iff #91 #87)
+#95 := [rewrite]: #94
+#92 := (iff #22 #91)
+#89 := (iff #21 #88)
+#90 := [rewrite]: #89
+#93 := [monotonicity #90]: #92
+#97 := [trans #93 #95]: #96
+#86 := [asserted]: #22
+#100 := [mp #86 #97]: #87
+#530 := [monotonicity #100]: #529
+#525 := [symm #530]: #531
+#548 := (not #221)
+#232 := (not #256)
+#526 := (iff #232 #548)
+#532 := [monotonicity #525]: #526
+#536 := [hypothesis]: #232
+#533 := [mp #536 #532]: #548
+#259 := (>= uf_4 3::int)
+#576 := (not #259)
+#542 := (or #256 #576)
+#257 := (iff #256 #259)
+#5 := (:var 0 int)
+#4 := (:var 1 int)
+#6 := (uf_1 #4 #5)
+#583 := (pattern #6)
+#44 := 0::int
+#41 := -1::int
+#42 := (* -1::int #5)
+#43 := (+ #4 #42)
+#45 := (<= #43 0::int)
+#8 := (= #6 uf_2)
+#48 := (iff #8 #45)
+#584 := (forall (vars (?x1 int) (?x2 int)) (:pat #583) #48)
+#51 := (forall (vars (?x1 int) (?x2 int)) #48)
+#587 := (iff #51 #584)
+#585 := (iff #48 #48)
+#586 := [refl]: #585
+#588 := [quant-intro #586]: #587
+#108 := (~ #51 #51)
+#106 := (~ #48 #48)
+#107 := [refl]: #106
+#109 := [nnf-pos #107]: #108
+#9 := (<= #4 #5)
+#10 := (iff #8 #9)
+#11 := (forall (vars (?x1 int) (?x2 int)) #10)
+#52 := (iff #11 #51)
+#49 := (iff #10 #48)
+#46 := (iff #9 #45)
+#47 := [rewrite]: #46
+#50 := [monotonicity #47]: #49
+#53 := [quant-intro #50]: #52
+#38 := [asserted]: #11
+#54 := [mp #38 #53]: #51
+#110 := [mp~ #54 #109]: #51
+#589 := [mp #110 #588]: #584
+#575 := (not #584)
+#577 := (or #575 #257)
+#167 := (* -1::int uf_4)
+#254 := (+ 3::int #167)
+#168 := (<= #254 0::int)
+#255 := (= #20 uf_2)
+#169 := (iff #255 #168)
+#234 := (or #575 #169)
+#571 := (iff #234 #577)
+#246 := (iff #577 #577)
+#578 := [rewrite]: #246
+#261 := (iff #169 #257)
+#187 := (iff #168 #259)
+#260 := [rewrite]: #187
+#247 := (iff #255 #256)
+#258 := [rewrite]: #247
+#240 := [monotonicity #258 #260]: #261
+#245 := [monotonicity #240]: #571
+#579 := [trans #245 #578]: #571
+#364 := [quant-inst]: #234
+#580 := [mp #364 #579]: #577
+#541 := [unit-resolution #580 #589]: #257
+#581 := (not #257)
+#582 := (or #581 #256 #576)
+#572 := [def-axiom]: #582
+#537 := [unit-resolution #572 #541]: #542
+#543 := [unit-resolution #537 #536]: #576
+#385 := (or #221 #259)
+#552 := (iff #221 #576)
+#12 := (uf_3 #4 #5)
+#590 := (pattern #12)
+#69 := (>= #43 0::int)
+#68 := (not #69)
+#40 := (= uf_2 #12)
+#75 := (iff #40 #68)
+#591 := (forall (vars (?x3 int) (?x4 int)) (:pat #590) #75)
+#80 := (forall (vars (?x3 int) (?x4 int)) #75)
+#594 := (iff #80 #591)
+#592 := (iff #75 #75)
+#593 := [refl]: #592
+#595 := [quant-intro #593]: #594
+#101 := (~ #80 #80)
+#111 := (~ #75 #75)
+#112 := [refl]: #111
+#98 := [nnf-pos #112]: #101
+#14 := (< #4 #5)
+#13 := (= #12 uf_2)
+#15 := (iff #13 #14)
+#16 := (forall (vars (?x3 int) (?x4 int)) #15)
+#83 := (iff #16 #80)
+#60 := (iff #14 #40)
+#65 := (forall (vars (?x3 int) (?x4 int)) #60)
+#81 := (iff #65 #80)
+#78 := (iff #60 #75)
+#72 := (iff #68 #40)
+#76 := (iff #72 #75)
+#77 := [rewrite]: #76
+#73 := (iff #60 #72)
+#70 := (iff #14 #68)
+#71 := [rewrite]: #70
+#74 := [monotonicity #71]: #73
+#79 := [trans #74 #77]: #78
+#82 := [quant-intro #79]: #81
+#66 := (iff #16 #65)
+#63 := (iff #15 #60)
+#57 := (iff #40 #14)
+#61 := (iff #57 #60)
+#62 := [rewrite]: #61
+#58 := (iff #15 #57)
+#55 := (iff #13 #40)
+#56 := [rewrite]: #55
+#59 := [monotonicity #56]: #58
+#64 := [trans #59 #62]: #63
+#67 := [quant-intro #64]: #66
+#84 := [trans #67 #82]: #83
+#39 := [asserted]: #16
+#85 := [mp #39 #84]: #80
+#113 := [mp~ #85 #98]: #80
+#596 := [mp #113 #595]: #591
+#276 := (not #591)
+#550 := (or #276 #552)
+#222 := (* -1::int 3::int)
+#223 := (+ uf_4 #222)
+#224 := (>= #223 0::int)
+#560 := (not #224)
+#561 := (iff #221 #560)
+#554 := (or #276 #561)
+#555 := (iff #554 #550)
+#266 := (iff #550 #550)
+#267 := [rewrite]: #266
+#553 := (iff #561 #552)
+#282 := (iff #560 #576)
+#280 := (iff #224 #259)
+#562 := -3::int
+#566 := (+ -3::int uf_4)
+#567 := (>= #566 0::int)
+#557 := (iff #567 #259)
+#279 := [rewrite]: #557
+#570 := (iff #224 #567)
+#209 := (= #223 #566)
+#559 := (+ uf_4 -3::int)
+#568 := (= #559 #566)
+#208 := [rewrite]: #568
+#565 := (= #223 #559)
+#563 := (= #222 -3::int)
+#564 := [rewrite]: #563
+#203 := [monotonicity #564]: #565
+#569 := [trans #203 #208]: #209
+#556 := [monotonicity #569]: #570
+#281 := [trans #556 #279]: #280
+#175 := [monotonicity #281]: #282
+#275 := [monotonicity #175]: #553
+#265 := [monotonicity #275]: #555
+#268 := [trans #265 #267]: #555
+#551 := [quant-inst]: #554
+#546 := [mp #551 #268]: #550
+#384 := [unit-resolution #546 #596]: #552
+#547 := (not #552)
+#262 := (or #547 #221 #259)
+#544 := [def-axiom]: #262
+#386 := [unit-resolution #544 #384]: #385
+#528 := [unit-resolution #386 #543]: #221
+#527 := [unit-resolution #528 #533]: false
+#534 := [lemma #527]: #256
+#523 := [mp #534 #525]: #221
+#363 := (or #232 #259)
+#237 := (or #581 #232 #259)
+#573 := [def-axiom]: #237
+#365 := [unit-resolution #573 #541]: #363
+#366 := [unit-resolution #365 #534]: #259
+#519 := (or #548 #576)
+#545 := (or #547 #548 #576)
+#549 := [def-axiom]: #545
+#520 := [unit-resolution #549 #384]: #519
+#522 := [unit-resolution #520 #366]: #548
+[unit-resolution #522 #523]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_14	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,8 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_1 Int)
+ )
+:assumption (< 0 uf_1)
+:assumption (not (distinct uf_1 (* uf_1 2) (- uf_1 uf_1)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_14.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,86 @@
+#2 := false
+decl uf_1 :: int
+#5 := uf_1
+#7 := 2::int
+#29 := (* 2::int uf_1)
+#4 := 0::int
+#54 := (= 0::int #29)
+#55 := (not #54)
+#61 := (= #29 0::int)
+#104 := (not #61)
+#110 := (iff #104 #55)
+#108 := (iff #61 #54)
+#109 := [commutativity]: #108
+#111 := [monotonicity #109]: #110
+#62 := (<= #29 0::int)
+#100 := (not #62)
+#30 := (<= uf_1 0::int)
+#31 := (not #30)
+#6 := (< 0::int uf_1)
+#32 := (iff #6 #31)
+#33 := [rewrite]: #32
+#27 := [asserted]: #6
+#34 := [mp #27 #33]: #31
+#101 := (or #100 #30)
+#102 := [th-lemma]: #101
+#103 := [unit-resolution #102 #34]: #100
+#105 := (or #104 #62)
+#106 := [th-lemma]: #105
+#107 := [unit-resolution #106 #103]: #104
+#112 := [mp #107 #111]: #55
+#56 := (= uf_1 #29)
+#57 := (not #56)
+#53 := (= 0::int uf_1)
+#50 := (not #53)
+#58 := (and #50 #55 #57)
+#69 := (not #58)
+#42 := (distinct 0::int uf_1 #29)
+#47 := (not #42)
+#9 := (- uf_1 uf_1)
+#8 := (* uf_1 2::int)
+#10 := (distinct uf_1 #8 #9)
+#11 := (not #10)
+#48 := (iff #11 #47)
+#45 := (iff #10 #42)
+#39 := (distinct uf_1 #29 0::int)
+#43 := (iff #39 #42)
+#44 := [rewrite]: #43
+#40 := (iff #10 #39)
+#37 := (= #9 0::int)
+#38 := [rewrite]: #37
+#35 := (= #8 #29)
+#36 := [rewrite]: #35
+#41 := [monotonicity #36 #38]: #40
+#46 := [trans #41 #44]: #45
+#49 := [monotonicity #46]: #48
+#28 := [asserted]: #11
+#52 := [mp #28 #49]: #47
+#80 := (or #42 #69)
+#81 := [def-axiom]: #80
+#82 := [unit-resolution #81 #52]: #69
+#59 := (= uf_1 0::int)
+#83 := (not #59)
+#89 := (iff #83 #50)
+#87 := (iff #59 #53)
+#88 := [commutativity]: #87
+#90 := [monotonicity #88]: #89
+#84 := (or #83 #30)
+#85 := [th-lemma]: #84
+#86 := [unit-resolution #85 #34]: #83
+#91 := [mp #86 #90]: #50
+#64 := -1::int
+#65 := (* -1::int #29)
+#66 := (+ uf_1 #65)
+#68 := (>= #66 0::int)
+#92 := (not #68)
+#93 := (or #92 #30)
+#94 := [th-lemma]: #93
+#95 := [unit-resolution #94 #34]: #92
+#96 := (or #57 #68)
+#97 := [th-lemma]: #96
+#98 := [unit-resolution #97 #95]: #57
+#76 := (or #58 #53 #54 #56)
+#77 := [def-axiom]: #76
+#99 := [unit-resolution #77 #98 #91 #82]: #54
+[unit-resolution #99 #112]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_15	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,9 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_2 Int)
+  (uf_1 Int)
+  (uf_3 Int)
+ )
+: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))))))))))))))))))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_15.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,673 @@
+#2 := false
+#169 := 0::int
+decl uf_2 :: int
+#5 := uf_2
+#166 := -1::int
+#202 := (* -1::int uf_2)
+decl uf_1 :: int
+#4 := uf_1
+#203 := (+ uf_1 #202)
+#218 := (>= #203 0::int)
+decl uf_3 :: int
+#7 := uf_3
+#167 := (* -1::int uf_3)
+#168 := (+ uf_1 #167)
+#178 := (>= #168 0::int)
+#217 := (not #218)
+#204 := (<= #203 0::int)
+#205 := (not #204)
+#692 := [hypothesis]: #205
+#177 := (not #178)
+#693 := (or #177 #204)
+#170 := (<= #168 0::int)
+#191 := (+ uf_2 #167)
+#237 := (<= #191 0::int)
+#238 := (not #237)
+#171 := (not #170)
+#685 := [hypothesis]: #171
+#190 := (>= #191 0::int)
+#455 := (or #170 #190)
+#189 := (not #190)
+#197 := (and #171 #189)
+#354 := (not #197)
+#464 := (iff #354 #455)
+#456 := (not #455)
+#459 := (not #456)
+#462 := (iff #459 #455)
+#463 := [rewrite]: #462
+#460 := (iff #354 #459)
+#457 := (iff #197 #456)
+#458 := [rewrite]: #457
+#461 := [monotonicity #458]: #460
+#465 := [trans #461 #463]: #464
+#287 := (and #189 #217)
+#10 := (= uf_2 uf_3)
+#279 := (and #10 #217)
+#273 := (and #177 #238)
+#15 := (= uf_1 uf_3)
+#268 := (and #15 #238)
+#17 := (= uf_1 uf_2)
+#260 := (and #17 #189)
+#252 := (and #205 #238)
+#244 := (and #17 #238)
+#232 := (and #171 #217)
+#224 := (and #15 #217)
+#214 := (and #10 #205)
+#211 := (and #177 #205)
+#208 := (and #15 #205)
+#184 := (and #17 #177)
+#174 := (and #10 #171)
+#115 := (and #10 #17)
+#337 := (or #115 #174 #184 #197 #208 #211 #214 #224 #232 #244 #252 #260 #268 #273 #279 #287)
+#342 := (not #337)
+#21 := (= uf_2 uf_1)
+#27 := (= uf_3 uf_2)
+#34 := (and #27 #21)
+#23 := (< uf_3 uf_1)
+#33 := (and #10 #23)
+#35 := (or #33 #34)
+#12 := (< uf_1 uf_3)
+#32 := (and #21 #12)
+#36 := (or #32 #35)
+#8 := (< uf_2 uf_3)
+#31 := (and #8 #23)
+#37 := (or #31 #36)
+#25 := (= uf_3 uf_1)
+#19 := (< uf_2 uf_1)
+#30 := (and #19 #25)
+#38 := (or #30 #37)
+#29 := (and #19 #12)
+#39 := (or #29 #38)
+#28 := (and #27 #19)
+#40 := (or #28 #39)
+#6 := (< uf_1 uf_2)
+#26 := (and #25 #6)
+#41 := (or #26 #40)
+#24 := (and #23 #6)
+#42 := (or #24 #41)
+#13 := (< uf_3 uf_2)
+#22 := (and #13 #21)
+#43 := (or #22 #42)
+#20 := (and #13 #19)
+#44 := (or #20 #43)
+#18 := (and #17 #8)
+#45 := (or #18 #44)
+#16 := (and #15 #13)
+#46 := (or #16 #45)
+#14 := (and #12 #13)
+#47 := (or #14 #46)
+#11 := (and #6 #10)
+#48 := (or #11 #47)
+#9 := (and #6 #8)
+#49 := (or #9 #48)
+#50 := (not #49)
+#345 := (iff #50 #342)
+#118 := (or #33 #115)
+#110 := (and #12 #17)
+#121 := (or #110 #118)
+#124 := (or #31 #121)
+#102 := (and #15 #19)
+#127 := (or #102 #124)
+#96 := (and #12 #19)
+#130 := (or #96 #127)
+#93 := (and #10 #19)
+#133 := (or #93 #130)
+#86 := (and #6 #15)
+#136 := (or #86 #133)
+#78 := (and #6 #23)
+#139 := (or #78 #136)
+#75 := (and #13 #17)
+#142 := (or #75 #139)
+#145 := (or #20 #142)
+#70 := (and #8 #17)
+#148 := (or #70 #145)
+#67 := (and #13 #15)
+#151 := (or #67 #148)
+#154 := (or #14 #151)
+#157 := (or #11 #154)
+#160 := (or #9 #157)
+#163 := (not #160)
+#343 := (iff #163 #342)
+#340 := (iff #160 #337)
+#292 := (or #174 #115)
+#295 := (or #184 #292)
+#298 := (or #197 #295)
+#301 := (or #208 #298)
+#304 := (or #211 #301)
+#307 := (or #214 #304)
+#310 := (or #224 #307)
+#313 := (or #232 #310)
+#316 := (or #244 #313)
+#319 := (or #252 #316)
+#322 := (or #260 #319)
+#325 := (or #268 #322)
+#328 := (or #273 #325)
+#331 := (or #279 #328)
+#334 := (or #287 #331)
+#338 := (iff #334 #337)
+#339 := [rewrite]: #338
+#335 := (iff #160 #334)
+#332 := (iff #157 #331)
+#329 := (iff #154 #328)
+#326 := (iff #151 #325)
+#323 := (iff #148 #322)
+#320 := (iff #145 #319)
+#317 := (iff #142 #316)
+#314 := (iff #139 #313)
+#311 := (iff #136 #310)
+#308 := (iff #133 #307)
+#305 := (iff #130 #304)
+#302 := (iff #127 #301)
+#299 := (iff #124 #298)
+#296 := (iff #121 #295)
+#293 := (iff #118 #292)
+#175 := (iff #33 #174)
+#172 := (iff #23 #171)
+#173 := [rewrite]: #172
+#176 := [monotonicity #173]: #175
+#294 := [monotonicity #176]: #293
+#187 := (iff #110 #184)
+#181 := (and #177 #17)
+#185 := (iff #181 #184)
+#186 := [rewrite]: #185
+#182 := (iff #110 #181)
+#179 := (iff #12 #177)
+#180 := [rewrite]: #179
+#183 := [monotonicity #180]: #182
+#188 := [trans #183 #186]: #187
+#297 := [monotonicity #188 #294]: #296
+#200 := (iff #31 #197)
+#194 := (and #189 #171)
+#198 := (iff #194 #197)
+#199 := [rewrite]: #198
+#195 := (iff #31 #194)
+#192 := (iff #8 #189)
+#193 := [rewrite]: #192
+#196 := [monotonicity #193 #173]: #195
+#201 := [trans #196 #199]: #200
+#300 := [monotonicity #201 #297]: #299
+#209 := (iff #102 #208)
+#206 := (iff #19 #205)
+#207 := [rewrite]: #206
+#210 := [monotonicity #207]: #209
+#303 := [monotonicity #210 #300]: #302
+#212 := (iff #96 #211)
+#213 := [monotonicity #180 #207]: #212
+#306 := [monotonicity #213 #303]: #305
+#215 := (iff #93 #214)
+#216 := [monotonicity #207]: #215
+#309 := [monotonicity #216 #306]: #308
+#227 := (iff #86 #224)
+#221 := (and #217 #15)
+#225 := (iff #221 #224)
+#226 := [rewrite]: #225
+#222 := (iff #86 #221)
+#219 := (iff #6 #217)
+#220 := [rewrite]: #219
+#223 := [monotonicity #220]: #222
+#228 := [trans #223 #226]: #227
+#312 := [monotonicity #228 #309]: #311
+#235 := (iff #78 #232)
+#229 := (and #217 #171)
+#233 := (iff #229 #232)
+#234 := [rewrite]: #233
+#230 := (iff #78 #229)
+#231 := [monotonicity #220 #173]: #230
+#236 := [trans #231 #234]: #235
+#315 := [monotonicity #236 #312]: #314
+#247 := (iff #75 #244)
+#241 := (and #238 #17)
+#245 := (iff #241 #244)
+#246 := [rewrite]: #245
+#242 := (iff #75 #241)
+#239 := (iff #13 #238)
+#240 := [rewrite]: #239
+#243 := [monotonicity #240]: #242
+#248 := [trans #243 #246]: #247
+#318 := [monotonicity #248 #315]: #317
+#255 := (iff #20 #252)
+#249 := (and #238 #205)
+#253 := (iff #249 #252)
+#254 := [rewrite]: #253
+#250 := (iff #20 #249)
+#251 := [monotonicity #240 #207]: #250
+#256 := [trans #251 #254]: #255
+#321 := [monotonicity #256 #318]: #320
+#263 := (iff #70 #260)
+#257 := (and #189 #17)
+#261 := (iff #257 #260)
+#262 := [rewrite]: #261
+#258 := (iff #70 #257)
+#259 := [monotonicity #193]: #258
+#264 := [trans #259 #262]: #263
+#324 := [monotonicity #264 #321]: #323
+#271 := (iff #67 #268)
+#265 := (and #238 #15)
+#269 := (iff #265 #268)
+#270 := [rewrite]: #269
+#266 := (iff #67 #265)
+#267 := [monotonicity #240]: #266
+#272 := [trans #267 #270]: #271
+#327 := [monotonicity #272 #324]: #326
+#274 := (iff #14 #273)
+#275 := [monotonicity #180 #240]: #274
+#330 := [monotonicity #275 #327]: #329
+#282 := (iff #11 #279)
+#276 := (and #217 #10)
+#280 := (iff #276 #279)
+#281 := [rewrite]: #280
+#277 := (iff #11 #276)
+#278 := [monotonicity #220]: #277
+#283 := [trans #278 #281]: #282
+#333 := [monotonicity #283 #330]: #332
+#290 := (iff #9 #287)
+#284 := (and #217 #189)
+#288 := (iff #284 #287)
+#289 := [rewrite]: #288
+#285 := (iff #9 #284)
+#286 := [monotonicity #220 #193]: #285
+#291 := [trans #286 #289]: #290
+#336 := [monotonicity #291 #333]: #335
+#341 := [trans #336 #339]: #340
+#344 := [monotonicity #341]: #343
+#164 := (iff #50 #163)
+#161 := (iff #49 #160)
+#158 := (iff #48 #157)
+#155 := (iff #47 #154)
+#152 := (iff #46 #151)
+#149 := (iff #45 #148)
+#146 := (iff #44 #145)
+#143 := (iff #43 #142)
+#140 := (iff #42 #139)
+#137 := (iff #41 #136)
+#134 := (iff #40 #133)
+#131 := (iff #39 #130)
+#128 := (iff #38 #127)
+#125 := (iff #37 #124)
+#122 := (iff #36 #121)
+#119 := (iff #35 #118)
+#116 := (iff #34 #115)
+#73 := (iff #21 #17)
+#74 := [rewrite]: #73
+#91 := (iff #27 #10)
+#92 := [rewrite]: #91
+#117 := [monotonicity #92 #74]: #116
+#120 := [monotonicity #117]: #119
+#113 := (iff #32 #110)
+#107 := (and #17 #12)
+#111 := (iff #107 #110)
+#112 := [rewrite]: #111
+#108 := (iff #32 #107)
+#109 := [monotonicity #74]: #108
+#114 := [trans #109 #112]: #113
+#123 := [monotonicity #114 #120]: #122
+#126 := [monotonicity #123]: #125
+#105 := (iff #30 #102)
+#99 := (and #19 #15)
+#103 := (iff #99 #102)
+#104 := [rewrite]: #103
+#100 := (iff #30 #99)
+#81 := (iff #25 #15)
+#82 := [rewrite]: #81
+#101 := [monotonicity #82]: #100
+#106 := [trans #101 #104]: #105
+#129 := [monotonicity #106 #126]: #128
+#97 := (iff #29 #96)
+#98 := [rewrite]: #97
+#132 := [monotonicity #98 #129]: #131
+#94 := (iff #28 #93)
+#95 := [monotonicity #92]: #94
+#135 := [monotonicity #95 #132]: #134
+#89 := (iff #26 #86)
+#83 := (and #15 #6)
+#87 := (iff #83 #86)
+#88 := [rewrite]: #87
+#84 := (iff #26 #83)
+#85 := [monotonicity #82]: #84
+#90 := [trans #85 #88]: #89
+#138 := [monotonicity #90 #135]: #137
+#79 := (iff #24 #78)
+#80 := [rewrite]: #79
+#141 := [monotonicity #80 #138]: #140
+#76 := (iff #22 #75)
+#77 := [monotonicity #74]: #76
+#144 := [monotonicity #77 #141]: #143
+#147 := [monotonicity #144]: #146
+#71 := (iff #18 #70)
+#72 := [rewrite]: #71
+#150 := [monotonicity #72 #147]: #149
+#68 := (iff #16 #67)
+#69 := [rewrite]: #68
+#153 := [monotonicity #69 #150]: #152
+#156 := [monotonicity #153]: #155
+#159 := [monotonicity #156]: #158
+#162 := [monotonicity #159]: #161
+#165 := [monotonicity #162]: #164
+#346 := [trans #165 #344]: #345
+#66 := [asserted]: #50
+#347 := [mp #66 #346]: #342
+#355 := [not-or-elim #347]: #354
+#466 := [mp #355 #465]: #455
+#686 := [unit-resolution #466 #685]: #190
+#427 := (or #170 #189 #238)
+#350 := (not #174)
+#430 := (iff #350 #427)
+#382 := (or #189 #238)
+#414 := (or #170 #382)
+#428 := (iff #414 #427)
+#429 := [rewrite]: #428
+#425 := (iff #350 #414)
+#415 := (not #414)
+#420 := (not #415)
+#423 := (iff #420 #414)
+#424 := [rewrite]: #423
+#421 := (iff #350 #420)
+#418 := (iff #174 #415)
+#380 := (not #382)
+#411 := (and #380 #171)
+#416 := (iff #411 #415)
+#417 := [rewrite]: #416
+#412 := (iff #174 #411)
+#383 := (iff #10 #380)
+#384 := [rewrite]: #383
+#413 := [monotonicity #384]: #412
+#419 := [trans #413 #417]: #418
+#422 := [monotonicity #419]: #421
+#426 := [trans #422 #424]: #425
+#431 := [trans #426 #429]: #430
+#351 := [not-or-elim #347]: #350
+#432 := [mp #351 #431]: #427
+#687 := [unit-resolution #432 #686 #685]: #238
+#549 := (or #170 #218)
+#364 := (not #232)
+#558 := (iff #364 #549)
+#550 := (not #549)
+#553 := (not #550)
+#556 := (iff #553 #549)
+#557 := [rewrite]: #556
+#554 := (iff #364 #553)
+#551 := (iff #232 #550)
+#552 := [rewrite]: #551
+#555 := [monotonicity #552]: #554
+#559 := [trans #555 #557]: #558
+#365 := [not-or-elim #347]: #364
+#560 := [mp #365 #559]: #549
+#688 := [unit-resolution #560 #685]: #218
+#577 := (or #205 #217 #237)
+#366 := (not #244)
+#580 := (iff #366 #577)
+#385 := (or #205 #217)
+#564 := (or #237 #385)
+#578 := (iff #564 #577)
+#579 := [rewrite]: #578
+#575 := (iff #366 #564)
+#565 := (not #564)
+#570 := (not #565)
+#573 := (iff #570 #564)
+#574 := [rewrite]: #573
+#571 := (iff #366 #570)
+#568 := (iff #244 #565)
+#386 := (not #385)
+#561 := (and #386 #238)
+#566 := (iff #561 #565)
+#567 := [rewrite]: #566
+#562 := (iff #244 #561)
+#387 := (iff #17 #386)
+#388 := [rewrite]: #387
+#563 := [monotonicity #388]: #562
+#569 := [trans #563 #567]: #568
+#572 := [monotonicity #569]: #571
+#576 := [trans #572 #574]: #575
+#581 := [trans #576 #579]: #580
+#367 := [not-or-elim #347]: #366
+#582 := [mp #367 #581]: #577
+#689 := [unit-resolution #582 #688 #687]: #205
+#583 := (or #204 #237)
+#368 := (not #252)
+#592 := (iff #368 #583)
+#584 := (not #583)
+#587 := (not #584)
+#590 := (iff #587 #583)
+#591 := [rewrite]: #590
+#588 := (iff #368 #587)
+#585 := (iff #252 #584)
+#586 := [rewrite]: #585
+#589 := [monotonicity #586]: #588
+#593 := [trans #589 #591]: #592
+#369 := [not-or-elim #347]: #368
+#594 := [mp #369 #593]: #583
+#690 := [unit-resolution #594 #689 #687]: false
+#691 := [lemma #690]: #170
+#487 := (or #171 #177 #204)
+#356 := (not #208)
+#490 := (iff #356 #487)
+#467 := (or #171 #177)
+#474 := (or #204 #467)
+#488 := (iff #474 #487)
+#489 := [rewrite]: #488
+#485 := (iff #356 #474)
+#475 := (not #474)
+#480 := (not #475)
+#483 := (iff #480 #474)
+#484 := [rewrite]: #483
+#481 := (iff #356 #480)
+#478 := (iff #208 #475)
+#468 := (not #467)
+#471 := (and #468 #205)
+#476 := (iff #471 #475)
+#477 := [rewrite]: #476
+#472 := (iff #208 #471)
+#469 := (iff #15 #468)
+#470 := [rewrite]: #469
+#473 := [monotonicity #470]: #472
+#479 := [trans #473 #477]: #478
+#482 := [monotonicity #479]: #481
+#486 := [trans #482 #484]: #485
+#491 := [trans #486 #489]: #490
+#357 := [not-or-elim #347]: #356
+#492 := [mp #357 #491]: #487
+#694 := [unit-resolution #492 #691]: #693
+#695 := [unit-resolution #694 #692]: #177
+#493 := (or #178 #204)
+#358 := (not #211)
+#502 := (iff #358 #493)
+#494 := (not #493)
+#497 := (not #494)
+#500 := (iff #497 #493)
+#501 := [rewrite]: #500
+#498 := (iff #358 #497)
+#495 := (iff #211 #494)
+#496 := [rewrite]: #495
+#499 := [monotonicity #496]: #498
+#503 := [trans #499 #501]: #502
+#359 := [not-or-elim #347]: #358
+#504 := [mp #359 #503]: #493
+#696 := [unit-resolution #504 #695 #692]: false
+#697 := [lemma #696]: #204
+#698 := [hypothesis]: #177
+#449 := (or #178 #205 #217)
+#352 := (not #184)
+#452 := (iff #352 #449)
+#436 := (or #178 #385)
+#450 := (iff #436 #449)
+#451 := [rewrite]: #450
+#447 := (iff #352 #436)
+#437 := (not #436)
+#442 := (not #437)
+#445 := (iff #442 #436)
+#446 := [rewrite]: #445
+#443 := (iff #352 #442)
+#440 := (iff #184 #437)
+#433 := (and #386 #177)
+#438 := (iff #433 #437)
+#439 := [rewrite]: #438
+#434 := (iff #184 #433)
+#435 := [monotonicity #388]: #434
+#441 := [trans #435 #439]: #440
+#444 := [monotonicity #441]: #443
+#448 := [trans #444 #446]: #447
+#453 := [trans #448 #451]: #452
+#353 := [not-or-elim #347]: #352
+#454 := [mp #353 #453]: #449
+#699 := [unit-resolution #454 #698 #697]: #217
+#639 := (or #178 #237)
+#374 := (not #273)
+#648 := (iff #374 #639)
+#640 := (not #639)
+#643 := (not #640)
+#646 := (iff #643 #639)
+#647 := [rewrite]: #646
+#644 := (iff #374 #643)
+#641 := (iff #273 #640)
+#642 := [rewrite]: #641
+#645 := [monotonicity #642]: #644
+#649 := [trans #645 #647]: #648
+#375 := [not-or-elim #347]: #374
+#650 := [mp #375 #649]: #639
+#700 := [unit-resolution #650 #698]: #237
+#667 := (or #189 #218 #238)
+#376 := (not #279)
+#670 := (iff #376 #667)
+#654 := (or #218 #382)
+#668 := (iff #654 #667)
+#669 := [rewrite]: #668
+#665 := (iff #376 #654)
+#655 := (not #654)
+#660 := (not #655)
+#663 := (iff #660 #654)
+#664 := [rewrite]: #663
+#661 := (iff #376 #660)
+#658 := (iff #279 #655)
+#651 := (and #380 #217)
+#656 := (iff #651 #655)
+#657 := [rewrite]: #656
+#652 := (iff #279 #651)
+#653 := [monotonicity #384]: #652
+#659 := [trans #653 #657]: #658
+#662 := [monotonicity #659]: #661
+#666 := [trans #662 #664]: #665
+#671 := [trans #666 #669]: #670
+#377 := [not-or-elim #347]: #376
+#672 := [mp #377 #671]: #667
+#701 := [unit-resolution #672 #699 #700]: #189
+#673 := (or #190 #218)
+#378 := (not #287)
+#682 := (iff #378 #673)
+#674 := (not #673)
+#677 := (not #674)
+#680 := (iff #677 #673)
+#681 := [rewrite]: #680
+#678 := (iff #378 #677)
+#675 := (iff #287 #674)
+#676 := [rewrite]: #675
+#679 := [monotonicity #676]: #678
+#683 := [trans #679 #681]: #682
+#379 := [not-or-elim #347]: #378
+#684 := [mp #379 #683]: #673
+#702 := [unit-resolution #684 #701 #699]: false
+#703 := [lemma #702]: #178
+#704 := (or #177 #218)
+#543 := (or #171 #177 #218)
+#362 := (not #224)
+#546 := (iff #362 #543)
+#530 := (or #218 #467)
+#544 := (iff #530 #543)
+#545 := [rewrite]: #544
+#541 := (iff #362 #530)
+#531 := (not #530)
+#536 := (not #531)
+#539 := (iff #536 #530)
+#540 := [rewrite]: #539
+#537 := (iff #362 #536)
+#534 := (iff #224 #531)
+#527 := (and #468 #217)
+#532 := (iff #527 #531)
+#533 := [rewrite]: #532
+#528 := (iff #224 #527)
+#529 := [monotonicity #470]: #528
+#535 := [trans #529 #533]: #534
+#538 := [monotonicity #535]: #537
+#542 := [trans #538 #540]: #541
+#547 := [trans #542 #545]: #546
+#363 := [not-or-elim #347]: #362
+#548 := [mp #363 #547]: #543
+#705 := [unit-resolution #548 #691]: #704
+#706 := [unit-resolution #705 #703]: #218
+#707 := (or #177 #237)
+#633 := (or #171 #177 #237)
+#372 := (not #268)
+#636 := (iff #372 #633)
+#620 := (or #237 #467)
+#634 := (iff #620 #633)
+#635 := [rewrite]: #634
+#631 := (iff #372 #620)
+#621 := (not #620)
+#626 := (not #621)
+#629 := (iff #626 #620)
+#630 := [rewrite]: #629
+#627 := (iff #372 #626)
+#624 := (iff #268 #621)
+#617 := (and #468 #238)
+#622 := (iff #617 #621)
+#623 := [rewrite]: #622
+#618 := (iff #268 #617)
+#619 := [monotonicity #470]: #618
+#625 := [trans #619 #623]: #624
+#628 := [monotonicity #625]: #627
+#632 := [trans #628 #630]: #631
+#637 := [trans #632 #635]: #636
+#373 := [not-or-elim #347]: #372
+#638 := [mp #373 #637]: #633
+#708 := [unit-resolution #638 #691]: #707
+#709 := [unit-resolution #708 #703]: #237
+#611 := (or #190 #205 #217)
+#370 := (not #260)
+#614 := (iff #370 #611)
+#598 := (or #190 #385)
+#612 := (iff #598 #611)
+#613 := [rewrite]: #612
+#609 := (iff #370 #598)
+#599 := (not #598)
+#604 := (not #599)
+#607 := (iff #604 #598)
+#608 := [rewrite]: #607
+#605 := (iff #370 #604)
+#602 := (iff #260 #599)
+#595 := (and #386 #189)
+#600 := (iff #595 #599)
+#601 := [rewrite]: #600
+#596 := (iff #260 #595)
+#597 := [monotonicity #388]: #596
+#603 := [trans #597 #601]: #602
+#606 := [monotonicity #603]: #605
+#610 := [trans #606 #608]: #609
+#615 := [trans #610 #613]: #614
+#371 := [not-or-elim #347]: #370
+#616 := [mp #371 #615]: #611
+#710 := [unit-resolution #616 #706 #697]: #190
+#405 := (or #189 #205 #217 #238)
+#348 := (not #115)
+#408 := (iff #348 #405)
+#392 := (or #382 #385)
+#406 := (iff #392 #405)
+#407 := [rewrite]: #406
+#403 := (iff #348 #392)
+#393 := (not #392)
+#398 := (not #393)
+#401 := (iff #398 #392)
+#402 := [rewrite]: #401
+#399 := (iff #348 #398)
+#396 := (iff #115 #393)
+#389 := (and #380 #386)
+#394 := (iff #389 #393)
+#395 := [rewrite]: #394
+#390 := (iff #115 #389)
+#391 := [monotonicity #384 #388]: #390
+#397 := [trans #391 #395]: #396
+#400 := [monotonicity #397]: #399
+#404 := [trans #400 #402]: #403
+#409 := [trans #404 #407]: #408
+#349 := [not-or-elim #347]: #348
+#410 := [mp #349 #409]: #405
+[unit-resolution #410 #710 #709 #697 #706]: false
+unsat
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_16	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,26 @@
+(benchmark Isabelle
+:extrafuns (
+  (uf_3 Int)
+  (uf_2 Int)
+  (uf_1 Int)
+  (uf_4 Int)
+  (uf_5 Int)
+  (uf_6 Int)
+  (uf_7 Int)
+  (uf_8 Int)
+  (uf_9 Int)
+  (uf_10 Int)
+  (uf_11 Int)
+ )
+:assumption (= uf_1 (- (ite (< uf_2 0) (~ uf_2) uf_2) uf_3))
+:assumption (= uf_4 (- (ite (< uf_1 0) (~ uf_1) uf_1) uf_2))
+:assumption (= uf_5 (- (ite (< uf_4 0) (~ uf_4) uf_4) uf_1))
+:assumption (= uf_6 (- (ite (< uf_5 0) (~ uf_5) uf_5) uf_4))
+:assumption (= uf_7 (- (ite (< uf_6 0) (~ uf_6) uf_6) uf_5))
+:assumption (= uf_8 (- (ite (< uf_7 0) (~ uf_7) uf_7) uf_6))
+:assumption (= uf_9 (- (ite (< uf_8 0) (~ uf_8) uf_8) uf_7))
+:assumption (= uf_10 (- (ite (< uf_9 0) (~ uf_9) uf_9) uf_8))
+:assumption (= uf_11 (- (ite (< uf_10 0) (~ uf_10) uf_10) uf_9))
+:assumption (not (and (= uf_3 uf_10) (= uf_2 uf_11)))
+:formula true
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/HOL/SMT/Examples/cert/z3_linarith_16.proof	Tue Oct 20 10:11:30 2009 +0200
@@ -0,0 +1,2291 @@
+#2 := false
+#6 := 0::int
+decl z3name!0 :: int
+#647 := z3name!0
+#81 := -1::int
+#656 := (* -1::int z3name!0)
+decl uf_2 :: int
+#5 := uf_2
+#882 := (+ uf_2 #656)
+#883 := (<= #882 0::int)
+#885 := (not #883)
+#881 := (>= #882 0::int)
+#884 := (not #881)
+#886 := (or #884 #885)
+decl uf_11 :: int
+#55 := uf_11
+#513 := (* -1::int uf_11)
+#514 := (+ uf_2 #513)
+#515 := (<= #514 0::int)
+decl z3name!5 :: int
+#777 := z3name!5
+decl uf_7 :: int
+#31 := uf_7
+#1083 := (+ uf_7 z3name!5)
+#1084 := (<= #1083 0::int)
+#335 := (>= uf_7 0::int)
+#1085 := (>= #1083 0::int)
+#1087 := (not #1085)
+#1086 := (not #1084)
+#1088 := (or #1086 #1087)
+#2302 := [hypothesis]: #1086
+#1289 := (or #1088 #1084)
+#1290 := [def-axiom]: #1289
+#2303 := [unit-resolution #1290 #2302]: #1088
+#1089 := (not #1088)
+#1092 := (or #335 #1089)
+#1099 := (not #1092)
+#786 := (* -1::int z3name!5)
+#1072 := (+ uf_7 #786)
+#1073 := (<= #1072 0::int)
+#1075 := (not #1073)
+#1071 := (>= #1072 0::int)
+#1074 := (not #1071)
+#1076 := (or #1074 #1075)
+#1077 := (not #1076)
+#336 := (not #335)
+#1080 := (or #336 #1077)
+#1098 := (not #1080)
+#1100 := (or #1098 #1099)
+#1101 := (not #1100)
+#318 := (* -1::int uf_7)
+#780 := (= z3name!5 #318)
+#781 := (or #335 #780)
+#778 := (= z3name!5 uf_7)
+#779 := (or #336 #778)
+#782 := (and #779 #781)
+#1104 := (iff #782 #1101)
+#1095 := (and #1080 #1092)
+#1102 := (iff #1095 #1101)
+#1103 := [rewrite]: #1102
+#1096 := (iff #782 #1095)
+#1093 := (iff #781 #1092)
+#1090 := (iff #780 #1089)
+#1091 := [rewrite]: #1090
+#1094 := [monotonicity #1091]: #1093
+#1081 := (iff #779 #1080)
+#1078 := (iff #778 #1077)
+#1079 := [rewrite]: #1078
+#1082 := [monotonicity #1079]: #1081
+#1097 := [monotonicity #1082 #1094]: #1096
+#1105 := [trans #1097 #1103]: #1104
+#783 := [intro-def]: #782
+#1106 := [mp #783 #1105]: #1101
+#1108 := [not-or-elim #1106]: #1092
+#2304 := [unit-resolution #1108 #2303]: #335
+decl uf_4 :: int
+#13 := uf_4
+#194 := (>= uf_4 0::int)
+decl uf_10 :: int
+#49 := uf_10
+#459 := (* -1::int uf_10)
+decl uf_3 :: int
+#10 := uf_3
+#508 := (+ uf_3 #459)
+#509 := (>= #508 0::int)
+decl z3name!1 :: int
+#673 := z3name!1
+#682 := (* -1::int z3name!1)
+decl uf_1 :: int
+#4 := uf_1
+#920 := (+ uf_1 #682)
+#921 := (<= #920 0::int)
+#931 := (+ uf_1 z3name!1)
+#933 := (>= #931 0::int)
+#935 := (not #933)
+#932 := (<= #931 0::int)
+#934 := (not #932)
+#936 := (or #934 #935)
+#937 := (not #936)
+#147 := (>= uf_1 0::int)
+#148 := (not #147)
+#923 := (not #921)
+#919 := (>= #920 0::int)
+#922 := (not #919)
+#924 := (or #922 #923)
+#2022 := [hypothesis]: #923
+#1237 := (or #924 #921)
+#1238 := [def-axiom]: #1237
+#2023 := [unit-resolution #1238 #2022]: #924
+#925 := (not #924)
+#928 := (or #148 #925)
+#940 := (or #147 #937)
+#947 := (not #940)
+#946 := (not #928)
+#948 := (or #946 #947)
+#949 := (not #948)
+#130 := (* -1::int uf_1)
+#676 := (= z3name!1 #130)
+#677 := (or #147 #676)
+#674 := (= z3name!1 uf_1)
+#675 := (or #148 #674)
+#678 := (and #675 #677)
+#952 := (iff #678 #949)
+#943 := (and #928 #940)
+#950 := (iff #943 #949)
+#951 := [rewrite]: #950
+#944 := (iff #678 #943)
+#941 := (iff #677 #940)
+#938 := (iff #676 #937)
+#939 := [rewrite]: #938
+#942 := [monotonicity #939]: #941
+#929 := (iff #675 #928)
+#926 := (iff #674 #925)
+#927 := [rewrite]: #926
+#930 := [monotonicity #927]: #929
+#945 := [monotonicity #930 #942]: #944
+#953 := [trans #945 #951]: #952
+#679 := [intro-def]: #678
+#954 := [mp #679 #953]: #949
+#955 := [not-or-elim #954]: #928
+#2024 := [unit-resolution #955 #2023]: #148
+#956 := [not-or-elim #954]: #940
+#2025 := [unit-resolution #956 #2024]: #937
+#2026 := (or #921 #919)
+#2027 := [th-lemma]: #2026
+#2028 := [unit-resolution #2027 #2022]: #919
+#2029 := (or #922 #147 #935)
+#2030 := [th-lemma]: #2029
+#2031 := [unit-resolution #2030 #2024 #2028]: #935
+#1243 := (or #936 #933)
+#1244 := [def-axiom]: #1243
+#2032 := [unit-resolution #1244 #2031 #2025]: false
+#2033 := [lemma #2032]: #921
+decl z3name!7 :: int
+#829 := z3name!7
+decl uf_9 :: int
+#43 := uf_9
+#1159 := (+ uf_9 z3name!7)
+#1160 := (<= #1159 0::int)
+#838 := (* -1::int z3name!7)
+#1148 := (+ uf_9 #838)
+#1147 := (>= #1148 0::int)
+decl z3name!4 :: int
+#751 := z3name!4
+#760 := (* -1::int z3name!4)
+decl uf_6 :: int
+#25 := uf_6
+#1034 := (+ uf_6 #760)
+#1033 := (>= #1034 0::int)
+#1035 := (<= #1034 0::int)
+#1037 := (not #1035)
+#1036 := (not #1033)
+#1038 := (or #1036 #1037)
+#1039 := (not #1038)
+#288 := (>= uf_6 0::int)
+#893 := (+ uf_2 z3name!0)
+#895 := (>= #893 0::int)
+#897 := (not #895)
+#894 := (<= #893 0::int)
+#896 := (not #894)
+#898 := (or #896 #897)
+#899 := (not #898)
+#100 := (>= uf_2 0::int)
+#101 := (not #100)
+#1736 := [hypothesis]: #885
+#1225 := (or #886 #883)
+#1226 := [def-axiom]: #1225
+#1737 := [unit-resolution #1226 #1736]: #886
+#887 := (not #886)
+#890 := (or #101 #887)
+#902 := (or #100 #899)
+#909 := (not #902)
+#908 := (not #890)
+#910 := (or #908 #909)
+#911 := (not #910)
+#82 := (* -1::int uf_2)
+#650 := (= z3name!0 #82)
+#651 := (or #100 #650)
+#648 := (= z3name!0 uf_2)
+#649 := (or #101 #648)
+#652 := (and #649 #651)
+#914 := (iff #652 #911)
+#905 := (and #890 #902)
+#912 := (iff #905 #911)
+#913 := [rewrite]: #912
+#906 := (iff #652 #905)
+#903 := (iff #651 #902)
+#900 := (iff #650 #899)
+#901 := [rewrite]: #900
+#904 := [monotonicity #901]: #903
+#891 := (iff #649 #890)
+#888 := (iff #648 #887)
+#889 := [rewrite]: #888
+#892 := [monotonicity #889]: #891
+#907 := [monotonicity #892 #904]: #906
+#915 := [trans #907 #913]: #914
+#653 := [intro-def]: #652
+#916 := [mp #653 #915]: #911
+#917 := [not-or-elim #916]: #890
+#1738 := [unit-resolution #917 #1737]: #101
+#918 := [not-or-elim #916]: #902
+#1739 := [unit-resolution #918 #1738]: #899
+#1231 := (or #898 #895)
+#1232 := [def-axiom]: #1231
+#1740 := [unit-resolution #1232 #1739]: #895
+#1741 := [th-lemma #1736 #1738 #1740]: false
+#1742 := [lemma #1741]: #883
+#1149 := (<= #1148 0::int)
+#1151 := (not #1149)
+#1150 := (not #1147)
+#1152 := (or #1150 #1151)
+#1153 := (not #1152)
+#429 := (>= uf_9 0::int)
+decl z3name!6 :: int
+#803 := z3name!6
+#812 := (* -1::int z3name!6)
+decl uf_8 :: int
+#37 := uf_8
+#1110 := (+ uf_8 #812)
+#1111 := (<= #1110 0::int)
+#1113 := (not #1111)
+#1109 := (>= #1110 0::int)
+#1112 := (not #1109)
+#1114 := (or #1112 #1113)
+#1865 := [hypothesis]: #1113
+#1297 := (or #1114 #1111)
+#1298 := [def-axiom]: #1297
+#1866 := [unit-resolution #1298 #1865]: #1114
+#382 := (>= uf_8 0::int)
+#1685 := (or #1111 #1109)
+#1686 := [th-lemma]: #1685
+#1867 := [unit-resolution #1686 #1865]: #1109
+#1734 := (or #382 #1112)
+#1121 := (+ uf_8 z3name!6)
+#1123 := (>= #1121 0::int)
+#1125 := (not #1123)
+#1122 := (<= #1121 0::int)
+#1124 := (not #1122)
+#1126 := (or #1124 #1125)
+#1127 := (not #1126)
+#383 := (not #382)
+#1428 := [hypothesis]: #383
+#1130 := (or #382 #1127)
+#1137 := (not #1130)
+#1115 := (not #1114)
+#1118 := (or #383 #1115)
+#1136 := (not #1118)
+#1138 := (or #1136 #1137)
+#1139 := (not #1138)
+#365 := (* -1::int uf_8)
+#806 := (= z3name!6 #365)
+#807 := (or #382 #806)
+#804 := (= z3name!6 uf_8)
+#805 := (or #383 #804)
+#808 := (and #805 #807)
+#1142 := (iff #808 #1139)
+#1133 := (and #1118 #1130)
+#1140 := (iff #1133 #1139)
+#1141 := [rewrite]: #1140
+#1134 := (iff #808 #1133)
+#1131 := (iff #807 #1130)
+#1128 := (iff #806 #1127)
+#1129 := [rewrite]: #1128
+#1132 := [monotonicity #1129]: #1131
+#1119 := (iff #805 #1118)
+#1116 := (iff #804 #1115)
+#1117 := [rewrite]: #1116
+#1120 := [monotonicity #1117]: #1119
+#1135 := [monotonicity #1120 #1132]: #1134
+#1143 := [trans #1135 #1141]: #1142
+#809 := [intro-def]: #808
+#1144 := [mp #809 #1143]: #1139
+#1146 := [not-or-elim #1144]: #1130
+#1729 := [unit-resolution #1146 #1428]: #1127
+#1637 := [hypothesis]: #1109
+#1730 := (or #1112 #1125 #382)
+#1731 := [th-lemma]: #1730
+#1732 := [unit-resolution #1731 #1428 #1637]: #1125
+#1303 := (or #1126 #1123)
+#1304 := [def-axiom]: #1303
+#1733 := [unit-resolution #1304 #1732 #1729]: false
+#1735 := [lemma #1733]: #1734
+#1868 := [unit-resolution #1735 #1867]: #382
+#1145 := [not-or-elim #1144]: #1118
+#1869 := [unit-resolution #1145 #1868 #1866]: false
+#1870 := [lemma #1869]: #1111
+#289 := (not #288)
+#1405 := [hypothesis]: #289
+#1688 := (or #288 #429 #1113)
+#815 := (+ uf_9 #812)
+#818 := (+ uf_7 #815)
+#825 := (>= #818 0::int)
+#389 := (ite #382 uf_8 #365)
+#400 := (* -1::int #389)
+#401 := (+ uf_9 #400)
+#402 := (+ uf_7 #401)
+#599 := (>= #402 0::int)
+#826 := (= #599 #825)
+#819 := (~ #402 #818)
+#816 := (~ #401 #815)
+#813 := (~ #400 #812)
+#810 := (~ #389 z3name!6)
+#811 := [apply-def #809]: #810
+#814 := [monotonicity #811]: #813
+#817 := [monotonicity #814]: #816
+#820 := [monotonicity #817]: #819
+#827 := [monotonicity #820]: #826
+#601 := (not #599)
+#598 := (<= #402 0::int)
+#600 := (not #598)
+#602 := (or #600 #601)
+#603 := (not #602)
+#403 := (= #402 0::int)
+#604 := (iff #403 #603)
+#605 := [rewrite]: #604
+#45 := (- uf_8)
+#44 := (< uf_8 0::int)
+#46 := (ite #44 #45 uf_8)
+#47 := (- #46 uf_7)
+#48 := (= uf_9 #47)
+#408 := (iff #48 #403)
+#368 := (ite #44 #365 uf_8)
+#374 := (+ #318 #368)
+#379 := (= uf_9 #374)
+#406 := (iff #379 #403)
+#394 := (+ #318 #389)
+#397 := (= uf_9 #394)
+#404 := (iff #397 #403)
+#405 := [rewrite]: #404
+#398 := (iff #379 #397)
+#395 := (= #374 #394)
+#392 := (= #368 #389)
+#386 := (ite #383 #365 uf_8)
+#390 := (= #386 #389)
+#391 := [rewrite]: #390
+#387 := (= #368 #386)
+#384 := (iff #44 #383)
+#385 := [rewrite]: #384
+#388 := [monotonicity #385]: #387
+#393 := [trans #388 #391]: #392
+#396 := [monotonicity #393]: #395
+#399 := [monotonicity #396]: #398
+#407 := [trans #399 #405]: #406
+#380 := (iff #48 #379)
+#377 := (= #47 #374)
+#371 := (- #368 uf_7)
+#375 := (= #371 #374)
+#376 := [rewrite]: #375
+#372 := (= #47 #371)
+#369 := (= #46 #368)
+#366 := (= #45 #365)
+#367 := [rewrite]: #366
+#370 := [monotonicity #367]: #369
+#373 := [monotonicity #370]: #372
+#378 := [trans #373 #376]: #377
+#381 := [monotonicity #378]: #380
+#409 := [trans #381 #407]: #408
+#364 := [asserted]: #48
+#410 := [mp #364 #409]: #403
+#606 := [mp #410 #605]: #603
+#608 := [not-or-elim #606]: #599
+#828 := [mp~ #608 #827]: #825
+#1441 := [hypothesis]: #1075
+#1285 := (or #1076 #1073)
+#1286 := [def-axiom]: #1285
+#1442 := [unit-resolution #1286 #1441]: #1076
+#1107 := [not-or-elim #1106]: #1080
+#1443 := [unit-resolution #1107 #1442]: #336
+#1444 := [unit-resolution #1108 #1443]: #1089
+#1291 := (or #1088 #1085)
+#1292 := [def-axiom]: #1291
+#1445 := [unit-resolution #1292 #1444]: #1085
+#1446 := [th-lemma #1441 #1445 #1443]: false
+#1447 := [lemma #1446]: #1073
+#789 := (+ uf_8 #786)
+#792 := (+ uf_6 #789)
+#799 := (>= #792 0::int)
+#342 := (ite #335 uf_7 #318)
+#353 := (* -1::int #342)
+#354 := (+ uf_8 #353)
+#355 := (+ uf_6 #354)
+#588 := (>= #355 0::int)
+#800 := (= #588 #799)
+#793 := (~ #355 #792)
+#790 := (~ #354 #789)
+#787 := (~ #353 #786)
+#784 := (~ #342 z3name!5)
+#785 := [apply-def #783]: #784
+#788 := [monotonicity #785]: #787
+#791 := [monotonicity #788]: #790
+#794 := [monotonicity #791]: #793
+#801 := [monotonicity #794]: #800
+#590 := (not #588)
+#587 := (<= #355 0::int)
+#589 := (not #587)
+#591 := (or #589 #590)
+#592 := (not #591)
+#356 := (= #355 0::int)
+#593 := (iff #356 #592)
+#594 := [rewrite]: #593
+#39 := (- uf_7)
+#38 := (< uf_7 0::int)
+#40 := (ite #38 #39 uf_7)
+#41 := (- #40 uf_6)
+#42 := (= uf_8 #41)
+#361 := (iff #42 #356)
+#321 := (ite #38 #318 uf_7)
+#271 := (* -1::int uf_6)
+#327 := (+ #271 #321)
+#332 := (= uf_8 #327)
+#359 := (iff #332 #356)
+#347 := (+ #271 #342)
+#350 := (= uf_8 #347)
+#357 := (iff #350 #356)
+#358 := [rewrite]: #357
+#351 := (iff #332 #350)
+#348 := (= #327 #347)
+#345 := (= #321 #342)
+#339 := (ite #336 #318 uf_7)
+#343 := (= #339 #342)
+#344 := [rewrite]: #343
+#340 := (= #321 #339)
+#337 := (iff #38 #336)
+#338 := [rewrite]: #337
+#341 := [monotonicity #338]: #340
+#346 := [trans #341 #344]: #345
+#349 := [monotonicity #346]: #348
+#352 := [monotonicity #349]: #351
+#360 := [trans #352 #358]: #359
+#333 := (iff #42 #332)
+#330 := (= #41 #327)
+#324 := (- #321 uf_6)
+#328 := (= #324 #327)
+#329 := [rewrite]: #328
+#325 := (= #41 #324)
+#322 := (= #40 #321)
+#319 := (= #39 #318)
+#320 := [rewrite]: #319
+#323 := [monotonicity #320]: #322
+#326 := [monotonicity #323]: #325
+#331 := [trans #326 #329]: #330
+#334 := [monotonicity #331]: #333
+#362 := [trans #334 #360]: #361
+#317 := [asserted]: #42
+#363 := [mp #317 #362]: #356
+#595 := [mp #363 #594]: #592
+#597 := [not-or-elim #595]: #588
+#802 := [mp~ #597 #801]: #799
+#1343 := (not #825)
+#1350 := (not #799)
+#1351 := (or #288 #1075 #1350 #429 #1113 #1343)
+#1352 := [th-lemma]: #1351
+#1689 := [unit-resolution #1352 #802 #1447 #828]: #1688
+#2046 := [unit-resolution #1689 #1405 #1870]: #429
+#430 := (not #429)
+#1156 := (or #430 #1153)
+#1161 := (>= #1159 0::int)
+#1163 := (not #1161)
+#1162 := (not #1160)
+#1164 := (or #1162 #1163)
+#1165 := (not #1164)
+#1168 := (or #429 #1165)
+#1175 := (not #1168)
+#1174 := (not #1156)
+#1176 := (or #1174 #1175)
+#1177 := (not #1176)
+#412 := (* -1::int uf_9)
+#832 := (= z3name!7 #412)
+#833 := (or #429 #832)
+#830 := (= z3name!7 uf_9)
+#831 := (or #430 #830)
+#834 := (and #831 #833)
+#1180 := (iff #834 #1177)
+#1171 := (and #1156 #1168)
+#1178 := (iff #1171 #1177)
+#1179 := [rewrite]: #1178
+#1172 := (iff #834 #1171)
+#1169 := (iff #833 #1168)
+#1166 := (iff #832 #1165)
+#1167 := [rewrite]: #1166
+#1170 := [monotonicity #1167]: #1169
+#1157 := (iff #831 #1156)
+#1154 := (iff #830 #1153)
+#1155 := [rewrite]: #1154
+#1158 := [monotonicity #1155]: #1157
+#1173 := [monotonicity #1158 #1170]: #1172
+#1181 := [trans #1173 #1179]: #1180
+#835 := [intro-def]: #834
+#1182 := [mp #835 #1181]: #1177
+#1183 := [not-or-elim #1182]: #1156
+#2047 := [unit-resolution #1183 #2046]: #1153
+#1307 := (or #1152 #1147)
+#1308 := [def-axiom]: #1307
+#2112 := [unit-resolution #1308 #2047]: #1147
+#2009 := (or #288 #382)
+#1998 := (or #1036 #288)
+#1045 := (+ uf_6 z3name!4)
+#1047 := (>= #1045 0::int)
+#1049 := (not #1047)
+#1046 := (<= #1045 0::int)
+#1048 := (not #1046)
+#1050 := (or #1048 #1049)
+#1460 := [hypothesis]: #1049
+#1279 := (or #1050 #1047)
+#1280 := [def-axiom]: #1279
+#1461 := [unit-resolution #1280 #1460]: #1050
+#1464 := (or #1047 #289)
+#1051 := (not #1050)
+#1448 := [hypothesis]: #1037
+#1273 := (or #1038 #1035)
+#1274 := [def-axiom]: #1273
+#1449 := [unit-resolution #1274 #1448]: #1038
+#1042 := (or #289 #1039)
+#1054 := (or #288 #1051)
+#1061 := (not #1054)
+#1060 := (not #1042)
+#1062 := (or #1060 #1061)
+#1063 := (not #1062)
+#754 := (= z3name!4 #271)
+#755 := (or #288 #754)
+#752 := (= z3name!4 uf_6)
+#753 := (or #289 #752)
+#756 := (and #753 #755)
+#1066 := (iff #756 #1063)
+#1057 := (and #1042 #1054)
+#1064 := (iff #1057 #1063)
+#1065 := [rewrite]: #1064
+#1058 := (iff #756 #1057)
+#1055 := (iff #755 #1054)
+#1052 := (iff #754 #1051)
+#1053 := [rewrite]: #1052
+#1056 := [monotonicity #1053]: #1055
+#1043 := (iff #753 #1042)
+#1040 := (iff #752 #1039)
+#1041 := [rewrite]: #1040
+#1044 := [monotonicity #1041]: #1043
+#1059 := [monotonicity #1044 #1056]: #1058
+#1067 := [trans #1059 #1065]: #1066
+#757 := [intro-def]: #756
+#1068 := [mp #757 #1067]: #1063
+#1069 := [not-or-elim #1068]: #1042
+#1450 := [unit-resolution #1069 #1449]: #289
+#1070 := [not-or-elim #1068]: #1054
+#1451 := [unit-resolution #1070 #1450]: #1051
+#1452 := (or #1035 #1033)
+#1453 := [th-lemma]: #1452
+#1454 := [unit-resolution #1453 #1448]: #1033
+#1455 := (or #1036 #288 #1049)
+#1456 := [th-lemma]: #1455
+#1457 := [unit-resolution #1456 #1450 #1454]: #1049
+#1458 := [unit-resolution #1280 #1457 #1451]: false
+#1459 := [lemma #1458]: #1035
+#1462 := (or #1047 #1037 #289)
+#1463 := [th-lemma]: #1462
+#1465 := [unit-resolution #1463 #1459]: #1464
+#1466 := [unit-resolution #1465 #1460]: #289
+#1467 := [unit-resolution #1070 #1466 #1461]: false
+#1468 := [lemma #1467]: #1047
+#1999 := [unit-resolution #1456 #1468]: #1998
+#2000 := [unit-resolution #1999 #1405]: #1036
+#1407 := [unit-resolution #1070 #1405]: #1051
+#1277 := (or #1050 #1046)
+#1278 := [def-axiom]: #1277
+#1497 := [unit-resolution #1278 #1407]: #1046
+#2001 := (or #336 #1048 #1033 #382 #1350 #1075)
+#2002 := [th-lemma]: #2001
+#2003 := [unit-resolution #2002 #1497 #2000 #1447 #802 #1428]: #336
+#2004 := (or #1087 #1075 #1048 #1033 #382 #1350)
+#2005 := [th-lemma]: #2004
+#2006 := [unit-resolution #2005 #1497 #1447 #2000 #802 #1428]: #1087
+#2007 := [unit-resolution #1292 #2006]: #1088
+#2008 := [unit-resolution #1108 #2007 #2003]: false
+#2010 := [lemma #2008]: #2009
+#2113 := [unit-resolution #2010 #1405]: #382
+#2114 := [unit-resolution #1145 #2113]: #1115
+#1295 := (or #1114 #1109)
+#1296 := [def-axiom]: #1295
+#2115 := [unit-resolution #1296 #2114]: #1109
+decl z3name!2 :: int
+#699 := z3name!2
+#708 := (* -1::int z3name!2)
+#958 := (+ uf_4 #708)
+#957 := (>= #958 0::int)
+#959 := (<= #958 0::int)
+#961 := (not #959)
+#960 := (not #957)
+#962 := (or #960 #961)
+#963 := (not #962)
+decl uf_5 :: int
+#19 := uf_5
+#241 := (>= uf_5 0::int)
+#242 := (not #241)
+#1406 := [hypothesis]: #242
+#1579 := (or #1048 #241)
+#516 := (>= #514 0::int)
+#476 := (>= uf_10 0::int)
+#477 := (not #476)
+#1484 := (or #382 #241)
+#1430 := (or #382 #241 #1075 #1037)
+#1421 := [hypothesis]: #1035
+#1427 := [hypothesis]: #1073
+#763 := (+ uf_7 #760)
+#766 := (+ uf_5 #763)
+#773 := (>= #766 0::int)
+#295 := (ite #288 uf_6 #271)
+#306 := (* -1::int #295)
+#307 := (+ uf_7 #306)
+#308 := (+ uf_5 #307)
+#577 := (>= #308 0::int)
+#774 := (= #577 #773)
+#767 := (~ #308 #766)
+#764 := (~ #307 #763)
+#761 := (~ #306 #760)
+#758 := (~ #295 z3name!4)
+#759 := [apply-def #757]: #758
+#762 := [monotonicity #759]: #761
+#765 := [monotonicity #762]: #764
+#768 := [monotonicity #765]: #767
+#775 := [monotonicity #768]: #774
+#579 := (not #577)
+#576 := (<= #308 0::int)
+#578 := (not #576)
+#580 := (or #578 #579)
+#581 := (not #580)
+#309 := (= #308 0::int)
+#582 := (iff #309 #581)
+#583 := [rewrite]: #582
+#33 := (- uf_6)
+#32 := (< uf_6 0::int)
+#34 := (ite #32 #33 uf_6)
+#35 := (- #34 uf_5)
+#36 := (= uf_7 #35)
+#314 := (iff #36 #309)
+#274 := (ite #32 #271 uf_6)
+#224 := (* -1::int uf_5)
+#280 := (+ #224 #274)
+#285 := (= uf_7 #280)
+#312 := (iff #285 #309)
+#300 := (+ #224 #295)
+#303 := (= uf_7 #300)
+#310 := (iff #303 #309)
+#311 := [rewrite]: #310
+#304 := (iff #285 #303)
+#301 := (= #280 #300)
+#298 := (= #274 #295)
+#292 := (ite #289 #271 uf_6)
+#296 := (= #292 #295)
+#297 := [rewrite]: #296
+#293 := (= #274 #292)
+#290 := (iff #32 #289)
+#291 := [rewrite]: #290
+#294 := [monotonicity #291]: #293
+#299 := [trans #294 #297]: #298
+#302 := [monotonicity #299]: #301
+#305 := [monotonicity #302]: #304
+#313 := [trans #305 #311]: #312
+#286 := (iff #36 #285)
+#283 := (= #35 #280)
+#277 := (- #274 uf_5)
+#281 := (= #277 #280)
+#282 := [rewrite]: #281
+#278 := (= #35 #277)
+#275 := (= #34 #274)
+#272 := (= #33 #271)
+#273 := [rewrite]: #272
+#276 := [monotonicity #273]: #275
+#279 := [monotonicity #276]: #278
+#284 := [trans #279 #282]: #283
+#287 := [monotonicity #284]: #286
+#315 := [trans #287 #313]: #314
+#270 := [asserted]: #36
+#316 := [mp #270 #315]: #309
+#584 := [mp #316 #583]: #581
+#586 := [not-or-elim #584]: #577
+#776 := [mp~ #586 #775]: #773
+#1429 := [th-lemma #776 #1406 #1428 #1427 #802 #1421]: false
+#1431 := [lemma #1429]: #1430
+#1485 := [unit-resolution #1431 #1447 #1459]: #1484
+#1486 := [unit-resolution #1485 #1406]: #382
+#1487 := [unit-resolution #1145 #1486]: #1115
+#1496 := [unit-resolution #1298 #1487]: #1111
+#1545 := [hypothesis]: #1046
+#1548 := (or #1048 #1113 #429)
+#1546 := (or #1048 #1113 #429 #1343 #1075 #1350 #1037)
+#1547 := [th-lemma]: #1546
+#1549 := [unit-resolution #1547 #1447 #802 #1459 #828]: #1548
+#1550 := [unit-resolution #1549 #1545 #1496]: #429
+#1551 := [unit-resolution #1183 #1550]: #1153
+#1552 := [unit-resolution #1308 #1551]: #1147
+#1543 := (or #477 #241 #1150)
+#1488 := [unit-resolution #1296 #1487]: #1109
+#821 := (<= #818 0::int)
+#822 := (= #598 #821)
+#823 := [monotonicity #820]: #822
+#607 := [not-or-elim #606]: #598
+#824 := [mp~ #607 #823]: #821
+#841 := (+ uf_10 #838)
+#844 := (+ uf_8 #841)
+#847 := (<= #844 0::int)
+#436 := (ite #429 uf_9 #412)
+#447 := (* -1::int #436)
+#448 := (+ uf_10 #447)
+#449 := (+ uf_8 #448)
+#609 := (<= #449 0::int)
+#848 := (= #609 #847)
+#845 := (~ #449 #844)
+#842 := (~ #448 #841)
+#839 := (~ #447 #838)
+#836 := (~ #436 z3name!7)
+#837 := [apply-def #835]: #836
+#840 := [monotonicity #837]: #839
+#843 := [monotonicity #840]: #842
+#846 := [monotonicity #843]: #845
+#849 := [monotonicity #846]: #848
+#610 := (>= #449 0::int)
+#612 := (not #610)
+#611 := (not #609)
+#613 := (or #611 #612)
+#614 := (not #613)
+#450 := (= #449 0::int)
+#615 := (iff #450 #614)
+#616 := [rewrite]: #615
+#51 := (- uf_9)
+#50 := (< uf_9 0::int)
+#52 := (ite #50 #51 uf_9)
+#53 := (- #52 uf_8)
+#54 := (= uf_10 #53)
+#455 := (iff #54 #450)
+#415 := (ite #50 #412 uf_9)
+#421 := (+ #365 #415)
+#426 := (= uf_10 #421)
+#453 := (iff #426 #450)
+#441 := (+ #365 #436)
+#444 := (= uf_10 #441)
+#451 := (iff #444 #450)
+#452 := [rewrite]: #451
+#445 := (iff #426 #444)
+#442 := (= #421 #441)
+#439 := (= #415 #436)
+#433 := (ite #430 #412 uf_9)
+#437 := (= #433 #436)
+#438 := [rewrite]: #437
+#434 := (= #415 #433)
+#431 := (iff #50 #430)
+#432 := [rewrite]: #431
+#435 := [monotonicity #432]: #434
+#440 := [trans #435 #438]: #439
+#443 := [monotonicity #440]: #442
+#446 := [monotonicity #443]: #445
+#454 := [trans #446 #452]: #453
+#427 := (iff #54 #426)
+#424 := (= #53 #421)
+#418 := (- #415 uf_8)
+#422 := (= #418 #421)
+#423 := [rewrite]: #422
+#419 := (= #53 #418)
+#416 := (= #52 #415)
+#413 := (= #51 #412)
+#414 := [rewrite]: #413
+#417 := [monotonicity #414]: #416
+#420 := [monotonicity #417]: #419
+#425 := [trans #420 #423]: #424
+#428 := [monotonicity #425]: #427
+#456 := [trans #428 #454]: #455
+#411 := [asserted]: #54
+#457 := [mp #411 #456]: #450
+#617 := [mp #457 #616]: #614
+#618 := [not-or-elim #617]: #609
+#850 := [mp~ #618 #849]: #847
+#1540 := [hypothesis]: #1147
+#1541 := [hypothesis]: #476
+#1542 := [th-lemma #1468 #1406 #1541 #1540 #850 #824 #1488 #776 #1459]: false
+#1544 := [lemma #1542]: #1543
+#1553 := [unit-resolution #1544 #1552 #1406]: #477
+#851 := (>= #844 0::int)
+#852 := (= #610 #851)
+#853 := [monotonicity #846]: #852
+#619 := [not-or-elim #617]: #610
+#854 := [mp~ #619 #853]: #851
+#1309 := (or #1152 #1149)
+#1310 := [def-axiom]: #1309
+#1554 := [unit-resolution #1310 #1551]: #1149
+#769 := (<= #766 0::int)
+#770 := (= #576 #769)
+#771 := [monotonicity #768]: #770
+#585 := [not-or-elim #584]: #576
+#772 := [mp~ #585 #771]: #769
+decl z3name!3 :: int
+#725 := z3name!3
+#1007 := (+ uf_5 z3name!3)
+#1009 := (>= #1007 0::int)
+#1011 := (not #1009)
+#1398 := [hypothesis]: #1011
+#734 := (* -1::int z3name!3)
+#996 := (+ uf_5 #734)
+#997 := (<= #996 0::int)
+#999 := (not #997)
+#995 := (>= #996 0::int)
+#998 := (not #995)
+#1000 := (or #998 #999)
+#1001 := (not #1000)
+#1008 := (<= #1007 0::int)
+#1010 := (not #1008)
+#1012 := (or #1010 #1011)
+#1267 := (or #1012 #1009)
+#1268 := [def-axiom]: #1267
+#1399 := [unit-resolution #1268 #1398]: #1012
+#1013 := (not #1012)
+#1016 := (or #241 #1013)
+#1023 := (not #1016)
+#1004 := (or #242 #1001)
+#1022 := (not #1004)
+#1024 := (or #1022 #1023)
+#1025 := (not #1024)
+#728 := (= z3name!3 #224)
+#729 := (or #241 #728)
+#726 := (= z3name!3 uf_5)
+#727 := (or #242 #726)
+#730 := (and #727 #729)
+#1028 := (iff #730 #1025)
+#1019 := (and #1004 #1016)
+#1026 := (iff #1019 #1025)
+#1027 := [rewrite]: #1026
+#1020 := (iff #730 #1019)
+#1017 := (iff #729 #1016)
+#1014 := (iff #728 #1013)
+#1015 := [rewrite]: #1014
+#1018 := [monotonicity #1015]: #1017
+#1005 := (iff #727 #1004)
+#1002 := (iff #726 #1001)
+#1003 := [rewrite]: #1002
+#1006 := [monotonicity #1003]: #1005
+#1021 := [monotonicity #1006 #1018]: #1020
+#1029 := [trans #1021 #1027]: #1028
+#731 := [intro-def]: #730
+#1030 := [mp #731 #1029]: #1025
+#1032 := [not-or-elim #1030]: #1016
+#1400 := [unit-resolution #1032 #1399]: #241
+#1031 := [not-or-elim #1030]: #1004
+#1401 := [unit-resolution #1031 #1400]: #1001
+#1261 := (or #1000 #997)
+#1262 := [def-axiom]: #1261
+#1402 := [unit-resolution #1262 #1401]: #997
+#1403 := [th-lemma #1400 #1402 #1398]: false
+#1404 := [lemma #1403]: #1009
+#737 := (+ uf_6 #734)
+#740 := (+ uf_4 #737)
+#747 := (>= #740 0::int)
+#248 := (ite #241 uf_5 #224)
+#259 := (* -1::int #248)
+#260 := (+ uf_6 #259)
+#261 := (+ uf_4 #260)
+#566 := (>= #261 0::int)
+#748 := (= #566 #747)
+#741 := (~ #261 #740)
+#738 := (~ #260 #737)
+#735 := (~ #259 #734)
+#732 := (~ #248 z3name!3)
+#733 := [apply-def #731]: #732
+#736 := [monotonicity #733]: #735
+#739 := [monotonicity #736]: #738
+#742 := [monotonicity #739]: #741
+#749 := [monotonicity #742]: #748
+#568 := (not #566)
+#565 := (<= #261 0::int)
+#567 := (not #565)
+#569 := (or #567 #568)
+#570 := (not #569)
+#262 := (= #261 0::int)
+#571 := (iff #262 #570)
+#572 := [rewrite]: #571
+#27 := (- uf_5)
+#26 := (< uf_5 0::int)
+#28 := (ite #26 #27 uf_5)
+#29 := (- #28 uf_4)
+#30 := (= uf_6 #29)
+#267 := (iff #30 #262)
+#227 := (ite #26 #224 uf_5)
+#177 := (* -1::int uf_4)
+#233 := (+ #177 #227)
+#238 := (= uf_6 #233)
+#265 := (iff #238 #262)
+#253 := (+ #177 #248)
+#256 := (= uf_6 #253)
+#263 := (iff #256 #262)
+#264 := [rewrite]: #263
+#257 := (iff #238 #256)
+#254 := (= #233 #253)
+#251 := (= #227 #248)
+#245 := (ite #242 #224 uf_5)
+#249 := (= #245 #248)
+#250 := [rewrite]: #249
+#246 := (= #227 #245)
+#243 := (iff #26 #242)
+#244 := [rewrite]: #243
+#247 := [monotonicity #244]: #246
+#252 := [trans #247 #250]: #251
+#255 := [monotonicity #252]: #254
+#258 := [monotonicity #255]: #257
+#266 := [trans #258 #264]: #265
+#239 := (iff #30 #238)
+#236 := (= #29 #233)
+#230 := (- #227 uf_4)
+#234 := (= #230 #233)
+#235 := [rewrite]: #234
+#231 := (= #29 #230)
+#228 := (= #28 #227)
+#225 := (= #27 #224)
+#226 := [rewrite]: #225
+#229 := [monotonicity #226]: #228
+#232 := [monotonicity #229]: #231
+#237 := [trans #232 #235]: #236
+#240 := [monotonicity #237]: #239
+#268 := [trans #240 #266]: #267
+#223 := [asserted]: #30
+#269 := [mp #223 #268]: #262
+#573 := [mp #269 #572]: #570
+#575 := [not-or-elim #573]: #566
+#750 := [mp~ #575 #749]: #747
+#1364 := (not #747)
+#1357 := (not #769)
+#1337 := (not #851)
+#1555 := (or #194 #476 #1151 #1337 #1343 #1113 #1048 #1357 #1364 #1011)
+#1556 := [th-lemma]: #1555
+#1557 := [unit-resolution #1556 #1545 #750 #1404 #772 #1496 #828 #1554 #854 #1553]: #194
+#195 := (not #194)
+#966 := (or #195 #963)
+#969 := (+ uf_4 z3name!2)
+#971 := (>= #969 0::int)
+#973 := (not #971)
+#970 := (<= #969 0::int)
+#972 := (not #970)
+#974 := (or #972 #973)
+#975 := (not #974)
+#978 := (or #194 #975)
+#985 := (not #978)
+#984 := (not #966)
+#986 := (or #984 #985)
+#987 := (not #986)
+#702 := (= z3name!2 #177)
+#703 := (or #194 #702)
+#700 := (= z3name!2 uf_4)
+#701 := (or #195 #700)
+#704 := (and #701 #703)
+#990 := (iff #704 #987)
+#981 := (and #966 #978)
+#988 := (iff #981 #987)
+#989 := [rewrite]: #988
+#982 := (iff #704 #981)
+#979 := (iff #703 #978)
+#976 := (iff #702 #975)
+#977 := [rewrite]: #976
+#980 := [monotonicity #977]: #979
+#967 := (iff #701 #966)
+#964 := (iff #700 #963)
+#965 := [rewrite]: #964
+#968 := [monotonicity #965]: #967
+#983 := [monotonicity #968 #980]: #982
+#991 := [trans #983 #989]: #990
+#705 := [intro-def]: #704
+#992 := [mp #705 #991]: #987
+#993 := [not-or-elim #992]: #966
+#1558 := [unit-resolution #993 #1557]: #963
+#1249 := (or #962 #959)
+#1250 := [def-axiom]: #1249
+#1559 := [unit-resolution #1250 #1558]: #959
+decl z3name!8 :: int
+#855 := z3name!8
+#864 := (* -1::int z3name!8)
+#867 := (+ uf_11 #864)
+#870 := (+ uf_9 #867)
+#873 := (<= #870 0::int)
+#483 := (ite #476 uf_10 #459)
+#494 := (* -1::int #483)
+#495 := (+ uf_11 #494)
+#496 := (+ uf_9 #495)
+#620 := (<= #496 0::int)
+#874 := (= #620 #873)
+#871 := (~ #496 #870)
+#868 := (~ #495 #867)
+#865 := (~ #494 #864)
+#862 := (~ #483 z3name!8)
+#858 := (= z3name!8 #459)
+#859 := (or #476 #858)
+#856 := (= z3name!8 uf_10)
+#857 := (or #477 #856)
+#860 := (and #857 #859)
+#861 := [intro-def]: #860
+#863 := [apply-def #861]: #862
+#866 := [monotonicity #863]: #865
+#869 := [monotonicity #866]: #868
+#872 := [monotonicity #869]: #871
+#875 := [monotonicity #872]: #874
+#621 := (>= #496 0::int)
+#623 := (not #621)
+#622 := (not #620)
+#624 := (or #622 #623)
+#625 := (not #624)
+#497 := (= #496 0::int)
+#626 := (iff #497 #625)
+#627 := [rewrite]: #626
+#57 := (- uf_10)
+#56 := (< uf_10 0::int)
+#58 := (ite #56 #57 uf_10)
+#59 := (- #58 uf_9)
+#60 := (= uf_11 #59)
+#502 := (iff #60 #497)
+#462 := (ite #56 #459 uf_10)
+#468 := (+ #412 #462)
+#473 := (= uf_11 #468)
+#500 := (iff #473 #497)
+#488 := (+ #412 #483)
+#491 := (= uf_11 #488)
+#498 := (iff #491 #497)
+#499 := [rewrite]: #498
+#492 := (iff #473 #491)
+#489 := (= #468 #488)
+#486 := (= #462 #483)
+#480 := (ite #477 #459 uf_10)
+#484 := (= #480 #483)
+#485 := [rewrite]: #484
+#481 := (= #462 #480)
+#478 := (iff #56 #477)
+#479 := [rewrite]: #478
+#482 := [monotonicity #479]: #481
+#487 := [trans #482 #485]: #486
+#490 := [monotonicity #487]: #489
+#493 := [monotonicity #490]: #492
+#501 := [trans #493 #499]: #500
+#474 := (iff #60 #473)
+#471 := (= #59 #468)
+#465 := (- #462 uf_9)
+#469 := (= #465 #468)
+#470 := [rewrite]: #469
+#466 := (= #59 #465)
+#463 := (= #58 #462)
+#460 := (= #57 #459)
+#461 := [rewrite]: #460
+#464 := [monotonicity #461]: #463
+#467 := [monotonicity #464]: #466
+#472 := [trans #467 #470]: #471
+#475 := [monotonicity #472]: #474
+#503 := [trans #475 #501]: #502
+#458 := [asserted]: #60
+#504 := [mp #458 #503]: #497
+#628 := [mp #504 #627]: #625
+#629 := [not-or-elim #628]: #620
+#876 := [mp~ #629 #875]: #873
+#1197 := (+ uf_10 z3name!8)
+#1198 := (<= #1197 0::int)
+#1199 := (>= #1197 0::int)
+#1201 := (not #1199)
+#1200 := (not #1198)
+#1202 := (or #1200 #1201)
+#1203 := (not #1202)
+#1206 := (or #476 #1203)
+#1213 := (not #1206)
+#1186 := (+ uf_10 #864)
+#1187 := (<= #1186 0::int)
+#1189 := (not #1187)
+#1185 := (>= #1186 0::int)
+#1188 := (not #1185)
+#1190 := (or #1188 #1189)
+#1191 := (not #1190)
+#1194 := (or #477 #1191)
+#1212 := (not #1194)
+#1214 := (or #1212 #1213)
+#1215 := (not #1214)
+#1218 := (iff #860 #1215)
+#1209 := (and #1194 #1206)
+#1216 := (iff #1209 #1215)
+#1217 := [rewrite]: #1216
+#1210 := (iff #860 #1209)
+#1207 := (iff #859 #1206)
+#1204 := (iff #858 #1203)
+#1205 := [rewrite]: #1204
+#1208 := [monotonicity #1205]: #1207
+#1195 := (iff #857 #1194)
+#1192 := (iff #856 #1191)
+#1193 := [rewrite]: #1192
+#1196 := [monotonicity #1193]: #1195
+#1211 := [monotonicity #1196 #1208]: #1210
+#1219 := [trans #1211 #1217]: #1218
+#1220 := [mp #861 #1219]: #1215
+#1222 := [not-or-elim #1220]: #1206
+#1560 := [unit-resolution #1222 #1553]: #1203
+#1325 := (or #1202 #1198)
+#1326 := [def-axiom]: #1325
+#1561 := [unit-resolution #1326 #1560]: #1198
+#711 := (+ uf_5 #708)
+#714 := (+ uf_1 #711)
+#721 := (>= #714 0::int)
+#201 := (ite #194 uf_4 #177)
+#212 := (* -1::int #201)
+#213 := (+ uf_5 #212)
+#214 := (+ uf_1 #213)
+#555 := (>= #214 0::int)
+#722 := (= #555 #721)
+#715 := (~ #214 #714)
+#712 := (~ #213 #711)
+#709 := (~ #212 #708)
+#706 := (~ #201 z3name!2)
+#707 := [apply-def #705]: #706
+#710 := [monotonicity #707]: #709
+#713 := [monotonicity #710]: #712
+#716 := [monotonicity #713]: #715
+#723 := [monotonicity #716]: #722
+#557 := (not #555)
+#554 := (<= #214 0::int)
+#556 := (not #554)
+#558 := (or #556 #557)
+#559 := (not #558)
+#215 := (= #214 0::int)
+#560 := (iff #215 #559)
+#561 := [rewrite]: #560
+#21 := (- uf_4)
+#20 := (< uf_4 0::int)
+#22 := (ite #20 #21 uf_4)
+#23 := (- #22 uf_1)
+#24 := (= uf_5 #23)
+#220 := (iff #24 #215)
+#180 := (ite #20 #177 uf_4)
+#186 := (+ #130 #180)
+#191 := (= uf_5 #186)
+#218 := (iff #191 #215)
+#206 := (+ #130 #201)
+#209 := (= uf_5 #206)
+#216 := (iff #209 #215)
+#217 := [rewrite]: #216
+#210 := (iff #191 #209)
+#207 := (= #186 #206)
+#204 := (= #180 #201)
+#198 := (ite #195 #177 uf_4)
+#202 := (= #198 #201)
+#203 := [rewrite]: #202
+#199 := (= #180 #198)
+#196 := (iff #20 #195)
+#197 := [rewrite]: #196
+#200 := [monotonicity #197]: #199
+#205 := [trans #200 #203]: #204
+#208 := [monotonicity #205]: #207
+#211 := [monotonicity #208]: #210
+#219 := [trans #211 #217]: #218
+#192 := (iff #24 #191)
+#189 := (= #23 #186)
+#183 := (- #180 uf_1)
+#187 := (= #183 #186)
+#188 := [rewrite]: #187
+#184 := (= #23 #183)
+#181 := (= #22 #180)
+#178 := (= #21 #177)
+#179 := [rewrite]: #178
+#182 := [monotonicity #179]: #181
+#185 := [monotonicity #182]: #184
+#190 := [trans #185 #188]: #189
+#193 := [monotonicity #190]: #192
+#221 := [trans #193 #219]: #220
+#176 := [asserted]: #24
+#222 := [mp #176 #221]: #215
+#562 := [mp #222 #561]: #559
+#564 := [not-or-elim #562]: #555
+#724 := [mp~ #564 #723]: #721
+#685 := (+ uf_4 #682)
+#688 := (+ uf_2 #685)
+#695 := (>= #688 0::int)
+#154 := (ite #147 uf_1 #130)
+#165 := (* -1::int #154)
+#166 := (+ uf_4 #165)
+#167 := (+ uf_2 #166)
+#544 := (>= #167 0::int)
+#696 := (= #544 #695)
+#689 := (~ #167 #688)
+#686 := (~ #166 #685)
+#683 := (~ #165 #682)
+#680 := (~ #154 z3name!1)
+#681 := [apply-def #679]: #680
+#684 := [monotonicity #681]: #683
+#687 := [monotonicity #684]: #686
+#690 := [monotonicity #687]: #689
+#697 := [monotonicity #690]: #696
+#546 := (not #544)
+#543 := (<= #167 0::int)
+#545 := (not #543)
+#547 := (or #545 #546)
+#548 := (not #547)
+#168 := (= #167 0::int)
+#549 := (iff #168 #548)
+#550 := [rewrite]: #549
+#15 := (- uf_1)
+#14 := (< uf_1 0::int)
+#16 := (ite #14 #15 uf_1)
+#17 := (- #16 uf_2)
+#18 := (= uf_4 #17)
+#173 := (iff #18 #168)
+#133 := (ite #14 #130 uf_1)
+#139 := (+ #82 #133)
+#144 := (= uf_4 #139)
+#171 := (iff #144 #168)
+#159 := (+ #82 #154)
+#162 := (= uf_4 #159)
+#169 := (iff #162 #168)
+#170 := [rewrite]: #169
+#163 := (iff #144 #162)
+#160 := (= #139 #159)
+#157 := (= #133 #154)
+#151 := (ite #148 #130 uf_1)
+#155 := (= #151 #154)
+#156 := [rewrite]: #155
+#152 := (= #133 #151)
+#149 := (iff #14 #148)
+#150 := [rewrite]: #149
+#153 := [monotonicity #150]: #152
+#158 := [trans #153 #156]: #157
+#161 := [monotonicity #158]: #160
+#164 := [monotonicity #161]: #163
+#172 := [trans #164 #170]: #171
+#145 := (iff #18 #144)
+#142 := (= #17 #139)
+#136 := (- #133 uf_2)
+#140 := (= #136 #139)
+#141 := [rewrite]: #140
+#137 := (= #17 #136)
+#134 := (= #16 #133)
+#131 := (= #15 #130)
+#132 := [rewrite]: #131
+#135 := [monotonicity #132]: #134
+#138 := [monotonicity #135]: #137
+#143 := [trans #138 #141]: #142
+#146 := [monotonicity #143]: #145
+#174 := [trans #146 #172]: #173
+#129 := [asserted]: #18
+#175 := [mp #129 #174]: #168
+#551 := [mp #175 #550]: #548
+#553 := [not-or-elim #551]: #544
+#698 := [mp~ #553 #697]: #695
+#1373 := (not #721)
+#1562 := (or #147 #1373 #961 #241 #195)
+#1563 := [th-lemma]: #1562
+#1564 := [unit-resolution #1563 #1559 #1557 #724 #1406]: #147
+#1565 := [unit-resolution #955 #1564]: #925
+#1566 := [unit-resolution #1238 #1565]: #921
+#1372 := (not #873)
+#1371 := (not #695)
+#1498 := (or #516 #923 #1373 #1371 #1372 #1343 #1200 #1075 #1350 #1113 #961 #1151 #1337 #1048 #1357)
+#1499 := [th-lemma]: #1498
+#1567 := [unit-resolution #1499 #1566 #698 #724 #1545 #772 #1447 #802 #1496 #828 #1554 #854 #1561 #876 #1559]: #516
+#1247 := (or #962 #957)
+#1248 := [def-axiom]: #1247
+#1568 := [unit-resolution #1248 #1558]: #957
+#877 := (>= #870 0::int)
+#878 := (= #621 #877)
+#879 := [monotonicity #872]: #878
+#630 := [not-or-elim #628]: #621
+#880 := [mp~ #630 #879]: #877
+#1327 := (or #1202 #1199)
+#1328 := [def-axiom]: #1327
+#1569 := [unit-resolution #1328 #1560]: #1199
+#795 := (<= #792 0::int)
+#796 := (= #587 #795)
+#797 := [monotonicity #794]: #796
+#596 := [not-or-elim #595]: #587
+#798 := [mp~ #596 #797]: #795
+#1503 := (or #335 #1049 #241)
+#1425 := (or #335 #1049 #241 #1037)
+#1422 := [hypothesis]: #336
+#1423 := [hypothesis]: #1047
+#1424 := [th-lemma #1423 #1422 #776 #1406 #1421]: false
+#1426 := [lemma #1424]: #1425
+#1504 := [unit-resolution #1426 #1459]: #1503
+#1505 := [unit-resolution #1504 #1406 #1468]: #335
+#1506 := [unit-resolution #1107 #1505]: #1077
+#1283 := (or #1076 #1071)
+#1284 := [def-axiom]: #1283
+#1507 := [unit-resolution #1284 #1506]: #1071
+#717 := (<= #714 0::int)
+#718 := (= #554 #717)
+#719 := [monotonicity #716]: #718
+#563 := [not-or-elim #562]: #554
+#720 := [mp~ #563 #719]: #717
+#691 := (<= #688 0::int)
+#692 := (= #543 #691)
+#693 := [monotonicity #690]: #692
+#552 := [not-or-elim #551]: #543
+#694 := [mp~ #552 #693]: #691
+#1235 := (or #924 #919)
+#1236 := [def-axiom]: #1235
+#1570 := [unit-resolution #1236 #1565]: #919
+#1409 := (not #773)
+#1489 := (not #847)
+#1358 := (not #795)
+#1365 := (not #821)
+#1511 := (not #877)
+#1510 := (not #691)
+#1509 := (not #717)
+#1512 := (or #515 #922 #1509 #1510 #1511 #1365 #1201 #1074 #1358 #1112 #960 #1150 #1489 #1049 #1409)
+#1513 := [th-lemma]: #1512
+#1571 := [unit-resolution #1513 #1570 #694 #720 #1468 #776 #1507 #798 #1488 #824 #1552 #850 #1569 #880 #1568]: #515
+#506 := (<= #508 0::int)
+#659 := (+ uf_3 #656)
+#662 := (+ uf_1 #659)
+#665 := (<= #662 0::int)
+#107 := (ite #100 uf_2 #82)
+#118 := (* -1::int #107)
+#119 := (+ uf_3 #118)
+#120 := (+ uf_1 #119)
+#532 := (<= #120 0::int)
+#666 := (= #532 #665)
+#663 := (~ #120 #662)
+#660 := (~ #119 #659)
+#657 := (~ #118 #656)
+#654 := (~ #107 z3name!0)
+#655 := [apply-def #653]: #654
+#658 := [monotonicity #655]: #657
+#661 := [monotonicity #658]: #660
+#664 := [monotonicity #661]: #663
+#667 := [monotonicity #664]: #666
+#533 := (>= #120 0::int)
+#535 := (not #533)
+#534 := (not #532)
+#536 := (or #534 #535)
+#537 := (not #536)
+#121 := (= #120 0::int)
+#538 := (iff #121 #537)
+#539 := [rewrite]: #538
+#8 := (- uf_2)
+#7 := (< uf_2 0::int)
+#9 := (ite #7 #8 uf_2)
+#11 := (- #9 uf_3)
+#12 := (= uf_1 #11)
+#126 := (iff #12 #121)
+#85 := (ite #7 #82 uf_2)
+#91 := (* -1::int uf_3)
+#92 := (+ #91 #85)
+#97 := (= uf_1 #92)
+#124 := (iff #97 #121)
+#112 := (+ #91 #107)
+#115 := (= uf_1 #112)
+#122 := (iff #115 #121)
+#123 := [rewrite]: #122
+#116 := (iff #97 #115)
+#113 := (= #92 #112)
+#110 := (= #85 #107)
+#104 := (ite #101 #82 uf_2)
+#108 := (= #104 #107)
+#109 := [rewrite]: #108
+#105 := (= #85 #104)
+#102 := (iff #7 #101)
+#103 := [rewrite]: #102
+#106 := [monotonicity #103]: #105
+#111 := [trans #106 #109]: #110
+#114 := [monotonicity #111]: #113
+#117 := [monotonicity #114]: #116
+#125 := [trans #117 #123]: #124
+#98 := (iff #12 #97)
+#95 := (= #11 #92)
+#88 := (- #85 uf_3)
+#93 := (= #88 #92)
+#94 := [rewrite]: #93
+#89 := (= #11 #88)
+#86 := (= #9 #85)
+#83 := (= #8 #82)
+#84 := [rewrite]: #83
+#87 := [monotonicity #84]: #86
+#90 := [monotonicity #87]: #89
+#96 := [trans #90 #94]: #95
+#99 := [monotonicity #96]: #98
+#127 := [trans #99 #125]: #126
+#80 := [asserted]: #12
+#128 := [mp #80 #127]: #121
+#540 := [mp #128 #539]: #537
+#541 := [not-or-elim #540]: #532
+#668 := [mp~ #541 #667]: #665
+#1515 := (or #100 #241 #923 #1373 #1371 #961)
+#1516 := [th-lemma]: #1515
+#1572 := [unit-resolution #1516 #1566 #698 #1559 #724 #1406]: #100
+#1573 := [u