added proof reconstructon for Z3,
authorboehmes
Tue, 20 Oct 2009 10:11:30 +0200
changeset 3300639f73a59e855
parent 33005 b0ff69f0a248
child 33007 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
     1.1 --- a/CONTRIBUTORS	Tue Oct 20 08:10:47 2009 +0200
     1.2 +++ b/CONTRIBUTORS	Tue Oct 20 10:11:30 2009 +0200
     1.3 @@ -7,10 +7,13 @@
     1.4  Contributions to this Isabelle version
     1.5  --------------------------------------
     1.6  
     1.7 -* Oktober 2009: Florian Haftmann, TUM
     1.8 +* October 2009: Sascha Boehme, TUM
     1.9 +  Extension of SMT method: proof-reconstruction for the SMT solver Z3
    1.10 +
    1.11 +* October 2009: Florian Haftmann, TUM
    1.12    Refinement of parts of the HOL datatype package
    1.13  
    1.14 -* Oktober 2009: Florian Haftmann, TUM
    1.15 +* October 2009: Florian Haftmann, TUM
    1.16    Generic term styles for term antiquotations
    1.17  
    1.18  * September 2009: Thomas Sewell, NICTA
     2.1 --- a/NEWS	Tue Oct 20 08:10:47 2009 +0200
     2.2 +++ b/NEWS	Tue Oct 20 10:11:30 2009 +0200
     2.3 @@ -46,7 +46,9 @@
     2.4  arithmetic, and fixed-size bitvectors; there is also basic
     2.5  support for higher-order features (esp. lambda abstractions).
     2.6  It is an incomplete decision procedure based on external SMT
     2.7 -solvers using the oracle mechanism.
     2.8 +solvers using the oracle mechanism; for the SMT solver Z3,
     2.9 +this method is proof-producing. Certificates are provided to
    2.10 +avoid calling the external solvers solely for re-checking proofs.
    2.11  
    2.12  * Reorganization of number theory:
    2.13    * former session NumberTheory now named Old_Number_Theory
     3.1 --- a/src/HOL/IsaMakefile	Tue Oct 20 08:10:47 2009 +0200
     3.2 +++ b/src/HOL/IsaMakefile	Tue Oct 20 10:11:30 2009 +0200
     3.3 @@ -6,7 +6,7 @@
     3.4  
     3.5  default: HOL
     3.6  generate: HOL-Generate-HOL HOL-Generate-HOLLight
     3.7 -images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-Word TLA HOL4
     3.8 +images: HOL HOL-Base HOL-Plain HOL-Main HOL-Algebra HOL-Nominal HOL-NSA HOL-SMT HOL-Word TLA HOL4
     3.9  
    3.10  #Note: keep targets sorted (except for HOL-Library and HOL-ex)
    3.11  test: \
    3.12 @@ -40,7 +40,7 @@
    3.13    HOL-Prolog \
    3.14    HOL-SET-Protocol \
    3.15    HOL-SizeChange \
    3.16 -  HOL-SMT \
    3.17 +  HOL-SMT-Examples \
    3.18    HOL-Statespace \
    3.19    HOL-Subst \
    3.20        TLA-Buffer \
    3.21 @@ -1146,15 +1146,222 @@
    3.22  
    3.23  HOL-SMT: HOL-Word $(LOG)/HOL-SMT.gz
    3.24  
    3.25 -$(LOG)/HOL-SMT.gz: $(OUT)/HOL-Word SMT/SMT_Definitions.thy SMT/SMT.thy \
    3.26 +$(LOG)/HOL-SMT.gz: $(OUT)/HOL-Word SMT/SMT_Base.thy SMT/Z3.thy SMT/SMT.thy \
    3.27    SMT/Tools/smt_normalize.ML SMT/Tools/smt_monomorph.ML \
    3.28    SMT/Tools/smt_translate.ML SMT/Tools/smt_builtin.ML \
    3.29    SMT/Tools/smtlib_interface.ML SMT/Tools/smt_solver.ML \
    3.30    SMT/Tools/cvc3_solver.ML SMT/Tools/yices_solver.ML \
    3.31 -  SMT/Tools/z3_interface.ML SMT/Tools/z3_solver.ML SMT/Tools/z3_model.ML
    3.32 +  SMT/Tools/z3_proof_terms.ML SMT/Tools/z3_proof_rules.ML \
    3.33 +  SMT/Tools/z3_proof.ML SMT/Tools/z3_model.ML SMT/Tools/z3_interface.ML \
    3.34 +  SMT/Tools/z3_solver.ML
    3.35  	@cd SMT; $(ISABELLE_TOOL) usedir -b -g true $(OUT)/HOL-Word HOL-SMT
    3.36  
    3.37  
    3.38 +## HOL-SMT-Examples
    3.39 +
    3.40 +HOL-SMT-Examples: HOL-SMT $(LOG)/HOL-SMT-Examples.gz
    3.41 +
    3.42 +$(LOG)/HOL-SMT-Examples.gz: $(OUT)/HOL-SMT SMT/Examples/ROOT.ML	\
    3.43 +  SMT/Examples/SMT_Examples.thy \
    3.44 +  SMT/Examples/cert/z3_arith_quant_01 \
    3.45 +  SMT/Examples/cert/z3_arith_quant_01.proof \
    3.46 +  SMT/Examples/cert/z3_arith_quant_02 \
    3.47 +  SMT/Examples/cert/z3_arith_quant_02.proof \
    3.48 +  SMT/Examples/cert/z3_arith_quant_03 \
    3.49 +  SMT/Examples/cert/z3_arith_quant_03.proof \
    3.50 +  SMT/Examples/cert/z3_arith_quant_04 \
    3.51 +  SMT/Examples/cert/z3_arith_quant_04.proof \
    3.52 +  SMT/Examples/cert/z3_arith_quant_05 \
    3.53 +  SMT/Examples/cert/z3_arith_quant_05.proof \
    3.54 +  SMT/Examples/cert/z3_arith_quant_06 \
    3.55 +  SMT/Examples/cert/z3_arith_quant_06.proof \
    3.56 +  SMT/Examples/cert/z3_arith_quant_07 \
    3.57 +  SMT/Examples/cert/z3_arith_quant_07.proof \
    3.58 +  SMT/Examples/cert/z3_arith_quant_08 \
    3.59 +  SMT/Examples/cert/z3_arith_quant_08.proof \
    3.60 +  SMT/Examples/cert/z3_arith_quant_09 \
    3.61 +  SMT/Examples/cert/z3_arith_quant_09.proof \
    3.62 +  SMT/Examples/cert/z3_arith_quant_10 \
    3.63 +  SMT/Examples/cert/z3_arith_quant_10.proof \
    3.64 +  SMT/Examples/cert/z3_arith_quant_11 \
    3.65 +  SMT/Examples/cert/z3_arith_quant_11.proof \
    3.66 +  SMT/Examples/cert/z3_arith_quant_12 \
    3.67 +  SMT/Examples/cert/z3_arith_quant_12.proof \
    3.68 +  SMT/Examples/cert/z3_arith_quant_13 \
    3.69 +  SMT/Examples/cert/z3_arith_quant_13.proof \
    3.70 +  SMT/Examples/cert/z3_arith_quant_14 \
    3.71 +  SMT/Examples/cert/z3_arith_quant_14.proof \
    3.72 +  SMT/Examples/cert/z3_arith_quant_15 \
    3.73 +  SMT/Examples/cert/z3_arith_quant_15.proof \
    3.74 +  SMT/Examples/cert/z3_arith_quant_16 \
    3.75 +  SMT/Examples/cert/z3_arith_quant_16.proof \
    3.76 +  SMT/Examples/cert/z3_arith_quant_17 \
    3.77 +  SMT/Examples/cert/z3_arith_quant_17.proof \
    3.78 +  SMT/Examples/cert/z3_arith_quant_18 \
    3.79 +  SMT/Examples/cert/z3_arith_quant_18.proof \
    3.80 +  SMT/Examples/cert/z3_bv_01 \
    3.81 +  SMT/Examples/cert/z3_bv_01.proof \
    3.82 +  SMT/Examples/cert/z3_bv_02 \
    3.83 +  SMT/Examples/cert/z3_bv_02.proof \
    3.84 +  SMT/Examples/cert/z3_bv_arith_01 \
    3.85 +  SMT/Examples/cert/z3_bv_arith_01.proof \
    3.86 +  SMT/Examples/cert/z3_bv_arith_02 \
    3.87 +  SMT/Examples/cert/z3_bv_arith_02.proof \
    3.88 +  SMT/Examples/cert/z3_bv_arith_03 \
    3.89 +  SMT/Examples/cert/z3_bv_arith_03.proof \
    3.90 +  SMT/Examples/cert/z3_bv_arith_04 \
    3.91 +  SMT/Examples/cert/z3_bv_arith_04.proof \
    3.92 +  SMT/Examples/cert/z3_bv_arith_05 \
    3.93 +  SMT/Examples/cert/z3_bv_arith_05.proof \
    3.94 +  SMT/Examples/cert/z3_bv_arith_06 \
    3.95 +  SMT/Examples/cert/z3_bv_arith_06.proof \
    3.96 +  SMT/Examples/cert/z3_bv_arith_07 \
    3.97 +  SMT/Examples/cert/z3_bv_arith_07.proof \
    3.98 +  SMT/Examples/cert/z3_bv_arith_08 \
    3.99 +  SMT/Examples/cert/z3_bv_arith_08.proof \
   3.100 +  SMT/Examples/cert/z3_bv_arith_09 \
   3.101 +  SMT/Examples/cert/z3_bv_arith_09.proof \
   3.102 +  SMT/Examples/cert/z3_bv_arith_10 \
   3.103 +  SMT/Examples/cert/z3_bv_arith_10.proof \
   3.104 +  SMT/Examples/cert/z3_bv_bit_01 \
   3.105 +  SMT/Examples/cert/z3_bv_bit_01.proof \
   3.106 +  SMT/Examples/cert/z3_bv_bit_02 \
   3.107 +  SMT/Examples/cert/z3_bv_bit_02.proof \
   3.108 +  SMT/Examples/cert/z3_bv_bit_03 \
   3.109 +  SMT/Examples/cert/z3_bv_bit_03.proof \
   3.110 +  SMT/Examples/cert/z3_bv_bit_04 \
   3.111 +  SMT/Examples/cert/z3_bv_bit_04.proof \
   3.112 +  SMT/Examples/cert/z3_bv_bit_05 \
   3.113 +  SMT/Examples/cert/z3_bv_bit_05.proof \
   3.114 +  SMT/Examples/cert/z3_bv_bit_06 \
   3.115 +  SMT/Examples/cert/z3_bv_bit_06.proof \
   3.116 +  SMT/Examples/cert/z3_bv_bit_07 \
   3.117 +  SMT/Examples/cert/z3_bv_bit_07.proof \
   3.118 +  SMT/Examples/cert/z3_bv_bit_08 \
   3.119 +  SMT/Examples/cert/z3_bv_bit_08.proof \
   3.120 +  SMT/Examples/cert/z3_bv_bit_09 \
   3.121 +  SMT/Examples/cert/z3_bv_bit_09.proof \
   3.122 +  SMT/Examples/cert/z3_bv_bit_10 \
   3.123 +  SMT/Examples/cert/z3_bv_bit_10.proof \
   3.124 +  SMT/Examples/cert/z3_bv_bit_11 \
   3.125 +  SMT/Examples/cert/z3_bv_bit_11.proof \
   3.126 +  SMT/Examples/cert/z3_bv_bit_12 \
   3.127 +  SMT/Examples/cert/z3_bv_bit_12.proof \
   3.128 +  SMT/Examples/cert/z3_bv_bit_13 \
   3.129 +  SMT/Examples/cert/z3_bv_bit_13.proof \
   3.130 +  SMT/Examples/cert/z3_bv_bit_14 \
   3.131 +  SMT/Examples/cert/z3_bv_bit_14.proof \
   3.132 +  SMT/Examples/cert/z3_bv_bit_15 \
   3.133 +  SMT/Examples/cert/z3_bv_bit_15.proof \
   3.134 +  SMT/Examples/cert/z3_fol_01 \
   3.135 +  SMT/Examples/cert/z3_fol_01.proof \
   3.136 +  SMT/Examples/cert/z3_fol_02 \
   3.137 +  SMT/Examples/cert/z3_fol_02.proof \
   3.138 +  SMT/Examples/cert/z3_fol_03 \
   3.139 +  SMT/Examples/cert/z3_fol_03.proof \
   3.140 +  SMT/Examples/cert/z3_fol_04 \
   3.141 +  SMT/Examples/cert/z3_fol_04.proof \
   3.142 +  SMT/Examples/cert/z3_hol_01 \
   3.143 +  SMT/Examples/cert/z3_hol_01.proof \
   3.144 +  SMT/Examples/cert/z3_hol_02 \
   3.145 +  SMT/Examples/cert/z3_hol_02.proof \
   3.146 +  SMT/Examples/cert/z3_hol_03 \
   3.147 +  SMT/Examples/cert/z3_hol_03.proof \
   3.148 +  SMT/Examples/cert/z3_hol_04 \
   3.149 +  SMT/Examples/cert/z3_hol_04.proof \
   3.150 +  SMT/Examples/cert/z3_hol_05 \
   3.151 +  SMT/Examples/cert/z3_hol_05.proof \
   3.152 +  SMT/Examples/cert/z3_hol_06 \
   3.153 +  SMT/Examples/cert/z3_hol_06.proof \
   3.154 +  SMT/Examples/cert/z3_hol_07 \
   3.155 +  SMT/Examples/cert/z3_hol_07.proof \
   3.156 +  SMT/Examples/cert/z3_hol_08 \
   3.157 +  SMT/Examples/cert/z3_hol_08.proof \
   3.158 +  SMT/Examples/cert/z3_linarith_01 \
   3.159 +  SMT/Examples/cert/z3_linarith_01.proof \
   3.160 +  SMT/Examples/cert/z3_linarith_02 \
   3.161 +  SMT/Examples/cert/z3_linarith_02.proof \
   3.162 +  SMT/Examples/cert/z3_linarith_03 \
   3.163 +  SMT/Examples/cert/z3_linarith_03.proof \
   3.164 +  SMT/Examples/cert/z3_linarith_04 \
   3.165 +  SMT/Examples/cert/z3_linarith_04.proof \
   3.166 +  SMT/Examples/cert/z3_linarith_05 \
   3.167 +  SMT/Examples/cert/z3_linarith_05.proof \
   3.168 +  SMT/Examples/cert/z3_linarith_06 \
   3.169 +  SMT/Examples/cert/z3_linarith_06.proof \
   3.170 +  SMT/Examples/cert/z3_linarith_07 \
   3.171 +  SMT/Examples/cert/z3_linarith_07.proof \
   3.172 +  SMT/Examples/cert/z3_linarith_08 \
   3.173 +  SMT/Examples/cert/z3_linarith_08.proof \
   3.174 +  SMT/Examples/cert/z3_linarith_09 \
   3.175 +  SMT/Examples/cert/z3_linarith_09.proof \
   3.176 +  SMT/Examples/cert/z3_linarith_10 \
   3.177 +  SMT/Examples/cert/z3_linarith_10.proof \
   3.178 +  SMT/Examples/cert/z3_linarith_11 \
   3.179 +  SMT/Examples/cert/z3_linarith_11.proof \
   3.180 +  SMT/Examples/cert/z3_linarith_12 \
   3.181 +  SMT/Examples/cert/z3_linarith_12.proof \
   3.182 +  SMT/Examples/cert/z3_linarith_13 \
   3.183 +  SMT/Examples/cert/z3_linarith_13.proof \
   3.184 +  SMT/Examples/cert/z3_linarith_14 \
   3.185 +  SMT/Examples/cert/z3_linarith_14.proof \
   3.186 +  SMT/Examples/cert/z3_linarith_15 \
   3.187 +  SMT/Examples/cert/z3_linarith_15.proof \
   3.188 +  SMT/Examples/cert/z3_linarith_16 \
   3.189 +  SMT/Examples/cert/z3_linarith_16.proof \
   3.190 +  SMT/Examples/cert/z3_mono_01 \
   3.191 +  SMT/Examples/cert/z3_mono_01.proof \
   3.192 +  SMT/Examples/cert/z3_mono_02 \
   3.193 +  SMT/Examples/cert/z3_mono_02.proof \
   3.194 +  SMT/Examples/cert/z3_nat_arith_01 \
   3.195 +  SMT/Examples/cert/z3_nat_arith_01.proof \
   3.196 +  SMT/Examples/cert/z3_nat_arith_02 \
   3.197 +  SMT/Examples/cert/z3_nat_arith_02.proof \
   3.198 +  SMT/Examples/cert/z3_nat_arith_03 \
   3.199 +  SMT/Examples/cert/z3_nat_arith_03.proof \
   3.200 +  SMT/Examples/cert/z3_nat_arith_04 \
   3.201 +  SMT/Examples/cert/z3_nat_arith_04.proof \
   3.202 +  SMT/Examples/cert/z3_nat_arith_05 \
   3.203 +  SMT/Examples/cert/z3_nat_arith_05.proof \
   3.204 +  SMT/Examples/cert/z3_nat_arith_06 \
   3.205 +  SMT/Examples/cert/z3_nat_arith_06.proof \
   3.206 +  SMT/Examples/cert/z3_nat_arith_07 \
   3.207 +  SMT/Examples/cert/z3_nat_arith_07.proof \
   3.208 +  SMT/Examples/cert/z3_nlarith_01 \
   3.209 +  SMT/Examples/cert/z3_nlarith_01.proof \
   3.210 +  SMT/Examples/cert/z3_nlarith_02 \
   3.211 +  SMT/Examples/cert/z3_nlarith_02.proof \
   3.212 +  SMT/Examples/cert/z3_nlarith_03 \
   3.213 +  SMT/Examples/cert/z3_nlarith_03.proof \
   3.214 +  SMT/Examples/cert/z3_nlarith_04 \
   3.215 +  SMT/Examples/cert/z3_nlarith_04.proof \
   3.216 +  SMT/Examples/cert/z3_pair_01 \
   3.217 +  SMT/Examples/cert/z3_pair_01.proof \
   3.218 +  SMT/Examples/cert/z3_pair_02 \
   3.219 +  SMT/Examples/cert/z3_pair_02.proof \
   3.220 +  SMT/Examples/cert/z3_prop_01 \
   3.221 +  SMT/Examples/cert/z3_prop_01.proof \
   3.222 +  SMT/Examples/cert/z3_prop_02 \
   3.223 +  SMT/Examples/cert/z3_prop_02.proof \
   3.224 +  SMT/Examples/cert/z3_prop_03 \
   3.225 +  SMT/Examples/cert/z3_prop_03.proof \
   3.226 +  SMT/Examples/cert/z3_prop_04 \
   3.227 +  SMT/Examples/cert/z3_prop_04.proof \
   3.228 +  SMT/Examples/cert/z3_prop_05 \
   3.229 +  SMT/Examples/cert/z3_prop_05.proof \
   3.230 +  SMT/Examples/cert/z3_prop_06 \
   3.231 +  SMT/Examples/cert/z3_prop_06.proof \
   3.232 +  SMT/Examples/cert/z3_prop_07 \
   3.233 +  SMT/Examples/cert/z3_prop_07.proof \
   3.234 +  SMT/Examples/cert/z3_prop_08 \
   3.235 +  SMT/Examples/cert/z3_prop_08.proof \
   3.236 +  SMT/Examples/cert/z3_prop_09 \
   3.237 +  SMT/Examples/cert/z3_prop_09.proof \
   3.238 +  SMT/Examples/cert/z3_prop_10 \
   3.239 +  SMT/Examples/cert/z3_prop_10.proof
   3.240 +	@cd SMT; $(ISABELLE_TOOL) usedir $(OUT)/HOL-SMT Examples
   3.241 +
   3.242 +
   3.243  ## clean
   3.244  
   3.245  clean:
   3.246 @@ -1177,4 +1384,6 @@
   3.247  		$(LOG)/HOL-Unix.gz $(OUT)/HOL-Word $(LOG)/HOL-Word.gz	\
   3.248  		$(LOG)/HOL-Word-Examples.gz $(OUT)/HOL-NSA		\
   3.249  		$(LOG)/HOL-NSA.gz $(LOG)/HOL-NSA-Examples.gz            \
   3.250 -                $(LOG)/HOL-Mirabelle.gz $(LOG)/HOL-SMT.gz
   3.251 +                $(LOG)/HOL-Mirabelle.gz $(LOG)/HOL-SMT.gz               \
   3.252 +                $(LOG)/HOL-SMT-Examples.gz
   3.253 +
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/src/HOL/SMT/Examples/ROOT.ML	Tue Oct 20 10:11:30 2009 +0200
     4.3 @@ -0,0 +1,1 @@
     4.4 +use_thy "SMT_Examples";
     5.1 --- a/src/HOL/SMT/Examples/SMT_Examples.thy	Tue Oct 20 08:10:47 2009 +0200
     5.2 +++ b/src/HOL/SMT/Examples/SMT_Examples.thy	Tue Oct 20 10:11:30 2009 +0200
     5.3 @@ -5,35 +5,361 @@
     5.4  header {* Examples for the 'smt' tactic. *}
     5.5  
     5.6  theory SMT_Examples
     5.7 -imports "../SMT"
     5.8 +imports SMT
     5.9  begin
    5.10  
    5.11 -declare [[smt_solver=z3, z3_proofs=false]]
    5.12 -declare [[smt_trace=false]]
    5.13 +declare [[smt_solver=z3, z3_proofs=true]]
    5.14  
    5.15  
    5.16  section {* Propositional and first-order logic *}
    5.17  
    5.18 -lemma "True" by smt
    5.19 -lemma "p \<or> \<not>p" by smt
    5.20 -lemma "(p \<and> True) = p" by smt
    5.21 -lemma "(p \<or> q) \<and> \<not>p \<Longrightarrow> q" by smt
    5.22 -lemma "(a \<and> b) \<or> (c \<and> d) \<Longrightarrow> (a \<and> b) \<or> (c \<and> d)" by smt
    5.23 -lemma "P=P=P=P=P=P=P=P=P=P" by smt
    5.24 +lemma "True"
    5.25 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_01"]]
    5.26 +  by smt
    5.27 +
    5.28 +lemma "p \<or> \<not>p"
    5.29 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_02"]]
    5.30 +  by smt
    5.31 +
    5.32 +lemma "(p \<and> True) = p"
    5.33 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_03"]]
    5.34 +  by smt
    5.35 +
    5.36 +lemma "(p \<or> q) \<and> \<not>p \<Longrightarrow> q"
    5.37 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_04"]]
    5.38 +  by smt
    5.39 +
    5.40 +lemma "(a \<and> b) \<or> (c \<and> d) \<Longrightarrow> (a \<and> b) \<or> (c \<and> d)"
    5.41 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_05"]]
    5.42 +  using [[z3_proofs=false]] (* no Z3 proof *)
    5.43 +  by smt
    5.44 +
    5.45 +lemma "(p1 \<and> p2) \<or> p3 \<longrightarrow> (p1 \<longrightarrow> (p3 \<and> p2) \<or> (p1 \<and> p3)) \<or> p1"
    5.46 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_06"]]
    5.47 +  by smt
    5.48 +
    5.49 +lemma "P=P=P=P=P=P=P=P=P=P"
    5.50 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_07"]]
    5.51 +  by smt
    5.52 +
    5.53 +lemma 
    5.54 +  assumes "a | b | c | d"
    5.55 +      and "e | f | (a & d)"
    5.56 +      and "~(a | (c & ~c)) | b"
    5.57 +      and "~(b & (x | ~x)) | c"
    5.58 +      and "~(d | False) | c"
    5.59 +      and "~(c | (~p & (p | (q & ~q))))"
    5.60 +  shows False
    5.61 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_08"]]
    5.62 +  using assms by smt
    5.63  
    5.64  axiomatization symm_f :: "'a \<Rightarrow> 'a \<Rightarrow> 'a" where
    5.65    symm_f: "symm_f x y = symm_f y x"
    5.66 -lemma "a = a \<and> symm_f a b = symm_f b a" by (smt add: symm_f)
    5.67 +lemma "a = a \<and> symm_f a b = symm_f b a"
    5.68 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_09"]]
    5.69 +  by (smt add: symm_f)
    5.70  
    5.71 +(* 
    5.72 +Taken from ~~/src/HOL/ex/SAT_Examples.thy.
    5.73 +Translated from TPTP problem library: PUZ015-2.006.dimacs
    5.74 +*)
    5.75 +lemma 
    5.76 +  assumes "~x0"
    5.77 +  and "~x30"
    5.78 +  and "~x29"
    5.79 +  and "~x59"
    5.80 +  and "x1 | x31 | x0"
    5.81 +  and "x2 | x32 | x1"
    5.82 +  and "x3 | x33 | x2"
    5.83 +  and "x4 | x34 | x3"
    5.84 +  and "x35 | x4"
    5.85 +  and "x5 | x36 | x30"
    5.86 +  and "x6 | x37 | x5 | x31"
    5.87 +  and "x7 | x38 | x6 | x32"
    5.88 +  and "x8 | x39 | x7 | x33"
    5.89 +  and "x9 | x40 | x8 | x34"
    5.90 +  and "x41 | x9 | x35"
    5.91 +  and "x10 | x42 | x36"
    5.92 +  and "x11 | x43 | x10 | x37"
    5.93 +  and "x12 | x44 | x11 | x38"
    5.94 +  and "x13 | x45 | x12 | x39"
    5.95 +  and "x14 | x46 | x13 | x40"
    5.96 +  and "x47 | x14 | x41"
    5.97 +  and "x15 | x48 | x42"
    5.98 +  and "x16 | x49 | x15 | x43"
    5.99 +  and "x17 | x50 | x16 | x44"
   5.100 +  and "x18 | x51 | x17 | x45"
   5.101 +  and "x19 | x52 | x18 | x46"
   5.102 +  and "x53 | x19 | x47"
   5.103 +  and "x20 | x54 | x48"
   5.104 +  and "x21 | x55 | x20 | x49"
   5.105 +  and "x22 | x56 | x21 | x50"
   5.106 +  and "x23 | x57 | x22 | x51"
   5.107 +  and "x24 | x58 | x23 | x52"
   5.108 +  and "x59 | x24 | x53"
   5.109 +  and "x25 | x54"
   5.110 +  and "x26 | x25 | x55"
   5.111 +  and "x27 | x26 | x56"
   5.112 +  and "x28 | x27 | x57"
   5.113 +  and "x29 | x28 | x58"
   5.114 +  and "~x1 | ~x31"
   5.115 +  and "~x1 | ~x0"
   5.116 +  and "~x31 | ~x0"
   5.117 +  and "~x2 | ~x32"
   5.118 +  and "~x2 | ~x1"
   5.119 +  and "~x32 | ~x1"
   5.120 +  and "~x3 | ~x33"
   5.121 +  and "~x3 | ~x2"
   5.122 +  and "~x33 | ~x2"
   5.123 +  and "~x4 | ~x34"
   5.124 +  and "~x4 | ~x3"
   5.125 +  and "~x34 | ~x3"
   5.126 +  and "~x35 | ~x4"
   5.127 +  and "~x5 | ~x36"
   5.128 +  and "~x5 | ~x30"
   5.129 +  and "~x36 | ~x30"
   5.130 +  and "~x6 | ~x37"
   5.131 +  and "~x6 | ~x5"
   5.132 +  and "~x6 | ~x31"
   5.133 +  and "~x37 | ~x5"
   5.134 +  and "~x37 | ~x31"
   5.135 +  and "~x5 | ~x31"
   5.136 +  and "~x7 | ~x38"
   5.137 +  and "~x7 | ~x6"
   5.138 +  and "~x7 | ~x32"
   5.139 +  and "~x38 | ~x6"
   5.140 +  and "~x38 | ~x32"
   5.141 +  and "~x6 | ~x32"
   5.142 +  and "~x8 | ~x39"
   5.143 +  and "~x8 | ~x7"
   5.144 +  and "~x8 | ~x33"
   5.145 +  and "~x39 | ~x7"
   5.146 +  and "~x39 | ~x33"
   5.147 +  and "~x7 | ~x33"
   5.148 +  and "~x9 | ~x40"
   5.149 +  and "~x9 | ~x8"
   5.150 +  and "~x9 | ~x34"
   5.151 +  and "~x40 | ~x8"
   5.152 +  and "~x40 | ~x34"
   5.153 +  and "~x8 | ~x34"
   5.154 +  and "~x41 | ~x9"
   5.155 +  and "~x41 | ~x35"
   5.156 +  and "~x9 | ~x35"
   5.157 +  and "~x10 | ~x42"
   5.158 +  and "~x10 | ~x36"
   5.159 +  and "~x42 | ~x36"
   5.160 +  and "~x11 | ~x43"
   5.161 +  and "~x11 | ~x10"
   5.162 +  and "~x11 | ~x37"
   5.163 +  and "~x43 | ~x10"
   5.164 +  and "~x43 | ~x37"
   5.165 +  and "~x10 | ~x37"
   5.166 +  and "~x12 | ~x44"
   5.167 +  and "~x12 | ~x11"
   5.168 +  and "~x12 | ~x38"
   5.169 +  and "~x44 | ~x11"
   5.170 +  and "~x44 | ~x38"
   5.171 +  and "~x11 | ~x38"
   5.172 +  and "~x13 | ~x45"
   5.173 +  and "~x13 | ~x12"
   5.174 +  and "~x13 | ~x39"
   5.175 +  and "~x45 | ~x12"
   5.176 +  and "~x45 | ~x39"
   5.177 +  and "~x12 | ~x39"
   5.178 +  and "~x14 | ~x46"
   5.179 +  and "~x14 | ~x13"
   5.180 +  and "~x14 | ~x40"
   5.181 +  and "~x46 | ~x13"
   5.182 +  and "~x46 | ~x40"
   5.183 +  and "~x13 | ~x40"
   5.184 +  and "~x47 | ~x14"
   5.185 +  and "~x47 | ~x41"
   5.186 +  and "~x14 | ~x41"
   5.187 +  and "~x15 | ~x48"
   5.188 +  and "~x15 | ~x42"
   5.189 +  and "~x48 | ~x42"
   5.190 +  and "~x16 | ~x49"
   5.191 +  and "~x16 | ~x15"
   5.192 +  and "~x16 | ~x43"
   5.193 +  and "~x49 | ~x15"
   5.194 +  and "~x49 | ~x43"
   5.195 +  and "~x15 | ~x43"
   5.196 +  and "~x17 | ~x50"
   5.197 +  and "~x17 | ~x16"
   5.198 +  and "~x17 | ~x44"
   5.199 +  and "~x50 | ~x16"
   5.200 +  and "~x50 | ~x44"
   5.201 +  and "~x16 | ~x44"
   5.202 +  and "~x18 | ~x51"
   5.203 +  and "~x18 | ~x17"
   5.204 +  and "~x18 | ~x45"
   5.205 +  and "~x51 | ~x17"
   5.206 +  and "~x51 | ~x45"
   5.207 +  and "~x17 | ~x45"
   5.208 +  and "~x19 | ~x52"
   5.209 +  and "~x19 | ~x18"
   5.210 +  and "~x19 | ~x46"
   5.211 +  and "~x52 | ~x18"
   5.212 +  and "~x52 | ~x46"
   5.213 +  and "~x18 | ~x46"
   5.214 +  and "~x53 | ~x19"
   5.215 +  and "~x53 | ~x47"
   5.216 +  and "~x19 | ~x47"
   5.217 +  and "~x20 | ~x54"
   5.218 +  and "~x20 | ~x48"
   5.219 +  and "~x54 | ~x48"
   5.220 +  and "~x21 | ~x55"
   5.221 +  and "~x21 | ~x20"
   5.222 +  and "~x21 | ~x49"
   5.223 +  and "~x55 | ~x20"
   5.224 +  and "~x55 | ~x49"
   5.225 +  and "~x20 | ~x49"
   5.226 +  and "~x22 | ~x56"
   5.227 +  and "~x22 | ~x21"
   5.228 +  and "~x22 | ~x50"
   5.229 +  and "~x56 | ~x21"
   5.230 +  and "~x56 | ~x50"
   5.231 +  and "~x21 | ~x50"
   5.232 +  and "~x23 | ~x57"
   5.233 +  and "~x23 | ~x22"
   5.234 +  and "~x23 | ~x51"
   5.235 +  and "~x57 | ~x22"
   5.236 +  and "~x57 | ~x51"
   5.237 +  and "~x22 | ~x51"
   5.238 +  and "~x24 | ~x58"
   5.239 +  and "~x24 | ~x23"
   5.240 +  and "~x24 | ~x52"
   5.241 +  and "~x58 | ~x23"
   5.242 +  and "~x58 | ~x52"
   5.243 +  and "~x23 | ~x52"
   5.244 +  and "~x59 | ~x24"
   5.245 +  and "~x59 | ~x53"
   5.246 +  and "~x24 | ~x53"
   5.247 +  and "~x25 | ~x54"
   5.248 +  and "~x26 | ~x25"
   5.249 +  and "~x26 | ~x55"
   5.250 +  and "~x25 | ~x55"
   5.251 +  and "~x27 | ~x26"
   5.252 +  and "~x27 | ~x56"
   5.253 +  and "~x26 | ~x56"
   5.254 +  and "~x28 | ~x27"
   5.255 +  and "~x28 | ~x57"
   5.256 +  and "~x27 | ~x57"
   5.257 +  and "~x29 | ~x28"
   5.258 +  and "~x29 | ~x58"
   5.259 +  and "~x28 | ~x58"
   5.260 +  shows False
   5.261 +  using assms
   5.262 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_prop_10"]]
   5.263 +  by smt
   5.264  
   5.265 -section {* Linear arithmetic *}
   5.266 +lemma "\<forall>x::int. P x \<longrightarrow> (\<forall>y::int. P x \<or> P y)"
   5.267 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_01"]]
   5.268 +  by smt
   5.269  
   5.270 -lemma "(3::int) = 3" by smt
   5.271 -lemma "(3::real) = 3" by smt
   5.272 -lemma "(3 :: int) + 1 = 4" by smt
   5.273 -lemma "max (3::int) 8 > 5" by smt
   5.274 -lemma "abs (x :: real) + abs y \<ge> abs (x + y)" by smt
   5.275 -lemma "let x = (2 :: int) in x + x \<noteq> 5" by smt
   5.276 +lemma 
   5.277 +  assumes "(\<forall>x y. P x y = x)"
   5.278 +  shows "(\<exists>y. P x y) = P x c"
   5.279 +  using assms 
   5.280 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_02"]]
   5.281 +  by smt
   5.282 +
   5.283 +lemma 
   5.284 +  assumes "(\<forall>x y. P x y = x)"
   5.285 +  and "(\<forall>x. \<exists>y. P x y) = (\<forall>x. P x c)"
   5.286 +  shows "(EX y. P x y) = P x c"
   5.287 +  using assms
   5.288 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_03"]]
   5.289 +  by smt
   5.290 +
   5.291 +lemma
   5.292 +  assumes "if P x then \<not>(\<exists>y. P y) else (\<forall>y. \<not>P y)"
   5.293 +  shows "P x \<longrightarrow> P y"
   5.294 +  using assms
   5.295 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_fol_04"]]
   5.296 +  by smt
   5.297 +
   5.298 +
   5.299 +section {* Arithmetic *}
   5.300 +
   5.301 +subsection {* Linear arithmetic over integers and reals *}
   5.302 +
   5.303 +lemma "(3::int) = 3"
   5.304 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_01"]]
   5.305 +  by smt
   5.306 +
   5.307 +lemma "(3::real) = 3"
   5.308 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_02"]]
   5.309 +  by smt
   5.310 +
   5.311 +lemma "(3 :: int) + 1 = 4"
   5.312 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_03"]]
   5.313 +  by smt
   5.314 +
   5.315 +lemma "x + (y + z) = y + (z + (x::int))"
   5.316 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_04"]]
   5.317 +  by smt
   5.318 +
   5.319 +lemma "max (3::int) 8 > 5"
   5.320 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_05"]]
   5.321 +  by smt
   5.322 +
   5.323 +lemma "abs (x :: real) + abs y \<ge> abs (x + y)"
   5.324 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_06"]]
   5.325 +  by smt
   5.326 +
   5.327 +lemma "P ((2::int) < 3) = P True"
   5.328 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_07"]]
   5.329 +  by smt
   5.330 +
   5.331 +lemma "x + 3 \<ge> 4 \<or> x < (1::int)"
   5.332 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_08"]]
   5.333 +  by smt
   5.334 +
   5.335 +lemma
   5.336 +  assumes "x \<ge> (3::int)" and "y = x + 4"
   5.337 +  shows "y - x > 0" 
   5.338 +  using assms
   5.339 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_09"]]
   5.340 +  by smt
   5.341 +
   5.342 +lemma "let x = (2 :: int) in x + x \<noteq> 5"
   5.343 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_10"]]
   5.344 +  by smt
   5.345 +
   5.346 +lemma
   5.347 +  fixes x :: real
   5.348 +  assumes "3 * x + 7 * a < 4" and "3 < 2 * x"
   5.349 +  shows "a < 0"
   5.350 +  using assms
   5.351 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_11"]]
   5.352 +  by smt
   5.353 +
   5.354 +lemma "(0 \<le> y + -1 * x \<or> \<not> 0 \<le> x \<or> 0 \<le> (x::int)) = (\<not> False)"
   5.355 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_12"]]
   5.356 +  by smt
   5.357 +
   5.358 +lemma "distinct [x < (3::int), 3 \<le> x]"
   5.359 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_13"]]
   5.360 +  by smt
   5.361 +
   5.362 +lemma
   5.363 +  assumes "a > (0::int)"
   5.364 +  shows "distinct [a, a * 2, a - a]"
   5.365 +  using assms
   5.366 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_14"]]
   5.367 +  by smt
   5.368 +
   5.369 +lemma "
   5.370 +  (n < m & m < n') | (n < m & m = n') | (n < n' & n' < m) |
   5.371 +  (n = n' & n' < m) | (n = m & m < n') |
   5.372 +  (n' < m & m < n) | (n' < m & m = n) |
   5.373 +  (n' < n & n < m) | (n' = n & n < m) | (n' = m & m < n) |
   5.374 +  (m < n & n < n') | (m < n & n' = n) | (m < n' & n' < n) |
   5.375 +  (m = n & n < n') | (m = n' & n' < n) |
   5.376 +  (n' = m & m = (n::int))"
   5.377 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_15"]]
   5.378 +  by smt
   5.379  
   5.380  text{* 
   5.381  The following example was taken from HOL/ex/PresburgerEx.thy, where it says:
   5.382 @@ -47,107 +373,333 @@
   5.383    Warning: it takes (in 2006) over 4.2 minutes! 
   5.384  
   5.385  There, it is proved by "arith". SMT is able to prove this within a fraction
   5.386 -of one second.
   5.387 +of one second. With proof reconstruction, it takes about 13 seconds on a Core2
   5.388 +processor.
   5.389  *}
   5.390  
   5.391  lemma "\<lbrakk> x3 = abs x2 - x1; x4 = abs x3 - x2; x5 = abs x4 - x3;
   5.392           x6 = abs x5 - x4; x7 = abs x6 - x5; x8 = abs x7 - x6;
   5.393           x9 = abs x8 - x7; x10 = abs x9 - x8; x11 = abs x10 - x9 \<rbrakk>
   5.394   \<Longrightarrow> x1 = x10 & x2 = (x11::int)"
   5.395 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_linarith_16"]]
   5.396    by smt
   5.397  
   5.398 -lemma "\<exists>x::int. 0 < x" by smt
   5.399 -lemma "\<exists>x::real. 0 < x" by smt
   5.400 -lemma "\<forall>x y::int. x < y \<longrightarrow> (2 * x + 1) < (2 * y)" by smt
   5.401 -lemma "\<forall>x y::int. (2 * x + 1) \<noteq> (2 * y)" by smt
   5.402 -lemma "~ (\<exists>x y z::int. 4 * x + -6 * y = (1::int))" by smt
   5.403 -lemma "~ (\<exists>x::int. False)" by smt
   5.404  
   5.405 +subsection {* Linear arithmetic with quantifiers *}
   5.406  
   5.407 -section {* Non-linear arithmetic *}
   5.408 +lemma "~ (\<exists>x::int. False)"
   5.409 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_01"]]
   5.410 +  by smt
   5.411  
   5.412 -lemma "((x::int) * (1 + y) - x * (1 - y)) = (2 * x * y)" by smt
   5.413 +lemma "~ (\<exists>x::real. False)"
   5.414 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_02"]]
   5.415 +  by smt
   5.416 +
   5.417 +lemma "\<exists>x::int. 0 < x"
   5.418 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_03"]]
   5.419 +  using [[z3_proofs=false]] (* no Z3 proof *)
   5.420 +  by smt
   5.421 +
   5.422 +lemma "\<exists>x::real. 0 < x"
   5.423 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_04"]]
   5.424 +  using [[z3_proofs=false]] (* no Z3 proof *)
   5.425 +  by smt
   5.426 +
   5.427 +lemma "\<forall>x::int. \<exists>y. y > x"
   5.428 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_05"]]
   5.429 +  using [[z3_proofs=false]] (* no Z3 proof *)
   5.430 +  by smt
   5.431 +
   5.432 +lemma "\<forall>x y::int. (x = 0 \<and> y = 1) \<longrightarrow> x \<noteq> y"
   5.433 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_06"]]
   5.434 +  by smt
   5.435 +
   5.436 +lemma "\<exists>x::int. \<forall>y. x < y \<longrightarrow> y < 0 \<or> y >= 0"
   5.437 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_07"]]
   5.438 +  by smt
   5.439 +
   5.440 +lemma "\<forall>x y::int. x < y \<longrightarrow> (2 * x + 1) < (2 * y)"
   5.441 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_08"]]
   5.442 +  by smt
   5.443 +
   5.444 +lemma "\<forall>x y::int. (2 * x + 1) \<noteq> (2 * y)"
   5.445 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_09"]]
   5.446 +  by smt
   5.447 +
   5.448 +lemma "\<forall>x y::int. x + y > 2 \<or> x + y = 2 \<or> x + y < 2"
   5.449 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_10"]]
   5.450 +  by smt
   5.451 +
   5.452 +lemma "\<forall>x::int. if x > 0 then x + 1 > 0 else 1 > x"
   5.453 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_11"]]
   5.454 +  by smt
   5.455 +
   5.456 +lemma "if (ALL x::int. x < 0 \<or> x > 0) then False else True"
   5.457 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_12"]]
   5.458 +  by smt
   5.459 +
   5.460 +lemma "(if (ALL x::int. x < 0 \<or> x > 0) then -1 else 3) > (0::int)"
   5.461 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_13"]]
   5.462 +  by smt
   5.463 +
   5.464 +lemma "~ (\<exists>x y z::int. 4 * x + -6 * y = (1::int))"
   5.465 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_14"]]
   5.466 +  by smt
   5.467 +
   5.468 +lemma "\<exists>x::int. \<forall>x y. 0 < x \<and> 0 < y \<longrightarrow> (0::int) < x + y"
   5.469 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_15"]]
   5.470 +  by smt
   5.471 +
   5.472 +lemma "\<exists>u::int. \<forall>(x::int) y::real. 0 < x \<and> 0 < y \<longrightarrow> -1 < x"
   5.473 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_16"]]
   5.474 +  by smt
   5.475 +
   5.476 +lemma "\<exists>x::int. (\<forall>y. y \<ge> x \<longrightarrow> y > 0) \<longrightarrow> x > 0"
   5.477 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_17"]]
   5.478 +  by smt
   5.479 +
   5.480 +lemma "\<forall>x::int. trigger [pat x] (x < a \<longrightarrow> 2 * x < 2 * a)"
   5.481 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_arith_quant_18"]]
   5.482 +  by smt
   5.483 +
   5.484 +
   5.485 +subsection {* Non-linear arithmetic over integers and reals *}
   5.486 +
   5.487 +lemma "a > (0::int) \<Longrightarrow> a*b > 0 \<Longrightarrow> b > 0"
   5.488 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_01"]]
   5.489 +  using [[z3_proofs=false]]  -- {* Isabelle's arithmetic decision procedures
   5.490 +    are too weak to automatically prove @{thm zero_less_mult_pos}. *}
   5.491 +  by smt
   5.492 +
   5.493 +lemma  "(a::int) * (x + 1 + y) = a * x + a * (y + 1)"
   5.494 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_02"]]
   5.495 +  by smt
   5.496 +
   5.497 +lemma "((x::real) * (1 + y) - x * (1 - y)) = (2 * x * y)"
   5.498 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_03"]]
   5.499 +  by smt
   5.500 +
   5.501  lemma
   5.502    "(U::int) + (1 + p) * (b + e) + p * d =
   5.503     U + (2 * (1 + p) * (b + e) + (1 + p) * d + d * p) - (1 + p) * (b + d + e)"
   5.504 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nlarith_04"]]
   5.505    by smt
   5.506  
   5.507  
   5.508 -section {* Linear arithmetic for natural numbers *}
   5.509 +subsection {* Linear arithmetic for natural numbers *}
   5.510  
   5.511 -lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a" by smt
   5.512 -lemma "let x = (1::nat) + y in x - y > 0 * x" by smt
   5.513 +lemma "2 * (x::nat) ~= 1"
   5.514 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_01"]]
   5.515 +  by smt
   5.516 +
   5.517 +lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a"
   5.518 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_02"]]
   5.519 +  by smt
   5.520 +
   5.521 +lemma "let x = (1::nat) + y in x - y > 0 * x"
   5.522 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_03"]]
   5.523 +  by smt
   5.524 +
   5.525  lemma
   5.526    "let x = (1::nat) + y in
   5.527     let P = (if x > 0 then True else False) in
   5.528     False \<or> P = (x - 1 = y) \<or> (\<not>P \<longrightarrow> False)"
   5.529 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_04"]]
   5.530    by smt
   5.531  
   5.532 +lemma "distinct [a + (1::nat), a * 2 + 3, a - a]"
   5.533 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_05"]]
   5.534 +  by smt
   5.535 +
   5.536 +lemma "int (nat \<bar>x::int\<bar>) = \<bar>x\<bar>"
   5.537 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_06"]]
   5.538 +  by smt
   5.539 +
   5.540 +definition prime_nat :: "nat \<Rightarrow> bool" where
   5.541 +  "prime_nat p = (1 < p \<and> (\<forall>m. m dvd p --> m = 1 \<or> m = p))"
   5.542 +lemma "prime_nat (4*m + 1) \<Longrightarrow> m \<ge> (1::nat)"
   5.543 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_nat_arith_07"]]
   5.544 +  by (smt add: prime_nat_def)
   5.545 +
   5.546  
   5.547  section {* Bitvectors *}
   5.548  
   5.549  locale bv
   5.550  begin
   5.551  
   5.552 -declare [[smt_solver=z3]]
   5.553 +text {*
   5.554 +The following examples only work for Z3, and only without proof reconstruction.
   5.555 +*}
   5.556  
   5.557 -lemma "(27 :: 4 word) = -5" by smt
   5.558 -lemma "(27 :: 4 word) = 11" by smt
   5.559 -lemma "23 < (27::8 word)" by smt
   5.560 -lemma "27 + 11 = (6::5 word)" by smt
   5.561 -lemma "7 * 3 = (21::8 word)" by smt
   5.562 -lemma "11 - 27 = (-16::8 word)" by smt
   5.563 -lemma "- -11 = (11::5 word)" by smt
   5.564 -lemma "-40 + 1 = (-39::7 word)" by smt
   5.565 -lemma "a + 2 * b + c - b = (b + c) + (a :: 32 word)" by smt
   5.566 +declare [[smt_solver=z3, z3_proofs=false]]
   5.567  
   5.568 -lemma "0b110 AND 0b101 = (0b100 :: 32 word)" by smt
   5.569 -lemma "0b110 OR 0b011 = (0b111 :: 8 word)" by smt
   5.570 -lemma "0xF0 XOR 0xFF = (0x0F :: 8 word)" by smt
   5.571 -lemma "NOT (0xF0 :: 16 word) = 0xFF0F" by smt
   5.572  
   5.573 -lemma "word_cat (27::4 word) (27::8 word) = (2843::12 word)" by smt
   5.574 -lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)" 
   5.575 +subsection {* Bitvector arithmetic *}
   5.576 +
   5.577 +lemma "(27 :: 4 word) = -5" 
   5.578 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_01"]]
   5.579    by smt
   5.580  
   5.581 -lemma "slice 1 (0b10110 :: 4 word) = (0b11 :: 2 word)" by smt
   5.582 +lemma "(27 :: 4 word) = 11"
   5.583 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_02"]]
   5.584 +  by smt
   5.585  
   5.586 -lemma "ucast (0b1010 :: 4 word) = (0b1010 :: 10 word)" by smt
   5.587 -lemma "scast (0b1010 :: 4 word) = (0b111010 :: 6 word)" by smt
   5.588 +lemma "23 < (27::8 word)" 
   5.589 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_03"]]
   5.590 +  by smt
   5.591  
   5.592 -lemma "bv_lshr 0b10011 2 = (0b100::8 word)" by smt
   5.593 -lemma "bv_ashr 0b10011 2 = (0b100::8 word)" by smt
   5.594 +lemma "27 + 11 = (6::5 word)" 
   5.595 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_04"]]
   5.596 +  by smt
   5.597  
   5.598 -lemma "word_rotr 2 0b0110 = (0b1001::4 word)" by smt
   5.599 -lemma "word_rotl 1 0b1110 = (0b1101::4 word)" by smt
   5.600 +lemma "7 * 3 = (21::8 word)" 
   5.601 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_05"]]
   5.602 +  by smt
   5.603 +lemma "11 - 27 = (-16::8 word)" 
   5.604 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_06"]]
   5.605 +  by smt
   5.606  
   5.607 -lemma "(x AND 0xff00) OR (x AND 0x00ff) = (x::16 word)" by smt
   5.608 +lemma "- -11 = (11::5 word)" 
   5.609 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_07"]]
   5.610 +  by smt
   5.611  
   5.612 -lemma "w < 256 \<Longrightarrow> (w :: 16 word) AND 0x00FF = w" by smt
   5.613 +lemma "-40 + 1 = (-39::7 word)" 
   5.614 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_08"]]
   5.615 +  by smt
   5.616 +
   5.617 +lemma "a + 2 * b + c - b = (b + c) + (a :: 32 word)" 
   5.618 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_09"]]
   5.619 +  by smt
   5.620 +
   5.621 +lemma "x = (5 :: 4 word) \<Longrightarrow> 4 * x = 4" 
   5.622 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_arith_10"]]
   5.623 +  by smt
   5.624 +
   5.625 +
   5.626 +subsection {* Bit-level logic *}
   5.627 +
   5.628 +lemma "0b110 AND 0b101 = (0b100 :: 32 word)"
   5.629 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_01"]]
   5.630 +  by smt
   5.631 +
   5.632 +lemma "0b110 OR 0b011 = (0b111 :: 8 word)" 
   5.633 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_02"]]
   5.634 +  by smt
   5.635 +
   5.636 +lemma "0xF0 XOR 0xFF = (0x0F :: 8 word)" 
   5.637 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_03"]]
   5.638 +  by smt
   5.639 +
   5.640 +lemma "NOT (0xF0 :: 16 word) = 0xFF0F" 
   5.641 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_04"]]
   5.642 +  by smt
   5.643 +
   5.644 +lemma "word_cat (27::4 word) (27::8 word) = (2843::12 word)" 
   5.645 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_05"]]
   5.646 +  by smt
   5.647 +
   5.648 +lemma "word_cat (0b0011::4 word) (0b1111::6word) = (0b0011001111 :: 10 word)"
   5.649 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_06"]]
   5.650 +  by smt
   5.651 +
   5.652 +lemma "slice 1 (0b10110 :: 4 word) = (0b11 :: 2 word)" 
   5.653 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_07"]]
   5.654 +  by smt
   5.655 +
   5.656 +lemma "ucast (0b1010 :: 4 word) = (0b1010 :: 10 word)" 
   5.657 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_08"]]
   5.658 +  by smt
   5.659 +
   5.660 +lemma "scast (0b1010 :: 4 word) = (0b111010 :: 6 word)" 
   5.661 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_09"]]
   5.662 +  by smt
   5.663 +
   5.664 +lemma "bv_lshr 0b10011 2 = (0b100::8 word)" 
   5.665 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_10"]]
   5.666 +  by smt
   5.667 +
   5.668 +lemma "bv_ashr 0b10011 2 = (0b100::8 word)" 
   5.669 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_11"]]
   5.670 +  by smt
   5.671 +
   5.672 +lemma "word_rotr 2 0b0110 = (0b1001::4 word)" 
   5.673 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_12"]]
   5.674 +  by smt
   5.675 +
   5.676 +lemma "word_rotl 1 0b1110 = (0b1101::4 word)" 
   5.677 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_13"]]
   5.678 +  by smt
   5.679 +
   5.680 +lemma "(x AND 0xff00) OR (x AND 0x00ff) = (x::16 word)" 
   5.681 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_14"]]
   5.682 +  by smt
   5.683 +
   5.684 +lemma "w < 256 \<Longrightarrow> (w :: 16 word) AND 0x00FF = w" 
   5.685 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_bit_15"]]
   5.686 +  by smt
   5.687  
   5.688  end
   5.689  
   5.690 +lemma
   5.691 +  assumes "bv2int 0 = 0"
   5.692 +      and "bv2int 1 = 1"
   5.693 +      and "bv2int 2 = 2"
   5.694 +      and "bv2int 3 = 3"
   5.695 +      and "\<forall>x::2 word. bv2int x > 0"
   5.696 +  shows "\<forall>i::int. i < 0 \<longrightarrow> (\<forall>x::2 word. bv2int x > i)"
   5.697 +  using assms 
   5.698 +  using [[smt_solver=z3]]
   5.699 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_01"]]
   5.700 +  by smt
   5.701 +
   5.702 +lemma "P (0 \<le> (a :: 4 word)) = P True"
   5.703 +  using [[smt_solver=z3, z3_proofs=false]]
   5.704 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_bv_02"]]
   5.705 +  by smt
   5.706 +
   5.707  
   5.708  section {* Pairs *}
   5.709  
   5.710 -lemma "fst (x, y) = a \<Longrightarrow> x = a" by smt
   5.711 -lemma "p1 = (x, y) \<and> p2 = (y, x) \<Longrightarrow> fst p1 = snd p2" by smt
   5.712 +lemma "fst (x, y) = a \<Longrightarrow> x = a"
   5.713 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_pair_01"]]
   5.714 +  by smt
   5.715 +
   5.716 +lemma "p1 = (x, y) \<and> p2 = (y, x) \<Longrightarrow> fst p1 = snd p2"
   5.717 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_pair_02"]]
   5.718 +  by smt
   5.719  
   5.720  
   5.721  section {* Higher-order problems and recursion *}
   5.722  
   5.723 -lemma "(f g x = (g x \<and> True)) \<or> (f g x = True) \<or> (g x = True)" by smt
   5.724 -lemma "P ((2::int) < 3) = P True" by smt
   5.725 -lemma "P ((2::int) < 3) = (P True :: bool)" by smt
   5.726 -lemma "P (0 \<le> (a :: 4 word)) = P True" using [[smt_solver=z3]] by smt
   5.727 -lemma "id 3 = 3 \<and> id True = True" by (smt add: id_def)
   5.728 -lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> ((f (i1 := v1)) (i2 := v2)) i = f i" by smt
   5.729 -lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]" by (smt add: map.simps)
   5.730 -lemma "(ALL x. P x) | ~ All P" by smt
   5.731 +lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> (f (i1 := v1, i2 := v2)) i = f i"
   5.732 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_01"]]
   5.733 +  by smt
   5.734 +
   5.735 +lemma "(f g x = (g x \<and> True)) \<or> (f g x = True) \<or> (g x = True)"
   5.736 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_02"]]
   5.737 +  by smt
   5.738 +
   5.739 +lemma "id 3 = 3 \<and> id True = True"
   5.740 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_03"]]
   5.741 +  by (smt add: id_def)
   5.742 +
   5.743 +lemma "i \<noteq> i1 \<and> i \<noteq> i2 \<Longrightarrow> ((f (i1 := v1)) (i2 := v2)) i = f i"
   5.744 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_04"]]
   5.745 +  by smt
   5.746 +
   5.747 +lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]"
   5.748 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_05"]]
   5.749 +  by (smt add: map.simps)
   5.750 +
   5.751 +lemma "(ALL x. P x) | ~ All P"
   5.752 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_06"]]
   5.753 +  by smt
   5.754  
   5.755  fun dec_10 :: "nat \<Rightarrow> nat" where
   5.756    "dec_10 n = (if n < 10 then n else dec_10 (n - 10))"
   5.757 -lemma "dec_10 (4 * dec_10 4) = 6" by (smt add: dec_10.simps)
   5.758 +lemma "dec_10 (4 * dec_10 4) = 6"
   5.759 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_07"]]
   5.760 +  by (smt add: dec_10.simps)
   5.761  
   5.762  axiomatization
   5.763    eval_dioph :: "int list \<Rightarrow> nat list \<Rightarrow> int"
   5.764 @@ -163,7 +715,7 @@
   5.765     (eval_dioph ks (map (\<lambda>x. x mod 2) xs) mod 2 = l mod 2 \<and>
   5.766      eval_dioph ks (map (\<lambda>x. x div 2) xs) =
   5.767        (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)"
   5.768 -  using [[smt_solver=z3]]
   5.769 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_hol_08"]]
   5.770    by (smt add: eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2])
   5.771  
   5.772  
   5.773 @@ -171,13 +723,17 @@
   5.774  
   5.775  definition P :: "'a \<Rightarrow> bool" where "P x = True"
   5.776  lemma poly_P: "P x \<and> (P [x] \<or> \<not>P[x])" by (simp add: P_def)
   5.777 -lemma "P (1::int)" by (smt add: poly_P)
   5.778 +lemma "P (1::int)"
   5.779 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_mono_01"]]
   5.780 +  by (smt add: poly_P)
   5.781  
   5.782  consts g :: "'a \<Rightarrow> nat"
   5.783  axioms
   5.784    g1: "g (Some x) = g [x]"
   5.785    g2: "g None = g []"
   5.786    g3: "g xs = length xs"
   5.787 -lemma "g (Some (3::int)) = g (Some True)" by (smt add: g1 g2 g3 list.size)
   5.788 +lemma "g (Some (3::int)) = g (Some True)"
   5.789 +  using [[smt_cert="~/isabelle/SMT/Examples/cert/z3_mono_02"]]
   5.790 +  by (smt add: g1 g2 g3 list.size)
   5.791  
   5.792  end
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_01	Tue Oct 20 10:11:30 2009 +0200
     6.3 @@ -0,0 +1,4 @@
     6.4 +(benchmark Isabelle
     6.5 +:assumption (not (not (exists (?x1 Int) false)))
     6.6 +:formula true
     6.7 +)
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_01.proof	Tue Oct 20 10:11:30 2009 +0200
     7.3 @@ -0,0 +1,24 @@
     7.4 +#2 := false
     7.5 +#4 := (exists (vars (?x1 int)) false)
     7.6 +#5 := (not #4)
     7.7 +#6 := (not #5)
     7.8 +#37 := (iff #6 false)
     7.9 +#1 := true
    7.10 +#32 := (not true)
    7.11 +#35 := (iff #32 false)
    7.12 +#36 := [rewrite]: #35
    7.13 +#33 := (iff #6 #32)
    7.14 +#30 := (iff #5 true)
    7.15 +#25 := (not false)
    7.16 +#28 := (iff #25 true)
    7.17 +#29 := [rewrite]: #28
    7.18 +#26 := (iff #5 #25)
    7.19 +#23 := (iff #4 false)
    7.20 +#24 := [elim-unused]: #23
    7.21 +#27 := [monotonicity #24]: #26
    7.22 +#31 := [trans #27 #29]: #30
    7.23 +#34 := [monotonicity #31]: #33
    7.24 +#38 := [trans #34 #36]: #37
    7.25 +#22 := [asserted]: #6
    7.26 +[mp #22 #38]: false
    7.27 +unsat
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_02	Tue Oct 20 10:11:30 2009 +0200
     8.3 @@ -0,0 +1,4 @@
     8.4 +(benchmark Isabelle
     8.5 +:assumption (not (not (exists (?x1 Real) false)))
     8.6 +:formula true
     8.7 +)
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_02.proof	Tue Oct 20 10:11:30 2009 +0200
     9.3 @@ -0,0 +1,24 @@
     9.4 +#2 := false
     9.5 +#4 := (exists (vars (?x1 real)) false)
     9.6 +#5 := (not #4)
     9.7 +#6 := (not #5)
     9.8 +#37 := (iff #6 false)
     9.9 +#1 := true
    9.10 +#32 := (not true)
    9.11 +#35 := (iff #32 false)
    9.12 +#36 := [rewrite]: #35
    9.13 +#33 := (iff #6 #32)
    9.14 +#30 := (iff #5 true)
    9.15 +#25 := (not false)
    9.16 +#28 := (iff #25 true)
    9.17 +#29 := [rewrite]: #28
    9.18 +#26 := (iff #5 #25)
    9.19 +#23 := (iff #4 false)
    9.20 +#24 := [elim-unused]: #23
    9.21 +#27 := [monotonicity #24]: #26
    9.22 +#31 := [trans #27 #29]: #30
    9.23 +#34 := [monotonicity #31]: #33
    9.24 +#38 := [trans #34 #36]: #37
    9.25 +#22 := [asserted]: #6
    9.26 +[mp #22 #38]: false
    9.27 +unsat
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_03	Tue Oct 20 10:11:30 2009 +0200
    10.3 @@ -0,0 +1,4 @@
    10.4 +(benchmark Isabelle
    10.5 +:assumption (not (exists (?x1 Int) (< 0 ?x1)))
    10.6 +:formula true
    10.7 +)
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_03.proof	Tue Oct 20 10:11:30 2009 +0200
    11.3 @@ -0,0 +1,1 @@
    11.4 +unsat
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_04	Tue Oct 20 10:11:30 2009 +0200
    12.3 @@ -0,0 +1,4 @@
    12.4 +(benchmark Isabelle
    12.5 +:assumption (not (exists (?x1 Real) (< 0.0 ?x1)))
    12.6 +:formula true
    12.7 +)
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_04.proof	Tue Oct 20 10:11:30 2009 +0200
    13.3 @@ -0,0 +1,1 @@
    13.4 +unsat
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_05	Tue Oct 20 10:11:30 2009 +0200
    14.3 @@ -0,0 +1,4 @@
    14.4 +(benchmark Isabelle
    14.5 +:assumption (not (forall (?x1 Int) (exists (?x2 Int) (< ?x1 ?x2))))
    14.6 +:formula true
    14.7 +)
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_05.proof	Tue Oct 20 10:11:30 2009 +0200
    15.3 @@ -0,0 +1,1 @@
    15.4 +unsat
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_06	Tue Oct 20 10:11:30 2009 +0200
    16.3 @@ -0,0 +1,4 @@
    16.4 +(benchmark Isabelle
    16.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (implies (and (= ?x1 0) (= ?x2 1)) (not (= ?x1 ?x2)))))
    16.6 +:formula true
    16.7 +)
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_06.proof	Tue Oct 20 10:11:30 2009 +0200
    17.3 @@ -0,0 +1,73 @@
    17.4 +#2 := false
    17.5 +#5 := 0::int
    17.6 +#8 := 1::int
    17.7 +#143 := (= 1::int 0::int)
    17.8 +#145 := (iff #143 false)
    17.9 +#146 := [rewrite]: #145
   17.10 +decl ?x1!1 :: int
   17.11 +#47 := ?x1!1
   17.12 +#51 := (= ?x1!1 0::int)
   17.13 +decl ?x2!0 :: int
   17.14 +#46 := ?x2!0
   17.15 +#50 := (= ?x2!0 1::int)
   17.16 +#63 := (and #50 #51)
   17.17 +#69 := (= ?x2!0 ?x1!1)
   17.18 +#72 := (not #69)
   17.19 +#66 := (not #63)
   17.20 +#75 := (or #66 #72)
   17.21 +#78 := (not #75)
   17.22 +#48 := (= ?x1!1 ?x2!0)
   17.23 +#49 := (not #48)
   17.24 +#52 := (and #51 #50)
   17.25 +#53 := (not #52)
   17.26 +#54 := (or #53 #49)
   17.27 +#55 := (not #54)
   17.28 +#79 := (iff #55 #78)
   17.29 +#76 := (iff #54 #75)
   17.30 +#73 := (iff #49 #72)
   17.31 +#70 := (iff #48 #69)
   17.32 +#71 := [rewrite]: #70
   17.33 +#74 := [monotonicity #71]: #73
   17.34 +#67 := (iff #53 #66)
   17.35 +#64 := (iff #52 #63)
   17.36 +#65 := [rewrite]: #64
   17.37 +#68 := [monotonicity #65]: #67
   17.38 +#77 := [monotonicity #68 #74]: #76
   17.39 +#80 := [monotonicity #77]: #79
   17.40 +#7 := (:var 0 int)
   17.41 +#4 := (:var 1 int)
   17.42 +#11 := (= #4 #7)
   17.43 +#12 := (not #11)
   17.44 +#9 := (= #7 1::int)
   17.45 +#6 := (= #4 0::int)
   17.46 +#10 := (and #6 #9)
   17.47 +#32 := (not #10)
   17.48 +#33 := (or #32 #12)
   17.49 +#36 := (forall (vars (?x1 int) (?x2 int)) #33)
   17.50 +#39 := (not #36)
   17.51 +#56 := (~ #39 #55)
   17.52 +#57 := [sk]: #56
   17.53 +#13 := (implies #10 #12)
   17.54 +#14 := (forall (vars (?x1 int) (?x2 int)) #13)
   17.55 +#15 := (not #14)
   17.56 +#40 := (iff #15 #39)
   17.57 +#37 := (iff #14 #36)
   17.58 +#34 := (iff #13 #33)
   17.59 +#35 := [rewrite]: #34
   17.60 +#38 := [quant-intro #35]: #37
   17.61 +#41 := [monotonicity #38]: #40
   17.62 +#31 := [asserted]: #15
   17.63 +#44 := [mp #31 #41]: #39
   17.64 +#60 := [mp~ #44 #57]: #55
   17.65 +#61 := [mp #60 #80]: #78
   17.66 +#62 := [not-or-elim #61]: #63
   17.67 +#82 := [and-elim #62]: #51
   17.68 +#141 := (= 1::int ?x1!1)
   17.69 +#83 := [not-or-elim #61]: #69
   17.70 +#139 := (= 1::int ?x2!0)
   17.71 +#81 := [and-elim #62]: #50
   17.72 +#140 := [symm #81]: #139
   17.73 +#142 := [trans #140 #83]: #141
   17.74 +#144 := [trans #142 #82]: #143
   17.75 +[mp #144 #146]: false
   17.76 +unsat
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_07	Tue Oct 20 10:11:30 2009 +0200
    18.3 @@ -0,0 +1,4 @@
    18.4 +(benchmark Isabelle
    18.5 +:assumption (not (exists (?x1 Int) (forall (?x2 Int) (implies (< ?x1 ?x2) (or (< ?x2 0) (<= 0 ?x2))))))
    18.6 +:formula true
    18.7 +)
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_07.proof	Tue Oct 20 10:11:30 2009 +0200
    19.3 @@ -0,0 +1,82 @@
    19.4 +#2 := false
    19.5 +#5 := (:var 0 int)
    19.6 +#7 := 0::int
    19.7 +#9 := (<= 0::int #5)
    19.8 +#8 := (< #5 0::int)
    19.9 +#10 := (or #8 #9)
   19.10 +#4 := (:var 1 int)
   19.11 +#6 := (< #4 #5)
   19.12 +#11 := (implies #6 #10)
   19.13 +#12 := (forall (vars (?x2 int)) #11)
   19.14 +#13 := (exists (vars (?x1 int)) #12)
   19.15 +#14 := (not #13)
   19.16 +#95 := (iff #14 false)
   19.17 +#31 := (not #6)
   19.18 +#32 := (or #31 #10)
   19.19 +#35 := (forall (vars (?x2 int)) #32)
   19.20 +#38 := (exists (vars (?x1 int)) #35)
   19.21 +#41 := (not #38)
   19.22 +#93 := (iff #41 false)
   19.23 +#1 := true
   19.24 +#88 := (not true)
   19.25 +#91 := (iff #88 false)
   19.26 +#92 := [rewrite]: #91
   19.27 +#89 := (iff #41 #88)
   19.28 +#86 := (iff #38 true)
   19.29 +#81 := (exists (vars (?x1 int)) true)
   19.30 +#84 := (iff #81 true)
   19.31 +#85 := [elim-unused]: #84
   19.32 +#82 := (iff #38 #81)
   19.33 +#79 := (iff #35 true)
   19.34 +#74 := (forall (vars (?x2 int)) true)
   19.35 +#77 := (iff #74 true)
   19.36 +#78 := [elim-unused]: #77
   19.37 +#75 := (iff #35 #74)
   19.38 +#72 := (iff #32 true)
   19.39 +#46 := (>= #5 0::int)
   19.40 +#44 := (not #46)
   19.41 +#64 := (or #44 #46)
   19.42 +#50 := -1::int
   19.43 +#53 := (* -1::int #5)
   19.44 +#54 := (+ #4 #53)
   19.45 +#52 := (>= #54 0::int)
   19.46 +#67 := (or #52 #64)
   19.47 +#70 := (iff #67 true)
   19.48 +#71 := [rewrite]: #70
   19.49 +#68 := (iff #32 #67)
   19.50 +#65 := (iff #10 #64)
   19.51 +#48 := (iff #9 #46)
   19.52 +#49 := [rewrite]: #48
   19.53 +#45 := (iff #8 #44)
   19.54 +#47 := [rewrite]: #45
   19.55 +#66 := [monotonicity #47 #49]: #65
   19.56 +#62 := (iff #31 #52)
   19.57 +#51 := (not #52)
   19.58 +#57 := (not #51)
   19.59 +#60 := (iff #57 #52)
   19.60 +#61 := [rewrite]: #60
   19.61 +#58 := (iff #31 #57)
   19.62 +#55 := (iff #6 #51)
   19.63 +#56 := [rewrite]: #55
   19.64 +#59 := [monotonicity #56]: #58
   19.65 +#63 := [trans #59 #61]: #62
   19.66 +#69 := [monotonicity #63 #66]: #68
   19.67 +#73 := [trans #69 #71]: #72
   19.68 +#76 := [quant-intro #73]: #75
   19.69 +#80 := [trans #76 #78]: #79
   19.70 +#83 := [quant-intro #80]: #82
   19.71 +#87 := [trans #83 #85]: #86
   19.72 +#90 := [monotonicity #87]: #89
   19.73 +#94 := [trans #90 #92]: #93
   19.74 +#42 := (iff #14 #41)
   19.75 +#39 := (iff #13 #38)
   19.76 +#36 := (iff #12 #35)
   19.77 +#33 := (iff #11 #32)
   19.78 +#34 := [rewrite]: #33
   19.79 +#37 := [quant-intro #34]: #36
   19.80 +#40 := [quant-intro #37]: #39
   19.81 +#43 := [monotonicity #40]: #42
   19.82 +#96 := [trans #43 #94]: #95
   19.83 +#30 := [asserted]: #14
   19.84 +[mp #30 #96]: false
   19.85 +unsat
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_08	Tue Oct 20 10:11:30 2009 +0200
    20.3 @@ -0,0 +1,4 @@
    20.4 +(benchmark Isabelle
    20.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (implies (< ?x1 ?x2) (< (+ (* 2 ?x1) 1) (* 2 ?x2)))))
    20.6 +:formula true
    20.7 +)
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_08.proof	Tue Oct 20 10:11:30 2009 +0200
    21.3 @@ -0,0 +1,128 @@
    21.4 +#2 := false
    21.5 +#9 := 1::int
    21.6 +decl ?x1!1 :: int
    21.7 +#91 := ?x1!1
    21.8 +#68 := -2::int
    21.9 +#129 := (* -2::int ?x1!1)
   21.10 +decl ?x2!0 :: int
   21.11 +#90 := ?x2!0
   21.12 +#7 := 2::int
   21.13 +#128 := (* 2::int ?x2!0)
   21.14 +#130 := (+ #128 #129)
   21.15 +#131 := (<= #130 1::int)
   21.16 +#136 := (not #131)
   21.17 +#55 := 0::int
   21.18 +#53 := -1::int
   21.19 +#115 := (* -1::int ?x1!1)
   21.20 +#116 := (+ ?x2!0 #115)
   21.21 +#117 := (<= #116 0::int)
   21.22 +#139 := (or #117 #136)
   21.23 +#142 := (not #139)
   21.24 +#92 := (* -2::int ?x2!0)
   21.25 +#93 := (* 2::int ?x1!1)
   21.26 +#94 := (+ #93 #92)
   21.27 +#95 := (>= #94 -1::int)
   21.28 +#96 := (not #95)
   21.29 +#97 := (* -1::int ?x2!0)
   21.30 +#98 := (+ ?x1!1 #97)
   21.31 +#99 := (>= #98 0::int)
   21.32 +#100 := (or #99 #96)
   21.33 +#101 := (not #100)
   21.34 +#143 := (iff #101 #142)
   21.35 +#140 := (iff #100 #139)
   21.36 +#137 := (iff #96 #136)
   21.37 +#134 := (iff #95 #131)
   21.38 +#122 := (+ #92 #93)
   21.39 +#125 := (>= #122 -1::int)
   21.40 +#132 := (iff #125 #131)
   21.41 +#133 := [rewrite]: #132
   21.42 +#126 := (iff #95 #125)
   21.43 +#123 := (= #94 #122)
   21.44 +#124 := [rewrite]: #123
   21.45 +#127 := [monotonicity #124]: #126
   21.46 +#135 := [trans #127 #133]: #134
   21.47 +#138 := [monotonicity #135]: #137
   21.48 +#120 := (iff #99 #117)
   21.49 +#109 := (+ #97 ?x1!1)
   21.50 +#112 := (>= #109 0::int)
   21.51 +#118 := (iff #112 #117)
   21.52 +#119 := [rewrite]: #118
   21.53 +#113 := (iff #99 #112)
   21.54 +#110 := (= #98 #109)
   21.55 +#111 := [rewrite]: #110
   21.56 +#114 := [monotonicity #111]: #113
   21.57 +#121 := [trans #114 #119]: #120
   21.58 +#141 := [monotonicity #121 #138]: #140
   21.59 +#144 := [monotonicity #141]: #143
   21.60 +#5 := (:var 0 int)
   21.61 +#71 := (* -2::int #5)
   21.62 +#4 := (:var 1 int)
   21.63 +#8 := (* 2::int #4)
   21.64 +#72 := (+ #8 #71)
   21.65 +#70 := (>= #72 -1::int)
   21.66 +#69 := (not #70)
   21.67 +#57 := (* -1::int #5)
   21.68 +#58 := (+ #4 #57)
   21.69 +#56 := (>= #58 0::int)
   21.70 +#75 := (or #56 #69)
   21.71 +#78 := (forall (vars (?x1 int) (?x2 int)) #75)
   21.72 +#81 := (not #78)
   21.73 +#102 := (~ #81 #101)
   21.74 +#103 := [sk]: #102
   21.75 +#11 := (* 2::int #5)
   21.76 +#10 := (+ #8 1::int)
   21.77 +#12 := (< #10 #11)
   21.78 +#6 := (< #4 #5)
   21.79 +#13 := (implies #6 #12)
   21.80 +#14 := (forall (vars (?x1 int) (?x2 int)) #13)
   21.81 +#15 := (not #14)
   21.82 +#84 := (iff #15 #81)
   21.83 +#32 := (+ 1::int #8)
   21.84 +#35 := (< #32 #11)
   21.85 +#41 := (not #6)
   21.86 +#42 := (or #41 #35)
   21.87 +#47 := (forall (vars (?x1 int) (?x2 int)) #42)
   21.88 +#50 := (not #47)
   21.89 +#82 := (iff #50 #81)
   21.90 +#79 := (iff #47 #78)
   21.91 +#76 := (iff #42 #75)
   21.92 +#73 := (iff #35 #69)
   21.93 +#74 := [rewrite]: #73
   21.94 +#66 := (iff #41 #56)
   21.95 +#54 := (not #56)
   21.96 +#61 := (not #54)
   21.97 +#64 := (iff #61 #56)
   21.98 +#65 := [rewrite]: #64
   21.99 +#62 := (iff #41 #61)
  21.100 +#59 := (iff #6 #54)
  21.101 +#60 := [rewrite]: #59
  21.102 +#63 := [monotonicity #60]: #62
  21.103 +#67 := [trans #63 #65]: #66
  21.104 +#77 := [monotonicity #67 #74]: #76
  21.105 +#80 := [quant-intro #77]: #79
  21.106 +#83 := [monotonicity #80]: #82
  21.107 +#51 := (iff #15 #50)
  21.108 +#48 := (iff #14 #47)
  21.109 +#45 := (iff #13 #42)
  21.110 +#38 := (implies #6 #35)
  21.111 +#43 := (iff #38 #42)
  21.112 +#44 := [rewrite]: #43
  21.113 +#39 := (iff #13 #38)
  21.114 +#36 := (iff #12 #35)
  21.115 +#33 := (= #10 #32)
  21.116 +#34 := [rewrite]: #33
  21.117 +#37 := [monotonicity #34]: #36
  21.118 +#40 := [monotonicity #37]: #39
  21.119 +#46 := [trans #40 #44]: #45
  21.120 +#49 := [quant-intro #46]: #48
  21.121 +#52 := [monotonicity #49]: #51
  21.122 +#85 := [trans #52 #83]: #84
  21.123 +#31 := [asserted]: #15
  21.124 +#86 := [mp #31 #85]: #81
  21.125 +#106 := [mp~ #86 #103]: #101
  21.126 +#107 := [mp #106 #144]: #142
  21.127 +#146 := [not-or-elim #107]: #131
  21.128 +#108 := (not #117)
  21.129 +#145 := [not-or-elim #107]: #108
  21.130 +[th-lemma #145 #146]: false
  21.131 +unsat
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_09	Tue Oct 20 10:11:30 2009 +0200
    22.3 @@ -0,0 +1,4 @@
    22.4 +(benchmark Isabelle
    22.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (not (= (+ (* 2 ?x1) 1) (* 2 ?x2)))))
    22.6 +:formula true
    22.7 +)
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_09.proof	Tue Oct 20 10:11:30 2009 +0200
    23.3 @@ -0,0 +1,100 @@
    23.4 +#2 := false
    23.5 +#7 := 1::int
    23.6 +decl ?x1!1 :: int
    23.7 +#74 := ?x1!1
    23.8 +#51 := -2::int
    23.9 +#96 := (* -2::int ?x1!1)
   23.10 +decl ?x2!0 :: int
   23.11 +#73 := ?x2!0
   23.12 +#4 := 2::int
   23.13 +#95 := (* 2::int ?x2!0)
   23.14 +#97 := (+ #95 #96)
   23.15 +#166 := (<= #97 1::int)
   23.16 +#94 := (= #97 1::int)
   23.17 +#53 := -1::int
   23.18 +#75 := (* -2::int ?x2!0)
   23.19 +#76 := (* 2::int ?x1!1)
   23.20 +#77 := (+ #76 #75)
   23.21 +#78 := (= #77 -1::int)
   23.22 +#79 := (not #78)
   23.23 +#80 := (not #79)
   23.24 +#110 := (iff #80 #94)
   23.25 +#102 := (not #94)
   23.26 +#105 := (not #102)
   23.27 +#108 := (iff #105 #94)
   23.28 +#109 := [rewrite]: #108
   23.29 +#106 := (iff #80 #105)
   23.30 +#103 := (iff #79 #102)
   23.31 +#100 := (iff #78 #94)
   23.32 +#88 := (+ #75 #76)
   23.33 +#91 := (= #88 -1::int)
   23.34 +#98 := (iff #91 #94)
   23.35 +#99 := [rewrite]: #98
   23.36 +#92 := (iff #78 #91)
   23.37 +#89 := (= #77 #88)
   23.38 +#90 := [rewrite]: #89
   23.39 +#93 := [monotonicity #90]: #92
   23.40 +#101 := [trans #93 #99]: #100
   23.41 +#104 := [monotonicity #101]: #103
   23.42 +#107 := [monotonicity #104]: #106
   23.43 +#111 := [trans #107 #109]: #110
   23.44 +#9 := (:var 0 int)
   23.45 +#55 := (* -2::int #9)
   23.46 +#5 := (:var 1 int)
   23.47 +#6 := (* 2::int #5)
   23.48 +#56 := (+ #6 #55)
   23.49 +#54 := (= #56 -1::int)
   23.50 +#58 := (not #54)
   23.51 +#61 := (forall (vars (?x1 int) (?x2 int)) #58)
   23.52 +#64 := (not #61)
   23.53 +#81 := (~ #64 #80)
   23.54 +#82 := [sk]: #81
   23.55 +#10 := (* 2::int #9)
   23.56 +#8 := (+ #6 1::int)
   23.57 +#11 := (= #8 #10)
   23.58 +#12 := (not #11)
   23.59 +#13 := (forall (vars (?x1 int) (?x2 int)) #12)
   23.60 +#14 := (not #13)
   23.61 +#67 := (iff #14 #64)
   23.62 +#31 := (+ 1::int #6)
   23.63 +#37 := (= #10 #31)
   23.64 +#42 := (not #37)
   23.65 +#45 := (forall (vars (?x1 int) (?x2 int)) #42)
   23.66 +#48 := (not #45)
   23.67 +#65 := (iff #48 #64)
   23.68 +#62 := (iff #45 #61)
   23.69 +#59 := (iff #42 #58)
   23.70 +#52 := (iff #37 #54)
   23.71 +#57 := [rewrite]: #52
   23.72 +#60 := [monotonicity #57]: #59
   23.73 +#63 := [quant-intro #60]: #62
   23.74 +#66 := [monotonicity #63]: #65
   23.75 +#49 := (iff #14 #48)
   23.76 +#46 := (iff #13 #45)
   23.77 +#43 := (iff #12 #42)
   23.78 +#40 := (iff #11 #37)
   23.79 +#34 := (= #31 #10)
   23.80 +#38 := (iff #34 #37)
   23.81 +#39 := [rewrite]: #38
   23.82 +#35 := (iff #11 #34)
   23.83 +#32 := (= #8 #31)
   23.84 +#33 := [rewrite]: #32
   23.85 +#36 := [monotonicity #33]: #35
   23.86 +#41 := [trans #36 #39]: #40
   23.87 +#44 := [monotonicity #41]: #43
   23.88 +#47 := [quant-intro #44]: #46
   23.89 +#50 := [monotonicity #47]: #49
   23.90 +#68 := [trans #50 #66]: #67
   23.91 +#30 := [asserted]: #14
   23.92 +#69 := [mp #30 #68]: #64
   23.93 +#85 := [mp~ #69 #82]: #80
   23.94 +#86 := [mp #85 #111]: #94
   23.95 +#168 := (or #102 #166)
   23.96 +#169 := [th-lemma]: #168
   23.97 +#170 := [unit-resolution #169 #86]: #166
   23.98 +#167 := (>= #97 1::int)
   23.99 +#171 := (or #102 #167)
  23.100 +#172 := [th-lemma]: #171
  23.101 +#173 := [unit-resolution #172 #86]: #167
  23.102 +[th-lemma #173 #170]: false
  23.103 +unsat
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_10	Tue Oct 20 10:11:30 2009 +0200
    24.3 @@ -0,0 +1,4 @@
    24.4 +(benchmark Isabelle
    24.5 +:assumption (not (forall (?x1 Int) (?x2 Int) (or (< 2 (+ ?x1 ?x2)) (or (= (+ ?x1 ?x2) 2) (< (+ ?x1 ?x2) 2)))))
    24.6 +:formula true
    24.7 +)
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_10.proof	Tue Oct 20 10:11:30 2009 +0200
    25.3 @@ -0,0 +1,111 @@
    25.4 +#2 := false
    25.5 +#4 := 2::int
    25.6 +decl ?x1!1 :: int
    25.7 +#85 := ?x1!1
    25.8 +decl ?x2!0 :: int
    25.9 +#84 := ?x2!0
   25.10 +#101 := (+ ?x2!0 ?x1!1)
   25.11 +#107 := (>= #101 2::int)
   25.12 +#113 := (<= #101 2::int)
   25.13 +#116 := (not #113)
   25.14 +#110 := (not #107)
   25.15 +#104 := (= #101 2::int)
   25.16 +#119 := (or #104 #110 #116)
   25.17 +#122 := (not #119)
   25.18 +#86 := (+ ?x1!1 ?x2!0)
   25.19 +#87 := (<= #86 2::int)
   25.20 +#88 := (not #87)
   25.21 +#89 := (>= #86 2::int)
   25.22 +#90 := (not #89)
   25.23 +#91 := (= #86 2::int)
   25.24 +#92 := (or #91 #90 #88)
   25.25 +#93 := (not #92)
   25.26 +#123 := (iff #93 #122)
   25.27 +#120 := (iff #92 #119)
   25.28 +#117 := (iff #88 #116)
   25.29 +#114 := (iff #87 #113)
   25.30 +#102 := (= #86 #101)
   25.31 +#103 := [rewrite]: #102
   25.32 +#115 := [monotonicity #103]: #114
   25.33 +#118 := [monotonicity #115]: #117
   25.34 +#111 := (iff #90 #110)
   25.35 +#108 := (iff #89 #107)
   25.36 +#109 := [monotonicity #103]: #108
   25.37 +#112 := [monotonicity #109]: #111
   25.38 +#105 := (iff #91 #104)
   25.39 +#106 := [monotonicity #103]: #105
   25.40 +#121 := [monotonicity #106 #112 #118]: #120
   25.41 +#124 := [monotonicity #121]: #123
   25.42 +#6 := (:var 0 int)
   25.43 +#5 := (:var 1 int)
   25.44 +#7 := (+ #5 #6)
   25.45 +#56 := (<= #7 2::int)
   25.46 +#58 := (not #56)
   25.47 +#54 := (>= #7 2::int)
   25.48 +#51 := (not #54)
   25.49 +#9 := (= #7 2::int)
   25.50 +#67 := (or #9 #51 #58)
   25.51 +#72 := (forall (vars (?x1 int) (?x2 int)) #67)
   25.52 +#75 := (not #72)
   25.53 +#94 := (~ #75 #93)
   25.54 +#95 := [sk]: #94
   25.55 +#10 := (< #7 2::int)
   25.56 +#11 := (or #9 #10)
   25.57 +#8 := (< 2::int #7)
   25.58 +#12 := (or #8 #11)
   25.59 +#13 := (forall (vars (?x1 int) (?x2 int)) #12)
   25.60 +#14 := (not #13)
   25.61 +#78 := (iff #14 #75)
   25.62 +#31 := (= 2::int #7)
   25.63 +#37 := (or #10 #31)
   25.64 +#42 := (or #8 #37)
   25.65 +#45 := (forall (vars (?x1 int) (?x2 int)) #42)
   25.66 +#48 := (not #45)
   25.67 +#76 := (iff #48 #75)
   25.68 +#73 := (iff #45 #72)
   25.69 +#70 := (iff #42 #67)
   25.70 +#61 := (or #51 #9)
   25.71 +#64 := (or #58 #61)
   25.72 +#68 := (iff #64 #67)
   25.73 +#69 := [rewrite]: #68
   25.74 +#65 := (iff #42 #64)
   25.75 +#62 := (iff #37 #61)
   25.76 +#55 := (iff #31 #9)
   25.77 +#57 := [rewrite]: #55
   25.78 +#53 := (iff #10 #51)
   25.79 +#52 := [rewrite]: #53
   25.80 +#63 := [monotonicity #52 #57]: #62
   25.81 +#59 := (iff #8 #58)
   25.82 +#60 := [rewrite]: #59
   25.83 +#66 := [monotonicity #60 #63]: #65
   25.84 +#71 := [trans #66 #69]: #70
   25.85 +#74 := [quant-intro #71]: #73
   25.86 +#77 := [monotonicity #74]: #76
   25.87 +#49 := (iff #14 #48)
   25.88 +#46 := (iff #13 #45)
   25.89 +#43 := (iff #12 #42)
   25.90 +#40 := (iff #11 #37)
   25.91 +#34 := (or #31 #10)
   25.92 +#38 := (iff #34 #37)
   25.93 +#39 := [rewrite]: #38
   25.94 +#35 := (iff #11 #34)
   25.95 +#32 := (iff #9 #31)
   25.96 +#33 := [rewrite]: #32
   25.97 +#36 := [monotonicity #33]: #35
   25.98 +#41 := [trans #36 #39]: #40
   25.99 +#44 := [monotonicity #41]: #43
  25.100 +#47 := [quant-intro #44]: #46
  25.101 +#50 := [monotonicity #47]: #49
  25.102 +#79 := [trans #50 #77]: #78
  25.103 +#30 := [asserted]: #14
  25.104 +#80 := [mp #30 #79]: #75
  25.105 +#98 := [mp~ #80 #95]: #93
  25.106 +#99 := [mp #98 #124]: #122
  25.107 +#126 := [not-or-elim #99]: #107
  25.108 +#100 := (not #104)
  25.109 +#125 := [not-or-elim #99]: #100
  25.110 +#127 := [not-or-elim #99]: #113
  25.111 +#183 := (or #104 #116 #110)
  25.112 +#184 := [th-lemma]: #183
  25.113 +[unit-resolution #184 #127 #125 #126]: false
  25.114 +unsat
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_11	Tue Oct 20 10:11:30 2009 +0200
    26.3 @@ -0,0 +1,4 @@
    26.4 +(benchmark Isabelle
    26.5 +:assumption (not (forall (?x1 Int) (if_then_else (< 0 ?x1) (< 0 (+ ?x1 1)) (< ?x1 1))))
    26.6 +:formula true
    26.7 +)
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_11.proof	Tue Oct 20 10:11:30 2009 +0200
    27.3 @@ -0,0 +1,89 @@
    27.4 +#2 := false
    27.5 +#4 := 0::int
    27.6 +decl ?x1!0 :: int
    27.7 +#78 := ?x1!0
    27.8 +#83 := (<= ?x1!0 0::int)
    27.9 +#146 := (not #83)
   27.10 +#155 := [hypothesis]: #83
   27.11 +#7 := 1::int
   27.12 +#81 := (>= ?x1!0 1::int)
   27.13 +#82 := (not #81)
   27.14 +#156 := (or #82 #146)
   27.15 +#157 := [th-lemma]: #156
   27.16 +#158 := [unit-resolution #157 #155]: #82
   27.17 +#159 := (or #146 #81)
   27.18 +#49 := -1::int
   27.19 +#79 := (<= ?x1!0 -1::int)
   27.20 +#80 := (not #79)
   27.21 +#84 := (ite #83 #82 #80)
   27.22 +#85 := (not #84)
   27.23 +#5 := (:var 0 int)
   27.24 +#50 := (<= #5 -1::int)
   27.25 +#51 := (not #50)
   27.26 +#55 := (>= #5 1::int)
   27.27 +#54 := (not #55)
   27.28 +#45 := (<= #5 0::int)
   27.29 +#61 := (ite #45 #54 #51)
   27.30 +#66 := (forall (vars (?x1 int)) #61)
   27.31 +#69 := (not #66)
   27.32 +#86 := (~ #69 #85)
   27.33 +#87 := [sk]: #86
   27.34 +#10 := (< #5 1::int)
   27.35 +#8 := (+ #5 1::int)
   27.36 +#9 := (< 0::int #8)
   27.37 +#6 := (< 0::int #5)
   27.38 +#11 := (ite #6 #9 #10)
   27.39 +#12 := (forall (vars (?x1 int)) #11)
   27.40 +#13 := (not #12)
   27.41 +#72 := (iff #13 #69)
   27.42 +#30 := (+ 1::int #5)
   27.43 +#33 := (< 0::int #30)
   27.44 +#36 := (ite #6 #33 #10)
   27.45 +#39 := (forall (vars (?x1 int)) #36)
   27.46 +#42 := (not #39)
   27.47 +#70 := (iff #42 #69)
   27.48 +#67 := (iff #39 #66)
   27.49 +#64 := (iff #36 #61)
   27.50 +#46 := (not #45)
   27.51 +#58 := (ite #46 #51 #54)
   27.52 +#62 := (iff #58 #61)
   27.53 +#63 := [rewrite]: #62
   27.54 +#59 := (iff #36 #58)
   27.55 +#56 := (iff #10 #54)
   27.56 +#57 := [rewrite]: #56
   27.57 +#52 := (iff #33 #51)
   27.58 +#53 := [rewrite]: #52
   27.59 +#47 := (iff #6 #46)
   27.60 +#48 := [rewrite]: #47
   27.61 +#60 := [monotonicity #48 #53 #57]: #59
   27.62 +#65 := [trans #60 #63]: #64
   27.63 +#68 := [quant-intro #65]: #67
   27.64 +#71 := [monotonicity #68]: #70
   27.65 +#43 := (iff #13 #42)
   27.66 +#40 := (iff #12 #39)
   27.67 +#37 := (iff #11 #36)
   27.68 +#34 := (iff #9 #33)
   27.69 +#31 := (= #8 #30)
   27.70 +#32 := [rewrite]: #31
   27.71 +#35 := [monotonicity #32]: #34
   27.72 +#38 := [monotonicity #35]: #37
   27.73 +#41 := [quant-intro #38]: #40
   27.74 +#44 := [monotonicity #41]: #43
   27.75 +#73 := [trans #44 #71]: #72
   27.76 +#29 := [asserted]: #13
   27.77 +#74 := [mp #29 #73]: #69
   27.78 +#90 := [mp~ #74 #87]: #85
   27.79 +#151 := (or #84 #146 #81)
   27.80 +#152 := [def-axiom]: #151
   27.81 +#160 := [unit-resolution #152 #90]: #159
   27.82 +#161 := [unit-resolution #160 #158 #155]: false
   27.83 +#162 := [lemma #161]: #146
   27.84 +#163 := (or #80 #83)
   27.85 +#164 := [th-lemma]: #163
   27.86 +#165 := [unit-resolution #164 #162]: #80
   27.87 +#166 := (or #83 #79)
   27.88 +#153 := (or #84 #83 #79)
   27.89 +#154 := [def-axiom]: #153
   27.90 +#167 := [unit-resolution #154 #90]: #166
   27.91 +[unit-resolution #167 #165 #162]: false
   27.92 +unsat
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_12	Tue Oct 20 10:11:30 2009 +0200
    28.3 @@ -0,0 +1,4 @@
    28.4 +(benchmark Isabelle
    28.5 +:assumption (not (if_then_else (forall (?x1 Int) (or (< ?x1 0) (< 0 ?x1))) false true))
    28.6 +:formula true
    28.7 +)
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_12.proof	Tue Oct 20 10:11:30 2009 +0200
    29.3 @@ -0,0 +1,83 @@
    29.4 +#2 := false
    29.5 +#5 := 0::int
    29.6 +#4 := (:var 0 int)
    29.7 +#42 := (<= #4 0::int)
    29.8 +#43 := (not #42)
    29.9 +#40 := (>= #4 0::int)
   29.10 +#38 := (not #40)
   29.11 +#46 := (or #38 #43)
   29.12 +#49 := (forall (vars (?x1 int)) #46)
   29.13 +#524 := (not #49)
   29.14 +#118 := (<= 0::int 0::int)
   29.15 +#205 := (not #118)
   29.16 +#119 := (>= 0::int 0::int)
   29.17 +#206 := (not #119)
   29.18 +#120 := (or #206 #205)
   29.19 +#183 := (or #524 #120)
   29.20 +#172 := (iff #183 #524)
   29.21 +#525 := (or #524 false)
   29.22 +#168 := (iff #525 #524)
   29.23 +#510 := [rewrite]: #168
   29.24 +#184 := (iff #183 #525)
   29.25 +#528 := (iff #120 false)
   29.26 +#197 := (or false false)
   29.27 +#532 := (iff #197 false)
   29.28 +#533 := [rewrite]: #532
   29.29 +#530 := (iff #120 #197)
   29.30 +#523 := (iff #205 false)
   29.31 +#1 := true
   29.32 +#209 := (not true)
   29.33 +#211 := (iff #209 false)
   29.34 +#208 := [rewrite]: #211
   29.35 +#185 := (iff #205 #209)
   29.36 +#527 := (iff #118 true)
   29.37 +#529 := [rewrite]: #527
   29.38 +#316 := [monotonicity #529]: #185
   29.39 +#196 := [trans #316 #208]: #523
   29.40 +#212 := (iff #206 false)
   29.41 +#210 := (iff #206 #209)
   29.42 +#207 := (iff #119 true)
   29.43 +#198 := [rewrite]: #207
   29.44 +#138 := [monotonicity #198]: #210
   29.45 +#191 := [trans #138 #208]: #212
   29.46 +#531 := [monotonicity #191 #196]: #530
   29.47 +#534 := [trans #531 #533]: #528
   29.48 +#526 := [monotonicity #534]: #184
   29.49 +#173 := [trans #526 #510]: #172
   29.50 +#188 := [quant-inst]: #183
   29.51 +#174 := [mp #188 #173]: #524
   29.52 +#60 := (~ #49 #49)
   29.53 +#58 := (~ #46 #46)
   29.54 +#59 := [refl]: #58
   29.55 +#61 := [nnf-pos #59]: #60
   29.56 +#7 := (< 0::int #4)
   29.57 +#6 := (< #4 0::int)
   29.58 +#8 := (or #6 #7)
   29.59 +#9 := (forall (vars (?x1 int)) #8)
   29.60 +#10 := (ite #9 false true)
   29.61 +#11 := (not #10)
   29.62 +#52 := (iff #11 #49)
   29.63 +#50 := (iff #9 #49)
   29.64 +#47 := (iff #8 #46)
   29.65 +#44 := (iff #7 #43)
   29.66 +#45 := [rewrite]: #44
   29.67 +#39 := (iff #6 #38)
   29.68 +#41 := [rewrite]: #39
   29.69 +#48 := [monotonicity #41 #45]: #47
   29.70 +#51 := [quant-intro #48]: #50
   29.71 +#36 := (iff #11 #9)
   29.72 +#28 := (not #9)
   29.73 +#31 := (not #28)
   29.74 +#34 := (iff #31 #9)
   29.75 +#35 := [rewrite]: #34
   29.76 +#32 := (iff #11 #31)
   29.77 +#29 := (iff #10 #28)
   29.78 +#30 := [rewrite]: #29
   29.79 +#33 := [monotonicity #30]: #32
   29.80 +#37 := [trans #33 #35]: #36
   29.81 +#53 := [trans #37 #51]: #52
   29.82 +#27 := [asserted]: #11
   29.83 +#54 := [mp #27 #53]: #49
   29.84 +#62 := [mp~ #54 #61]: #49
   29.85 +[unit-resolution #62 #174]: false
   29.86 +unsat
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_13	Tue Oct 20 10:11:30 2009 +0200
    30.3 @@ -0,0 +1,4 @@
    30.4 +(benchmark Isabelle
    30.5 +:assumption (not (< 0 (ite (forall (?x1 Int) (or (< ?x1 0) (< 0 ?x1))) (~ 1) 3)))
    30.6 +:formula true
    30.7 +)
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_13.proof	Tue Oct 20 10:11:30 2009 +0200
    31.3 @@ -0,0 +1,180 @@
    31.4 +#2 := false
    31.5 +#4 := 0::int
    31.6 +#5 := (:var 0 int)
    31.7 +#48 := (<= #5 0::int)
    31.8 +#49 := (not #48)
    31.9 +#45 := (>= #5 0::int)
   31.10 +#44 := (not #45)
   31.11 +#52 := (or #44 #49)
   31.12 +#55 := (forall (vars (?x1 int)) #52)
   31.13 +#86 := (not #55)
   31.14 +#604 := (<= 0::int 0::int)
   31.15 +#264 := (not #604)
   31.16 +#269 := (>= 0::int 0::int)
   31.17 +#605 := (not #269)
   31.18 +#265 := (or #605 #264)
   31.19 +#588 := (or #86 #265)
   31.20 +#584 := (iff #588 #86)
   31.21 +#311 := (or #86 false)
   31.22 +#314 := (iff #311 #86)
   31.23 +#208 := [rewrite]: #314
   31.24 +#312 := (iff #588 #311)
   31.25 +#599 := (iff #265 false)
   31.26 +#598 := (or false false)
   31.27 +#241 := (iff #598 false)
   31.28 +#601 := [rewrite]: #241
   31.29 +#600 := (iff #265 #598)
   31.30 +#597 := (iff #264 false)
   31.31 +#1 := true
   31.32 +#590 := (not true)
   31.33 +#255 := (iff #590 false)
   31.34 +#256 := [rewrite]: #255
   31.35 +#596 := (iff #264 #590)
   31.36 +#594 := (iff #604 true)
   31.37 +#595 := [rewrite]: #594
   31.38 +#591 := [monotonicity #595]: #596
   31.39 +#235 := [trans #591 #256]: #597
   31.40 +#592 := (iff #605 false)
   31.41 +#253 := (iff #605 #590)
   31.42 +#606 := (iff #269 true)
   31.43 +#249 := [rewrite]: #606
   31.44 +#254 := [monotonicity #249]: #253
   31.45 +#593 := [trans #254 #256]: #592
   31.46 +#240 := [monotonicity #593 #235]: #600
   31.47 +#602 := [trans #240 #601]: #599
   31.48 +#313 := [monotonicity #602]: #312
   31.49 +#585 := [trans #313 #208]: #584
   31.50 +#589 := [quant-inst]: #588
   31.51 +#307 := [mp #589 #585]: #86
   31.52 +decl z3name!0 :: bool
   31.53 +#83 := z3name!0
   31.54 +#12 := 3::int
   31.55 +#32 := -1::int
   31.56 +#92 := (ite z3name!0 -1::int 3::int)
   31.57 +#290 := (= #92 3::int)
   31.58 +#610 := (not #290)
   31.59 +#607 := (>= #92 3::int)
   31.60 +#609 := (not #607)
   31.61 +#95 := (<= #92 0::int)
   31.62 +#58 := (ite #55 -1::int 3::int)
   31.63 +#64 := (<= #58 0::int)
   31.64 +#96 := (~ #64 #95)
   31.65 +#93 := (= #58 #92)
   31.66 +#90 := (~ #55 z3name!0)
   31.67 +#87 := (or z3name!0 #86)
   31.68 +#84 := (not z3name!0)
   31.69 +#85 := (or #84 #55)
   31.70 +#88 := (and #85 #87)
   31.71 +#89 := [intro-def]: #88
   31.72 +#91 := [apply-def #89]: #90
   31.73 +#94 := [monotonicity #91]: #93
   31.74 +#97 := [monotonicity #94]: #96
   31.75 +#10 := 1::int
   31.76 +#11 := (- 1::int)
   31.77 +#7 := (< 0::int #5)
   31.78 +#6 := (< #5 0::int)
   31.79 +#8 := (or #6 #7)
   31.80 +#9 := (forall (vars (?x1 int)) #8)
   31.81 +#13 := (ite #9 #11 3::int)
   31.82 +#14 := (< 0::int #13)
   31.83 +#15 := (not #14)
   31.84 +#77 := (iff #15 #64)
   31.85 +#35 := (ite #9 -1::int 3::int)
   31.86 +#38 := (< 0::int #35)
   31.87 +#41 := (not #38)
   31.88 +#75 := (iff #41 #64)
   31.89 +#65 := (not #64)
   31.90 +#70 := (not #65)
   31.91 +#73 := (iff #70 #64)
   31.92 +#74 := [rewrite]: #73
   31.93 +#71 := (iff #41 #70)
   31.94 +#68 := (iff #38 #65)
   31.95 +#61 := (< 0::int #58)
   31.96 +#66 := (iff #61 #65)
   31.97 +#67 := [rewrite]: #66
   31.98 +#62 := (iff #38 #61)
   31.99 +#59 := (= #35 #58)
  31.100 +#56 := (iff #9 #55)
  31.101 +#53 := (iff #8 #52)
  31.102 +#50 := (iff #7 #49)
  31.103 +#51 := [rewrite]: #50
  31.104 +#46 := (iff #6 #44)
  31.105 +#47 := [rewrite]: #46
  31.106 +#54 := [monotonicity #47 #51]: #53
  31.107 +#57 := [quant-intro #54]: #56
  31.108 +#60 := [monotonicity #57]: #59
  31.109 +#63 := [monotonicity #60]: #62
  31.110 +#69 := [trans #63 #67]: #68
  31.111 +#72 := [monotonicity #69]: #71
  31.112 +#76 := [trans #72 #74]: #75
  31.113 +#42 := (iff #15 #41)
  31.114 +#39 := (iff #14 #38)
  31.115 +#36 := (= #13 #35)
  31.116 +#33 := (= #11 -1::int)
  31.117 +#34 := [rewrite]: #33
  31.118 +#37 := [monotonicity #34]: #36
  31.119 +#40 := [monotonicity #37]: #39
  31.120 +#43 := [monotonicity #40]: #42
  31.121 +#78 := [trans #43 #76]: #77
  31.122 +#31 := [asserted]: #15
  31.123 +#79 := [mp #31 #78]: #64
  31.124 +#126 := [mp~ #79 #97]: #95
  31.125 +#266 := (not #95)
  31.126 +#396 := (or #609 #266)
  31.127 +#603 := [th-lemma]: #396
  31.128 +#277 := [unit-resolution #603 #126]: #609
  31.129 +#278 := [hypothesis]: #290
  31.130 +#611 := (or #610 #607)
  31.131 +#612 := [th-lemma]: #611
  31.132 +#613 := [unit-resolution #612 #278 #277]: false
  31.133 +#608 := [lemma #613]: #610
  31.134 +#289 := (or z3name!0 #290)
  31.135 +#293 := [def-axiom]: #289
  31.136 +#308 := [unit-resolution #293 #608]: z3name!0
  31.137 +#129 := (or #55 #84)
  31.138 +decl ?x1!1 :: int
  31.139 +#108 := ?x1!1
  31.140 +#111 := (>= ?x1!1 0::int)
  31.141 +#112 := (not #111)
  31.142 +#109 := (<= ?x1!1 0::int)
  31.143 +#110 := (not #109)
  31.144 +#132 := (or #110 #112)
  31.145 +#135 := (not #132)
  31.146 +#138 := (or z3name!0 #135)
  31.147 +#141 := (and #129 #138)
  31.148 +#113 := (or #112 #110)
  31.149 +#114 := (not #113)
  31.150 +#119 := (or z3name!0 #114)
  31.151 +#122 := (and #85 #119)
  31.152 +#142 := (iff #122 #141)
  31.153 +#139 := (iff #119 #138)
  31.154 +#136 := (iff #114 #135)
  31.155 +#133 := (iff #113 #132)
  31.156 +#134 := [rewrite]: #133
  31.157 +#137 := [monotonicity #134]: #136
  31.158 +#140 := [monotonicity #137]: #139
  31.159 +#130 := (iff #85 #129)
  31.160 +#131 := [rewrite]: #130
  31.161 +#143 := [monotonicity #131 #140]: #142
  31.162 +#123 := (~ #88 #122)
  31.163 +#120 := (~ #87 #119)
  31.164 +#115 := (~ #86 #114)
  31.165 +#116 := [sk]: #115
  31.166 +#106 := (~ z3name!0 z3name!0)
  31.167 +#107 := [refl]: #106
  31.168 +#121 := [monotonicity #107 #116]: #120
  31.169 +#104 := (~ #85 #85)
  31.170 +#102 := (~ #55 #55)
  31.171 +#100 := (~ #52 #52)
  31.172 +#101 := [refl]: #100
  31.173 +#103 := [nnf-pos #101]: #102
  31.174 +#98 := (~ #84 #84)
  31.175 +#99 := [refl]: #98
  31.176 +#105 := [monotonicity #99 #103]: #104
  31.177 +#124 := [monotonicity #105 #121]: #123
  31.178 +#125 := [mp~ #89 #124]: #122
  31.179 +#127 := [mp #125 #143]: #141
  31.180 +#128 := [and-elim #127]: #129
  31.181 +#582 := [unit-resolution #128 #308]: #55
  31.182 +[unit-resolution #582 #307]: false
  31.183 +unsat
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_14	Tue Oct 20 10:11:30 2009 +0200
    32.3 @@ -0,0 +1,4 @@
    32.4 +(benchmark Isabelle
    32.5 +:assumption (not (not (exists (?x1 Int) (?x2 Int) (?x3 Int) (= (+ (* 4 ?x1) (* (~ 6) ?x2)) 1))))
    32.6 +:formula true
    32.7 +)
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_14.proof	Tue Oct 20 10:11:30 2009 +0200
    33.3 @@ -0,0 +1,103 @@
    33.4 +#2 := false
    33.5 +#104 := -1::int
    33.6 +decl ?x1!1 :: int
    33.7 +#86 := ?x1!1
    33.8 +#106 := -4::int
    33.9 +#107 := (* -4::int ?x1!1)
   33.10 +decl ?x2!0 :: int
   33.11 +#85 := ?x2!0
   33.12 +#7 := 6::int
   33.13 +#105 := (* 6::int ?x2!0)
   33.14 +#108 := (+ #105 #107)
   33.15 +#168 := (<= #108 -1::int)
   33.16 +#109 := (= #108 -1::int)
   33.17 +#12 := 1::int
   33.18 +#33 := -6::int
   33.19 +#87 := (* -6::int ?x2!0)
   33.20 +#4 := 4::int
   33.21 +#88 := (* 4::int ?x1!1)
   33.22 +#89 := (+ #88 #87)
   33.23 +#90 := (= #89 1::int)
   33.24 +#112 := (iff #90 #109)
   33.25 +#98 := (+ #87 #88)
   33.26 +#101 := (= #98 1::int)
   33.27 +#110 := (iff #101 #109)
   33.28 +#111 := [rewrite]: #110
   33.29 +#102 := (iff #90 #101)
   33.30 +#99 := (= #89 #98)
   33.31 +#100 := [rewrite]: #99
   33.32 +#103 := [monotonicity #100]: #102
   33.33 +#113 := [trans #103 #111]: #112
   33.34 +#53 := (:var 0 int)
   33.35 +#54 := (* -6::int #53)
   33.36 +#9 := (:var 1 int)
   33.37 +#55 := (* 4::int #9)
   33.38 +#56 := (+ #55 #54)
   33.39 +#76 := (= #56 1::int)
   33.40 +#74 := (exists (vars (?x1 int) (?x2 int)) #76)
   33.41 +#91 := (~ #74 #90)
   33.42 +#92 := [sk]: #91
   33.43 +#8 := (- 6::int)
   33.44 +#10 := (* #8 #9)
   33.45 +#5 := (:var 2 int)
   33.46 +#6 := (* 4::int #5)
   33.47 +#11 := (+ #6 #10)
   33.48 +#13 := (= #11 1::int)
   33.49 +#14 := (exists (vars (?x1 int) (?x2 int) (?x3 int)) #13)
   33.50 +#15 := (not #14)
   33.51 +#16 := (not #15)
   33.52 +#79 := (iff #16 #74)
   33.53 +#57 := (= 1::int #56)
   33.54 +#58 := (exists (vars (?x1 int) (?x2 int)) #57)
   33.55 +#77 := (iff #58 #74)
   33.56 +#75 := (iff #57 #76)
   33.57 +#73 := [rewrite]: #75
   33.58 +#78 := [quant-intro #73]: #77
   33.59 +#71 := (iff #16 #58)
   33.60 +#63 := (not #58)
   33.61 +#66 := (not #63)
   33.62 +#69 := (iff #66 #58)
   33.63 +#70 := [rewrite]: #69
   33.64 +#67 := (iff #16 #66)
   33.65 +#64 := (iff #15 #63)
   33.66 +#61 := (iff #14 #58)
   33.67 +#36 := (* -6::int #9)
   33.68 +#39 := (+ #6 #36)
   33.69 +#45 := (= 1::int #39)
   33.70 +#50 := (exists (vars (?x1 int) (?x2 int) (?x3 int)) #45)
   33.71 +#59 := (iff #50 #58)
   33.72 +#60 := [elim-unused]: #59
   33.73 +#51 := (iff #14 #50)
   33.74 +#48 := (iff #13 #45)
   33.75 +#42 := (= #39 1::int)
   33.76 +#46 := (iff #42 #45)
   33.77 +#47 := [rewrite]: #46
   33.78 +#43 := (iff #13 #42)
   33.79 +#40 := (= #11 #39)
   33.80 +#37 := (= #10 #36)
   33.81 +#34 := (= #8 -6::int)
   33.82 +#35 := [rewrite]: #34
   33.83 +#38 := [monotonicity #35]: #37
   33.84 +#41 := [monotonicity #38]: #40
   33.85 +#44 := [monotonicity #41]: #43
   33.86 +#49 := [trans #44 #47]: #48
   33.87 +#52 := [quant-intro #49]: #51
   33.88 +#62 := [trans #52 #60]: #61
   33.89 +#65 := [monotonicity #62]: #64
   33.90 +#68 := [monotonicity #65]: #67
   33.91 +#72 := [trans #68 #70]: #71
   33.92 +#80 := [trans #72 #78]: #79
   33.93 +#32 := [asserted]: #16
   33.94 +#81 := [mp #32 #80]: #74
   33.95 +#95 := [mp~ #81 #92]: #90
   33.96 +#96 := [mp #95 #113]: #109
   33.97 +#170 := (not #109)
   33.98 +#171 := (or #170 #168)
   33.99 +#172 := [th-lemma]: #171
  33.100 +#173 := [unit-resolution #172 #96]: #168
  33.101 +#169 := (>= #108 -1::int)
  33.102 +#174 := (or #170 #169)
  33.103 +#175 := [th-lemma]: #174
  33.104 +#176 := [unit-resolution #175 #96]: #169
  33.105 +[th-lemma #176 #173]: false
  33.106 +unsat
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_15	Tue Oct 20 10:11:30 2009 +0200
    34.3 @@ -0,0 +1,4 @@
    34.4 +(benchmark Isabelle
    34.5 +:assumption (not (exists (?x1 Int) (forall (?x2 Int) (?x3 Int) (implies (and (< 0 ?x2) (< 0 ?x3)) (< 0 (+ ?x2 ?x3))))))
    34.6 +:formula true
    34.7 +)
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_15.proof	Tue Oct 20 10:11:30 2009 +0200
    35.3 @@ -0,0 +1,107 @@
    35.4 +#2 := false
    35.5 +#4 := 0::int
    35.6 +decl ?x2!1 :: int
    35.7 +#83 := ?x2!1
    35.8 +decl ?x3!0 :: int
    35.9 +#82 := ?x3!0
   35.10 +#108 := (+ ?x3!0 ?x2!1)
   35.11 +#111 := (<= #108 0::int)
   35.12 +#114 := (not #111)
   35.13 +#89 := (<= ?x2!1 0::int)
   35.14 +#90 := (not #89)
   35.15 +#87 := (<= ?x3!0 0::int)
   35.16 +#88 := (not #87)
   35.17 +#102 := (and #88 #90)
   35.18 +#105 := (not #102)
   35.19 +#117 := (or #105 #114)
   35.20 +#120 := (not #117)
   35.21 +#84 := (+ ?x2!1 ?x3!0)
   35.22 +#85 := (<= #84 0::int)
   35.23 +#86 := (not #85)
   35.24 +#91 := (and #90 #88)
   35.25 +#92 := (not #91)
   35.26 +#93 := (or #92 #86)
   35.27 +#94 := (not #93)
   35.28 +#121 := (iff #94 #120)
   35.29 +#118 := (iff #93 #117)
   35.30 +#115 := (iff #86 #114)
   35.31 +#112 := (iff #85 #111)
   35.32 +#109 := (= #84 #108)
   35.33 +#110 := [rewrite]: #109
   35.34 +#113 := [monotonicity #110]: #112
   35.35 +#116 := [monotonicity #113]: #115
   35.36 +#106 := (iff #92 #105)
   35.37 +#103 := (iff #91 #102)
   35.38 +#104 := [rewrite]: #103
   35.39 +#107 := [monotonicity #104]: #106
   35.40 +#119 := [monotonicity #107 #116]: #118
   35.41 +#122 := [monotonicity #119]: #121
   35.42 +#7 := (:var 0 int)
   35.43 +#5 := (:var 1 int)
   35.44 +#10 := (+ #5 #7)
   35.45 +#63 := (<= #10 0::int)
   35.46 +#64 := (not #63)
   35.47 +#53 := (<= #7 0::int)
   35.48 +#54 := (not #53)
   35.49 +#49 := (<= #5 0::int)
   35.50 +#50 := (not #49)
   35.51 +#57 := (and #50 #54)
   35.52 +#60 := (not #57)
   35.53 +#67 := (or #60 #64)
   35.54 +#70 := (forall (vars (?x2 int) (?x3 int)) #67)
   35.55 +#73 := (not #70)
   35.56 +#95 := (~ #73 #94)
   35.57 +#96 := [sk]: #95
   35.58 +#11 := (< 0::int #10)
   35.59 +#8 := (< 0::int #7)
   35.60 +#6 := (< 0::int #5)
   35.61 +#9 := (and #6 #8)
   35.62 +#12 := (implies #9 #11)
   35.63 +#13 := (forall (vars (?x2 int) (?x3 int)) #12)
   35.64 +#14 := (exists (vars (?x1 int)) #13)
   35.65 +#15 := (not #14)
   35.66 +#76 := (iff #15 #73)
   35.67 +#32 := (not #9)
   35.68 +#33 := (or #32 #11)
   35.69 +#36 := (forall (vars (?x2 int) (?x3 int)) #33)
   35.70 +#46 := (not #36)
   35.71 +#74 := (iff #46 #73)
   35.72 +#71 := (iff #36 #70)
   35.73 +#68 := (iff #33 #67)
   35.74 +#65 := (iff #11 #64)
   35.75 +#66 := [rewrite]: #65
   35.76 +#61 := (iff #32 #60)
   35.77 +#58 := (iff #9 #57)
   35.78 +#55 := (iff #8 #54)
   35.79 +#56 := [rewrite]: #55
   35.80 +#51 := (iff #6 #50)
   35.81 +#52 := [rewrite]: #51
   35.82 +#59 := [monotonicity #52 #56]: #58
   35.83 +#62 := [monotonicity #59]: #61
   35.84 +#69 := [monotonicity #62 #66]: #68
   35.85 +#72 := [quant-intro #69]: #71
   35.86 +#75 := [monotonicity #72]: #74
   35.87 +#47 := (iff #15 #46)
   35.88 +#44 := (iff #14 #36)
   35.89 +#39 := (exists (vars (?x1 int)) #36)
   35.90 +#42 := (iff #39 #36)
   35.91 +#43 := [elim-unused]: #42
   35.92 +#40 := (iff #14 #39)
   35.93 +#37 := (iff #13 #36)
   35.94 +#34 := (iff #12 #33)
   35.95 +#35 := [rewrite]: #34
   35.96 +#38 := [quant-intro #35]: #37
   35.97 +#41 := [quant-intro #38]: #40
   35.98 +#45 := [trans #41 #43]: #44
   35.99 +#48 := [monotonicity #45]: #47
  35.100 +#77 := [trans #48 #75]: #76
  35.101 +#31 := [asserted]: #15
  35.102 +#78 := [mp #31 #77]: #73
  35.103 +#99 := [mp~ #78 #96]: #94
  35.104 +#100 := [mp #99 #122]: #120
  35.105 +#125 := [not-or-elim #100]: #111
  35.106 +#101 := [not-or-elim #100]: #102
  35.107 +#124 := [and-elim #101]: #90
  35.108 +#123 := [and-elim #101]: #88
  35.109 +[th-lemma #123 #124 #125]: false
  35.110 +unsat
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_16	Tue Oct 20 10:11:30 2009 +0200
    36.3 @@ -0,0 +1,4 @@
    36.4 +(benchmark Isabelle
    36.5 +:assumption (not (exists (?x1 Int) (forall (?x2 Int) (?x3 Real) (implies (and (< 0 ?x2) (< 0.0 ?x3)) (< (~ 1) ?x2)))))
    36.6 +:formula true
    36.7 +)
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_16.proof	Tue Oct 20 10:11:30 2009 +0200
    37.3 @@ -0,0 +1,117 @@
    37.4 +#2 := false
    37.5 +#4 := 0::int
    37.6 +decl ?x2!1 :: int
    37.7 +#91 := ?x2!1
    37.8 +#98 := (<= ?x2!1 0::int)
    37.9 +#99 := (not #98)
   37.10 +#7 := 0::real
   37.11 +decl ?x3!0 :: real
   37.12 +#93 := ?x3!0
   37.13 +#96 := (<= ?x3!0 0::real)
   37.14 +#97 := (not #96)
   37.15 +#111 := (and #97 #99)
   37.16 +#114 := (not #111)
   37.17 +#33 := -1::int
   37.18 +#94 := (<= ?x2!1 -1::int)
   37.19 +#95 := (not #94)
   37.20 +#120 := (or #95 #114)
   37.21 +#125 := (not #120)
   37.22 +#100 := (and #99 #97)
   37.23 +#101 := (not #100)
   37.24 +#102 := (or #101 #95)
   37.25 +#103 := (not #102)
   37.26 +#126 := (iff #103 #125)
   37.27 +#123 := (iff #102 #120)
   37.28 +#117 := (or #114 #95)
   37.29 +#121 := (iff #117 #120)
   37.30 +#122 := [rewrite]: #121
   37.31 +#118 := (iff #102 #117)
   37.32 +#115 := (iff #101 #114)
   37.33 +#112 := (iff #100 #111)
   37.34 +#113 := [rewrite]: #112
   37.35 +#116 := [monotonicity #113]: #115
   37.36 +#119 := [monotonicity #116]: #118
   37.37 +#124 := [trans #119 #122]: #123
   37.38 +#127 := [monotonicity #124]: #126
   37.39 +#5 := (:var 1 int)
   37.40 +#75 := (<= #5 -1::int)
   37.41 +#76 := (not #75)
   37.42 +#8 := (:var 0 real)
   37.43 +#65 := (<= #8 0::real)
   37.44 +#66 := (not #65)
   37.45 +#61 := (<= #5 0::int)
   37.46 +#62 := (not #61)
   37.47 +#69 := (and #62 #66)
   37.48 +#72 := (not #69)
   37.49 +#79 := (or #72 #76)
   37.50 +#82 := (forall (vars (?x2 int) (?x3 real)) #79)
   37.51 +#85 := (not #82)
   37.52 +#104 := (~ #85 #103)
   37.53 +#105 := [sk]: #104
   37.54 +#11 := 1::int
   37.55 +#12 := (- 1::int)
   37.56 +#13 := (< #12 #5)
   37.57 +#9 := (< 0::real #8)
   37.58 +#6 := (< 0::int #5)
   37.59 +#10 := (and #6 #9)
   37.60 +#14 := (implies #10 #13)
   37.61 +#15 := (forall (vars (?x2 int) (?x3 real)) #14)
   37.62 +#16 := (exists (vars (?x1 int)) #15)
   37.63 +#17 := (not #16)
   37.64 +#88 := (iff #17 #85)
   37.65 +#36 := (< -1::int #5)
   37.66 +#42 := (not #10)
   37.67 +#43 := (or #42 #36)
   37.68 +#48 := (forall (vars (?x2 int) (?x3 real)) #43)
   37.69 +#58 := (not #48)
   37.70 +#86 := (iff #58 #85)
   37.71 +#83 := (iff #48 #82)
   37.72 +#80 := (iff #43 #79)
   37.73 +#77 := (iff #36 #76)
   37.74 +#78 := [rewrite]: #77
   37.75 +#73 := (iff #42 #72)
   37.76 +#70 := (iff #10 #69)
   37.77 +#67 := (iff #9 #66)
   37.78 +#68 := [rewrite]: #67
   37.79 +#63 := (iff #6 #62)
   37.80 +#64 := [rewrite]: #63
   37.81 +#71 := [monotonicity #64 #68]: #70
   37.82 +#74 := [monotonicity #71]: #73
   37.83 +#81 := [monotonicity #74 #78]: #80
   37.84 +#84 := [quant-intro #81]: #83
   37.85 +#87 := [monotonicity #84]: #86
   37.86 +#59 := (iff #17 #58)
   37.87 +#56 := (iff #16 #48)
   37.88 +#51 := (exists (vars (?x1 int)) #48)
   37.89 +#54 := (iff #51 #48)
   37.90 +#55 := [elim-unused]: #54
   37.91 +#52 := (iff #16 #51)
   37.92 +#49 := (iff #15 #48)
   37.93 +#46 := (iff #14 #43)
   37.94 +#39 := (implies #10 #36)
   37.95 +#44 := (iff #39 #43)
   37.96 +#45 := [rewrite]: #44
   37.97 +#40 := (iff #14 #39)
   37.98 +#37 := (iff #13 #36)
   37.99 +#34 := (= #12 -1::int)
  37.100 +#35 := [rewrite]: #34
  37.101 +#38 := [monotonicity #35]: #37
  37.102 +#41 := [monotonicity #38]: #40
  37.103 +#47 := [trans #41 #45]: #46
  37.104 +#50 := [quant-intro #47]: #49
  37.105 +#53 := [quant-intro #50]: #52
  37.106 +#57 := [trans #53 #55]: #56
  37.107 +#60 := [monotonicity #57]: #59
  37.108 +#89 := [trans #60 #87]: #88
  37.109 +#32 := [asserted]: #17
  37.110 +#90 := [mp #32 #89]: #85
  37.111 +#108 := [mp~ #90 #105]: #103
  37.112 +#109 := [mp #108 #127]: #125
  37.113 +#128 := [not-or-elim #109]: #111
  37.114 +#130 := [and-elim #128]: #99
  37.115 +#110 := [not-or-elim #109]: #94
  37.116 +#186 := (or #95 #98)
  37.117 +#187 := [th-lemma]: #186
  37.118 +#188 := [unit-resolution #187 #110]: #98
  37.119 +[unit-resolution #188 #130]: false
  37.120 +unsat
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_17	Tue Oct 20 10:11:30 2009 +0200
    38.3 @@ -0,0 +1,4 @@
    38.4 +(benchmark Isabelle
    38.5 +:assumption (not (exists (?x1 Int) (implies (forall (?x2 Int) (implies (<= ?x1 ?x2) (< 0 ?x2))) (< 0 ?x1))))
    38.6 +:formula true
    38.7 +)
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_17.proof	Tue Oct 20 10:11:30 2009 +0200
    39.3 @@ -0,0 +1,148 @@
    39.4 +#2 := false
    39.5 +#144 := (not false)
    39.6 +#7 := 0::int
    39.7 +#5 := (:var 0 int)
    39.8 +#52 := (<= #5 0::int)
    39.9 +#53 := (not #52)
   39.10 +#147 := (or #53 #144)
   39.11 +#150 := (not #147)
   39.12 +#153 := (forall (vars (?x1 int)) #150)
   39.13 +#180 := (iff #153 false)
   39.14 +#175 := (forall (vars (?x1 int)) false)
   39.15 +#178 := (iff #175 false)
   39.16 +#179 := [elim-unused]: #178
   39.17 +#176 := (iff #153 #175)
   39.18 +#173 := (iff #150 false)
   39.19 +#1 := true
   39.20 +#168 := (not true)
   39.21 +#171 := (iff #168 false)
   39.22 +#172 := [rewrite]: #171
   39.23 +#169 := (iff #150 #168)
   39.24 +#166 := (iff #147 true)
   39.25 +#161 := (or #53 true)
   39.26 +#164 := (iff #161 true)
   39.27 +#165 := [rewrite]: #164
   39.28 +#162 := (iff #147 #161)
   39.29 +#159 := (iff #144 true)
   39.30 +#160 := [rewrite]: #159
   39.31 +#163 := [monotonicity #160]: #162
   39.32 +#167 := [trans #163 #165]: #166
   39.33 +#170 := [monotonicity #167]: #169
   39.34 +#174 := [trans #170 #172]: #173
   39.35 +#177 := [quant-intro #174]: #176
   39.36 +#181 := [trans #177 #179]: #180
   39.37 +#56 := -1::int
   39.38 +#57 := (* -1::int #5)
   39.39 +#4 := (:var 1 int)
   39.40 +#58 := (+ #4 #57)
   39.41 +#59 := (<= #58 0::int)
   39.42 +#62 := (not #59)
   39.43 +#68 := (or #53 #62)
   39.44 +#73 := (forall (vars (?x2 int)) #68)
   39.45 +#76 := (not #73)
   39.46 +#79 := (or #53 #76)
   39.47 +#105 := (not #79)
   39.48 +#123 := (forall (vars (?x1 int)) #105)
   39.49 +#156 := (iff #123 #153)
   39.50 +#127 := (forall (vars (?x2 int)) #53)
   39.51 +#130 := (not #127)
   39.52 +#133 := (or #53 #130)
   39.53 +#136 := (not #133)
   39.54 +#139 := (forall (vars (?x1 int)) #136)
   39.55 +#154 := (iff #139 #153)
   39.56 +#155 := [rewrite]: #154
   39.57 +#140 := (iff #123 #139)
   39.58 +#141 := [rewrite]: #140
   39.59 +#157 := [trans #141 #155]: #156
   39.60 +#116 := (and #52 #73)
   39.61 +#119 := (forall (vars (?x1 int)) #116)
   39.62 +#124 := (iff #119 #123)
   39.63 +#113 := (iff #116 #105)
   39.64 +#122 := [rewrite]: #113
   39.65 +#125 := [quant-intro #122]: #124
   39.66 +#94 := (not #53)
   39.67 +#104 := (and #94 #73)
   39.68 +#108 := (forall (vars (?x1 int)) #104)
   39.69 +#120 := (iff #108 #119)
   39.70 +#117 := (iff #104 #116)
   39.71 +#114 := (iff #94 #52)
   39.72 +#115 := [rewrite]: #114
   39.73 +#118 := [monotonicity #115]: #117
   39.74 +#121 := [quant-intro #118]: #120
   39.75 +#82 := (exists (vars (?x1 int)) #79)
   39.76 +#85 := (not #82)
   39.77 +#109 := (~ #85 #108)
   39.78 +#106 := (~ #105 #104)
   39.79 +#101 := (not #76)
   39.80 +#102 := (~ #101 #73)
   39.81 +#99 := (~ #73 #73)
   39.82 +#97 := (~ #68 #68)
   39.83 +#98 := [refl]: #97
   39.84 +#100 := [nnf-pos #98]: #99
   39.85 +#103 := [nnf-neg #100]: #102
   39.86 +#95 := (~ #94 #94)
   39.87 +#96 := [refl]: #95
   39.88 +#107 := [nnf-neg #96 #103]: #106
   39.89 +#110 := [nnf-neg #107]: #109
   39.90 +#8 := (< 0::int #5)
   39.91 +#6 := (<= #4 #5)
   39.92 +#9 := (implies #6 #8)
   39.93 +#10 := (forall (vars (?x2 int)) #9)
   39.94 +#11 := (implies #10 #8)
   39.95 +#12 := (exists (vars (?x1 int)) #11)
   39.96 +#13 := (not #12)
   39.97 +#88 := (iff #13 #85)
   39.98 +#30 := (not #6)
   39.99 +#31 := (or #30 #8)
  39.100 +#34 := (forall (vars (?x2 int)) #31)
  39.101 +#40 := (not #34)
  39.102 +#41 := (or #8 #40)
  39.103 +#46 := (exists (vars (?x1 int)) #41)
  39.104 +#49 := (not #46)
  39.105 +#86 := (iff #49 #85)
  39.106 +#83 := (iff #46 #82)
  39.107 +#80 := (iff #41 #79)
  39.108 +#77 := (iff #40 #76)
  39.109 +#74 := (iff #34 #73)
  39.110 +#71 := (iff #31 #68)
  39.111 +#65 := (or #62 #53)
  39.112 +#69 := (iff #65 #68)
  39.113 +#70 := [rewrite]: #69
  39.114 +#66 := (iff #31 #65)
  39.115 +#54 := (iff #8 #53)
  39.116 +#55 := [rewrite]: #54
  39.117 +#63 := (iff #30 #62)
  39.118 +#60 := (iff #6 #59)
  39.119 +#61 := [rewrite]: #60
  39.120 +#64 := [monotonicity #61]: #63
  39.121 +#67 := [monotonicity #64 #55]: #66
  39.122 +#72 := [trans #67 #70]: #71
  39.123 +#75 := [quant-intro #72]: #74
  39.124 +#78 := [monotonicity #75]: #77
  39.125 +#81 := [monotonicity #55 #78]: #80
  39.126 +#84 := [quant-intro #81]: #83
  39.127 +#87 := [monotonicity #84]: #86
  39.128 +#50 := (iff #13 #49)
  39.129 +#47 := (iff #12 #46)
  39.130 +#44 := (iff #11 #41)
  39.131 +#37 := (implies #34 #8)
  39.132 +#42 := (iff #37 #41)
  39.133 +#43 := [rewrite]: #42
  39.134 +#38 := (iff #11 #37)
  39.135 +#35 := (iff #10 #34)
  39.136 +#32 := (iff #9 #31)
  39.137 +#33 := [rewrite]: #32
  39.138 +#36 := [quant-intro #33]: #35
  39.139 +#39 := [monotonicity #36]: #38
  39.140 +#45 := [trans #39 #43]: #44
  39.141 +#48 := [quant-intro #45]: #47
  39.142 +#51 := [monotonicity #48]: #50
  39.143 +#89 := [trans #51 #87]: #88
  39.144 +#29 := [asserted]: #13
  39.145 +#90 := [mp #29 #89]: #85
  39.146 +#111 := [mp~ #90 #110]: #108
  39.147 +#112 := [mp #111 #121]: #119
  39.148 +#126 := [mp #112 #125]: #123
  39.149 +#158 := [mp #126 #157]: #153
  39.150 +[mp #158 #181]: false
  39.151 +unsat
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_18	Tue Oct 20 10:11:30 2009 +0200
    40.3 @@ -0,0 +1,7 @@
    40.4 +(benchmark Isabelle
    40.5 +:extrafuns (
    40.6 +  (uf_1 Int)
    40.7 + )
    40.8 +:assumption (not (forall (?x1 Int) (implies (< ?x1 uf_1) (< (* 2 ?x1) (* 2 uf_1))) :pat{ ?x1 }))
    40.9 +:formula true
   40.10 +)
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/src/HOL/SMT/Examples/cert/z3_arith_quant_18.proof	Tue Oct 20 10:11:30 2009 +0200
    41.3 @@ -0,0 +1,112 @@
    41.4 +#2 := false
    41.5 +#43 := 0::int
    41.6 +decl ?x1!0 :: int
    41.7 +#78 := ?x1!0
    41.8 +#56 := -2::int
    41.9 +#113 := (* -2::int ?x1!0)
   41.10 +decl uf_1 :: int
   41.11 +#6 := uf_1
   41.12 +#8 := 2::int
   41.13 +#10 := (* 2::int uf_1)
   41.14 +#114 := (+ #10 #113)
   41.15 +#115 := (<= #114 0::int)
   41.16 +#120 := (not #115)
   41.17 +#41 := -1::int
   41.18 +#100 := (* -1::int ?x1!0)
   41.19 +#101 := (+ uf_1 #100)
   41.20 +#102 := (<= #101 0::int)
   41.21 +#123 := (or #102 #120)
   41.22 +#126 := (not #123)
   41.23 +#59 := (* -2::int uf_1)
   41.24 +#79 := (* 2::int ?x1!0)
   41.25 +#80 := (+ #79 #59)
   41.26 +#81 := (>= #80 0::int)
   41.27 +#82 := (not #81)
   41.28 +#45 := (* -1::int uf_1)
   41.29 +#83 := (+ ?x1!0 #45)
   41.30 +#84 := (>= #83 0::int)
   41.31 +#85 := (or #84 #82)
   41.32 +#86 := (not #85)
   41.33 +#127 := (iff #86 #126)
   41.34 +#124 := (iff #85 #123)
   41.35 +#121 := (iff #82 #120)
   41.36 +#118 := (iff #81 #115)
   41.37 +#107 := (+ #59 #79)
   41.38 +#110 := (>= #107 0::int)
   41.39 +#116 := (iff #110 #115)
   41.40 +#117 := [rewrite]: #116
   41.41 +#111 := (iff #81 #110)
   41.42 +#108 := (= #80 #107)
   41.43 +#109 := [rewrite]: #108
   41.44 +#112 := [monotonicity #109]: #111
   41.45 +#119 := [trans #112 #117]: #118
   41.46 +#122 := [monotonicity #119]: #121
   41.47 +#105 := (iff #84 #102)
   41.48 +#94 := (+ #45 ?x1!0)
   41.49 +#97 := (>= #94 0::int)
   41.50 +#103 := (iff #97 #102)
   41.51 +#104 := [rewrite]: #103
   41.52 +#98 := (iff #84 #97)
   41.53 +#95 := (= #83 #94)
   41.54 +#96 := [rewrite]: #95
   41.55 +#99 := [monotonicity #96]: #98
   41.56 +#106 := [trans #99 #104]: #105
   41.57 +#125 := [monotonicity #106 #122]: #124
   41.58 +#128 := [monotonicity #125]: #127
   41.59 +#4 := (:var 0 int)
   41.60 +#5 := (pattern #4)
   41.61 +#9 := (* 2::int #4)
   41.62 +#60 := (+ #9 #59)
   41.63 +#58 := (>= #60 0::int)
   41.64 +#57 := (not #58)
   41.65 +#46 := (+ #4 #45)
   41.66 +#44 := (>= #46 0::int)
   41.67 +#63 := (or #44 #57)
   41.68 +#66 := (forall (vars (?x1 int)) (:pat #5) #63)
   41.69 +#69 := (not #66)
   41.70 +#87 := (~ #69 #86)
   41.71 +#88 := [sk]: #87
   41.72 +#11 := (< #9 #10)
   41.73 +#7 := (< #4 uf_1)
   41.74 +#12 := (implies #7 #11)
   41.75 +#13 := (forall (vars (?x1 int)) (:pat #5) #12)
   41.76 +#14 := (not #13)
   41.77 +#72 := (iff #14 #69)
   41.78 +#31 := (not #7)
   41.79 +#32 := (or #31 #11)
   41.80 +#35 := (forall (vars (?x1 int)) (:pat #5) #32)
   41.81 +#38 := (not #35)
   41.82 +#70 := (iff #38 #69)
   41.83 +#67 := (iff #35 #66)
   41.84 +#64 := (iff #32 #63)
   41.85 +#61 := (iff #11 #57)
   41.86 +#62 := [rewrite]: #61
   41.87 +#54 := (iff #31 #44)
   41.88 +#42 := (not #44)
   41.89 +#49 := (not #42)
   41.90 +#52 := (iff #49 #44)
   41.91 +#53 := [rewrite]: #52
   41.92 +#50 := (iff #31 #49)
   41.93 +#47 := (iff #7 #42)
   41.94 +#48 := [rewrite]: #47
   41.95 +#51 := [monotonicity #48]: #50
   41.96 +#55 := [trans #51 #53]: #54
   41.97 +#65 := [monotonicity #55 #62]: #64
   41.98 +#68 := [quant-intro #65]: #67
   41.99 +#71 := [monotonicity #68]: #70
  41.100 +#39 := (iff #14 #38)
  41.101 +#36 := (iff #13 #35)
  41.102 +#33 := (iff #12 #32)
  41.103 +#34 := [rewrite]: #33
  41.104 +#37 := [quant-intro #34]: #36
  41.105 +#40 := [monotonicity #37]: #39
  41.106 +#73 := [trans #40 #71]: #72
  41.107 +#30 := [asserted]: #14
  41.108 +#74 := [mp #30 #73]: #69
  41.109 +#91 := [mp~ #74 #88]: #86
  41.110 +#92 := [mp #91 #128]: #126
  41.111 +#130 := [not-or-elim #92]: #115
  41.112 +#93 := (not #102)
  41.113 +#129 := [not-or-elim #92]: #93
  41.114 +[th-lemma #129 #130]: false
  41.115 +unsat
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_01	Tue Oct 20 10:11:30 2009 +0200
    42.3 @@ -0,0 +1,12 @@
    42.4 +(benchmark Isabelle
    42.5 +:extrafuns (
    42.6 +  (uf_1 BitVec[2] Int)
    42.7 + )
    42.8 +:assumption (= (uf_1 bv0[2]) 0)
    42.9 +:assumption (= (uf_1 bv1[2]) 1)
   42.10 +:assumption (= (uf_1 bv2[2]) 2)
   42.11 +:assumption (= (uf_1 bv3[2]) 3)
   42.12 +:assumption (forall (?x1 BitVec[2]) (< 0 (uf_1 ?x1)))
   42.13 +:assumption (not (forall (?x2 Int) (implies (< ?x2 0) (forall (?x3 BitVec[2]) (< ?x2 (uf_1 ?x3))))))
   42.14 +:formula true
   42.15 +)
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_01.proof	Tue Oct 20 10:11:30 2009 +0200
    43.3 @@ -0,0 +1,43 @@
    43.4 +#2 := false
    43.5 +#6 := 0::int
    43.6 +decl uf_1 :: (-> bv[2] int)
    43.7 +#4 := bv[0:2]
    43.8 +#5 := (uf_1 bv[0:2])
    43.9 +#225 := (<= #5 0::int)
   43.10 +#311 := (not #225)
   43.11 +#20 := (:var 0 bv[2])
   43.12 +#21 := (uf_1 #20)
   43.13 +#640 := (pattern #21)
   43.14 +#54 := (<= #21 0::int)
   43.15 +#55 := (not #54)
   43.16 +#641 := (forall (vars (?x1 bv[2])) (:pat #640) #55)
   43.17 +#58 := (forall (vars (?x1 bv[2])) #55)
   43.18 +#644 := (iff #58 #641)
   43.19 +#642 := (iff #55 #55)
   43.20 +#643 := [refl]: #642
   43.21 +#645 := [quant-intro #643]: #644
   43.22 +#113 := (~ #58 #58)
   43.23 +#115 := (~ #55 #55)
   43.24 +#116 := [refl]: #115
   43.25 +#114 := [nnf-pos #116]: #113
   43.26 +#22 := (< 0::int #21)
   43.27 +#23 := (forall (vars (?x1 bv[2])) #22)
   43.28 +#59 := (iff #23 #58)
   43.29 +#56 := (iff #22 #55)
   43.30 +#57 := [rewrite]: #56
   43.31 +#60 := [quant-intro #57]: #59
   43.32 +#51 := [asserted]: #23
   43.33 +#61 := [mp #51 #60]: #58
   43.34 +#111 := [mp~ #61 #114]: #58
   43.35 +#646 := [mp #111 #645]: #641
   43.36 +#227 := (not #641)
   43.37 +#313 := (or #227 #311)
   43.38 +#304 := [quant-inst]: #313
   43.39 +#635 := [unit-resolution #304 #646]: #311
   43.40 +#7 := (= #5 0::int)
   43.41 +#47 := [asserted]: #7
   43.42 +#638 := (not #7)
   43.43 +#633 := (or #638 #225)
   43.44 +#639 := [th-lemma]: #633
   43.45 +[unit-resolution #639 #47 #635]: false
   43.46 +unsat
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_02	Tue Oct 20 10:11:30 2009 +0200
    44.3 @@ -0,0 +1,12 @@
    44.4 +(benchmark Isabelle
    44.5 +:extrasorts ( T2 T1)
    44.6 +:extrafuns (
    44.7 +  (uf_2 T1)
    44.8 +  (uf_1 BitVec[4] BitVec[4] T1)
    44.9 +  (uf_3 T1 T2)
   44.10 +  (uf_4 BitVec[4])
   44.11 + )
   44.12 +:assumption (forall (?x1 BitVec[4]) (?x2 BitVec[4]) (iff (= (uf_1 ?x1 ?x2) uf_2) (bvule ?x1 ?x2)))
   44.13 +:assumption (not (= (uf_3 (uf_1 bv0[4] uf_4)) (uf_3 uf_2)))
   44.14 +:formula true
   44.15 +)
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_02.proof	Tue Oct 20 10:11:30 2009 +0200
    45.3 @@ -0,0 +1,1 @@
    45.4 +unsat
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_01	Tue Oct 20 10:11:30 2009 +0200
    46.3 @@ -0,0 +1,4 @@
    46.4 +(benchmark Isabelle
    46.5 +:assumption (not (= bv27[4] (bvneg bv5[4])))
    46.6 +:formula true
    46.7 +)
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_01.proof	Tue Oct 20 10:11:30 2009 +0200
    47.3 @@ -0,0 +1,1 @@
    47.4 +unsat
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_02	Tue Oct 20 10:11:30 2009 +0200
    48.3 @@ -0,0 +1,4 @@
    48.4 +(benchmark Isabelle
    48.5 +:assumption (not (= bv27[4] bv11[4]))
    48.6 +:formula true
    48.7 +)
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_02.proof	Tue Oct 20 10:11:30 2009 +0200
    49.3 @@ -0,0 +1,1 @@
    49.4 +unsat
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_03	Tue Oct 20 10:11:30 2009 +0200
    50.3 @@ -0,0 +1,4 @@
    50.4 +(benchmark Isabelle
    50.5 +:assumption (not (bvult bv23[8] bv27[8]))
    50.6 +:formula true
    50.7 +)
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_03.proof	Tue Oct 20 10:11:30 2009 +0200
    51.3 @@ -0,0 +1,1 @@
    51.4 +unsat
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_04	Tue Oct 20 10:11:30 2009 +0200
    52.3 @@ -0,0 +1,4 @@
    52.4 +(benchmark Isabelle
    52.5 +:assumption (not (= (bvadd bv27[5] bv11[5]) bv6[5]))
    52.6 +:formula true
    52.7 +)
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_04.proof	Tue Oct 20 10:11:30 2009 +0200
    53.3 @@ -0,0 +1,1 @@
    53.4 +unsat
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_05	Tue Oct 20 10:11:30 2009 +0200
    54.3 @@ -0,0 +1,4 @@
    54.4 +(benchmark Isabelle
    54.5 +:assumption (not (= (bvmul bv7[8] bv3[8]) bv21[8]))
    54.6 +:formula true
    54.7 +)
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_05.proof	Tue Oct 20 10:11:30 2009 +0200
    55.3 @@ -0,0 +1,1 @@
    55.4 +unsat
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_06	Tue Oct 20 10:11:30 2009 +0200
    56.3 @@ -0,0 +1,4 @@
    56.4 +(benchmark Isabelle
    56.5 +:assumption (not (= (bvsub bv11[8] bv27[8]) (bvneg bv16[8])))
    56.6 +:formula true
    56.7 +)
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_06.proof	Tue Oct 20 10:11:30 2009 +0200
    57.3 @@ -0,0 +1,1 @@
    57.4 +unsat
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_07	Tue Oct 20 10:11:30 2009 +0200
    58.3 @@ -0,0 +1,4 @@
    58.4 +(benchmark Isabelle
    58.5 +:assumption (not (= (bvneg (bvneg bv11[5])) bv11[5]))
    58.6 +:formula true
    58.7 +)
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_07.proof	Tue Oct 20 10:11:30 2009 +0200
    59.3 @@ -0,0 +1,1 @@
    59.4 +unsat
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_08	Tue Oct 20 10:11:30 2009 +0200
    60.3 @@ -0,0 +1,4 @@
    60.4 +(benchmark Isabelle
    60.5 +:assumption (not (= (bvadd (bvneg bv40[7]) bv1[7]) (bvneg bv39[7])))
    60.6 +:formula true
    60.7 +)
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_08.proof	Tue Oct 20 10:11:30 2009 +0200
    61.3 @@ -0,0 +1,1 @@
    61.4 +unsat
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_09	Tue Oct 20 10:11:30 2009 +0200
    62.3 @@ -0,0 +1,9 @@
    62.4 +(benchmark Isabelle
    62.5 +:extrafuns (
    62.6 +  (uf_1 BitVec[32])
    62.7 +  (uf_2 BitVec[32])
    62.8 +  (uf_3 BitVec[32])
    62.9 + )
   62.10 +:assumption (not (= (bvsub (bvadd (bvadd uf_1 (bvmul bv2[32] uf_2)) uf_3) uf_2) (bvadd (bvadd uf_2 uf_3) uf_1)))
   62.11 +:formula true
   62.12 +)
    63.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_09.proof	Tue Oct 20 10:11:30 2009 +0200
    63.3 @@ -0,0 +1,1 @@
    63.4 +unsat
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_10	Tue Oct 20 10:11:30 2009 +0200
    64.3 @@ -0,0 +1,8 @@
    64.4 +(benchmark Isabelle
    64.5 +:extrafuns (
    64.6 +  (uf_1 BitVec[4])
    64.7 + )
    64.8 +:assumption (= uf_1 bv5[4])
    64.9 +:assumption (not (= (bvmul bv4[4] uf_1) bv4[4]))
   64.10 +:formula true
   64.11 +)
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_arith_10.proof	Tue Oct 20 10:11:30 2009 +0200
    65.3 @@ -0,0 +1,1 @@
    65.4 +unsat
    66.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_01	Tue Oct 20 10:11:30 2009 +0200
    66.3 @@ -0,0 +1,4 @@
    66.4 +(benchmark Isabelle
    66.5 +:assumption (not (= (bvand bv6[32] bv5[32]) bv4[32]))
    66.6 +:formula true
    66.7 +)
    67.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_01.proof	Tue Oct 20 10:11:30 2009 +0200
    67.3 @@ -0,0 +1,1 @@
    67.4 +unsat
    68.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_02	Tue Oct 20 10:11:30 2009 +0200
    68.3 @@ -0,0 +1,4 @@
    68.4 +(benchmark Isabelle
    68.5 +:assumption (not (= (bvor bv6[8] bv3[8]) bv7[8]))
    68.6 +:formula true
    68.7 +)
    69.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_02.proof	Tue Oct 20 10:11:30 2009 +0200
    69.3 @@ -0,0 +1,1 @@
    69.4 +unsat
    70.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_03	Tue Oct 20 10:11:30 2009 +0200
    70.3 @@ -0,0 +1,4 @@
    70.4 +(benchmark Isabelle
    70.5 +:assumption (not (= (bvxor bv240[8] bv255[8]) bv15[8]))
    70.6 +:formula true
    70.7 +)
    71.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_03.proof	Tue Oct 20 10:11:30 2009 +0200
    71.3 @@ -0,0 +1,1 @@
    71.4 +unsat
    72.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_04	Tue Oct 20 10:11:30 2009 +0200
    72.3 @@ -0,0 +1,4 @@
    72.4 +(benchmark Isabelle
    72.5 +:assumption (not (= (bvnot bv240[16]) bv65295[16]))
    72.6 +:formula true
    72.7 +)
    73.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    73.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_04.proof	Tue Oct 20 10:11:30 2009 +0200
    73.3 @@ -0,0 +1,1 @@
    73.4 +unsat
    74.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    74.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_05	Tue Oct 20 10:11:30 2009 +0200
    74.3 @@ -0,0 +1,4 @@
    74.4 +(benchmark Isabelle
    74.5 +:assumption (not (= (concat bv27[4] bv27[8]) bv2843[12]))
    74.6 +:formula true
    74.7 +)
    75.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    75.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_05.proof	Tue Oct 20 10:11:30 2009 +0200
    75.3 @@ -0,0 +1,1 @@
    75.4 +unsat
    76.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    76.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_06	Tue Oct 20 10:11:30 2009 +0200
    76.3 @@ -0,0 +1,4 @@
    76.4 +(benchmark Isabelle
    76.5 +:assumption (not (= (concat bv3[4] bv15[6]) bv207[10]))
    76.6 +:formula true
    76.7 +)
    77.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_06.proof	Tue Oct 20 10:11:30 2009 +0200
    77.3 @@ -0,0 +1,1 @@
    77.4 +unsat
    78.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    78.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_07	Tue Oct 20 10:11:30 2009 +0200
    78.3 @@ -0,0 +1,12 @@
    78.4 +(benchmark Isabelle
    78.5 +:extrasorts ( T1)
    78.6 +:extrafuns (
    78.7 +  (uf_1 Int T1)
    78.8 +  (uf_2 T1 Int)
    78.9 + )
   78.10 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
   78.11 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
   78.12 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
   78.13 +:assumption (not (= (extract[2:1] bv22[4]) bv3[2]))
   78.14 +:formula true
   78.15 +)
    79.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    79.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_07.proof	Tue Oct 20 10:11:30 2009 +0200
    79.3 @@ -0,0 +1,1 @@
    79.4 +unsat
    80.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    80.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_08	Tue Oct 20 10:11:30 2009 +0200
    80.3 @@ -0,0 +1,4 @@
    80.4 +(benchmark Isabelle
    80.5 +:assumption (not (= (zero_extend[6] bv10[4]) bv10[10]))
    80.6 +:formula true
    80.7 +)
    81.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    81.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_08.proof	Tue Oct 20 10:11:30 2009 +0200
    81.3 @@ -0,0 +1,1 @@
    81.4 +unsat
    82.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    82.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_09	Tue Oct 20 10:11:30 2009 +0200
    82.3 @@ -0,0 +1,4 @@
    82.4 +(benchmark Isabelle
    82.5 +:assumption (not (= (sign_extend[2] bv10[4]) bv58[6]))
    82.6 +:formula true
    82.7 +)
    83.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_09.proof	Tue Oct 20 10:11:30 2009 +0200
    83.3 @@ -0,0 +1,1 @@
    83.4 +unsat
    84.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    84.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_10	Tue Oct 20 10:11:30 2009 +0200
    84.3 @@ -0,0 +1,4 @@
    84.4 +(benchmark Isabelle
    84.5 +:assumption (not (= (bvlshr bv19[8] bv2[8]) bv4[8]))
    84.6 +:formula true
    84.7 +)
    85.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    85.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_10.proof	Tue Oct 20 10:11:30 2009 +0200
    85.3 @@ -0,0 +1,1 @@
    85.4 +unsat
    86.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_11	Tue Oct 20 10:11:30 2009 +0200
    86.3 @@ -0,0 +1,4 @@
    86.4 +(benchmark Isabelle
    86.5 +:assumption (not (= (bvashr bv19[8] bv2[8]) bv4[8]))
    86.6 +:formula true
    86.7 +)
    87.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_11.proof	Tue Oct 20 10:11:30 2009 +0200
    87.3 @@ -0,0 +1,1 @@
    87.4 +unsat
    88.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_12	Tue Oct 20 10:11:30 2009 +0200
    88.3 @@ -0,0 +1,12 @@
    88.4 +(benchmark Isabelle
    88.5 +:extrasorts ( T1)
    88.6 +:extrafuns (
    88.7 +  (uf_1 Int T1)
    88.8 +  (uf_2 T1 Int)
    88.9 + )
   88.10 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
   88.11 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
   88.12 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
   88.13 +:assumption (not (= (rotate_right[2] bv6[4]) bv9[4]))
   88.14 +:formula true
   88.15 +)
    89.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_12.proof	Tue Oct 20 10:11:30 2009 +0200
    89.3 @@ -0,0 +1,1 @@
    89.4 +unsat
    90.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_13	Tue Oct 20 10:11:30 2009 +0200
    90.3 @@ -0,0 +1,12 @@
    90.4 +(benchmark Isabelle
    90.5 +:extrasorts ( T1)
    90.6 +:extrafuns (
    90.7 +  (uf_1 Int T1)
    90.8 +  (uf_2 T1 Int)
    90.9 + )
   90.10 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
   90.11 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
   90.12 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
   90.13 +:assumption (not (= (rotate_left[1] bv14[4]) bv13[4]))
   90.14 +:formula true
   90.15 +)
    91.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    91.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_13.proof	Tue Oct 20 10:11:30 2009 +0200
    91.3 @@ -0,0 +1,1 @@
    91.4 +unsat
    92.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_14	Tue Oct 20 10:11:30 2009 +0200
    92.3 @@ -0,0 +1,7 @@
    92.4 +(benchmark Isabelle
    92.5 +:extrafuns (
    92.6 +  (uf_1 BitVec[16])
    92.7 + )
    92.8 +:assumption (not (= (bvor (bvand uf_1 bv65280[16]) (bvand uf_1 bv255[16])) uf_1))
    92.9 +:formula true
   92.10 +)
    93.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_14.proof	Tue Oct 20 10:11:30 2009 +0200
    93.3 @@ -0,0 +1,1 @@
    93.4 +unsat
    94.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_15	Tue Oct 20 10:11:30 2009 +0200
    94.3 @@ -0,0 +1,8 @@
    94.4 +(benchmark Isabelle
    94.5 +:extrafuns (
    94.6 +  (uf_1 BitVec[16])
    94.7 + )
    94.8 +:assumption (bvult uf_1 bv256[16])
    94.9 +:assumption (not (= (bvand uf_1 bv255[16]) uf_1))
   94.10 +:formula true
   94.11 +)
    95.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.2 +++ b/src/HOL/SMT/Examples/cert/z3_bv_bit_15.proof	Tue Oct 20 10:11:30 2009 +0200
    95.3 @@ -0,0 +1,1 @@
    95.4 +unsat
    96.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    96.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_01	Tue Oct 20 10:11:30 2009 +0200
    96.3 @@ -0,0 +1,8 @@
    96.4 +(benchmark Isabelle
    96.5 +:extrasorts ( T1)
    96.6 +:extrapreds (
    96.7 +  (up_1 Int)
    96.8 + )
    96.9 +:assumption (not (forall (?x1 Int) (implies (up_1 ?x1) (forall (?x2 Int) (or (up_1 ?x1) (up_1 ?x2))))))
   96.10 +:formula true
   96.11 +)
    97.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    97.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_01.proof	Tue Oct 20 10:11:30 2009 +0200
    97.3 @@ -0,0 +1,78 @@
    97.4 +#2 := false
    97.5 +decl up_1 :: (-> int bool)
    97.6 +decl ?x1!0 :: int
    97.7 +#54 := ?x1!0
    97.8 +#55 := (up_1 ?x1!0)
    97.9 +#58 := (not #55)
   97.10 +decl ?x2!1 :: int
   97.11 +#66 := ?x2!1
   97.12 +#67 := (up_1 ?x2!1)
   97.13 +#85 := (or #55 #67)
   97.14 +#88 := (not #85)
   97.15 +#91 := (and #55 #88)
   97.16 +#68 := (or #67 #55)
   97.17 +#69 := (not #68)
   97.18 +#63 := (not #58)
   97.19 +#75 := (and #63 #69)
   97.20 +#92 := (iff #75 #91)
   97.21 +#89 := (iff #69 #88)
   97.22 +#86 := (iff #68 #85)
   97.23 +#87 := [rewrite]: #86
   97.24 +#90 := [monotonicity #87]: #89
   97.25 +#83 := (iff #63 #55)
   97.26 +#84 := [rewrite]: #83
   97.27 +#93 := [monotonicity #84 #90]: #92
   97.28 +#6 := (:var 1 int)
   97.29 +#7 := (up_1 #6)
   97.30 +#4 := (:var 0 int)
   97.31 +#5 := (up_1 #4)
   97.32 +#29 := (or #5 #7)
   97.33 +#32 := (forall (vars (?x2 int)) #29)
   97.34 +#38 := (not #5)
   97.35 +#39 := (or #38 #32)
   97.36 +#44 := (forall (vars (?x1 int)) #39)
   97.37 +#47 := (not #44)
   97.38 +#78 := (~ #47 #75)
   97.39 +#56 := (or #5 #55)
   97.40 +#57 := (forall (vars (?x2 int)) #56)
   97.41 +#59 := (or #58 #57)
   97.42 +#60 := (not #59)
   97.43 +#76 := (~ #60 #75)
   97.44 +#70 := (not #57)
   97.45 +#71 := (~ #70 #69)
   97.46 +#72 := [sk]: #71
   97.47 +#64 := (~ #63 #63)
   97.48 +#65 := [refl]: #64
   97.49 +#77 := [nnf-neg #65 #72]: #76
   97.50 +#61 := (~ #47 #60)
   97.51 +#62 := [sk]: #61
   97.52 +#79 := [trans #62 #77]: #78
   97.53 +#8 := (or #7 #5)
   97.54 +#9 := (forall (vars (?x2 int)) #8)
   97.55 +#10 := (implies #5 #9)
   97.56 +#11 := (forall (vars (?x1 int)) #10)
   97.57 +#12 := (not #11)
   97.58 +#48 := (iff #12 #47)
   97.59 +#45 := (iff #11 #44)
   97.60 +#42 := (iff #10 #39)
   97.61 +#35 := (implies #5 #32)
   97.62 +#40 := (iff #35 #39)
   97.63 +#41 := [rewrite]: #40
   97.64 +#36 := (iff #10 #35)
   97.65 +#33 := (iff #9 #32)
   97.66 +#30 := (iff #8 #29)
   97.67 +#31 := [rewrite]: #30
   97.68 +#34 := [quant-intro #31]: #33
   97.69 +#37 := [monotonicity #34]: #36
   97.70 +#43 := [trans #37 #41]: #42
   97.71 +#46 := [quant-intro #43]: #45
   97.72 +#49 := [monotonicity #46]: #48
   97.73 +#28 := [asserted]: #12
   97.74 +#52 := [mp #28 #49]: #47
   97.75 +#80 := [mp~ #52 #79]: #75
   97.76 +#81 := [mp #80 #93]: #91
   97.77 +#94 := [and-elim #81]: #88
   97.78 +#95 := [not-or-elim #94]: #58
   97.79 +#82 := [and-elim #81]: #55
   97.80 +[unit-resolution #82 #95]: false
   97.81 +unsat
    98.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_02	Tue Oct 20 10:11:30 2009 +0200
    98.3 @@ -0,0 +1,14 @@
    98.4 +(benchmark Isabelle
    98.5 +:extrasorts ( T2 T1)
    98.6 +:extrafuns (
    98.7 +  (uf_2 T1)
    98.8 +  (uf_4 T2)
    98.9 +  (uf_3 T1)
   98.10 + )
   98.11 +:extrapreds (
   98.12 +  (up_1 T1 T2)
   98.13 + )
   98.14 +:assumption (forall (?x1 T1) (?x2 T2) (iff (up_1 ?x1 ?x2) (= ?x1 uf_2)))
   98.15 +:assumption (not (iff (exists (?x3 T2) (up_1 uf_3 ?x3)) (up_1 uf_3 uf_4)))
   98.16 +:formula true
   98.17 +)
    99.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_02.proof	Tue Oct 20 10:11:30 2009 +0200
    99.3 @@ -0,0 +1,135 @@
    99.4 +#2 := false
    99.5 +decl up_1 :: (-> T1 T2 bool)
    99.6 +#5 := (:var 0 T2)
    99.7 +decl uf_3 :: T1
    99.8 +#11 := uf_3
    99.9 +#12 := (up_1 uf_3 #5)
   99.10 +#560 := (pattern #12)
   99.11 +#57 := (not #12)
   99.12 +#561 := (forall (vars (?x3 T2)) (:pat #560) #57)
   99.13 +decl uf_4 :: T2
   99.14 +#14 := uf_4
   99.15 +#15 := (up_1 uf_3 uf_4)
   99.16 +decl uf_2 :: T1
   99.17 +#7 := uf_2
   99.18 +#136 := (= uf_2 uf_3)
   99.19 +#543 := (iff #15 #136)
   99.20 +#4 := (:var 1 T1)
   99.21 +#6 := (up_1 #4 #5)
   99.22 +#553 := (pattern #6)
   99.23 +#8 := (= #4 uf_2)
   99.24 +#9 := (iff #6 #8)
   99.25 +#554 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #553) #9)
   99.26 +#10 := (forall (vars (?x1 T1) (?x2 T2)) #9)
   99.27 +#557 := (iff #10 #554)
   99.28 +#555 := (iff #9 #9)
   99.29 +#556 := [refl]: #555
   99.30 +#558 := [quant-intro #556]: #557
   99.31 +#47 := (~ #10 #10)
   99.32 +#45 := (~ #9 #9)
   99.33 +#46 := [refl]: #45
   99.34 +#48 := [nnf-pos #46]: #47
   99.35 +#33 := [asserted]: #10
   99.36 +#49 := [mp~ #33 #48]: #10
   99.37 +#559 := [mp #49 #558]: #554
   99.38 +#227 := (not #554)
   99.39 +#185 := (or #227 #543)
   99.40 +#135 := (= uf_3 uf_2)
   99.41 +#205 := (iff #15 #135)
   99.42 +#528 := (or #227 #205)
   99.43 +#190 := (iff #528 #185)
   99.44 +#192 := (iff #185 #185)
   99.45 +#530 := [rewrite]: #192
   99.46 +#201 := (iff #205 #543)
   99.47 +#223 := (iff #135 #136)
   99.48 +#137 := [rewrite]: #223
   99.49 +#544 := [monotonicity #137]: #201
   99.50 +#191 := [monotonicity #544]: #190
   99.51 +#531 := [trans #191 #530]: #190
   99.52 +#189 := [quant-inst]: #528
   99.53 +#532 := [mp #189 #531]: #185
   99.54 +#539 := [unit-resolution #532 #559]: #543
   99.55 +decl ?x3!0 :: T2
   99.56 +#50 := ?x3!0
   99.57 +#51 := (up_1 uf_3 ?x3!0)
   99.58 +#224 := (iff #51 #136)
   99.59 +#155 := (or #227 #224)
   99.60 +#222 := (iff #51 #135)
   99.61 +#228 := (or #227 #222)
   99.62 +#229 := (iff #228 #155)
   99.63 +#545 := (iff #155 #155)
   99.64 +#547 := [rewrite]: #545
   99.65 +#215 := (iff #222 #224)
   99.66 +#226 := [monotonicity #137]: #215
   99.67 +#208 := [monotonicity #226]: #229
   99.68 +#202 := [trans #208 #547]: #229
   99.69 +#225 := [quant-inst]: #228
   99.70 +#334 := [mp #225 #202]: #155
   99.71 +#537 := [unit-resolution #334 #559]: #224
   99.72 +#541 := (not #224)
   99.73 +#527 := (or #541 #136)
   99.74 +#63 := (not #15)
   99.75 +#540 := [hypothesis]: #63
   99.76 +#68 := (or #15 #51)
   99.77 +#60 := (forall (vars (?x3 T2)) #57)
   99.78 +#69 := (or #63 #60)
   99.79 +#76 := (and #68 #69)
   99.80 +#70 := (and #69 #68)
   99.81 +#77 := (iff #70 #76)
   99.82 +#78 := [rewrite]: #77
   99.83 +#13 := (exists (vars (?x3 T2)) #12)
   99.84 +#35 := (not #13)
   99.85 +#36 := (iff #15 #35)
   99.86 +#71 := (~ #36 #70)
   99.87 +#61 := (~ #35 #60)
   99.88 +#58 := (~ #57 #57)
   99.89 +#59 := [refl]: #58
   99.90 +#62 := [nnf-neg #59]: #61
   99.91 +#54 := (not #35)
   99.92 +#55 := (~ #54 #51)
   99.93 +#42 := (~ #13 #51)
   99.94 +#39 := [sk]: #42
   99.95 +#56 := [nnf-neg #39]: #55
   99.96 +#66 := (~ #15 #15)
   99.97 +#67 := [refl]: #66
   99.98 +#64 := (~ #63 #63)
   99.99 +#65 := [refl]: #64
  99.100 +#72 := [nnf-pos #65 #67 #56 #62]: #71
  99.101 +#16 := (iff #13 #15)
  99.102 +#17 := (not #16)
  99.103 +#37 := (iff #17 #36)
  99.104 +#38 := [rewrite]: #37
  99.105 +#34 := [asserted]: #17
  99.106 +#41 := [mp #34 #38]: #36
  99.107 +#73 := [mp~ #41 #72]: #70
  99.108 +#74 := [mp #73 #78]: #76
  99.109 +#75 := [and-elim #74]: #68
  99.110 +#526 := [unit-resolution #75 #540]: #51
  99.111 +#549 := (not #51)
  99.112 +#550 := (or #541 #549 #136)
  99.113 +#551 := [def-axiom]: #550
  99.114 +#233 := [unit-resolution #551 #526]: #527
  99.115 +#249 := [unit-resolution #233 #537]: #136
  99.116 +#213 := (not #136)
  99.117 +#533 := (not #543)
  99.118 +#250 := (or #533 #213)
  99.119 +#534 := (or #533 #15 #213)
  99.120 +#529 := [def-axiom]: #534
  99.121 +#251 := [unit-resolution #529 #540]: #250
  99.122 +#237 := [unit-resolution #251 #249 #539]: false
  99.123 +#252 := [lemma #237]: #15
  99.124 +#566 := (or #63 #561)
  99.125 +#567 := (iff #69 #566)
  99.126 +#564 := (iff #60 #561)
  99.127 +#562 := (iff #57 #57)
  99.128 +#563 := [refl]: #562
  99.129 +#565 := [quant-intro #563]: #564
  99.130 +#568 := [monotonicity #565]: #567
  99.131 +#79 := [and-elim #74]: #69
  99.132 +#569 := [mp #79 #568]: #566
  99.133 +#535 := [unit-resolution #569 #252]: #561
  99.134 +#536 := (not #561)
  99.135 +#538 := (or #536 #63)
  99.136 +#176 := [quant-inst]: #538
  99.137 +[unit-resolution #176 #252 #535]: false
  99.138 +unsat
   100.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_03	Tue Oct 20 10:11:30 2009 +0200
   100.3 @@ -0,0 +1,15 @@
   100.4 +(benchmark Isabelle
   100.5 +:extrasorts ( T2 T1)
   100.6 +:extrafuns (
   100.7 +  (uf_2 T1)
   100.8 +  (uf_3 T2)
   100.9 +  (uf_4 T1)
  100.10 + )
  100.11 +:extrapreds (
  100.12 +  (up_1 T1 T2)
  100.13 + )
  100.14 +:assumption (forall (?x1 T1) (?x2 T2) (iff (up_1 ?x1 ?x2) (= ?x1 uf_2)))
  100.15 +:assumption (iff (forall (?x3 T1) (exists (?x4 T2) (up_1 ?x3 ?x4))) (forall (?x5 T1) (up_1 ?x5 uf_3)))
  100.16 +:assumption (not (iff (exists (?x6 T2) (up_1 uf_4 ?x6)) (up_1 uf_4 uf_3)))
  100.17 +:formula true
  100.18 +)
   101.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_03.proof	Tue Oct 20 10:11:30 2009 +0200
   101.3 @@ -0,0 +1,135 @@
   101.4 +#2 := false
   101.5 +decl up_1 :: (-> T1 T2 bool)
   101.6 +#5 := (:var 0 T2)
   101.7 +decl uf_4 :: T1
   101.8 +#18 := uf_4
   101.9 +#19 := (up_1 uf_4 #5)
  101.10 +#635 := (pattern #19)
  101.11 +#116 := (not #19)
  101.12 +#636 := (forall (vars (?x6 T2)) (:pat #635) #116)
  101.13 +decl uf_3 :: T2
  101.14 +#14 := uf_3
  101.15 +#21 := (up_1 uf_4 uf_3)
  101.16 +decl uf_2 :: T1
  101.17 +#7 := uf_2
  101.18 +#195 := (= uf_2 uf_4)
  101.19 +#602 := (iff #21 #195)
  101.20 +#4 := (:var 1 T1)
  101.21 +#6 := (up_1 #4 #5)
  101.22 +#612 := (pattern #6)
  101.23 +#8 := (= #4 uf_2)
  101.24 +#9 := (iff #6 #8)
  101.25 +#613 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #612) #9)
  101.26 +#10 := (forall (vars (?x1 T1) (?x2 T2)) #9)
  101.27 +#616 := (iff #10 #613)
  101.28 +#614 := (iff #9 #9)
  101.29 +#615 := [refl]: #614
  101.30 +#617 := [quant-intro #615]: #616
  101.31 +#56 := (~ #10 #10)
  101.32 +#54 := (~ #9 #9)
  101.33 +#55 := [refl]: #54
  101.34 +#57 := [nnf-pos #55]: #56
  101.35 +#39 := [asserted]: #10
  101.36 +#58 := [mp~ #39 #57]: #10
  101.37 +#618 := [mp #58 #617]: #613
  101.38 +#286 := (not #613)
  101.39 +#244 := (or #286 #602)
  101.40 +#194 := (= uf_4 uf_2)
  101.41 +#264 := (iff #21 #194)
  101.42 +#587 := (or #286 #264)
  101.43 +#249 := (iff #587 #244)
  101.44 +#251 := (iff #244 #244)
  101.45 +#589 := [rewrite]: #251
  101.46 +#260 := (iff #264 #602)
  101.47 +#282 := (iff #194 #195)
  101.48 +#196 := [rewrite]: #282
  101.49 +#603 := [monotonicity #196]: #260
  101.50 +#250 := [monotonicity #603]: #249
  101.51 +#590 := [trans #250 #589]: #249
  101.52 +#248 := [quant-inst]: #587
  101.53 +#591 := [mp #248 #590]: #244
  101.54 +#598 := [unit-resolution #591 #618]: #602
  101.55 +decl ?x6!3 :: T2
  101.56 +#63 := ?x6!3
  101.57 +#64 := (up_1 uf_4 ?x6!3)
  101.58 +#283 := (iff #64 #195)
  101.59 +#214 := (or #286 #283)
  101.60 +#281 := (iff #64 #194)
  101.61 +#287 := (or #286 #281)
  101.62 +#288 := (iff #287 #214)
  101.63 +#604 := (iff #214 #214)
  101.64 +#606 := [rewrite]: #604
  101.65 +#274 := (iff #281 #283)
  101.66 +#285 := [monotonicity #196]: #274
  101.67 +#267 := [monotonicity #285]: #288
  101.68 +#261 := [trans #267 #606]: #288
  101.69 +#284 := [quant-inst]: #287
  101.70 +#393 := [mp #284 #261]: #214
  101.71 +#596 := [unit-resolution #393 #618]: #283
  101.72 +#600 := (not #283)
  101.73 +#586 := (or #600 #195)
  101.74 +#122 := (not #21)
  101.75 +#599 := [hypothesis]: #122
  101.76 +#127 := (or #21 #64)
  101.77 +#119 := (forall (vars (?x6 T2)) #116)
  101.78 +#128 := (or #122 #119)
  101.79 +#135 := (and #127 #128)
  101.80 +#129 := (and #128 #127)
  101.81 +#136 := (iff #129 #135)
  101.82 +#137 := [rewrite]: #136
  101.83 +#20 := (exists (vars (?x6 T2)) #19)
  101.84 +#42 := (not #20)
  101.85 +#43 := (iff #21 #42)
  101.86 +#130 := (~ #43 #129)
  101.87 +#120 := (~ #42 #119)
  101.88 +#117 := (~ #116 #116)
  101.89 +#118 := [refl]: #117
  101.90 +#121 := [nnf-neg #118]: #120
  101.91 +#113 := (not #42)
  101.92 +#114 := (~ #113 #64)
  101.93 +#88 := (~ #20 #64)
  101.94 +#89 := [sk]: #88
  101.95 +#115 := [nnf-neg #89]: #114
  101.96 +#125 := (~ #21 #21)
  101.97 +#126 := [refl]: #125
  101.98 +#123 := (~ #122 #122)
  101.99 +#124 := [refl]: #123
 101.100 +#131 := [nnf-pos #124 #126 #115 #121]: #130
 101.101 +#22 := (iff #20 #21)
 101.102 +#23 := (not #22)
 101.103 +#44 := (iff #23 #43)
 101.104 +#45 := [rewrite]: #44
 101.105 +#41 := [asserted]: #23
 101.106 +#48 := [mp #41 #45]: #43
 101.107 +#132 := [mp~ #48 #131]: #129
 101.108 +#133 := [mp #132 #137]: #135
 101.109 +#134 := [and-elim #133]: #127
 101.110 +#585 := [unit-resolution #134 #599]: #64
 101.111 +#608 := (not #64)
 101.112 +#609 := (or #600 #608 #195)
 101.113 +#610 := [def-axiom]: #609
 101.114 +#292 := [unit-resolution #610 #585]: #586
 101.115 +#308 := [unit-resolution #292 #596]: #195
 101.116 +#272 := (not #195)
 101.117 +#592 := (not #602)
 101.118 +#309 := (or #592 #272)
 101.119 +#593 := (or #592 #21 #272)
 101.120 +#588 := [def-axiom]: #593
 101.121 +#310 := [unit-resolution #588 #599]: #309
 101.122 +#296 := [unit-resolution #310 #308 #598]: false
 101.123 +#311 := [lemma #296]: #21
 101.124 +#641 := (or #122 #636)
 101.125 +#642 := (iff #128 #641)
 101.126 +#639 := (iff #119 #636)
 101.127 +#637 := (iff #116 #116)
 101.128 +#638 := [refl]: #637
 101.129 +#640 := [quant-intro #638]: #639
 101.130 +#643 := [monotonicity #640]: #642
 101.131 +#138 := [and-elim #133]: #128
 101.132 +#644 := [mp #138 #643]: #641
 101.133 +#594 := [unit-resolution #644 #311]: #636
 101.134 +#595 := (not #636)
 101.135 +#597 := (or #595 #122)
 101.136 +#235 := [quant-inst]: #597
 101.137 +[unit-resolution #235 #311 #594]: false
 101.138 +unsat
   102.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   102.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_04	Tue Oct 20 10:11:30 2009 +0200
   102.3 @@ -0,0 +1,13 @@
   102.4 +(benchmark Isabelle
   102.5 +:extrasorts ( T1 T2)
   102.6 +:extrafuns (
   102.7 +  (uf_2 T1)
   102.8 +  (uf_3 T1)
   102.9 + )
  102.10 +:extrapreds (
  102.11 +  (up_1 T1)
  102.12 + )
  102.13 +:assumption (if_then_else (up_1 uf_2) (not (exists (?x1 T1) (up_1 ?x1))) (forall (?x2 T1) (not (up_1 ?x2))))
  102.14 +:assumption (not (implies (up_1 uf_2) (up_1 uf_3)))
  102.15 +:formula true
  102.16 +)
   103.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   103.2 +++ b/src/HOL/SMT/Examples/cert/z3_fol_04.proof	Tue Oct 20 10:11:30 2009 +0200
   103.3 @@ -0,0 +1,56 @@
   103.4 +#2 := false
   103.5 +decl up_1 :: (-> T1 bool)
   103.6 +decl uf_2 :: T1
   103.7 +#4 := uf_2
   103.8 +#5 := (up_1 uf_2)
   103.9 +decl uf_3 :: T1
  103.10 +#13 := uf_3
  103.11 +#14 := (up_1 uf_3)
  103.12 +#34 := (not #5)
  103.13 +#35 := (or #34 #14)
  103.14 +#38 := (not #35)
  103.15 +#15 := (implies #5 #14)
  103.16 +#16 := (not #15)
  103.17 +#39 := (iff #16 #38)
  103.18 +#36 := (iff #15 #35)
  103.19 +#37 := [rewrite]: #36
  103.20 +#40 := [monotonicity #37]: #39
  103.21 +#33 := [asserted]: #16
  103.22 +#43 := [mp #33 #40]: #38
  103.23 +#41 := [not-or-elim #43]: #5
  103.24 +#6 := (:var 0 T1)
  103.25 +#7 := (up_1 #6)
  103.26 +#536 := (pattern #7)
  103.27 +#10 := (not #7)
  103.28 +#537 := (forall (vars (?x2 T1)) (:pat #536) #10)
  103.29 +#11 := (forall (vars (?x2 T1)) #10)
  103.30 +#540 := (iff #11 #537)
  103.31 +#538 := (iff #10 #10)
  103.32 +#539 := [refl]: #538
  103.33 +#541 := [quant-intro #539]: #540
  103.34 +#8 := (exists (vars (?x1 T1)) #7)
  103.35 +#9 := (not #8)
  103.36 +#45 := (~ #9 #11)
  103.37 +#50 := (~ #10 #10)
  103.38 +#51 := [refl]: #50
  103.39 +#59 := [nnf-neg #51]: #45
  103.40 +#12 := (ite #5 #9 #11)
  103.41 +#57 := (iff #12 #9)
  103.42 +#1 := true
  103.43 +#52 := (ite true #9 #11)
  103.44 +#55 := (iff #52 #9)
  103.45 +#56 := [rewrite]: #55
  103.46 +#53 := (iff #12 #52)
  103.47 +#48 := (iff #5 true)
  103.48 +#49 := [iff-true #41]: #48
  103.49 +#54 := [monotonicity #49]: #53
  103.50 +#58 := [trans #54 #56]: #57
  103.51 +#32 := [asserted]: #12
  103.52 +#47 := [mp #32 #58]: #9
  103.53 +#60 := [mp~ #47 #59]: #11
  103.54 +#542 := [mp #60 #541]: #537
  103.55 +#119 := (not #537)
  103.56 +#206 := (or #119 #34)
  103.57 +#120 := [quant-inst]: #206
  103.58 +[unit-resolution #120 #542 #41]: false
  103.59 +unsat
   104.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   104.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_01	Tue Oct 20 10:11:30 2009 +0200
   104.3 @@ -0,0 +1,18 @@
   104.4 +(benchmark Isabelle
   104.5 +:extrasorts ( T2 T3 T1)
   104.6 +:extrafuns (
   104.7 +  (uf_2 T1 T2 T3 T1)
   104.8 +  (uf_1 T1 T2 T3)
   104.9 +  (uf_6 T1)
  104.10 +  (uf_3 T2)
  104.11 +  (uf_4 T2)
  104.12 +  (uf_5 T2)
  104.13 +  (uf_7 T3)
  104.14 +  (uf_8 T3)
  104.15 + )
  104.16 +:assumption (forall (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2) (= (uf_1 (uf_2 ?x1 ?x2 ?x3) ?x4) (ite (= ?x4 ?x2) ?x3 (uf_1 ?x1 ?x4))))
  104.17 +:assumption (forall (?x5 T1) (?x6 T2) (?x7 T3) (= (uf_1 (uf_2 ?x5 ?x6 ?x7) ?x6) ?x7))
  104.18 +:assumption (and (not (= uf_3 uf_4)) (not (= uf_3 uf_5)))
  104.19 +:assumption (not (= (uf_1 (uf_2 (uf_2 uf_6 uf_4 uf_7) uf_5 uf_8) uf_3) (uf_1 uf_6 uf_3)))
  104.20 +:formula true
  104.21 +)
   105.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_01.proof	Tue Oct 20 10:11:30 2009 +0200
   105.3 @@ -0,0 +1,181 @@
   105.4 +#2 := false
   105.5 +decl uf_1 :: (-> T1 T2 T3)
   105.6 +decl uf_3 :: T2
   105.7 +#22 := uf_3
   105.8 +decl uf_6 :: T1
   105.9 +#30 := uf_6
  105.10 +#36 := (uf_1 uf_6 uf_3)
  105.11 +decl uf_2 :: (-> T1 T2 T3 T1)
  105.12 +decl uf_8 :: T3
  105.13 +#33 := uf_8
  105.14 +decl uf_5 :: T2
  105.15 +#26 := uf_5
  105.16 +decl uf_7 :: T3
  105.17 +#31 := uf_7
  105.18 +decl uf_4 :: T2
  105.19 +#23 := uf_4
  105.20 +#32 := (uf_2 uf_6 uf_4 uf_7)
  105.21 +#34 := (uf_2 #32 uf_5 uf_8)
  105.22 +#35 := (uf_1 #34 uf_3)
  105.23 +#37 := (= #35 #36)
  105.24 +#223 := (uf_1 #32 uf_4)
  105.25 +#214 := (uf_2 uf_6 uf_4 #223)
  105.26 +#552 := (uf_1 #214 uf_3)
  105.27 +#555 := (= #552 #36)
  105.28 +#560 := (= #36 #552)
  105.29 +#556 := (= #223 #552)
  105.30 +#24 := (= uf_3 uf_4)
  105.31 +#561 := (ite #24 #556 #560)
  105.32 +#8 := (:var 0 T2)
  105.33 +#6 := (:var 1 T3)
  105.34 +#5 := (:var 2 T2)
  105.35 +#4 := (:var 3 T1)
  105.36 +#7 := (uf_2 #4 #5 #6)
  105.37 +#9 := (uf_1 #7 #8)
  105.38 +#575 := (pattern #9)
  105.39 +#11 := (uf_1 #4 #8)
  105.40 +#100 := (= #9 #11)
  105.41 +#99 := (= #6 #9)
  105.42 +#55 := (= #5 #8)
  105.43 +#83 := (ite #55 #99 #100)
  105.44 +#576 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) (:pat #575) #83)
  105.45 +#90 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #83)
  105.46 +#579 := (iff #90 #576)
  105.47 +#577 := (iff #83 #83)
  105.48 +#578 := [refl]: #577
  105.49 +#580 := [quant-intro #578]: #579
  105.50 +#58 := (ite #55 #6 #11)
  105.51 +#61 := (= #9 #58)
  105.52 +#64 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #61)
  105.53 +#87 := (iff #64 #90)
  105.54 +#84 := (iff #61 #83)
  105.55 +#89 := [rewrite]: #84
  105.56 +#88 := [quant-intro #89]: #87
  105.57 +#93 := (~ #64 #64)
  105.58 +#91 := (~ #61 #61)
  105.59 +#92 := [refl]: #91
  105.60 +#94 := [nnf-pos #92]: #93
  105.61 +#10 := (= #8 #5)
  105.62 +#12 := (ite #10 #6 #11)
  105.63 +#13 := (= #9 #12)
  105.64 +#14 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #13)
  105.65 +#65 := (iff #14 #64)
  105.66 +#62 := (iff #13 #61)
  105.67 +#59 := (= #12 #58)
  105.68 +#56 := (iff #10 #55)
  105.69 +#57 := [rewrite]: #56
  105.70 +#60 := [monotonicity #57]: #59
  105.71 +#63 := [monotonicity #60]: #62
  105.72 +#66 := [quant-intro #63]: #65
  105.73 +#54 := [asserted]: #14
  105.74 +#69 := [mp #54 #66]: #64
  105.75 +#95 := [mp~ #69 #94]: #64
  105.76 +#85 := [mp #95 #88]: #90
  105.77 +#581 := [mp #85 #580]: #576
  105.78 +#250 := (not #576)
  105.79 +#548 := (or #250 #561)
  105.80 +#551 := (= uf_4 uf_3)
  105.81 +#557 := (ite #551 #556 #555)
  105.82 +#549 := (or #250 #557)
  105.83 +#271 := (iff #549 #548)
  105.84 +#273 := (iff #548 #548)
  105.85 +#259 := [rewrite]: #273
  105.86 +#559 := (iff #557 #561)
  105.87 +#198 := (iff #555 #560)
  105.88 +#199 := [rewrite]: #198
  105.89 +#193 := (iff #551 #24)
  105.90 +#558 := [rewrite]: #193
  105.91 +#562 := [monotonicity #558 #199]: #559
  105.92 +#272 := [monotonicity #562]: #271
  105.93 +#274 := [trans #272 #259]: #271
  105.94 +#255 := [quant-inst]: #549
  105.95 +#165 := [mp #255 #274]: #548
  105.96 +#510 := [unit-resolution #165 #581]: #561
  105.97 +#544 := (not #561)
  105.98 +#497 := (or #544 #560)
  105.99 +#25 := (not #24)
 105.100 +#27 := (= uf_3 uf_5)
 105.101 +#28 := (not #27)
 105.102 +#29 := (and #25 #28)
 105.103 +#75 := [asserted]: #29
 105.104 +#79 := [and-elim #75]: #25
 105.105 +#268 := (or #544 #24 #560)
 105.106 +#542 := [def-axiom]: #268
 105.107 +#499 := [unit-resolution #542 #79]: #497
 105.108 +#491 := [unit-resolution #499 #510]: #560
 105.109 +#493 := [symm #491]: #555
 105.110 +#494 := (= #35 #552)
 105.111 +#157 := (uf_1 #32 uf_3)
 105.112 +#503 := (= #157 #552)
 105.113 +#502 := (= #552 #157)
 105.114 +#509 := (= #214 #32)
 105.115 +#415 := (= #223 uf_7)
 105.116 +#566 := (= uf_7 #223)
 105.117 +#17 := (:var 0 T3)
 105.118 +#16 := (:var 1 T2)
 105.119 +#15 := (:var 2 T1)
 105.120 +#18 := (uf_2 #15 #16 #17)
 105.121 +#582 := (pattern #18)
 105.122 +#19 := (uf_1 #18 #16)
 105.123 +#68 := (= #17 #19)
 105.124 +#584 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) (:pat #582) #68)
 105.125 +#72 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #68)
 105.126 +#583 := (iff #72 #584)
 105.127 +#586 := (iff #584 #584)
 105.128 +#587 := [rewrite]: #586
 105.129 +#585 := [rewrite]: #583
 105.130 +#588 := [trans #585 #587]: #583
 105.131 +#82 := (~ #72 #72)
 105.132 +#96 := (~ #68 #68)
 105.133 +#97 := [refl]: #96
 105.134 +#78 := [nnf-pos #97]: #82
 105.135 +#20 := (= #19 #17)
 105.136 +#21 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #20)
 105.137 +#73 := (iff #21 #72)
 105.138 +#70 := (iff #20 #68)
 105.139 +#71 := [rewrite]: #70
 105.140 +#74 := [quant-intro #71]: #73
 105.141 +#67 := [asserted]: #21
 105.142 +#77 := [mp #67 #74]: #72
 105.143 +#98 := [mp~ #77 #78]: #72
 105.144 +#589 := [mp #98 #588]: #584
 105.145 +#211 := (not #584)
 105.146 +#212 := (or #211 #566)
 105.147 +#213 := [quant-inst]: #212
 105.148 +#414 := [unit-resolution #213 #589]: #566
 105.149 +#416 := [symm #414]: #415
 105.150 +#506 := [monotonicity #416]: #509
 105.151 +#498 := [monotonicity #506]: #502
 105.152 +#492 := [symm #498]: #503
 105.153 +#244 := (= #35 #157)
 105.154 +#158 := (= uf_8 #35)
 105.155 +#248 := (ite #27 #158 #244)
 105.156 +#247 := (or #250 #248)
 105.157 +#245 := (= uf_5 uf_3)
 105.158 +#159 := (ite #245 #158 #244)
 105.159 +#251 := (or #250 #159)
 105.160 +#567 := (iff #251 #247)
 105.161 +#224 := (iff #247 #247)
 105.162 +#356 := [rewrite]: #224
 105.163 +#249 := (iff #159 #248)
 105.164 +#246 := (iff #245 #27)
 105.165 +#237 := [rewrite]: #246
 105.166 +#177 := [monotonicity #237]: #249
 105.167 +#569 := [monotonicity #177]: #567
 105.168 +#563 := [trans #569 #356]: #567
 105.169 +#230 := [quant-inst]: #251
 105.170 +#235 := [mp #230 #563]: #247
 105.171 +#488 := [unit-resolution #235 #581]: #248
 105.172 +#236 := (not #248)
 105.173 +#490 := (or #236 #244)
 105.174 +#80 := [and-elim #75]: #28
 105.175 +#572 := (or #236 #27 #244)
 105.176 +#573 := [def-axiom]: #572
 105.177 +#500 := [unit-resolution #573 #80]: #490
 105.178 +#501 := [unit-resolution #500 #488]: #244
 105.179 +#495 := [trans #501 #492]: #494
 105.180 +#489 := [trans #495 #493]: #37
 105.181 +#38 := (not #37)
 105.182 +#76 := [asserted]: #38
 105.183 +[unit-resolution #76 #489]: false
 105.184 +unsat
   106.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   106.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_02	Tue Oct 20 10:11:30 2009 +0200
   106.3 @@ -0,0 +1,13 @@
   106.4 +(benchmark Isabelle
   106.5 +:extrasorts ( T2 T1 T3)
   106.6 +:extrafuns (
   106.7 +  (uf_2 T1)
   106.8 +  (uf_3 T2)
   106.9 + )
  106.10 +:extrapreds (
  106.11 +  (up_4 T1 T2)
  106.12 +  (up_1 T1 T2)
  106.13 + )
  106.14 +:assumption (not (or (iff (up_1 uf_2 uf_3) (and (up_4 uf_2 uf_3) true)) (or (iff (up_1 uf_2 uf_3) true) (iff (up_4 uf_2 uf_3) true))))
  106.15 +:formula true
  106.16 +)
   107.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   107.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_02.proof	Tue Oct 20 10:11:30 2009 +0200
   107.3 @@ -0,0 +1,62 @@
   107.4 +#2 := false
   107.5 +decl up_4 :: (-> T1 T2 bool)
   107.6 +decl uf_3 :: T2
   107.7 +#5 := uf_3
   107.8 +decl uf_2 :: T1
   107.9 +#4 := uf_2
  107.10 +#7 := (up_4 uf_2 uf_3)
  107.11 +#60 := (not #7)
  107.12 +decl up_1 :: (-> T1 T2 bool)
  107.13 +#6 := (up_1 uf_2 uf_3)
  107.14 +#33 := (iff #6 #7)
  107.15 +#49 := (or #6 #7 #33)
  107.16 +#52 := (not #49)
  107.17 +#1 := true
  107.18 +#11 := (iff #7 true)
  107.19 +#10 := (iff #6 true)
  107.20 +#12 := (or #10 #11)
  107.21 +#8 := (and #7 true)
  107.22 +#9 := (iff #6 #8)
  107.23 +#13 := (or #9 #12)
  107.24 +#14 := (not #13)
  107.25 +#55 := (iff #14 #52)
  107.26 +#40 := (or #6 #7)
  107.27 +#43 := (or #33 #40)
  107.28 +#46 := (not #43)
  107.29 +#53 := (iff #46 #52)
  107.30 +#50 := (iff #43 #49)
  107.31 +#51 := [rewrite]: #50
  107.32 +#54 := [monotonicity #51]: #53
  107.33 +#47 := (iff #14 #46)
  107.34 +#44 := (iff #13 #43)
  107.35 +#41 := (iff #12 #40)
  107.36 +#38 := (iff #11 #7)
  107.37 +#39 := [rewrite]: #38
  107.38 +#36 := (iff #10 #6)
  107.39 +#37 := [rewrite]: #36
  107.40 +#42 := [monotonicity #37 #39]: #41
  107.41 +#34 := (iff #9 #33)
  107.42 +#31 := (iff #8 #7)
  107.43 +#32 := [rewrite]: #31
  107.44 +#35 := [monotonicity #32]: #34
  107.45 +#45 := [monotonicity #35 #42]: #44
  107.46 +#48 := [monotonicity #45]: #47
  107.47 +#56 := [trans #48 #54]: #55
  107.48 +#30 := [asserted]: #14
  107.49 +#57 := [mp #30 #56]: #52
  107.50 +#61 := [not-or-elim #57]: #60
  107.51 +#58 := (not #6)
  107.52 +#59 := [not-or-elim #57]: #58
  107.53 +#72 := (or #7 #6)
  107.54 +#66 := (iff #7 #58)
  107.55 +#62 := (not #33)
  107.56 +#64 := (iff #62 #66)
  107.57 +#67 := [rewrite]: #64
  107.58 +#63 := [not-or-elim #57]: #62
  107.59 +#68 := [mp #63 #67]: #66
  107.60 +#69 := (not #66)
  107.61 +#70 := (or #7 #6 #69)
  107.62 +#71 := [def-axiom]: #70
  107.63 +#73 := [unit-resolution #71 #68]: #72
  107.64 +[unit-resolution #73 #59 #61]: false
  107.65 +unsat
   108.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   108.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_03	Tue Oct 20 10:11:30 2009 +0200
   108.3 @@ -0,0 +1,13 @@
   108.4 +(benchmark Isabelle
   108.5 +:extrasorts ( T1 T2)
   108.6 +:extrafuns (
   108.7 +  (uf_3 T2)
   108.8 +  (uf_1 T1 T1)
   108.9 +  (uf_2 T2 T2)
  108.10 +  (uf_4 T1)
  108.11 + )
  108.12 +:assumption (forall (?x1 T1) (= (uf_1 ?x1) ?x1))
  108.13 +:assumption (forall (?x2 T2) (iff (= (uf_2 ?x2) uf_3) (= ?x2 uf_3)))
  108.14 +:assumption (not (and (= (uf_1 uf_4) uf_4) (iff (= (uf_2 uf_3) uf_3) true)))
  108.15 +:formula true
  108.16 +)
   109.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   109.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_03.proof	Tue Oct 20 10:11:30 2009 +0200
   109.3 @@ -0,0 +1,120 @@
   109.4 +#2 := false
   109.5 +decl uf_1 :: (-> T1 T1)
   109.6 +decl uf_4 :: T1
   109.7 +#15 := uf_4
   109.8 +#16 := (uf_1 uf_4)
   109.9 +#48 := (= uf_4 #16)
  109.10 +#83 := (not #48)
  109.11 +decl uf_2 :: (-> T2 T2)
  109.12 +decl uf_3 :: T2
  109.13 +#10 := uf_3
  109.14 +#18 := (uf_2 uf_3)
  109.15 +#51 := (= uf_3 #18)
  109.16 +#84 := (not #51)
  109.17 +#556 := [hypothesis]: #84
  109.18 +#8 := (:var 0 T2)
  109.19 +#9 := (uf_2 #8)
  109.20 +#575 := (pattern #9)
  109.21 +#12 := (= #8 uf_3)
  109.22 +#11 := (= #9 uf_3)
  109.23 +#13 := (iff #11 #12)
  109.24 +#576 := (forall (vars (?x2 T2)) (:pat #575) #13)
  109.25 +#14 := (forall (vars (?x2 T2)) #13)
  109.26 +#579 := (iff #14 #576)
  109.27 +#577 := (iff #13 #13)
  109.28 +#578 := [refl]: #577
  109.29 +#580 := [quant-intro #578]: #579
  109.30 +#70 := (~ #14 #14)
  109.31 +#80 := (~ #13 #13)
  109.32 +#81 := [refl]: #80
  109.33 +#67 := [nnf-pos #81]: #70
  109.34 +#45 := [asserted]: #14
  109.35 +#82 := [mp~ #45 #67]: #14
  109.36 +#581 := [mp #82 #580]: #576
  109.37 +#242 := (not #576)
  109.38 +#170 := (or #242 #51)
  109.39 +#150 := (= uf_3 uf_3)
  109.40 +#19 := (= #18 uf_3)
  109.41 +#237 := (iff #19 #150)
  109.42 +#243 := (or #242 #237)
  109.43 +#244 := (iff #243 #170)
  109.44 +#560 := (iff #170 #170)
  109.45 +#562 := [rewrite]: #560
  109.46 +#230 := (iff #237 #51)
  109.47 +#1 := true
  109.48 +#54 := (iff #51 true)
  109.49 +#57 := (iff #54 #51)
  109.50 +#58 := [rewrite]: #57
  109.51 +#152 := (iff #237 #54)
  109.52 +#151 := (iff #150 true)
  109.53 +#238 := [rewrite]: #151
  109.54 +#52 := (iff #19 #51)
  109.55 +#53 := [rewrite]: #52
  109.56 +#239 := [monotonicity #53 #238]: #152
  109.57 +#241 := [trans #239 #58]: #230
  109.58 +#223 := [monotonicity #241]: #244
  109.59 +#217 := [trans #223 #562]: #244
  109.60 +#240 := [quant-inst]: #243
  109.61 +#349 := [mp #240 #217]: #170
  109.62 +#228 := [unit-resolution #349 #581 #556]: false
  109.63 +#229 := [lemma #228]: #51
  109.64 +#71 := (or #83 #84)
  109.65 +#61 := (and #48 #51)
  109.66 +#64 := (not #61)
  109.67 +#90 := (iff #64 #71)
  109.68 +#72 := (not #71)
  109.69 +#85 := (not #72)
  109.70 +#88 := (iff #85 #71)
  109.71 +#89 := [rewrite]: #88
  109.72 +#86 := (iff #64 #85)
  109.73 +#73 := (iff #61 #72)
  109.74 +#74 := [rewrite]: #73
  109.75 +#87 := [monotonicity #74]: #86
  109.76 +#91 := [trans #87 #89]: #90
  109.77 +#20 := (iff #19 true)
  109.78 +#17 := (= #16 uf_4)
  109.79 +#21 := (and #17 #20)
  109.80 +#22 := (not #21)
  109.81 +#65 := (iff #22 #64)
  109.82 +#62 := (iff #21 #61)
  109.83 +#59 := (iff #20 #51)
  109.84 +#55 := (iff #20 #54)
  109.85 +#56 := [monotonicity #53]: #55
  109.86 +#60 := [trans #56 #58]: #59
  109.87 +#49 := (iff #17 #48)
  109.88 +#50 := [rewrite]: #49
  109.89 +#63 := [monotonicity #50 #60]: #62
  109.90 +#66 := [monotonicity #63]: #65
  109.91 +#46 := [asserted]: #22
  109.92 +#69 := [mp #46 #66]: #64
  109.93 +#92 := [mp #69 #91]: #71
  109.94 +#563 := [unit-resolution #92 #229]: #83
  109.95 +#4 := (:var 0 T1)
  109.96 +#5 := (uf_1 #4)
  109.97 +#568 := (pattern #5)
  109.98 +#39 := (= #4 #5)
  109.99 +#569 := (forall (vars (?x1 T1)) (:pat #568) #39)
 109.100 +#42 := (forall (vars (?x1 T1)) #39)
 109.101 +#572 := (iff #42 #569)
 109.102 +#570 := (iff #39 #39)
 109.103 +#571 := [refl]: #570
 109.104 +#573 := [quant-intro #571]: #572
 109.105 +#77 := (~ #42 #42)
 109.106 +#75 := (~ #39 #39)
 109.107 +#76 := [refl]: #75
 109.108 +#78 := [nnf-pos #76]: #77
 109.109 +#6 := (= #5 #4)
 109.110 +#7 := (forall (vars (?x1 T1)) #6)
 109.111 +#43 := (iff #7 #42)
 109.112 +#40 := (iff #6 #39)
 109.113 +#41 := [rewrite]: #40
 109.114 +#44 := [quant-intro #41]: #43
 109.115 +#38 := [asserted]: #7
 109.116 +#47 := [mp #38 #44]: #42
 109.117 +#79 := [mp~ #47 #78]: #42
 109.118 +#574 := [mp #79 #573]: #569
 109.119 +#565 := (not #569)
 109.120 +#566 := (or #565 #48)
 109.121 +#561 := [quant-inst]: #566
 109.122 +[unit-resolution #561 #574 #563]: false
 109.123 +unsat
   110.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   110.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_04	Tue Oct 20 10:11:30 2009 +0200
   110.3 @@ -0,0 +1,18 @@
   110.4 +(benchmark Isabelle
   110.5 +:extrasorts ( T2 T3 T1)
   110.6 +:extrafuns (
   110.7 +  (uf_2 T1 T2 T3 T1)
   110.8 +  (uf_1 T1 T2 T3)
   110.9 +  (uf_6 T1)
  110.10 +  (uf_3 T2)
  110.11 +  (uf_4 T2)
  110.12 +  (uf_5 T2)
  110.13 +  (uf_7 T3)
  110.14 +  (uf_8 T3)
  110.15 + )
  110.16 +:assumption (forall (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2) (= (uf_1 (uf_2 ?x1 ?x2 ?x3) ?x4) (ite (= ?x4 ?x2) ?x3 (uf_1 ?x1 ?x4))))
  110.17 +:assumption (forall (?x5 T1) (?x6 T2) (?x7 T3) (= (uf_1 (uf_2 ?x5 ?x6 ?x7) ?x6) ?x7))
  110.18 +:assumption (and (not (= uf_3 uf_4)) (not (= uf_3 uf_5)))
  110.19 +:assumption (not (= (uf_1 (uf_2 (uf_2 uf_6 uf_4 uf_7) uf_5 uf_8) uf_3) (uf_1 uf_6 uf_3)))
  110.20 +:formula true
  110.21 +)
   111.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   111.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_04.proof	Tue Oct 20 10:11:30 2009 +0200
   111.3 @@ -0,0 +1,181 @@
   111.4 +#2 := false
   111.5 +decl uf_1 :: (-> T1 T2 T3)
   111.6 +decl uf_3 :: T2
   111.7 +#22 := uf_3
   111.8 +decl uf_6 :: T1
   111.9 +#30 := uf_6
  111.10 +#36 := (uf_1 uf_6 uf_3)
  111.11 +decl uf_2 :: (-> T1 T2 T3 T1)
  111.12 +decl uf_8 :: T3
  111.13 +#33 := uf_8
  111.14 +decl uf_5 :: T2
  111.15 +#26 := uf_5
  111.16 +decl uf_7 :: T3
  111.17 +#31 := uf_7
  111.18 +decl uf_4 :: T2
  111.19 +#23 := uf_4
  111.20 +#32 := (uf_2 uf_6 uf_4 uf_7)
  111.21 +#34 := (uf_2 #32 uf_5 uf_8)
  111.22 +#35 := (uf_1 #34 uf_3)
  111.23 +#37 := (= #35 #36)
  111.24 +#223 := (uf_1 #32 uf_4)
  111.25 +#214 := (uf_2 uf_6 uf_4 #223)
  111.26 +#552 := (uf_1 #214 uf_3)
  111.27 +#555 := (= #552 #36)
  111.28 +#560 := (= #36 #552)
  111.29 +#556 := (= #223 #552)
  111.30 +#24 := (= uf_3 uf_4)
  111.31 +#561 := (ite #24 #556 #560)
  111.32 +#8 := (:var 0 T2)
  111.33 +#6 := (:var 1 T3)
  111.34 +#5 := (:var 2 T2)
  111.35 +#4 := (:var 3 T1)
  111.36 +#7 := (uf_2 #4 #5 #6)
  111.37 +#9 := (uf_1 #7 #8)
  111.38 +#575 := (pattern #9)
  111.39 +#11 := (uf_1 #4 #8)
  111.40 +#100 := (= #9 #11)
  111.41 +#99 := (= #6 #9)
  111.42 +#55 := (= #5 #8)
  111.43 +#83 := (ite #55 #99 #100)
  111.44 +#576 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) (:pat #575) #83)
  111.45 +#90 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #83)
  111.46 +#579 := (iff #90 #576)
  111.47 +#577 := (iff #83 #83)
  111.48 +#578 := [refl]: #577
  111.49 +#580 := [quant-intro #578]: #579
  111.50 +#58 := (ite #55 #6 #11)
  111.51 +#61 := (= #9 #58)
  111.52 +#64 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #61)
  111.53 +#87 := (iff #64 #90)
  111.54 +#84 := (iff #61 #83)
  111.55 +#89 := [rewrite]: #84
  111.56 +#88 := [quant-intro #89]: #87
  111.57 +#93 := (~ #64 #64)
  111.58 +#91 := (~ #61 #61)
  111.59 +#92 := [refl]: #91
  111.60 +#94 := [nnf-pos #92]: #93
  111.61 +#10 := (= #8 #5)
  111.62 +#12 := (ite #10 #6 #11)
  111.63 +#13 := (= #9 #12)
  111.64 +#14 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3) (?x4 T2)) #13)
  111.65 +#65 := (iff #14 #64)
  111.66 +#62 := (iff #13 #61)
  111.67 +#59 := (= #12 #58)
  111.68 +#56 := (iff #10 #55)
  111.69 +#57 := [rewrite]: #56
  111.70 +#60 := [monotonicity #57]: #59
  111.71 +#63 := [monotonicity #60]: #62
  111.72 +#66 := [quant-intro #63]: #65
  111.73 +#54 := [asserted]: #14
  111.74 +#69 := [mp #54 #66]: #64
  111.75 +#95 := [mp~ #69 #94]: #64
  111.76 +#85 := [mp #95 #88]: #90
  111.77 +#581 := [mp #85 #580]: #576
  111.78 +#250 := (not #576)
  111.79 +#548 := (or #250 #561)
  111.80 +#551 := (= uf_4 uf_3)
  111.81 +#557 := (ite #551 #556 #555)
  111.82 +#549 := (or #250 #557)
  111.83 +#271 := (iff #549 #548)
  111.84 +#273 := (iff #548 #548)
  111.85 +#259 := [rewrite]: #273
  111.86 +#559 := (iff #557 #561)
  111.87 +#198 := (iff #555 #560)
  111.88 +#199 := [rewrite]: #198
  111.89 +#193 := (iff #551 #24)
  111.90 +#558 := [rewrite]: #193
  111.91 +#562 := [monotonicity #558 #199]: #559
  111.92 +#272 := [monotonicity #562]: #271
  111.93 +#274 := [trans #272 #259]: #271
  111.94 +#255 := [quant-inst]: #549
  111.95 +#165 := [mp #255 #274]: #548
  111.96 +#510 := [unit-resolution #165 #581]: #561
  111.97 +#544 := (not #561)
  111.98 +#497 := (or #544 #560)
  111.99 +#25 := (not #24)
 111.100 +#27 := (= uf_3 uf_5)
 111.101 +#28 := (not #27)
 111.102 +#29 := (and #25 #28)
 111.103 +#75 := [asserted]: #29
 111.104 +#79 := [and-elim #75]: #25
 111.105 +#268 := (or #544 #24 #560)
 111.106 +#542 := [def-axiom]: #268
 111.107 +#499 := [unit-resolution #542 #79]: #497
 111.108 +#491 := [unit-resolution #499 #510]: #560
 111.109 +#493 := [symm #491]: #555
 111.110 +#494 := (= #35 #552)
 111.111 +#157 := (uf_1 #32 uf_3)
 111.112 +#503 := (= #157 #552)
 111.113 +#502 := (= #552 #157)
 111.114 +#509 := (= #214 #32)
 111.115 +#415 := (= #223 uf_7)
 111.116 +#566 := (= uf_7 #223)
 111.117 +#17 := (:var 0 T3)
 111.118 +#16 := (:var 1 T2)
 111.119 +#15 := (:var 2 T1)
 111.120 +#18 := (uf_2 #15 #16 #17)
 111.121 +#582 := (pattern #18)
 111.122 +#19 := (uf_1 #18 #16)
 111.123 +#68 := (= #17 #19)
 111.124 +#584 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) (:pat #582) #68)
 111.125 +#72 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #68)
 111.126 +#583 := (iff #72 #584)
 111.127 +#586 := (iff #584 #584)
 111.128 +#587 := [rewrite]: #586
 111.129 +#585 := [rewrite]: #583
 111.130 +#588 := [trans #585 #587]: #583
 111.131 +#82 := (~ #72 #72)
 111.132 +#96 := (~ #68 #68)
 111.133 +#97 := [refl]: #96
 111.134 +#78 := [nnf-pos #97]: #82
 111.135 +#20 := (= #19 #17)
 111.136 +#21 := (forall (vars (?x5 T1) (?x6 T2) (?x7 T3)) #20)
 111.137 +#73 := (iff #21 #72)
 111.138 +#70 := (iff #20 #68)
 111.139 +#71 := [rewrite]: #70
 111.140 +#74 := [quant-intro #71]: #73
 111.141 +#67 := [asserted]: #21
 111.142 +#77 := [mp #67 #74]: #72
 111.143 +#98 := [mp~ #77 #78]: #72
 111.144 +#589 := [mp #98 #588]: #584
 111.145 +#211 := (not #584)
 111.146 +#212 := (or #211 #566)
 111.147 +#213 := [quant-inst]: #212
 111.148 +#414 := [unit-resolution #213 #589]: #566
 111.149 +#416 := [symm #414]: #415
 111.150 +#506 := [monotonicity #416]: #509
 111.151 +#498 := [monotonicity #506]: #502
 111.152 +#492 := [symm #498]: #503
 111.153 +#244 := (= #35 #157)
 111.154 +#158 := (= uf_8 #35)
 111.155 +#248 := (ite #27 #158 #244)
 111.156 +#247 := (or #250 #248)
 111.157 +#245 := (= uf_5 uf_3)
 111.158 +#159 := (ite #245 #158 #244)
 111.159 +#251 := (or #250 #159)
 111.160 +#567 := (iff #251 #247)
 111.161 +#224 := (iff #247 #247)
 111.162 +#356 := [rewrite]: #224
 111.163 +#249 := (iff #159 #248)
 111.164 +#246 := (iff #245 #27)
 111.165 +#237 := [rewrite]: #246
 111.166 +#177 := [monotonicity #237]: #249
 111.167 +#569 := [monotonicity #177]: #567
 111.168 +#563 := [trans #569 #356]: #567
 111.169 +#230 := [quant-inst]: #251
 111.170 +#235 := [mp #230 #563]: #247
 111.171 +#488 := [unit-resolution #235 #581]: #248
 111.172 +#236 := (not #248)
 111.173 +#490 := (or #236 #244)
 111.174 +#80 := [and-elim #75]: #28
 111.175 +#572 := (or #236 #27 #244)
 111.176 +#573 := [def-axiom]: #572
 111.177 +#500 := [unit-resolution #573 #80]: #490
 111.178 +#501 := [unit-resolution #500 #488]: #244
 111.179 +#495 := [trans #501 #492]: #494
 111.180 +#489 := [trans #495 #493]: #37
 111.181 +#38 := (not #37)
 111.182 +#76 := [asserted]: #38
 111.183 +[unit-resolution #76 #489]: false
 111.184 +unsat
   112.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   112.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_05	Tue Oct 20 10:11:30 2009 +0200
   112.3 @@ -0,0 +1,20 @@
   112.4 +(benchmark Isabelle
   112.5 +:extrasorts ( T1 T2 T3)
   112.6 +:extrafuns (
   112.7 +  (uf_6 Int T2)
   112.8 +  (uf_1 T1 T3 T3)
   112.9 +  (uf_4 T3)
  112.10 +  (uf_2 T2 T3 T3)
  112.11 +  (uf_3 T1 T2 T2)
  112.12 +  (uf_7 T2 Int)
  112.13 +  (uf_5 T1)
  112.14 + )
  112.15 +:assumption (forall (?x1 T1) (?x2 T2) (?x3 T3) (= (uf_1 ?x1 (uf_2 ?x2 ?x3)) (uf_2 (uf_3 ?x1 ?x2) (uf_1 ?x1 ?x3))))
  112.16 +:assumption (forall (?x4 T1) (= (uf_1 ?x4 uf_4) uf_4))
  112.17 +:assumption (forall (?x5 T2) (= (uf_3 uf_5 ?x5) (uf_6 (+ (uf_7 ?x5) 1))))
  112.18 +:assumption (forall (?x6 T2) (= (uf_6 (uf_7 ?x6)) ?x6))
  112.19 +:assumption (forall (?x7 Int) (implies (<= 0 ?x7) (= (uf_7 (uf_6 ?x7)) ?x7)))
  112.20 +:assumption (forall (?x8 Int) (implies (< ?x8 0) (= (uf_7 (uf_6 ?x8)) 0)))
  112.21 +:assumption (not (= (uf_1 uf_5 (uf_2 (uf_6 0) (uf_2 (uf_6 1) uf_4))) (uf_2 (uf_6 1) (uf_2 (uf_6 2) uf_4))))
  112.22 +:formula true
  112.23 +)
   113.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   113.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_05.proof	Tue Oct 20 10:11:30 2009 +0200
   113.3 @@ -0,0 +1,464 @@
   113.4 +#2 := false
   113.5 +decl uf_2 :: (-> T2 T3 T3)
   113.6 +decl uf_4 :: T3
   113.7 +#15 := uf_4
   113.8 +decl uf_6 :: (-> int T2)
   113.9 +#48 := 2::int
  113.10 +#49 := (uf_6 2::int)
  113.11 +#50 := (uf_2 #49 uf_4)
  113.12 +#23 := 1::int
  113.13 +#44 := (uf_6 1::int)
  113.14 +#51 := (uf_2 #44 #50)
  113.15 +decl uf_1 :: (-> T1 T3 T3)
  113.16 +#45 := (uf_2 #44 uf_4)
  113.17 +#31 := 0::int
  113.18 +#43 := (uf_6 0::int)
  113.19 +#46 := (uf_2 #43 #45)
  113.20 +decl uf_5 :: T1
  113.21 +#19 := uf_5
  113.22 +#47 := (uf_1 uf_5 #46)
  113.23 +#52 := (= #47 #51)
  113.24 +#266 := (uf_1 uf_5 #45)
  113.25 +decl uf_3 :: (-> T1 T2 T2)
  113.26 +#352 := (uf_3 uf_5 #43)
  113.27 +#267 := (uf_2 #352 #266)
  113.28 +#797 := (= #267 #51)
  113.29 +#795 := (= #51 #267)
  113.30 +#758 := (= #50 #266)
  113.31 +#521 := (uf_1 uf_5 uf_4)
  113.32 +#522 := (uf_3 uf_5 #44)
  113.33 +#523 := (uf_2 #522 #521)
  113.34 +#756 := (= #523 #266)
  113.35 +#616 := (= #266 #523)
  113.36 +#6 := (:var 0 T3)
  113.37 +#4 := (:var 2 T1)
  113.38 +#10 := (uf_1 #4 #6)
  113.39 +#5 := (:var 1 T2)
  113.40 +#9 := (uf_3 #4 #5)
  113.41 +#11 := (uf_2 #9 #10)
  113.42 +#683 := (pattern #11)
  113.43 +#7 := (uf_2 #5 #6)
  113.44 +#8 := (uf_1 #4 #7)
  113.45 +#682 := (pattern #8)
  113.46 +#12 := (= #8 #11)
  113.47 +#684 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3)) (:pat #682 #683) #12)
  113.48 +#13 := (forall (vars (?x1 T1) (?x2 T2) (?x3 T3)) #12)
  113.49 +#687 := (iff #13 #684)
  113.50 +#685 := (iff #12 #12)
  113.51 +#686 := [refl]: #685
  113.52 +#688 := [quant-intro #686]: #687
  113.53 +#195 := (~ #13 #13)
  113.54 +#193 := (~ #12 #12)
  113.55 +#194 := [refl]: #193
  113.56 +#196 := [nnf-pos #194]: #195
  113.57 +#69 := [asserted]: #13
  113.58 +#197 := [mp~ #69 #196]: #13
  113.59 +#689 := [mp #197 #688]: #684
  113.60 +#345 := (not #684)
  113.61 +#604 := (or #345 #616)
  113.62 +#606 := [quant-inst]: #604
  113.63 +#277 := [unit-resolution #606 #689]: #616
  113.64 +#757 := [symm #277]: #756
  113.65 +#754 := (= #50 #523)
  113.66 +#569 := (= uf_4 #521)
  113.67 +#14 := (:var 0 T1)
  113.68 +#16 := (uf_1 #14 uf_4)
  113.69 +#690 := (pattern #16)
  113.70 +#71 := (= uf_4 #16)
  113.71 +#691 := (forall (vars (?x4 T1)) (:pat #690) #71)
  113.72 +#74 := (forall (vars (?x4 T1)) #71)
  113.73 +#694 := (iff #74 #691)
  113.74 +#692 := (iff #71 #71)
  113.75 +#693 := [refl]: #692
  113.76 +#695 := [quant-intro #693]: #694
  113.77 +#180 := (~ #74 #74)
  113.78 +#198 := (~ #71 #71)
  113.79 +#199 := [refl]: #198
  113.80 +#178 := [nnf-pos #199]: #180
  113.81 +#17 := (= #16 uf_4)
  113.82 +#18 := (forall (vars (?x4 T1)) #17)
  113.83 +#75 := (iff #18 #74)
  113.84 +#72 := (iff #17 #71)
  113.85 +#73 := [rewrite]: #72
  113.86 +#76 := [quant-intro #73]: #75
  113.87 +#70 := [asserted]: #18
  113.88 +#79 := [mp #70 #76]: #74
  113.89 +#200 := [mp~ #79 #178]: #74
  113.90 +#696 := [mp #200 #695]: #691
  113.91 +#572 := (not #691)
  113.92 +#573 := (or #572 #569)
  113.93 +#574 := [quant-inst]: #573
  113.94 +#282 := [unit-resolution #574 #696]: #569
  113.95 +#752 := (= #49 #522)
  113.96 +decl uf_7 :: (-> T2 int)
  113.97 +#666 := (uf_7 #44)
  113.98 +#595 := (+ 1::int #666)
  113.99 +#597 := (uf_6 #595)
 113.100 +#748 := (= #597 #522)
 113.101 +#605 := (= #522 #597)
 113.102 +#20 := (:var 0 T2)
 113.103 +#22 := (uf_7 #20)
 113.104 +#698 := (pattern #22)
 113.105 +#21 := (uf_3 uf_5 #20)
 113.106 +#697 := (pattern #21)
 113.107 +#78 := (+ 1::int #22)
 113.108 +#82 := (uf_6 #78)
 113.109 +#85 := (= #21 #82)
 113.110 +#699 := (forall (vars (?x5 T2)) (:pat #697 #698) #85)
 113.111 +#88 := (forall (vars (?x5 T2)) #85)
 113.112 +#702 := (iff #88 #699)
 113.113 +#700 := (iff #85 #85)
 113.114 +#701 := [refl]: #700
 113.115 +#703 := [quant-intro #701]: #702
 113.116 +#181 := (~ #88 #88)
 113.117 +#201 := (~ #85 #85)
 113.118 +#202 := [refl]: #201
 113.119 +#182 := [nnf-pos #202]: #181
 113.120 +#24 := (+ #22 1::int)
 113.121 +#25 := (uf_6 #24)
 113.122 +#26 := (= #21 #25)
 113.123 +#27 := (forall (vars (?x5 T2)) #26)
 113.124 +#89 := (iff #27 #88)
 113.125 +#86 := (iff #26 #85)
 113.126 +#83 := (= #25 #82)
 113.127 +#80 := (= #24 #78)
 113.128 +#81 := [rewrite]: #80
 113.129 +#84 := [monotonicity #81]: #83
 113.130 +#87 := [monotonicity #84]: #86
 113.131 +#90 := [quant-intro #87]: #89
 113.132 +#77 := [asserted]: #27
 113.133 +#93 := [mp #77 #90]: #88
 113.134 +#203 := [mp~ #93 #182]: #88
 113.135 +#704 := [mp #203 #703]: #699
 113.136 +#607 := (not #699)
 113.137 +#600 := (or #607 #605)
 113.138 +#601 := [quant-inst]: #600
 113.139 +#269 := [unit-resolution #601 #704]: #605
 113.140 +#749 := [symm #269]: #748
 113.141 +#750 := (= #49 #597)
 113.142 +#499 := (uf_7 #597)
 113.143 +#337 := (uf_6 #499)
 113.144 +#318 := (= #337 #597)
 113.145 +#28 := (uf_6 #22)
 113.146 +#92 := (= #20 #28)
 113.147 +#705 := (forall (vars (?x6 T2)) (:pat #698) #92)
 113.148 +#96 := (forall (vars (?x6 T2)) #92)
 113.149 +#706 := (iff #96 #705)
 113.150 +#708 := (iff #705 #705)
 113.151 +#709 := [rewrite]: #708
 113.152 +#707 := [rewrite]: #706
 113.153 +#710 := [trans #707 #709]: #706
 113.154 +#183 := (~ #96 #96)
 113.155 +#204 := (~ #92 #92)
 113.156 +#205 := [refl]: #204
 113.157 +#184 := [nnf-pos #205]: #183
 113.158 +#29 := (= #28 #20)
 113.159 +#30 := (forall (vars (?x6 T2)) #29)
 113.160 +#97 := (iff #30 #96)
 113.161 +#94 := (iff #29 #92)
 113.162 +#95 := [rewrite]: #94
 113.163 +#98 := [quant-intro #95]: #97
 113.164 +#91 := [asserted]: #30
 113.165 +#101 := [mp #91 #98]: #96
 113.166 +#206 := [mp~ #101 #184]: #96
 113.167 +#711 := [mp #206 #710]: #705
 113.168 +#376 := (not #705)
 113.169 +#325 := (or #376 #318)
 113.170 +#316 := (= #597 #337)
 113.171 +#326 := (or #376 #316)
 113.172 +#328 := (iff #326 #325)
 113.173 +#329 := (iff #325 #325)
 113.174 +#310 := [rewrite]: #329
 113.175 +#323 := (iff #316 #318)
 113.176 +#324 := [rewrite]: #323
 113.177 +#317 := [monotonicity #324]: #328
 113.178 +#312 := [trans #317 #310]: #328
 113.179 +#327 := [quant-inst]: #326
 113.180 +#313 := [mp #327 #312]: #325
 113.181 +#271 := [unit-resolution #313 #711]: #318
 113.182 +#746 := (= #49 #337)
 113.183 +#744 := (= 2::int #499)
 113.184 +#742 := (= #499 2::int)
 113.185 +#578 := -1::int
 113.186 +#513 := (* -1::int #666)
 113.187 +#514 := (+ #499 #513)
 113.188 +#474 := (<= #514 1::int)
 113.189 +#512 := (= #514 1::int)
 113.190 +#504 := (>= #666 -1::int)
 113.191 +#586 := (>= #666 1::int)
 113.192 +#378 := (= #666 1::int)
 113.193 +#32 := (:var 0 int)
 113.194 +#34 := (uf_6 #32)
 113.195 +#712 := (pattern #34)
 113.196 +#118 := (>= #32 0::int)
 113.197 +#119 := (not #118)
 113.198 +#35 := (uf_7 #34)
 113.199 +#100 := (= #32 #35)
 113.200 +#125 := (or #100 #119)
 113.201 +#713 := (forall (vars (?x7 int)) (:pat #712) #125)
 113.202 +#130 := (forall (vars (?x7 int)) #125)
 113.203 +#716 := (iff #130 #713)
 113.204 +#714 := (iff #125 #125)
 113.205 +#715 := [refl]: #714
 113.206 +#717 := [quant-intro #715]: #716
 113.207 +#185 := (~ #130 #130)
 113.208 +#207 := (~ #125 #125)
 113.209 +#208 := [refl]: #207
 113.210 +#186 := [nnf-pos #208]: #185
 113.211 +#36 := (= #35 #32)
 113.212 +#33 := (<= 0::int #32)
 113.213 +#37 := (implies #33 #36)
 113.214 +#38 := (forall (vars (?x7 int)) #37)
 113.215 +#133 := (iff #38 #130)
 113.216 +#107 := (not #33)
 113.217 +#108 := (or #107 #100)
 113.218 +#113 := (forall (vars (?x7 int)) #108)
 113.219 +#131 := (iff #113 #130)
 113.220 +#128 := (iff #108 #125)
 113.221 +#122 := (or #119 #100)
 113.222 +#126 := (iff #122 #125)
 113.223 +#127 := [rewrite]: #126
 113.224 +#123 := (iff #108 #122)
 113.225 +#120 := (iff #107 #119)
 113.226 +#116 := (iff #33 #118)
 113.227 +#117 := [rewrite]: #116
 113.228 +#121 := [monotonicity #117]: #120
 113.229 +#124 := [monotonicity #121]: #123
 113.230 +#129 := [trans #124 #127]: #128
 113.231 +#132 := [quant-intro #129]: #131
 113.232 +#114 := (iff #38 #113)
 113.233 +#111 := (iff #37 #108)
 113.234 +#104 := (implies #33 #100)
 113.235 +#109 := (iff #104 #108)
 113.236 +#110 := [rewrite]: #109
 113.237 +#105 := (iff #37 #104)
 113.238 +#102 := (iff #36 #100)
 113.239 +#103 := [rewrite]: #102
 113.240 +#106 := [monotonicity #103]: #105
 113.241 +#112 := [trans #106 #110]: #111
 113.242 +#115 := [quant-intro #112]: #114
 113.243 +#134 := [trans #115 #132]: #133
 113.244 +#99 := [asserted]: #38
 113.245 +#135 := [mp #99 #134]: #130
 113.246 +#209 := [mp~ #135 #186]: #130
 113.247 +#718 := [mp #209 #717]: #713
 113.248 +#673 := (not #713)
 113.249 +#365 := (or #673 #378)
 113.250 +#307 := (>= 1::int 0::int)
 113.251 +#668 := (not #307)
 113.252 +#669 := (= 1::int #666)
 113.253 +#655 := (or #669 #668)
 113.254 +#366 := (or #673 #655)
 113.255 +#645 := (iff #366 #365)
 113.256 +#360 := (iff #365 #365)
 113.257 +#643 := [rewrite]: #360
 113.258 +#654 := (iff #655 #378)
 113.259 +#374 := (or #378 false)
 113.260 +#653 := (iff #374 #378)
 113.261 +#650 := [rewrite]: #653
 113.262 +#375 := (iff #655 #374)
 113.263 +#651 := (iff #668 false)
 113.264 +#1 := true
 113.265 +#670 := (not true)
 113.266 +#677 := (iff #670 false)
 113.267 +#678 := [rewrite]: #677
 113.268 +#381 := (iff #668 #670)
 113.269 +#379 := (iff #307 true)
 113.270 +#380 := [rewrite]: #379
 113.271 +#274 := [monotonicity #380]: #381
 113.272 +#652 := [trans #274 #678]: #651
 113.273 +#656 := (iff #669 #378)
 113.274 +#363 := [rewrite]: #656
 113.275 +#649 := [monotonicity #363 #652]: #375
 113.276 +#364 := [trans #649 #650]: #654
 113.277 +#646 := [monotonicity #364]: #645
 113.278 +#647 := [trans #646 #643]: #645
 113.279 +#367 := [quant-inst]: #366
 113.280 +#644 := [mp #367 #647]: #365
 113.281 +#272 := [unit-resolution #644 #718]: #378
 113.282 +#270 := (not #378)
 113.283 +#273 := (or #270 #586)
 113.284 +#725 := [th-lemma]: #273
 113.285 +#726 := [unit-resolution #725 #272]: #586
 113.286 +#727 := (not #586)
 113.287 +#728 := (or #727 #504)
 113.288 +#729 := [th-lemma]: #728
 113.289 +#730 := [unit-resolution #729 #726]: #504
 113.290 +#481 := (not #504)
 113.291 +#496 := (or #673 #481 #512)
 113.292 +#509 := (>= #595 0::int)
 113.293 +#468 := (not #509)
 113.294 +#501 := (= #595 #499)
 113.295 +#503 := (or #501 #468)
 113.296 +#497 := (or #673 #503)
 113.297 +#470 := (iff #497 #496)
 113.298 +#491 := (or #481 #512)
 113.299 +#498 := (or #673 #491)
 113.300 +#467 := (iff #498 #496)
 113.301 +#469 := [rewrite]: #467
 113.302 +#459 := (iff #497 #498)
 113.303 +#494 := (iff #503 #491)
 113.304 +#488 := (or #512 #481)
 113.305 +#492 := (iff #488 #491)
 113.306 +#493 := [rewrite]: #492
 113.307 +#489 := (iff #503 #488)
 113.308 +#486 := (iff #468 #481)
 113.309 +#525 := (iff #509 #504)
 113.310 +#480 := [rewrite]: #525
 113.311 +#487 := [monotonicity #480]: #486
 113.312 +#510 := (iff #501 #512)
 113.313 +#524 := [rewrite]: #510
 113.314 +#490 := [monotonicity #524 #487]: #489
 113.315 +#495 := [trans #490 #493]: #494
 113.316 +#460 := [monotonicity #495]: #459
 113.317 +#471 := [trans #460 #469]: #470
 113.318 +#482 := [quant-inst]: #497
 113.319 +#473 := [mp #482 #471]: #496
 113.320 +#731 := [unit-resolution #473 #718 #730]: #512
 113.321 +#732 := (not #512)
 113.322 +#733 := (or #732 #474)
 113.323 +#734 := [th-lemma]: #733
 113.324 +#735 := [unit-resolution #734 #731]: #474
 113.325 +#475 := (>= #514 1::int)
 113.326 +#736 := (or #732 #475)
 113.327 +#737 := [th-lemma]: #736
 113.328 +#738 := [unit-resolution #737 #731]: #475
 113.329 +#582 := (<= #666 1::int)
 113.330 +#739 := (or #270 #582)
 113.331 +#740 := [th-lemma]: #739
 113.332 +#741 := [unit-resolution #740 #272]: #582
 113.333 +#743 := [th-lemma #726 #741 #738 #735]: #742
 113.334 +#745 := [symm #743]: #744
 113.335 +#747 := [monotonicity #745]: #746
 113.336 +#751 := [trans #747 #271]: #750
 113.337 +#753 := [trans #751 #749]: #752
 113.338 +#755 := [monotonicity #753 #282]: #754
 113.339 +#759 := [trans #755 #757]: #758
 113.340 +#792 := (= #44 #352)
 113.341 +#358 := (uf_7 #43)
 113.342 +#613 := (+ 1::int #358)
 113.343 +#617 := (uf_6 #613)
 113.344 +#788 := (= #617 #352)
 113.345 +#598 := (= #352 #617)
 113.346 +#608 := (or #607 #598)
 113.347 +#609 := [quant-inst]: #608
 113.348 +#760 := [unit-resolution #609 #704]: #598
 113.349 +#789 := [symm #760]: #788
 113.350 +#790 := (= #44 #617)
 113.351 +#575 := (uf_7 #617)
 113.352 +#390 := (uf_6 #575)
 113.353 +#382 := (= #390 #617)
 113.354 +#385 := (or #376 #382)
 113.355 +#392 := (= #617 #390)
 113.356 +#386 := (or #376 #392)
 113.357 +#387 := (iff #386 #385)
 113.358 +#369 := (iff #385 #385)
 113.359 +#370 := [rewrite]: #369
 113.360 +#383 := (iff #392 #382)
 113.361 +#384 := [rewrite]: #383
 113.362 +#368 := [monotonicity #384]: #387
 113.363 +#361 := [trans #368 #370]: #387
 113.364 +#377 := [quant-inst]: #386
 113.365 +#371 := [mp #377 #361]: #385
 113.366 +#761 := [unit-resolution #371 #711]: #382
 113.367 +#786 := (= #44 #390)
 113.368 +#784 := (= 1::int #575)
 113.369 +#782 := (= #575 1::int)
 113.370 +#568 := (* -1::int #575)
 113.371 +#579 := (+ #358 #568)
 113.372 +#535 := (<= #579 -1::int)
 113.373 +#557 := (= #579 -1::int)
 113.374 +#561 := (>= #358 -1::int)
 113.375 +#585 := (>= #358 0::int)
 113.376 +#676 := (= #358 0::int)
 113.377 +#315 := (or #673 #676)
 113.378 +#268 := (>= 0::int 0::int)
 113.379 +#354 := (not #268)
 113.380 +#355 := (= 0::int #358)
 113.381 +#359 := (or #355 #354)
 113.382 +#657 := (or #673 #359)
 113.383 +#320 := (iff #657 #315)
 113.384 +#322 := (iff #315 #315)
 113.385 +#659 := [rewrite]: #322
 113.386 +#672 := (iff #359 #676)
 113.387 +#675 := (or #676 false)
 113.388 +#330 := (iff #675 #676)
 113.389 +#335 := [rewrite]: #330
 113.390 +#681 := (iff #359 #675)
 113.391 +#679 := (iff #354 false)
 113.392 +#343 := (iff #354 #670)
 113.393 +#332 := (iff #268 true)
 113.394 +#463 := [rewrite]: #332
 113.395 +#344 := [monotonicity #463]: #343
 113.396 +#680 := [trans #344 #678]: #679
 113.397 +#338 := (iff #355 #676)
 113.398 +#674 := [rewrite]: #338
 113.399 +#671 := [monotonicity #674 #680]: #681
 113.400 +#331 := [trans #671 #335]: #672
 113.401 +#321 := [monotonicity #331]: #320
 113.402 +#660 := [trans #321 #659]: #320
 113.403 +#319 := [quant-inst]: #657
 113.404 +#661 := [mp #319 #660]: #315
 113.405 +#762 := [unit-resolution #661 #718]: #676
 113.406 +#763 := (not #676)
 113.407 +#764 := (or #763 #585)
 113.408 +#765 := [th-lemma]: #764
 113.409 +#766 := [unit-resolution #765 #762]: #585
 113.410 +#767 := (not #585)
 113.411 +#768 := (or #767 #561)
 113.412 +#769 := [th-lemma]: #768
 113.413 +#770 := [unit-resolution #769 #766]: #561
 113.414 +#564 := (not #561)
 113.415 +#549 := (or #673 #557 #564)
 113.416 +#570 := (>= #613 0::int)
 113.417 +#571 := (not #570)
 113.418 +#576 := (= #613 #575)
 113.419 +#577 := (or #576 #571)
 113.420 +#552 := (or #673 #577)
 113.421 +#530 := (iff #552 #549)
 113.422 +#551 := (or #557 #564)
 113.423 +#554 := (or #673 #551)
 113.424 +#556 := (iff #554 #549)
 113.425 +#529 := [rewrite]: #556
 113.426 +#555 := (iff #552 #554)
 113.427 +#547 := (iff #577 #551)
 113.428 +#559 := (iff #571 #564)
 113.429 +#562 := (iff #570 #561)
 113.430 +#563 := [rewrite]: #562
 113.431 +#565 := [monotonicity #563]: #559
 113.432 +#558 := (iff #576 #557)
 113.433 +#560 := [rewrite]: #558
 113.434 +#548 := [monotonicity #560 #565]: #547
 113.435 +#550 := [monotonicity #548]: #555
 113.436 +#531 := [trans #550 #529]: #530
 113.437 +#553 := [quant-inst]: #552
 113.438 +#424 := [mp #553 #531]: #549
 113.439 +#771 := [unit-resolution #424 #718 #770]: #557
 113.440 +#772 := (not #557)
 113.441 +#773 := (or #772 #535)
 113.442 +#774 := [th-lemma]: #773
 113.443 +#775 := [unit-resolution #774 #771]: #535
 113.444 +#536 := (>= #579 -1::int)
 113.445 +#776 := (or #772 #536)
 113.446 +#777 := [th-lemma]: #776
 113.447 +#778 := [unit-resolution #777 #771]: #536
 113.448 +#584 := (<= #358 0::int)
 113.449 +#779 := (or #763 #584)
 113.450 +#780 := [th-lemma]: #779
 113.451 +#781 := [unit-resolution #780 #762]: #584
 113.452 +#783 := [th-lemma #766 #781 #778 #775]: #782
 113.453 +#785 := [symm #783]: #784
 113.454 +#787 := [monotonicity #785]: #786
 113.455 +#791 := [trans #787 #761]: #790
 113.456 +#793 := [trans #791 #789]: #792
 113.457 +#796 := [monotonicity #793 #759]: #795
 113.458 +#798 := [symm #796]: #797
 113.459 +#353 := (= #47 #267)
 113.460 +#356 := (or #345 #353)
 113.461 +#357 := [quant-inst]: #356
 113.462 +#794 := [unit-resolution #357 #689]: #353
 113.463 +#799 := [trans #794 #798]: #52
 113.464 +#53 := (not #52)
 113.465 +#177 := [asserted]: #53
 113.466 +[unit-resolution #177 #799]: false
 113.467 +unsat
   114.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   114.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_06	Tue Oct 20 10:11:30 2009 +0200
   114.3 @@ -0,0 +1,8 @@
   114.4 +(benchmark Isabelle
   114.5 +:extrasorts ( T1 T2)
   114.6 +:extrapreds (
   114.7 +  (up_1 T1)
   114.8 + )
   114.9 +:assumption (not (or (forall (?x1 T1) (up_1 ?x1)) (not (forall (?x2 T1) (up_1 ?x2)))))
  114.10 +:formula true
  114.11 +)
   115.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   115.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_06.proof	Tue Oct 20 10:11:30 2009 +0200
   115.3 @@ -0,0 +1,21 @@
   115.4 +#2 := false
   115.5 +decl up_1 :: (-> T1 bool)
   115.6 +#4 := (:var 0 T1)
   115.7 +#5 := (up_1 #4)
   115.8 +#6 := (forall (vars (?x1 T1)) #5)
   115.9 +#7 := (not #6)
  115.10 +#8 := (or #6 #7)
  115.11 +#9 := (not #8)
  115.12 +#33 := (iff #9 false)
  115.13 +#1 := true
  115.14 +#28 := (not true)
  115.15 +#31 := (iff #28 false)
  115.16 +#32 := [rewrite]: #31
  115.17 +#29 := (iff #9 #28)
  115.18 +#26 := (iff #8 true)
  115.19 +#27 := [rewrite]: #26
  115.20 +#30 := [monotonicity #27]: #29
  115.21 +#34 := [trans #30 #32]: #33
  115.22 +#25 := [asserted]: #9
  115.23 +[mp #25 #34]: false
  115.24 +unsat
   116.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   116.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_07	Tue Oct 20 10:11:30 2009 +0200
   116.3 @@ -0,0 +1,14 @@
   116.4 +(benchmark Isabelle
   116.5 +:extrasorts ( T1)
   116.6 +:extrafuns (
   116.7 +  (uf_1 Int T1)
   116.8 +  (uf_3 T1 T1)
   116.9 +  (uf_2 T1 Int)
  116.10 + )
  116.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  116.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  116.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  116.14 +:assumption (forall (?x4 T1) (= (uf_3 ?x4) (ite (< (uf_2 ?x4) 10) ?x4 (uf_3 (uf_1 (- (uf_2 ?x4) 10))))))
  116.15 +:assumption (not (= (uf_3 (uf_1 (* 4 (uf_2 (uf_3 (uf_1 4)))))) (uf_1 6)))
  116.16 +:formula true
  116.17 +)
   117.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   117.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_07.proof	Tue Oct 20 10:11:30 2009 +0200
   117.3 @@ -0,0 +1,373 @@
   117.4 +#2 := false
   117.5 +decl uf_1 :: (-> int T1)
   117.6 +#37 := 6::int
   117.7 +#38 := (uf_1 6::int)
   117.8 +decl uf_3 :: (-> T1 T1)
   117.9 +decl uf_2 :: (-> T1 int)
  117.10 +#30 := 4::int
  117.11 +#31 := (uf_1 4::int)
  117.12 +#32 := (uf_3 #31)
  117.13 +#33 := (uf_2 #32)
  117.14 +#34 := (* 4::int #33)
  117.15 +#35 := (uf_1 #34)
  117.16 +#36 := (uf_3 #35)
  117.17 +#39 := (= #36 #38)
  117.18 +#548 := (uf_3 #38)
  117.19 +#394 := (= #548 #38)
  117.20 +#549 := (= #38 #548)
  117.21 +#523 := (uf_2 #38)
  117.22 +#142 := -10::int
  117.23 +#513 := (+ -10::int #523)
  117.24 +#537 := (uf_1 #513)
  117.25 +#538 := (uf_3 #537)
  117.26 +#514 := (= #538 #548)
  117.27 +#22 := 10::int
  117.28 +#539 := (>= #523 10::int)
  117.29 +#506 := (ite #539 #514 #549)
  117.30 +#4 := (:var 0 T1)
  117.31 +#21 := (uf_3 #4)
  117.32 +#708 := (pattern #21)
  117.33 +#5 := (uf_2 #4)
  117.34 +#687 := (pattern #5)
  117.35 +#209 := (= #4 #21)
  117.36 +#143 := (+ -10::int #5)
  117.37 +#146 := (uf_1 #143)
  117.38 +#149 := (uf_3 #146)
  117.39 +#208 := (= #21 #149)
  117.40 +#163 := (>= #5 10::int)
  117.41 +#190 := (ite #163 #208 #209)
  117.42 +#709 := (forall (vars (?x4 T1)) (:pat #687 #708) #190)
  117.43 +#193 := (forall (vars (?x4 T1)) #190)
  117.44 +#712 := (iff #193 #709)
  117.45 +#710 := (iff #190 #190)
  117.46 +#711 := [refl]: #710
  117.47 +#713 := [quant-intro #711]: #712
  117.48 +#168 := (ite #163 #149 #4)
  117.49 +#173 := (= #21 #168)
  117.50 +#176 := (forall (vars (?x4 T1)) #173)
  117.51 +#210 := (iff #176 #193)
  117.52 +#191 := (iff #173 #190)
  117.53 +#192 := [rewrite]: #191
  117.54 +#211 := [quant-intro #192]: #210
  117.55 +#188 := (~ #176 #176)
  117.56 +#205 := (~ #173 #173)
  117.57 +#206 := [refl]: #205
  117.58 +#189 := [nnf-pos #206]: #188
  117.59 +#24 := (- #5 10::int)
  117.60 +#25 := (uf_1 #24)
  117.61 +#26 := (uf_3 #25)
  117.62 +#23 := (< #5 10::int)
  117.63 +#27 := (ite #23 #4 #26)
  117.64 +#28 := (= #21 #27)
  117.65 +#29 := (forall (vars (?x4 T1)) #28)
  117.66 +#179 := (iff #29 #176)
  117.67 +#152 := (ite #23 #4 #149)
  117.68 +#155 := (= #21 #152)
  117.69 +#158 := (forall (vars (?x4 T1)) #155)
  117.70 +#177 := (iff #158 #176)
  117.71 +#174 := (iff #155 #173)
  117.72 +#171 := (= #152 #168)
  117.73 +#161 := (not #163)
  117.74 +#165 := (ite #161 #4 #149)
  117.75 +#169 := (= #165 #168)
  117.76 +#170 := [rewrite]: #169
  117.77 +#166 := (= #152 #165)
  117.78 +#162 := (iff #23 #161)
  117.79 +#164 := [rewrite]: #162
  117.80 +#167 := [monotonicity #164]: #166
  117.81 +#172 := [trans #167 #170]: #171
  117.82 +#175 := [monotonicity #172]: #174
  117.83 +#178 := [quant-intro #175]: #177
  117.84 +#159 := (iff #29 #158)
  117.85 +#156 := (iff #28 #155)
  117.86 +#153 := (= #27 #152)
  117.87 +#150 := (= #26 #149)
  117.88 +#147 := (= #25 #146)
  117.89 +#144 := (= #24 #143)
  117.90 +#145 := [rewrite]: #144
  117.91 +#148 := [monotonicity #145]: #147
  117.92 +#151 := [monotonicity #148]: #150
  117.93 +#154 := [monotonicity #151]: #153
  117.94 +#157 := [monotonicity #154]: #156
  117.95 +#160 := [quant-intro #157]: #159
  117.96 +#180 := [trans #160 #178]: #179
  117.97 +#141 := [asserted]: #29
  117.98 +#181 := [mp #141 #180]: #176
  117.99 +#207 := [mp~ #181 #189]: #176
 117.100 +#212 := [mp #207 #211]: #193
 117.101 +#714 := [mp #212 #713]: #709
 117.102 +#681 := (not #709)
 117.103 +#517 := (or #681 #506)
 117.104 +#533 := (= #548 #538)
 117.105 +#507 := (ite #539 #533 #549)
 117.106 +#518 := (or #681 #507)
 117.107 +#529 := (iff #518 #517)
 117.108 +#530 := (iff #517 #517)
 117.109 +#485 := [rewrite]: #530
 117.110 +#508 := (iff #507 #506)
 117.111 +#473 := (iff #533 #514)
 117.112 +#504 := [rewrite]: #473
 117.113 +#515 := [monotonicity #504]: #508
 117.114 +#509 := [monotonicity #515]: #529
 117.115 +#486 := [trans #509 #485]: #529
 117.116 +#519 := [quant-inst]: #518
 117.117 +#491 := [mp #519 #486]: #517
 117.118 +#484 := [unit-resolution #491 #714]: #506
 117.119 +#493 := (not #539)
 117.120 +#465 := (<= #523 6::int)
 117.121 +#526 := (= #523 6::int)
 117.122 +#10 := (:var 0 int)
 117.123 +#12 := (uf_1 #10)
 117.124 +#695 := (pattern #12)
 117.125 +#9 := 0::int
 117.126 +#82 := (>= #10 0::int)
 117.127 +#83 := (not #82)
 117.128 +#13 := (uf_2 #12)
 117.129 +#64 := (= #10 #13)
 117.130 +#89 := (or #64 #83)
 117.131 +#696 := (forall (vars (?x2 int)) (:pat #695) #89)
 117.132 +#94 := (forall (vars (?x2 int)) #89)
 117.133 +#699 := (iff #94 #696)
 117.134 +#697 := (iff #89 #89)
 117.135 +#698 := [refl]: #697
 117.136 +#700 := [quant-intro #698]: #699
 117.137 +#185 := (~ #94 #94)
 117.138 +#199 := (~ #89 #89)
 117.139 +#200 := [refl]: #199
 117.140 +#183 := [nnf-pos #200]: #185
 117.141 +#14 := (= #13 #10)
 117.142 +#11 := (<= 0::int #10)
 117.143 +#15 := (implies #11 #14)
 117.144 +#16 := (forall (vars (?x2 int)) #15)
 117.145 +#97 := (iff #16 #94)
 117.146 +#71 := (not #11)
 117.147 +#72 := (or #71 #64)
 117.148 +#77 := (forall (vars (?x2 int)) #72)
 117.149 +#95 := (iff #77 #94)
 117.150 +#92 := (iff #72 #89)
 117.151 +#86 := (or #83 #64)
 117.152 +#90 := (iff #86 #89)
 117.153 +#91 := [rewrite]: #90
 117.154 +#87 := (iff #72 #86)
 117.155 +#84 := (iff #71 #83)
 117.156 +#80 := (iff #11 #82)
 117.157 +#81 := [rewrite]: #80
 117.158 +#85 := [monotonicity #81]: #84
 117.159 +#88 := [monotonicity #85]: #87
 117.160 +#93 := [trans #88 #91]: #92
 117.161 +#96 := [quant-intro #93]: #95
 117.162 +#78 := (iff #16 #77)
 117.163 +#75 := (iff #15 #72)
 117.164 +#68 := (implies #11 #64)
 117.165 +#73 := (iff #68 #72)
 117.166 +#74 := [rewrite]: #73
 117.167 +#69 := (iff #15 #68)
 117.168 +#66 := (iff #14 #64)
 117.169 +#67 := [rewrite]: #66
 117.170 +#70 := [monotonicity #67]: #69
 117.171 +#76 := [trans #70 #74]: #75
 117.172 +#79 := [quant-intro #76]: #78
 117.173 +#98 := [trans #79 #96]: #97
 117.174 +#63 := [asserted]: #16
 117.175 +#99 := [mp #63 #98]: #94
 117.176 +#201 := [mp~ #99 #183]: #94
 117.177 +#701 := [mp #201 #700]: #696
 117.178 +#671 := (not #696)
 117.179 +#615 := (or #671 #526)
 117.180 +#520 := (>= 6::int 0::int)
 117.181 +#522 := (not #520)
 117.182 +#516 := (= 6::int #523)
 117.183 +#524 := (or #516 #522)
 117.184 +#604 := (or #671 #524)
 117.185 +#606 := (iff #604 #615)
 117.186 +#601 := (iff #615 #615)
 117.187 +#608 := [rewrite]: #601
 117.188 +#614 := (iff #524 #526)
 117.189 +#603 := (or #526 false)
 117.190 +#612 := (iff #603 #526)
 117.191 +#613 := [rewrite]: #612
 117.192 +#600 := (iff #524 #603)
 117.193 +#609 := (iff #522 false)
 117.194 +#1 := true
 117.195 +#327 := (not true)
 117.196 +#666 := (iff #327 false)
 117.197 +#667 := [rewrite]: #666
 117.198 +#618 := (iff #522 #327)
 117.199 +#528 := (iff #520 true)
 117.200 +#621 := [rewrite]: #528
 117.201 +#622 := [monotonicity #621]: #618
 117.202 +#611 := [trans #622 #667]: #609
 117.203 +#525 := (iff #516 #526)
 117.204 +#527 := [rewrite]: #525
 117.205 +#602 := [monotonicity #527 #611]: #600
 117.206 +#610 := [trans #602 #613]: #614
 117.207 +#607 := [monotonicity #610]: #606
 117.208 +#592 := [trans #607 #608]: #606
 117.209 +#605 := [quant-inst]: #604
 117.210 +#593 := [mp #605 #592]: #615
 117.211 +#454 := [unit-resolution #593 #701]: #526
 117.212 +#303 := (not #526)
 117.213 +#462 := (or #303 #465)
 117.214 +#458 := [th-lemma]: #462
 117.215 +#463 := [unit-resolution #458 #454]: #465
 117.216 +#442 := (not #465)
 117.217 +#445 := (or #442 #493)
 117.218 +#449 := [th-lemma]: #445
 117.219 +#451 := [unit-resolution #449 #463]: #493
 117.220 +#492 := (not #506)
 117.221 +#496 := (or #492 #539 #549)
 117.222 +#497 := [def-axiom]: #496
 117.223 +#452 := [unit-resolution #497 #451 #484]: #549
 117.224 +#395 := [symm #452]: #394
 117.225 +#397 := (= #36 #548)
 117.226 +#372 := (uf_2 #35)
 117.227 +#576 := (+ -10::int #372)
 117.228 +#568 := (uf_1 #576)
 117.229 +#569 := (uf_3 #568)
 117.230 +#408 := (= #569 #548)
 117.231 +#401 := (= #568 #38)
 117.232 +#422 := (= #576 6::int)
 117.233 +#677 := (uf_2 #31)
 117.234 +#365 := -1::int
 117.235 +#478 := (* -1::int #677)
 117.236 +#479 := (+ #33 #478)
 117.237 +#480 := (<= #479 0::int)
 117.238 +#476 := (= #33 #677)
 117.239 +#431 := (= #32 #31)
 117.240 +#589 := (= #31 #32)
 117.241 +#590 := (+ -10::int #677)
 117.242 +#587 := (uf_1 #590)
 117.243 +#591 := (uf_3 #587)
 117.244 +#571 := (= #32 #591)
 117.245 +#572 := (>= #677 10::int)
 117.246 +#574 := (ite #572 #571 #589)
 117.247 +#577 := (or #681 #574)
 117.248 +#578 := [quant-inst]: #577
 117.249 +#450 := [unit-resolution #578 #714]: #574
 117.250 +#580 := (not #572)
 117.251 +#552 := (<= #677 4::int)
 117.252 +#324 := (= #677 4::int)
 117.253 +#674 := (or #671 #324)
 117.254 +#343 := (>= 4::int 0::int)
 117.255 +#679 := (not #343)
 117.256 +#336 := (= 4::int #677)
 117.257 +#678 := (or #336 #679)
 117.258 +#660 := (or #671 #678)
 117.259 +#368 := (iff #660 #674)
 117.260 +#384 := (iff #674 #674)
 117.261 +#385 := [rewrite]: #384
 117.262 +#312 := (iff #678 #324)
 117.263 +#669 := (or #324 false)
 117.264 +#672 := (iff #669 #324)
 117.265 +#311 := [rewrite]: #672
 117.266 +#306 := (iff #678 #669)
 117.267 +#668 := (iff #679 false)
 117.268 +#664 := (iff #679 #327)
 117.269 +#325 := (iff #343 true)
 117.270 +#326 := [rewrite]: #325
 117.271 +#665 := [monotonicity #326]: #664
 117.272 +#663 := [trans #665 #667]: #668
 117.273 +#320 := (iff #336 #324)
 117.274 +#662 := [rewrite]: #320
 117.275 +#670 := [monotonicity #662 #663]: #306
 117.276 +#673 := [trans #670 #311]: #312
 117.277 +#383 := [monotonicity #673]: #368
 117.278 +#386 := [trans #383 #385]: #368
 117.279 +#661 := [quant-inst]: #660
 117.280 +#278 := [mp #661 #386]: #674
 117.281 +#453 := [unit-resolution #278 #701]: #324
 117.282 +#441 := (not #324)
 117.283 +#444 := (or #441 #552)
 117.284 +#446 := [th-lemma]: #444
 117.285 +#447 := [unit-resolution #446 #453]: #552
 117.286 +#443 := (not #552)
 117.287 +#448 := (or #443 #580)
 117.288 +#438 := [th-lemma]: #448
 117.289 +#428 := [unit-resolution #438 #447]: #580
 117.290 +#579 := (not #574)
 117.291 +#583 := (or #579 #572 #589)
 117.292 +#573 := [def-axiom]: #583
 117.293 +#430 := [unit-resolution #573 #428 #450]: #589
 117.294 +#434 := [symm #430]: #431
 117.295 +#435 := [monotonicity #434]: #476
 117.296 +#439 := (not #476)
 117.297 +#432 := (or #439 #480)
 117.298 +#440 := [th-lemma]: #432
 117.299 +#433 := [unit-resolution #440 #435]: #480
 117.300 +#481 := (>= #479 0::int)
 117.301 +#436 := (or #439 #481)
 117.302 +#437 := [th-lemma]: #436
 117.303 +#423 := [unit-resolution #437 #435]: #481
 117.304 +#553 := (>= #677 4::int)
 117.305 +#425 := (or #441 #553)
 117.306 +#426 := [th-lemma]: #425
 117.307 +#424 := [unit-resolution #426 #453]: #553
 117.308 +#648 := (* -1::int #372)
 117.309 +#652 := (+ #34 #648)
 117.310 +#631 := (<= #652 0::int)
 117.311 +#649 := (= #652 0::int)
 117.312 +#370 := (>= #34 0::int)
 117.313 +#409 := (not #481)
 117.314 +#427 := (not #553)
 117.315 +#411 := (or #370 #427 #409)
 117.316 +#412 := [th-lemma]: #411
 117.317 +#413 := [unit-resolution #412 #424 #423]: #370
 117.318 +#371 := (not #370)
 117.319 +#640 := (or #371 #649)
 117.320 +#488 := (or #671 #371 #649)
 117.321 +#650 := (= #34 #372)
 117.322 +#651 := (or #650 #371)
 117.323 +#489 := (or #671 #651)
 117.324 +#630 := (iff #489 #488)
 117.325 +#632 := (or #671 #640)
 117.326 +#635 := (iff #632 #488)
 117.327 +#629 := [rewrite]: #635
 117.328 +#633 := (iff #489 #632)
 117.329 +#641 := (iff #651 #640)
 117.330 +#643 := (or #649 #371)
 117.331 +#645 := (iff #643 #640)
 117.332 +#646 := [rewrite]: #645
 117.333 +#644 := (iff #651 #643)
 117.334 +#653 := (iff #650 #649)
 117.335 +#642 := [rewrite]: #653
 117.336 +#639 := [monotonicity #642]: #644
 117.337 +#647 := [trans #639 #646]: #641
 117.338 +#634 := [monotonicity #647]: #633
 117.339 +#636 := [trans #634 #629]: #630
 117.340 +#490 := [quant-inst]: #489
 117.341 +#637 := [mp #490 #636]: #488
 117.342 +#414 := [unit-resolution #637 #701]: #640
 117.343 +#415 := [unit-resolution #414 #413]: #649
 117.344 +#416 := (not #649)
 117.345 +#417 := (or #416 #631)
 117.346 +#418 := [th-lemma]: #417
 117.347 +#419 := [unit-resolution #418 #415]: #631
 117.348 +#638 := (>= #652 0::int)
 117.349 +#420 := (or #416 #638)
 117.350 +#421 := [th-lemma]: #420
 117.351 +#410 := [unit-resolution #421 #415]: #638
 117.352 +#399 := [th-lemma #410 #419 #424 #447 #423 #433]: #422
 117.353 +#402 := [monotonicity #399]: #401
 117.354 +#393 := [monotonicity #402]: #408
 117.355 +#564 := (= #36 #569)
 117.356 +#575 := (= #35 #36)
 117.357 +#570 := (>= #372 10::int)
 117.358 +#556 := (ite #570 #564 #575)
 117.359 +#554 := (or #681 #556)
 117.360 +#557 := [quant-inst]: #554
 117.361 +#403 := [unit-resolution #557 #714]: #556
 117.362 +#404 := (not #631)
 117.363 +#405 := (or #570 #404 #427 #409)
 117.364 +#406 := [th-lemma]: #405
 117.365 +#407 := [unit-resolution #406 #419 #424 #423]: #570
 117.366 +#559 := (not #570)
 117.367 +#558 := (not #556)
 117.368 +#560 := (or #558 #559 #564)
 117.369 +#555 := [def-axiom]: #560
 117.370 +#400 := [unit-resolution #555 #407 #403]: #564
 117.371 +#396 := [trans #400 #393]: #397
 117.372 +#398 := [trans #396 #395]: #39
 117.373 +#40 := (not #39)
 117.374 +#182 := [asserted]: #40
 117.375 +[unit-resolution #182 #398]: false
 117.376 +unsat
   118.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   118.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_08	Tue Oct 20 10:11:30 2009 +0200
   118.3 @@ -0,0 +1,24 @@
   118.4 +(benchmark Isabelle
   118.5 +:extrasorts ( T2 T1 T4 T3)
   118.6 +:extrafuns (
   118.7 +  (uf_3 Int T1)
   118.8 +  (uf_7 T2 T4 T4)
   118.9 +  (uf_1 T2 T1 T1)
  118.10 +  (uf_6 T3 T4 Int)
  118.11 +  (uf_4 T1 Int)
  118.12 +  (uf_5 T2)
  118.13 +  (uf_2 T2)
  118.14 +  (uf_10 Int)
  118.15 +  (uf_8 T3)
  118.16 +  (uf_9 T4)
  118.17 + )
  118.18 +:assumption (forall (?x1 T1) (= (uf_1 uf_2 ?x1) (uf_3 (div (uf_4 ?x1) 2))))
  118.19 +:assumption (forall (?x2 T1) (= (uf_1 uf_5 ?x2) (uf_3 (mod (uf_4 ?x2) 2))))
  118.20 +:assumption (forall (?x3 T1) (= (uf_3 (uf_4 ?x3)) ?x3))
  118.21 +:assumption (forall (?x4 Int) (implies (<= 0 ?x4) (= (uf_4 (uf_3 ?x4)) ?x4)))
  118.22 +:assumption (forall (?x5 Int) (implies (< ?x5 0) (= (uf_4 (uf_3 ?x5)) 0)))
  118.23 +:assumption (forall (?x6 T3) (?x7 T4) (= (mod (uf_6 ?x6 ?x7) 2) (mod (uf_6 ?x6 (uf_7 uf_5 ?x7)) 2)))
  118.24 +:assumption (forall (?x8 T3) (?x9 T4) (= (+ (* (uf_6 ?x8 (uf_7 uf_2 ?x9)) 2) (uf_6 ?x8 (uf_7 uf_5 ?x9))) (uf_6 ?x8 ?x9)))
  118.25 +:assumption (iff (= (uf_6 uf_8 uf_9) uf_10) (implies (= (mod (uf_6 uf_8 (uf_7 uf_5 uf_9)) 2) (mod uf_10 2)) (not (= (uf_6 uf_8 (uf_7 uf_2 uf_9)) (div (- uf_10 (uf_6 uf_8 (uf_7 uf_5 uf_9))) 2)))))
  118.26 +:formula true
  118.27 +)
   119.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   119.2 +++ b/src/HOL/SMT/Examples/cert/z3_hol_08.proof	Tue Oct 20 10:11:30 2009 +0200
   119.3 @@ -0,0 +1,410 @@
   119.4 +#2 := false
   119.5 +#22 := 0::int
   119.6 +decl uf_6 :: (-> T3 T4 int)
   119.7 +decl uf_7 :: (-> T2 T4 T4)
   119.8 +decl uf_9 :: T4
   119.9 +#50 := uf_9
  119.10 +decl uf_2 :: T2
  119.11 +#4 := uf_2
  119.12 +#59 := (uf_7 uf_2 uf_9)
  119.13 +decl uf_8 :: T3
  119.14 +#49 := uf_8
  119.15 +#60 := (uf_6 uf_8 #59)
  119.16 +#204 := -2::int
  119.17 +#683 := (* -2::int #60)
  119.18 +decl uf_5 :: T2
  119.19 +#13 := uf_5
  119.20 +#54 := (uf_7 uf_5 uf_9)
  119.21 +#55 := (uf_6 uf_8 #54)
  119.22 +#172 := -1::int
  119.23 +#218 := (* -1::int #55)
  119.24 +#685 := (+ #218 #683)
  119.25 +#51 := (uf_6 uf_8 uf_9)
  119.26 +#686 := (+ #51 #685)
  119.27 +#679 := (>= #686 0::int)
  119.28 +#687 := (= #686 0::int)
  119.29 +#35 := (:var 0 T4)
  119.30 +#43 := (uf_7 uf_2 #35)
  119.31 +#34 := (:var 1 T3)
  119.32 +#44 := (uf_6 #34 #43)
  119.33 +#819 := (pattern #44)
  119.34 +#38 := (uf_7 uf_5 #35)
  119.35 +#39 := (uf_6 #34 #38)
  119.36 +#812 := (pattern #39)
  119.37 +#205 := (* -2::int #44)
  119.38 +#203 := (* -1::int #39)
  119.39 +#206 := (+ #203 #205)
  119.40 +#36 := (uf_6 #34 #35)
  119.41 +#207 := (+ #36 #206)
  119.42 +#208 := (= #207 0::int)
  119.43 +#820 := (forall (vars (?x8 T3) (?x9 T4)) (:pat #812 #819) #208)
  119.44 +#211 := (forall (vars (?x8 T3) (?x9 T4)) #208)
  119.45 +#823 := (iff #211 #820)
  119.46 +#821 := (iff #208 #208)
  119.47 +#822 := [refl]: #821
  119.48 +#824 := [quant-intro #822]: #823
  119.49 +#279 := (~ #211 #211)
  119.50 +#305 := (~ #208 #208)
  119.51 +#306 := [refl]: #305
  119.52 +#280 := [nnf-pos #306]: #279
  119.53 +#8 := 2::int
  119.54 +#45 := (* #44 2::int)
  119.55 +#46 := (+ #45 #39)
  119.56 +#47 := (= #46 #36)
  119.57 +#48 := (forall (vars (?x8 T3) (?x9 T4)) #47)
  119.58 +#214 := (iff #48 #211)
  119.59 +#171 := (* 2::int #44)
  119.60 +#187 := (+ #39 #171)
  119.61 +#195 := (= #36 #187)
  119.62 +#200 := (forall (vars (?x8 T3) (?x9 T4)) #195)
  119.63 +#212 := (iff #200 #211)
  119.64 +#209 := (iff #195 #208)
  119.65 +#210 := [rewrite]: #209
  119.66 +#213 := [quant-intro #210]: #212
  119.67 +#201 := (iff #48 #200)
  119.68 +#198 := (iff #47 #195)
  119.69 +#192 := (= #187 #36)
  119.70 +#196 := (iff #192 #195)
  119.71 +#197 := [rewrite]: #196
  119.72 +#193 := (iff #47 #192)
  119.73 +#190 := (= #46 #187)
  119.74 +#184 := (+ #171 #39)
  119.75 +#188 := (= #184 #187)
  119.76 +#189 := [rewrite]: #188
  119.77 +#185 := (= #46 #184)
  119.78 +#182 := (= #45 #171)
  119.79 +#183 := [rewrite]: #182
  119.80 +#186 := [monotonicity #183]: #185
  119.81 +#191 := [trans #186 #189]: #190
  119.82 +#194 := [monotonicity #191]: #193
  119.83 +#199 := [trans #194 #197]: #198
  119.84 +#202 := [quant-intro #199]: #201
  119.85 +#215 := [trans #202 #213]: #214
  119.86 +#170 := [asserted]: #48
  119.87 +#216 := [mp #170 #215]: #211
  119.88 +#307 := [mp~ #216 #280]: #211
  119.89 +#825 := [mp #307 #824]: #820
  119.90 +#689 := (not #820)
  119.91 +#675 := (or #689 #687)
  119.92 +#676 := [quant-inst]: #675
  119.93 +#536 := [unit-resolution #676 #825]: #687
  119.94 +#537 := (not #687)
  119.95 +#533 := (or #537 #679)
  119.96 +#538 := [th-lemma]: #533
  119.97 +#528 := [unit-resolution #538 #536]: #679
  119.98 +decl uf_10 :: int
  119.99 +#52 := uf_10
 119.100 +#219 := (+ uf_10 #218)
 119.101 +#222 := (div #219 2::int)
 119.102 +#251 := (* -1::int #222)
 119.103 +#252 := (+ #60 #251)
 119.104 +#449 := (<= #252 0::int)
 119.105 +#399 := (not #449)
 119.106 +#253 := (= #252 0::int)
 119.107 +#256 := (not #253)
 119.108 +#57 := (mod uf_10 2::int)
 119.109 +#243 := (* -1::int #57)
 119.110 +#56 := (mod #55 2::int)
 119.111 +#244 := (+ #56 #243)
 119.112 +#245 := (= #244 0::int)
 119.113 +#448 := (>= #244 0::int)
 119.114 +#688 := (mod #51 2::int)
 119.115 +#666 := (* -1::int #688)
 119.116 +#667 := (+ #56 #666)
 119.117 +#660 := (>= #667 0::int)
 119.118 +#668 := (= #667 0::int)
 119.119 +#40 := (mod #39 2::int)
 119.120 +#173 := (* -1::int #40)
 119.121 +#37 := (mod #36 2::int)
 119.122 +#174 := (+ #37 #173)
 119.123 +#175 := (= #174 0::int)
 119.124 +#813 := (forall (vars (?x6 T3) (?x7 T4)) (:pat #812) #175)
 119.125 +#178 := (forall (vars (?x6 T3) (?x7 T4)) #175)
 119.126 +#816 := (iff #178 #813)
 119.127 +#814 := (iff #175 #175)
 119.128 +#815 := [refl]: #814
 119.129 +#817 := [quant-intro #815]: #816
 119.130 +#277 := (~ #178 #178)
 119.131 +#302 := (~ #175 #175)
 119.132 +#303 := [refl]: #302
 119.133 +#278 := [nnf-pos #303]: #277
 119.134 +#41 := (= #37 #40)
 119.135 +#42 := (forall (vars (?x6 T3) (?x7 T4)) #41)
 119.136 +#179 := (iff #42 #178)
 119.137 +#176 := (iff #41 #175)
 119.138 +#177 := [rewrite]: #176
 119.139 +#180 := [quant-intro #177]: #179
 119.140 +#169 := [asserted]: #42
 119.141 +#181 := [mp #169 #180]: #178
 119.142 +#304 := [mp~ #181 #278]: #178
 119.143 +#818 := [mp #304 #817]: #813
 119.144 +#673 := (not #813)
 119.145 +#663 := (or #673 #668)
 119.146 +#756 := (* -1::int #56)
 119.147 +#684 := (+ #688 #756)
 119.148 +#680 := (= #684 0::int)
 119.149 +#674 := (or #673 #680)
 119.150 +#653 := (iff #674 #663)
 119.151 +#656 := (iff #663 #663)
 119.152 +#657 := [rewrite]: #656
 119.153 +#671 := (iff #680 #668)
 119.154 +#677 := (+ #756 #688)
 119.155 +#662 := (= #677 0::int)
 119.156 +#669 := (iff #662 #668)
 119.157 +#670 := [rewrite]: #669
 119.158 +#664 := (iff #680 #662)
 119.159 +#681 := (= #684 #677)
 119.160 +#661 := [rewrite]: #681
 119.161 +#665 := [monotonicity #661]: #664
 119.162 +#672 := [trans #665 #670]: #671
 119.163 +#655 := [monotonicity #672]: #653
 119.164 +#658 := [trans #655 #657]: #653
 119.165 +#652 := [quant-inst]: #674
 119.166 +#659 := [mp #652 #658]: #663
 119.167 +#394 := [unit-resolution #659 #818]: #668
 119.168 +#552 := (not #668)
 119.169 +#514 := (or #552 #660)
 119.170 +#517 := [th-lemma]: #514
 119.171 +#499 := [unit-resolution #517 #394]: #660
 119.172 +#503 := (not #448)
 119.173 +#414 := [hypothesis]: #503
 119.174 +#561 := (+ #57 #666)
 119.175 +#709 := (<= #561 0::int)
 119.176 +#602 := (= #57 #688)
 119.177 +#468 := (= #688 #57)
 119.178 +#53 := (= #51 uf_10)
 119.179 +#248 := (not #245)
 119.180 +#259 := (or #248 #256)
 119.181 +#362 := (mod #219 2::int)
 119.182 +#699 := (>= #362 0::int)
 119.183 +#1 := true
 119.184 +#81 := [true-axiom]: true
 119.185 +#604 := (or false #699)
 119.186 +#506 := [th-lemma]: #604
 119.187 +#507 := [unit-resolution #506 #81]: #699
 119.188 +#628 := (* -1::int uf_10)
 119.189 +#623 := (+ #51 #628)
 119.190 +#629 := (<= #623 0::int)
 119.191 +#498 := (not #629)
 119.192 +#597 := (>= #623 0::int)
 119.193 +#381 := (not #259)
 119.194 +#508 := [hypothesis]: #381
 119.195 +#450 := (or #259 #245)
 119.196 +#441 := [def-axiom]: #450
 119.197 +#509 := [unit-resolution #441 #508]: #245
 119.198 +#510 := (or #248 #448)
 119.199 +#511 := [th-lemma]: #510
 119.200 +#500 := [unit-resolution #511 #509]: #448
 119.201 +#743 := (div uf_10 2::int)
 119.202 +#723 := (* -2::int #743)
 119.203 +#545 := (* -2::int #688)
 119.204 +#546 := (+ #545 #723)
 119.205 +#646 := (div #51 2::int)
 119.206 +#645 := (* -2::int #646)
 119.207 +#547 := (+ #645 #546)
 119.208 +#605 := (* -2::int #57)
 119.209 +#549 := (+ #605 #547)
 119.210 +#594 := (* 2::int #56)
 119.211 +#550 := (+ #594 #549)
 119.212 +#598 := (* 2::int uf_10)
 119.213 +#551 := (+ #598 #550)
 119.214 +#563 := (>= #551 2::int)
 119.215 +#520 := (not #563)
 119.216 +#361 := (<= #244 0::int)
 119.217 +#512 := (or #248 #361)
 119.218 +#489 := [th-lemma]: #512
 119.219 +#491 := [unit-resolution #489 #509]: #361
 119.220 +#363 := (>= #252 0::int)
 119.221 +#452 := (or #259 #253)
 119.222 +#453 := [def-axiom]: #452
 119.223 +#492 := [unit-resolution #453 #508]: #253
 119.224 +#493 := (or #256 #363)
 119.225 +#494 := [th-lemma]: #493
 119.226 +#495 := [unit-resolution #494 #492]: #363
 119.227 +#556 := (not #361)
 119.228 +#573 := (not #363)
 119.229 +#521 := (or #520 #573 #556)
 119.230 +#703 := (>= #362 2::int)
 119.231 +#704 := (not #703)
 119.232 +#599 := (or false #704)
 119.233 +#620 := [th-lemma]: #599
 119.234 +#575 := [unit-resolution #620 #81]: #704
 119.235 +#654 := (<= #667 0::int)
 119.236 +#548 := (or #552 #654)
 119.237 +#553 := [th-lemma]: #548
 119.238 +#532 := [unit-resolution #553 #394]: #654
 119.239 +#651 := (+ #645 #666)
 119.240 +#624 := (+ #51 #651)
 119.241 +#626 := (<= #624 0::int)
 119.242 +#650 := (= #624 0::int)
 119.243 +#535 := (or false #650)
 119.244 +#539 := [th-lemma]: #535
 119.245 +#541 := [unit-resolution #539 #81]: #650
 119.246 +#542 := (not #650)
 119.247 +#540 := (or #542 #626)
 119.248 +#543 := [th-lemma]: #540
 119.249 +#531 := [unit-resolution #543 #541]: #626
 119.250 +#587 := [hypothesis]: #361
 119.251 +#724 := (+ #243 #723)
 119.252 +#725 := (+ uf_10 #724)
 119.253 +#727 := (<= #725 0::int)
 119.254 +#722 := (= #725 0::int)
 119.255 +#576 := (or false #722)
 119.256 +#581 := [th-lemma]: #576
 119.257 +#582 := [unit-resolution #581 #81]: #722
 119.258 +#583 := (not #722)
 119.259 +#584 := (or #583 #727)
 119.260 +#585 := [th-lemma]: #584
 119.261 +#586 := [unit-resolution #585 #582]: #727
 119.262 +#534 := [hypothesis]: #563
 119.263 +#555 := [hypothesis]: #363
 119.264 +#616 := (* -1::int #362)
 119.265 +#615 := (* -2::int #222)
 119.266 +#617 := (+ #615 #616)
 119.267 +#618 := (+ #218 #617)
 119.268 +#711 := (+ uf_10 #618)
 119.269 +#708 := (<= #711 0::int)
 119.270 +#606 := (= #711 0::int)
 119.271 +#562 := (or false #606)
 119.272 +#564 := [th-lemma]: #562
 119.273 +#565 := [unit-resolution #564 #81]: #606
 119.274 +#566 := (not #606)
 119.275 +#568 := (or #566 #708)
 119.276 +#569 := [th-lemma]: #568
 119.277 +#570 := [unit-resolution #569 #565]: #708
 119.278 +#518 := [th-lemma #570 #555 #528 #534 #586 #587 #531 #532 #575]: false
 119.279 +#524 := [lemma #518]: #521
 119.280 +#496 := [unit-resolution #524 #495 #491]: #520
 119.281 +#504 := (or #597 #563 #503)
 119.282 +#529 := (not #597)
 119.283 +#522 := [hypothesis]: #529
 119.284 +#519 := (>= #624 0::int)
 119.285 +#530 := (or #542 #519)
 119.286 +#523 := [th-lemma]: #530
 119.287 +#526 := [unit-resolution #523 #541]: #519
 119.288 +#527 := [hypothesis]: #448
 119.289 +#721 := (>= #725 0::int)
 119.290 +#513 := (or #583 #721)
 119.291 +#515 := [th-lemma]: #513
 119.292 +#516 := [unit-resolution #515 #582]: #721
 119.293 +#501 := [th-lemma #499 #516 #527 #526 #522]: #563
 119.294 +#525 := [hypothesis]: #520
 119.295 +#502 := [unit-resolution #525 #501]: false
 119.296 +#505 := [lemma #502]: #504
 119.297 +#497 := [unit-resolution #505 #496 #500]: #597
 119.298 +#485 := (or #498 #529)
 119.299 +#558 := (not #53)
 119.300 +#440 := (or #558 #259)
 119.301 +#262 := (iff #53 #259)
 119.302 +#61 := (- uf_10 #55)
 119.303 +#62 := (div #61 2::int)
 119.304 +#63 := (= #60 #62)
 119.305 +#64 := (not #63)
 119.306 +#58 := (= #56 #57)
 119.307 +#65 := (implies #58 #64)
 119.308 +#66 := (iff #53 #65)
 119.309 +#265 := (iff #66 #262)
 119.310 +#225 := (= #60 #222)
 119.311 +#228 := (not #225)
 119.312 +#234 := (not #58)
 119.313 +#235 := (or #234 #228)
 119.314 +#240 := (iff #53 #235)
 119.315 +#263 := (iff #240 #262)
 119.316 +#260 := (iff #235 #259)
 119.317 +#257 := (iff #228 #256)
 119.318 +#254 := (iff #225 #253)
 119.319 +#255 := [rewrite]: #254
 119.320 +#258 := [monotonicity #255]: #257
 119.321 +#249 := (iff #234 #248)
 119.322 +#246 := (iff #58 #245)
 119.323 +#247 := [rewrite]: #246
 119.324 +#250 := [monotonicity #247]: #249
 119.325 +#261 := [monotonicity #250 #258]: #260
 119.326 +#264 := [monotonicity #261]: #263
 119.327 +#241 := (iff #66 #240)
 119.328 +#238 := (iff #65 #235)
 119.329 +#231 := (implies #58 #228)
 119.330 +#236 := (iff #231 #235)
 119.331 +#237 := [rewrite]: #236
 119.332 +#232 := (iff #65 #231)
 119.333 +#229 := (iff #64 #228)
 119.334 +#226 := (iff #63 #225)
 119.335 +#223 := (= #62 #222)
 119.336 +#220 := (= #61 #219)
 119.337 +#221 := [rewrite]: #220
 119.338 +#224 := [monotonicity #221]: #223
 119.339 +#227 := [monotonicity #224]: #226
 119.340 +#230 := [monotonicity #227]: #229
 119.341 +#233 := [monotonicity #230]: #232
 119.342 +#239 := [trans #233 #237]: #238
 119.343 +#242 := [monotonicity #239]: #241
 119.344 +#266 := [trans #242 #264]: #265
 119.345 +#217 := [asserted]: #66
 119.346 +#267 := [mp #217 #266]: #262
 119.347 +#455 := (not #262)
 119.348 +#765 := (or #558 #259 #455)
 119.349 +#439 := [def-axiom]: #765
 119.350 +#772 := [unit-resolution #439 #267]: #440
 119.351 +#490 := [unit-resolution #772 #508]: #558
 119.352 +#483 := (or #53 #498 #529)
 119.353 +#484 := [th-lemma]: #483
 119.354 +#487 := [unit-resolution #484 #490]: #485
 119.355 +#486 := [unit-resolution #487 #497]: #498
 119.356 +#678 := (<= #686 0::int)
 119.357 +#488 := (or #537 #678)
 119.358 +#477 := [th-lemma]: #488
 119.359 +#478 := [unit-resolution #477 #536]: #678
 119.360 +#479 := (or #256 #449)
 119.361 +#471 := [th-lemma]: #479
 119.362 +#480 := [unit-resolution #471 #492]: #449
 119.363 +#712 := (>= #711 0::int)
 119.364 +#481 := (or #566 #712)
 119.365 +#472 := [th-lemma]: #481
 119.366 +#482 := [unit-resolution #472 #565]: #712
 119.367 +#463 := [th-lemma #482 #480 #478 #486 #507]: false
 119.368 +#464 := [lemma #463]: #259
 119.369 +#771 := (or #53 #381)
 119.370 +#434 := (or #53 #381 #455)
 119.371 +#769 := [def-axiom]: #434
 119.372 +#428 := [unit-resolution #769 #267]: #771
 119.373 +#442 := [unit-resolution #428 #464]: #53
 119.374 +#435 := [monotonicity #442]: #468
 119.375 +#437 := [symm #435]: #602
 119.376 +#438 := (not #602)
 119.377 +#419 := (or #438 #709)
 119.378 +#420 := [th-lemma]: #419
 119.379 +#421 := [unit-resolution #420 #437]: #709
 119.380 +#422 := [th-lemma #421 #414 #499]: false
 119.381 +#423 := [lemma #422]: #448
 119.382 +#410 := (or #245 #503)
 119.383 +#611 := (>= #561 0::int)
 119.384 +#682 := (or #438 #611)
 119.385 +#447 := [th-lemma]: #682
 119.386 +#430 := [unit-resolution #447 #437]: #611
 119.387 +#432 := [hypothesis]: #556
 119.388 +#433 := [th-lemma #532 #432 #430]: false
 119.389 +#412 := [lemma #433]: #361
 119.390 +#409 := (or #245 #556 #503)
 119.391 +#407 := [th-lemma]: #409
 119.392 +#398 := [unit-resolution #407 #412]: #410
 119.393 +#400 := [unit-resolution #398 #423]: #245
 119.394 +#454 := (or #381 #248 #256)
 119.395 +#451 := [def-axiom]: #454
 119.396 +#401 := [unit-resolution #451 #464]: #259
 119.397 +#404 := [unit-resolution #401 #400]: #256
 119.398 +#384 := (or #253 #399)
 119.399 +#429 := [hypothesis]: #573
 119.400 +#443 := (or #558 #597)
 119.401 +#444 := [th-lemma]: #443
 119.402 +#445 := [unit-resolution #444 #442]: #597
 119.403 +#446 := [th-lemma #445 #507 #482 #429 #478]: false
 119.404 +#436 := [lemma #446]: #363
 119.405 +#405 := (or #253 #399 #573)
 119.406 +#379 := [th-lemma]: #405
 119.407 +#385 := [unit-resolution #379 #436]: #384
 119.408 +#390 := [unit-resolution #385 #404]: #399
 119.409 +#392 := (or #558 #629)
 119.410 +#393 := [th-lemma]: #392
 119.411 +#395 := [unit-resolution #393 #442]: #629
 119.412 +[th-lemma #395 #575 #570 #390 #528]: false
 119.413 +unsat
   120.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   120.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_01	Tue Oct 20 10:11:30 2009 +0200
   120.3 @@ -0,0 +1,4 @@
   120.4 +(benchmark Isabelle
   120.5 +:assumption (not (= 3 3))
   120.6 +:formula true
   120.7 +)
   121.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   121.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_01.proof	Tue Oct 20 10:11:30 2009 +0200
   121.3 @@ -0,0 +1,17 @@
   121.4 +#2 := false
   121.5 +#4 := 3::int
   121.6 +#5 := (= 3::int 3::int)
   121.7 +#6 := (not #5)
   121.8 +#30 := (iff #6 false)
   121.9 +#1 := true
  121.10 +#25 := (not true)
  121.11 +#28 := (iff #25 false)
  121.12 +#29 := [rewrite]: #28
  121.13 +#26 := (iff #6 #25)
  121.14 +#23 := (iff #5 true)
  121.15 +#24 := [rewrite]: #23
  121.16 +#27 := [monotonicity #24]: #26
  121.17 +#31 := [trans #27 #29]: #30
  121.18 +#22 := [asserted]: #6
  121.19 +[mp #22 #31]: false
  121.20 +unsat
   122.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   122.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_02	Tue Oct 20 10:11:30 2009 +0200
   122.3 @@ -0,0 +1,4 @@
   122.4 +(benchmark Isabelle
   122.5 +:assumption (not (= 3.0 3.0))
   122.6 +:formula true
   122.7 +)
   123.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   123.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_02.proof	Tue Oct 20 10:11:30 2009 +0200
   123.3 @@ -0,0 +1,17 @@
   123.4 +#2 := false
   123.5 +#4 := 3::real
   123.6 +#5 := (= 3::real 3::real)
   123.7 +#6 := (not #5)
   123.8 +#30 := (iff #6 false)
   123.9 +#1 := true
  123.10 +#25 := (not true)
  123.11 +#28 := (iff #25 false)
  123.12 +#29 := [rewrite]: #28
  123.13 +#26 := (iff #6 #25)
  123.14 +#23 := (iff #5 true)
  123.15 +#24 := [rewrite]: #23
  123.16 +#27 := [monotonicity #24]: #26
  123.17 +#31 := [trans #27 #29]: #30
  123.18 +#22 := [asserted]: #6
  123.19 +[mp #22 #31]: false
  123.20 +unsat
   124.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   124.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_03	Tue Oct 20 10:11:30 2009 +0200
   124.3 @@ -0,0 +1,4 @@
   124.4 +(benchmark Isabelle
   124.5 +:assumption (not (= (+ 3 1) 4))
   124.6 +:formula true
   124.7 +)
   125.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   125.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_03.proof	Tue Oct 20 10:11:30 2009 +0200
   125.3 @@ -0,0 +1,26 @@
   125.4 +#2 := false
   125.5 +#7 := 4::int
   125.6 +#5 := 1::int
   125.7 +#4 := 3::int
   125.8 +#6 := (+ 3::int 1::int)
   125.9 +#8 := (= #6 4::int)
  125.10 +#9 := (not #8)
  125.11 +#39 := (iff #9 false)
  125.12 +#1 := true
  125.13 +#34 := (not true)
  125.14 +#37 := (iff #34 false)
  125.15 +#38 := [rewrite]: #37
  125.16 +#35 := (iff #9 #34)
  125.17 +#32 := (iff #8 true)
  125.18 +#27 := (= 4::int 4::int)
  125.19 +#30 := (iff #27 true)
  125.20 +#31 := [rewrite]: #30
  125.21 +#28 := (iff #8 #27)
  125.22 +#26 := [rewrite]: #8
  125.23 +#29 := [monotonicity #26]: #28
  125.24 +#33 := [trans #29 #31]: #32
  125.25 +#36 := [monotonicity #33]: #35
  125.26 +#40 := [trans #36 #38]: #39
  125.27 +#25 := [asserted]: #9
  125.28 +[mp #25 #40]: false
  125.29 +unsat
   126.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_04	Tue Oct 20 10:11:30 2009 +0200
   126.3 @@ -0,0 +1,9 @@
   126.4 +(benchmark Isabelle
   126.5 +:extrafuns (
   126.6 +  (uf_1 Int)
   126.7 +  (uf_2 Int)
   126.8 +  (uf_3 Int)
   126.9 + )
  126.10 +:assumption (not (= (+ uf_1 (+ uf_2 uf_3)) (+ uf_2 (+ uf_3 uf_1))))
  126.11 +:formula true
  126.12 +)
   127.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   127.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_04.proof	Tue Oct 20 10:11:30 2009 +0200
   127.3 @@ -0,0 +1,41 @@
   127.4 +#2 := false
   127.5 +decl uf_1 :: int
   127.6 +#4 := uf_1
   127.7 +decl uf_3 :: int
   127.8 +#6 := uf_3
   127.9 +#9 := (+ uf_3 uf_1)
  127.10 +decl uf_2 :: int
  127.11 +#5 := uf_2
  127.12 +#10 := (+ uf_2 #9)
  127.13 +#7 := (+ uf_2 uf_3)
  127.14 +#8 := (+ uf_1 #7)
  127.15 +#11 := (= #8 #10)
  127.16 +#12 := (not #11)
  127.17 +#51 := (iff #12 false)
  127.18 +#1 := true
  127.19 +#46 := (not true)
  127.20 +#49 := (iff #46 false)
  127.21 +#50 := [rewrite]: #49
  127.22 +#47 := (iff #12 #46)
  127.23 +#44 := (iff #11 true)
  127.24 +#39 := (= #8 #8)
  127.25 +#42 := (iff #39 true)
  127.26 +#43 := [rewrite]: #42
  127.27 +#40 := (iff #11 #39)
  127.28 +#37 := (= #10 #8)
  127.29 +#29 := (+ uf_1 uf_3)
  127.30 +#32 := (+ uf_2 #29)
  127.31 +#35 := (= #32 #8)
  127.32 +#36 := [rewrite]: #35
  127.33 +#33 := (= #10 #32)
  127.34 +#30 := (= #9 #29)
  127.35 +#31 := [rewrite]: #30
  127.36 +#34 := [monotonicity #31]: #33
  127.37 +#38 := [trans #34 #36]: #37
  127.38 +#41 := [monotonicity #38]: #40
  127.39 +#45 := [trans #41 #43]: #44
  127.40 +#48 := [monotonicity #45]: #47
  127.41 +#52 := [trans #48 #50]: #51
  127.42 +#28 := [asserted]: #12
  127.43 +[mp #28 #52]: false
  127.44 +unsat
   128.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   128.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_05	Tue Oct 20 10:11:30 2009 +0200
   128.3 @@ -0,0 +1,4 @@
   128.4 +(benchmark Isabelle
   128.5 +:assumption (not (< 5 (ite (<= 3 8) 8 3)))
   128.6 +:formula true
   128.7 +)
   129.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   129.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_05.proof	Tue Oct 20 10:11:30 2009 +0200
   129.3 @@ -0,0 +1,35 @@
   129.4 +#2 := false
   129.5 +#5 := 3::int
   129.6 +#6 := 8::int
   129.7 +#7 := (<= 3::int 8::int)
   129.8 +#8 := (ite #7 8::int 3::int)
   129.9 +#4 := 5::int
  129.10 +#9 := (< 5::int #8)
  129.11 +#10 := (not #9)
  129.12 +#50 := (iff #10 false)
  129.13 +#1 := true
  129.14 +#45 := (not true)
  129.15 +#48 := (iff #45 false)
  129.16 +#49 := [rewrite]: #48
  129.17 +#46 := (iff #10 #45)
  129.18 +#43 := (iff #9 true)
  129.19 +#38 := (< 5::int 8::int)
  129.20 +#41 := (iff #38 true)
  129.21 +#42 := [rewrite]: #41
  129.22 +#39 := (iff #9 #38)
  129.23 +#36 := (= #8 8::int)
  129.24 +#31 := (ite true 8::int 3::int)
  129.25 +#34 := (= #31 8::int)
  129.26 +#35 := [rewrite]: #34
  129.27 +#32 := (= #8 #31)
  129.28 +#29 := (iff #7 true)
  129.29 +#30 := [rewrite]: #29
  129.30 +#33 := [monotonicity #30]: #32
  129.31 +#37 := [trans #33 #35]: #36
  129.32 +#40 := [monotonicity #37]: #39
  129.33 +#44 := [trans #40 #42]: #43
  129.34 +#47 := [monotonicity #44]: #46
  129.35 +#51 := [trans #47 #49]: #50
  129.36 +#26 := [asserted]: #10
  129.37 +[mp #26 #51]: false
  129.38 +unsat
   130.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   130.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_06	Tue Oct 20 10:11:30 2009 +0200
   130.3 @@ -0,0 +1,8 @@
   130.4 +(benchmark Isabelle
   130.5 +:extrafuns (
   130.6 +  (uf_1 Real)
   130.7 +  (uf_2 Real)
   130.8 + )
   130.9 +:assumption (not (<= (ite (< (+ uf_1 uf_2) 0.0) (~ (+ uf_1 uf_2)) (+ uf_1 uf_2)) (+ (ite (< uf_1 0.0) (~ uf_1) uf_1) (ite (< uf_2 0.0) (~ uf_2) uf_2))))
  130.10 +:formula true
  130.11 +)
   131.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   131.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_06.proof	Tue Oct 20 10:11:30 2009 +0200
   131.3 @@ -0,0 +1,250 @@
   131.4 +#2 := false
   131.5 +#7 := 0::real
   131.6 +decl uf_2 :: real
   131.7 +#5 := uf_2
   131.8 +#143 := 2::real
   131.9 +#144 := (* 2::real uf_2)
  131.10 +#165 := (<= #144 0::real)
  131.11 +#188 := (not #165)
  131.12 +#88 := (>= uf_2 0::real)
  131.13 +#166 := (or #88 #165)
  131.14 +#191 := (not #166)
  131.15 +decl uf_1 :: real
  131.16 +#4 := uf_1
  131.17 +#76 := (>= uf_1 0::real)
  131.18 +#89 := (not #88)
  131.19 +#146 := (* 2::real uf_1)
  131.20 +#167 := (<= #146 0::real)
  131.21 +#199 := (not #167)
  131.22 +#263 := [hypothesis]: #88
  131.23 +#147 := (+ #146 #144)
  131.24 +#168 := (<= #147 0::real)
  131.25 +#169 := (ite #88 #167 #168)
  131.26 +#194 := (not #169)
  131.27 +#186 := (or #166 #89)
  131.28 +#187 := [def-axiom]: #186
  131.29 +#271 := [unit-resolution #187 #263]: #166
  131.30 +#170 := (ite #76 #166 #169)
  131.31 +#205 := (not #170)
  131.32 +#6 := (+ uf_1 uf_2)
  131.33 +#64 := (>= #6 0::real)
  131.34 +#269 := (or #64 #89)
  131.35 +#65 := (not #64)
  131.36 +#262 := [hypothesis]: #65
  131.37 +#174 := (>= #144 0::real)
  131.38 +#175 := (or #89 #174)
  131.39 +#230 := (not #175)
  131.40 +#257 := [hypothesis]: #230
  131.41 +#225 := (or #175 #88)
  131.42 +#226 := [def-axiom]: #225
  131.43 +#258 := [unit-resolution #226 #257]: #88
  131.44 +#227 := (not #174)
  131.45 +#228 := (or #175 #227)
  131.46 +#229 := [def-axiom]: #228
  131.47 +#259 := [unit-resolution #229 #257]: #227
  131.48 +#260 := [th-lemma #259 #258]: false
  131.49 +#261 := [lemma #260]: #175
  131.50 +#172 := (>= #146 0::real)
  131.51 +#171 := (>= #147 0::real)
  131.52 +#173 := (ite #88 #171 #172)
  131.53 +#176 := (ite #76 #173 #175)
  131.54 +#233 := (not #176)
  131.55 +#264 := (or #64 #233)
  131.56 +#177 := (ite #64 #170 #176)
  131.57 +#182 := (not #177)
  131.58 +#36 := -1::real
  131.59 +#38 := (* -1::real uf_2)
  131.60 +#95 := (ite #88 uf_2 #38)
  131.61 +#107 := (* -1::real #95)
  131.62 +#37 := (* -1::real uf_1)
  131.63 +#83 := (ite #76 uf_1 #37)
  131.64 +#106 := (* -1::real #83)
  131.65 +#108 := (+ #106 #107)
  131.66 +#39 := (+ #37 #38)
  131.67 +#71 := (ite #64 #6 #39)
  131.68 +#109 := (+ #71 #108)
  131.69 +#110 := (<= #109 0::real)
  131.70 +#115 := (not #110)
  131.71 +#183 := (iff #115 #182)
  131.72 +#180 := (iff #110 #177)
  131.73 +#150 := -2::real
  131.74 +#152 := (* -2::real uf_2)
  131.75 +#155 := (ite #88 #152 0::real)
  131.76 +#151 := (* -2::real uf_1)
  131.77 +#153 := (+ #151 #152)
  131.78 +#154 := (ite #88 #153 #151)
  131.79 +#156 := (ite #76 #154 #155)
  131.80 +#148 := (ite #88 #146 #147)
  131.81 +#145 := (ite #88 0::real #144)
  131.82 +#149 := (ite #76 #145 #148)
  131.83 +#157 := (ite #64 #149 #156)
  131.84 +#162 := (<= #157 0::real)
  131.85 +#178 := (iff #162 #177)
  131.86 +#179 := [rewrite]: #178
  131.87 +#163 := (iff #110 #162)
  131.88 +#160 := (= #109 #157)
  131.89 +#133 := (+ uf_1 #38)
  131.90 +#134 := (ite #88 #133 #6)
  131.91 +#131 := (+ #37 uf_2)
  131.92 +#132 := (ite #88 #39 #131)
  131.93 +#135 := (ite #76 #132 #134)
  131.94 +#140 := (+ #71 #135)
  131.95 +#158 := (= #140 #157)
  131.96 +#159 := [rewrite]: #158
  131.97 +#141 := (= #109 #140)
  131.98 +#138 := (= #108 #135)
  131.99 +#125 := (ite #88 #38 uf_2)
 131.100 +#123 := (ite #76 #37 uf_1)
 131.101 +#128 := (+ #123 #125)
 131.102 +#136 := (= #128 #135)
 131.103 +#137 := [rewrite]: #136
 131.104 +#129 := (= #108 #128)
 131.105 +#126 := (= #107 #125)
 131.106 +#127 := [rewrite]: #126
 131.107 +#121 := (= #106 #123)
 131.108 +#124 := [rewrite]: #121
 131.109 +#130 := [monotonicity #124 #127]: #129
 131.110 +#139 := [trans #130 #137]: #138
 131.111 +#142 := [monotonicity #139]: #141
 131.112 +#161 := [trans #142 #159]: #160
 131.113 +#164 := [monotonicity #161]: #163
 131.114 +#181 := [trans #164 #179]: #180
 131.115 +#184 := [monotonicity #181]: #183
 131.116 +#15 := (- uf_2)
 131.117 +#14 := (< uf_2 0::real)
 131.118 +#16 := (ite #14 #15 uf_2)
 131.119 +#12 := (- uf_1)
 131.120 +#11 := (< uf_1 0::real)
 131.121 +#13 := (ite #11 #12 uf_1)
 131.122 +#17 := (+ #13 #16)
 131.123 +#9 := (- #6)
 131.124 +#8 := (< #6 0::real)
 131.125 +#10 := (ite #8 #9 #6)
 131.126 +#18 := (<= #10 #17)
 131.127 +#19 := (not #18)
 131.128 +#118 := (iff #19 #115)
 131.129 +#52 := (ite #14 #38 uf_2)
 131.130 +#47 := (ite #11 #37 uf_1)
 131.131 +#55 := (+ #47 #52)
 131.132 +#42 := (ite #8 #39 #6)
 131.133 +#58 := (<= #42 #55)
 131.134 +#61 := (not #58)
 131.135 +#116 := (iff #61 #115)
 131.136 +#113 := (iff #58 #110)
 131.137 +#100 := (+ #83 #95)
 131.138 +#103 := (<= #71 #100)
 131.139 +#111 := (iff #103 #110)
 131.140 +#112 := [rewrite]: #111
 131.141 +#104 := (iff #58 #103)
 131.142 +#101 := (= #55 #100)
 131.143 +#98 := (= #52 #95)
 131.144 +#92 := (ite #89 #38 uf_2)
 131.145 +#96 := (= #92 #95)
 131.146 +#97 := [rewrite]: #96
 131.147 +#93 := (= #52 #92)
 131.148 +#90 := (iff #14 #89)
 131.149 +#91 := [rewrite]: #90
 131.150 +#94 := [monotonicity #91]: #93
 131.151 +#99 := [trans #94 #97]: #98
 131.152 +#86 := (= #47 #83)
 131.153 +#77 := (not #76)
 131.154 +#80 := (ite #77 #37 uf_1)
 131.155 +#84 := (= #80 #83)
 131.156 +#85 := [rewrite]: #84
 131.157 +#81 := (= #47 #80)
 131.158 +#78 := (iff #11 #77)
 131.159 +#79 := [rewrite]: #78
 131.160 +#82 := [monotonicity #79]: #81
 131.161 +#87 := [trans #82 #85]: #86
 131.162 +#102 := [monotonicity #87 #99]: #101
 131.163 +#74 := (= #42 #71)
 131.164 +#68 := (ite #65 #39 #6)
 131.165 +#72 := (= #68 #71)
 131.166 +#73 := [rewrite]: #72
 131.167 +#69 := (= #42 #68)
 131.168 +#66 := (iff #8 #65)
 131.169 +#67 := [rewrite]: #66
 131.170 +#70 := [monotonicity #67]: #69
 131.171 +#75 := [trans #70 #73]: #74
 131.172 +#105 := [monotonicity #75 #102]: #104
 131.173 +#114 := [trans #105 #112]: #113
 131.174 +#117 := [monotonicity #114]: #116
 131.175 +#62 := (iff #19 #61)
 131.176 +#59 := (iff #18 #58)
 131.177 +#56 := (= #17 #55)
 131.178 +#53 := (= #16 #52)
 131.179 +#50 := (= #15 #38)
 131.180 +#51 := [rewrite]: #50
 131.181 +#54 := [monotonicity #51]: #53
 131.182 +#48 := (= #13 #47)
 131.183 +#45 := (= #12 #37)
 131.184 +#46 := [rewrite]: #45
 131.185 +#49 := [monotonicity #46]: #48
 131.186 +#57 := [monotonicity #49 #54]: #56
 131.187 +#43 := (= #10 #42)
 131.188 +#40 := (= #9 #39)
 131.189 +#41 := [rewrite]: #40
 131.190 +#44 := [monotonicity #41]: #43
 131.191 +#60 := [monotonicity #44 #57]: #59
 131.192 +#63 := [monotonicity #60]: #62
 131.193 +#119 := [trans #63 #117]: #118
 131.194 +#35 := [asserted]: #19
 131.195 +#120 := [mp #35 #119]: #115
 131.196 +#185 := [mp #120 #184]: #182
 131.197 +#248 := (or #177 #64 #233)
 131.198 +#249 := [def-axiom]: #248
 131.199 +#265 := [unit-resolution #249 #185]: #264
 131.200 +#266 := [unit-resolution #265 #262]: #233
 131.201 +#240 := (or #176 #76 #230)
 131.202 +#241 := [def-axiom]: #240
 131.203 +#267 := [unit-resolution #241 #266 #261]: #76
 131.204 +#268 := [th-lemma #267 #263 #262]: false
 131.205 +#270 := [lemma #268]: #269
 131.206 +#272 := [unit-resolution #270 #263]: #64
 131.207 +#273 := (or #65 #205)
 131.208 +#246 := (or #177 #65 #205)
 131.209 +#247 := [def-axiom]: #246
 131.210 +#274 := [unit-resolution #247 #185]: #273
 131.211 +#275 := [unit-resolution #274 #272]: #205
 131.212 +#255 := (or #170 #194 #191)
 131.213 +#250 := [hypothesis]: #169
 131.214 +#251 := [hypothesis]: #205
 131.215 +#252 := [hypothesis]: #166
 131.216 +#210 := (or #170 #77 #191)
 131.217 +#211 := [def-axiom]: #210
 131.218 +#253 := [unit-resolution #211 #251 #252]: #77
 131.219 +#212 := (or #170 #76 #194)
 131.220 +#213 := [def-axiom]: #212
 131.221 +#254 := [unit-resolution #213 #253 #251 #250]: false
 131.222 +#256 := [lemma #254]: #255
 131.223 +#276 := [unit-resolution #256 #275 #271]: #194
 131.224 +#200 := (or #169 #89 #199)
 131.225 +#201 := [def-axiom]: #200
 131.226 +#277 := [unit-resolution #201 #276 #263]: #199
 131.227 +#278 := [unit-resolution #211 #275 #271]: #77
 131.228 +#279 := [th-lemma #278 #277]: false
 131.229 +#280 := [lemma #279]: #89
 131.230 +#281 := [hypothesis]: #77
 131.231 +#282 := [unit-resolution #241 #281 #261]: #176
 131.232 +#283 := [unit-resolution #265 #282]: #64
 131.233 +#284 := [th-lemma #281 #283 #280]: false
 131.234 +#285 := [lemma #284]: #76
 131.235 +#222 := (not #172)
 131.236 +#286 := [hypothesis]: #222
 131.237 +#287 := [th-lemma #285 #286]: false
 131.238 +#288 := [lemma #287]: #172
 131.239 +#223 := (or #173 #88 #222)
 131.240 +#224 := [def-axiom]: #223
 131.241 +#289 := [unit-resolution #224 #288 #280]: #173
 131.242 +#214 := (not #173)
 131.243 +#238 := (or #176 #77 #214)
 131.244 +#239 := [def-axiom]: #238
 131.245 +#290 := [unit-resolution #239 #289 #285]: #176
 131.246 +#291 := [unit-resolution #265 #290]: #64
 131.247 +#292 := [unit-resolution #274 #291]: #205
 131.248 +#293 := [unit-resolution #211 #292 #285]: #191
 131.249 +#189 := (or #166 #188)
 131.250 +#190 := [def-axiom]: #189
 131.251 +#294 := [unit-resolution #190 #293]: #188
 131.252 +[th-lemma #280 #294]: false
 131.253 +unsat
   132.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   132.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_07	Tue Oct 20 10:11:30 2009 +0200
   132.3 @@ -0,0 +1,11 @@
   132.4 +(benchmark Isabelle
   132.5 +:extrasorts ( T2 T1)
   132.6 +:extrafuns (
   132.7 +  (uf_2 T1)
   132.8 +  (uf_1 Int Int T1)
   132.9 +  (uf_3 T1 T2)
  132.10 + )
  132.11 +:assumption (forall (?x1 Int) (?x2 Int) (iff (= (uf_1 ?x1 ?x2) uf_2) (< ?x1 ?x2)))
  132.12 +:assumption (not (= (uf_3 (uf_1 2 3)) (uf_3 uf_2)))
  132.13 +:formula true
  132.14 +)
   133.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   133.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_07.proof	Tue Oct 20 10:11:30 2009 +0200
   133.3 @@ -0,0 +1,105 @@
   133.4 +#2 := false
   133.5 +decl uf_3 :: (-> T1 T2)
   133.6 +decl uf_2 :: T1
   133.7 +#7 := uf_2
   133.8 +#16 := (uf_3 uf_2)
   133.9 +decl uf_1 :: (-> int int T1)
  133.10 +#13 := 3::int
  133.11 +#12 := 2::int
  133.12 +#14 := (uf_1 2::int 3::int)
  133.13 +#15 := (uf_3 #14)
  133.14 +#17 := (= #15 #16)
  133.15 +#516 := (= #16 #15)
  133.16 +#194 := (= uf_2 #14)
  133.17 +#5 := (:var 0 int)
  133.18 +#4 := (:var 1 int)
  133.19 +#6 := (uf_1 #4 #5)
  133.20 +#530 := (pattern #6)
  133.21 +#39 := 0::int
  133.22 +#37 := -1::int
  133.23 +#41 := (* -1::int #5)
  133.24 +#42 := (+ #4 #41)
  133.25 +#40 := (>= #42 0::int)
  133.26 +#38 := (not #40)
  133.27 +#8 := (= #6 uf_2)
  133.28 +#45 := (iff #8 #38)
  133.29 +#531 := (forall (vars (?x1 int) (?x2 int)) (:pat #530) #45)
  133.30 +#48 := (forall (vars (?x1 int) (?x2 int)) #45)
  133.31 +#534 := (iff #48 #531)
  133.32 +#532 := (iff #45 #45)
  133.33 +#533 := [refl]: #532
  133.34 +#535 := [quant-intro #533]: #534
  133.35 +#58 := (~ #48 #48)
  133.36 +#56 := (~ #45 #45)
  133.37 +#57 := [refl]: #56
  133.38 +#59 := [nnf-pos #57]: #58
  133.39 +#9 := (< #4 #5)
  133.40 +#10 := (iff #8 #9)
  133.41 +#11 := (forall (vars (?x1 int) (?x2 int)) #10)
  133.42 +#49 := (iff #11 #48)
  133.43 +#46 := (iff #10 #45)
  133.44 +#43 := (iff #9 #38)
  133.45 +#44 := [rewrite]: #43
  133.46 +#47 := [monotonicity #44]: #46
  133.47 +#50 := [quant-intro #47]: #49
  133.48 +#34 := [asserted]: #11
  133.49 +#51 := [mp #34 #50]: #48
  133.50 +#60 := [mp~ #51 #59]: #48
  133.51 +#536 := [mp #60 #535]: #531
  133.52 +#508 := (not #531)
  133.53 +#509 := (or #508 #194)
  133.54 +#201 := (* -1::int 3::int)
  133.55 +#115 := (+ 2::int #201)
  133.56 +#202 := (>= #115 0::int)
  133.57 +#116 := (not #202)
  133.58 +#114 := (= #14 uf_2)
  133.59 +#203 := (iff #114 #116)
  133.60 +#510 := (or #508 #203)
  133.61 +#506 := (iff #510 #509)
  133.62 +#150 := (iff #509 #509)
  133.63 +#513 := [rewrite]: #150
  133.64 +#171 := (iff #203 #194)
  133.65 +#1 := true
  133.66 +#164 := (iff #194 true)
  133.67 +#169 := (iff #164 #194)
  133.68 +#170 := [rewrite]: #169
  133.69 +#505 := (iff #203 #164)
  133.70 +#180 := (iff #116 true)
  133.71 +#529 := (not false)
  133.72 +#184 := (iff #529 true)
  133.73 +#520 := [rewrite]: #184
  133.74 +#519 := (iff #116 #529)
  133.75 +#528 := (iff #202 false)
  133.76 +#192 := (>= -1::int 0::int)
  133.77 +#526 := (iff #192 false)
  133.78 +#527 := [rewrite]: #526
  133.79 +#193 := (iff #202 #192)
  133.80 +#311 := (= #115 -1::int)
  133.81 +#134 := -3::int
  133.82 +#208 := (+ 2::int -3::int)
  133.83 +#524 := (= #208 -1::int)
  133.84 +#181 := [rewrite]: #524
  133.85 +#187 := (= #115 #208)
  133.86 +#207 := (= #201 -3::int)
  133.87 +#204 := [rewrite]: #207
  133.88 +#522 := [monotonicity #204]: #187
  133.89 +#518 := [trans #522 #181]: #311
  133.90 +#525 := [monotonicity #518]: #193
  133.91 +#523 := [trans #525 #527]: #528
  133.92 +#179 := [monotonicity #523]: #519
  133.93 +#521 := [trans #179 #520]: #180
  133.94 +#205 := (iff #114 #194)
  133.95 +#206 := [rewrite]: #205
  133.96 +#168 := [monotonicity #206 #521]: #505
  133.97 +#507 := [trans #168 #170]: #171
  133.98 +#512 := [monotonicity #507]: #506
  133.99 +#515 := [trans #512 #513]: #506
 133.100 +#511 := [quant-inst]: #510
 133.101 +#155 := [mp #511 #515]: #509
 133.102 +#156 := [unit-resolution #155 #536]: #194
 133.103 +#514 := [monotonicity #156]: #516
 133.104 +#517 := [symm #514]: #17
 133.105 +#18 := (not #17)
 133.106 +#35 := [asserted]: #18
 133.107 +[unit-resolution #35 #517]: false
 133.108 +unsat
   134.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   134.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_08	Tue Oct 20 10:11:30 2009 +0200
   134.3 @@ -0,0 +1,7 @@
   134.4 +(benchmark Isabelle
   134.5 +:extrafuns (
   134.6 +  (uf_1 Int)
   134.7 + )
   134.8 +:assumption (not (or (<= 4 (+ uf_1 3)) (< uf_1 1)))
   134.9 +:formula true
  134.10 +)
   135.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   135.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_08.proof	Tue Oct 20 10:11:30 2009 +0200
   135.3 @@ -0,0 +1,54 @@
   135.4 +#2 := false
   135.5 +#9 := 1::int
   135.6 +decl uf_1 :: int
   135.7 +#5 := uf_1
   135.8 +#10 := (< uf_1 1::int)
   135.9 +#6 := 3::int
  135.10 +#7 := (+ uf_1 3::int)
  135.11 +#4 := 4::int
  135.12 +#8 := (<= 4::int #7)
  135.13 +#11 := (or #8 #10)
  135.14 +#12 := (not #11)
  135.15 +#66 := (iff #12 false)
  135.16 +#29 := (+ 3::int uf_1)
  135.17 +#32 := (<= 4::int #29)
  135.18 +#38 := (or #10 #32)
  135.19 +#43 := (not #38)
  135.20 +#64 := (iff #43 false)
  135.21 +#1 := true
  135.22 +#59 := (not true)
  135.23 +#62 := (iff #59 false)
  135.24 +#63 := [rewrite]: #62
  135.25 +#60 := (iff #43 #59)
  135.26 +#57 := (iff #38 true)
  135.27 +#48 := (>= uf_1 1::int)
  135.28 +#46 := (not #48)
  135.29 +#52 := (or #46 #48)
  135.30 +#55 := (iff #52 true)
  135.31 +#56 := [rewrite]: #55
  135.32 +#53 := (iff #38 #52)
  135.33 +#50 := (iff #32 #48)
  135.34 +#51 := [rewrite]: #50
  135.35 +#47 := (iff #10 #46)
  135.36 +#49 := [rewrite]: #47
  135.37 +#54 := [monotonicity #49 #51]: #53
  135.38 +#58 := [trans #54 #56]: #57
  135.39 +#61 := [monotonicity #58]: #60
  135.40 +#65 := [trans #61 #63]: #64
  135.41 +#44 := (iff #12 #43)
  135.42 +#41 := (iff #11 #38)
  135.43 +#35 := (or #32 #10)
  135.44 +#39 := (iff #35 #38)
  135.45 +#40 := [rewrite]: #39
  135.46 +#36 := (iff #11 #35)
  135.47 +#33 := (iff #8 #32)
  135.48 +#30 := (= #7 #29)
  135.49 +#31 := [rewrite]: #30
  135.50 +#34 := [monotonicity #31]: #33
  135.51 +#37 := [monotonicity #34]: #36
  135.52 +#42 := [trans #37 #40]: #41
  135.53 +#45 := [monotonicity #42]: #44
  135.54 +#67 := [trans #45 #65]: #66
  135.55 +#28 := [asserted]: #12
  135.56 +[mp #28 #67]: false
  135.57 +unsat
   136.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   136.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_09	Tue Oct 20 10:11:30 2009 +0200
   136.3 @@ -0,0 +1,10 @@
   136.4 +(benchmark Isabelle
   136.5 +:extrafuns (
   136.6 +  (uf_1 Int)
   136.7 +  (uf_2 Int)
   136.8 + )
   136.9 +:assumption (<= 3 uf_1)
  136.10 +:assumption (= uf_2 (+ uf_1 4))
  136.11 +:assumption (not (< 0 (- uf_2 uf_1)))
  136.12 +:formula true
  136.13 +)
   137.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   137.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_09.proof	Tue Oct 20 10:11:30 2009 +0200
   137.3 @@ -0,0 +1,63 @@
   137.4 +#2 := false
   137.5 +#11 := 0::int
   137.6 +decl uf_2 :: int
   137.7 +#7 := uf_2
   137.8 +#42 := -1::int
   137.9 +#45 := (* -1::int uf_2)
  137.10 +decl uf_1 :: int
  137.11 +#5 := uf_1
  137.12 +#46 := (+ uf_1 #45)
  137.13 +#63 := (>= #46 0::int)
  137.14 +#83 := (iff #63 false)
  137.15 +#44 := -4::int
  137.16 +#79 := (>= -4::int 0::int)
  137.17 +#81 := (iff #79 false)
  137.18 +#82 := [rewrite]: #81
  137.19 +#77 := (iff #63 #79)
  137.20 +#47 := (= #46 -4::int)
  137.21 +#8 := 4::int
  137.22 +#9 := (+ uf_1 4::int)
  137.23 +#10 := (= uf_2 #9)
  137.24 +#49 := (iff #10 #47)
  137.25 +#32 := (+ 4::int uf_1)
  137.26 +#39 := (= uf_2 #32)
  137.27 +#43 := (iff #39 #47)
  137.28 +#48 := [rewrite]: #43
  137.29 +#40 := (iff #10 #39)
  137.30 +#37 := (= #9 #32)
  137.31 +#38 := [rewrite]: #37
  137.32 +#41 := [monotonicity #38]: #40
  137.33 +#50 := [trans #41 #48]: #49
  137.34 +#31 := [asserted]: #10
  137.35 +#51 := [mp #31 #50]: #47
  137.36 +#80 := [monotonicity #51]: #77
  137.37 +#84 := [trans #80 #82]: #83
  137.38 +#12 := (- uf_2 uf_1)
  137.39 +#13 := (< 0::int #12)
  137.40 +#14 := (not #13)
  137.41 +#74 := (iff #14 #63)
  137.42 +#53 := (* -1::int uf_1)
  137.43 +#54 := (+ #53 uf_2)
  137.44 +#57 := (< 0::int #54)
  137.45 +#60 := (not #57)
  137.46 +#72 := (iff #60 #63)
  137.47 +#64 := (not #63)
  137.48 +#67 := (not #64)
  137.49 +#70 := (iff #67 #63)
  137.50 +#71 := [rewrite]: #70
  137.51 +#68 := (iff #60 #67)
  137.52 +#65 := (iff #57 #64)
  137.53 +#66 := [rewrite]: #65
  137.54 +#69 := [monotonicity #66]: #68
  137.55 +#73 := [trans #69 #71]: #72
  137.56 +#61 := (iff #14 #60)
  137.57 +#58 := (iff #13 #57)
  137.58 +#55 := (= #12 #54)
  137.59 +#56 := [rewrite]: #55
  137.60 +#59 := [monotonicity #56]: #58
  137.61 +#62 := [monotonicity #59]: #61
  137.62 +#75 := [trans #62 #73]: #74
  137.63 +#52 := [asserted]: #14
  137.64 +#76 := [mp #52 #75]: #63
  137.65 +[mp #76 #84]: false
  137.66 +unsat
   138.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   138.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_10	Tue Oct 20 10:11:30 2009 +0200
   138.3 @@ -0,0 +1,4 @@
   138.4 +(benchmark Isabelle
   138.5 +:assumption (not (let (?x1 2) (not (= (+ ?x1 ?x1) 5))))
   138.6 +:formula true
   138.7 +)
   139.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   139.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_10.proof	Tue Oct 20 10:11:30 2009 +0200
   139.3 @@ -0,0 +1,35 @@
   139.4 +#2 := false
   139.5 +#6 := 5::int
   139.6 +#4 := 2::int
   139.7 +#5 := (+ 2::int 2::int)
   139.8 +#7 := (= #5 5::int)
   139.9 +#8 := (not #7)
  139.10 +#9 := (not #8)
  139.11 +#48 := (iff #9 false)
  139.12 +#1 := true
  139.13 +#43 := (not true)
  139.14 +#46 := (iff #43 false)
  139.15 +#47 := [rewrite]: #46
  139.16 +#44 := (iff #9 #43)
  139.17 +#41 := (iff #8 true)
  139.18 +#36 := (not false)
  139.19 +#39 := (iff #36 true)
  139.20 +#40 := [rewrite]: #39
  139.21 +#37 := (iff #8 #36)
  139.22 +#34 := (iff #7 false)
  139.23 +#26 := 4::int
  139.24 +#29 := (= 4::int 5::int)
  139.25 +#32 := (iff #29 false)
  139.26 +#33 := [rewrite]: #32
  139.27 +#30 := (iff #7 #29)
  139.28 +#27 := (= #5 4::int)
  139.29 +#28 := [rewrite]: #27
  139.30 +#31 := [monotonicity #28]: #30
  139.31 +#35 := [trans #31 #33]: #34
  139.32 +#38 := [monotonicity #35]: #37
  139.33 +#42 := [trans #38 #40]: #41
  139.34 +#45 := [monotonicity #42]: #44
  139.35 +#49 := [trans #45 #47]: #48
  139.36 +#25 := [asserted]: #9
  139.37 +[mp #25 #49]: false
  139.38 +unsat
   140.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_11	Tue Oct 20 10:11:30 2009 +0200
   140.3 @@ -0,0 +1,10 @@
   140.4 +(benchmark Isabelle
   140.5 +:extrafuns (
   140.6 +  (uf_2 Real)
   140.7 +  (uf_1 Real)
   140.8 + )
   140.9 +:assumption (< (+ (* 3.0 uf_1) (* 7.0 uf_2)) 4.0)
  140.10 +:assumption (< 3.0 (* 2.0 uf_1))
  140.11 +:assumption (not (< uf_2 0.0))
  140.12 +:formula true
  140.13 +)
   141.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   141.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_11.proof	Tue Oct 20 10:11:30 2009 +0200
   141.3 @@ -0,0 +1,45 @@
   141.4 +#2 := false
   141.5 +#11 := 4::real
   141.6 +decl uf_2 :: real
   141.7 +#8 := uf_2
   141.8 +#7 := 7::real
   141.9 +#9 := (* 7::real uf_2)
  141.10 +decl uf_1 :: real
  141.11 +#5 := uf_1
  141.12 +#4 := 3::real
  141.13 +#6 := (* 3::real uf_1)
  141.14 +#10 := (+ #6 #9)
  141.15 +#41 := (>= #10 4::real)
  141.16 +#39 := (not #41)
  141.17 +#12 := (< #10 4::real)
  141.18 +#40 := (iff #12 #39)
  141.19 +#37 := [rewrite]: #40
  141.20 +#34 := [asserted]: #12
  141.21 +#38 := [mp #34 #37]: #39
  141.22 +#13 := 2::real
  141.23 +#14 := (* 2::real uf_1)
  141.24 +#43 := (<= #14 3::real)
  141.25 +#44 := (not #43)
  141.26 +#15 := (< 3::real #14)
  141.27 +#45 := (iff #15 #44)
  141.28 +#46 := [rewrite]: #45
  141.29 +#35 := [asserted]: #15
  141.30 +#47 := [mp #35 #46]: #44
  141.31 +#16 := 0::real
  141.32 +#51 := (>= uf_2 0::real)
  141.33 +#17 := (< uf_2 0::real)
  141.34 +#18 := (not #17)
  141.35 +#58 := (iff #18 #51)
  141.36 +#49 := (not #51)
  141.37 +#53 := (not #49)
  141.38 +#56 := (iff #53 #51)
  141.39 +#57 := [rewrite]: #56
  141.40 +#54 := (iff #18 #53)
  141.41 +#50 := (iff #17 #49)
  141.42 +#52 := [rewrite]: #50
  141.43 +#55 := [monotonicity #52]: #54
  141.44 +#59 := [trans #55 #57]: #58
  141.45 +#36 := [asserted]: #18
  141.46 +#60 := [mp #36 #59]: #51
  141.47 +[th-lemma #60 #47 #38]: false
  141.48 +unsat
   142.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   142.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_12	Tue Oct 20 10:11:30 2009 +0200
   142.3 @@ -0,0 +1,8 @@
   142.4 +(benchmark Isabelle
   142.5 +:extrafuns (
   142.6 +  (uf_2 Int)
   142.7 +  (uf_1 Int)
   142.8 + )
   142.9 +:assumption (not (iff (or (<= 0 (+ uf_1 (* (~ 1) uf_2))) (or (not (<= 0 uf_2)) (<= 0 uf_2))) (not false)))
  142.10 +:formula true
  142.11 +)
   143.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   143.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_12.proof	Tue Oct 20 10:11:30 2009 +0200
   143.3 @@ -0,0 +1,59 @@
   143.4 +#2 := false
   143.5 +#16 := (not false)
   143.6 +decl uf_2 :: int
   143.7 +#8 := uf_2
   143.8 +#4 := 0::int
   143.9 +#12 := (<= 0::int uf_2)
  143.10 +#13 := (not #12)
  143.11 +#14 := (or #13 #12)
  143.12 +#6 := 1::int
  143.13 +#7 := (- 1::int)
  143.14 +#9 := (* #7 uf_2)
  143.15 +decl uf_1 :: int
  143.16 +#5 := uf_1
  143.17 +#10 := (+ uf_1 #9)
  143.18 +#11 := (<= 0::int #10)
  143.19 +#15 := (or #11 #14)
  143.20 +#17 := (iff #15 #16)
  143.21 +#18 := (not #17)
  143.22 +#70 := (iff #18 false)
  143.23 +#1 := true
  143.24 +#65 := (not true)
  143.25 +#68 := (iff #65 false)
  143.26 +#69 := [rewrite]: #68
  143.27 +#66 := (iff #18 #65)
  143.28 +#63 := (iff #17 true)
  143.29 +#58 := (iff true true)
  143.30 +#61 := (iff #58 true)
  143.31 +#62 := [rewrite]: #61
  143.32 +#59 := (iff #17 #58)
  143.33 +#56 := (iff #16 true)
  143.34 +#57 := [rewrite]: #56
  143.35 +#54 := (iff #15 true)
  143.36 +#35 := -1::int
  143.37 +#38 := (* -1::int uf_2)
  143.38 +#41 := (+ uf_1 #38)
  143.39 +#44 := (<= 0::int #41)
  143.40 +#49 := (or #44 true)
  143.41 +#52 := (iff #49 true)
  143.42 +#53 := [rewrite]: #52
  143.43 +#50 := (iff #15 #49)
  143.44 +#47 := (iff #14 true)
  143.45 +#48 := [rewrite]: #47
  143.46 +#45 := (iff #11 #44)
  143.47 +#42 := (= #10 #41)
  143.48 +#39 := (= #9 #38)
  143.49 +#36 := (= #7 -1::int)
  143.50 +#37 := [rewrite]: #36
  143.51 +#40 := [monotonicity #37]: #39
  143.52 +#43 := [monotonicity #40]: #42
  143.53 +#46 := [monotonicity #43]: #45
  143.54 +#51 := [monotonicity #46 #48]: #50
  143.55 +#55 := [trans #51 #53]: #54
  143.56 +#60 := [monotonicity #55 #57]: #59
  143.57 +#64 := [trans #60 #62]: #63
  143.58 +#67 := [monotonicity #64]: #66
  143.59 +#71 := [trans #67 #69]: #70
  143.60 +#34 := [asserted]: #18
  143.61 +[mp #34 #71]: false
  143.62 +unsat
   144.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   144.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_13	Tue Oct 20 10:11:30 2009 +0200
   144.3 @@ -0,0 +1,13 @@
   144.4 +(benchmark Isabelle
   144.5 +:extrasorts ( T1)
   144.6 +:extrafuns (
   144.7 +  (uf_2 T1)
   144.8 +  (uf_3 Int Int T1)
   144.9 +  (uf_1 Int Int T1)
  144.10 +  (uf_4 Int)
  144.11 + )
  144.12 +:assumption (forall (?x1 Int) (?x2 Int) (iff (= (uf_1 ?x1 ?x2) uf_2) (<= ?x1 ?x2)))
  144.13 +:assumption (forall (?x3 Int) (?x4 Int) (iff (= (uf_3 ?x3 ?x4) uf_2) (< ?x3 ?x4)))
  144.14 +:assumption (not (distinct (uf_3 uf_4 3) (uf_1 3 uf_4)))
  144.15 +:formula true
  144.16 +)
   145.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   145.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_13.proof	Tue Oct 20 10:11:30 2009 +0200
   145.3 @@ -0,0 +1,212 @@
   145.4 +#2 := false
   145.5 +decl uf_3 :: (-> int int T1)
   145.6 +#18 := 3::int
   145.7 +decl uf_4 :: int
   145.8 +#17 := uf_4
   145.9 +#19 := (uf_3 uf_4 3::int)
  145.10 +decl uf_2 :: T1
  145.11 +#7 := uf_2
  145.12 +#221 := (= uf_2 #19)
  145.13 +decl uf_1 :: (-> int int T1)
  145.14 +#20 := (uf_1 3::int uf_4)
  145.15 +#256 := (= uf_2 #20)
  145.16 +#531 := (iff #256 #221)
  145.17 +#529 := (iff #221 #256)
  145.18 +#87 := (= #19 #20)
  145.19 +#21 := (distinct #19 #20)
  145.20 +#22 := (not #21)
  145.21 +#96 := (iff #22 #87)
  145.22 +#88 := (not #87)
  145.23 +#91 := (not #88)
  145.24 +#94 := (iff #91 #87)
  145.25 +#95 := [rewrite]: #94
  145.26 +#92 := (iff #22 #91)
  145.27 +#89 := (iff #21 #88)
  145.28 +#90 := [rewrite]: #89
  145.29 +#93 := [monotonicity #90]: #92
  145.30 +#97 := [trans #93 #95]: #96
  145.31 +#86 := [asserted]: #22
  145.32 +#100 := [mp #86 #97]: #87
  145.33 +#530 := [monotonicity #100]: #529
  145.34 +#525 := [symm #530]: #531
  145.35 +#548 := (not #221)
  145.36 +#232 := (not #256)
  145.37 +#526 := (iff #232 #548)
  145.38 +#532 := [monotonicity #525]: #526
  145.39 +#536 := [hypothesis]: #232
  145.40 +#533 := [mp #536 #532]: #548
  145.41 +#259 := (>= uf_4 3::int)
  145.42 +#576 := (not #259)
  145.43 +#542 := (or #256 #576)
  145.44 +#257 := (iff #256 #259)
  145.45 +#5 := (:var 0 int)
  145.46 +#4 := (:var 1 int)
  145.47 +#6 := (uf_1 #4 #5)
  145.48 +#583 := (pattern #6)
  145.49 +#44 := 0::int
  145.50 +#41 := -1::int
  145.51 +#42 := (* -1::int #5)
  145.52 +#43 := (+ #4 #42)
  145.53 +#45 := (<= #43 0::int)
  145.54 +#8 := (= #6 uf_2)
  145.55 +#48 := (iff #8 #45)
  145.56 +#584 := (forall (vars (?x1 int) (?x2 int)) (:pat #583) #48)
  145.57 +#51 := (forall (vars (?x1 int) (?x2 int)) #48)
  145.58 +#587 := (iff #51 #584)
  145.59 +#585 := (iff #48 #48)
  145.60 +#586 := [refl]: #585
  145.61 +#588 := [quant-intro #586]: #587
  145.62 +#108 := (~ #51 #51)
  145.63 +#106 := (~ #48 #48)
  145.64 +#107 := [refl]: #106
  145.65 +#109 := [nnf-pos #107]: #108
  145.66 +#9 := (<= #4 #5)
  145.67 +#10 := (iff #8 #9)
  145.68 +#11 := (forall (vars (?x1 int) (?x2 int)) #10)
  145.69 +#52 := (iff #11 #51)
  145.70 +#49 := (iff #10 #48)
  145.71 +#46 := (iff #9 #45)
  145.72 +#47 := [rewrite]: #46
  145.73 +#50 := [monotonicity #47]: #49
  145.74 +#53 := [quant-intro #50]: #52
  145.75 +#38 := [asserted]: #11
  145.76 +#54 := [mp #38 #53]: #51
  145.77 +#110 := [mp~ #54 #109]: #51
  145.78 +#589 := [mp #110 #588]: #584
  145.79 +#575 := (not #584)
  145.80 +#577 := (or #575 #257)
  145.81 +#167 := (* -1::int uf_4)
  145.82 +#254 := (+ 3::int #167)
  145.83 +#168 := (<= #254 0::int)
  145.84 +#255 := (= #20 uf_2)
  145.85 +#169 := (iff #255 #168)
  145.86 +#234 := (or #575 #169)
  145.87 +#571 := (iff #234 #577)
  145.88 +#246 := (iff #577 #577)
  145.89 +#578 := [rewrite]: #246
  145.90 +#261 := (iff #169 #257)
  145.91 +#187 := (iff #168 #259)
  145.92 +#260 := [rewrite]: #187
  145.93 +#247 := (iff #255 #256)
  145.94 +#258 := [rewrite]: #247
  145.95 +#240 := [monotonicity #258 #260]: #261
  145.96 +#245 := [monotonicity #240]: #571
  145.97 +#579 := [trans #245 #578]: #571
  145.98 +#364 := [quant-inst]: #234
  145.99 +#580 := [mp #364 #579]: #577
 145.100 +#541 := [unit-resolution #580 #589]: #257
 145.101 +#581 := (not #257)
 145.102 +#582 := (or #581 #256 #576)
 145.103 +#572 := [def-axiom]: #582
 145.104 +#537 := [unit-resolution #572 #541]: #542
 145.105 +#543 := [unit-resolution #537 #536]: #576
 145.106 +#385 := (or #221 #259)
 145.107 +#552 := (iff #221 #576)
 145.108 +#12 := (uf_3 #4 #5)
 145.109 +#590 := (pattern #12)
 145.110 +#69 := (>= #43 0::int)
 145.111 +#68 := (not #69)
 145.112 +#40 := (= uf_2 #12)
 145.113 +#75 := (iff #40 #68)
 145.114 +#591 := (forall (vars (?x3 int) (?x4 int)) (:pat #590) #75)
 145.115 +#80 := (forall (vars (?x3 int) (?x4 int)) #75)
 145.116 +#594 := (iff #80 #591)
 145.117 +#592 := (iff #75 #75)
 145.118 +#593 := [refl]: #592
 145.119 +#595 := [quant-intro #593]: #594
 145.120 +#101 := (~ #80 #80)
 145.121 +#111 := (~ #75 #75)
 145.122 +#112 := [refl]: #111
 145.123 +#98 := [nnf-pos #112]: #101
 145.124 +#14 := (< #4 #5)
 145.125 +#13 := (= #12 uf_2)
 145.126 +#15 := (iff #13 #14)
 145.127 +#16 := (forall (vars (?x3 int) (?x4 int)) #15)
 145.128 +#83 := (iff #16 #80)
 145.129 +#60 := (iff #14 #40)
 145.130 +#65 := (forall (vars (?x3 int) (?x4 int)) #60)
 145.131 +#81 := (iff #65 #80)
 145.132 +#78 := (iff #60 #75)
 145.133 +#72 := (iff #68 #40)
 145.134 +#76 := (iff #72 #75)
 145.135 +#77 := [rewrite]: #76
 145.136 +#73 := (iff #60 #72)
 145.137 +#70 := (iff #14 #68)
 145.138 +#71 := [rewrite]: #70
 145.139 +#74 := [monotonicity #71]: #73
 145.140 +#79 := [trans #74 #77]: #78
 145.141 +#82 := [quant-intro #79]: #81
 145.142 +#66 := (iff #16 #65)
 145.143 +#63 := (iff #15 #60)
 145.144 +#57 := (iff #40 #14)
 145.145 +#61 := (iff #57 #60)
 145.146 +#62 := [rewrite]: #61
 145.147 +#58 := (iff #15 #57)
 145.148 +#55 := (iff #13 #40)
 145.149 +#56 := [rewrite]: #55
 145.150 +#59 := [monotonicity #56]: #58
 145.151 +#64 := [trans #59 #62]: #63
 145.152 +#67 := [quant-intro #64]: #66
 145.153 +#84 := [trans #67 #82]: #83
 145.154 +#39 := [asserted]: #16
 145.155 +#85 := [mp #39 #84]: #80
 145.156 +#113 := [mp~ #85 #98]: #80
 145.157 +#596 := [mp #113 #595]: #591
 145.158 +#276 := (not #591)
 145.159 +#550 := (or #276 #552)
 145.160 +#222 := (* -1::int 3::int)
 145.161 +#223 := (+ uf_4 #222)
 145.162 +#224 := (>= #223 0::int)
 145.163 +#560 := (not #224)
 145.164 +#561 := (iff #221 #560)
 145.165 +#554 := (or #276 #561)
 145.166 +#555 := (iff #554 #550)
 145.167 +#266 := (iff #550 #550)
 145.168 +#267 := [rewrite]: #266
 145.169 +#553 := (iff #561 #552)
 145.170 +#282 := (iff #560 #576)
 145.171 +#280 := (iff #224 #259)
 145.172 +#562 := -3::int
 145.173 +#566 := (+ -3::int uf_4)
 145.174 +#567 := (>= #566 0::int)
 145.175 +#557 := (iff #567 #259)
 145.176 +#279 := [rewrite]: #557
 145.177 +#570 := (iff #224 #567)
 145.178 +#209 := (= #223 #566)
 145.179 +#559 := (+ uf_4 -3::int)
 145.180 +#568 := (= #559 #566)
 145.181 +#208 := [rewrite]: #568
 145.182 +#565 := (= #223 #559)
 145.183 +#563 := (= #222 -3::int)
 145.184 +#564 := [rewrite]: #563
 145.185 +#203 := [monotonicity #564]: #565
 145.186 +#569 := [trans #203 #208]: #209
 145.187 +#556 := [monotonicity #569]: #570
 145.188 +#281 := [trans #556 #279]: #280
 145.189 +#175 := [monotonicity #281]: #282
 145.190 +#275 := [monotonicity #175]: #553
 145.191 +#265 := [monotonicity #275]: #555
 145.192 +#268 := [trans #265 #267]: #555
 145.193 +#551 := [quant-inst]: #554
 145.194 +#546 := [mp #551 #268]: #550
 145.195 +#384 := [unit-resolution #546 #596]: #552
 145.196 +#547 := (not #552)
 145.197 +#262 := (or #547 #221 #259)
 145.198 +#544 := [def-axiom]: #262
 145.199 +#386 := [unit-resolution #544 #384]: #385
 145.200 +#528 := [unit-resolution #386 #543]: #221
 145.201 +#527 := [unit-resolution #528 #533]: false
 145.202 +#534 := [lemma #527]: #256
 145.203 +#523 := [mp #534 #525]: #221
 145.204 +#363 := (or #232 #259)
 145.205 +#237 := (or #581 #232 #259)
 145.206 +#573 := [def-axiom]: #237
 145.207 +#365 := [unit-resolution #573 #541]: #363
 145.208 +#366 := [unit-resolution #365 #534]: #259
 145.209 +#519 := (or #548 #576)
 145.210 +#545 := (or #547 #548 #576)
 145.211 +#549 := [def-axiom]: #545
 145.212 +#520 := [unit-resolution #549 #384]: #519
 145.213 +#522 := [unit-resolution #520 #366]: #548
 145.214 +[unit-resolution #522 #523]: false
 145.215 +unsat
   146.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   146.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_14	Tue Oct 20 10:11:30 2009 +0200
   146.3 @@ -0,0 +1,8 @@
   146.4 +(benchmark Isabelle
   146.5 +:extrafuns (
   146.6 +  (uf_1 Int)
   146.7 + )
   146.8 +:assumption (< 0 uf_1)
   146.9 +:assumption (not (distinct uf_1 (* uf_1 2) (- uf_1 uf_1)))
  146.10 +:formula true
  146.11 +)
   147.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   147.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_14.proof	Tue Oct 20 10:11:30 2009 +0200
   147.3 @@ -0,0 +1,86 @@
   147.4 +#2 := false
   147.5 +decl uf_1 :: int
   147.6 +#5 := uf_1
   147.7 +#7 := 2::int
   147.8 +#29 := (* 2::int uf_1)
   147.9 +#4 := 0::int
  147.10 +#54 := (= 0::int #29)
  147.11 +#55 := (not #54)
  147.12 +#61 := (= #29 0::int)
  147.13 +#104 := (not #61)
  147.14 +#110 := (iff #104 #55)
  147.15 +#108 := (iff #61 #54)
  147.16 +#109 := [commutativity]: #108
  147.17 +#111 := [monotonicity #109]: #110
  147.18 +#62 := (<= #29 0::int)
  147.19 +#100 := (not #62)
  147.20 +#30 := (<= uf_1 0::int)
  147.21 +#31 := (not #30)
  147.22 +#6 := (< 0::int uf_1)
  147.23 +#32 := (iff #6 #31)
  147.24 +#33 := [rewrite]: #32
  147.25 +#27 := [asserted]: #6
  147.26 +#34 := [mp #27 #33]: #31
  147.27 +#101 := (or #100 #30)
  147.28 +#102 := [th-lemma]: #101
  147.29 +#103 := [unit-resolution #102 #34]: #100
  147.30 +#105 := (or #104 #62)
  147.31 +#106 := [th-lemma]: #105
  147.32 +#107 := [unit-resolution #106 #103]: #104
  147.33 +#112 := [mp #107 #111]: #55
  147.34 +#56 := (= uf_1 #29)
  147.35 +#57 := (not #56)
  147.36 +#53 := (= 0::int uf_1)
  147.37 +#50 := (not #53)
  147.38 +#58 := (and #50 #55 #57)
  147.39 +#69 := (not #58)
  147.40 +#42 := (distinct 0::int uf_1 #29)
  147.41 +#47 := (not #42)
  147.42 +#9 := (- uf_1 uf_1)
  147.43 +#8 := (* uf_1 2::int)
  147.44 +#10 := (distinct uf_1 #8 #9)
  147.45 +#11 := (not #10)
  147.46 +#48 := (iff #11 #47)
  147.47 +#45 := (iff #10 #42)
  147.48 +#39 := (distinct uf_1 #29 0::int)
  147.49 +#43 := (iff #39 #42)
  147.50 +#44 := [rewrite]: #43
  147.51 +#40 := (iff #10 #39)
  147.52 +#37 := (= #9 0::int)
  147.53 +#38 := [rewrite]: #37
  147.54 +#35 := (= #8 #29)
  147.55 +#36 := [rewrite]: #35
  147.56 +#41 := [monotonicity #36 #38]: #40
  147.57 +#46 := [trans #41 #44]: #45
  147.58 +#49 := [monotonicity #46]: #48
  147.59 +#28 := [asserted]: #11
  147.60 +#52 := [mp #28 #49]: #47
  147.61 +#80 := (or #42 #69)
  147.62 +#81 := [def-axiom]: #80
  147.63 +#82 := [unit-resolution #81 #52]: #69
  147.64 +#59 := (= uf_1 0::int)
  147.65 +#83 := (not #59)
  147.66 +#89 := (iff #83 #50)
  147.67 +#87 := (iff #59 #53)
  147.68 +#88 := [commutativity]: #87
  147.69 +#90 := [monotonicity #88]: #89
  147.70 +#84 := (or #83 #30)
  147.71 +#85 := [th-lemma]: #84
  147.72 +#86 := [unit-resolution #85 #34]: #83
  147.73 +#91 := [mp #86 #90]: #50
  147.74 +#64 := -1::int
  147.75 +#65 := (* -1::int #29)
  147.76 +#66 := (+ uf_1 #65)
  147.77 +#68 := (>= #66 0::int)
  147.78 +#92 := (not #68)
  147.79 +#93 := (or #92 #30)
  147.80 +#94 := [th-lemma]: #93
  147.81 +#95 := [unit-resolution #94 #34]: #92
  147.82 +#96 := (or #57 #68)
  147.83 +#97 := [th-lemma]: #96
  147.84 +#98 := [unit-resolution #97 #95]: #57
  147.85 +#76 := (or #58 #53 #54 #56)
  147.86 +#77 := [def-axiom]: #76
  147.87 +#99 := [unit-resolution #77 #98 #91 #82]: #54
  147.88 +[unit-resolution #99 #112]: false
  147.89 +unsat
   148.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   148.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_15	Tue Oct 20 10:11:30 2009 +0200
   148.3 @@ -0,0 +1,9 @@
   148.4 +(benchmark Isabelle
   148.5 +:extrafuns (
   148.6 +  (uf_2 Int)
   148.7 +  (uf_1 Int)
   148.8 +  (uf_3 Int)
   148.9 + )
  148.10 +:assumption (not (or (and (< uf_1 uf_2) (< uf_2 uf_3)) (or (and (< uf_1 uf_2) (= uf_2 uf_3)) (or (and (< uf_1 uf_3) (< uf_3 uf_2)) (or (and (= uf_1 uf_3) (< uf_3 uf_2)) (or (and (= uf_1 uf_2) (< uf_2 uf_3)) (or (and (< uf_3 uf_2) (< uf_2 uf_1)) (or (and (< uf_3 uf_2) (= uf_2 uf_1)) (or (and (< uf_3 uf_1) (< uf_1 uf_2)) (or (and (= uf_3 uf_1) (< uf_1 uf_2)) (or (and (= uf_3 uf_2) (< uf_2 uf_1)) (or (and (< uf_2 uf_1) (< uf_1 uf_3)) (or (and (< uf_2 uf_1) (= uf_3 uf_1)) (or (and (< uf_2 uf_3) (< uf_3 uf_1)) (or (and (= uf_2 uf_1) (< uf_1 uf_3)) (or (and (= uf_2 uf_3) (< uf_3 uf_1)) (and (= uf_3 uf_2) (= uf_2 uf_1))))))))))))))))))
  148.11 +:formula true
  148.12 +)
   149.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   149.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_15.proof	Tue Oct 20 10:11:30 2009 +0200
   149.3 @@ -0,0 +1,673 @@
   149.4 +#2 := false
   149.5 +#169 := 0::int
   149.6 +decl uf_2 :: int
   149.7 +#5 := uf_2
   149.8 +#166 := -1::int
   149.9 +#202 := (* -1::int uf_2)
  149.10 +decl uf_1 :: int
  149.11 +#4 := uf_1
  149.12 +#203 := (+ uf_1 #202)
  149.13 +#218 := (>= #203 0::int)
  149.14 +decl uf_3 :: int
  149.15 +#7 := uf_3
  149.16 +#167 := (* -1::int uf_3)
  149.17 +#168 := (+ uf_1 #167)
  149.18 +#178 := (>= #168 0::int)
  149.19 +#217 := (not #218)
  149.20 +#204 := (<= #203 0::int)
  149.21 +#205 := (not #204)
  149.22 +#692 := [hypothesis]: #205
  149.23 +#177 := (not #178)
  149.24 +#693 := (or #177 #204)
  149.25 +#170 := (<= #168 0::int)
  149.26 +#191 := (+ uf_2 #167)
  149.27 +#237 := (<= #191 0::int)
  149.28 +#238 := (not #237)
  149.29 +#171 := (not #170)
  149.30 +#685 := [hypothesis]: #171
  149.31 +#190 := (>= #191 0::int)
  149.32 +#455 := (or #170 #190)
  149.33 +#189 := (not #190)
  149.34 +#197 := (and #171 #189)
  149.35 +#354 := (not #197)
  149.36 +#464 := (iff #354 #455)
  149.37 +#456 := (not #455)
  149.38 +#459 := (not #456)
  149.39 +#462 := (iff #459 #455)
  149.40 +#463 := [rewrite]: #462
  149.41 +#460 := (iff #354 #459)
  149.42 +#457 := (iff #197 #456)
  149.43 +#458 := [rewrite]: #457
  149.44 +#461 := [monotonicity #458]: #460
  149.45 +#465 := [trans #461 #463]: #464
  149.46 +#287 := (and #189 #217)
  149.47 +#10 := (= uf_2 uf_3)
  149.48 +#279 := (and #10 #217)
  149.49 +#273 := (and #177 #238)
  149.50 +#15 := (= uf_1 uf_3)
  149.51 +#268 := (and #15 #238)
  149.52 +#17 := (= uf_1 uf_2)
  149.53 +#260 := (and #17 #189)
  149.54 +#252 := (and #205 #238)
  149.55 +#244 := (and #17 #238)
  149.56 +#232 := (and #171 #217)
  149.57 +#224 := (and #15 #217)
  149.58 +#214 := (and #10 #205)
  149.59 +#211 := (and #177 #205)
  149.60 +#208 := (and #15 #205)
  149.61 +#184 := (and #17 #177)
  149.62 +#174 := (and #10 #171)
  149.63 +#115 := (and #10 #17)
  149.64 +#337 := (or #115 #174 #184 #197 #208 #211 #214 #224 #232 #244 #252 #260 #268 #273 #279 #287)
  149.65 +#342 := (not #337)
  149.66 +#21 := (= uf_2 uf_1)
  149.67 +#27 := (= uf_3 uf_2)
  149.68 +#34 := (and #27 #21)
  149.69 +#23 := (< uf_3 uf_1)
  149.70 +#33 := (and #10 #23)
  149.71 +#35 := (or #33 #34)
  149.72 +#12 := (< uf_1 uf_3)
  149.73 +#32 := (and #21 #12)
  149.74 +#36 := (or #32 #35)
  149.75 +#8 := (< uf_2 uf_3)
  149.76 +#31 := (and #8 #23)
  149.77 +#37 := (or #31 #36)
  149.78 +#25 := (= uf_3 uf_1)
  149.79 +#19 := (< uf_2 uf_1)
  149.80 +#30 := (and #19 #25)
  149.81 +#38 := (or #30 #37)
  149.82 +#29 := (and #19 #12)
  149.83 +#39 := (or #29 #38)
  149.84 +#28 := (and #27 #19)
  149.85 +#40 := (or #28 #39)
  149.86 +#6 := (< uf_1 uf_2)
  149.87 +#26 := (and #25 #6)
  149.88 +#41 := (or #26 #40)
  149.89 +#24 := (and #23 #6)
  149.90 +#42 := (or #24 #41)
  149.91 +#13 := (< uf_3 uf_2)
  149.92 +#22 := (and #13 #21)
  149.93 +#43 := (or #22 #42)
  149.94 +#20 := (and #13 #19)
  149.95 +#44 := (or #20 #43)
  149.96 +#18 := (and #17 #8)
  149.97 +#45 := (or #18 #44)
  149.98 +#16 := (and #15 #13)
  149.99 +#46 := (or #16 #45)
 149.100 +#14 := (and #12 #13)
 149.101 +#47 := (or #14 #46)
 149.102 +#11 := (and #6 #10)
 149.103 +#48 := (or #11 #47)
 149.104 +#9 := (and #6 #8)
 149.105 +#49 := (or #9 #48)
 149.106 +#50 := (not #49)
 149.107 +#345 := (iff #50 #342)
 149.108 +#118 := (or #33 #115)
 149.109 +#110 := (and #12 #17)
 149.110 +#121 := (or #110 #118)
 149.111 +#124 := (or #31 #121)
 149.112 +#102 := (and #15 #19)
 149.113 +#127 := (or #102 #124)
 149.114 +#96 := (and #12 #19)
 149.115 +#130 := (or #96 #127)
 149.116 +#93 := (and #10 #19)
 149.117 +#133 := (or #93 #130)
 149.118 +#86 := (and #6 #15)
 149.119 +#136 := (or #86 #133)
 149.120 +#78 := (and #6 #23)
 149.121 +#139 := (or #78 #136)
 149.122 +#75 := (and #13 #17)
 149.123 +#142 := (or #75 #139)
 149.124 +#145 := (or #20 #142)
 149.125 +#70 := (and #8 #17)
 149.126 +#148 := (or #70 #145)
 149.127 +#67 := (and #13 #15)
 149.128 +#151 := (or #67 #148)
 149.129 +#154 := (or #14 #151)
 149.130 +#157 := (or #11 #154)
 149.131 +#160 := (or #9 #157)
 149.132 +#163 := (not #160)
 149.133 +#343 := (iff #163 #342)
 149.134 +#340 := (iff #160 #337)
 149.135 +#292 := (or #174 #115)
 149.136 +#295 := (or #184 #292)
 149.137 +#298 := (or #197 #295)
 149.138 +#301 := (or #208 #298)
 149.139 +#304 := (or #211 #301)
 149.140 +#307 := (or #214 #304)
 149.141 +#310 := (or #224 #307)
 149.142 +#313 := (or #232 #310)
 149.143 +#316 := (or #244 #313)
 149.144 +#319 := (or #252 #316)
 149.145 +#322 := (or #260 #319)
 149.146 +#325 := (or #268 #322)
 149.147 +#328 := (or #273 #325)
 149.148 +#331 := (or #279 #328)
 149.149 +#334 := (or #287 #331)
 149.150 +#338 := (iff #334 #337)
 149.151 +#339 := [rewrite]: #338
 149.152 +#335 := (iff #160 #334)
 149.153 +#332 := (iff #157 #331)
 149.154 +#329 := (iff #154 #328)
 149.155 +#326 := (iff #151 #325)
 149.156 +#323 := (iff #148 #322)
 149.157 +#320 := (iff #145 #319)
 149.158 +#317 := (iff #142 #316)
 149.159 +#314 := (iff #139 #313)
 149.160 +#311 := (iff #136 #310)
 149.161 +#308 := (iff #133 #307)
 149.162 +#305 := (iff #130 #304)
 149.163 +#302 := (iff #127 #301)
 149.164 +#299 := (iff #124 #298)
 149.165 +#296 := (iff #121 #295)
 149.166 +#293 := (iff #118 #292)
 149.167 +#175 := (iff #33 #174)
 149.168 +#172 := (iff #23 #171)
 149.169 +#173 := [rewrite]: #172
 149.170 +#176 := [monotonicity #173]: #175
 149.171 +#294 := [monotonicity #176]: #293
 149.172 +#187 := (iff #110 #184)
 149.173 +#181 := (and #177 #17)
 149.174 +#185 := (iff #181 #184)
 149.175 +#186 := [rewrite]: #185
 149.176 +#182 := (iff #110 #181)
 149.177 +#179 := (iff #12 #177)
 149.178 +#180 := [rewrite]: #179
 149.179 +#183 := [monotonicity #180]: #182
 149.180 +#188 := [trans #183 #186]: #187
 149.181 +#297 := [monotonicity #188 #294]: #296
 149.182 +#200 := (iff #31 #197)
 149.183 +#194 := (and #189 #171)
 149.184 +#198 := (iff #194 #197)
 149.185 +#199 := [rewrite]: #198
 149.186 +#195 := (iff #31 #194)
 149.187 +#192 := (iff #8 #189)
 149.188 +#193 := [rewrite]: #192
 149.189 +#196 := [monotonicity #193 #173]: #195
 149.190 +#201 := [trans #196 #199]: #200
 149.191 +#300 := [monotonicity #201 #297]: #299
 149.192 +#209 := (iff #102 #208)
 149.193 +#206 := (iff #19 #205)
 149.194 +#207 := [rewrite]: #206
 149.195 +#210 := [monotonicity #207]: #209
 149.196 +#303 := [monotonicity #210 #300]: #302
 149.197 +#212 := (iff #96 #211)
 149.198 +#213 := [monotonicity #180 #207]: #212
 149.199 +#306 := [monotonicity #213 #303]: #305
 149.200 +#215 := (iff #93 #214)
 149.201 +#216 := [monotonicity #207]: #215
 149.202 +#309 := [monotonicity #216 #306]: #308
 149.203 +#227 := (iff #86 #224)
 149.204 +#221 := (and #217 #15)
 149.205 +#225 := (iff #221 #224)
 149.206 +#226 := [rewrite]: #225
 149.207 +#222 := (iff #86 #221)
 149.208 +#219 := (iff #6 #217)
 149.209 +#220 := [rewrite]: #219
 149.210 +#223 := [monotonicity #220]: #222
 149.211 +#228 := [trans #223 #226]: #227
 149.212 +#312 := [monotonicity #228 #309]: #311
 149.213 +#235 := (iff #78 #232)
 149.214 +#229 := (and #217 #171)
 149.215 +#233 := (iff #229 #232)
 149.216 +#234 := [rewrite]: #233
 149.217 +#230 := (iff #78 #229)
 149.218 +#231 := [monotonicity #220 #173]: #230
 149.219 +#236 := [trans #231 #234]: #235
 149.220 +#315 := [monotonicity #236 #312]: #314
 149.221 +#247 := (iff #75 #244)
 149.222 +#241 := (and #238 #17)
 149.223 +#245 := (iff #241 #244)
 149.224 +#246 := [rewrite]: #245
 149.225 +#242 := (iff #75 #241)
 149.226 +#239 := (iff #13 #238)
 149.227 +#240 := [rewrite]: #239
 149.228 +#243 := [monotonicity #240]: #242
 149.229 +#248 := [trans #243 #246]: #247
 149.230 +#318 := [monotonicity #248 #315]: #317
 149.231 +#255 := (iff #20 #252)
 149.232 +#249 := (and #238 #205)
 149.233 +#253 := (iff #249 #252)
 149.234 +#254 := [rewrite]: #253
 149.235 +#250 := (iff #20 #249)
 149.236 +#251 := [monotonicity #240 #207]: #250
 149.237 +#256 := [trans #251 #254]: #255
 149.238 +#321 := [monotonicity #256 #318]: #320
 149.239 +#263 := (iff #70 #260)
 149.240 +#257 := (and #189 #17)
 149.241 +#261 := (iff #257 #260)
 149.242 +#262 := [rewrite]: #261
 149.243 +#258 := (iff #70 #257)
 149.244 +#259 := [monotonicity #193]: #258
 149.245 +#264 := [trans #259 #262]: #263
 149.246 +#324 := [monotonicity #264 #321]: #323
 149.247 +#271 := (iff #67 #268)
 149.248 +#265 := (and #238 #15)
 149.249 +#269 := (iff #265 #268)
 149.250 +#270 := [rewrite]: #269
 149.251 +#266 := (iff #67 #265)
 149.252 +#267 := [monotonicity #240]: #266
 149.253 +#272 := [trans #267 #270]: #271
 149.254 +#327 := [monotonicity #272 #324]: #326
 149.255 +#274 := (iff #14 #273)
 149.256 +#275 := [monotonicity #180 #240]: #274
 149.257 +#330 := [monotonicity #275 #327]: #329
 149.258 +#282 := (iff #11 #279)
 149.259 +#276 := (and #217 #10)
 149.260 +#280 := (iff #276 #279)
 149.261 +#281 := [rewrite]: #280
 149.262 +#277 := (iff #11 #276)
 149.263 +#278 := [monotonicity #220]: #277
 149.264 +#283 := [trans #278 #281]: #282
 149.265 +#333 := [monotonicity #283 #330]: #332
 149.266 +#290 := (iff #9 #287)
 149.267 +#284 := (and #217 #189)
 149.268 +#288 := (iff #284 #287)
 149.269 +#289 := [rewrite]: #288
 149.270 +#285 := (iff #9 #284)
 149.271 +#286 := [monotonicity #220 #193]: #285
 149.272 +#291 := [trans #286 #289]: #290
 149.273 +#336 := [monotonicity #291 #333]: #335
 149.274 +#341 := [trans #336 #339]: #340
 149.275 +#344 := [monotonicity #341]: #343
 149.276 +#164 := (iff #50 #163)
 149.277 +#161 := (iff #49 #160)
 149.278 +#158 := (iff #48 #157)
 149.279 +#155 := (iff #47 #154)
 149.280 +#152 := (iff #46 #151)
 149.281 +#149 := (iff #45 #148)
 149.282 +#146 := (iff #44 #145)
 149.283 +#143 := (iff #43 #142)
 149.284 +#140 := (iff #42 #139)
 149.285 +#137 := (iff #41 #136)
 149.286 +#134 := (iff #40 #133)
 149.287 +#131 := (iff #39 #130)
 149.288 +#128 := (iff #38 #127)
 149.289 +#125 := (iff #37 #124)
 149.290 +#122 := (iff #36 #121)
 149.291 +#119 := (iff #35 #118)
 149.292 +#116 := (iff #34 #115)
 149.293 +#73 := (iff #21 #17)
 149.294 +#74 := [rewrite]: #73
 149.295 +#91 := (iff #27 #10)
 149.296 +#92 := [rewrite]: #91
 149.297 +#117 := [monotonicity #92 #74]: #116
 149.298 +#120 := [monotonicity #117]: #119
 149.299 +#113 := (iff #32 #110)
 149.300 +#107 := (and #17 #12)
 149.301 +#111 := (iff #107 #110)
 149.302 +#112 := [rewrite]: #111
 149.303 +#108 := (iff #32 #107)
 149.304 +#109 := [monotonicity #74]: #108
 149.305 +#114 := [trans #109 #112]: #113
 149.306 +#123 := [monotonicity #114 #120]: #122
 149.307 +#126 := [monotonicity #123]: #125
 149.308 +#105 := (iff #30 #102)
 149.309 +#99 := (and #19 #15)
 149.310 +#103 := (iff #99 #102)
 149.311 +#104 := [rewrite]: #103
 149.312 +#100 := (iff #30 #99)
 149.313 +#81 := (iff #25 #15)
 149.314 +#82 := [rewrite]: #81
 149.315 +#101 := [monotonicity #82]: #100
 149.316 +#106 := [trans #101 #104]: #105
 149.317 +#129 := [monotonicity #106 #126]: #128
 149.318 +#97 := (iff #29 #96)
 149.319 +#98 := [rewrite]: #97
 149.320 +#132 := [monotonicity #98 #129]: #131
 149.321 +#94 := (iff #28 #93)
 149.322 +#95 := [monotonicity #92]: #94
 149.323 +#135 := [monotonicity #95 #132]: #134
 149.324 +#89 := (iff #26 #86)
 149.325 +#83 := (and #15 #6)
 149.326 +#87 := (iff #83 #86)
 149.327 +#88 := [rewrite]: #87
 149.328 +#84 := (iff #26 #83)
 149.329 +#85 := [monotonicity #82]: #84
 149.330 +#90 := [trans #85 #88]: #89
 149.331 +#138 := [monotonicity #90 #135]: #137
 149.332 +#79 := (iff #24 #78)
 149.333 +#80 := [rewrite]: #79
 149.334 +#141 := [monotonicity #80 #138]: #140
 149.335 +#76 := (iff #22 #75)
 149.336 +#77 := [monotonicity #74]: #76
 149.337 +#144 := [monotonicity #77 #141]: #143
 149.338 +#147 := [monotonicity #144]: #146
 149.339 +#71 := (iff #18 #70)
 149.340 +#72 := [rewrite]: #71
 149.341 +#150 := [monotonicity #72 #147]: #149
 149.342 +#68 := (iff #16 #67)
 149.343 +#69 := [rewrite]: #68
 149.344 +#153 := [monotonicity #69 #150]: #152
 149.345 +#156 := [monotonicity #153]: #155
 149.346 +#159 := [monotonicity #156]: #158
 149.347 +#162 := [monotonicity #159]: #161
 149.348 +#165 := [monotonicity #162]: #164
 149.349 +#346 := [trans #165 #344]: #345
 149.350 +#66 := [asserted]: #50
 149.351 +#347 := [mp #66 #346]: #342
 149.352 +#355 := [not-or-elim #347]: #354
 149.353 +#466 := [mp #355 #465]: #455
 149.354 +#686 := [unit-resolution #466 #685]: #190
 149.355 +#427 := (or #170 #189 #238)
 149.356 +#350 := (not #174)
 149.357 +#430 := (iff #350 #427)
 149.358 +#382 := (or #189 #238)
 149.359 +#414 := (or #170 #382)
 149.360 +#428 := (iff #414 #427)
 149.361 +#429 := [rewrite]: #428
 149.362 +#425 := (iff #350 #414)
 149.363 +#415 := (not #414)
 149.364 +#420 := (not #415)
 149.365 +#423 := (iff #420 #414)
 149.366 +#424 := [rewrite]: #423
 149.367 +#421 := (iff #350 #420)
 149.368 +#418 := (iff #174 #415)
 149.369 +#380 := (not #382)
 149.370 +#411 := (and #380 #171)
 149.371 +#416 := (iff #411 #415)
 149.372 +#417 := [rewrite]: #416
 149.373 +#412 := (iff #174 #411)
 149.374 +#383 := (iff #10 #380)
 149.375 +#384 := [rewrite]: #383
 149.376 +#413 := [monotonicity #384]: #412
 149.377 +#419 := [trans #413 #417]: #418
 149.378 +#422 := [monotonicity #419]: #421
 149.379 +#426 := [trans #422 #424]: #425
 149.380 +#431 := [trans #426 #429]: #430
 149.381 +#351 := [not-or-elim #347]: #350
 149.382 +#432 := [mp #351 #431]: #427
 149.383 +#687 := [unit-resolution #432 #686 #685]: #238
 149.384 +#549 := (or #170 #218)
 149.385 +#364 := (not #232)
 149.386 +#558 := (iff #364 #549)
 149.387 +#550 := (not #549)
 149.388 +#553 := (not #550)
 149.389 +#556 := (iff #553 #549)
 149.390 +#557 := [rewrite]: #556
 149.391 +#554 := (iff #364 #553)
 149.392 +#551 := (iff #232 #550)
 149.393 +#552 := [rewrite]: #551
 149.394 +#555 := [monotonicity #552]: #554
 149.395 +#559 := [trans #555 #557]: #558
 149.396 +#365 := [not-or-elim #347]: #364
 149.397 +#560 := [mp #365 #559]: #549
 149.398 +#688 := [unit-resolution #560 #685]: #218
 149.399 +#577 := (or #205 #217 #237)
 149.400 +#366 := (not #244)
 149.401 +#580 := (iff #366 #577)
 149.402 +#385 := (or #205 #217)
 149.403 +#564 := (or #237 #385)
 149.404 +#578 := (iff #564 #577)
 149.405 +#579 := [rewrite]: #578
 149.406 +#575 := (iff #366 #564)
 149.407 +#565 := (not #564)
 149.408 +#570 := (not #565)
 149.409 +#573 := (iff #570 #564)
 149.410 +#574 := [rewrite]: #573
 149.411 +#571 := (iff #366 #570)
 149.412 +#568 := (iff #244 #565)
 149.413 +#386 := (not #385)
 149.414 +#561 := (and #386 #238)
 149.415 +#566 := (iff #561 #565)
 149.416 +#567 := [rewrite]: #566
 149.417 +#562 := (iff #244 #561)
 149.418 +#387 := (iff #17 #386)
 149.419 +#388 := [rewrite]: #387
 149.420 +#563 := [monotonicity #388]: #562
 149.421 +#569 := [trans #563 #567]: #568
 149.422 +#572 := [monotonicity #569]: #571
 149.423 +#576 := [trans #572 #574]: #575
 149.424 +#581 := [trans #576 #579]: #580
 149.425 +#367 := [not-or-elim #347]: #366
 149.426 +#582 := [mp #367 #581]: #577
 149.427 +#689 := [unit-resolution #582 #688 #687]: #205
 149.428 +#583 := (or #204 #237)
 149.429 +#368 := (not #252)
 149.430 +#592 := (iff #368 #583)
 149.431 +#584 := (not #583)
 149.432 +#587 := (not #584)
 149.433 +#590 := (iff #587 #583)
 149.434 +#591 := [rewrite]: #590
 149.435 +#588 := (iff #368 #587)
 149.436 +#585 := (iff #252 #584)
 149.437 +#586 := [rewrite]: #585
 149.438 +#589 := [monotonicity #586]: #588
 149.439 +#593 := [trans #589 #591]: #592
 149.440 +#369 := [not-or-elim #347]: #368
 149.441 +#594 := [mp #369 #593]: #583
 149.442 +#690 := [unit-resolution #594 #689 #687]: false
 149.443 +#691 := [lemma #690]: #170
 149.444 +#487 := (or #171 #177 #204)
 149.445 +#356 := (not #208)
 149.446 +#490 := (iff #356 #487)
 149.447 +#467 := (or #171 #177)
 149.448 +#474 := (or #204 #467)
 149.449 +#488 := (iff #474 #487)
 149.450 +#489 := [rewrite]: #488
 149.451 +#485 := (iff #356 #474)
 149.452 +#475 := (not #474)
 149.453 +#480 := (not #475)
 149.454 +#483 := (iff #480 #474)
 149.455 +#484 := [rewrite]: #483
 149.456 +#481 := (iff #356 #480)
 149.457 +#478 := (iff #208 #475)
 149.458 +#468 := (not #467)
 149.459 +#471 := (and #468 #205)
 149.460 +#476 := (iff #471 #475)
 149.461 +#477 := [rewrite]: #476
 149.462 +#472 := (iff #208 #471)
 149.463 +#469 := (iff #15 #468)
 149.464 +#470 := [rewrite]: #469
 149.465 +#473 := [monotonicity #470]: #472
 149.466 +#479 := [trans #473 #477]: #478
 149.467 +#482 := [monotonicity #479]: #481
 149.468 +#486 := [trans #482 #484]: #485
 149.469 +#491 := [trans #486 #489]: #490
 149.470 +#357 := [not-or-elim #347]: #356
 149.471 +#492 := [mp #357 #491]: #487
 149.472 +#694 := [unit-resolution #492 #691]: #693
 149.473 +#695 := [unit-resolution #694 #692]: #177
 149.474 +#493 := (or #178 #204)
 149.475 +#358 := (not #211)
 149.476 +#502 := (iff #358 #493)
 149.477 +#494 := (not #493)
 149.478 +#497 := (not #494)
 149.479 +#500 := (iff #497 #493)
 149.480 +#501 := [rewrite]: #500
 149.481 +#498 := (iff #358 #497)
 149.482 +#495 := (iff #211 #494)
 149.483 +#496 := [rewrite]: #495
 149.484 +#499 := [monotonicity #496]: #498
 149.485 +#503 := [trans #499 #501]: #502
 149.486 +#359 := [not-or-elim #347]: #358
 149.487 +#504 := [mp #359 #503]: #493
 149.488 +#696 := [unit-resolution #504 #695 #692]: false
 149.489 +#697 := [lemma #696]: #204
 149.490 +#698 := [hypothesis]: #177
 149.491 +#449 := (or #178 #205 #217)
 149.492 +#352 := (not #184)
 149.493 +#452 := (iff #352 #449)
 149.494 +#436 := (or #178 #385)
 149.495 +#450 := (iff #436 #449)
 149.496 +#451 := [rewrite]: #450
 149.497 +#447 := (iff #352 #436)
 149.498 +#437 := (not #436)
 149.499 +#442 := (not #437)
 149.500 +#445 := (iff #442 #436)
 149.501 +#446 := [rewrite]: #445
 149.502 +#443 := (iff #352 #442)
 149.503 +#440 := (iff #184 #437)
 149.504 +#433 := (and #386 #177)
 149.505 +#438 := (iff #433 #437)
 149.506 +#439 := [rewrite]: #438
 149.507 +#434 := (iff #184 #433)
 149.508 +#435 := [monotonicity #388]: #434
 149.509 +#441 := [trans #435 #439]: #440
 149.510 +#444 := [monotonicity #441]: #443
 149.511 +#448 := [trans #444 #446]: #447
 149.512 +#453 := [trans #448 #451]: #452
 149.513 +#353 := [not-or-elim #347]: #352
 149.514 +#454 := [mp #353 #453]: #449
 149.515 +#699 := [unit-resolution #454 #698 #697]: #217
 149.516 +#639 := (or #178 #237)
 149.517 +#374 := (not #273)
 149.518 +#648 := (iff #374 #639)
 149.519 +#640 := (not #639)
 149.520 +#643 := (not #640)
 149.521 +#646 := (iff #643 #639)
 149.522 +#647 := [rewrite]: #646
 149.523 +#644 := (iff #374 #643)
 149.524 +#641 := (iff #273 #640)
 149.525 +#642 := [rewrite]: #641
 149.526 +#645 := [monotonicity #642]: #644
 149.527 +#649 := [trans #645 #647]: #648
 149.528 +#375 := [not-or-elim #347]: #374
 149.529 +#650 := [mp #375 #649]: #639
 149.530 +#700 := [unit-resolution #650 #698]: #237
 149.531 +#667 := (or #189 #218 #238)
 149.532 +#376 := (not #279)
 149.533 +#670 := (iff #376 #667)
 149.534 +#654 := (or #218 #382)
 149.535 +#668 := (iff #654 #667)
 149.536 +#669 := [rewrite]: #668
 149.537 +#665 := (iff #376 #654)
 149.538 +#655 := (not #654)
 149.539 +#660 := (not #655)
 149.540 +#663 := (iff #660 #654)
 149.541 +#664 := [rewrite]: #663
 149.542 +#661 := (iff #376 #660)
 149.543 +#658 := (iff #279 #655)
 149.544 +#651 := (and #380 #217)
 149.545 +#656 := (iff #651 #655)
 149.546 +#657 := [rewrite]: #656
 149.547 +#652 := (iff #279 #651)
 149.548 +#653 := [monotonicity #384]: #652
 149.549 +#659 := [trans #653 #657]: #658
 149.550 +#662 := [monotonicity #659]: #661
 149.551 +#666 := [trans #662 #664]: #665
 149.552 +#671 := [trans #666 #669]: #670
 149.553 +#377 := [not-or-elim #347]: #376
 149.554 +#672 := [mp #377 #671]: #667
 149.555 +#701 := [unit-resolution #672 #699 #700]: #189
 149.556 +#673 := (or #190 #218)
 149.557 +#378 := (not #287)
 149.558 +#682 := (iff #378 #673)
 149.559 +#674 := (not #673)
 149.560 +#677 := (not #674)
 149.561 +#680 := (iff #677 #673)
 149.562 +#681 := [rewrite]: #680
 149.563 +#678 := (iff #378 #677)
 149.564 +#675 := (iff #287 #674)
 149.565 +#676 := [rewrite]: #675
 149.566 +#679 := [monotonicity #676]: #678
 149.567 +#683 := [trans #679 #681]: #682
 149.568 +#379 := [not-or-elim #347]: #378
 149.569 +#684 := [mp #379 #683]: #673
 149.570 +#702 := [unit-resolution #684 #701 #699]: false
 149.571 +#703 := [lemma #702]: #178
 149.572 +#704 := (or #177 #218)
 149.573 +#543 := (or #171 #177 #218)
 149.574 +#362 := (not #224)
 149.575 +#546 := (iff #362 #543)
 149.576 +#530 := (or #218 #467)
 149.577 +#544 := (iff #530 #543)
 149.578 +#545 := [rewrite]: #544
 149.579 +#541 := (iff #362 #530)
 149.580 +#531 := (not #530)
 149.581 +#536 := (not #531)
 149.582 +#539 := (iff #536 #530)
 149.583 +#540 := [rewrite]: #539
 149.584 +#537 := (iff #362 #536)
 149.585 +#534 := (iff #224 #531)
 149.586 +#527 := (and #468 #217)
 149.587 +#532 := (iff #527 #531)
 149.588 +#533 := [rewrite]: #532
 149.589 +#528 := (iff #224 #527)
 149.590 +#529 := [monotonicity #470]: #528
 149.591 +#535 := [trans #529 #533]: #534
 149.592 +#538 := [monotonicity #535]: #537
 149.593 +#542 := [trans #538 #540]: #541
 149.594 +#547 := [trans #542 #545]: #546
 149.595 +#363 := [not-or-elim #347]: #362
 149.596 +#548 := [mp #363 #547]: #543
 149.597 +#705 := [unit-resolution #548 #691]: #704
 149.598 +#706 := [unit-resolution #705 #703]: #218
 149.599 +#707 := (or #177 #237)
 149.600 +#633 := (or #171 #177 #237)
 149.601 +#372 := (not #268)
 149.602 +#636 := (iff #372 #633)
 149.603 +#620 := (or #237 #467)
 149.604 +#634 := (iff #620 #633)
 149.605 +#635 := [rewrite]: #634
 149.606 +#631 := (iff #372 #620)
 149.607 +#621 := (not #620)
 149.608 +#626 := (not #621)
 149.609 +#629 := (iff #626 #620)
 149.610 +#630 := [rewrite]: #629
 149.611 +#627 := (iff #372 #626)
 149.612 +#624 := (iff #268 #621)
 149.613 +#617 := (and #468 #238)
 149.614 +#622 := (iff #617 #621)
 149.615 +#623 := [rewrite]: #622
 149.616 +#618 := (iff #268 #617)
 149.617 +#619 := [monotonicity #470]: #618
 149.618 +#625 := [trans #619 #623]: #624
 149.619 +#628 := [monotonicity #625]: #627
 149.620 +#632 := [trans #628 #630]: #631
 149.621 +#637 := [trans #632 #635]: #636
 149.622 +#373 := [not-or-elim #347]: #372
 149.623 +#638 := [mp #373 #637]: #633
 149.624 +#708 := [unit-resolution #638 #691]: #707
 149.625 +#709 := [unit-resolution #708 #703]: #237
 149.626 +#611 := (or #190 #205 #217)
 149.627 +#370 := (not #260)
 149.628 +#614 := (iff #370 #611)
 149.629 +#598 := (or #190 #385)
 149.630 +#612 := (iff #598 #611)
 149.631 +#613 := [rewrite]: #612
 149.632 +#609 := (iff #370 #598)
 149.633 +#599 := (not #598)
 149.634 +#604 := (not #599)
 149.635 +#607 := (iff #604 #598)
 149.636 +#608 := [rewrite]: #607
 149.637 +#605 := (iff #370 #604)
 149.638 +#602 := (iff #260 #599)
 149.639 +#595 := (and #386 #189)
 149.640 +#600 := (iff #595 #599)
 149.641 +#601 := [rewrite]: #600
 149.642 +#596 := (iff #260 #595)
 149.643 +#597 := [monotonicity #388]: #596
 149.644 +#603 := [trans #597 #601]: #602
 149.645 +#606 := [monotonicity #603]: #605
 149.646 +#610 := [trans #606 #608]: #609
 149.647 +#615 := [trans #610 #613]: #614
 149.648 +#371 := [not-or-elim #347]: #370
 149.649 +#616 := [mp #371 #615]: #611
 149.650 +#710 := [unit-resolution #616 #706 #697]: #190
 149.651 +#405 := (or #189 #205 #217 #238)
 149.652 +#348 := (not #115)
 149.653 +#408 := (iff #348 #405)
 149.654 +#392 := (or #382 #385)
 149.655 +#406 := (iff #392 #405)
 149.656 +#407 := [rewrite]: #406
 149.657 +#403 := (iff #348 #392)
 149.658 +#393 := (not #392)
 149.659 +#398 := (not #393)
 149.660 +#401 := (iff #398 #392)
 149.661 +#402 := [rewrite]: #401
 149.662 +#399 := (iff #348 #398)
 149.663 +#396 := (iff #115 #393)
 149.664 +#389 := (and #380 #386)
 149.665 +#394 := (iff #389 #393)
 149.666 +#395 := [rewrite]: #394
 149.667 +#390 := (iff #115 #389)
 149.668 +#391 := [monotonicity #384 #388]: #390
 149.669 +#397 := [trans #391 #395]: #396
 149.670 +#400 := [monotonicity #397]: #399
 149.671 +#404 := [trans #400 #402]: #403
 149.672 +#409 := [trans #404 #407]: #408
 149.673 +#349 := [not-or-elim #347]: #348
 149.674 +#410 := [mp #349 #409]: #405
 149.675 +[unit-resolution #410 #710 #709 #697 #706]: false
 149.676 +unsat
   150.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   150.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_16	Tue Oct 20 10:11:30 2009 +0200
   150.3 @@ -0,0 +1,26 @@
   150.4 +(benchmark Isabelle
   150.5 +:extrafuns (
   150.6 +  (uf_3 Int)
   150.7 +  (uf_2 Int)
   150.8 +  (uf_1 Int)
   150.9 +  (uf_4 Int)
  150.10 +  (uf_5 Int)
  150.11 +  (uf_6 Int)
  150.12 +  (uf_7 Int)
  150.13 +  (uf_8 Int)
  150.14 +  (uf_9 Int)
  150.15 +  (uf_10 Int)
  150.16 +  (uf_11 Int)
  150.17 + )
  150.18 +:assumption (= uf_1 (- (ite (< uf_2 0) (~ uf_2) uf_2) uf_3))
  150.19 +:assumption (= uf_4 (- (ite (< uf_1 0) (~ uf_1) uf_1) uf_2))
  150.20 +:assumption (= uf_5 (- (ite (< uf_4 0) (~ uf_4) uf_4) uf_1))
  150.21 +:assumption (= uf_6 (- (ite (< uf_5 0) (~ uf_5) uf_5) uf_4))
  150.22 +:assumption (= uf_7 (- (ite (< uf_6 0) (~ uf_6) uf_6) uf_5))
  150.23 +:assumption (= uf_8 (- (ite (< uf_7 0) (~ uf_7) uf_7) uf_6))
  150.24 +:assumption (= uf_9 (- (ite (< uf_8 0) (~ uf_8) uf_8) uf_7))
  150.25 +:assumption (= uf_10 (- (ite (< uf_9 0) (~ uf_9) uf_9) uf_8))
  150.26 +:assumption (= uf_11 (- (ite (< uf_10 0) (~ uf_10) uf_10) uf_9))
  150.27 +:assumption (not (and (= uf_3 uf_10) (= uf_2 uf_11)))
  150.28 +:formula true
  150.29 +)
   151.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   151.2 +++ b/src/HOL/SMT/Examples/cert/z3_linarith_16.proof	Tue Oct 20 10:11:30 2009 +0200
   151.3 @@ -0,0 +1,2291 @@
   151.4 +#2 := false
   151.5 +#6 := 0::int
   151.6 +decl z3name!0 :: int
   151.7 +#647 := z3name!0
   151.8 +#81 := -1::int
   151.9 +#656 := (* -1::int z3name!0)
  151.10 +decl uf_2 :: int
  151.11 +#5 := uf_2
  151.12 +#882 := (+ uf_2 #656)
  151.13 +#883 := (<= #882 0::int)
  151.14 +#885 := (not #883)
  151.15 +#881 := (>= #882 0::int)
  151.16 +#884 := (not #881)
  151.17 +#886 := (or #884 #885)
  151.18 +decl uf_11 :: int
  151.19 +#55 := uf_11
  151.20 +#513 := (* -1::int uf_11)
  151.21 +#514 := (+ uf_2 #513)
  151.22 +#515 := (<= #514 0::int)
  151.23 +decl z3name!5 :: int
  151.24 +#777 := z3name!5
  151.25 +decl uf_7 :: int
  151.26 +#31 := uf_7
  151.27 +#1083 := (+ uf_7 z3name!5)
  151.28 +#1084 := (<= #1083 0::int)
  151.29 +#335 := (>= uf_7 0::int)
  151.30 +#1085 := (>= #1083 0::int)
  151.31 +#1087 := (not #1085)
  151.32 +#1086 := (not #1084)
  151.33 +#1088 := (or #1086 #1087)
  151.34 +#2302 := [hypothesis]: #1086
  151.35 +#1289 := (or #1088 #1084)
  151.36 +#1290 := [def-axiom]: #1289
  151.37 +#2303 := [unit-resolution #1290 #2302]: #1088
  151.38 +#1089 := (not #1088)
  151.39 +#1092 := (or #335 #1089)
  151.40 +#1099 := (not #1092)
  151.41 +#786 := (* -1::int z3name!5)
  151.42 +#1072 := (+ uf_7 #786)
  151.43 +#1073 := (<= #1072 0::int)
  151.44 +#1075 := (not #1073)
  151.45 +#1071 := (>= #1072 0::int)
  151.46 +#1074 := (not #1071)
  151.47 +#1076 := (or #1074 #1075)
  151.48 +#1077 := (not #1076)
  151.49 +#336 := (not #335)
  151.50 +#1080 := (or #336 #1077)
  151.51 +#1098 := (not #1080)
  151.52 +#1100 := (or #1098 #1099)
  151.53 +#1101 := (not #1100)
  151.54 +#318 := (* -1::int uf_7)
  151.55 +#780 := (= z3name!5 #318)
  151.56 +#781 := (or #335 #780)
  151.57 +#778 := (= z3name!5 uf_7)
  151.58 +#779 := (or #336 #778)
  151.59 +#782 := (and #779 #781)
  151.60 +#1104 := (iff #782 #1101)
  151.61 +#1095 := (and #1080 #1092)
  151.62 +#1102 := (iff #1095 #1101)
  151.63 +#1103 := [rewrite]: #1102
  151.64 +#1096 := (iff #782 #1095)
  151.65 +#1093 := (iff #781 #1092)
  151.66 +#1090 := (iff #780 #1089)
  151.67 +#1091 := [rewrite]: #1090
  151.68 +#1094 := [monotonicity #1091]: #1093
  151.69 +#1081 := (iff #779 #1080)
  151.70 +#1078 := (iff #778 #1077)
  151.71 +#1079 := [rewrite]: #1078
  151.72 +#1082 := [monotonicity #1079]: #1081
  151.73 +#1097 := [monotonicity #1082 #1094]: #1096
  151.74 +#1105 := [trans #1097 #1103]: #1104
  151.75 +#783 := [intro-def]: #782
  151.76 +#1106 := [mp #783 #1105]: #1101
  151.77 +#1108 := [not-or-elim #1106]: #1092
  151.78 +#2304 := [unit-resolution #1108 #2303]: #335
  151.79 +decl uf_4 :: int
  151.80 +#13 := uf_4
  151.81 +#194 := (>= uf_4 0::int)
  151.82 +decl uf_10 :: int
  151.83 +#49 := uf_10
  151.84 +#459 := (* -1::int uf_10)
  151.85 +decl uf_3 :: int
  151.86 +#10 := uf_3
  151.87 +#508 := (+ uf_3 #459)
  151.88 +#509 := (>= #508 0::int)
  151.89 +decl z3name!1 :: int
  151.90 +#673 := z3name!1
  151.91 +#682 := (* -1::int z3name!1)
  151.92 +decl uf_1 :: int
  151.93 +#4 := uf_1
  151.94 +#920 := (+ uf_1 #682)
  151.95 +#921 := (<= #920 0::int)
  151.96 +#931 := (+ uf_1 z3name!1)
  151.97 +#933 := (>= #931 0::int)
  151.98 +#935 := (not #933)
  151.99 +#932 := (<= #931 0::int)
 151.100 +#934 := (not #932)
 151.101 +#936 := (or #934 #935)
 151.102 +#937 := (not #936)
 151.103 +#147 := (>= uf_1 0::int)
 151.104 +#148 := (not #147)
 151.105 +#923 := (not #921)
 151.106 +#919 := (>= #920 0::int)
 151.107 +#922 := (not #919)
 151.108 +#924 := (or #922 #923)
 151.109 +#2022 := [hypothesis]: #923
 151.110 +#1237 := (or #924 #921)
 151.111 +#1238 := [def-axiom]: #1237
 151.112 +#2023 := [unit-resolution #1238 #2022]: #924
 151.113 +#925 := (not #924)
 151.114 +#928 := (or #148 #925)
 151.115 +#940 := (or #147 #937)
 151.116 +#947 := (not #940)
 151.117 +#946 := (not #928)
 151.118 +#948 := (or #946 #947)
 151.119 +#949 := (not #948)
 151.120 +#130 := (* -1::int uf_1)
 151.121 +#676 := (= z3name!1 #130)
 151.122 +#677 := (or #147 #676)
 151.123 +#674 := (= z3name!1 uf_1)
 151.124 +#675 := (or #148 #674)
 151.125 +#678 := (and #675 #677)
 151.126 +#952 := (iff #678 #949)
 151.127 +#943 := (and #928 #940)
 151.128 +#950 := (iff #943 #949)
 151.129 +#951 := [rewrite]: #950
 151.130 +#944 := (iff #678 #943)
 151.131 +#941 := (iff #677 #940)
 151.132 +#938 := (iff #676 #937)
 151.133 +#939 := [rewrite]: #938
 151.134 +#942 := [monotonicity #939]: #941
 151.135 +#929 := (iff #675 #928)
 151.136 +#926 := (iff #674 #925)
 151.137 +#927 := [rewrite]: #926
 151.138 +#930 := [monotonicity #927]: #929
 151.139 +#945 := [monotonicity #930 #942]: #944
 151.140 +#953 := [trans #945 #951]: #952
 151.141 +#679 := [intro-def]: #678
 151.142 +#954 := [mp #679 #953]: #949
 151.143 +#955 := [not-or-elim #954]: #928
 151.144 +#2024 := [unit-resolution #955 #2023]: #148
 151.145 +#956 := [not-or-elim #954]: #940
 151.146 +#2025 := [unit-resolution #956 #2024]: #937
 151.147 +#2026 := (or #921 #919)
 151.148 +#2027 := [th-lemma]: #2026
 151.149 +#2028 := [unit-resolution #2027 #2022]: #919
 151.150 +#2029 := (or #922 #147 #935)
 151.151 +#2030 := [th-lemma]: #2029
 151.152 +#2031 := [unit-resolution #2030 #2024 #2028]: #935
 151.153 +#1243 := (or #936 #933)
 151.154 +#1244 := [def-axiom]: #1243
 151.155 +#2032 := [unit-resolution #1244 #2031 #2025]: false
 151.156 +#2033 := [lemma #2032]: #921
 151.157 +decl z3name!7 :: int
 151.158 +#829 := z3name!7
 151.159 +decl uf_9 :: int
 151.160 +#43 := uf_9
 151.161 +#1159 := (+ uf_9 z3name!7)
 151.162 +#1160 := (<= #1159 0::int)
 151.163 +#838 := (* -1::int z3name!7)
 151.164 +#1148 := (+ uf_9 #838)
 151.165 +#1147 := (>= #1148 0::int)
 151.166 +decl z3name!4 :: int
 151.167 +#751 := z3name!4
 151.168 +#760 := (* -1::int z3name!4)
 151.169 +decl uf_6 :: int
 151.170 +#25 := uf_6
 151.171 +#1034 := (+ uf_6 #760)
 151.172 +#1033 := (>= #1034 0::int)
 151.173 +#1035 := (<= #1034 0::int)
 151.174 +#1037 := (not #1035)
 151.175 +#1036 := (not #1033)
 151.176 +#1038 := (or #1036 #1037)
 151.177 +#1039 := (not #1038)
 151.178 +#288 := (>= uf_6 0::int)
 151.179 +#893 := (+ uf_2 z3name!0)
 151.180 +#895 := (>= #893 0::int)
 151.181 +#897 := (not #895)
 151.182 +#894 := (<= #893 0::int)
 151.183 +#896 := (not #894)
 151.184 +#898 := (or #896 #897)
 151.185 +#899 := (not #898)
 151.186 +#100 := (>= uf_2 0::int)
 151.187 +#101 := (not #100)
 151.188 +#1736 := [hypothesis]: #885
 151.189 +#1225 := (or #886 #883)
 151.190 +#1226 := [def-axiom]: #1225
 151.191 +#1737 := [unit-resolution #1226 #1736]: #886
 151.192 +#887 := (not #886)
 151.193 +#890 := (or #101 #887)
 151.194 +#902 := (or #100 #899)
 151.195 +#909 := (not #902)
 151.196 +#908 := (not #890)
 151.197 +#910 := (or #908 #909)
 151.198 +#911 := (not #910)
 151.199 +#82 := (* -1::int uf_2)
 151.200 +#650 := (= z3name!0 #82)
 151.201 +#651 := (or #100 #650)
 151.202 +#648 := (= z3name!0 uf_2)
 151.203 +#649 := (or #101 #648)
 151.204 +#652 := (and #649 #651)
 151.205 +#914 := (iff #652 #911)
 151.206 +#905 := (and #890 #902)
 151.207 +#912 := (iff #905 #911)
 151.208 +#913 := [rewrite]: #912
 151.209 +#906 := (iff #652 #905)
 151.210 +#903 := (iff #651 #902)
 151.211 +#900 := (iff #650 #899)
 151.212 +#901 := [rewrite]: #900
 151.213 +#904 := [monotonicity #901]: #903
 151.214 +#891 := (iff #649 #890)
 151.215 +#888 := (iff #648 #887)
 151.216 +#889 := [rewrite]: #888
 151.217 +#892 := [monotonicity #889]: #891
 151.218 +#907 := [monotonicity #892 #904]: #906
 151.219 +#915 := [trans #907 #913]: #914
 151.220 +#653 := [intro-def]: #652
 151.221 +#916 := [mp #653 #915]: #911
 151.222 +#917 := [not-or-elim #916]: #890
 151.223 +#1738 := [unit-resolution #917 #1737]: #101
 151.224 +#918 := [not-or-elim #916]: #902
 151.225 +#1739 := [unit-resolution #918 #1738]: #899
 151.226 +#1231 := (or #898 #895)
 151.227 +#1232 := [def-axiom]: #1231
 151.228 +#1740 := [unit-resolution #1232 #1739]: #895
 151.229 +#1741 := [th-lemma #1736 #1738 #1740]: false
 151.230 +#1742 := [lemma #1741]: #883
 151.231 +#1149 := (<= #1148 0::int)
 151.232 +#1151 := (not #1149)
 151.233 +#1150 := (not #1147)
 151.234 +#1152 := (or #1150 #1151)
 151.235 +#1153 := (not #1152)
 151.236 +#429 := (>= uf_9 0::int)
 151.237 +decl z3name!6 :: int
 151.238 +#803 := z3name!6
 151.239 +#812 := (* -1::int z3name!6)
 151.240 +decl uf_8 :: int
 151.241 +#37 := uf_8
 151.242 +#1110 := (+ uf_8 #812)
 151.243 +#1111 := (<= #1110 0::int)
 151.244 +#1113 := (not #1111)
 151.245 +#1109 := (>= #1110 0::int)
 151.246 +#1112 := (not #1109)
 151.247 +#1114 := (or #1112 #1113)
 151.248 +#1865 := [hypothesis]: #1113
 151.249 +#1297 := (or #1114 #1111)
 151.250 +#1298 := [def-axiom]: #1297
 151.251 +#1866 := [unit-resolution #1298 #1865]: #1114
 151.252 +#382 := (>= uf_8 0::int)
 151.253 +#1685 := (or #1111 #1109)
 151.254 +#1686 := [th-lemma]: #1685
 151.255 +#1867 := [unit-resolution #1686 #1865]: #1109
 151.256 +#1734 := (or #382 #1112)
 151.257 +#1121 := (+ uf_8 z3name!6)
 151.258 +#1123 := (>= #1121 0::int)
 151.259 +#1125 := (not #1123)
 151.260 +#1122 := (<= #1121 0::int)
 151.261 +#1124 := (not #1122)
 151.262 +#1126 := (or #1124 #1125)
 151.263 +#1127 := (not #1126)
 151.264 +#383 := (not #382)
 151.265 +#1428 := [hypothesis]: #383
 151.266 +#1130 := (or #382 #1127)
 151.267 +#1137 := (not #1130)
 151.268 +#1115 := (not #1114)
 151.269 +#1118 := (or #383 #1115)
 151.270 +#1136 := (not #1118)
 151.271 +#1138 := (or #1136 #1137)
 151.272 +#1139 := (not #1138)
 151.273 +#365 := (* -1::int uf_8)
 151.274 +#806 := (= z3name!6 #365)
 151.275 +#807 := (or #382 #806)
 151.276 +#804 := (= z3name!6 uf_8)
 151.277 +#805 := (or #383 #804)
 151.278 +#808 := (and #805 #807)
 151.279 +#1142 := (iff #808 #1139)
 151.280 +#1133 := (and #1118 #1130)
 151.281 +#1140 := (iff #1133 #1139)
 151.282 +#1141 := [rewrite]: #1140
 151.283 +#1134 := (iff #808 #1133)
 151.284 +#1131 := (iff #807 #1130)
 151.285 +#1128 := (iff #806 #1127)
 151.286 +#1129 := [rewrite]: #1128
 151.287 +#1132 := [monotonicity #1129]: #1131
 151.288 +#1119 := (iff #805 #1118)
 151.289 +#1116 := (iff #804 #1115)
 151.290 +#1117 := [rewrite]: #1116
 151.291 +#1120 := [monotonicity #1117]: #1119
 151.292 +#1135 := [monotonicity #1120 #1132]: #1134
 151.293 +#1143 := [trans #1135 #1141]: #1142
 151.294 +#809 := [intro-def]: #808
 151.295 +#1144 := [mp #809 #1143]: #1139
 151.296 +#1146 := [not-or-elim #1144]: #1130
 151.297 +#1729 := [unit-resolution #1146 #1428]: #1127
 151.298 +#1637 := [hypothesis]: #1109
 151.299 +#1730 := (or #1112 #1125 #382)
 151.300 +#1731 := [th-lemma]: #1730
 151.301 +#1732 := [unit-resolution #1731 #1428 #1637]: #1125
 151.302 +#1303 := (or #1126 #1123)
 151.303 +#1304 := [def-axiom]: #1303
 151.304 +#1733 := [unit-resolution #1304 #1732 #1729]: false
 151.305 +#1735 := [lemma #1733]: #1734
 151.306 +#1868 := [unit-resolution #1735 #1867]: #382
 151.307 +#1145 := [not-or-elim #1144]: #1118
 151.308 +#1869 := [unit-resolution #1145 #1868 #1866]: false
 151.309 +#1870 := [lemma #1869]: #1111
 151.310 +#289 := (not #288)
 151.311 +#1405 := [hypothesis]: #289
 151.312 +#1688 := (or #288 #429 #1113)
 151.313 +#815 := (+ uf_9 #812)
 151.314 +#818 := (+ uf_7 #815)
 151.315 +#825 := (>= #818 0::int)
 151.316 +#389 := (ite #382 uf_8 #365)
 151.317 +#400 := (* -1::int #389)
 151.318 +#401 := (+ uf_9 #400)
 151.319 +#402 := (+ uf_7 #401)
 151.320 +#599 := (>= #402 0::int)
 151.321 +#826 := (= #599 #825)
 151.322 +#819 := (~ #402 #818)
 151.323 +#816 := (~ #401 #815)
 151.324 +#813 := (~ #400 #812)
 151.325 +#810 := (~ #389 z3name!6)
 151.326 +#811 := [apply-def #809]: #810
 151.327 +#814 := [monotonicity #811]: #813
 151.328 +#817 := [monotonicity #814]: #816
 151.329 +#820 := [monotonicity #817]: #819
 151.330 +#827 := [monotonicity #820]: #826
 151.331 +#601 := (not #599)
 151.332 +#598 := (<= #402 0::int)
 151.333 +#600 := (not #598)
 151.334 +#602 := (or #600 #601)
 151.335 +#603 := (not #602)
 151.336 +#403 := (= #402 0::int)
 151.337 +#604 := (iff #403 #603)
 151.338 +#605 := [rewrite]: #604
 151.339 +#45 := (- uf_8)
 151.340 +#44 := (< uf_8 0::int)
 151.341 +#46 := (ite #44 #45 uf_8)
 151.342 +#47 := (- #46 uf_7)
 151.343 +#48 := (= uf_9 #47)
 151.344 +#408 := (iff #48 #403)
 151.345 +#368 := (ite #44 #365 uf_8)
 151.346 +#374 := (+ #318 #368)
 151.347 +#379 := (= uf_9 #374)
 151.348 +#406 := (iff #379 #403)
 151.349 +#394 := (+ #318 #389)
 151.350 +#397 := (= uf_9 #394)
 151.351 +#404 := (iff #397 #403)
 151.352 +#405 := [rewrite]: #404
 151.353 +#398 := (iff #379 #397)
 151.354 +#395 := (= #374 #394)
 151.355 +#392 := (= #368 #389)
 151.356 +#386 := (ite #383 #365 uf_8)
 151.357 +#390 := (= #386 #389)
 151.358 +#391 := [rewrite]: #390
 151.359 +#387 := (= #368 #386)
 151.360 +#384 := (iff #44 #383)
 151.361 +#385 := [rewrite]: #384
 151.362 +#388 := [monotonicity #385]: #387
 151.363 +#393 := [trans #388 #391]: #392
 151.364 +#396 := [monotonicity #393]: #395
 151.365 +#399 := [monotonicity #396]: #398
 151.366 +#407 := [trans #399 #405]: #406
 151.367 +#380 := (iff #48 #379)
 151.368 +#377 := (= #47 #374)
 151.369 +#371 := (- #368 uf_7)
 151.370 +#375 := (= #371 #374)
 151.371 +#376 := [rewrite]: #375
 151.372 +#372 := (= #47 #371)
 151.373 +#369 := (= #46 #368)
 151.374 +#366 := (= #45 #365)
 151.375 +#367 := [rewrite]: #366
 151.376 +#370 := [monotonicity #367]: #369
 151.377 +#373 := [monotonicity #370]: #372
 151.378 +#378 := [trans #373 #376]: #377
 151.379 +#381 := [monotonicity #378]: #380
 151.380 +#409 := [trans #381 #407]: #408
 151.381 +#364 := [asserted]: #48
 151.382 +#410 := [mp #364 #409]: #403
 151.383 +#606 := [mp #410 #605]: #603
 151.384 +#608 := [not-or-elim #606]: #599
 151.385 +#828 := [mp~ #608 #827]: #825
 151.386 +#1441 := [hypothesis]: #1075
 151.387 +#1285 := (or #1076 #1073)
 151.388 +#1286 := [def-axiom]: #1285
 151.389 +#1442 := [unit-resolution #1286 #1441]: #1076
 151.390 +#1107 := [not-or-elim #1106]: #1080
 151.391 +#1443 := [unit-resolution #1107 #1442]: #336
 151.392 +#1444 := [unit-resolution #1108 #1443]: #1089
 151.393 +#1291 := (or #1088 #1085)
 151.394 +#1292 := [def-axiom]: #1291
 151.395 +#1445 := [unit-resolution #1292 #1444]: #1085
 151.396 +#1446 := [th-lemma #1441 #1445 #1443]: false
 151.397 +#1447 := [lemma #1446]: #1073
 151.398 +#789 := (+ uf_8 #786)
 151.399 +#792 := (+ uf_6 #789)
 151.400 +#799 := (>= #792 0::int)
 151.401 +#342 := (ite #335 uf_7 #318)
 151.402 +#353 := (* -1::int #342)
 151.403 +#354 := (+ uf_8 #353)
 151.404 +#355 := (+ uf_6 #354)
 151.405 +#588 := (>= #355 0::int)
 151.406 +#800 := (= #588 #799)
 151.407 +#793 := (~ #355 #792)
 151.408 +#790 := (~ #354 #789)
 151.409 +#787 := (~ #353 #786)
 151.410 +#784 := (~ #342 z3name!5)
 151.411 +#785 := [apply-def #783]: #784
 151.412 +#788 := [monotonicity #785]: #787
 151.413 +#791 := [monotonicity #788]: #790
 151.414 +#794 := [monotonicity #791]: #793
 151.415 +#801 := [monotonicity #794]: #800
 151.416 +#590 := (not #588)
 151.417 +#587 := (<= #355 0::int)
 151.418 +#589 := (not #587)
 151.419 +#591 := (or #589 #590)
 151.420 +#592 := (not #591)
 151.421 +#356 := (= #355 0::int)
 151.422 +#593 := (iff #356 #592)
 151.423 +#594 := [rewrite]: #593
 151.424 +#39 := (- uf_7)
 151.425 +#38 := (< uf_7 0::int)
 151.426 +#40 := (ite #38 #39 uf_7)
 151.427 +#41 := (- #40 uf_6)
 151.428 +#42 := (= uf_8 #41)
 151.429 +#361 := (iff #42 #356)
 151.430 +#321 := (ite #38 #318 uf_7)
 151.431 +#271 := (* -1::int uf_6)
 151.432 +#327 := (+ #271 #321)
 151.433 +#332 := (= uf_8 #327)
 151.434 +#359 := (iff #332 #356)
 151.435 +#347 := (+ #271 #342)
 151.436 +#350 := (= uf_8 #347)
 151.437 +#357 := (iff #350 #356)
 151.438 +#358 := [rewrite]: #357
 151.439 +#351 := (iff #332 #350)
 151.440 +#348 := (= #327 #347)
 151.441 +#345 := (= #321 #342)
 151.442 +#339 := (ite #336 #318 uf_7)
 151.443 +#343 := (= #339 #342)
 151.444 +#344 := [rewrite]: #343
 151.445 +#340 := (= #321 #339)
 151.446 +#337 := (iff #38 #336)
 151.447 +#338 := [rewrite]: #337
 151.448 +#341 := [monotonicity #338]: #340
 151.449 +#346 := [trans #341 #344]: #345
 151.450 +#349 := [monotonicity #346]: #348
 151.451 +#352 := [monotonicity #349]: #351
 151.452 +#360 := [trans #352 #358]: #359
 151.453 +#333 := (iff #42 #332)
 151.454 +#330 := (= #41 #327)
 151.455 +#324 := (- #321 uf_6)
 151.456 +#328 := (= #324 #327)
 151.457 +#329 := [rewrite]: #328
 151.458 +#325 := (= #41 #324)
 151.459 +#322 := (= #40 #321)
 151.460 +#319 := (= #39 #318)
 151.461 +#320 := [rewrite]: #319
 151.462 +#323 := [monotonicity #320]: #322
 151.463 +#326 := [monotonicity #323]: #325
 151.464 +#331 := [trans #326 #329]: #330
 151.465 +#334 := [monotonicity #331]: #333
 151.466 +#362 := [trans #334 #360]: #361
 151.467 +#317 := [asserted]: #42
 151.468 +#363 := [mp #317 #362]: #356
 151.469 +#595 := [mp #363 #594]: #592
 151.470 +#597 := [not-or-elim #595]: #588
 151.471 +#802 := [mp~ #597 #801]: #799
 151.472 +#1343 := (not #825)
 151.473 +#1350 := (not #799)
 151.474 +#1351 := (or #288 #1075 #1350 #429 #1113 #1343)
 151.475 +#1352 := [th-lemma]: #1351
 151.476 +#1689 := [unit-resolution #1352 #802 #1447 #828]: #1688
 151.477 +#2046 := [unit-resolution #1689 #1405 #1870]: #429
 151.478 +#430 := (not #429)
 151.479 +#1156 := (or #430 #1153)
 151.480 +#1161 := (>= #1159 0::int)
 151.481 +#1163 := (not #1161)
 151.482 +#1162 := (not #1160)
 151.483 +#1164 := (or #1162 #1163)
 151.484 +#1165 := (not #1164)
 151.485 +#1168 := (or #429 #1165)
 151.486 +#1175 := (not #1168)
 151.487 +#1174 := (not #1156)
 151.488 +#1176 := (or #1174 #1175)
 151.489 +#1177 := (not #1176)
 151.490 +#412 := (* -1::int uf_9)
 151.491 +#832 := (= z3name!7 #412)
 151.492 +#833 := (or #429 #832)
 151.493 +#830 := (= z3name!7 uf_9)
 151.494 +#831 := (or #430 #830)
 151.495 +#834 := (and #831 #833)
 151.496 +#1180 := (iff #834 #1177)
 151.497 +#1171 := (and #1156 #1168)
 151.498 +#1178 := (iff #1171 #1177)
 151.499 +#1179 := [rewrite]: #1178
 151.500 +#1172 := (iff #834 #1171)
 151.501 +#1169 := (iff #833 #1168)
 151.502 +#1166 := (iff #832 #1165)
 151.503 +#1167 := [rewrite]: #1166
 151.504 +#1170 := [monotonicity #1167]: #1169
 151.505 +#1157 := (iff #831 #1156)
 151.506 +#1154 := (iff #830 #1153)
 151.507 +#1155 := [rewrite]: #1154
 151.508 +#1158 := [monotonicity #1155]: #1157
 151.509 +#1173 := [monotonicity #1158 #1170]: #1172
 151.510 +#1181 := [trans #1173 #1179]: #1180
 151.511 +#835 := [intro-def]: #834
 151.512 +#1182 := [mp #835 #1181]: #1177
 151.513 +#1183 := [not-or-elim #1182]: #1156
 151.514 +#2047 := [unit-resolution #1183 #2046]: #1153
 151.515 +#1307 := (or #1152 #1147)
 151.516 +#1308 := [def-axiom]: #1307
 151.517 +#2112 := [unit-resolution #1308 #2047]: #1147
 151.518 +#2009 := (or #288 #382)
 151.519 +#1998 := (or #1036 #288)
 151.520 +#1045 := (+ uf_6 z3name!4)
 151.521 +#1047 := (>= #1045 0::int)
 151.522 +#1049 := (not #1047)
 151.523 +#1046 := (<= #1045 0::int)
 151.524 +#1048 := (not #1046)
 151.525 +#1050 := (or #1048 #1049)
 151.526 +#1460 := [hypothesis]: #1049
 151.527 +#1279 := (or #1050 #1047)
 151.528 +#1280 := [def-axiom]: #1279
 151.529 +#1461 := [unit-resolution #1280 #1460]: #1050
 151.530 +#1464 := (or #1047 #289)
 151.531 +#1051 := (not #1050)
 151.532 +#1448 := [hypothesis]: #1037
 151.533 +#1273 := (or #1038 #1035)
 151.534 +#1274 := [def-axiom]: #1273
 151.535 +#1449 := [unit-resolution #1274 #1448]: #1038
 151.536 +#1042 := (or #289 #1039)
 151.537 +#1054 := (or #288 #1051)
 151.538 +#1061 := (not #1054)
 151.539 +#1060 := (not #1042)
 151.540 +#1062 := (or #1060 #1061)
 151.541 +#1063 := (not #1062)
 151.542 +#754 := (= z3name!4 #271)
 151.543 +#755 := (or #288 #754)
 151.544 +#752 := (= z3name!4 uf_6)
 151.545 +#753 := (or #289 #752)
 151.546 +#756 := (and #753 #755)
 151.547 +#1066 := (iff #756 #1063)
 151.548 +#1057 := (and #1042 #1054)
 151.549 +#1064 := (iff #1057 #1063)
 151.550 +#1065 := [rewrite]: #1064
 151.551 +#1058 := (iff #756 #1057)
 151.552 +#1055 := (iff #755 #1054)
 151.553 +#1052 := (iff #754 #1051)
 151.554 +#1053 := [rewrite]: #1052
 151.555 +#1056 := [monotonicity #1053]: #1055
 151.556 +#1043 := (iff #753 #1042)
 151.557 +#1040 := (iff #752 #1039)
 151.558 +#1041 := [rewrite]: #1040
 151.559 +#1044 := [monotonicity #1041]: #1043
 151.560 +#1059 := [monotonicity #1044 #1056]: #1058
 151.561 +#1067 := [trans #1059 #1065]: #1066
 151.562 +#757 := [intro-def]: #756
 151.563 +#1068 := [mp #757 #1067]: #1063
 151.564 +#1069 := [not-or-elim #1068]: #1042
 151.565 +#1450 := [unit-resolution #1069 #1449]: #289
 151.566 +#1070 := [not-or-elim #1068]: #1054
 151.567 +#1451 := [unit-resolution #1070 #1450]: #1051
 151.568 +#1452 := (or #1035 #1033)
 151.569 +#1453 := [th-lemma]: #1452
 151.570 +#1454 := [unit-resolution #1453 #1448]: #1033
 151.571 +#1455 := (or #1036 #288 #1049)
 151.572 +#1456 := [th-lemma]: #1455
 151.573 +#1457 := [unit-resolution #1456 #1450 #1454]: #1049
 151.574 +#1458 := [unit-resolution #1280 #1457 #1451]: false
 151.575 +#1459 := [lemma #1458]: #1035
 151.576 +#1462 := (or #1047 #1037 #289)
 151.577 +#1463 := [th-lemma]: #1462
 151.578 +#1465 := [unit-resolution #1463 #1459]: #1464
 151.579 +#1466 := [unit-resolution #1465 #1460]: #289
 151.580 +#1467 := [unit-resolution #1070 #1466 #1461]: false
 151.581 +#1468 := [lemma #1467]: #1047
 151.582 +#1999 := [unit-resolution #1456 #1468]: #1998
 151.583 +#2000 := [unit-resolution #1999 #1405]: #1036
 151.584 +#1407 := [unit-resolution #1070 #1405]: #1051
 151.585 +#1277 := (or #1050 #1046)
 151.586 +#1278 := [def-axiom]: #1277
 151.587 +#1497 := [unit-resolution #1278 #1407]: #1046
 151.588 +#2001 := (or #336 #1048 #1033 #382 #1350 #1075)
 151.589 +#2002 := [th-lemma]: #2001
 151.590 +#2003 := [unit-resolution #2002 #1497 #2000 #1447 #802 #1428]: #336
 151.591 +#2004 := (or #1087 #1075 #1048 #1033 #382 #1350)
 151.592 +#2005 := [th-lemma]: #2004
 151.593 +#2006 := [unit-resolution #2005 #1497 #1447 #2000 #802 #1428]: #1087
 151.594 +#2007 := [unit-resolution #1292 #2006]: #1088
 151.595 +#2008 := [unit-resolution #1108 #2007 #2003]: false
 151.596 +#2010 := [lemma #2008]: #2009
 151.597 +#2113 := [unit-resolution #2010 #1405]: #382
 151.598 +#2114 := [unit-resolution #1145 #2113]: #1115
 151.599 +#1295 := (or #1114 #1109)
 151.600 +#1296 := [def-axiom]: #1295
 151.601 +#2115 := [unit-resolution #1296 #2114]: #1109
 151.602 +decl z3name!2 :: int
 151.603 +#699 := z3name!2
 151.604 +#708 := (* -1::int z3name!2)
 151.605 +#958 := (+ uf_4 #708)
 151.606 +#957 := (>= #958 0::int)
 151.607 +#959 := (<= #958 0::int)
 151.608 +#961 := (not #959)
 151.609 +#960 := (not #957)
 151.610 +#962 := (or #960 #961)
 151.611 +#963 := (not #962)
 151.612 +decl uf_5 :: int
 151.613 +#19 := uf_5
 151.614 +#241 := (>= uf_5 0::int)
 151.615 +#242 := (not #241)
 151.616 +#1406 := [hypothesis]: #242
 151.617 +#1579 := (or #1048 #241)
 151.618 +#516 := (>= #514 0::int)
 151.619 +#476 := (>= uf_10 0::int)
 151.620 +#477 := (not #476)
 151.621 +#1484 := (or #382 #241)
 151.622 +#1430 := (or #382 #241 #1075 #1037)
 151.623 +#1421 := [hypothesis]: #1035
 151.624 +#1427 := [hypothesis]: #1073
 151.625 +#763 := (+ uf_7 #760)
 151.626 +#766 := (+ uf_5 #763)
 151.627 +#773 := (>= #766 0::int)
 151.628 +#295 := (ite #288 uf_6 #271)
 151.629 +#306 := (* -1::int #295)
 151.630 +#307 := (+ uf_7 #306)
 151.631 +#308 := (+ uf_5 #307)
 151.632 +#577 := (>= #308 0::int)
 151.633 +#774 := (= #577 #773)
 151.634 +#767 := (~ #308 #766)
 151.635 +#764 := (~ #307 #763)
 151.636 +#761 := (~ #306 #760)
 151.637 +#758 := (~ #295 z3name!4)
 151.638 +#759 := [apply-def #757]: #758
 151.639 +#762 := [monotonicity #759]: #761
 151.640 +#765 := [monotonicity #762]: #764
 151.641 +#768 := [monotonicity #765]: #767
 151.642 +#775 := [monotonicity #768]: #774
 151.643 +#579 := (not #577)
 151.644 +#576 := (<= #308 0::int)
 151.645 +#578 := (not #576)
 151.646 +#580 := (or #578 #579)
 151.647 +#581 := (not #580)
 151.648 +#309 := (= #308 0::int)
 151.649 +#582 := (iff #309 #581)
 151.650 +#583 := [rewrite]: #582
 151.651 +#33 := (- uf_6)
 151.652 +#32 := (< uf_6 0::int)
 151.653 +#34 := (ite #32 #33 uf_6)
 151.654 +#35 := (- #34 uf_5)
 151.655 +#36 := (= uf_7 #35)
 151.656 +#314 := (iff #36 #309)
 151.657 +#274 := (ite #32 #271 uf_6)
 151.658 +#224 := (* -1::int uf_5)
 151.659 +#280 := (+ #224 #274)
 151.660 +#285 := (= uf_7 #280)
 151.661 +#312 := (iff #285 #309)
 151.662 +#300 := (+ #224 #295)
 151.663 +#303 := (= uf_7 #300)
 151.664 +#310 := (iff #303 #309)
 151.665 +#311 := [rewrite]: #310
 151.666 +#304 := (iff #285 #303)
 151.667 +#301 := (= #280 #300)
 151.668 +#298 := (= #274 #295)
 151.669 +#292 := (ite #289 #271 uf_6)
 151.670 +#296 := (= #292 #295)
 151.671 +#297 := [rewrite]: #296
 151.672 +#293 := (= #274 #292)
 151.673 +#290 := (iff #32 #289)
 151.674 +#291 := [rewrite]: #290
 151.675 +#294 := [monotonicity #291]: #293
 151.676 +#299 := [trans #294 #297]: #298
 151.677 +#302 := [monotonicity #299]: #301
 151.678 +#305 := [monotonicity #302]: #304
 151.679 +#313 := [trans #305 #311]: #312
 151.680 +#286 := (iff #36 #285)
 151.681 +#283 := (= #35 #280)
 151.682 +#277 := (- #274 uf_5)
 151.683 +#281 := (= #277 #280)
 151.684 +#282 := [rewrite]: #281
 151.685 +#278 := (= #35 #277)
 151.686 +#275 := (= #34 #274)
 151.687 +#272 := (= #33 #271)
 151.688 +#273 := [rewrite]: #272
 151.689 +#276 := [monotonicity #273]: #275
 151.690 +#279 := [monotonicity #276]: #278
 151.691 +#284 := [trans #279 #282]: #283
 151.692 +#287 := [monotonicity #284]: #286
 151.693 +#315 := [trans #287 #313]: #314
 151.694 +#270 := [asserted]: #36
 151.695 +#316 := [mp #270 #315]: #309
 151.696 +#584 := [mp #316 #583]: #581
 151.697 +#586 := [not-or-elim #584]: #577
 151.698 +#776 := [mp~ #586 #775]: #773
 151.699 +#1429 := [th-lemma #776 #1406 #1428 #1427 #802 #1421]: false
 151.700 +#1431 := [lemma #1429]: #1430
 151.701 +#1485 := [unit-resolution #1431 #1447 #1459]: #1484
 151.702 +#1486 := [unit-resolution #1485 #1406]: #382
 151.703 +#1487 := [unit-resolution #1145 #1486]: #1115
 151.704 +#1496 := [unit-resolution #1298 #1487]: #1111
 151.705 +#1545 := [hypothesis]: #1046
 151.706 +#1548 := (or #1048 #1113 #429)
 151.707 +#1546 := (or #1048 #1113 #429 #1343 #1075 #1350 #1037)
 151.708 +#1547 := [th-lemma]: #1546
 151.709 +#1549 := [unit-resolution #1547 #1447 #802 #1459 #828]: #1548
 151.710 +#1550 := [unit-resolution #1549 #1545 #1496]: #429
 151.711 +#1551 := [unit-resolution #1183 #1550]: #1153
 151.712 +#1552 := [unit-resolution #1308 #1551]: #1147
 151.713 +#1543 := (or #477 #241 #1150)
 151.714 +#1488 := [unit-resolution #1296 #1487]: #1109
 151.715 +#821 := (<= #818 0::int)
 151.716 +#822 := (= #598 #821)
 151.717 +#823 := [monotonicity #820]: #822
 151.718 +#607 := [not-or-elim #606]: #598
 151.719 +#824 := [mp~ #607 #823]: #821
 151.720 +#841 := (+ uf_10 #838)
 151.721 +#844 := (+ uf_8 #841)
 151.722 +#847 := (<= #844 0::int)
 151.723 +#436 := (ite #429 uf_9 #412)
 151.724 +#447 := (* -1::int #436)
 151.725 +#448 := (+ uf_10 #447)
 151.726 +#449 := (+ uf_8 #448)
 151.727 +#609 := (<= #449 0::int)
 151.728 +#848 := (= #609 #847)
 151.729 +#845 := (~ #449 #844)
 151.730 +#842 := (~ #448 #841)
 151.731 +#839 := (~ #447 #838)
 151.732 +#836 := (~ #436 z3name!7)
 151.733 +#837 := [apply-def #835]: #836
 151.734 +#840 := [monotonicity #837]: #839
 151.735 +#843 := [monotonicity #840]: #842
 151.736 +#846 := [monotonicity #843]: #845
 151.737 +#849 := [monotonicity #846]: #848
 151.738 +#610 := (>= #449 0::int)
 151.739 +#612 := (not #610)
 151.740 +#611 := (not #609)
 151.741 +#613 := (or #611 #612)
 151.742 +#614 := (not #613)
 151.743 +#450 := (= #449 0::int)
 151.744 +#615 := (iff #450 #614)
 151.745 +#616 := [rewrite]: #615
 151.746 +#51 := (- uf_9)
 151.747 +#50 := (< uf_9 0::int)
 151.748 +#52 := (ite #50 #51 uf_9)
 151.749 +#53 := (- #52 uf_8)
 151.750 +#54 := (= uf_10 #53)
 151.751 +#455 := (iff #54 #450)
 151.752 +#415 := (ite #50 #412 uf_9)
 151.753 +#421 := (+ #365 #415)
 151.754 +#426 := (= uf_10 #421)
 151.755 +#453 := (iff #426 #450)
 151.756 +#441 := (+ #365 #436)
 151.757 +#444 := (= uf_10 #441)
 151.758 +#451 := (iff #444 #450)
 151.759 +#452 := [rewrite]: #451
 151.760 +#445 := (iff #426 #444)
 151.761 +#442 := (= #421 #441)
 151.762 +#439 := (= #415 #436)
 151.763 +#433 := (ite #430 #412 uf_9)
 151.764 +#437 := (= #433 #436)
 151.765 +#438 := [rewrite]: #437
 151.766 +#434 := (= #415 #433)
 151.767 +#431 := (iff #50 #430)
 151.768 +#432 := [rewrite]: #431
 151.769 +#435 := [monotonicity #432]: #434
 151.770 +#440 := [trans #435 #438]: #439
 151.771 +#443 := [monotonicity #440]: #442
 151.772 +#446 := [monotonicity #443]: #445
 151.773 +#454 := [trans #446 #452]: #453
 151.774 +#427 := (iff #54 #426)
 151.775 +#424 := (= #53 #421)
 151.776 +#418 := (- #415 uf_8)
 151.777 +#422 := (= #418 #421)
 151.778 +#423 := [rewrite]: #422
 151.779 +#419 := (= #53 #418)
 151.780 +#416 := (= #52 #415)
 151.781 +#413 := (= #51 #412)
 151.782 +#414 := [rewrite]: #413
 151.783 +#417 := [monotonicity #414]: #416
 151.784 +#420 := [monotonicity #417]: #419
 151.785 +#425 := [trans #420 #423]: #424
 151.786 +#428 := [monotonicity #425]: #427
 151.787 +#456 := [trans #428 #454]: #455
 151.788 +#411 := [asserted]: #54
 151.789 +#457 := [mp #411 #456]: #450
 151.790 +#617 := [mp #457 #616]: #614
 151.791 +#618 := [not-or-elim #617]: #609
 151.792 +#850 := [mp~ #618 #849]: #847
 151.793 +#1540 := [hypothesis]: #1147
 151.794 +#1541 := [hypothesis]: #476
 151.795 +#1542 := [th-lemma #1468 #1406 #1541 #1540 #850 #824 #1488 #776 #1459]: false
 151.796 +#1544 := [lemma #1542]: #1543
 151.797 +#1553 := [unit-resolution #1544 #1552 #1406]: #477
 151.798 +#851 := (>= #844 0::int)
 151.799 +#852 := (= #610 #851)
 151.800 +#853 := [monotonicity #846]: #852
 151.801 +#619 := [not-or-elim #617]: #610
 151.802 +#854 := [mp~ #619 #853]: #851
 151.803 +#1309 := (or #1152 #1149)
 151.804 +#1310 := [def-axiom]: #1309
 151.805 +#1554 := [unit-resolution #1310 #1551]: #1149
 151.806 +#769 := (<= #766 0::int)
 151.807 +#770 := (= #576 #769)
 151.808 +#771 := [monotonicity #768]: #770
 151.809 +#585 := [not-or-elim #584]: #576
 151.810 +#772 := [mp~ #585 #771]: #769
 151.811 +decl z3name!3 :: int
 151.812 +#725 := z3name!3
 151.813 +#1007 := (+ uf_5 z3name!3)
 151.814 +#1009 := (>= #1007 0::int)
 151.815 +#1011 := (not #1009)
 151.816 +#1398 := [hypothesis]: #1011
 151.817 +#734 := (* -1::int z3name!3)
 151.818 +#996 := (+ uf_5 #734)
 151.819 +#997 := (<= #996 0::int)
 151.820 +#999 := (not #997)
 151.821 +#995 := (>= #996 0::int)
 151.822 +#998 := (not #995)
 151.823 +#1000 := (or #998 #999)
 151.824 +#1001 := (not #1000)
 151.825 +#1008 := (<= #1007 0::int)
 151.826 +#1010 := (not #1008)
 151.827 +#1012 := (or #1010 #1011)
 151.828 +#1267 := (or #1012 #1009)
 151.829 +#1268 := [def-axiom]: #1267
 151.830 +#1399 := [unit-resolution #1268 #1398]: #1012
 151.831 +#1013 := (not #1012)
 151.832 +#1016 := (or #241 #1013)
 151.833 +#1023 := (not #1016)
 151.834 +#1004 := (or #242 #1001)
 151.835 +#1022 := (not #1004)
 151.836 +#1024 := (or #1022 #1023)
 151.837 +#1025 := (not #1024)
 151.838 +#728 := (= z3name!3 #224)
 151.839 +#729 := (or #241 #728)
 151.840 +#726 := (= z3name!3 uf_5)
 151.841 +#727 := (or #242 #726)
 151.842 +#730 := (and #727 #729)
 151.843 +#1028 := (iff #730 #1025)
 151.844 +#1019 := (and #1004 #1016)
 151.845 +#1026 := (iff #1019 #1025)
 151.846 +#1027 := [rewrite]: #1026
 151.847 +#1020 := (iff #730 #1019)
 151.848 +#1017 := (iff #729 #1016)
 151.849 +#1014 := (iff #728 #1013)
 151.850 +#1015 := [rewrite]: #1014
 151.851 +#1018 := [monotonicity #1015]: #1017
 151.852 +#1005 := (iff #727 #1004)
 151.853 +#1002 := (iff #726 #1001)
 151.854 +#1003 := [rewrite]: #1002
 151.855 +#1006 := [monotonicity #1003]: #1005
 151.856 +#1021 := [monotonicity #1006 #1018]: #1020
 151.857 +#1029 := [trans #1021 #1027]: #1028
 151.858 +#731 := [intro-def]: #730
 151.859 +#1030 := [mp #731 #1029]: #1025
 151.860 +#1032 := [not-or-elim #1030]: #1016
 151.861 +#1400 := [unit-resolution #1032 #1399]: #241
 151.862 +#1031 := [not-or-elim #1030]: #1004
 151.863 +#1401 := [unit-resolution #1031 #1400]: #1001
 151.864 +#1261 := (or #1000 #997)
 151.865 +#1262 := [def-axiom]: #1261
 151.866 +#1402 := [unit-resolution #1262 #1401]: #997
 151.867 +#1403 := [th-lemma #1400 #1402 #1398]: false
 151.868 +#1404 := [lemma #1403]: #1009
 151.869 +#737 := (+ uf_6 #734)
 151.870 +#740 := (+ uf_4 #737)
 151.871 +#747 := (>= #740 0::int)
 151.872 +#248 := (ite #241 uf_5 #224)
 151.873 +#259 := (* -1::int #248)
 151.874 +#260 := (+ uf_6 #259)
 151.875 +#261 := (+ uf_4 #260)
 151.876 +#566 := (>= #261 0::int)
 151.877 +#748 := (= #566 #747)
 151.878 +#741 := (~ #261 #740)
 151.879 +#738 := (~ #260 #737)
 151.880 +#735 := (~ #259 #734)
 151.881 +#732 := (~ #248 z3name!3)
 151.882 +#733 := [apply-def #731]: #732
 151.883 +#736 := [monotonicity #733]: #735
 151.884 +#739 := [monotonicity #736]: #738
 151.885 +#742 := [monotonicity #739]: #741
 151.886 +#749 := [monotonicity #742]: #748
 151.887 +#568 := (not #566)
 151.888 +#565 := (<= #261 0::int)
 151.889 +#567 := (not #565)
 151.890 +#569 := (or #567 #568)
 151.891 +#570 := (not #569)
 151.892 +#262 := (= #261 0::int)
 151.893 +#571 := (iff #262 #570)
 151.894 +#572 := [rewrite]: #571
 151.895 +#27 := (- uf_5)
 151.896 +#26 := (< uf_5 0::int)
 151.897 +#28 := (ite #26 #27 uf_5)
 151.898 +#29 := (- #28 uf_4)
 151.899 +#30 := (= uf_6 #29)
 151.900 +#267 := (iff #30 #262)
 151.901 +#227 := (ite #26 #224 uf_5)
 151.902 +#177 := (* -1::int uf_4)
 151.903 +#233 := (+ #177 #227)
 151.904 +#238 := (= uf_6 #233)
 151.905 +#265 := (iff #238 #262)
 151.906 +#253 := (+ #177 #248)
 151.907 +#256 := (= uf_6 #253)
 151.908 +#263 := (iff #256 #262)
 151.909 +#264 := [rewrite]: #263
 151.910 +#257 := (iff #238 #256)
 151.911 +#254 := (= #233 #253)
 151.912 +#251 := (= #227 #248)
 151.913 +#245 := (ite #242 #224 uf_5)
 151.914 +#249 := (= #245 #248)
 151.915 +#250 := [rewrite]: #249
 151.916 +#246 := (= #227 #245)
 151.917 +#243 := (iff #26 #242)
 151.918 +#244 := [rewrite]: #243
 151.919 +#247 := [monotonicity #244]: #246
 151.920 +#252 := [trans #247 #250]: #251
 151.921 +#255 := [monotonicity #252]: #254
 151.922 +#258 := [monotonicity #255]: #257
 151.923 +#266 := [trans #258 #264]: #265
 151.924 +#239 := (iff #30 #238)
 151.925 +#236 := (= #29 #233)
 151.926 +#230 := (- #227 uf_4)
 151.927 +#234 := (= #230 #233)
 151.928 +#235 := [rewrite]: #234
 151.929 +#231 := (= #29 #230)
 151.930 +#228 := (= #28 #227)
 151.931 +#225 := (= #27 #224)
 151.932 +#226 := [rewrite]: #225
 151.933 +#229 := [monotonicity #226]: #228
 151.934 +#232 := [monotonicity #229]: #231
 151.935 +#237 := [trans #232 #235]: #236
 151.936 +#240 := [monotonicity #237]: #239
 151.937 +#268 := [trans #240 #266]: #267
 151.938 +#223 := [asserted]: #30
 151.939 +#269 := [mp #223 #268]: #262
 151.940 +#573 := [mp #269 #572]: #570
 151.941 +#575 := [not-or-elim #573]: #566
 151.942 +#750 := [mp~ #575 #749]: #747
 151.943 +#1364 := (not #747)
 151.944 +#1357 := (not #769)
 151.945 +#1337 := (not #851)
 151.946 +#1555 := (or #194 #476 #1151 #1337 #1343 #1113 #1048 #1357 #1364 #1011)
 151.947 +#1556 := [th-lemma]: #1555
 151.948 +#1557 := [unit-resolution #1556 #1545 #750 #1404 #772 #1496 #828 #1554 #854 #1553]: #194
 151.949 +#195 := (not #194)
 151.950 +#966 := (or #195 #963)
 151.951 +#969 := (+ uf_4 z3name!2)
 151.952 +#971 := (>= #969 0::int)
 151.953 +#973 := (not #971)
 151.954 +#970 := (<= #969 0::int)
 151.955 +#972 := (not #970)
 151.956 +#974 := (or #972 #973)
 151.957 +#975 := (not #974)
 151.958 +#978 := (or #194 #975)
 151.959 +#985 := (not #978)
 151.960 +#984 := (not #966)
 151.961 +#986 := (or #984 #985)
 151.962 +#987 := (not #986)
 151.963 +#702 := (= z3name!2 #177)
 151.964 +#703 := (or #194 #702)
 151.965 +#700 := (= z3name!2 uf_4)
 151.966 +#701 := (or #195 #700)
 151.967 +#704 := (and #701 #703)
 151.968 +#990 := (iff #704 #987)
 151.969 +#981 := (and #966 #978)
 151.970 +#988 := (iff #981 #987)
 151.971 +#989 := [rewrite]: #988
 151.972 +#982 := (iff #704 #981)
 151.973 +#979 := (iff #703 #978)
 151.974 +#976 := (iff #702 #975)
 151.975 +#977 := [rewrite]: #976
 151.976 +#980 := [monotonicity #977]: #979
 151.977 +#967 := (iff #701 #966)
 151.978 +#964 := (iff #700 #963)
 151.979 +#965 := [rewrite]: #964
 151.980 +#968 := [monotonicity #965]: #967
 151.981 +#983 := [monotonicity #968 #980]: #982
 151.982 +#991 := [trans #983 #989]: #990
 151.983 +#705 := [intro-def]: #704
 151.984 +#992 := [mp #705 #991]: #987
 151.985 +#993 := [not-or-elim #992]: #966
 151.986 +#1558 := [unit-resolution #993 #1557]: #963
 151.987 +#1249 := (or #962 #959)
 151.988 +#1250 := [def-axiom]: #1249
 151.989 +#1559 := [unit-resolution #1250 #1558]: #959
 151.990 +decl z3name!8 :: int
 151.991 +#855 := z3name!8
 151.992 +#864 := (* -1::int z3name!8)
 151.993 +#867 := (+ uf_11 #864)
 151.994 +#870 := (+ uf_9 #867)
 151.995 +#873 := (<= #870 0::int)
 151.996 +#483 := (ite #476 uf_10 #459)
 151.997 +#494 := (* -1::int #483)
 151.998 +#495 := (+ uf_11 #494)
 151.999 +#496 := (+ uf_9 #495)
151.1000 +#620 := (<= #496 0::int)
151.1001 +#874 := (= #620 #873)
151.1002 +#871 := (~ #496 #870)
151.1003 +#868 := (~ #495 #867)
151.1004 +#865 := (~ #494 #864)
151.1005 +#862 := (~ #483 z3name!8)
151.1006 +#858 := (= z3name!8 #459)
151.1007 +#859 := (or #476 #858)
151.1008 +#856 := (= z3name!8 uf_10)
151.1009 +#857 := (or #477 #856)
151.1010 +#860 := (and #857 #859)
151.1011 +#861 := [intro-def]: #860
151.1012 +#863 := [apply-def #861]: #862
151.1013 +#866 := [monotonicity #863]: #865
151.1014 +#869 := [monotonicity #866]: #868
151.1015 +#872 := [monotonicity #869]: #871
151.1016 +#875 := [monotonicity #872]: #874
151.1017 +#621 := (>= #496 0::int)
151.1018 +#623 := (not #621)
151.1019 +#622 := (not #620)
151.1020 +#624 := (or #622 #623)
151.1021 +#625 := (not #624)
151.1022 +#497 := (= #496 0::int)
151.1023 +#626 := (iff #497 #625)
151.1024 +#627 := [rewrite]: #626
151.1025 +#57 := (- uf_10)
151.1026 +#56 := (< uf_10 0::int)
151.1027 +#58 := (ite #56 #57 uf_10)
151.1028 +#59 := (- #58 uf_9)
151.1029 +#60 := (= uf_11 #59)
151.1030 +#502 := (iff #60 #497)
151.1031 +#462 := (ite #56 #459 uf_10)
151.1032 +#468 := (+ #412 #462)
151.1033 +#473 := (= uf_11 #468)
151.1034 +#500 := (iff #473 #497)
151.1035 +#488 := (+ #412 #483)
151.1036 +#491 := (= uf_11 #488)
151.1037 +#498 := (iff #491 #497)
151.1038 +#499 := [rewrite]: #498
151.1039 +#492 := (iff #473 #491)
151.1040 +#489 := (= #468 #488)
151.1041 +#486 := (= #462 #483)
151.1042 +#480 := (ite #477 #459 uf_10)
151.1043 +#484 := (= #480 #483)
151.1044 +#485 := [rewrite]: #484
151.1045 +#481 := (= #462 #480)
151.1046 +#478 := (iff #56 #477)
151.1047 +#479 := [rewrite]: #478
151.1048 +#482 := [monotonicity #479]: #481
151.1049 +#487 := [trans #482 #485]: #486
151.1050 +#490 := [monotonicity #487]: #489
151.1051 +#493 := [monotonicity #490]: #492
151.1052 +#501 := [trans #493 #499]: #500
151.1053 +#474 := (iff #60 #473)
151.1054 +#471 := (= #59 #468)
151.1055 +#465 := (- #462 uf_9)
151.1056 +#469 := (= #465 #468)
151.1057 +#470 := [rewrite]: #469
151.1058 +#466 := (= #59 #465)
151.1059 +#463 := (= #58 #462)
151.1060 +#460 := (= #57 #459)
151.1061 +#461 := [rewrite]: #460
151.1062 +#464 := [monotonicity #461]: #463
151.1063 +#467 := [monotonicity #464]: #466
151.1064 +#472 := [trans #467 #470]: #471
151.1065 +#475 := [monotonicity #472]: #474
151.1066 +#503 := [trans #475 #501]: #502
151.1067 +#458 := [asserted]: #60
151.1068 +#504 := [mp #458 #503]: #497
151.1069 +#628 := [mp #504 #627]: #625
151.1070 +#629 := [not-or-elim #628]: #620
151.1071 +#876 := [mp~ #629 #875]: #873
151.1072 +#1197 := (+ uf_10 z3name!8)
151.1073 +#1198 := (<= #1197 0::int)
151.1074 +#1199 := (>= #1197 0::int)
151.1075 +#1201 := (not #1199)
151.1076 +#1200 := (not #1198)
151.1077 +#1202 := (or #1200 #1201)
151.1078 +#1203 := (not #1202)
151.1079 +#1206 := (or #476 #1203)
151.1080 +#1213 := (not #1206)
151.1081 +#1186 := (+ uf_10 #864)
151.1082 +#1187 := (<= #1186 0::int)
151.1083 +#1189 := (not #1187)
151.1084 +#1185 := (>= #1186 0::int)
151.1085 +#1188 := (not #1185)
151.1086 +#1190 := (or #1188 #1189)
151.1087 +#1191 := (not #1190)
151.1088 +#1194 := (or #477 #1191)
151.1089 +#1212 := (not #1194)
151.1090 +#1214 := (or #1212 #1213)
151.1091 +#1215 := (not #1214)
151.1092 +#1218 := (iff #860 #1215)
151.1093 +#1209 := (and #1194 #1206)
151.1094 +#1216 := (iff #1209 #1215)
151.1095 +#1217 := [rewrite]: #1216
151.1096 +#1210 := (iff #860 #1209)
151.1097 +#1207 := (iff #859 #1206)
151.1098 +#1204 := (iff #858 #1203)
151.1099 +#1205 := [rewrite]: #1204
151.1100 +#1208 := [monotonicity #1205]: #1207
151.1101 +#1195 := (iff #857 #1194)
151.1102 +#1192 := (iff #856 #1191)
151.1103 +#1193 := [rewrite]: #1192
151.1104 +#1196 := [monotonicity #1193]: #1195
151.1105 +#1211 := [monotonicity #1196 #1208]: #1210
151.1106 +#1219 := [trans #1211 #1217]: #1218
151.1107 +#1220 := [mp #861 #1219]: #1215
151.1108 +#1222 := [not-or-elim #1220]: #1206
151.1109 +#1560 := [unit-resolution #1222 #1553]: #1203
151.1110 +#1325 := (or #1202 #1198)
151.1111 +#1326 := [def-axiom]: #1325
151.1112 +#1561 := [unit-resolution #1326 #1560]: #1198
151.1113 +#711 := (+ uf_5 #708)
151.1114 +#714 := (+ uf_1 #711)
151.1115 +#721 := (>= #714 0::int)
151.1116 +#201 := (ite #194 uf_4 #177)
151.1117 +#212 := (* -1::int #201)
151.1118 +#213 := (+ uf_5 #212)
151.1119 +#214 := (+ uf_1 #213)
151.1120 +#555 := (>= #214 0::int)
151.1121 +#722 := (= #555 #721)
151.1122 +#715 := (~ #214 #714)
151.1123 +#712 := (~ #213 #711)
151.1124 +#709 := (~ #212 #708)
151.1125 +#706 := (~ #201 z3name!2)
151.1126 +#707 := [apply-def #705]: #706
151.1127 +#710 := [monotonicity #707]: #709
151.1128 +#713 := [monotonicity #710]: #712
151.1129 +#716 := [monotonicity #713]: #715
151.1130 +#723 := [monotonicity #716]: #722
151.1131 +#557 := (not #555)
151.1132 +#554 := (<= #214 0::int)
151.1133 +#556 := (not #554)
151.1134 +#558 := (or #556 #557)
151.1135 +#559 := (not #558)
151.1136 +#215 := (= #214 0::int)
151.1137 +#560 := (iff #215 #559)
151.1138 +#561 := [rewrite]: #560
151.1139 +#21 := (- uf_4)
151.1140 +#20 := (< uf_4 0::int)
151.1141 +#22 := (ite #20 #21 uf_4)
151.1142 +#23 := (- #22 uf_1)
151.1143 +#24 := (= uf_5 #23)
151.1144 +#220 := (iff #24 #215)
151.1145 +#180 := (ite #20 #177 uf_4)
151.1146 +#186 := (+ #130 #180)
151.1147 +#191 := (= uf_5 #186)
151.1148 +#218 := (iff #191 #215)
151.1149 +#206 := (+ #130 #201)
151.1150 +#209 := (= uf_5 #206)
151.1151 +#216 := (iff #209 #215)
151.1152 +#217 := [rewrite]: #216
151.1153 +#210 := (iff #191 #209)
151.1154 +#207 := (= #186 #206)
151.1155 +#204 := (= #180 #201)
151.1156 +#198 := (ite #195 #177 uf_4)
151.1157 +#202 := (= #198 #201)
151.1158 +#203 := [rewrite]: #202
151.1159 +#199 := (= #180 #198)
151.1160 +#196 := (iff #20 #195)
151.1161 +#197 := [rewrite]: #196
151.1162 +#200 := [monotonicity #197]: #199
151.1163 +#205 := [trans #200 #203]: #204
151.1164 +#208 := [monotonicity #205]: #207
151.1165 +#211 := [monotonicity #208]: #210
151.1166 +#219 := [trans #211 #217]: #218
151.1167 +#192 := (iff #24 #191)
151.1168 +#189 := (= #23 #186)
151.1169 +#183 := (- #180 uf_1)
151.1170 +#187 := (= #183 #186)
151.1171 +#188 := [rewrite]: #187
151.1172 +#184 := (= #23 #183)
151.1173 +#181 := (= #22 #180)
151.1174 +#178 := (= #21 #177)
151.1175 +#179 := [rewrite]: #178
151.1176 +#182 := [monotonicity #179]: #181
151.1177 +#185 := [monotonicity #182]: #184
151.1178 +#190 := [trans #185 #188]: #189
151.1179 +#193 := [monotonicity #190]: #192
151.1180 +#221 := [trans #193 #219]: #220
151.1181 +#176 := [asserted]: #24
151.1182 +#222 := [mp #176 #221]: #215
151.1183 +#562 := [mp #222 #561]: #559
151.1184 +#564 := [not-or-elim #562]: #555
151.1185 +#724 := [mp~ #564 #723]: #721
151.1186 +#685 := (+ uf_4 #682)
151.1187 +#688 := (+ uf_2 #685)
151.1188 +#695 := (>= #688 0::int)
151.1189 +#154 := (ite #147 uf_1 #130)
151.1190 +#165 := (* -1::int #154)
151.1191 +#166 := (+ uf_4 #165)
151.1192 +#167 := (+ uf_2 #166)
151.1193 +#544 := (>= #167 0::int)
151.1194 +#696 := (= #544 #695)
151.1195 +#689 := (~ #167 #688)
151.1196 +#686 := (~ #166 #685)
151.1197 +#683 := (~ #165 #682)
151.1198 +#680 := (~ #154 z3name!1)
151.1199 +#681 := [apply-def #679]: #680
151.1200 +#684 := [monotonicity #681]: #683
151.1201 +#687 := [monotonicity #684]: #686
151.1202 +#690 := [monotonicity #687]: #689
151.1203 +#697 := [monotonicity #690]: #696
151.1204 +#546 := (not #544)
151.1205 +#543 := (<= #167 0::int)
151.1206 +#545 := (not #543)
151.1207 +#547 := (or #545 #546)
151.1208 +#548 := (not #547)
151.1209 +#168 := (= #167 0::int)
151.1210 +#549 := (iff #168 #548)
151.1211 +#550 := [rewrite]: #549
151.1212 +#15 := (- uf_1)
151.1213 +#14 := (< uf_1 0::int)
151.1214 +#16 := (ite #14 #15 uf_1)
151.1215 +#17 := (- #16 uf_2)
151.1216 +#18 := (= uf_4 #17)
151.1217 +#173 := (iff #18 #168)
151.1218 +#133 := (ite #14 #130 uf_1)
151.1219 +#139 := (+ #82 #133)
151.1220 +#144 := (= uf_4 #139)
151.1221 +#171 := (iff #144 #168)
151.1222 +#159 := (+ #82 #154)
151.1223 +#162 := (= uf_4 #159)
151.1224 +#169 := (iff #162 #168)
151.1225 +#170 := [rewrite]: #169
151.1226 +#163 := (iff #144 #162)
151.1227 +#160 := (= #139 #159)
151.1228 +#157 := (= #133 #154)
151.1229 +#151 := (ite #148 #130 uf_1)
151.1230 +#155 := (= #151 #154)
151.1231 +#156 := [rewrite]: #155
151.1232 +#152 := (= #133 #151)
151.1233 +#149 := (iff #14 #148)
151.1234 +#150 := [rewrite]: #149
151.1235 +#153 := [monotonicity #150]: #152
151.1236 +#158 := [trans #153 #156]: #157
151.1237 +#161 := [monotonicity #158]: #160
151.1238 +#164 := [monotonicity #161]: #163
151.1239 +#172 := [trans #164 #170]: #171
151.1240 +#145 := (iff #18 #144)
151.1241 +#142 := (= #17 #139)
151.1242 +#136 := (- #133 uf_2)
151.1243 +#140 := (= #136 #139)
151.1244 +#141 := [rewrite]: #140
151.1245 +#137 := (= #17 #136)
151.1246 +#134 := (= #16 #133)
151.1247 +#131 := (= #15 #130)
151.1248 +#132 := [rewrite]: #131
151.1249 +#135 := [monotonicity #132]: #134
151.1250 +#138 := [monotonicity #135]: #137
151.1251 +#143 := [trans #138 #141]: #142
151.1252 +#146 := [monotonicity #143]: #145
151.1253 +#174 := [trans #146 #172]: #173
151.1254 +#129 := [asserted]: #18
151.1255 +#175 := [mp #129 #174]: #168
151.1256 +#551 := [mp #175 #550]: #548
151.1257 +#553 := [not-or-elim #551]: #544
151.1258 +#698 := [mp~ #553 #697]: #695
151.1259 +#1373 := (not #721)
151.1260 +#1562 := (or #147 #1373 #961 #241 #195)
151.1261 +#1563 := [th-lemma]: #1562
151.1262 +#1564 := [unit-resolution #1563 #1559 #1557 #724 #1406]: #147
151.1263 +#1565 := [unit-resolution #955 #1564]: #925
151.1264 +#1566 := [unit-resolution #1238 #1565]: #921
151.1265 +#1372 := (not #873)
151.1266 +#1371 := (not #695)
151.1267 +#1498 := (or #516 #923 #1373 #1371 #1372 #1343 #1200 #1075 #1350 #1113 #961 #1151 #1337 #1048 #1357)
151.1268 +#1499 := [th-lemma]: #1498
151.1269 +#1567 := [unit-resolution #1499 #1566 #698 #724 #1545 #772 #1447 #802 #1496 #828 #1554 #854 #1561 #876 #1559]: #516
151.1270 +#1247 := (or #962 #957)
151.1271 +#1248 := [def-axiom]: #1247
151.1272 +#1568 := [unit-resolution #1248 #1558]: #957
151.1273 +#877 := (>= #870 0::int)
151.1274 +#878 := (= #621 #877)
151.1275 +#879 := [monotonicity #872]: #878
151.1276 +#630 := [not-or-elim #628]: #621
151.1277 +#880 := [mp~ #630 #879]: #877
151.1278 +#1327 := (or #1202 #1199)
151.1279 +#1328 := [def-axiom]: #1327
151.1280 +#1569 := [unit-resolution #1328 #1560]: #1199
151.1281 +#795 := (<= #792 0::int)
151.1282 +#796 := (= #587 #795)
151.1283 +#797 := [monotonicity #794]: #796
151.1284 +#596 := [not-or-elim #595]: #587
151.1285 +#798 := [mp~ #596 #797]: #795
151.1286 +#1503 := (or #335 #1049 #241)
151.1287 +#1425 := (or #335 #1049 #241 #1037)
151.1288 +#1422 := [hypothesis]: #336
151.1289 +#1423 := [hypothesis]: #1047
151.1290 +#1424 := [th-lemma #1423 #1422 #776 #1406 #1421]: false
151.1291 +#1426 := [lemma #1424]: #1425
151.1292 +#1504 := [unit-resolution #1426 #1459]: #1503
151.1293 +#1505 := [unit-resolution #1504 #1406 #1468]: #335
151.1294 +#1506 := [unit-resolution #1107 #1505]: #1077
151.1295 +#1283 := (or #1076 #1071)
151.1296 +#1284 := [def-axiom]: #1283
151.1297 +#1507 := [unit-resolution #1284 #1506]: #1071
151.1298 +#717 := (<= #714 0::int)
151.1299 +#718 := (= #554 #717)
151.1300 +#719 := [monotonicity #716]: #718
151.1301 +#563 := [not-or-elim #562]: #554
151.1302 +#720 := [mp~ #563 #719]: #717
151.1303 +#691 := (<= #688 0::int)
151.1304 +#692 := (= #543 #691)
151.1305 +#693 := [monotonicity #690]: #692
151.1306 +#552 := [not-or-elim #551]: #543
151.1307 +#694 := [mp~ #552 #693]: #691
151.1308 +#1235 := (or #924 #919)
151.1309 +#1236 := [def-axiom]: #1235
151.1310 +#1570 := [unit-resolution #1236 #1565]: #919
151.1311 +#1409 := (not #773)
151.1312 +#1489 := (not #847)
151.1313 +#1358 := (not #795)
151.1314 +#1365 := (not #821)
151.1315 +#1511 := (not #877)
151.1316 +#1510 := (not #691)
151.1317 +#1509 := (not #717)
151.1318 +#1512 := (or #515 #922 #1509 #1510 #1511 #1365 #1201 #1074 #1358 #1112 #960 #1150 #1489 #1049 #1409)
151.1319 +#1513 := [th-lemma]: #1512
151.1320 +#1571 := [unit-resolution #1513 #1570 #694 #720 #1468 #776 #1507 #798 #1488 #824 #1552 #850 #1569 #880 #1568]: #515
151.1321 +#506 := (<= #508 0::int)
151.1322 +#659 := (+ uf_3 #656)
151.1323 +#662 := (+ uf_1 #659)
151.1324 +#665 := (<= #662 0::int)
151.1325 +#107 := (ite #100 uf_2 #82)
151.1326 +#118 := (* -1::int #107)
151.1327 +#119 := (+ uf_3 #118)
151.1328 +#120 := (+ uf_1 #119)
151.1329 +#532 := (<= #120 0::int)
151.1330 +#666 := (= #532 #665)
151.1331 +#663 := (~ #120 #662)
151.1332 +#660 := (~ #119 #659)
151.1333 +#657 := (~ #118 #656)
151.1334 +#654 := (~ #107 z3name!0)
151.1335 +#655 := [apply-def #653]: #654
151.1336 +#658 := [monotonicity #655]: #657
151.1337 +#661 := [monotonicity #658]: #660
151.1338 +#664 := [monotonicity #661]: #663
151.1339 +#667 := [monotonicity #664]: #666
151.1340 +#533 := (>= #120 0::int)
151.1341 +#535 := (not #533)
151.1342 +#534 := (not #532)
151.1343 +#536 := (or #534 #535)
151.1344 +#537 := (not #536)
151.1345 +#121 := (= #120 0::int)
151.1346 +#538 := (iff #121 #537)
151.1347 +#539 := [rewrite]: #538
151.1348 +#8 := (- uf_2)
151.1349 +#7 := (< uf_2 0::int)
151.1350 +#9 := (ite #7 #8 uf_2)
151.1351 +#11 := (- #9 uf_3)
151.1352 +#12 := (= uf_1 #11)
151.1353 +#126 := (iff #12 #121)
151.1354 +#85 := (ite #7 #82 uf_2)
151.1355 +#91 := (* -1::int uf_3)
151.1356 +#92 := (+ #91 #85)
151.1357 +#97 := (= uf_1 #92)
151.1358 +#124 := (iff #97 #121)
151.1359 +#112 := (+ #91 #107)
151.1360 +#115 := (= uf_1 #112)
151.1361 +#122 := (iff #115 #121)
151.1362 +#123 := [rewrite]: #122
151.1363 +#116 := (iff #97 #115)
151.1364 +#113 := (= #92 #112)
151.1365 +#110 := (= #85 #107)
151.1366 +#104 := (ite #101 #82 uf_2)
151.1367 +#108 := (= #104 #107)
151.1368 +#109 := [rewrite]: #108
151.1369 +#105 := (= #85 #104)
151.1370 +#102 := (iff #7 #101)
151.1371 +#103 := [rewrite]: #102
151.1372 +#106 := [monotonicity #103]: #105
151.1373 +#111 := [trans #106 #109]: #110
151.1374 +#114 := [monotonicity #111]: #113
151.1375 +#117 := [monotonicity #114]: #116
151.1376 +#125 := [trans #117 #123]: #124
151.1377 +#98 := (iff #12 #97)
151.1378 +#95 := (= #11 #92)
151.1379 +#88 := (- #85 uf_3)
151.1380 +#93 := (= #88 #92)
151.1381 +#94 := [rewrite]: #93
151.1382 +#89 := (= #11 #88)
151.1383 +#86 := (= #9 #85)
151.1384 +#83 := (= #8 #82)
151.1385 +#84 := [rewrite]: #83
151.1386 +#87 := [monotonicity #84]: #86
151.1387 +#90 := [monotonicity #87]: #89
151.1388 +#96 := [trans #90 #94]: #95
151.1389 +#99 := [monotonicity #96]: #98
151.1390 +#127 := [trans #99 #125]: #126
151.1391 +#80 := [asserted]: #12
151.1392 +#128 := [mp #80 #127]: #121
151.1393 +#540 := [mp #128 #539]: #537
151.1394 +#541 := [not-or-elim #540]: #532
151.1395 +#668 := [mp~ #541 #667]: #665
151.1396 +#1515 := (or #100 #241 #923 #1373 #1371 #961)
151.1397 +#1516 := [th-lemma]: #1515
151.1398 +#1572 := [unit-resolution #1516 #1566 #698 #1559 #724 #1406]: #100
151.1399 +#1573 := [unit-resolution #917 #1572]: #887
151.1400 +#1223 := (or #886 #881)
151.1401 +#1224 := [def-axiom]: #1223
151.1402 +#1574 := [unit-resolution #1224 #1573]: #881
151.1403 +#1528 := (not #665)
151.1404 +#1529 := (or #506 #884 #1528 #1364 #1011 #1343 #1113 #1151 #1337 #1048 #1357 #922 #1510)
151.1405 +#1530 := [th-lemma]: #1529
151.1406 +#1575 := [unit-resolution #1530 #1574 #668 #694 #1404 #750 #1545 #772 #1496 #828 #1554 #854 #1570]: #506
151.1407 +#743 := (<= #740 0::int)
151.1408 +#744 := (= #565 #743)
151.1409 +#745 := [monotonicity #742]: #744
151.1410 +#574 := [not-or-elim #573]: #565
151.1411 +#746 := [mp~ #574 #745]: #743
151.1412 +#1520 := [unit-resolution #1032 #1406]: #1013
151.1413 +#1265 := (or #1012 #1008)
151.1414 +#1266 := [def-axiom]: #1265
151.1415 +#1521 := [unit-resolution #1266 #1520]: #1008
151.1416 +#669 := (>= #662 0::int)
151.1417 +#670 := (= #533 #669)
151.1418 +#671 := [monotonicity #664]: #670
151.1419 +#542 := [not-or-elim #540]: #533
151.1420 +#672 := [mp~ #542 #671]: #669
151.1421 +#1576 := [unit-resolution #1226 #1573]: #883
151.1422 +#1523 := (not #743)
151.1423 +#1522 := (not #669)
151.1424 +#1524 := (or #509 #885 #1522 #1523 #1010 #1365 #1112 #1150 #1489 #1049 #1409 #923 #1371)
151.1425 +#1525 := [th-lemma]: #1524
151.1426 +#1577 := [unit-resolution #1525 #1576 #672 #698 #1521 #746 #1468 #776 #1488 #824 #1552 #850 #1566]: #509
151.1427 +#634 := (not #516)
151.1428 +#633 := (not #515)
151.1429 +#632 := (not #509)
151.1430 +#631 := (not #506)
151.1431 +#635 := (or #631 #632 #633 #634)
151.1432 +#523 := (and #506 #509 #515 #516)
151.1433 +#528 := (not #523)
151.1434 +#644 := (iff #528 #635)
151.1435 +#636 := (not #635)
151.1436 +#639 := (not #636)
151.1437 +#642 := (iff #639 #635)
151.1438 +#643 := [rewrite]: #642
151.1439 +#640 := (iff #528 #639)
151.1440 +#637 := (iff #523 #636)
151.1441 +#638 := [rewrite]: #637
151.1442 +#641 := [monotonicity #638]: #640
151.1443 +#645 := [trans #641 #643]: #644
151.1444 +#62 := (= uf_2 uf_11)
151.1445 +#61 := (= uf_3 uf_10)
151.1446 +#63 := (and #61 #62)
151.1447 +#64 := (not #63)
151.1448 +#529 := (iff #64 #528)
151.1449 +#526 := (iff #63 #523)
151.1450 +#517 := (and #515 #516)
151.1451 +#510 := (and #506 #509)
151.1452 +#520 := (and #510 #517)
151.1453 +#524 := (iff #520 #523)
151.1454 +#525 := [rewrite]: #524
151.1455 +#521 := (iff #63 #520)
151.1456 +#518 := (iff #62 #517)
151.1457 +#519 := [rewrite]: #518
151.1458 +#511 := (iff #61 #510)
151.1459 +#512 := [rewrite]: #511
151.1460 +#522 := [monotonicity #512 #519]: #521
151.1461 +#527 := [trans #522 #525]: #526
151.1462 +#530 := [monotonicity #527]: #529
151.1463 +#505 := [asserted]: #64
151.1464 +#531 := [mp #505 #530]: #528
151.1465 +#646 := [mp #531 #645]: #635
151.1466 +#1578 := [unit-resolution #646 #1577 #1575 #1571 #1567]: false
151.1467 +#1580 := [lemma #1578]: #1579
151.1468 +#1657 := [unit-resolution #1580 #1406]: #1048
151.1469 +#1625 := (or #194 #241)
151.1470 +#1535 := [hypothesis]: #195
151.1471 +#1538 := (or #194 #960)
151.1472 +#1432 := [hypothesis]: #973
151.1473 +#1255 := (or #974 #971)
151.1474 +#1256 := [def-axiom]: #1255
151.1475 +#1433 := [unit-resolution #1256 #1432]: #974
151.1476 +#994 := [not-or-elim #992]: #978
151.1477 +#1434 := [unit-resolution #994 #1433]: #194
151.1478 +#1435 := [unit-resolution #993 #1434]: #963
151.1479 +#1436 := (or #971 #195 #961)
151.1480 +#1437 := [th-lemma]: #1436
151.1481 +#1438 := [unit-resolution #1437 #1434 #1432]: #961
151.1482 +#1439 := [unit-resolution #1250 #1438 #1435]: false
151.1483 +#1440 := [lemma #1439]: #971
151.1484 +#1536 := [hypothesis]: #957
151.1485 +#1537 := [th-lemma #1536 #1535 #1440]: false
151.1486 +#1539 := [lemma #1537]: #1538
151.1487 +#1581 := [unit-resolution #1539 #1535]: #960
151.1488 +#1582 := (or #959 #957)
151.1489 +#1583 := [th-lemma]: #1582
151.1490 +#1584 := [unit-resolution #1583 #1581]: #959
151.1491 +#1585 := (or #147 #1373 #241 #194 #973)
151.1492 +#1586 := [th-lemma]: #1585
151.1493 +#1587 := [unit-resolution #1586 #1535 #1440 #724 #1406]: #147
151.1494 +#1588 := [unit-resolution #955 #1587]: #925
151.1495 +#1589 := [unit-resolution #1238 #1588]: #921
151.1496 +#1590 := [unit-resolution #1516 #1589 #698 #1584 #724 #1406]: #100
151.1497 +#1591 := [unit-resolution #917 #1590]: #887
151.1498 +#1592 := [unit-resolution #1224 #1591]: #881
151.1499 +#1593 := (or #430 #1365 #1074 #1358 #1112 #194 #1364 #1011 #241)
151.1500 +#1594 := [th-lemma]: #1593
151.1501 +#1595 := [unit-resolution #1594 #1535 #1404 #750 #1507 #798 #1488 #824 #1406]: #430
151.1502 +#1184 := [not-or-elim #1182]: #1168
151.1503 +#1596 := [unit-resolution #1184 #1595]: #1165
151.1504 +#1315 := (or #1164 #1161)
151.1505 +#1316 := [def-axiom]: #1315
151.1506 +#1597 := [unit-resolution #1316 #1596]: #1161
151.1507 +#1533 := (or #288 #241)
151.1508 +#1471 := (or #194 #288 #241)
151.1509 +#1469 := (or #194 #288 #241 #1364 #1011)
151.1510 +#1470 := [th-lemma]: #1469
151.1511 +#1472 := [unit-resolution #1470 #1404 #750]: #1471
151.1512 +#1473 := [unit-resolution #1472 #1405 #1406]: #194
151.1513 +#1474 := [unit-resolution #993 #1473]: #963
151.1514 +#1475 := [unit-resolution #1250 #1474]: #959
151.1515 +#1476 := (or #147 #1373 #1364 #1011 #961 #241 #288)
151.1516 +#1477 := [th-lemma]: #1476
151.1517 +#1478 := [unit-resolution #1477 #1475 #724 #1406 #1404 #750 #1405]: #147
151.1518 +#1479 := [unit-resolution #955 #1478]: #925
151.1519 +#1480 := [unit-resolution #1238 #1479]: #921
151.1520 +#1419 := (or #288 #241 #429)
151.1521 +#1333 := [hypothesis]: #430
151.1522 +#1408 := [unit-resolution #1280 #1407]: #1047
151.1523 +#1410 := (or #335 #1049 #1409 #288 #241)
151.1524 +#1411 := [th-lemma]: #1410
151.1525 +#1412 := [unit-resolution #1411 #1405 #1408 #776 #1406]: #335
151.1526 +#1413 := [unit-resolution #1107 #1412]: #1077
151.1527 +#1414 := [unit-resolution #1286 #1413]: #1073
151.1528 +#1415 := [unit-resolution #1352 #1414 #802 #1405 #828 #1333]: #1113
151.1529 +#1416 := [unit-resolution #1298 #1415]: #1114
151.1530 +#1417 := [unit-resolution #1145 #1416]: #383
151.1531 +#1418 := [th-lemma #1414 #802 #1405 #1408 #776 #1406 #1417]: false
151.1532 +#1420 := [lemma #1418]: #1419
151.1533 +#1481 := [unit-resolution #1420 #1405 #1406]: #429
151.1534 +#1482 := [unit-resolution #1183 #1481]: #1153
151.1535 +#1483 := [unit-resolution #1308 #1482]: #1147
151.1536 +#1490 := (or #477 #1150 #1489 #1365 #1112 #1049 #241 #1409 #288)
151.1537 +#1491 := [th-lemma]: #1490
151.1538 +#1492 := [unit-resolution #1491 #1405 #1468 #776 #1488 #824 #1483 #850 #1406]: #477
151.1539 +#1493 := [unit-resolution #1222 #1492]: #1203
151.1540 +#1494 := [unit-resolution #1326 #1493]: #1198
151.1541 +#1495 := [unit-resolution #1310 #1482]: #1149
151.1542 +#1500 := [unit-resolution #1499 #1475 #698 #724 #1497 #772 #1447 #802 #1496 #828 #1495 #854 #1494 #876 #1480]: #516
151.1543 +#1501 := [unit-resolution #1236 #1479]: #919
151.1544 +#1502 := [unit-resolution #1328 #1493]: #1199
151.1545 +#1508 := [unit-resolution #1248 #1474]: #957
151.1546 +#1514 := [unit-resolution #1513 #1508 #694 #720 #1468 #776 #1507 #798 #1488 #824 #1483 #850 #1502 #880 #1501]: #515
151.1547 +#1517 := [unit-resolution #1516 #1480 #698 #1475 #724 #1406]: #100
151.1548 +#1518 := [unit-resolution #917 #1517]: #887
151.1549 +#1519 := [unit-resolution #1226 #1518]: #883
151.1550 +#1526 := [unit-resolution #1525 #1480 #672 #698 #1521 #746 #1468 #776 #1488 #824 #1483 #850 #1519]: #509
151.1551 +#1527 := [unit-resolution #1224 #1518]: #881
151.1552 +#1531 := [unit-resolution #1530 #1501 #668 #694 #1404 #750 #1497 #772 #1496 #828 #1495 #854 #1527]: #506
151.1553 +#1532 := [unit-resolution #646 #1531 #1526 #1514 #1500]: false
151.1554 +#1534 := [lemma #1532]: #1533
151.1555 +#1598 := [unit-resolution #1534 #1406]: #288
151.1556 +#1599 := [unit-resolution #1069 #1598]: #1039
151.1557 +#1271 := (or #1038 #1033)
151.1558 +#1272 := [def-axiom]: #1271
151.1559 +#1600 := [unit-resolution #1272 #1599]: #1033
151.1560 +#1601 := [unit-resolution #1236 #1588]: #919
151.1561 +#1602 := (or #506 #884 #1528 #1364 #1011 #1365 #1112 #1337 #1357 #922 #1510 #1036 #1163 #1074 #1358)
151.1562 +#1603 := [th-lemma]: #1602
151.1563 +#1604 := [unit-resolution #1603 #1601 #668 #694 #1404 #750 #1600 #772 #1507 #798 #1488 #824 #1597 #854 #1592]: #506
151.1564 +#1605 := [unit-resolution #1226 #1591]: #883
151.1565 +#1313 := (or #1164 #1160)
151.1566 +#1314 := [def-axiom]: #1313
151.1567 +#1606 := [unit-resolution #1314 #1596]: #1160
151.1568 +#1607 := (or #509 #885 #1522 #1523 #1010 #1343 #1113 #1489 #1409 #923 #1371 #1037 #1162 #1075 #1350)
151.1569 +#1608 := [th-lemma]: #1607
151.1570 +#1609 := [unit-resolution #1608 #1589 #672 #698 #1521 #746 #1459 #776 #1447 #802 #1496 #828 #1606 #850 #1605]: #509
151.1571 +#1610 := (or #476 #1036 #1337 #1365 #1112 #1357 #194 #1364 #1011 #1163 #1074 #1358)
151.1572 +#1611 := [th-lemma]: #1610
151.1573 +#1612 := [unit-resolution #1611 #1597 #750 #1600 #772 #1507 #798 #1488 #824 #1404 #854 #1535]: #476
151.1574 +#1221 := [not-or-elim #1220]: #1194
151.1575 +#1613 := [unit-resolution #1221 #1612]: #1191
151.1576 +#1319 := (or #1190 #1185)
151.1577 +#1320 := [def-axiom]: #1319
151.1578 +#1614 := [unit-resolution #1320 #1613]: #1185
151.1579 +#1615 := (or #516 #923 #1373 #1371 #1372 #1075 #1350 #1489 #1409 #1037 #973 #1162 #1188 #1343 #1113 #1523 #1010)
151.1580 +#1616 := [th-lemma]: #1615
151.1581 +#1617 := [unit-resolution #1616 #1606 #1440 #724 #1521 #746 #1459 #776 #1447 #802 #1496 #828 #698 #850 #1614 #876 #1589]: #516
151.1582 +#1321 := (or #1190 #1187)
151.1583 +#1322 := [def-axiom]: #1321
151.1584 +#1618 := [unit-resolution #1322 #1613]: #1187
151.1585 +#1619 := [unit-resolution #994 #1535]: #975
151.1586 +#1253 := (or #974 #970)
151.1587 +#1254 := [def-axiom]: #1253
151.1588 +#1620 := [unit-resolution #1254 #1619]: #970
151.1589 +#1621 := (or #515 #922 #1509 #1510 #1511 #1074 #1358 #1337 #1357 #1036 #972 #1163 #1189 #1365 #1112 #1364 #1011)
151.1590 +#1622 := [th-lemma]: #1621
151.1591 +#1623 := [unit-resolution #1622 #1620 #694 #720 #1404 #750 #1600 #772 #1507 #798 #1488 #824 #1597 #854 #1618 #880 #1601]: #515
151.1592 +#1624 := [unit-resolution #646 #1623 #1617 #1609 #1604]: false
151.1593 +#1626 := [lemma #1624]: #1625
151.1594 +#1658 := [unit-resolution #1626 #1406]: #194
151.1595 +#1659 := [unit-resolution #993 #1658]: #963
151.1596 +#1660 := [unit-resolution #1250 #1659]: #959
151.1597 +#1661 := [unit-resolution #1563 #1660 #1658 #724 #1406]: #147
151.1598 +#1662 := [unit-resolution #955 #1661]: #925
151.1599 +#1663 := [unit-resolution #1238 #1662]: #921
151.1600 +#1664 := [unit-resolution #1516 #1663 #698 #1660 #724 #1406]: #100
151.1601 +#1665 := [unit-resolution #917 #1664]: #887
151.1602 +#1666 := [unit-resolution #1226 #1665]: #883
151.1603 +#1667 := [unit-resolution #1224 #1665]: #881
151.1604 +#1668 := [unit-resolution #1236 #1662]: #919
151.1605 +#1669 := [unit-resolution #1248 #1659]: #957
151.1606 +#1655 := (or #429 #1113 #1010 #960 #1036 #1074 #1112 #922 #923 #884 #885)
151.1607 +#1632 := [hypothesis]: #919
151.1608 +#1636 := [hypothesis]: #881
151.1609 +#1638 := [hypothesis]: #1071
151.1610 +#1639 := [hypothesis]: #1033
151.1611 +#1334 := [unit-resolution #1184 #1333]: #1165
151.1612 +#1335 := [unit-resolution #1316 #1334]: #1161
151.1613 +#1640 := [unit-resolution #1603 #1335 #668 #694 #1404 #750 #1639 #772 #1638 #798 #1637 #824 #1632 #854 #1636]: #506
151.1614 +#1641 := [hypothesis]: #883
151.1615 +#1642 := [hypothesis]: #921
151.1616 +#1643 := [hypothesis]: #1111
151.1617 +#1644 := [hypothesis]: #1008
151.1618 +#1631 := [unit-resolution #1314 #1334]: #1160
151.1619 +#1645 := [unit-resolution #1608 #1631 #672 #698 #1644 #746 #1459 #776 #1447 #802 #1643 #828 #1642 #850 #1641]: #509
151.1620 +#1634 := (or #1202 #922 #960 #632 #631 #429)
151.1621 +#1627 := [hypothesis]: #506
151.1622 +#1628 := [hypothesis]: #509
151.1623 +#1384 := [hypothesis]: #1203
151.1624 +#1396 := (or #1202 #516 #429)
151.1625 +#1331 := [hypothesis]: #634
151.1626 +#1385 := [unit-resolution #1326 #1384]: #1198
151.1627 +#1382 := (or #1189 #1200 #516 #429)
151.1628 +#1332 := [hypothesis]: #1198
151.1629 +#1336 := [hypothesis]: #1187
151.1630 +#1338 := (or #382 #1189 #1337 #429 #1163 #1200)
151.1631 +#1339 := [th-lemma]: #1338
151.1632 +#1340 := [unit-resolution #1339 #1336 #1335 #854 #1333 #1332]: #382
151.1633 +#1341 := [unit-resolution #1145 #1340]: #1115
151.1634 +#1342 := [unit-resolution #1298 #1341]: #1111
151.1635 +#1344 := (or #335 #1113 #429 #1343 #1189 #1337 #1163 #1200)
151.1636 +#1345 := [th-lemma]: #1344
151.1637 +#1346 := [unit-resolution #1345 #1342 #828 #1333 #1335 #854 #1336 #1332]: #335
151.1638 +#1347 := [unit-resolution #1107 #1346]: #1077
151.1639 +#1348 := [unit-resolution #1284 #1347]: #1071
151.1640 +#1349 := [unit-resolution #1286 #1347]: #1073
151.1641 +#1353 := [unit-resolution #1352 #1349 #802 #1342 #828 #1333]: #288
151.1642 +#1354 := [unit-resolution #1069 #1353]: #1039
151.1643 +#1355 := [unit-resolution #1272 #1354]: #1033
151.1644 +#1356 := [unit-resolution #1296 #1341]: #1109
151.1645 +#1359 := (or #242 #1036 #1357 #429 #1189 #1337 #1163 #1200 #1074 #1358)
151.1646 +#1360 := [th-lemma]: #1359
151.1647 +#1361 := [unit-resolution #1360 #1355 #772 #1348 #798 #1333 #1335 #854 #1336 #1332]: #242
151.1648 +#1362 := [unit-resolution #1032 #1361]: #1013
151.1649 +#1363 := [unit-resolution #1268 #1362]: #1009
151.1650 +#1366 := (or #194 #1011 #1364 #1074 #1358 #1112 #1365 #1036 #1357 #1189 #1337 #1163 #1200)
151.1651 +#1367 := [th-lemma]: #1366
151.1652 +#1368 := [unit-resolution #1367 #1363 #750 #1355 #772 #1348 #798 #1356 #824 #1335 #854 #1336 #1332]: #194
151.1653 +#1369 := [unit-resolution #993 #1368]: #963
151.1654 +#1370 := [unit-resolution #1250 #1369]: #959
151.1655 +#1374 := (or #923 #1371 #516 #1372 #1200 #961 #1373 #1036 #1357 #1337 #1163 #1074 #1358)
151.1656 +#1375 := [th-lemma]: #1374
151.1657 +#1376 := [unit-resolution #1375 #1370 #698 #724 #1355 #772 #1348 #798 #1335 #854 #1332 #876 #1331]: #923
151.1658 +#1377 := (or #147 #195 #961 #1373 #1036 #1357 #429 #1189 #1337 #1163 #1200 #1074 #1358)
151.1659 +#1378 := [th-lemma]: #1377
151.1660 +#1379 := [unit-resolution #1378 #1368 #1370 #724 #1355 #772 #1348 #798 #1333 #1335 #854 #1336 #1332]: #147
151.1661 +#1380 := [unit-resolution #955 #1379]: #925
151.1662 +#1381 := [unit-resolution #1238 #1380 #1376]: false
151.1663 +#1383 := [lemma #1381]: #1382
151.1664 +#1386 := [unit-resolution #1383 #1385 #1331 #1333]: #1189
151.1665 +#1387 := [unit-resolution #1322 #1386]: #1190
151.1666 +#1388 := [unit-resolution #1328 #1384]: #1199
151.1667 +#1389 := (or #1187 #1185)
151.1668 +#1390 := [th-lemma]: #1389
151.1669 +#1391 := [unit-resolution #1390 #1386]: #1185
151.1670 +#1392 := (or #476 #1188 #1201)
151.1671 +#1393 := [th-lemma]: #1392
151.1672 +#1394 := [unit-resolution #1393 #1391 #1388]: #476
151.1673 +#1395 := [unit-resolution #1221 #1394 #1387]: false
151.1674 +#1397 := [lemma #1395]: #1396
151.1675 +#1629 := [unit-resolution #1397 #1384 #1333]: #516
151.1676 +#1630 := [unit-resolution #646 #1629 #1628 #1627]: #633
151.1677 +#1633 := [th-lemma #1632 #720 #694 #880 #1447 #802 #850 #776 #1459 #1631 #1536 #1388 #1630]: false
151.1678 +#1635 := [lemma #1633]: #1634
151.1679 +#1646 := [unit-resolution #1635 #1645 #1536 #1632 #1640 #1333]: #1202
151.1680 +#1647 := [unit-resolution #1222 #1646]: #476
151.1681 +#1648 := [unit-resolution #1221 #1647]: #1191
151.1682 +#1649 := [unit-resolution #1322 #1648]: #1187
151.1683 +#1650 := [unit-resolution #1320 #1648]: #1185
151.1684 +#1651 := [unit-resolution #1616 #1650 #1440 #724 #1644 #746 #1459 #776 #1447 #802 #1643 #828 #698 #850 #1631 #876 #1642]: #516
151.1685 +#1652 := [unit-resolution #646 #1651 #1645 #1640]: #633
151.1686 +#1653 := [unit-resolution #1622 #1652 #694 #720 #1404 #750 #1639 #772 #1638 #798 #1637 #824 #1335 #854 #1649 #880 #1632]: #972
151.1687 +#1654 := [th-lemma #1459 #1647 #850 #828 #1643 #776 #746 #1644 #1631 #1447 #802 #1536 #1653]: false
151.1688 +#1656 := [lemma #1654]: #1655
151.1689 +#1670 := [unit-resolution #1656 #1496 #1521 #1669 #1600 #1507 #1488 #1668 #1663 #1667 #1666]: #429
151.1690 +#1671 := [th-lemma #1600 #1670 #824 #1507 #798 #1488 #1657]: false
151.1691 +#1672 := [lemma #1671]: #241
151.1692 +#1683 := [unit-resolution #1031 #1672]: #1001
151.1693 +#1703 := [unit-resolution #1262 #1683]: #997
151.1694 +#1920 := (or #194 #242 #1364 #999 #288)
151.1695 +#1921 := [th-lemma]: #1920
151.1696 +#1922 := [unit-resolution #1921 #1405 #1703 #750 #1672]: #194
151.1697 +#1923 := [unit-resolution #993 #1922]: #963
151.1698 +#1924 := [unit-resolution #1248 #1923]: #957
151.1699 +#1925 := [unit-resolution #1250 #1923]: #959
151.1700 +#1843 := (or #288 #961 #147)
151.1701 +#1763 := [hypothesis]: #148
151.1702 +#1828 := [hypothesis]: #959
151.1703 +#1842 := [th-lemma #724 #750 #1703 #1828 #1405 #1763]: false
151.1704 +#1844 := [lemma #1842]: #1843
151.1705 +#1926 := [unit-resolution #1844 #1925 #1405]: #147
151.1706 +#1927 := [unit-resolution #955 #1926]: #925
151.1707 +#1928 := [unit-resolution #1236 #1927]: #919
151.1708 +#2116 := [unit-resolution #1310 #2047]: #1149
151.1709 +#2084 := (or #288 #516)
151.1710 +#2050 := (or #288 #961 #516)
151.1711 +#2037 := [hypothesis]: #1087
151.1712 +#2038 := [unit-resolution #1292 #2037]: #1088
151.1713 +#2041 := (or #1085 #336)
151.1714 +#2039 := (or #1085 #1075 #336)
151.1715 +#2040 := [th-lemma]: #2039
151.1716 +#2042 := [unit-resolution #2040 #1447]: #2041
151.1717 +#2043 := [unit-resolution #2042 #2037]: #336
151.1718 +#2044 := [unit-resolution #1108 #2043 #2038]: false
151.1719 +#2045 := [lemma #2044]: #1085
151.1720 +#2035 := (or #1087 #1150 #961 #1048 #516)
151.1721 +#1845 := [hypothesis]: #1085
151.1722 +#1874 := [hypothesis]: #477
151.1723 +#1901 := (or #335 #476)
151.1724 +#1895 := [unit-resolution #1222 #1874]: #1203
151.1725 +#1896 := [unit-resolution #1326 #1895]: #1198
151.1726 +#1893 := (or #429 #1200)
151.1727 +#1880 := (or #335 #1113 #429 #1163 #1200)
151.1728 +#1857 := [hypothesis]: #1189
151.1729 +#1858 := [unit-resolution #1322 #1857]: #1190
151.1730 +#1859 := [unit-resolution #1221 #1858]: #477
151.1731 +#1860 := [unit-resolution #1222 #1859]: #1203
151.1732 +#1861 := [unit-resolution #1390 #1857]: #1185
151.1733 +#1862 := [unit-resolution #1393 #1859 #1861]: #1201
151.1734 +#1863 := [unit-resolution #1328 #1862 #1860]: false
151.1735 +#1864 := [lemma #1863]: #1187
151.1736 +#1878 := (or #335 #1113 #429 #1189 #1163 #1200)
151.1737 +#1879 := [unit-resolution #1345 #828 #854]: #1878
151.1738 +#1881 := [unit-resolution #1879 #1864]: #1880
151.1739 +#1882 := [unit-resolution #1881 #1335 #1870 #1333 #1332]: #335
151.1740 +#1883 := [unit-resolution #1107 #1882]: #1077
151.1741 +#1884 := [unit-resolution #1689 #1333 #1870]: #288
151.1742 +#1885 := [unit-resolution #1069 #1884]: #1039
151.1743 +#1886 := [unit-resolution #1272 #1885]: #1033
151.1744 +#1889 := (or #1036 #429 #1163 #1200 #1074)
151.1745 +#1887 := (or #242 #1036 #429 #1189 #1163 #1200 #1074)
151.1746 +#1888 := [unit-resolution #1360 #772 #798 #854]: #1887
151.1747 +#1890 := [unit-resolution #1888 #1672 #1864]: #1889
151.1748 +#1891 := [unit-resolution #1890 #1886 #1332 #1333 #1335]: #1074
151.1749 +#1892 := [unit-resolution #1284 #1891 #1883]: false
151.1750 +#1894 := [lemma #1892]: #1893
151.1751 +#1897 := [unit-resolution #1894 #1896]: #429
151.1752 +#1898 := [unit-resolution #1183 #1897]: #1153
151.1753 +#1899 := [unit-resolution #1310 #1898]: #1149
151.1754 +#1900 := [th-lemma #854 #1899 #1870 #828 #1422 #1874]: false
151.1755 +#1902 := [lemma #1900]: #1901
151.1756 +#1950 := [unit-resolution #1902 #1874]: #335
151.1757 +#1951 := [unit-resolution #1107 #1950]: #1077
151.1758 +#1952 := [unit-resolution #1284 #1951]: #1071
151.1759 +#1953 := [unit-resolution #1328 #1895]: #1199
151.1760 +#1876 := (or #1109 #476)
151.1761 +#1673 := [hypothesis]: #1112
151.1762 +#1760 := (or #429 #1109)
151.1763 +#1674 := [unit-resolution #1296 #1673]: #1114
151.1764 +#1675 := [unit-resolution #1145 #1674]: #383
151.1765 +#1676 := [unit-resolution #1146 #1675]: #1127
151.1766 +#1677 := [unit-resolution #1304 #1676]: #1123
151.1767 +#1687 := [unit-resolution #1686 #1673]: #1111
151.1768 +#1743 := [unit-resolution #1689 #1333 #1687]: #288
151.1769 +#1744 := [unit-resolution #1069 #1743]: #1039
151.1770 +#1745 := [unit-resolution #1272 #1744]: #1033
151.1771 +#1678 := (or #335 #1343 #429 #382 #1125)
151.1772 +#1679 := [th-lemma]: #1678
151.1773 +#1746 := [unit-resolution #1679 #1333 #1675 #828 #1677]: #335
151.1774 +#1747 := [unit-resolution #1107 #1746]: #1077
151.1775 +#1748 := [unit-resolution #1284 #1747]: #1071
151.1776 +#1259 := (or #1000 #995)
151.1777 +#1260 := [def-axiom]: #1259
151.1778 +#1684 := [unit-resolution #1260 #1683]: #995
151.1779 +#1693 := (or #147 #1373 #1343 #1074 #1358 #1523 #429 #973 #998 #1036 #1357 #1125)
151.1780 +#1694 := [th-lemma]: #1693
151.1781 +#1749 := [unit-resolution #1694 #1745 #724 #1684 #746 #1440 #772 #1748 #798 #1677 #828 #1333]: #147
151.1782 +#1750 := [unit-resolution #955 #1749]: #925
151.1783 +#1751 := [unit-resolution #1238 #1750]: #921
151.1784 +#1714 := (or #100 #923 #1373 #1371 #1343 #1523 #1074 #1358 #973 #429 #382 #1036 #1357 #998 #1125)
151.1785 +#1715 := [th-lemma]: #1714
151.1786 +#1752 := [unit-resolution #1715 #1751 #698 #1440 #724 #1684 #746 #1675 #772 #1748 #798 #1745 #1677 #828 #1333]: #100
151.1787 +#1753 := [unit-resolution #1236 #1750]: #919
151.1788 +#1727 := (or #1109 #429 #972)
151.1789 +#1680 := [unit-resolution #1679 #1675 #1677 #828 #1333]: #335
151.1790 +#1681 := [unit-resolution #1107 #1680]: #1077
151.1791 +#1682 := [unit-resolution #1284 #1681]: #1071
151.1792 +#1690 := [unit-resolution #1689 #1687 #1333]: #288
151.1793 +#1691 := [unit-resolution #1069 #1690]: #1039
151.1794 +#1692 := [unit-resolution #1272 #1691]: #1033
151.1795 +#1695 := [unit-resolution #1694 #1692 #724 #1684 #746 #1440 #772 #1682 #798 #1677 #828 #1333]: #147
151.1796 +#1696 := [unit-resolution #955 #1695]: #925
151.1797 +#1697 := [unit-resolution #1236 #1696]: #919
151.1798 +#1698 := (or #476 #429 #1337 #1163 #382)
151.1799 +#1699 := [th-lemma]: #1698
151.1800 +#1700 := [unit-resolution #1699 #1675 #1335 #854 #1333]: #476
151.1801 +#1701 := [unit-resolution #1221 #1700]: #1191
151.1802 +#1702 := [unit-resolution #1322 #1701]: #1187
151.1803 +#1704 := [hypothesis]: #970
151.1804 +#1301 := (or #1126 #1122)
151.1805 +#1302 := [def-axiom]: #1301
151.1806 +#1705 := [unit-resolution #1302 #1676]: #1122
151.1807 +#1706 := (or #515 #922 #1509 #1510 #1511 #1075 #1350 #1337 #1409 #1037 #1163 #1365 #1364 #972 #999 #1124 #1189)
151.1808 +#1707 := [th-lemma]: #1706
151.1809 +#1708 := [unit-resolution #1707 #1705 #1704 #720 #1703 #750 #1459 #776 #1447 #802 #694 #824 #1335 #854 #1702 #880 #1697]: #515
151.1810 +#1709 := [unit-resolution #1238 #1696]: #921
151.1811 +#1710 := [unit-resolution #1320 #1701]: #1185
151.1812 +#1711 := (or #516 #923 #1373 #1371 #1372 #1074 #1358 #1489 #1357 #1036 #1162 #1343 #1523 #973 #998 #1125 #1188)
151.1813 +#1712 := [th-lemma]: #1711
151.1814 +#1713 := [unit-resolution #1712 #1692 #1440 #724 #1684 #746 #698 #772 #1682 #798 #1677 #828 #1631 #850 #1710 #876 #1709]: #516
151.1815 +#1716 := [unit-resolution #1715 #1709 #698 #1440 #724 #1684 #746 #1692 #772 #1682 #798 #1675 #1677 #828 #1333]: #100
151.1816 +#1717 := [unit-resolution #917 #1716]: #887
151.1817 +#1718 := [unit-resolution #1226 #1717]: #883
151.1818 +#1719 := (or #509 #885 #1522 #1523 #1343 #1489 #1357 #923 #1371 #1036 #1162 #998 #1125)
151.1819 +#1720 := [th-lemma]: #1719
151.1820 +#1721 := [unit-resolution #1720 #1709 #672 #698 #1684 #746 #1692 #772 #1677 #828 #1631 #850 #1718]: #509
151.1821 +#1722 := [unit-resolution #1224 #1717]: #881
151.1822 +#1723 := (or #506 #884 #1528 #1364 #1365 #1337 #1409 #922 #1510 #1037 #1163 #999 #1124)
151.1823 +#1724 := [th-lemma]: #1723
151.1824 +#1725 := [unit-resolution #1724 #1697 #668 #694 #1703 #750 #1459 #776 #1705 #824 #1335 #854 #1722]: #506
151.1825 +#1726 := [unit-resolution #646 #1725 #1721 #1713 #1708]: false
151.1826 +#1728 := [lemma #1726]: #1727
151.1827 +#1754 := [unit-resolution #1728 #1333 #1673]: #972
151.1828 +#1755 := [unit-resolution #1254 #1754]: #974
151.1829 +#1756 := [unit-resolution #994 #1755]: #194
151.1830 +#1757 := [unit-resolution #993 #1756]: #963
151.1831 +#1758 := [unit-resolution #1248 #1757]: #957
151.1832 +#1759 := [th-lemma #1758 #1753 #720 #694 #1675 #1459 #776 #1447 #802 #1752]: false
151.1833 +#1761 := [lemma #1759]: #1760
151.1834 +#1871 := [unit-resolution #1761 #1673]: #429
151.1835 +#1872 := [unit-resolution #1183 #1871]: #1153
151.1836 +#1873 := [unit-resolution #1310 #1872]: #1149
151.1837 +#1875 := [th-lemma #1675 #1874 #854 #1873 #1871]: false
151.1838 +#1877 := [lemma #1875]: #1876
151.1839 +#1954 := [unit-resolution #1877 #1874]: #1109
151.1840 +#1948 := (or #288 #1112 #1200 #1201 #1074)
151.1841 +#1917 := [unit-resolution #1894 #1332]: #429
151.1842 +#1918 := [unit-resolution #1183 #1917]: #1153
151.1843 +#1919 := [unit-resolution #1308 #1918]: #1147
151.1844 +#1929 := [unit-resolution #1310 #1918]: #1149
151.1845 +#1930 := [unit-resolution #1238 #1927]: #921
151.1846 +#1931 := [hypothesis]: #1199
151.1847 +#1932 := (or #515 #922 #1201 #1074 #1112 #960 #1150)
151.1848 +#1933 := [unit-resolution #1513 #694 #720 #1468 #776 #798 #824 #850 #880]: #1932
151.1849 +#1934 := [unit-resolution #1933 #1928 #1931 #1637 #1638 #1919 #1924]: #515
151.1850 +#1935 := (or #516 #923 #1200 #1113 #961 #1151 #1048)
151.1851 +#1936 := [unit-resolution #1499 #698 #724 #772 #1447 #802 #828 #854 #876]: #1935
151.1852 +#1937 := [unit-resolution #1936 #1930 #1870 #1332 #1929 #1497 #1925]: #516
151.1853 +#1915 := (or #898 #634 #633 #923 #961 #1048 #1151 #922 #960 #1112 #1150)
151.1854 +#1903 := [hypothesis]: #515
151.1855 +#1904 := [hypothesis]: #516
151.1856 +#1905 := [hypothesis]: #899
151.1857 +#1906 := [unit-resolution #1232 #1905]: #895
151.1858 +#1907 := (or #509 #1522 #1523 #897 #998 #1489 #1150 #960 #1509 #1112 #1365 #1049 #922 #1510 #1409)
151.1859 +#1908 := [th-lemma]: #1907
151.1860 +#1909 := [unit-resolution #1908 #1906 #1632 #694 #1536 #720 #1684 #746 #1468 #776 #1637 #824 #1540 #850 #672]: #509
151.1861 +#1774 := [hypothesis]: #1149
151.1862 +#1229 := (or #898 #894)
151.1863 +#1230 := [def-axiom]: #1229
151.1864 +#1910 := [unit-resolution #1230 #1905]: #894
151.1865 +#1911 := (or #506 #1528 #1364 #896 #999 #1337 #1151 #961 #1373 #1113 #1343 #1048 #923 #1371 #1357)
151.1866 +#1912 := [th-lemma]: #1911
151.1867 +#1913 := [unit-resolution #1912 #1910 #1642 #698 #1828 #724 #1703 #750 #1545 #772 #1870 #828 #1774 #854 #668]: #506
151.1868 +#1914 := [unit-resolution #646 #1913 #1909 #1904 #1903]: false
151.1869 +#1916 := [lemma #1914]: #1915
151.1870 +#1938 := [unit-resolution #1916 #1937 #1934 #1930 #1925 #1497 #1929 #1928 #1924 #1637 #1919]: #898
151.1871 +#1939 := [unit-resolution #918 #1938]: #100
151.1872 +#1940 := [unit-resolution #917 #1939]: #887
151.1873 +#1941 := [unit-resolution #1224 #1940]: #881
151.1874 +#1942 := (or #506 #884 #1113 #1151 #1048 #922)
151.1875 +#1943 := [unit-resolution #1530 #668 #694 #1404 #750 #772 #828 #854]: #1942
151.1876 +#1944 := [unit-resolution #1943 #1941 #1497 #1870 #1929 #1928]: #506
151.1877 +#1945 := [unit-resolution #646 #1944 #1937 #1934]: #632
151.1878 +#1946 := [unit-resolution #1908 #1945 #1928 #694 #1924 #720 #1684 #746 #1468 #776 #1637 #824 #1919 #850 #672]: #897
151.1879 +#1947 := [th-lemma #1946 #1939 #1742]: false
151.1880 +#1949 := [lemma #1947]: #1948
151.1881 +#1955 := [unit-resolution #1949 #1954 #1896 #1953 #1952]: #288
151.1882 +#1956 := [unit-resolution #1069 #1955]: #1039
151.1883 +#1957 := [unit-resolution #1272 #1956]: #1033
151.1884 +#1958 := [unit-resolution #1735 #1954]: #382
151.1885 +#1959 := (or #1123 #383 #1113)
151.1886 +#1960 := [th-lemma]: #1959
151.1887 +#1961 := [unit-resolution #1960 #1958 #1870]: #1123
151.1888 +#1962 := [unit-resolution #1308 #1898]: #1147
151.1889 +#1965 := (or #1160 #1112 #1074 #289 #1150)
151.1890 +#1963 := (or #1160 #1365 #1112 #1074 #1358 #289 #1150)
151.1891 +#1964 := [th-lemma]: #1963
151.1892 +#1966 := [unit-resolution #1964 #798 #824]: #1965
151.1893 +#1967 := [unit-resolution #1966 #1955 #1954 #1962 #1952]: #1160
151.1894 +#1970 := (or #1162 #1151 #1036 #1125 #147 #1074)
151.1895 +#1968 := (or #1162 #1151 #1343 #1523 #998 #1036 #1357 #1125 #973 #147 #1373 #1074 #1358)
151.1896 +#1969 := [th-lemma]: #1968
151.1897 +#1971 := [unit-resolution #1969 #724 #1684 #746 #1440 #772 #798 #828]: #1970
151.1898 +#1972 := [unit-resolution #1971 #1967 #1952 #1961 #1899 #1957]: #147
151.1899 +#1973 := [unit-resolution #955 #1972]: #925
151.1900 +#1974 := [unit-resolution #1236 #1973]: #919
151.1901 +#1975 := (or #1161 #1151 #430)
151.1902 +#1976 := [th-lemma]: #1975
151.1903 +#1977 := [unit-resolution #1976 #1899 #1897]: #1161
151.1904 +#1978 := (or #476 #1036 #1112 #194 #1163 #1074)
151.1905 +#1979 := [unit-resolution #1611 #750 #772 #798 #824 #1404 #854]: #1978
151.1906 +#1980 := [unit-resolution #1979 #1957 #1874 #1954 #1952 #1977]: #194
151.1907 +#1981 := [unit-resolution #993 #1980]: #963
151.1908 +#1982 := [unit-resolution #1248 #1981]: #957
151.1909 +#1983 := [unit-resolution #1933 #1974 #1953 #1954 #1952 #1962 #1982]: #515
151.1910 +#1984 := [unit-resolution #1238 #1973]: #921
151.1911 +#1985 := [unit-resolution #1250 #1981]: #959
151.1912 +#1849 := (or #923 #516 #1200 #961 #1036 #1163 #1074)
151.1913 +#1850 := [unit-resolution #1375 #698 #724 #772 #798 #854 #876]: #1849
151.1914 +#1986 := [unit-resolution #1850 #1985 #1896 #1952 #1977 #1957 #1984]: #516
151.1915 +#1987 := (or #509 #923 #1036 #1162 #1125)
151.1916 +#1988 := [unit-resolution #1720 #672 #698 #1684 #746 #1742 #772 #828 #850]: #1987
151.1917 +#1989 := [unit-resolution #1988 #1984 #1961 #1967 #1957]: #509
151.1918 +#1990 := [unit-resolution #646 #1989 #1986 #1983]: #631
151.1919 +#1991 := (or #506 #884 #1112 #922 #1036 #1163 #1074)
151.1920 +#1992 := [unit-resolution #1603 #668 #694 #1404 #750 #772 #798 #824 #854]: #1991
151.1921 +#1993 := [unit-resolution #1992 #1990 #1977 #1954 #1952 #1957 #1974]: #884
151.1922 +#1994 := [unit-resolution #1224 #1993]: #886
151.1923 +#1995 := [unit-resolution #917 #1994]: #101
151.1924 +#1996 := [th-lemma #746 #1684 #1957 #1874 #854 #1899 #1870 #828 #1984 #1995 #698 #772 #1972]: false
151.1925 +#1997 := [lemma #1996]: #476
151.1926 +#2014 := [unit-resolution #1221 #1997]: #1191
151.1927 +#2015 := [unit-resolution #1320 #2014]: #1185
151.1928 +#2034 := [th-lemma #876 #850 #1540 #2015 #802 #2033 #698 #772 #1828 #724 #1545 #1845 #1331]: false
151.1929 +#2036 := [lemma #2034]: #2035
151.1930 +#2048 := [unit-resolution #2036 #1497 #2045 #1828 #1331]: #1150
151.1931 +#2049 := [unit-resolution #1308 #2048 #2047]: false
151.1932 +#2051 := [lemma #2049]: #2050
151.1933 +#2082 := [unit-resolution #2051 #1405 #1331]: #961
151.1934 +#2083 := [unit-resolution #1250 #1923 #2082]: false
151.1935 +#2085 := [lemma #2083]: #2084
151.1936 +#2089 := [unit-resolution #2085 #1331]: #288
151.1937 +#2090 := [unit-resolution #1069 #2089]: #1039
151.1938 +#2091 := [unit-resolution #1272 #2090]: #1033
151.1939 +#2065 := [hypothesis]: #935
151.1940 +#2066 := [unit-resolution #1244 #2065]: #936
151.1941 +#2067 := [unit-resolution #956 #2066]: #147
151.1942 +#2068 := [th-lemma #2065 #2033 #2067]: false
151.1943 +#2069 := [lemma #2068]: #933
151.1944 +#2100 := (or #429 #516)
151.1945 +#2063 := (or #429 #1086 #516)
151.1946 +#2052 := [unit-resolution #1761 #1333]: #1109
151.1947 +#2053 := [unit-resolution #1735 #2052]: #382
151.1948 +#2054 := [hypothesis]: #1084
151.1949 +#2055 := (or #1200 #516 #429)
151.1950 +#2056 := [unit-resolution #1383 #1864]: #2055
151.1951 +#2057 := [unit-resolution #2056 #1333 #1331]: #1200
151.1952 +#2060 := (or #1086 #383 #1113 #1188 #1162 #1198)
151.1953 +#2058 := (or #1086 #383 #1113 #1343 #1188 #1489 #1162 #1198 #1075)
151.1954 +#2059 := [th-lemma]: #2058
151.1955 +#2061 := [unit-resolution #2059 #1447 #828 #850]: #2060
151.1956 +#2062 := [unit-resolution #2061 #1631 #2057 #2015 #1870 #2054 #2053]: false
151.1957 +#2064 := [lemma #2062]: #2063
151.1958 +#2086 := [unit-resolution #2064 #1333 #1331]: #1086
151.1959 +#2087 := [unit-resolution #1290 #2086]: #1088
151.1960 +#2088 := [unit-resolution #1108 #2087]: #335
151.1961 +#2080 := (or #1109 #516)
151.1962 +#2070 := [unit-resolution #1308 #1872]: #1147
151.1963 +#2020 := (or #194 #1150 #516 #1125 #1151 #1124)
151.1964 +#1762 := [hypothesis]: #1122
151.1965 +#1775 := [hypothesis]: #1123
151.1966 +#1803 := (or #194 #1151 #1150 #1125 #147 #1124)
151.1967 +#1764 := [unit-resolution #956 #1763]: #937
151.1968 +#1765 := [unit-resolution #1244 #1764]: #933
151.1969 +#1766 := (or #509 #885 #1522 #1364 #1365 #1489 #999 #1124 #1371 #1037 #1409 #935 #1150 #972 #1509 #1075 #1350)
151.1970 +#1767 := [th-lemma]: #1766
151.1971 +#1768 := [unit-resolution #1767 #1620 #1765 #698 #672 #720 #1703 #750 #1459 #776 #1447 #802 #1762 #824 #1540 #850 #1742]: #509
151.1972 +#1769 := (or #100 #1371 #935 #194 #147)
151.1973 +#1770 := [th-lemma]: #1769
151.1974 +#1771 := [unit-resolution #1770 #1535 #1765 #698 #1763]: #100
151.1975 +#1772 := [unit-resolution #917 #1771]: #887
151.1976 +#1773 := [unit-resolution #1224 #1772]: #881
151.1977 +#1776 := (or #335 #194 #1364 #1037 #1409 #999)
151.1978 +#1777 := [th-lemma]: #1776
151.1979 +#1778 := [unit-resolution #1777 #1535 #750 #1459 #776 #1703]: #335
151.1980 +#1779 := [unit-resolution #1107 #1778]: #1077
151.1981 +#1780 := [unit-resolution #1284 #1779]: #1071
151.1982 +#1241 := (or #936 #932)
151.1983 +#1242 := [def-axiom]: #1241
151.1984 +#1781 := [unit-resolution #1242 #1764]: #932
151.1985 +#1782 := (or #288 #1364 #999 #973 #147 #1373 #194)
151.1986 +#1783 := [th-lemma]: #1782
151.1987 +#1784 := [unit-resolution #1783 #1535 #1440 #724 #1703 #750 #1763]: #288
151.1988 +#1785 := [unit-resolution #1069 #1784]: #1039
151.1989 +#1786 := [unit-resolution #1272 #1785]: #1033
151.1990 +#1787 := (or #506 #884 #1528 #1523 #1343 #1337 #998 #1125 #1510 #1036 #1357 #934 #1151 #973 #1373 #1074 #1358)
151.1991 +#1788 := [th-lemma]: #1787
151.1992 +#1789 := [unit-resolution #1788 #1786 #1781 #694 #1440 #724 #1684 #746 #668 #772 #1780 #798 #1775 #828 #1774 #854 #1773]: #506
151.1993 +#1790 := (or #476 #1337 #1343 #1523 #1036 #1357 #998 #1125 #973 #147 #1373 #1074 #1358 #1151 #194)
151.1994 +#1791 := [th-lemma]: #1790
151.1995 +#1792 := [unit-resolution #1791 #1535 #1440 #724 #1684 #746 #1786 #772 #1780 #798 #1775 #828 #1774 #854 #1763]: #476
151.1996 +#1793 := [unit-resolution #1221 #1792]: #1191
151.1997 +#1794 := [unit-resolution #1320 #1793]: #1185
151.1998 +#1795 := (or #516 #1372 #1489 #1409 #1037 #1188 #1371 #935 #972 #1509 #1075 #1350 #1150)
151.1999 +#1796 := [th-lemma]: #1795
151.2000 +#1797 := [unit-resolution #1796 #1620 #698 #720 #1459 #776 #1447 #802 #1540 #850 #1794 #876 #1765]: #516
151.2001 +#1798 := [unit-resolution #1322 #1793]: #1187
151.2002 +#1799 := (or #515 #1511 #1337 #1357 #1036 #1189 #1510 #934 #973 #1373 #1074 #1358 #1151)
151.2003 +#1800 := [th-lemma]: #1799
151.2004 +#1801 := [unit-resolution #1800 #1786 #1440 #724 #694 #772 #1780 #798 #1774 #854 #1798 #880 #1781]: #515
151.2005 +#1802 := [unit-resolution #646 #1801 #1797 #1789 #1768]: false
151.2006 +#1804 := [lemma #1802]: #1803
151.2007 +#2011 := [unit-resolution #1804 #1535 #1540 #1775 #1774 #1762]: #147
151.2008 +#2012 := [unit-resolution #955 #2011]: #925
151.2009 +#2013 := [unit-resolution #1238 #2012]: #921
151.2010 +#2016 := (or #516 #1188 #935 #972 #1150)
151.2011 +#2017 := [unit-resolution #1796 #698 #720 #1459 #776 #1447 #802 #850 #876]: #2016
151.2012 +#2018 := [unit-resolution #2017 #1620 #2015 #1540 #1331]: #935
151.2013 +#2019 := [th-lemma #2018 #2013 #2011]: false
151.2014 +#2021 := [lemma #2019]: #2020
151.2015 +#2071 := [unit-resolution #2021 #2070 #1331 #1677 #1873 #1705]: #194
151.2016 +#2072 := [unit-resolution #993 #2071]: #963
151.2017 +#2073 := [unit-resolution #2010 #1675]: #288
151.2018 +#2074 := [unit-resolution #1069 #2073]: #1039
151.2019 +#2075 := [unit-resolution #1272 #2074]: #1033
151.2020 +#2076 := (or #516 #1036 #1188 #935 #1150 #960 #1087)
151.2021 +#1823 := (or #516 #1372 #1489 #1357 #1036 #1188 #1371 #935 #1509 #1350 #1150 #960 #1523 #998 #1087)
151.2022 +#1824 := [th-lemma]: #1823
151.2023 +#2077 := [unit-resolution #1824 #720 #1684 #746 #698 #772 #802 #850 #876]: #2076
151.2024 +#2078 := [unit-resolution #2077 #2075 #2015 #2045 #2069 #1331 #2070]: #960
151.2025 +#2079 := [unit-resolution #1248 #2078 #2072]: false
151.2026 +#2081 := [lemma #2079]: #2080
151.2027 +#2092 := [unit-resolution #2081 #1331]: #1109
151.2028 +#2093 := [unit-resolution #1735 #2092]: #382
151.2029 +#2094 := [unit-resolution #1960 #2093 #1870]: #1123
151.2030 +#2095 := (or #516 #923 #1074 #1036 #1162 #1125 #1188)
151.2031 +#2096 := [unit-resolution #1712 #1440 #724 #1684 #746 #698 #772 #798 #828 #850 #876]: #2095
151.2032 +#2097 := [unit-resolution #2096 #1631 #2015 #2094 #1331 #2091 #2033]: #1074
151.2033 +#2098 := [unit-resolution #1284 #2097]: #1076
151.2034 +#2099 := [unit-resolution #1107 #2098 #2088]: false
151.2035 +#2101 := [lemma #2099]: #2100
151.2036 +#2102 := [unit-resolution #2101 #1331]: #429
151.2037 +#2103 := [unit-resolution #1183 #2102]: #1153
151.2038 +#2104 := [unit-resolution #1308 #2103]: #1147
151.2039 +#2105 := [unit-resolution #2077 #2104 #2015 #2045 #2069 #1331 #2091]: #960
151.2040 +#2106 := [unit-resolution #1248 #2105]: #962
151.2041 +#2107 := [unit-resolution #2017 #2104 #2015 #2069 #1331]: #972
151.2042 +#2108 := [unit-resolution #1254 #2107]: #974
151.2043 +#2109 := [unit-resolution #994 #2108]: #194
151.2044 +#2110 := [unit-resolution #993 #2109 #2106]: false
151.2045 +#2111 := [lemma #2110]: #516
151.2046 +#2127 := (or #1199 #1189 #477)
151.2047 +#2128 := [th-lemma]: #2127
151.2048 +#2129 := [unit-resolution #2128 #1864 #1997]: #1199
151.2049 +#2125 := (or #335 #288)
151.2050 +#1806 := [unit-resolution #1108 #1422]: #1089
151.2051 +#1829 := [unit-resolution #1290 #1806]: #1084
151.2052 +#2117 := (or #515 #1511 #1337 #1151 #1189 #1358 #922 #1510 #1409 #960 #1509 #1049 #1086)
151.2053 +#2118 := [th-lemma]: #2117
151.2054 +#2119 := [unit-resolution #2118 #1829 #1924 #720 #1468 #776 #694 #798 #2116 #854 #1864 #880 #1928]: #515
151.2055 +#2120 := (or #101 #922 #1510 #1409 #960 #1509 #1049 #335 #288)
151.2056 +#2121 := [th-lemma]: #2120
151.2057 +#2122 := [unit-resolution #2121 #1422 #694 #1924 #720 #1405 #1468 #776 #1928]: #101
151.2058 +#2123 := [unit-resolution #918 #2122]: #899
151.2059 +#2124 := [unit-resolution #1916 #2123 #2119 #2111 #1497 #1925 #2033 #2116 #1928 #1924 #2115 #2112]: false
151.2060 +#2126 := [lemma #2124]: #2125
151.2061 +#2130 := [unit-resolution #2126 #1405]: #335
151.2062 +#2131 := [unit-resolution #1107 #2130]: #1077
151.2063 +#2132 := [unit-resolution #1284 #2131]: #1071
151.2064 +#2133 := [unit-resolution #1933 #2132 #2129 #2115 #1928 #2112 #1924]: #515
151.2065 +#2134 := [unit-resolution #1916 #2133 #2111 #1497 #1925 #2033 #2116 #1928 #1924 #2115 #2112]: #898
151.2066 +#2135 := [unit-resolution #918 #2134]: #100
151.2067 +#2136 := [unit-resolution #917 #2135]: #887
151.2068 +#2137 := [unit-resolution #1224 #2136]: #881
151.2069 +#2138 := [unit-resolution #1943 #2137 #1497 #1870 #2116 #1928]: #506
151.2070 +#2139 := [unit-resolution #646 #2138 #2111 #2133]: #632
151.2071 +#2140 := [unit-resolution #1908 #2139 #1928 #694 #1924 #720 #1684 #746 #1468 #776 #2115 #824 #2112 #850 #672]: #897
151.2072 +#2141 := [th-lemma #2140 #2135 #1742]: false
151.2073 +#2142 := [lemma #2141]: #288
151.2074 +#2143 := [unit-resolution #1069 #2142]: #1039
151.2075 +#2144 := [unit-resolution #1272 #2143]: #1033
151.2076 +#2145 := [hypothesis]: #1150
151.2077 +#2146 := [unit-resolution #1308 #2145]: #1152
151.2078 +#2147 := [unit-resolution #1183 #2146]: #430
151.2079 +#2148 := [unit-resolution #1184 #2147]: #1165
151.2080 +#2149 := [unit-resolution #1314 #2148]: #1160
151.2081 +#2150 := [unit-resolution #1761 #2147]: #1109
151.2082 +#2151 := [unit-resolution #1735 #2150]: #382
151.2083 +#2152 := [unit-resolution #1960 #2151 #1870]: #1123
151.2084 +#2153 := [unit-resolution #1988 #2152 #2149 #2033 #2144]: #509
151.2085 +#2154 := (or #1149 #1147)
151.2086 +#2155 := [th-lemma]: #2154
151.2087 +#2156 := [unit-resolution #2155 #2145]: #1149
151.2088 +#2157 := [unit-resolution #1894 #2147]: #1200
151.2089 +#2158 := [unit-resolution #2061 #2149 #2015 #1870 #2157 #2151]: #1086
151.2090 +#2159 := [unit-resolution #1290 #2158]: #1088
151.2091 +#2160 := [unit-resolution #1108 #2159]: #335
151.2092 +#2161 := [unit-resolution #1107 #2160]: #1077
151.2093 +#2162 := [unit-resolution #1284 #2161]: #1071
151.2094 +#2163 := [unit-resolution #1971 #2162 #2149 #2152 #2156 #2144]: #147
151.2095 +#2164 := [unit-resolution #955 #2163]: #925
151.2096 +#2165 := [unit-resolution #1236 #2164]: #919
151.2097 +#2166 := [unit-resolution #1316 #2148]: #1161
151.2098 +#2167 := (or #100 #923 #1371 #1357 #1523 #998 #1036 #383 #429 #1343 #1113 #973 #1373 #1074 #1358)
151.2099 +#2168 := [th-lemma]: #2167
151.2100 +#2169 := [unit-resolution #2168 #2162 #698 #1440 #724 #1684 #746 #2144 #772 #2033 #798 #2151 #1870 #828 #2147]: #100
151.2101 +#2170 := [unit-resolution #917 #2169]: #887
151.2102 +#2171 := [unit-resolution #1224 #2170]: #881
151.2103 +#2172 := [unit-resolution #1992 #2171 #2166 #2150 #2162 #2144 #2165]: #506
151.2104 +#2173 := (or #195 #1357 #1523 #998 #1036 #383 #429 #1343 #1113)
151.2105 +#2174 := [th-lemma]: #2173
151.2106 +#2175 := [unit-resolution #2174 #2151 #746 #2144 #772 #1684 #1870 #828 #2147]: #195
151.2107 +#2176 := [unit-resolution #994 #2175]: #975
151.2108 +#2177 := [unit-resolution #1254 #2176]: #970
151.2109 +#2178 := (or #515 #922 #1074 #1036 #972 #1163 #1112)
151.2110 +#2179 := [unit-resolution #1622 #694 #720 #1404 #750 #772 #1864 #798 #824 #854 #880]: #2178
151.2111 +#2180 := [unit-resolution #2179 #2177 #2150 #2162 #2166 #2144 #2165]: #515
151.2112 +#2181 := [unit-resolution #646 #2180 #2172 #2111 #2153]: false
151.2113 +#2182 := [lemma #2181]: #1147
151.2114 +#1805 := [unit-resolution #1302 #1729]: #1122
151.2115 +#2231 := (or #194 #382)
151.2116 +#2183 := (or #1150 #429 #1163)
151.2117 +#2184 := [th-lemma]: #2183
151.2118 +#2185 := [unit-resolution #2184 #1333 #2182]: #1163
151.2119 +#2186 := [unit-resolution #1316 #2185 #1334]: false
151.2120 +#2187 := [lemma #2186]: #429
151.2121 +#2196 := [unit-resolution #1183 #2187]: #1153
151.2122 +#2197 := [unit-resolution #1310 #2196]: #1149
151.2123 +#1817 := [unit-resolution #1304 #1729]: #1123
151.2124 +#2217 := [unit-resolution #1804 #1535 #2182 #1817 #2197 #1805]: #147
151.2125 +#2218 := [unit-resolution #955 #2217]: #925
151.2126 +#2219 := [unit-resolution #1236 #2218]: #919
151.2127 +#2210 := [unit-resolution #1976 #2197 #2187]: #1161
151.2128 +#2220 := (or #509 #1124 #935 #1150 #972)
151.2129 +#2221 := [unit-resolution #1767 #698 #672 #720 #1703 #750 #1459 #776 #1447 #802 #824 #850 #1742]: #2220
151.2130 +#2222 := [unit-resolution #2221 #1620 #2069 #1805 #2182]: #509
151.2131 +#2223 := (or #515 #922 #1163 #972 #1124)
151.2132 +#2224 := [unit-resolution #1707 #720 #1703 #750 #1459 #776 #1447 #802 #694 #824 #854 #880 #1864]: #2223
151.2133 +#2225 := [unit-resolution #2224 #2219 #1805 #1620 #2210]: #515
151.2134 +#2226 := [unit-resolution #646 #2225 #2111 #2222]: #631
151.2135 +#2211 := (or #506 #884 #922 #1163 #1124)
151.2136 +#2212 := [unit-resolution #1724 #668 #694 #1703 #750 #1459 #776 #824 #854]: #2211
151.2137 +#2227 := [unit-resolution #2212 #2226 #1805 #2210 #2219]: #884
151.2138 +#2228 := [unit-resolution #1224 #2227]: #886
151.2139 +#2229 := [unit-resolution #917 #2228]: #101
151.2140 +#2230 := [th-lemma #1620 #720 #1459 #776 #1447 #802 #2033 #2229 #698 #1428 #2217]: false
151.2141 +#2232 := [lemma #2230]: #2231
151.2142 +#2242 := [unit-resolution #2232 #1428]: #194
151.2143 +#2243 := [unit-resolution #993 #2242]: #963
151.2144 +#2244 := [unit-resolution #1248 #2243]: #957
151.2145 +#2193 := (or #509 #1124 #1036 #935 #1150 #960 #1087)
151.2146 +#1814 := (or #509 #885 #1522 #1523 #1365 #1489 #998 #1124 #1371 #1036 #1357 #935 #1150 #1509 #1350 #960 #1087)
151.2147 +#1815 := [th-lemma]: #1814
151.2148 +#2194 := [unit-resolution #1815 #698 #720 #1684 #746 #672 #772 #802 #824 #850 #1742]: #2193
151.2149 +#2245 := [unit-resolution #2194 #2244 #2069 #2144 #2045 #1805 #2182]: #509
151.2150 +#2205 := (or #100 #935 #1036 #382 #960 #1087)
151.2151 +#1834 := (or #100 #1371 #935 #1523 #1036 #1357 #998 #1509 #382 #1350 #960 #1087)
151.2152 +#1835 := [th-lemma]: #1834
151.2153 +#2206 := [unit-resolution #1835 #698 #720 #1684 #746 #772 #802]: #2205
151.2154 +#2246 := [unit-resolution #2206 #2244 #2045 #2069 #2144 #1428]: #100
151.2155 +#2247 := [unit-resolution #917 #2246]: #887
151.2156 +#2248 := [unit-resolution #1224 #2247]: #881
151.2157 +#2215 := (or #335 #382)
151.2158 +#2188 := (or #335 #194)
151.2159 +#2189 := [unit-resolution #1777 #750 #1459 #776 #1703]: #2188
151.2160 +#2190 := [unit-resolution #2189 #1422]: #194
151.2161 +#2191 := [unit-resolution #993 #2190]: #963
151.2162 +#2192 := [unit-resolution #1248 #2191]: #957
151.2163 +#2195 := [unit-resolution #2194 #2192 #2069 #2144 #2045 #1805 #2182]: #509
151.2164 +#2198 := [unit-resolution #1250 #2191]: #959
151.2165 +#1840 := (or #335 #934 #1151 #961 #935 #960 #1150 #382)
151.2166 +#1807 := [unit-resolution #1292 #1806]: #1085
151.2167 +#1808 := [hypothesis]: #933
151.2168 +#1809 := (or #288 #382 #1350 #335 #1087)
151.2169 +#1810 := [th-lemma]: #1809
151.2170 +#1811 := [unit-resolution #1810 #1422 #1807 #802 #1428]: #288
151.2171 +#1812 := [unit-resolution #1069 #1811]: #1039
151.2172 +#1813 := [unit-resolution #1272 #1812]: #1033
151.2173 +#1816 := [unit-resolution #1815 #1813 #1808 #698 #1536 #720 #1684 #746 #672 #772 #1807 #802 #1805 #824 #1540 #850 #1742]: #509
151.2174 +#1818 := (or #476 #1337 #1343 #1125 #1151 #335 #382)
151.2175 +#1819 := [th-lemma]: #1818
151.2176 +#1820 := [unit-resolution #1819 #1422 #1817 #828 #1774 #854 #1428]: #476
151.2177 +#1821 := [unit-resolution #1221 #1820]: #1191
151.2178 +#1822 := [unit-resolution #1320 #1821]: #1185
151.2179 +#1825 := [unit-resolution #1824 #1813 #1536 #720 #1684 #746 #698 #772 #1807 #802 #1540 #850 #1822 #876 #1808]: #516
151.2180 +#1826 := [hypothesis]: #932
151.2181 +#1827 := [unit-resolution #1322 #1821]: #1187
151.2182 +#1830 := (or #515 #1511 #1337 #1409 #1037 #1189 #1510 #934 #1373 #1358 #1151 #961 #1364 #999 #1086)
151.2183 +#1831 := [th-lemma]: #1830
151.2184 +#1832 := [unit-resolution #1831 #1829 #1828 #724 #1703 #750 #1459 #776 #694 #798 #1774 #854 #1827 #880 #1826]: #515
151.2185 +#1833 := [unit-resolution #646 #1832 #1825 #1816]: #631
151.2186 +#1836 := [unit-resolution #1835 #1813 #698 #1536 #720 #1684 #746 #1808 #772 #1807 #802 #1428]: #100
151.2187 +#1837 := [unit-resolution #917 #1836]: #887
151.2188 +#1838 := [unit-resolution #1224 #1837]: #881
151.2189 +#1839 := [th-lemma #1838 #668 #750 #828 #854 #1703 #1817 #694 #1459 #776 #1826 #1774 #724 #798 #1828 #1829 #1833]: false
151.2190 +#1841 := [lemma #1839]: #1840
151.2191 +#2199 := [unit-resolution #1841 #2198 #2069 #1422 #2197 #2192 #2182 #1428]: #934
151.2192 +#2200 := [unit-resolution #1242 #2199]: #936
151.2193 +#2201 := [unit-resolution #956 #2200]: #147
151.2194 +#2202 := [unit-resolution #955 #2201]: #925
151.2195 +#2203 := [unit-resolution #1236 #2202]: #919
151.2196 +#2204 := [unit-resolution #2118 #2203 #1829 #720 #1468 #776 #694 #798 #2197 #854 #1864 #880 #2192]: #515
151.2197 +#2207 := [unit-resolution #2206 #2192 #2045 #2069 #2144 #1428]: #100
151.2198 +#2208 := [unit-resolution #917 #2207]: #887
151.2199 +#2209 := [unit-resolution #1224 #2208]: #881
151.2200 +#2213 := [unit-resolution #2212 #2203 #1805 #2210 #2209]: #506
151.2201 +#2214 := [unit-resolution #646 #2213 #2204 #2111 #2195]: false
151.2202 +#2216 := [lemma #2214]: #2215
151.2203 +#2249 := [unit-resolution #2216 #1428]: #335
151.2204 +#2250 := [unit-resolution #1107 #2249]: #1077
151.2205 +#2251 := [unit-resolution #1284 #2250]: #1071
151.2206 +#2252 := (or #1084 #1074 #1357 #1523 #998 #1036 #195)
151.2207 +#2253 := [th-lemma]: #2252
151.2208 +#2254 := [unit-resolution #2253 #2251 #746 #2144 #772 #1684 #2242]: #1084
151.2209 +#2255 := [unit-resolution #1250 #2243]: #959
151.2210 +#2240 := (or #934 #632 #884 #1074 #1125 #961 #1086)
151.2211 +#2233 := (or #515 #934 #1151 #961 #1086)
151.2212 +#2234 := [unit-resolution #1831 #1864 #724 #1703 #750 #1459 #776 #694 #798 #854 #880]: #2233
151.2213 +#2235 := [unit-resolution #2234 #1826 #2197 #1828 #2054]: #515
151.2214 +#2236 := (or #506 #884 #1125 #1036 #934 #1151 #1074)
151.2215 +#2237 := [unit-resolution #1788 #694 #1440 #724 #1684 #746 #668 #772 #798 #828 #854]: #2236
151.2216 +#2238 := [unit-resolution #2237 #1826 #1636 #1638 #1775 #2197 #2144]: #506
151.2217 +#2239 := [unit-resolution #646 #2238 #2235 #2111 #1628]: false
151.2218 +#2241 := [lemma #2239]: #2240
151.2219 +#2256 := [unit-resolution #2241 #2245 #2248 #2251 #1817 #2255 #2254]: #934
151.2220 +#2257 := [unit-resolution #1242 #2256]: #936
151.2221 +#2258 := [unit-resolution #956 #2257]: #147
151.2222 +#2259 := [unit-resolution #955 #2258]: #925
151.2223 +#2260 := [unit-resolution #1236 #2259]: #919
151.2224 +#2261 := [unit-resolution #2212 #2260 #1805 #2210 #2248]: #506
151.2225 +#2262 := [unit-resolution #2118 #2260 #2254 #720 #1468 #776 #694 #798 #2197 #854 #1864 #880 #2244]: #515
151.2226 +#2263 := [unit-resolution #646 #2262 #2261 #2111 #2245]: false
151.2227 +#2264 := [lemma #2263]: #382
151.2228 +#2265 := [unit-resolution #1145 #2264]: #1115
151.2229 +#2266 := [unit-resolution #1296 #2265]: #1109
151.2230 +#2267 := [unit-resolution #2189 #1535]: #335
151.2231 +#2268 := [unit-resolution #1107 #2267]: #1077
151.2232 +#2269 := [unit-resolution #1284 #2268]: #1071
151.2233 +#2270 := [unit-resolution #1966 #2269 #2142 #2266 #2182]: #1160
151.2234 +#2271 := (or #1008 #998 #1036 #1357 #1074 #1358 #383)
151.2235 +#2272 := [th-lemma]: #2271
151.2236 +#2273 := [unit-resolution #2272 #2269 #2144 #772 #1684 #798 #2264]: #1008
151.2237 +#2274 := (or #509 #1010 #1113 #923 #1162)
151.2238 +#2275 := [unit-resolution #1608 #672 #698 #1742 #746 #1459 #776 #1447 #802 #828 #850]: #2274
151.2239 +#2276 := [unit-resolution #2275 #2273 #1870 #2270 #2033]: #509
151.2240 +#2277 := [unit-resolution #1960 #2264 #1870]: #1123
151.2241 +#2278 := [unit-resolution #1971 #2270 #2269 #2277 #2197 #2144]: #147
151.2242 +#2279 := [unit-resolution #955 #2278]: #925
151.2243 +#2280 := [unit-resolution #1236 #2279]: #919
151.2244 +#2281 := (or #1010 #999 #923 #100 #1371 #961 #1373)
151.2245 +#2282 := [th-lemma]: #2281
151.2246 +#2283 := [unit-resolution #2282 #2273 #698 #1584 #724 #1703 #2033]: #100
151.2247 +#2284 := [unit-resolution #917 #2283]: #887
151.2248 +#2285 := [unit-resolution #1224 #2284]: #881
151.2249 +#2286 := [unit-resolution #1992 #2285 #2210 #2266 #2269 #2144 #2280]: #506
151.2250 +#2287 := [unit-resolution #2179 #2280 #2266 #1620 #2210 #2144 #2269]: #515
151.2251 +#2288 := [unit-resolution #646 #2287 #2286 #2111 #2276]: false
151.2252 +#2289 := [lemma #2288]: #194
151.2253 +#2305 := [unit-resolution #2253 #2302 #746 #2144 #772 #1684 #2289]: #1074
151.2254 +#2306 := [unit-resolution #1284 #2305]: #1076
151.2255 +#2307 := [unit-resolution #1107 #2306 #2304]: false
151.2256 +#2308 := [lemma #2307]: #1084
151.2257 +#2300 := (or #1086 #515)
151.2258 +#2290 := [hypothesis]: #633
151.2259 +#2291 := [unit-resolution #993 #2289]: #963
151.2260 +#2292 := [unit-resolution #1250 #2291]: #959
151.2261 +#2293 := [unit-resolution #2234 #2054 #2197 #2292 #2290]: #934
151.2262 +#2294 := [unit-resolution #1242 #2293]: #936
151.2263 +#2295 := [unit-resolution #1248 #2291]: #957
151.2264 +#2296 := [unit-resolution #2118 #2054 #2290 #720 #1468 #776 #694 #798 #2197 #854 #1864 #880 #2295]: #922
151.2265 +#2297 := [unit-resolution #1236 #2296]: #924
151.2266 +#2298 := [unit-resolution #955 #2297]: #148
151.2267 +#2299 := [unit-resolution #956 #2298 #2294]: false
151.2268 +#2301 := [lemma #2299]: #2300
151.2269 +#1848 := [unit-resolution #2301 #2308]: #515
151.2270 +#1851 := [hypothesis]: #632
151.2271 +#1852 := (or #897 #1522 #509 #1523 #998 #1365 #1489 #1150 #1509 #1350 #633 #1372 #1188 #960 #1087 #1112)
151.2272 +#1853 := [th-lemma]: #1852
151.2273 +#1846 := [unit-resolution #1853 #1851 #2295 #720 #1684 #746 #2045 #802 #2266 #824 #2182 #850 #2015 #876 #672 #1848]: #897
151.2274 +#1847 := [unit-resolution #1232 #1846]: #898
151.2275 +#1854 := [unit-resolution #918 #1847]: #100
151.2276 +#1855 := (or #509 #1124)
151.2277 +#1856 := [unit-resolution #2194 #2069 #2144 #2045 #2295 #2182]: #1855
151.2278 +#2309 := [unit-resolution #1856 #1851]: #1124
151.2279 +#2310 := [th-lemma #1848 #876 #850 #2182 #2015 #2309 #2266 #1854]: false
151.2280 +#2311 := [lemma #2310]: #509
151.2281 +#2312 := (or #631 #632)
151.2282 +#2313 := [unit-resolution #646 #2111 #1848]: #2312
151.2283 +#2314 := [unit-resolution #2313 #2311]: #631
151.2284 +#2315 := (or #884 #633 #1372 #1188 #1125 #1528 #506 #1364 #999 #1343 #1373 #1358 #961 #1086)
151.2285 +#2316 := [th-lemma]: #2315
151.2286 +#2317 := [unit-resolution #2316 #668 #2292 #724 #1703 #750 #2308 #798 #2277 #828 #2015 #876 #2314 #1848]: #884
151.2287 +#2318 := [unit-resolution #1224 #2317]: #886
151.2288 +#2319 := (or #896 #1528 #506 #1364 #999 #1343 #1337 #1151 #1373 #1358 #634 #1511 #1189 #961 #1086 #1113)
151.2289 +#2320 := [th-lemma]: #2319
151.2290 +#2321 := [unit-resolution #2320 #668 #2292 #724 #1703 #750 #2308 #798 #1870 #828 #2197 #854 #1864 #880 #2314 #2111]: #896
151.2291 +#2322 := [unit-resolution #1230 #2321]: #898
151.2292 +#2323 := [unit-resolution #918 #2322]: #100
151.2293 +[unit-resolution #917 #2323 #2318]: false
151.2294 +unsat
   152.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   152.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_01	Tue Oct 20 10:11:30 2009 +0200
   152.3 @@ -0,0 +1,58 @@
   152.4 +(benchmark Isabelle
   152.5 +:extrasorts ( T2 T13 T12 T11 T10 T9 T8 T7 T6 T5 T4 T1 T3)
   152.6 +:extrafuns (
   152.7 +  (uf_37 T13)
   152.8 +  (uf_34 T12)
   152.9 +  (uf_31 T11)
  152.10 +  (uf_28 T10)
  152.11 +  (uf_25 T9)
  152.12 +  (uf_22 T8)
  152.13 +  (uf_19 T7)
  152.14 +  (uf_16 T6)
  152.15 +  (uf_13 T5)
  152.16 +  (uf_10 T4)
  152.17 +  (uf_7 T1)
  152.18 +  (uf_4 T3)
  152.19 +  (uf_36 Int T13 T13)
  152.20 +  (uf_33 T13 T12 T12)
  152.21 +  (uf_30 T12 T11 T11)
  152.22 +  (uf_27 T11 T10 T10)
  152.23 +  (uf_24 T10 T9 T9)
  152.24 +  (uf_21 T9 T8 T8)
  152.25 +  (uf_18 T8 T7 T7)
  152.26 +  (uf_15 T7 T6 T6)
  152.27 +  (uf_12 T6 T5 T5)
  152.28 +  (uf_9 T5 T4 T4)
  152.29 +  (uf_6 T4 T1 T1)
  152.30 +  (uf_3 T1 T3 T3)
  152.31 + )
  152.32 +:extrapreds (
  152.33 +  (up_35 Int)
  152.34 +  (up_32 T13)
  152.35 +  (up_29 T12)
  152.36 +  (up_26 T11)
  152.37 +  (up_23 T10)
  152.38 +  (up_20 T9)
  152.39 +  (up_17 T8)
  152.40 +  (up_14 T7)
  152.41 +  (up_11 T6)
  152.42 +  (up_8 T5)
  152.43 +  (up_5 T4)
  152.44 +  (up_1 T1)
  152.45 +  (up_2 T3)
  152.46 + )
  152.47 +:assumption (forall (?x1 T1) (and (up_1 ?x1) (or (up_2 (uf_3 ?x1 uf_4)) (not (up_2 (uf_3 ?x1 uf_4))))))
  152.48 +:assumption (forall (?x2 T4) (and (up_5 ?x2) (or (up_1 (uf_6 ?x2 uf_7)) (not (up_1 (uf_6 ?x2 uf_7))))))
  152.49 +:assumption (forall (?x3 T5) (and (up_8 ?x3) (or (up_5 (uf_9 ?x3 uf_10)) (not (up_5 (uf_9 ?x3 uf_10))))))
  152.50 +:assumption (forall (?x4 T6) (and (up_11 ?x4) (or (up_8 (uf_12 ?x4 uf_13)) (not (up_8 (uf_12 ?x4 uf_13))))))
  152.51 +:assumption (forall (?x5 T7) (and (up_14 ?x5) (or (up_11 (uf_15 ?x5 uf_16)) (not (up_11 (uf_15 ?x5 uf_16))))))
  152.52 +:assumption (forall (?x6 T8) (and (up_17 ?x6) (or (up_14 (uf_18 ?x6 uf_19)) (not (up_14 (uf_18 ?x6 uf_19))))))
  152.53 +:assumption (forall (?x7 T9) (and (up_20 ?x7) (or (up_17 (uf_21 ?x7 uf_22)) (not (up_17 (uf_21 ?x7 uf_22))))))
  152.54 +:assumption (forall (?x8 T10) (and (up_23 ?x8) (or (up_20 (uf_24 ?x8 uf_25)) (not (up_20 (uf_24 ?x8 uf_25))))))
  152.55 +:assumption (forall (?x9 T11) (and (up_26 ?x9) (or (up_23 (uf_27 ?x9 uf_28)) (not (up_23 (uf_27 ?x9 uf_28))))))
  152.56 +:assumption (forall (?x10 T12) (and (up_29 ?x10) (or (up_26 (uf_30 ?x10 uf_31)) (not (up_26 (uf_30 ?x10 uf_31))))))
  152.57 +:assumption (forall (?x11 T13) (and (up_32 ?x11) (or (up_29 (uf_33 ?x11 uf_34)) (not (up_29 (uf_33 ?x11 uf_34))))))
  152.58 +:assumption (forall (?x12 Int) (and (up_35 ?x12) (or (up_32 (uf_36 ?x12 uf_37)) (not (up_32 (uf_36 ?x12 uf_37))))))
  152.59 +:assumption (not (up_35 1))
  152.60 +:formula true
  152.61 +)
   153.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   153.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_01.proof	Tue Oct 20 10:11:30 2009 +0200
   153.3 @@ -0,0 +1,50 @@
   153.4 +#2 := false
   153.5 +decl up_35 :: (-> int bool)
   153.6 +#112 := 1::int
   153.7 +#113 := (up_35 1::int)
   153.8 +#114 := (not #113)
   153.9 +#297 := [asserted]: #114
  153.10 +#103 := (:var 0 int)
  153.11 +#104 := (up_35 #103)
  153.12 +#911 := (pattern #104)
  153.13 +#912 := (forall (vars (?x12 int)) (:pat #911) #104)
  153.14 +#294 := (forall (vars (?x12 int)) #104)
  153.15 +#915 := (iff #294 #912)
  153.16 +#913 := (iff #104 #104)
  153.17 +#914 := [refl]: #913
  153.18 +#916 := [quant-intro #914]: #915
  153.19 +#320 := (~ #294 #294)
  153.20 +#361 := (~ #104 #104)
  153.21 +#362 := [refl]: #361
  153.22 +#321 := [nnf-pos #362]: #320
  153.23 +decl up_32 :: (-> T13 bool)
  153.24 +decl uf_36 :: (-> int T13 T13)
  153.25 +decl uf_37 :: T13
  153.26 +#105 := uf_37
  153.27 +#106 := (uf_36 #103 uf_37)
  153.28 +#107 := (up_32 #106)
  153.29 +#108 := (not #107)
  153.30 +#109 := (or #107 #108)
  153.31 +#110 := (and #104 #109)
  153.32 +#111 := (forall (vars (?x12 int)) #110)
  153.33 +#295 := (iff #111 #294)
  153.34 +#292 := (iff #110 #104)
  153.35 +#1 := true
  153.36 +#287 := (and #104 true)
  153.37 +#290 := (iff #287 #104)
  153.38 +#291 := [rewrite]: #290
  153.39 +#288 := (iff #110 #287)
  153.40 +#284 := (iff #109 true)
  153.41 +#286 := [rewrite]: #284
  153.42 +#289 := [monotonicity #286]: #288
  153.43 +#293 := [trans #289 #291]: #292
  153.44 +#296 := [quant-intro #293]: #295
  153.45 +#283 := [asserted]: #111
  153.46 +#299 := [mp #283 #296]: #294
  153.47 +#363 := [mp~ #299 #321]: #294
  153.48 +#917 := [mp #363 #916]: #912
  153.49 +#418 := (not #912)
  153.50 +#504 := (or #418 #113)
  153.51 +#419 := [quant-inst]: #504
  153.52 +[unit-resolution #419 #917 #297]: false
  153.53 +unsat
   154.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   154.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_02	Tue Oct 20 10:11:30 2009 +0200
   154.3 @@ -0,0 +1,41 @@
   154.4 +(benchmark Isabelle
   154.5 +:extrasorts ( T5 T6 T3 T1 T2 T4 T8 T7)
   154.6 +:extrafuns (
   154.7 +  (uf_19 T1)
   154.8 +  (uf_3 Int T3)
   154.9 +  (uf_7 T2)
  154.10 +  (uf_8 T4)
  154.11 +  (uf_2 T1 T2 T2)
  154.12 +  (uf_6 Int T4 T4)
  154.13 +  (uf_10 T5 T1 T3)
  154.14 +  (uf_12 T6 Int T3)
  154.15 +  (uf_13 T2 T3)
  154.16 +  (uf_14 T4 T3)
  154.17 +  (uf_17 T8 T3)
  154.18 +  (uf_15 T7 T3)
  154.19 +  (uf_18 T1 T8)
  154.20 +  (uf_16 Int T7)
  154.21 +  (uf_9 T5 T2 T3)
  154.22 +  (uf_11 T6 T4 T3)
  154.23 +  (uf_1 T2 T3)
  154.24 +  (uf_5 T4 T3)
  154.25 +  (uf_4 T3 Int)
  154.26 + )
  154.27 +:assumption (forall (?x1 T1) (?x2 T2) (= (uf_1 (uf_2 ?x1 ?x2)) (uf_3 (+ (uf_4 (uf_1 ?x2)) (uf_4 (uf_3 (+ 0 1)))))))
  154.28 +:assumption (forall (?x3 Int) (?x4 T4) (= (uf_5 (uf_6 ?x3 ?x4)) (uf_3 (+ (uf_4 (uf_5 ?x4)) (uf_4 (uf_3 (+ 0 1)))))))
  154.29 +:assumption (= (uf_1 uf_7) (uf_3 0))
  154.30 +:assumption (= (uf_5 uf_8) (uf_3 0))
  154.31 +:assumption (forall (?x5 T5) (?x6 T1) (?x7 T2) (= (uf_9 ?x5 (uf_2 ?x6 ?x7)) (uf_3 (+ (+ (uf_4 (uf_10 ?x5 ?x6)) (uf_4 (uf_9 ?x5 ?x7))) (uf_4 (uf_3 (+ 0 1)))))))
  154.32 +:assumption (forall (?x8 T6) (?x9 Int) (?x10 T4) (= (uf_11 ?x8 (uf_6 ?x9 ?x10)) (uf_3 (+ (+ (uf_4 (uf_12 ?x8 ?x9)) (uf_4 (uf_11 ?x8 ?x10))) (uf_4 (uf_3 (+ 0 1)))))))
  154.33 +:assumption (forall (?x11 T5) (= (uf_9 ?x11 uf_7) (uf_3 0)))
  154.34 +:assumption (forall (?x12 T6) (= (uf_11 ?x12 uf_8) (uf_3 0)))
  154.35 +:assumption (forall (?x13 T2) (= (uf_13 ?x13) (uf_1 ?x13)))
  154.36 +:assumption (forall (?x14 T4) (= (uf_14 ?x14) (uf_5 ?x14)))
  154.37 +:assumption (forall (?x15 Int) (= (uf_15 (uf_16 ?x15)) (uf_14 (uf_6 ?x15 uf_8))))
  154.38 +:assumption (forall (?x16 T1) (= (uf_17 (uf_18 ?x16)) (uf_13 (uf_2 ?x16 uf_7))))
  154.39 +:assumption (forall (?x17 T3) (= (uf_3 (uf_4 ?x17)) ?x17))
  154.40 +:assumption (forall (?x18 Int) (implies (<= 0 ?x18) (= (uf_4 (uf_3 ?x18)) ?x18)))
  154.41 +:assumption (forall (?x19 Int) (implies (< ?x19 0) (= (uf_4 (uf_3 ?x19)) 0)))
  154.42 +:assumption (not (= (uf_15 (uf_16 3)) (uf_17 (uf_18 uf_19))))
  154.43 +:formula true
  154.44 +)
   155.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   155.2 +++ b/src/HOL/SMT/Examples/cert/z3_mono_02.proof	Tue Oct 20 10:11:30 2009 +0200
   155.3 @@ -0,0 +1,492 @@
   155.4 +#2 := false
   155.5 +decl uf_17 :: (-> T8 T3)
   155.6 +decl uf_18 :: (-> T1 T8)
   155.7 +decl uf_19 :: T1
   155.8 +#104 := uf_19
   155.9 +#105 := (uf_18 uf_19)
  155.10 +#106 := (uf_17 #105)
  155.11 +decl uf_15 :: (-> T7 T3)
  155.12 +decl uf_16 :: (-> int T7)
  155.13 +#101 := 3::int
  155.14 +#102 := (uf_16 3::int)
  155.15 +#103 := (uf_15 #102)
  155.16 +#107 := (= #103 #106)
  155.17 +decl uf_13 :: (-> T2 T3)
  155.18 +decl uf_2 :: (-> T1 T2 T2)
  155.19 +decl uf_7 :: T2
  155.20 +#29 := uf_7
  155.21 +#857 := (uf_2 uf_19 uf_7)
  155.22 +#859 := (uf_13 #857)
  155.23 +#599 := (= #859 #106)
  155.24 +#526 := (= #106 #859)
  155.25 +#79 := (:var 0 T1)
  155.26 +#82 := (uf_2 #79 uf_7)
  155.27 +#932 := (pattern #82)
  155.28 +#80 := (uf_18 #79)
  155.29 +#931 := (pattern #80)
  155.30 +#83 := (uf_13 #82)
  155.31 +#81 := (uf_17 #80)
  155.32 +#84 := (= #81 #83)
  155.33 +#933 := (forall (vars (?x16 T1)) (:pat #931 #932) #84)
  155.34 +#85 := (forall (vars (?x16 T1)) #84)
  155.35 +#936 := (iff #85 #933)
  155.36 +#934 := (iff #84 #84)
  155.37 +#935 := [refl]: #934
  155.38 +#937 := [quant-intro #935]: #936
  155.39 +#347 := (~ #85 #85)
  155.40 +#384 := (~ #84 #84)
  155.41 +#385 := [refl]: #384
  155.42 +#348 := [nnf-pos #385]: #347
  155.43 +#238 := [asserted]: #85
  155.44 +#386 := [mp~ #238 #348]: #85
  155.45 +#938 := [mp #386 #937]: #933
  155.46 +#861 := (not #933)
  155.47 +#862 := (or #861 #526)
  155.48 +#863 := [quant-inst]: #862
  155.49 +#601 := [unit-resolution #863 #938]: #526
  155.50 +#588 := [symm #601]: #599
  155.51 +#586 := (= #103 #859)
  155.52 +decl uf_1 :: (-> T2 T3)
  155.53 +#558 := (uf_1 #857)
  155.54 +#832 := (= #558 #859)
  155.55 +#5 := (:var 0 T2)
  155.56 +#66 := (uf_13 #5)
  155.57 +#908 := (pattern #66)
  155.58 +#8 := (uf_1 #5)
  155.59 +#907 := (pattern #8)
  155.60 +#222 := (= #8 #66)
  155.61 +#909 := (forall (vars (?x13 T2)) (:pat #907 #908) #222)
  155.62 +#226 := (forall (vars (?x13 T2)) #222)
  155.63 +#912 := (iff #226 #909)
  155.64 +#910 := (iff #222 #222)
  155.65 +#911 := [refl]: #910
  155.66 +#913 := [quant-intro #911]: #912
  155.67 +#341 := (~ #226 #226)
  155.68 +#375 := (~ #222 #222)
  155.69 +#376 := [refl]: #375
  155.70 +#342 := [nnf-pos #376]: #341
  155.71 +#67 := (= #66 #8)
  155.72 +#68 := (forall (vars (?x13 T2)) #67)
  155.73 +#227 := (iff #68 #226)
  155.74 +#224 := (iff #67 #222)
  155.75 +#225 := [rewrite]: #224
  155.76 +#228 := [quant-intro #225]: #227
  155.77 +#221 := [asserted]: #68
  155.78 +#231 := [mp #221 #228]: #226
  155.79 +#377 := [mp~ #231 #342]: #226
  155.80 +#914 := [mp #377 #913]: #909
  155.81 +#451 := (not #909)
  155.82 +#837 := (or #451 #832)
  155.83 +#547 := [quant-inst]: #837
  155.84 +#615 := [unit-resolution #547 #914]: #832
  155.85 +#585 := (= #103 #558)
  155.86 +decl uf_3 :: (-> int T3)
  155.87 +decl uf_4 :: (-> T3 int)
  155.88 +#30 := (uf_1 uf_7)
  155.89 +#806 := (uf_4 #30)
  155.90 +#11 := 1::int
  155.91 +#127 := (uf_3 1::int)
  155.92 +#130 := (uf_4 #127)
  155.93 +#649 := (+ #130 #806)
  155.94 +#794 := (uf_3 #649)
  155.95 +#597 := (= #794 #558)
  155.96 +#683 := (= #558 #794)
  155.97 +#4 := (:var 1 T1)
  155.98 +#6 := (uf_2 #4 #5)
  155.99 +#865 := (pattern #6)
 155.100 +#9 := (uf_4 #8)
 155.101 +#133 := (+ #9 #130)
 155.102 +#136 := (uf_3 #133)
 155.103 +#7 := (uf_1 #6)
 155.104 +#139 := (= #7 #136)
 155.105 +#866 := (forall (vars (?x1 T1) (?x2 T2)) (:pat #865) #139)
 155.106 +#142 := (forall (vars (?x1 T1) (?x2 T2)) #139)
 155.107 +#869 := (iff #142 #866)
 155.108 +#867 := (iff #139 #139)
 155.109 +#868 := [refl]: #867
 155.110 +#870 := [quant-intro #868]: #869
 155.111 +#361 := (~ #142 #142)
 155.112 +#359 := (~ #139 #139)
 155.113 +#360 := [refl]: #359
 155.114 +#362 := [nnf-pos #360]: #361
 155.115 +#10 := 0::int
 155.116 +#12 := (+ 0::int 1::int)
 155.117 +#13 := (uf_3 #12)
 155.118 +#14 := (uf_4 #13)
 155.119 +#15 := (+ #9 #14)
 155.120 +#16 := (uf_3 #15)
 155.121 +#17 := (= #7 #16)
 155.122 +#18 := (forall (vars (?x1 T1) (?x2 T2)) #17)
 155.123 +#143 := (iff #18 #142)
 155.124 +#140 := (iff #17 #139)
 155.125 +#137 := (= #16 #136)
 155.126 +#134 := (= #15 #133)
 155.127 +#131 := (= #14 #130)
 155.128 +#128 := (= #13 #127)
 155.129 +#125 := (= #12 1::int)
 155.130 +#126 := [rewrite]: #125
 155.131 +#129 := [monotonicity #126]: #128
 155.132 +#132 := [monotonicity #129]: #131
 155.133 +#135 := [monotonicity #132]: #134
 155.134 +#138 := [monotonicity #135]: #137
 155.135 +#141 := [monotonicity #138]: #140
 155.136 +#144 := [quant-intro #141]: #143
 155.137 +#124 := [asserted]: #18
 155.138 +#147 := [mp #124 #144]: #142
 155.139 +#363 := [mp~ #147 #362]: #142
 155.140 +#871 := [mp #363 #870]: #866
 155.141 +#701 := (not #866)
 155.142 +#694 := (or #701 #683)
 155.143 +#688 := (+ #806 #130)
 155.144 +#689 := (uf_3 #688)
 155.145 +#690 := (= #558 #689)
 155.146 +#702 := (or #701 #690)
 155.147 +#704 := (iff #702 #694)
 155.148 +#706 := (iff #694 #694)
 155.149 +#799 := [rewrite]: #706
 155.150 +#698 := (iff #690 #683)
 155.151 +#795 := (= #689 #794)
 155.152 +#797 := (= #688 #649)
 155.153 +#699 := [rewrite]: #797
 155.154 +#798 := [monotonicity #699]: #795
 155.155 +#700 := [monotonicity #798]: #698
 155.156 +#705 := [monotonicity #700]: #704
 155.157 +#796 := [trans #705 #799]: #704
 155.158 +#703 := [quant-inst]: #702
 155.159 +#800 := [mp #703 #796]: #694
 155.160 +#614 := [unit-resolution #800 #871]: #683
 155.161 +#598 := [symm #614]: #597
 155.162 +#583 := (= #103 #794)
 155.163 +#595 := (= #127 #794)
 155.164 +#605 := (= #794 #127)
 155.165 +#618 := (= #649 1::int)
 155.166 +#780 := (<= #806 0::int)
 155.167 +#778 := (= #806 0::int)
 155.168 +#31 := (uf_3 0::int)
 155.169 +#858 := (uf_4 #31)
 155.170 +#855 := (= #858 0::int)
 155.171 +#72 := (:var 0 int)
 155.172 +#92 := (uf_3 #72)
 155.173 +#947 := (pattern #92)
 155.174 +#266 := (>= #72 0::int)
 155.175 +#267 := (not #266)
 155.176 +#93 := (uf_4 #92)
 155.177 +#248 := (= #72 #93)
 155.178 +#273 := (or #248 #267)
 155.179 +#948 := (forall (vars (?x18 int)) (:pat #947) #273)
 155.180 +#278 := (forall (vars (?x18 int)) #273)
 155.181 +#951 := (iff #278 #948)
 155.182 +#949 := (iff #273 #273)
 155.183 +#950 := [refl]: #949
 155.184 +#952 := [quant-intro #950]: #951
 155.185 +#351 := (~ #278 #278)
 155.186 +#390 := (~ #273 #273)
 155.187 +#391 := [refl]: #390
 155.188 +#352 := [nnf-pos #391]: #351
 155.189 +#94 := (= #93 #72)
 155.190 +#91 := (<= 0::int #72)
 155.191 +#95 := (implies #91 #94)
 155.192 +#96 := (forall (vars (?x18 int)) #95)
 155.193 +#281 := (iff #96 #278)
 155.194 +#255 := (not #91)
 155.195 +#256 := (or #255 #248)
 155.196 +#261 := (forall (vars (?x18 int)) #256)
 155.197 +#279 := (iff #261 #278)
 155.198 +#276 := (iff #256 #273)
 155.199 +#270 := (or #267 #248)
 155.200 +#274 := (iff #270 #273)
 155.201 +#275 := [rewrite]: #274
 155.202 +#271 := (iff #256 #270)
 155.203 +#268 := (iff #255 #267)
 155.204 +#264 := (iff #91 #266)
 155.205 +#265 := [rewrite]: #264
 155.206 +#269 := [monotonicity #265]: #268
 155.207 +#272 := [monotonicity #269]: #271
 155.208 +#277 := [trans #272 #275]: #276
 155.209 +#280 := [quant-intro #277]: #279
 155.210 +#262 := (iff #96 #261)
 155.211 +#259 := (iff #95 #256)
 155.212 +#252 := (implies #91 #248)
 155.213 +#257 := (iff #252 #256)
 155.214 +#258 := [rewrite]: #257
 155.215 +#253 := (iff #95 #252)
 155.216 +#250 := (iff #94 #248)
 155.217 +#251 := [rewrite]: #250
 155.218 +#254 := [monotonicity #251]: #253
 155.219 +#260 := [trans #254 #258]: #259
 155.220 +#263 := [quant-intro #260]: #262
 155.221 +#282 := [trans #263 #280]: #281
 155.222 +#247 := [asserted]: #96
 155.223 +#283 := [mp #247 #282]: #278
 155.224 +#392 := [mp~ #283 #352]: #278
 155.225 +#953 := [mp #392 #952]: #948
 155.226 +#848 := (not #948)
 155.227 +#850 := (or #848 #855)
 155.228 +#527 := (>= 0::int 0::int)
 155.229 +#860 := (not #527)
 155.230 +#864 := (= 0::int #858)
 155.231 +#854 := (or #864 #860)
 155.232 +#489 := (or #848 #854)
 155.233 +#851 := (iff #489 #850)
 155.234 +#852 := (iff #850 #850)
 155.235 +#838 := [rewrite]: #852
 155.236 +#847 := (iff #854 #855)
 155.237 +#843 := (or #855 false)
 155.238 +#846 := (iff #843 #855)
 155.239 +#841 := [rewrite]: #846
 155.240 +#844 := (iff #854 #843)
 155.241 +#505 := (iff #860 false)
 155.242 +#1 := true
 155.243 +#498 := (not true)
 155.244 +#503 := (iff #498 false)
 155.245 +#504 := [rewrite]: #503
 155.246 +#840 := (iff #860 #498)
 155.247 +#514 := (iff #527 true)
 155.248 +#856 := [rewrite]: #514
 155.249 +#502 := [monotonicity #856]: #840
 155.250 +#842 := [trans #502 #504]: #505
 155.251 +#513 := (iff #864 #855)
 155.252 +#518 := [rewrite]: #513
 155.253 +#845 := [monotonicity #518 #842]: #844
 155.254 +#484 := [trans #845 #841]: #847
 155.255 +#849 := [monotonicity #484]: #851
 155.256 +#839 := [trans #849 #838]: #851
 155.257 +#490 := [quant-inst]: #489
 155.258 +#546 := [mp #490 #839]: #850
 155.259 +#644 := [unit-resolution #546 #953]: #855
 155.260 +#621 := (= #806 #858)
 155.261 +#32 := (= #30 #31)
 155.262 +#159 := [asserted]: #32
 155.263 +#626 := [monotonicity #159]: #621
 155.264 +#616 := [trans #626 #644]: #778
 155.265 +#606 := (not #778)
 155.266 +#608 := (or #606 #780)
 155.267 +#609 := [th-lemma]: #608
 155.268 +#612 := [unit-resolution #609 #616]: #780
 155.269 +#790 := (>= #806 0::int)
 155.270 +#613 := (or #606 #790)
 155.271 +#617 := [th-lemma]: #613
 155.272 +#610 := [unit-resolution #617 #616]: #790
 155.273 +#723 := (<= #130 1::int)
 155.274 +#746 := (= #130 1::int)
 155.275 +#713 := (or #848 #746)
 155.276 +#755 := (>= 1::int 0::int)
 155.277 +#756 := (not #755)
 155.278 +#743 := (= 1::int #130)
 155.279 +#744 := (or #743 #756)
 155.280 +#714 := (or #848 #744)
 155.281 +#718 := (iff #714 #713)
 155.282 +#720 := (iff #713 #713)
 155.283 +#725 := [rewrite]: #720
 155.284 +#739 := (iff #744 #746)
 155.285 +#735 := (or #746 false)
 155.286 +#738 := (iff #735 #746)
 155.287 +#733 := [rewrite]: #738
 155.288 +#736 := (iff #744 #735)
 155.289 +#731 := (iff #756 false)
 155.290 +#734 := (iff #756 #498)
 155.291 +#742 := (iff #755 true)
 155.292 +#748 := [rewrite]: #742
 155.293 +#730 := [monotonicity #748]: #734
 155.294 +#732 := [trans #730 #504]: #731
 155.295 +#745 := (iff #743 #746)
 155.296 +#747 := [rewrite]: #745
 155.297 +#737 := [monotonicity #747 #732]: #736
 155.298 +#712 := [trans #737 #733]: #739
 155.299 +#719 := [monotonicity #712]: #718
 155.300 +#721 := [trans #719 #725]: #718
 155.301 +#607 := [quant-inst]: #714
 155.302 +#722 := [mp #607 #721]: #713
 155.303 +#641 := [unit-resolution #722 #953]: #746
 155.304 +#620 := (not #746)
 155.305 +#623 := (or #620 #723)
 155.306 +#627 := [th-lemma]: #623
 155.307 +#629 := [unit-resolution #627 #641]: #723
 155.308 +#726 := (>= #130 1::int)
 155.309 +#630 := (or #620 #726)
 155.310 +#628 := [th-lemma]: #630
 155.311 +#631 := [unit-resolution #628 #641]: #726
 155.312 +#611 := [th-lemma #631 #629 #610 #612]: #618
 155.313 +#587 := [monotonicity #611]: #605
 155.314 +#596 := [symm #587]: #595
 155.315 +#581 := (= #103 #127)
 155.316 +decl uf_5 :: (-> T4 T3)
 155.317 +decl uf_8 :: T4
 155.318 +#33 := uf_8
 155.319 +#34 := (uf_5 uf_8)
 155.320 +#822 := (uf_4 #34)
 155.321 +#824 := (+ #130 #822)
 155.322 +#666 := (uf_3 #824)
 155.323 +#593 := (= #666 #127)
 155.324 +#589 := (= #127 #666)
 155.325 +#624 := (= 1::int #824)
 155.326 +#619 := (= #824 1::int)
 155.327 +#789 := (<= #822 0::int)
 155.328 +#787 := (= #822 0::int)
 155.329 +#632 := (= #822 #858)
 155.330 +#35 := (= #34 #31)
 155.331 +#162 := (= #31 #34)
 155.332 +#163 := (iff #35 #162)
 155.333 +#164 := [rewrite]: #163
 155.334 +#160 := [asserted]: #35
 155.335 +#167 := [mp #160 #164]: #162
 155.336 +#662 := [symm #167]: #35
 155.337 +#633 := [monotonicity #662]: #632
 155.338 +#634 := [trans #633 #644]: #787
 155.339 +#635 := (not #787)
 155.340 +#637 := (or #635 #789)
 155.341 +#638 := [th-lemma]: #637
 155.342 +#639 := [unit-resolution #638 #634]: #789
 155.343 +#781 := (>= #822 0::int)
 155.344 +#481 := (or #635 #781)
 155.345 +#640 := [th-lemma]: #481
 155.346 +#636 := [unit-resolution #640 #634]: #781
 155.347 +#622 := [th-lemma #631 #629 #636 #639]: #619
 155.348 +#625 := [symm #622]: #624
 155.349 +#590 := [monotonicity #625]: #589
 155.350 +#594 := [symm #590]: #593
 155.351 +#579 := (= #103 #666)
 155.352 +decl uf_6 :: (-> int T4 T4)
 155.353 +#539 := (uf_6 3::int uf_8)
 155.354 +#836 := (uf_5 #539)
 155.355 +#810 := (= #836 #666)
 155.356 +#813 := (= #666 #836)
 155.357 +#20 := (:var 0 T4)
 155.358 +#19 := (:var 1 int)
 155.359 +#21 := (uf_6 #19 #20)
 155.360 +#872 := (pattern #21)
 155.361 +#23 := (uf_5 #20)
 155.362 +#24 := (uf_4 #23)
 155.363 +#146 := (+ #24 #130)
 155.364 +#150 := (uf_3 #146)
 155.365 +#22 := (uf_5 #21)
 155.366 +#153 := (= #22 #150)
 155.367 +#873 := (forall (vars (?x3 int) (?x4 T4)) (:pat #872) #153)
 155.368 +#156 := (forall (vars (?x3 int) (?x4 T4)) #153)
 155.369 +#876 := (iff #156 #873)
 155.370 +#874 := (iff #153 #153)
 155.371 +#875 := [refl]: #874
 155.372 +#877 := [quant-intro #875]: #876
 155.373 +#328 := (~ #156 #156)
 155.374 +#364 := (~ #153 #153)
 155.375 +#365 := [refl]: #364
 155.376 +#326 := [nnf-pos #365]: #328
 155.377 +#25 := (+ #24 #14)
 155.378 +#26 := (uf_3 #25)
 155.379 +#27 := (= #22 #26)
 155.380 +#28 := (forall (vars (?x3 int) (?x4 T4)) #27)
 155.381 +#157 := (iff #28 #156)
 155.382 +#154 := (iff #27 #153)
 155.383 +#151 := (= #26 #150)
 155.384 +#148 := (= #25 #146)
 155.385 +#149 := [monotonicity #132]: #148
 155.386 +#152 := [monotonicity #149]: #151
 155.387 +#155 := [monotonicity #152]: #154
 155.388 +#158 := [quant-intro #155]: #157
 155.389 +#145 := [asserted]: #28
 155.390 +#161 := [mp #145 #158]: #156
 155.391 +#366 := [mp~ #161 #326]: #156
 155.392 +#878 := [mp #366 #877]: #873
 155.393 +#809 := (not #873)
 155.394 +#816 := (or #809 #813)
 155.395 +#817 := (+ #822 #130)
 155.396 +#818 := (uf_3 #817)
 155.397 +#823 := (= #836 #818)
 155.398 +#645 := (or #809 #823)
 155.399 +#648 := (iff #645 #816)
 155.400 +#802 := (iff #816 #816)
 155.401 +#804 := [rewrite]: #802
 155.402 +#814 := (iff #823 #813)
 155.403 +#807 := (iff #810 #813)
 155.404 +#808 := [rewrite]: #807
 155.405 +#811 := (iff #823 #810)
 155.406 +#667 := (= #818 #666)
 155.407 +#819 := (= #817 #824)
 155.408 +#825 := [rewrite]: #819
 155.409 +#668 := [monotonicity #825]: #667
 155.410 +#812 := [monotonicity #668]: #811
 155.411 +#815 := [trans #812 #808]: #814
 155.412 +#801 := [monotonicity #815]: #648
 155.413 +#805 := [trans #801 #804]: #648
 155.414 +#647 := [quant-inst]: #645
 155.415 +#803 := [mp #647 #805]: #816
 155.416 +#658 := [unit-resolution #803 #878]: #813
 155.417 +#592 := [symm #658]: #810
 155.418 +#600 := (= #103 #836)
 155.419 +decl uf_14 :: (-> T4 T3)
 155.420 +#540 := (uf_14 #539)
 155.421 +#548 := (= #540 #836)
 155.422 +#69 := (uf_14 #20)
 155.423 +#916 := (pattern #69)
 155.424 +#915 := (pattern #23)
 155.425 +#230 := (= #23 #69)
 155.426 +#917 := (forall (vars (?x14 T4)) (:pat #915 #916) #230)
 155.427 +#234 := (forall (vars (?x14 T4)) #230)
 155.428 +#920 := (iff #234 #917)
 155.429 +#918 := (iff #230 #230)
 155.430 +#919 := [refl]: #918
 155.431 +#921 := [quant-intro #919]: #920
 155.432 +#343 := (~ #234 #234)
 155.433 +#378 := (~ #230 #230)
 155.434 +#379 := [refl]: #378
 155.435 +#344 := [nnf-pos #379]: #343
 155.436 +#70 := (= #69 #23)
 155.437 +#71 := (forall (vars (?x14 T4)) #70)
 155.438 +#235 := (iff #71 #234)
 155.439 +#232 := (iff #70 #230)
 155.440 +#233 := [rewrite]: #232
 155.441 +#236 := [quant-intro #233]: #235
 155.442 +#229 := [asserted]: #71
 155.443 +#239 := [mp #229 #236]: #234
 155.444 +#380 := [mp~ #239 #344]: #234
 155.445 +#922 := [mp #380 #921]: #917
 155.446 +#541 := (not #917)
 155.447 +#828 := (or #541 #548)
 155.448 +#833 := (= #836 #540)
 155.449 +#829 := (or #541 #833)
 155.450 +#826 := (iff #829 #828)
 155.451 +#827 := (iff #828 #828)
 155.452 +#831 := [rewrite]: #827
 155.453 +#549 := (iff #833 #548)
 155.454 +#550 := [rewrite]: #549
 155.455 +#830 := [monotonicity #550]: #826
 155.456 +#820 := [trans #830 #831]: #826
 155.457 +#543 := [quant-inst]: #829
 155.458 +#821 := [mp #543 #820]: #828
 155.459 +#657 := [unit-resolution #821 #922]: #548
 155.460 +#521 := (= #103 #540)
 155.461 +#75 := (uf_6 #72 uf_8)
 155.462 +#924 := (pattern #75)
 155.463 +#73 := (uf_16 #72)
 155.464 +#923 := (pattern #73)
 155.465 +#76 := (uf_14 #75)
 155.466 +#74 := (uf_15 #73)
 155.467 +#77 := (= #74 #76)
 155.468 +#925 := (forall (vars (?x15 int)) (:pat #923 #924) #77)
 155.469 +#78 := (forall (vars (?x15 int)) #77)
 155.470 +#928 := (iff #78 #925)
 155.471 +#926 := (iff #77 #77)
 155.472 +#927 := [refl]: #926
 155.473 +#929 := [quant-intro #927]: #928
 155.474 +#345 := (~ #78 #78)
 155.475 +#381 := (~ #77 #77)
 155.476 +#382 := [refl]: #381
 155.477 +#346 := [nnf-pos #382]: #345
 155.478 +#237 := [asserted]: #78
 155.479 +#383 := [mp~ #237 #346]: #78
 155.480 +#930 := [mp #383 #929]: #925
 155.481 +#515 := (not #925)
 155.482 +#646 := (or #515 #521)
 155.483 +#853 := [quant-inst]: #646
 155.484 +#603 := [unit-resolution #853 #930]: #521
 155.485 +#577 := [trans #603 #657]: #600
 155.486 +#580 := [trans #577 #592]: #579
 155.487 +#582 := [trans #580 #594]: #581
 155.488 +#584 := [trans #582 #596]: #583
 155.489 +#578 := [trans #584 #598]: #585
 155.490 +#571 := [trans #578 #615]: #586
 155.491 +#572 := [trans #571 #588]: #107
 155.492 +#108 := (not #107)
 155.493 +#325 := [asserted]: #108
 155.494 +[unit-resolution #325 #572]: false
 155.495 +unsat
   156.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   156.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_01	Tue Oct 20 10:11:30 2009 +0200
   156.3 @@ -0,0 +1,13 @@
   156.4 +(benchmark Isabelle
   156.5 +:extrasorts ( T1)
   156.6 +:extrafuns (
   156.7 +  (uf_1 Int T1)
   156.8 +  (uf_2 T1 Int)
   156.9 +  (uf_3 T1)
  156.10 + )
  156.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  156.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  156.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  156.14 +:assumption (= (uf_1 (* 2 (uf_2 uf_3))) (uf_1 1))
  156.15 +:formula true
  156.16 +)
   157.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   157.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_01.proof	Tue Oct 20 10:11:30 2009 +0200
   157.3 @@ -0,0 +1,246 @@
   157.4 +#2 := false
   157.5 +#9 := 0::int
   157.6 +decl uf_2 :: (-> T1 int)
   157.7 +decl uf_1 :: (-> int T1)
   157.8 +decl uf_3 :: T1
   157.9 +#22 := uf_3
  157.10 +#23 := (uf_2 uf_3)
  157.11 +#21 := 2::int
  157.12 +#24 := (* 2::int #23)
  157.13 +#25 := (uf_1 #24)
  157.14 +#293 := (uf_2 #25)
  157.15 +#292 := -1::int
  157.16 +#296 := (* -1::int #293)
  157.17 +#275 := (+ #24 #296)
  157.18 +#258 := (<= #275 0::int)
  157.19 +#611 := (= #275 0::int)
  157.20 +#204 := (>= #24 0::int)
  157.21 +#596 := (= #293 0::int)
  157.22 +#541 := (not #596)
  157.23 +#300 := (<= #293 0::int)
  157.24 +#460 := (not #300)
  157.25 +#26 := 1::int
  157.26 +#570 := (>= #293 1::int)
  157.27 +#569 := (= #293 1::int)
  157.28 +#27 := (uf_1 1::int)
  157.29 +#318 := (uf_2 #27)
  157.30 +#311 := (= #318 1::int)
  157.31 +#10 := (:var 0 int)
  157.32 +#12 := (uf_1 #10)
  157.33 +#627 := (pattern #12)
  157.34 +#70 := (>= #10 0::int)
  157.35 +#71 := (not #70)
  157.36 +#13 := (uf_2 #12)
  157.37 +#52 := (= #10 #13)
  157.38 +#77 := (or #52 #71)
  157.39 +#628 := (forall (vars (?x2 int)) (:pat #627) #77)
  157.40 +#82 := (forall (vars (?x2 int)) #77)
  157.41 +#631 := (iff #82 #628)
  157.42 +#629 := (iff #77 #77)
  157.43 +#630 := [refl]: #629
  157.44 +#632 := [quant-intro #630]: #631
  157.45 +#132 := (~ #82 #82)
  157.46 +#144 := (~ #77 #77)
  157.47 +#145 := [refl]: #144
  157.48 +#130 := [nnf-pos #145]: #132
  157.49 +#14 := (= #13 #10)
  157.50 +#11 := (<= 0::int #10)
  157.51 +#15 := (implies #11 #14)
  157.52 +#16 := (forall (vars (?x2 int)) #15)
  157.53 +#85 := (iff #16 #82)
  157.54 +#59 := (not #11)
  157.55 +#60 := (or #59 #52)
  157.56 +#65 := (forall (vars (?x2 int)) #60)
  157.57 +#83 := (iff #65 #82)
  157.58 +#80 := (iff #60 #77)
  157.59 +#74 := (or #71 #52)
  157.60 +#78 := (iff #74 #77)
  157.61 +#79 := [rewrite]: #78
  157.62 +#75 := (iff #60 #74)
  157.63 +#72 := (iff #59 #71)
  157.64 +#68 := (iff #11 #70)
  157.65 +#69 := [rewrite]: #68
  157.66 +#73 := [monotonicity #69]: #72
  157.67 +#76 := [monotonicity #73]: #75
  157.68 +#81 := [trans #76 #79]: #80
  157.69 +#84 := [quant-intro #81]: #83
  157.70 +#66 := (iff #16 #65)
  157.71 +#63 := (iff #15 #60)
  157.72 +#56 := (implies #11 #52)
  157.73 +#61 := (iff #56 #60)
  157.74 +#62 := [rewrite]: #61
  157.75 +#57 := (iff #15 #56)
  157.76 +#54 := (iff #14 #52)
  157.77 +#55 := [rewrite]: #54
  157.78 +#58 := [monotonicity #55]: #57
  157.79 +#64 := [trans #58 #62]: #63
  157.80 +#67 := [quant-intro #64]: #66
  157.81 +#86 := [trans #67 #84]: #85
  157.82 +#51 := [asserted]: #16
  157.83 +#87 := [mp #51 #86]: #82
  157.84 +#146 := [mp~ #87 #130]: #82
  157.85 +#633 := [mp #146 #632]: #628
  157.86 +#612 := (not #628)
  157.87 +#575 := (or #612 #311)
  157.88 +#316 := (>= 1::int 0::int)
  157.89 +#317 := (not #316)
  157.90 +#211 := (= 1::int #318)
  157.91 +#588 := (or #211 #317)
  157.92 +#576 := (or #612 #588)
  157.93 +#572 := (iff #576 #575)
  157.94 +#578 := (iff #575 #575)
  157.95 +#573 := [rewrite]: #578
  157.96 +#585 := (iff #588 #311)
  157.97 +#583 := (or #311 false)
  157.98 +#584 := (iff #583 #311)
  157.99 +#581 := [rewrite]: #584
 157.100 +#297 := (iff #588 #583)
 157.101 +#304 := (iff #317 false)
 157.102 +#1 := true
 157.103 +#587 := (not true)
 157.104 +#302 := (iff #587 false)
 157.105 +#303 := [rewrite]: #302
 157.106 +#591 := (iff #317 #587)
 157.107 +#586 := (iff #316 true)
 157.108 +#590 := [rewrite]: #586
 157.109 +#301 := [monotonicity #590]: #591
 157.110 +#582 := [trans #301 #303]: #304
 157.111 +#589 := (iff #211 #311)
 157.112 +#312 := [rewrite]: #589
 157.113 +#580 := [monotonicity #312 #582]: #297
 157.114 +#574 := [trans #580 #581]: #585
 157.115 +#577 := [monotonicity #574]: #572
 157.116 +#579 := [trans #577 #573]: #572
 157.117 +#571 := [quant-inst]: #576
 157.118 +#420 := [mp #571 #579]: #575
 157.119 +#437 := [unit-resolution #420 #633]: #311
 157.120 +#452 := (= #293 #318)
 157.121 +#28 := (= #25 #27)
 157.122 +#129 := [asserted]: #28
 157.123 +#454 := [monotonicity #129]: #452
 157.124 +#455 := [trans #454 #437]: #569
 157.125 +#448 := (not #569)
 157.126 +#456 := (or #448 #570)
 157.127 +#457 := [th-lemma]: #456
 157.128 +#458 := [unit-resolution #457 #455]: #570
 157.129 +#459 := (not #570)
 157.130 +#553 := (or #459 #460)
 157.131 +#550 := [th-lemma]: #553
 157.132 +#554 := [unit-resolution #550 #458]: #460
 157.133 +#543 := (or #541 #300)
 157.134 +#535 := [th-lemma]: #543
 157.135 +#532 := [unit-resolution #535 #554]: #541
 157.136 +#598 := (or #204 #596)
 157.137 +#18 := (= #13 0::int)
 157.138 +#118 := (or #18 #70)
 157.139 +#634 := (forall (vars (?x3 int)) (:pat #627) #118)
 157.140 +#123 := (forall (vars (?x3 int)) #118)
 157.141 +#637 := (iff #123 #634)
 157.142 +#635 := (iff #118 #118)
 157.143 +#636 := [refl]: #635
 157.144 +#638 := [quant-intro #636]: #637
 157.145 +#133 := (~ #123 #123)
 157.146 +#147 := (~ #118 #118)
 157.147 +#148 := [refl]: #147
 157.148 +#134 := [nnf-pos #148]: #133
 157.149 +#17 := (< #10 0::int)
 157.150 +#19 := (implies #17 #18)
 157.151 +#20 := (forall (vars (?x3 int)) #19)
 157.152 +#126 := (iff #20 #123)
 157.153 +#89 := (= 0::int #13)
 157.154 +#95 := (not #17)
 157.155 +#96 := (or #95 #89)
 157.156 +#101 := (forall (vars (?x3 int)) #96)
 157.157 +#124 := (iff #101 #123)
 157.158 +#121 := (iff #96 #118)
 157.159 +#115 := (or #70 #18)
 157.160 +#119 := (iff #115 #118)
 157.161 +#120 := [rewrite]: #119
 157.162 +#116 := (iff #96 #115)
 157.163 +#113 := (iff #89 #18)
 157.164 +#114 := [rewrite]: #113
 157.165 +#111 := (iff #95 #70)
 157.166 +#106 := (not #71)
 157.167 +#109 := (iff #106 #70)
 157.168 +#110 := [rewrite]: #109
 157.169 +#107 := (iff #95 #106)
 157.170 +#104 := (iff #17 #71)
 157.171 +#105 := [rewrite]: #104
 157.172 +#108 := [monotonicity #105]: #107
 157.173 +#112 := [trans #108 #110]: #111
 157.174 +#117 := [monotonicity #112 #114]: #116
 157.175 +#122 := [trans #117 #120]: #121
 157.176 +#125 := [quant-intro #122]: #124
 157.177 +#102 := (iff #20 #101)
 157.178 +#99 := (iff #19 #96)
 157.179 +#92 := (implies #17 #89)
 157.180 +#97 := (iff #92 #96)
 157.181 +#98 := [rewrite]: #97
 157.182 +#93 := (iff #19 #92)
 157.183 +#90 := (iff #18 #89)
 157.184 +#91 := [rewrite]: #90
 157.185 +#94 := [monotonicity #91]: #93
 157.186 +#100 := [trans #94 #98]: #99
 157.187 +#103 := [quant-intro #100]: #102
 157.188 +#127 := [trans #103 #125]: #126
 157.189 +#88 := [asserted]: #20
 157.190 +#128 := [mp #88 #127]: #123
 157.191 +#149 := [mp~ #128 #134]: #123
 157.192 +#639 := [mp #149 #638]: #634
 157.193 +#595 := (not #634)
 157.194 +#601 := (or #595 #204 #596)
 157.195 +#597 := (or #596 #204)
 157.196 +#238 := (or #595 #597)
 157.197 +#606 := (iff #238 #601)
 157.198 +#604 := (or #595 #598)
 157.199 +#605 := (iff #604 #601)
 157.200 +#603 := [rewrite]: #605
 157.201 +#243 := (iff #238 #604)
 157.202 +#599 := (iff #597 #598)
 157.203 +#600 := [rewrite]: #599
 157.204 +#244 := [monotonicity #600]: #243
 157.205 +#592 := [trans #244 #603]: #606
 157.206 +#602 := [quant-inst]: #238
 157.207 +#593 := [mp #602 #592]: #601
 157.208 +#534 := [unit-resolution #593 #639]: #598
 157.209 +#544 := [unit-resolution #534 #532]: #204
 157.210 +#290 := (not #204)
 157.211 +#281 := (or #290 #611)
 157.212 +#618 := (or #612 #290 #611)
 157.213 +#294 := (= #24 #293)
 157.214 +#295 := (or #294 #290)
 157.215 +#608 := (or #612 #295)
 157.216 +#594 := (iff #608 #618)
 157.217 +#272 := (or #612 #281)
 157.218 +#610 := (iff #272 #618)
 157.219 +#252 := [rewrite]: #610
 157.220 +#609 := (iff #608 #272)
 157.221 +#616 := (iff #295 #281)
 157.222 +#400 := (or #611 #290)
 157.223 +#614 := (iff #400 #281)
 157.224 +#615 := [rewrite]: #614
 157.225 +#607 := (iff #295 #400)
 157.226 +#613 := (iff #294 #611)
 157.227 +#269 := [rewrite]: #613
 157.228 +#280 := [monotonicity #269]: #607
 157.229 +#617 := [trans #280 #615]: #616
 157.230 +#268 := [monotonicity #617]: #609
 157.231 +#256 := [trans #268 #252]: #594
 157.232 +#267 := [quant-inst]: #608
 157.233 +#257 := [mp #267 #256]: #618
 157.234 +#545 := [unit-resolution #257 #633]: #281
 157.235 +#546 := [unit-resolution #545 #544]: #611
 157.236 +#542 := (not #611)
 157.237 +#547 := (or #542 #258)
 157.238 +#536 := [th-lemma]: #547
 157.239 +#537 := [unit-resolution #536 #546]: #258
 157.240 +#259 := (>= #275 0::int)
 157.241 +#538 := (or #542 #259)
 157.242 +#539 := [th-lemma]: #538
 157.243 +#533 := [unit-resolution #539 #546]: #259
 157.244 +#563 := (<= #293 1::int)
 157.245 +#540 := (or #448 #563)
 157.246 +#524 := [th-lemma]: #540
 157.247 +#525 := [unit-resolution #524 #455]: #563
 157.248 +[th-lemma #458 #525 #533 #537]: false
 157.249 +unsat
   158.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   158.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_02	Tue Oct 20 10:11:30 2009 +0200
   158.3 @@ -0,0 +1,14 @@
   158.4 +(benchmark Isabelle
   158.5 +:extrasorts ( T1)
   158.6 +:extrafuns (
   158.7 +  (uf_1 Int T1)
   158.8 +  (uf_2 T1 Int)
   158.9 +  (uf_3 T1)
  158.10 + )
  158.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  158.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  158.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  158.14 +:assumption (< (uf_2 uf_3) 3)
  158.15 +:assumption (not (< (uf_2 (uf_1 (* 2 (uf_2 uf_3)))) 7))
  158.16 +:formula true
  158.17 +)
   159.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   159.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_02.proof	Tue Oct 20 10:11:30 2009 +0200
   159.3 @@ -0,0 +1,199 @@
   159.4 +#2 := false
   159.5 +#23 := 3::int
   159.6 +decl uf_2 :: (-> T1 int)
   159.7 +decl uf_3 :: T1
   159.8 +#21 := uf_3
   159.9 +#22 := (uf_2 uf_3)
  159.10 +#137 := (>= #22 3::int)
  159.11 +#135 := (not #137)
  159.12 +#24 := (< #22 3::int)
  159.13 +#136 := (iff #24 #135)
  159.14 +#138 := [rewrite]: #136
  159.15 +#132 := [asserted]: #24
  159.16 +#139 := [mp #132 #138]: #135
  159.17 +#9 := 0::int
  159.18 +decl uf_1 :: (-> int T1)
  159.19 +#25 := 2::int
  159.20 +#26 := (* 2::int #22)
  159.21 +#27 := (uf_1 #26)
  159.22 +#28 := (uf_2 #27)
  159.23 +#297 := -1::int
  159.24 +#633 := (* -1::int #28)
  159.25 +#635 := (+ #26 #633)
  159.26 +#278 := (>= #635 0::int)
  159.27 +#291 := (= #635 0::int)
  159.28 +#315 := (>= #26 0::int)
  159.29 +#279 := (= #28 0::int)
  159.30 +#627 := (not #279)
  159.31 +#624 := (<= #28 0::int)
  159.32 +#281 := (not #624)
  159.33 +#29 := 7::int
  159.34 +#143 := (>= #28 7::int)
  159.35 +#30 := (< #28 7::int)
  159.36 +#31 := (not #30)
  159.37 +#150 := (iff #31 #143)
  159.38 +#141 := (not #143)
  159.39 +#145 := (not #141)
  159.40 +#148 := (iff #145 #143)
  159.41 +#149 := [rewrite]: #148
  159.42 +#146 := (iff #31 #145)
  159.43 +#142 := (iff #30 #141)
  159.44 +#144 := [rewrite]: #142
  159.45 +#147 := [monotonicity #144]: #146
  159.46 +#151 := [trans #147 #149]: #150
  159.47 +#133 := [asserted]: #31
  159.48 +#152 := [mp #133 #151]: #143
  159.49 +#618 := (or #281 #141)
  159.50 +#265 := [th-lemma]: #618
  159.51 +#266 := [unit-resolution #265 #152]: #281
  159.52 +#625 := (or #627 #624)
  159.53 +#628 := [th-lemma]: #625
  159.54 +#614 := [unit-resolution #628 #266]: #627
  159.55 +#10 := (:var 0 int)
  159.56 +#12 := (uf_1 #10)
  159.57 +#649 := (pattern #12)
  159.58 +#73 := (>= #10 0::int)
  159.59 +#13 := (uf_2 #12)
  159.60 +#18 := (= #13 0::int)
  159.61 +#121 := (or #18 #73)
  159.62 +#656 := (forall (vars (?x3 int)) (:pat #649) #121)
  159.63 +#126 := (forall (vars (?x3 int)) #121)
  159.64 +#659 := (iff #126 #656)
  159.65 +#657 := (iff #121 #121)
  159.66 +#658 := [refl]: #657
  159.67 +#660 := [quant-intro #658]: #659
  159.68 +#154 := (~ #126 #126)
  159.69 +#170 := (~ #121 #121)
  159.70 +#171 := [refl]: #170
  159.71 +#155 := [nnf-pos #171]: #154
  159.72 +#17 := (< #10 0::int)
  159.73 +#19 := (implies #17 #18)
  159.74 +#20 := (forall (vars (?x3 int)) #19)
  159.75 +#129 := (iff #20 #126)
  159.76 +#92 := (= 0::int #13)
  159.77 +#98 := (not #17)
  159.78 +#99 := (or #98 #92)
  159.79 +#104 := (forall (vars (?x3 int)) #99)
  159.80 +#127 := (iff #104 #126)
  159.81 +#124 := (iff #99 #121)
  159.82 +#118 := (or #73 #18)
  159.83 +#122 := (iff #118 #121)
  159.84 +#123 := [rewrite]: #122
  159.85 +#119 := (iff #99 #118)
  159.86 +#116 := (iff #92 #18)
  159.87 +#117 := [rewrite]: #116
  159.88 +#114 := (iff #98 #73)
  159.89 +#74 := (not #73)
  159.90 +#109 := (not #74)
  159.91 +#112 := (iff #109 #73)
  159.92 +#113 := [rewrite]: #112
  159.93 +#110 := (iff #98 #109)
  159.94 +#107 := (iff #17 #74)
  159.95 +#108 := [rewrite]: #107
  159.96 +#111 := [monotonicity #108]: #110
  159.97 +#115 := [trans #111 #113]: #114
  159.98 +#120 := [monotonicity #115 #117]: #119
  159.99 +#125 := [trans #120 #123]: #124
 159.100 +#128 := [quant-intro #125]: #127
 159.101 +#105 := (iff #20 #104)
 159.102 +#102 := (iff #19 #99)
 159.103 +#95 := (implies #17 #92)
 159.104 +#100 := (iff #95 #99)
 159.105 +#101 := [rewrite]: #100
 159.106 +#96 := (iff #19 #95)
 159.107 +#93 := (iff #18 #92)
 159.108 +#94 := [rewrite]: #93
 159.109 +#97 := [monotonicity #94]: #96
 159.110 +#103 := [trans #97 #101]: #102
 159.111 +#106 := [quant-intro #103]: #105
 159.112 +#130 := [trans #106 #128]: #129
 159.113 +#91 := [asserted]: #20
 159.114 +#131 := [mp #91 #130]: #126
 159.115 +#172 := [mp~ #131 #155]: #126
 159.116 +#661 := [mp #172 #660]: #656
 159.117 +#619 := (not #656)
 159.118 +#620 := (or #619 #279 #315)
 159.119 +#280 := (or #279 #315)
 159.120 +#621 := (or #619 #280)
 159.121 +#617 := (iff #621 #620)
 159.122 +#623 := [rewrite]: #617
 159.123 +#622 := [quant-inst]: #621
 159.124 +#260 := [mp #622 #623]: #620
 159.125 +#615 := [unit-resolution #260 #661 #614]: #315
 159.126 +#316 := (not #315)
 159.127 +#302 := (or #291 #316)
 159.128 +#55 := (= #10 #13)
 159.129 +#80 := (or #55 #74)
 159.130 +#650 := (forall (vars (?x2 int)) (:pat #649) #80)
 159.131 +#85 := (forall (vars (?x2 int)) #80)
 159.132 +#653 := (iff #85 #650)
 159.133 +#651 := (iff #80 #80)
 159.134 +#652 := [refl]: #651
 159.135 +#654 := [quant-intro #652]: #653
 159.136 +#153 := (~ #85 #85)
 159.137 +#167 := (~ #80 #80)
 159.138 +#168 := [refl]: #167
 159.139 +#134 := [nnf-pos #168]: #153
 159.140 +#14 := (= #13 #10)
 159.141 +#11 := (<= 0::int #10)
 159.142 +#15 := (implies #11 #14)
 159.143 +#16 := (forall (vars (?x2 int)) #15)
 159.144 +#88 := (iff #16 #85)
 159.145 +#62 := (not #11)
 159.146 +#63 := (or #62 #55)
 159.147 +#68 := (forall (vars (?x2 int)) #63)
 159.148 +#86 := (iff #68 #85)
 159.149 +#83 := (iff #63 #80)
 159.150 +#77 := (or #74 #55)
 159.151 +#81 := (iff #77 #80)
 159.152 +#82 := [rewrite]: #81
 159.153 +#78 := (iff #63 #77)
 159.154 +#75 := (iff #62 #74)
 159.155 +#71 := (iff #11 #73)
 159.156 +#72 := [rewrite]: #71
 159.157 +#76 := [monotonicity #72]: #75
 159.158 +#79 := [monotonicity #76]: #78
 159.159 +#84 := [trans #79 #82]: #83
 159.160 +#87 := [quant-intro #84]: #86
 159.161 +#69 := (iff #16 #68)
 159.162 +#66 := (iff #15 #63)
 159.163 +#59 := (implies #11 #55)
 159.164 +#64 := (iff #59 #63)
 159.165 +#65 := [rewrite]: #64
 159.166 +#60 := (iff #15 #59)
 159.167 +#57 := (iff #14 #55)
 159.168 +#58 := [rewrite]: #57
 159.169 +#61 := [monotonicity #58]: #60
 159.170 +#67 := [trans #61 #65]: #66
 159.171 +#70 := [quant-intro #67]: #69
 159.172 +#89 := [trans #70 #87]: #88
 159.173 +#54 := [asserted]: #16
 159.174 +#90 := [mp #54 #89]: #85
 159.175 +#169 := [mp~ #90 #134]: #85
 159.176 +#655 := [mp #169 #654]: #650
 159.177 +#637 := (not #650)
 159.178 +#638 := (or #637 #291 #316)
 159.179 +#314 := (= #26 #28)
 159.180 +#318 := (or #314 #316)
 159.181 +#639 := (or #637 #318)
 159.182 +#290 := (iff #639 #638)
 159.183 +#640 := (or #637 #302)
 159.184 +#294 := (iff #640 #638)
 159.185 +#631 := [rewrite]: #294
 159.186 +#630 := (iff #639 #640)
 159.187 +#303 := (iff #318 #302)
 159.188 +#422 := (iff #314 #291)
 159.189 +#629 := [rewrite]: #422
 159.190 +#636 := [monotonicity #629]: #303
 159.191 +#289 := [monotonicity #636]: #630
 159.192 +#632 := [trans #289 #631]: #290
 159.193 +#634 := [quant-inst]: #639
 159.194 +#274 := [mp #634 #632]: #638
 159.195 +#322 := [unit-resolution #274 #655]: #302
 159.196 +#337 := [unit-resolution #322 #615]: #291
 159.197 +#338 := (not #291)
 159.198 +#339 := (or #338 #278)
 159.199 +#340 := [th-lemma]: #339
 159.200 +#232 := [unit-resolution #340 #337]: #278
 159.201 +[th-lemma #152 #232 #139]: false
 159.202 +unsat
   160.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   160.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_03	Tue Oct 20 10:11:30 2009 +0200
   160.3 @@ -0,0 +1,13 @@
   160.4 +(benchmark Isabelle
   160.5 +:extrasorts ( T1)
   160.6 +:extrafuns (
   160.7 +  (uf_1 Int T1)
   160.8 +  (uf_2 T1 Int)
   160.9 +  (uf_3 T1)
  160.10 + )
  160.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  160.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  160.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  160.14 +:assumption (not (let (?x4 (uf_1 (+ 1 (uf_2 uf_3)))) (< (uf_2 (uf_1 (* 0 (uf_2 ?x4)))) (uf_2 (uf_1 (- (uf_2 ?x4) (uf_2 uf_3)))))))
  160.15 +:formula true
  160.16 +)
   161.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   161.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_03.proof	Tue Oct 20 10:11:30 2009 +0200
   161.3 @@ -0,0 +1,367 @@
   161.4 +#2 := false
   161.5 +#9 := 0::int
   161.6 +decl uf_2 :: (-> T1 int)
   161.7 +decl uf_3 :: T1
   161.8 +#22 := uf_3
   161.9 +#23 := (uf_2 uf_3)
  161.10 +#469 := (= #23 0::int)
  161.11 +decl uf_1 :: (-> int T1)
  161.12 +#251 := (uf_1 #23)
  161.13 +#557 := (uf_2 #251)
  161.14 +#558 := (= #557 0::int)
  161.15 +#556 := (>= #23 0::int)
  161.16 +#477 := (not #556)
  161.17 +#144 := -1::int
  161.18 +#348 := (>= #23 -1::int)
  161.19 +#628 := (not #348)
  161.20 +#21 := 1::int
  161.21 +#24 := (+ 1::int #23)
  161.22 +#25 := (uf_1 #24)
  161.23 +#26 := (uf_2 #25)
  161.24 +#632 := (* -1::int #26)
  161.25 +#636 := (+ #23 #632)
  161.26 +#633 := (= #636 -1::int)
  161.27 +#471 := (not #633)
  161.28 +#613 := (<= #636 -1::int)
  161.29 +#527 := (not #613)
  161.30 +#145 := (* -1::int #23)
  161.31 +#146 := (+ #145 #26)
  161.32 +#149 := (uf_1 #146)
  161.33 +#152 := (uf_2 #149)
  161.34 +#504 := (+ #632 #152)
  161.35 +#505 := (+ #23 #504)
  161.36 +#573 := (>= #505 0::int)
  161.37 +#502 := (= #505 0::int)
  161.38 +#599 := (<= #636 0::int)
  161.39 +#526 := [hypothesis]: #613
  161.40 +#491 := (or #527 #599)
  161.41 +#515 := [th-lemma]: #491
  161.42 +#516 := [unit-resolution #515 #526]: #599
  161.43 +#587 := (not #599)
  161.44 +#578 := (or #502 #587)
  161.45 +#10 := (:var 0 int)
  161.46 +#12 := (uf_1 #10)
  161.47 +#673 := (pattern #12)
  161.48 +#76 := (>= #10 0::int)
  161.49 +#77 := (not #76)
  161.50 +#13 := (uf_2 #12)
  161.51 +#58 := (= #10 #13)
  161.52 +#83 := (or #58 #77)
  161.53 +#674 := (forall (vars (?x2 int)) (:pat #673) #83)
  161.54 +#88 := (forall (vars (?x2 int)) #83)
  161.55 +#677 := (iff #88 #674)
  161.56 +#675 := (iff #83 #83)
  161.57 +#676 := [refl]: #675
  161.58 +#678 := [quant-intro #676]: #677
  161.59 +#179 := (~ #88 #88)
  161.60 +#191 := (~ #83 #83)
  161.61 +#192 := [refl]: #191
  161.62 +#177 := [nnf-pos #192]: #179
  161.63 +#14 := (= #13 #10)
  161.64 +#11 := (<= 0::int #10)
  161.65 +#15 := (implies #11 #14)
  161.66 +#16 := (forall (vars (?x2 int)) #15)
  161.67 +#91 := (iff #16 #88)
  161.68 +#65 := (not #11)
  161.69 +#66 := (or #65 #58)
  161.70 +#71 := (forall (vars (?x2 int)) #66)
  161.71 +#89 := (iff #71 #88)
  161.72 +#86 := (iff #66 #83)
  161.73 +#80 := (or #77 #58)
  161.74 +#84 := (iff #80 #83)
  161.75 +#85 := [rewrite]: #84
  161.76 +#81 := (iff #66 #80)
  161.77 +#78 := (iff #65 #77)
  161.78 +#74 := (iff #11 #76)
  161.79 +#75 := [rewrite]: #74
  161.80 +#79 := [monotonicity #75]: #78
  161.81 +#82 := [monotonicity #79]: #81
  161.82 +#87 := [trans #82 #85]: #86
  161.83 +#90 := [quant-intro #87]: #89
  161.84 +#72 := (iff #16 #71)
  161.85 +#69 := (iff #15 #66)
  161.86 +#62 := (implies #11 #58)
  161.87 +#67 := (iff #62 #66)
  161.88 +#68 := [rewrite]: #67
  161.89 +#63 := (iff #15 #62)
  161.90 +#60 := (iff #14 #58)
  161.91 +#61 := [rewrite]: #60
  161.92 +#64 := [monotonicity #61]: #63
  161.93 +#70 := [trans #64 #68]: #69
  161.94 +#73 := [quant-intro #70]: #72
  161.95 +#92 := [trans #73 #90]: #91
  161.96 +#57 := [asserted]: #16
  161.97 +#93 := [mp #57 #92]: #88
  161.98 +#193 := [mp~ #93 #177]: #88
  161.99 +#679 := [mp #193 #678]: #674
 161.100 +#644 := (not #674)
 161.101 +#591 := (or #644 #502 #587)
 161.102 +#498 := (>= #146 0::int)
 161.103 +#500 := (not #498)
 161.104 +#501 := (= #146 #152)
 161.105 +#494 := (or #501 #500)
 161.106 +#592 := (or #644 #494)
 161.107 +#579 := (iff #592 #591)
 161.108 +#593 := (or #644 #578)
 161.109 +#584 := (iff #593 #591)
 161.110 +#585 := [rewrite]: #584
 161.111 +#582 := (iff #592 #593)
 161.112 +#580 := (iff #494 #578)
 161.113 +#589 := (iff #500 #587)
 161.114 +#596 := (iff #498 #599)
 161.115 +#600 := [rewrite]: #596
 161.116 +#581 := [monotonicity #600]: #589
 161.117 +#503 := (iff #501 #502)
 161.118 +#506 := [rewrite]: #503
 161.119 +#590 := [monotonicity #506 #581]: #580
 161.120 +#583 := [monotonicity #590]: #582
 161.121 +#586 := [trans #583 #585]: #579
 161.122 +#588 := [quant-inst]: #592
 161.123 +#570 := [mp #588 #586]: #591
 161.124 +#511 := [unit-resolution #570 #679]: #578
 161.125 +#517 := [unit-resolution #511 #516]: #502
 161.126 +#485 := (not #502)
 161.127 +#492 := (or #485 #573)
 161.128 +#451 := [th-lemma]: #492
 161.129 +#482 := [unit-resolution #451 #517]: #573
 161.130 +#554 := (<= #152 0::int)
 161.131 +#163 := (* -1::int #152)
 161.132 +#138 := (uf_1 0::int)
 161.133 +#141 := (uf_2 #138)
 161.134 +#164 := (+ #141 #163)
 161.135 +#162 := (>= #164 0::int)
 161.136 +#30 := (- #26 #23)
 161.137 +#31 := (uf_1 #30)
 161.138 +#32 := (uf_2 #31)
 161.139 +#27 := (* 0::int #26)
 161.140 +#28 := (uf_1 #27)
 161.141 +#29 := (uf_2 #28)
 161.142 +#33 := (< #29 #32)
 161.143 +#34 := (not #33)
 161.144 +#174 := (iff #34 #162)
 161.145 +#155 := (< #141 #152)
 161.146 +#158 := (not #155)
 161.147 +#172 := (iff #158 #162)
 161.148 +#161 := (not #162)
 161.149 +#167 := (not #161)
 161.150 +#170 := (iff #167 #162)
 161.151 +#171 := [rewrite]: #170
 161.152 +#168 := (iff #158 #167)
 161.153 +#165 := (iff #155 #161)
 161.154 +#166 := [rewrite]: #165
 161.155 +#169 := [monotonicity #166]: #168
 161.156 +#173 := [trans #169 #171]: #172
 161.157 +#159 := (iff #34 #158)
 161.158 +#156 := (iff #33 #155)
 161.159 +#153 := (= #32 #152)
 161.160 +#150 := (= #31 #149)
 161.161 +#147 := (= #30 #146)
 161.162 +#148 := [rewrite]: #147
 161.163 +#151 := [monotonicity #148]: #150
 161.164 +#154 := [monotonicity #151]: #153
 161.165 +#142 := (= #29 #141)
 161.166 +#139 := (= #28 #138)
 161.167 +#136 := (= #27 0::int)
 161.168 +#137 := [rewrite]: #136
 161.169 +#140 := [monotonicity #137]: #139
 161.170 +#143 := [monotonicity #140]: #142
 161.171 +#157 := [monotonicity #143 #154]: #156
 161.172 +#160 := [monotonicity #157]: #159
 161.173 +#175 := [trans #160 #173]: #174
 161.174 +#135 := [asserted]: #34
 161.175 +#176 := [mp #135 #175]: #162
 161.176 +#651 := (<= #141 0::int)
 161.177 +#662 := (= #141 0::int)
 161.178 +#645 := (or #644 #662)
 161.179 +#316 := (>= 0::int 0::int)
 161.180 +#446 := (not #316)
 161.181 +#328 := (= 0::int #141)
 161.182 +#660 := (or #328 #446)
 161.183 +#646 := (or #644 #660)
 161.184 +#647 := (iff #646 #645)
 161.185 +#648 := (iff #645 #645)
 161.186 +#650 := [rewrite]: #648
 161.187 +#642 := (iff #660 #662)
 161.188 +#640 := (or #662 false)
 161.189 +#305 := (iff #640 #662)
 161.190 +#306 := [rewrite]: #305
 161.191 +#303 := (iff #660 #640)
 161.192 +#656 := (iff #446 false)
 161.193 +#1 := true
 161.194 +#654 := (not true)
 161.195 +#655 := (iff #654 false)
 161.196 +#315 := [rewrite]: #655
 161.197 +#314 := (iff #446 #654)
 161.198 +#658 := (iff #316 true)
 161.199 +#664 := [rewrite]: #658
 161.200 +#319 := [monotonicity #664]: #314
 161.201 +#299 := [trans #319 #315]: #656
 161.202 +#661 := (iff #328 #662)
 161.203 +#663 := [rewrite]: #661
 161.204 +#304 := [monotonicity #663 #299]: #303
 161.205 +#643 := [trans #304 #306]: #642
 161.206 +#285 := [monotonicity #643]: #647
 161.207 +#290 := [trans #285 #650]: #647
 161.208 +#641 := [quant-inst]: #646
 161.209 +#291 := [mp #641 #290]: #645
 161.210 +#484 := [unit-resolution #291 #679]: #662
 161.211 +#486 := (not #662)
 161.212 +#493 := (or #486 #651)
 161.213 +#495 := [th-lemma]: #493
 161.214 +#496 := [unit-resolution #495 #484]: #651
 161.215 +#497 := (not #651)
 161.216 +#507 := (or #554 #497 #161)
 161.217 +#487 := [th-lemma]: #507
 161.218 +#508 := [unit-resolution #487 #496 #176]: #554
 161.219 +#463 := [th-lemma #508 #526 #482]: false
 161.220 +#464 := [lemma #463]: #527
 161.221 +#472 := (or #471 #613)
 161.222 +#473 := [th-lemma]: #472
 161.223 +#474 := [unit-resolution #473 #464]: #471
 161.224 +#631 := (or #628 #633)
 161.225 +#618 := (or #644 #628 #633)
 161.226 +#634 := (>= #24 0::int)
 161.227 +#635 := (not #634)
 161.228 +#357 := (= #24 #26)
 161.229 +#358 := (or #357 #635)
 161.230 +#623 := (or #644 #358)
 161.231 +#610 := (iff #623 #618)
 161.232 +#619 := (or #644 #631)
 161.233 +#467 := (iff #619 #618)
 161.234 +#468 := [rewrite]: #467
 161.235 +#625 := (iff #623 #619)
 161.236 +#622 := (iff #358 #631)
 161.237 +#626 := (or #633 #628)
 161.238 +#620 := (iff #626 #631)
 161.239 +#621 := [rewrite]: #620
 161.240 +#630 := (iff #358 #626)
 161.241 +#629 := (iff #635 #628)
 161.242 +#349 := (iff #634 #348)
 161.243 +#350 := [rewrite]: #349
 161.244 +#344 := [monotonicity #350]: #629
 161.245 +#637 := (iff #357 #633)
 161.246 +#347 := [rewrite]: #637
 161.247 +#627 := [monotonicity #347 #344]: #630
 161.248 +#617 := [trans #627 #621]: #622
 161.249 +#466 := [monotonicity #617]: #625
 161.250 +#611 := [trans #466 #468]: #610
 161.251 +#624 := [quant-inst]: #623
 161.252 +#612 := [mp #624 #611]: #618
 161.253 +#475 := [unit-resolution #612 #679]: #631
 161.254 +#476 := [unit-resolution #475 #474]: #628
 161.255 +#478 := (or #477 #348)
 161.256 +#479 := [th-lemma]: #478
 161.257 +#480 := [unit-resolution #479 #476]: #477
 161.258 +#560 := (or #556 #558)
 161.259 +#18 := (= #13 0::int)
 161.260 +#124 := (or #18 #76)
 161.261 +#680 := (forall (vars (?x3 int)) (:pat #673) #124)
 161.262 +#129 := (forall (vars (?x3 int)) #124)
 161.263 +#683 := (iff #129 #680)
 161.264 +#681 := (iff #124 #124)
 161.265 +#682 := [refl]: #681
 161.266 +#684 := [quant-intro #682]: #683
 161.267 +#180 := (~ #129 #129)
 161.268 +#194 := (~ #124 #124)
 161.269 +#195 := [refl]: #194
 161.270 +#181 := [nnf-pos #195]: #180
 161.271 +#17 := (< #10 0::int)
 161.272 +#19 := (implies #17 #18)
 161.273 +#20 := (forall (vars (?x3 int)) #19)
 161.274 +#132 := (iff #20 #129)
 161.275 +#95 := (= 0::int #13)
 161.276 +#101 := (not #17)
 161.277 +#102 := (or #101 #95)
 161.278 +#107 := (forall (vars (?x3 int)) #102)
 161.279 +#130 := (iff #107 #129)
 161.280 +#127 := (iff #102 #124)
 161.281 +#121 := (or #76 #18)
 161.282 +#125 := (iff #121 #124)
 161.283 +#126 := [rewrite]: #125
 161.284 +#122 := (iff #102 #121)
 161.285 +#119 := (iff #95 #18)
 161.286 +#120 := [rewrite]: #119
 161.287 +#117 := (iff #101 #76)
 161.288 +#112 := (not #77)
 161.289 +#115 := (iff #112 #76)
 161.290 +#116 := [rewrite]: #115
 161.291 +#113 := (iff #101 #112)
 161.292 +#110 := (iff #17 #77)
 161.293 +#111 := [rewrite]: #110
 161.294 +#114 := [monotonicity #111]: #113
 161.295 +#118 := [trans #114 #116]: #117
 161.296 +#123 := [monotonicity #118 #120]: #122
 161.297 +#128 := [trans #123 #126]: #127
 161.298 +#131 := [quant-intro #128]: #130
 161.299 +#108 := (iff #20 #107)
 161.300 +#105 := (iff #19 #102)
 161.301 +#98 := (implies #17 #95)
 161.302 +#103 := (iff #98 #102)
 161.303 +#104 := [rewrite]: #103
 161.304 +#99 := (iff #19 #98)
 161.305 +#96 := (iff #18 #95)
 161.306 +#97 := [rewrite]: #96
 161.307 +#100 := [monotonicity #97]: #99
 161.308 +#106 := [trans #100 #104]: #105
 161.309 +#109 := [quant-intro #106]: #108
 161.310 +#133 := [trans #109 #131]: #132
 161.311 +#94 := [asserted]: #20
 161.312 +#134 := [mp #94 #133]: #129
 161.313 +#196 := [mp~ #134 #181]: #129
 161.314 +#685 := [mp #196 #684]: #680
 161.315 +#604 := (not #680)
 161.316 +#562 := (or #604 #556 #558)
 161.317 +#559 := (or #558 #556)
 161.318 +#540 := (or #604 #559)
 161.319 +#542 := (iff #540 #562)
 161.320 +#543 := (or #604 #560)
 161.321 +#546 := (iff #543 #562)
 161.322 +#547 := [rewrite]: #546
 161.323 +#544 := (iff #540 #543)
 161.324 +#561 := (iff #559 #560)
 161.325 +#551 := [rewrite]: #561
 161.326 +#545 := [monotonicity #551]: #544
 161.327 +#548 := [trans #545 #547]: #542
 161.328 +#541 := [quant-inst]: #540
 161.329 +#534 := [mp #541 #548]: #562
 161.330 +#465 := [unit-resolution #534 #685]: #560
 161.331 +#481 := [unit-resolution #465 #480]: #558
 161.332 +#443 := (= #23 #557)
 161.333 +#337 := (= uf_3 #251)
 161.334 +#4 := (:var 0 T1)
 161.335 +#5 := (uf_2 #4)
 161.336 +#665 := (pattern #5)
 161.337 +#6 := (uf_1 #5)
 161.338 +#51 := (= #4 #6)
 161.339 +#666 := (forall (vars (?x1 T1)) (:pat #665) #51)
 161.340 +#54 := (forall (vars (?x1 T1)) #51)
 161.341 +#667 := (iff #54 #666)
 161.342 +#669 := (iff #666 #666)
 161.343 +#670 := [rewrite]: #669
 161.344 +#668 := [rewrite]: #667
 161.345 +#671 := [trans #668 #670]: #667
 161.346 +#188 := (~ #54 #54)
 161.347 +#186 := (~ #51 #51)
 161.348 +#187 := [refl]: #186
 161.349 +#189 := [nnf-pos #187]: #188
 161.350 +#7 := (= #6 #4)
 161.351 +#8 := (forall (vars (?x1 T1)) #7)
 161.352 +#55 := (iff #8 #54)
 161.353 +#52 := (iff #7 #51)
 161.354 +#53 := [rewrite]: #52
 161.355 +#56 := [quant-intro #53]: #55
 161.356 +#50 := [asserted]: #8
 161.357 +#59 := [mp #50 #56]: #54
 161.358 +#190 := [mp~ #59 #189]: #54
 161.359 +#672 := [mp #190 #671]: #666
 161.360 +#252 := (not #666)
 161.361 +#342 := (or #252 #337)
 161.362 +#339 := [quant-inst]: #342
 161.363 +#442 := [unit-resolution #339 #672]: #337
 161.364 +#450 := [monotonicity #442]: #443
 161.365 +#452 := [trans #450 #481]: #469
 161.366 +#453 := (not #469)
 161.367 +#454 := (or #453 #556)
 161.368 +#456 := [th-lemma]: #454
 161.369 +[unit-resolution #456 #480 #452]: false
 161.370 +unsat
   162.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   162.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_04	Tue Oct 20 10:11:30 2009 +0200
   162.3 @@ -0,0 +1,13 @@
   162.4 +(benchmark Isabelle
   162.5 +:extrasorts ( T1 T2)
   162.6 +:extrafuns (
   162.7 +  (uf_1 Int T1)
   162.8 +  (uf_2 T1 Int)
   162.9 +  (uf_3 T1)
  162.10 + )
  162.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  162.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  162.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  162.14 +:assumption (not (let (?x4 (uf_1 (+ 1 (uf_2 uf_3)))) (flet ($x5 (if_then_else (< 0 (uf_2 ?x4)) true false)) (or (iff $x5 (= (uf_1 (- (uf_2 ?x4) 1)) uf_3)) $x5))))
  162.15 +:formula true
  162.16 +)
   163.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   163.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_04.proof	Tue Oct 20 10:11:30 2009 +0200
   163.3 @@ -0,0 +1,302 @@
   163.4 +#2 := false
   163.5 +#9 := 0::int
   163.6 +decl uf_2 :: (-> T1 int)
   163.7 +decl uf_1 :: (-> int T1)
   163.8 +decl uf_3 :: T1
   163.9 +#22 := uf_3
  163.10 +#23 := (uf_2 uf_3)
  163.11 +#21 := 1::int
  163.12 +#24 := (+ 1::int #23)
  163.13 +#25 := (uf_1 #24)
  163.14 +#26 := (uf_2 #25)
  163.15 +#138 := -1::int
  163.16 +#139 := (+ -1::int #26)
  163.17 +#142 := (uf_1 #139)
  163.18 +#289 := (uf_2 #142)
  163.19 +#383 := (* -1::int #289)
  163.20 +#542 := (+ #23 #383)
  163.21 +#544 := (>= #542 0::int)
  163.22 +#541 := (= #23 #289)
  163.23 +#148 := (= uf_3 #142)
  163.24 +#167 := (<= #26 0::int)
  163.25 +#168 := (not #167)
  163.26 +#174 := (iff #148 #168)
  163.27 +#189 := (not #174)
  163.28 +#220 := (iff #189 #148)
  163.29 +#210 := (not #148)
  163.30 +#215 := (not #210)
  163.31 +#218 := (iff #215 #148)
  163.32 +#219 := [rewrite]: #218
  163.33 +#216 := (iff #189 #215)
  163.34 +#213 := (iff #174 #210)
  163.35 +#207 := (iff #148 false)
  163.36 +#211 := (iff #207 #210)
  163.37 +#212 := [rewrite]: #211
  163.38 +#208 := (iff #174 #207)
  163.39 +#205 := (iff #168 false)
  163.40 +#1 := true
  163.41 +#200 := (not true)
  163.42 +#203 := (iff #200 false)
  163.43 +#204 := [rewrite]: #203
  163.44 +#201 := (iff #168 #200)
  163.45 +#198 := (iff #167 true)
  163.46 +#179 := (or #168 #174)
  163.47 +#182 := (not #179)
  163.48 +#27 := (< 0::int #26)
  163.49 +#28 := (ite #27 true false)
  163.50 +#29 := (- #26 1::int)
  163.51 +#30 := (uf_1 #29)
  163.52 +#31 := (= #30 uf_3)
  163.53 +#32 := (iff #28 #31)
  163.54 +#33 := (or #32 #28)
  163.55 +#34 := (not #33)
  163.56 +#185 := (iff #34 #182)
  163.57 +#153 := (iff #27 #148)
  163.58 +#159 := (or #27 #153)
  163.59 +#164 := (not #159)
  163.60 +#183 := (iff #164 #182)
  163.61 +#180 := (iff #159 #179)
  163.62 +#177 := (iff #153 #174)
  163.63 +#171 := (iff #168 #148)
  163.64 +#175 := (iff #171 #174)
  163.65 +#176 := [rewrite]: #175
  163.66 +#172 := (iff #153 #171)
  163.67 +#169 := (iff #27 #168)
  163.68 +#170 := [rewrite]: #169
  163.69 +#173 := [monotonicity #170]: #172
  163.70 +#178 := [trans #173 #176]: #177
  163.71 +#181 := [monotonicity #170 #178]: #180
  163.72 +#184 := [monotonicity #181]: #183
  163.73 +#165 := (iff #34 #164)
  163.74 +#162 := (iff #33 #159)
  163.75 +#156 := (or #153 #27)
  163.76 +#160 := (iff #156 #159)
  163.77 +#161 := [rewrite]: #160
  163.78 +#157 := (iff #33 #156)
  163.79 +#136 := (iff #28 #27)
  163.80 +#137 := [rewrite]: #136
  163.81 +#154 := (iff #32 #153)
  163.82 +#151 := (iff #31 #148)
  163.83 +#145 := (= #142 uf_3)
  163.84 +#149 := (iff #145 #148)
  163.85 +#150 := [rewrite]: #149
  163.86 +#146 := (iff #31 #145)
  163.87 +#143 := (= #30 #142)
  163.88 +#140 := (= #29 #139)
  163.89 +#141 := [rewrite]: #140
  163.90 +#144 := [monotonicity #141]: #143
  163.91 +#147 := [monotonicity #144]: #146
  163.92 +#152 := [trans #147 #150]: #151
  163.93 +#155 := [monotonicity #137 #152]: #154
  163.94 +#158 := [monotonicity #155 #137]: #157
  163.95 +#163 := [trans #158 #161]: #162
  163.96 +#166 := [monotonicity #163]: #165
  163.97 +#186 := [trans #166 #184]: #185
  163.98 +#135 := [asserted]: #34
  163.99 +#187 := [mp #135 #186]: #182
 163.100 +#188 := [not-or-elim #187]: #167
 163.101 +#199 := [iff-true #188]: #198
 163.102 +#202 := [monotonicity #199]: #201
 163.103 +#206 := [trans #202 #204]: #205
 163.104 +#209 := [monotonicity #206]: #208
 163.105 +#214 := [trans #209 #212]: #213
 163.106 +#217 := [monotonicity #214]: #216
 163.107 +#221 := [trans #217 #219]: #220
 163.108 +#190 := [not-or-elim #187]: #189
 163.109 +#222 := [mp #190 #221]: #148
 163.110 +#624 := [monotonicity #222]: #541
 163.111 +#618 := (not #541)
 163.112 +#625 := (or #618 #544)
 163.113 +#609 := [th-lemma]: #625
 163.114 +#610 := [unit-resolution #609 #624]: #544
 163.115 +#698 := (* -1::int #26)
 163.116 +#355 := (+ #23 #698)
 163.117 +#324 := (<= #355 -1::int)
 163.118 +#485 := (= #355 -1::int)
 163.119 +#367 := (>= #23 -1::int)
 163.120 +#533 := (>= #289 0::int)
 163.121 +#643 := (= #289 0::int)
 163.122 +#659 := (>= #26 1::int)
 163.123 +#656 := (not #659)
 163.124 +#612 := (or #656 #168)
 163.125 +#613 := [th-lemma]: #612
 163.126 +#614 := [unit-resolution #613 #188]: #656
 163.127 +#10 := (:var 0 int)
 163.128 +#12 := (uf_1 #10)
 163.129 +#712 := (pattern #12)
 163.130 +#76 := (>= #10 0::int)
 163.131 +#13 := (uf_2 #12)
 163.132 +#18 := (= #13 0::int)
 163.133 +#124 := (or #18 #76)
 163.134 +#719 := (forall (vars (?x3 int)) (:pat #712) #124)
 163.135 +#129 := (forall (vars (?x3 int)) #124)
 163.136 +#722 := (iff #129 #719)
 163.137 +#720 := (iff #124 #124)
 163.138 +#721 := [refl]: #720
 163.139 +#723 := [quant-intro #721]: #722
 163.140 +#229 := (~ #129 #129)
 163.141 +#227 := (~ #124 #124)
 163.142 +#228 := [refl]: #227
 163.143 +#230 := [nnf-pos #228]: #229
 163.144 +#17 := (< #10 0::int)
 163.145 +#19 := (implies #17 #18)
 163.146 +#20 := (forall (vars (?x3 int)) #19)
 163.147 +#132 := (iff #20 #129)
 163.148 +#95 := (= 0::int #13)
 163.149 +#101 := (not #17)
 163.150 +#102 := (or #101 #95)
 163.151 +#107 := (forall (vars (?x3 int)) #102)
 163.152 +#130 := (iff #107 #129)
 163.153 +#127 := (iff #102 #124)
 163.154 +#121 := (or #76 #18)
 163.155 +#125 := (iff #121 #124)
 163.156 +#126 := [rewrite]: #125
 163.157 +#122 := (iff #102 #121)
 163.158 +#119 := (iff #95 #18)
 163.159 +#120 := [rewrite]: #119
 163.160 +#117 := (iff #101 #76)
 163.161 +#77 := (not #76)
 163.162 +#112 := (not #77)
 163.163 +#115 := (iff #112 #76)
 163.164 +#116 := [rewrite]: #115
 163.165 +#113 := (iff #101 #112)
 163.166 +#110 := (iff #17 #77)
 163.167 +#111 := [rewrite]: #110
 163.168 +#114 := [monotonicity #111]: #113
 163.169 +#118 := [trans #114 #116]: #117
 163.170 +#123 := [monotonicity #118 #120]: #122
 163.171 +#128 := [trans #123 #126]: #127
 163.172 +#131 := [quant-intro #128]: #130
 163.173 +#108 := (iff #20 #107)
 163.174 +#105 := (iff #19 #102)
 163.175 +#98 := (implies #17 #95)
 163.176 +#103 := (iff #98 #102)
 163.177 +#104 := [rewrite]: #103
 163.178 +#99 := (iff #19 #98)
 163.179 +#96 := (iff #18 #95)
 163.180 +#97 := [rewrite]: #96
 163.181 +#100 := [monotonicity #97]: #99
 163.182 +#106 := [trans #100 #104]: #105
 163.183 +#109 := [quant-intro #106]: #108
 163.184 +#133 := [trans #109 #131]: #132
 163.185 +#94 := [asserted]: #20
 163.186 +#134 := [mp #94 #133]: #129
 163.187 +#231 := [mp~ #134 #230]: #129
 163.188 +#724 := [mp #231 #723]: #719
 163.189 +#402 := (not #719)
 163.190 +#528 := (or #402 #643 #659)
 163.191 +#388 := (>= #139 0::int)
 163.192 +#644 := (or #643 #388)
 163.193 +#529 := (or #402 #644)
 163.194 +#522 := (iff #529 #528)
 163.195 +#642 := (or #643 #659)
 163.196 +#636 := (or #402 #642)
 163.197 +#634 := (iff #636 #528)
 163.198 +#637 := [rewrite]: #634
 163.199 +#538 := (iff #529 #636)
 163.200 +#645 := (iff #644 #642)
 163.201 +#660 := (iff #388 #659)
 163.202 +#661 := [rewrite]: #660
 163.203 +#527 := [monotonicity #661]: #645
 163.204 +#633 := [monotonicity #527]: #538
 163.205 +#537 := [trans #633 #637]: #522
 163.206 +#488 := [quant-inst]: #529
 163.207 +#539 := [mp #488 #537]: #528
 163.208 +#615 := [unit-resolution #539 #724 #614]: #643
 163.209 +#611 := (not #643)
 163.210 +#616 := (or #611 #533)
 163.211 +#602 := [th-lemma]: #616
 163.212 +#603 := [unit-resolution #602 #615]: #533
 163.213 +#606 := (not #544)
 163.214 +#605 := (not #533)
 163.215 +#607 := (or #367 #605 #606)
 163.216 +#604 := [th-lemma]: #607
 163.217 +#608 := [unit-resolution #604 #603 #610]: #367
 163.218 +#701 := (not #367)
 163.219 +#358 := (or #701 #485)
 163.220 +#58 := (= #10 #13)
 163.221 +#83 := (or #58 #77)
 163.222 +#713 := (forall (vars (?x2 int)) (:pat #712) #83)
 163.223 +#88 := (forall (vars (?x2 int)) #83)
 163.224 +#716 := (iff #88 #713)
 163.225 +#714 := (iff #83 #83)
 163.226 +#715 := [refl]: #714
 163.227 +#717 := [quant-intro #715]: #716
 163.228 +#191 := (~ #88 #88)
 163.229 +#195 := (~ #83 #83)
 163.230 +#193 := [refl]: #195
 163.231 +#225 := [nnf-pos #193]: #191
 163.232 +#14 := (= #13 #10)
 163.233 +#11 := (<= 0::int #10)
 163.234 +#15 := (implies #11 #14)
 163.235 +#16 := (forall (vars (?x2 int)) #15)
 163.236 +#91 := (iff #16 #88)
 163.237 +#65 := (not #11)
 163.238 +#66 := (or #65 #58)
 163.239 +#71 := (forall (vars (?x2 int)) #66)
 163.240 +#89 := (iff #71 #88)
 163.241 +#86 := (iff #66 #83)
 163.242 +#80 := (or #77 #58)
 163.243 +#84 := (iff #80 #83)
 163.244 +#85 := [rewrite]: #84
 163.245 +#81 := (iff #66 #80)
 163.246 +#78 := (iff #65 #77)
 163.247 +#74 := (iff #11 #76)
 163.248 +#75 := [rewrite]: #74
 163.249 +#79 := [monotonicity #75]: #78
 163.250 +#82 := [monotonicity #79]: #81
 163.251 +#87 := [trans #82 #85]: #86
 163.252 +#90 := [quant-intro #87]: #89
 163.253 +#72 := (iff #16 #71)
 163.254 +#69 := (iff #15 #66)
 163.255 +#62 := (implies #11 #58)
 163.256 +#67 := (iff #62 #66)
 163.257 +#68 := [rewrite]: #67
 163.258 +#63 := (iff #15 #62)
 163.259 +#60 := (iff #14 #58)
 163.260 +#61 := [rewrite]: #60
 163.261 +#64 := [monotonicity #61]: #63
 163.262 +#70 := [trans #64 #68]: #69
 163.263 +#73 := [quant-intro #70]: #72
 163.264 +#92 := [trans #73 #90]: #91
 163.265 +#57 := [asserted]: #16
 163.266 +#93 := [mp #57 #92]: #88
 163.267 +#226 := [mp~ #93 #225]: #88
 163.268 +#718 := [mp #226 #717]: #713
 163.269 +#679 := (not #713)
 163.270 +#342 := (or #679 #701 #485)
 163.271 +#380 := (>= #24 0::int)
 163.272 +#381 := (not #380)
 163.273 +#361 := (= #24 #26)
 163.274 +#696 := (or #361 #381)
 163.275 +#343 := (or #679 #696)
 163.276 +#685 := (iff #343 #342)
 163.277 +#345 := (or #679 #358)
 163.278 +#683 := (iff #345 #342)
 163.279 +#684 := [rewrite]: #683
 163.280 +#681 := (iff #343 #345)
 163.281 +#695 := (iff #696 #358)
 163.282 +#703 := (or #485 #701)
 163.283 +#694 := (iff #703 #358)
 163.284 +#354 := [rewrite]: #694
 163.285 +#693 := (iff #696 #703)
 163.286 +#702 := (iff #381 #701)
 163.287 +#699 := (iff #380 #367)
 163.288 +#700 := [rewrite]: #699
 163.289 +#697 := [monotonicity #700]: #702
 163.290 +#692 := (iff #361 #485)
 163.291 +#366 := [rewrite]: #692
 163.292 +#353 := [monotonicity #366 #697]: #693
 163.293 +#338 := [trans #353 #354]: #695
 163.294 +#682 := [monotonicity #338]: #681
 163.295 +#680 := [trans #682 #684]: #685
 163.296 +#344 := [quant-inst]: #343
 163.297 +#686 := [mp #344 #680]: #342
 163.298 +#588 := [unit-resolution #686 #718]: #358
 163.299 +#589 := [unit-resolution #588 #608]: #485
 163.300 +#591 := (not #485)
 163.301 +#592 := (or #591 #324)
 163.302 +#593 := [th-lemma]: #592
 163.303 +#594 := [unit-resolution #593 #589]: #324
 163.304 +[th-lemma #603 #188 #594 #610]: false
 163.305 +unsat
   164.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   164.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_05	Tue Oct 20 10:11:30 2009 +0200
   164.3 @@ -0,0 +1,13 @@
   164.4 +(benchmark Isabelle
   164.5 +:extrasorts ( T1)
   164.6 +:extrafuns (
   164.7 +  (uf_1 Int T1)
   164.8 +  (uf_2 T1 Int)
   164.9 +  (uf_3 T1)
  164.10 + )
  164.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  164.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  164.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  164.14 +:assumption (not (distinct (uf_1 (+ (uf_2 uf_3) 1)) (uf_1 (+ (uf_2 (uf_1 (* (uf_2 uf_3) 2))) 3)) (uf_1 (- (uf_2 uf_3) (uf_2 uf_3)))))
  164.15 +:formula true
  164.16 +)
   165.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   165.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_05.proof	Tue Oct 20 10:11:30 2009 +0200
   165.3 @@ -0,0 +1,525 @@
   165.4 +#2 := false
   165.5 +decl uf_2 :: (-> T1 int)
   165.6 +decl uf_1 :: (-> int T1)
   165.7 +decl uf_3 :: T1
   165.8 +#21 := uf_3
   165.9 +#22 := (uf_2 uf_3)
  165.10 +#23 := 1::int
  165.11 +#138 := (+ 1::int #22)
  165.12 +#141 := (uf_1 #138)
  165.13 +#656 := (uf_2 #141)
  165.14 +#26 := 2::int
  165.15 +#144 := (* 2::int #22)
  165.16 +#147 := (uf_1 #144)
  165.17 +#150 := (uf_2 #147)
  165.18 +#30 := 3::int
  165.19 +#156 := (+ 3::int #150)
  165.20 +#161 := (uf_1 #156)
  165.21 +#494 := (uf_2 #161)
  165.22 +#288 := (= #494 #656)
  165.23 +#266 := (= #161 #141)
  165.24 +#249 := (= #141 #161)
  165.25 +#9 := 0::int
  165.26 +#166 := (uf_1 0::int)
  165.27 +#251 := (= #161 #166)
  165.28 +#337 := (not #251)
  165.29 +#567 := (= #494 0::int)
  165.30 +#543 := (uf_2 #166)
  165.31 +#547 := (= #543 0::int)
  165.32 +#10 := (:var 0 int)
  165.33 +#12 := (uf_1 #10)
  165.34 +#673 := (pattern #12)
  165.35 +#78 := (>= #10 0::int)
  165.36 +#79 := (not #78)
  165.37 +#13 := (uf_2 #12)
  165.38 +#60 := (= #10 #13)
  165.39 +#85 := (or #60 #79)
  165.40 +#674 := (forall (vars (?x2 int)) (:pat #673) #85)
  165.41 +#90 := (forall (vars (?x2 int)) #85)
  165.42 +#677 := (iff #90 #674)
  165.43 +#675 := (iff #85 #85)
  165.44 +#676 := [refl]: #675
  165.45 +#678 := [quant-intro #676]: #677
  165.46 +#178 := (~ #90 #90)
  165.47 +#190 := (~ #85 #85)
  165.48 +#191 := [refl]: #190
  165.49 +#175 := [nnf-pos #191]: #178
  165.50 +#14 := (= #13 #10)
  165.51 +#11 := (<= 0::int #10)
  165.52 +#15 := (implies #11 #14)
  165.53 +#16 := (forall (vars (?x2 int)) #15)
  165.54 +#93 := (iff #16 #90)
  165.55 +#67 := (not #11)
  165.56 +#68 := (or #67 #60)
  165.57 +#73 := (forall (vars (?x2 int)) #68)
  165.58 +#91 := (iff #73 #90)
  165.59 +#88 := (iff #68 #85)
  165.60 +#82 := (or #79 #60)
  165.61 +#86 := (iff #82 #85)
  165.62 +#87 := [rewrite]: #86
  165.63 +#83 := (iff #68 #82)
  165.64 +#80 := (iff #67 #79)
  165.65 +#76 := (iff #11 #78)
  165.66 +#77 := [rewrite]: #76
  165.67 +#81 := [monotonicity #77]: #80
  165.68 +#84 := [monotonicity #81]: #83
  165.69 +#89 := [trans #84 #87]: #88
  165.70 +#92 := [quant-intro #89]: #91
  165.71 +#74 := (iff #16 #73)
  165.72 +#71 := (iff #15 #68)
  165.73 +#64 := (implies #11 #60)
  165.74 +#69 := (iff #64 #68)
  165.75 +#70 := [rewrite]: #69
  165.76 +#65 := (iff #15 #64)
  165.77 +#62 := (iff #14 #60)
  165.78 +#63 := [rewrite]: #62
  165.79 +#66 := [monotonicity #63]: #65
  165.80 +#72 := [trans #66 #70]: #71
  165.81 +#75 := [quant-intro #72]: #74
  165.82 +#94 := [trans #75 #92]: #93
  165.83 +#59 := [asserted]: #16
  165.84 +#95 := [mp #59 #94]: #90
  165.85 +#192 := [mp~ #95 #175]: #90
  165.86 +#679 := [mp #192 #678]: #674
  165.87 +#290 := (not #674)
  165.88 +#519 := (or #290 #547)
  165.89 +#540 := (>= 0::int 0::int)
  165.90 +#541 := (not #540)
  165.91 +#544 := (= 0::int #543)
  165.92 +#545 := (or #544 #541)
  165.93 +#520 := (or #290 #545)
  165.94 +#521 := (iff #520 #519)
  165.95 +#523 := (iff #519 #519)
  165.96 +#526 := [rewrite]: #523
  165.97 +#407 := (iff #545 #547)
  165.98 +#533 := (or #547 false)
  165.99 +#513 := (iff #533 #547)
 165.100 +#514 := [rewrite]: #513
 165.101 +#539 := (iff #545 #533)
 165.102 +#537 := (iff #541 false)
 165.103 +#1 := true
 165.104 +#530 := (not true)
 165.105 +#535 := (iff #530 false)
 165.106 +#536 := [rewrite]: #535
 165.107 +#531 := (iff #541 #530)
 165.108 +#548 := (iff #540 true)
 165.109 +#534 := [rewrite]: #548
 165.110 +#532 := [monotonicity #534]: #531
 165.111 +#538 := [trans #532 #536]: #537
 165.112 +#546 := (iff #544 #547)
 165.113 +#542 := [rewrite]: #546
 165.114 +#512 := [monotonicity #542 #538]: #539
 165.115 +#518 := [trans #512 #514]: #407
 165.116 +#522 := [monotonicity #518]: #521
 165.117 +#527 := [trans #522 #526]: #521
 165.118 +#525 := [quant-inst]: #520
 165.119 +#528 := [mp #525 #527]: #519
 165.120 +#316 := [unit-resolution #528 #679]: #547
 165.121 +#286 := (= #494 #543)
 165.122 +#287 := [hypothesis]: #251
 165.123 +#292 := [monotonicity #287]: #286
 165.124 +#267 := [trans #292 #316]: #567
 165.125 +#296 := (not #567)
 165.126 +#551 := (<= #494 0::int)
 165.127 +#300 := (not #551)
 165.128 +#501 := (>= #150 0::int)
 165.129 +#622 := (>= #144 0::int)
 165.130 +#302 := -1::int
 165.131 +#303 := (* -1::int #656)
 165.132 +#304 := (+ #22 #303)
 165.133 +#635 := (>= #304 -1::int)
 165.134 +#305 := (= #304 -1::int)
 165.135 +#644 := (>= #22 -1::int)
 165.136 +#511 := (>= #22 0::int)
 165.137 +#487 := (= #22 0::int)
 165.138 +#660 := (uf_1 #22)
 165.139 +#517 := (uf_2 #660)
 165.140 +#485 := (= #517 0::int)
 165.141 +#389 := (not #511)
 165.142 +#390 := [hypothesis]: #389
 165.143 +#492 := (or #485 #511)
 165.144 +#18 := (= #13 0::int)
 165.145 +#126 := (or #18 #78)
 165.146 +#680 := (forall (vars (?x3 int)) (:pat #673) #126)
 165.147 +#131 := (forall (vars (?x3 int)) #126)
 165.148 +#683 := (iff #131 #680)
 165.149 +#681 := (iff #126 #126)
 165.150 +#682 := [refl]: #681
 165.151 +#684 := [quant-intro #682]: #683
 165.152 +#179 := (~ #131 #131)
 165.153 +#193 := (~ #126 #126)
 165.154 +#194 := [refl]: #193
 165.155 +#180 := [nnf-pos #194]: #179
 165.156 +#17 := (< #10 0::int)
 165.157 +#19 := (implies #17 #18)
 165.158 +#20 := (forall (vars (?x3 int)) #19)
 165.159 +#134 := (iff #20 #131)
 165.160 +#97 := (= 0::int #13)
 165.161 +#103 := (not #17)
 165.162 +#104 := (or #103 #97)
 165.163 +#109 := (forall (vars (?x3 int)) #104)
 165.164 +#132 := (iff #109 #131)
 165.165 +#129 := (iff #104 #126)
 165.166 +#123 := (or #78 #18)
 165.167 +#127 := (iff #123 #126)
 165.168 +#128 := [rewrite]: #127
 165.169 +#124 := (iff #104 #123)
 165.170 +#121 := (iff #97 #18)
 165.171 +#122 := [rewrite]: #121
 165.172 +#119 := (iff #103 #78)
 165.173 +#114 := (not #79)
 165.174 +#117 := (iff #114 #78)
 165.175 +#118 := [rewrite]: #117
 165.176 +#115 := (iff #103 #114)
 165.177 +#112 := (iff #17 #79)
 165.178 +#113 := [rewrite]: #112
 165.179 +#116 := [monotonicity #113]: #115
 165.180 +#120 := [trans #116 #118]: #119
 165.181 +#125 := [monotonicity #120 #122]: #124
 165.182 +#130 := [trans #125 #128]: #129
 165.183 +#133 := [quant-intro #130]: #132
 165.184 +#110 := (iff #20 #109)
 165.185 +#107 := (iff #19 #104)
 165.186 +#100 := (implies #17 #97)
 165.187 +#105 := (iff #100 #104)
 165.188 +#106 := [rewrite]: #105
 165.189 +#101 := (iff #19 #100)
 165.190 +#98 := (iff #18 #97)
 165.191 +#99 := [rewrite]: #98
 165.192 +#102 := [monotonicity #99]: #101
 165.193 +#108 := [trans #102 #106]: #107
 165.194 +#111 := [quant-intro #108]: #110
 165.195 +#135 := [trans #111 #133]: #134
 165.196 +#96 := [asserted]: #20
 165.197 +#136 := [mp #96 #135]: #131
 165.198 +#195 := [mp~ #136 #180]: #131
 165.199 +#685 := [mp #195 #684]: #680
 165.200 +#637 := (not #680)
 165.201 +#484 := (or #637 #485 #511)
 165.202 +#486 := (or #637 #492)
 165.203 +#495 := (iff #486 #484)
 165.204 +#496 := [rewrite]: #495
 165.205 +#493 := [quant-inst]: #486
 165.206 +#497 := [mp #493 #496]: #484
 165.207 +#391 := [unit-resolution #497 #685]: #492
 165.208 +#392 := [unit-resolution #391 #390]: #485
 165.209 +#394 := (= #22 #517)
 165.210 +#661 := (= uf_3 #660)
 165.211 +#4 := (:var 0 T1)
 165.212 +#5 := (uf_2 #4)
 165.213 +#665 := (pattern #5)
 165.214 +#6 := (uf_1 #5)
 165.215 +#53 := (= #4 #6)
 165.216 +#666 := (forall (vars (?x1 T1)) (:pat #665) #53)
 165.217 +#56 := (forall (vars (?x1 T1)) #53)
 165.218 +#667 := (iff #56 #666)
 165.219 +#669 := (iff #666 #666)
 165.220 +#670 := [rewrite]: #669
 165.221 +#668 := [rewrite]: #667
 165.222 +#671 := [trans #668 #670]: #667
 165.223 +#187 := (~ #56 #56)
 165.224 +#185 := (~ #53 #53)
 165.225 +#186 := [refl]: #185
 165.226 +#188 := [nnf-pos #186]: #187
 165.227 +#7 := (= #6 #4)
 165.228 +#8 := (forall (vars (?x1 T1)) #7)
 165.229 +#57 := (iff #8 #56)
 165.230 +#54 := (iff #7 #53)
 165.231 +#55 := [rewrite]: #54
 165.232 +#58 := [quant-intro #55]: #57
 165.233 +#52 := [asserted]: #8
 165.234 +#61 := [mp #52 #58]: #56
 165.235 +#189 := [mp~ #61 #188]: #56
 165.236 +#672 := [mp #189 #671]: #666
 165.237 +#658 := (not #666)
 165.238 +#664 := (or #658 #661)
 165.239 +#654 := [quant-inst]: #664
 165.240 +#393 := [unit-resolution #654 #672]: #661
 165.241 +#395 := [monotonicity #393]: #394
 165.242 +#396 := [trans #395 #392]: #487
 165.243 +#397 := (not #487)
 165.244 +#398 := (or #397 #511)
 165.245 +#399 := [th-lemma]: #398
 165.246 +#388 := [unit-resolution #399 #390 #396]: false
 165.247 +#400 := [lemma #388]: #511
 165.248 +#366 := (or #389 #644)
 165.249 +#367 := [th-lemma]: #366
 165.250 +#352 := [unit-resolution #367 #400]: #644
 165.251 +#641 := (not #644)
 165.252 +#648 := (or #305 #641)
 165.253 +#651 := (or #290 #305 #641)
 165.254 +#313 := (>= #138 0::int)
 165.255 +#318 := (not #313)
 165.256 +#298 := (= #138 #656)
 165.257 +#640 := (or #298 #318)
 165.258 +#649 := (or #290 #640)
 165.259 +#363 := (iff #649 #651)
 165.260 +#638 := (or #290 #648)
 165.261 +#361 := (iff #638 #651)
 165.262 +#362 := [rewrite]: #361
 165.263 +#639 := (iff #649 #638)
 165.264 +#650 := (iff #640 #648)
 165.265 +#647 := (iff #318 #641)
 165.266 +#645 := (iff #313 #644)
 165.267 +#646 := [rewrite]: #645
 165.268 +#284 := [monotonicity #646]: #647
 165.269 +#642 := (iff #298 #305)
 165.270 +#643 := [rewrite]: #642
 165.271 +#289 := [monotonicity #643 #284]: #650
 165.272 +#346 := [monotonicity #289]: #639
 165.273 +#364 := [trans #346 #362]: #363
 165.274 +#652 := [quant-inst]: #649
 165.275 +#257 := [mp #652 #364]: #651
 165.276 +#424 := [unit-resolution #257 #679]: #648
 165.277 +#353 := [unit-resolution #424 #352]: #305
 165.278 +#439 := (not #305)
 165.279 +#281 := (or #439 #635)
 165.280 +#440 := [th-lemma]: #281
 165.281 +#330 := [unit-resolution #440 #353]: #635
 165.282 +#620 := (<= #656 0::int)
 165.283 +#441 := (not #620)
 165.284 +#634 := (<= #304 -1::int)
 165.285 +#344 := (or #439 #634)
 165.286 +#354 := [th-lemma]: #344
 165.287 +#355 := [unit-resolution #354 #353]: #634
 165.288 +#345 := (not #634)
 165.289 +#356 := (or #441 #389 #345)
 165.290 +#322 := [th-lemma]: #356
 165.291 +#324 := [unit-resolution #322 #355 #400]: #441
 165.292 +#432 := (not #635)
 165.293 +#331 := (or #622 #432 #620)
 165.294 +#319 := [th-lemma]: #331
 165.295 +#320 := [unit-resolution #319 #324 #330]: #622
 165.296 +#624 := (* -1::int #150)
 165.297 +#619 := (+ #144 #624)
 165.298 +#606 := (<= #619 0::int)
 165.299 +#625 := (= #619 0::int)
 165.300 +#617 := (not #622)
 165.301 +#612 := (or #617 #625)
 165.302 +#615 := (or #290 #617 #625)
 165.303 +#618 := (= #144 #150)
 165.304 +#623 := (or #618 #617)
 165.305 +#609 := (or #290 #623)
 165.306 +#604 := (iff #609 #615)
 165.307 +#445 := (or #290 #612)
 165.308 +#601 := (iff #445 #615)
 165.309 +#602 := [rewrite]: #601
 165.310 +#447 := (iff #609 #445)
 165.311 +#608 := (iff #623 #612)
 165.312 +#468 := (or #625 #617)
 165.313 +#613 := (iff #468 #612)
 165.314 +#607 := [rewrite]: #613
 165.315 +#610 := (iff #623 #468)
 165.316 +#466 := (iff #618 #625)
 165.317 +#467 := [rewrite]: #466
 165.318 +#611 := [monotonicity #467]: #610
 165.319 +#614 := [trans #611 #607]: #608
 165.320 +#448 := [monotonicity #614]: #447
 165.321 +#605 := [trans #448 #602]: #604
 165.322 +#616 := [quant-inst]: #609
 165.323 +#603 := [mp #616 #605]: #615
 165.324 +#480 := [unit-resolution #603 #679]: #612
 165.325 +#299 := [unit-resolution #480 #320]: #625
 165.326 +#406 := (not #625)
 165.327 +#408 := (or #406 #606)
 165.328 +#409 := [th-lemma]: #408
 165.329 +#301 := [unit-resolution #409 #299]: #606
 165.330 +#413 := (not #606)
 165.331 +#306 := (or #501 #413 #617)
 165.332 +#307 := [th-lemma]: #306
 165.333 +#308 := [unit-resolution #307 #301 #320]: #501
 165.334 +#506 := -3::int
 165.335 +#504 := (* -1::int #494)
 165.336 +#505 := (+ #150 #504)
 165.337 +#564 := (<= #505 -3::int)
 165.338 +#599 := (= #505 -3::int)
 165.339 +#587 := (>= #150 -3::int)
 165.340 +#417 := (or #587 #413 #617)
 165.341 +#410 := [th-lemma]: #417
 165.342 +#309 := [unit-resolution #410 #301 #320]: #587
 165.343 +#578 := (not #587)
 165.344 +#593 := (or #578 #599)
 165.345 +#579 := (or #290 #578 #599)
 165.346 +#449 := (>= #156 0::int)
 165.347 +#597 := (not #449)
 165.348 +#502 := (= #156 #494)
 165.349 +#503 := (or #502 #597)
 165.350 +#586 := (or #290 #503)
 165.351 +#572 := (iff #586 #579)
 165.352 +#571 := (or #290 #593)
 165.353 +#575 := (iff #571 #579)
 165.354 +#576 := [rewrite]: #575
 165.355 +#573 := (iff #586 #571)
 165.356 +#584 := (iff #503 #593)
 165.357 +#591 := (or #599 #578)
 165.358 +#582 := (iff #591 #593)
 165.359 +#583 := [rewrite]: #582
 165.360 +#592 := (iff #503 #591)
 165.361 +#580 := (iff #597 #578)
 165.362 +#589 := (iff #449 #587)
 165.363 +#581 := [rewrite]: #589
 165.364 +#590 := [monotonicity #581]: #580
 165.365 +#596 := (iff #502 #599)
 165.366 +#600 := [rewrite]: #596
 165.367 +#588 := [monotonicity #600 #590]: #592
 165.368 +#585 := [trans #588 #583]: #584
 165.369 +#574 := [monotonicity #585]: #573
 165.370 +#577 := [trans #574 #576]: #572
 165.371 +#570 := [quant-inst]: #586
 165.372 +#563 := [mp #570 #577]: #579
 165.373 +#458 := [unit-resolution #563 #679]: #593
 165.374 +#310 := [unit-resolution #458 #309]: #599
 165.375 +#460 := (not #599)
 165.376 +#461 := (or #460 #564)
 165.377 +#444 := [th-lemma]: #461
 165.378 +#311 := [unit-resolution #444 #310]: #564
 165.379 +#434 := (not #564)
 165.380 +#453 := (not #501)
 165.381 +#312 := (or #300 #453 #434)
 165.382 +#293 := [th-lemma]: #312
 165.383 +#295 := [unit-resolution #293 #311 #308]: #300
 165.384 +#294 := (or #296 #551)
 165.385 +#297 := [th-lemma]: #294
 165.386 +#285 := [unit-resolution #297 #295]: #296
 165.387 +#271 := [unit-resolution #285 #267]: false
 165.388 +#272 := [lemma #271]: #337
 165.389 +#282 := (or #249 #251)
 165.390 +#250 := (= #141 #166)
 165.391 +#336 := (not #250)
 165.392 +#357 := (= #656 0::int)
 165.393 +#332 := (= #656 #543)
 165.394 +#329 := [hypothesis]: #250
 165.395 +#333 := [monotonicity #329]: #332
 165.396 +#323 := [trans #333 #316]: #357
 165.397 +#429 := (not #357)
 165.398 +#430 := (or #429 #620)
 165.399 +#428 := [th-lemma]: #430
 165.400 +#325 := [unit-resolution #428 #324]: #429
 165.401 +#334 := [unit-resolution #325 #323]: false
 165.402 +#317 := [lemma #334]: #336
 165.403 +#279 := (or #249 #250 #251)
 165.404 +#335 := (not #249)
 165.405 +#328 := (and #335 #336 #337)
 165.406 +#339 := (not #328)
 165.407 +#169 := (distinct #141 #161 #166)
 165.408 +#172 := (not #169)
 165.409 +#33 := (- #22 #22)
 165.410 +#34 := (uf_1 #33)
 165.411 +#27 := (* #22 2::int)
 165.412 +#28 := (uf_1 #27)
 165.413 +#29 := (uf_2 #28)
 165.414 +#31 := (+ #29 3::int)
 165.415 +#32 := (uf_1 #31)
 165.416 +#24 := (+ #22 1::int)
 165.417 +#25 := (uf_1 #24)
 165.418 +#35 := (distinct #25 #32 #34)
 165.419 +#36 := (not #35)
 165.420 +#173 := (iff #36 #172)
 165.421 +#170 := (iff #35 #169)
 165.422 +#167 := (= #34 #166)
 165.423 +#164 := (= #33 0::int)
 165.424 +#165 := [rewrite]: #164
 165.425 +#168 := [monotonicity #165]: #167
 165.426 +#162 := (= #32 #161)
 165.427 +#159 := (= #31 #156)
 165.428 +#153 := (+ #150 3::int)
 165.429 +#157 := (= #153 #156)
 165.430 +#158 := [rewrite]: #157
 165.431 +#154 := (= #31 #153)
 165.432 +#151 := (= #29 #150)
 165.433 +#148 := (= #28 #147)
 165.434 +#145 := (= #27 #144)
 165.435 +#146 := [rewrite]: #145
 165.436 +#149 := [monotonicity #146]: #148
 165.437 +#152 := [monotonicity #149]: #151
 165.438 +#155 := [monotonicity #152]: #154
 165.439 +#160 := [trans #155 #158]: #159
 165.440 +#163 := [monotonicity #160]: #162
 165.441 +#142 := (= #25 #141)
 165.442 +#139 := (= #24 #138)
 165.443 +#140 := [rewrite]: #139
 165.444 +#143 := [monotonicity #140]: #142
 165.445 +#171 := [monotonicity #143 #163 #168]: #170
 165.446 +#174 := [monotonicity #171]: #173
 165.447 +#137 := [asserted]: #36
 165.448 +#177 := [mp #137 #174]: #172
 165.449 +#326 := (or #169 #339)
 165.450 +#327 := [def-axiom]: #326
 165.451 +#277 := [unit-resolution #327 #177]: #339
 165.452 +#659 := (or #328 #249 #250 #251)
 165.453 +#315 := [def-axiom]: #659
 165.454 +#280 := [unit-resolution #315 #277]: #279
 165.455 +#278 := [unit-resolution #280 #317]: #282
 165.456 +#283 := [unit-resolution #278 #272]: #249
 165.457 +#269 := [symm #283]: #266
 165.458 +#270 := [monotonicity #269]: #288
 165.459 +#508 := (+ #494 #303)
 165.460 +#473 := (<= #508 0::int)
 165.461 +#433 := (not #473)
 165.462 +#477 := [hypothesis]: #473
 165.463 +#421 := (or #622 #433)
 165.464 +#489 := (= #150 0::int)
 165.465 +#478 := [hypothesis]: #617
 165.466 +#490 := (or #489 #622)
 165.467 +#499 := (or #637 #489 #622)
 165.468 +#594 := (or #637 #490)
 165.469 +#598 := (iff #594 #499)
 165.470 +#483 := [rewrite]: #598
 165.471 +#595 := [quant-inst]: #594
 165.472 +#498 := [mp #595 #483]: #499
 165.473 +#465 := [unit-resolution #498 #685]: #490
 165.474 +#481 := [unit-resolution #465 #478]: #489
 165.475 +#442 := (not #489)
 165.476 +#443 := (or #442 #501)
 165.477 +#450 := [th-lemma]: #443
 165.478 +#452 := [unit-resolution #450 #481]: #501
 165.479 +#454 := (or #453 #587)
 165.480 +#456 := [th-lemma]: #454
 165.481 +#457 := [unit-resolution #456 #452]: #587
 165.482 +#459 := [unit-resolution #458 #457]: #599
 165.483 +#462 := [unit-resolution #444 #459]: #564
 165.484 +#435 := (or #432 #622 #433 #453 #434)
 165.485 +#437 := [th-lemma]: #435
 165.486 +#438 := [unit-resolution #437 #478 #452 #462 #477]: #432
 165.487 +#436 := [unit-resolution #440 #438]: #439
 165.488 +#420 := (or #441 #433 #453 #434)
 165.489 +#423 := [th-lemma]: #420
 165.490 +#427 := [unit-resolution #423 #452 #462 #477]: #441
 165.491 +#431 := [unit-resolution #428 #427]: #429
 165.492 +#632 := (or #357 #644)
 165.493 +#347 := (or #637 #357 #644)
 165.494 +#358 := (or #357 #313)
 165.495 +#348 := (or #637 #358)
 165.496 +#630 := (iff #348 #347)
 165.497 +#350 := (or #637 #632)
 165.498 +#343 := (iff #350 #347)
 165.499 +#626 := [rewrite]: #343
 165.500 +#628 := (iff #348 #350)
 165.501 +#636 := (iff #358 #632)
 165.502 +#633 := [monotonicity #646]: #636
 165.503 +#629 := [monotonicity #633]: #628
 165.504 +#627 := [trans #629 #626]: #630
 165.505 +#349 := [quant-inst]: #348
 165.506 +#631 := [mp #349 #627]: #347
 165.507 +#419 := [unit-resolution #631 #685]: #632
 165.508 +#422 := [unit-resolution #419 #431]: #644
 165.509 +#425 := [unit-resolution #424 #422 #436]: false
 165.510 +#426 := [lemma #425]: #421
 165.511 +#479 := [unit-resolution #426 #477]: #622
 165.512 +#416 := [unit-resolution #480 #479]: #625
 165.513 +#412 := [unit-resolution #409 #416]: #606
 165.514 +#418 := [unit-resolution #410 #412 #479]: #587
 165.515 +#411 := [unit-resolution #458 #418]: #599
 165.516 +#414 := [unit-resolution #444 #411]: #564
 165.517 +#415 := (or #644 #617)
 165.518 +#401 := [th-lemma]: #415
 165.519 +#403 := [unit-resolution #401 #479]: #644
 165.520 +#404 := [unit-resolution #424 #403]: #305
 165.521 +#402 := [unit-resolution #440 #404]: #635
 165.522 +#405 := [th-lemma #418 #402 #477 #414 #412]: false
 165.523 +#387 := [lemma #405]: #433
 165.524 +#273 := (not #288)
 165.525 +#274 := (or #273 #473)
 165.526 +#275 := [th-lemma]: #274
 165.527 +[unit-resolution #275 #387 #270]: false
 165.528 +unsat
   166.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   166.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_06	Tue Oct 20 10:11:30 2009 +0200
   166.3 @@ -0,0 +1,13 @@
   166.4 +(benchmark Isabelle
   166.5 +:extrasorts ( T1)
   166.6 +:extrafuns (
   166.7 +  (uf_1 Int T1)
   166.8 +  (uf_2 T1 Int)
   166.9 +  (uf_3 Int)
  166.10 + )
  166.11 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  166.12 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  166.13 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  166.14 +:assumption (not (= (uf_2 (uf_1 (ite (< uf_3 0) (~ uf_3) uf_3))) (ite (< uf_3 0) (~ uf_3) uf_3)))
  166.15 +:formula true
  166.16 +)
   167.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   167.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_06.proof	Tue Oct 20 10:11:30 2009 +0200
   167.3 @@ -0,0 +1,161 @@
   167.4 +#2 := false
   167.5 +#9 := 0::int
   167.6 +decl uf_3 :: int
   167.7 +#21 := uf_3
   167.8 +#130 := -1::int
   167.9 +#131 := (* -1::int uf_3)
  167.10 +#154 := (>= uf_3 0::int)
  167.11 +#161 := (ite #154 uf_3 #131)
  167.12 +#648 := (* -1::int #161)
  167.13 +#651 := (+ #131 #648)
  167.14 +#657 := (<= #651 0::int)
  167.15 +#341 := (= #131 #161)
  167.16 +#155 := (not #154)
  167.17 +#649 := (+ uf_3 #648)
  167.18 +#650 := (<= #649 0::int)
  167.19 +#254 := (= uf_3 #161)
  167.20 +#646 := [hypothesis]: #154
  167.21 +#255 := (or #155 #254)
  167.22 +#342 := [def-axiom]: #255
  167.23 +#652 := [unit-resolution #342 #646]: #254
  167.24 +#290 := (not #254)
  167.25 +#653 := (or #290 #650)
  167.26 +#655 := [th-lemma]: #653
  167.27 +#295 := [unit-resolution #655 #652]: #650
  167.28 +#346 := (>= #161 0::int)
  167.29 +#274 := (not #346)
  167.30 +decl uf_2 :: (-> T1 int)
  167.31 +decl uf_1 :: (-> int T1)
  167.32 +#166 := (uf_1 #161)
  167.33 +#169 := (uf_2 #166)
  167.34 +#172 := (= #161 #169)
  167.35 +#175 := (not #172)
  167.36 +#23 := (- uf_3)
  167.37 +#22 := (< uf_3 0::int)
  167.38 +#24 := (ite #22 #23 uf_3)
  167.39 +#25 := (uf_1 #24)
  167.40 +#26 := (uf_2 #25)
  167.41 +#27 := (= #26 #24)
  167.42 +#28 := (not #27)
  167.43 +#178 := (iff #28 #175)
  167.44 +#134 := (ite #22 #131 uf_3)
  167.45 +#137 := (uf_1 #134)
  167.46 +#140 := (uf_2 #137)
  167.47 +#146 := (= #134 #140)
  167.48 +#151 := (not #146)
  167.49 +#176 := (iff #151 #175)
  167.50 +#173 := (iff #146 #172)
  167.51 +#170 := (= #140 #169)
  167.52 +#167 := (= #137 #166)
  167.53 +#164 := (= #134 #161)
  167.54 +#158 := (ite #155 #131 uf_3)
  167.55 +#162 := (= #158 #161)
  167.56 +#163 := [rewrite]: #162
  167.57 +#159 := (= #134 #158)
  167.58 +#156 := (iff #22 #155)
  167.59 +#157 := [rewrite]: #156
  167.60 +#160 := [monotonicity #157]: #159
  167.61 +#165 := [trans #160 #163]: #164
  167.62 +#168 := [monotonicity #165]: #167
  167.63 +#171 := [monotonicity #168]: #170
  167.64 +#174 := [monotonicity #165 #171]: #173
  167.65 +#177 := [monotonicity #174]: #176
  167.66 +#152 := (iff #28 #151)
  167.67 +#149 := (iff #27 #146)
  167.68 +#143 := (= #140 #134)
  167.69 +#147 := (iff #143 #146)
  167.70 +#148 := [rewrite]: #147
  167.71 +#144 := (iff #27 #143)
  167.72 +#135 := (= #24 #134)
  167.73 +#132 := (= #23 #131)
  167.74 +#133 := [rewrite]: #132
  167.75 +#136 := [monotonicity #133]: #135
  167.76 +#141 := (= #26 #140)
  167.77 +#138 := (= #25 #137)
  167.78 +#139 := [monotonicity #136]: #138
  167.79 +#142 := [monotonicity #139]: #141
  167.80 +#145 := [monotonicity #142 #136]: #144
  167.81 +#150 := [trans #145 #148]: #149
  167.82 +#153 := [monotonicity #150]: #152
  167.83 +#179 := [trans #153 #177]: #178
  167.84 +#129 := [asserted]: #28
  167.85 +#180 := [mp #129 #179]: #175
  167.86 +#10 := (:var 0 int)
  167.87 +#12 := (uf_1 #10)
  167.88 +#678 := (pattern #12)
  167.89 +#70 := (>= #10 0::int)
  167.90 +#71 := (not #70)
  167.91 +#13 := (uf_2 #12)
  167.92 +#52 := (= #10 #13)
  167.93 +#77 := (or #52 #71)
  167.94 +#679 := (forall (vars (?x2 int)) (:pat #678) #77)
  167.95 +#82 := (forall (vars (?x2 int)) #77)
  167.96 +#682 := (iff #82 #679)
  167.97 +#680 := (iff #77 #77)
  167.98 +#681 := [refl]: #680
  167.99 +#683 := [quant-intro #681]: #682
 167.100 +#183 := (~ #82 #82)
 167.101 +#195 := (~ #77 #77)
 167.102 +#196 := [refl]: #195
 167.103 +#181 := [nnf-pos #196]: #183
 167.104 +#14 := (= #13 #10)
 167.105 +#11 := (<= 0::int #10)
 167.106 +#15 := (implies #11 #14)
 167.107 +#16 := (forall (vars (?x2 int)) #15)
 167.108 +#85 := (iff #16 #82)
 167.109 +#59 := (not #11)
 167.110 +#60 := (or #59 #52)
 167.111 +#65 := (forall (vars (?x2 int)) #60)
 167.112 +#83 := (iff #65 #82)
 167.113 +#80 := (iff #60 #77)
 167.114 +#74 := (or #71 #52)
 167.115 +#78 := (iff #74 #77)
 167.116 +#79 := [rewrite]: #78
 167.117 +#75 := (iff #60 #74)
 167.118 +#72 := (iff #59 #71)
 167.119 +#68 := (iff #11 #70)
 167.120 +#69 := [rewrite]: #68
 167.121 +#73 := [monotonicity #69]: #72
 167.122 +#76 := [monotonicity #73]: #75
 167.123 +#81 := [trans #76 #79]: #80
 167.124 +#84 := [quant-intro #81]: #83
 167.125 +#66 := (iff #16 #65)
 167.126 +#63 := (iff #15 #60)
 167.127 +#56 := (implies #11 #52)
 167.128 +#61 := (iff #56 #60)
 167.129 +#62 := [rewrite]: #61
 167.130 +#57 := (iff #15 #56)
 167.131 +#54 := (iff #14 #52)
 167.132 +#55 := [rewrite]: #54
 167.133 +#58 := [monotonicity #55]: #57
 167.134 +#64 := [trans #58 #62]: #63
 167.135 +#67 := [quant-intro #64]: #66
 167.136 +#86 := [trans #67 #84]: #85
 167.137 +#51 := [asserted]: #16
 167.138 +#87 := [mp #51 #86]: #82
 167.139 +#197 := [mp~ #87 #181]: #82
 167.140 +#684 := [mp #197 #683]: #679
 167.141 +#321 := (not #679)
 167.142 +#451 := (or #321 #172 #274)
 167.143 +#327 := (or #172 #274)
 167.144 +#658 := (or #321 #327)
 167.145 +#333 := (iff #658 #451)
 167.146 +#665 := [rewrite]: #333
 167.147 +#332 := [quant-inst]: #658
 167.148 +#666 := [mp #332 #665]: #451
 167.149 +#296 := [unit-resolution #666 #684 #180]: #274
 167.150 +#656 := [th-lemma #646 #296 #295]: false
 167.151 +#654 := [lemma #656]: #155
 167.152 +#256 := (or #154 #341)
 167.153 +#343 := [def-axiom]: #256
 167.154 +#644 := [unit-resolution #343 #654]: #341
 167.155 +#366 := (not #341)
 167.156 +#367 := (or #366 #657)
 167.157 +#368 := [th-lemma]: #367
 167.158 +#369 := [unit-resolution #368 #644]: #657
 167.159 +#647 := (<= #161 0::int)
 167.160 +#262 := (or #647 #346)
 167.161 +#639 := [th-lemma]: #262
 167.162 +#640 := [unit-resolution #639 #296]: #647
 167.163 +[th-lemma #654 #640 #369]: false
 167.164 +unsat
   168.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   168.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_07	Tue Oct 20 10:11:30 2009 +0200
   168.3 @@ -0,0 +1,19 @@
   168.4 +(benchmark Isabelle
   168.5 +:extrasorts ( T1 T2)
   168.6 +:extrafuns (
   168.7 +  (uf_1 Int T1)
   168.8 +  (uf_2 T1 Int)
   168.9 +  (uf_5 T1)
  168.10 + )
  168.11 +:extrapreds (
  168.12 +  (up_3 T1)
  168.13 +  (up_4 T1 T1)
  168.14 + )
  168.15 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1)) ?x1))
  168.16 +:assumption (forall (?x2 Int) (implies (<= 0 ?x2) (= (uf_2 (uf_1 ?x2)) ?x2)))
  168.17 +:assumption (forall (?x3 Int) (implies (< ?x3 0) (= (uf_2 (uf_1 ?x3)) 0)))
  168.18 +:assumption (forall (?x4 T1) (iff (up_3 ?x4) (and (< 1 (uf_2 ?x4)) (forall (?x5 T1) (implies (up_4 ?x5 ?x4) (or (= ?x5 (uf_1 1)) (= ?x5 ?x4)))))))
  168.19 +:assumption (up_3 (uf_1 (+ (uf_2 (uf_1 (* 4 (uf_2 uf_5)))) 1)))
  168.20 +:assumption (not (<= 1 (uf_2 uf_5)))
  168.21 +:formula true
  168.22 +)
   169.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   169.2 +++ b/src/HOL/SMT/Examples/cert/z3_nat_arith_07.proof	Tue Oct 20 10:11:30 2009 +0200
   169.3 @@ -0,0 +1,553 @@
   169.4 +#2 := false
   169.5 +#9 := 0::int
   169.6 +decl uf_2 :: (-> T1 int)
   169.7 +decl uf_1 :: (-> int T1)
   169.8 +decl uf_5 :: T1
   169.9 +#36 := uf_5
  169.10 +#37 := (uf_2 uf_5)
  169.11 +#35 := 4::int
  169.12 +#38 := (* 4::int #37)
  169.13 +#39 := (uf_1 #38)
  169.14 +#40 := (uf_2 #39)
  169.15 +#549 := (= #40 0::int)
  169.16 +#963 := (not #549)
  169.17 +#537 := (<= #40 0::int)
  169.18 +#958 := (not #537)
  169.19 +#22 := 1::int
  169.20 +#186 := (+ 1::int #40)
  169.21 +#189 := (uf_1 #186)
  169.22 +#524 := (uf_2 #189)
  169.23 +#452 := (<= #524 1::int)
  169.24 +#874 := (not #452)
  169.25 +decl up_4 :: (-> T1 T1 bool)
  169.26 +#4 := (:var 0 T1)
  169.27 +#456 := (up_4 #4 #189)
  169.28 +#440 := (pattern #456)
  169.29 +#446 := (not #456)
  169.30 +#455 := (= #4 #189)
  169.31 +#26 := (uf_1 1::int)
  169.32 +#27 := (= #4 #26)
  169.33 +#434 := (or #27 #455 #446)
  169.34 +#416 := (forall (vars (?x5 T1)) (:pat #440) #434)
  169.35 +#417 := (not #416)
  169.36 +#409 := (or #417 #452)
  169.37 +#400 := (not #409)
  169.38 +decl up_3 :: (-> T1 bool)
  169.39 +#192 := (up_3 #189)
  169.40 +#429 := (not #192)
  169.41 +#405 := (or #429 #400)
  169.42 +#389 := (not #405)
  169.43 +decl ?x5!0 :: (-> T1 T1)
  169.44 +#478 := (?x5!0 #189)
  169.45 +#479 := (= #26 #478)
  169.46 +#468 := (= #189 #478)
  169.47 +#445 := (up_4 #478 #189)
  169.48 +#447 := (not #445)
  169.49 +#396 := (or #447 #468 #479)
  169.50 +#391 := (not #396)
  169.51 +#386 := (or #192 #391 #452)
  169.52 +#377 := (not #386)
  169.53 +#843 := (or #377 #389)
  169.54 +#848 := (not #843)
  169.55 +#5 := (uf_2 #4)
  169.56 +#788 := (pattern #5)
  169.57 +#21 := (up_3 #4)
  169.58 +#836 := (pattern #21)
  169.59 +#210 := (?x5!0 #4)
  169.60 +#274 := (= #4 #210)
  169.61 +#271 := (= #26 #210)
  169.62 +#232 := (up_4 #210 #4)
  169.63 +#233 := (not #232)
  169.64 +#277 := (or #233 #271 #274)
  169.65 +#280 := (not #277)
  169.66 +#163 := (<= #5 1::int)
  169.67 +#289 := (or #21 #163 #280)
  169.68 +#304 := (not #289)
  169.69 +#24 := (:var 1 T1)
  169.70 +#25 := (up_4 #4 #24)
  169.71 +#809 := (pattern #25)
  169.72 +#28 := (= #4 #24)
  169.73 +#147 := (not #25)
  169.74 +#167 := (or #147 #27 #28)
  169.75 +#810 := (forall (vars (?x5 T1)) (:pat #809) #167)
  169.76 +#815 := (not #810)
  169.77 +#818 := (or #163 #815)
  169.78 +#821 := (not #818)
  169.79 +#253 := (not #21)
  169.80 +#824 := (or #253 #821)
  169.81 +#827 := (not #824)
  169.82 +#830 := (or #827 #304)
  169.83 +#833 := (not #830)
  169.84 +#837 := (forall (vars (?x4 T1)) (:pat #836 #788) #833)
  169.85 +#170 := (forall (vars (?x5 T1)) #167)
  169.86 +#236 := (not #170)
  169.87 +#239 := (or #163 #236)
  169.88 +#240 := (not #239)
  169.89 +#215 := (or #253 #240)
  169.90 +#303 := (not #215)
  169.91 +#305 := (or #303 #304)
  169.92 +#306 := (not #305)
  169.93 +#311 := (forall (vars (?x4 T1)) #306)
  169.94 +#838 := (iff #311 #837)
  169.95 +#834 := (iff #306 #833)
  169.96 +#831 := (iff #305 #830)
  169.97 +#828 := (iff #303 #827)
  169.98 +#825 := (iff #215 #824)
  169.99 +#822 := (iff #240 #821)
 169.100 +#819 := (iff #239 #818)
 169.101 +#816 := (iff #236 #815)
 169.102 +#813 := (iff #170 #810)
 169.103 +#811 := (iff #167 #167)
 169.104 +#812 := [refl]: #811
 169.105 +#814 := [quant-intro #812]: #813
 169.106 +#817 := [monotonicity #814]: #816
 169.107 +#820 := [monotonicity #817]: #819
 169.108 +#823 := [monotonicity #820]: #822
 169.109 +#826 := [monotonicity #823]: #825
 169.110 +#829 := [monotonicity #826]: #828
 169.111 +#832 := [monotonicity #829]: #831
 169.112 +#835 := [monotonicity #832]: #834
 169.113 +#839 := [quant-intro #835]: #838
 169.114 +#164 := (not #163)
 169.115 +#173 := (and #164 #170)
 169.116 +#259 := (or #253 #173)
 169.117 +#294 := (and #259 #289)
 169.118 +#297 := (forall (vars (?x4 T1)) #294)
 169.119 +#312 := (iff #297 #311)
 169.120 +#309 := (iff #294 #306)
 169.121 +#214 := (and #215 #289)
 169.122 +#307 := (iff #214 #306)
 169.123 +#308 := [rewrite]: #307
 169.124 +#301 := (iff #294 #214)
 169.125 +#216 := (iff #259 #215)
 169.126 +#268 := (iff #173 #240)
 169.127 +#300 := [rewrite]: #268
 169.128 +#213 := [monotonicity #300]: #216
 169.129 +#302 := [monotonicity #213]: #301
 169.130 +#310 := [trans #302 #308]: #309
 169.131 +#313 := [quant-intro #310]: #312
 169.132 +#230 := (= #210 #4)
 169.133 +#231 := (= #210 #26)
 169.134 +#234 := (or #233 #231 #230)
 169.135 +#235 := (not #234)
 169.136 +#228 := (not #164)
 169.137 +#241 := (or #228 #235)
 169.138 +#258 := (or #21 #241)
 169.139 +#260 := (and #259 #258)
 169.140 +#263 := (forall (vars (?x4 T1)) #260)
 169.141 +#298 := (iff #263 #297)
 169.142 +#295 := (iff #260 #294)
 169.143 +#292 := (iff #258 #289)
 169.144 +#283 := (or #163 #280)
 169.145 +#286 := (or #21 #283)
 169.146 +#290 := (iff #286 #289)
 169.147 +#291 := [rewrite]: #290
 169.148 +#287 := (iff #258 #286)
 169.149 +#284 := (iff #241 #283)
 169.150 +#281 := (iff #235 #280)
 169.151 +#278 := (iff #234 #277)
 169.152 +#275 := (iff #230 #274)
 169.153 +#276 := [rewrite]: #275
 169.154 +#272 := (iff #231 #271)
 169.155 +#273 := [rewrite]: #272
 169.156 +#279 := [monotonicity #273 #276]: #278
 169.157 +#282 := [monotonicity #279]: #281
 169.158 +#269 := (iff #228 #163)
 169.159 +#270 := [rewrite]: #269
 169.160 +#285 := [monotonicity #270 #282]: #284
 169.161 +#288 := [monotonicity #285]: #287
 169.162 +#293 := [trans #288 #291]: #292
 169.163 +#296 := [monotonicity #293]: #295
 169.164 +#299 := [quant-intro #296]: #298
 169.165 +#176 := (iff #21 #173)
 169.166 +#179 := (forall (vars (?x4 T1)) #176)
 169.167 +#264 := (~ #179 #263)
 169.168 +#261 := (~ #176 #260)
 169.169 +#251 := (~ #173 #173)
 169.170 +#249 := (~ #170 #170)
 169.171 +#247 := (~ #167 #167)
 169.172 +#248 := [refl]: #247
 169.173 +#250 := [nnf-pos #248]: #249
 169.174 +#245 := (~ #164 #164)
 169.175 +#246 := [refl]: #245
 169.176 +#252 := [monotonicity #246 #250]: #251
 169.177 +#242 := (not #173)
 169.178 +#243 := (~ #242 #241)
 169.179 +#237 := (~ #236 #235)
 169.180 +#238 := [sk]: #237
 169.181 +#229 := (~ #228 #228)
 169.182 +#209 := [refl]: #229
 169.183 +#244 := [nnf-neg #209 #238]: #243
 169.184 +#256 := (~ #21 #21)
 169.185 +#257 := [refl]: #256
 169.186 +#254 := (~ #253 #253)
 169.187 +#255 := [refl]: #254
 169.188 +#262 := [nnf-pos #255 #257 #244 #252]: #261
 169.189 +#265 := [nnf-pos #262]: #264
 169.190 +#29 := (or #27 #28)
 169.191 +#30 := (implies #25 #29)
 169.192 +#31 := (forall (vars (?x5 T1)) #30)
 169.193 +#23 := (< 1::int #5)
 169.194 +#32 := (and #23 #31)
 169.195 +#33 := (iff #21 #32)
 169.196 +#34 := (forall (vars (?x4 T1)) #33)
 169.197 +#182 := (iff #34 #179)
 169.198 +#148 := (or #147 #29)
 169.199 +#151 := (forall (vars (?x5 T1)) #148)
 169.200 +#154 := (and #23 #151)
 169.201 +#157 := (iff #21 #154)
 169.202 +#160 := (forall (vars (?x4 T1)) #157)
 169.203 +#180 := (iff #160 #179)
 169.204 +#177 := (iff #157 #176)
 169.205 +#174 := (iff #154 #173)
 169.206 +#171 := (iff #151 #170)
 169.207 +#168 := (iff #148 #167)
 169.208 +#169 := [rewrite]: #168
 169.209 +#172 := [quant-intro #169]: #171
 169.210 +#165 := (iff #23 #164)
 169.211 +#166 := [rewrite]: #165
 169.212 +#175 := [monotonicity #166 #172]: #174
 169.213 +#178 := [monotonicity #175]: #177
 169.214 +#181 := [quant-intro #178]: #180
 169.215 +#161 := (iff #34 #160)
 169.216 +#158 := (iff #33 #157)
 169.217 +#155 := (iff #32 #154)
 169.218 +#152 := (iff #31 #151)
 169.219 +#149 := (iff #30 #148)
 169.220 +#150 := [rewrite]: #149
 169.221 +#153 := [quant-intro #150]: #152
 169.222 +#156 := [monotonicity #153]: #155
 169.223 +#159 := [monotonicity #156]: #158
 169.224 +#162 := [quant-intro #159]: #161
 169.225 +#183 := [trans #162 #181]: #182
 169.226 +#146 := [asserted]: #34
 169.227 +#184 := [mp #146 #183]: #179
 169.228 +#266 := [mp~ #184 #265]: #263
 169.229 +#267 := [mp #266 #299]: #297
 169.230 +#314 := [mp #267 #313]: #311
 169.231 +#840 := [mp #314 #839]: #837
 169.232 +#754 := (not #837)
 169.233 +#851 := (or #754 #848)
 169.234 +#448 := (or #447 #479 #468)
 169.235 +#439 := (not #448)
 169.236 +#453 := (or #192 #452 #439)
 169.237 +#454 := (not #453)
 169.238 +#457 := (or #446 #27 #455)
 169.239 +#442 := (forall (vars (?x5 T1)) (:pat #440) #457)
 169.240 +#443 := (not #442)
 169.241 +#422 := (or #452 #443)
 169.242 +#424 := (not #422)
 169.243 +#430 := (or #429 #424)
 169.244 +#431 := (not #430)
 169.245 +#432 := (or #431 #454)
 169.246 +#433 := (not #432)
 169.247 +#852 := (or #754 #433)
 169.248 +#854 := (iff #852 #851)
 169.249 +#856 := (iff #851 #851)
 169.250 +#857 := [rewrite]: #856
 169.251 +#849 := (iff #433 #848)
 169.252 +#846 := (iff #432 #843)
 169.253 +#379 := (or #389 #377)
 169.254 +#844 := (iff #379 #843)
 169.255 +#845 := [rewrite]: #844
 169.256 +#841 := (iff #432 #379)
 169.257 +#378 := (iff #454 #377)
 169.258 +#388 := (iff #453 #386)
 169.259 +#381 := (or #192 #452 #391)
 169.260 +#387 := (iff #381 #386)
 169.261 +#383 := [rewrite]: #387
 169.262 +#382 := (iff #453 #381)
 169.263 +#399 := (iff #439 #391)
 169.264 +#397 := (iff #448 #396)
 169.265 +#398 := [rewrite]: #397
 169.266 +#384 := [monotonicity #398]: #399
 169.267 +#385 := [monotonicity #384]: #382
 169.268 +#375 := [trans #385 #383]: #388
 169.269 +#376 := [monotonicity #375]: #378
 169.270 +#392 := (iff #431 #389)
 169.271 +#401 := (iff #430 #405)
 169.272 +#402 := (iff #424 #400)
 169.273 +#394 := (iff #422 #409)
 169.274 +#410 := (or #452 #417)
 169.275 +#415 := (iff #410 #409)
 169.276 +#390 := [rewrite]: #415
 169.277 +#411 := (iff #422 #410)
 169.278 +#420 := (iff #443 #417)
 169.279 +#418 := (iff #442 #416)
 169.280 +#423 := (iff #457 #434)
 169.281 +#435 := [rewrite]: #423
 169.282 +#419 := [quant-intro #435]: #418
 169.283 +#408 := [monotonicity #419]: #420
 169.284 +#414 := [monotonicity #408]: #411
 169.285 +#395 := [trans #414 #390]: #394
 169.286 +#403 := [monotonicity #395]: #402
 169.287 +#406 := [monotonicity #403]: #401
 169.288 +#393 := [monotonicity #406]: #392
 169.289 +#842 := [monotonicity #393 #376]: #841
 169.290 +#847 := [trans #842 #845]: #846
 169.291 +#850 := [monotonicity #847]: #849
 169.292 +#855 := [monotonicity #850]: #854
 169.293 +#858 := [trans #855 #857]: #854
 169.294 +#853 := [quant-inst]: #852
 169.295 +#859 := [mp #853 #858]: #851
 169.296 +#934 := [unit-resolution #859 #840]: #848
 169.297 +#893 := (or #843 #405)
 169.298 +#894 := [def-axiom]: #893
 169.299 +#935 := [unit-resolution #894 #934]: #405
 169.300 +#938 := (or #389 #400)
 169.301 +#41 := (+ #40 1::int)
 169.302 +#42 := (uf_1 #41)
 169.303 +#43 := (up_3 #42)
 169.304 +#193 := (iff #43 #192)
 169.305 +#190 := (= #42 #189)
 169.306 +#187 := (= #41 #186)
 169.307 +#188 := [rewrite]: #187
 169.308 +#191 := [monotonicity #188]: #190
 169.309 +#194 := [monotonicity #191]: #193
 169.310 +#185 := [asserted]: #43
 169.311 +#197 := [mp #185 #194]: #192
 169.312 +#889 := (or #389 #429 #400)
 169.313 +#890 := [def-axiom]: #889
 169.314 +#939 := [unit-resolution #890 #197]: #938
 169.315 +#940 := [unit-resolution #939 #935]: #400
 169.316 +#881 := (or #409 #874)
 169.317 +#882 := [def-axiom]: #881
 169.318 +#941 := [unit-resolution #882 #940]: #874
 169.319 +#555 := -1::int
 169.320 +#525 := (* -1::int #524)
 169.321 +#528 := (+ #40 #525)
 169.322 +#494 := (>= #528 -1::int)
 169.323 +#510 := (= #528 -1::int)
 169.324 +#514 := (>= #40 -1::int)
 169.325 +#495 := (= #524 0::int)
 169.326 +#946 := (not #495)
 169.327 +#467 := (<= #524 0::int)
 169.328 +#942 := (not #467)
 169.329 +#943 := (or #942 #452)
 169.330 +#944 := [th-lemma]: #943
 169.331 +#945 := [unit-resolution #944 #941]: #942
 169.332 +#947 := (or #946 #467)
 169.333 +#948 := [th-lemma]: #947
 169.334 +#949 := [unit-resolution #948 #945]: #946
 169.335 +#498 := (or #495 #514)
 169.336 +#10 := (:var 0 int)
 169.337 +#12 := (uf_1 #10)
 169.338 +#796 := (pattern #12)
 169.339 +#87 := (>= #10 0::int)
 169.340 +#13 := (uf_2 #12)
 169.341 +#18 := (= #13 0::int)
 169.342 +#135 := (or #18 #87)
 169.343 +#803 := (forall (vars (?x3 int)) (:pat #796) #135)
 169.344 +#140 := (forall (vars (?x3 int)) #135)
 169.345 +#806 := (iff #140 #803)
 169.346 +#804 := (iff #135 #135)
 169.347 +#805 := [refl]: #804
 169.348 +#807 := [quant-intro #805]: #806
 169.349 +#207 := (~ #140 #140)
 169.350 +#225 := (~ #135 #135)
 169.351 +#226 := [refl]: #225
 169.352 +#208 := [nnf-pos #226]: #207
 169.353 +#17 := (< #10 0::int)
 169.354 +#19 := (implies #17 #18)
 169.355 +#20 := (forall (vars (?x3 int)) #19)
 169.356 +#143 := (iff #20 #140)
 169.357 +#106 := (= 0::int #13)
 169.358 +#112 := (not #17)
 169.359 +#113 := (or #112 #106)
 169.360 +#118 := (forall (vars (?x3 int)) #113)
 169.361 +#141 := (iff #118 #140)
 169.362 +#138 := (iff #113 #135)
 169.363 +#132 := (or #87 #18)
 169.364 +#136 := (iff #132 #135)
 169.365 +#137 := [rewrite]: #136
 169.366 +#133 := (iff #113 #132)
 169.367 +#130 := (iff #106 #18)
 169.368 +#131 := [rewrite]: #130
 169.369 +#128 := (iff #112 #87)
 169.370 +#88 := (not #87)
 169.371 +#123 := (not #88)
 169.372 +#126 := (iff #123 #87)
 169.373 +#127 := [rewrite]: #126
 169.374 +#124 := (iff #112 #123)
 169.375 +#121 := (iff #17 #88)
 169.376 +#122 := [rewrite]: #121
 169.377 +#125 := [monotonicity #122]: #124
 169.378 +#129 := [trans #125 #127]: #128
 169.379 +#134 := [monotonicity #129 #131]: #133
 169.380 +#139 := [trans #134 #137]: #138
 169.381 +#142 := [quant-intro #139]: #141
 169.382 +#119 := (iff #20 #118)
 169.383 +#116 := (iff #19 #113)
 169.384 +#109 := (implies #17 #106)
 169.385 +#114 := (iff #109 #113)
 169.386 +#115 := [rewrite]: #114
 169.387 +#110 := (iff #19 #109)
 169.388 +#107 := (iff #18 #106)
 169.389 +#108 := [rewrite]: #107
 169.390 +#111 := [monotonicity #108]: #110
 169.391 +#117 := [trans #111 #115]: #116
 169.392 +#120 := [quant-intro #117]: #119
 169.393 +#144 := [trans #120 #142]: #143
 169.394 +#105 := [asserted]: #20
 169.395 +#145 := [mp #105 #144]: #140
 169.396 +#227 := [mp~ #145 #208]: #140
 169.397 +#808 := [mp #227 #807]: #803
 169.398 +#532 := (not #803)
 169.399 +#488 := (or #532 #495 #514)
 169.400 +#529 := (>= #186 0::int)
 169.401 +#496 := (or #495 #529)
 169.402 +#489 := (or #532 #496)
 169.403 +#474 := (iff #489 #488)
 169.404 +#482 := (or #532 #498)
 169.405 +#483 := (iff #482 #488)
 169.406 +#493 := [rewrite]: #483
 169.407 +#491 := (iff #489 #482)
 169.408 +#497 := (iff #496 #498)
 169.409 +#515 := (iff #529 #514)
 169.410 +#516 := [rewrite]: #515
 169.411 +#499 := [monotonicity #516]: #497
 169.412 +#492 := [monotonicity #499]: #491
 169.413 +#475 := [trans #492 #493]: #474
 169.414 +#490 := [quant-inst]: #489
 169.415 +#476 := [mp #490 #475]: #488
 169.416 +#950 := [unit-resolution #476 #808]: #498
 169.417 +#951 := [unit-resolution #950 #949]: #514
 169.418 +#517 := (not #514)
 169.419 +#520 := (or #510 #517)
 169.420 +#69 := (= #10 #13)
 169.421 +#94 := (or #69 #88)
 169.422 +#797 := (forall (vars (?x2 int)) (:pat #796) #94)
 169.423 +#99 := (forall (vars (?x2 int)) #94)
 169.424 +#800 := (iff #99 #797)
 169.425 +#798 := (iff #94 #94)
 169.426 +#799 := [refl]: #798
 169.427 +#801 := [quant-intro #799]: #800
 169.428 +#206 := (~ #99 #99)
 169.429 +#222 := (~ #94 #94)
 169.430 +#223 := [refl]: #222
 169.431 +#196 := [nnf-pos #223]: #206
 169.432 +#14 := (= #13 #10)
 169.433 +#11 := (<= 0::int #10)
 169.434 +#15 := (implies #11 #14)
 169.435 +#16 := (forall (vars (?x2 int)) #15)
 169.436 +#102 := (iff #16 #99)
 169.437 +#76 := (not #11)
 169.438 +#77 := (or #76 #69)
 169.439 +#82 := (forall (vars (?x2 int)) #77)
 169.440 +#100 := (iff #82 #99)
 169.441 +#97 := (iff #77 #94)
 169.442 +#91 := (or #88 #69)
 169.443 +#95 := (iff #91 #94)
 169.444 +#96 := [rewrite]: #95
 169.445 +#92 := (iff #77 #91)
 169.446 +#89 := (iff #76 #88)
 169.447 +#85 := (iff #11 #87)
 169.448 +#86 := [rewrite]: #85
 169.449 +#90 := [monotonicity #86]: #89
 169.450 +#93 := [monotonicity #90]: #92
 169.451 +#98 := [trans #93 #96]: #97
 169.452 +#101 := [quant-intro #98]: #100
 169.453 +#83 := (iff #16 #82)
 169.454 +#80 := (iff #15 #77)
 169.455 +#73 := (implies #11 #69)
 169.456 +#78 := (iff #73 #77)
 169.457 +#79 := [rewrite]: #78
 169.458 +#74 := (iff #15 #73)
 169.459 +#71 := (iff #14 #69)
 169.460 +#72 := [rewrite]: #71
 169.461 +#75 := [monotonicity #72]: #74
 169.462 +#81 := [trans #75 #79]: #80
 169.463 +#84 := [quant-intro #81]: #83
 169.464 +#103 := [trans #84 #101]: #102
 169.465 +#68 := [asserted]: #16
 169.466 +#104 := [mp #68 #103]: #99
 169.467 +#224 := [mp~ #104 #196]: #99
 169.468 +#802 := [mp #224 #801]: #797
 169.469 +#559 := (not #797)
 169.470 +#511 := (or #559 #510 #517)
 169.471 +#531 := (not #529)
 169.472 +#526 := (= #186 #524)
 169.473 +#527 := (or #526 #531)
 169.474 +#523 := (or #559 #527)
 169.475 +#507 := (iff #523 #511)
 169.476 +#502 := (or #559 #520)
 169.477 +#505 := (iff #502 #511)
 169.478 +#506 := [rewrite]: #505
 169.479 +#503 := (iff #523 #502)
 169.480 +#521 := (iff #527 #520)
 169.481 +#518 := (iff #531 #517)
 169.482 +#519 := [monotonicity #516]: #518
 169.483 +#512 := (iff #526 #510)
 169.484 +#513 := [rewrite]: #512
 169.485 +#522 := [monotonicity #513 #519]: #521
 169.486 +#504 := [monotonicity #522]: #503
 169.487 +#508 := [trans #504 #506]: #507
 169.488 +#500 := [quant-inst]: #523
 169.489 +#501 := [mp #500 #508]: #511
 169.490 +#952 := [unit-resolution #501 #802]: #520
 169.491 +#953 := [unit-resolution #952 #951]: #510
 169.492 +#954 := (not #510)
 169.493 +#955 := (or #954 #494)
 169.494 +#956 := [th-lemma]: #955
 169.495 +#957 := [unit-resolution #956 #953]: #494
 169.496 +#959 := (not #494)
 169.497 +#960 := (or #958 #452 #959)
 169.498 +#961 := [th-lemma]: #960
 169.499 +#962 := [unit-resolution #961 #957 #941]: #958
 169.500 +#964 := (or #963 #537)
 169.501 +#965 := [th-lemma]: #964
 169.502 +#966 := [unit-resolution #965 #962]: #963
 169.503 +#583 := (>= #38 0::int)
 169.504 +#584 := (not #583)
 169.505 +#556 := (* -1::int #40)
 169.506 +#557 := (+ #38 #556)
 169.507 +#558 := (= #557 0::int)
 169.508 +#971 := (not #558)
 169.509 +#544 := (>= #557 0::int)
 169.510 +#967 := (not #544)
 169.511 +#201 := (>= #37 1::int)
 169.512 +#202 := (not #201)
 169.513 +#44 := (<= 1::int #37)
 169.514 +#45 := (not #44)
 169.515 +#203 := (iff #45 #202)
 169.516 +#199 := (iff #44 #201)
 169.517 +#200 := [rewrite]: #199
 169.518 +#204 := [monotonicity #200]: #203
 169.519 +#195 := [asserted]: #45
 169.520 +#205 := [mp #195 #204]: #202
 169.521 +#968 := (or #967 #201 #452 #959)
 169.522 +#969 := [th-lemma]: #968
 169.523 +#970 := [unit-resolution #969 #205 #957 #941]: #967
 169.524 +#972 := (or #971 #544)
 169.525 +#973 := [th-lemma]: #972
 169.526 +#974 := [unit-resolution #973 #970]: #971
 169.527 +#562 := (or #558 #584)
 169.528 +#564 := (or #559 #558 #584)
 169.529 +#567 := (= #38 #40)
 169.530 +#585 := (or #567 #584)
 169.531 +#543 := (or #559 #585)
 169.532 +#542 := (iff #543 #564)
 169.533 +#550 := (or #559 #562)
 169.534 +#551 := (iff #550 #564)
 169.535 +#554 := [rewrite]: #551
 169.536 +#552 := (iff #543 #550)
 169.537 +#404 := (iff #585 #562)
 169.538 +#560 := (iff #567 #558)
 169.539 +#561 := [rewrite]: #560
 169.540 +#563 := [monotonicity #561]: #404
 169.541 +#553 := [monotonicity #563]: #552
 169.542 +#545 := [trans #553 #554]: #542
 169.543 +#546 := [quant-inst]: #543
 169.544 +#547 := [mp #546 #545]: #564
 169.545 +#975 := [unit-resolution #547 #802]: #562
 169.546 +#976 := [unit-resolution #975 #974]: #584
 169.547 +#539 := (or #549 #583)
 169.548 +#535 := (or #532 #549 #583)
 169.549 +#536 := (or #532 #539)
 169.550 +#533 := (iff #536 #535)
 169.551 +#541 := [rewrite]: #533
 169.552 +#540 := [quant-inst]: #536
 169.553 +#534 := [mp #540 #541]: #535
 169.554 +#977 := [unit-resolution #534 #808]: #539
 169.555 +[unit-resolution #977 #976 #966]: false
 169.556 +unsat
   170.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   170.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_01	Tue Oct 20 10:11:30 2009 +0200
   170.3 @@ -0,0 +1,10 @@
   170.4 +(benchmark Isabelle
   170.5 +:extrafuns (
   170.6 +  (uf_1 Int)
   170.7 +  (uf_2 Int)
   170.8 + )
   170.9 +:assumption (< 0 uf_1)
  170.10 +:assumption (< 0 (* uf_1 uf_2))
  170.11 +:assumption (not (< 0 uf_2))
  170.12 +:formula true
  170.13 +)
   171.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   171.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_01.proof	Tue Oct 20 10:11:30 2009 +0200
   171.3 @@ -0,0 +1,1 @@
   171.4 +unsat
   172.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   172.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_02	Tue Oct 20 10:11:30 2009 +0200
   172.3 @@ -0,0 +1,9 @@
   172.4 +(benchmark Isabelle
   172.5 +:extrafuns (
   172.6 +  (uf_1 Int)
   172.7 +  (uf_2 Int)
   172.8 +  (uf_3 Int)
   172.9 + )
  172.10 +:assumption (not (= (* uf_1 (+ (+ uf_2 1) uf_3)) (+ (* uf_1 uf_2) (* uf_1 (+ uf_3 1)))))
  172.11 +:formula true
  172.12 +)
   173.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   173.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_02.proof	Tue Oct 20 10:11:30 2009 +0200
   173.3 @@ -0,0 +1,75 @@
   173.4 +#2 := false
   173.5 +#6 := 1::int
   173.6 +decl uf_3 :: int
   173.7 +#8 := uf_3
   173.8 +#12 := (+ uf_3 1::int)
   173.9 +decl uf_1 :: int
  173.10 +#4 := uf_1
  173.11 +#13 := (* uf_1 #12)
  173.12 +decl uf_2 :: int
  173.13 +#5 := uf_2
  173.14 +#11 := (* uf_1 uf_2)
  173.15 +#14 := (+ #11 #13)
  173.16 +#7 := (+ uf_2 1::int)
  173.17 +#9 := (+ #7 uf_3)
  173.18 +#10 := (* uf_1 #9)
  173.19 +#15 := (= #10 #14)
  173.20 +#16 := (not #15)
  173.21 +#85 := (iff #16 false)
  173.22 +#1 := true
  173.23 +#80 := (not true)
  173.24 +#83 := (iff #80 false)
  173.25 +#84 := [rewrite]: #83
  173.26 +#81 := (iff #16 #80)
  173.27 +#78 := (iff #15 true)
  173.28 +#48 := (* uf_1 uf_3)
  173.29 +#49 := (+ #11 #48)
  173.30 +#50 := (+ uf_1 #49)
  173.31 +#73 := (= #50 #50)
  173.32 +#76 := (iff #73 true)
  173.33 +#77 := [rewrite]: #76
  173.34 +#74 := (iff #15 #73)
  173.35 +#71 := (= #14 #50)
  173.36 +#61 := (+ uf_1 #48)
  173.37 +#66 := (+ #11 #61)
  173.38 +#69 := (= #66 #50)
  173.39 +#70 := [rewrite]: #69
  173.40 +#67 := (= #14 #66)
  173.41 +#64 := (= #13 #61)
  173.42 +#55 := (+ 1::int uf_3)
  173.43 +#58 := (* uf_1 #55)
  173.44 +#62 := (= #58 #61)
  173.45 +#63 := [rewrite]: #62
  173.46 +#59 := (= #13 #58)
  173.47 +#56 := (= #12 #55)
  173.48 +#57 := [rewrite]: #56
  173.49 +#60 := [monotonicity #57]: #59
  173.50 +#65 := [trans #60 #63]: #64
  173.51 +#68 := [monotonicity #65]: #67
  173.52 +#72 := [trans #68 #70]: #71
  173.53 +#53 := (= #10 #50)
  173.54 +#39 := (+ uf_2 uf_3)
  173.55 +#40 := (+ 1::int #39)
  173.56 +#45 := (* uf_1 #40)
  173.57 +#51 := (= #45 #50)
  173.58 +#52 := [rewrite]: #51
  173.59 +#46 := (= #10 #45)
  173.60 +#43 := (= #9 #40)
  173.61 +#33 := (+ 1::int uf_2)
  173.62 +#36 := (+ #33 uf_3)
  173.63 +#41 := (= #36 #40)
  173.64 +#42 := [rewrite]: #41
  173.65 +#37 := (= #9 #36)
  173.66 +#34 := (= #7 #33)
  173.67 +#35 := [rewrite]: #34
  173.68 +#38 := [monotonicity #35]: #37
  173.69 +#44 := [trans #38 #42]: #43
  173.70 +#47 := [monotonicity #44]: #46
  173.71 +#54 := [trans #47 #52]: #53
  173.72 +#75 := [monotonicity #54 #72]: #74
  173.73 +#79 := [trans #75 #77]: #78
  173.74 +#82 := [monotonicity #79]: #81
  173.75 +#86 := [trans #82 #84]: #85
  173.76 +#32 := [asserted]: #16
  173.77 +[mp #32 #86]: false
  173.78 +unsat
   174.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   174.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_03	Tue Oct 20 10:11:30 2009 +0200
   174.3 @@ -0,0 +1,8 @@
   174.4 +(benchmark Isabelle
   174.5 +:extrafuns (
   174.6 +  (uf_1 Real)
   174.7 +  (uf_2 Real)
   174.8 + )
   174.9 +:assumption (not (= (- (* uf_1 (+ 1.0 uf_2)) (* uf_1 (- 1.0 uf_2))) (* (* 2.0 uf_1) uf_2)))
  174.10 +:formula true
  174.11 +)
   175.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   175.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_03.proof	Tue Oct 20 10:11:30 2009 +0200
   175.3 @@ -0,0 +1,62 @@
   175.4 +#2 := false
   175.5 +decl uf_2 :: real
   175.6 +#6 := uf_2
   175.7 +decl uf_1 :: real
   175.8 +#4 := uf_1
   175.9 +#12 := 2::real
  175.10 +#13 := (* 2::real uf_1)
  175.11 +#14 := (* #13 uf_2)
  175.12 +#5 := 1::real
  175.13 +#9 := (- 1::real uf_2)
  175.14 +#10 := (* uf_1 #9)
  175.15 +#7 := (+ 1::real uf_2)
  175.16 +#8 := (* uf_1 #7)
  175.17 +#11 := (- #8 #10)
  175.18 +#15 := (= #11 #14)
  175.19 +#16 := (not #15)
  175.20 +#73 := (iff #16 false)
  175.21 +#1 := true
  175.22 +#68 := (not true)
  175.23 +#71 := (iff #68 false)
  175.24 +#72 := [rewrite]: #71
  175.25 +#69 := (iff #16 #68)
  175.26 +#66 := (iff #15 true)
  175.27 +#33 := (* uf_1 uf_2)
  175.28 +#55 := (* 2::real #33)
  175.29 +#61 := (= #55 #55)
  175.30 +#64 := (iff #61 true)
  175.31 +#65 := [rewrite]: #64
  175.32 +#62 := (iff #15 #61)
  175.33 +#59 := (= #14 #55)
  175.34 +#60 := [rewrite]: #59
  175.35 +#57 := (= #11 #55)
  175.36 +#37 := -1::real
  175.37 +#45 := (* -1::real #33)
  175.38 +#46 := (+ uf_1 #45)
  175.39 +#34 := (+ uf_1 #33)
  175.40 +#51 := (- #34 #46)
  175.41 +#54 := (= #51 #55)
  175.42 +#56 := [rewrite]: #54
  175.43 +#52 := (= #11 #51)
  175.44 +#49 := (= #10 #46)
  175.45 +#38 := (* -1::real uf_2)
  175.46 +#39 := (+ 1::real #38)
  175.47 +#42 := (* uf_1 #39)
  175.48 +#47 := (= #42 #46)
  175.49 +#48 := [rewrite]: #47
  175.50 +#43 := (= #10 #42)
  175.51 +#40 := (= #9 #39)
  175.52 +#41 := [rewrite]: #40
  175.53 +#44 := [monotonicity #41]: #43
  175.54 +#50 := [trans #44 #48]: #49
  175.55 +#35 := (= #8 #34)
  175.56 +#36 := [rewrite]: #35
  175.57 +#53 := [monotonicity #36 #50]: #52
  175.58 +#58 := [trans #53 #56]: #57
  175.59 +#63 := [monotonicity #58 #60]: #62
  175.60 +#67 := [trans #63 #65]: #66
  175.61 +#70 := [monotonicity #67]: #69
  175.62 +#74 := [trans #70 #72]: #73
  175.63 +#32 := [asserted]: #16
  175.64 +[mp #32 #74]: false
  175.65 +unsat
   176.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   176.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_04	Tue Oct 20 10:11:30 2009 +0200
   176.3 @@ -0,0 +1,11 @@
   176.4 +(benchmark Isabelle
   176.5 +:extrafuns (
   176.6 +  (uf_1 Int)
   176.7 +  (uf_3 Int)
   176.8 +  (uf_5 Int)
   176.9 +  (uf_4 Int)
  176.10 +  (uf_2 Int)
  176.11 + )
  176.12 +:assumption (not (= (+ (+ uf_1 (* (+ 1 uf_2) (+ uf_3 uf_4))) (* uf_2 uf_5)) (- (+ uf_1 (+ (+ (* (* 2 (+ 1 uf_2)) (+ uf_3 uf_4)) (* (+ 1 uf_2) uf_5)) (* uf_5 uf_2))) (* (+ 1 uf_2) (+ (+ uf_3 uf_5) uf_4)))))
  176.13 +:formula true
  176.14 +)
   177.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   177.2 +++ b/src/HOL/SMT/Examples/cert/z3_nlarith_04.proof	Tue Oct 20 10:11:30 2009 +0200
   177.3 @@ -0,0 +1,141 @@
   177.4 +#2 := false
   177.5 +decl uf_4 :: int
   177.6 +#9 := uf_4
   177.7 +decl uf_5 :: int
   177.8 +#13 := uf_5
   177.9 +decl uf_3 :: int
  177.10 +#8 := uf_3
  177.11 +#24 := (+ uf_3 uf_5)
  177.12 +#25 := (+ #24 uf_4)
  177.13 +decl uf_2 :: int
  177.14 +#6 := uf_2
  177.15 +#5 := 1::int
  177.16 +#7 := (+ 1::int uf_2)
  177.17 +#26 := (* #7 #25)
  177.18 +#21 := (* uf_5 uf_2)
  177.19 +#19 := (* #7 uf_5)
  177.20 +#10 := (+ uf_3 uf_4)
  177.21 +#16 := 2::int
  177.22 +#17 := (* 2::int #7)
  177.23 +#18 := (* #17 #10)
  177.24 +#20 := (+ #18 #19)
  177.25 +#22 := (+ #20 #21)
  177.26 +decl uf_1 :: int
  177.27 +#4 := uf_1
  177.28 +#23 := (+ uf_1 #22)
  177.29 +#27 := (- #23 #26)
  177.30 +#14 := (* uf_2 uf_5)
  177.31 +#11 := (* #7 #10)
  177.32 +#12 := (+ uf_1 #11)
  177.33 +#15 := (+ #12 #14)
  177.34 +#28 := (= #15 #27)
  177.35 +#29 := (not #28)
  177.36 +#149 := (iff #29 false)
  177.37 +#1 := true
  177.38 +#144 := (not true)
  177.39 +#147 := (iff #144 false)
  177.40 +#148 := [rewrite]: #147
  177.41 +#145 := (iff #29 #144)
  177.42 +#142 := (iff #28 true)
  177.43 +#47 := (* uf_2 uf_4)
  177.44 +#46 := (* uf_2 uf_3)
  177.45 +#48 := (+ #46 #47)
  177.46 +#59 := (+ #14 #48)
  177.47 +#60 := (+ uf_4 #59)
  177.48 +#61 := (+ uf_3 #60)
  177.49 +#62 := (+ uf_1 #61)
  177.50 +#136 := (= #62 #62)
  177.51 +#140 := (iff #136 true)
  177.52 +#141 := [rewrite]: #140
  177.53 +#135 := (iff #28 #136)
  177.54 +#138 := (= #27 #62)
  177.55 +#123 := (+ uf_5 #59)
  177.56 +#124 := (+ uf_4 #123)
  177.57 +#125 := (+ uf_3 #124)
  177.58 +#77 := (* 2::int #47)
  177.59 +#75 := (* 2::int #46)
  177.60 +#78 := (+ #75 #77)
  177.61 +#104 := (* 2::int #14)
  177.62 +#105 := (+ #104 #78)
  177.63 +#106 := (+ uf_5 #105)
  177.64 +#76 := (* 2::int uf_4)
  177.65 +#107 := (+ #76 #106)
  177.66 +#74 := (* 2::int uf_3)
  177.67 +#108 := (+ #74 #107)
  177.68 +#113 := (+ uf_1 #108)
  177.69 +#130 := (- #113 #125)
  177.70 +#133 := (= #130 #62)
  177.71 +#139 := [rewrite]: #133
  177.72 +#131 := (= #27 #130)
  177.73 +#128 := (= #26 #125)
  177.74 +#116 := (+ uf_4 uf_5)
  177.75 +#117 := (+ uf_3 #116)
  177.76 +#120 := (* #7 #117)
  177.77 +#126 := (= #120 #125)
  177.78 +#127 := [rewrite]: #126
  177.79 +#121 := (= #26 #120)
  177.80 +#118 := (= #25 #117)
  177.81 +#119 := [rewrite]: #118
  177.82 +#122 := [monotonicity #119]: #121
  177.83 +#129 := [trans #122 #127]: #128
  177.84 +#114 := (= #23 #113)
  177.85 +#111 := (= #22 #108)
  177.86 +#91 := (+ #14 #78)
  177.87 +#92 := (+ uf_5 #91)
  177.88 +#93 := (+ #76 #92)
  177.89 +#94 := (+ #74 #93)
  177.90 +#101 := (+ #94 #14)
  177.91 +#109 := (= #101 #108)
  177.92 +#110 := [rewrite]: #109
  177.93 +#102 := (= #22 #101)
  177.94 +#99 := (= #21 #14)
  177.95 +#100 := [rewrite]: #99
  177.96 +#97 := (= #20 #94)
  177.97 +#85 := (+ uf_5 #14)
  177.98 +#79 := (+ #76 #78)
  177.99 +#80 := (+ #74 #79)
 177.100 +#88 := (+ #80 #85)
 177.101 +#95 := (= #88 #94)
 177.102 +#96 := [rewrite]: #95
 177.103 +#89 := (= #20 #88)
 177.104 +#86 := (= #19 #85)
 177.105 +#87 := [rewrite]: #86
 177.106 +#83 := (= #18 #80)
 177.107 +#67 := (* 2::int uf_2)
 177.108 +#68 := (+ 2::int #67)
 177.109 +#71 := (* #68 #10)
 177.110 +#81 := (= #71 #80)
 177.111 +#82 := [rewrite]: #81
 177.112 +#72 := (= #18 #71)
 177.113 +#69 := (= #17 #68)
 177.114 +#70 := [rewrite]: #69
 177.115 +#73 := [monotonicity #70]: #72
 177.116 +#84 := [trans #73 #82]: #83
 177.117 +#90 := [monotonicity #84 #87]: #89
 177.118 +#98 := [trans #90 #96]: #97
 177.119 +#103 := [monotonicity #98 #100]: #102
 177.120 +#112 := [trans #103 #110]: #111
 177.121 +#115 := [monotonicity #112]: #114
 177.122 +#132 := [monotonicity #115 #129]: #131
 177.123 +#137 := [trans #132 #139]: #138
 177.124 +#65 := (= #15 #62)
 177.125 +#49 := (+ uf_4 #48)
 177.126 +#50 := (+ uf_3 #49)
 177.127 +#53 := (+ uf_1 #50)
 177.128 +#56 := (+ #53 #14)
 177.129 +#63 := (= #56 #62)
 177.130 +#64 := [rewrite]: #63
 177.131 +#57 := (= #15 #56)
 177.132 +#54 := (= #12 #53)
 177.133 +#51 := (= #11 #50)
 177.134 +#52 := [rewrite]: #51
 177.135 +#55 := [monotonicity #52]: #54
 177.136 +#58 := [monotonicity #55]: #57
 177.137 +#66 := [trans #58 #64]: #65
 177.138 +#134 := [monotonicity #66 #137]: #135
 177.139 +#143 := [trans #134 #141]: #142
 177.140 +#146 := [monotonicity #143]: #145
 177.141 +#150 := [trans #146 #148]: #149
 177.142 +#45 := [asserted]: #29
 177.143 +[mp #45 #150]: false
 177.144 +unsat
   178.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   178.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_01	Tue Oct 20 10:11:30 2009 +0200
   178.3 @@ -0,0 +1,17 @@
   178.4 +(benchmark Isabelle
   178.5 +:extrasorts ( T2 T3 T1)
   178.6 +:extrafuns (
   178.7 +  (uf_2 T1 T2)
   178.8 +  (uf_3 T1 T3)
   178.9 +  (uf_1 T2 T3 T1)
  178.10 +  (uf_6 T2)
  178.11 +  (uf_4 T2)
  178.12 +  (uf_5 T3)
  178.13 + )
  178.14 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1) (uf_3 ?x1)) ?x1))
  178.15 +:assumption (forall (?x2 T2) (?x3 T3) (= (uf_3 (uf_1 ?x2 ?x3)) ?x3))
  178.16 +:assumption (forall (?x4 T2) (?x5 T3) (= (uf_2 (uf_1 ?x4 ?x5)) ?x4))
  178.17 +:assumption (= (uf_2 (uf_1 uf_4 uf_5)) uf_6)
  178.18 +:assumption (not (= uf_4 uf_6))
  178.19 +:formula true
  178.20 +)
   179.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   179.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_01.proof	Tue Oct 20 10:11:30 2009 +0200
   179.3 @@ -0,0 +1,50 @@
   179.4 +#2 := false
   179.5 +decl uf_6 :: T2
   179.6 +#23 := uf_6
   179.7 +decl uf_4 :: T2
   179.8 +#19 := uf_4
   179.9 +#25 := (= uf_4 uf_6)
  179.10 +decl uf_2 :: (-> T1 T2)
  179.11 +decl uf_1 :: (-> T2 T3 T1)
  179.12 +decl uf_5 :: T3
  179.13 +#20 := uf_5
  179.14 +#21 := (uf_1 uf_4 uf_5)
  179.15 +#22 := (uf_2 #21)
  179.16 +#24 := (= #22 uf_6)
  179.17 +#65 := [asserted]: #24
  179.18 +#143 := (= uf_4 #22)
  179.19 +#11 := (:var 0 T3)
  179.20 +#10 := (:var 1 T2)
  179.21 +#12 := (uf_1 #10 #11)
  179.22 +#567 := (pattern #12)
  179.23 +#16 := (uf_2 #12)
  179.24 +#58 := (= #10 #16)
  179.25 +#574 := (forall (vars (?x4 T2) (?x5 T3)) (:pat #567) #58)
  179.26 +#62 := (forall (vars (?x4 T2) (?x5 T3)) #58)
  179.27 +#577 := (iff #62 #574)
  179.28 +#575 := (iff #58 #58)
  179.29 +#576 := [refl]: #575
  179.30 +#578 := [quant-intro #576]: #577
  179.31 +#71 := (~ #62 #62)
  179.32 +#87 := (~ #58 #58)
  179.33 +#88 := [refl]: #87
  179.34 +#72 := [nnf-pos #88]: #71
  179.35 +#17 := (= #16 #10)
  179.36 +#18 := (forall (vars (?x4 T2) (?x5 T3)) #17)
  179.37 +#63 := (iff #18 #62)
  179.38 +#60 := (iff #17 #58)
  179.39 +#61 := [rewrite]: #60
  179.40 +#64 := [quant-intro #61]: #63
  179.41 +#57 := [asserted]: #18
  179.42 +#67 := [mp #57 #64]: #62
  179.43 +#89 := [mp~ #67 #72]: #62
  179.44 +#579 := [mp #89 #578]: #574
  179.45 +#214 := (not #574)
  179.46 +#551 := (or #214 #143)
  179.47 +#553 := [quant-inst]: #551
  179.48 +#233 := [unit-resolution #553 #579]: #143
  179.49 +#235 := [trans #233 #65]: #25
  179.50 +#26 := (not #25)
  179.51 +#66 := [asserted]: #26
  179.52 +[unit-resolution #66 #235]: false
  179.53 +unsat
   180.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   180.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_02	Tue Oct 20 10:11:30 2009 +0200
   180.3 @@ -0,0 +1,24 @@
   180.4 +(benchmark Isabelle
   180.5 +:extrasorts ( T2 T3 T1 T4)
   180.6 +:extrafuns (
   180.7 +  (uf_2 T1 T2)
   180.8 +  (uf_5 T4 T3)
   180.9 +  (uf_3 T1 T3)
  180.10 +  (uf_6 T4 T2)
  180.11 +  (uf_1 T2 T3 T1)
  180.12 +  (uf_4 T3 T2 T4)
  180.13 +  (uf_8 T2)
  180.14 +  (uf_9 T3)
  180.15 +  (uf_7 T1)
  180.16 +  (uf_10 T4)
  180.17 + )
  180.18 +:assumption (forall (?x1 T1) (= (uf_1 (uf_2 ?x1) (uf_3 ?x1)) ?x1))
  180.19 +:assumption (forall (?x2 T4) (= (uf_4 (uf_5 ?x2) (uf_6 ?x2)) ?x2))
  180.20 +:assumption (forall (?x3 T2) (?x4 T3) (= (uf_3 (uf_1 ?x3 ?x4)) ?x4))
  180.21 +:assumption (forall (?x5 T3) (?x6 T2) (= (uf_6 (uf_4 ?x5 ?x6)) ?x6))
  180.22 +:assumption (forall (?x7 T2) (?x8 T3) (= (uf_2 (uf_1 ?x7 ?x8)) ?x7))
  180.23 +:assumption (forall (?x9 T3) (?x10 T2) (= (uf_5 (uf_4 ?x9 ?x10)) ?x9))
  180.24 +:assumption (and (= uf_7 (uf_1 uf_8 uf_9)) (= uf_10 (uf_4 uf_9 uf_8)))
  180.25 +:assumption (not (= (uf_2 uf_7) (uf_6 uf_10)))
  180.26 +:formula true
  180.27 +)
   181.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   181.2 +++ b/src/HOL/SMT/Examples/cert/z3_pair_02.proof	Tue Oct 20 10:11:30 2009 +0200
   181.3 @@ -0,0 +1,105 @@
   181.4 +#2 := false
   181.5 +decl uf_6 :: (-> T4 T2)
   181.6 +decl uf_10 :: T4
   181.7 +#39 := uf_10
   181.8 +#44 := (uf_6 uf_10)
   181.9 +decl uf_2 :: (-> T1 T2)
  181.10 +decl uf_7 :: T1
  181.11 +#34 := uf_7
  181.12 +#43 := (uf_2 uf_7)
  181.13 +#45 := (= #43 #44)
  181.14 +decl uf_4 :: (-> T3 T2 T4)
  181.15 +decl uf_8 :: T2
  181.16 +#35 := uf_8
  181.17 +decl uf_9 :: T3
  181.18 +#36 := uf_9
  181.19 +#40 := (uf_4 uf_9 uf_8)
  181.20 +#204 := (uf_6 #40)
  181.21 +#598 := (= #204 #44)
  181.22 +#595 := (= #44 #204)
  181.23 +#41 := (= uf_10 #40)
  181.24 +decl uf_1 :: (-> T2 T3 T1)
  181.25 +#37 := (uf_1 uf_8 uf_9)
  181.26 +#38 := (= uf_7 #37)
  181.27 +#42 := (and #38 #41)
  181.28 +#109 := [asserted]: #42
  181.29 +#114 := [and-elim #109]: #41
  181.30 +#256 := [monotonicity #114]: #595
  181.31 +#599 := [symm #256]: #598
  181.32 +#596 := (= #43 #204)
  181.33 +#269 := (= uf_8 #204)
  181.34 +#23 := (:var 0 T2)
  181.35 +#22 := (:var 1 T3)
  181.36 +#24 := (uf_4 #22 #23)
  181.37 +#643 := (pattern #24)
  181.38 +#25 := (uf_6 #24)
  181.39 +#86 := (= #23 #25)
  181.40 +#644 := (forall (vars (?x5 T3) (?x6 T2)) (:pat #643) #86)
  181.41 +#90 := (forall (vars (?x5 T3) (?x6 T2)) #86)
  181.42 +#647 := (iff #90 #644)
  181.43 +#645 := (iff #86 #86)
  181.44 +#646 := [refl]: #645
  181.45 +#648 := [quant-intro #646]: #647
  181.46 +#119 := (~ #90 #90)
  181.47 +#144 := (~ #86 #86)
  181.48 +#145 := [refl]: #144
  181.49 +#120 := [nnf-pos #145]: #119
  181.50 +#26 := (= #25 #23)
  181.51 +#27 := (forall (vars (?x5 T3) (?x6 T2)) #26)
  181.52 +#91 := (iff #27 #90)
  181.53 +#88 := (iff #26 #86)
  181.54 +#89 := [rewrite]: #88
  181.55 +#92 := [quant-intro #89]: #91
  181.56 +#85 := [asserted]: #27
  181.57 +#95 := [mp #85 #92]: #90
  181.58 +#146 := [mp~ #95 #120]: #90
  181.59 +#649 := [mp #146 #648]: #644
  181.60 +#613 := (not #644)
  181.61 +#619 := (or #613 #269)
  181.62 +#609 := [quant-inst]: #619
  181.63 +#267 := [unit-resolution #609 #649]: #269
  181.64 +#600 := (= #43 uf_8)
  181.65 +#289 := (uf_2 #37)
  181.66 +#259 := (= #289 uf_8)
  181.67 +#296 := (= uf_8 #289)
  181.68 +#17 := (:var 0 T3)
  181.69 +#16 := (:var 1 T2)
  181.70 +#18 := (uf_1 #16 #17)
  181.71 +#636 := (pattern #18)
  181.72 +#28 := (uf_2 #18)
  181.73 +#94 := (= #16 #28)
  181.74 +#650 := (forall (vars (?x7 T2) (?x8 T3)) (:pat #636) #94)
  181.75 +#98 := (forall (vars (?x7 T2) (?x8 T3)) #94)
  181.76 +#653 := (iff #98 #650)
  181.77 +#651 := (iff #94 #94)
  181.78 +#652 := [refl]: #651
  181.79 +#654 := [quant-intro #652]: #653
  181.80 +#121 := (~ #98 #98)
  181.81 +#147 := (~ #94 #94)
  181.82 +#148 := [refl]: #147
  181.83 +#122 := [nnf-pos #148]: #121
  181.84 +#29 := (= #28 #16)
  181.85 +#30 := (forall (vars (?x7 T2) (?x8 T3)) #29)
  181.86 +#99 := (iff #30 #98)
  181.87 +#96 := (iff #29 #94)
  181.88 +#97 := [rewrite]: #96
  181.89 +#100 := [quant-intro #97]: #99
  181.90 +#93 := [asserted]: #30
  181.91 +#103 := [mp #93 #100]: #98
  181.92 +#149 := [mp~ #103 #122]: #98
  181.93 +#655 := [mp #149 #654]: #650
  181.94 +#615 := (not #650)
  181.95 +#616 := (or #615 #296)
  181.96 +#617 := [quant-inst]: #616
  181.97 +#618 := [unit-resolution #617 #655]: #296
  181.98 +#597 := [symm #618]: #259
  181.99 +#611 := (= #43 #289)
 181.100 +#113 := [and-elim #109]: #38
 181.101 +#252 := [monotonicity #113]: #611
 181.102 +#601 := [trans #252 #597]: #600
 181.103 +#602 := [trans #601 #267]: #596
 181.104 +#238 := [trans #602 #599]: #45
 181.105 +#46 := (not #45)
 181.106 +#110 := [asserted]: #46
 181.107 +[unit-resolution #110 #238]: false
 181.108 +unsat
   182.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   182.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_01	Tue Oct 20 10:11:30 2009 +0200
   182.3 @@ -0,0 +1,4 @@
   182.4 +(benchmark Isabelle
   182.5 +:assumption (not true)
   182.6 +:formula true
   182.7 +)
   183.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   183.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_01.proof	Tue Oct 20 10:11:30 2009 +0200
   183.3 @@ -0,0 +1,8 @@
   183.4 +#2 := false
   183.5 +#1 := true
   183.6 +#4 := (not true)
   183.7 +#21 := (iff #4 false)
   183.8 +#22 := [rewrite]: #21
   183.9 +#20 := [asserted]: #4
  183.10 +[mp #20 #22]: false
  183.11 +unsat
   184.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   184.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_02	Tue Oct 20 10:11:30 2009 +0200
   184.3 @@ -0,0 +1,8 @@
   184.4 +(benchmark Isabelle
   184.5 +:extrasorts ( T1)
   184.6 +:extrapreds (
   184.7 +  (up_1)
   184.8 + )
   184.9 +:assumption (not (or up_1 (not up_1)))
  184.10 +:formula true
  184.11 +)
   185.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   185.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_02.proof	Tue Oct 20 10:11:30 2009 +0200
   185.3 @@ -0,0 +1,19 @@
   185.4 +#2 := false
   185.5 +decl up_1 :: bool
   185.6 +#4 := up_1
   185.7 +#5 := (not up_1)
   185.8 +#6 := (or up_1 #5)
   185.9 +#7 := (not #6)
  185.10 +#31 := (iff #7 false)
  185.11 +#1 := true
  185.12 +#26 := (not true)
  185.13 +#29 := (iff #26 false)
  185.14 +#30 := [rewrite]: #29
  185.15 +#27 := (iff #7 #26)
  185.16 +#24 := (iff #6 true)
  185.17 +#25 := [rewrite]: #24
  185.18 +#28 := [monotonicity #25]: #27
  185.19 +#32 := [trans #28 #30]: #31
  185.20 +#23 := [asserted]: #7
  185.21 +[mp #23 #32]: false
  185.22 +unsat
   186.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   186.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_03	Tue Oct 20 10:11:30 2009 +0200
   186.3 @@ -0,0 +1,8 @@
   186.4 +(benchmark Isabelle
   186.5 +:extrasorts ( T1)
   186.6 +:extrapreds (
   186.7 +  (up_1)
   186.8 + )
   186.9 +:assumption (not (iff (and up_1 true) up_1))
  186.10 +:formula true
  186.11 +)
   187.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   187.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_03.proof	Tue Oct 20 10:11:30 2009 +0200
   187.3 @@ -0,0 +1,25 @@
   187.4 +#2 := false
   187.5 +decl up_1 :: bool
   187.6 +#4 := up_1
   187.7 +#1 := true
   187.8 +#5 := (and up_1 true)
   187.9 +#6 := (iff #5 up_1)
  187.10 +#7 := (not #6)
  187.11 +#37 := (iff #7 false)
  187.12 +#32 := (not true)
  187.13 +#35 := (iff #32 false)
  187.14 +#36 := [rewrite]: #35
  187.15 +#33 := (iff #7 #32)
  187.16 +#30 := (iff #6 true)
  187.17 +#25 := (iff up_1 up_1)
  187.18 +#28 := (iff #25 true)
  187.19 +#29 := [rewrite]: #28
  187.20 +#26 := (iff #6 #25)
  187.21 +#24 := [rewrite]: #6
  187.22 +#27 := [monotonicity #24]: #26
  187.23 +#31 := [trans #27 #29]: #30
  187.24 +#34 := [monotonicity #31]: #33
  187.25 +#38 := [trans #34 #36]: #37
  187.26 +#23 := [asserted]: #7
  187.27 +[mp #23 #38]: false
  187.28 +unsat
   188.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   188.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_04	Tue Oct 20 10:11:30 2009 +0200
   188.3 @@ -0,0 +1,10 @@
   188.4 +(benchmark Isabelle
   188.5 +:extrasorts ( T1)
   188.6 +:extrapreds (
   188.7 +  (up_1)
   188.8 +  (up_2)
   188.9 + )
  188.10 +:assumption (and (or up_1 up_2) (not up_1))
  188.11 +:assumption (not up_2)
  188.12 +:formula true
  188.13 +)
   189.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   189.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_04.proof	Tue Oct 20 10:11:30 2009 +0200
   189.3 @@ -0,0 +1,38 @@
   189.4 +#2 := false
   189.5 +decl up_2 :: bool
   189.6 +#5 := up_2
   189.7 +decl up_1 :: bool
   189.8 +#4 := up_1
   189.9 +#6 := (or up_1 up_2)
  189.10 +#51 := (iff #6 false)
  189.11 +#46 := (or false false)
  189.12 +#49 := (iff #46 false)
  189.13 +#50 := [rewrite]: #49
  189.14 +#47 := (iff #6 #46)
  189.15 +#40 := (iff up_2 false)
  189.16 +#9 := (not up_2)
  189.17 +#43 := (iff #9 #40)
  189.18 +#41 := (iff #40 #9)
  189.19 +#42 := [rewrite]: #41
  189.20 +#44 := [symm #42]: #43
  189.21 +#32 := [asserted]: #9
  189.22 +#45 := [mp #32 #44]: #40
  189.23 +#35 := (iff up_1 false)
  189.24 +#7 := (not up_1)
  189.25 +#37 := (iff #7 #35)
  189.26 +#33 := (iff #35 #7)
  189.27 +#36 := [rewrite]: #33
  189.28 +#38 := [symm #36]: #37
  189.29 +#26 := (and #7 #6)
  189.30 +#8 := (and #6 #7)
  189.31 +#27 := (iff #8 #26)
  189.32 +#28 := [rewrite]: #27
  189.33 +#25 := [asserted]: #8
  189.34 +#31 := [mp #25 #28]: #26
  189.35 +#29 := [and-elim #31]: #7
  189.36 +#39 := [mp #29 #38]: #35
  189.37 +#48 := [monotonicity #39 #45]: #47
  189.38 +#52 := [trans #48 #50]: #51
  189.39 +#30 := [and-elim #31]: #6
  189.40 +[mp #30 #52]: false
  189.41 +unsat
   190.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   190.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_05	Tue Oct 20 10:11:30 2009 +0200
   190.3 @@ -0,0 +1,12 @@
   190.4 +(benchmark Isabelle
   190.5 +:extrasorts ( T1)
   190.6 +:extrapreds (
   190.7 +  (up_1)
   190.8 +  (up_2)
   190.9 +  (up_3)
  190.10 +  (up_4)
  190.11 + )
  190.12 +:assumption (or (and up_1 up_2) (and up_3 up_4))
  190.13 +:assumption (not (or (and up_1 up_2) (and up_3 up_4)))
  190.14 +:formula true
  190.15 +)
   191.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   191.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_05.proof	Tue Oct 20 10:11:30 2009 +0200
   191.3 @@ -0,0 +1,1 @@
   191.4 +unsat
   192.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   192.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_06	Tue Oct 20 10:11:30 2009 +0200
   192.3 @@ -0,0 +1,10 @@
   192.4 +(benchmark Isabelle
   192.5 +:extrasorts ( T1)
   192.6 +:extrapreds (
   192.7 +  (up_1)
   192.8 +  (up_2)
   192.9 +  (up_3)
  192.10 + )
  192.11 +:assumption (not (implies (or (and up_1 up_2) up_3) (or (implies up_1 (or (and up_3 up_2) (and up_1 up_3))) up_1)))
  192.12 +:formula true
  192.13 +)
   193.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   193.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_06.proof	Tue Oct 20 10:11:30 2009 +0200
   193.3 @@ -0,0 +1,71 @@
   193.4 +#2 := false
   193.5 +decl up_1 :: bool
   193.6 +#4 := up_1
   193.7 +decl up_3 :: bool
   193.8 +#7 := up_3
   193.9 +#10 := (and up_1 up_3)
  193.10 +decl up_2 :: bool
  193.11 +#5 := up_2
  193.12 +#9 := (and up_3 up_2)
  193.13 +#11 := (or #9 #10)
  193.14 +#12 := (implies up_1 #11)
  193.15 +#13 := (or #12 up_1)
  193.16 +#6 := (and up_1 up_2)
  193.17 +#8 := (or #6 up_3)
  193.18 +#14 := (implies #8 #13)
  193.19 +#15 := (not #14)
  193.20 +#81 := (iff #15 false)
  193.21 +#32 := (and up_2 up_3)
  193.22 +#38 := (or #10 #32)
  193.23 +#46 := (not up_1)
  193.24 +#47 := (or #46 #38)
  193.25 +#55 := (or up_1 #47)
  193.26 +#63 := (not #8)
  193.27 +#64 := (or #63 #55)
  193.28 +#69 := (not #64)
  193.29 +#79 := (iff #69 false)
  193.30 +#1 := true
  193.31 +#74 := (not true)
  193.32 +#77 := (iff #74 false)
  193.33 +#78 := [rewrite]: #77
  193.34 +#75 := (iff #69 #74)
  193.35 +#72 := (iff #64 true)
  193.36 +#73 := [rewrite]: #72
  193.37 +#76 := [monotonicity #73]: #75
  193.38 +#80 := [trans #76 #78]: #79
  193.39 +#70 := (iff #15 #69)
  193.40 +#67 := (iff #14 #64)
  193.41 +#60 := (implies #8 #55)
  193.42 +#65 := (iff #60 #64)
  193.43 +#66 := [rewrite]: #65
  193.44 +#61 := (iff #14 #60)
  193.45 +#58 := (iff #13 #55)
  193.46 +#52 := (or #47 up_1)
  193.47 +#56 := (iff #52 #55)
  193.48 +#57 := [rewrite]: #56
  193.49 +#53 := (iff #13 #52)
  193.50 +#50 := (iff #12 #47)
  193.51 +#43 := (implies up_1 #38)
  193.52 +#48 := (iff #43 #47)
  193.53 +#49 := [rewrite]: #48
  193.54 +#44 := (iff #12 #43)
  193.55 +#41 := (iff #11 #38)
  193.56 +#35 := (or #32 #10)
  193.57 +#39 := (iff #35 #38)
  193.58 +#40 := [rewrite]: #39
  193.59 +#36 := (iff #11 #35)
  193.60 +#33 := (iff #9 #32)
  193.61 +#34 := [rewrite]: #33
  193.62 +#37 := [monotonicity #34]: #36
  193.63 +#42 := [trans #37 #40]: #41
  193.64 +#45 := [monotonicity #42]: #44
  193.65 +#51 := [trans #45 #49]: #50
  193.66 +#54 := [monotonicity #51]: #53
  193.67 +#59 := [trans #54 #57]: #58
  193.68 +#62 := [monotonicity #59]: #61
  193.69 +#68 := [trans #62 #66]: #67
  193.70 +#71 := [monotonicity #68]: #70
  193.71 +#82 := [trans #71 #80]: #81
  193.72 +#31 := [asserted]: #15
  193.73 +[mp #31 #82]: false
  193.74 +unsat
   194.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   194.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_07	Tue Oct 20 10:11:30 2009 +0200
   194.3 @@ -0,0 +1,8 @@
   194.4 +(benchmark Isabelle
   194.5 +:extrasorts ( T1)
   194.6 +:extrapreds (
   194.7 +  (up_1)
   194.8 + )
   194.9 +:assumption (not (iff (iff (iff (iff (iff (iff (iff (iff (iff up_1 up_1) up_1) up_1) up_1) up_1) up_1) up_1) up_1) up_1))
  194.10 +:formula true
  194.11 +)
   195.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   195.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_07.proof	Tue Oct 20 10:11:30 2009 +0200
   195.3 @@ -0,0 +1,57 @@
   195.4 +#2 := false
   195.5 +decl up_1 :: bool
   195.6 +#4 := up_1
   195.7 +#5 := (iff up_1 up_1)
   195.8 +#6 := (iff #5 up_1)
   195.9 +#7 := (iff #6 up_1)
  195.10 +#8 := (iff #7 up_1)
  195.11 +#9 := (iff #8 up_1)
  195.12 +#10 := (iff #9 up_1)
  195.13 +#11 := (iff #10 up_1)
  195.14 +#12 := (iff #11 up_1)
  195.15 +#13 := (iff #12 up_1)
  195.16 +#14 := (not #13)
  195.17 +#69 := (iff #14 false)
  195.18 +#1 := true
  195.19 +#64 := (not true)
  195.20 +#67 := (iff #64 false)
  195.21 +#68 := [rewrite]: #67
  195.22 +#65 := (iff #14 #64)
  195.23 +#62 := (iff #13 true)
  195.24 +#31 := (iff #5 true)
  195.25 +#32 := [rewrite]: #31
  195.26 +#60 := (iff #13 #5)
  195.27 +#33 := (iff true up_1)
  195.28 +#36 := (iff #33 up_1)
  195.29 +#37 := [rewrite]: #36
  195.30 +#57 := (iff #12 #33)
  195.31 +#55 := (iff #11 true)
  195.32 +#53 := (iff #11 #5)
  195.33 +#50 := (iff #10 #33)
  195.34 +#48 := (iff #9 true)
  195.35 +#46 := (iff #9 #5)
  195.36 +#43 := (iff #8 #33)
  195.37 +#41 := (iff #7 true)
  195.38 +#39 := (iff #7 #5)
  195.39 +#34 := (iff #6 #33)
  195.40 +#35 := [monotonicity #32]: #34
  195.41 +#38 := [trans #35 #37]: #7
  195.42 +#40 := [monotonicity #38]: #39
  195.43 +#42 := [trans #40 #32]: #41
  195.44 +#44 := [monotonicity #42]: #43
  195.45 +#45 := [trans #44 #37]: #9
  195.46 +#47 := [monotonicity #45]: #46
  195.47 +#49 := [trans #47 #32]: #48
  195.48 +#51 := [monotonicity #49]: #50
  195.49 +#52 := [trans #51 #37]: #11
  195.50 +#54 := [monotonicity #52]: #53
  195.51 +#56 := [trans #54 #32]: #55
  195.52 +#58 := [monotonicity #56]: #57
  195.53 +#59 := [trans #58 #37]: #13
  195.54 +#61 := [monotonicity #59]: #60
  195.55 +#63 := [trans #61 #32]: #62
  195.56 +#66 := [monotonicity #63]: #65
  195.57 +#70 := [trans #66 #68]: #69
  195.58 +#30 := [asserted]: #14
  195.59 +[mp #30 #70]: false
  195.60 +unsat
   196.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   196.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_08	Tue Oct 20 10:11:30 2009 +0200
   196.3 @@ -0,0 +1,22 @@
   196.4 +(benchmark Isabelle
   196.5 +:extrasorts ( T1)
   196.6 +:extrapreds (
   196.7 +  (up_1)
   196.8 +  (up_2)
   196.9 +  (up_3)
  196.10 +  (up_4)
  196.11 +  (up_5)
  196.12 +  (up_6)
  196.13 +  (up_8)
  196.14 +  (up_9)
  196.15 +  (up_7)
  196.16 + )
  196.17 +:assumption (or up_1 (or up_2 (or up_3 up_4)))
  196.18 +:assumption (or up_5 (or up_6 (and up_1 up_4)))
  196.19 +:assumption (or (not (or up_1 (and up_3 (not up_3)))) up_2)
  196.20 +:assumption (or (not (and up_2 (or up_7 (not up_7)))) up_3)
  196.21 +:assumption (or (not (or up_4 false)) up_3)
  196.22 +:assumption (not (or up_3 (and (not up_8) (or up_8 (and up_9 (not up_9))))))
  196.23 +:assumption (not false)
  196.24 +:formula true
  196.25 +)
   197.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   197.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_08.proof	Tue Oct 20 10:11:30 2009 +0200
   197.3 @@ -0,0 +1,194 @@
   197.4 +#2 := false
   197.5 +decl up_1 :: bool
   197.6 +#4 := up_1
   197.7 +#75 := (not up_1)
   197.8 +#246 := (iff #75 false)
   197.9 +#1 := true
  197.10 +#214 := (not true)
  197.11 +#217 := (iff #214 false)
  197.12 +#218 := [rewrite]: #217
  197.13 +#244 := (iff #75 #214)
  197.14 +#238 := (iff up_1 true)
  197.15 +#241 := (iff up_1 #238)
  197.16 +#239 := (iff #238 up_1)
  197.17 +#240 := [rewrite]: #239
  197.18 +#242 := [symm #240]: #241
  197.19 +decl up_4 :: bool
  197.20 +#7 := up_4
  197.21 +decl up_2 :: bool
  197.22 +#5 := up_2
  197.23 +#161 := (or up_1 up_2 up_4)
  197.24 +#200 := (iff #161 up_1)
  197.25 +#195 := (or up_1 false false)
  197.26 +#198 := (iff #195 up_1)
  197.27 +#199 := [rewrite]: #198
  197.28 +#196 := (iff #161 #195)
  197.29 +#189 := (iff up_4 false)
  197.30 +#102 := (not up_4)
  197.31 +#192 := (iff #102 #189)
  197.32 +#190 := (iff #189 #102)
  197.33 +#191 := [rewrite]: #190
  197.34 +#193 := [symm #191]: #192
  197.35 +decl up_3 :: bool
  197.36 +#6 := up_3
  197.37 +#108 := (or up_3 #102)
  197.38 +#180 := (iff #108 #102)
  197.39 +#175 := (or false #102)
  197.40 +#178 := (iff #175 #102)
  197.41 +#179 := [rewrite]: #178
  197.42 +#176 := (iff #108 #175)
  197.43 +#152 := (iff up_3 false)
  197.44 +#16 := (not up_3)
  197.45 +#155 := (iff #16 #152)
  197.46 +#153 := (iff #152 #16)
  197.47 +#154 := [rewrite]: #153
  197.48 +#156 := [symm #154]: #155
  197.49 +decl up_9 :: bool
  197.50 +#32 := up_9
  197.51 +#33 := (not up_9)
  197.52 +#34 := (and up_9 #33)
  197.53 +decl up_8 :: bool
  197.54 +#30 := up_8
  197.55 +#35 := (or up_8 #34)
  197.56 +#31 := (not up_8)
  197.57 +#36 := (and #31 #35)
  197.58 +#37 := (or up_3 #36)
  197.59 +#38 := (not #37)
  197.60 +#138 := (iff #38 #16)
  197.61 +#136 := (iff #37 up_3)
  197.62 +#131 := (or up_3 false)
  197.63 +#134 := (iff #131 up_3)
  197.64 +#135 := [rewrite]: #134
  197.65 +#132 := (iff #37 #131)
  197.66 +#129 := (iff #36 false)
  197.67 +#124 := (and #31 up_8)
  197.68 +#127 := (iff #124 false)
  197.69 +#128 := [rewrite]: #127
  197.70 +#125 := (iff #36 #124)
  197.71 +#122 := (iff #35 up_8)
  197.72 +#117 := (or up_8 false)
  197.73 +#120 := (iff #117 up_8)
  197.74 +#121 := [rewrite]: #120
  197.75 +#118 := (iff #35 #117)
  197.76 +#114 := (iff #34 false)
  197.77 +#116 := [rewrite]: #114
  197.78 +#119 := [monotonicity #116]: #118
  197.79 +#123 := [trans #119 #121]: #122
  197.80 +#126 := [monotonicity #123]: #125
  197.81 +#130 := [trans #126 #128]: #129
  197.82 +#133 := [monotonicity #130]: #132
  197.83 +#137 := [trans #133 #135]: #136
  197.84 +#139 := [monotonicity #137]: #138
  197.85 +#113 := [asserted]: #38
  197.86 +#142 := [mp #113 #139]: #16
  197.87 +#157 := [mp #142 #156]: #152
  197.88 +#177 := [monotonicity #157]: #176
  197.89 +#181 := [trans #177 #179]: #180
  197.90 +#27 := (or up_4 false)
  197.91 +#28 := (not #27)
  197.92 +#29 := (or #28 up_3)
  197.93 +#111 := (iff #29 #108)
  197.94 +#105 := (or #102 up_3)
  197.95 +#109 := (iff #105 #108)
  197.96 +#110 := [rewrite]: #109
  197.97 +#106 := (iff #29 #105)
  197.98 +#103 := (iff #28 #102)
  197.99 +#99 := (iff #27 up_4)
 197.100 +#101 := [rewrite]: #99
 197.101 +#104 := [monotonicity #101]: #103
 197.102 +#107 := [monotonicity #104]: #106
 197.103 +#112 := [trans #107 #110]: #111
 197.104 +#98 := [asserted]: #29
 197.105 +#115 := [mp #98 #112]: #108
 197.106 +#182 := [mp #115 #181]: #102
 197.107 +#194 := [mp #182 #193]: #189
 197.108 +#183 := (iff up_2 false)
 197.109 +#92 := (not up_2)
 197.110 +#186 := (iff #92 #183)
 197.111 +#184 := (iff #183 #92)
 197.112 +#185 := [rewrite]: #184
 197.113 +#187 := [symm #185]: #186
 197.114 +#95 := (or #92 up_3)
 197.115 +#172 := (iff #95 #92)
 197.116 +#167 := (or #92 false)
 197.117 +#170 := (iff #167 #92)
 197.118 +#171 := [rewrite]: #170
 197.119 +#168 := (iff #95 #167)
 197.120 +#169 := [monotonicity #157]: #168
 197.121 +#173 := [trans #169 #171]: #172
 197.122 +decl up_7 :: bool
 197.123 +#21 := up_7
 197.124 +#22 := (not up_7)
 197.125 +#23 := (or up_7 #22)
 197.126 +#24 := (and up_2 #23)
 197.127 +#25 := (not #24)
 197.128 +#26 := (or #25 up_3)
 197.129 +#96 := (iff #26 #95)
 197.130 +#93 := (iff #25 #92)
 197.131 +#90 := (iff #24 up_2)
 197.132 +#85 := (and up_2 true)
 197.133 +#88 := (iff #85 up_2)
 197.134 +#89 := [rewrite]: #88
 197.135 +#86 := (iff #24 #85)
 197.136 +#82 := (iff #23 true)
 197.137 +#84 := [rewrite]: #82
 197.138 +#87 := [monotonicity #84]: #86
 197.139 +#91 := [trans #87 #89]: #90
 197.140 +#94 := [monotonicity #91]: #93
 197.141 +#97 := [monotonicity #94]: #96
 197.142 +#81 := [asserted]: #26
 197.143 +#100 := [mp #81 #97]: #95
 197.144 +#174 := [mp #100 #173]: #92
 197.145 +#188 := [mp #174 #187]: #183
 197.146 +#197 := [monotonicity #188 #194]: #196
 197.147 +#201 := [trans #197 #199]: #200
 197.148 +#58 := (or up_1 up_2 up_3 up_4)
 197.149 +#164 := (iff #58 #161)
 197.150 +#158 := (or up_1 up_2 false up_4)
 197.151 +#162 := (iff #158 #161)
 197.152 +#163 := [rewrite]: #162
 197.153 +#159 := (iff #58 #158)
 197.154 +#160 := [monotonicity #157]: #159
 197.155 +#165 := [trans #160 #163]: #164
 197.156 +#8 := (or up_3 up_4)
 197.157 +#9 := (or up_2 #8)
 197.158 +#10 := (or up_1 #9)
 197.159 +#59 := (iff #10 #58)
 197.160 +#60 := [rewrite]: #59
 197.161 +#55 := [asserted]: #10
 197.162 +#61 := [mp #55 #60]: #58
 197.163 +#166 := [mp #61 #165]: #161
 197.164 +#202 := [mp #166 #201]: up_1
 197.165 +#243 := [mp #202 #242]: #238
 197.166 +#245 := [monotonicity #243]: #244
 197.167 +#247 := [trans #245 #218]: #246
 197.168 +#78 := (or #75 up_2)
 197.169 +#235 := (iff #78 #75)
 197.170 +#230 := (or #75 false)
 197.171 +#233 := (iff #230 #75)
 197.172 +#234 := [rewrite]: #233
 197.173 +#231 := (iff #78 #230)
 197.174 +#232 := [monotonicity #188]: #231
 197.175 +#236 := [trans #232 #234]: #235
 197.176 +#17 := (and up_3 #16)
 197.177 +#18 := (or up_1 #17)
 197.178 +#19 := (not #18)
 197.179 +#20 := (or #19 up_2)
 197.180 +#79 := (iff #20 #78)
 197.181 +#76 := (iff #19 #75)
 197.182 +#73 := (iff #18 up_1)
 197.183 +#68 := (or up_1 false)
 197.184 +#71 := (iff #68 up_1)
 197.185 +#72 := [rewrite]: #71
 197.186 +#69 := (iff #18 #68)
 197.187 +#62 := (iff #17 false)
 197.188 +#67 := [rewrite]: #62
 197.189 +#70 := [monotonicity #67]: #69
 197.190 +#74 := [trans #70 #72]: #73
 197.191 +#77 := [monotonicity #74]: #76
 197.192 +#80 := [monotonicity #77]: #79
 197.193 +#57 := [asserted]: #20
 197.194 +#83 := [mp #57 #80]: #78
 197.195 +#237 := [mp #83 #236]: #75
 197.196 +[mp #237 #247]: false
 197.197 +unsat
   198.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   198.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_09	Tue Oct 20 10:11:30 2009 +0200
   198.3 @@ -0,0 +1,11 @@
   198.4 +(benchmark Isabelle
   198.5 +:extrasorts ( T1)
   198.6 +:extrafuns (
   198.7 +  (uf_1 T1 T1 T1)
   198.8 +  (uf_2 T1)
   198.9 +  (uf_3 T1)
  198.10 + )
  198.11 +:assumption (forall (?x1 T1) (?x2 T1) (= (uf_1 ?x1 ?x2) (uf_1 ?x2 ?x1)))
  198.12 +:assumption (not (and (= uf_2 uf_2) (= (uf_1 uf_2 uf_3) (uf_1 uf_3 uf_2))))
  198.13 +:formula true
  198.14 +)
   199.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   199.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_09.proof	Tue Oct 20 10:11:30 2009 +0200
   199.3 @@ -0,0 +1,52 @@
   199.4 +#2 := false
   199.5 +decl uf_1 :: (-> T1 T1 T1)
   199.6 +decl uf_2 :: T1
   199.7 +#10 := uf_2
   199.8 +decl uf_3 :: T1
   199.9 +#12 := uf_3
  199.10 +#14 := (uf_1 uf_3 uf_2)
  199.11 +#13 := (uf_1 uf_2 uf_3)
  199.12 +#15 := (= #13 #14)
  199.13 +#44 := (not #15)
  199.14 +#11 := (= uf_2 uf_2)
  199.15 +#16 := (and #11 #15)
  199.16 +#17 := (not #16)
  199.17 +#45 := (iff #17 #44)
  199.18 +#42 := (iff #16 #15)
  199.19 +#1 := true
  199.20 +#37 := (and true #15)
  199.21 +#40 := (iff #37 #15)
  199.22 +#41 := [rewrite]: #40
  199.23 +#38 := (iff #16 #37)
  199.24 +#35 := (iff #11 true)
  199.25 +#36 := [rewrite]: #35
  199.26 +#39 := [monotonicity #36]: #38
  199.27 +#43 := [trans #39 #41]: #42
  199.28 +#46 := [monotonicity #43]: #45
  199.29 +#34 := [asserted]: #17
  199.30 +#49 := [mp #34 #46]: #44
  199.31 +#4 := (:var 1 T1)
  199.32 +#5 := (:var 0 T1)
  199.33 +#7 := (uf_1 #5 #4)
  199.34 +#530 := (pattern #7)
  199.35 +#6 := (uf_1 #4 #5)
  199.36 +#529 := (pattern #6)
  199.37 +#8 := (= #6 #7)
  199.38 +#531 := (forall (vars (?x1 T1) (?x2 T1)) (:pat #529 #530) #8)
  199.39 +#9 := (forall (vars (?x1 T1) (?x2 T1)) #8)
  199.40 +#534 := (iff #9 #531)
  199.41 +#532 := (iff #8 #8)
  199.42 +#533 := [refl]: #532
  199.43 +#535 := [quant-intro #533]: #534
  199.44 +#55 := (~ #9 #9)
  199.45 +#53 := (~ #8 #8)
  199.46 +#54 := [refl]: #53
  199.47 +#56 := [nnf-pos #54]: #55
  199.48 +#33 := [asserted]: #9
  199.49 +#57 := [mp~ #33 #56]: #9
  199.50 +#536 := [mp #57 #535]: #531
  199.51 +#112 := (not #531)
  199.52 +#199 := (or #112 #15)
  199.53 +#113 := [quant-inst]: #199
  199.54 +[unit-resolution #113 #536 #49]: false
  199.55 +unsat
   200.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   200.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_10	Tue Oct 20 10:11:30 2009 +0200
   200.3 @@ -0,0 +1,251 @@
   200.4 +(benchmark Isabelle
   200.5 +:extrasorts ( T1)
   200.6 +:extrapreds (
   200.7 +  (up_1)
   200.8 +  (up_5)
   200.9 +  (up_7)
  200.10 +  (up_9)
  200.11 +  (up_11)
  200.12 +  (up_14)
  200.13 +  (up_16)
  200.14 +  (up_18)
  200.15 +  (up_20)
  200.16 +  (up_22)
  200.17 +  (up_25)
  200.18 +  (up_27)
  200.19 +  (up_29)
  200.20 +  (up_31)
  200.21 +  (up_33)
  200.22 +  (up_36)
  200.23 +  (up_38)
  200.24 +  (up_40)
  200.25 +  (up_42)
  200.26 +  (up_44)
  200.27 +  (up_47)
  200.28 +  (up_49)
  200.29 +  (up_51)
  200.30 +  (up_53)
  200.31 +  (up_55)
  200.32 +  (up_57)
  200.33 +  (up_58)
  200.34 +  (up_59)
  200.35 +  (up_60)
  200.36 +  (up_3)
  200.37 +  (up_2)
  200.38 +  (up_6)
  200.39 +  (up_8)
  200.40 +  (up_10)
  200.41 +  (up_12)
  200.42 +  (up_13)
  200.43 +  (up_15)
  200.44 +  (up_17)
  200.45 +  (up_19)
  200.46 +  (up_21)
  200.47 +  (up_23)
  200.48 +  (up_24)
  200.49 +  (up_26)
  200.50 +  (up_28)
  200.51 +  (up_30)
  200.52 +  (up_32)
  200.53 +  (up_34)
  200.54 +  (up_35)
  200.55 +  (up_37)
  200.56 +  (up_39)
  200.57 +  (up_41)
  200.58 +  (up_43)
  200.59 +  (up_45)
  200.60 +  (up_46)
  200.61 +  (up_48)
  200.62 +  (up_50)
  200.63 +  (up_52)
  200.64 +  (up_54)
  200.65 +  (up_56)
  200.66 +  (up_4)
  200.67 + )
  200.68 +:assumption (not up_1)
  200.69 +:assumption (not up_2)
  200.70 +:assumption (not up_3)
  200.71 +:assumption (not up_4)
  200.72 +:assumption (or up_5 (or up_6 up_1))
  200.73 +:assumption (or up_7 (or up_8 up_5))
  200.74 +:assumption (or up_9 (or up_10 up_7))
  200.75 +:assumption (or up_11 (or up_12 up_9))
  200.76 +:assumption (or up_13 up_11)
  200.77 +:assumption (or up_14 (or up_15 up_2))
  200.78 +:assumption (or up_16 (or up_17 (or up_14 up_6)))
  200.79 +:assumption (or up_18 (or up_19 (or up_16 up_8)))
  200.80 +:assumption (or up_20 (or up_21 (or up_18 up_10)))
  200.81 +:assumption (or up_22 (or up_23 (or up_20 up_12)))
  200.82 +:assumption (or up_24 (or up_22 up_13))
  200.83 +:assumption (or up_25 (or up_26 up_15))
  200.84 +:assumption (or up_27 (or up_28 (or up_25 up_17)))
  200.85 +:assumption (or up_29 (or up_30 (or up_27 up_19)))
  200.86 +:assumption (or up_31 (or up_32 (or up_29 up_21)))
  200.87 +:assumption (or up_33 (or up_34 (or up_31 up_23)))
  200.88 +:assumption (or up_35 (or up_33 up_24))
  200.89 +:assumption (or up_36 (or up_37 up_26))
  200.90 +:assumption (or up_38 (or up_39 (or up_36 up_28)))
  200.91 +:assumption (or up_40 (or up_41 (or up_38 up_30)))
  200.92 +:assumption (or up_42 (or up_43 (or up_40 up_32)))
  200.93 +:assumption (or up_44 (or up_45 (or up_42 up_34)))
  200.94 +:assumption (or up_46 (or up_44 up_35))
  200.95 +:assumption (or up_47 (or up_48 up_37))
  200.96 +:assumption (or up_49 (or up_50 (or up_47 up_39)))
  200.97 +:assumption (or up_51 (or up_52 (or up_49 up_41)))
  200.98 +:assumption (or up_53 (or up_54 (or up_51 up_43)))
  200.99 +:assumption (or up_55 (or up_56 (or up_53 up_45)))
 200.100 +:assumption (or up_4 (or up_55 up_46))
 200.101 +:assumption (or up_57 up_48)
 200.102 +:assumption (or up_58 (or up_57 up_50))
 200.103 +:assumption (or up_59 (or up_58 up_52))
 200.104 +:assumption (or up_60 (or up_59 up_54))
 200.105 +:assumption (or up_3 (or up_60 up_56))
 200.106 +:assumption (or (not up_5) (not up_6))
 200.107 +:assumption (or (not up_5) (not up_1))
 200.108 +:assumption (or (not up_6) (not up_1))
 200.109 +:assumption (or (not up_7) (not up_8))
 200.110 +:assumption (or (not up_7) (not up_5))
 200.111 +:assumption (or (not up_8) (not up_5))
 200.112 +:assumption (or (not up_9) (not up_10))
 200.113 +:assumption (or (not up_9) (not up_7))
 200.114 +:assumption (or (not up_10) (not up_7))
 200.115 +:assumption (or (not up_11) (not up_12))
 200.116 +:assumption (or (not up_11) (not up_9))
 200.117 +:assumption (or (not up_12) (not up_9))
 200.118 +:assumption (or (not up_13) (not up_11))
 200.119 +:assumption (or (not up_14) (not up_15))
 200.120 +:assumption (or (not up_14) (not up_2))
 200.121 +:assumption (or (not up_15) (not up_2))
 200.122 +:assumption (or (not up_16) (not up_17))
 200.123 +:assumption (or (not up_16) (not up_14))
 200.124 +:assumption (or (not up_16) (not up_6))
 200.125 +:assumption (or (not up_17) (not up_14))
 200.126 +:assumption (or (not up_17) (not up_6))
 200.127 +:assumption (or (not up_14) (not up_6))
 200.128 +:assumption (or (not up_18) (not up_19))
 200.129 +:assumption (or (not up_18) (not up_16))
 200.130 +:assumption (or (not up_18) (not up_8))
 200.131 +:assumption (or (not up_19) (not up_16))
 200.132 +:assumption (or (not up_19) (not up_8))
 200.133 +:assumption (or (not up_16) (not up_8))
 200.134 +:assumption (or (not up_20) (not up_21))
 200.135 +:assumption (or (not up_20) (not up_18))
 200.136 +:assumption (or (not up_20) (not up_10))
 200.137 +:assumption (or (not up_21) (not up_18))
 200.138 +:assumption (or (not up_21) (not up_10))
 200.139 +:assumption (or (not up_18) (not up_10))
 200.140 +:assumption (or (not up_22) (not up_23))
 200.141 +:assumption (or (not up_22) (not up_20))
 200.142 +:assumption (or (not up_22) (not up_12))
 200.143 +:assumption (or (not up_23) (not up_20))
 200.144 +:assumption (or (not up_23) (not up_12))
 200.145 +:assumption (or (not up_20) (not up_12))
 200.146 +:assumption (or (not up_24) (not up_22))
 200.147 +:assumption (or (not up_24) (not up_13))
 200.148 +:assumption (or (not up_22) (not up_13))
 200.149 +:assumption (or (not up_25) (not up_26))
 200.150 +:assumption (or (not up_25) (not up_15))
 200.151 +:assumption (or (not up_26) (not up_15))
 200.152 +:assumption (or (not up_27) (not up_28))
 200.153 +:assumption (or (not up_27) (not up_25))
 200.154 +:assumption (or (not up_27) (not up_17))
 200.155 +:assumption (or (not up_28) (not up_25))
 200.156 +:assumption (or (not up_28) (not up_17))
 200.157 +:assumption (or (not up_25) (not up_17))
 200.158 +:assumption (or (not up_29) (not up_30))
 200.159 +:assumption (or (not up_29) (not up_27))
 200.160 +:assumption (or (not up_29) (not up_19))
 200.161 +:assumption (or (not up_30) (not up_27))
 200.162 +:assumption (or (not up_30) (not up_19))
 200.163 +:assumption (or (not up_27) (not up_19))
 200.164 +:assumption (or (not up_31) (not up_32))
 200.165 +:assumption (or (not up_31) (not up_29))
 200.166 +:assumption (or (not up_31) (not up_21))
 200.167 +:assumption (or (not up_32) (not up_29))
 200.168 +:assumption (or (not up_32) (not up_21))
 200.169 +:assumption (or (not up_29) (not up_21))
 200.170 +:assumption (or (not up_33) (not up_34))
 200.171 +:assumption (or (not up_33) (not up_31))
 200.172 +:assumption (or (not up_33) (not up_23))
 200.173 +:assumption (or (not up_34) (not up_31))
 200.174 +:assumption (or (not up_34) (not up_23))
 200.175 +:assumption (or (not up_31) (not up_23))
 200.176 +:assumption (or (not up_35) (not up_33))
 200.177 +:assumption (or (not up_35) (not up_24))
 200.178 +:assumption (or (not up_33) (not up_24))
 200.179 +:assumption (or (not up_36) (not up_37))
 200.180 +:assumption (or (not up_36) (not up_26))
 200.181 +:assumption (or (not up_37) (not up_26))
 200.182 +:assumption (or (not up_38) (not up_39))
 200.183 +:assumption (or (not up_38) (not up_36))
 200.184 +:assumption (or (not up_38) (not up_28))
 200.185 +:assumption (or (not up_39) (not up_36))
 200.186 +:assumption (or (not up_39) (not up_28))
 200.187 +:assumption (or (not up_36) (not up_28))
 200.188 +:assumption (or (not up_40) (not up_41))
 200.189 +:assumption (or (not up_40) (not up_38))
 200.190 +:assumption (or (not up_40) (not up_30))
 200.191 +:assumption (or (not up_41) (not up_38))
 200.192 +:assumption (or (not up_41) (not up_30))
 200.193 +:assumption (or (not up_38) (not up_30))
 200.194 +:assumption (or (not up_42) (not up_43))
 200.195 +:assumption (or (not up_42) (not up_40))
 200.196 +:assumption (or (not up_42) (not up_32))
 200.197 +:assumption (or (not up_43) (not up_40))
 200.198 +:assumption (or (not up_43) (not up_32))
 200.199 +:assumption (or (not up_40) (not up_32))
 200.200 +:assumption (or (not up_44) (not up_45))
 200.201 +:assumption (or (not up_44) (not up_42))
 200.202 +:assumption (or (not up_44) (not up_34))
 200.203 +:assumption (or (not up_45) (not up_42))
 200.204 +:assumption (or (not up_45) (not up_34))
 200.205 +:assumption (or (not up_42) (not up_34))
 200.206 +:assumption (or (not up_46) (not up_44))
 200.207 +:assumption (or (not up_46) (not up_35))
 200.208 +:assumption (or (not up_44) (not up_35))
 200.209 +:assumption (or (not up_47) (not up_48))
 200.210 +:assumption (or (not up_47) (not up_37))
 200.211 +:assumption (or (not up_48) (not up_37))
 200.212 +:assumption (or (not up_49) (not up_50))
 200.213 +:assumption (or (not up_49) (not up_47))
 200.214 +:assumption (or (not up_49) (not up_39))
 200.215 +:assumption (or (not up_50) (not up_47))
 200.216 +:assumption (or (not up_50) (not up_39))
 200.217 +:assumption (or (not up_47) (not up_39))
 200.218 +:assumption (or (not up_51) (not up_52))
 200.219 +:assumption (or (not up_51) (not up_49))
 200.220 +:assumption (or (not up_51) (not up_41))
 200.221 +:assumption (or (not up_52) (not up_49))
 200.222 +:assumption (or (not up_52) (not up_41))
 200.223 +:assumption (or (not up_49) (not up_41))
 200.224 +:assumption (or (not up_53) (not up_54))
 200.225 +:assumption (or (not up_53) (not up_51))
 200.226 +:assumption (or (not up_53) (not up_43))
 200.227 +:assumption (or (not up_54) (not up_51))
 200.228 +:assumption (or (not up_54) (not up_43))
 200.229 +:assumption (or (not up_51) (not up_43))
 200.230 +:assumption (or (not up_55) (not up_56))
 200.231 +:assumption (or (not up_55) (not up_53))
 200.232 +:assumption (or (not up_55) (not up_45))
 200.233 +:assumption (or (not up_56) (not up_53))
 200.234 +:assumption (or (not up_56) (not up_45))
 200.235 +:assumption (or (not up_53) (not up_45))
 200.236 +:assumption (or (not up_4) (not up_55))
 200.237 +:assumption (or (not up_4) (not up_46))
 200.238 +:assumption (or (not up_55) (not up_46))
 200.239 +:assumption (or (not up_57) (not up_48))
 200.240 +:assumption (or (not up_58) (not up_57))
 200.241 +:assumption (or (not up_58) (not up_50))
 200.242 +:assumption (or (not up_57) (not up_50))
 200.243 +:assumption (or (not up_59) (not up_58))
 200.244 +:assumption (or (not up_59) (not up_52))
 200.245 +:assumption (or (not up_58) (not up_52))
 200.246 +:assumption (or (not up_60) (not up_59))
 200.247 +:assumption (or (not up_60) (not up_54))
 200.248 +:assumption (or (not up_59) (not up_54))
 200.249 +:assumption (or (not up_3) (not up_60))
 200.250 +:assumption (or (not up_3) (not up_56))
 200.251 +:assumption (or (not up_60) (not up_56))
 200.252 +:assumption (not false)
 200.253 +:formula true
 200.254 +)
   201.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   201.2 +++ b/src/HOL/SMT/Examples/cert/z3_prop_10.proof	Tue Oct 20 10:11:30 2009 +0200
   201.3 @@ -0,0 +1,1667 @@
   201.4 +#2 := false
   201.5 +decl up_54 :: bool
   201.6 +#126 := up_54
   201.7 +#317 := (not up_54)
   201.8 +decl up_60 :: bool
   201.9 +#145 := up_60
  201.10 +decl up_56 :: bool
  201.11 +#131 := up_56
  201.12 +#325 := (not up_56)
  201.13 +decl up_55 :: bool
  201.14 +#130 := up_55
  201.15 +decl up_46 :: bool
  201.16 +#108 := up_46
  201.17 +#291 := (not up_46)
  201.18 +decl up_35 :: bool
  201.19 +#81 := up_35
  201.20 +decl up_29 :: bool
  201.21 +#66 := up_29
  201.22 +decl up_32 :: bool
  201.23 +#72 := up_32
  201.24 +#235 := (not up_32)
  201.25 +decl up_34 :: bool
  201.26 +#77 := up_34
  201.27 +#243 := (not up_34)
  201.28 +decl up_33 :: bool
  201.29 +#76 := up_33
  201.30 +#250 := (not up_35)
  201.31 +#1611 := [hypothesis]: #250
  201.32 +decl up_24 :: bool
  201.33 +#54 := up_24
  201.34 +#209 := (not up_24)
  201.35 +decl up_13 :: bool
  201.36 +#28 := up_13
  201.37 +decl up_11 :: bool
  201.38 +#24 := up_11
  201.39 +#165 := (not up_11)
  201.40 +decl up_12 :: bool
  201.41 +#25 := up_12
  201.42 +#2327 := (or up_12 up_35)
  201.43 +#345 := (not up_60)
  201.44 +decl up_59 :: bool
  201.45 +#142 := up_59
  201.46 +decl up_19 :: bool
  201.47 +#40 := up_19
  201.48 +decl up_8 :: bool
  201.49 +#17 := up_8
  201.50 +#156 := (not up_8)
  201.51 +decl up_7 :: bool
  201.52 +#16 := up_7
  201.53 +#166 := (not up_12)
  201.54 +#1457 := [hypothesis]: #166
  201.55 +#2183 := (or up_7 up_12 up_35)
  201.56 +#155 := (not up_7)
  201.57 +#1612 := [hypothesis]: #155
  201.58 +decl up_10 :: bool
  201.59 +#21 := up_10
  201.60 +#161 := (not up_10)
  201.61 +decl up_20 :: bool
  201.62 +#44 := up_20
  201.63 +decl up_23 :: bool
  201.64 +#50 := up_23
  201.65 +#202 := (not up_23)
  201.66 +#2170 := (or up_34 up_7 up_35 up_12)
  201.67 +#1605 := [hypothesis]: #243
  201.68 +#2164 := (or up_29 up_34 up_7 up_35 up_12)
  201.69 +decl up_42 :: bool
  201.70 +#98 := up_42
  201.71 +#275 := (not up_42)
  201.72 +#226 := (not up_29)
  201.73 +#907 := [hypothesis]: #226
  201.74 +#2136 := (or up_29 up_12 up_7 up_35 up_32)
  201.75 +decl up_22 :: bool
  201.76 +#49 := up_22
  201.77 +#895 := [hypothesis]: #235
  201.78 +#1624 := (or up_29 up_22 up_12 up_32 up_35 up_7)
  201.79 +decl up_21 :: bool
  201.80 +#45 := up_21
  201.81 +decl up_31 :: bool
  201.82 +#71 := up_31
  201.83 +#234 := (not up_31)
  201.84 +decl up_9 :: bool
  201.85 +#20 := up_9
  201.86 +#201 := (not up_22)
  201.87 +#1456 := [hypothesis]: #201
  201.88 +#847 := (or #161 up_32 up_29 up_22 up_12)
  201.89 +#193 := (not up_20)
  201.90 +#1400 := [hypothesis]: up_10
  201.91 +#964 := (or #161 #193)
  201.92 +#197 := (or #193 #161)
  201.93 +#966 := (iff #197 #964)
  201.94 +#967 := [rewrite]: #966
  201.95 +#963 := [asserted]: #197
  201.96 +#970 := [mp #963 #967]: #964
  201.97 +#1399 := [unit-resolution #970 #1400]: #193
  201.98 +#500 := (or up_12 up_20 up_22 up_23)
  201.99 +#51 := (or up_20 up_12)
 201.100 +#52 := (or up_23 #51)
 201.101 +#53 := (or up_22 #52)
 201.102 +#503 := (iff #53 #500)
 201.103 +#491 := (or up_12 up_20)
 201.104 +#494 := (or up_23 #491)
 201.105 +#497 := (or up_22 #494)
 201.106 +#501 := (iff #497 #500)
 201.107 +#502 := [rewrite]: #501
 201.108 +#498 := (iff #53 #497)
 201.109 +#495 := (iff #52 #494)
 201.110 +#492 := (iff #51 #491)
 201.111 +#493 := [rewrite]: #492
 201.112 +#496 := [monotonicity #493]: #495
 201.113 +#499 := [monotonicity #496]: #498
 201.114 +#504 := [trans #499 #502]: #503
 201.115 +#490 := [asserted]: #53
 201.116 +#505 := [mp #490 #504]: #500
 201.117 +#900 := [unit-resolution #505 #1399 #1456 #1457]: up_23
 201.118 +#194 := (not up_21)
 201.119 +#974 := (or #161 #194)
 201.120 +#199 := (or #194 #161)
 201.121 +#976 := (iff #199 #974)
 201.122 +#977 := [rewrite]: #976
 201.123 +#973 := [asserted]: #199
 201.124 +#980 := [mp #973 #977]: #974
 201.125 +#902 := [unit-resolution #980 #1400]: #194
 201.126 +#574 := (or up_21 up_29 up_31 up_32)
 201.127 +#73 := (or up_29 up_21)
 201.128 +#74 := (or up_32 #73)
 201.129 +#75 := (or up_31 #74)
 201.130 +#577 := (iff #75 #574)
 201.131 +#565 := (or up_21 up_29)
 201.132 +#568 := (or up_32 #565)
 201.133 +#571 := (or up_31 #568)
 201.134 +#575 := (iff #571 #574)
 201.135 +#576 := [rewrite]: #575
 201.136 +#572 := (iff #75 #571)
 201.137 +#569 := (iff #74 #568)
 201.138 +#566 := (iff #73 #565)
 201.139 +#567 := [rewrite]: #566
 201.140 +#570 := [monotonicity #567]: #569
 201.141 +#573 := [monotonicity #570]: #572
 201.142 +#578 := [trans #573 #576]: #577
 201.143 +#564 := [asserted]: #75
 201.144 +#579 := [mp #564 #578]: #574
 201.145 +#851 := [unit-resolution #579 #902 #895 #907]: up_31
 201.146 +#1135 := (or #202 #234)
 201.147 +#249 := (or #234 #202)
 201.148 +#1137 := (iff #249 #1135)
 201.149 +#1138 := [rewrite]: #1137
 201.150 +#1134 := [asserted]: #249
 201.151 +#1141 := [mp #1134 #1138]: #1135
 201.152 +#858 := [unit-resolution #1141 #851 #900]: false
 201.153 +#853 := [lemma #858]: #847
 201.154 +#1613 := [unit-resolution #853 #907 #1456 #895 #1457]: #161
 201.155 +#405 := (or up_7 up_9 up_10)
 201.156 +#22 := (or up_10 up_7)
 201.157 +#23 := (or up_9 #22)
 201.158 +#408 := (iff #23 #405)
 201.159 +#399 := (or up_7 up_10)
 201.160 +#402 := (or up_9 #399)
 201.161 +#406 := (iff #402 #405)
 201.162 +#407 := [rewrite]: #406
 201.163 +#403 := (iff #23 #402)
 201.164 +#400 := (iff #22 #399)
 201.165 +#401 := [rewrite]: #400
 201.166 +#404 := [monotonicity #401]: #403
 201.167 +#409 := [trans #404 #407]: #408
 201.168 +#398 := [asserted]: #23
 201.169 +#410 := [mp #398 #409]: #405
 201.170 +#1614 := [unit-resolution #410 #1613 #1612]: up_9
 201.171 +#160 := (not up_9)
 201.172 +#881 := (or #160 #165)
 201.173 +#168 := (or #165 #160)
 201.174 +#882 := (iff #168 #881)
 201.175 +#883 := [rewrite]: #882
 201.176 +#879 := [asserted]: #168
 201.177 +#886 := [mp #879 #883]: #881
 201.178 +#1615 := [unit-resolution #886 #1614]: #165
 201.179 +#425 := (or up_11 up_13)
 201.180 +#29 := (or up_13 up_11)
 201.181 +#426 := (iff #29 #425)
 201.182 +#427 := [rewrite]: #426
 201.183 +#424 := [asserted]: #29
 201.184 +#430 := [mp #424 #427]: #425
 201.185 +#1616 := [unit-resolution #430 #1615]: up_13
 201.186 +#170 := (not up_13)
 201.187 +#1015 := (or #170 #209)
 201.188 +#211 := (or #209 #170)
 201.189 +#1017 := (iff #211 #1015)
 201.190 +#1018 := [rewrite]: #1017
 201.191 +#1014 := [asserted]: #211
 201.192 +#1021 := [mp #1014 #1018]: #1015
 201.193 +#1617 := [unit-resolution #1021 #1616]: #209
 201.194 +#603 := (or up_24 up_33 up_35)
 201.195 +#82 := (or up_33 up_24)
 201.196 +#83 := (or up_35 #82)
 201.197 +#606 := (iff #83 #603)
 201.198 +#597 := (or up_24 up_33)
 201.199 +#600 := (or up_35 #597)
 201.200 +#604 := (iff #600 #603)
 201.201 +#605 := [rewrite]: #604
 201.202 +#601 := (iff #83 #600)
 201.203 +#598 := (iff #82 #597)
 201.204 +#599 := [rewrite]: #598
 201.205 +#602 := [monotonicity #599]: #601
 201.206 +#607 := [trans #602 #605]: #606
 201.207 +#596 := [asserted]: #83
 201.208 +#608 := [mp #596 #607]: #603
 201.209 +#1618 := [unit-resolution #608 #1617 #1611]: up_33
 201.210 +#242 := (not up_33)
 201.211 +#1116 := (or #234 #242)
 201.212 +#245 := (or #242 #234)
 201.213 +#1117 := (iff #245 #1116)
 201.214 +#1118 := [rewrite]: #1117
 201.215 +#1114 := [asserted]: #245
 201.216 +#1121 := [mp #1114 #1118]: #1116
 201.217 +#1619 := [unit-resolution #1121 #1618]: #234
 201.218 +#1620 := [unit-resolution #579 #1619 #895 #907]: up_21
 201.219 +#1120 := (or #202 #242)
 201.220 +#246 := (or #242 #202)
 201.221 +#1122 := (iff #246 #1120)
 201.222 +#1123 := [rewrite]: #1122
 201.223 +#1119 := [asserted]: #246
 201.224 +#1126 := [mp #1119 #1123]: #1120
 201.225 +#1621 := [unit-resolution #1126 #1618]: #202
 201.226 +#1622 := [unit-resolution #505 #1621 #1456 #1457]: up_20
 201.227 +#195 := (or #193 #194)
 201.228 +#957 := [asserted]: #195
 201.229 +#1623 := [unit-resolution #957 #1622 #1620]: false
 201.230 +#1625 := [lemma #1623]: #1624
 201.231 +#2132 := [unit-resolution #1625 #907 #1611 #1457 #895 #1612]: up_22
 201.232 +#1978 := (or up_32 up_35 up_29 up_21 up_12 up_7)
 201.233 +#1972 := [unit-resolution #1625 #895 #907 #1457 #1611 #1612]: up_22
 201.234 +#1010 := (or #201 #209)
 201.235 +#210 := (or #209 #201)
 201.236 +#1012 := (iff #210 #1010)
 201.237 +#1013 := [rewrite]: #1012
 201.238 +#1009 := [asserted]: #210
 201.239 +#1016 := [mp #1009 #1013]: #1010
 201.240 +#1973 := [unit-resolution #1016 #1972]: #209
 201.241 +#1974 := [hypothesis]: #194
 201.242 +#1975 := [unit-resolution #579 #895 #907 #1974]: up_31
 201.243 +#1976 := [unit-resolution #1121 #1975]: #242
 201.244 +#1977 := [unit-resolution #608 #1976 #1973 #1611]: false
 201.245 +#1979 := [lemma #1977]: #1978
 201.246 +#2133 := [unit-resolution #1979 #907 #1611 #1457 #895 #1612]: up_21
 201.247 +#1682 := (or #194 up_7 up_12 up_23)
 201.248 +#1673 := [hypothesis]: #202
 201.249 +#1674 := [hypothesis]: up_21
 201.250 +#1675 := [unit-resolution #957 #1674]: #193
 201.251 +#1676 := [unit-resolution #505 #1675 #1457 #1673]: up_22
 201.252 +#1020 := (or #170 #201)
 201.253 +#212 := (or #201 #170)
 201.254 +#1022 := (iff #212 #1020)
 201.255 +#1023 := [rewrite]: #1022
 201.256 +#1019 := [asserted]: #212
 201.257 +#1026 := [mp #1019 #1023]: #1020
 201.258 +#1677 := [unit-resolution #1026 #1676]: #170
 201.259 +#1678 := [unit-resolution #980 #1674]: #161
 201.260 +#1679 := [unit-resolution #410 #1678 #1612]: up_9
 201.261 +#1680 := [unit-resolution #886 #1679]: #165
 201.262 +#1681 := [unit-resolution #430 #1680 #1677]: false
 201.263 +#1683 := [lemma #1681]: #1682
 201.264 +#2134 := [unit-resolution #1683 #2133 #1457 #1612]: up_23
 201.265 +#203 := (or #201 #202)
 201.266 +#983 := [asserted]: #203
 201.267 +#2135 := [unit-resolution #983 #2134 #2132]: false
 201.268 +#2137 := [lemma #2135]: #2136
 201.269 +#2156 := [unit-resolution #2137 #907 #1612 #1611 #1457]: up_32
 201.270 +#1224 := (or #235 #275)
 201.271 +#279 := (or #275 #235)
 201.272 +#1226 := (iff #279 #1224)
 201.273 +#1227 := [rewrite]: #1226
 201.274 +#1223 := [asserted]: #279
 201.275 +#1230 := [mp #1223 #1227]: #1224
 201.276 +#2157 := [unit-resolution #1230 #2156]: #275
 201.277 +#2158 := (or up_12 up_29 up_7 up_54)
 201.278 +decl up_26 :: bool
 201.279 +#58 := up_26
 201.280 +#214 := (not up_26)
 201.281 +decl up_15 :: bool
 201.282 +#31 := up_15
 201.283 +decl up_14 :: bool
 201.284 +#30 := up_14
 201.285 +#172 := (not up_14)
 201.286 +decl up_6 :: bool
 201.287 +#13 := up_6
 201.288 +decl up_5 :: bool
 201.289 +#12 := up_5
 201.290 +#150 := (not up_5)
 201.291 +decl up_25 :: bool
 201.292 +#57 := up_25
 201.293 +#2099 := [hypothesis]: up_5
 201.294 +#859 := (or #150 #155)
 201.295 +#158 := (or #155 #150)
 201.296 +#860 := (iff #158 #859)
 201.297 +#861 := [rewrite]: #860
 201.298 +#857 := [asserted]: #158
 201.299 +#864 := [mp #857 #861]: #859
 201.300 +#2100 := [unit-resolution #864 #2099]: #155
 201.301 +#863 := (or #150 #156)
 201.302 +#159 := (or #156 #150)
 201.303 +#865 := (iff #159 #863)
 201.304 +#866 := [rewrite]: #865
 201.305 +#862 := [asserted]: #159
 201.306 +#869 := [mp #862 #866]: #863
 201.307 +#2101 := [unit-resolution #869 #2099]: #156
 201.308 +#2097 := (or up_12 up_7 up_8)
 201.309 +#1626 := [hypothesis]: #156
 201.310 +#2054 := (or up_54 up_7 up_8)
 201.311 +decl up_16 :: bool
 201.312 +#34 := up_16
 201.313 +#1597 := [hypothesis]: #317
 201.314 +#1888 := (or up_16 up_8 up_7 up_54)
 201.315 +decl up_45 :: bool
 201.316 +#104 := up_45
 201.317 +#284 := (not up_45)
 201.318 +decl up_52 :: bool
 201.319 +#121 := up_52
 201.320 +#309 := (not up_52)
 201.321 +decl up_51 :: bool
 201.322 +#120 := up_51
 201.323 +#177 := (not up_16)
 201.324 +#1627 := [hypothesis]: #177
 201.325 +#1733 := (or up_51 up_7 up_54 up_8 up_16)
 201.326 +decl up_53 :: bool
 201.327 +#125 := up_53
 201.328 +#308 := (not up_51)
 201.329 +#1598 := [hypothesis]: #308
 201.330 +decl up_43 :: bool
 201.331 +#99 := up_43
 201.332 +#276 := (not up_43)
 201.333 +#1710 := (or up_32 up_16 up_8 up_7 up_51 up_54)
 201.334 +#1671 := (or up_35 up_16 up_8 up_32 up_7)
 201.335 +#1655 := (or #166 up_32 up_16 up_8 up_35 up_7)
 201.336 +#1642 := [hypothesis]: up_12
 201.337 +#885 := (or #160 #166)
 201.338 +#169 := (or #166 #160)
 201.339 +#887 := (iff #169 #885)
 201.340 +#888 := [rewrite]: #887
 201.341 +#884 := [asserted]: #169
 201.342 +#891 := [mp #884 #888]: #885
 201.343 +#1643 := [unit-resolution #891 #1642]: #160
 201.344 +#1644 := [unit-resolution #410 #1643 #1612]: up_10
 201.345 +#1645 := [unit-resolution #980 #1644]: #194
 201.346 +#167 := (or #165 #166)
 201.347 +#878 := [asserted]: #167
 201.348 +#1646 := [unit-resolution #878 #1642]: #165
 201.349 +#1647 := [unit-resolution #430 #1646]: up_13
 201.350 +#1648 := [unit-resolution #1021 #1647]: #209
 201.351 +#1649 := [unit-resolution #608 #1648 #1611]: up_33
 201.352 +#1650 := [unit-resolution #1121 #1649]: #234
 201.353 +decl up_18 :: bool
 201.354 +#39 := up_18
 201.355 +#185 := (not up_18)
 201.356 +#979 := (or #161 #185)
 201.357 +#200 := (or #185 #161)
 201.358 +#981 := (iff #200 #979)
 201.359 +#982 := [rewrite]: #981
 201.360 +#978 := [asserted]: #200
 201.361 +#985 := [mp #978 #982]: #979
 201.362 +#1651 := [unit-resolution #985 #1644]: #185
 201.363 +#468 := (or up_8 up_16 up_18 up_19)
 201.364 +#41 := (or up_16 up_8)
 201.365 +#42 := (or up_19 #41)
 201.366 +#43 := (or up_18 #42)
 201.367 +#471 := (iff #43 #468)
 201.368 +#459 := (or up_8 up_16)
 201.369 +#462 := (or up_19 #459)
 201.370 +#465 := (or up_18 #462)
 201.371 +#469 := (iff #465 #468)
 201.372 +#470 := [rewrite]: #469
 201.373 +#466 := (iff #43 #465)
 201.374 +#463 := (iff #42 #462)
 201.375 +#460 := (iff #41 #459)
 201.376 +#461 := [rewrite]: #460
 201.377 +#464 := [monotonicity #461]: #463
 201.378 +#467 := [monotonicity #464]: #466
 201.379 +#472 := [trans #467 #470]: #471
 201.380 +#458 := [asserted]: #43
 201.381 +#473 := [mp #458 #472]: #468
 201.382 +#1652 := [unit-resolution #473 #1651 #1627 #1626]: up_19
 201.383 +#186 := (not up_19)
 201.384 +#1068 := (or #186 #226)
 201.385 +#230 := (or #226 #186)
 201.386 +#1070 := (iff #230 #1068)
 201.387 +#1071 := [rewrite]: #1070
 201.388 +#1067 := [asserted]: #230
 201.389 +#1074 := [mp #1067 #1071]: #1068
 201.390 +#1653 := [unit-resolution #1074 #1652]: #226
 201.391 +#1654 := [unit-resolution #579 #1653 #1650 #895 #1645]: false
 201.392 +#1656 := [lemma #1654]: #1655
 201.393 +#1657 := [unit-resolution #1656 #1611 #1627 #1626 #895 #1612]: #166
 201.394 +#1640 := (or up_12 up_35 up_7 up_22 up_16 up_8 up_32)
 201.395 +#1628 := [unit-resolution #1625 #1457 #1456 #895 #1611 #1612]: up_29
 201.396 +#1629 := [unit-resolution #1074 #1628]: #186
 201.397 +#1630 := [unit-resolution #473 #1629 #1627 #1626]: up_18
 201.398 +#960 := (or #185 #193)
 201.399 +#196 := (or #193 #185)
 201.400 +#961 := (iff #196 #960)
 201.401 +#962 := [rewrite]: #961
 201.402 +#958 := [asserted]: #196
 201.403 +#965 := [mp #958 #962]: #960
 201.404 +#1631 := [unit-resolution #965 #1630]: #193
 201.405 +#1632 := [unit-resolution #505 #1631 #1456 #1457]: up_23
 201.406 +#1633 := [unit-resolution #1126 #1632]: #242
 201.407 +#1634 := [unit-resolution #608 #1633 #1611]: up_24
 201.408 +#1635 := [unit-resolution #985 #1630]: #161
 201.409 +#1636 := [unit-resolution #410 #1635 #1612]: up_9
 201.410 +#1637 := [unit-resolution #886 #1636]: #165
 201.411 +#1638 := [unit-resolution #430 #1637]: up_13
 201.412 +#1639 := [unit-resolution #1021 #1638 #1634]: false
 201.413 +#1641 := [lemma #1639]: #1640
 201.414 +#1658 := [unit-resolution #1641 #1657 #1612 #1611 #1627 #1626 #895]: up_22
 201.415 +#1659 := [unit-resolution #1016 #1658]: #209
 201.416 +#1660 := [unit-resolution #608 #1659 #1611]: up_33
 201.417 +#1661 := [unit-resolution #1121 #1660]: #234
 201.418 +#1662 := [unit-resolution #1026 #1658]: #170
 201.419 +#1663 := [unit-resolution #430 #1662]: up_11
 201.420 +#1664 := [unit-resolution #886 #1663]: #160
 201.421 +#1665 := [unit-resolution #410 #1664 #1612]: up_10
 201.422 +#1666 := [unit-resolution #980 #1665]: #194
 201.423 +#1667 := [unit-resolution #579 #1666 #895 #1661]: up_29
 201.424 +#1668 := [unit-resolution #985 #1665]: #185
 201.425 +#1669 := [unit-resolution #473 #1668 #1627 #1626]: up_19
 201.426 +#1670 := [unit-resolution #1074 #1669 #1667]: false
 201.427 +#1672 := [lemma #1670]: #1671
 201.428 +#1698 := [unit-resolution #1672 #895 #1626 #1627 #1612]: up_35
 201.429 +#1609 := (or #250 up_34 up_51 up_54)
 201.430 +#316 := (not up_53)
 201.431 +#1599 := [hypothesis]: up_35
 201.432 +#1275 := (or #250 #291)
 201.433 +#293 := (or #291 #250)
 201.434 +#1277 := (iff #293 #1275)
 201.435 +#1278 := [rewrite]: #1277
 201.436 +#1274 := [asserted]: #293
 201.437 +#1281 := [mp #1274 #1278]: #1275
 201.438 +#1600 := [unit-resolution #1281 #1599]: #291
 201.439 +#777 := (or up_46 up_55)
 201.440 +decl up_4 :: bool
 201.441 +#10 := up_4
 201.442 +#783 := (or up_4 up_46 up_55)
 201.443 +#1514 := (iff #783 #777)
 201.444 +#1509 := (or false up_46 up_55)
 201.445 +#1512 := (iff #1509 #777)
 201.446 +#1513 := [rewrite]: #1512
 201.447 +#1510 := (iff #783 #1509)
 201.448 +#1485 := (iff up_4 false)
 201.449 +#11 := (not up_4)
 201.450 +#1488 := (iff #11 #1485)
 201.451 +#1486 := (iff #1485 #11)
 201.452 +#1487 := [rewrite]: #1486
 201.453 +#1489 := [symm #1487]: #1488
 201.454 +#371 := [asserted]: #11
 201.455 +#1490 := [mp #371 #1489]: #1485
 201.456 +#1511 := [monotonicity #1490]: #1510
 201.457 +#1515 := [trans #1511 #1513]: #1514
 201.458 +#135 := (or up_55 up_46)
 201.459 +#136 := (or up_4 #135)
 201.460 +#786 := (iff #136 #783)
 201.461 +#780 := (or up_4 #777)
 201.462 +#784 := (iff #780 #783)
 201.463 +#785 := [rewrite]: #784
 201.464 +#781 := (iff #136 #780)
 201.465 +#778 := (iff #135 #777)
 201.466 +#779 := [rewrite]: #778
 201.467 +#782 := [monotonicity #779]: #781
 201.468 +#787 := [trans #782 #785]: #786
 201.469 +#776 := [asserted]: #136
 201.470 +#788 := [mp #776 #787]: #783
 201.471 +#1516 := [mp #788 #1515]: #777
 201.472 +#1601 := [unit-resolution #1516 #1600]: up_55
 201.473 +#324 := (not up_55)
 201.474 +#1376 := (or #316 #324)
 201.475 +#327 := (or #324 #316)
 201.476 +#1377 := (iff #327 #1376)
 201.477 +#1378 := [rewrite]: #1377
 201.478 +#1374 := [asserted]: #327
 201.479 +#1381 := [mp #1374 #1378]: #1376
 201.480 +#1602 := [unit-resolution #1381 #1601]: #316
 201.481 +#754 := (or up_43 up_51 up_53 up_54)
 201.482 +#127 := (or up_51 up_43)
 201.483 +#128 := (or up_54 #127)
 201.484 +#129 := (or up_53 #128)
 201.485 +#757 := (iff #129 #754)
 201.486 +#745 := (or up_43 up_51)
 201.487 +#748 := (or up_54 #745)
 201.488 +#751 := (or up_53 #748)
 201.489 +#755 := (iff #751 #754)
 201.490 +#756 := [rewrite]: #755
 201.491 +#752 := (iff #129 #751)
 201.492 +#749 := (iff #128 #748)
 201.493 +#746 := (iff #127 #745)
 201.494 +#747 := [rewrite]: #746
 201.495 +#750 := [monotonicity #747]: #749
 201.496 +#753 := [monotonicity #750]: #752
 201.497 +#758 := [trans #753 #756]: #757
 201.498 +#744 := [asserted]: #129
 201.499 +#759 := [mp #744 #758]: #754
 201.500 +#1603 := [unit-resolution #759 #1602 #1598 #1597]: up_43
 201.501 +decl up_44 :: bool
 201.502 +#103 := up_44
 201.503 +#283 := (not up_44)
 201.504 +#1280 := (or #250 #283)
 201.505 +#294 := (or #283 #250)
 201.506 +#1282 := (iff #294 #1280)
 201.507 +#1283 := [rewrite]: #1282
 201.508 +#1279 := [asserted]: #294
 201.509 +#1286 := [mp #1279 #1283]: #1280
 201.510 +#1604 := [unit-resolution #1286 #1599]: #283
 201.511 +#1380 := (or #284 #324)
 201.512 +#328 := (or #324 #284)
 201.513 +#1382 := (iff #328 #1380)
 201.514 +#1383 := [rewrite]: #1382
 201.515 +#1379 := [asserted]: #328
 201.516 +#1386 := [mp #1379 #1383]: #1380
 201.517 +#1606 := [unit-resolution #1386 #1601]: #284
 201.518 +#680 := (or up_34 up_42 up_44 up_45)
 201.519 +#105 := (or up_42 up_34)
 201.520 +#106 := (or up_45 #105)
 201.521 +#107 := (or up_44 #106)
 201.522 +#683 := (iff #107 #680)
 201.523 +#671 := (or up_34 up_42)
 201.524 +#674 := (or up_45 #671)
 201.525 +#677 := (or up_44 #674)
 201.526 +#681 := (iff #677 #680)
 201.527 +#682 := [rewrite]: #681
 201.528 +#678 := (iff #107 #677)
 201.529 +#675 := (iff #106 #674)
 201.530 +#672 := (iff #105 #671)
 201.531 +#673 := [rewrite]: #672
 201.532 +#676 := [monotonicity #673]: #675
 201.533 +#679 := [monotonicity #676]: #678
 201.534 +#684 := [trans #679 #682]: #683
 201.535 +#670 := [asserted]: #107
 201.536 +#685 := [mp #670 #684]: #680
 201.537 +#1607 := [unit-resolution #685 #1606 #1605 #1604]: up_42
 201.538 +#277 := (or #275 #276)
 201.539 +#1217 := [asserted]: #277
 201.540 +#1608 := [unit-resolution #1217 #1607 #1603]: false
 201.541 +#1610 := [lemma #1608]: #1609
 201.542 +#1699 := [unit-resolution #1610 #1698 #1598 #1597]: up_34
 201.543 +#1125 := (or #234 #243)
 201.544 +#247 := (or #243 #234)
 201.545 +#1127 := (iff #247 #1125)
 201.546 +#1128 := [rewrite]: #1127
 201.547 +#1124 := [asserted]: #247
 201.548 +#1131 := [mp #1124 #1128]: #1125
 201.549 +#1700 := [unit-resolution #1131 #1699]: #234
 201.550 +#1130 := (or #202 #243)
 201.551 +#248 := (or #243 #202)
 201.552 +#1132 := (iff #248 #1130)
 201.553 +#1133 := [rewrite]: #1132
 201.554 +#1129 := [asserted]: #248
 201.555 +#1136 := [mp #1129 #1133]: #1130
 201.556 +#1701 := [unit-resolution #1136 #1699]: #202
 201.557 +#1696 := (or up_12 up_7 up_23 up_16 up_8 up_32 up_31)
 201.558 +#1684 := [hypothesis]: #234
 201.559 +#1685 := [unit-resolution #1683 #1457 #1612 #1673]: #194
 201.560 +#1686 := [unit-resolution #579 #1685 #895 #1684]: up_29
 201.561 +#1687 := [unit-resolution #1074 #1686]: #186
 201.562 +#1688 := [unit-resolution #473 #1687 #1627 #1626]: up_18
 201.563 +#1689 := [unit-resolution #965 #1688]: #193
 201.564 +#1690 := [unit-resolution #505 #1689 #1457 #1673]: up_22
 201.565 +#1691 := [unit-resolution #1026 #1690]: #170
 201.566 +#1692 := [unit-resolution #985 #1688]: #161
 201.567 +#1693 := [unit-resolution #410 #1692 #1612]: up_9
 201.568 +#1694 := [unit-resolution #886 #1693]: #165
 201.569 +#1695 := [unit-resolution #430 #1694 #1691]: false
 201.570 +#1697 := [lemma #1695]: #1696
 201.571 +#1702 := [unit-resolution #1697 #1701 #1612 #1627 #1626 #895 #1700]: up_12
 201.572 +#1703 := [unit-resolution #891 #1702]: #160
 201.573 +#1704 := [unit-resolution #410 #1703 #1612]: up_10
 201.574 +#1705 := [unit-resolution #980 #1704]: #194
 201.575 +#1706 := [unit-resolution #579 #1705 #895 #1700]: up_29
 201.576 +#1707 := [unit-resolution #985 #1704]: #185
 201.577 +#1708 := [unit-resolution #473 #1707 #1627 #1626]: up_19
 201.578 +#1709 := [unit-resolution #1074 #1708 #1706]: false
 201.579 +#1711 := [lemma #1709]: #1710
 201.580 +#1712 := [unit-resolution #1711 #1598 #1626 #1612 #1627 #1597]: up_32
 201.581 +#1234 := (or #235 #276)
 201.582 +#281 := (or #276 #235)
 201.583 +#1236 := (iff #281 #1234)
 201.584 +#1237 := [rewrite]: #1236
 201.585 +#1233 := [asserted]: #281
 201.586 +#1240 := [mp #1233 #1237]: #1234
 201.587 +#1713 := [unit-resolution #1240 #1712]: #276
 201.588 +#1714 := [unit-resolution #759 #1713 #1598 #1597]: up_53
 201.589 +#1395 := (or #284 #316)
 201.590 +#331 := (or #316 #284)
 201.591 +#1397 := (iff #331 #1395)
 201.592 +#1398 := [rewrite]: #1397
 201.593 +#1394 := [asserted]: #331
 201.594 +#1401 := [mp #1394 #1398]: #1395
 201.595 +#1715 := [unit-resolution #1401 #1714]: #284
 201.596 +#1716 := [unit-resolution #1230 #1712]: #275
 201.597 +#1717 := [unit-resolution #1381 #1714]: #324
 201.598 +#1718 := [unit-resolution #1516 #1717]: up_46
 201.599 +#1270 := (or #283 #291)
 201.600 +#292 := (or #291 #283)
 201.601 +#1272 := (iff #292 #1270)
 201.602 +#1273 := [rewrite]: #1272
 201.603 +#1269 := [asserted]: #292
 201.604 +#1276 := [mp #1269 #1273]: #1270
 201.605 +#1719 := [unit-resolution #1276 #1718]: #283
 201.606 +#1720 := [unit-resolution #685 #1719 #1716 #1715]: up_34
 201.607 +#1721 := [unit-resolution #1136 #1720]: #202
 201.608 +#1722 := [unit-resolution #1281 #1718]: #250
 201.609 +#244 := (or #242 #243)
 201.610 +#1113 := [asserted]: #244
 201.611 +#1723 := [unit-resolution #1113 #1720]: #242
 201.612 +#1724 := [unit-resolution #608 #1723 #1722]: up_24
 201.613 +#1725 := [unit-resolution #1016 #1724]: #201
 201.614 +#1726 := [unit-resolution #1021 #1724]: #170
 201.615 +#1727 := [unit-resolution #430 #1726]: up_11
 201.616 +#1728 := [unit-resolution #878 #1727]: #166
 201.617 +#1729 := [unit-resolution #505 #1728 #1725 #1721]: up_20
 201.618 +#1730 := [unit-resolution #886 #1727]: #160
 201.619 +#1731 := [unit-resolution #410 #1730 #1612]: up_10
 201.620 +#1732 := [unit-resolution #970 #1731 #1729]: false
 201.621 +#1734 := [lemma #1732]: #1733
 201.622 +#1858 := [unit-resolution #1734 #1627 #1597 #1626 #1612]: up_51
 201.623 +#310 := (or #308 #309)
 201.624 +#1321 := [asserted]: #310
 201.625 +#1859 := [unit-resolution #1321 #1858]: #309
 201.626 +decl up_58 :: bool
 201.627 +#139 := up_58
 201.628 +#337 := (not up_58)
 201.629 +decl up_49 :: bool
 201.630 +#115 := up_49
 201.631 +#300 := (not up_49)
 201.632 +#1324 := (or #300 #308)
 201.633 +#311 := (or #308 #300)
 201.634 +#1325 := (iff #311 #1324)
 201.635 +#1326 := [rewrite]: #1325
 201.636 +#1322 := [asserted]: #311
 201.637 +#1329 := [mp #1322 #1326]: #1324
 201.638 +#1860 := [unit-resolution #1329 #1858]: #300
 201.639 +decl up_39 :: bool
 201.640 +#89 := up_39
 201.641 +#260 := (not up_39)
 201.642 +decl up_38 :: bool
 201.643 +#88 := up_38
 201.644 +decl up_40 :: bool
 201.645 +#93 := up_40
 201.646 +#267 := (not up_40)
 201.647 +decl up_41 :: bool
 201.648 +#94 := up_41
 201.649 +#268 := (not up_41)
 201.650 +#1328 := (or #268 #308)
 201.651 +#312 := (or #308 #268)
 201.652 +#1330 := (iff #312 #1328)
 201.653 +#1331 := [rewrite]: #1330
 201.654 +#1327 := [asserted]: #312
 201.655 +#1334 := [mp #1327 #1331]: #1328
 201.656 +#1861 := [unit-resolution #1334 #1858]: #268
 201.657 +#1771 := (or up_32 up_16 up_8 up_41 up_49 up_52 up_7)
 201.658 +#1735 := [unit-resolution #1281 #1698]: #291
 201.659 +#1736 := [unit-resolution #1516 #1735]: up_55
 201.660 +#1737 := [unit-resolution #1386 #1736]: #284
 201.661 +#1738 := [unit-resolution #1286 #1698]: #283
 201.662 +#259 := (not up_38)
 201.663 +decl up_50 :: bool
 201.664 +#116 := up_50
 201.665 +#301 := (not up_50)
 201.666 +#1739 := [hypothesis]: #309
 201.667 +#341 := (not up_59)
 201.668 +#326 := (or #324 #325)
 201.669 +#1373 := [asserted]: #326
 201.670 +#1740 := [unit-resolution #1373 #1736]: #325
 201.671 +#834 := (or up_56 up_60)
 201.672 +decl up_3 :: bool
 201.673 +#8 := up_3
 201.674 +#840 := (or up_3 up_56 up_60)
 201.675 +#1522 := (iff #840 #834)
 201.676 +#1517 := (or false up_56 up_60)
 201.677 +#1520 := (iff #1517 #834)
 201.678 +#1521 := [rewrite]: #1520
 201.679 +#1518 := (iff #840 #1517)
 201.680 +#1479 := (iff up_3 false)
 201.681 +#9 := (not up_3)
 201.682 +#1482 := (iff #9 #1479)
 201.683 +#1480 := (iff #1479 #9)
 201.684 +#1481 := [rewrite]: #1480
 201.685 +#1483 := [symm #1481]: #1482
 201.686 +#370 := [asserted]: #9
 201.687 +#1484 := [mp #370 #1483]: #1479
 201.688 +#1519 := [monotonicity #1484]: #1518
 201.689 +#1523 := [trans #1519 #1521]: #1522
 201.690 +#148 := (or up_60 up_56)
 201.691 +#149 := (or up_3 #148)
 201.692 +#843 := (iff #149 #840)
 201.693 +#837 := (or up_3 #834)
 201.694 +#841 := (iff #837 #840)
 201.695 +#842 := [rewrite]: #841
 201.696 +#838 := (iff #149 #837)
 201.697 +#835 := (iff #148 #834)
 201.698 +#836 := [rewrite]: #835
 201.699 +#839 := [monotonicity #836]: #838
 201.700 +#844 := [trans #839 #842]: #843
 201.701 +#833 := [asserted]: #149
 201.702 +#845 := [mp #833 #844]: #840
 201.703 +#1524 := [mp #845 #1523]: #834
 201.704 +#1741 := [unit-resolution #1524 #1740]: up_60
 201.705 +#1442 := (or #341 #345)
 201.706 +#346 := (or #345 #341)
 201.707 +#1444 := (iff #346 #1442)
 201.708 +#1445 := [rewrite]: #1444
 201.709 +#1441 := [asserted]: #346
 201.710 +#1448 := [mp #1441 #1445]: #1442
 201.711 +#1742 := [unit-resolution #1448 #1741]: #341
 201.712 +#814 := (or up_52 up_58 up_59)
 201.713 +#143 := (or up_58 up_52)
 201.714 +#144 := (or up_59 #143)
 201.715 +#817 := (iff #144 #814)
 201.716 +#808 := (or up_52 up_58)
 201.717 +#811 := (or up_59 #808)
 201.718 +#815 := (iff #811 #814)
 201.719 +#816 := [rewrite]: #815
 201.720 +#812 := (iff #144 #811)
 201.721 +#809 := (iff #143 #808)
 201.722 +#810 := [rewrite]: #809
 201.723 +#813 := [monotonicity #810]: #812
 201.724 +#818 := [trans #813 #816]: #817
 201.725 +#807 := [asserted]: #144
 201.726 +#819 := [mp #807 #818]: #814
 201.727 +#1743 := [unit-resolution #819 #1742 #1739]: up_58
 201.728 +#1417 := (or #301 #337)
 201.729 +#339 := (or #337 #301)
 201.730 +#1419 := (iff #339 #1417)
 201.731 +#1420 := [rewrite]: #1419
 201.732 +#1416 := [asserted]: #339
 201.733 +#1423 := [mp #1416 #1420]: #1417
 201.734 +#1744 := [unit-resolution #1423 #1743]: #301
 201.735 +#1745 := [hypothesis]: #300
 201.736 +decl up_47 :: bool
 201.737 +#111 := up_47
 201.738 +#295 := (not up_47)
 201.739 +decl up_48 :: bool
 201.740 +#112 := up_48
 201.741 +decl up_57 :: bool
 201.742 +#137 := up_57
 201.743 +#335 := (not up_57)
 201.744 +#1412 := (or #335 #337)
 201.745 +#338 := (or #337 #335)
 201.746 +#1414 := (iff #338 #1412)
 201.747 +#1415 := [rewrite]: #1414
 201.748 +#1411 := [asserted]: #338
 201.749 +#1418 := [mp #1411 #1415]: #1412
 201.750 +#1746 := [unit-resolution #1418 #1743]: #335
 201.751 +#790 := (or up_48 up_57)
 201.752 +#138 := (or up_57 up_48)
 201.753 +#791 := (iff #138 #790)
 201.754 +#792 := [rewrite]: #791
 201.755 +#789 := [asserted]: #138
 201.756 +#795 := [mp #789 #792]: #790
 201.757 +#1747 := [unit-resolution #795 #1746]: up_48
 201.758 +#296 := (not up_48)
 201.759 +#297 := (or #295 #296)
 201.760 +#1284 := [asserted]: #297
 201.761 +#1748 := [unit-resolution #1284 #1747]: #295
 201.762 +#722 := (or up_39 up_47 up_49 up_50)
 201.763 +#117 := (or up_47 up_39)
 201.764 +#118 := (or up_50 #117)
 201.765 +#119 := (or up_49 #118)
 201.766 +#725 := (iff #119 #722)
 201.767 +#713 := (or up_39 up_47)
 201.768 +#716 := (or up_50 #713)
 201.769 +#719 := (or up_49 #716)
 201.770 +#723 := (iff #719 #722)
 201.771 +#724 := [rewrite]: #723
 201.772 +#720 := (iff #119 #719)
 201.773 +#717 := (iff #118 #716)
 201.774 +#714 := (iff #117 #713)
 201.775 +#715 := [rewrite]: #714
 201.776 +#718 := [monotonicity #715]: #717
 201.777 +#721 := [monotonicity #718]: #720
 201.778 +#726 := [trans #721 #724]: #725
 201.779 +#712 := [asserted]: #119
 201.780 +#727 := [mp #712 #726]: #722
 201.781 +#1749 := [unit-resolution #727 #1748 #1745 #1744]: up_39
 201.782 +#261 := (or #259 #260)
 201.783 +#1165 := [asserted]: #261
 201.784 +#1750 := [unit-resolution #1165 #1749]: #259
 201.785 +#1751 := [hypothesis]: #268
 201.786 +decl up_30 :: bool
 201.787 +#67 := up_30
 201.788 +#227 := (not up_30)
 201.789 +decl up_27 :: bool
 201.790 +#61 := up_27
 201.791 +#213 := (not up_25)
 201.792 +decl up_37 :: bool
 201.793 +#85 := up_37
 201.794 +#255 := (not up_37)
 201.795 +#1291 := (or #255 #296)
 201.796 +#299 := (or #296 #255)
 201.797 +#1293 := (iff #299 #1291)
 201.798 +#1294 := [rewrite]: #1293
 201.799 +#1290 := [asserted]: #299
 201.800 +#1297 := [mp #1290 #1294]: #1291
 201.801 +#1752 := [unit-resolution #1297 #1747]: #255
 201.802 +decl up_36 :: bool
 201.803 +#84 := up_36
 201.804 +#254 := (not up_36)
 201.805 +#1177 := (or #254 #260)
 201.806 +#264 := (or #260 #254)
 201.807 +#1179 := (iff #264 #1177)
 201.808 +#1180 := [rewrite]: #1179
 201.809 +#1176 := [asserted]: #264
 201.810 +#1183 := [mp #1176 #1180]: #1177
 201.811 +#1753 := [unit-resolution #1183 #1749]: #254
 201.812 +#616 := (or up_26 up_36 up_37)
 201.813 +#86 := (or up_37 up_26)
 201.814 +#87 := (or up_36 #86)
 201.815 +#619 := (iff #87 #616)
 201.816 +#610 := (or up_26 up_37)
 201.817 +#613 := (or up_36 #610)
 201.818 +#617 := (iff #613 #616)
 201.819 +#618 := [rewrite]: #617
 201.820 +#614 := (iff #87 #613)
 201.821 +#611 := (iff #86 #610)
 201.822 +#612 := [rewrite]: #611
 201.823 +#615 := [monotonicity #612]: #614
 201.824 +#620 := [trans #615 #618]: #619
 201.825 +#609 := [asserted]: #87
 201.826 +#621 := [mp #609 #620]: #616
 201.827 +#1754 := [unit-resolution #621 #1753 #1752]: up_26
 201.828 +#215 := (or #213 #214)
 201.829 +#1024 := [asserted]: #215
 201.830 +#1755 := [unit-resolution #1024 #1754]: #213
 201.831 +decl up_28 :: bool
 201.832 +#62 := up_28
 201.833 +#219 := (not up_28)
 201.834 +#1182 := (or #219 #260)
 201.835 +#265 := (or #260 #219)
 201.836 +#1184 := (iff #265 #1182)
 201.837 +#1185 := [rewrite]: #1184
 201.838 +#1181 := [asserted]: #265
 201.839 +#1188 := [mp #1181 #1185]: #1182
 201.840 +#1756 := [unit-resolution #1188 #1749]: #219
 201.841 +decl up_17 :: bool
 201.842 +#35 := up_17
 201.843 +#178 := (not up_17)
 201.844 +#173 := (not up_15)
 201.845 +#1031 := (or #173 #214)
 201.846 +#217 := (or #214 #173)
 201.847 +#1033 := (iff #217 #1031)
 201.848 +#1034 := [rewrite]: #1033
 201.849 +#1030 := [asserted]: #217
 201.850 +#1037 := [mp #1030 #1034]: #1031
 201.851 +#1757 := [unit-resolution #1037 #1754]: #173
 201.852 +#1503 := (or up_14 up_15)
 201.853 +decl up_2 :: bool
 201.854 +#6 := up_2
 201.855 +#436 := (or up_2 up_14 up_15)
 201.856 +#1506 := (iff #436 #1503)
 201.857 +#1500 := (or false up_14 up_15)
 201.858 +#1504 := (iff #1500 #1503)
 201.859 +#1505 := [rewrite]: #1504
 201.860 +#1501 := (iff #436 #1500)
 201.861 +#1473 := (iff up_2 false)
 201.862 +#7 := (not up_2)
 201.863 +#1476 := (iff #7 #1473)
 201.864 +#1474 := (iff #1473 #7)
 201.865 +#1475 := [rewrite]: #1474
 201.866 +#1477 := [symm #1475]: #1476
 201.867 +#369 := [asserted]: #7
 201.868 +#1478 := [mp #369 #1477]: #1473
 201.869 +#1502 := [monotonicity #1478]: #1501
 201.870 +#1507 := [trans #1502 #1505]: #1506
 201.871 +#32 := (or up_15 up_2)
 201.872 +#33 := (or up_14 #32)
 201.873 +#439 := (iff #33 #436)
 201.874 +#429 := (or up_2 up_15)
 201.875 +#433 := (or up_14 #429)
 201.876 +#437 := (iff #433 #436)
 201.877 +#438 := [rewrite]: #437
 201.878 +#434 := (iff #33 #433)
 201.879 +#431 := (iff #32 #429)
 201.880 +#432 := [rewrite]: #431
 201.881 +#435 := [monotonicity #432]: #434
 201.882 +#440 := [trans #435 #438]: #439
 201.883 +#428 := [asserted]: #33
 201.884 +#441 := [mp #428 #440]: #436
 201.885 +#1508 := [mp #441 #1507]: #1503
 201.886 +#1758 := [unit-resolution #1508 #1757]: up_14
 201.887 +#917 := (or #172 #178)
 201.888 +#182 := (or #178 #172)
 201.889 +#919 := (iff #182 #917)
 201.890 +#920 := [rewrite]: #919
 201.891 +#916 := [asserted]: #182
 201.892 +#923 := [mp #916 #920]: #917
 201.893 +#1759 := [unit-resolution #923 #1758]: #178
 201.894 +#542 := (or up_17 up_25 up_27 up_28)
 201.895 +#63 := (or up_25 up_17)
 201.896 +#64 := (or up_28 #63)
 201.897 +#65 := (or up_27 #64)
 201.898 +#545 := (iff #65 #542)
 201.899 +#533 := (or up_17 up_25)
 201.900 +#536 := (or up_28 #533)
 201.901 +#539 := (or up_27 #536)
 201.902 +#543 := (iff #539 #542)
 201.903 +#544 := [rewrite]: #543
 201.904 +#540 := (iff #65 #539)
 201.905 +#537 := (iff #64 #536)
 201.906 +#534 := (iff #63 #533)
 201.907 +#535 := [rewrite]: #534
 201.908 +#538 := [monotonicity #535]: #537
 201.909 +#541 := [monotonicity #538]: #540
 201.910 +#546 := [trans #541 #544]: #545
 201.911 +#532 := [asserted]: #65
 201.912 +#547 := [mp #532 #546]: #542
 201.913 +#1760 := [unit-resolution #547 #1759 #1756 #1755]: up_27
 201.914 +#218 := (not up_27)
 201.915 +#1073 := (or #218 #227)
 201.916 +#231 := (or #227 #218)
 201.917 +#1075 := (iff #231 #1073)
 201.918 +#1076 := [rewrite]: #1075
 201.919 +#1072 := [asserted]: #231
 201.920 +#1079 := [mp #1072 #1076]: #1073
 201.921 +#1761 := [unit-resolution #1079 #1760]: #227
 201.922 +#648 := (or up_30 up_38 up_40 up_41)
 201.923 +#95 := (or up_38 up_30)
 201.924 +#96 := (or up_41 #95)
 201.925 +#97 := (or up_40 #96)
 201.926 +#651 := (iff #97 #648)
 201.927 +#639 := (or up_30 up_38)
 201.928 +#642 := (or up_41 #639)
 201.929 +#645 := (or up_40 #642)
 201.930 +#649 := (iff #645 #648)
 201.931 +#650 := [rewrite]: #649
 201.932 +#646 := (iff #97 #645)
 201.933 +#643 := (iff #96 #642)
 201.934 +#640 := (iff #95 #639)
 201.935 +#641 := [rewrite]: #640
 201.936 +#644 := [monotonicity #641]: #643
 201.937 +#647 := [monotonicity #644]: #646
 201.938 +#652 := [trans #647 #650]: #651
 201.939 +#638 := [asserted]: #97
 201.940 +#653 := [mp #638 #652]: #648
 201.941 +#1762 := [unit-resolution #653 #1761 #1751 #1750]: up_40
 201.942 +#1220 := (or #267 #275)
 201.943 +#278 := (or #275 #267)
 201.944 +#1221 := (iff #278 #1220)
 201.945 +#1222 := [rewrite]: #1221
 201.946 +#1218 := [asserted]: #278
 201.947 +#1225 := [mp #1218 #1222]: #1220
 201.948 +#1763 := [unit-resolution #1225 #1762]: #275
 201.949 +#1764 := [unit-resolution #685 #1763 #1738 #1737]: up_34
 201.950 +#1064 := (or #218 #226)
 201.951 +#229 := (or #226 #218)
 201.952 +#1065 := (iff #229 #1064)
 201.953 +#1066 := [rewrite]: #1065
 201.954 +#1062 := [asserted]: #229
 201.955 +#1069 := [mp #1062 #1066]: #1064
 201.956 +#1765 := [unit-resolution #1069 #1760]: #226
 201.957 +#1083 := (or #186 #218)
 201.958 +#233 := (or #218 #186)
 201.959 +#1085 := (iff #233 #1083)
 201.960 +#1086 := [rewrite]: #1085
 201.961 +#1082 := [asserted]: #233
 201.962 +#1089 := [mp #1082 #1086]: #1083
 201.963 +#1766 := [unit-resolution #1089 #1760]: #186
 201.964 +#1767 := [unit-resolution #473 #1766 #1627 #1626]: up_18
 201.965 +#969 := (or #185 #194)
 201.966 +#198 := (or #194 #185)
 201.967 +#971 := (iff #198 #969)
 201.968 +#972 := [rewrite]: #971
 201.969 +#968 := [asserted]: #198
 201.970 +#975 := [mp #968 #972]: #969
 201.971 +#1768 := [unit-resolution #975 #1767]: #194
 201.972 +#1769 := [unit-resolution #579 #1768 #895 #1765]: up_31
 201.973 +#1770 := [unit-resolution #1131 #1769 #1764]: false
 201.974 +#1772 := [lemma #1770]: #1771
 201.975 +#1862 := [unit-resolution #1772 #1627 #1626 #1861 #1860 #1859 #1612]: up_32
 201.976 +#1239 := (or #235 #267)
 201.977 +#282 := (or #267 #235)
 201.978 +#1241 := (iff #282 #1239)
 201.979 +#1242 := [rewrite]: #1241
 201.980 +#1238 := [asserted]: #282
 201.981 +#1245 := [mp #1238 #1242]: #1239
 201.982 +#1863 := [unit-resolution #1245 #1862]: #267
 201.983 +#1856 := (or up_12 up_52 up_49 up_41 up_16 up_8 up_7)
 201.984 +#1828 := [unit-resolution #1772 #1627 #1626 #1751 #1745 #1739 #1612]: up_32
 201.985 +#1829 := [unit-resolution #1245 #1828]: #267
 201.986 +#1830 := [unit-resolution #1230 #1828]: #275
 201.987 +#1826 := (or #170 up_41 up_40 up_16 up_8 up_49 up_12 up_52 up_42)
 201.988 +#1804 := [hypothesis]: up_13
 201.989 +#1805 := [unit-resolution #1026 #1804]: #201
 201.990 +#1806 := [unit-resolution #1021 #1804]: #209
 201.991 +#1798 := [hypothesis]: #275
 201.992 +#1782 := [hypothesis]: #267
 201.993 +#1802 := (or #242 up_42 up_52 up_49 up_41 up_40 up_16 up_8 up_12 up_22)
 201.994 +#1783 := [hypothesis]: up_33
 201.995 +#1784 := [unit-resolution #1126 #1783]: #202
 201.996 +#1785 := [unit-resolution #505 #1784 #1457 #1456]: up_20
 201.997 +#1786 := [unit-resolution #965 #1785]: #185
 201.998 +#1787 := [unit-resolution #473 #1786 #1627 #1626]: up_19
 201.999 +#1078 := (or #186 #227)
201.1000 +#232 := (or #227 #186)
201.1001 +#1080 := (iff #232 #1078)
201.1002 +#1081 := [rewrite]: #1080
201.1003 +#1077 := [asserted]: #232
201.1004 +#1084 := [mp #1077 #1081]: #1078
201.1005 +#1788 := [unit-resolution #1084 #1787]: #227
201.1006 +#1789 := [unit-resolution #653 #1788 #1751 #1782]: up_38
201.1007 +#1790 := [unit-resolution #1165 #1789]: #260
201.1008 +#1780 := (or #337 up_49 up_39)
201.1009 +#1773 := [hypothesis]: up_58
201.1010 +#1774 := [unit-resolution #1418 #1773]: #335
201.1011 +#1775 := [unit-resolution #795 #1774]: up_48
201.1012 +#1776 := [hypothesis]: #260
201.1013 +#1777 := [unit-resolution #1423 #1773]: #301
201.1014 +#1778 := [unit-resolution #727 #1777 #1745 #1776]: up_47
201.1015 +#1779 := [unit-resolution #1284 #1778 #1775]: false
201.1016 +#1781 := [lemma #1779]: #1780
201.1017 +#1791 := [unit-resolution #1781 #1790 #1745]: #337
201.1018 +#1792 := [unit-resolution #819 #1791 #1739]: up_59
201.1019 +#1793 := [unit-resolution #1448 #1792]: #345
201.1020 +#1794 := [unit-resolution #1524 #1793]: up_56
201.1021 +#1795 := [unit-resolution #1373 #1794]: #324
201.1022 +#1796 := [unit-resolution #1516 #1795]: up_46
201.1023 +#1797 := [unit-resolution #1113 #1783]: #243
201.1024 +#1390 := (or #284 #325)
201.1025 +#330 := (or #325 #284)
201.1026 +#1392 := (iff #330 #1390)
201.1027 +#1393 := [rewrite]: #1392
201.1028 +#1389 := [asserted]: #330
201.1029 +#1396 := [mp #1389 #1393]: #1390
201.1030 +#1799 := [unit-resolution #1396 #1794]: #284
201.1031 +#1800 := [unit-resolution #685 #1799 #1798 #1797]: up_44
201.1032 +#1801 := [unit-resolution #1276 #1800 #1796]: false
201.1033 +#1803 := [lemma #1801]: #1802
201.1034 +#1807 := [unit-resolution #1803 #1805 #1739 #1745 #1751 #1782 #1627 #1626 #1457 #1798]: #242
201.1035 +#1808 := [unit-resolution #608 #1807 #1806]: up_35
201.1036 +#1809 := [unit-resolution #1286 #1808]: #283
201.1037 +#1810 := [unit-resolution #1281 #1808]: #291
201.1038 +#1811 := [unit-resolution #1516 #1810]: up_55
201.1039 +#1812 := [unit-resolution #1386 #1811]: #284
201.1040 +#1813 := [unit-resolution #685 #1812 #1798 #1809]: up_34
201.1041 +#1814 := [unit-resolution #1136 #1813]: #202
201.1042 +#1815 := [unit-resolution #505 #1814 #1457 #1805]: up_20
201.1043 +#1816 := [unit-resolution #965 #1815]: #185
201.1044 +#1817 := [unit-resolution #473 #1816 #1627 #1626]: up_19
201.1045 +#1818 := [unit-resolution #1373 #1811]: #325
201.1046 +#1819 := [unit-resolution #1524 #1818]: up_60
201.1047 +#1820 := [unit-resolution #1448 #1819]: #341
201.1048 +#1821 := [unit-resolution #819 #1820 #1739]: up_58
201.1049 +#1822 := [unit-resolution #1781 #1821 #1745]: up_39
201.1050 +#1823 := [unit-resolution #1165 #1822]: #259
201.1051 +#1824 := [unit-resolution #653 #1823 #1751 #1782]: up_30
201.1052 +#1825 := [unit-resolution #1084 #1824 #1817]: false
201.1053 +#1827 := [lemma #1825]: #1826
201.1054 +#1831 := [unit-resolution #1827 #1457 #1829 #1627 #1626 #1745 #1751 #1739 #1830]: #170
201.1055 +#1832 := [unit-resolution #430 #1831]: up_11
201.1056 +#1833 := [unit-resolution #886 #1832]: #160
201.1057 +#1834 := [unit-resolution #410 #1833 #1612]: up_10
201.1058 +#1835 := [unit-resolution #985 #1834]: #185
201.1059 +#1836 := [unit-resolution #473 #1835 #1627 #1626]: up_19
201.1060 +#1837 := [unit-resolution #1084 #1836]: #227
201.1061 +#1838 := [unit-resolution #653 #1837 #1751 #1829]: up_38
201.1062 +#1839 := [unit-resolution #1165 #1838]: #260
201.1063 +#1840 := [unit-resolution #1781 #1839 #1745]: #337
201.1064 +#1841 := [unit-resolution #819 #1840 #1739]: up_59
201.1065 +#1842 := [unit-resolution #1448 #1841]: #345
201.1066 +#1843 := [unit-resolution #1524 #1842]: up_56
201.1067 +#1844 := [unit-resolution #1373 #1843]: #324
201.1068 +#1845 := [unit-resolution #1516 #1844]: up_46
201.1069 +#1846 := [unit-resolution #1281 #1845]: #250
201.1070 +#1847 := [unit-resolution #1396 #1843]: #284
201.1071 +#1848 := [unit-resolution #1276 #1845]: #283
201.1072 +#1849 := [unit-resolution #685 #1848 #1830 #1847]: up_34
201.1073 +#1850 := [unit-resolution #1113 #1849]: #242
201.1074 +#1851 := [unit-resolution #608 #1850 #1846]: up_24
201.1075 +#1852 := [unit-resolution #970 #1834]: #193
201.1076 +#1853 := [unit-resolution #1136 #1849]: #202
201.1077 +#1854 := [unit-resolution #505 #1853 #1457 #1852]: up_22
201.1078 +#1855 := [unit-resolution #1016 #1854 #1851]: false
201.1079 +#1857 := [lemma #1855]: #1856
201.1080 +#1864 := [unit-resolution #1857 #1859 #1860 #1861 #1627 #1626 #1612]: up_12
201.1081 +#1865 := [unit-resolution #891 #1864]: #160
201.1082 +#1866 := [unit-resolution #410 #1865 #1612]: up_10
201.1083 +#1867 := [unit-resolution #985 #1866]: #185
201.1084 +#1868 := [unit-resolution #473 #1867 #1627 #1626]: up_19
201.1085 +#1869 := [unit-resolution #1084 #1868]: #227
201.1086 +#1870 := [unit-resolution #653 #1869 #1861 #1863]: up_38
201.1087 +#1871 := [unit-resolution #1165 #1870]: #260
201.1088 +#1872 := [unit-resolution #1781 #1871 #1860]: #337
201.1089 +#1873 := [unit-resolution #819 #1872 #1859]: up_59
201.1090 +#1874 := [unit-resolution #1448 #1873]: #345
201.1091 +#1875 := [unit-resolution #1524 #1874]: up_56
201.1092 +#1876 := [unit-resolution #1396 #1875]: #284
201.1093 +#1877 := [unit-resolution #1230 #1862]: #275
201.1094 +#1878 := [unit-resolution #1373 #1875]: #324
201.1095 +#1879 := [unit-resolution #1516 #1878]: up_46
201.1096 +#1880 := [unit-resolution #1276 #1879]: #283
201.1097 +#1881 := [unit-resolution #685 #1880 #1877 #1876]: up_34
201.1098 +#1882 := [unit-resolution #878 #1864]: #165
201.1099 +#1883 := [unit-resolution #430 #1882]: up_13
201.1100 +#1884 := [unit-resolution #1021 #1883]: #209
201.1101 +#1885 := [unit-resolution #1281 #1879]: #250
201.1102 +#1886 := [unit-resolution #608 #1885 #1884]: up_33
201.1103 +#1887 := [unit-resolution #1113 #1886 #1881]: false
201.1104 +#1889 := [lemma #1887]: #1888
201.1105 +#2026 := [unit-resolution #1889 #1597 #1612 #1626]: up_16
201.1106 +#908 := (or #172 #177)
201.1107 +#180 := (or #177 #172)
201.1108 +#909 := (iff #180 #908)
201.1109 +#910 := [rewrite]: #909
201.1110 +#906 := [asserted]: #180
201.1111 +#913 := [mp #906 #910]: #908
201.1112 +#2027 := [unit-resolution #913 #2026]: #172
201.1113 +#2028 := [unit-resolution #1508 #2027]: up_15
201.1114 +#2029 := [unit-resolution #1037 #2028]: #214
201.1115 +#1027 := (or #173 #213)
201.1116 +#216 := (or #213 #173)
201.1117 +#1028 := (iff #216 #1027)
201.1118 +#1029 := [rewrite]: #1028
201.1119 +#1025 := [asserted]: #216
201.1120 +#1032 := [mp #1025 #1029]: #1027
201.1121 +#2030 := [unit-resolution #1032 #2028]: #213
201.1122 +#179 := (or #177 #178)
201.1123 +#905 := [asserted]: #179
201.1124 +#2031 := [unit-resolution #905 #2026]: #178
201.1125 +#1917 := (or #226 up_54 up_26 up_17 up_25)
201.1126 +#1890 := [hypothesis]: #214
201.1127 +#1891 := [hypothesis]: #213
201.1128 +#1892 := [hypothesis]: #178
201.1129 +#1893 := [hypothesis]: up_29
201.1130 +#1894 := [unit-resolution #1069 #1893]: #218
201.1131 +#1895 := [unit-resolution #547 #1894 #1892 #1891]: up_28
201.1132 +#1187 := (or #219 #254)
201.1133 +#266 := (or #254 #219)
201.1134 +#1189 := (iff #266 #1187)
201.1135 +#1190 := [rewrite]: #1189
201.1136 +#1186 := [asserted]: #266
201.1137 +#1193 := [mp #1186 #1190]: #1187
201.1138 +#1896 := [unit-resolution #1193 #1895]: #254
201.1139 +#1897 := [unit-resolution #621 #1896 #1890]: up_37
201.1140 +#1898 := [unit-resolution #1297 #1897]: #296
201.1141 +#1899 := [unit-resolution #795 #1898]: up_57
201.1142 +#1900 := [unit-resolution #1418 #1899]: #337
201.1143 +#1901 := [unit-resolution #1188 #1895]: #260
201.1144 +#1287 := (or #255 #295)
201.1145 +#298 := (or #295 #255)
201.1146 +#1288 := (iff #298 #1287)
201.1147 +#1289 := [rewrite]: #1288
201.1148 +#1285 := [asserted]: #298
201.1149 +#1292 := [mp #1285 #1289]: #1287
201.1150 +#1902 := [unit-resolution #1292 #1897]: #295
201.1151 +#1422 := (or #301 #335)
201.1152 +#340 := (or #335 #301)
201.1153 +#1424 := (iff #340 #1422)
201.1154 +#1425 := [rewrite]: #1424
201.1155 +#1421 := [asserted]: #340
201.1156 +#1428 := [mp #1421 #1425]: #1422
201.1157 +#1903 := [unit-resolution #1428 #1899]: #301
201.1158 +#1904 := [unit-resolution #727 #1903 #1902 #1901]: up_49
201.1159 +#1333 := (or #300 #309)
201.1160 +#313 := (or #309 #300)
201.1161 +#1335 := (iff #313 #1333)
201.1162 +#1336 := [rewrite]: #1335
201.1163 +#1332 := [asserted]: #313
201.1164 +#1339 := [mp #1332 #1336]: #1333
201.1165 +#1905 := [unit-resolution #1339 #1904]: #309
201.1166 +#1906 := [unit-resolution #819 #1905 #1900]: up_59
201.1167 +#1907 := [unit-resolution #1448 #1906]: #345
201.1168 +#1908 := [unit-resolution #1524 #1907]: up_56
201.1169 +#1909 := [unit-resolution #1329 #1904]: #308
201.1170 +#1172 := (or #219 #259)
201.1171 +#263 := (or #259 #219)
201.1172 +#1174 := (iff #263 #1172)
201.1173 +#1175 := [rewrite]: #1174
201.1174 +#1171 := [asserted]: #263
201.1175 +#1178 := [mp #1171 #1175]: #1172
201.1176 +#1910 := [unit-resolution #1178 #1895]: #259
201.1177 +#228 := (or #226 #227)
201.1178 +#1061 := [asserted]: #228
201.1179 +#1911 := [unit-resolution #1061 #1893]: #227
201.1180 +#1343 := (or #268 #300)
201.1181 +#315 := (or #300 #268)
201.1182 +#1345 := (iff #315 #1343)
201.1183 +#1346 := [rewrite]: #1345
201.1184 +#1342 := [asserted]: #315
201.1185 +#1349 := [mp #1342 #1346]: #1343
201.1186 +#1912 := [unit-resolution #1349 #1904]: #268
201.1187 +#1913 := [unit-resolution #653 #1912 #1911 #1910]: up_40
201.1188 +#1229 := (or #267 #276)
201.1189 +#280 := (or #276 #267)
201.1190 +#1231 := (iff #280 #1229)
201.1191 +#1232 := [rewrite]: #1231
201.1192 +#1228 := [asserted]: #280
201.1193 +#1235 := [mp #1228 #1232]: #1229
201.1194 +#1914 := [unit-resolution #1235 #1913]: #276
201.1195 +#1915 := [unit-resolution #759 #1914 #1909 #1597]: up_53
201.1196 +#1385 := (or #316 #325)
201.1197 +#329 := (or #325 #316)
201.1198 +#1387 := (iff #329 #1385)
201.1199 +#1388 := [rewrite]: #1387
201.1200 +#1384 := [asserted]: #329
201.1201 +#1391 := [mp #1384 #1388]: #1385
201.1202 +#1916 := [unit-resolution #1391 #1915 #1908]: false
201.1203 +#1918 := [lemma #1916]: #1917
201.1204 +#2032 := [unit-resolution #1918 #1597 #2029 #2031 #2030]: #226
201.1205 +#2010 := (or up_12 up_29 up_7 up_54 up_26)
201.1206 +#1993 := (or up_35 up_12 up_54 up_26 up_29 up_7)
201.1207 +#1955 := (or #170 up_54 up_26 up_29 up_12 up_35 up_7)
201.1208 +#1940 := [unit-resolution #1625 #1805 #907 #1457 #1611 #1612]: up_32
201.1209 +#1941 := [unit-resolution #1240 #1940]: #276
201.1210 +#1942 := [unit-resolution #1230 #1940]: #275
201.1211 +#1943 := [unit-resolution #608 #1806 #1611]: up_33
201.1212 +#1944 := [unit-resolution #1113 #1943]: #243
201.1213 +#1925 := (or #325 up_34 up_42)
201.1214 +#1919 := [hypothesis]: up_56
201.1215 +#1920 := [unit-resolution #1373 #1919]: #324
201.1216 +#1921 := [unit-resolution #1516 #1920]: up_46
201.1217 +#1922 := [unit-resolution #1396 #1919]: #284
201.1218 +#1923 := [unit-resolution #685 #1922 #1605 #1798]: up_44
201.1219 +#1924 := [unit-resolution #1276 #1923 #1921]: false
201.1220 +#1926 := [lemma #1924]: #1925
201.1221 +#1945 := [unit-resolution #1926 #1944 #1942]: #325
201.1222 +#1946 := [unit-resolution #1524 #1945]: up_60
201.1223 +#1947 := [unit-resolution #1448 #1946]: #341
201.1224 +#1938 := (or #308 up_26 up_59)
201.1225 +#1927 := [hypothesis]: up_51
201.1226 +#1928 := [unit-resolution #1329 #1927]: #300
201.1227 +#1929 := [hypothesis]: #341
201.1228 +#1930 := [unit-resolution #1321 #1927]: #309
201.1229 +#1931 := [unit-resolution #819 #1930 #1929]: up_58
201.1230 +#1932 := [unit-resolution #1781 #1931 #1928]: up_39
201.1231 +#1933 := [unit-resolution #1183 #1932]: #254
201.1232 +#1934 := [unit-resolution #1418 #1931]: #335
201.1233 +#1935 := [unit-resolution #795 #1934]: up_48
201.1234 +#1936 := [unit-resolution #1297 #1935]: #255
201.1235 +#1937 := [unit-resolution #621 #1936 #1933 #1890]: false
201.1236 +#1939 := [lemma #1937]: #1938
201.1237 +#1948 := [unit-resolution #1939 #1947 #1890]: #308
201.1238 +#1949 := [unit-resolution #759 #1948 #1941 #1597]: up_53
201.1239 +#1950 := [unit-resolution #1381 #1949]: #324
201.1240 +#1951 := [unit-resolution #1516 #1950]: up_46
201.1241 +#1952 := [unit-resolution #1401 #1949]: #284
201.1242 +#1953 := [unit-resolution #685 #1952 #1944 #1942]: up_44
201.1243 +#1954 := [unit-resolution #1276 #1953 #1951]: false
201.1244 +#1956 := [lemma #1954]: #1955
201.1245 +#1980 := [unit-resolution #1956 #1611 #1890 #907 #1457 #1597 #1612]: #170
201.1246 +#1981 := [unit-resolution #430 #1980]: up_11
201.1247 +#1982 := [unit-resolution #886 #1981]: #160
201.1248 +#1983 := [unit-resolution #410 #1982 #1612]: up_10
201.1249 +#1984 := [unit-resolution #980 #1983]: #194
201.1250 +#1985 := [unit-resolution #1979 #1611 #907 #1984 #1457 #1612]: up_32
201.1251 +#1970 := (or #235 up_34 up_54 up_26)
201.1252 +#1957 := [hypothesis]: up_32
201.1253 +#1958 := [unit-resolution #1240 #1957]: #276
201.1254 +#1959 := [unit-resolution #1230 #1957]: #275
201.1255 +#1960 := [unit-resolution #1926 #1959 #1605]: #325
201.1256 +#1961 := [unit-resolution #1524 #1960]: up_60
201.1257 +#1962 := [unit-resolution #1448 #1961]: #341
201.1258 +#1963 := [unit-resolution #1939 #1962 #1890]: #308
201.1259 +#1964 := [unit-resolution #759 #1963 #1958 #1597]: up_53
201.1260 +#1965 := [unit-resolution #1381 #1964]: #324
201.1261 +#1966 := [unit-resolution #1516 #1965]: up_46
201.1262 +#1967 := [unit-resolution #1401 #1964]: #284
201.1263 +#1968 := [unit-resolution #685 #1967 #1605 #1959]: up_44
201.1264 +#1969 := [unit-resolution #1276 #1968 #1966]: false
201.1265 +#1971 := [lemma #1969]: #1970
201.1266 +#1986 := [unit-resolution #1971 #1985 #1597 #1890]: up_34
201.1267 +#1987 := [unit-resolution #1113 #1986]: #242
201.1268 +#1988 := [unit-resolution #608 #1987 #1611]: up_24
201.1269 +#1989 := [unit-resolution #970 #1983]: #193
201.1270 +#1990 := [unit-resolution #1136 #1986]: #202
201.1271 +#1991 := [unit-resolution #505 #1990 #1457 #1989]: up_22
201.1272 +#1992 := [unit-resolution #1016 #1991 #1988]: false
201.1273 +#1994 := [lemma #1992]: #1993
201.1274 +#1995 := [unit-resolution #1994 #1457 #1597 #1890 #907 #1612]: up_35
201.1275 +#1996 := [unit-resolution #1281 #1995]: #291
201.1276 +#1997 := [unit-resolution #1516 #1996]: up_55
201.1277 +#1998 := [unit-resolution #1373 #1997]: #325
201.1278 +#1999 := [unit-resolution #1524 #1998]: up_60
201.1279 +#2000 := [unit-resolution #1448 #1999]: #341
201.1280 +#2001 := [unit-resolution #1939 #2000 #1890]: #308
201.1281 +#2002 := [unit-resolution #1610 #2001 #1995 #1597]: up_34
201.1282 +#2003 := [unit-resolution #1131 #2002]: #234
201.1283 +#2004 := [unit-resolution #1381 #1997]: #316
201.1284 +#2005 := [unit-resolution #759 #2001 #2004 #1597]: up_43
201.1285 +#2006 := [unit-resolution #1240 #2005]: #235
201.1286 +#2007 := [unit-resolution #1136 #2002]: #202
201.1287 +#2008 := [unit-resolution #1683 #2007 #1612 #1457]: #194
201.1288 +#2009 := [unit-resolution #579 #2008 #2006 #907 #2003]: false
201.1289 +#2011 := [lemma #2009]: #2010
201.1290 +#2033 := [unit-resolution #2011 #2032 #1612 #1597 #2029]: up_12
201.1291 +#2034 := [unit-resolution #891 #2033]: #160
201.1292 +#2035 := [unit-resolution #410 #2034 #1612]: up_10
201.1293 +#2036 := [unit-resolution #980 #2035]: #194
201.1294 +#2037 := [unit-resolution #878 #2033]: #165
201.1295 +#2038 := [unit-resolution #430 #2037]: up_13
201.1296 +#2039 := [unit-resolution #1021 #2038]: #209
201.1297 +#2024 := (or #234 up_26 up_54 up_24)
201.1298 +#2012 := [hypothesis]: #209
201.1299 +#2013 := [hypothesis]: up_31
201.1300 +#2014 := [unit-resolution #1121 #2013]: #242
201.1301 +#2015 := [unit-resolution #608 #2014 #2012]: up_35
201.1302 +#2016 := [unit-resolution #1131 #2013]: #243
201.1303 +#2017 := [unit-resolution #1610 #2016 #2015 #1597]: up_51
201.1304 +#2018 := [unit-resolution #1939 #2017 #1890]: up_59
201.1305 +#2019 := [unit-resolution #1448 #2018]: #345
201.1306 +#2020 := [unit-resolution #1281 #2015]: #291
201.1307 +#2021 := [unit-resolution #1516 #2020]: up_55
201.1308 +#2022 := [unit-resolution #1373 #2021]: #325
201.1309 +#2023 := [unit-resolution #1524 #2022 #2019]: false
201.1310 +#2025 := [lemma #2023]: #2024
201.1311 +#2040 := [unit-resolution #2025 #2029 #1597 #2039]: #234
201.1312 +#2041 := [unit-resolution #579 #2040 #2032 #2036]: up_32
201.1313 +#2042 := [unit-resolution #1240 #2041]: #276
201.1314 +#2043 := [unit-resolution #1971 #2041 #1597 #2029]: up_34
201.1315 +#2044 := [unit-resolution #1113 #2043]: #242
201.1316 +#2045 := [unit-resolution #608 #2044 #2039]: up_35
201.1317 +#2046 := [unit-resolution #1281 #2045]: #291
201.1318 +#2047 := [unit-resolution #1516 #2046]: up_55
201.1319 +#2048 := [unit-resolution #1381 #2047]: #316
201.1320 +#2049 := [unit-resolution #759 #2048 #2042 #1597]: up_51
201.1321 +#2050 := [unit-resolution #1373 #2047]: #325
201.1322 +#2051 := [unit-resolution #1524 #2050]: up_60
201.1323 +#2052 := [unit-resolution #1448 #2051]: #341
201.1324 +#2053 := [unit-resolution #1939 #2052 #2049 #2029]: false
201.1325 +#2055 := [lemma #2053]: #2054
201.1326 +#2065 := [unit-resolution #2055 #1612 #1626]: up_54
201.1327 +#1447 := (or #317 #345)
201.1328 +#347 := (or #345 #317)
201.1329 +#1449 := (iff #347 #1447)
201.1330 +#1450 := [rewrite]: #1449
201.1331 +#1446 := [asserted]: #347
201.1332 +#1453 := [mp #1446 #1450]: #1447
201.1333 +#2066 := [unit-resolution #1453 #2065]: #345
201.1334 +#2067 := [unit-resolution #1524 #2066]: up_56
201.1335 +#2083 := (or #275 up_7 up_12 up_8)
201.1336 +#2063 := [hypothesis]: up_42
201.1337 +#2064 := [unit-resolution #1230 #2063]: #235
201.1338 +#2068 := [unit-resolution #1373 #2067]: #324
201.1339 +#2069 := [unit-resolution #1516 #2068]: up_46
201.1340 +#2070 := [unit-resolution #1281 #2069]: #250
201.1341 +#2071 := [unit-resolution #1672 #2064 #1626 #2070 #1612]: up_16
201.1342 +#2072 := [unit-resolution #913 #2071]: #172
201.1343 +#2073 := [unit-resolution #1508 #2072]: up_15
201.1344 +#2074 := [unit-resolution #1032 #2073]: #213
201.1345 +#2075 := [unit-resolution #905 #2071]: #178
201.1346 +#1452 := (or #317 #341)
201.1347 +#348 := (or #341 #317)
201.1348 +#1454 := (iff #348 #1452)
201.1349 +#1455 := [rewrite]: #1454
201.1350 +#1451 := [asserted]: #348
201.1351 +#1458 := [mp #1451 #1455]: #1452
201.1352 +#2076 := [unit-resolution #1458 #2065]: #341
201.1353 +#2077 := [unit-resolution #1225 #2063]: #267
201.1354 +#2061 := (or #226 up_59 up_40 up_17 up_25)
201.1355 +#2056 := [unit-resolution #653 #1910 #1782 #1911]: up_41
201.1356 +#2057 := [unit-resolution #1349 #2056]: #300
201.1357 +#1338 := (or #268 #309)
201.1358 +#314 := (or #309 #268)
201.1359 +#1340 := (iff #314 #1338)
201.1360 +#1341 := [rewrite]: #1340
201.1361 +#1337 := [asserted]: #314
201.1362 +#1344 := [mp #1337 #1341]: #1338
201.1363 +#2058 := [unit-resolution #1344 #2056]: #309
201.1364 +#2059 := [unit-resolution #819 #2058 #1929]: up_58
201.1365 +#2060 := [unit-resolution #1781 #2059 #2057 #1901]: false
201.1366 +#2062 := [lemma #2060]: #2061
201.1367 +#2078 := [unit-resolution #2062 #2077 #2076 #2075 #2074]: #226
201.1368 +#2079 := [unit-resolution #1625 #2078 #2070 #1457 #2064 #1612]: up_22
201.1369 +#2080 := [unit-resolution #1979 #2078 #2070 #1457 #2064 #1612]: up_21
201.1370 +#2081 := [unit-resolution #1683 #2080 #1612 #1457]: up_23
201.1371 +#2082 := [unit-resolution #983 #2081 #2079]: false
201.1372 +#2084 := [lemma #2082]: #2083
201.1373 +#2085 := [unit-resolution #2084 #1457 #1612 #1626]: #275
201.1374 +#2086 := [unit-resolution #1926 #2085 #2067]: up_34
201.1375 +#2087 := [unit-resolution #1136 #2086]: #202
201.1376 +#2088 := [unit-resolution #1113 #2086]: #242
201.1377 +#2089 := [unit-resolution #608 #2088 #2070]: up_24
201.1378 +#2090 := [unit-resolution #1016 #2089]: #201
201.1379 +#2091 := [unit-resolution #505 #2090 #1457 #2087]: up_20
201.1380 +#2092 := [unit-resolution #970 #2091]: #161
201.1381 +#2093 := [unit-resolution #1021 #2089]: #170
201.1382 +#2094 := [unit-resolution #430 #2093]: up_11
201.1383 +#2095 := [unit-resolution #886 #2094]: #160
201.1384 +#2096 := [unit-resolution #410 #2095 #2092 #1612]: false
201.1385 +#2098 := [lemma #2096]: #2097
201.1386 +#2102 := [unit-resolution #2098 #2100 #2101]: up_12
201.1387 +#2103 := [unit-resolution #891 #2102]: #160
201.1388 +#2104 := [unit-resolution #410 #2103 #2100]: up_10
201.1389 +#2105 := [unit-resolution #980 #2104]: #194
201.1390 +#2106 := [unit-resolution #2055 #2100 #2101]: up_54
201.1391 +#2107 := [unit-resolution #1453 #2106]: #345
201.1392 +#2108 := [unit-resolution #1524 #2107]: up_56
201.1393 +#2109 := [unit-resolution #1373 #2108]: #324
201.1394 +#2110 := [unit-resolution #1516 #2109]: up_46
201.1395 +#2111 := [unit-resolution #1281 #2110]: #250
201.1396 +#2112 := [unit-resolution #878 #2102]: #165
201.1397 +#2113 := [unit-resolution #430 #2112]: up_13
201.1398 +#2114 := [unit-resolution #1021 #2113]: #209
201.1399 +#2115 := [unit-resolution #608 #2114 #2111]: up_33
201.1400 +#2116 := [unit-resolution #1121 #2115]: #234
201.1401 +#2117 := [unit-resolution #1276 #2110]: #283
201.1402 +#2118 := [unit-resolution #1396 #2108]: #284
201.1403 +#2119 := [unit-resolution #1113 #2115]: #243
201.1404 +#2120 := [unit-resolution #685 #2119 #2118 #2117]: up_42
201.1405 +#2121 := [unit-resolution #1230 #2120]: #235
201.1406 +#2122 := [unit-resolution #579 #2121 #2116 #2105]: up_29
201.1407 +#2123 := [unit-resolution #1225 #2120]: #267
201.1408 +#2124 := [unit-resolution #1458 #2106]: #341
201.1409 +#2125 := [unit-resolution #1672 #2121 #2101 #2111 #2100]: up_16
201.1410 +#2126 := [unit-resolution #905 #2125]: #178
201.1411 +#2127 := [unit-resolution #2062 #2126 #2124 #2123 #2122]: up_25
201.1412 +#2128 := [unit-resolution #913 #2125]: #172
201.1413 +#2129 := [unit-resolution #1508 #2128]: up_15
201.1414 +#2130 := [unit-resolution #1032 #2129 #2127]: false
201.1415 +#2131 := [lemma #2130]: #150
201.1416 +#1494 := (or up_5 up_6)
201.1417 +decl up_1 :: bool
201.1418 +#4 := up_1
201.1419 +#379 := (or up_1 up_5 up_6)
201.1420 +#1497 := (iff #379 #1494)
201.1421 +#1491 := (or false up_5 up_6)
201.1422 +#1495 := (iff #1491 #1494)
201.1423 +#1496 := [rewrite]: #1495
201.1424 +#1492 := (iff #379 #1491)
201.1425 +#1467 := (iff up_1 false)
201.1426 +#5 := (not up_1)
201.1427 +#1470 := (iff #5 #1467)
201.1428 +#1463 := (iff #1467 #5)
201.1429 +#1468 := [rewrite]: #1463
201.1430 +#1471 := [symm #1468]: #1470
201.1431 +#368 := [asserted]: #5
201.1432 +#1472 := [mp #368 #1471]: #1467
201.1433 +#1493 := [monotonicity #1472]: #1492
201.1434 +#1498 := [trans #1493 #1496]: #1497
201.1435 +#14 := (or up_6 up_1)
201.1436 +#15 := (or up_5 #14)
201.1437 +#382 := (iff #15 #379)
201.1438 +#373 := (or up_1 up_6)
201.1439 +#376 := (or up_5 #373)
201.1440 +#380 := (iff #376 #379)
201.1441 +#381 := [rewrite]: #380
201.1442 +#377 := (iff #15 #376)
201.1443 +#374 := (iff #14 #373)
201.1444 +#375 := [rewrite]: #374
201.1445 +#378 := [monotonicity #375]: #377
201.1446 +#383 := [trans #378 #381]: #382
201.1447 +#372 := [asserted]: #15
201.1448 +#384 := [mp #372 #383]: #379
201.1449 +#1499 := [mp #384 #1498]: #1494
201.1450 +#2138 := [unit-resolution #1499 #2131]: up_6
201.1451 +#151 := (not up_6)
201.1452 +#927 := (or #151 #172)
201.1453 +#184 := (or #172 #151)
201.1454 +#929 := (iff #184 #927)
201.1455 +#930 := [rewrite]: #929
201.1456 +#926 := [asserted]: #184
201.1457 +#933 := [mp #926 #930]: #927
201.1458 +#2139 := [unit-resolution #933 #2138]: #172
201.1459 +#2140 := [unit-resolution #1508 #2139]: up_15
201.1460 +#2147 := [unit-resolution #1037 #2140]: #214
201.1461 +#2159 := [unit-resolution #2011 #2147]: #2158
201.1462 +#2160 := [unit-resolution #2159 #907 #1612 #1457]: up_54
201.1463 +#2161 := [unit-resolution #1453 #2160]: #345
201.1464 +#2162 := [unit-resolution #1524 #2161]: up_56
201.1465 +#2163 := [unit-resolution #1926 #2162 #2157 #1605]: false
201.1466 +#2165 := [lemma #2163]: #2164
201.1467 +#2166 := [unit-resolution #2165 #1605 #1612 #1611 #1457]: up_29
201.1468 +#2148 := (or #226 up_54)
201.1469 +#2141 := [unit-resolution #1032 #2140]: #213
201.1470 +#922 := (or #151 #178)
201.1471 +#183 := (or #178 #151)
201.1472 +#924 := (iff #183 #922)
201.1473 +#925 := [rewrite]: #924
201.1474 +#921 := [asserted]: #183
201.1475 +#928 := [mp #921 #925]: #922
201.1476 +#2142 := [unit-resolution #928 #2138]: #178
201.1477 +#2149 := [unit-resolution #1918 #2147 #2142 #2141]: #2148
201.1478 +#2167 := [unit-resolution #2149 #2166]: up_54
201.1479 +#2154 := (or #226 up_34 up_59)
201.1480 +#2143 := (or #226 up_59 up_40)
201.1481 +#2144 := [unit-resolution #2062 #2142 #2141]: #2143
201.1482 +#2145 := [unit-resolution #2144 #1893 #1929]: up_40
201.1483 +#2146 := [unit-resolution #1225 #2145]: #275
201.1484 +#2150 := [unit-resolution #2149 #1893]: up_54
201.1485 +#2151 := [unit-resolution #1453 #2150]: #345
201.1486 +#2152 := [unit-resolution #1524 #2151]: up_56
201.1487 +#2153 := [unit-resolution #1926 #2152 #2146 #1605]: false
201.1488 +#2155 := [lemma #2153]: #2154
201.1489 +#2168 := [unit-resolution #2155 #2166 #1605]: up_59
201.1490 +#2169 := [unit-resolution #1458 #2168 #2167]: false
201.1491 +#2171 := [lemma #2169]: #2170
201.1492 +#2172 := [unit-resolution #2171 #1612 #1611 #1457]: up_34
201.1493 +#2173 := [unit-resolution #1136 #2172]: #202
201.1494 +#2174 := [unit-resolution #1113 #2172]: #242
201.1495 +#2175 := [unit-resolution #608 #2174 #1611]: up_24
201.1496 +#2176 := [unit-resolution #1016 #2175]: #201
201.1497 +#2177 := [unit-resolution #505 #2176 #1457 #2173]: up_20
201.1498 +#2178 := [unit-resolution #970 #2177]: #161
201.1499 +#2179 := [unit-resolution #1021 #2175]: #170
201.1500 +#2180 := [unit-resolution #430 #2179]: up_11
201.1501 +#2181 := [unit-resolution #886 #2180]: #160
201.1502 +#2182 := [unit-resolution #410 #2181 #2178 #1612]: false
201.1503 +#2184 := [lemma #2182]: #2183
201.1504 +#2235 := [unit-resolution #2184 #1457 #1611]: up_7
201.1505 +#157 := (or #155 #156)
201.1506 +#856 := [asserted]: #157
201.1507 +#2236 := [unit-resolution #856 #2235]: #156
201.1508 +#2299 := (or up_34 up_35 up_12)
201.1509 +#2283 := (or #186 up_34)
201.1510 +#2185 := [hypothesis]: up_19
201.1511 +#2191 := [unit-resolution #1084 #2185]: #227
201.1512 +#2186 := [unit-resolution #1089 #2185]: #218
201.1513 +#2187 := (or up_27 up_28)
201.1514 +#2188 := [unit-resolution #547 #2142 #2141]: #2187
201.1515 +#2189 := [unit-resolution #2188 #2186]: up_28
201.1516 +#2192 := [unit-resolution #1178 #2189]: #259
201.1517 +#2265 := [unit-resolution #1193 #2189]: #254
201.1518 +#2266 := (or up_36 up_37)
201.1519 +#2267 := [unit-resolution #621 #2147]: #2266
201.1520 +#2268 := [unit-resolution #2267 #2265]: up_37
201.1521 +#2269 := [unit-resolution #1292 #2268]: #295
201.1522 +#2190 := [unit-resolution #1188 #2189]: #260
201.1523 +#2270 := [unit-resolution #1297 #2268]: #296
201.1524 +#2271 := [unit-resolution #795 #2270]: up_57
201.1525 +#2272 := [unit-resolution #1428 #2271]: #301
201.1526 +#2273 := [unit-resolution #727 #2272 #2190 #2269]: up_49
201.1527 +#2274 := [unit-resolution #1349 #2273]: #268
201.1528 +#2275 := [unit-resolution #653 #2274 #2192 #2191]: up_40
201.1529 +#2276 := [unit-resolution #1225 #2275]: #275
201.1530 +#2277 := [unit-resolution #1418 #2271]: #337
201.1531 +#2278 := [unit-resolution #1339 #2273]: #309
201.1532 +#2279 := [unit-resolution #819 #2278 #2277]: up_59
201.1533 +#2280 := [unit-resolution #1448 #2279]: #345
201.1534 +#2281 := [unit-resolution #1524 #2280]: up_56
201.1535 +#2282 := [unit-resolution #1926 #2281 #2276 #1605]: false
201.1536 +#2284 := [lemma #2282]: #2283
201.1537 +#2292 := [unit-resolution #2284 #1605]: #186
201.1538 +#2223 := (or up_8 up_18 up_19)
201.1539 +#912 := (or #151 #177)
201.1540 +#181 := (or #177 #151)
201.1541 +#914 := (iff #181 #912)
201.1542 +#915 := [rewrite]: #914
201.1543 +#911 := [asserted]: #181
201.1544 +#918 := [mp #911 #915]: #912
201.1545 +#2222 := [unit-resolution #918 #2138]: #177
201.1546 +#2224 := [unit-resolution #473 #2222]: #2223
201.1547 +#2293 := [unit-resolution #2224 #2292 #2236]: up_18
201.1548 +#2257 := (or #235 up_34)
201.1549 +#2252 := (or #235 up_34 up_54)
201.1550 +#2253 := [unit-resolution #1971 #2147]: #2252
201.1551 +#2254 := [unit-resolution #2253 #1957 #1605]: up_54
201.1552 +#2255 := [unit-resolution #1453 #2254]: #345
201.1553 +#2256 := [unit-resolution #1524 #2255 #1960]: false
201.1554 +#2258 := [lemma #2256]: #2257
201.1555 +#2294 := [unit-resolution #2258 #1605]: #235
201.1556 +#2290 := (or up_29 up_35 up_32 up_12 #185)
201.1557 +#2200 := [hypothesis]: up_18
201.1558 +#2206 := (or #185 up_29 up_32 up_12 up_22)
201.1559 +#2201 := [unit-resolution #965 #2200]: #193
201.1560 +#2202 := [unit-resolution #505 #2201 #1457 #1456]: up_23
201.1561 +#2203 := [unit-resolution #975 #2200]: #194
201.1562 +#2204 := [unit-resolution #579 #2203 #907 #895]: up_31
201.1563 +#2205 := [unit-resolution #1141 #2204 #2202]: false
201.1564 +#2207 := [lemma #2205]: #2206
201.1565 +#2285 := [unit-resolution #2207 #907 #895 #1457 #2200]: up_22
201.1566 +#2286 := [unit-resolution #1016 #2285]: #209
201.1567 +#2287 := [unit-resolution #579 #907 #895 #2203]: up_31
201.1568 +#2288 := [unit-resolution #1121 #2287]: #242
201.1569 +#2289 := [unit-resolution #608 #2288 #2286 #1611]: false
201.1570 +#2291 := [lemma #2289]: #2290
201.1571 +#2295 := [unit-resolution #2291 #2294 #1611 #1457 #2293]: up_29
201.1572 +#2296 := [unit-resolution #2149 #2295]: up_54
201.1573 +#2297 := [unit-resolution #2155 #2295 #1605]: up_59
201.1574 +#2298 := [unit-resolution #1458 #2297 #2296]: false
201.1575 +#2300 := [lemma #2298]: #2299
201.1576 +#2301 := [unit-resolution #2300 #1457 #1611]: up_34
201.1577 +#2302 := [unit-resolution #1136 #2301]: #202
201.1578 +#2303 := [unit-resolution #1113 #2301]: #242
201.1579 +#2304 := [unit-resolution #608 #2303 #1611]: up_24
201.1580 +#2305 := [unit-resolution #1016 #2304]: #201
201.1581 +#2306 := [unit-resolution #505 #2305 #1457 #2302]: up_20
201.1582 +#2307 := [unit-resolution #965 #2306]: #185
201.1583 +#2308 := [unit-resolution #2224 #2307 #2236]: up_19
201.1584 +#2309 := [unit-resolution #957 #2306]: #194
201.1585 +#2310 := [unit-resolution #1131 #2301]: #234
201.1586 +#2311 := [unit-resolution #1074 #2308]: #226
201.1587 +#2312 := [unit-resolution #579 #2311 #2310 #2309]: up_32
201.1588 +#2313 := [unit-resolution #1245 #2312]: #267
201.1589 +#2198 := (or #186 up_59 up_40)
201.1590 +#2193 := [unit-resolution #653 #2192 #1782 #2191]: up_41
201.1591 +#2194 := [unit-resolution #1349 #2193]: #300
201.1592 +#2195 := [unit-resolution #1344 #2193]: #309
201.1593 +#2196 := [unit-resolution #819 #2195 #1929]: up_58
201.1594 +#2197 := [unit-resolution #1781 #2196 #2194 #2190]: false
201.1595 +#2199 := [lemma #2197]: #2198
201.1596 +#2314 := [unit-resolution #2199 #2313 #2308]: up_59
201.1597 +#2315 := [unit-resolution #1448 #2314]: #345
201.1598 +#2316 := [unit-resolution #1524 #2315]: up_56
201.1599 +#2317 := [unit-resolution #1084 #2308]: #227
201.1600 +#2318 := [unit-resolution #1089 #2308]: #218
201.1601 +#2319 := [unit-resolution #2188 #2318]: up_28
201.1602 +#2320 := [unit-resolution #1178 #2319]: #259
201.1603 +#2321 := [unit-resolution #653 #2313 #2320 #2317]: up_41
201.1604 +#2322 := [unit-resolution #1334 #2321]: #308
201.1605 +#2323 := [unit-resolution #1240 #2312]: #276
201.1606 +#2324 := [unit-resolution #1458 #2314]: #317
201.1607 +#2325 := [unit-resolution #759 #2324 #2323 #2322]: up_53
201.1608 +#2326 := [unit-resolution #1391 #2325 #2316]: false
201.1609 +#2328 := [lemma #2326]: #2327
201.1610 +#2337 := [unit-resolution #2328 #1611]: up_12
201.1611 +#2338 := [unit-resolution #878 #2337]: #165
201.1612 +#2339 := [unit-resolution #430 #2338]: up_13
201.1613 +#2340 := [unit-resolution #1021 #2339]: #209
201.1614 +#2341 := [unit-resolution #608 #2340 #1611]: up_33
201.1615 +#2342 := [unit-resolution #1113 #2341]: #243
201.1616 +#2343 := [unit-resolution #2258 #2342]: #235
201.1617 +#2344 := [unit-resolution #1121 #2341]: #234
201.1618 +#2345 := [unit-resolution #2284 #2342]: #186
201.1619 +#2346 := [unit-resolution #891 #2337]: #160
201.1620 +#2335 := (or #194 up_9 up_19)
201.1621 +#2329 := [hypothesis]: #186
201.1622 +#2330 := [unit-resolution #975 #1674]: #185
201.1623 +#2331 := [unit-resolution #2224 #2330 #2329]: up_8
201.1624 +#2332 := [hypothesis]: #160
201.1625 +#2333 := [unit-resolution #410 #1678 #2332]: up_7
201.1626 +#2334 := [unit-resolution #856 #2333 #2331]: false
201.1627 +#2336 := [lemma #2334]: #2335
201.1628 +#2347 := [unit-resolution #2336 #2346 #2345]: #194
201.1629 +#2348 := [unit-resolution #579 #2347 #2344 #2343]: up_29
201.1630 +#2349 := [unit-resolution #2149 #2348]: up_54
201.1631 +#2350 := [unit-resolution #2155 #2348 #2342]: up_59
201.1632 +#2351 := [unit-resolution #1458 #2350 #2349]: false
201.1633 +#2352 := [lemma #2351]: up_35
201.1634 +#2353 := [unit-resolution #1281 #2352]: #291
201.1635 +#2354 := [unit-resolution #1516 #2353]: up_55
201.1636 +#2355 := [unit-resolution #1373 #2354]: #325
201.1637 +#2356 := [unit-resolution #1524 #2355]: up_60
201.1638 +#2357 := [unit-resolution #1453 #2356]: #317
201.1639 +#2358 := [unit-resolution #2149 #2357]: #226
201.1640 +#2359 := [unit-resolution #1448 #2356]: #341
201.1641 +#2217 := (or #308 up_59)
201.1642 +#2218 := [unit-resolution #1939 #2147]: #2217
201.1643 +#2360 := [unit-resolution #2218 #2359]: #308
201.1644 +#2361 := [unit-resolution #1381 #2354]: #316
201.1645 +#2362 := [unit-resolution #759 #2357 #2361 #2360]: up_43
201.1646 +#2363 := [unit-resolution #1235 #2362]: #267
201.1647 +#2364 := [unit-resolution #2199 #2363 #2359]: #186
201.1648 +#1145 := (or #209 #250)
201.1649 +#252 := (or #250 #209)
201.1650 +#1147 := (iff #252 #1145)
201.1651 +#1148 := [rewrite]: #1147
201.1652 +#1144 := [asserted]: #252
201.1653 +#1151 := [mp #1144 #1148]: #1145
201.1654 +#2365 := [unit-resolution #1151 #2352]: #209
201.1655 +#2230 := (or #234 up_54 up_24)
201.1656 +#2231 := [unit-resolution #2025 #2147]: #2230
201.1657 +#2366 := [unit-resolution #2231 #2357 #2365]: #234
201.1658 +#2367 := [unit-resolution #1240 #2362]: #235
201.1659 +#2368 := [unit-resolution #579 #2367 #2366 #2358]: up_21
201.1660 +#2369 := [unit-resolution #2336 #2368 #2364]: up_9
201.1661 +#870 := (or #155 #160)
201.1662 +#163 := (or #160 #155)
201.1663 +#871 := (iff #163 #870)
201.1664 +#872 := [rewrite]: #871
201.1665 +#868 := [asserted]: #163
201.1666 +#875 := [mp #868 #872]: #870
201.1667 +#2370 := [unit-resolution #875 #2369]: #155
201.1668 +#2371 := [unit-resolution #891 #2369]: #166
201.1669 +[unit-resolution #2159 #2371 #2370 #2358 #2357]: false
201.1670 +unsat
   202.1 --- a/src/HOL/SMT/SMT.thy	Tue Oct 20 08:10:47 2009 +0200
   202.2 +++ b/src/HOL/SMT/SMT.thy	Tue Oct 20 10:11:30 2009 +0200
   202.3 @@ -2,50 +2,20 @@
   202.4      Author:     Sascha Boehme, TU Muenchen
   202.5  *)
   202.6  
   202.7 -header {* SMT method using external SMT solvers (CVC3, Yices, Z3) *}
   202.8 +header {* Bindings to several SMT solvers *}
   202.9  
  202.10  theory SMT
  202.11 -imports SMT_Definitions
  202.12 +imports SMT_Base Z3
  202.13  uses
  202.14 -  "Tools/smt_normalize.ML"
  202.15 -  "Tools/smt_monomorph.ML"
  202.16 -  "Tools/smt_translate.ML"
  202.17 -  "Tools/smt_solver.ML"
  202.18 -  "Tools/smtlib_interface.ML"
  202.19    "Tools/cvc3_solver.ML"
  202.20    "Tools/yices_solver.ML"
  202.21 -  "Tools/z3_model.ML"
  202.22 -  "Tools/z3_interface.ML"
  202.23 -  "Tools/z3_solver.ML"
  202.24  begin
  202.25  
  202.26 -setup {*
  202.27 -  SMT_Normalize.setup #>
  202.28 -  SMT_Solver.setup #>
  202.29 -  CVC3_Solver.setup #>
  202.30 -  Yices_Solver.setup #>
  202.31 -  Z3_Solver.setup
  202.32 -*}
  202.33 +setup {* CVC3_Solver.setup #> Yices_Solver.setup *}
  202.34  
  202.35 -ML {*
  202.36 -OuterSyntax.improper_command "smt_status"
  202.37 -  "Show the available SMT solvers and the currently selected solver."
  202.38 -  OuterKeyword.diag
  202.39 -    (Scan.succeed (Toplevel.no_timing o Toplevel.keep (fn state =>
  202.40 -      SMT_Solver.print_setup (Context.Proof (Toplevel.context_of state)))))
  202.41 -*}
  202.42 -
  202.43 -method_setup smt = {*
  202.44 -  let fun solver thms ctxt = SMT_Solver.smt_tac ctxt thms
  202.45 -  in
  202.46 -    Scan.optional (Scan.lift (Args.add -- Args.colon) |-- Attrib.thms) [] >>
  202.47 -    (Method.SIMPLE_METHOD' oo solver)
  202.48 -  end
  202.49 -*} "Applies an SMT solver to the current goal."
  202.50 -
  202.51 -declare [[ smt_solver = z3, smt_timeout = 20, smt_trace = false ]]
  202.52 +declare [[ smt_solver = z3, smt_timeout = 20 ]]
  202.53  declare [[ smt_unfold_defs = true ]]
  202.54 -declare [[ z3_proofs = false ]]
  202.55 +declare [[ smt_trace = false, smt_keep = "", smt_cert = "" ]]
  202.56 +declare [[ z3_proofs = false, z3_options = "" ]]
  202.57  
  202.58  end
  202.59 -
   203.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   203.2 +++ b/src/HOL/SMT/SMT_Base.thy	Tue Oct 20 10:11:30 2009 +0200
   203.3 @@ -0,0 +1,131 @@
   203.4 +(*  Title:      HOL/SMT/SMT_Base.thy
   203.5 +    Author:     Sascha Boehme, TU Muenchen
   203.6 +*)
   203.7 +
   203.8 +header {* SMT-specific definitions and basic tools *}
   203.9 +
  203.10 +theory SMT_Base
  203.11 +imports Real Word "~~/src/HOL/Decision_Procs/Dense_Linear_Order"
  203.12 +uses
  203.13 +  ("Tools/smt_normalize.ML")
  203.14 +  ("Tools/smt_monomorph.ML")
  203.15 +  ("Tools/smt_translate.ML")
  203.16 +  ("Tools/smt_solver.ML")
  203.17 +  ("Tools/smtlib_interface.ML")
  203.18 +begin
  203.19 +
  203.20 +section {* Triggers for quantifier instantiation *}
  203.21 +
  203.22 +text {*
  203.23 +Some SMT solvers support triggers for quantifier instantiation. Each trigger
  203.24 +consists of one ore more patterns. A pattern may either be a list of positive
  203.25 +subterms (the first being tagged by "pat" and the consecutive subterms tagged
  203.26 +by "andpat"), or a list of negative subterms (the first being tagged by "nopat"
  203.27 +and the consecutive subterms tagged by "andpat").
  203.28 +*}
  203.29 +
  203.30 +datatype pattern = Pattern
  203.31 +
  203.32 +definition pat :: "'a \<Rightarrow> pattern"
  203.33 +where "pat _ = Pattern"
  203.34 +
  203.35 +definition nopat :: "bool \<Rightarrow> pattern"
  203.36 +where "nopat _ = Pattern"
  203.37 +
  203.38 +definition andpat :: "pattern \<Rightarrow> 'a \<Rightarrow> pattern" (infixl "andpat" 60)
  203.39 +where "_ andpat _ = Pattern"
  203.40 +
  203.41 +definition trigger :: "pattern list \<Rightarrow> bool \<Rightarrow> bool"
  203.42 +where "trigger _ P = P"
  203.43 +
  203.44 +
  203.45 +section {* Arithmetic *}
  203.46 +
  203.47 +text {*
  203.48 +The sign of @{term "op mod :: int \<Rightarrow> int \<Rightarrow> int"} follows the sign of the
  203.49 +divisor. In contrast to that, the sign of the following operation is that of
  203.50 +the dividend.
  203.51 +*}
  203.52 +
  203.53 +definition rem :: "int \<Rightarrow> int \<Rightarrow> int" (infixl "rem" 70)
  203.54 +where "a rem b = 
  203.55 +  (if (a \<ge> 0 \<and> b < 0) \<or> (a < 0 \<and> b \<ge> 0) then - (a mod b) else a mod b)"
  203.56 +
  203.57 +text {* A decision procedure for linear real arithmetic: *}
  203.58 +
  203.59 +setup {*
  203.60 +  Arith_Data.add_tactic "Ferrante-Rackoff" (K FerranteRackoff.dlo_tac)
  203.61 +*}
  203.62 +
  203.63 +
  203.64 +section {* Bitvectors *}
  203.65 +
  203.66 +text {*
  203.67 +The following definitions provide additional functions not found in HOL-Word.
  203.68 +*}
  203.69 +
  203.70 +definition sdiv :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "sdiv" 70)
  203.71 +where "w1 sdiv w2 = word_of_int (sint w1 div sint w2)"
  203.72 +
  203.73 +definition smod :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "smod" 70)
  203.74 +  (* sign follows divisor *)
  203.75 +where "w1 smod w2 = word_of_int (sint w1 mod sint w2)"
  203.76 +
  203.77 +definition srem :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "srem" 70)
  203.78 +  (* sign follows dividend *)
  203.79 +where "w1 srem w2 = word_of_int (sint w1 rem sint w2)"
  203.80 +
  203.81 +definition bv_shl :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
  203.82 +where "bv_shl w1 w2 = (w1 << unat w2)"
  203.83 +
  203.84 +definition bv_lshr :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
  203.85 +where "bv_lshr w1 w2 = (w1 >> unat w2)"
  203.86 +
  203.87 +definition bv_ashr :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word"
  203.88 +where "bv_ashr w1 w2 = (w1 >>> unat w2)"
  203.89 +
  203.90 +
  203.91 +section {* Higher-Order Encoding *}
  203.92 +
  203.93 +definition "apply" where "apply f x = f x"
  203.94 +
  203.95 +lemmas array_rules = apply_def fun_upd_same fun_upd_other fun_upd_upd ext
  203.96 +
  203.97 +
  203.98 +section {* First-order logic *}
  203.99 +
 203.100 +text {*
 203.101 +Some SMT solver formats require a strict separation between formulas and terms.
 203.102 +The following marker symbols are used internally to separate those categories:
 203.103 +*}
 203.104 +
 203.105 +definition formula :: "bool \<Rightarrow> bool" where "formula x = x"
 203.106 +definition "term" where "term x = x"
 203.107 +
 203.108 +text {*
 203.109 +Predicate symbols also occurring as function symbols are turned into function
 203.110 +symbols by translating atomic formulas into terms:
 203.111 +*}
 203.112 +
 203.113 +abbreviation holds :: "bool \<Rightarrow> bool" where "holds \<equiv> (\<lambda>P. term P = term True)"
 203.114 +
 203.115 +text {*
 203.116 +The following constant represents equivalence, to be treated differently than
 203.117 +the (polymorphic) equality predicate:
 203.118 +*}
 203.119 +
 203.120 +definition iff :: "bool \<Rightarrow> bool \<Rightarrow> bool" (infix "iff" 50) where
 203.121 +  "(x iff y) = (x = y)"
 203.122 +
 203.123 +
 203.124 +section {* Setup *}
 203.125 +
 203.126 +use "Tools/smt_normalize.ML"
 203.127 +use "Tools/smt_monomorph.ML"
 203.128 +use "Tools/smt_translate.ML"
 203.129 +use "Tools/smt_solver.ML"
 203.130 +use "Tools/smtlib_interface.ML"
 203.131 +
 203.132 +setup {* SMT_Normalize.setup #> SMT_Solver.setup *}
 203.133 +
 203.134 +end
   204.1 --- a/src/HOL/SMT/SMT_Definitions.thy	Tue Oct 20 08:10:47 2009 +0200
   204.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   204.3 @@ -1,113 +0,0 @@
   204.4 -(*  Title:      HOL/SMT/SMT_Definitions.thy
   204.5 -    Author:     Sascha Boehme, TU Muenchen
   204.6 -*)
   204.7 -
   204.8 -header {* SMT-specific definitions *}
   204.9 -
  204.10 -theory SMT_Definitions
  204.11 -imports Real Word "~~/src/HOL/Decision_Procs/Dense_Linear_Order"
  204.12 -begin
  204.13 -
  204.14 -section {* Triggers for quantifier instantiation *}
  204.15 -
  204.16 -text {*
  204.17 -Some SMT solvers support triggers for quantifier instantiation. Each trigger
  204.18 -consists of one ore more patterns. A pattern may either be a list of positive
  204.19 -subterms (the first being tagged by "pat" and the consecutive subterms tagged
  204.20 -by "andpat"), or a list of negative subterms (the first being tagged by "nopat"
  204.21 -and the consecutive subterms tagged by "andpat").
  204.22 -*}
  204.23 -
  204.24 -datatype pattern = Pattern
  204.25 -
  204.26 -definition pat :: "'a \<Rightarrow> pattern"
  204.27 -where "pat _ = Pattern"
  204.28 -
  204.29 -definition nopat :: "bool \<Rightarrow> pattern"
  204.30 -where "nopat _ = Pattern"
  204.31 -
  204.32 -definition andpat :: "pattern \<Rightarrow> 'a \<Rightarrow> pattern" (infixl "andpat" 60)
  204.33 -where "_ andpat _ = Pattern"
  204.34 -
  204.35 -definition trigger :: "pattern list \<Rightarrow> bool \<Rightarrow> bool"
  204.36 -where "trigger _ P = P"
  204.37 -
  204.38 -
  204.39 -section {* Arithmetic *}
  204.40 -
  204.41 -text {*
  204.42 -The sign of @{term "op mod :: int \<Rightarrow> int \<Rightarrow> int"} follows the sign of the
  204.43 -divisor. In contrast to that, the sign of the following operation is that of
  204.44 -the dividend.
  204.45 -*}
  204.46 -
  204.47 -definition rem :: "int \<Rightarrow> int \<Rightarrow> int" (infixl "rem" 70)
  204.48 -where "a rem b = 
  204.49 -  (if (a \<ge> 0 \<and> b < 0) \<or> (a < 0 \<and> b \<ge> 0) then - (a mod b) else a mod b)"
  204.50 -
  204.51 -text {* A decision procedure for linear real arithmetic: *}
  204.52 -
  204.53 -setup {*
  204.54 -  Arith_Data.add_tactic "Ferrante-Rackoff" (K FerranteRackoff.dlo_tac)
  204.55 -*}
  204.56 -
  204.57 -
  204.58 -section {* Bitvectors *}
  204.59 -
  204.60 -text {*
  204.61 -The following definitions provide additional functions not found in HOL-Word.
  204.62 -*}
  204.63 -
  204.64 -definition sdiv :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "sdiv" 70)
  204.65 -where "w1 sdiv w2 = word_of_int (sint w1 div sint w2)"
  204.66 -
  204.67 -definition smod :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "smod" 70)
  204.68 -  (* sign follows divisor *)
  204.69 -where "w1 smod w2 = word_of_int (sint w1 mod sint w2)"
  204.70 -
  204.71 -definition srem :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word" (infix "srem" 70)
  204.72 -  (* sign follows dividend *)
  204.73 -where "w1 srem w2 = word_of_int (sint w1 rem sint w2)"
  204.74 -
  204.75 -definition bv_shl :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
  204.76 -where "bv_shl w1 w2 = (w1 << unat w2)"
  204.77 -
  204.78 -definition bv_lshr :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
  204.79 -where "bv_lshr w1 w2 = (w1 >> unat w2)"
  204.80 -
  204.81 -definition bv_ashr :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word"
  204.82 -where "bv_ashr w1 w2 = (w1 >>> unat w2)"
  204.83 -
  204.84 -
  204.85 -section {* Higher-order encoding *}
  204.86 -
  204.87 -definition "apply" where "apply f x = f x"
  204.88 -
  204.89 -
  204.90 -section {* First-order logic *}
  204.91 -
  204.92 -text {*
  204.93 -Some SMT solver formats require a strict separation between formulas and terms.
  204.94 -The following marker symbols are used internally to separate those categories:
  204.95 -*}
  204.96 -
  204.97 -definition formula :: "bool \<Rightarrow> bool" where "formula x = x"
  204.98 -definition "term" where "term x = x"
  204.99 -
 204.100 -text {*
 204.101 -Predicate symbols also occurring as function symbols are turned into function
 204.102 -symbols by translating atomic formulas into terms:
 204.103 -*}
 204.104 -
 204.105 -abbreviation holds :: "bool \<Rightarrow> bool" where "holds \<equiv> (\<lambda>P. term P = term True)"
 204.106 -
 204.107 -text {*
 204.108 -The following constant represents equivalence, to be treated differently than
 204.109 -the (polymorphic) equality predicate:
 204.110 -*}
 204.111 -
 204.112 -definition iff :: "bool \<Rightarrow> bool \<Rightarrow> bool" (infix "iff" 50) where
 204.113 -  "(x iff y) = (x = y)"
 204.114 -
 204.115 -end
 204.116 -
   205.1 --- a/src/HOL/SMT/Tools/cvc3_solver.ML	Tue Oct 20 08:10:47 2009 +0200
   205.2 +++ b/src/HOL/SMT/Tools/cvc3_solver.ML	Tue Oct 20 10:11:30 2009 +0200
   205.3 @@ -27,10 +27,8 @@
   205.4  
   205.5  fun raise_cex real ctxt recon ls =
   205.6    let
   205.7 -    val start = String.isPrefix "%Satisfiable  Variable Assignment: %"
   205.8 -    val index = find_index start ls
   205.9 -    val ls = if index > 0 then Library.drop (index + 1, ls) else []
  205.10 -    val p = Pretty.big_list (cex_kind real ^ " found:") (map Pretty.str ls)
  205.11 +    val ls' = filter_out (String.isPrefix "%") ls
  205.12 +    val p = Pretty.big_list (cex_kind real ^ " found:") (map Pretty.str ls')
  205.13    in error (Pretty.string_of p) end
  205.14  
  205.15  fun core_oracle (SMT_Solver.ProofData {context, output, recon, ...}) =
  205.16 @@ -47,9 +45,9 @@
  205.17  
  205.18  fun smtlib_solver oracle _ =
  205.19    SMT_Solver.SolverConfig {
  205.20 -    name = {env_var=env_var, remote_name=solver_name},
  205.21 +    command = {env_var=env_var, remote_name=solver_name},
  205.22 +    arguments = options,
  205.23      interface = SMTLIB_Interface.interface,
  205.24 -    arguments = options,
  205.25      reconstruct = oracle }
  205.26  
  205.27  val setup =
   206.1 --- a/src/HOL/SMT/Tools/smt_normalize.ML	Tue Oct 20 08:10:47 2009 +0200
   206.2 +++ b/src/HOL/SMT/Tools/smt_normalize.ML	Tue Oct 20 10:11:30 2009 +0200
   206.3 @@ -273,59 +273,78 @@
   206.4    fun inst_meta cT = Thm.instantiate_cterm ([(meta_eqT, cT)], []) meta_eq
   206.5    fun mk_meta_eq ct cu = Thm.mk_binop (inst_meta (Thm.ctyp_of_term ct)) ct cu
   206.6  
   206.7 -  fun lambda_conv conv =
   206.8 -    let
   206.9 -      fun sub_conv cvs ctxt ct =
  206.10 -        (case Thm.term_of ct of
  206.11 -          Const (@{const_name All}, _) $ Abs _ => quant_conv cvs ctxt
  206.12 -        | Const (@{const_name Ex}, _) $ Abs _ => quant_conv cvs ctxt
  206.13 -        | Const _ $ Abs _ => Conv.arg_conv (at_lambda_conv cvs ctxt)
  206.14 -        | Const (@{const_name Let}, _) $ _ $ Abs _ => Conv.combination_conv
  206.15 -            (Conv.arg_conv (sub_conv cvs ctxt)) (abs_conv cvs ctxt)
  206.16 -        | Abs _ => at_lambda_conv cvs ctxt
  206.17 -        | _ $ _ => Conv.comb_conv (sub_conv cvs ctxt)
  206.18 -        | _ => Conv.all_conv) ct
  206.19 -      and abs_conv cvs = Conv.abs_conv (fn (cv, cx) => sub_conv (cv::cvs) cx)
  206.20 -      and quant_conv cvs ctxt = Conv.arg_conv (abs_conv cvs ctxt)
  206.21 -      and at_lambda_conv cvs ctxt = abs_conv cvs ctxt then_conv conv cvs ctxt
  206.22 -    in sub_conv [] end
  206.23 +  val fresh_name = yield_singleton Name.variants
  206.24  
  206.25    fun used_vars cvs ct =
  206.26      let
  206.27        val lookup = AList.lookup (op aconv) (map (` Thm.term_of) cvs)
  206.28        val add = (fn (SOME ct) => insert (op aconvc) ct | _ => I)
  206.29      in Term.fold_aterms (add o lookup) (Thm.term_of ct) [] end
  206.30 +  fun make_def cvs eq = Thm.symmetric (fold norm_meta_def cvs eq)
  206.31 +  fun add_def ct thm = Termtab.update (Thm.term_of ct, (serial (), thm))
  206.32  
  206.33 -  val rev_int_fst_ord = rev_order o int_ord o pairself fst
  206.34 -  fun ordered_values tab =
  206.35 -    Termtab.fold (fn (_, x) => OrdList.insert rev_int_fst_ord x) tab []
  206.36 -    |> map snd
  206.37 +  fun replace ctxt cvs ct (cx as (nctxt, defs)) =
  206.38 +    let
  206.39 +      val cvs' = used_vars cvs ct
  206.40 +      val ct' = fold Thm.cabs cvs' ct
  206.41 +      val mk_repl = fold (fn ct => fn cu => Thm.capply cu ct) cvs'
  206.42 +    in
  206.43 +      (case Termtab.lookup defs (Thm.term_of ct') of
  206.44 +        SOME (_, eq) => (make_def cvs' eq, cx)
  206.45 +      | NONE =>
  206.46 +          let
  206.47 +            val {t, T, ...} = Thm.rep_cterm ct'
  206.48 +            val (n, nctxt') = fresh_name "" nctxt
  206.49 +            val eq = Thm.assume (mk_meta_eq (cert ctxt (Free (n, T))) ct')
  206.50 +          in (make_def cvs' eq, (nctxt', add_def ct' eq defs)) end)
  206.51 +    end
  206.52 +
  206.53 +  fun none ct cx = (Thm.reflexive ct, cx)
  206.54 +  fun in_comb f g ct cx =
  206.55 +    let val (cu1, cu2) = Thm.dest_comb ct
  206.56 +    in cx |> f cu1 ||>> g cu2 |>> uncurry Thm.combination end
  206.57 +  fun in_arg f = in_comb none f
  206.58 +  fun in_abs f cvs ct (nctxt, defs) =
  206.59 +    let
  206.60 +      val (n, nctxt') = fresh_name Name.uu nctxt
  206.61 +      val (cv, cu) = Thm.dest_abs (SOME n) ct
  206.62 +    in f (cv :: cvs) cu (nctxt', defs) |>> Thm.abstract_rule n cv end
  206.63 +
  206.64 +  fun replace_lambdas ctxt =
  206.65 +    let
  206.66 +      fun repl cvs ct =
  206.67 +        (case Thm.term_of ct of
  206.68 +          Const (@{const_name All}, _) $ Abs _ => in_arg (in_abs repl cvs)
  206.69 +        | Const (@{const_name Ex}, _) $ Abs _ => in_arg (in_abs repl cvs)
  206.70 +        | Const _ $ Abs _ => in_arg (at_lambda cvs)
  206.71 +        | Const (@{const_name Let}, _) $ _ $ Abs _ =>
  206.72 +            in_comb (in_arg (repl cvs)) (in_abs repl cvs)
  206.73 +        | Abs _ => at_lambda cvs
  206.74 +        | _ $ _ => in_comb (repl cvs) (repl cvs)
  206.75 +        | _ => none) ct
  206.76 +      and at_lambda cvs ct cx =
  206.77 +        let
  206.78 +          val (thm1, cx') = in_abs repl cvs ct cx
  206.79 +          val (thm2, cx'') = replace ctxt cvs (Thm.rhs_of thm1) cx'
  206.80 +        in (Thm.transitive thm1 thm2, cx'') end
  206.81 +    in repl [] end
  206.82  in
  206.83  fun lift_lambdas ctxt thms =
  206.84    let
  206.85      val declare_frees = fold (Thm.fold_terms Term.declare_term_frees)
  206.86 -    val names = Unsynchronized.ref (declare_frees thms (Name.make_context []))
  206.87 -    val fresh_name = Unsynchronized.change_result names o yield_singleton Name.variants
  206.88 +    fun rewrite f thm cx =
  206.89 +      let val (thm', cx') = f (Thm.cprop_of thm) cx
  206.90 +      in (Thm.equal_elim thm' thm, cx') end
  206.91  
  206.92 -    val defs = Unsynchronized.ref (Termtab.empty : (int * thm) Termtab.table)
  206.93 -    fun add_def t thm = Unsynchronized.change defs (Termtab.update (t, (serial (), thm)))
  206.94 -    fun make_def cvs eq = Thm.symmetric (fold norm_meta_def cvs eq)
  206.95 -    fun def_conv cvs ctxt ct =
  206.96 -      let
  206.97 -        val cvs' = used_vars cvs ct
  206.98 -        val ct' = fold Thm.cabs cvs' ct
  206.99 -      in
 206.100 -        (case Termtab.lookup (!defs) (Thm.term_of ct') of
 206.101 -          SOME (_, eq) => make_def cvs' eq
 206.102 -        | NONE =>
 206.103 -            let
 206.104 -              val {t, T, ...} = Thm.rep_cterm ct'
 206.105 -              val eq = mk_meta_eq (cert ctxt (Free (fresh_name "", T))) ct'
 206.106 -              val thm = Thm.assume eq
 206.107 -            in (add_def t thm; make_def cvs' thm) end)
 206.108 -      end
 206.109 -    val thms' = map (Conv.fconv_rule (lambda_conv def_conv ctxt)) thms
 206.110 -    val eqs = ordered_values (!defs)
 206.111 +    val rev_int_fst_ord = rev_order o int_ord o pairself fst
 206.112 +    fun ordered_values tab =
 206.113 +      Termtab.fold (fn (_, x) => OrdList.insert rev_int_fst_ord x) tab []
 206.114 +      |> map snd
 206.115 +
 206.116 +    val (thms', (_, defs)) =
 206.117 +      (declare_frees thms (Name.make_context []), Termtab.empty)
 206.118 +      |> fold_map (rewrite (replace_lambdas ctxt)) thms
 206.119 +    val eqs = ordered_values defs
 206.120    in
 206.121      (maps (#hyps o Thm.crep_thm) eqs, map (normalize_rule ctxt) eqs @ thms')
 206.122    end
   207.1 --- a/src/HOL/SMT/Tools/smt_solver.ML	Tue Oct 20 08:10:47 2009 +0200
   207.2 +++ b/src/HOL/SMT/Tools/smt_solver.ML	Tue Oct 20 10:11:30 2009 +0200
   207.3 @@ -19,9 +19,9 @@
   207.4      assms: thm list option }
   207.5  
   207.6    datatype solver_config = SolverConfig of {
   207.7 -    name: {env_var: string, remote_name: string},
   207.8 +    command: {env_var: string, remote_name: string},
   207.9 +    arguments: string list,
  207.10      interface: interface,
  207.11 -    arguments: string list,
  207.12      reconstruct: proof_data -> thm }
  207.13  
  207.14    (*options*)
  207.15 @@ -29,6 +29,8 @@
  207.16    val with_timeout: Proof.context -> ('a -> 'b) -> 'a -> 'b
  207.17    val trace: bool Config.T
  207.18    val trace_msg: Proof.context -> ('a -> string) -> 'a -> unit
  207.19 +  val keep: string Config.T
  207.20 +  val cert: string Config.T
  207.21  
  207.22    (*solvers*)
  207.23    type solver = Proof.context -> thm list -> thm
  207.24 @@ -67,9 +69,9 @@
  207.25    assms: thm list option }
  207.26  
  207.27  datatype solver_config = SolverConfig of {
  207.28 -  name: {env_var: string, remote_name: string},
  207.29 +  command: {env_var: string, remote_name: string},
  207.30 +  arguments: string list,
  207.31    interface: interface,
  207.32 -  arguments: string list,
  207.33    reconstruct: proof_data -> thm }
  207.34  
  207.35  
  207.36 @@ -86,17 +88,28 @@
  207.37  fun trace_msg ctxt f x =
  207.38    if Config.get ctxt trace then tracing (f x) else ()
  207.39  
  207.40 +val (keep, setup_keep) = Attrib.config_string "smt_keep" ""
  207.41 +val (cert, setup_cert) = Attrib.config_string "smt_cert" ""
  207.42 +
  207.43  
  207.44  (* interface to external solvers *)
  207.45  
  207.46  local
  207.47  
  207.48 -fun with_tmp_files f x =
  207.49 +fun with_files ctxt f x =
  207.50    let
  207.51 -    fun tmp_path () = File.tmp_path (Path.explode ("smt-" ^ serial_string ()))
  207.52 -    val in_path = tmp_path () and out_path = tmp_path ()
  207.53 -    val y = Exn.capture (f in_path out_path) x
  207.54 -    val _ = try File.rm in_path and _ = try File.rm out_path
  207.55 +    fun make_names n = (n, n ^ ".proof")
  207.56 +
  207.57 +    val keep' = Config.get ctxt keep
  207.58 +    val paths as (problem_path, proof_path) =
  207.59 +      if keep' <> "" andalso File.exists (Path.dir (Path.explode keep'))
  207.60 +      then pairself Path.explode (make_names keep')
  207.61 +      else pairself (File.tmp_path o Path.explode)
  207.62 +        (make_names ("smt-" ^ serial_string ()))
  207.63 +
  207.64 +    val y = Exn.capture (f problem_path proof_path) x
  207.65 +
  207.66 +    val _ = if keep' = "" then (pairself (try File.rm) paths; ()) else ()
  207.67    in Exn.release y end
  207.68  
  207.69  fun run in_path out_path (ctxt, cmd, output) =
  207.70 @@ -115,12 +128,18 @@
  207.71  fun run_solver ctxt {env_var, remote_name} args output =
  207.72    let
  207.73      val qf = File.shell_path and qq = File.shell_quote
  207.74 -    val path = getenv env_var and remote = getenv "REMOTE_SMT_SOLVER"
  207.75 +    val qs = qf o Path.explode
  207.76 +    val local_name = getenv env_var
  207.77 +    val cert_name = Config.get ctxt cert
  207.78 +    val remote = qs (getenv "REMOTE_SMT_SOLVER")
  207.79 +    val cert_script = qs (getenv "CERT_SMT_SOLVER")
  207.80      fun cmd f1 f2 =
  207.81 -      if path <> ""
  207.82 -      then map qq (path :: args) @ [qf f1, ">", qf f2]
  207.83 -      else "perl -w" :: map qq (remote :: remote_name :: args) @ [qf f1, qf f2]
  207.84 -  in with_tmp_files run (ctxt, space_implode " " oo cmd, output) end
  207.85 +      if cert_name <> ""
  207.86 +      then "perl -w" :: [cert_script, qs cert_name, qf f1, ">", qf f2]
  207.87 +      else if local_name <> ""
  207.88 +      then qs local_name :: map qq args @ [qf f1, ">", qf f2]
  207.89 +      else "perl -w" :: remote :: map qq (remote_name :: args) @ [qf f1, qf f2]
  207.90 +  in with_files ctxt run (ctxt, space_implode " " oo cmd, output) end
  207.91  
  207.92  end
  207.93  
  207.94 @@ -129,12 +148,12 @@
  207.95  
  207.96  fun gen_solver solver ctxt prems =
  207.97    let
  207.98 -    val SolverConfig {name, interface, arguments, reconstruct} = solver ctxt
  207.99 +    val SolverConfig {command, arguments, interface, reconstruct} = solver ctxt
 207.100      val Interface {normalize=nc, translate=tc} = interface
 207.101      val thy = ProofContext.theory_of ctxt
 207.102    in
 207.103      SMT_Normalize.normalize nc ctxt prems
 207.104 -    ||> run_solver ctxt name arguments o SMT_Translate.translate tc thy
 207.105 +    ||> run_solver ctxt command arguments o SMT_Translate.translate tc thy
 207.106      ||> reconstruct o make_proof_data ctxt
 207.107      |-> fold SMT_Normalize.discharge_definition
 207.108    end
 207.109 @@ -196,8 +215,8 @@
 207.110  
 207.111  fun pretty_counterex ctxt (real, ex) =
 207.112    let
 207.113 -    val msg = if real then "Counterexample found:"
 207.114 -      else "Potential counterexample found:"
 207.115 +    val msg = if real then "SMT: counterexample found:"
 207.116 +      else "SMT: potential counterexample found:"
 207.117      val cex = if null ex then [Pretty.str "(no assignments)"]
 207.118        else map (Syntax.pretty_term ctxt) ex
 207.119    in Pretty.string_of (Pretty.big_list msg cex) end
 207.120 @@ -212,6 +231,11 @@
 207.121  
 207.122  val smt_tac = smt_tac' false
 207.123  
 207.124 +val smt_method =
 207.125 +  Scan.optional (Scan.lift (Args.add -- Args.colon) |-- Attrib.thms) [] >>
 207.126 +  (fn thms => fn ctxt => METHOD (fn facts =>
 207.127 +    HEADGOAL (smt_tac ctxt (thms @ facts))))
 207.128 +
 207.129  
 207.130  (* setup *)
 207.131  
 207.132 @@ -221,7 +245,11 @@
 207.133        (Thm.declaration_attribute o K o select_solver))
 207.134      "SMT solver configuration" #>
 207.135    setup_timeout #>
 207.136 -  setup_trace
 207.137 +  setup_trace #>
 207.138 +  setup_keep #>
 207.139 +  setup_cert #>
 207.140 +  Method.setup (Binding.name "smt") smt_method
 207.141 +    "Applies an SMT solver to the current goal."
 207.142  
 207.143  fun print_setup gen =
 207.144    let
 207.145 @@ -243,4 +271,10 @@
 207.146        Pretty.big_list "Solver-specific settings:" infos])
 207.147    end
 207.148  
 207.149 +val _ = OuterSyntax.improper_command "smt_status"
 207.150 +  "Show the available SMT solvers and the currently selected solver."
 207.151 +  OuterKeyword.diag
 207.152 +    (Scan.succeed (Toplevel.no_timing o Toplevel.keep (fn state =>
 207.153 +      print_setup (Context.Proof (Toplevel.context_of state)))))
 207.154 +
 207.155  end
   208.1 --- a/src/HOL/SMT/Tools/yices_solver.ML	Tue Oct 20 08:10:47 2009 +0200
   208.2 +++ b/src/HOL/SMT/Tools/yices_solver.ML	Tue Oct 20 10:11:30 2009 +0200
   208.3 @@ -40,9 +40,9 @@
   208.4  
   208.5  fun smtlib_solver oracle _ =
   208.6    SMT_Solver.SolverConfig {
   208.7 -    name = {env_var=env_var, remote_name=solver_name},
   208.8 +    command = {env_var=env_var, remote_name=solver_name},
   208.9 +    arguments = options,
  208.10      interface = SMTLIB_Interface.interface,
  208.11 -    arguments = options,
  208.12      reconstruct = oracle }
  208.13  
  208.14  val setup =
   209.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   209.2 +++ b/src/HOL/SMT/Tools/z3_proof.ML	Tue Oct 20 10:11:30 2009 +0200
   209.3 @@ -0,0 +1,247 @@
   209.4 +(*  Title:      HOL/SMT/Tools/z3_proof.ML
   209.5 +    Author:     Sascha Boehme, TU Muenchen
   209.6 +
   209.7 +Proof reconstruction for proofs found by Z3.
   209.8 +*)
   209.9 +
  209.10 +signature Z3_PROOF =
  209.11 +sig
  209.12 +  val reconstruct: Proof.context -> thm list option -> SMT_Translate.recon ->
  209.13 +    string list -> thm
  209.14 +end
  209.15 +
  209.16 +structure Z3_Proof: Z3_PROOF =
  209.17 +struct
  209.18 +
  209.19 +structure T = Z3_Proof_Terms
  209.20 +structure R = Z3_Proof_Rules
  209.21 +
  209.22 +fun z3_exn msg = error ("Z3 proof reconstruction: " ^ msg)
  209.23 +
  209.24 +
  209.25 +fun lift f (x, y) = apsnd (pair x) (f y)
  209.26 +fun lift' f v (x, y) = apsnd (rpair y) (f v x)
  209.27 +
  209.28 +fun $$ s = lift (Scan.$$ s)
  209.29 +fun this s = lift (Scan.this_string s)
  209.30 +
  209.31 +fun blank s = lift (Scan.many1 Symbol.is_ascii_blank) s
  209.32 +
  209.33 +fun par scan = $$ "(" |-- scan --| $$ ")"
  209.34 +fun bra scan = $$ "[" |-- scan --| $$ "]"
  209.35 +
  209.36 +val digit = (fn
  209.37 +  "0" => SOME 0 | "1" => SOME 1 | "2" => SOME 2 | "3" => SOME 3 |
  209.38 +  "4" => SOME 4 | "5" => SOME 5 | "6" => SOME 6 | "7" => SOME 7 |
  209.39 +  "8" => SOME 8 | "9" => SOME 9 | _ => NONE)
  209.40 +
  209.41 +val nat_num = Scan.repeat1 (Scan.some digit) >>
  209.42 +  (fn ds => fold (fn d => fn i => i * 10 + d) ds 0)
  209.43 +val int_num = Scan.optional (Scan.$$ "-" >> K (fn i => ~i)) I :|--
  209.44 +  (fn sign => nat_num >> sign)
  209.45 +
  209.46 +val is_char = Symbol.is_ascii_letter orf Symbol.is_ascii_digit orf
  209.47 +  member (op =) (explode "_+*-/%~=<>$&|?!.@^#")
  209.48 +val name = Scan.many1 is_char >> implode
  209.49 +
  209.50 +datatype sym = Sym of string * sym list
  209.51 +
  209.52 +datatype context = Context of {
  209.53 +  Ttab: typ Symtab.table,
  209.54 +  ttab: Thm.cterm Symtab.table,
  209.55 +  etab: T.preterm Inttab.table,
  209.56 +  ptab: R.proof Inttab.table,
  209.57 +  nctxt: Name.context }
  209.58 +
  209.59 +fun make_context (Ttab, ttab, etab, ptab, nctxt) =
  209.60 +  Context {Ttab=Ttab, ttab=ttab, etab=etab, ptab=ptab, nctxt=nctxt}
  209.61 +
  209.62 +fun empty_context thy (SMT_Translate.Recon {typs, terms=ttab}) =
  209.63 +  let
  209.64 +    val ttab' = Symtab.map (fn @{term True} => @{term "~False"} | t => t) ttab
  209.65 +    val ns = Symtab.fold (Term.add_free_names o snd) ttab' []
  209.66 +    val nctxt = Name.make_context ns
  209.67 +    val tt = Symtab.map (Thm.cterm_of thy) ttab'
  209.68 +  in make_context (typs, tt, Inttab.empty, Inttab.empty, nctxt) end
  209.69 +
  209.70 +fun map_context f (Context {Ttab, ttab, etab, ptab, nctxt}) =
  209.71 +  make_context (f (Ttab, ttab, etab, ptab, nctxt))
  209.72 +
  209.73 +fun map_type_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
  209.74 +  (f Ttab, ttab, etab, ptab, nctxt))
  209.75 +
  209.76 +fun map_term_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
  209.77 +  (Ttab, f ttab, etab, ptab, nctxt))
  209.78 +
  209.79 +fun map_expr_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
  209.80 +  (Ttab, ttab, f etab, ptab, nctxt))
  209.81 +
  209.82 +fun map_proof_tab f = map_context (fn (Ttab, ttab, etab, ptab, nctxt) =>
  209.83 +  (Ttab, ttab, etab, f ptab, nctxt))
  209.84 +
  209.85 +val free_prefix = "f"
  209.86 +
  209.87 +fun fresh_name (cx as Context {nctxt, ...}) =
  209.88 +  let val (n, nctxt') = yield_singleton Name.variants free_prefix nctxt
  209.89 +  in
  209.90 +    (n, map_context (fn (Ttab, ttab, etab, ptab, _) =>
  209.91 +      (Ttab, ttab, etab, ptab, nctxt')) cx)
  209.92 +  end
  209.93 +
  209.94 +fun typ_of_sort name (cx as Context {Ttab, ...}) =
  209.95 +  (case Symtab.lookup Ttab name of
  209.96 +    SOME T => (T, cx)
  209.97 +  | _ => cx |> fresh_name |-> (fn n =>
  209.98 +      let val T = TFree ("'" ^ n, @{sort type})
  209.99 +      in pair T o map_type_tab (Symtab.update (name, T)) end))
 209.100 +
 209.101 +fun lookup_expr id (cx as Context {etab, ...}) =
 209.102 +  (case Inttab.lookup etab id of
 209.103 +    SOME e => (e, cx)
 209.104 +  | _ => z3_exn ("unknown term id: " ^ quote (string_of_int id)))
 209.105 +
 209.106 +fun add_expr k t = map_expr_tab (Inttab.update (k, t))
 209.107 +
 209.108 +fun add_proof thy k ((r, ps), t) (cx as Context {nctxt, ...}) =
 209.109 +  let val p = R.make_proof r ps (T.compile thy nctxt t)
 209.110 +  in (k, map_proof_tab (Inttab.update (k, p)) cx) end
 209.111 +
 209.112 +fun mk_app app (cx as Context {ttab, ...}) =
 209.113 +  let
 209.114 +    val mk = 
 209.115 +      (fn
 209.116 +        (Sym ("true", _), _) => T.mk_true
 209.117 +      | (Sym ("false", _), _) => T.mk_false
 209.118 +      | (Sym ("=", _), [t, u]) => T.mk_eq t u
 209.119 +      | (Sym ("distinct", _), ts) => T.mk_distinct ts
 209.120 +      | (Sym ("ite", _), [s, t, u]) => T.mk_if s t u
 209.121 +      | (Sym ("and", _), ts) => T.mk_and ts
 209.122 +      | (Sym ("or", _), ts) => T.mk_or ts
 209.123 +      | (Sym ("iff", _), [t, u]) => T.mk_iff t u
 209.124 +      | (Sym ("xor", _), [t, u]) => T.mk_not (T.mk_iff t u)
 209.125 +      | (Sym ("not", _), [t]) => T.mk_not t
 209.126 +      | (Sym ("implies", _), [t, u]) => T.mk_implies t u
 209.127 +      | (Sym ("~", _), [t, u]) => T.mk_eq t u
 209.128 +      | (Sym ("<", _), [t, u]) => T.mk_lt t u
 209.129 +      | (Sym ("<=", _), [t, u]) => T.mk_le t u
 209.130 +      | (Sym (">", _), [t, u]) => T.mk_lt u t
 209.131 +      | (Sym (">=", _), [t, u]) => T.mk_le u t
 209.132 +      | (Sym ("+", _), [t, u]) => T.mk_add t u
 209.133 +      | (Sym ("-", _), [t, u]) => T.mk_sub t u
 209.134 +      | (Sym ("-", _), [t]) => T.mk_uminus t
 209.135 +      | (Sym ("*", _), [t, u]) => T.mk_mul t u
 209.136 +      | (Sym ("/", _), [t, u]) => T.mk_real_div t u
 209.137 +      | (Sym ("div", _), [t, u]) => T.mk_int_div t u
 209.138 +      | (Sym ("mod", _), [t, u]) => T.mk_mod t u
 209.139 +      | (Sym ("rem", _), [t, u]) => T.mk_rem t u
 209.140 +      | (Sym ("select", _), [m, k]) => T.mk_access m k
 209.141 +      | (Sym ("store", _), [m, k, v]) => T.mk_update m k v
 209.142 +      | (Sym ("pattern", _), _) => T.mk_true
 209.143 +      | (Sym (n, _), ts) =>
 209.144 +          (case Symtab.lookup ttab n of
 209.145 +            SOME ct => T.mk_fun ct ts
 209.146 +          | NONE => z3_exn ("unknown function: " ^ quote n)))
 209.147 +  in (mk app, cx) end
 209.148 +
 209.149 +fun add_decl thy (n, T) (cx as Context {ttab, ...}) =
 209.150 +  (case Symtab.lookup ttab n of
 209.151 +    SOME _ => cx
 209.152 +  | _ => cx |> fresh_name |-> (fn n' =>
 209.153 +      map_term_tab (Symtab.update (n, Thm.cterm_of thy (Free (n', T))))))
 209.154 +
 209.155 +
 209.156 +fun sep scan_sep scan = scan ::: Scan.repeat (scan_sep |-- scan)
 209.157 +fun bsep scan = Scan.repeat (blank |-- scan)
 209.158 +fun bsep1 scan = Scan.repeat1 (blank |-- scan)
 209.159 +
 209.160 +val id = Scan.$$ "#" |-- int_num
 209.161 +
 209.162 +fun sym s =
 209.163 +  (lift name -- Scan.optional (bra (sep ($$ ":") sym)) [] >> Sym) s
 209.164 +
 209.165 +fun sort st = Scan.first [
 209.166 +  this "bool" >> K @{typ bool},
 209.167 +  this "int" >> K @{typ int},
 209.168 +  this "real" >> K @{typ real},
 209.169 +  this "bv" |-- bra (lift int_num) >> T.wordT,
 209.170 +  this "array" |-- bra (sort --| $$ ":" -- sort) >> (op -->),
 209.171 +  par (this "->" |-- bsep1 sort) >> ((op --->) o split_last),
 209.172 +  lift name #-> lift' typ_of_sort] st
 209.173 +
 209.174 +fun bound thy =
 209.175 +  par (this ":var" -- blank |-- lift int_num --| blank -- sort) >>
 209.176 +  uncurry (T.mk_bound thy)
 209.177 +
 209.178 +val number = 
 209.179 +  int_num -- Scan.option (Scan.$$ "/" |-- int_num) --|
 209.180 +  Scan.this_string "::" :|-- (fn num as (n, _) =>
 209.181 +    Scan.this_string "int" >> K (T.mk_int_num n) ||
 209.182 +    Scan.this_string "real" >> K (T.mk_real_frac_num num))
 209.183 +
 209.184 +fun bv_number thy =
 209.185 +  this "bv" |-- bra (lift (int_num --| Scan.$$ ":" -- int_num)) >>
 209.186 +  uncurry (T.mk_bv_num thy)
 209.187 +
 209.188 +val constant = sym #-> lift' (mk_app o rpair [])
 209.189 +
 209.190 +fun arg thy = Scan.first [lift id #-> lift' lookup_expr,
 209.191 +  lift number, bv_number thy, constant]
 209.192 +
 209.193 +fun application thy =
 209.194 +  par (sym -- bsep1 (arg thy)) #-> lift' mk_app
 209.195 +
 209.196 +val variables =
 209.197 +  par (this "vars" |-- bsep1 (par ((lift name >> K "x") --| blank -- sort)))
 209.198 +val patterns = bsep (par ((this ":pat" || this ":nopat") |-- bsep1 (lift id)))
 209.199 +val quant_kind =
 209.200 +  this "forall" >> K T.mk_forall || this "exists" >> K T.mk_exists
 209.201 +fun quantifier thy = par (quant_kind --| blank --
 209.202 +  variables --| patterns --| blank -- arg thy) >>
 209.203 +  (fn ((q, vs), body) => fold_rev (q thy) vs body)
 209.204 +
 209.205 +fun expr thy k = Scan.first [bound thy, quantifier thy, application thy,
 209.206 +  lift number, bv_number thy, constant] #-> apfst o add_expr k
 209.207 +
 209.208 +fun rule_name name =
 209.209 +  (case R.rule_of_string name of
 209.210 +    SOME r => r
 209.211 +  | NONE => z3_exn ("unknown proof rule: " ^ quote name))
 209.212 +
 209.213 +fun rule thy k =
 209.214 +  bra (lift (name >> rule_name) -- bsep (lift id)) --|
 209.215 +  ($$ ":" -- blank) -- arg thy #-> lift' (add_proof thy k)
 209.216 +
 209.217 +fun decl thy = ((this "decl" -- blank) |-- lift name --|
 209.218 +  (blank -- this "::" -- blank) -- sort) #-> apfst o add_decl thy
 209.219 +
 209.220 +fun def st = (lift id --| (blank -- this ":=" -- blank)) st
 209.221 +
 209.222 +fun node thy =
 209.223 +  decl thy #> pair NONE ||
 209.224 +  def :|-- (fn k => expr thy k #> pair NONE || rule thy k #>> K NONE) ||
 209.225 +  rule thy ~1 #>> SOME
 209.226 +
 209.227 +fun parse_error line_no ((_, xs), _) =
 209.228 +  "parse error at line " ^ string_of_int line_no ^ ": " ^ quote (implode xs)
 209.229 +
 209.230 +fun handle_errors ln scan = Scan.error (Scan.!! (parse_error ln) scan)
 209.231 +
 209.232 +fun parse_line thy l (st as (stop, line_no, cx)) =
 209.233 +  if is_some stop then st
 209.234 +  else
 209.235 +    (cx, explode l)
 209.236 +    |> handle_errors line_no (Scan.finite' Symbol.stopper (node thy))
 209.237 +    |> (fn (stop', (cx', _)) => (stop', line_no + 1, cx'))
 209.238 +
 209.239 +fun reconstruct ctxt assms recon output =
 209.240 +  let
 209.241 +    val _ = T.var_prefix <> free_prefix orelse error "Same prefixes"
 209.242 +
 209.243 +    val thy = ProofContext.theory_of ctxt
 209.244 +  in
 209.245 +    (case fold (parse_line thy) output (NONE, 1, empty_context thy recon) of
 209.246 +      (SOME p, _, Context {ptab, ...}) => R.prove ctxt assms ptab p
 209.247 +    | _ => z3_exn "bad proof")
 209.248 +  end
 209.249 +
 209.250 +end
   210.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   210.2 +++ b/src/HOL/SMT/Tools/z3_proof_rules.ML	Tue Oct 20 10:11:30 2009 +0200
   210.3 @@ -0,0 +1,1319 @@
   210.4 +(*  Title:      HOL/SMT/Tools/z3_proof_rules.ML
   210.5 +    Author:     Sascha Boehme, TU Muenchen
   210.6 +
   210.7 +Z3 proof rules and their reconstruction.
   210.8 +*)
   210.9 +
  210.10 +signature Z3_PROOF_RULES =
  210.11 +sig
  210.12 +  (*proof rule names*)
  210.13 +  type rule  
  210.14 +  val rule_of_string: string -> rule option
  210.15 +  val string_of_rule: rule -> string
  210.16 +
  210.17 +  (*proof reconstruction*)
  210.18 +  type proof
  210.19 +  val make_proof: rule -> int list -> Thm.cterm * Thm.cterm list -> proof
  210.20 +  val prove: Proof.context -> thm list option -> proof Inttab.table -> int ->
  210.21 +    thm
  210.22 +
  210.23 +  (*setup*)
  210.24 +  val setup: theory -> theory
  210.25 +end
  210.26 +
  210.27 +structure Z3_Proof_Rules: Z3_PROOF_RULES =
  210.28 +struct
  210.29 +
  210.30 +structure T = Z3_Proof_Terms
  210.31 +
  210.32 +fun z3_exn msg = error ("Z3 proof reconstruction: " ^ msg)
  210.33 +
  210.34 +
  210.35 +(* proof rule names *)
  210.36 +
  210.37 +datatype rule = TrueAxiom | Asserted | Goal | ModusPonens | Reflexivity |
  210.38 +  Symmetry | Transitivity | TransitivityStar | Monotonicity | QuantIntro |
  210.39 +  Distributivity | AndElim | NotOrElim | Rewrite | RewriteStar | PullQuant |
  210.40 +  PullQuantStar | PushQuant | ElimUnusedVars | DestEqRes | QuantInst |
  210.41 +  Hypothesis | Lemma | UnitResolution | IffTrue | IffFalse | Commutativity |
  210.42 +  DefAxiom | IntroDef | ApplyDef | IffOeq | NnfPos | NnfNeg | NnfStar |
  210.43 +  CnfStar | Skolemize | ModusPonensOeq | ThLemma
  210.44 +
  210.45 +val rule_names = Symtab.make [
  210.46 +  ("true-axiom", TrueAxiom),
  210.47 +  ("asserted", Asserted),
  210.48 +  ("goal", Goal),
  210.49 +  ("mp", ModusPonens),
  210.50 +  ("refl", Reflexivity),
  210.51 +  ("symm", Symmetry),
  210.52 +  ("trans", Transitivity),
  210.53 +  ("trans*", TransitivityStar),
  210.54 +  ("monotonicity", Monotonicity),
  210.55 +  ("quant-intro", QuantIntro),
  210.56 +  ("distributivity", Distributivity),
  210.57 +  ("and-elim", AndElim),
  210.58 +  ("not-or-elim", NotOrElim),
  210.59 +  ("rewrite", Rewrite),
  210.60 +  ("rewrite*", RewriteStar),
  210.61 +  ("pull-quant", PullQuant),
  210.62 +  ("pull-quant*", PullQuantStar),
  210.63 +  ("push-quant", PushQuant),
  210.64 +  ("elim-unused", ElimUnusedVars),
  210.65 +  ("der", DestEqRes),
  210.66 +  ("quant-inst", QuantInst),
  210.67 +  ("hypothesis", Hypothesis),
  210.68 +  ("lemma", Lemma),
  210.69 +  ("unit-resolution", UnitResolution),
  210.70 +  ("iff-true", IffTrue),
  210.71 +  ("iff-false", IffFalse),
  210.72 +  ("commutativity", Commutativity),
  210.73 +  ("def-axiom", DefAxiom),
  210.74 +  ("intro-def", IntroDef),
  210.75 +  ("apply-def", ApplyDef),
  210.76 +  ("iff~", IffOeq),
  210.77 +  ("nnf-pos", NnfPos),
  210.78 +  ("nnf-neg", NnfNeg),
  210.79 +  ("nnf*", NnfStar),
  210.80 +  ("cnf*", CnfStar),
  210.81 +  ("sk", Skolemize),
  210.82 +  ("mp~", ModusPonensOeq),
  210.83 +  ("th-lemma", ThLemma)]
  210.84 +
  210.85 +val rule_of_string = Symtab.lookup rule_names
  210.86 +fun string_of_rule r =
  210.87 +  let fun fit (s, r') = if r = r' then SOME s else NONE 
  210.88 +  in the (Symtab.get_first NONE fit rule_names) end
  210.89 +
  210.90 +
  210.91 +(* proof representation *)
  210.92 +
  210.93 +datatype theorem =
  210.94 +  Thm of thm |
  210.95 +  MetaEq of thm |
  210.96 +  Literals of thm * thm Termtab.table
  210.97 +
  210.98 +fun thm_of (Thm thm) = thm
  210.99 +  | thm_of (MetaEq thm) = thm COMP @{thm meta_eq_to_obj_eq}
 210.100 +  | thm_of (Literals (thm, _)) = thm
 210.101 +
 210.102 +fun meta_eq_of (MetaEq thm) = thm
 210.103 +  | meta_eq_of p = thm_of p COMP @{thm eq_reflection}
 210.104 +
 210.105 +datatype proof =
 210.106 +  Unproved of {
 210.107 +    rule: rule,
 210.108 +    subs: int list,
 210.109 +    prop: Thm.cterm,
 210.110 +    vars: Thm.cterm list } |
 210.111 +  Sequent of {
 210.112 +    hyps: Thm.cterm list,
 210.113 +    vars: Thm.cterm list,
 210.114 +    thm: theorem }
 210.115 +
 210.116 +fun make_proof r ps (ct, cvs) = Unproved {rule=r, subs=ps, prop=ct, vars=cvs}
 210.117 +
 210.118 +
 210.119 +(* proof reconstruction utilities *)
 210.120 +
 210.121 +fun try_apply ctxt name nfs ct =
 210.122 +  let
 210.123 +    val trace = SMT_Solver.trace_msg ctxt I
 210.124 +
 210.125 +    fun first [] = z3_exn (name ^ " failed")
 210.126 +      | first ((n, f) :: nfs) =
 210.127 +          (case try f ct of
 210.128 +            SOME thm => (trace (n ^ " succeeded"); thm)
 210.129 +          | NONE => (trace (n ^ " failed"); first nfs))
 210.130 +  in first nfs end
 210.131 +
 210.132 +fun prop_of thm = (case Thm.prop_of thm of @{term Trueprop} $ t => t | t => t)
 210.133 +
 210.134 +fun as_meta_eq ct = uncurry T.mk_meta_eq (Thm.dest_binop ct)
 210.135 +
 210.136 +fun by_tac' tac ct = Goal.norm_result (Goal.prove_internal [] ct (K (tac 1)))
 210.137 +fun by_tac tac ct = by_tac' tac (T.mk_prop ct)
 210.138 +
 210.139 +fun match_instantiate' f ct thm =
 210.140 +  Thm.instantiate (Thm.match (f (Thm.cprop_of thm), ct)) thm
 210.141 +val match_instantiate = match_instantiate' I
 210.142 +
 210.143 +local
 210.144 +  fun maybe_instantiate ct thm =
 210.145 +    try Thm.first_order_match (Thm.cprop_of thm, ct)
 210.146 +    |> Option.map (fn inst => Thm.instantiate inst thm)
 210.147 +in
 210.148 +fun thm_net_of thms =
 210.149 +  let fun insert thm = Net.insert_term (K false) (Thm.prop_of thm, thm)
 210.150 +  in fold insert thms Net.empty end
 210.151 +
 210.152 +fun first_of thms ct = get_first (maybe_instantiate ct) thms
 210.153 +fun net_instance net ct = first_of (Net.match_term net (Thm.term_of ct)) ct
 210.154 +end
 210.155 +
 210.156 +fun certify ctxt = Thm.cterm_of (ProofContext.theory_of ctxt)
 210.157 +fun certify_var ctxt idx T = certify ctxt (Var (("x", idx), T))
 210.158 +
 210.159 +fun varify ctxt =
 210.160 +  let
 210.161 +    fun varify1 cv thm =
 210.162 +      let
 210.163 +        val T = Thm.typ_of (Thm.ctyp_of_term cv)
 210.164 +        val v = certify_var ctxt (Thm.maxidx_of thm + 1) T
 210.165 +       in SMT_Normalize.instantiate_free (cv, v) thm end
 210.166 +  in fold varify1 end
 210.167 +
 210.168 +fun under_assumption f ct =
 210.169 +  let val ct' = T.mk_prop ct
 210.170 +  in Thm.implies_intr ct' (f (Thm.assume ct')) end
 210.171 +
 210.172 +fun with_conv conv prove ct =
 210.173 +  let val eq = Thm.symmetric (conv ct)
 210.174 +  in Thm.equal_elim eq (prove (Thm.lhs_of eq)) end
 210.175 +
 210.176 +fun list2 (x, y) = [x, y]
 210.177 +
 210.178 +fun precompose f rule = (f (Thm.cprem_of rule 1), f, rule)
 210.179 +
 210.180 +fun discharge p pq = Thm.implies_elim pq p
 210.181 +
 210.182 +fun compose (cvs, f, rule) thm =
 210.183 +  let fun inst thm = Thm.instantiate ([], cvs ~~ f (Thm.cprop_of thm))
 210.184 +  in discharge thm (inst thm rule) end
 210.185 +
 210.186 +fun make_hyp_def thm = (* |- c x == t x ==> P (c x)  ~~>  c == t |- P (c x) *) 
 210.187 +  let
 210.188 +    val (lhs, rhs) = Thm.dest_binop (Thm.cprem_of thm 1)
 210.189 +    val (cf, cvs) = Drule.strip_comb lhs
 210.190 +    val eq = T.mk_meta_eq cf (fold_rev Thm.cabs cvs rhs)
 210.191 +    fun apply cv th =
 210.192 +      Thm.combination th (Thm.reflexive cv)
 210.193 +      |> Conv.fconv_rule (Conv.arg_conv (Thm.beta_conversion false))
 210.194 +  in ([eq], Thm.implies_elim thm (fold apply cvs (Thm.assume eq))) end
 210.195 +
 210.196 +val true_thm = @{lemma "~False" by simp}
 210.197 +
 210.198 +val is_neg = (fn @{term Not} $ _ => true | _ => false)
 210.199 +fun is_neg' f = (fn @{term Not} $ t => f t | _ => false)
 210.200 +val is_conj = (fn @{term "op &"} $ _ $ _ => true | _ => false)
 210.201 +val is_disj = (fn @{term "op |"} $ _ $ _ => true | _ => false)
 210.202 +
 210.203 +(** explosion of conjunctions and disjunctions **)
 210.204 +
 210.205 +local
 210.206 +  val dest_conj_term = (fn @{term "op &"} $ t $ u => SOME (t, u) | _ => NONE)
 210.207 +
 210.208 +  val negate_term = (fn @{term Not} $ t => t | t => @{term Not} $ t)
 210.209 +  fun dest_disj_term' f = (fn
 210.210 +      @{term Not} $ (@{term "op |"} $ t $ u) => SOME (f t, f u)
 210.211 +    | _ => NONE)
 210.212 +  val dest_disj_term = dest_disj_term' negate_term
 210.213 +
 210.214 +  fun destc ct = list2 (Thm.dest_binop (Thm.dest_arg ct))
 210.215 +  val dest_conj1 = precompose destc @{thm conjunct1}
 210.216 +  val dest_conj2 = precompose destc @{thm conjunct2}
 210.217 +  fun dest_conj_rules t =
 210.218 +    dest_conj_term t |> Option.map (K (dest_conj1, dest_conj2))
 210.219 +    
 210.220 +  fun destd f ct = list2 (f (Thm.dest_binop (Thm.dest_arg (Thm.dest_arg ct))))
 210.221 +  val dn1 = apfst Thm.dest_arg and dn2 = apsnd Thm.dest_arg
 210.222 +  val dest_disj1 = precompose (destd I) @{lemma "~(P | Q) ==> ~P" by fast}
 210.223 +  and dest_disj2 = precompose (destd dn1) @{lemma "~(~P | Q) ==> P" by fast}
 210.224 +  and dest_disj3 = precompose (destd I) @{lemma "~(P | Q) ==> ~Q" by fast}
 210.225 +  and dest_disj4 = precompose (destd dn2) @{lemma "~(P | ~Q) ==> Q" by fast}
 210.226 +
 210.227 +  val is_neg = (fn @{term Not} $ _ => true | _ => false)
 210.228 +  fun dest_disj_rules t =
 210.229 +    (case dest_disj_term' is_neg t of
 210.230 +      SOME (true, true) => SOME (dest_disj2, dest_disj4)
 210.231 +    | SOME (true, false) => SOME (dest_disj2, dest_disj3)
 210.232 +    | SOME (false, true) => SOME (dest_disj1, dest_disj4)
 210.233 +    | SOME (false, false) => SOME (dest_disj1, dest_disj3)
 210.234 +    | NONE => NONE)
 210.235 +
 210.236 +  val is_dneg = is_neg' is_neg
 210.237 +  fun destn ct = [Thm.dest_arg (Thm.dest_arg (Thm.dest_arg ct))]
 210.238 +  val dneg_rule = precompose destn @{thm notnotD}
 210.239 +in
 210.240 +fun exists_lit is_conj P =
 210.241 +  let
 210.242 +    val dest = if is_conj then dest_conj_term else dest_disj_term
 210.243 +    fun exists t = P t orelse
 210.244 +      (case dest t of
 210.245 +        SOME (t1, t2) => exists t1 orelse exists t2
 210.246 +      | NONE => false)
 210.247 +  in exists end
 210.248 +
 210.249 +fun explode_term is_conj keep_intermediate =
 210.250 +  let
 210.251 +    val dest = if is_conj then dest_conj_term else dest_disj_term
 210.252 +    val dest_rules = if is_conj then dest_conj_rules else dest_disj_rules
 210.253 +    fun explode1 rules t =
 210.254 +      (case dest t of
 210.255 +        SOME (t1, t2) =>
 210.256 +          let val (rule1, rule2) = the (dest_rules t)
 210.257 +          in
 210.258 +            explode1 (rule1 :: rules) t1 #>
 210.259 +            explode1 (rule2 :: rules) t2 #>
 210.260 +            keep_intermediate ? cons (t, rev rules)
 210.261 +          end
 210.262 +      | NONE => cons (t, rev rules))
 210.263 +    fun explode0 (@{term Not} $ (@{term Not} $ t)) = [(t, [dneg_rule])]
 210.264 +      | explode0 t = explode1 [] t []
 210.265 +  in explode0 end
 210.266 +
 210.267 +fun extract_lit thm rules = fold compose rules thm
 210.268 +
 210.269 +fun explode_thm is_conj full keep_intermediate stop_lits =
 210.270 +  let
 210.271 +    val dest_rules = if is_conj then dest_conj_rules else dest_disj_rules
 210.272 +    val tab = fold (Termtab.update o rpair ()) stop_lits Termtab.empty
 210.273 +
 210.274 +    fun explode1 thm =
 210.275 +      if Termtab.defined tab (prop_of thm) then cons thm
 210.276 +      else
 210.277 +        (case dest_rules (prop_of thm) of
 210.278 +          SOME (rule1, rule2) => explode2 rule1 thm #> explode2 rule2 thm #>
 210.279 +            keep_intermediate ? cons thm
 210.280 +        | NONE => cons thm)
 210.281 +    and explode2 dest_rule thm =
 210.282 +      if full orelse exists_lit is_conj (Termtab.defined tab) (prop_of thm)
 210.283 +      then explode1 (compose dest_rule thm)
 210.284 +      else cons (compose dest_rule thm)
 210.285 +    fun explode0 thm =
 210.286 +      if not is_conj andalso is_dneg (prop_of thm) then [compose dneg_rule thm]
 210.287 +      else explode1 thm []
 210.288 +  in explode0 end
 210.289 +end
 210.290 +
 210.291 +(** joining of literals to conjunctions or disjunctions **)
 210.292 +
 210.293 +local
 210.294 +  fun precomp2 f g thm =
 210.295 +    (f (Thm.cprem_of thm 1), g (Thm.cprem_of thm 2), f, g, thm)
 210.296 +  fun comp2 (cv1, cv2, f, g, rule) thm1 thm2 =
 210.297 +    let val inst = [(cv1, f (Thm.cprop_of thm1)), (cv2, g (Thm.cprop_of thm2))]
 210.298 +    in Thm.instantiate ([], inst) rule |> discharge thm1 |> discharge thm2 end
 210.299 +
 210.300 +  fun d1 ct = Thm.dest_arg ct and d2 ct = Thm.dest_arg (Thm.dest_arg ct)
 210.301 +
 210.302 +  val conj_rule = precomp2 d1 d1 @{thm conjI}
 210.303 +  fun comp_conj ((_, thm1), (_, thm2)) = comp2 conj_rule thm1 thm2
 210.304 +
 210.305 +  val disj1 = precomp2 d2 d2 @{lemma "~P ==> ~Q ==> ~(P | Q)" by fast}
 210.306 +  val disj2 = precomp2 d2 d1 @{lemma "~P ==> Q ==> ~(P | ~Q)" by fast}
 210.307 +  val disj3 = precomp2 d1 d2 @{lemma "P ==> ~Q ==> ~(~P | Q)" by fast}
 210.308 +  val disj4 = precomp2 d1 d1 @{lemma "P ==> Q ==> ~(~P | ~Q)" by fast}
 210.309 +
 210.310 +  fun comp_disj ((false, thm1), (false, thm2)) = comp2 disj1 thm1 thm2
 210.311 +    | comp_disj ((false, thm1), (true, thm2)) = comp2 disj2 thm1 thm2
 210.312 +    | comp_disj ((true, thm1), (false, thm2)) = comp2 disj3 thm1 thm2
 210.313 +    | comp_disj ((true, thm1), (true, thm2)) = comp2 disj4 thm1 thm2
 210.314 +
 210.315 +  fun dest_conj (@{term "op &"} $ t $ u) = ((false, t), (false, u))
 210.316 +    | dest_conj t = raise TERM ("dest_conj", [t])
 210.317 +
 210.318 +  val neg = (fn @{term Not} $ t => (true, t) | t => (false, @{term Not} $ t))
 210.319 +  fun dest_disj (@{term Not} $ (@{term "op |"} $ t $ u)) = (neg t, neg u)
 210.320 +    | dest_disj t = raise TERM ("dest_disj", [t])
 210.321 +
 210.322 +  val dnegE = precompose (single o d2 o d1) @{thm notnotD}
 210.323 +  val dnegI = precompose (single o d1) @{lemma "P ==> ~~P" by fast}
 210.324 +  fun as_dneg f t = f (@{term Not} $ (@{term Not} $ t))
 210.325 +
 210.326 +  fun dni f = list2 o apsnd f o Thm.dest_binop o f o d1
 210.327 +  val negIffE = precompose (dni d1) @{lemma "~(P = (~Q)) ==> Q = P" by fast}
 210.328 +  val negIffI = precompose (dni I) @{lemma "P = Q ==> ~(Q = (~P))" by fast}
 210.329 +  val iff_const = @{term "op = :: bool => _"}
 210.330 +  fun as_negIff f (@{term "op = :: bool => _"} $ t $ u) =
 210.331 +        f (@{term Not} $ (iff_const $ u $ (@{term Not} $ t)))
 210.332 +    | as_negIff _ _ = NONE
 210.333 +in
 210.334 +fun make_lit_tab thms = fold (Termtab.update o ` prop_of) thms Termtab.empty
 210.335 +
 210.336 +fun join is_conj tab t =
 210.337 +  let
 210.338 +    val comp = if is_conj then comp_conj else comp_disj
 210.339 +    val dest = if is_conj then dest_conj else dest_disj
 210.340 +
 210.341 +    val lookup_lit = Termtab.lookup tab
 210.342 +    fun lookup_lit' t =
 210.343 +      (case t of
 210.344 +        @{term Not} $ (@{term Not} $ t) => (compose dnegI, lookup_lit t)
 210.345 +      | @{term Not} $ (@{term "op = :: bool => _"} $ t $ (@{term Not} $ u)) =>
 210.346 +          (compose negIffI, lookup_lit (iff_const $ u $ t))
 210.347 +      | @{term Not} $ ((eq as Const (@{const_name "op ="}, _)) $ t $ u) =>
 210.348 +          let fun rewr lit = lit COMP @{thm not_sym}
 210.349 +          in (rewr, lookup_lit (@{term Not} $ (eq $ u $ t))) end
 210.350 +      | _ =>
 210.351 +          (case as_dneg lookup_lit t of
 210.352 +            NONE => (compose negIffE, as_negIff lookup_lit t)
 210.353 +          | x => (compose dnegE, x)))
 210.354 +    fun join1 (s, t) =
 210.355 +      (case lookup_lit t of
 210.356 +        SOME lit => (s, lit)
 210.357 +      | NONE => 
 210.358 +          (case lookup_lit' t of
 210.359 +            (rewrite, SOME lit) => (s, rewrite lit)
 210.360 +          | (_, NONE) => (s, comp (pairself join1 (dest t)))))
 210.361 +  in snd (join1 (if is_conj then (false, t) else (true, t))) end
 210.362 +end
 210.363 +
 210.364 +(** proving equality of conjunctions or disjunctions **)
 210.365 +
 210.366 +fun iff_intro thm1 thm2 = thm2 COMP (thm1 COMP @{thm iffI})
 210.367 +
 210.368 +local
 210.369 +  val cp1 = @{lemma "(~P) = (~Q) ==> P = Q" by simp}
 210.370 +  val cp2 = @{lemma "(~P) = Q ==> P = (~Q)" by fastsimp}
 210.371 +  val cp3 = @{lemma "P = (~Q) ==> (~P) = Q" by simp}
 210.372 +  val neg = Thm.capply @{cterm Not}
 210.373 +in
 210.374 +fun contrapos1 prove (ct, cu) = prove (neg ct, neg cu) COMP cp1
 210.375 +fun contrapos2 prove (ct, cu) = prove (neg ct, Thm.dest_arg cu) COMP cp2
 210.376 +fun contrapos3 prove (ct, cu) = prove (Thm.dest_arg ct, neg cu) COMP cp3
 210.377 +end
 210.378 +
 210.379 +local
 210.380 +  fun prove_eq l r (cl, cr) =
 210.381 +    let
 210.382 +      fun explode is_conj = explode_thm is_conj true (l <> r) []
 210.383 +      fun make_tab is_conj thm = make_lit_tab (true_thm :: explode is_conj thm)
 210.384 +      fun prove is_conj ct tab = join is_conj tab (Thm.term_of ct)
 210.385 +
 210.386 +      val thm1 = under_assumption (prove r cr o make_tab l) cl
 210.387 +      val thm2 = under_assumption (prove l cl o make_tab r) cr
 210.388 +    in iff_intro thm1 thm2 end
 210.389 +
 210.390 +  datatype conj_disj = CONJ | DISJ | NCON | NDIS
 210.391 +  fun kind_of t =
 210.392 +    if is_conj t then CONJ
 210.393 +    else if is_disj t then DISJ
 210.394 +    else if is_neg' is_conj t then NCON
 210.395 +    else if is_neg' is_disj t then NDIS
 210.396 +    else CONJ (*allows to prove equalities with single literals on each side*)
 210.397 +in
 210.398 +fun prove_conj_disj_eq ct =
 210.399 +  let val cp = Thm.dest_binop ct
 210.400 +  in
 210.401 +    (case pairself (kind_of o Thm.term_of) cp of
 210.402 +      (CONJ, CONJ) => prove_eq true true cp
 210.403 +    | (CONJ, NDIS) => prove_eq true false cp
 210.404 +    | (DISJ, DISJ) => contrapos1 (prove_eq false false) cp
 210.405 +    | (DISJ, NCON) => contrapos2 (prove_eq false true) cp
 210.406 +    | (NCON, NCON) => contrapos1 (prove_eq true true) cp
 210.407 +    | (NCON, DISJ) => contrapos3 (prove_eq true false) cp
 210.408 +    | (NDIS, NDIS) => prove_eq false false cp
 210.409 +    | (NDIS, CONJ) => prove_eq false true cp)
 210.410 +  end
 210.411 +end
 210.412 +
 210.413 +(** unfolding of distinct **)
 210.414 +
 210.415 +local
 210.416 +  val distinct1 = @{lemma "distinct [] == ~False" by simp}
 210.417 +  val distinct2 = @{lemma "distinct [x] == ~False" by simp}
 210.418 +  val distinct3 = @{lemma "distinct (x # xs) == x ~: set xs & distinct xs"
 210.419 +    by simp}
 210.420 +
 210.421 +  val set1 = @{lemma "x ~: set [] == ~False" by simp}
 210.422 +  val set2 = @{lemma "x ~: set [y] == x ~= y" by simp}
 210.423 +  val set3 = @{lemma "x ~: set (y # ys) == x ~= y & x ~: set ys" by simp}
 210.424 +
 210.425 +  fun binop_conv cv1 cv2 = Conv.combination_conv (Conv.arg_conv cv1) cv2
 210.426 +
 210.427 +  fun unfold_conv rule1 rule2 rule3 sub_conv =
 210.428 +    let
 210.429 +      fun uconv ct =
 210.430 +       (Conv.rewr_conv rule1 else_conv
 210.431 +        Conv.rewr_conv rule2 else_conv
 210.432 +       (Conv.rewr_conv rule3 then_conv binop_conv sub_conv uconv)) ct
 210.433 +    in uconv end
 210.434 +
 210.435 +  val set_conv = unfold_conv set1 set2 set3 Conv.all_conv
 210.436 +in
 210.437 +val unfold_distinct_conv = unfold_conv distinct1 distinct2 distinct3 set_conv
 210.438 +end
 210.439 +
 210.440 +
 210.441 +(* core proof rules *)
 210.442 +
 210.443 +datatype assms = Some of thm list | Many of thm Net.net
 210.444 +
 210.445 +val true_false = @{lemma "True == ~ False" by simp}
 210.446 +
 210.447 +local
 210.448 +  val TT_eq = @{lemma "(P = (~False)) == P" by simp}
 210.449 +  val remove_trigger = @{lemma "trigger t p == p"
 210.450 +    by (rule eq_reflection, rule trigger_def)}
 210.451 +  val remove_iff = @{lemma "p iff q == p = q"
 210.452 +    by (rule eq_reflection, rule iff_def)}
 210.453 +
 210.454 +  fun with_context simpset ctxt = Simplifier.context ctxt simpset
 210.455 +
 210.456 +  val prep_ss = with_context (Simplifier.empty_ss addsimps
 210.457 +    [@{thm Let_def}, remove_trigger, remove_iff, true_false, TT_eq])
 210.458 +
 210.459 +  val TT_eq_conv = Conv.rewr_conv TT_eq
 210.460 +  val norm_conv = More_Conv.bottom_conv (K (Conv.try_conv TT_eq_conv))
 210.461 +
 210.462 +  val threshold = 10
 210.463 +  
 210.464 +  val lookup = (fn Some thms => first_of thms | Many net => net_instance net)
 210.465 +  fun lookup_assm ctxt assms ct =
 210.466 +    (case lookup assms ct of
 210.467 +      SOME thm => thm
 210.468 +    | _ => z3_exn ("not asserted: " ^
 210.469 +        quote (Syntax.string_of_term ctxt (Thm.term_of ct))))
 210.470 +in
 210.471 +fun prepare_assms ctxt assms =
 210.472 +  let
 210.473 +    val rewrite = Conv.fconv_rule (Simplifier.rewrite (prep_ss ctxt))
 210.474 +    val thms = map rewrite assms
 210.475 +  in if length assms < threshold then Some thms else Many (thm_net_of thms) end
 210.476 +
 210.477 +fun asserted _ NONE ct = Thm (Thm.assume (T.mk_prop ct))
 210.478 +  | asserted ctxt (SOME assms) ct =
 210.479 +      Thm (with_conv (norm_conv ctxt) (lookup_assm ctxt assms) (T.mk_prop ct))
 210.480 +end
 210.481 +
 210.482 +
 210.483 +(** P ==> P = Q ==> Q   or   P ==> P --> Q ==> Q **)
 210.484 +local
 210.485 +  val meta_iffD1 = @{lemma "P == Q ==> P ==> (Q::bool)" by simp}
 210.486 +  val meta_iffD1_c = precompose (list2 o Thm.dest_binop) meta_iffD1
 210.487 +
 210.488 +  val iffD1_c = precompose (list2 o Thm.dest_binop o Thm.dest_arg) @{thm iffD1}
 210.489 +  val mp_c = precompose (list2 o Thm.dest_binop o Thm.dest_arg) @{thm mp}
 210.490 +in
 210.491 +fun mp (MetaEq thm) p = Thm (Thm.implies_elim (compose meta_iffD1_c thm) p)
 210.492 +  | mp p_q p = 
 210.493 +      let
 210.494 +        val pq = thm_of p_q
 210.495 +        val thm = compose iffD1_c pq handle THM _ => compose mp_c pq
 210.496 +      in Thm (Thm.implies_elim thm p) end
 210.497 +end
 210.498 +
 210.499 +
 210.500 +(** and_elim:     P1 & ... & Pn ==> Pi **)
 210.501 +(** not_or_elim:  ~(P1 | ... | Pn) ==> ~Pi **)
 210.502 +local
 210.503 +  fun get_lit conj t (l, thm) =
 210.504 +    let val is_sublit_of = exists_lit conj (fn u => u aconv t)
 210.505 +    in if is_sublit_of (prop_of thm) then SOME (l, thm) else NONE end
 210.506 +
 210.507 +  fun derive conj t lits idx ptab =
 210.508 +    let
 210.509 +      val (l, lit) = the (Termtab.get_first NONE (get_lit conj t) lits)
 210.510 +      val ls = explode_thm conj false false [t] lit
 210.511 +      val lits' = fold (Termtab.update o ` prop_of) ls (Termtab.delete l lits)
 210.512 +      fun upd (Sequent {hyps, vars, thm}) =
 210.513 +            Sequent {hyps=hyps, vars=vars, thm = Literals (thm_of thm, lits')}
 210.514 +        | upd p = p
 210.515 +    in (the (Termtab.lookup lits' t), Inttab.map_entry idx upd ptab) end
 210.516 +
 210.517 +  val mk_tab = make_lit_tab o single
 210.518 +  val literals_of = (fn Literals (_, lits) => lits | p => mk_tab (thm_of p))
 210.519 +  fun lit_elim conj (p, idx) ct ptab =
 210.520 +    let val lits = literals_of p
 210.521 +    in
 210.522 +      (case Termtab.lookup lits (Thm.term_of ct) of
 210.523 +        SOME lit => (Thm lit, ptab)
 210.524 +      | NONE => apfst Thm (derive conj (Thm.term_of ct) lits idx ptab))
 210.525 +    end
 210.526 +in
 210.527 +val and_elim = lit_elim true
 210.528 +val not_or_elim = lit_elim false
 210.529 +end
 210.530 +
 210.531 +
 210.532 +(** P1 ... Pn |- False ==> |- ~P1 | ... | ~Pn **)
 210.533 +local
 210.534 +  fun step lit thm =
 210.535 +    Thm.implies_elim (Thm.implies_intr (Thm.cprop_of lit) thm) lit
 210.536 +  val explode_disj = explode_thm false false false
 210.537 +  fun intro hyps thm th = fold step (explode_disj hyps th) thm
 210.538 +
 210.539 +  fun dest_ccontr ct = [Thm.dest_arg (Thm.dest_arg (Thm.dest_arg1 ct))]
 210.540 +  val ccontr = precompose dest_ccontr @{thm ccontr}
 210.541 +in
 210.542 +fun lemma thm ct =
 210.543 +  let
 210.544 +    val cu = Thm.capply @{cterm Not} ct
 210.545 +    val hyps = map_filter (try HOLogic.dest_Trueprop) (#hyps (Thm.rep_thm thm))
 210.546 +  in Thm (compose ccontr (under_assumption (intro hyps thm) cu)) end
 210.547 +end
 210.548 +
 210.549 +
 210.550 +(** \/{P1, ..., Pn, Q1, ..., Qn} & ~P1 & ... & ~Pn ==> \/{Q1, ..., Qn} **)
 210.551 +local
 210.552 +  val explode_disj = explode_thm false true false and join_disj = join false
 210.553 +  fun unit thm thms th =
 210.554 +    let val t = @{term Not} $ prop_of thm and ts = map prop_of thms
 210.555 +    in join_disj (make_lit_tab (thms @ explode_disj ts th)) t end
 210.556 +
 210.557 +  fun dest_arg2 ct = Thm.dest_arg (Thm.dest_arg ct)
 210.558 +  fun dest ct = list2 (pairself dest_arg2 (Thm.dest_binop ct))
 210.559 +  val contrapos = precompose dest @{lemma "(~P ==> ~Q) ==> Q ==> P" by fast}
 210.560 +in
 210.561 +fun unit_resolution thm thms ct =
 210.562 +  under_assumption (unit thm thms) (Thm.capply @{cterm Not} ct)
 210.563 +  |> Thm o discharge thm o compose contrapos
 210.564 +end
 210.565 +
 210.566 +
 210.567 +local
 210.568 +  val iff1 = @{lemma "P ==> P == (~ False)" by simp}
 210.569 +  val iff2 = @{lemma "~P ==> P == False" by simp}
 210.570 +in
 210.571 +fun iff_true thm = MetaEq (thm COMP iff1)
 210.572 +fun iff_false thm = MetaEq (thm COMP iff2)
 210.573 +end
 210.574 +
 210.575 +
 210.576 +(** distributivity of | over & **)
 210.577 +val distributivity = Thm o by_tac (Classical.fast_tac HOL_cs)
 210.578 +
 210.579 +
 210.580 +(** Tseitin-like axioms **)
 210.581 +local
 210.582 +  val disjI1 = @{lemma "(P ==> Q) ==> ~P | Q" by fast}
 210.583 +  val disjI2 = @{lemma "(~P ==> Q) ==> P | Q" by fast}
 210.584 +  val disjI3 = @{lemma "(~Q ==> P) ==> P | Q" by fast}
 210.585 +  val disjI4 = @{lemma "(Q ==> P) ==> P | ~Q" by fast}
 210.586 +
 210.587 +  fun prove' conj1 conj2 ct2 thm =
 210.588 +    let val tab =
 210.589 +      make_lit_tab (true_thm :: explode_thm conj1 true (conj1 <> conj2) [] thm)
 210.590 +    in join conj2 tab (Thm.term_of ct2) end
 210.591 +
 210.592 +  fun prove rule (ct1, conj1) (ct2, conj2) =
 210.593 +    under_assumption (prove' conj1 conj2 ct2) ct1 COMP rule
 210.594 +
 210.595 +  fun prove_def_axiom ct =
 210.596 +    let val (ct1, ct2) = Thm.dest_binop ct
 210.597 +    in
 210.598 +      (case Thm.term_of ct1 of
 210.599 +        @{term Not} $ (@{term "op &"} $ _ $ _) =>
 210.600 +          prove disjI1 (Thm.dest_arg ct1, true) (ct2, true)
 210.601 +      | @{term "op &"} $ _ $ _ =>
 210.602 +          prove disjI3 (Thm.capply @{cterm Not} ct2, false) (ct1, true)
 210.603 +      | @{term Not} $ (@{term "op |"} $ _ $ _) =>
 210.604 +          prove disjI3 (Thm.capply @{cterm Not} ct2, false) (ct1, false)
 210.605 +      | @{term "op |"} $ _ $ _ =>
 210.606 +          prove disjI2 (Thm.capply @{cterm Not} ct1, false) (ct2, true)
 210.607 +      | Const (@{const_name distinct}, _) $ _ =>
 210.608 +          let
 210.609 +            fun dis_conv cv = Conv.arg_conv (Conv.arg1_conv cv)
 210.610 +            fun prv cu =
 210.611 +              let val (cu1, cu2) = Thm.dest_binop (Thm.dest_arg cu)
 210.612 +              in prove disjI4 (Thm.dest_arg cu2, true) (cu1, true) end
 210.613 +          in with_conv (dis_conv unfold_distinct_conv) prv (T.mk_prop ct) end
 210.614 +      | @{term Not} $ (Const (@{const_name distinct}, _) $ _) =>
 210.615 +          let
 210.616 +            fun dis_conv cv = Conv.arg_conv (Conv.arg1_conv (Conv.arg_conv cv))
 210.617 +            fun prv cu =
 210.618 +              let val (cu1, cu2) = Thm.dest_binop (Thm.dest_arg cu)
 210.619 +              in prove disjI1 (Thm.dest_arg cu1, true) (cu2, true) end
 210.620 +          in with_conv (dis_conv unfold_distinct_conv) prv (T.mk_prop ct) end
 210.621 +      | _ => raise CTERM ("prove_def_axiom", [ct]))
 210.622 +    end
 210.623 +
 210.624 +  val ifI = @{lemma "(P ==> Q1) ==> (~P ==> Q2) ==> if P then Q1 else Q2"
 210.625 +    by simp}
 210.626 +  val ifE = @{lemma
 210.627 +    "(if P then Q1 else Q2) ==> (P --> Q1 ==> ~P --> Q2 ==> R) ==> R" by simp}
 210.628 +  val claset = HOL_cs addIs [ifI] addEs [ifE]
 210.629 +in
 210.630 +fun def_axiom ctxt ct =
 210.631 +  Thm (try_apply ctxt "def_axiom" [
 210.632 +    ("conj/disj", prove_def_axiom),
 210.633 +    ("fast", by_tac (Classical.fast_tac claset)),
 210.634 +    ("simp+fast", by_tac (Simplifier.simp_tac HOL_ss THEN_ALL_NEW
 210.635 +      Classical.fast_tac claset))] ct)
 210.636 +end
 210.637 +
 210.638 +
 210.639 +(** local definitions **)
 210.640 +local
 210.641 +  val intro_rules = [
 210.642 +    @{lemma "n == P ==> (~n | P) & (n | ~P)" by simp},
 210.643 +    @{lemma "n == (if P then s else t) ==> (~P | n = s) & (P | n = t)"
 210.644 +      by simp},
 210.645 +    @{lemma "n == P ==> n = P" by (rule meta_eq_to_obj_eq)} ]
 210.646 +
 210.647 +  val apply_rules = [
 210.648 +    @{lemma "(~n | P) & (n | ~P) ==> P == n" by (atomize(full)) fast},
 210.649 +    @{lemma "(~P | n = s) & (P | n = t) ==> (if P then s else t) == n"
 210.650 +      by (atomize(full)) fastsimp} ]
 210.651 +
 210.652 +  val inst_rule = match_instantiate' Thm.dest_arg
 210.653 +
 210.654 +  fun apply_rule ct =
 210.655 +    (case get_first (try (inst_rule (T.mk_prop ct))) intro_rules of
 210.656 +      SOME thm => thm
 210.657 +    | NONE => raise CTERM ("intro_def", [ct]))
 210.658 +in
 210.659 +fun intro_def ct = apsnd Thm (make_hyp_def (apply_rule ct))
 210.660 +
 210.661 +fun apply_def thm =
 210.662 +  get_first (try (fn rule => MetaEq (thm COMP rule))) apply_rules
 210.663 +  |> the_default (Thm thm)
 210.664 +end
 210.665 +
 210.666 +
 210.667 +local
 210.668 +  val quant_rules1 = ([
 210.669 +    @{lemma "(!!x. P x == Q) ==> ALL x. P x == Q" by simp},
 210.670 +    @{lemma "(!!x. P x == Q) ==> EX x. P x == Q" by simp}], [
 210.671 +    @{lemma "(!!x. P x == Q x) ==> ALL x. P x == ALL x. Q x" by simp},
 210.672 +    @{lemma "(!!x. P x == Q x) ==> EX x. P x == EX x. Q x" by simp}])
 210.673 +
 210.674 +  val quant_rules2 = ([
 210.675 +    @{lemma "(!!x. ~P x == Q) ==> ~(ALL x. P x) == Q" by simp},
 210.676 +    @{lemma "(!!x. ~P x == Q) ==> ~(EX x. P x) == Q" by simp}], [
 210.677 +    @{lemma "(!!x. ~P x == Q x) ==> ~(ALL x. P x) == EX x. Q x" by simp},
 210.678 +    @{lemma "(!!x. ~P x == Q x) ==> ~(EX x. P x) == ALL x. Q x" by simp}])
 210.679 +
 210.680 +  fun nnf_quant_tac thm (qs as (qs1, qs2)) i st = (
 210.681 +    Tactic.rtac thm ORELSE'
 210.682 +    (Tactic.match_tac qs1 THEN' nnf_quant_tac thm qs) ORELSE'
 210.683 +    (Tactic.match_tac qs2 THEN' nnf_quant_tac thm qs)) i st
 210.684 +
 210.685 +  fun nnf_quant ctxt qs (p, (vars, _)) ct =
 210.686 +    as_meta_eq ct
 210.687 +    |> by_tac' (nnf_quant_tac (varify ctxt vars (meta_eq_of p)) qs)
 210.688 +
 210.689 +  val nnf_rules = thm_net_of [@{thm not_not}]
 210.690 +
 210.691 +  fun prove_nnf ctxt =
 210.692 +    try_apply ctxt "nnf" [
 210.693 +      ("conj/disj", prove_conj_disj_eq o Thm.dest_arg),
 210.694 +      ("rule", the o net_instance nnf_rules),
 210.695 +      ("tactic", by_tac' (Classical.best_tac HOL_cs))]
 210.696 +in
 210.697 +fun nnf ctxt ps ct =
 210.698 +  (case Thm.term_of ct of
 210.699 +    _ $ (l as Const _ $ Abs _) $ (r as Const _ $ Abs _) =>
 210.700 +      if l aconv r then MetaEq (Thm.reflexive (Thm.dest_arg ct))
 210.701 +      else MetaEq (nnf_quant ctxt quant_rules1 (hd ps) ct)
 210.702 +  | _ $ (@{term Not} $ (Const _ $ Abs _)) $ (Const _ $ Abs _) =>
 210.703 +      MetaEq (nnf_quant ctxt quant_rules2 (hd ps) ct)
 210.704 +  | _ =>
 210.705 +      let
 210.706 +        val eqs = map (Thm.symmetric o meta_eq_of o fst) ps
 210.707 +        val nnf_rewr_conv = Conv.arg_conv (Conv.arg_conv
 210.708 +          (More_Conv.top_sweep_conv (K (More_Conv.rewrs_conv eqs)) ctxt))
 210.709 +      in Thm (with_conv nnf_rewr_conv (prove_nnf ctxt) (T.mk_prop ct)) end)
 210.710 +end
 210.711 +
 210.712 +
 210.713 +(* equality proof rules *)
 210.714 +
 210.715 +(** t = t **)
 210.716 +fun refl ct = MetaEq (Thm.reflexive (Thm.dest_arg ct))
 210.717 +
 210.718 +
 210.719 +(** s = t ==> t = s **)
 210.720 +local
 210.721 +  val symm_rule = @{lemma "s = t ==> t == s" by simp}
 210.722 +in
 210.723 +fun symm (MetaEq thm) = MetaEq (Thm.symmetric thm)
 210.724 +  | symm p = MetaEq (thm_of p COMP symm_rule)
 210.725 +end
 210.726 +
 210.727 +
 210.728 +(** s = t ==> t = u ==> s = u **)
 210.729 +local
 210.730 +  val trans_rule = @{lemma "s = t ==> t = u ==> s == u" by simp}
 210.731 +in
 210.732 +fun trans (MetaEq thm) q = MetaEq (Thm.transitive thm (meta_eq_of q))
 210.733 +  | trans p (MetaEq thm) = MetaEq (Thm.transitive (meta_eq_of p) thm)
 210.734 +  | trans p q = MetaEq (thm_of q COMP (thm_of p COMP trans_rule))
 210.735 +end
 210.736 +
 210.737 +
 210.738 +(** t1 = s1 & ... & tn = sn ==> f t1 ... tn = f s1 .. sn
 210.739 +    (reflexive antecendents are droppped) **)
 210.740 +local
 210.741 +  exception MONO
 210.742 +
 210.743 +  fun prove_refl (ct, _) = Thm.reflexive ct
 210.744 +  fun prove_comb f g cp =
 210.745 +    let val ((ct1, ct2), (cu1, cu2)) = pairself Thm.dest_comb cp
 210.746 +    in Thm.combination (f (ct1, cu1)) (g (ct2, cu2)) end
 210.747 +  fun prove_arg f = prove_comb prove_refl f
 210.748 +
 210.749 +  fun prove f cp = prove_comb (prove f) f cp handle CTERM _ => prove_refl cp
 210.750 +
 210.751 +  fun prove_nary is_comb f =
 210.752 +    let
 210.753 +      fun prove (cp as (ct, _)) = f cp handle MONO =>
 210.754 +        if is_comb (Thm.term_of ct)
 210.755 +        then prove_comb (prove_arg prove) prove cp
 210.756 +        else prove_refl cp
 210.757 +    in prove end
 210.758 +
 210.759 +  fun prove_list f n cp =
 210.760 +    if n = 0 then prove_refl cp
 210.761 +    else prove_comb (prove_arg f) (prove_list f (n-1)) cp
 210.762 +
 210.763 +  fun with_length f (cp as (cl, _)) =
 210.764 +    f (length (HOLogic.dest_list (Thm.term_of cl))) cp
 210.765 +
 210.766 +  fun prove_distinct f = prove_arg (with_length (prove_list f))
 210.767 +
 210.768 +  fun prove_eq exn lookup cp =
 210.769 +    (case lookup (Logic.mk_equals (pairself Thm.term_of cp)) of
 210.770 +      SOME eq => eq
 210.771 +    | NONE => if exn then raise MONO else prove_refl cp)
 210.772 +  val prove_eq_exn = prove_eq true and prove_eq_safe = prove_eq false
 210.773 +
 210.774 +  fun mono f (cp as (cl, _)) =
 210.775 +    (case Term.head_of (Thm.term_of cl) of
 210.776 +      @{term "op &"} => prove_nary is_conj (prove_eq_exn f)
 210.777 +    | @{term "op |"} => prove_nary is_disj (prove_eq_exn f)
 210.778 +    | Const (@{const_name distinct}, _) => prove_distinct (prove_eq_safe f)
 210.779 +    | _ => prove (prove_eq_safe f)) cp
 210.780 +in
 210.781 +fun monotonicity eqs ct =
 210.782 +  let
 210.783 +    val tab = map (` Thm.prop_of o meta_eq_of) eqs
 210.784 +    val lookup = AList.lookup (op aconv) tab
 210.785 +    val cp = Thm.dest_binop ct
 210.786 +  in MetaEq (prove_eq_exn lookup cp handle MONO => mono lookup cp) end
 210.787 +end
 210.788 +
 210.789 +
 210.790 +(** f a b = f b a **)
 210.791 +local
 210.792 +  val rule = @{lemma "a = b == b = a" by (atomize(full)) (rule eq_commute)}
 210.793 +in
 210.794 +fun commutativity ct = MetaEq (match_instantiate (as_meta_eq ct) rule)
 210.795 +end
 210.796 +
 210.797 +
 210.798 +(* quantifier proof rules *)
 210.799 +
 210.800 +(** P ?x = Q ?x ==> (ALL x. P x) = (ALL x. Q x)
 210.801 +    P ?x = Q ?x ==> (EX x. P x) = (EX x. Q x)   **)
 210.802 +local
 210.803 +  val rules = [
 210.804 +    @{lemma "(!!x. P x == Q x) ==> (EX x. P x) == (EX x. Q x)" by simp},
 210.805 +    @{lemma "(!!x. P x == Q x) ==> (ALL x. P x) == (ALL x. Q x)" by simp}]
 210.806 +in
 210.807 +fun quant_intro ctxt (p, (vars, _)) ct =
 210.808 +  let
 210.809 +    val rules' = varify ctxt vars (meta_eq_of p) :: rules
 210.810 +    val cu = as_meta_eq ct
 210.811 +  in MetaEq (by_tac' (REPEAT_ALL_NEW (Tactic.match_tac rules')) cu) end
 210.812 +end
 210.813 +
 210.814 +
 210.815 +(** |- ((ALL x. P x) | Q) = (ALL x. P x | Q) **)
 210.816 +val pull_quant =
 210.817 +  Thm o by_tac (Tactic.rtac @{thm refl} ORELSE' Simplifier.simp_tac HOL_ss)
 210.818 +
 210.819 +
 210.820 +(** |- (ALL x. P x & Q x) = ((ALL x. P x) & (ALL x. Q x)) **)
 210.821 +val push_quant =
 210.822 +  Thm o by_tac (Tactic.rtac @{thm refl} ORELSE' Simplifier.simp_tac HOL_ss)
 210.823 +
 210.824 +
 210.825 +(**
 210.826 +  |- (ALL x1 ... xn y1 ... yn. P x1 ... xn) = (ALL x1 ... xn. P x1 ... xn)
 210.827 +**)
 210.828 +local
 210.829 +  val elim_all = @{lemma "ALL x. P == P" by simp}
 210.830 +  val elim_ex = @{lemma "EX x. P == P" by simp}
 210.831 +
 210.832 +  val rule = (fn @{const_name All} => elim_all | _ => elim_ex)
 210.833 +
 210.834 +  fun collect xs tp =
 210.835 +    if (op aconv) tp then rev xs
 210.836 +    else
 210.837 +      (case tp of
 210.838 +        (Const (q, _) $ Abs (_, _, l), r' as Const _ $ Abs (_, _, r)) =>
 210.839 +          if l aconv r then rev xs
 210.840 +          else if Term.loose_bvar1 (l, 0) then collect (NONE :: xs) (l, r)
 210.841 +          else collect (SOME (rule q) :: xs) (Term.incr_bv (~1, 0, l), r')
 210.842 +      | (Const (q, _) $ Abs (_, _, l), r) =>
 210.843 +          collect (SOME (rule q) :: xs) (Term.incr_bv (~1, 0, l), r)
 210.844 +      | (l, r) => raise TERM ("elim_unused", [l, r]))
 210.845 +
 210.846 +  fun elim _ [] ct = Conv.all_conv ct
 210.847 +    | elim ctxt (x::xs) ct =
 210.848 +        (case x of
 210.849 +          SOME rule => Conv.rewr_conv rule then_conv elim ctxt xs
 210.850 +        | _ => Conv.arg_conv (Conv.abs_conv (fn (_,cx) => elim cx xs) ctxt)) ct
 210.851 +in
 210.852 +fun elim_unused_vars ctxt ct =
 210.853 +  let val (lhs, rhs) = Thm.dest_binop ct
 210.854 +  in MetaEq (elim ctxt (collect [] (Thm.term_of lhs, Thm.term_of rhs)) lhs) end
 210.855 +end
 210.856 +
 210.857 +
 210.858 +(** 
 210.859 +  |- (ALL x1 ... xn. ~(x1 = t1 & ... xn = tn) | P x1 ... xn) = P t1 ... tn
 210.860 +**)
 210.861 +val dest_eq_res = Thm o by_tac (Simplifier.simp_tac HOL_ss)
 210.862 +
 210.863 +
 210.864 +(** |- ~(ALL x1...xn. P x1...xn) | P a1...an **)
 210.865 +local
 210.866 +  val rule = @{lemma "~ P x | Q ==> ~(ALL x. P x) | Q" by fast}
 210.867 +in
 210.868 +val quant_inst = Thm o by_tac (
 210.869 +  REPEAT_ALL_NEW (Tactic.match_tac [rule])
 210.870 +  THEN' Tactic.rtac @{thm excluded_middle})
 210.871 +end
 210.872 +
 210.873 +
 210.874 +(** c = SOME x. P x |- (EX x. P x) = P c
 210.875 +    c = SOME x. ~ P x |- ~(ALL x. P x) = ~ P c **)
 210.876 +local
 210.877 +  val elim_ex = @{lemma "EX x. P == P" by simp}
 210.878 +  val elim_all = @{lemma "~ (ALL x. P) == ~P" by simp}
 210.879 +  val sk_ex = @{lemma "c == SOME x. P x ==> EX x. P x == P c"
 210.880 +    by simp (intro eq_reflection some_eq_ex[symmetric])}
 210.881 +  val sk_all = @{lemma "c == SOME x. ~ P x ==> ~(ALL x. P x) == ~ P c"
 210.882 +    by (simp only: not_all) (intro eq_reflection some_eq_ex[symmetric])}
 210.883 +  val sk_ex_rule = ((sk_ex, I), elim_ex)
 210.884 +  and sk_all_rule = ((sk_all, Thm.dest_arg), elim_all)
 210.885 +
 210.886 +  fun dest f sk_rule = 
 210.887 +    Thm.dest_comb (f (Thm.dest_arg (Thm.dest_arg (Thm.cprop_of sk_rule))))
 210.888 +  fun type_of f sk_rule = Thm.ctyp_of_term (snd (dest f sk_rule))
 210.889 +  fun inst_sk (sk_rule, f) p c =
 210.890 +    Thm.instantiate ([(type_of f sk_rule, Thm.ctyp_of_term c)], []) sk_rule
 210.891 +    |> (fn sk' => Thm.instantiate ([], (list2 (dest f sk') ~~ [p, c])) sk')
 210.892 +    |> Conv.fconv_rule (Thm.beta_conversion true)
 210.893 +
 210.894 +  fun kind (Const (q as @{const_name Ex}, _) $ _) = (sk_ex_rule, q, I, I)
 210.895 +    | kind (@{term Not} $ (Const (q as @{const_name All}, _) $ _)) =
 210.896 +        (sk_all_rule, q, Thm.dest_arg, Thm.capply @{cterm Not})
 210.897 +    | kind _ = z3_exn "skolemize: no quantifier"
 210.898 +
 210.899 +  fun bodies_of ctxt ct =
 210.900 +    let
 210.901 +      val (rule, q, dest, make) = kind (Thm.term_of ct)
 210.902 +
 210.903 +      fun inst_abs idx T cbs ct =
 210.904 +        let
 210.905 +          val cv = certify_var ctxt idx T
 210.906 +          val cu = Drule.beta_conv (Thm.dest_arg ct) cv
 210.907 +        in dest_body (idx + 1) ((cv, Thm.dest_arg ct) :: cbs) cu end
 210.908 +      and dest_body idx cbs ct =
 210.909 +        (case Thm.term_of ct of
 210.910 +          Const (qname, _) $ Abs (_, T, _) =>
 210.911 +            if q = qname then inst_abs idx T cbs ct else (make ct, rev cbs)
 210.912 +        | _ => (make ct, rev cbs))
 210.913 +    in (rule, dest_body (#maxidx (Thm.rep_cterm ct) + 1) [] (dest ct)) end
 210.914 +
 210.915 +  fun transitive f thm = Thm.transitive thm (f (Thm.rhs_of thm))
 210.916 +
 210.917 +  fun sk_step (rule, elim) (cv, mct, cb) (is, thm) =
 210.918 +    (case mct of
 210.919 +      SOME ct =>
 210.920 +        make_hyp_def (inst_sk rule (Thm.instantiate_cterm ([], is) cb) ct)
 210.921 +        |> apsnd (pair ((cv, ct) :: is) o Thm.transitive thm)
 210.922 +    | NONE => ([], (is, transitive (Conv.rewr_conv elim) thm)))
 210.923 +in
 210.924 +fun skolemize ctxt ct =
 210.925 +  let
 210.926 +    val (lhs, rhs) = Thm.dest_binop ct
 210.927 +    val (rule, (cu, cbs)) = bodies_of ctxt lhs
 210.928 +    val ctab = snd (Thm.first_order_match (cu, rhs))
 210.929 +    fun lookup_var (cv, cb) = (cv, AList.lookup (op aconvc) ctab cv, cb)
 210.930 +  in
 210.931 +    ([], Thm.reflexive lhs)
 210.932 +    |> fold_map (sk_step rule) (map lookup_var cbs)
 210.933 +    |> apfst (rev o flat) o apsnd (MetaEq o snd)
 210.934 +  end
 210.935 +end
 210.936 +
 210.937 +
 210.938 +(* theory proof rules *)
 210.939 +
 210.940 +(** prove linear arithmetic problems via generalization **)
 210.941 +local
 210.942 +  val is_numeral = can HOLogic.dest_number
 210.943 +  fun is_number (Const (@{const_name uminus}, _) $ t) = is_numeral t
 210.944 +    | is_number t = is_numeral t
 210.945 +
 210.946 +  local
 210.947 +    val int_distrib = @{lemma "n * (x + y) == n * x + n * (y::int)"
 210.948 +      by (simp add: int_distrib)}
 210.949 +    val real_distrib = @{lemma "n * (x + y) == n * x + n * (y::real)"
 210.950 +      by (simp add: mult.add_right)}
 210.951 +    val int_assoc = @{lemma "n * (m * x) == (n * m) * (x::int)" by linarith}
 210.952 +    val real_assoc = @{lemma "n * (m * x) == (n * m) * (x::real)" by linarith}
 210.953 +
 210.954 +    val number_of_cong = @{lemma 
 210.955 +      "number_of x * number_of y == (number_of (x * y) :: int)"
 210.956 +      "number_of x * number_of y == (number_of (x * y) :: real)"
 210.957 +      by simp_all}
 210.958 +    val reduce_ss = HOL_ss addsimps @{thms mult_bin_simps}
 210.959 +      addsimps @{thms add_bin_simps} addsimps @{thms succ_bin_simps}
 210.960 +      addsimps @{thms minus_bin_simps} addsimps @{thms pred_bin_simps}
 210.961 +      addsimps number_of_cong
 210.962 +    val reduce_conv = Simplifier.rewrite reduce_ss
 210.963 +
 210.964 +    fun apply_conv distrib assoc u ct =
 210.965 +     ((case u of
 210.966 +        Const (@{const_name times}, _) $ n $ _ =>
 210.967 +          if is_number n
 210.968 +          then Conv.rewr_conv assoc then_conv Conv.arg1_conv reduce_conv 
 210.969 +          else Conv.rewr_conv distrib
 210.970 +      | _ => Conv.rewr_conv distrib)
 210.971 +      then_conv Conv.binop_conv (Conv.try_conv distrib_conv)) ct
 210.972 +
 210.973 +    and distrib_conv ct = 
 210.974 +      (case Thm.term_of ct of
 210.975 +        @{term "op * :: int => _"} $ n $ u =>
 210.976 +          if is_number n then apply_conv int_distrib int_assoc u
 210.977 +          else Conv.no_conv
 210.978 +      | @{term "op * :: real => _"} $ n $ u =>
 210.979 +          if is_number n then apply_conv real_distrib real_assoc u
 210.980 +          else Conv.no_conv
 210.981 +      | _ => Conv.no_conv) ct
 210.982 +  in
 210.983 +  val all_distrib_conv = More_Conv.top_sweep_conv (K distrib_conv)
 210.984 +  end
 210.985 +
 210.986 +  local
 210.987 +    fun make_ctxt ctxt = (ctxt, Ctermtab.empty, 1)
 210.988 +    fun fresh ct (cx as (ctxt, tab, idx)) =
 210.989 +      (case Ctermtab.lookup tab ct of
 210.990 +        SOME cv => (cv, cx)
 210.991 +      | NONE =>
 210.992 +          let val cv = certify_var ctxt idx (#T (Thm.rep_cterm ct))
 210.993 +          in (cv, (ctxt, Ctermtab.update (ct, cv) tab, idx + 1)) end)
 210.994 +
 210.995 +    fun fold_map_op f ct =
 210.996 +      let val (cf, cu) = Thm.dest_comb ct
 210.997 +      in f cu #>> Thm.capply cf end
 210.998 +
 210.999 +    fun fold_map_binop f1 f2 ct =
210.1000 +      let val ((cf, cu1), cu2) = apfst Thm.dest_comb (Thm.dest_comb ct)
210.1001 +      in f1 cu1 ##>> f2 cu2 #>> uncurry (Thm.mk_binop cf) end
210.1002 +
210.1003 +    fun mult f1 f2 ct t u =
210.1004 +      if is_number t 
210.1005 +      then if is_number u then pair ct else fold_map_binop f1 f2 ct
210.1006 +      else fresh ct
210.1007 +
210.1008 +    fun poly ct =
210.1009 +      (case Thm.term_of ct of
210.1010 +        Const (@{const_name plus}, _) $ _ $ _ => fold_map_binop poly poly ct
210.1011 +      | Const (@{const_name minus}, _) $ _ $ _ => fold_map_binop poly poly ct
210.1012 +      | Const (@{const_name times}, _) $ t $ u => mult pair fresh ct t u
210.1013 +      | Const (@{const_name div}, _) $ t $ u => mult fresh pair ct t u
210.1014 +      | Const (@{const_name mod}, _) $ t $ u => mult fresh pair ct t u
210.1015 +      | t => if is_number t then pair ct else fresh ct)
210.1016 +
210.1017 +    val ineq_ops = [@{term "op = :: int => _"}, @{term "op < :: int => _"},
210.1018 +      @{term "op <= :: int => _"}, @{term "op = :: real => _"},
210.1019 +      @{term "op < :: real => _"}, @{term "op <= :: real => _"}]
210.1020 +    fun ineq ct =
210.1021 +      (case Thm.term_of ct of
210.1022 +        t $ _ $ _ =>
210.1023 +          if member (op =) ineq_ops t then fold_map_binop poly poly ct
210.1024 +          else raise CTERM ("arith_lemma", [ct])
210.1025 +      | @{term Not} $ (t $ _ $ _) =>
210.1026 +          if member (op =) ineq_ops t
210.1027 +          then fold_map_op (fold_map_binop poly poly) ct
210.1028 +          else raise CTERM ("arith_lemma", [ct])
210.1029 +      | _ => raise CTERM ("arith_lemma", [ct]))
210.1030 +
210.1031 +    fun conj ct =
210.1032 +      (case Thm.term_of ct of
210.1033 +        @{term "op &"} $ _ $ _ => fold_map_binop conj conj ct
210.1034 +      | @{term "~False"} => pair ct
210.1035 +      | _ => ineq ct)
210.1036 +
210.1037 +    fun disj ct =
210.1038 +      (case Thm.term_of ct of
210.1039 +        @{term "op |"} $ _ $ _ => fold_map_binop disj disj ct
210.1040 +      | @{term False} => pair ct
210.1041 +      | _ => conj ct)
210.1042 +  in
210.1043 +  fun prove_arith ctxt thms ct =
210.1044 +    let
210.1045 +      val (goal, (_, tab, _)) =
210.1046 +        make_ctxt ctxt
210.1047 +        |> fold_map (fold_map_op ineq o Thm.cprop_of) thms
210.1048 +        ||>> fold_map_op disj ct
210.1049 +        |>> uncurry (fold_rev (Thm.mk_binop @{cterm "op ==>"}))
210.1050 +    in
210.1051 +      Goal.prove_internal [] goal (fn _ => Arith_Data.arith_tac ctxt 1)
210.1052 +      |> Thm.instantiate ([], map swap (Ctermtab.dest tab))
210.1053 +      |> fold (fn th1 => fn th2 => Thm.implies_elim th2 th1) thms
210.1054 +    end
210.1055 +  end
210.1056 +in
210.1057 +fun arith_lemma ctxt thms ct =
210.1058 +  let val thms' = map (Conv.fconv_rule (all_distrib_conv ctxt)) thms
210.1059 +  in with_conv (all_distrib_conv ctxt) (prove_arith ctxt thms') ct end
210.1060 +end
210.1061 +
210.1062 +(** theory lemmas: linear arithmetic, arrays **)
210.1063 +local
210.1064 +  val array_ss = HOL_ss addsimps @{thms array_rules}
210.1065 +  fun array_tac thms =
210.1066 +    Tactic.cut_facts_tac thms
210.1067 +    THEN' Simplifier.asm_full_simp_tac array_ss
210.1068 +
210.1069 +  fun full_arith_tac ctxt thms =
210.1070 +    Tactic.cut_facts_tac thms
210.1071 +    THEN' Arith_Data.arith_tac ctxt
210.1072 +in
210.1073 +fun th_lemma ctxt thms ct =
210.1074 +  Thm (try_apply ctxt "th-lemma" [
210.1075 +    ("abstract arith", arith_lemma ctxt thms),
210.1076 +    ("array", by_tac' (array_tac thms)),
210.1077 +    ("full arith", by_tac' (full_arith_tac ctxt thms))] (T.mk_prop ct))
210.1078 +end
210.1079 +
210.1080 +
210.1081 +(** rewriting: prove equalities:
210.1082 +      * ACI of conjunction/disjunction
210.1083 +      * contradiction, excluded middle
210.1084 +      * logical rewriting rules (for negation, implication, equivalence,
210.1085 +          distinct)
210.1086 +      * normal forms for polynoms (integer/real arithmetic)
210.1087 +      * quantifier elimination over linear arithmetic
210.1088 +      * ... ? **)
210.1089 +structure Z3_Rewrite_Rules =
210.1090 +struct
210.1091 +  val name = "z3_rewrite"
210.1092 +  val descr = "Z3 rewrite rules used in proof reconstruction"
210.1093 +
210.1094 +  structure Data = GenericDataFun
210.1095 +  (
210.1096 +    type T = thm Net.net
210.1097 +    val empty = Net.empty
210.1098 +    val extend = I
210.1099 +    fun merge _ = Net.merge Thm.eq_thm_prop
210.1100 +  )
210.1101 +  val get = Data.get o Context.Proof
210.1102 +
210.1103 +  val entry = ` Thm.prop_of o Simplifier.rewrite_rule [true_false]
210.1104 +  val eq = Thm.eq_thm_prop
210.1105 +  val ins = Net.insert_term eq o entry and del = Net.delete_term eq o entry
210.1106 +  fun insert thm net = ins thm net handle Net.INSERT => net
210.1107 +  fun delete thm net = del thm net handle Net.DELETE => net
210.1108 +
210.1109 +  val add = Thm.declaration_attribute (Data.map o insert)
210.1110 +  val del = Thm.declaration_attribute (Data.map o delete)
210.1111 +  val setup = Attrib.setup (Binding.name name) (Attrib.add_del add del) descr
210.1112 +end
210.1113 +
210.1114 +local
210.1115 +  val contra_rule = @{lemma "P ==> ~P ==> False" by (rule notE)}
210.1116 +  fun contra_left conj thm =
210.1117 +    let
210.1118 +      fun make_tab xs = fold Termtab.update xs Termtab.empty
210.1119 +      val tab = make_tab (explode_term conj true (prop_of thm))
210.1120 +      fun pnlits (t, nrs) =
210.1121 +        (case t of
210.1122 +          @{term Not} $ u => Termtab.lookup tab u |> Option.map (pair nrs)
210.1123 +        | _ => NONE)
210.1124 +    in
210.1125 +      (case Termtab.lookup tab @{term False} of
210.1126 +        SOME rs => extract_lit thm rs
210.1127 +      | NONE =>
210.1128 +          pairself (extract_lit thm) (the (Termtab.get_first NONE pnlits tab))
210.1129 +          |> (fn (nlit, plit) => nlit COMP (plit COMP contra_rule)))
210.1130 +    end
210.1131 +  val falseE_v = Thm.dest_arg (Thm.dest_arg (Thm.cprop_of @{thm FalseE}))
210.1132 +  fun contra_right ct = Thm.instantiate ([], [(falseE_v, ct)]) @{thm FalseE}
210.1133 +  fun contradiction conj ct =
210.1134 +    iff_intro (under_assumption (contra_left conj) ct) (contra_right ct)
210.1135 +
210.1136 +  fun conj_disj ct =
210.1137 +    let
210.1138 +      val cp as (cl, _) = Thm.dest_binop (Thm.dest_arg ct)
210.1139 +      val (lhs, rhs) = pairself Thm.term_of cp
210.1140 +    in
210.1141 +      if is_conj lhs andalso rhs = @{term False}
210.1142 +      then contradiction true cl
210.1143 +      else if is_disj lhs andalso rhs = @{term "~False"}
210.1144 +      then contrapos2 (contradiction false o fst) cp
210.1145 +      else prove_conj_disj_eq (Thm.dest_arg ct)
210.1146 +    end
210.1147 +
210.1148 +  val distinct =
210.1149 +    let val try_unfold = Conv.try_conv unfold_distinct_conv
210.1150 +    in with_conv (Conv.arg_conv (Conv.binop_conv try_unfold)) conj_disj end
210.1151 +
210.1152 +  val nnf_neg_rule = @{lemma "~~P == P" by fastsimp}
210.1153 +  val nnf_cd_rules = @{lemma "~(P | Q) == ~P & ~Q" "~(P & Q) == ~P | ~Q"
210.1154 +    by fastsimp+}
210.1155 +
210.1156 +  fun nnf_conv ct = Conv.try_conv (
210.1157 +    (Conv.rewr_conv nnf_neg_rule then_conv nnf_conv) else_conv
210.1158 +    (More_Conv.rewrs_conv nnf_cd_rules then_conv Conv.binop_conv nnf_conv)) ct
210.1159 +  val iffI_rule = @{lemma "~P | Q ==> ~Q | P ==> P = Q" by fast}
210.1160 +  fun arith_tac ctxt = CSUBGOAL (fn (goal, i) =>
210.1161 +    let val prep_then = with_conv (Conv.arg_conv (Conv.binop_conv nnf_conv))
210.1162 +    in Tactic.rtac (prep_then (arith_lemma ctxt []) goal) i end)
210.1163 +  fun arith_eq_tac ctxt =
210.1164 +    Tactic.rtac iffI_rule THEN_ALL_NEW arith_tac ctxt
210.1165 +    ORELSE' arith_tac ctxt
210.1166 +
210.1167 +  val simpset = HOL_ss addsimps @{thms array_rules}
210.1168 +    addsimps @{thms ring_distribs} addsimps @{thms field_eq_simps}
210.1169 +    addsimps @{thms arith_special} addsimps @{thms less_bin_simps}
210.1170 +    addsimps @{thms le_bin_simps} addsimps @{thms eq_bin_simps}
210.1171 +    addsimps @{thms add_bin_simps} addsimps @{thms succ_bin_simps}
210.1172 +    addsimps @{thms minus_bin_simps} addsimps @{thms pred_bin_simps}
210.1173 +    addsimps @{thms mult_bin_simps} addsimps @{thms iszero_simps}
210.1174 +    addsimprocs [
210.1175 +      Simplifier.simproc @{theory} "fast_int_arith" [
210.1176 +        "(m::int) < n", "(m::int) <= n", "(m::int) = n"] (K Lin_Arith.simproc),
210.1177 +      Simplifier.simproc @{theory} "fast_real_arith" [
210.1178 +        "(m::real) < n", "(m::real) <= n", "(m::real) = n"]
210.1179 +        (K Lin_Arith.simproc)]
210.1180 +  val simp_tac = CHANGED o Simplifier.simp_tac simpset
210.1181 +    ORELSE' Classical.best_tac HOL_cs
210.1182 +in
210.1183 +fun rewrite ctxt thms ct =
210.1184 +  let val rules_net = Z3_Rewrite_Rules.get ctxt
210.1185 +  in
210.1186 +    Thm (try_apply ctxt "rewrite" [
210.1187 +      ("schematic rule", the o net_instance rules_net),
210.1188 +      ("conj/disj", conj_disj),
210.1189 +      ("distinct", distinct),
210.1190 +      ("arith", by_tac' (arith_eq_tac ctxt)),
210.1191 +      ("classical", by_tac' (Classical.best_tac HOL_cs)),
210.1192 +      ("simp", by_tac' simp_tac),
210.1193 +      ("full arith", by_tac' (Arith_Data.arith_tac ctxt))] (T.mk_prop ct))
210.1194 +  end
210.1195 +end
210.1196 +
210.1197 +
210.1198 +(* tracing and debugging *)
210.1199 +
210.1200 +fun check idx r ct ((_, p), _) =
210.1201 +  let val thm = thm_of p |> tap (Thm.join_proofs o single)
210.1202 +  in
210.1203 +    if (Thm.cprop_of thm) aconvc (T.mk_prop ct) then ()
210.1204 +    else z3_exn ("proof step failed: " ^ quote (string_of_rule r) ^
210.1205 +      " (#" ^ string_of_int idx ^ ")")
210.1206 +  end
210.1207 +
210.1208 +local
210.1209 +  fun trace_before ctxt idx (r, ps, ct) =
210.1210 +    Pretty.string_of (
210.1211 +      Pretty.big_list ("#" ^ string_of_int idx ^ ": " ^ string_of_rule r) [
210.1212 +        Pretty.big_list "assumptions:"
210.1213 +          (map (Display.pretty_thm ctxt o thm_of o fst) ps),
210.1214 +        Pretty.block [Pretty.str "goal: ",
210.1215 +          Syntax.pretty_term ctxt (Thm.term_of ct)]])
210.1216 +
210.1217 +  fun trace_after ctxt ((_, p), _) = Pretty.string_of (Pretty.block
210.1218 +    [Pretty.str "result: ", Display.pretty_thm ctxt (thm_of p)])
210.1219 +in
210.1220 +fun trace_rule ctxt idx prove r ps ct ptab =
210.1221 +  let
210.1222 +    val _ = SMT_Solver.trace_msg ctxt (trace_before ctxt idx) (r, ps, ct)
210.1223 +    val result = prove r ps ct ptab
210.1224 +    val _ = SMT_Solver.trace_msg ctxt (trace_after ctxt) result
210.1225 +  in result end
210.1226 +end
210.1227 +
210.1228 +
210.1229 +(* overall reconstruction procedure *)
210.1230 +
210.1231 +fun not_supported r =
210.1232 +  z3_exn ("proof rule not implemented: " ^ quote (string_of_rule r))
210.1233 +
210.1234 +fun prove ctxt assms =
210.1235 +  let
210.1236 +    val prems = Option.map (prepare_assms ctxt) assms
210.1237 +
210.1238 +    fun step r ps ct ptab =
210.1239 +      (case (r, ps) of
210.1240 +        (* core rules *)
210.1241 +        (TrueAxiom, _) => (([], Thm true_thm), ptab)
210.1242 +      | (Asserted, _) => (([], asserted ctxt prems ct), ptab)
210.1243 +      | (Goal, _) => (([], asserted ctxt prems ct), ptab)
210.1244 +      | (ModusPonens, [(p, _), (q, _)]) => (([], mp q (thm_of p)), ptab)
210.1245 +      | (ModusPonensOeq, [(p, _), (q, _)]) => (([], mp q (thm_of p)), ptab)
210.1246 +      | (AndElim, [(p, (_, i))]) => apfst (pair []) (and_elim (p, i) ct ptab)
210.1247 +      | (NotOrElim, [(p, (_, i))]) =>
210.1248 +          apfst (pair []) (not_or_elim (p, i) ct ptab)
210.1249 +      | (Hypothesis, _) => (([], Thm (Thm.assume (T.mk_prop ct))), ptab)
210.1250 +      | (Lemma, [(p, _)]) => (([], lemma (thm_of p) ct), ptab)
210.1251 +      | (UnitResolution, (p, _) :: ps) =>
210.1252 +          (([], unit_resolution (thm_of p) (map (thm_of o fst) ps) ct), ptab)
210.1253 +      | (IffTrue, [(p, _)]) => (([], iff_true (thm_of p)), ptab)
210.1254 +      | (IffFalse, [(p, _)]) => (([], iff_false (thm_of p)), ptab)
210.1255 +      | (Distributivity, _) => (([], distributivity ct), ptab)
210.1256 +      | (DefAxiom, _) => (([], def_axiom ctxt ct), ptab)
210.1257 +      | (IntroDef, _) => (intro_def ct, ptab)
210.1258 +      | (ApplyDef, [(p, _)]) => (([], apply_def (thm_of p)), ptab)
210.1259 +      | (IffOeq, [(p, _)]) => (([], p), ptab)
210.1260 +      | (NnfPos, _) => (([], nnf ctxt ps ct), ptab)
210.1261 +      | (NnfNeg, _) => (([], nnf ctxt ps ct), ptab)
210.1262 +
210.1263 +        (* equality rules *)
210.1264 +      | (Reflexivity, _) => (([], refl ct), ptab)
210.1265 +      | (Symmetry, [(p, _)]) => (([], symm p), ptab)
210.1266 +      | (Transitivity, [(p, _), (q, _)]) => (([], trans p q), ptab)
210.1267 +      | (Monotonicity, _) => (([], monotonicity (map fst ps) ct), ptab)
210.1268 +      | (Commutativity, _) => (([], commutativity ct), ptab)
210.1269 +
210.1270 +        (* quantifier rules *)
210.1271 +      | (QuantIntro, [p]) => (([], quant_intro ctxt p ct), ptab)
210.1272 +      | (PullQuant, _) => (([], pull_quant ct), ptab)
210.1273 +      | (PushQuant, _) => (([], push_quant ct), ptab)
210.1274 +      | (ElimUnusedVars, _) => (([], elim_unused_vars ctxt ct), ptab)
210.1275 +      | (DestEqRes, _) => (([], dest_eq_res ct), ptab)
210.1276 +      | (QuantInst, _) => (([], quant_inst ct), ptab)
210.1277 +      | (Skolemize, _) => (skolemize ctxt ct, ptab)
210.1278 +
210.1279 +        (* theory rules *)
210.1280 +      | (ThLemma, _) => (([], th_lemma ctxt (map (thm_of o fst) ps) ct), ptab)
210.1281 +      | (Rewrite, _) => (([], rewrite ctxt [] ct), ptab)
210.1282 +      | (RewriteStar, ps) =>
210.1283 +          (([], rewrite ctxt (map (thm_of o fst) ps) ct), ptab)
210.1284 +
210.1285 +      | (NnfStar, _) => not_supported r
210.1286 +      | (CnfStar, _) => not_supported r
210.1287 +      | (TransitivityStar, _) => not_supported r
210.1288 +      | (PullQuantStar, _) => not_supported r
210.1289 +
210.1290 +      | _ => z3_exn ("Proof rule " ^ quote (string_of_rule r) ^
210.1291 +         " has an unexpected number of arguments."))
210.1292 +
210.1293 +    fun eq_hyp (ct, cu) = Thm.dest_arg1 ct aconvc Thm.dest_arg1 cu
210.1294 +
210.1295 +    fun conclude idx rule prop ((hypss, ps), ptab) =
210.1296 +      trace_rule ctxt idx step rule ps prop ptab
210.1297 +      |> Config.get ctxt SMT_Solver.trace ? tap (check idx rule prop)
210.1298 +      |>> apfst (distinct eq_hyp o fold append hypss)
210.1299 +
210.1300 +    fun add_sequent idx vars (hyps, thm) ptab =
210.1301 +      let val s = Sequent {hyps=hyps, vars=vars, thm=thm}
210.1302 +      in ((hyps, (thm, vars)), Inttab.update (idx, s) ptab) end
210.1303 +
210.1304 +    fun lookup idx ptab =
210.1305 +      (case Inttab.lookup ptab idx of
210.1306 +        SOME (Unproved {rule, subs, vars, prop}) =>
210.1307 +          fold_map lookup subs ptab
210.1308 +          |>> split_list
210.1309 +          |>> apsnd (map2 (fn idx => fn (p, vs) => (p, (vs, idx))) subs)
210.1310 +          |> conclude idx rule prop
210.1311 +          |-> add_sequent idx vars
210.1312 +      | SOME (Sequent {hyps, vars, thm}) => ((hyps, (thm, vars)), ptab)
210.1313 +      | NONE => z3_exn ("unknown proof id: " ^ quote (string_of_int idx)))
210.1314 +
210.1315 +    fun result (hyps, (thm, _)) =
210.1316 +      fold SMT_Normalize.discharge_definition hyps (thm_of thm)
210.1317 +
210.1318 +  in (fn ptab => fn idx => result (fst (lookup idx ptab))) end
210.1319 +
210.1320 +val setup = Z3_Rewrite_Rules.setup
210.1321 +
210.1322 +end
   211.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   211.2 +++ b/src/HOL/SMT/Tools/z3_proof_terms.ML	Tue Oct 20 10:11:30 2009 +0200
   211.3 @@ -0,0 +1,246 @@
   211.4 +(*  Title:      HOL/SMT/Tools/z3_proof_terms.ML
   211.5 +    Author:     Sascha Boehme, TU Muenchen
   211.6 +
   211.7 +Reconstruction functions for terms occurring in Z3 proofs.
   211.8 +*)
   211.9 +
  211.10 +signature Z3_PROOF_TERMS =
  211.11 +sig
  211.12 +  val mk_prop: Thm.cterm -> Thm.cterm
  211.13 +  val mk_meta_eq: Thm.cterm -> Thm.cterm -> Thm.cterm
  211.14 +
  211.15 +  type preterm
  211.16 +
  211.17 +  val compile: theory -> Name.context -> preterm -> Thm.cterm * Thm.cterm list
  211.18 +
  211.19 +  val mk_bound: theory -> int -> typ -> preterm
  211.20 +  val mk_fun: Thm.cterm -> preterm list -> preterm
  211.21 +  val mk_forall: theory -> string * typ -> preterm -> preterm
  211.22 +  val mk_exists: theory -> string * typ -> preterm -> preterm
  211.23 +
  211.24 +  val mk_true: preterm
  211.25 +  val mk_false: preterm
  211.26 +  val mk_not: preterm -> preterm
  211.27 +  val mk_and: preterm list -> preterm
  211.28 +  val mk_or: preterm list -> preterm
  211.29 +  val mk_implies: preterm -> preterm -> preterm
  211.30 +  val mk_iff: preterm -> preterm -> preterm
  211.31 +
  211.32 +  val mk_eq: preterm -> preterm -> preterm
  211.33 +  val mk_if: preterm -> preterm -> preterm -> preterm
  211.34 +  val mk_distinct: preterm list -> preterm
  211.35 +
  211.36 +  val mk_pat: preterm list -> preterm
  211.37 +  val mk_nopat: preterm list -> preterm
  211.38 +  val mk_trigger: preterm list -> preterm -> preterm
  211.39 +
  211.40 +  val mk_access: preterm -> preterm -> preterm
  211.41 +  val mk_update: preterm -> preterm -> preterm -> preterm
  211.42 +
  211.43 +  val mk_int_num: int -> preterm
  211.44 +  val mk_real_frac_num: int * int option -> preterm
  211.45 +  val mk_uminus: preterm -> preterm
  211.46 +  val mk_add: preterm -> preterm -> preterm
  211.47 +  val mk_sub: preterm -> preterm -> preterm
  211.48 +  val mk_mul: preterm -> preterm -> preterm
  211.49 +  val mk_int_div: preterm -> preterm -> preterm
  211.50 +  val mk_real_div: preterm -> preterm -> preterm
  211.51 +  val mk_rem: preterm -> preterm -> preterm
  211.52 +  val mk_mod: preterm -> preterm -> preterm
  211.53 +  val mk_lt: preterm -> preterm -> preterm
  211.54 +  val mk_le: preterm -> preterm -> preterm
  211.55 +
  211.56 +  val wordT : int -> typ
  211.57 +  val mk_bv_num : theory -> int -> int -> preterm
  211.58 +
  211.59 +  val var_prefix: string
  211.60 +end
  211.61 +
  211.62 +structure Z3_Proof_Terms: Z3_PROOF_TERMS =
  211.63 +struct
  211.64 +
  211.65 +fun instTs cUs (cTs, ct) = Thm.instantiate_cterm (cTs ~~ cUs, []) ct
  211.66 +fun instT cU (cT, ct) = instTs [cU] ([cT], ct)
  211.67 +fun mk_inst_pair destT cpat = (destT (Thm.ctyp_of_term cpat), cpat)
  211.68 +val destT1 = hd o Thm.dest_ctyp
  211.69 +val destT2 = hd o tl o Thm.dest_ctyp
  211.70 +
  211.71 +
  211.72 +val mk_prop = Thm.capply @{cterm Trueprop}
  211.73 +
  211.74 +val meta_eq = mk_inst_pair destT1 @{cpat "op =="}
  211.75 +fun mk_meta_eq ct = Thm.mk_binop (instT (Thm.ctyp_of_term ct) meta_eq) ct
  211.76 +
  211.77 +
  211.78 +datatype preterm = Preterm of {
  211.79 +  cterm: Thm.cterm,
  211.80 +  vars: (int * Thm.cterm) list }
  211.81 +
  211.82 +fun mk_preterm (ct, vs) = Preterm {cterm=ct, vars=vs}
  211.83 +fun dest_preterm (Preterm {cterm, vars}) = (cterm, vars)
  211.84 +fun ctyp_of_preterm (Preterm {cterm, ...}) = Thm.ctyp_of_term cterm
  211.85 +
  211.86 +fun instT' e = instT (ctyp_of_preterm e)
  211.87 +
  211.88 +val maxidx_of = #maxidx o Thm.rep_cterm
  211.89 +
  211.90 +val var_prefix = "v"
  211.91 +
  211.92 +local
  211.93 +fun mk_inst nctxt cert vs =
  211.94 +  let
  211.95 +    val max = fold (curry Int.max o fst) vs 0
  211.96 +    val names = fst (Name.variants (replicate (max + 1) var_prefix) nctxt)
  211.97 +    fun mk (i, v) = (v, cert (Free (nth names i, #T (Thm.rep_cterm v))))
  211.98 +  in map mk vs end
  211.99 +
 211.100 +fun fix_vars _ _ ct [] = (ct, [])
 211.101 +  | fix_vars thy nctxt ct vs =
 211.102 +      let
 211.103 +        val cert = Thm.cterm_of thy
 211.104 +        val inst = mk_inst nctxt cert vs
 211.105 +      in (Thm.instantiate_cterm ([], inst) ct, map snd inst) end
 211.106 +in
 211.107 +fun compile thy nctxt (Preterm {cterm, vars}) = fix_vars thy nctxt cterm vars
 211.108 +end
 211.109 +
 211.110 +local
 211.111 +fun app e (ct1, vs1) =
 211.112 +  let
 211.113 +    fun part (var as (i, v)) (inst, vs) =
 211.114 +      (case AList.lookup (op =) vs1 i of
 211.115 +        NONE => (inst, var :: vs)
 211.116 +      | SOME v' => ((v, v') :: inst, vs))
 211.117 +
 211.118 +    val (ct2, vs2) = dest_preterm e
 211.119 +    val incr =
 211.120 +      if maxidx_of ct1 < 0 orelse maxidx_of ct2 < 0 then I
 211.121 +      else Thm.incr_indexes_cterm (maxidx_of ct1 + 1)
 211.122 +
 211.123 +    val (inst, vs) = fold (part o apsnd incr) vs2 ([], vs1)
 211.124 +    val ct2' = Thm.instantiate_cterm ([], inst) (incr ct2)
 211.125 +  in (Thm.capply ct1 ct2', vs) end
 211.126 +in
 211.127 +fun mk_fun ct es = mk_preterm (fold app es (ct, []))
 211.128 +fun mk_binop f t u = mk_fun f [t, u]
 211.129 +fun mk_nary _ e [] = e
 211.130 +  | mk_nary ct _ es = uncurry (fold_rev (mk_binop ct)) (split_last es)
 211.131 +end
 211.132 +
 211.133 +fun mk_bound thy i T =
 211.134 +  let val ct = Thm.cterm_of thy (Var ((Name.uu, 0), T))
 211.135 +  in mk_preterm (ct, [(i, ct)]) end
 211.136 +
 211.137 +local
 211.138 +fun mk_quant q thy (n, T) e =
 211.139 +  let
 211.140 +    val (ct, vs) = dest_preterm e
 211.141 +    val cv =
 211.142 +      (case AList.lookup (op =) vs 0 of
 211.143 +        SOME cv => cv
 211.144 +      | _ => Thm.cterm_of thy (Var ((Name.uu, maxidx_of ct + 1), T)))
 211.145 +    val cq = instT (Thm.ctyp_of_term cv) q
 211.146 +    fun dec (i, v) = if i = 0 then NONE else SOME (i - 1, v)
 211.147 +  in mk_preterm (Thm.capply cq (Thm.cabs cv ct), map_filter dec vs) end
 211.148 +in
 211.149 +val mk_forall = mk_quant (mk_inst_pair (destT1 o destT1) @{cpat All})
 211.150 +val mk_exists = mk_quant (mk_inst_pair (destT1 o destT1) @{cpat Ex})
 211.151 +end
 211.152 +
 211.153 +
 211.154 +val mk_false = mk_fun @{cterm False} []
 211.155 +val mk_not = mk_fun @{cterm Not} o single
 211.156 +val mk_true = mk_not mk_false
 211.157 +val mk_and = mk_nary @{cterm "op &"} mk_true
 211.158 +val mk_or = mk_nary @{cterm "op |"} mk_false
 211.159 +val mk_implies = mk_binop @{cterm "op -->"}
 211.160 +val mk_iff = mk_binop @{cterm "op = :: bool => _"}
 211.161 +
 211.162 +val eq = mk_inst_pair destT1 @{cpat "op ="}
 211.163 +fun mk_eq t u = mk_binop (instT' t eq) t u
 211.164 +
 211.165 +val if_term = mk_inst_pair (destT1 o destT2) @{cpat If}
 211.166 +fun mk_if c t u = mk_fun (instT' t if_term) [c, t, u]
 211.167 +
 211.168 +val nil_term = mk_inst_pair destT1 @{cpat Nil}
 211.169 +val cons_term = mk_inst_pair destT1 @{cpat Cons}
 211.170 +fun mk_list cT es =
 211.171 +  fold_rev (mk_binop (instT cT cons_term)) es (mk_fun (instT cT nil_term) [])
 211.172 +
 211.173 +val distinct = mk_inst_pair (destT1 o destT1) @{cpat distinct}
 211.174 +fun mk_distinct [] = mk_true
 211.175 +  | mk_distinct (es as (e :: _)) =
 211.176 +      mk_fun (instT' e distinct) [mk_list (ctyp_of_preterm e) es]
 211.177 +
 211.178 +val pat = mk_inst_pair destT1 @{cpat pat}
 211.179 +val nopat = mk_inst_pair destT1 @{cpat nopat}
 211.180 +val andpat = mk_inst_pair (destT1 o destT2) @{cpat "op andpat"}
 211.181 +fun mk_gen_pat _ [] = raise TERM ("mk_gen_pat: empty pattern", [])
 211.182 +  | mk_gen_pat pat (e :: es) =
 211.183 +      let fun mk t p = mk_fun (instT' t andpat) [p, t]
 211.184 +      in fold mk es (mk_fun (instT' e pat) [e]) end
 211.185 +val mk_pat = mk_gen_pat pat
 211.186 +val mk_nopat = mk_gen_pat nopat
 211.187 +
 211.188 +fun mk_trigger es e = mk_fun @{cterm trigger} [mk_list @{ctyp pattern} es, e]
 211.189 +
 211.190 +
 211.191 +val access = mk_inst_pair (Thm.dest_ctyp o destT1) @{cpat apply}
 211.192 +fun mk_access array index =
 211.193 +  let val cTs = Thm.dest_ctyp (ctyp_of_preterm array)
 211.194 +  in mk_fun (instTs cTs access) [array, index] end
 211.195 +
 211.196 +val update = mk_inst_pair (Thm.dest_ctyp o destT1) @{cpat fun_upd}
 211.197 +fun mk_update array index value =
 211.198 +  let val cTs = Thm.dest_ctyp (ctyp_of_preterm array)
 211.199 +  in mk_fun (instTs cTs update) [array, index, value] end
 211.200 +
 211.201 +
 211.202 +fun mk_int_num i = mk_fun (Numeral.mk_cnumber @{ctyp int} i) []
 211.203 +fun mk_real_num i = mk_fun (Numeral.mk_cnumber @{ctyp real} i) []
 211.204 +
 211.205 +fun mk_real_frac_num (e, NONE) = mk_real_num e
 211.206 +  | mk_real_frac_num (e, SOME d) =
 211.207 +      mk_binop @{cterm "op / :: real => _"} (mk_real_num e) (mk_real_num d)
 211.208 +
 211.209 +fun has_int_type e = (Thm.typ_of (ctyp_of_preterm e) = @{typ int})
 211.210 +fun choose e i r = if has_int_type e then i else r
 211.211 +
 211.212 +val uminus_i = @{cterm "uminus :: int => _"}
 211.213 +val uminus_r = @{cterm "uminus :: real => _"}
 211.214 +fun mk_uminus e = mk_fun (choose e uminus_i uminus_r) [e]
 211.215 +
 211.216 +fun arith_op int_op real_op t u = mk_binop (choose t int_op real_op) t u
 211.217 +
 211.218 +val mk_add = arith_op @{cterm "op + :: int => _"} @{cterm "op + :: real => _"}
 211.219 +val mk_sub = arith_op @{cterm "op - :: int => _"} @{cterm "op - :: real => _"}
 211.220 +val mk_mul = arith_op @{cterm "op * :: int => _"} @{cterm "op * :: real => _"}
 211.221 +val mk_int_div = mk_binop @{cterm "op div :: int => _"}
 211.222 +val mk_real_div = mk_binop @{cterm "op / :: real => _"}
 211.223 +val mk_rem = mk_binop @{cterm "op rem :: int => _"}
 211.224 +val mk_mod = mk_binop @{cterm "op mod :: int => _"}
 211.225 +val mk_lt = arith_op @{cterm "op < :: int => _"} @{cterm "op < :: real => _"}
 211.226 +val mk_le = arith_op @{cterm "op <= :: int => _"} @{cterm "op <= :: real => _"}
 211.227 +
 211.228 +fun binT size =
 211.229 +  let
 211.230 +    fun bitT i T =
 211.231 +      if i = 0
 211.232 +      then Type (@{type_name "Numeral_Type.bit0"}, [T])
 211.233 +      else Type (@{type_name "Numeral_Type.bit1"}, [T])
 211.234 +
 211.235 +    fun binT i =
 211.236 +      if i = 0 then @{typ "Numeral_Type.num0"}
 211.237 +      else if i = 1 then @{typ "Numeral_Type.num1"}
 211.238 +      else let val (q, r) = Integer.div_mod i 2 in bitT r (binT q) end
 211.239 +  in
 211.240 +    if size >= 0 then binT size
 211.241 +    else raise TYPE ("mk_binT: " ^ string_of_int size, [], [])
 211.242 +  end
 211.243 +
 211.244 +fun wordT size = Type (@{type_name "word"}, [binT size])
 211.245 +
 211.246 +fun mk_bv_num thy num size =
 211.247 +  mk_fun (Numeral.mk_cnumber (Thm.ctyp_of thy (wordT size)) num) []
 211.248 +
 211.249 +end
   212.1 --- a/src/HOL/SMT/Tools/z3_solver.ML	Tue Oct 20 08:10:47 2009 +0200
   212.2 +++ b/src/HOL/SMT/Tools/z3_solver.ML	Tue Oct 20 10:11:30 2009 +0200
   212.3 @@ -8,7 +8,6 @@
   212.4  sig
   212.5    val proofs: bool Config.T
   212.6    val options: string Config.T
   212.7 -
   212.8    val setup: theory -> theory
   212.9  end
  212.10  
  212.11 @@ -57,20 +56,18 @@
  212.12    check_unsat recon output
  212.13    |> K @{cprop False}
  212.14  
  212.15 -(* FIXME
  212.16  fun prover (SMT_Solver.ProofData {context, output, recon, assms}) =
  212.17    check_unsat recon output
  212.18    |> Z3_Proof.reconstruct context assms recon
  212.19 -*)
  212.20  
  212.21  fun solver oracle ctxt =
  212.22    let val with_proof = Config.get ctxt proofs
  212.23    in
  212.24      SMT_Solver.SolverConfig {
  212.25 -      name = {env_var=env_var, remote_name=solver_name},
  212.26 +      command = {env_var=env_var, remote_name=solver_name},
  212.27 +      arguments = cmdline_options ctxt,
  212.28        interface = Z3_Interface.interface,
  212.29 -      arguments = cmdline_options ctxt,
  212.30 -      reconstruct = (*FIXME:if with_proof then prover else*) oracle }
  212.31 +      reconstruct = if with_proof then prover else oracle }
  212.32    end
  212.33  
  212.34  val setup =
   213.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   213.2 +++ b/src/HOL/SMT/Z3.thy	Tue Oct 20 10:11:30 2009 +0200
   213.3 @@ -0,0 +1,24 @@
   213.4 +(*  Title:      HOL/SMT/Z3.thy
   213.5 +    Author:     Sascha Boehme, TU Muenchen
   213.6 +*)
   213.7 +
   213.8 +header {* Binding to the SMT solver Z3, with proof reconstruction *}
   213.9 +
  213.10 +theory Z3
  213.11 +imports SMT_Base
  213.12 +uses
  213.13 +  "Tools/z3_proof_terms.ML"
  213.14 +  "Tools/z3_proof_rules.ML"
  213.15 +  "Tools/z3_proof.ML"
  213.16 +  "Tools/z3_model.ML"
  213.17 +  "Tools/z3_interface.ML"
  213.18 +  "Tools/z3_solver.ML"
  213.19 +begin
  213.20 +
  213.21 +setup {* Z3_Proof_Rules.setup #> Z3_Solver.setup *}
  213.22 +
  213.23 +lemmas [z3_rewrite] =
  213.24 +  refl eq_commute conj_commute disj_commute simp_thms nnf_simps
  213.25 +  ring_distribs field_eq_simps
  213.26 +
  213.27 +end
   214.1 --- a/src/HOL/SMT/etc/settings	Tue Oct 20 08:10:47 2009 +0200
   214.2 +++ b/src/HOL/SMT/etc/settings	Tue Oct 20 10:11:30 2009 +0200
   214.3 @@ -1,9 +1,11 @@
   214.4  ISABELLE_SMT="$COMPONENT"
   214.5  
   214.6 -REMOTE_SMT_SOLVER="$ISABELLE_SMT/lib/scripts/remote_smt.pl"
   214.7 +REMOTE_SMT_SOLVER="$COMPONENT/lib/scripts/remote_smt.pl"
   214.8  
   214.9  REMOTE_SMT_URL="http://www4.in.tum.de/smt/smt"
  214.10  
  214.11 +CERT_SMT_SOLVER="$COMPONENT/lib/scripts/cert_smt.pl"
  214.12 +
  214.13  #
  214.14  # Paths to local SMT solvers:
  214.15  #
   215.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   215.2 +++ b/src/HOL/SMT/lib/scripts/cert_smt.pl	Tue Oct 20 10:11:30 2009 +0200
   215.3 @@ -0,0 +1,33 @@
   215.4 +#
   215.5 +# Author: Sascha Boehme, TU Muenchen
   215.6 +#
   215.7 +# Fake SMT solver: check that input matches previously computed input and
   215.8 +# and return previously computed output.
   215.9 +#
  215.10 +
  215.11 +use strict;
  215.12 +use File::Compare;
  215.13 +
  215.14 +
  215.15 +# arguments
  215.16 +
  215.17 +my $cert_path = $ARGV[0];
  215.18 +my $new_problem = $ARGV[1];
  215.19 +
  215.20 +
  215.21 +# check content of new problem file against old problem file
  215.22 +
  215.23 +my $old_problem = $cert_path;
  215.24 +my $old_proof = $cert_path . ".proof";
  215.25 +
  215.26 +if (-e $old_problem and compare($old_problem, $new_problem) == 0) {
  215.27 +  if (-e $old_proof) {
  215.28 +    open FILE, "<$old_proof";
  215.29 +    foreach (<FILE>) {
  215.30 +      print $_;
  215.31 +    }
  215.32 +    close FILE;
  215.33 +  }
  215.34 +  else { print "ERROR: unable to open proof file\n"; }
  215.35 +}
  215.36 +else { print "ERROR: bad problem\n"; }
   216.1 --- a/src/HOL/SMT/lib/scripts/remote_smt.pl	Tue Oct 20 08:10:47 2009 +0200
   216.2 +++ b/src/HOL/SMT/lib/scripts/remote_smt.pl	Tue Oct 20 10:11:30 2009 +0200
   216.3 @@ -1,7 +1,8 @@
   216.4  #
   216.5 -# Script to invoke remote SMT solvers.
   216.6  # Author: Sascha Boehme, TU Muenchen
   216.7  #
   216.8 +# Invoke remote SMT solvers.
   216.9 +#
  216.10  
  216.11  use strict;
  216.12  use LWP;