do not embed 'nat' into 'int's in 'smt2' method -- this is highly inefficient and decreases the Sledgehammer success rate significantly
authorblanchet
Sun Jul 27 21:11:35 2014 +0200 (2014-07-27)
changeset 57696fb71c6f100f8
parent 57695 987c9ceeaafd
child 57697 44341963ade3
do not embed 'nat' into 'int's in 'smt2' method -- this is highly inefficient and decreases the Sledgehammer success rate significantly
src/HOL/SMT2.thy
src/HOL/SMT_Examples/SMT_Examples.certs2
src/HOL/SMT_Examples/SMT_Examples.thy
src/HOL/SMT_Examples/SMT_Tests.thy
src/HOL/SMT_Examples/SMT_Word_Examples.certs2
src/HOL/Tools/SMT2/smt2_normalize.ML
src/HOL/Word/Tools/smt2_word.ML
src/HOL/Word/Word.thy
     1.1 --- a/src/HOL/SMT2.thy	Sun Jul 27 15:44:08 2014 +0200
     1.2 +++ b/src/HOL/SMT2.thy	Sun Jul 27 21:11:35 2014 +0200
     1.3 @@ -13,15 +13,15 @@
     1.4  
     1.5  text {*
     1.6  Some SMT solvers support patterns as a quantifier instantiation
     1.7 -heuristics.  Patterns may either be positive terms (tagged by "pat")
     1.8 +heuristics. Patterns may either be positive terms (tagged by "pat")
     1.9  triggering quantifier instantiations -- when the solver finds a
    1.10  term matching a positive pattern, it instantiates the corresponding
    1.11  quantifier accordingly -- or negative terms (tagged by "nopat")
    1.12 -inhibiting quantifier instantiations.  A list of patterns
    1.13 +inhibiting quantifier instantiations. A list of patterns
    1.14  of the same kind is called a multipattern, and all patterns in a
    1.15  multipattern are considered conjunctively for quantifier instantiation.
    1.16  A list of multipatterns is called a trigger, and their multipatterns
    1.17 -act disjunctively during quantifier instantiation.  Each multipattern
    1.18 +act disjunctively during quantifier instantiation. Each multipattern
    1.19  should mention at least all quantified variables of the preceding
    1.20  quantifier block.
    1.21  *}
    1.22 @@ -46,7 +46,7 @@
    1.23  
    1.24  text {*
    1.25  Application is made explicit for constants occurring with varying
    1.26 -numbers of arguments.  This is achieved by the introduction of the
    1.27 +numbers of arguments. This is achieved by the introduction of the
    1.28  following constant.
    1.29  *}
    1.30  
    1.31 @@ -54,7 +54,7 @@
    1.32  
    1.33  text {*
    1.34  Some solvers support a theory of arrays which can be used to encode
    1.35 -higher-order functions.  The following set of lemmas specifies the
    1.36 +higher-order functions. The following set of lemmas specifies the
    1.37  properties of such (extensional) arrays.
    1.38  *}
    1.39  
    1.40 @@ -66,26 +66,6 @@
    1.41  lemma case_bool_if[abs_def]: "case_bool x y P = (if P then x else y)"
    1.42    by simp
    1.43  
    1.44 -lemma nat_int': "\<forall>n. nat (int n) = n" by simp
    1.45 -lemma int_nat_nneg: "\<forall>i. i \<ge> 0 \<longrightarrow> int (nat i) = i" by simp
    1.46 -lemma int_nat_neg: "\<forall>i. i < 0 \<longrightarrow> int (nat i) = 0" by simp
    1.47 -
    1.48 -lemma nat_zero_as_int: "0 = nat 0" by simp
    1.49 -lemma nat_one_as_int: "1 = nat 1" by simp
    1.50 -lemma nat_numeral_as_int: "numeral = (\<lambda>i. nat (numeral i))" by simp
    1.51 -lemma nat_less_as_int: "op < = (\<lambda>a b. int a < int b)" by simp
    1.52 -lemma nat_leq_as_int: "op \<le> = (\<lambda>a b. int a <= int b)" by simp
    1.53 -lemma Suc_as_int: "Suc = (\<lambda>a. nat (int a + 1))" by (rule ext) simp
    1.54 -lemma nat_plus_as_int: "op + = (\<lambda>a b. nat (int a + int b))" by (rule ext)+ simp
    1.55 -lemma nat_minus_as_int: "op - = (\<lambda>a b. nat (int a - int b))" by (rule ext)+ simp
    1.56 -lemma nat_times_as_int: "op * = (\<lambda>a b. nat (int a * int b))" by (simp add: nat_mult_distrib)
    1.57 -lemma nat_div_as_int: "op div = (\<lambda>a b. nat (int a div int b))" by (simp add: nat_div_distrib)
    1.58 -lemma nat_mod_as_int: "op mod = (\<lambda>a b. nat (int a mod int b))" by (simp add: nat_mod_distrib)
    1.59 -
    1.60 -lemma int_Suc: "int (Suc n) = int n + 1" by simp
    1.61 -lemma int_plus: "int (n + m) = int n + int m" by (rule of_nat_add)
    1.62 -lemma int_minus: "int (n - m) = int (nat (int n - int m))" by auto
    1.63 -
    1.64  lemmas Ex1_def_raw = Ex1_def[abs_def]
    1.65  lemmas Ball_def_raw = Ball_def[abs_def]
    1.66  lemmas Bex_def_raw = Bex_def[abs_def]
    1.67 @@ -154,15 +134,14 @@
    1.68  *}
    1.69  
    1.70  
    1.71 -
    1.72  subsection {* General configuration options *}
    1.73  
    1.74  text {*
    1.75  The option @{text smt2_solver} can be used to change the target SMT
    1.76 -solver.  The possible values can be obtained from the @{text smt2_status}
    1.77 +solver. The possible values can be obtained from the @{text smt2_status}
    1.78  command.
    1.79  
    1.80 -Due to licensing restrictions, Z3 is not enabled by default.  Z3 is free
    1.81 +Due to licensing restrictions, Z3 is not enabled by default. Z3 is free
    1.82  for non-commercial applications and can be enabled by setting Isabelle
    1.83  system option @{text z3_non_commercial} to @{text yes}.
    1.84  *}
    1.85 @@ -170,15 +149,14 @@
    1.86  declare [[smt2_solver = z3]]
    1.87  
    1.88  text {*
    1.89 -Since SMT solvers are potentially non-terminating, there is a timeout
    1.90 -(given in seconds) to restrict their runtime.  A value greater than
    1.91 -120 (seconds) is in most cases not advisable.
    1.92 +Since SMT solvers are potentially nonterminating, there is a timeout
    1.93 +(given in seconds) to restrict their runtime.
    1.94  *}
    1.95  
    1.96  declare [[smt2_timeout = 20]]
    1.97  
    1.98  text {*
    1.99 -SMT solvers apply randomized heuristics.  In case a problem is not
   1.100 +SMT solvers apply randomized heuristics. In case a problem is not
   1.101  solvable by an SMT solver, changing the following option might help.
   1.102  *}
   1.103  
   1.104 @@ -186,16 +164,16 @@
   1.105  
   1.106  text {*
   1.107  In general, the binding to SMT solvers runs as an oracle, i.e, the SMT
   1.108 -solvers are fully trusted without additional checks.  The following
   1.109 +solvers are fully trusted without additional checks. The following
   1.110  option can cause the SMT solver to run in proof-producing mode, giving
   1.111 -a checkable certificate.  This is currently only implemented for Z3.
   1.112 +a checkable certificate. This is currently only implemented for Z3.
   1.113  *}
   1.114  
   1.115  declare [[smt2_oracle = false]]
   1.116  
   1.117  text {*
   1.118  Each SMT solver provides several commandline options to tweak its
   1.119 -behaviour.  They can be passed to the solver by setting the following
   1.120 +behaviour. They can be passed to the solver by setting the following
   1.121  options.
   1.122  *}
   1.123  
   1.124 @@ -207,14 +185,14 @@
   1.125  The SMT method provides an inference mechanism to detect simple triggers
   1.126  in quantified formulas, which might increase the number of problems
   1.127  solvable by SMT solvers (note: triggers guide quantifier instantiations
   1.128 -in the SMT solver).  To turn it on, set the following option.
   1.129 +in the SMT solver). To turn it on, set the following option.
   1.130  *}
   1.131  
   1.132  declare [[smt2_infer_triggers = false]]
   1.133  
   1.134  text {*
   1.135  Enable the following option to use built-in support for div/mod, datatypes,
   1.136 -and records in Z3.  Currently, this is implemented only in oracle mode.
   1.137 +and records in Z3. Currently, this is implemented only in oracle mode.
   1.138  *}
   1.139  
   1.140  declare [[z3_new_extensions = false]]
   1.141 @@ -227,9 +205,9 @@
   1.142  all following applications of an SMT solver a cached in that file.
   1.143  Any further application of the same SMT solver (using the very same
   1.144  configuration) re-uses the cached certificate instead of invoking the
   1.145 -solver.  An empty string disables caching certificates.
   1.146 +solver. An empty string disables caching certificates.
   1.147  
   1.148 -The filename should be given as an explicit path.  It is good
   1.149 +The filename should be given as an explicit path. It is good
   1.150  practice to use the name of the current theory (with ending
   1.151  @{text ".certs"} instead of @{text ".thy"}) as the certificates file.
   1.152  Certificate files should be used at most once in a certain theory context,
   1.153 @@ -241,7 +219,7 @@
   1.154  text {*
   1.155  The option @{text smt2_read_only_certificates} controls whether only
   1.156  stored certificates are should be used or invocation of an SMT solver
   1.157 -is allowed.  When set to @{text true}, no SMT solver will ever be
   1.158 +is allowed. When set to @{text true}, no SMT solver will ever be
   1.159  invoked and only the existing certificates found in the configured
   1.160  cache are used;  when set to @{text false} and there is no cached
   1.161  certificate for some proposition, then the configured SMT solver is
   1.162 @@ -251,11 +229,10 @@
   1.163  declare [[smt2_read_only_certificates = false]]
   1.164  
   1.165  
   1.166 -
   1.167  subsection {* Tracing *}
   1.168  
   1.169  text {*
   1.170 -The SMT method, when applied, traces important information.  To
   1.171 +The SMT method, when applied, traces important information. To
   1.172  make it entirely silent, set the following option to @{text false}.
   1.173  *}
   1.174  
   1.175 @@ -273,7 +250,7 @@
   1.176  subsection {* Schematic rules for Z3 proof reconstruction *}
   1.177  
   1.178  text {*
   1.179 -Several prof rules of Z3 are not very well documented.  There are two
   1.180 +Several prof rules of Z3 are not very well documented. There are two
   1.181  lemma groups which can turn failing Z3 proof reconstruction attempts
   1.182  into succeeding ones: the facts in @{text z3_rule} are tried prior to
   1.183  any implemented reconstruction procedure for all uncertain Z3 proof
     2.1 --- a/src/HOL/SMT_Examples/SMT_Examples.certs2	Sun Jul 27 15:44:08 2014 +0200
     2.2 +++ b/src/HOL/SMT_Examples/SMT_Examples.certs2	Sun Jul 27 21:11:35 2014 +0200
     2.3 @@ -3600,6 +3600,33 @@
     2.4  (let ((@x73 (not-or-elim @x70 $x62)))
     2.5  (unit-resolution (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x65 (not $x62))) @x73 $x65) @x74 false))))))))))))))))))
     2.6  
     2.7 +271390ea915947de195c2202e30f90bb84689d60 26 0
     2.8 +unsat
     2.9 +((set-logic <null>)
    2.10 +(proof
    2.11 +(let ((?x35 (+ y$ 1)))
    2.12 +(let ((?x36 (* a$ ?x35)))
    2.13 +(let ((?x34 (* a$ x$)))
    2.14 +(let ((?x37 (+ ?x34 ?x36)))
    2.15 +(let ((?x30 (+ x$ 1)))
    2.16 +(let ((?x32 (+ ?x30 y$)))
    2.17 +(let ((?x33 (* a$ ?x32)))
    2.18 +(let (($x38 (= ?x33 ?x37)))
    2.19 +(let (($x39 (not $x38)))
    2.20 +(let (($x82 (= (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$))) true)))
    2.21 +(let (($x80 (= $x38 (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$))))))
    2.22 +(let ((@x76 (rewrite (= (+ ?x34 (+ a$ (* a$ y$))) (+ a$ ?x34 (* a$ y$))))))
    2.23 +(let ((@x66 (monotonicity (rewrite (= ?x35 (+ 1 y$))) (= ?x36 (* a$ (+ 1 y$))))))
    2.24 +(let ((@x71 (trans @x66 (rewrite (= (* a$ (+ 1 y$)) (+ a$ (* a$ y$)))) (= ?x36 (+ a$ (* a$ y$))))))
    2.25 +(let ((@x78 (trans (monotonicity @x71 (= ?x37 (+ ?x34 (+ a$ (* a$ y$))))) @x76 (= ?x37 (+ a$ ?x34 (* a$ y$))))))
    2.26 +(let ((@x58 (rewrite (= (* a$ (+ 1 x$ y$)) (+ a$ ?x34 (* a$ y$))))))
    2.27 +(let ((@x46 (monotonicity (rewrite (= ?x30 (+ 1 x$))) (= ?x32 (+ (+ 1 x$) y$)))))
    2.28 +(let ((@x51 (trans @x46 (rewrite (= (+ (+ 1 x$) y$) (+ 1 x$ y$))) (= ?x32 (+ 1 x$ y$)))))
    2.29 +(let ((@x60 (trans (monotonicity @x51 (= ?x33 (* a$ (+ 1 x$ y$)))) @x58 (= ?x33 (+ a$ ?x34 (* a$ y$))))))
    2.30 +(let ((@x88 (monotonicity (trans (monotonicity @x60 @x78 $x80) (rewrite $x82) (= $x38 true)) (= $x39 (not true)))))
    2.31 +(let ((@x92 (trans @x88 (rewrite (= (not true) false)) (= $x39 false))))
    2.32 +(mp (asserted $x39) @x92 false))))))))))))))))))))))))
    2.33 +
    2.34  d98ad8f668dead6f610669a52351ea0176a811b0 26 0
    2.35  unsat
    2.36  ((set-logic <null>)
    2.37 @@ -3627,33 +3654,6 @@
    2.38  (let ((@x73 (and-elim (not-or-elim (mp (asserted $x35) @x69 $x65) $x52) $x49)))
    2.39  ((_ th-lemma arith farkas 1 1 1) @x73 @x72 @x74 false))))))))))))))))))))))))
    2.40  
    2.41 -271390ea915947de195c2202e30f90bb84689d60 26 0
    2.42 -unsat
    2.43 -((set-logic <null>)
    2.44 -(proof
    2.45 -(let ((?x35 (+ y$ 1)))
    2.46 -(let ((?x36 (* a$ ?x35)))
    2.47 -(let ((?x34 (* a$ x$)))
    2.48 -(let ((?x37 (+ ?x34 ?x36)))
    2.49 -(let ((?x30 (+ x$ 1)))
    2.50 -(let ((?x32 (+ ?x30 y$)))
    2.51 -(let ((?x33 (* a$ ?x32)))
    2.52 -(let (($x38 (= ?x33 ?x37)))
    2.53 -(let (($x39 (not $x38)))
    2.54 -(let (($x82 (= (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$))) true)))
    2.55 -(let (($x80 (= $x38 (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$))))))
    2.56 -(let ((@x76 (rewrite (= (+ ?x34 (+ a$ (* a$ y$))) (+ a$ ?x34 (* a$ y$))))))
    2.57 -(let ((@x66 (monotonicity (rewrite (= ?x35 (+ 1 y$))) (= ?x36 (* a$ (+ 1 y$))))))
    2.58 -(let ((@x71 (trans @x66 (rewrite (= (* a$ (+ 1 y$)) (+ a$ (* a$ y$)))) (= ?x36 (+ a$ (* a$ y$))))))
    2.59 -(let ((@x78 (trans (monotonicity @x71 (= ?x37 (+ ?x34 (+ a$ (* a$ y$))))) @x76 (= ?x37 (+ a$ ?x34 (* a$ y$))))))
    2.60 -(let ((@x58 (rewrite (= (* a$ (+ 1 x$ y$)) (+ a$ ?x34 (* a$ y$))))))
    2.61 -(let ((@x46 (monotonicity (rewrite (= ?x30 (+ 1 x$))) (= ?x32 (+ (+ 1 x$) y$)))))
    2.62 -(let ((@x51 (trans @x46 (rewrite (= (+ (+ 1 x$) y$) (+ 1 x$ y$))) (= ?x32 (+ 1 x$ y$)))))
    2.63 -(let ((@x60 (trans (monotonicity @x51 (= ?x33 (* a$ (+ 1 x$ y$)))) @x58 (= ?x33 (+ a$ ?x34 (* a$ y$))))))
    2.64 -(let ((@x88 (monotonicity (trans (monotonicity @x60 @x78 $x80) (rewrite $x82) (= $x38 true)) (= $x39 (not true)))))
    2.65 -(let ((@x92 (trans @x88 (rewrite (= (not true) false)) (= $x39 false))))
    2.66 -(mp (asserted $x39) @x92 false))))))))))))))))))))))))
    2.67 -
    2.68  b216c79478e44396acca3654b76845499fc18a04 23 0
    2.69  unsat
    2.70  ((set-logic <null>)
    2.71 @@ -3730,842 +3730,6 @@
    2.72  (let ((@x152 (trans (monotonicity @x145 (= $x52 (not true))) (rewrite (= (not true) false)) (= $x52 false))))
    2.73  (mp (asserted $x52) @x152 false)))))))))))))))))))))))))))))))))))))))))))))))))
    2.74  
    2.75 -49c385b161a0c500f84c45f85272a8ec9574fef4 126 0
    2.76 -unsat
    2.77 -((set-logic AUFLIA)
    2.78 -(proof
    2.79 -(let ((?x29 (of_nat$ x$)))
    2.80 -(let ((?x30 (* 2 ?x29)))
    2.81 -(let ((?x31 (nat$ ?x30)))
    2.82 -(let ((?x212 (of_nat$ ?x31)))
    2.83 -(let ((?x532 (* (- 1) ?x212)))
    2.84 -(let ((?x533 (+ ?x30 ?x532)))
    2.85 -(let (($x513 (<= ?x533 0)))
    2.86 -(let (($x531 (= ?x533 0)))
    2.87 -(let (($x193 (>= ?x29 0)))
    2.88 -(let (($x487 (>= ?x212 1)))
    2.89 -(let (($x485 (= ?x212 1)))
    2.90 -(let ((?x33 (nat$ 1)))
    2.91 -(let ((?x504 (of_nat$ ?x33)))
    2.92 -(let (($x505 (= ?x504 1)))
    2.93 -(let (($x546 (forall ((?v0 Int) )(!(let ((?x49 (nat$ ?v0)))
    2.94 -(let ((?x50 (of_nat$ ?x49)))
    2.95 -(let (($x51 (= ?x50 ?v0)))
    2.96 -(let (($x64 (>= ?v0 0)))
    2.97 -(let (($x65 (not $x64)))
    2.98 -(or $x65 $x51)))))) :pattern ( (nat$ ?v0) )))
    2.99 -))
   2.100 -(let (($x71 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0)))
   2.101 -(let ((?x50 (of_nat$ ?x49)))
   2.102 -(let (($x51 (= ?x50 ?v0)))
   2.103 -(let (($x64 (>= ?v0 0)))
   2.104 -(let (($x65 (not $x64)))
   2.105 -(or $x65 $x51)))))))
   2.106 -))
   2.107 -(let ((?x49 (nat$ ?0)))
   2.108 -(let ((?x50 (of_nat$ ?x49)))
   2.109 -(let (($x51 (= ?x50 ?0)))
   2.110 -(let (($x64 (>= ?0 0)))
   2.111 -(let (($x65 (not $x64)))
   2.112 -(let (($x68 (or $x65 $x51)))
   2.113 -(let (($x53 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0)))
   2.114 -(let ((?x50 (of_nat$ ?x49)))
   2.115 -(let (($x51 (= ?x50 ?v0)))
   2.116 -(let (($x48 (<= 0 ?v0)))
   2.117 -(=> $x48 $x51))))))
   2.118 -))
   2.119 -(let (($x59 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0)))
   2.120 -(let ((?x50 (of_nat$ ?x49)))
   2.121 -(let (($x51 (= ?x50 ?v0)))
   2.122 -(or (not (<= 0 ?v0)) $x51)))))
   2.123 -))
   2.124 -(let ((@x67 (monotonicity (rewrite (= (<= 0 ?0) $x64)) (= (not (<= 0 ?0)) $x65))))
   2.125 -(let ((@x73 (quant-intro (monotonicity @x67 (= (or (not (<= 0 ?0)) $x51) $x68)) (= $x59 $x71))))
   2.126 -(let ((@x58 (rewrite (= (=> (<= 0 ?0) $x51) (or (not (<= 0 ?0)) $x51)))))
   2.127 -(let ((@x76 (mp (asserted $x53) (trans (quant-intro @x58 (= $x53 $x59)) @x73 (= $x53 $x71)) $x71)))
   2.128 -(let ((@x551 (mp (mp~ @x76 (nnf-pos (refl (~ $x68 $x68)) (~ $x71 $x71)) $x71) (quant-intro (refl (= $x68 $x68)) (= $x71 $x546)) $x546)))
   2.129 -(let (($x526 (not $x546)))
   2.130 -(let (($x489 (or $x526 $x505)))
   2.131 -(let ((@x506 (rewrite (= (>= 1 0) true))))
   2.132 -(let ((@x219 (trans (monotonicity @x506 (= (not (>= 1 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 1 0)) false))))
   2.133 -(let ((@x223 (monotonicity @x219 (= (or (not (>= 1 0)) $x505) (or false $x505)))))
   2.134 -(let ((@x503 (trans @x223 (rewrite (= (or false $x505) $x505)) (= (or (not (>= 1 0)) $x505) $x505))))
   2.135 -(let ((@x493 (monotonicity @x503 (= (or $x526 (or (not (>= 1 0)) $x505)) $x489))))
   2.136 -(let ((@x496 (trans @x493 (rewrite (= $x489 $x489)) (= (or $x526 (or (not (>= 1 0)) $x505)) $x489))))
   2.137 -(let ((@x497 (mp ((_ quant-inst 1) (or $x526 (or (not (>= 1 0)) $x505))) @x496 $x489)))
   2.138 -(let (($x34 (= ?x31 ?x33)))
   2.139 -(let ((@x42 (mp (asserted (not (not $x34))) (rewrite (= (not (not $x34)) $x34)) $x34)))
   2.140 -(let ((@x356 (trans (monotonicity @x42 (= ?x212 ?x504)) (unit-resolution @x497 @x551 $x505) $x485)))
   2.141 -(let ((@x371 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x487) (not (<= ?x212 0)))) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x485) $x487)) @x356 $x487) (not (<= ?x212 0)))))
   2.142 -(let ((@x374 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not (= ?x212 0)) (<= ?x212 0))) @x371 (not (= ?x212 0)))))
   2.143 -(let (($x515 (= ?x212 0)))
   2.144 -(let (($x517 (or $x193 $x515)))
   2.145 -(let (($x552 (forall ((?v0 Int) )(!(let ((?x49 (nat$ ?v0)))
   2.146 -(let ((?x50 (of_nat$ ?x49)))
   2.147 -(let (($x78 (= ?x50 0)))
   2.148 -(let (($x64 (>= ?v0 0)))
   2.149 -(or $x64 $x78))))) :pattern ( (nat$ ?v0) )))
   2.150 -))
   2.151 -(let (($x101 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0)))
   2.152 -(let ((?x50 (of_nat$ ?x49)))
   2.153 -(let (($x78 (= ?x50 0)))
   2.154 -(let (($x64 (>= ?v0 0)))
   2.155 -(or $x64 $x78))))))
   2.156 -))
   2.157 -(let ((@x556 (quant-intro (refl (= (or $x64 (= ?x50 0)) (or $x64 (= ?x50 0)))) (= $x101 $x552))))
   2.158 -(let ((@x120 (nnf-pos (refl (~ (or $x64 (= ?x50 0)) (or $x64 (= ?x50 0)))) (~ $x101 $x101))))
   2.159 -(let (($x80 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0)))
   2.160 -(let ((?x50 (of_nat$ ?x49)))
   2.161 -(let (($x78 (= ?x50 0)))
   2.162 -(let (($x77 (< ?v0 0)))
   2.163 -(=> $x77 $x78))))))
   2.164 -))
   2.165 -(let (($x86 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0)))
   2.166 -(let ((?x50 (of_nat$ ?x49)))
   2.167 -(let (($x78 (= ?x50 0)))
   2.168 -(let (($x77 (< ?v0 0)))
   2.169 -(let (($x82 (not $x77)))
   2.170 -(or $x82 $x78)))))))
   2.171 -))
   2.172 -(let (($x78 (= ?x50 0)))
   2.173 -(let (($x98 (or $x64 $x78)))
   2.174 -(let (($x77 (< ?0 0)))
   2.175 -(let (($x82 (not $x77)))
   2.176 -(let (($x83 (or $x82 $x78)))
   2.177 -(let ((@x97 (trans (monotonicity (rewrite (= $x77 $x65)) (= $x82 (not $x65))) (rewrite (= (not $x65) $x64)) (= $x82 $x64))))
   2.178 -(let ((@x105 (trans (quant-intro (rewrite (= (=> $x77 $x78) $x83)) (= $x80 $x86)) (quant-intro (monotonicity @x97 (= $x83 $x98)) (= $x86 $x101)) (= $x80 $x101))))
   2.179 -(let ((@x557 (mp (mp~ (mp (asserted $x80) @x105 $x101) @x120 $x101) @x556 $x552)))
   2.180 -(let (($x156 (not $x552)))
   2.181 -(let (($x520 (or $x156 $x193 $x515)))
   2.182 -(let ((@x530 (rewrite (= (>= ?x30 0) $x193))))
   2.183 -(let ((@x523 (monotonicity (monotonicity @x530 (= (or (>= ?x30 0) $x515) $x517)) (= (or $x156 (or (>= ?x30 0) $x515)) (or $x156 $x517)))))
   2.184 -(let ((@x215 (trans @x523 (rewrite (= (or $x156 $x517) $x520)) (= (or $x156 (or (>= ?x30 0) $x515)) $x520))))
   2.185 -(let ((@x229 (mp ((_ quant-inst (* 2 ?x29)) (or $x156 (or (>= ?x30 0) $x515))) @x215 $x520)))
   2.186 -(let (($x185 (not $x193)))
   2.187 -(let (($x534 (or $x185 $x531)))
   2.188 -(let (($x188 (or $x526 $x185 $x531)))
   2.189 -(let (($x213 (= ?x212 ?x30)))
   2.190 -(let (($x208 (>= ?x30 0)))
   2.191 -(let (($x209 (not $x208)))
   2.192 -(let (($x214 (or $x209 $x213)))
   2.193 -(let (($x189 (or $x526 $x214)))
   2.194 -(let ((@x536 (monotonicity (monotonicity @x530 (= $x209 $x185)) (rewrite (= $x213 $x531)) (= $x214 $x534))))
   2.195 -(let ((@x175 (trans (monotonicity @x536 (= $x189 (or $x526 $x534))) (rewrite (= (or $x526 $x534) $x188)) (= $x189 $x188))))
   2.196 -(let ((@x176 (mp ((_ quant-inst (* 2 ?x29)) $x189) @x175 $x188)))
   2.197 -(let ((@x470 (unit-resolution (unit-resolution @x176 @x551 $x534) (unit-resolution (unit-resolution @x229 @x557 $x517) @x374 $x193) $x531)))
   2.198 -(let (($x514 (>= ?x533 0)))
   2.199 -(let (($x486 (<= ?x212 1)))
   2.200 -((_ th-lemma arith gcd-test -1/2 -1/2 -1/2 -1/2) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x485) $x487)) @x356 $x487) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x485) $x486)) @x356 $x486) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x531) $x514)) @x470 $x514) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x531) $x513)) @x470 $x513) false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
   2.201 -
   2.202 -1c2b6530334930f2f4f6e0d6b73f1d249b6c5fd8 22 0
   2.203 -unsat
   2.204 -((set-logic AUFLIA)
   2.205 -(proof
   2.206 -(let ((?x28 (of_nat$ a$)))
   2.207 -(let (($x57 (>= ?x28 4)))
   2.208 -(let (($x64 (not (or (>= ?x28 3) (not $x57)))))
   2.209 -(let (($x34 (< (* 2 ?x28) 7)))
   2.210 -(let (($x30 (< ?x28 3)))
   2.211 -(let (($x38 (not $x30)))
   2.212 -(let (($x39 (or $x38 $x34)))
   2.213 -(let ((@x51 (monotonicity (rewrite (= $x30 (not (>= ?x28 3)))) (= $x38 (not (not (>= ?x28 3)))))))
   2.214 -(let ((@x55 (trans @x51 (rewrite (= (not (not (>= ?x28 3))) (>= ?x28 3))) (= $x38 (>= ?x28 3)))))
   2.215 -(let ((@x63 (monotonicity @x55 (rewrite (= $x34 (not $x57))) (= $x39 (or (>= ?x28 3) (not $x57))))))
   2.216 -(let ((@x44 (monotonicity (rewrite (= (=> $x30 $x34) $x39)) (= (not (=> $x30 $x34)) (not $x39)))))
   2.217 -(let ((@x68 (trans @x44 (monotonicity @x63 (= (not $x39) $x64)) (= (not (=> $x30 $x34)) $x64))))
   2.218 -(let ((@x71 (not-or-elim (mp (asserted (not (=> $x30 $x34))) @x68 $x64) $x57)))
   2.219 -(let (($x58 (not $x57)))
   2.220 -(let (($x47 (>= ?x28 3)))
   2.221 -(let (($x45 (not $x47)))
   2.222 -(let ((@x70 (not-or-elim (mp (asserted (not (=> $x30 $x34))) @x68 $x64) $x45)))
   2.223 -(unit-resolution (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x58 $x47)) @x70 $x58) @x71 false))))))))))))))))))))
   2.224 -
   2.225 -995f80f06d5874ea2208846fb3b3217c3a3b9bfd 147 0
   2.226 -unsat
   2.227 -((set-logic AUFLIA)
   2.228 -(proof
   2.229 -(let ((?x29 (of_nat$ y$)))
   2.230 -(let ((?x30 (+ 1 ?x29)))
   2.231 -(let ((?x31 (nat$ ?x30)))
   2.232 -(let ((?x32 (of_nat$ ?x31)))
   2.233 -(let ((?x43 (* (- 1) ?x29)))
   2.234 -(let ((?x44 (+ ?x43 ?x32)))
   2.235 -(let ((?x47 (nat$ ?x44)))
   2.236 -(let ((?x50 (of_nat$ ?x47)))
   2.237 -(let ((?x567 (* (- 1) ?x32)))
   2.238 -(let ((?x255 (+ ?x29 ?x567 ?x50)))
   2.239 -(let (($x513 (>= ?x255 0)))
   2.240 -(let (($x532 (= ?x255 0)))
   2.241 -(let ((?x568 (+ ?x29 ?x567)))
   2.242 -(let (($x248 (<= ?x568 0)))
   2.243 -(let (($x551 (<= ?x568 (- 1))))
   2.244 -(let (($x558 (= ?x568 (- 1))))
   2.245 -(let (($x229 (>= ?x29 (- 1))))
   2.246 -(let (($x387 (>= ?x29 0)))
   2.247 -(let ((?x154 (nat$ ?x29)))
   2.248 -(let ((?x388 (of_nat$ ?x154)))
   2.249 -(let (($x352 (= ?x388 0)))
   2.250 -(let (($x498 (or $x387 $x352)))
   2.251 -(let (($x584 (forall ((?v0 Int) )(!(let ((?x81 (nat$ ?v0)))
   2.252 -(let ((?x82 (of_nat$ ?x81)))
   2.253 -(let (($x110 (= ?x82 0)))
   2.254 -(let (($x95 (>= ?v0 0)))
   2.255 -(or $x95 $x110))))) :pattern ( (nat$ ?v0) )))
   2.256 -))
   2.257 -(let (($x133 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0)))
   2.258 -(let ((?x82 (of_nat$ ?x81)))
   2.259 -(let (($x110 (= ?x82 0)))
   2.260 -(let (($x95 (>= ?v0 0)))
   2.261 -(or $x95 $x110))))))
   2.262 -))
   2.263 -(let ((?x81 (nat$ ?0)))
   2.264 -(let ((?x82 (of_nat$ ?x81)))
   2.265 -(let (($x110 (= ?x82 0)))
   2.266 -(let (($x95 (>= ?0 0)))
   2.267 -(let (($x130 (or $x95 $x110)))
   2.268 -(let (($x112 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0)))
   2.269 -(let ((?x82 (of_nat$ ?x81)))
   2.270 -(let (($x110 (= ?x82 0)))
   2.271 -(let (($x109 (< ?v0 0)))
   2.272 -(=> $x109 $x110))))))
   2.273 -))
   2.274 -(let (($x118 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0)))
   2.275 -(let ((?x82 (of_nat$ ?x81)))
   2.276 -(let (($x110 (= ?x82 0)))
   2.277 -(let (($x109 (< ?v0 0)))
   2.278 -(let (($x114 (not $x109)))
   2.279 -(or $x114 $x110)))))))
   2.280 -))
   2.281 -(let ((@x125 (monotonicity (rewrite (= (< ?0 0) (not $x95))) (= (not (< ?0 0)) (not (not $x95))))))
   2.282 -(let ((@x129 (trans @x125 (rewrite (= (not (not $x95)) $x95)) (= (not (< ?0 0)) $x95))))
   2.283 -(let ((@x135 (quant-intro (monotonicity @x129 (= (or (not (< ?0 0)) $x110) $x130)) (= $x118 $x133))))
   2.284 -(let ((@x117 (rewrite (= (=> (< ?0 0) $x110) (or (not (< ?0 0)) $x110)))))
   2.285 -(let ((@x138 (mp (asserted $x112) (trans (quant-intro @x117 (= $x112 $x118)) @x135 (= $x112 $x133)) $x133)))
   2.286 -(let ((@x589 (mp (mp~ @x138 (nnf-pos (refl (~ $x130 $x130)) (~ $x133 $x133)) $x133) (quant-intro (refl (= $x130 $x130)) (= $x133 $x584)) $x584)))
   2.287 -(let (($x555 (not $x584)))
   2.288 -(let (($x500 (or $x555 $x387 $x352)))
   2.289 -(let ((@x404 (mp ((_ quant-inst (of_nat$ y$)) (or $x555 $x498)) (rewrite (= (or $x555 $x498) $x500)) $x500)))
   2.290 -(let ((@x487 (unit-resolution (unit-resolution @x404 @x589 $x498) (hypothesis (not $x387)) $x352)))
   2.291 -(let (($x239 (= ?x154 y$)))
   2.292 -(let (($x570 (forall ((?v0 Nat$) )(!(= (nat$ (of_nat$ ?v0)) ?v0) :pattern ( (of_nat$ ?v0) )))
   2.293 -))
   2.294 -(let (($x77 (forall ((?v0 Nat$) )(= (nat$ (of_nat$ ?v0)) ?v0))
   2.295 -))
   2.296 -(let ((@x575 (trans (rewrite (= $x77 $x570)) (rewrite (= $x570 $x570)) (= $x77 $x570))))
   2.297 -(let ((@x144 (refl (~ (= (nat$ (of_nat$ ?0)) ?0) (= (nat$ (of_nat$ ?0)) ?0)))))
   2.298 -(let ((@x576 (mp (mp~ (asserted $x77) (nnf-pos @x144 (~ $x77 $x77)) $x77) @x575 $x570)))
   2.299 -(let (($x241 (not $x570)))
   2.300 -(let (($x231 (or $x241 $x239)))
   2.301 -(let ((@x242 ((_ quant-inst y$) $x231)))
   2.302 -(let ((@x475 (monotonicity (symm (unit-resolution @x242 @x576 $x239) (= y$ ?x154)) (= ?x29 ?x388))))
   2.303 -(let ((@x480 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not (= ?x29 0)) $x387)) (hypothesis (not $x387)) (trans @x475 @x487 (= ?x29 0)) false)))
   2.304 -(let ((@x468 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x387) $x229)) (lemma @x480 $x387) $x229)))
   2.305 -(let (($x564 (not $x229)))
   2.306 -(let (($x559 (or $x564 $x558)))
   2.307 -(let (($x578 (forall ((?v0 Int) )(!(let ((?x81 (nat$ ?v0)))
   2.308 -(let ((?x82 (of_nat$ ?x81)))
   2.309 -(let (($x83 (= ?x82 ?v0)))
   2.310 -(let (($x95 (>= ?v0 0)))
   2.311 -(let (($x97 (not $x95)))
   2.312 -(or $x97 $x83)))))) :pattern ( (nat$ ?v0) )))
   2.313 -))
   2.314 -(let (($x103 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0)))
   2.315 -(let ((?x82 (of_nat$ ?x81)))
   2.316 -(let (($x83 (= ?x82 ?v0)))
   2.317 -(let (($x95 (>= ?v0 0)))
   2.318 -(let (($x97 (not $x95)))
   2.319 -(or $x97 $x83)))))))
   2.320 -))
   2.321 -(let ((@x580 (refl (= (or (not $x95) (= ?x82 ?0)) (or (not $x95) (= ?x82 ?0))))))
   2.322 -(let ((@x139 (refl (~ (or (not $x95) (= ?x82 ?0)) (or (not $x95) (= ?x82 ?0))))))
   2.323 -(let (($x85 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0)))
   2.324 -(let ((?x82 (of_nat$ ?x81)))
   2.325 -(let (($x83 (= ?x82 ?v0)))
   2.326 -(let (($x80 (<= 0 ?v0)))
   2.327 -(=> $x80 $x83))))))
   2.328 -))
   2.329 -(let (($x91 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0)))
   2.330 -(let ((?x82 (of_nat$ ?x81)))
   2.331 -(let (($x83 (= ?x82 ?v0)))
   2.332 -(or (not (<= 0 ?v0)) $x83)))))
   2.333 -))
   2.334 -(let (($x83 (= ?x82 ?0)))
   2.335 -(let (($x97 (not $x95)))
   2.336 -(let (($x100 (or $x97 $x83)))
   2.337 -(let (($x88 (or (not (<= 0 ?0)) $x83)))
   2.338 -(let ((@x99 (monotonicity (rewrite (= (<= 0 ?0) $x95)) (= (not (<= 0 ?0)) $x97))))
   2.339 -(let ((@x93 (quant-intro (rewrite (= (=> (<= 0 ?0) $x83) $x88)) (= $x85 $x91))))
   2.340 -(let ((@x107 (trans @x93 (quant-intro (monotonicity @x99 (= $x88 $x100)) (= $x91 $x103)) (= $x85 $x103))))
   2.341 -(let ((@x148 (mp~ (mp (asserted $x85) @x107 $x103) (nnf-pos @x139 (~ $x103 $x103)) $x103)))
   2.342 -(let ((@x583 (mp @x148 (quant-intro @x580 (= $x103 $x578)) $x578)))
   2.343 -(let (($x202 (not $x578)))
   2.344 -(let (($x544 (or $x202 $x564 $x558)))
   2.345 -(let (($x557 (or (not (>= ?x30 0)) (= ?x32 ?x30))))
   2.346 -(let (($x205 (or $x202 $x557)))
   2.347 -(let ((@x566 (monotonicity (rewrite (= (>= ?x30 0) $x229)) (= (not (>= ?x30 0)) $x564))))
   2.348 -(let ((@x560 (monotonicity @x566 (rewrite (= (= ?x32 ?x30) $x558)) (= $x557 $x559))))
   2.349 -(let ((@x549 (trans (monotonicity @x560 (= $x205 (or $x202 $x559))) (rewrite (= (or $x202 $x559) $x544)) (= $x205 $x544))))
   2.350 -(let ((@x550 (mp ((_ quant-inst (+ 1 ?x29)) $x205) @x549 $x544)))
   2.351 -(let ((@x453 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x558) $x551)) (unit-resolution (unit-resolution @x550 @x583 $x559) @x468 $x558) $x551)))
   2.352 -(let (($x251 (not $x248)))
   2.353 -(let (($x535 (or $x251 $x532)))
   2.354 -(let (($x523 (or $x202 $x251 $x532)))
   2.355 -(let (($x541 (or (not (>= ?x44 0)) (= ?x50 ?x44))))
   2.356 -(let (($x524 (or $x202 $x541)))
   2.357 -(let ((@x531 (monotonicity (rewrite (= (>= ?x44 0) $x248)) (= (not (>= ?x44 0)) $x251))))
   2.358 -(let ((@x522 (monotonicity @x531 (rewrite (= (= ?x50 ?x44) $x532)) (= $x541 $x535))))
   2.359 -(let ((@x369 (trans (monotonicity @x522 (= $x524 (or $x202 $x535))) (rewrite (= (or $x202 $x535) $x523)) (= $x524 $x523))))
   2.360 -(let ((@x511 (mp ((_ quant-inst (+ ?x43 ?x32)) $x524) @x369 $x523)))
   2.361 -(let ((@x459 (unit-resolution (unit-resolution @x511 @x583 $x535) (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x551) $x248)) @x453 $x248) $x532)))
   2.362 -(let (($x59 (<= ?x50 0)))
   2.363 -(let ((@x65 (monotonicity (rewrite (= (< 0 ?x50) (not $x59))) (= (not (< 0 ?x50)) (not (not $x59))))))
   2.364 -(let ((@x69 (trans @x65 (rewrite (= (not (not $x59)) $x59)) (= (not (< 0 ?x50)) $x59))))
   2.365 -(let (($x53 (< 0 ?x50)))
   2.366 -(let (($x56 (not $x53)))
   2.367 -(let (($x38 (not (< (* 0 ?x32) (of_nat$ (nat$ (- ?x32 ?x29)))))))
   2.368 -(let ((@x49 (monotonicity (rewrite (= (- ?x32 ?x29) ?x44)) (= (nat$ (- ?x32 ?x29)) ?x47))))
   2.369 -(let ((@x55 (monotonicity (rewrite (= (* 0 ?x32) 0)) (monotonicity @x49 (= (of_nat$ (nat$ (- ?x32 ?x29))) ?x50)) (= (< (* 0 ?x32) (of_nat$ (nat$ (- ?x32 ?x29)))) $x53))))
   2.370 -(let ((@x72 (mp (asserted $x38) (trans (monotonicity @x55 (= $x38 $x56)) @x69 (= $x38 $x59)) $x59)))
   2.371 -((_ th-lemma arith farkas -1 -1 1) @x72 @x453 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x532) $x513)) @x459 $x513) false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
   2.372 -
   2.373 -5d99a07ea08069a53b86d7f3330815887331e82a 145 0
   2.374 -unsat
   2.375 -((set-logic AUFLIA)
   2.376 -(proof
   2.377 -(let ((?x29 (of_nat$ y$)))
   2.378 -(let ((?x30 (+ 1 ?x29)))
   2.379 -(let ((?x31 (nat$ ?x30)))
   2.380 -(let ((?x32 (of_nat$ ?x31)))
   2.381 -(let ((?x48 (+ (- 1) ?x32)))
   2.382 -(let ((?x51 (nat$ ?x48)))
   2.383 -(let ((?x585 (of_nat$ ?x51)))
   2.384 -(let ((?x299 (* (- 1) ?x585)))
   2.385 -(let ((?x434 (+ ?x29 ?x299)))
   2.386 -(let (($x436 (>= ?x434 0)))
   2.387 -(let (($x558 (= ?x29 ?x585)))
   2.388 -(let (($x54 (= ?x51 y$)))
   2.389 -(let (($x88 (<= ?x32 0)))
   2.390 -(let (($x98 (not (or (= (not $x88) $x54) (not $x88)))))
   2.391 -(let (($x40 (=> (not (ite (< 0 ?x32) true false)) false)))
   2.392 -(let (($x33 (< 0 ?x32)))
   2.393 -(let (($x34 (ite $x33 true false)))
   2.394 -(let (($x38 (= $x34 (= (nat$ (- ?x32 1)) y$))))
   2.395 -(let (($x42 (or false (or $x38 $x40))))
   2.396 -(let (($x43 (not $x42)))
   2.397 -(let (($x60 (= $x33 $x54)))
   2.398 -(let (($x75 (or $x60 $x33)))
   2.399 -(let ((@x94 (monotonicity (rewrite (= $x33 (not $x88))) (= $x60 (= (not $x88) $x54)))))
   2.400 -(let ((@x97 (monotonicity @x94 (rewrite (= $x33 (not $x88))) (= $x75 (or (= (not $x88) $x54) (not $x88))))))
   2.401 -(let ((@x70 (monotonicity (monotonicity (rewrite (= $x34 $x33)) (= (not $x34) (not $x33))) (= $x40 (=> (not $x33) false)))))
   2.402 -(let ((@x74 (trans @x70 (rewrite (= (=> (not $x33) false) $x33)) (= $x40 $x33))))
   2.403 -(let ((@x53 (monotonicity (rewrite (= (- ?x32 1) ?x48)) (= (nat$ (- ?x32 1)) ?x51))))
   2.404 -(let ((@x59 (monotonicity (rewrite (= $x34 $x33)) (monotonicity @x53 (= (= (nat$ (- ?x32 1)) y$) $x54)) (= $x38 (= $x33 $x54)))))
   2.405 -(let ((@x77 (monotonicity (trans @x59 (rewrite (= (= $x33 $x54) $x60)) (= $x38 $x60)) @x74 (= (or $x38 $x40) $x75))))
   2.406 -(let ((@x84 (trans (monotonicity @x77 (= $x42 (or false $x75))) (rewrite (= (or false $x75) $x75)) (= $x42 $x75))))
   2.407 -(let ((@x102 (trans (monotonicity @x84 (= $x43 (not $x75))) (monotonicity @x97 (= (not $x75) $x98)) (= $x43 $x98))))
   2.408 -(let ((@x106 (not-or-elim (mp (asserted $x43) @x102 $x98) $x88)))
   2.409 -(let ((@x187 (monotonicity (iff-true @x106 (= $x88 true)) (= (= $x88 $x54) (= true $x54)))))
   2.410 -(let ((@x191 (trans @x187 (rewrite (= (= true $x54) $x54)) (= (= $x88 $x54) $x54))))
   2.411 -(let (($x173 (= $x88 $x54)))
   2.412 -(let ((@x105 (not-or-elim (mp (asserted $x43) @x102 $x98) (not (= (not $x88) $x54)))))
   2.413 -(let ((@x192 (mp (mp @x105 (rewrite (= (not (= (not $x88) $x54)) $x173)) $x173) @x191 $x54)))
   2.414 -(let ((@x457 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x558) $x436)) (monotonicity (symm @x192 (= y$ ?x51)) $x558) $x436)))
   2.415 -(let ((?x613 (* (- 1) ?x32)))
   2.416 -(let ((?x614 (+ ?x29 ?x613)))
   2.417 -(let (($x595 (<= ?x614 (- 1))))
   2.418 -(let (($x612 (= ?x614 (- 1))))
   2.419 -(let (($x610 (>= ?x29 (- 1))))
   2.420 -(let (($x557 (>= ?x585 0)))
   2.421 -(let (($x559 (= ?x585 0)))
   2.422 -(let (($x586 (>= ?x32 1)))
   2.423 -(let (($x589 (not $x586)))
   2.424 -(let (($x632 (forall ((?v0 Int) )(!(let ((?x115 (nat$ ?v0)))
   2.425 -(let ((?x116 (of_nat$ ?x115)))
   2.426 -(let (($x144 (= ?x116 0)))
   2.427 -(let (($x129 (>= ?v0 0)))
   2.428 -(or $x129 $x144))))) :pattern ( (nat$ ?v0) )))
   2.429 -))
   2.430 -(let (($x167 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0)))
   2.431 -(let ((?x116 (of_nat$ ?x115)))
   2.432 -(let (($x144 (= ?x116 0)))
   2.433 -(let (($x129 (>= ?v0 0)))
   2.434 -(or $x129 $x144))))))
   2.435 -))
   2.436 -(let ((?x115 (nat$ ?0)))
   2.437 -(let ((?x116 (of_nat$ ?x115)))
   2.438 -(let (($x144 (= ?x116 0)))
   2.439 -(let (($x129 (>= ?0 0)))
   2.440 -(let (($x164 (or $x129 $x144)))
   2.441 -(let (($x146 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0)))
   2.442 -(let ((?x116 (of_nat$ ?x115)))
   2.443 -(let (($x144 (= ?x116 0)))
   2.444 -(let (($x143 (< ?v0 0)))
   2.445 -(=> $x143 $x144))))))
   2.446 -))
   2.447 -(let (($x152 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0)))
   2.448 -(let ((?x116 (of_nat$ ?x115)))
   2.449 -(let (($x144 (= ?x116 0)))
   2.450 -(let (($x143 (< ?v0 0)))
   2.451 -(let (($x148 (not $x143)))
   2.452 -(or $x148 $x144)))))))
   2.453 -))
   2.454 -(let ((@x159 (monotonicity (rewrite (= (< ?0 0) (not $x129))) (= (not (< ?0 0)) (not (not $x129))))))
   2.455 -(let ((@x163 (trans @x159 (rewrite (= (not (not $x129)) $x129)) (= (not (< ?0 0)) $x129))))
   2.456 -(let ((@x169 (quant-intro (monotonicity @x163 (= (or (not (< ?0 0)) $x144) $x164)) (= $x152 $x167))))
   2.457 -(let ((@x151 (rewrite (= (=> (< ?0 0) $x144) (or (not (< ?0 0)) $x144)))))
   2.458 -(let ((@x172 (mp (asserted $x146) (trans (quant-intro @x151 (= $x146 $x152)) @x169 (= $x146 $x167)) $x167)))
   2.459 -(let ((@x637 (mp (mp~ @x172 (nnf-pos (refl (~ $x164 $x164)) (~ $x167 $x167)) $x167) (quant-intro (refl (= $x164 $x164)) (= $x167 $x632)) $x632)))
   2.460 -(let (($x601 (not $x632)))
   2.461 -(let (($x564 (or $x601 $x586 $x559)))
   2.462 -(let ((@x588 (rewrite (= (>= ?x48 0) $x586))))
   2.463 -(let ((@x394 (monotonicity (monotonicity @x588 (= (or (>= ?x48 0) $x559) (or $x586 $x559))) (= (or $x601 (or (>= ?x48 0) $x559)) (or $x601 (or $x586 $x559))))))
   2.464 -(let ((@x554 (trans @x394 (rewrite (= (or $x601 (or $x586 $x559)) $x564)) (= (or $x601 (or (>= ?x48 0) $x559)) $x564))))
   2.465 -(let ((@x555 (mp ((_ quant-inst (+ (- 1) ?x32)) (or $x601 (or (>= ?x48 0) $x559))) @x554 $x564)))
   2.466 -(let ((@x539 (unit-resolution @x555 @x637 (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x589 (not $x88))) @x106 $x589) $x559)))
   2.467 -(let ((@x545 (unit-resolution ((_ th-lemma arith assign-bounds 1 1) (or $x610 (not $x557) (not $x436))) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x559) $x557)) @x539 $x557) @x457 $x610)))
   2.468 -(let (($x605 (not $x610)))
   2.469 -(let (($x616 (or $x605 $x612)))
   2.470 -(let (($x626 (forall ((?v0 Int) )(!(let ((?x115 (nat$ ?v0)))
   2.471 -(let ((?x116 (of_nat$ ?x115)))
   2.472 -(let (($x117 (= ?x116 ?v0)))
   2.473 -(let (($x129 (>= ?v0 0)))
   2.474 -(let (($x131 (not $x129)))
   2.475 -(or $x131 $x117)))))) :pattern ( (nat$ ?v0) )))
   2.476 -))
   2.477 -(let (($x137 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0)))
   2.478 -(let ((?x116 (of_nat$ ?x115)))
   2.479 -(let (($x117 (= ?x116 ?v0)))
   2.480 -(let (($x129 (>= ?v0 0)))
   2.481 -(let (($x131 (not $x129)))
   2.482 -(or $x131 $x117)))))))
   2.483 -))
   2.484 -(let ((@x628 (refl (= (or (not $x129) (= ?x116 ?0)) (or (not $x129) (= ?x116 ?0))))))
   2.485 -(let ((@x185 (refl (~ (or (not $x129) (= ?x116 ?0)) (or (not $x129) (= ?x116 ?0))))))
   2.486 -(let (($x119 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0)))
   2.487 -(let ((?x116 (of_nat$ ?x115)))
   2.488 -(let (($x117 (= ?x116 ?v0)))
   2.489 -(let (($x114 (<= 0 ?v0)))
   2.490 -(=> $x114 $x117))))))
   2.491 -))
   2.492 -(let (($x125 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0)))
   2.493 -(let ((?x116 (of_nat$ ?x115)))
   2.494 -(let (($x117 (= ?x116 ?v0)))
   2.495 -(or (not (<= 0 ?v0)) $x117)))))
   2.496 -))
   2.497 -(let (($x117 (= ?x116 ?0)))
   2.498 -(let (($x131 (not $x129)))
   2.499 -(let (($x134 (or $x131 $x117)))
   2.500 -(let (($x122 (or (not (<= 0 ?0)) $x117)))
   2.501 -(let ((@x133 (monotonicity (rewrite (= (<= 0 ?0) $x129)) (= (not (<= 0 ?0)) $x131))))
   2.502 -(let ((@x127 (quant-intro (rewrite (= (=> (<= 0 ?0) $x117) $x122)) (= $x119 $x125))))
   2.503 -(let ((@x141 (trans @x127 (quant-intro (monotonicity @x133 (= $x122 $x134)) (= $x125 $x137)) (= $x119 $x137))))
   2.504 -(let ((@x196 (mp~ (mp (asserted $x119) @x141 $x137) (nnf-pos @x185 (~ $x137 $x137)) $x137)))
   2.505 -(let ((@x631 (mp @x196 (quant-intro @x628 (= $x137 $x626)) $x626)))
   2.506 -(let (($x269 (not $x626)))
   2.507 -(let (($x607 (or $x269 $x605 $x612)))
   2.508 -(let (($x273 (= ?x32 ?x30)))
   2.509 -(let (($x291 (>= ?x30 0)))
   2.510 -(let (($x292 (not $x291)))
   2.511 -(let (($x609 (or $x292 $x273)))
   2.512 -(let (($x271 (or $x269 $x609)))
   2.513 -(let ((@x268 (monotonicity (monotonicity (rewrite (= $x291 $x610)) (= $x292 $x605)) (rewrite (= $x273 $x612)) (= $x609 $x616))))
   2.514 -(let ((@x593 (trans (monotonicity @x268 (= $x271 (or $x269 $x616))) (rewrite (= (or $x269 $x616) $x607)) (= $x271 $x607))))
   2.515 -(let ((@x594 (mp ((_ quant-inst (+ 1 ?x29)) $x271) @x593 $x607)))
   2.516 -(let ((@x538 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x612) $x595)) (unit-resolution (unit-resolution @x594 @x631 $x616) @x545 $x612) $x595)))
   2.517 -((_ th-lemma arith farkas 1 -1 -1 1) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x559) $x557)) @x539 $x557) @x106 @x538 @x457 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
   2.518 -
   2.519 -8704d70b06a6aa746ec0e023752eaa0b7eb0df18 78 0
   2.520 -unsat
   2.521 -((set-logic AUFLIA)
   2.522 -(proof
   2.523 -(let ((?x37 (* (- 1) x$)))
   2.524 -(let (($x55 (>= x$ 0)))
   2.525 -(let ((?x62 (ite $x55 x$ ?x37)))
   2.526 -(let ((?x554 (* (- 1) ?x62)))
   2.527 -(let ((?x217 (+ ?x37 ?x554)))
   2.528 -(let (($x562 (<= ?x217 0)))
   2.529 -(let (($x249 (= ?x37 ?x62)))
   2.530 -(let (($x56 (not $x55)))
   2.531 -(let (($x163 (= x$ ?x62)))
   2.532 -(let ((@x559 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x163) (<= (+ x$ ?x554) 0))) (unit-resolution (def-axiom (or $x56 $x163)) (hypothesis $x55) $x163) (<= (+ x$ ?x554) 0))))
   2.533 -(let (($x254 (>= ?x62 0)))
   2.534 -(let (($x255 (not $x254)))
   2.535 -(let (($x588 (forall ((?v0 Int) )(!(let ((?x90 (nat$ ?v0)))
   2.536 -(let ((?x91 (of_nat$ ?x90)))
   2.537 -(let (($x92 (= ?x91 ?v0)))
   2.538 -(let (($x104 (>= ?v0 0)))
   2.539 -(let (($x106 (not $x104)))
   2.540 -(or $x106 $x92)))))) :pattern ( (nat$ ?v0) )))
   2.541 -))
   2.542 -(let (($x112 (forall ((?v0 Int) )(let ((?x90 (nat$ ?v0)))
   2.543 -(let ((?x91 (of_nat$ ?x90)))
   2.544 -(let (($x92 (= ?x91 ?v0)))
   2.545 -(let (($x104 (>= ?v0 0)))
   2.546 -(let (($x106 (not $x104)))
   2.547 -(or $x106 $x92)))))))
   2.548 -))
   2.549 -(let ((?x90 (nat$ ?0)))
   2.550 -(let ((?x91 (of_nat$ ?x90)))
   2.551 -(let (($x92 (= ?x91 ?0)))
   2.552 -(let (($x104 (>= ?0 0)))
   2.553 -(let (($x106 (not $x104)))
   2.554 -(let (($x109 (or $x106 $x92)))
   2.555 -(let (($x94 (forall ((?v0 Int) )(let ((?x90 (nat$ ?v0)))
   2.556 -(let ((?x91 (of_nat$ ?x90)))
   2.557 -(let (($x92 (= ?x91 ?v0)))
   2.558 -(let (($x89 (<= 0 ?v0)))
   2.559 -(=> $x89 $x92))))))
   2.560 -))
   2.561 -(let (($x100 (forall ((?v0 Int) )(let ((?x90 (nat$ ?v0)))
   2.562 -(let ((?x91 (of_nat$ ?x90)))
   2.563 -(let (($x92 (= ?x91 ?v0)))
   2.564 -(or (not (<= 0 ?v0)) $x92)))))
   2.565 -))
   2.566 -(let ((@x108 (monotonicity (rewrite (= (<= 0 ?0) $x104)) (= (not (<= 0 ?0)) $x106))))
   2.567 -(let ((@x114 (quant-intro (monotonicity @x108 (= (or (not (<= 0 ?0)) $x92) $x109)) (= $x100 $x112))))
   2.568 -(let ((@x99 (rewrite (= (=> (<= 0 ?0) $x92) (or (not (<= 0 ?0)) $x92)))))
   2.569 -(let ((@x117 (mp (asserted $x94) (trans (quant-intro @x99 (= $x94 $x100)) @x114 (= $x94 $x112)) $x112)))
   2.570 -(let ((@x593 (mp (mp~ @x117 (nnf-pos (refl (~ $x109 $x109)) (~ $x112 $x112)) $x112) (quant-intro (refl (= $x109 $x109)) (= $x112 $x588)) $x588)))
   2.571 -(let ((?x67 (nat$ ?x62)))
   2.572 -(let ((?x70 (of_nat$ ?x67)))
   2.573 -(let (($x73 (= ?x70 ?x62)))
   2.574 -(let (($x76 (not $x73)))
   2.575 -(let (($x28 (< x$ 0)))
   2.576 -(let ((?x30 (ite $x28 (- x$) x$)))
   2.577 -(let (($x34 (not (= (of_nat$ (nat$ ?x30)) ?x30))))
   2.578 -(let (($x77 (= (not (= (of_nat$ (nat$ (ite $x28 ?x37 x$))) (ite $x28 ?x37 x$))) $x76)))
   2.579 -(let ((?x40 (ite $x28 ?x37 x$)))
   2.580 -(let ((?x43 (nat$ ?x40)))
   2.581 -(let ((?x46 (of_nat$ ?x43)))
   2.582 -(let (($x49 (= ?x46 ?x40)))
   2.583 -(let ((@x66 (trans (monotonicity (rewrite (= $x28 $x56)) (= ?x40 (ite $x56 ?x37 x$))) (rewrite (= (ite $x56 ?x37 x$) ?x62)) (= ?x40 ?x62))))
   2.584 -(let ((@x75 (monotonicity (monotonicity (monotonicity @x66 (= ?x43 ?x67)) (= ?x46 ?x70)) @x66 (= $x49 $x73))))
   2.585 -(let ((@x45 (monotonicity (monotonicity (rewrite (= (- x$) ?x37)) (= ?x30 ?x40)) (= (nat$ ?x30) ?x43))))
   2.586 -(let ((@x51 (monotonicity (monotonicity @x45 (= (of_nat$ (nat$ ?x30)) ?x46)) (monotonicity (rewrite (= (- x$) ?x37)) (= ?x30 ?x40)) (= (= (of_nat$ (nat$ ?x30)) ?x30) $x49))))
   2.587 -(let ((@x80 (trans (monotonicity @x51 (= $x34 (not $x49))) (monotonicity @x75 $x77) (= $x34 $x76))))
   2.588 -(let ((@x81 (mp (asserted $x34) @x80 $x76)))
   2.589 -(let (($x239 (or (not $x588) $x255 $x73)))
   2.590 -(let ((@x576 (mp ((_ quant-inst (ite $x55 x$ ?x37)) (or (not $x588) (or $x255 $x73))) (rewrite (= (or (not $x588) (or $x255 $x73)) $x239)) $x239)))
   2.591 -(let ((@x561 ((_ th-lemma arith farkas -1 1 1) (hypothesis $x55) (unit-resolution @x576 @x81 @x593 $x255) @x559 false)))
   2.592 -(let ((@x198 (lemma @x561 $x56)))
   2.593 -(let ((@x566 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x249) $x562)) (unit-resolution (def-axiom (or $x55 $x249)) @x198 $x249) $x562)))
   2.594 -(let (($x578 (<= ?x62 0)))
   2.595 -(let ((@x257 (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x578 $x254)) (unit-resolution @x576 @x81 @x593 $x255) $x578)))
   2.596 -((_ th-lemma arith farkas 1 1 1) @x257 @x198 @x566 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))
   2.597 -
   2.598 -ce85402875b83dc2f06a381810d29a2061933b9f 312 0
   2.599 -unsat
   2.600 -((set-logic AUFLIA)
   2.601 -(declare-fun ?v1!0 (Nat$) Nat$)
   2.602 -(proof
   2.603 -(let ((?x89 (of_nat$ m$)))
   2.604 -(let ((?x90 (* 4 ?x89)))
   2.605 -(let ((?x98 (+ 1 ?x90)))
   2.606 -(let ((?x101 (nat$ ?x98)))
   2.607 -(let ((?x295 (of_nat$ ?x101)))
   2.608 -(let ((?x598 (* (- 1) ?x295)))
   2.609 -(let ((?x599 (+ ?x90 ?x598)))
   2.610 -(let (($x574 (>= ?x599 (- 1))))
   2.611 -(let (($x597 (= ?x599 (- 1))))
   2.612 -(let (($x610 (>= ?x89 0)))
   2.613 -(let (($x380 (<= ?x295 1)))
   2.614 -(let (($x687 (not $x380)))
   2.615 -(let (($x701 (forall ((?v1 Nat$) )(!(let ((?x89 (of_nat$ m$)))
   2.616 -(let ((?x90 (* 4 ?x89)))
   2.617 -(let ((?x98 (+ 1 ?x90)))
   2.618 -(let ((?x101 (nat$ ?x98)))
   2.619 -(let (($x382 (= ?v1 ?x101)))
   2.620 -(let ((?x34 (nat$ 1)))
   2.621 -(let (($x35 (= ?v1 ?x34)))
   2.622 -(let (($x381 (dvd$ ?v1 ?x101)))
   2.623 -(let (($x371 (not $x381)))
   2.624 -(or $x371 $x35 $x382)))))))))) :pattern ( (dvd$ ?v1 (nat$ (+ 1 (* 4 (of_nat$ m$))))) )))
   2.625 -))
   2.626 -(let (($x702 (not $x701)))
   2.627 -(let (($x357 (or $x380 $x702)))
   2.628 -(let (($x487 (not $x357)))
   2.629 -(let (($x104 (prime_nat$ ?x101)))
   2.630 -(let (($x110 (not $x104)))
   2.631 -(let (($x697 (or $x110 $x487)))
   2.632 -(let ((?x703 (?v1!0 ?x101)))
   2.633 -(let (($x707 (= ?x703 ?x101)))
   2.634 -(let ((?x34 (nat$ 1)))
   2.635 -(let (($x706 (= ?x703 ?x34)))
   2.636 -(let (($x704 (dvd$ ?x703 ?x101)))
   2.637 -(let (($x705 (not $x704)))
   2.638 -(let (($x708 (or $x705 $x706 $x707)))
   2.639 -(let (($x698 (not $x708)))
   2.640 -(let (($x360 (or $x104 $x380 $x698)))
   2.641 -(let (($x700 (not $x360)))
   2.642 -(let (($x369 (not $x697)))
   2.643 -(let (($x342 (or $x369 $x700)))
   2.644 -(let (($x684 (not $x342)))
   2.645 -(let (($x738 (forall ((?v0 Nat$) )(!(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0))))
   2.646 -(let (($x220 (not $x219)))
   2.647 -(let ((?x30 (of_nat$ ?v0)))
   2.648 -(let (($x65 (<= ?x30 1)))
   2.649 -(let (($x28 (prime_nat$ ?v0)))
   2.650 -(let (($x245 (or $x28 $x65 $x220)))
   2.651 -(let (($x710 (forall ((?v1 Nat$) )(!(let ((?x34 (nat$ 1)))
   2.652 -(let (($x35 (= ?v1 ?x34)))
   2.653 -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0)))) :pattern ( (dvd$ ?v1 ?v0) )))
   2.654 -))
   2.655 -(let (($x200 (not $x28)))
   2.656 -(not (or (not (or $x200 (not (or $x65 (not $x710))))) (not $x245))))))))))) :pattern ( (prime_nat$ ?v0) ) :pattern ( (of_nat$ ?v0) )))
   2.657 -))
   2.658 -(let (($x290 (forall ((?v0 Nat$) )(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0))))
   2.659 -(let (($x220 (not $x219)))
   2.660 -(let ((?x30 (of_nat$ ?v0)))
   2.661 -(let (($x65 (<= ?x30 1)))
   2.662 -(let (($x28 (prime_nat$ ?v0)))
   2.663 -(let (($x245 (or $x28 $x65 $x220)))
   2.664 -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1)))
   2.665 -(let (($x35 (= ?v1 ?x34)))
   2.666 -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0)))))
   2.667 -))
   2.668 -(let (($x221 (not $x72)))
   2.669 -(let (($x273 (not (or $x65 $x221))))
   2.670 -(let (($x200 (not $x28)))
   2.671 -(let (($x276 (or $x200 $x273)))
   2.672 -(not (or (not $x276) (not $x245)))))))))))))))
   2.673 -))
   2.674 -(let (($x219 (or (not (dvd$ (?v1!0 ?0) ?0)) (= (?v1!0 ?0) ?x34) (= (?v1!0 ?0) ?0))))
   2.675 -(let (($x220 (not $x219)))
   2.676 -(let ((?x30 (of_nat$ ?0)))
   2.677 -(let (($x65 (<= ?x30 1)))
   2.678 -(let (($x28 (prime_nat$ ?0)))
   2.679 -(let (($x245 (or $x28 $x65 $x220)))
   2.680 -(let (($x710 (forall ((?v1 Nat$) )(!(let ((?x34 (nat$ 1)))
   2.681 -(let (($x35 (= ?v1 ?x34)))
   2.682 -(or (not (dvd$ ?v1 ?0)) $x35 (= ?v1 ?0)))) :pattern ( (dvd$ ?v1 ?0) )))
   2.683 -))
   2.684 -(let (($x200 (not $x28)))
   2.685 -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1)))
   2.686 -(let (($x35 (= ?v1 ?x34)))
   2.687 -(or (not (dvd$ ?v1 ?0)) $x35 (= ?v1 ?0)))))
   2.688 -))
   2.689 -(let (($x221 (not $x72)))
   2.690 -(let (($x273 (not (or $x65 $x221))))
   2.691 -(let (($x276 (or $x200 $x273)))
   2.692 -(let (($x285 (not (or (not $x276) (not $x245)))))
   2.693 -(let (($x734 (= $x285 (not (or (not (or $x200 (not (or $x65 (not $x710))))) (not $x245))))))
   2.694 -(let (($x731 (= (or (not $x276) (not $x245)) (or (not (or $x200 (not (or $x65 (not $x710))))) (not $x245)))))
   2.695 -(let (($x35 (= ?0 ?x34)))
   2.696 -(let (($x69 (or (not (dvd$ ?0 ?1)) $x35 (= ?0 ?1))))
   2.697 -(let ((@x717 (monotonicity (quant-intro (refl (= $x69 $x69)) (= $x72 $x710)) (= $x221 (not $x710)))))
   2.698 -(let ((@x723 (monotonicity (monotonicity @x717 (= (or $x65 $x221) (or $x65 (not $x710)))) (= $x273 (not (or $x65 (not $x710)))))))
   2.699 -(let ((@x729 (monotonicity (monotonicity @x723 (= $x276 (or $x200 (not (or $x65 (not $x710)))))) (= (not $x276) (not (or $x200 (not (or $x65 (not $x710)))))))))
   2.700 -(let ((@x740 (quant-intro (monotonicity (monotonicity @x729 $x731) $x734) (= $x290 $x738))))
   2.701 -(let (($x253 (forall ((?v0 Nat$) )(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0))))
   2.702 -(let (($x220 (not $x219)))
   2.703 -(let ((?x30 (of_nat$ ?v0)))
   2.704 -(let (($x65 (<= ?x30 1)))
   2.705 -(let (($x28 (prime_nat$ ?v0)))
   2.706 -(let (($x245 (or $x28 $x65 $x220)))
   2.707 -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1)))
   2.708 -(let (($x35 (= ?v1 ?x34)))
   2.709 -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0)))))
   2.710 -))
   2.711 -(let (($x66 (not $x65)))
   2.712 -(let (($x75 (and $x66 $x72)))
   2.713 -(let (($x200 (not $x28)))
   2.714 -(let (($x229 (or $x200 $x75)))
   2.715 -(and $x229 $x245)))))))))))))
   2.716 -))
   2.717 -(let ((@x278 (monotonicity (rewrite (= (and (not $x65) $x72) $x273)) (= (or $x200 (and (not $x65) $x72)) $x276))))
   2.718 -(let ((@x281 (monotonicity @x278 (= (and (or $x200 (and (not $x65) $x72)) $x245) (and $x276 $x245)))))
   2.719 -(let ((@x289 (trans @x281 (rewrite (= (and $x276 $x245) $x285)) (= (and (or $x200 (and (not $x65) $x72)) $x245) $x285))))
   2.720 -(let (($x233 (forall ((?v0 Nat$) )(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0))))
   2.721 -(let (($x220 (not $x219)))
   2.722 -(let ((?x30 (of_nat$ ?v0)))
   2.723 -(let (($x65 (<= ?x30 1)))
   2.724 -(let (($x66 (not $x65)))
   2.725 -(let (($x211 (not $x66)))
   2.726 -(let (($x224 (or $x211 $x220)))
   2.727 -(let (($x28 (prime_nat$ ?v0)))
   2.728 -(let (($x228 (or $x28 $x224)))
   2.729 -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1)))
   2.730 -(let (($x35 (= ?v1 ?x34)))
   2.731 -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0)))))
   2.732 -))
   2.733 -(let (($x75 (and $x66 $x72)))
   2.734 -(let (($x200 (not $x28)))
   2.735 -(let (($x229 (or $x200 $x75)))
   2.736 -(and $x229 $x228)))))))))))))))
   2.737 -))
   2.738 -(let (($x66 (not $x65)))
   2.739 -(let (($x75 (and $x66 $x72)))
   2.740 -(let (($x229 (or $x200 $x75)))
   2.741 -(let (($x250 (and $x229 $x245)))
   2.742 -(let (($x211 (not $x66)))
   2.743 -(let (($x224 (or $x211 $x220)))
   2.744 -(let (($x228 (or $x28 $x224)))
   2.745 -(let (($x230 (and $x229 $x228)))
   2.746 -(let ((@x244 (monotonicity (monotonicity (rewrite (= $x211 $x65)) (= $x224 (or $x65 $x220))) (= $x228 (or $x28 (or $x65 $x220))))))
   2.747 -(let ((@x249 (trans @x244 (rewrite (= (or $x28 (or $x65 $x220)) $x245)) (= $x228 $x245))))
   2.748 -(let (($x81 (forall ((?v0 Nat$) )(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1)))
   2.749 -(let (($x35 (= ?v1 ?x34)))
   2.750 -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0)))))
   2.751 -))
   2.752 -(let ((?x30 (of_nat$ ?v0)))
   2.753 -(let (($x65 (<= ?x30 1)))
   2.754 -(let (($x66 (not $x65)))
   2.755 -(let (($x75 (and $x66 $x72)))
   2.756 -(let (($x28 (prime_nat$ ?v0)))
   2.757 -(= $x28 $x75))))))))
   2.758 -))
   2.759 -(let ((@x227 (nnf-neg (refl (~ $x211 $x211)) (sk (~ $x221 $x220)) (~ (not $x75) $x224))))
   2.760 -(let ((@x210 (monotonicity (refl (~ $x66 $x66)) (nnf-pos (refl (~ $x69 $x69)) (~ $x72 $x72)) (~ $x75 $x75))))
   2.761 -(let ((@x232 (nnf-pos (refl (~ $x28 $x28)) (refl (~ $x200 $x200)) @x210 @x227 (~ (= $x28 $x75) $x230))))
   2.762 -(let (($x42 (forall ((?v0 Nat$) )(let (($x39 (forall ((?v1 Nat$) )(let (($x33 (dvd$ ?v1 ?v0)))
   2.763 -(=> $x33 (or (= ?v1 (nat$ 1)) (= ?v1 ?v0)))))
   2.764 -))
   2.765 -(let ((?x30 (of_nat$ ?v0)))
   2.766 -(let (($x31 (< 1 ?x30)))
   2.767 -(let (($x28 (prime_nat$ ?v0)))
   2.768 -(= $x28 (and $x31 $x39)))))))
   2.769 -))
   2.770 -(let (($x62 (forall ((?v0 Nat$) )(let (($x48 (forall ((?v1 Nat$) )(or (not (dvd$ ?v1 ?v0)) (or (= ?v1 (nat$ 1)) (= ?v1 ?v0))))
   2.771 -))
   2.772 -(let ((?x30 (of_nat$ ?v0)))
   2.773 -(let (($x31 (< 1 ?x30)))
   2.774 -(let (($x51 (and $x31 $x48)))
   2.775 -(let (($x28 (prime_nat$ ?v0)))
   2.776 -(= $x28 $x51)))))))
   2.777 -))
   2.778 -(let (($x78 (= $x28 $x75)))
   2.779 -(let (($x48 (forall ((?v1 Nat$) )(or (not (dvd$ ?v1 ?0)) (or (= ?v1 (nat$ 1)) (= ?v1 ?0))))
   2.780 -))
   2.781 -(let (($x31 (< 1 ?x30)))
   2.782 -(let (($x51 (and $x31 $x48)))
   2.783 -(let (($x57 (= $x28 $x51)))
   2.784 -(let ((@x71 (rewrite (= (or (not (dvd$ ?0 ?1)) (or $x35 (= ?0 ?1))) $x69))))
   2.785 -(let ((@x77 (monotonicity (rewrite (= $x31 $x66)) (quant-intro @x71 (= $x48 $x72)) (= $x51 $x75))))
   2.786 -(let (($x39 (forall ((?v1 Nat$) )(let (($x33 (dvd$ ?v1 ?0)))
   2.787 -(=> $x33 (or (= ?v1 (nat$ 1)) (= ?v1 ?0)))))
   2.788 -))
   2.789 -(let (($x41 (= $x28 (and $x31 $x39))))
   2.790 -(let (($x45 (or (not (dvd$ ?0 ?1)) (or $x35 (= ?0 ?1)))))
   2.791 -(let ((@x50 (quant-intro (rewrite (= (=> (dvd$ ?0 ?1) (or $x35 (= ?0 ?1))) $x45)) (= $x39 $x48))))
   2.792 -(let ((@x56 (monotonicity (monotonicity @x50 (= (and $x31 $x39) $x51)) (= $x41 (= $x28 $x51)))))
   2.793 -(let ((@x64 (quant-intro (trans @x56 (rewrite (= (= $x28 $x51) $x57)) (= $x41 $x57)) (= $x42 $x62))))
   2.794 -(let ((@x85 (trans @x64 (quant-intro (monotonicity @x77 (= $x57 $x78)) (= $x62 $x81)) (= $x42 $x81))))
   2.795 -(let ((@x236 (mp~ (mp (asserted $x42) @x85 $x81) (nnf-pos @x232 (~ $x81 $x233)) $x233)))
   2.796 -(let ((@x256 (mp @x236 (quant-intro (monotonicity @x249 (= $x230 $x250)) (= $x233 $x253)) $x253)))
   2.797 -(let ((@x741 (mp (mp @x256 (quant-intro @x289 (= $x253 $x290)) $x290) @x740 $x738)))
   2.798 -(let (($x348 (or (not $x738) $x684)))
   2.799 -(let ((@x685 ((_ quant-inst (nat$ ?x98)) $x348)))
   2.800 -(let ((@x569 (unit-resolution (def-axiom (or $x342 $x697)) (unit-resolution @x685 @x741 $x684) $x697)))
   2.801 -(let (($x125 (not (or $x110 (>= ?x89 1)))))
   2.802 -(let (($x94 (<= 1 ?x89)))
   2.803 -(let (($x95 (=> (prime_nat$ (nat$ (+ ?x90 1))) $x94)))
   2.804 -(let (($x96 (not $x95)))
   2.805 -(let ((@x124 (monotonicity (rewrite (= $x94 (>= ?x89 1))) (= (or $x110 $x94) (or $x110 (>= ?x89 1))))))
   2.806 -(let ((@x103 (monotonicity (rewrite (= (+ ?x90 1) ?x98)) (= (nat$ (+ ?x90 1)) ?x101))))
   2.807 -(let ((@x109 (monotonicity (monotonicity @x103 (= (prime_nat$ (nat$ (+ ?x90 1))) $x104)) (= $x95 (=> $x104 $x94)))))
   2.808 -(let ((@x115 (trans @x109 (rewrite (= (=> $x104 $x94) (or $x110 $x94))) (= $x95 (or $x110 $x94)))))
   2.809 -(let ((@x129 (trans (monotonicity @x115 (= $x96 (not (or $x110 $x94)))) (monotonicity @x124 (= (not (or $x110 $x94)) $x125)) (= $x96 $x125))))
   2.810 -(let ((@x131 (not-or-elim (mp (asserted $x96) @x129 $x125) $x104)))
   2.811 -(let ((@x572 (unit-resolution (unit-resolution (def-axiom (or $x369 $x110 $x487)) @x131 (or $x369 $x487)) @x569 $x487)))
   2.812 -(let ((@x530 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not (<= ?x295 0)) $x380)) (unit-resolution (def-axiom (or $x357 $x687)) @x572 $x687) (not (<= ?x295 0)))))
   2.813 -(let ((@x561 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not (= ?x295 0)) (<= ?x295 0))) @x530 (not (= ?x295 0)))))
   2.814 -(let (($x575 (= ?x295 0)))
   2.815 -(let (($x577 (or $x610 $x575)))
   2.816 -(let (($x756 (forall ((?v0 Int) )(!(let ((?x140 (nat$ ?v0)))
   2.817 -(let ((?x141 (of_nat$ ?x140)))
   2.818 -(let (($x169 (= ?x141 0)))
   2.819 -(let (($x155 (>= ?v0 0)))
   2.820 -(or $x155 $x169))))) :pattern ( (nat$ ?v0) )))
   2.821 -))
   2.822 -(let (($x192 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0)))
   2.823 -(let ((?x141 (of_nat$ ?x140)))
   2.824 -(let (($x169 (= ?x141 0)))
   2.825 -(let (($x155 (>= ?v0 0)))
   2.826 -(or $x155 $x169))))))
   2.827 -))
   2.828 -(let ((?x140 (nat$ ?0)))
   2.829 -(let ((?x141 (of_nat$ ?x140)))
   2.830 -(let (($x169 (= ?x141 0)))
   2.831 -(let (($x155 (>= ?0 0)))
   2.832 -(let (($x189 (or $x155 $x169)))
   2.833 -(let (($x171 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0)))
   2.834 -(let ((?x141 (of_nat$ ?x140)))
   2.835 -(let (($x169 (= ?x141 0)))
   2.836 -(let (($x168 (< ?v0 0)))
   2.837 -(=> $x168 $x169))))))
   2.838 -))
   2.839 -(let (($x177 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0)))
   2.840 -(let ((?x141 (of_nat$ ?x140)))
   2.841 -(let (($x169 (= ?x141 0)))
   2.842 -(let (($x168 (< ?v0 0)))
   2.843 -(let (($x173 (not $x168)))
   2.844 -(or $x173 $x169)))))))
   2.845 -))
   2.846 -(let ((@x184 (monotonicity (rewrite (= (< ?0 0) (not $x155))) (= (not (< ?0 0)) (not (not $x155))))))
   2.847 -(let ((@x188 (trans @x184 (rewrite (= (not (not $x155)) $x155)) (= (not (< ?0 0)) $x155))))
   2.848 -(let ((@x194 (quant-intro (monotonicity @x188 (= (or (not (< ?0 0)) $x169) $x189)) (= $x177 $x192))))
   2.849 -(let ((@x176 (rewrite (= (=> (< ?0 0) $x169) (or (not (< ?0 0)) $x169)))))
   2.850 -(let ((@x197 (mp (asserted $x171) (trans (quant-intro @x176 (= $x171 $x177)) @x194 (= $x171 $x192)) $x192)))
   2.851 -(let ((@x761 (mp (mp~ @x197 (nnf-pos (refl (~ $x189 $x189)) (~ $x192 $x192)) $x192) (quant-intro (refl (= $x189 $x189)) (= $x192 $x756)) $x756)))
   2.852 -(let (($x580 (not $x756)))
   2.853 -(let (($x581 (or $x580 $x610 $x575)))
   2.854 -(let ((@x612 (rewrite (= (>= ?x98 0) $x610))))
   2.855 -(let ((@x579 (monotonicity @x612 (= (or (>= ?x98 0) $x575) $x577))))
   2.856 -(let ((@x555 (monotonicity @x579 (= (or $x580 (or (>= ?x98 0) $x575)) (or $x580 $x577)))))
   2.857 -(let ((@x564 (trans @x555 (rewrite (= (or $x580 $x577) $x581)) (= (or $x580 (or (>= ?x98 0) $x575)) $x581))))
   2.858 -(let ((@x565 (mp ((_ quant-inst (+ 1 ?x90)) (or $x580 (or (>= ?x98 0) $x575))) @x564 $x581)))
   2.859 -(let (($x613 (not $x610)))
   2.860 -(let (($x600 (or $x613 $x597)))
   2.861 -(let (($x750 (forall ((?v0 Int) )(!(let ((?x140 (nat$ ?v0)))
   2.862 -(let ((?x141 (of_nat$ ?x140)))
   2.863 -(let (($x142 (= ?x141 ?v0)))
   2.864 -(let (($x155 (>= ?v0 0)))
   2.865 -(let (($x156 (not $x155)))
   2.866 -(or $x156 $x142)))))) :pattern ( (nat$ ?v0) )))
   2.867 -))
   2.868 -(let (($x162 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0)))
   2.869 -(let ((?x141 (of_nat$ ?x140)))
   2.870 -(let (($x142 (= ?x141 ?v0)))
   2.871 -(let (($x155 (>= ?v0 0)))
   2.872 -(let (($x156 (not $x155)))
   2.873 -(or $x156 $x142)))))))
   2.874 -))
   2.875 -(let ((@x752 (refl (= (or (not $x155) (= ?x141 ?0)) (or (not $x155) (= ?x141 ?0))))))
   2.876 -(let ((@x263 (refl (~ (or (not $x155) (= ?x141 ?0)) (or (not $x155) (= ?x141 ?0))))))
   2.877 -(let (($x144 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0)))
   2.878 -(let ((?x141 (of_nat$ ?x140)))
   2.879 -(let (($x142 (= ?x141 ?v0)))
   2.880 -(let (($x139 (<= 0 ?v0)))
   2.881 -(=> $x139 $x142))))))
   2.882 -))
   2.883 -(let (($x150 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0)))
   2.884 -(let ((?x141 (of_nat$ ?x140)))
   2.885 -(let (($x142 (= ?x141 ?v0)))
   2.886 -(or (not (<= 0 ?v0)) $x142)))))
   2.887 -))
   2.888 -(let (($x142 (= ?x141 ?0)))
   2.889 -(let (($x156 (not $x155)))
   2.890 -(let (($x159 (or $x156 $x142)))
   2.891 -(let (($x147 (or (not (<= 0 ?0)) $x142)))
   2.892 -(let ((@x158 (monotonicity (rewrite (= (<= 0 ?0) $x155)) (= (not (<= 0 ?0)) $x156))))
   2.893 -(let ((@x152 (quant-intro (rewrite (= (=> (<= 0 ?0) $x142) $x147)) (= $x144 $x150))))
   2.894 -(let ((@x166 (trans @x152 (quant-intro (monotonicity @x158 (= $x147 $x159)) (= $x150 $x162)) (= $x144 $x162))))
   2.895 -(let ((@x266 (mp~ (mp (asserted $x144) @x166 $x162) (nnf-pos @x263 (~ $x162 $x162)) $x162)))
   2.896 -(let ((@x755 (mp @x266 (quant-intro @x752 (= $x162 $x750)) $x750)))
   2.897 -(let (($x603 (not $x750)))
   2.898 -(let (($x604 (or $x603 $x613 $x597)))
   2.899 -(let (($x608 (= ?x295 ?x98)))
   2.900 -(let (($x618 (>= ?x98 0)))
   2.901 -(let (($x619 (not $x618)))
   2.902 -(let (($x609 (or $x619 $x608)))
   2.903 -(let (($x605 (or $x603 $x609)))
   2.904 -(let ((@x602 (monotonicity (monotonicity @x612 (= $x619 $x613)) (rewrite (= $x608 $x597)) (= $x609 $x600))))
   2.905 -(let ((@x590 (trans (monotonicity @x602 (= $x605 (or $x603 $x600))) (rewrite (= (or $x603 $x600) $x604)) (= $x605 $x604))))
   2.906 -(let ((@x591 (mp ((_ quant-inst (+ 1 ?x90)) $x605) @x590 $x604)))
   2.907 -(let ((@x532 (unit-resolution (unit-resolution @x591 @x755 $x600) (unit-resolution (unit-resolution @x565 @x761 $x577) @x561 $x610) $x597)))
   2.908 -(let ((@x133 (not-or-elim (mp (asserted $x96) @x129 $x125) (not (>= ?x89 1)))))
   2.909 -((_ th-lemma arith farkas -4 1 1) @x133 (unit-resolution (def-axiom (or $x357 $x687)) @x572 $x687) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x597) $x574)) @x532 $x574) false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
   2.910 -
   2.911  5e90e9139eb4e9a7c2678bca8dda6cda05861f4c 23 0
   2.912  unsat
   2.913  ((set-logic AUFLIA)
   2.914 @@ -4780,21 +3944,6 @@
   2.915  (let ((@x53 (trans (monotonicity @x46 (= $x33 (not true))) (rewrite (= (not true) false)) (= $x33 false))))
   2.916  (mp (asserted $x33) @x53 false)))))))))))
   2.917  
   2.918 -8b09776b03122aeacc9dd9526e1f0e5d41a07f14 14 0
   2.919 -unsat
   2.920 -((set-logic AUFLIA)
   2.921 -(proof
   2.922 -(let (($x29 (forall ((?v0 A$) )(g$ ?v0))
   2.923 -))
   2.924 -(let (($x30 (ite $x29 true false)))
   2.925 -(let (($x31 (f$ $x30)))
   2.926 -(let (($x32 (=> $x31 true)))
   2.927 -(let (($x33 (not $x32)))
   2.928 -(let ((@x42 (monotonicity (monotonicity (rewrite (= $x30 $x29)) (= $x31 (f$ $x29))) (= $x32 (=> (f$ $x29) true)))))
   2.929 -(let ((@x46 (trans @x42 (rewrite (= (=> (f$ $x29) true) true)) (= $x32 true))))
   2.930 -(let ((@x53 (trans (monotonicity @x46 (= $x33 (not true))) (rewrite (= (not true) false)) (= $x33 false))))
   2.931 -(mp (asserted $x33) @x53 false)))))))))))
   2.932 -
   2.933  b221de9d8dbe279344ac85e2ada07f5722636ce5 46 0
   2.934  unsat
   2.935  ((set-logic AUFLIA)
   2.936 @@ -4842,195 +3991,96 @@
   2.937  (let ((@x478 (mp ((_ quant-inst 3 42) (or (not $x52) $x171)) (trans (monotonicity @x131 $x137) (rewrite (= $x134 $x134)) $x137) $x134)))
   2.938  (unit-resolution (unit-resolution @x478 @x78 $x168) (mp @x77 @x472 (not $x168)) false)))))))))))))))))))))))))))))))))))
   2.939  
   2.940 -c94d83d8571ae767bf6025c563cdac64250f7638 189 0
   2.941 +8b09776b03122aeacc9dd9526e1f0e5d41a07f14 14 0
   2.942 +unsat
   2.943 +((set-logic AUFLIA)
   2.944 +(proof
   2.945 +(let (($x29 (forall ((?v0 A$) )(g$ ?v0))
   2.946 +))
   2.947 +(let (($x30 (ite $x29 true false)))
   2.948 +(let (($x31 (f$ $x30)))
   2.949 +(let (($x32 (=> $x31 true)))
   2.950 +(let (($x33 (not $x32)))
   2.951 +(let ((@x42 (monotonicity (monotonicity (rewrite (= $x30 $x29)) (= $x31 (f$ $x29))) (= $x32 (=> (f$ $x29) true)))))
   2.952 +(let ((@x46 (trans @x42 (rewrite (= (=> (f$ $x29) true) true)) (= $x32 true))))
   2.953 +(let ((@x53 (trans (monotonicity @x46 (= $x33 (not true))) (rewrite (= (not true) false)) (= $x33 false))))
   2.954 +(mp (asserted $x33) @x53 false)))))))))))
   2.955 +
   2.956 +5d3ccbcf168a634cad3952ad8f6d2798329d6a77 75 0
   2.957  unsat
   2.958  ((set-logic AUFLIA)
   2.959  (proof
   2.960 -(let ((?x74 (nat$ 2)))
   2.961 -(let ((?x75 (cons$ ?x74 nil$)))
   2.962 -(let ((?x69 (nat$ 1)))
   2.963 -(let ((?x76 (cons$ ?x69 ?x75)))
   2.964 -(let ((?x70 (cons$ ?x69 nil$)))
   2.965 -(let ((?x68 (nat$ 0)))
   2.966 -(let ((?x71 (cons$ ?x68 ?x70)))
   2.967 -(let ((?x72 (map$ uu$ ?x71)))
   2.968 -(let (($x77 (= ?x72 ?x76)))
   2.969 -(let ((?x264 (map$ uu$ ?x70)))
   2.970 -(let ((?x427 (map$ uu$ nil$)))
   2.971 -(let ((?x426 (fun_app$ uu$ ?x69)))
   2.972 -(let ((?x428 (cons$ ?x426 ?x427)))
   2.973 -(let (($x429 (= ?x264 ?x428)))
   2.974 -(let (($x598 (forall ((?v0 Nat_nat_fun$) (?v1 Nat$) (?v2 Nat_list$) )(!(let ((?x64 (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2))))
   2.975 -(let ((?x61 (map$ ?v0 (cons$ ?v1 ?v2))))
   2.976 -(= ?x61 ?x64))) :pattern ( (map$ ?v0 (cons$ ?v1 ?v2)) ) :pattern ( (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2)) )))
   2.977 +(let ((?x78 (cons$ 2 nil$)))
   2.978 +(let ((?x79 (cons$ 1 ?x78)))
   2.979 +(let ((?x74 (cons$ 1 nil$)))
   2.980 +(let ((?x75 (cons$ 0 ?x74)))
   2.981 +(let ((?x76 (map$ uu$ ?x75)))
   2.982 +(let (($x80 (= ?x76 ?x79)))
   2.983 +(let ((?x185 (map$ uu$ ?x74)))
   2.984 +(let ((?x189 (map$ uu$ nil$)))
   2.985 +(let ((?x188 (fun_app$ uu$ 1)))
   2.986 +(let ((?x160 (cons$ ?x188 ?x189)))
   2.987 +(let (($x290 (= ?x185 ?x160)))
   2.988 +(let (($x521 (forall ((?v0 Int_int_fun$) (?v1 Int) (?v2 Int_list$) )(!(= (map$ ?v0 (cons$ ?v1 ?v2)) (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2))) :pattern ( (map$ ?v0 (cons$ ?v1 ?v2)) ) :pattern ( (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2)) )))
   2.989  ))
   2.990 -(let (($x66 (forall ((?v0 Nat_nat_fun$) (?v1 Nat$) (?v2 Nat_list$) )(let ((?x64 (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2))))
   2.991 -(let ((?x61 (map$ ?v0 (cons$ ?v1 ?v2))))
   2.992 -(= ?x61 ?x64))))
   2.993 -))
   2.994 -(let ((?x64 (cons$ (fun_app$ ?2 ?1) (map$ ?2 ?0))))
   2.995 -(let ((?x61 (map$ ?2 (cons$ ?1 ?0))))
   2.996 -(let (($x65 (= ?x61 ?x64)))
   2.997 -(let ((@x158 (mp~ (asserted $x66) (nnf-pos (refl (~ $x65 $x65)) (~ $x66 $x66)) $x66)))
   2.998 -(let ((@x603 (mp @x158 (quant-intro (refl (= $x65 $x65)) (= $x66 $x598)) $x598)))
   2.999 -(let (($x582 (not $x598)))
  2.1000 -(let (($x524 (or $x582 $x429)))
  2.1001 -(let ((@x511 ((_ quant-inst uu$ (nat$ 1) nil$) $x524)))
  2.1002 -(let (($x515 (= ?x427 nil$)))
  2.1003 -(let (($x590 (forall ((?v0 Nat_nat_fun$) )(!(= (map$ ?v0 nil$) nil$) :pattern ( (map$ ?v0 nil$) )))
  2.1004 -))
  2.1005 -(let (($x55 (forall ((?v0 Nat_nat_fun$) )(= (map$ ?v0 nil$) nil$))
  2.1006 +(let (($x72 (forall ((?v0 Int_int_fun$) (?v1 Int) (?v2 Int_list$) )(= (map$ ?v0 (cons$ ?v1 ?v2)) (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2))))
  2.1007  ))
  2.1008 -(let ((@x592 (refl (= (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$)))))
  2.1009 -(let ((@x152 (refl (~ (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$)))))
  2.1010 -(let ((@x595 (mp (mp~ (asserted $x55) (nnf-pos @x152 (~ $x55 $x55)) $x55) (quant-intro @x592 (= $x55 $x590)) $x590)))
  2.1011 -(let (($x506 (or (not $x590) $x515)))
  2.1012 -(let ((@x507 ((_ quant-inst uu$) $x506)))
  2.1013 -(let ((?x281 (of_nat$ ?x69)))
  2.1014 -(let ((?x516 (+ 1 ?x281)))
  2.1015 -(let ((?x517 (nat$ ?x516)))
  2.1016 -(let (($x508 (= ?x426 ?x517)))
  2.1017 -(let (($x47 (forall ((?v0 Nat$) )(!(let ((?x29 (fun_app$ uu$ ?v0)))
  2.1018 -(= ?x29 (nat$ (+ 1 (of_nat$ ?v0))))) :pattern ( (fun_app$ uu$ ?v0) )))
  2.1019 -))
  2.1020 -(let ((?x29 (fun_app$ uu$ ?0)))
  2.1021 -(let (($x44 (= ?x29 (nat$ (+ 1 (of_nat$ ?0))))))
  2.1022 -(let (($x36 (forall ((?v0 Nat$) )(!(let ((?x29 (fun_app$ uu$ ?v0)))
  2.1023 -(= ?x29 (nat$ (+ (of_nat$ ?v0) 1)))) :pattern ( (fun_app$ uu$ ?v0) )))
  2.1024 +(let (($x71 (= (map$ ?2 (cons$ ?1 ?0)) (cons$ (fun_app$ ?2 ?1) (map$ ?2 ?0)))))
  2.1025 +(let ((@x97 (mp~ (asserted $x72) (nnf-pos (refl (~ $x71 $x71)) (~ $x72 $x72)) $x72)))
  2.1026 +(let ((@x526 (mp @x97 (quant-intro (refl (= $x71 $x71)) (= $x72 $x521)) $x521)))
  2.1027 +(let (($x173 (or (not $x521) $x290)))
  2.1028 +(let ((@x506 ((_ quant-inst uu$ 1 nil$) $x173)))
  2.1029 +(let (($x492 (= ?x189 nil$)))
  2.1030 +(let (($x513 (forall ((?v0 Int_int_fun$) )(!(= (map$ ?v0 nil$) nil$) :pattern ( (map$ ?v0 nil$) )))
  2.1031  ))
  2.1032 -(let ((@x43 (monotonicity (rewrite (= (+ (of_nat$ ?0) 1) (+ 1 (of_nat$ ?0)))) (= (nat$ (+ (of_nat$ ?0) 1)) (nat$ (+ 1 (of_nat$ ?0)))))))
  2.1033 -(let ((@x46 (monotonicity @x43 (= (= ?x29 (nat$ (+ (of_nat$ ?0) 1))) $x44))))
  2.1034 -(let ((@x156 (mp~ (mp (asserted $x36) (quant-intro @x46 (= $x36 $x47)) $x47) (nnf-pos (refl (~ $x44 $x44)) (~ $x47 $x47)) $x47)))
  2.1035 -(let (($x494 (or (not $x47) $x508)))
  2.1036 -(let ((@x495 ((_ quant-inst (nat$ 1)) $x494)))
  2.1037 -(let ((?x445 (of_nat$ ?x517)))
  2.1038 -(let ((?x376 (nat$ ?x445)))
  2.1039 -(let (($x377 (= ?x376 ?x517)))
  2.1040 -(let (($x605 (forall ((?v0 Nat$) )(!(= (nat$ (of_nat$ ?v0)) ?v0) :pattern ( (of_nat$ ?v0) )))
  2.1041 -))
  2.1042 -(let (($x82 (forall ((?v0 Nat$) )(= (nat$ (of_nat$ ?v0)) ?v0))
  2.1043 +(let (($x61 (forall ((?v0 Int_int_fun$) )(= (map$ ?v0 nil$) nil$))
  2.1044  ))
  2.1045 -(let ((@x610 (trans (rewrite (= $x82 $x605)) (rewrite (= $x605 $x605)) (= $x82 $x605))))
  2.1046 -(let ((@x162 (refl (~ (= (nat$ (of_nat$ ?0)) ?0) (= (nat$ (of_nat$ ?0)) ?0)))))
  2.1047 -(let ((@x611 (mp (mp~ (asserted $x82) (nnf-pos @x162 (~ $x82 $x82)) $x82) @x610 $x605)))
  2.1048 -(let (($x384 (or (not $x605) $x377)))
  2.1049 -(let ((@x385 ((_ quant-inst (nat$ ?x516)) $x384)))
  2.1050 -(let ((?x437 (* (- 1) ?x445)))
  2.1051 -(let ((?x410 (+ ?x281 ?x437)))
  2.1052 -(let (($x431 (<= ?x410 (- 1))))
  2.1053 -(let (($x378 (= ?x410 (- 1))))
  2.1054 -(let (($x448 (>= ?x281 (- 1))))
  2.1055 -(let (($x442 (>= ?x281 1)))
  2.1056 -(let (($x282 (= ?x281 1)))
  2.1057 -(let (($x613 (forall ((?v0 Int) )(!(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.1058 -(let (($x101 (>= ?v0 0)))
  2.1059 -(let (($x102 (not $x101)))
  2.1060 -(or $x102 $x88)))) :pattern ( (nat$ ?v0) )))
  2.1061 -))
  2.1062 -(let (($x108 (forall ((?v0 Int) )(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.1063 -(let (($x101 (>= ?v0 0)))
  2.1064 -(let (($x102 (not $x101)))
  2.1065 -(or $x102 $x88)))))
  2.1066 +(let ((@x515 (refl (= (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$)))))
  2.1067 +(let ((@x83 (refl (~ (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$)))))
  2.1068 +(let ((@x518 (mp (mp~ (asserted $x61) (nnf-pos @x83 (~ $x61 $x61)) $x61) (quant-intro @x515 (= $x61 $x513)) $x513)))
  2.1069 +(let (($x495 (or (not $x513) $x492)))
  2.1070 +(let ((@x496 ((_ quant-inst uu$) $x495)))
  2.1071 +(let (($x136 (= ?x188 2)))
  2.1072 +(let (($x51 (forall ((?v0 Int) )(!(= (+ ?v0 (* (- 1) (fun_app$ uu$ ?v0))) (- 1)) :pattern ( (fun_app$ uu$ ?v0) )))
  2.1073  ))
  2.1074 -(let (($x88 (= (of_nat$ (nat$ ?0)) ?0)))
  2.1075 -(let (($x101 (>= ?0 0)))
  2.1076 -(let (($x102 (not $x101)))
  2.1077 -(let (($x105 (or $x102 $x88)))
  2.1078 -(let (($x90 (forall ((?v0 Int) )(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.1079 -(let (($x85 (<= 0 ?v0)))
  2.1080 -(=> $x85 $x88))))
  2.1081 +(let (($x47 (= (+ ?0 (* (- 1) (fun_app$ uu$ ?0))) (- 1))))
  2.1082 +(let (($x34 (forall ((?v0 Int) )(!(let ((?x29 (fun_app$ uu$ ?v0)))
  2.1083 +(= ?x29 (+ ?v0 1))) :pattern ( (fun_app$ uu$ ?v0) )))
  2.1084  ))
  2.1085 -(let (($x96 (forall ((?v0 Int) )(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.1086 -(or (not (<= 0 ?v0)) $x88)))
  2.1087 +(let (($x42 (forall ((?v0 Int) )(!(let ((?x29 (fun_app$ uu$ ?v0)))
  2.1088 +(= ?x29 (+ 1 ?v0))) :pattern ( (fun_app$ uu$ ?v0) )))
  2.1089  ))
  2.1090 -(let ((@x104 (monotonicity (rewrite (= (<= 0 ?0) $x101)) (= (not (<= 0 ?0)) $x102))))
  2.1091 -(let ((@x110 (quant-intro (monotonicity @x104 (= (or (not (<= 0 ?0)) $x88) $x105)) (= $x96 $x108))))
  2.1092 -(let ((@x95 (rewrite (= (=> (<= 0 ?0) $x88) (or (not (<= 0 ?0)) $x88)))))
  2.1093 -(let ((@x113 (mp (asserted $x90) (trans (quant-intro @x95 (= $x90 $x96)) @x110 (= $x90 $x108)) $x108)))
  2.1094 -(let ((@x618 (mp (mp~ @x113 (nnf-pos (refl (~ $x105 $x105)) (~ $x108 $x108)) $x108) (quant-intro (refl (= $x105 $x105)) (= $x108 $x613)) $x613)))
  2.1095 -(let (($x227 (not $x613)))
  2.1096 -(let (($x271 (or $x227 $x282)))
  2.1097 -(let ((@x578 (rewrite (= (not true) false))))
  2.1098 -(let ((@x181 (rewrite (= (>= 1 0) true))))
  2.1099 -(let ((@x289 (trans (monotonicity @x181 (= (not (>= 1 0)) (not true))) @x578 (= (not (>= 1 0)) false))))
  2.1100 -(let ((@x560 (monotonicity @x289 (= (or (not (>= 1 0)) $x282) (or false $x282)))))
  2.1101 -(let ((@x270 (trans @x560 (rewrite (= (or false $x282) $x282)) (= (or (not (>= 1 0)) $x282) $x282))))
  2.1102 -(let ((@x552 (monotonicity @x270 (= (or $x227 (or (not (>= 1 0)) $x282)) $x271))))
  2.1103 -(let ((@x555 (trans @x552 (rewrite (= $x271 $x271)) (= (or $x227 (or (not (>= 1 0)) $x282)) $x271))))
  2.1104 -(let ((@x541 (mp ((_ quant-inst 1) (or $x227 (or (not (>= 1 0)) $x282))) @x555 $x271)))
  2.1105 -(let ((@x351 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x282) $x442)) (unit-resolution @x541 @x618 $x282) $x442)))
  2.1106 -(let (($x451 (not $x448)))
  2.1107 -(let (($x409 (or $x227 $x451 $x378)))
  2.1108 -(let (($x446 (= ?x445 ?x516)))
  2.1109 -(let (($x443 (>= ?x516 0)))
  2.1110 -(let (($x444 (not $x443)))
  2.1111 -(let (($x447 (or $x444 $x446)))
  2.1112 -(let (($x411 (or $x227 $x447)))
  2.1113 -(let ((@x441 (monotonicity (monotonicity (rewrite (= $x443 $x448)) (= $x444 $x451)) (rewrite (= $x446 $x378)) (= $x447 (or $x451 $x378)))))
  2.1114 -(let ((@x420 (trans (monotonicity @x441 (= $x411 (or $x227 (or $x451 $x378)))) (rewrite (= (or $x227 (or $x451 $x378)) $x409)) (= $x411 $x409))))
  2.1115 -(let ((@x430 (mp ((_ quant-inst (+ 1 ?x281)) $x411) @x420 $x409)))
  2.1116 -(let ((@x343 (unit-resolution @x430 @x618 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x442) $x448)) @x351 $x448) $x378)))
  2.1117 -(let (($x432 (>= ?x410 (- 1))))
  2.1118 -(let (($x331 (<= ?x281 1)))
  2.1119 -(let ((@x335 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x282) $x331)) (unit-resolution @x541 @x618 $x282) $x331)))
  2.1120 -(let ((@x341 ((_ th-lemma arith eq-propagate -1 -1 1 1) @x351 @x335 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x378) $x432)) @x343 $x432) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x378) $x431)) @x343 $x431) (= ?x445 2))))
  2.1121 -(let ((@x327 (trans (monotonicity (symm @x341 (= 2 ?x445)) (= ?x74 ?x376)) (unit-resolution @x385 @x611 $x377) (= ?x74 ?x517))))
  2.1122 -(let ((@x329 (trans @x327 (symm (unit-resolution @x495 @x156 $x508) (= ?x517 ?x426)) (= ?x74 ?x426))))
  2.1123 -(let ((@x312 (monotonicity @x329 (symm (unit-resolution @x507 @x595 $x515) (= nil$ ?x427)) (= ?x75 ?x428))))
  2.1124 -(let ((@x316 (trans @x312 (symm (unit-resolution @x511 @x603 $x429) (= ?x428 ?x264)) (= ?x75 ?x264))))
  2.1125 -(let ((?x577 (of_nat$ ?x68)))
  2.1126 -(let ((?x522 (+ 1 ?x577)))
  2.1127 -(let ((?x523 (nat$ ?x522)))
  2.1128 -(let ((?x263 (fun_app$ uu$ ?x68)))
  2.1129 -(let (($x512 (= ?x263 ?x523)))
  2.1130 -(let (($x513 (or (not $x47) $x512)))
  2.1131 -(let ((@x514 ((_ quant-inst (nat$ 0)) $x513)))
  2.1132 -(let ((?x496 (of_nat$ ?x523)))
  2.1133 -(let ((?x373 (nat$ ?x496)))
  2.1134 -(let (($x375 (= ?x373 ?x523)))
  2.1135 -(let (($x380 (or (not $x605) $x375)))
  2.1136 -(let ((@x381 ((_ quant-inst (nat$ ?x522)) $x380)))
  2.1137 -(let ((?x490 (* (- 1) ?x577)))
  2.1138 -(let ((?x491 (+ ?x496 ?x490)))
  2.1139 -(let (($x465 (<= ?x491 1)))
  2.1140 -(let (($x492 (= ?x491 1)))
  2.1141 -(let (($x499 (>= ?x577 (- 1))))
  2.1142 -(let (($x502 (>= ?x577 0)))
  2.1143 -(let (($x249 (= ?x577 0)))
  2.1144 -(let (($x228 (or $x227 $x249)))
  2.1145 -(let ((@x584 (rewrite (= (>= 0 0) true))))
  2.1146 -(let ((@x241 (trans (monotonicity @x584 (= (not (>= 0 0)) (not true))) @x578 (= (not (>= 0 0)) false))))
  2.1147 -(let ((@x580 (monotonicity @x241 (= (or (not (>= 0 0)) $x249) (or false $x249)))))
  2.1148 -(let ((@x226 (trans @x580 (rewrite (= (or false $x249) $x249)) (= (or (not (>= 0 0)) $x249) $x249))))
  2.1149 -(let ((@x568 (monotonicity @x226 (= (or $x227 (or (not (>= 0 0)) $x249)) $x228))))
  2.1150 -(let ((@x571 (trans @x568 (rewrite (= $x228 $x228)) (= (or $x227 (or (not (>= 0 0)) $x249)) $x228))))
  2.1151 -(let ((@x208 (mp ((_ quant-inst 0) (or $x227 (or (not (>= 0 0)) $x249))) @x571 $x228)))
  2.1152 -(let ((@x323 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x249) $x502)) (unit-resolution @x208 @x618 $x249) $x502)))
  2.1153 -(let (($x487 (not $x499)))
  2.1154 -(let (($x477 (or $x227 $x487 $x492)))
  2.1155 -(let (($x497 (= ?x496 ?x522)))
  2.1156 -(let (($x509 (>= ?x522 0)))
  2.1157 -(let (($x510 (not $x509)))
  2.1158 -(let (($x498 (or $x510 $x497)))
  2.1159 -(let (($x478 (or $x227 $x498)))
  2.1160 -(let ((@x476 (monotonicity (monotonicity (rewrite (= $x509 $x499)) (= $x510 $x487)) (rewrite (= $x497 $x492)) (= $x498 (or $x487 $x492)))))
  2.1161 -(let ((@x486 (trans (monotonicity @x476 (= $x478 (or $x227 (or $x487 $x492)))) (rewrite (= (or $x227 (or $x487 $x492)) $x477)) (= $x478 $x477))))
  2.1162 -(let ((@x464 (mp ((_ quant-inst (+ 1 ?x577)) $x478) @x486 $x477)))
  2.1163 -(let ((@x304 (unit-resolution @x464 @x618 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x502) $x499)) @x323 $x499) $x492)))
  2.1164 -(let (($x466 (>= ?x491 1)))
  2.1165 -(let (($x504 (<= ?x577 0)))
  2.1166 -(let ((@x298 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x249) $x504)) (unit-resolution @x208 @x618 $x249) $x504)))
  2.1167 -(let ((@x300 ((_ th-lemma arith eq-propagate -1 -1 -1 -1) @x323 @x298 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x492) $x466)) @x304 $x466) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x492) $x465)) @x304 $x465) (= ?x496 1))))
  2.1168 -(let ((@x294 (trans (monotonicity (symm @x300 (= 1 ?x496)) (= ?x69 ?x373)) (unit-resolution @x381 @x611 $x375) (= ?x69 ?x523))))
  2.1169 -(let ((@x273 (trans @x294 (symm (unit-resolution @x514 @x156 $x512) (= ?x523 ?x263)) (= ?x69 ?x263))))
  2.1170 -(let ((@x279 (symm (monotonicity @x273 @x316 (= ?x76 (cons$ ?x263 ?x264))) (= (cons$ ?x263 ?x264) ?x76))))
  2.1171 -(let ((?x265 (cons$ ?x263 ?x264)))
  2.1172 -(let (($x266 (= ?x72 ?x265)))
  2.1173 -(let (($x237 (or $x582 $x266)))
  2.1174 -(let ((@x367 ((_ quant-inst uu$ (nat$ 0) (cons$ ?x69 nil$)) $x237)))
  2.1175 -(let (($x78 (not $x77)))
  2.1176 -(let ((@x79 (asserted $x78)))
  2.1177 -(unit-resolution @x79 (trans (unit-resolution @x367 @x603 $x266) @x279 $x77) false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.1178 +(let ((@x53 (quant-intro (rewrite (= (= (fun_app$ uu$ ?0) (+ 1 ?0)) $x47)) (= $x42 $x51))))
  2.1179 +(let ((?x29 (fun_app$ uu$ ?0)))
  2.1180 +(let (($x39 (= ?x29 (+ 1 ?0))))
  2.1181 +(let ((@x41 (monotonicity (rewrite (= (+ ?0 1) (+ 1 ?0))) (= (= ?x29 (+ ?0 1)) $x39))))
  2.1182 +(let ((@x56 (mp (asserted $x34) (trans (quant-intro @x41 (= $x34 $x42)) @x53 (= $x34 $x51)) $x51)))
  2.1183 +(let ((@x85 (mp~ @x56 (nnf-pos (refl (~ $x47 $x47)) (~ $x51 $x51)) $x51)))
  2.1184 +(let (($x145 (not $x51)))
  2.1185 +(let (($x499 (or $x145 $x136)))
  2.1186 +(let ((@x498 (rewrite (= (= (+ 1 (* (- 1) ?x188)) (- 1)) $x136))))
  2.1187 +(let ((@x204 (monotonicity @x498 (= (or $x145 (= (+ 1 (* (- 1) ?x188)) (- 1))) $x499))))
  2.1188 +(let ((@x207 (trans @x204 (rewrite (= $x499 $x499)) (= (or $x145 (= (+ 1 (* (- 1) ?x188)) (- 1))) $x499))))
  2.1189 +(let ((@x104 (mp ((_ quant-inst 1) (or $x145 (= (+ 1 (* (- 1) ?x188)) (- 1)))) @x207 $x499)))
  2.1190 +(let ((@x191 (monotonicity (symm (unit-resolution @x104 @x85 $x136) (= 2 ?x188)) (symm (unit-resolution @x496 @x518 $x492) (= nil$ ?x189)) (= ?x78 ?x160))))
  2.1191 +(let ((@x473 (trans @x191 (symm (unit-resolution @x506 @x526 $x290) (= ?x160 ?x185)) (= ?x78 ?x185))))
  2.1192 +(let ((?x182 (fun_app$ uu$ 0)))
  2.1193 +(let (($x163 (= ?x182 1)))
  2.1194 +(let (($x487 (or $x145 $x163)))
  2.1195 +(let ((@x501 (monotonicity (rewrite (= (+ 0 (* (- 1) ?x182)) (* (- 1) ?x182))) (= (= (+ 0 (* (- 1) ?x182)) (- 1)) (= (* (- 1) ?x182) (- 1))))))
  2.1196 +(let ((@x503 (trans @x501 (rewrite (= (= (* (- 1) ?x182) (- 1)) $x163)) (= (= (+ 0 (* (- 1) ?x182)) (- 1)) $x163))))
  2.1197 +(let ((@x151 (monotonicity @x503 (= (or $x145 (= (+ 0 (* (- 1) ?x182)) (- 1))) $x487))))
  2.1198 +(let ((@x490 (trans @x151 (rewrite (= $x487 $x487)) (= (or $x145 (= (+ 0 (* (- 1) ?x182)) (- 1))) $x487))))
  2.1199 +(let ((@x491 (mp ((_ quant-inst 0) (or $x145 (= (+ 0 (* (- 1) ?x182)) (- 1)))) @x490 $x487)))
  2.1200 +(let ((@x478 (monotonicity (symm (unit-resolution @x491 @x85 $x163) (= 1 ?x182)) @x473 (= ?x79 (cons$ ?x182 ?x185)))))
  2.1201 +(let ((?x186 (cons$ ?x182 ?x185)))
  2.1202 +(let (($x187 (= ?x76 ?x186)))
  2.1203 +(let (($x504 (or (not $x521) $x187)))
  2.1204 +(let ((@x505 ((_ quant-inst uu$ 0 (cons$ 1 nil$)) $x504)))
  2.1205 +(let ((@x466 (trans (unit-resolution @x505 @x526 $x187) (symm @x478 (= ?x186 ?x79)) $x80)))
  2.1206 +(let (($x81 (not $x80)))
  2.1207 +(let ((@x82 (asserted $x81)))
  2.1208 +(unit-resolution @x82 @x466 false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.1209  
  2.1210  40c61a0200976d6203302a7343af5b7ad1e6ce36 11 0
  2.1211  unsat
  2.1212 @@ -5044,533 +4094,452 @@
  2.1213  (let ((@x42 (trans (monotonicity (rewrite (= $x31 true)) (= $x32 (not true))) (rewrite (= (not true) false)) (= $x32 false))))
  2.1214  (mp (asserted $x32) @x42 false))))))))
  2.1215  
  2.1216 -825fdd8f086b9606c3db6feacf7565b92faf5ae2 190 0
  2.1217 +f17a5e4d5f1a5a93fbc847f858c7c845c29d8349 109 0
  2.1218  unsat
  2.1219  ((set-logic AUFLIA)
  2.1220  (proof
  2.1221 -(let ((?x87 (nat$ 6)))
  2.1222 -(let ((?x80 (nat$ 4)))
  2.1223 -(let ((?x81 (dec_10$ ?x80)))
  2.1224 -(let ((?x82 (of_nat$ ?x81)))
  2.1225 -(let ((?x83 (* 4 ?x82)))
  2.1226 -(let ((?x84 (nat$ ?x83)))
  2.1227 -(let ((?x85 (dec_10$ ?x84)))
  2.1228 -(let (($x88 (= ?x85 ?x87)))
  2.1229 -(let ((?x461 (dec_10$ ?x87)))
  2.1230 -(let (($x421 (= ?x461 ?x87)))
  2.1231 -(let ((?x487 (of_nat$ ?x87)))
  2.1232 -(let ((?x464 (+ (- 10) ?x487)))
  2.1233 -(let ((?x447 (nat$ ?x464)))
  2.1234 -(let ((?x389 (dec_10$ ?x447)))
  2.1235 -(let (($x448 (= ?x461 ?x389)))
  2.1236 -(let (($x460 (>= ?x487 10)))
  2.1237 -(let (($x449 (ite $x460 $x448 $x421)))
  2.1238 -(let (($x602 (forall ((?v0 Nat$) )(!(let ((?x29 (of_nat$ ?v0)))
  2.1239 -(let (($x60 (>= ?x29 10)))
  2.1240 -(ite $x60 (= (dec_10$ ?v0) (dec_10$ (nat$ (+ (- 10) ?x29)))) (= (dec_10$ ?v0) ?v0)))) :pattern ( (of_nat$ ?v0) ) :pattern ( (dec_10$ ?v0) )))
  2.1241 +(let ((?x75 (dec_10$ 4)))
  2.1242 +(let ((?x76 (* 4 ?x75)))
  2.1243 +(let ((?x77 (dec_10$ ?x76)))
  2.1244 +(let (($x79 (= ?x77 6)))
  2.1245 +(let (($x150 (<= ?x75 4)))
  2.1246 +(let (($x174 (= ?x75 4)))
  2.1247 +(let (($x513 (forall ((?v0 Int) )(!(let (($x55 (>= ?v0 10)))
  2.1248 +(ite $x55 (= (dec_10$ ?v0) (dec_10$ (+ (- 10) ?v0))) (= (dec_10$ ?v0) ?v0))) :pattern ( (dec_10$ ?v0) )))
  2.1249  ))
  2.1250 -(let (($x180 (forall ((?v0 Nat$) )(let ((?x29 (of_nat$ ?v0)))
  2.1251 -(let (($x60 (>= ?x29 10)))
  2.1252 -(ite $x60 (= (dec_10$ ?v0) (dec_10$ (nat$ (+ (- 10) ?x29)))) (= (dec_10$ ?v0) ?v0)))))
  2.1253 +(let (($x92 (forall ((?v0 Int) )(let (($x55 (>= ?v0 10)))
  2.1254 +(ite $x55 (= (dec_10$ ?v0) (dec_10$ (+ (- 10) ?v0))) (= (dec_10$ ?v0) ?v0))))
  2.1255  ))
  2.1256 -(let ((?x29 (of_nat$ ?0)))
  2.1257 -(let (($x60 (>= ?x29 10)))
  2.1258 -(let (($x177 (ite $x60 (= (dec_10$ ?0) (dec_10$ (nat$ (+ (- 10) ?x29)))) (= (dec_10$ ?0) ?0))))
  2.1259 -(let (($x73 (forall ((?v0 Nat$) )(let ((?x46 (dec_10$ (nat$ (+ (- 10) (of_nat$ ?v0))))))
  2.1260 -(let ((?x29 (of_nat$ ?v0)))
  2.1261 -(let (($x60 (>= ?x29 10)))
  2.1262 -(let ((?x65 (ite $x60 ?x46 ?v0)))
  2.1263 -(let ((?x28 (dec_10$ ?v0)))
  2.1264 -(= ?x28 ?x65)))))))
  2.1265 -))
  2.1266 -(let ((?x46 (dec_10$ (nat$ (+ (- 10) ?x29)))))
  2.1267 -(let ((?x65 (ite $x60 ?x46 ?0)))
  2.1268 -(let ((?x28 (dec_10$ ?0)))
  2.1269 -(let (($x70 (= ?x28 ?x65)))
  2.1270 -(let (($x37 (forall ((?v0 Nat$) )(let ((?x29 (of_nat$ ?v0)))
  2.1271 -(let (($x31 (< ?x29 10)))
  2.1272 +(let (($x55 (>= ?0 10)))
  2.1273 +(let (($x87 (ite $x55 (= (dec_10$ ?0) (dec_10$ (+ (- 10) ?0))) (= (dec_10$ ?0) ?0))))
  2.1274 +(let (($x68 (forall ((?v0 Int) )(let ((?x38 (+ (- 10) ?v0)))
  2.1275 +(let ((?x41 (dec_10$ ?x38)))
  2.1276 +(let (($x55 (>= ?v0 10)))
  2.1277 +(let ((?x60 (ite $x55 ?x41 ?v0)))
  2.1278  (let ((?x28 (dec_10$ ?v0)))
  2.1279 -(= ?x28 (ite $x31 ?v0 (dec_10$ (nat$ (- ?x29 10)))))))))
  2.1280 -))
  2.1281 -(let (($x55 (forall ((?v0 Nat$) )(let ((?x46 (dec_10$ (nat$ (+ (- 10) (of_nat$ ?v0))))))
  2.1282 -(let ((?x29 (of_nat$ ?v0)))
  2.1283 -(let (($x31 (< ?x29 10)))
  2.1284 -(let ((?x49 (ite $x31 ?v0 ?x46)))
  2.1285 -(let ((?x28 (dec_10$ ?v0)))
  2.1286 -(= ?x28 ?x49)))))))
  2.1287 +(= ?x28 ?x60)))))))
  2.1288  ))
  2.1289 -(let ((@x64 (monotonicity (rewrite (= (< ?x29 10) (not $x60))) (= (ite (< ?x29 10) ?0 ?x46) (ite (not $x60) ?0 ?x46)))))
  2.1290 -(let ((@x69 (trans @x64 (rewrite (= (ite (not $x60) ?0 ?x46) ?x65)) (= (ite (< ?x29 10) ?0 ?x46) ?x65))))
  2.1291 -(let ((@x72 (monotonicity @x69 (= (= ?x28 (ite (< ?x29 10) ?0 ?x46)) $x70))))
  2.1292 -(let (($x31 (< ?x29 10)))
  2.1293 -(let ((?x49 (ite $x31 ?0 ?x46)))
  2.1294 -(let (($x52 (= ?x28 ?x49)))
  2.1295 -(let ((@x45 (monotonicity (rewrite (= (- ?x29 10) (+ (- 10) ?x29))) (= (nat$ (- ?x29 10)) (nat$ (+ (- 10) ?x29))))))
  2.1296 -(let ((@x51 (monotonicity (monotonicity @x45 (= (dec_10$ (nat$ (- ?x29 10))) ?x46)) (= (ite $x31 ?0 (dec_10$ (nat$ (- ?x29 10)))) ?x49))))
  2.1297 -(let ((@x54 (monotonicity @x51 (= (= ?x28 (ite $x31 ?0 (dec_10$ (nat$ (- ?x29 10))))) $x52))))
  2.1298 -(let ((@x77 (trans (quant-intro @x54 (= $x37 $x55)) (quant-intro @x72 (= $x55 $x73)) (= $x37 $x73))))
  2.1299 -(let ((@x161 (mp~ (mp (asserted $x37) @x77 $x73) (nnf-pos (refl (~ $x70 $x70)) (~ $x73 $x73)) $x73)))
  2.1300 -(let ((@x183 (mp @x161 (quant-intro (rewrite (= $x70 $x177)) (= $x73 $x180)) $x180)))
  2.1301 -(let ((@x607 (mp @x183 (quant-intro (refl (= $x177 $x177)) (= $x180 $x602)) $x602)))
  2.1302 -(let (($x256 (not $x602)))
  2.1303 -(let (($x452 (or $x256 $x449)))
  2.1304 -(let ((@x420 ((_ quant-inst (nat$ 6)) $x452)))
  2.1305 -(let (($x385 (not $x460)))
  2.1306 -(let (($x450 (<= ?x487 6)))
  2.1307 -(let (($x488 (= ?x487 6)))
  2.1308 -(let (($x616 (forall ((?v0 Int) )(!(let ((?x97 (nat$ ?v0)))
  2.1309 -(let ((?x98 (of_nat$ ?x97)))
  2.1310 -(let (($x99 (= ?x98 ?v0)))
  2.1311 -(let (($x112 (>= ?v0 0)))
  2.1312 -(let (($x113 (not $x112)))
  2.1313 -(or $x113 $x99)))))) :pattern ( (nat$ ?v0) )))
  2.1314 +(let ((?x38 (+ (- 10) ?0)))
  2.1315 +(let ((?x41 (dec_10$ ?x38)))
  2.1316 +(let ((?x60 (ite $x55 ?x41 ?0)))
  2.1317 +(let ((?x28 (dec_10$ ?0)))
  2.1318 +(let (($x65 (= ?x28 ?x60)))
  2.1319 +(let (($x35 (forall ((?v0 Int) )(let ((?x28 (dec_10$ ?v0)))
  2.1320 +(= ?x28 (ite (< ?v0 10) ?v0 (dec_10$ (- ?v0 10))))))
  2.1321  ))
  2.1322 -(let (($x119 (forall ((?v0 Int) )(let ((?x97 (nat$ ?v0)))
  2.1323 -(let ((?x98 (of_nat$ ?x97)))
  2.1324 -(let (($x99 (= ?x98 ?v0)))
  2.1325 -(let (($x112 (>= ?v0 0)))
  2.1326 -(let (($x113 (not $x112)))
  2.1327 -(or $x113 $x99)))))))
  2.1328 +(let (($x50 (forall ((?v0 Int) )(let ((?x38 (+ (- 10) ?v0)))
  2.1329 +(let ((?x41 (dec_10$ ?x38)))
  2.1330 +(let (($x30 (< ?v0 10)))
  2.1331 +(let ((?x44 (ite $x30 ?v0 ?x41)))
  2.1332 +(let ((?x28 (dec_10$ ?v0)))
  2.1333 +(= ?x28 ?x44)))))))
  2.1334  ))
  2.1335 -(let ((?x97 (nat$ ?0)))
  2.1336 -(let ((?x98 (of_nat$ ?x97)))
  2.1337 -(let (($x99 (= ?x98 ?0)))
  2.1338 -(let (($x112 (>= ?0 0)))
  2.1339 -(let (($x113 (not $x112)))
  2.1340 -(let (($x116 (or $x113 $x99)))
  2.1341 -(let (($x101 (forall ((?v0 Int) )(let ((?x97 (nat$ ?v0)))
  2.1342 -(let ((?x98 (of_nat$ ?x97)))
  2.1343 -(let (($x99 (= ?x98 ?v0)))
  2.1344 -(let (($x96 (<= 0 ?v0)))
  2.1345 -(=> $x96 $x99))))))
  2.1346 -))
  2.1347 -(let (($x107 (forall ((?v0 Int) )(let ((?x97 (nat$ ?v0)))
  2.1348 -(let ((?x98 (of_nat$ ?x97)))
  2.1349 -(let (($x99 (= ?x98 ?v0)))
  2.1350 -(or (not (<= 0 ?v0)) $x99)))))
  2.1351 -))
  2.1352 -(let ((@x115 (monotonicity (rewrite (= (<= 0 ?0) $x112)) (= (not (<= 0 ?0)) $x113))))
  2.1353 -(let ((@x121 (quant-intro (monotonicity @x115 (= (or (not (<= 0 ?0)) $x99) $x116)) (= $x107 $x119))))
  2.1354 -(let ((@x106 (rewrite (= (=> (<= 0 ?0) $x99) (or (not (<= 0 ?0)) $x99)))))
  2.1355 -(let ((@x124 (mp (asserted $x101) (trans (quant-intro @x106 (= $x101 $x107)) @x121 (= $x101 $x119)) $x119)))
  2.1356 -(let ((@x621 (mp (mp~ @x124 (nnf-pos (refl (~ $x116 $x116)) (~ $x119 $x119)) $x119) (quant-intro (refl (= $x116 $x116)) (= $x119 $x616)) $x616)))
  2.1357 -(let (($x544 (not $x616)))
  2.1358 -(let (($x480 (or $x544 $x488)))
  2.1359 -(let ((@x491 (rewrite (= (>= 6 0) true))))
  2.1360 -(let ((@x495 (trans (monotonicity @x491 (= (not (>= 6 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 6 0)) false))))
  2.1361 -(let ((@x475 (monotonicity @x495 (= (or (not (>= 6 0)) $x488) (or false $x488)))))
  2.1362 -(let ((@x479 (trans @x475 (rewrite (= (or false $x488) $x488)) (= (or (not (>= 6 0)) $x488) $x488))))
  2.1363 -(let ((@x465 (monotonicity @x479 (= (or $x544 (or (not (>= 6 0)) $x488)) $x480))))
  2.1364 -(let ((@x468 (trans @x465 (rewrite (= $x480 $x480)) (= (or $x544 (or (not (>= 6 0)) $x488)) $x480))))
  2.1365 -(let ((@x469 (mp ((_ quant-inst 6) (or $x544 (or (not (>= 6 0)) $x488))) @x468 $x480)))
  2.1366 -(let ((@x415 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x488) $x450)) (unit-resolution @x469 @x621 $x488) $x450)))
  2.1367 -(let ((@x386 (unit-resolution (def-axiom (or (not $x449) $x460 $x421)) (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x450) $x385)) @x415 $x385) (unit-resolution @x420 @x607 $x449) $x421)))
  2.1368 -(let ((?x251 (of_nat$ ?x80)))
  2.1369 -(let ((?x454 (* (- 1) ?x251)))
  2.1370 -(let ((?x455 (+ ?x82 ?x454)))
  2.1371 -(let (($x456 (<= ?x455 0)))
  2.1372 -(let (($x453 (= ?x82 ?x251)))
  2.1373 -(let (($x238 (= ?x81 ?x80)))
  2.1374 -(let ((?x233 (+ (- 10) ?x251)))
  2.1375 -(let ((?x575 (nat$ ?x233)))
  2.1376 -(let ((?x236 (dec_10$ ?x575)))
  2.1377 -(let (($x237 (= ?x81 ?x236)))
  2.1378 -(let (($x252 (>= ?x251 10)))
  2.1379 -(let (($x239 (ite $x252 $x237 $x238)))
  2.1380 -(let (($x578 (or $x256 $x239)))
  2.1381 -(let ((@x579 ((_ quant-inst (nat$ 4)) $x578)))
  2.1382 -(let (($x581 (not $x252)))
  2.1383 -(let (($x380 (<= ?x251 4)))
  2.1384 -(let (($x563 (= ?x251 4)))
  2.1385 -(let (($x545 (or $x544 $x563)))
  2.1386 -(let ((@x566 (rewrite (= (>= 4 0) true))))
  2.1387 -(let ((@x558 (trans (monotonicity @x566 (= (not (>= 4 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 4 0)) false))))
  2.1388 -(let ((@x398 (monotonicity @x558 (= (or (not (>= 4 0)) $x563) (or false $x563)))))
  2.1389 -(let ((@x543 (trans @x398 (rewrite (= (or false $x563) $x563)) (= (or (not (>= 4 0)) $x563) $x563))))
  2.1390 -(let ((@x549 (monotonicity @x543 (= (or $x544 (or (not (>= 4 0)) $x563)) $x545))))
  2.1391 -(let ((@x377 (trans @x549 (rewrite (= $x545 $x545)) (= (or $x544 (or (not (>= 4 0)) $x563)) $x545))))
  2.1392 -(let ((@x379 (mp ((_ quant-inst 4) (or $x544 (or (not (>= 4 0)) $x563))) @x377 $x545)))
  2.1393 -(let ((@x393 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x563) $x380)) (unit-resolution @x379 @x621 $x563) $x380)))
  2.1394 -(let ((@x367 (unit-resolution (def-axiom (or (not $x239) $x252 $x238)) (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x380) $x581)) @x393 $x581) (unit-resolution @x579 @x607 $x239) $x238)))
  2.1395 -(let ((@x215 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x453) $x456)) (monotonicity @x367 $x453) $x456)))
  2.1396 -(let (($x457 (>= ?x455 0)))
  2.1397 -(let ((@x376 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x453) $x457)) (monotonicity @x367 $x453) $x457)))
  2.1398 -(let (($x536 (>= ?x251 4)))
  2.1399 -(let ((@x362 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x563) $x536)) (unit-resolution @x379 @x621 $x563) $x536)))
  2.1400 -(let ((?x576 (of_nat$ ?x84)))
  2.1401 -(let ((?x439 (* (- 1) ?x576)))
  2.1402 -(let ((?x440 (+ ?x83 ?x439)))
  2.1403 -(let (($x517 (<= ?x440 0)))
  2.1404 -(let (($x438 (= ?x440 0)))
  2.1405 -(let (($x532 (>= ?x82 0)))
  2.1406 -(let ((@x354 (unit-resolution ((_ th-lemma arith assign-bounds 1 1) (or $x532 (not $x536) (not $x457))) @x362 @x376 $x532)))
  2.1407 -(let (($x434 (not $x532)))
  2.1408 -(let (($x533 (or $x434 $x438)))
  2.1409 -(let (($x522 (or $x544 $x434 $x438)))
  2.1410 -(let (($x530 (= ?x576 ?x83)))
  2.1411 -(let (($x529 (>= ?x83 0)))
  2.1412 -(let (($x433 (not $x529)))
  2.1413 -(let (($x531 (or $x433 $x530)))
  2.1414 -(let (($x523 (or $x544 $x531)))
  2.1415 -(let ((@x535 (monotonicity (monotonicity (rewrite (= $x529 $x532)) (= $x433 $x434)) (rewrite (= $x530 $x438)) (= $x531 $x533))))
  2.1416 -(let ((@x528 (trans (monotonicity @x535 (= $x523 (or $x544 $x533))) (rewrite (= (or $x544 $x533) $x522)) (= $x523 $x522))))
  2.1417 -(let ((@x516 (mp ((_ quant-inst (* 4 ?x82)) $x523) @x528 $x522)))
  2.1418 -(let ((@x351 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x438) $x517)) (unit-resolution (unit-resolution @x516 @x621 $x533) @x354 $x438) $x517)))
  2.1419 -(let (($x518 (>= ?x440 0)))
  2.1420 -(let ((@x345 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x438) $x518)) (unit-resolution (unit-resolution @x516 @x621 $x533) @x354 $x438) $x518)))
  2.1421 -(let ((@x349 (monotonicity ((_ th-lemma arith eq-propagate 1 1 -4 -4 -4 -4) @x345 @x351 @x362 @x393 @x376 @x215 (= (+ (- 10) ?x576) 6)) (= (nat$ (+ (- 10) ?x576)) ?x87))))
  2.1422 -(let ((?x574 (+ (- 10) ?x576)))
  2.1423 -(let ((?x278 (nat$ ?x574)))
  2.1424 -(let ((?x292 (dec_10$ ?x278)))
  2.1425 -(let (($x293 (= ?x85 ?x292)))
  2.1426 -(let (($x294 (= ?x85 ?x84)))
  2.1427 -(let (($x577 (>= ?x576 10)))
  2.1428 -(let (($x295 (ite $x577 $x293 $x294)))
  2.1429 -(let (($x568 (or $x256 $x295)))
  2.1430 -(let ((@x299 ((_ quant-inst (nat$ ?x83)) $x568)))
  2.1431 -(let ((@x336 (unit-resolution ((_ th-lemma arith assign-bounds 1 4 4) (or $x577 (not $x517) (not $x536) (not $x457))) @x362 @x351 @x376 $x577)))
  2.1432 -(let ((@x337 (unit-resolution (def-axiom (or (not $x295) (not $x577) $x293)) @x336 (unit-resolution @x299 @x607 $x295) $x293)))
  2.1433 -(let ((@x323 (trans (trans @x337 (monotonicity @x349 (= ?x292 ?x461)) (= ?x85 ?x461)) @x386 $x88)))
  2.1434 -(let (($x89 (not $x88)))
  2.1435 -(let ((@x90 (asserted $x89)))
  2.1436 -(unit-resolution @x90 @x323 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.1437 +(let ((@x59 (monotonicity (rewrite (= (< ?0 10) (not $x55))) (= (ite (< ?0 10) ?0 ?x41) (ite (not $x55) ?0 ?x41)))))
  2.1438 +(let ((@x64 (trans @x59 (rewrite (= (ite (not $x55) ?0 ?x41) ?x60)) (= (ite (< ?0 10) ?0 ?x41) ?x60))))
  2.1439 +(let ((@x67 (monotonicity @x64 (= (= ?x28 (ite (< ?0 10) ?0 ?x41)) $x65))))
  2.1440 +(let (($x30 (< ?0 10)))
  2.1441 +(let ((?x44 (ite $x30 ?0 ?x41)))
  2.1442 +(let (($x47 (= ?x28 ?x44)))
  2.1443 +(let ((@x43 (monotonicity (rewrite (= (- ?0 10) ?x38)) (= (dec_10$ (- ?0 10)) ?x41))))
  2.1444 +(let ((@x49 (monotonicity (monotonicity @x43 (= (ite $x30 ?0 (dec_10$ (- ?0 10))) ?x44)) (= (= ?x28 (ite $x30 ?0 (dec_10$ (- ?0 10)))) $x47))))
  2.1445 +(let ((@x72 (trans (quant-intro @x49 (= $x35 $x50)) (quant-intro @x67 (= $x50 $x68)) (= $x35 $x68))))
  2.1446 +(let ((@x86 (mp~ (mp (asserted $x35) @x72 $x68) (nnf-pos (refl (~ $x65 $x65)) (~ $x68 $x68)) $x68)))
  2.1447 +(let ((@x95 (mp @x86 (quant-intro (rewrite (= $x65 $x87)) (= $x68 $x92)) $x92)))
  2.1448 +(let ((@x518 (mp @x95 (quant-intro (refl (= $x87 $x87)) (= $x92 $x513)) $x513)))
  2.1449 +(let (($x501 (not $x513)))
  2.1450 +(let (($x163 (or $x501 $x174)))
  2.1451 +(let ((?x97 (+ (- 10) 4)))
  2.1452 +(let ((?x183 (dec_10$ ?x97)))
  2.1453 +(let (($x184 (= ?x75 ?x183)))
  2.1454 +(let (($x96 (>= 4 10)))
  2.1455 +(let (($x185 (ite $x96 $x184 $x174)))
  2.1456 +(let ((@x172 (monotonicity (monotonicity (rewrite (= ?x97 (- 6))) (= ?x183 (dec_10$ (- 6)))) (= $x184 (= ?x75 (dec_10$ (- 6)))))))
  2.1457 +(let ((@x507 (monotonicity (rewrite (= $x96 false)) @x172 (= $x185 (ite false (= ?x75 (dec_10$ (- 6))) $x174)))))
  2.1458 +(let ((@x511 (trans @x507 (rewrite (= (ite false (= ?x75 (dec_10$ (- 6))) $x174) $x174)) (= $x185 $x174))))
  2.1459 +(let ((@x148 (trans (monotonicity @x511 (= (or $x501 $x185) $x163)) (rewrite (= $x163 $x163)) (= (or $x501 $x185) $x163))))
  2.1460 +(let ((@x149 (mp ((_ quant-inst 4) (or $x501 $x185)) @x148 $x163)))
  2.1461 +(let ((@x438 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x174) $x150)) (unit-resolution @x149 @x518 $x174) $x150)))
  2.1462 +(let (($x151 (>= ?x75 4)))
  2.1463 +(let ((@x428 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x174) $x151)) (unit-resolution @x149 @x518 $x174) $x151)))
  2.1464 +(let ((?x489 (+ (- 10) ?x76)))
  2.1465 +(let ((?x490 (dec_10$ ?x489)))
  2.1466 +(let ((?x448 (* (- 1) ?x490)))
  2.1467 +(let ((?x449 (+ ?x76 ?x448)))
  2.1468 +(let (($x444 (<= ?x449 10)))
  2.1469 +(let (($x292 (= ?x449 10)))
  2.1470 +(let ((?x455 (+ (- 20) ?x76)))
  2.1471 +(let ((?x458 (dec_10$ ?x455)))
  2.1472 +(let (($x461 (= ?x490 ?x458)))
  2.1473 +(let (($x310 (>= ?x75 5)))
  2.1474 +(let (($x450 (ite $x310 $x461 $x292)))
  2.1475 +(let (($x453 (or $x501 $x450)))
  2.1476 +(let (($x470 (= ?x490 ?x489)))
  2.1477 +(let ((?x467 (+ (- 10) ?x489)))
  2.1478 +(let ((?x468 (dec_10$ ?x467)))
  2.1479 +(let (($x469 (= ?x490 ?x468)))
  2.1480 +(let (($x466 (>= ?x489 10)))
  2.1481 +(let (($x471 (ite $x466 $x469 $x470)))
  2.1482 +(let ((@x463 (monotonicity (monotonicity (rewrite (= ?x467 ?x455)) (= ?x468 ?x458)) (= $x469 $x461))))
  2.1483 +(let ((@x452 (monotonicity (rewrite (= $x466 $x310)) @x463 (rewrite (= $x470 $x292)) (= $x471 $x450))))
  2.1484 +(let ((@x442 (trans (monotonicity @x452 (= (or $x501 $x471) $x453)) (rewrite (= $x453 $x453)) (= (or $x501 $x471) $x453))))
  2.1485 +(let ((@x443 (mp ((_ quant-inst (+ (- 10) ?x76)) (or $x501 $x471)) @x442 $x453)))
  2.1486 +(let (($x346 (not $x310)))
  2.1487 +(let ((@x418 (unit-resolution (def-axiom (or (not $x450) $x310 $x292)) (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x346 (not $x150))) @x438 $x346) (or (not $x450) $x292))))
  2.1488 +(let ((@x422 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x292) $x444)) (unit-resolution @x418 (unit-resolution @x443 @x518 $x450) $x292) $x444)))
  2.1489 +(let (($x336 (>= ?x449 10)))
  2.1490 +(let ((@x410 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x292) $x336)) (unit-resolution @x418 (unit-resolution @x443 @x518 $x450) $x292) $x336)))
  2.1491 +(let (($x491 (= ?x77 ?x490)))
  2.1492 +(let ((?x499 (* (- 1) ?x77)))
  2.1493 +(let ((?x485 (+ ?x76 ?x499)))
  2.1494 +(let (($x497 (= ?x485 0)))
  2.1495 +(let (($x131 (>= ?x75 3)))
  2.1496 +(let (($x486 (ite $x131 $x491 $x497)))
  2.1497 +(let (($x205 (or $x501 $x486)))
  2.1498 +(let ((@x204 (monotonicity (rewrite (= (>= ?x76 10) $x131)) (rewrite (= (= ?x77 ?x76) $x497)) (= (ite (>= ?x76 10) $x491 (= ?x77 ?x76)) $x486))))
  2.1499 +(let ((@x479 (monotonicity @x204 (= (or $x501 (ite (>= ?x76 10) $x491 (= ?x77 ?x76))) $x205))))
  2.1500 +(let ((@x212 (trans @x479 (rewrite (= $x205 $x205)) (= (or $x501 (ite (>= ?x76 10) $x491 (= ?x77 ?x76))) $x205))))
  2.1501 +(let ((@x481 (mp ((_ quant-inst (* 4 ?x75)) (or $x501 (ite (>= ?x76 10) $x491 (= ?x77 ?x76)))) @x212 $x205)))
  2.1502 +(let ((@x397 (unit-resolution (def-axiom (or (not $x486) (not $x131) $x491)) (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x151) $x131)) @x428 $x131) (unit-resolution @x481 @x518 $x486) $x491)))
  2.1503 +(let (($x80 (not $x79)))
  2.1504 +(let ((@x81 (asserted $x80)))
  2.1505 +(unit-resolution @x81 (trans @x397 ((_ th-lemma arith eq-propagate 1 1 -4 -4) @x410 @x422 @x428 @x438 (= ?x490 6)) $x79) false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.1506  
  2.1507 -f8d23ebbeac7f77a32b969922f558052d0057659 336 0
  2.1508 +fa62bf7228a50eb8c663092f87f9af7c25feaffe 336 0
  2.1509  unsat
  2.1510  ((set-logic <null>)
  2.1511  (proof
  2.1512 -(let ((?x102 (mod$ l$ 2)))
  2.1513 -(let ((?x99 (map$ uu$ xs$)))
  2.1514 -(let ((?x100 (eval_dioph$ ks$ ?x99)))
  2.1515 -(let ((?x101 (mod$ ?x100 2)))
  2.1516 -(let (($x103 (= ?x101 ?x102)))
  2.1517 -(let ((?x96 (eval_dioph$ ks$ xs$)))
  2.1518 -(let (($x98 (= ?x96 l$)))
  2.1519 -(let ((?x113 (* (- 1) ?x100)))
  2.1520 -(let ((?x114 (+ l$ ?x113)))
  2.1521 -(let ((?x117 (div$ ?x114 2)))
  2.1522 -(let ((?x104 (map$ uua$ xs$)))
  2.1523 -(let ((?x105 (eval_dioph$ ks$ ?x104)))
  2.1524 -(let (($x120 (= ?x105 ?x117)))
  2.1525 -(let (($x364 (not $x120)))
  2.1526 -(let (($x363 (not $x103)))
  2.1527 -(let (($x365 (or $x363 $x364)))
  2.1528 -(let ((?x849 (div ?x96 2)))
  2.1529 -(let ((?x1076 (* (- 1) ?x849)))
  2.1530 -(let ((?x804 (mod ?x96 2)))
  2.1531 -(let ((?x831 (* (- 1) ?x804)))
  2.1532 -(let ((?x621 (mod l$ 2)))
  2.1533 -(let ((?x648 (* (- 1) ?x621)))
  2.1534 -(let (($x1078 (>= (+ l$ ?x102 ?x648 (* (- 1) (div l$ 2)) ?x831 ?x1076) 1)))
  2.1535 -(let ((?x475 (* (- 1) l$)))
  2.1536 -(let ((?x798 (+ ?x96 ?x475)))
  2.1537 -(let (($x800 (>= ?x798 0)))
  2.1538 -(let (($x874 (not $x800)))
  2.1539 -(let (($x799 (<= ?x798 0)))
  2.1540 -(let ((?x791 (+ ?x105 (* (- 1) ?x117))))
  2.1541 -(let (($x792 (<= ?x791 0)))
  2.1542 -(let (($x366 (not $x365)))
  2.1543 -(let ((@x583 (hypothesis $x366)))
  2.1544 -(let ((@x577 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x364 $x792)) (unit-resolution (def-axiom (or $x365 $x120)) @x583 $x120) $x792)))
  2.1545 -(let ((?x542 (+ l$ ?x113 (* (- 2) (div ?x114 2)) (* (- 1) (mod (+ l$ ?x100) 2)))))
  2.1546 -(let (($x548 (>= ?x542 0)))
  2.1547 -(let (($x539 (= ?x542 0)))
  2.1548 +(let ((?x99 (mod$ l$ 2)))
  2.1549 +(let ((?x96 (map$ uu$ xs$)))
  2.1550 +(let ((?x97 (eval_dioph$ ks$ ?x96)))
  2.1551 +(let ((?x98 (mod$ ?x97 2)))
  2.1552 +(let (($x100 (= ?x98 ?x99)))
  2.1553 +(let ((?x93 (eval_dioph$ ks$ xs$)))
  2.1554 +(let (($x95 (= ?x93 l$)))
  2.1555 +(let ((?x110 (* (- 1) ?x97)))
  2.1556 +(let ((?x111 (+ l$ ?x110)))
  2.1557 +(let ((?x114 (div$ ?x111 2)))
  2.1558 +(let ((?x101 (map$ uua$ xs$)))
  2.1559 +(let ((?x102 (eval_dioph$ ks$ ?x101)))
  2.1560 +(let (($x117 (= ?x102 ?x114)))
  2.1561 +(let (($x282 (not $x117)))
  2.1562 +(let (($x281 (not $x100)))
  2.1563 +(let (($x283 (or $x281 $x282)))
  2.1564 +(let ((?x744 (div ?x93 2)))
  2.1565 +(let ((?x970 (* (- 1) ?x744)))
  2.1566 +(let ((?x699 (mod ?x93 2)))
  2.1567 +(let ((?x726 (* (- 1) ?x699)))
  2.1568 +(let ((?x516 (mod l$ 2)))
  2.1569 +(let ((?x543 (* (- 1) ?x516)))
  2.1570 +(let (($x972 (>= (+ l$ ?x99 ?x543 (* (- 1) (div l$ 2)) ?x726 ?x970) 1)))
  2.1571 +(let ((?x369 (* (- 1) l$)))
  2.1572 +(let ((?x693 (+ ?x93 ?x369)))
  2.1573 +(let (($x695 (>= ?x693 0)))
  2.1574 +(let (($x857 (not $x695)))
  2.1575 +(let (($x694 (<= ?x693 0)))
  2.1576 +(let ((?x686 (+ ?x102 (* (- 1) ?x114))))
  2.1577 +(let (($x687 (<= ?x686 0)))
  2.1578 +(let (($x284 (not $x283)))
  2.1579 +(let ((@x837 (hypothesis $x284)))
  2.1580 +(let ((@x591 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x282 $x687)) (unit-resolution (def-axiom (or $x283 $x117)) @x837 $x117) $x687)))
  2.1581 +(let ((?x437 (+ l$ ?x110 (* (- 2) (div ?x111 2)) (* (- 1) (mod (+ l$ ?x97) 2)))))
  2.1582 +(let (($x443 (>= ?x437 0)))
  2.1583 +(let (($x434 (= ?x437 0)))
  2.1584  (let ((@x26 (true-axiom true)))
  2.1585 -(let ((@x898 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x539) $x548)) (unit-resolution ((_ th-lemma arith) (or false $x539)) @x26 $x539) $x548)))
  2.1586 -(let ((?x606 (* (- 2) ?x105)))
  2.1587 -(let ((?x607 (+ ?x96 ?x113 ?x606)))
  2.1588 -(let (($x614 (<= ?x607 0)))
  2.1589 -(let (($x608 (= ?x607 0)))
  2.1590 -(let (($x386 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(!(let ((?x48 (eval_dioph$ ?v0 ?v1)))
  2.1591 -(let ((?x86 (+ ?x48 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1))))))
  2.1592 -(= ?x86 0))) :pattern ( (eval_dioph$ ?v0 (map$ uu$ ?v1)) ) :pattern ( (eval_dioph$ ?v0 (map$ uua$ ?v1)) )))
  2.1593 +(let ((@x793 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x434) $x443)) (unit-resolution ((_ th-lemma arith) (or false $x434)) @x26 $x434) $x443)))
  2.1594 +(let ((?x501 (* (- 2) ?x102)))
  2.1595 +(let ((?x502 (+ ?x93 ?x110 ?x501)))
  2.1596 +(let (($x509 (<= ?x502 0)))
  2.1597 +(let (($x503 (= ?x502 0)))
  2.1598 +(let (($x304 (forall ((?v0 Int_list$) (?v1 Int_list$) )(!(let ((?x45 (eval_dioph$ ?v0 ?v1)))
  2.1599 +(let ((?x83 (+ ?x45 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1))))))
  2.1600 +(= ?x83 0))) :pattern ( (eval_dioph$ ?v0 (map$ uu$ ?v1)) ) :pattern ( (eval_dioph$ ?v0 (map$ uua$ ?v1)) )))
  2.1601  ))
  2.1602 -(let (($x88 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(let ((?x48 (eval_dioph$ ?v0 ?v1)))
  2.1603 -(let ((?x86 (+ ?x48 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1))))))
  2.1604 -(= ?x86 0))))
  2.1605 +(let (($x85 (forall ((?v0 Int_list$) (?v1 Int_list$) )(let ((?x45 (eval_dioph$ ?v0 ?v1)))
  2.1606 +(let ((?x83 (+ ?x45 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1))))))
  2.1607 +(= ?x83 0))))
  2.1608  ))
  2.1609 -(let ((?x48 (eval_dioph$ ?1 ?0)))
  2.1610 -(let ((?x86 (+ ?x48 (* (- 1) (eval_dioph$ ?1 (map$ uu$ ?0))) (* (- 2) (eval_dioph$ ?1 (map$ uua$ ?0))))))
  2.1611 -(let (($x82 (= ?x86 0)))
  2.1612 -(let (($x61 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(let ((?x48 (eval_dioph$ ?v0 ?v1)))
  2.1613 -(let ((?x51 (eval_dioph$ ?v0 (map$ uu$ ?v1))))
  2.1614 -(let ((?x59 (+ (* (eval_dioph$ ?v0 (map$ uua$ ?v1)) 2) ?x51)))
  2.1615 -(= ?x59 ?x48)))))
  2.1616 +(let ((?x45 (eval_dioph$ ?1 ?0)))
  2.1617 +(let ((?x83 (+ ?x45 (* (- 1) (eval_dioph$ ?1 (map$ uu$ ?0))) (* (- 2) (eval_dioph$ ?1 (map$ uua$ ?0))))))
  2.1618 +(let (($x79 (= ?x83 0)))
  2.1619 +(let (($x58 (forall ((?v0 Int_list$) (?v1 Int_list$) )(let ((?x45 (eval_dioph$ ?v0 ?v1)))
  2.1620 +(let ((?x48 (eval_dioph$ ?v0 (map$ uu$ ?v1))))
  2.1621 +(let ((?x56 (+ (* (eval_dioph$ ?v0 (map$ uua$ ?v1)) 2) ?x48)))
  2.1622 +(= ?x56 ?x45)))))
  2.1623  ))
  2.1624 -(let (($x77 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(let ((?x48 (eval_dioph$ ?v0 ?v1)))
  2.1625 -(let ((?x57 (eval_dioph$ ?v0 (map$ uua$ ?v1))))
  2.1626 -(let ((?x63 (* 2 ?x57)))
  2.1627 -(let ((?x51 (eval_dioph$ ?v0 (map$ uu$ ?v1))))
  2.1628 -(let ((?x69 (+ ?x51 ?x63)))
  2.1629 -(= ?x69 ?x48)))))))
  2.1630 +(let (($x74 (forall ((?v0 Int_list$) (?v1 Int_list$) )(let ((?x45 (eval_dioph$ ?v0 ?v1)))
  2.1631 +(let ((?x54 (eval_dioph$ ?v0 (map$ uua$ ?v1))))
  2.1632 +(let ((?x60 (* 2 ?x54)))
  2.1633 +(let ((?x48 (eval_dioph$ ?v0 (map$ uu$ ?v1))))
  2.1634 +(let ((?x66 (+ ?x48 ?x60)))
  2.1635 +(= ?x66 ?x45)))))))
  2.1636  ))
  2.1637 -(let ((?x57 (eval_dioph$ ?1 (map$ uua$ ?0))))
  2.1638 -(let ((?x63 (* 2 ?x57)))
  2.1639 -(let ((?x51 (eval_dioph$ ?1 (map$ uu$ ?0))))
  2.1640 -(let ((?x69 (+ ?x51 ?x63)))
  2.1641 -(let (($x74 (= ?x69 ?x48)))
  2.1642 -(let ((@x68 (monotonicity (rewrite (= (* ?x57 2) ?x63)) (= (+ (* ?x57 2) ?x51) (+ ?x63 ?x51)))))
  2.1643 -(let ((@x73 (trans @x68 (rewrite (= (+ ?x63 ?x51) ?x69)) (= (+ (* ?x57 2) ?x51) ?x69))))
  2.1644 -(let ((@x79 (quant-intro (monotonicity @x73 (= (= (+ (* ?x57 2) ?x51) ?x48) $x74)) (= $x61 $x77))))
  2.1645 -(let ((@x92 (trans @x79 (quant-intro (rewrite (= $x74 $x82)) (= $x77 $x88)) (= $x61 $x88))))
  2.1646 -(let ((@x337 (mp~ (mp (asserted $x61) @x92 $x88) (nnf-pos (refl (~ $x82 $x82)) (~ $x88 $x88)) $x88)))
  2.1647 -(let ((@x391 (mp @x337 (quant-intro (refl (= $x82 $x82)) (= $x88 $x386)) $x386)))
  2.1648 -(let (($x612 (or (not $x386) $x608)))
  2.1649 -(let ((@x613 ((_ quant-inst ks$ xs$) $x612)))
  2.1650 -(let ((@x905 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x608) $x614)) (unit-resolution @x613 @x391 $x608) $x614)))
  2.1651 -(let ((?x502 (+ ?x117 (* (- 1) (div ?x114 2)))))
  2.1652 -(let (($x519 (<= ?x502 0)))
  2.1653 -(let (($x503 (= ?x502 0)))
  2.1654 -(let (($x413 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x212 (div ?v0 ?v1)))
  2.1655 -(let ((?x224 (* (- 1) ?v1)))
  2.1656 -(let ((?x221 (* (- 1) ?v0)))
  2.1657 -(let ((?x227 (div ?x221 ?x224)))
  2.1658 -(let (($x242 (<= ?v1 0)))
  2.1659 -(let ((?x249 (ite $x242 ?x227 ?x212)))
  2.1660 -(let (($x210 (= ?v1 0)))
  2.1661 -(let ((?x209 (div$ ?v0 ?v1)))
  2.1662 -(= ?x209 (ite $x210 0 ?x249)))))))))) :pattern ( (div$ ?v0 ?v1) )))
  2.1663 +(let ((?x54 (eval_dioph$ ?1 (map$ uua$ ?0))))
  2.1664 +(let ((?x60 (* 2 ?x54)))
  2.1665 +(let ((?x48 (eval_dioph$ ?1 (map$ uu$ ?0))))
  2.1666 +(let ((?x66 (+ ?x48 ?x60)))
  2.1667 +(let (($x71 (= ?x66 ?x45)))
  2.1668 +(let ((@x65 (monotonicity (rewrite (= (* ?x54 2) ?x60)) (= (+ (* ?x54 2) ?x48) (+ ?x60 ?x48)))))
  2.1669 +(let ((@x70 (trans @x65 (rewrite (= (+ ?x60 ?x48) ?x66)) (= (+ (* ?x54 2) ?x48) ?x66))))
  2.1670 +(let ((@x76 (quant-intro (monotonicity @x70 (= (= (+ (* ?x54 2) ?x48) ?x45) $x71)) (= $x58 $x74))))
  2.1671 +(let ((@x89 (trans @x76 (quant-intro (rewrite (= $x71 $x79)) (= $x74 $x85)) (= $x58 $x85))))
  2.1672 +(let ((@x270 (mp~ (mp (asserted $x58) @x89 $x85) (nnf-pos (refl (~ $x79 $x79)) (~ $x85 $x85)) $x85)))
  2.1673 +(let ((@x309 (mp @x270 (quant-intro (refl (= $x79 $x79)) (= $x85 $x304)) $x304)))
  2.1674 +(let (($x507 (or (not $x304) $x503)))
  2.1675 +(let ((@x508 ((_ quant-inst ks$ xs$) $x507)))
  2.1676 +(let ((@x800 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) $x509)) (unit-resolution @x508 @x309 $x503) $x509)))
  2.1677 +(let ((?x396 (+ ?x114 (* (- 1) (div ?x111 2)))))
  2.1678 +(let (($x413 (<= ?x396 0)))
  2.1679 +(let (($x397 (= ?x396 0)))
  2.1680 +(let (($x311 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x145 (div ?v0 ?v1)))
  2.1681 +(let ((?x157 (* (- 1) ?v1)))
  2.1682 +(let ((?x154 (* (- 1) ?v0)))
  2.1683 +(let ((?x160 (div ?x154 ?x157)))
  2.1684 +(let (($x175 (<= ?v1 0)))
  2.1685 +(let ((?x182 (ite $x175 ?x160 ?x145)))
  2.1686 +(let (($x143 (= ?v1 0)))
  2.1687 +(let ((?x141 (div$ ?v0 ?v1)))
  2.1688 +(= ?x141 (ite $x143 0 ?x182)))))))))) :pattern ( (div$ ?v0 ?v1) )))
  2.1689  ))
  2.1690 -(let (($x260 (forall ((?v0 Int) (?v1 Int) )(let ((?x212 (div ?v0 ?v1)))
  2.1691 -(let ((?x224 (* (- 1) ?v1)))
  2.1692 -(let ((?x221 (* (- 1) ?v0)))
  2.1693 -(let ((?x227 (div ?x221 ?x224)))
  2.1694 -(let (($x242 (<= ?v1 0)))
  2.1695 -(let ((?x249 (ite $x242 ?x227 ?x212)))
  2.1696 -(let (($x210 (= ?v1 0)))
  2.1697 -(let ((?x209 (div$ ?v0 ?v1)))
  2.1698 -(= ?x209 (ite $x210 0 ?x249)))))))))))
  2.1699 +(let (($x193 (forall ((?v0 Int) (?v1 Int) )(let ((?x145 (div ?v0 ?v1)))
  2.1700 +(let ((?x157 (* (- 1) ?v1)))
  2.1701 +(let ((?x154 (* (- 1) ?v0)))
  2.1702 +(let ((?x160 (div ?x154 ?x157)))
  2.1703 +(let (($x175 (<= ?v1 0)))
  2.1704 +(let ((?x182 (ite $x175 ?x160 ?x145)))
  2.1705 +(let (($x143 (= ?v1 0)))
  2.1706 +(let ((?x141 (div$ ?v0 ?v1)))
  2.1707 +(= ?x141 (ite $x143 0 ?x182)))))))))))
  2.1708  ))
  2.1709 -(let ((?x212 (div ?1 ?0)))
  2.1710 -(let ((?x224 (* (- 1) ?0)))
  2.1711 -(let ((?x221 (* (- 1) ?1)))
  2.1712 -(let ((?x227 (div ?x221 ?x224)))
  2.1713 -(let (($x242 (<= ?0 0)))
  2.1714 -(let ((?x249 (ite $x242 ?x227 ?x212)))
  2.1715 -(let (($x210 (= ?0 0)))
  2.1716 -(let ((?x209 (div$ ?1 ?0)))
  2.1717 -(let (($x257 (= ?x209 (ite $x210 0 ?x249))))
  2.1718 -(let (($x219 (forall ((?v0 Int) (?v1 Int) )(let (($x210 (= ?v1 0)))
  2.1719 -(let ((?x217 (ite $x210 0 (ite (< 0 ?v1) (div ?v0 ?v1) (div (- ?v0) (- ?v1))))))
  2.1720 -(let ((?x209 (div$ ?v0 ?v1)))
  2.1721 -(= ?x209 ?x217)))))
  2.1722 +(let ((?x145 (div ?1 ?0)))
  2.1723 +(let ((?x157 (* (- 1) ?0)))
  2.1724 +(let ((?x154 (* (- 1) ?1)))
  2.1725 +(let ((?x160 (div ?x154 ?x157)))
  2.1726 +(let (($x175 (<= ?0 0)))
  2.1727 +(let ((?x182 (ite $x175 ?x160 ?x145)))
  2.1728 +(let (($x143 (= ?0 0)))
  2.1729 +(let ((?x141 (div$ ?1 ?0)))
  2.1730 +(let (($x190 (= ?x141 (ite $x143 0 ?x182))))
  2.1731 +(let (($x152 (forall ((?v0 Int) (?v1 Int) )(let (($x143 (= ?v1 0)))
  2.1732 +(let ((?x150 (ite $x143 0 (ite (< 0 ?v1) (div ?v0 ?v1) (div (- ?v0) (- ?v1))))))
  2.1733 +(let ((?x141 (div$ ?v0 ?v1)))
  2.1734 +(= ?x141 ?x150)))))
  2.1735  ))
  2.1736 -(let (($x239 (forall ((?v0 Int) (?v1 Int) )(let ((?x224 (* (- 1) ?v1)))
  2.1737 -(let ((?x221 (* (- 1) ?v0)))
  2.1738 -(let ((?x227 (div ?x221 ?x224)))
  2.1739 -(let ((?x212 (div ?v0 ?v1)))
  2.1740 -(let (($x211 (< 0 ?v1)))
  2.1741 -(let ((?x230 (ite $x211 ?x212 ?x227)))
  2.1742 -(let (($x210 (= ?v1 0)))
  2.1743 -(let ((?x233 (ite $x210 0 ?x230)))
  2.1744 -(let ((?x209 (div$ ?v0 ?v1)))
  2.1745 -(= ?x209 ?x233)))))))))))
  2.1746 +(let (($x172 (forall ((?v0 Int) (?v1 Int) )(let ((?x157 (* (- 1) ?v1)))
  2.1747 +(let ((?x154 (* (- 1) ?v0)))
  2.1748 +(let ((?x160 (div ?x154 ?x157)))
  2.1749 +(let ((?x145 (div ?v0 ?v1)))
  2.1750 +(let (($x144 (< 0 ?v1)))
  2.1751 +(let ((?x163 (ite $x144 ?x145 ?x160)))
  2.1752 +(let (($x143 (= ?v1 0)))
  2.1753 +(let ((?x166 (ite $x143 0 ?x163)))
  2.1754 +(let ((?x141 (div$ ?v0 ?v1)))
  2.1755 +(= ?x141 ?x166)))))))))))
  2.1756  ))
  2.1757 -(let (($x211 (< 0 ?0)))
  2.1758 -(let ((?x230 (ite $x211 ?x212 ?x227)))
  2.1759 -(let ((?x233 (ite $x210 0 ?x230)))
  2.1760 -(let ((@x248 (monotonicity (rewrite (= $x211 (not $x242))) (= ?x230 (ite (not $x242) ?x212 ?x227)))))
  2.1761 -(let ((@x253 (trans @x248 (rewrite (= (ite (not $x242) ?x212 ?x227) ?x249)) (= ?x230 ?x249))))
  2.1762 -(let ((@x259 (monotonicity (monotonicity @x253 (= ?x233 (ite $x210 0 ?x249))) (= (= ?x209 ?x233) $x257))))
  2.1763 -(let (($x236 (= ?x209 ?x233)))
  2.1764 -(let (($x237 (= (= ?x209 (ite $x210 0 (ite $x211 ?x212 (div (- ?1) (- ?0))))) $x236)))
  2.1765 -(let ((@x229 (monotonicity (rewrite (= (- ?1) ?x221)) (rewrite (= (- ?0) ?x224)) (= (div (- ?1) (- ?0)) ?x227))))
  2.1766 -(let ((@x235 (monotonicity (monotonicity @x229 (= (ite $x211 ?x212 (div (- ?1) (- ?0))) ?x230)) (= (ite $x210 0 (ite $x211 ?x212 (div (- ?1) (- ?0)))) ?x233))))
  2.1767 -(let ((@x264 (trans (quant-intro (monotonicity @x235 $x237) (= $x219 $x239)) (quant-intro @x259 (= $x239 $x260)) (= $x219 $x260))))
  2.1768 -(let ((@x357 (mp~ (mp (asserted $x219) @x264 $x260) (nnf-pos (refl (~ $x257 $x257)) (~ $x260 $x260)) $x260)))
  2.1769 -(let ((@x418 (mp @x357 (quant-intro (refl (= $x257 $x257)) (= $x260 $x413)) $x413)))
  2.1770 -(let (($x509 (or (not $x413) $x503)))
  2.1771 -(let ((?x467 (div ?x114 2)))
  2.1772 -(let (($x463 (<= 2 0)))
  2.1773 -(let ((?x468 (ite $x463 (div (* (- 1) ?x114) (* (- 1) 2)) ?x467)))
  2.1774 -(let (($x462 (= 2 0)))
  2.1775 -(let ((?x469 (ite $x462 0 ?x468)))
  2.1776 -(let (($x470 (= ?x117 ?x469)))
  2.1777 -(let ((@x480 (rewrite (= (* (- 1) 2) (- 2)))))
  2.1778 -(let ((@x483 (monotonicity (rewrite (= (* (- 1) ?x114) (+ ?x475 ?x100))) @x480 (= (div (* (- 1) ?x114) (* (- 1) 2)) (div (+ ?x475 ?x100) (- 2))))))
  2.1779 -(let ((@x474 (rewrite (= $x463 false))))
  2.1780 -(let ((@x486 (monotonicity @x474 @x483 (= ?x468 (ite false (div (+ ?x475 ?x100) (- 2)) ?x467)))))
  2.1781 -(let ((@x490 (trans @x486 (rewrite (= (ite false (div (+ ?x475 ?x100) (- 2)) ?x467) ?x467)) (= ?x468 ?x467))))
  2.1782 -(let ((@x472 (rewrite (= $x462 false))))
  2.1783 -(let ((@x497 (trans (monotonicity @x472 @x490 (= ?x469 (ite false 0 ?x467))) (rewrite (= (ite false 0 ?x467) ?x467)) (= ?x469 ?x467))))
  2.1784 -(let ((@x507 (trans (monotonicity @x497 (= $x470 (= ?x117 ?x467))) (rewrite (= (= ?x117 ?x467) $x503)) (= $x470 $x503))))
  2.1785 -(let ((@x516 (trans (monotonicity @x507 (= (or (not $x413) $x470) $x509)) (rewrite (= $x509 $x509)) (= (or (not $x413) $x470) $x509))))
  2.1786 -(let ((@x907 (unit-resolution (mp ((_ quant-inst (+ l$ ?x113) 2) (or (not $x413) $x470)) @x516 $x509) @x418 $x503)))
  2.1787 -(let ((?x530 (mod (+ l$ ?x100) 2)))
  2.1788 -(let (($x570 (>= ?x530 0)))
  2.1789 -(let ((@x915 ((_ th-lemma arith farkas 1 -2 -2 -1 1 1) (unit-resolution ((_ th-lemma arith) (or false $x570)) @x26 $x570) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) $x519)) @x907 $x519) (hypothesis $x792) @x905 (hypothesis (not $x799)) @x898 false)))
  2.1790 -(let (($x137 (not $x98)))
  2.1791 -(let (($x372 (= $x98 $x365)))
  2.1792 -(let ((@x371 (monotonicity (rewrite (= (and $x103 $x120) $x366)) (= (= $x137 (and $x103 $x120)) (= $x137 $x366)))))
  2.1793 -(let ((@x376 (trans @x371 (rewrite (= (= $x137 $x366) $x372)) (= (= $x137 (and $x103 $x120)) $x372))))
  2.1794 -(let (($x123 (and $x103 $x120)))
  2.1795 -(let (($x138 (= $x137 $x123)))
  2.1796 -(let (($x110 (= $x98 (and $x103 (= ?x105 (div$ (- l$ ?x100) 2))))))
  2.1797 -(let (($x111 (not $x110)))
  2.1798 -(let ((@x119 (monotonicity (rewrite (= (- l$ ?x100) ?x114)) (= (div$ (- l$ ?x100) 2) ?x117))))
  2.1799 -(let ((@x125 (monotonicity (monotonicity @x119 (= (= ?x105 (div$ (- l$ ?x100) 2)) $x120)) (= (and $x103 (= ?x105 (div$ (- l$ ?x100) 2))) $x123))))
  2.1800 -(let ((@x133 (trans (monotonicity @x125 (= $x110 (= $x98 $x123))) (rewrite (= (= $x98 $x123) (= $x98 $x123))) (= $x110 (= $x98 $x123)))))
  2.1801 -(let ((@x142 (trans (monotonicity @x133 (= $x111 (not (= $x98 $x123)))) (rewrite (= (not (= $x98 $x123)) $x138)) (= $x111 $x138))))
  2.1802 -(let ((@x377 (mp (mp (asserted $x111) @x142 $x138) @x376 $x372)))
  2.1803 -(let ((@x449 (unit-resolution (def-axiom (or $x137 $x365 (not $x372))) @x377 (or $x137 $x365))))
  2.1804 -(let ((@x603 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x98 (not $x799) $x874)) (unit-resolution @x449 @x583 $x137) (or (not $x799) $x874))))
  2.1805 -(let ((@x604 (unit-resolution @x603 (unit-resolution (lemma @x915 (or $x799 (not $x792))) @x577 $x799) $x874)))
  2.1806 -(let ((?x649 (+ ?x102 ?x648)))
  2.1807 -(let (($x666 (>= ?x649 0)))
  2.1808 -(let (($x650 (= ?x649 0)))
  2.1809 -(let (($x420 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x267 (mod ?v0 ?v1)))
  2.1810 -(let ((?x224 (* (- 1) ?v1)))
  2.1811 -(let ((?x221 (* (- 1) ?v0)))
  2.1812 -(let ((?x275 (mod ?x221 ?x224)))
  2.1813 -(let ((?x281 (* (- 1) ?x275)))
  2.1814 -(let (($x242 (<= ?v1 0)))
  2.1815 -(let ((?x301 (ite $x242 ?x281 ?x267)))
  2.1816 -(let (($x210 (= ?v1 0)))
  2.1817 -(let ((?x306 (ite $x210 ?v0 ?x301)))
  2.1818 -(let ((?x266 (mod$ ?v0 ?v1)))
  2.1819 -(= ?x266 ?x306))))))))))) :pattern ( (mod$ ?v0 ?v1) )))
  2.1820 +(let (($x144 (< 0 ?0)))
  2.1821 +(let ((?x163 (ite $x144 ?x145 ?x160)))
  2.1822 +(let ((?x166 (ite $x143 0 ?x163)))
  2.1823 +(let ((@x181 (monotonicity (rewrite (= $x144 (not $x175))) (= ?x163 (ite (not $x175) ?x145 ?x160)))))
  2.1824 +(let ((@x186 (trans @x181 (rewrite (= (ite (not $x175) ?x145 ?x160) ?x182)) (= ?x163 ?x182))))
  2.1825 +(let ((@x192 (monotonicity (monotonicity @x186 (= ?x166 (ite $x143 0 ?x182))) (= (= ?x141 ?x166) $x190))))
  2.1826 +(let (($x169 (= ?x141 ?x166)))
  2.1827 +(let (($x170 (= (= ?x141 (ite $x143 0 (ite $x144 ?x145 (div (- ?1) (- ?0))))) $x169)))
  2.1828 +(let ((@x162 (monotonicity (rewrite (= (- ?1) ?x154)) (rewrite (= (- ?0) ?x157)) (= (div (- ?1) (- ?0)) ?x160))))
  2.1829 +(let ((@x168 (monotonicity (monotonicity @x162 (= (ite $x144 ?x145 (div (- ?1) (- ?0))) ?x163)) (= (ite $x143 0 (ite $x144 ?x145 (div (- ?1) (- ?0)))) ?x166))))
  2.1830 +(let ((@x197 (trans (quant-intro (monotonicity @x168 $x170) (= $x152 $x172)) (quant-intro @x192 (= $x172 $x193)) (= $x152 $x193))))
  2.1831 +(let ((@x275 (mp~ (mp (asserted $x152) @x197 $x193) (nnf-pos (refl (~ $x190 $x190)) (~ $x193 $x193)) $x193)))
  2.1832 +(let ((@x316 (mp @x275 (quant-intro (refl (= $x190 $x190)) (= $x193 $x311)) $x311)))
  2.1833 +(let (($x403 (or (not $x311) $x397)))
  2.1834 +(let ((?x361 (div ?x111 2)))
  2.1835 +(let (($x357 (<= 2 0)))
  2.1836 +(let ((?x362 (ite $x357 (div (* (- 1) ?x111) (* (- 1) 2)) ?x361)))
  2.1837 +(let (($x356 (= 2 0)))
  2.1838 +(let ((?x363 (ite $x356 0 ?x362)))
  2.1839 +(let (($x364 (= ?x114 ?x363)))
  2.1840 +(let ((@x374 (rewrite (= (* (- 1) 2) (- 2)))))
  2.1841 +(let ((@x377 (monotonicity (rewrite (= (* (- 1) ?x111) (+ ?x369 ?x97))) @x374 (= (div (* (- 1) ?x111) (* (- 1) 2)) (div (+ ?x369 ?x97) (- 2))))))
  2.1842 +(let ((@x368 (rewrite (= $x357 false))))
  2.1843 +(let ((@x380 (monotonicity @x368 @x377 (= ?x362 (ite false (div (+ ?x369 ?x97) (- 2)) ?x361)))))
  2.1844 +(let ((@x384 (trans @x380 (rewrite (= (ite false (div (+ ?x369 ?x97) (- 2)) ?x361) ?x361)) (= ?x362 ?x361))))
  2.1845 +(let ((@x366 (rewrite (= $x356 false))))
  2.1846 +(let ((@x391 (trans (monotonicity @x366 @x384 (= ?x363 (ite false 0 ?x361))) (rewrite (= (ite false 0 ?x361) ?x361)) (= ?x363 ?x361))))
  2.1847 +(let ((@x401 (trans (monotonicity @x391 (= $x364 (= ?x114 ?x361))) (rewrite (= (= ?x114 ?x361) $x397)) (= $x364 $x397))))
  2.1848 +(let ((@x410 (trans (monotonicity @x401 (= (or (not $x311) $x364) $x403)) (rewrite (= $x403 $x403)) (= (or (not $x311) $x364) $x403))))
  2.1849 +(let ((@x802 (unit-resolution (mp ((_ quant-inst (+ l$ ?x110) 2) (or (not $x311) $x364)) @x410 $x403) @x316 $x397)))
  2.1850 +(let ((?x425 (mod (+ l$ ?x97) 2)))
  2.1851 +(let (($x465 (>= ?x425 0)))
  2.1852 +(let ((@x810 ((_ th-lemma arith farkas 1 -2 -2 -1 1 1) (unit-resolution ((_ th-lemma arith) (or false $x465)) @x26 $x465) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x397) $x413)) @x802 $x413) (hypothesis $x687) @x800 (hypothesis (not $x694)) @x793 false)))
  2.1853 +(let (($x134 (not $x95)))
  2.1854 +(let (($x290 (= $x95 $x283)))
  2.1855 +(let ((@x289 (monotonicity (rewrite (= (and $x100 $x117) $x284)) (= (= $x134 (and $x100 $x117)) (= $x134 $x284)))))
  2.1856 +(let ((@x294 (trans @x289 (rewrite (= (= $x134 $x284) $x290)) (= (= $x134 (and $x100 $x117)) $x290))))
  2.1857 +(let (($x120 (and $x100 $x117)))
  2.1858 +(let (($x135 (= $x134 $x120)))
  2.1859 +(let (($x107 (= $x95 (and $x100 (= ?x102 (div$ (- l$ ?x97) 2))))))
  2.1860 +(let (($x108 (not $x107)))
  2.1861 +(let ((@x116 (monotonicity (rewrite (= (- l$ ?x97) ?x111)) (= (div$ (- l$ ?x97) 2) ?x114))))
  2.1862 +(let ((@x122 (monotonicity (monotonicity @x116 (= (= ?x102 (div$ (- l$ ?x97) 2)) $x117)) (= (and $x100 (= ?x102 (div$ (- l$ ?x97) 2))) $x120))))
  2.1863 +(let ((@x130 (trans (monotonicity @x122 (= $x107 (= $x95 $x120))) (rewrite (= (= $x95 $x120) (= $x95 $x120))) (= $x107 (= $x95 $x120)))))
  2.1864 +(let ((@x139 (trans (monotonicity @x130 (= $x108 (not (= $x95 $x120)))) (rewrite (= (not (= $x95 $x120)) $x135)) (= $x108 $x135))))
  2.1865 +(let ((@x295 (mp (mp (asserted $x108) @x139 $x135) @x294 $x290)))
  2.1866 +(let ((@x344 (unit-resolution (def-axiom (or $x134 $x283 (not $x290))) @x295 (or $x134 $x283))))
  2.1867 +(let ((@x870 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x95 (not $x694) $x857)) (unit-resolution @x344 @x837 $x134) (or (not $x694) $x857))))
  2.1868 +(let ((@x897 (unit-resolution @x870 (unit-resolution (lemma @x810 (or $x694 (not $x687))) @x591 $x694) $x857)))
  2.1869 +(let ((?x544 (+ ?x99 ?x543)))
  2.1870 +(let (($x561 (>= ?x544 0)))
  2.1871 +(let (($x545 (= ?x544 0)))
  2.1872 +(let (($x318 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x200 (mod ?v0 ?v1)))
  2.1873 +(let ((?x157 (* (- 1) ?v1)))
  2.1874 +(let ((?x154 (* (- 1) ?v0)))
  2.1875 +(let ((?x208 (mod ?x154 ?x157)))
  2.1876 +(let ((?x214 (* (- 1) ?x208)))
  2.1877 +(let (($x175 (<= ?v1 0)))
  2.1878 +(let ((?x234 (ite $x175 ?x214 ?x200)))
  2.1879 +(let (($x143 (= ?v1 0)))
  2.1880 +(let ((?x239 (ite $x143 ?v0 ?x234)))
  2.1881 +(let ((?x199 (mod$ ?v0 ?v1)))
  2.1882 +(= ?x199 ?x239))))))))))) :pattern ( (mod$ ?v0 ?v1) )))
  2.1883  ))
  2.1884 -(let (($x312 (forall ((?v0 Int) (?v1 Int) )(let ((?x267 (mod ?v0 ?v1)))
  2.1885 -(let ((?x224 (* (- 1) ?v1)))
  2.1886 -(let ((?x221 (* (- 1) ?v0)))
  2.1887 -(let ((?x275 (mod ?x221 ?x224)))
  2.1888 -(let ((?x281 (* (- 1) ?x275)))
  2.1889 -(let (($x242 (<= ?v1 0)))
  2.1890 -(let ((?x301 (ite $x242 ?x281 ?x267)))
  2.1891 -(let (($x210 (= ?v1 0)))
  2.1892 -(let ((?x306 (ite $x210 ?v0 ?x301)))
  2.1893 -(let ((?x266 (mod$ ?v0 ?v1)))
  2.1894 -(= ?x266 ?x306))))))))))))
  2.1895 +(let (($x245 (forall ((?v0 Int) (?v1 Int) )(let ((?x200 (mod ?v0 ?v1)))
  2.1896 +(let ((?x157 (* (- 1) ?v1)))
  2.1897 +(let ((?x154 (* (- 1) ?v0)))
  2.1898 +(let ((?x208 (mod ?x154 ?x157)))
  2.1899 +(let ((?x214 (* (- 1) ?x208)))
  2.1900 +(let (($x175 (<= ?v1 0)))
  2.1901 +(let ((?x234 (ite $x175 ?x214 ?x200)))
  2.1902 +(let (($x143 (= ?v1 0)))
  2.1903 +(let ((?x239 (ite $x143 ?v0 ?x234)))
  2.1904 +(let ((?x199 (mod$ ?v0 ?v1)))
  2.1905 +(= ?x199 ?x239))))))))))))
  2.1906  ))
  2.1907 -(let ((?x267 (mod ?1 ?0)))
  2.1908 -(let ((?x275 (mod ?x221 ?x224)))
  2.1909 -(let ((?x281 (* (- 1) ?x275)))
  2.1910 -(let ((?x301 (ite $x242 ?x281 ?x267)))
  2.1911 -(let ((?x306 (ite $x210 ?1 ?x301)))
  2.1912 -(let ((?x266 (mod$ ?1 ?0)))
  2.1913 -(let (($x309 (= ?x266 ?x306)))
  2.1914 -(let (($x273 (forall ((?v0 Int) (?v1 Int) )(let (($x210 (= ?v1 0)))
  2.1915 -(let ((?x271 (ite $x210 ?v0 (ite (< 0 ?v1) (mod ?v0 ?v1) (- (mod (- ?v0) (- ?v1)))))))
  2.1916 -(let ((?x266 (mod$ ?v0 ?v1)))
  2.1917 -(= ?x266 ?x271)))))
  2.1918 +(let ((?x200 (mod ?1 ?0)))
  2.1919 +(let ((?x208 (mod ?x154 ?x157)))
  2.1920 +(let ((?x214 (* (- 1) ?x208)))
  2.1921 +(let ((?x234 (ite $x175 ?x214 ?x200)))
  2.1922 +(let ((?x239 (ite $x143 ?1 ?x234)))
  2.1923 +(let ((?x199 (mod$ ?1 ?0)))
  2.1924 +(let (($x242 (= ?x199 ?x239)))
  2.1925 +(let (($x206 (forall ((?v0 Int) (?v1 Int) )(let (($x143 (= ?v1 0)))
  2.1926 +(let ((?x204 (ite $x143 ?v0 (ite (< 0 ?v1) (mod ?v0 ?v1) (- (mod (- ?v0) (- ?v1)))))))
  2.1927 +(let ((?x199 (mod$ ?v0 ?v1)))
  2.1928 +(= ?x199 ?x204)))))
  2.1929  ))
  2.1930 -(let (($x295 (forall ((?v0 Int) (?v1 Int) )(let ((?x224 (* (- 1) ?v1)))
  2.1931 -(let ((?x221 (* (- 1) ?v0)))
  2.1932 -(let ((?x275 (mod ?x221 ?x224)))
  2.1933 -(let ((?x281 (* (- 1) ?x275)))
  2.1934 -(let ((?x267 (mod ?v0 ?v1)))
  2.1935 -(let (($x211 (< 0 ?v1)))
  2.1936 -(let ((?x286 (ite $x211 ?x267 ?x281)))
  2.1937 -(let (($x210 (= ?v1 0)))
  2.1938 -(let ((?x289 (ite $x210 ?v0 ?x286)))
  2.1939 -(let ((?x266 (mod$ ?v0 ?v1)))
  2.1940 -(= ?x266 ?x289))))))))))))
  2.1941 +(let (($x228 (forall ((?v0 Int) (?v1 Int) )(let ((?x157 (* (- 1) ?v1)))
  2.1942 +(let ((?x154 (* (- 1) ?v0)))
  2.1943 +(let ((?x208 (mod ?x154 ?x157)))
  2.1944 +(let ((?x214 (* (- 1) ?x208)))
  2.1945 +(let ((?x200 (mod ?v0 ?v1)))
  2.1946 +(let (($x144 (< 0 ?v1)))
  2.1947 +(let ((?x219 (ite $x144 ?x200 ?x214)))
  2.1948 +(let (($x143 (= ?v1 0)))
  2.1949 +(let ((?x222 (ite $x143 ?v0 ?x219)))
  2.1950 +(let ((?x199 (mod$ ?v0 ?v1)))
  2.1951 +(= ?x199 ?x222))))))))))))
  2.1952  ))
  2.1953 -(let ((@x300 (monotonicity (rewrite (= $x211 (not $x242))) (= (ite $x211 ?x267 ?x281) (ite (not $x242) ?x267 ?x281)))))
  2.1954 -(let ((@x305 (trans @x300 (rewrite (= (ite (not $x242) ?x267 ?x281) ?x301)) (= (ite $x211 ?x267 ?x281) ?x301))))
  2.1955 -(let ((@x311 (monotonicity (monotonicity @x305 (= (ite $x210 ?1 (ite $x211 ?x267 ?x281)) ?x306)) (= (= ?x266 (ite $x210 ?1 (ite $x211 ?x267 ?x281))) $x309))))
  2.1956 -(let ((?x286 (ite $x211 ?x267 ?x281)))
  2.1957 -(let ((?x289 (ite $x210 ?1 ?x286)))
  2.1958 -(let (($x292 (= ?x266 ?x289)))
  2.1959 -(let (($x293 (= (= ?x266 (ite $x210 ?1 (ite $x211 ?x267 (- (mod (- ?1) (- ?0)))))) $x292)))
  2.1960 -(let ((@x277 (monotonicity (rewrite (= (- ?1) ?x221)) (rewrite (= (- ?0) ?x224)) (= (mod (- ?1) (- ?0)) ?x275))))
  2.1961 -(let ((@x285 (trans (monotonicity @x277 (= (- (mod (- ?1) (- ?0))) (- ?x275))) (rewrite (= (- ?x275) ?x281)) (= (- (mod (- ?1) (- ?0))) ?x281))))
  2.1962 -(let ((@x288 (monotonicity @x285 (= (ite $x211 ?x267 (- (mod (- ?1) (- ?0)))) ?x286))))
  2.1963 -(let ((@x291 (monotonicity @x288 (= (ite $x210 ?1 (ite $x211 ?x267 (- (mod (- ?1) (- ?0))))) ?x289))))
  2.1964 -(let ((@x316 (trans (quant-intro (monotonicity @x291 $x293) (= $x273 $x295)) (quant-intro @x311 (= $x295 $x312)) (= $x273 $x312))))
  2.1965 -(let ((@x362 (mp~ (mp (asserted $x273) @x316 $x312) (nnf-pos (refl (~ $x309 $x309)) (~ $x312 $x312)) $x312)))
  2.1966 -(let ((@x425 (mp @x362 (quant-intro (refl (= $x309 $x309)) (= $x312 $x420)) $x420)))
  2.1967 -(let (($x655 (not $x420)))
  2.1968 -(let (($x656 (or $x655 $x650)))
  2.1969 -(let ((?x465 (* (- 1) 2)))
  2.1970 -(let ((?x616 (mod ?x475 ?x465)))
  2.1971 -(let ((?x617 (* (- 1) ?x616)))
  2.1972 -(let ((?x622 (ite $x463 ?x617 ?x621)))
  2.1973 -(let ((?x623 (ite $x462 l$ ?x622)))
  2.1974 -(let (($x624 (= ?x102 ?x623)))
  2.1975 -(let ((@x630 (monotonicity (monotonicity @x480 (= ?x616 (mod ?x475 (- 2)))) (= ?x617 (* (- 1) (mod ?x475 (- 2)))))))
  2.1976 -(let ((@x633 (monotonicity @x474 @x630 (= ?x622 (ite false (* (- 1) (mod ?x475 (- 2))) ?x621)))))
  2.1977 -(let ((@x637 (trans @x633 (rewrite (= (ite false (* (- 1) (mod ?x475 (- 2))) ?x621) ?x621)) (= ?x622 ?x621))))
  2.1978 -(let ((@x644 (trans (monotonicity @x472 @x637 (= ?x623 (ite false l$ ?x621))) (rewrite (= (ite false l$ ?x621) ?x621)) (= ?x623 ?x621))))
  2.1979 -(let ((@x654 (trans (monotonicity @x644 (= $x624 (= ?x102 ?x621))) (rewrite (= (= ?x102 ?x621) $x650)) (= $x624 $x650))))
  2.1980 -(let ((@x663 (trans (monotonicity @x654 (= (or $x655 $x624) $x656)) (rewrite (= $x656 $x656)) (= (or $x655 $x624) $x656))))
  2.1981 -(let ((@x664 (mp ((_ quant-inst l$ 2) (or $x655 $x624)) @x663 $x656)))
  2.1982 -(let ((@x921 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x650) $x666)) (unit-resolution @x664 @x425 $x650) $x666)))
  2.1983 -(let ((?x862 (* (- 2) ?x849)))
  2.1984 -(let ((?x863 (+ ?x96 ?x831 ?x862)))
  2.1985 -(let (($x869 (>= ?x863 0)))
  2.1986 -(let (($x861 (= ?x863 0)))
  2.1987 -(let ((@x924 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x861) $x869)) (unit-resolution ((_ th-lemma arith) (or false $x861)) @x26 $x861) $x869)))
  2.1988 -(let ((?x667 (div l$ 2)))
  2.1989 -(let ((?x680 (* (- 2) ?x667)))
  2.1990 -(let ((?x681 (+ l$ ?x648 ?x680)))
  2.1991 -(let (($x687 (>= ?x681 0)))
  2.1992 -(let (($x679 (= ?x681 0)))
  2.1993 -(let ((@x934 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x679) $x687)) (unit-resolution ((_ th-lemma arith) (or false $x679)) @x26 $x679) $x687)))
  2.1994 -(let ((?x609 (mod$ ?x96 2)))
  2.1995 -(let ((?x832 (+ ?x609 ?x831)))
  2.1996 -(let (($x833 (= ?x832 0)))
  2.1997 -(let (($x838 (or $x655 $x833)))
  2.1998 -(let ((?x801 (* (- 1) ?x96)))
  2.1999 -(let ((?x802 (mod ?x801 ?x465)))
  2.2000 -(let ((?x803 (* (- 1) ?x802)))
  2.2001 -(let ((?x805 (ite $x463 ?x803 ?x804)))
  2.2002 -(let ((?x806 (ite $x462 ?x96 ?x805)))
  2.2003 -(let (($x807 (= ?x609 ?x806)))
  2.2004 -(let ((@x813 (monotonicity (monotonicity @x480 (= ?x802 (mod ?x801 (- 2)))) (= ?x803 (* (- 1) (mod ?x801 (- 2)))))))
  2.2005 -(let ((@x816 (monotonicity @x474 @x813 (= ?x805 (ite false (* (- 1) (mod ?x801 (- 2))) ?x804)))))
  2.2006 -(let ((@x820 (trans @x816 (rewrite (= (ite false (* (- 1) (mod ?x801 (- 2))) ?x804) ?x804)) (= ?x805 ?x804))))
  2.2007 -(let ((@x827 (trans (monotonicity @x472 @x820 (= ?x806 (ite false ?x96 ?x804))) (rewrite (= (ite false ?x96 ?x804) ?x804)) (= ?x806 ?x804))))
  2.2008 -(let ((@x837 (trans (monotonicity @x827 (= $x807 (= ?x609 ?x804))) (rewrite (= (= ?x609 ?x804) $x833)) (= $x807 $x833))))
  2.2009 -(let ((@x845 (trans (monotonicity @x837 (= (or $x655 $x807) $x838)) (rewrite (= $x838 $x838)) (= (or $x655 $x807) $x838))))
  2.2010 -(let ((@x775 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x833) (>= ?x832 0))) (unit-resolution (mp ((_ quant-inst (eval_dioph$ ks$ xs$) 2) (or $x655 $x807)) @x845 $x838) @x425 $x833) (>= ?x832 0))))
  2.2011 -(let ((?x888 (* (- 1) ?x609)))
  2.2012 -(let ((?x889 (+ ?x102 ?x888)))
  2.2013 -(let (($x891 (>= ?x889 0)))
  2.2014 -(let (($x887 (= ?x102 ?x609)))
  2.2015 -(let (($x881 (= ?x101 ?x609)))
  2.2016 -(let (($x610 (= ?x609 ?x101)))
  2.2017 -(let (($x379 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(!(= (mod$ (eval_dioph$ ?v0 ?v1) 2) (mod$ (eval_dioph$ ?v0 (map$ uu$ ?v1)) 2)) :pattern ( (eval_dioph$ ?v0 (map$ uu$ ?v1)) )))
  2.2018 +(let ((@x233 (monotonicity (rewrite (= $x144 (not $x175))) (= (ite $x144 ?x200 ?x214) (ite (not $x175) ?x200 ?x214)))))
  2.2019 +(let ((@x238 (trans @x233 (rewrite (= (ite (not $x175) ?x200 ?x214) ?x234)) (= (ite $x144 ?x200 ?x214) ?x234))))
  2.2020 +(let ((@x244 (monotonicity (monotonicity @x238 (= (ite $x143 ?1 (ite $x144 ?x200 ?x214)) ?x239)) (= (= ?x199 (ite $x143 ?1 (ite $x144 ?x200 ?x214))) $x242))))
  2.2021 +(let ((?x219 (ite $x144 ?x200 ?x214)))
  2.2022 +(let ((?x222 (ite $x143 ?1 ?x219)))
  2.2023 +(let (($x225 (= ?x199 ?x222)))
  2.2024 +(let (($x226 (= (= ?x199 (ite $x143 ?1 (ite $x144 ?x200 (- (mod (- ?1) (- ?0)))))) $x225)))
  2.2025 +(let ((@x210 (monotonicity (rewrite (= (- ?1) ?x154)) (rewrite (= (- ?0) ?x157)) (= (mod (- ?1) (- ?0)) ?x208))))
  2.2026 +(let ((@x218 (trans (monotonicity @x210 (= (- (mod (- ?1) (- ?0))) (- ?x208))) (rewrite (= (- ?x208) ?x214)) (= (- (mod (- ?1) (- ?0))) ?x214))))
  2.2027 +(let ((@x221 (monotonicity @x218 (= (ite $x144 ?x200 (- (mod (- ?1) (- ?0)))) ?x219))))
  2.2028 +(let ((@x224 (monotonicity @x221 (= (ite $x143 ?1 (ite $x144 ?x200 (- (mod (- ?1) (- ?0))))) ?x222))))
  2.2029 +(let ((@x249 (trans (quant-intro (monotonicity @x224 $x226) (= $x206 $x228)) (quant-intro @x244 (= $x228 $x245)) (= $x206 $x245))))
  2.2030 +(let ((@x280 (mp~ (mp (asserted $x206) @x249 $x245) (nnf-pos (refl (~ $x242 $x242)) (~ $x245 $x245)) $x245)))
  2.2031 +(let ((@x323 (mp @x280 (quant-intro (refl (= $x242 $x242)) (= $x245 $x318)) $x318)))
  2.2032 +(let (($x550 (not $x318)))
  2.2033 +(let (($x551 (or $x550 $x545)))
  2.2034 +(let ((?x359 (* (- 1) 2)))
  2.2035 +(let ((?x511 (mod ?x369 ?x359)))
  2.2036 +(let ((?x512 (* (- 1) ?x511)))
  2.2037 +(let ((?x517 (ite $x357 ?x512 ?x516)))
  2.2038 +(let ((?x518 (ite $x356 l$ ?x517)))
  2.2039 +(let (($x519 (= ?x99 ?x518)))
  2.2040 +(let ((@x525 (monotonicity (monotonicity @x374 (= ?x511 (mod ?x369 (- 2)))) (= ?x512 (* (- 1) (mod ?x369 (- 2)))))))
  2.2041 +(let ((@x528 (monotonicity @x368 @x525 (= ?x517 (ite false (* (- 1) (mod ?x369 (- 2))) ?x516)))))
  2.2042 +(let ((@x532 (trans @x528 (rewrite (= (ite false (* (- 1) (mod ?x369 (- 2))) ?x516) ?x516)) (= ?x517 ?x516))))
  2.2043 +(let ((@x539 (trans (monotonicity @x366 @x532 (= ?x518 (ite false l$ ?x516))) (rewrite (= (ite false l$ ?x516) ?x516)) (= ?x518 ?x516))))
  2.2044 +(let ((@x549 (trans (monotonicity @x539 (= $x519 (= ?x99 ?x516))) (rewrite (= (= ?x99 ?x516) $x545)) (= $x519 $x545))))
  2.2045 +(let ((@x558 (trans (monotonicity @x549 (= (or $x550 $x519) $x551)) (rewrite (= $x551 $x551)) (= (or $x550 $x519) $x551))))
  2.2046 +(let ((@x559 (mp ((_ quant-inst l$ 2) (or $x550 $x519)) @x558 $x551)))
  2.2047 +(let ((@x900 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x545) $x561)) (unit-resolution @x559 @x323 $x545) $x561)))
  2.2048 +(let ((?x757 (* (- 2) ?x744)))
  2.2049 +(let ((?x758 (+ ?x93 ?x726 ?x757)))
  2.2050 +(let (($x764 (>= ?x758 0)))
  2.2051 +(let (($x756 (= ?x758 0)))
  2.2052 +(let ((@x903 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x756) $x764)) (unit-resolution ((_ th-lemma arith) (or false $x756)) @x26 $x756) $x764)))
  2.2053 +(let ((?x562 (div l$ 2)))
  2.2054 +(let ((?x575 (* (- 2) ?x562)))
  2.2055 +(let ((?x576 (+ l$ ?x543 ?x575)))
  2.2056 +(let (($x582 (>= ?x576 0)))
  2.2057 +(let (($x574 (= ?x576 0)))
  2.2058 +(let ((@x906 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x574) $x582)) (unit-resolution ((_ th-lemma arith) (or false $x574)) @x26 $x574) $x582)))
  2.2059 +(let ((?x504 (mod$ ?x93 2)))
  2.2060 +(let ((?x727 (+ ?x504 ?x726)))
  2.2061 +(let (($x728 (= ?x727 0)))
  2.2062 +(let (($x733 (or $x550 $x728)))
  2.2063 +(let ((?x696 (* (- 1) ?x93)))
  2.2064 +(let ((?x697 (mod ?x696 ?x359)))
  2.2065 +(let ((?x698 (* (- 1) ?x697)))
  2.2066 +(let ((?x700 (ite $x357 ?x698 ?x699)))
  2.2067 +(let ((?x701 (ite $x356 ?x93 ?x700)))
  2.2068 +(let (($x702 (= ?x504 ?x701)))
  2.2069 +(let ((@x708 (monotonicity (monotonicity @x374 (= ?x697 (mod ?x696 (- 2)))) (= ?x698 (* (- 1) (mod ?x696 (- 2)))))))
  2.2070 +(let ((@x711 (monotonicity @x368 @x708 (= ?x700 (ite false (* (- 1) (mod ?x696 (- 2))) ?x699)))))
  2.2071 +(let ((@x715 (trans @x711 (rewrite (= (ite false (* (- 1) (mod ?x696 (- 2))) ?x699) ?x699)) (= ?x700 ?x699))))
  2.2072 +(let ((@x722 (trans (monotonicity @x366 @x715 (= ?x701 (ite false ?x93 ?x699))) (rewrite (= (ite false ?x93 ?x699) ?x699)) (= ?x701 ?x699))))
  2.2073 +(let ((@x732 (trans (monotonicity @x722 (= $x702 (= ?x504 ?x699))) (rewrite (= (= ?x504 ?x699) $x728)) (= $x702 $x728))))
  2.2074 +(let ((@x740 (trans (monotonicity @x732 (= (or $x550 $x702) $x733)) (rewrite (= $x733 $x733)) (= (or $x550 $x702) $x733))))
  2.2075 +(let ((@x455 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x728) (>= ?x727 0))) (unit-resolution (mp ((_ quant-inst (eval_dioph$ ks$ xs$) 2) (or $x550 $x702)) @x740 $x733) @x323 $x728) (>= ?x727 0))))
  2.2076 +(let ((?x783 (* (- 1) ?x504)))
  2.2077 +(let ((?x784 (+ ?x99 ?x783)))
  2.2078 +(let (($x786 (>= ?x784 0)))
  2.2079 +(let (($x782 (= ?x99 ?x504)))
  2.2080 +(let (($x663 (= ?x98 ?x504)))
  2.2081 +(let (($x505 (= ?x504 ?x98)))
  2.2082 +(let (($x297 (forall ((?v0 Int_list$) (?v1 Int_list$) )(!(= (mod$ (eval_dioph$ ?v0 ?v1) 2) (mod$ (eval_dioph$ ?v0 (map$ uu$ ?v1)) 2)) :pattern ( (eval_dioph$ ?v0 (map$ uu$ ?v1)) )))
  2.2083  ))
  2.2084 -(let (($x54 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(= (mod$ (eval_dioph$ ?v0 ?v1) 2) (mod$ (eval_dioph$ ?v0 (map$ uu$ ?v1)) 2)))
  2.2085 +(let (($x51 (forall ((?v0 Int_list$) (?v1 Int_list$) )(= (mod$ (eval_dioph$ ?v0 ?v1) 2) (mod$ (eval_dioph$ ?v0 (map$ uu$ ?v1)) 2)))
  2.2086  ))
  2.2087 -(let (($x53 (= (mod$ ?x48 2) (mod$ ?x51 2))))
  2.2088 -(let ((@x332 (mp~ (asserted $x54) (nnf-pos (refl (~ $x53 $x53)) (~ $x54 $x54)) $x54)))
  2.2089 -(let ((@x384 (mp @x332 (quant-intro (refl (= $x53 $x53)) (= $x54 $x379)) $x379)))
  2.2090 -(let (($x619 (or (not $x379) $x610)))
  2.2091 -(let ((@x620 ((_ quant-inst ks$ xs$) $x619)))
  2.2092 -(let ((@x965 (symm (unit-resolution (def-axiom (or $x365 $x103)) @x583 $x103) (= ?x102 ?x101))))
  2.2093 -(let ((@x962 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x887) $x891)) (trans @x965 (symm (unit-resolution @x620 @x384 $x610) $x881) $x887) $x891)))
  2.2094 -(let (($x890 (<= ?x889 0)))
  2.2095 -(let ((@x1023 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x887) $x890)) (trans @x965 (symm (unit-resolution @x620 @x384 $x610) $x881) $x887) $x890)))
  2.2096 -(let (($x793 (>= ?x791 0)))
  2.2097 -(let ((@x522 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x364 $x793)) (unit-resolution (def-axiom (or $x365 $x120)) @x583 $x120) $x793)))
  2.2098 -(let ((@x1085 (unit-resolution ((_ th-lemma arith) (or false (not (>= ?x530 2)))) @x26 (not (>= ?x530 2)))))
  2.2099 -(let (($x665 (<= ?x649 0)))
  2.2100 -(let ((@x767 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x650) $x665)) (unit-resolution @x664 @x425 $x650) $x665)))
  2.2101 -(let (($x868 (<= ?x863 0)))
  2.2102 -(let ((@x858 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x861) $x868)) (unit-resolution ((_ th-lemma arith) (or false $x861)) @x26 $x861) $x868)))
  2.2103 -(let (($x686 (<= ?x681 0)))
  2.2104 -(let ((@x1092 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x679) $x686)) (unit-resolution ((_ th-lemma arith) (or false $x679)) @x26 $x679) $x686)))
  2.2105 -(let ((@x1095 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x833) (<= ?x832 0))) (unit-resolution (mp ((_ quant-inst (eval_dioph$ ks$ xs$) 2) (or $x655 $x807)) @x845 $x838) @x425 $x833) (<= ?x832 0))))
  2.2106 -(let (($x615 (>= ?x607 0)))
  2.2107 -(let ((@x1100 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x608) $x615)) (unit-resolution @x613 @x391 $x608) $x615)))
  2.2108 -(let ((@x1104 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) (>= ?x502 0))) @x907 (>= ?x502 0))))
  2.2109 -(let ((@x1107 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x539) (<= ?x542 0))) (unit-resolution ((_ th-lemma arith) (or false $x539)) @x26 $x539) (<= ?x542 0))))
  2.2110 -(let ((@x1108 ((_ th-lemma arith farkas 1 -2 -2 -1 -2 1 1 1 1 1 1) @x1107 @x1104 (hypothesis $x793) @x1100 (hypothesis $x1078) (hypothesis $x890) @x1095 @x1092 @x858 @x767 @x1085 false)))
  2.2111 -(let ((@x576 (unit-resolution (lemma @x1108 (or (not $x1078) (not $x793) (not $x890))) @x522 @x1023 (not $x1078))))
  2.2112 -(let ((@x966 (unit-resolution @x576 ((_ th-lemma arith) @x962 @x775 @x934 @x924 @x921 @x604 $x1078) false)))
  2.2113 -(let ((@x967 (lemma @x966 $x365)))
  2.2114 -(let ((@x445 (unit-resolution (def-axiom (or $x98 $x366 (not $x372))) @x377 (or $x98 $x366))))
  2.2115 -(let ((@x586 (unit-resolution @x445 @x967 $x98)))
  2.2116 -(let ((@x1067 (trans (symm (unit-resolution @x620 @x384 $x610) $x881) (monotonicity @x586 (= ?x609 ?x102)) $x103)))
  2.2117 -(let (($x916 (not $x792)))
  2.2118 -(let ((@x950 ((_ th-lemma arith assign-bounds 1 -1/2 -1/2 1/2 -1/2) (or $x793 (not $x519) (not $x570) (not $x548) (not $x614) $x874))))
  2.2119 -(let ((@x951 (unit-resolution @x950 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) $x519)) @x907 $x519) (unit-resolution ((_ th-lemma arith triangle-eq) (or $x137 $x800)) @x586 $x800) @x898 (unit-resolution ((_ th-lemma arith) (or false $x570)) @x26 $x570) @x905 $x793)))
  2.2120 -(let ((@x1040 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x120 $x916 (not $x793))) (hypothesis $x364) (or $x916 (not $x793)))))
  2.2121 -(let ((@x1060 ((_ th-lemma arith farkas -2 -2 1 -1 1 1) (unit-resolution @x1040 @x951 $x916) @x1104 @x1107 @x1100 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x137 $x799)) @x586 $x799) @x1085 false)))
  2.2122 -(let ((@x569 (unit-resolution (unit-resolution (def-axiom (or $x366 $x363 $x364)) @x967 $x365) (lemma @x1060 $x120) $x363)))
  2.2123 -(unit-resolution @x569 @x1067 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.2124 +(let (($x50 (= (mod$ ?x45 2) (mod$ ?x48 2))))
  2.2125 +(let ((@x265 (mp~ (asserted $x51) (nnf-pos (refl (~ $x50 $x50)) (~ $x51 $x51)) $x51)))
  2.2126 +(let ((@x302 (mp @x265 (quant-intro (refl (= $x50 $x50)) (= $x51 $x297)) $x297)))
  2.2127 +(let (($x514 (or (not $x297) $x505)))
  2.2128 +(let ((@x515 ((_ quant-inst ks$ xs$) $x514)))
  2.2129 +(let ((@x658 (symm (unit-resolution (def-axiom (or $x283 $x100)) @x837 $x100) (= ?x99 ?x98))))
  2.2130 +(let ((@x911 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x782) $x786)) (trans @x658 (symm (unit-resolution @x515 @x302 $x505) $x663) $x782) $x786)))
  2.2131 +(let (($x785 (<= ?x784 0)))
  2.2132 +(let ((@x814 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x782) $x785)) (trans @x658 (symm (unit-resolution @x515 @x302 $x505) $x663) $x782) $x785)))
  2.2133 +(let (($x688 (>= ?x686 0)))
  2.2134 +(let ((@x824 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x282 $x688)) (unit-resolution (def-axiom (or $x283 $x117)) @x837 $x117) $x688)))
  2.2135 +(let ((@x979 (unit-resolution ((_ th-lemma arith) (or false (not (>= ?x425 2)))) @x26 (not (>= ?x425 2)))))
  2.2136 +(let (($x560 (<= ?x544 0)))
  2.2137 +(let ((@x427 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x545) $x560)) (unit-resolution @x559 @x323 $x545) $x560)))
  2.2138 +(let (($x763 (<= ?x758 0)))
  2.2139 +(let ((@x569 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x756) $x763)) (unit-resolution ((_ th-lemma arith) (or false $x756)) @x26 $x756) $x763)))
  2.2140 +(let (($x581 (<= ?x576 0)))
  2.2141 +(let ((@x986 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x574) $x581)) (unit-resolution ((_ th-lemma arith) (or false $x574)) @x26 $x574) $x581)))
  2.2142 +(let ((@x989 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x728) (<= ?x727 0))) (unit-resolution (mp ((_ quant-inst (eval_dioph$ ks$ xs$) 2) (or $x550 $x702)) @x740 $x733) @x323 $x728) (<= ?x727 0))))
  2.2143 +(let (($x510 (>= ?x502 0)))
  2.2144 +(let ((@x994 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) $x510)) (unit-resolution @x508 @x309 $x503) $x510)))
  2.2145 +(let ((@x998 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x397) (>= ?x396 0))) @x802 (>= ?x396 0))))
  2.2146 +(let ((@x1001 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x434) (<= ?x437 0))) (unit-resolution ((_ th-lemma arith) (or false $x434)) @x26 $x434) (<= ?x437 0))))
  2.2147 +(let ((@x1002 ((_ th-lemma arith farkas 1 -2 -2 -1 -2 1 1 1 1 1 1) @x1001 @x998 (hypothesis $x688) @x994 (hypothesis $x972) (hypothesis $x785) @x989 @x986 @x569 @x427 @x979 false)))
  2.2148 +(let ((@x821 (unit-resolution (lemma @x1002 (or (not $x972) (not $x688) (not $x785))) @x824 @x814 (not $x972))))
  2.2149 +(let ((@x769 (unit-resolution @x821 ((_ th-lemma arith) @x911 @x455 @x906 @x903 @x900 @x897 $x972) false)))
  2.2150 +(let ((@x770 (lemma @x769 $x283)))
  2.2151 +(let ((@x340 (unit-resolution (def-axiom (or $x95 $x284 (not $x290))) @x295 (or $x95 $x284))))
  2.2152 +(let ((@x753 (unit-resolution @x340 @x770 $x95)))
  2.2153 +(let ((@x867 (trans (symm (unit-resolution @x515 @x302 $x505) $x663) (monotonicity @x753 (= ?x504 ?x99)) $x100)))
  2.2154 +(let (($x811 (not $x687)))
  2.2155 +(let ((@x845 ((_ th-lemma arith assign-bounds 1 -1/2 -1/2 1/2 -1/2) (or $x688 (not $x413) (not $x465) (not $x443) (not $x509) $x857))))
  2.2156 +(let ((@x892 (unit-resolution @x845 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x397) $x413)) @x802 $x413) (unit-resolution ((_ th-lemma arith triangle-eq) (or $x134 $x695)) @x753 $x695) @x793 (unit-resolution ((_ th-lemma arith) (or false $x465)) @x26 $x465) @x800 $x688)))
  2.2157 +(let ((@x935 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x117 $x811 (not $x688))) (hypothesis $x282) (or $x811 (not $x688)))))
  2.2158 +(let ((@x955 ((_ th-lemma arith farkas -2 -2 1 -1 1 1) (unit-resolution @x935 @x892 $x811) @x998 @x1001 @x994 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x134 $x694)) @x753 $x694) @x979 false)))
  2.2159 +(let ((@x939 (unit-resolution (unit-resolution (def-axiom (or $x284 $x281 $x282)) @x770 $x283) (lemma @x955 $x117) $x281)))
  2.2160 +(unit-resolution @x939 @x867 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.2161  
  2.2162  d277a40ca34ecc409672601e981711fef2d0064f 64 0
  2.2163  unsat
  2.2164 @@ -5663,30 +4632,30 @@
  2.2165  (let ((@x258 ((_ quant-inst 1) $x257)))
  2.2166  (unit-resolution @x258 @x620 @x145 false))))))))))))))))))
  2.2167  
  2.2168 -4e5cf2f6b4df716b03e440b50af106a8af8b2799 170 0
  2.2169 +b4b100f728c8f0d6f96483e4de44e248cc4be1aa 101 0
  2.2170  unsat
  2.2171  ((set-logic AUFLIA)
  2.2172  (proof
  2.2173 -(let ((?x209 (some$a true)))
  2.2174 -(let ((?x210 (g$b ?x209)))
  2.2175 -(let ((?x206 (some$ 3)))
  2.2176 -(let ((?x208 (g$ ?x206)))
  2.2177 -(let (($x211 (= ?x208 ?x210)))
  2.2178 -(let ((?x434 (cons$a true nil$a)))
  2.2179 -(let ((?x435 (g$c ?x434)))
  2.2180 -(let (($x406 (= ?x210 ?x435)))
  2.2181 -(let (($x768 (forall ((?v0 Bool) )(!(= (g$b (some$a ?v0)) (g$c (cons$a ?v0 nil$a))) :pattern ( (some$a ?v0) ) :pattern ( (cons$a ?v0 nil$a) )))
  2.2182 +(let ((?x124 (some$a true)))
  2.2183 +(let ((?x125 (g$b ?x124)))
  2.2184 +(let ((?x122 (some$ 3)))
  2.2185 +(let ((?x123 (g$ ?x122)))
  2.2186 +(let (($x126 (= ?x123 ?x125)))
  2.2187 +(let ((?x269 (cons$a true nil$a)))
  2.2188 +(let ((?x270 (g$c ?x269)))
  2.2189 +(let (($x587 (= ?x125 ?x270)))
  2.2190 +(let (($x604 (forall ((?v0 Bool) )(!(= (g$b (some$a ?v0)) (g$c (cons$a ?v0 nil$a))) :pattern ( (some$a ?v0) ) :pattern ( (cons$a ?v0 nil$a) )))
  2.2191  ))
  2.2192  (let (($x43 (forall ((?v0 Bool) )(= (g$b (some$a ?v0)) (g$c (cons$a ?v0 nil$a))))
  2.2193  ))
  2.2194  (let (($x42 (= (g$b (some$a ?0)) (g$c (cons$a ?0 nil$a)))))
  2.2195 -(let ((@x280 (mp~ (asserted $x43) (nnf-pos (refl (~ $x42 $x42)) (~ $x43 $x43)) $x43)))
  2.2196 -(let ((@x773 (mp @x280 (quant-intro (refl (= $x42 $x42)) (= $x43 $x768)) $x768)))
  2.2197 -(let (($x419 (or (not $x768) $x406)))
  2.2198 -(let ((@x752 ((_ quant-inst true) $x419)))
  2.2199 -(let ((?x720 (size$ ?x434)))
  2.2200 -(let (($x444 (= ?x435 ?x720)))
  2.2201 -(let (($x776 (forall ((?v0 Bool_list$) )(!(let ((?x61 (size$ ?v0)))
  2.2202 +(let ((@x160 (mp~ (asserted $x43) (nnf-pos (refl (~ $x42 $x42)) (~ $x43 $x43)) $x43)))
  2.2203 +(let ((@x609 (mp @x160 (quant-intro (refl (= $x42 $x42)) (= $x43 $x604)) $x604)))
  2.2204 +(let (($x254 (or (not $x604) $x587)))
  2.2205 +(let ((@x255 ((_ quant-inst true) $x254)))
  2.2206 +(let ((?x227 (size$ ?x269)))
  2.2207 +(let (($x569 (= ?x270 ?x227)))
  2.2208 +(let (($x612 (forall ((?v0 Bool_list$) )(!(let ((?x61 (size$ ?v0)))
  2.2209  (let ((?x60 (g$c ?v0)))
  2.2210  (= ?x60 ?x61))) :pattern ( (g$c ?v0) ) :pattern ( (size$ ?v0) )))
  2.2211  ))
  2.2212 @@ -5694,115 +4663,46 @@
  2.2213  (let ((?x60 (g$c ?v0)))
  2.2214  (= ?x60 ?x61))))
  2.2215  ))
  2.2216 -(let ((@x780 (quant-intro (refl (= (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (= $x63 $x776))))
  2.2217 -(let ((@x306 (nnf-pos (refl (~ (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (~ $x63 $x63))))
  2.2218 -(let ((@x781 (mp (mp~ (asserted $x63) @x306 $x63) @x780 $x776)))
  2.2219 -(let (($x711 (or (not $x776) $x444)))
  2.2220 -(let ((@x712 ((_ quant-inst (cons$a true nil$a)) $x711)))
  2.2221 -(let ((?x149 (size$ nil$a)))
  2.2222 -(let ((?x724 (of_nat$ ?x149)))
  2.2223 -(let ((?x710 (+ 1 ?x724)))
  2.2224 -(let ((?x713 (nat$ ?x710)))
  2.2225 -(let (($x714 (= ?x720 ?x713)))
  2.2226 -(let (($x819 (forall ((?v0 Bool) (?v1 Bool_list$) )(!(= (size$ (cons$a ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$ ?v1))))) :pattern ( (cons$a ?v0 ?v1) )))
  2.2227 -))
  2.2228 -(let (($x177 (forall ((?v0 Bool) (?v1 Bool_list$) )(= (size$ (cons$a ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$ ?v1))))))
  2.2229 -))
  2.2230 -(let (($x174 (= (size$ (cons$a ?1 ?0)) (nat$ (+ 1 (of_nat$ (size$ ?0)))))))
  2.2231 -(let (($x161 (forall ((?v0 Bool) (?v1 Bool_list$) )(= (size$ (cons$a ?v0 ?v1)) (nat$ (+ (of_nat$ (size$ ?v1)) (+ 0 1)))))
  2.2232 +(let ((@x616 (quant-intro (refl (= (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (= $x63 $x612))))
  2.2233 +(let ((@x142 (nnf-pos (refl (~ (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (~ $x63 $x63))))
  2.2234 +(let ((@x617 (mp (mp~ (asserted $x63) @x142 $x63) @x616 $x612)))
  2.2235 +(let (($x571 (or (not $x612) $x569)))
  2.2236 +(let ((@x572 ((_ quant-inst (cons$a true nil$a)) $x571)))
  2.2237 +(let ((?x89 (suc$ zero$)))
  2.2238 +(let ((?x105 (size$ nil$a)))
  2.2239 +(let ((?x233 (plus$ ?x105 ?x89)))
  2.2240 +(let (($x570 (= ?x227 ?x233)))
  2.2241 +(let (($x657 (forall ((?v0 Bool) (?v1 Bool_list$) )(!(= (size$ (cons$a ?v0 ?v1)) (plus$ (size$ ?v1) (suc$ zero$))) :pattern ( (cons$a ?v0 ?v1) )))
  2.2242  ))
  2.2243 -(let (($x160 (= (size$ (cons$a ?1 ?0)) (nat$ (+ (of_nat$ (size$ ?0)) (+ 0 1))))))
  2.2244 -(let (($x172 (= (nat$ (+ (of_nat$ (size$ ?0)) (+ 0 1))) (nat$ (+ 1 (of_nat$ (size$ ?0)))))))
  2.2245 -(let ((?x61 (size$ ?0)))
  2.2246 -(let ((?x157 (of_nat$ ?x61)))
  2.2247 -(let ((?x166 (+ 1 ?x157)))
  2.2248 -(let ((?x92 (+ 0 1)))
  2.2249 -(let ((?x158 (+ ?x157 ?x92)))
  2.2250 -(let ((@x170 (trans (monotonicity (rewrite (= ?x92 1)) (= ?x158 (+ ?x157 1))) (rewrite (= (+ ?x157 1) ?x166)) (= ?x158 ?x166))))
  2.2251 -(let ((@x179 (quant-intro (monotonicity (monotonicity @x170 $x172) (= $x160 $x174)) (= $x161 $x177))))
  2.2252 -(let ((@x323 (mp~ (mp (asserted $x161) @x179 $x177) (nnf-pos (refl (~ $x174 $x174)) (~ $x177 $x177)) $x177)))
  2.2253 -(let ((@x824 (mp @x323 (quant-intro (refl (= $x174 $x174)) (= $x177 $x819)) $x819)))
  2.2254 -(let (($x718 (or (not $x819) $x714)))
  2.2255 -(let ((@x556 ((_ quant-inst true nil$a) $x718)))
  2.2256 -(let ((?x153 (size$a nil$)))
  2.2257 -(let ((?x730 (of_nat$ ?x153)))
  2.2258 -(let (($x716 (<= ?x730 0)))
  2.2259 -(let (($x715 (= ?x730 0)))
  2.2260 -(let ((?x73 (nat$ 0)))
  2.2261 -(let ((?x748 (of_nat$ ?x73)))
  2.2262 -(let (($x412 (= ?x748 0)))
  2.2263 -(let (($x841 (forall ((?v0 Int) )(!(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.2264 -(let (($x236 (>= ?v0 0)))
  2.2265 -(let (($x237 (not $x236)))
  2.2266 -(or $x237 $x223)))) :pattern ( (nat$ ?v0) )))
  2.2267 -))
  2.2268 -(let (($x243 (forall ((?v0 Int) )(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.2269 -(let (($x236 (>= ?v0 0)))
  2.2270 -(let (($x237 (not $x236)))
  2.2271 -(or $x237 $x223)))))
  2.2272 -))
  2.2273 -(let (($x223 (= (of_nat$ (nat$ ?0)) ?0)))
  2.2274 -(let (($x236 (>= ?0 0)))
  2.2275 -(let (($x237 (not $x236)))
  2.2276 -(let (($x240 (or $x237 $x223)))
  2.2277 -(let (($x225 (forall ((?v0 Int) )(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.2278 -(let (($x220 (<= 0 ?v0)))
  2.2279 -(=> $x220 $x223))))
  2.2280 +(let (($x114 (forall ((?v0 Bool) (?v1 Bool_list$) )(= (size$ (cons$a ?v0 ?v1)) (plus$ (size$ ?v1) (suc$ zero$))))
  2.2281  ))
  2.2282 -(let (($x231 (forall ((?v0 Int) )(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0)))
  2.2283 -(or (not (<= 0 ?v0)) $x223)))
  2.2284 +(let (($x113 (= (size$ (cons$a ?1 ?0)) (plus$ (size$ ?0) ?x89))))
  2.2285 +(let ((@x173 (mp~ (asserted $x114) (nnf-pos (refl (~ $x113 $x113)) (~ $x114 $x114)) $x114)))
  2.2286 +(let ((@x662 (mp @x173 (quant-intro (refl (= $x113 $x113)) (= $x114 $x657)) $x657)))
  2.2287 +(let (($x576 (or (not $x657) $x570)))
  2.2288 +(let ((@x213 ((_ quant-inst true nil$a) $x576)))
  2.2289 +(let ((?x108 (size$a nil$)))
  2.2290 +(let (($x109 (= ?x108 zero$)))
  2.2291 +(let ((@x110 (asserted $x109)))
  2.2292 +(let (($x106 (= ?x105 zero$)))
  2.2293 +(let ((@x107 (asserted $x106)))
  2.2294 +(let ((@x287 (monotonicity (trans @x107 (symm @x110 (= zero$ ?x108)) (= ?x105 ?x108)) (= ?x233 (plus$ ?x108 ?x89)))))
  2.2295 +(let ((?x246 (plus$ ?x108 ?x89)))
  2.2296 +(let ((?x256 (cons$ 3 nil$)))
  2.2297 +(let ((?x588 (size$a ?x256)))
  2.2298 +(let (($x584 (= ?x588 ?x246)))
  2.2299 +(let (($x664 (forall ((?v0 Int) (?v1 Int_list$) )(!(= (size$a (cons$ ?v0 ?v1)) (plus$ (size$a ?v1) (suc$ zero$))) :pattern ( (cons$ ?v0 ?v1) )))
  2.2300  ))
  2.2301 -(let ((@x239 (monotonicity (rewrite (= (<= 0 ?0) $x236)) (= (not (<= 0 ?0)) $x237))))
  2.2302 -(let ((@x245 (quant-intro (monotonicity @x239 (= (or (not (<= 0 ?0)) $x223) $x240)) (= $x231 $x243))))
  2.2303 -(let ((@x230 (rewrite (= (=> (<= 0 ?0) $x223) (or (not (<= 0 ?0)) $x223)))))
  2.2304 -(let ((@x248 (mp (asserted $x225) (trans (quant-intro @x230 (= $x225 $x231)) @x245 (= $x225 $x243)) $x243)))
  2.2305 -(let ((@x846 (mp (mp~ @x248 (nnf-pos (refl (~ $x240 $x240)) (~ $x243 $x243)) $x243) (quant-intro (refl (= $x240 $x240)) (= $x243 $x841)) $x841)))
  2.2306 -(let (($x381 (not $x841)))
  2.2307 -(let (($x382 (or $x381 $x412)))
  2.2308 -(let ((@x733 (rewrite (= (>= 0 0) true))))
  2.2309 -(let ((@x736 (trans (monotonicity @x733 (= (not (>= 0 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 0 0)) false))))
  2.2310 -(let ((@x739 (monotonicity @x736 (= (or (not (>= 0 0)) $x412) (or false $x412)))))
  2.2311 -(let ((@x742 (trans @x739 (rewrite (= (or false $x412) $x412)) (= (or (not (>= 0 0)) $x412) $x412))))
  2.2312 -(let ((@x731 (monotonicity @x742 (= (or $x381 (or (not (>= 0 0)) $x412)) $x382))))
  2.2313 -(let ((@x450 (trans @x731 (rewrite (= $x382 $x382)) (= (or $x381 (or (not (>= 0 0)) $x412)) $x382))))
  2.2314 -(let ((@x451 (mp ((_ quant-inst 0) (or $x381 (or (not (>= 0 0)) $x412))) @x450 $x382)))
  2.2315 -(let ((@x621 (trans (monotonicity (asserted (= ?x153 ?x73)) (= ?x730 ?x748)) (unit-resolution @x451 @x846 $x412) $x715)))
  2.2316 -(let (($x557 (>= ?x730 0)))
  2.2317 -(let ((@x610 ((_ th-lemma arith eq-propagate -1 -1) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x715) $x557)) @x621 $x557) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x715) $x716)) @x621 $x716) (= (+ 1 ?x730) 1))))
  2.2318 -(let (($x700 (<= ?x724 0)))
  2.2319 -(let (($x558 (= ?x724 0)))
  2.2320 -(let ((@x583 (trans (monotonicity (asserted (= ?x149 ?x73)) (= ?x724 ?x748)) (unit-resolution @x451 @x846 $x412) $x558)))
  2.2321 -(let (($x701 (>= ?x724 0)))
  2.2322 -(let ((@x559 ((_ th-lemma arith eq-propagate -1 -1) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x558) $x701)) @x583 $x701) (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x558) $x700)) @x583 $x700) (= ?x710 1))))
  2.2323 -(let ((@x563 (trans @x559 (symm @x610 (= 1 (+ 1 ?x730))) (= ?x710 (+ 1 ?x730)))))
  2.2324 -(let ((@x539 (symm (monotonicity @x563 (= ?x713 (nat$ (+ 1 ?x730)))) (= (nat$ (+ 1 ?x730)) ?x713))))
  2.2325 -(let ((?x437 (+ 1 ?x730)))
  2.2326 -(let ((?x440 (nat$ ?x437)))
  2.2327 -(let ((?x431 (cons$ 3 nil$)))
  2.2328 -(let ((?x728 (size$a ?x431)))
  2.2329 -(let (($x719 (= ?x728 ?x440)))
  2.2330 -(let (($x826 (forall ((?v0 Int) (?v1 Int_list$) )(!(= (size$a (cons$ ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$a ?v1))))) :pattern ( (cons$ ?v0 ?v1) )))
  2.2331 +(let (($x119 (forall ((?v0 Int) (?v1 Int_list$) )(= (size$a (cons$ ?v0 ?v1)) (plus$ (size$a ?v1) (suc$ zero$))))
  2.2332  ))
  2.2333 -(let (($x202 (forall ((?v0 Int) (?v1 Int_list$) )(= (size$a (cons$ ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$a ?v1))))))
  2.2334 -))
  2.2335 -(let (($x199 (= (size$a (cons$ ?1 ?0)) (nat$ (+ 1 (of_nat$ (size$a ?0)))))))
  2.2336 -(let (($x186 (forall ((?v0 Int) (?v1 Int_list$) )(= (size$a (cons$ ?v0 ?v1)) (nat$ (+ (of_nat$ (size$a ?v1)) (+ 0 1)))))
  2.2337 -))
  2.2338 -(let (($x185 (= (size$a (cons$ ?1 ?0)) (nat$ (+ (of_nat$ (size$a ?0)) ?x92)))))
  2.2339 -(let (($x197 (= (nat$ (+ (of_nat$ (size$a ?0)) ?x92)) (nat$ (+ 1 (of_nat$ (size$a ?0)))))))
  2.2340 -(let ((?x67 (size$a ?0)))
  2.2341 -(let ((?x181 (of_nat$ ?x67)))
  2.2342 -(let ((?x191 (+ 1 ?x181)))
  2.2343 -(let ((?x183 (+ ?x181 ?x92)))
  2.2344 -(let ((@x195 (trans (monotonicity (rewrite (= ?x92 1)) (= ?x183 (+ ?x181 1))) (rewrite (= (+ ?x181 1) ?x191)) (= ?x183 ?x191))))
  2.2345 -(let ((@x204 (quant-intro (monotonicity (monotonicity @x195 $x197) (= $x185 $x199)) (= $x186 $x202))))
  2.2346 -(let ((@x328 (mp~ (mp (asserted $x186) @x204 $x202) (nnf-pos (refl (~ $x199 $x199)) (~ $x202 $x202)) $x202)))
  2.2347 -(let ((@x831 (mp @x328 (quant-intro (refl (= $x199 $x199)) (= $x202 $x826)) $x826)))
  2.2348 -(let (($x722 (or (not $x826) $x719)))
  2.2349 -(let ((@x723 ((_ quant-inst 3 nil$) $x722)))
  2.2350 -(let ((?x432 (g$a ?x431)))
  2.2351 -(let (($x729 (= ?x432 ?x728)))
  2.2352 -(let (($x784 (forall ((?v0 Int_list$) )(!(let ((?x67 (size$a ?v0)))
  2.2353 +(let (($x118 (= (size$a (cons$ ?1 ?0)) (plus$ (size$a ?0) ?x89))))
  2.2354 +(let ((@x178 (mp~ (asserted $x119) (nnf-pos (refl (~ $x118 $x118)) (~ $x119 $x119)) $x119)))
  2.2355 +(let ((@x669 (mp @x178 (quant-intro (refl (= $x118 $x118)) (= $x119 $x664)) $x664)))
  2.2356 +(let (($x231 (or (not $x664) $x584)))
  2.2357 +(let ((@x232 ((_ quant-inst 3 nil$) $x231)))
  2.2358 +(let ((?x267 (g$a ?x256)))
  2.2359 +(let (($x592 (= ?x267 ?x588)))
  2.2360 +(let (($x620 (forall ((?v0 Int_list$) )(!(let ((?x67 (size$a ?v0)))
  2.2361  (let ((?x66 (g$a ?v0)))
  2.2362  (= ?x66 ?x67))) :pattern ( (g$a ?v0) ) :pattern ( (size$a ?v0) )))
  2.2363  ))
  2.2364 @@ -5810,27 +4710,27 @@
  2.2365  (let ((?x66 (g$a ?v0)))
  2.2366  (= ?x66 ?x67))))
  2.2367  ))
  2.2368 -(let ((@x788 (quant-intro (refl (= (= (g$a ?0) ?x67) (= (g$a ?0) ?x67))) (= $x69 $x784))))
  2.2369 -(let ((@x295 (nnf-pos (refl (~ (= (g$a ?0) ?x67) (= (g$a ?0) ?x67))) (~ $x69 $x69))))
  2.2370 -(let ((@x789 (mp (mp~ (asserted $x69) @x295 $x69) @x788 $x784)))
  2.2371 -(let (($x438 (or (not $x784) $x729)))
  2.2372 -(let ((@x439 ((_ quant-inst (cons$ 3 nil$)) $x438)))
  2.2373 -(let (($x433 (= ?x208 ?x432)))
  2.2374 -(let (($x760 (forall ((?v0 Int) )(!(= (g$ (some$ ?v0)) (g$a (cons$ ?v0 nil$))) :pattern ( (some$ ?v0) ) :pattern ( (cons$ ?v0 nil$) )))
  2.2375 +(let ((@x622 (refl (= (= (g$a ?0) (size$a ?0)) (= (g$a ?0) (size$a ?0))))))
  2.2376 +(let ((@x129 (nnf-pos (refl (~ (= (g$a ?0) (size$a ?0)) (= (g$a ?0) (size$a ?0)))) (~ $x69 $x69))))
  2.2377 +(let ((@x625 (mp (mp~ (asserted $x69) @x129 $x69) (quant-intro @x622 (= $x69 $x620)) $x620)))
  2.2378 +(let (($x248 (or (not $x620) $x592)))
  2.2379 +(let ((@x585 ((_ quant-inst (cons$ 3 nil$)) $x248)))
  2.2380 +(let (($x268 (= ?x123 ?x267)))
  2.2381 +(let (($x596 (forall ((?v0 Int) )(!(= (g$ (some$ ?v0)) (g$a (cons$ ?v0 nil$))) :pattern ( (some$ ?v0) ) :pattern ( (cons$ ?v0 nil$) )))
  2.2382  ))
  2.2383  (let (($x34 (forall ((?v0 Int) )(= (g$ (some$ ?v0)) (g$a (cons$ ?v0 nil$))))
  2.2384  ))
  2.2385  (let (($x33 (= (g$ (some$ ?0)) (g$a (cons$ ?0 nil$)))))
  2.2386 -(let ((@x297 (mp~ (asserted $x34) (nnf-pos (refl (~ $x33 $x33)) (~ $x34 $x34)) $x34)))
  2.2387 -(let ((@x765 (mp @x297 (quant-intro (refl (= $x33 $x33)) (= $x34 $x760)) $x760)))
  2.2388 -(let (($x750 (or (not $x760) $x433)))
  2.2389 -(let ((@x751 ((_ quant-inst 3) $x750)))
  2.2390 -(let ((@x550 (trans (unit-resolution @x751 @x765 $x433) (unit-resolution @x439 @x789 $x729) (= ?x208 ?x728))))
  2.2391 -(let ((@x554 (trans (trans @x550 (unit-resolution @x723 @x831 $x719) (= ?x208 ?x440)) @x539 (= ?x208 ?x713))))
  2.2392 -(let ((@x525 (trans @x554 (symm (unit-resolution @x556 @x824 $x714) (= ?x713 ?x720)) (= ?x208 ?x720))))
  2.2393 -(let ((@x527 (trans @x525 (symm (unit-resolution @x712 @x781 $x444) (= ?x720 ?x435)) (= ?x208 ?x435))))
  2.2394 -(let ((@x528 (trans @x527 (symm (unit-resolution @x752 @x773 $x406) (= ?x435 ?x210)) $x211)))
  2.2395 -(let (($x212 (not $x211)))
  2.2396 -(let ((@x213 (asserted $x212)))
  2.2397 -(unit-resolution @x213 @x528 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.2398 +(let ((@x157 (mp~ (asserted $x34) (nnf-pos (refl (~ $x33 $x33)) (~ $x34 $x34)) $x34)))
  2.2399 +(let ((@x601 (mp @x157 (quant-intro (refl (= $x33 $x33)) (= $x34 $x596)) $x596)))
  2.2400 +(let (($x250 (or (not $x596) $x268)))
  2.2401 +(let ((@x586 ((_ quant-inst 3) $x250)))
  2.2402 +(let ((@x275 (trans (unit-resolution @x586 @x601 $x268) (unit-resolution @x585 @x625 $x592) (= ?x123 ?x588))))
  2.2403 +(let ((@x280 (trans (trans @x275 (unit-resolution @x232 @x669 $x584) (= ?x123 ?x246)) (symm @x287 (= ?x246 ?x233)) (= ?x123 ?x233))))
  2.2404 +(let ((@x558 (trans @x280 (symm (unit-resolution @x213 @x662 $x570) (= ?x233 ?x227)) (= ?x123 ?x227))))
  2.2405 +(let ((@x560 (trans @x558 (symm (unit-resolution @x572 @x617 $x569) (= ?x227 ?x270)) (= ?x123 ?x270))))
  2.2406 +(let ((@x546 (trans @x560 (symm (unit-resolution @x255 @x609 $x587) (= ?x270 ?x125)) $x126)))
  2.2407 +(let (($x127 (not $x126)))
  2.2408 +(let ((@x128 (asserted $x127)))
  2.2409 +(unit-resolution @x128 @x546 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  2.2410  
     3.1 --- a/src/HOL/SMT_Examples/SMT_Examples.thy	Sun Jul 27 15:44:08 2014 +0200
     3.2 +++ b/src/HOL/SMT_Examples/SMT_Examples.thy	Sun Jul 27 21:11:35 2014 +0200
     3.3 @@ -393,27 +393,6 @@
     3.4    by smt (* smt2 FIXME: "th-lemma" tactic fails *)
     3.5  
     3.6  
     3.7 -subsection {* Linear arithmetic for natural numbers *}
     3.8 -
     3.9 -lemma "2 * (x::nat) ~= 1" by smt2
    3.10 -
    3.11 -lemma "a < 3 \<Longrightarrow> (7::nat) > 2 * a" by smt2
    3.12 -
    3.13 -lemma "let x = (1::nat) + y in x - y > 0 * x" by smt2
    3.14 -
    3.15 -lemma
    3.16 -  "let x = (1::nat) + y in
    3.17 -   let P = (if x > 0 then True else False) in
    3.18 -   False \<or> P = (x - 1 = y) \<or> (\<not>P \<longrightarrow> False)"
    3.19 -  by smt2
    3.20 -
    3.21 -lemma "int (nat \<bar>x::int\<bar>) = \<bar>x\<bar>" by smt2
    3.22 -
    3.23 -definition prime_nat :: "nat \<Rightarrow> bool" where
    3.24 -  "prime_nat p = (1 < p \<and> (\<forall>m. m dvd p --> m = 1 \<or> m = p))"
    3.25 -lemma "prime_nat (4*m + 1) \<Longrightarrow> m \<ge> (1::nat)" by (smt2 prime_nat_def)
    3.26 -
    3.27 -
    3.28  section {* Pairs *}
    3.29  
    3.30  lemma "fst (x, y) = a \<Longrightarrow> x = a"
    3.31 @@ -444,30 +423,28 @@
    3.32  
    3.33  lemma True using let_rsp by smt2
    3.34  lemma "le = op \<le> \<Longrightarrow> le (3::int) 42" by smt2
    3.35 -lemma "map (\<lambda>i::nat. i + 1) [0, 1] = [1, 2]" by (smt2 list.map)
    3.36 +lemma "map (\<lambda>i::int. i + 1) [0, 1] = [1, 2]" by (smt2 list.map)
    3.37  lemma "(ALL x. P x) \<or> ~ All P" by smt2
    3.38  
    3.39 -fun dec_10 :: "nat \<Rightarrow> nat" where
    3.40 +fun dec_10 :: "int \<Rightarrow> int" where
    3.41    "dec_10 n = (if n < 10 then n else dec_10 (n - 10))"
    3.42  
    3.43  lemma "dec_10 (4 * dec_10 4) = 6" by (smt2 dec_10.simps)
    3.44  
    3.45  axiomatization
    3.46 -  eval_dioph :: "int list \<Rightarrow> nat list \<Rightarrow> int"
    3.47 +  eval_dioph :: "int list \<Rightarrow> int list \<Rightarrow> int"
    3.48  where
    3.49 -  eval_dioph_mod:
    3.50 -  "eval_dioph ks xs mod int n = eval_dioph ks (map (\<lambda>x. x mod n) xs) mod int n"
    3.51 +  eval_dioph_mod: "eval_dioph ks xs mod n = eval_dioph ks (map (\<lambda>x. x mod n) xs) mod n"
    3.52  and
    3.53    eval_dioph_div_mult:
    3.54 -  "eval_dioph ks (map (\<lambda>x. x div n) xs) * int n +
    3.55 +  "eval_dioph ks (map (\<lambda>x. x div n) xs) * n +
    3.56     eval_dioph ks (map (\<lambda>x. x mod n) xs) = eval_dioph ks xs"
    3.57  
    3.58  lemma
    3.59    "(eval_dioph ks xs = l) =
    3.60     (eval_dioph ks (map (\<lambda>x. x mod 2) xs) mod 2 = l mod 2 \<and>
    3.61 -    eval_dioph ks (map (\<lambda>x. x div 2) xs) =
    3.62 -      (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)"
    3.63 -  using [[smt2_oracle=true]] (*FIXME*)
    3.64 +    eval_dioph ks (map (\<lambda>x. x div 2) xs) = (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)"
    3.65 +  using [[smt2_oracle = true]] (*FIXME*)
    3.66    using [[z3_new_extensions]]
    3.67    by (smt2 eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2])
    3.68  
     4.1 --- a/src/HOL/SMT_Examples/SMT_Tests.thy	Sun Jul 27 15:44:08 2014 +0200
     4.2 +++ b/src/HOL/SMT_Examples/SMT_Tests.thy	Sun Jul 27 21:11:35 2014 +0200
     4.3 @@ -223,119 +223,6 @@
     4.4    by smt2+
     4.5  
     4.6  
     4.7 -section {* Natural numbers *}
     4.8 -
     4.9 -lemma
    4.10 -  "(0::nat) = 0"
    4.11 -  "(1::nat) = 1"
    4.12 -  "(0::nat) < 1"
    4.13 -  "(0::nat) \<le> 1"
    4.14 -  "(123456789::nat) < 2345678901"
    4.15 -  by smt2+
    4.16 -
    4.17 -lemma
    4.18 -  "Suc 0 = 1"
    4.19 -  "Suc x = x + 1"
    4.20 -  "x < Suc x"
    4.21 -  "(Suc x = Suc y) = (x = y)"
    4.22 -  "Suc (x + y) < Suc x + Suc y"
    4.23 -  by smt2+
    4.24 -
    4.25 -lemma
    4.26 -  "(x::nat) + 0 = x"
    4.27 -  "0 + x = x"
    4.28 -  "x + y = y + x"
    4.29 -  "x + (y + z) = (x + y) + z"
    4.30 -  "(x + y = 0) = (x = 0 \<and> y = 0)"
    4.31 -  by smt2+
    4.32 -
    4.33 -lemma
    4.34 -  "(x::nat) - 0 = x"
    4.35 -  "x < y \<longrightarrow> x - y = 0"
    4.36 -  "x - y = 0 \<or> y - x = 0"
    4.37 -  "(x - y) + y = (if x < y then y else x)"
    4.38 -  "x - y - z = x - (y + z)"
    4.39 -  by smt2+
    4.40 -
    4.41 -lemma
    4.42 -  "(x::nat) * 0 = 0"
    4.43 -  "0 * x = 0"
    4.44 -  "x * 1 = x"
    4.45 -  "1 * x = x"
    4.46 -  "3 * x = x * 3"
    4.47 -  by smt2+
    4.48 -
    4.49 -lemma
    4.50 -  "(0::nat) div 0 = 0"
    4.51 -  "(x::nat) div 0 = 0"
    4.52 -  "(0::nat) div 1 = 0"
    4.53 -  "(1::nat) div 1 = 1"
    4.54 -  "(3::nat) div 1 = 3"
    4.55 -  "(x::nat) div 1 = x"
    4.56 -  "(0::nat) div 3 = 0"
    4.57 -  "(1::nat) div 3 = 0"
    4.58 -  "(3::nat) div 3 = 1"
    4.59 -  "(x::nat) div 3 \<le> x"
    4.60 -  "(x div 3 = x) = (x = 0)"
    4.61 -  using [[z3_new_extensions]]
    4.62 -  by smt2+
    4.63 -
    4.64 -lemma
    4.65 -  "(0::nat) mod 0 = 0"
    4.66 -  "(x::nat) mod 0 = x"
    4.67 -  "(0::nat) mod 1 = 0"
    4.68 -  "(1::nat) mod 1 = 0"
    4.69 -  "(3::nat) mod 1 = 0"
    4.70 -  "(x::nat) mod 1 = 0"
    4.71 -  "(0::nat) mod 3 = 0"
    4.72 -  "(1::nat) mod 3 = 1"
    4.73 -  "(3::nat) mod 3 = 0"
    4.74 -  "x mod 3 < 3"
    4.75 -  "(x mod 3 = x) = (x < 3)"
    4.76 -  using [[z3_new_extensions]]
    4.77 -  by smt2+
    4.78 -
    4.79 -lemma
    4.80 -  "(x::nat) = x div 1 * 1 + x mod 1"
    4.81 -  "x = x div 3 * 3 + x mod 3"
    4.82 -  using [[z3_new_extensions]]
    4.83 -  by smt2+
    4.84 -
    4.85 -lemma
    4.86 -  "min (x::nat) y \<le> x"
    4.87 -  "min x y \<le> y"
    4.88 -  "min x y \<le> x + y"
    4.89 -  "z < x \<and> z < y \<longrightarrow> z < min x y"
    4.90 -  "min x y = min y x"
    4.91 -  "min x 0 = 0"
    4.92 -  by smt2+
    4.93 -
    4.94 -lemma
    4.95 -  "max (x::nat) y \<ge> x"
    4.96 -  "max x y \<ge> y"
    4.97 -  "max x y \<ge> (x - y) + (y - x)"
    4.98 -  "z > x \<and> z > y \<longrightarrow> z > max x y"
    4.99 -  "max x y = max y x"
   4.100 -  "max x 0 = x"
   4.101 -  by smt2+
   4.102 -
   4.103 -lemma
   4.104 -  "0 \<le> (x::nat)"
   4.105 -  "0 < x \<and> x \<le> 1 \<longrightarrow> x = 1"
   4.106 -  "x \<le> x"
   4.107 -  "x \<le> y \<longrightarrow> 3 * x \<le> 3 * y"
   4.108 -  "x < y \<longrightarrow> 3 * x < 3 * y"
   4.109 -  "x < y \<longrightarrow> x \<le> y"
   4.110 -  "(x < y) = (x + 1 \<le> y)"
   4.111 -  "\<not> (x < x)"
   4.112 -  "x \<le> y \<longrightarrow> y \<le> z \<longrightarrow> x \<le> z"
   4.113 -  "x < y \<longrightarrow> y \<le> z \<longrightarrow> x \<le> z"
   4.114 -  "x \<le> y \<longrightarrow> y < z \<longrightarrow> x \<le> z"
   4.115 -  "x < y \<longrightarrow> y < z \<longrightarrow> x < z"
   4.116 -  "x < y \<and> y < z \<longrightarrow> \<not> (z < x)"
   4.117 -  by smt2+
   4.118 -
   4.119 -
   4.120  section {* Integers *}
   4.121  
   4.122  lemma
     5.1 --- a/src/HOL/SMT_Examples/SMT_Word_Examples.certs2	Sun Jul 27 15:44:08 2014 +0200
     5.2 +++ b/src/HOL/SMT_Examples/SMT_Word_Examples.certs2	Sun Jul 27 21:11:35 2014 +0200
     5.3 @@ -43,6 +43,14 @@
     5.4  (let ((@x49 (trans @x45 (rewrite (= (not true) false)) (= (not (= (bvmul (_ bv7 8) (_ bv3 8)) (_ bv21 8))) false))))
     5.5  (mp (asserted (not (= (bvmul (_ bv7 8) (_ bv3 8)) (_ bv21 8)))) @x49 false)))))))
     5.6  
     5.7 +6dd848d7b26e0521039e21a5e2bafebc1fee8c9b 7 0
     5.8 +unsat
     5.9 +((set-logic <null>)
    5.10 +(proof
    5.11 +(let ((@x35 (monotonicity (rewrite (= (= (_ bv11 5) (_ bv11 5)) true)) (= (not (= (_ bv11 5) (_ bv11 5))) (not true)))))
    5.12 +(let ((@x39 (trans @x35 (rewrite (= (not true) false)) (= (not (= (_ bv11 5) (_ bv11 5))) false))))
    5.13 +(mp (asserted (not (= (_ bv11 5) (_ bv11 5)))) @x39 false)))))
    5.14 +
    5.15  45bf9e0a746f7dde46f8242e5851928c2671c7f2 9 0
    5.16  unsat
    5.17  ((set-logic <null>)
    5.18 @@ -53,14 +61,6 @@
    5.19  (let ((@x54 (trans @x50 (rewrite (= (not true) false)) (= (not (= (bvsub (_ bv11 8) (_ bv27 8)) (bvneg (_ bv16 8)))) false))))
    5.20  (mp (asserted (not (= (bvsub (_ bv11 8) (_ bv27 8)) (bvneg (_ bv16 8))))) @x54 false)))))))
    5.21  
    5.22 -6dd848d7b26e0521039e21a5e2bafebc1fee8c9b 7 0
    5.23 -unsat
    5.24 -((set-logic <null>)
    5.25 -(proof
    5.26 -(let ((@x35 (monotonicity (rewrite (= (= (_ bv11 5) (_ bv11 5)) true)) (= (not (= (_ bv11 5) (_ bv11 5))) (not true)))))
    5.27 -(let ((@x39 (trans @x35 (rewrite (= (not true) false)) (= (not (= (_ bv11 5) (_ bv11 5))) false))))
    5.28 -(mp (asserted (not (= (_ bv11 5) (_ bv11 5)))) @x39 false)))))
    5.29 -
    5.30  00a7ff287d9c23d984163ea8e0cac8ac61008afd 11 0
    5.31  unsat
    5.32  ((set-logic <null>)
    5.33 @@ -142,15 +142,6 @@
    5.34  (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvxor (_ bv240 8) (_ bv255 8)) (_ bv15 8))) false))))
    5.35  (mp (asserted (not (= (bvxor (_ bv240 8) (_ bv255 8)) (_ bv15 8)))) @x48 false)))))))
    5.36  
    5.37 -3838eb33edcd292c3a0ecbf1662b54af3940189f 8 0
    5.38 -unsat
    5.39 -((set-logic <null>)
    5.40 -(proof
    5.41 -(let ((@x36 (monotonicity (rewrite (= (bvnot (_ bv240 16)) (_ bv65295 16))) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) (= (_ bv65295 16) (_ bv65295 16))))))
    5.42 -(let ((@x40 (trans @x36 (rewrite (= (= (_ bv65295 16) (_ bv65295 16)) true)) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) true))))
    5.43 -(let ((@x47 (trans (monotonicity @x40 (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) (not true))) (rewrite (= (not true) false)) (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) false))))
    5.44 -(mp (asserted (not (= (bvnot (_ bv240 16)) (_ bv65295 16)))) @x47 false))))))
    5.45 -
    5.46  14431ccb33137348161eb6ca6cfb2e57942c3f9d 9 0
    5.47  unsat
    5.48  ((set-logic <null>)
    5.49 @@ -161,6 +152,24 @@
    5.50  (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (concat (_ bv11 4) (_ bv27 8)) (_ bv2843 12))) false))))
    5.51  (mp (asserted (not (= (concat (_ bv11 4) (_ bv27 8)) (_ bv2843 12)))) @x48 false)))))))
    5.52  
    5.53 +3838eb33edcd292c3a0ecbf1662b54af3940189f 8 0
    5.54 +unsat
    5.55 +((set-logic <null>)
    5.56 +(proof
    5.57 +(let ((@x36 (monotonicity (rewrite (= (bvnot (_ bv240 16)) (_ bv65295 16))) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) (= (_ bv65295 16) (_ bv65295 16))))))
    5.58 +(let ((@x40 (trans @x36 (rewrite (= (= (_ bv65295 16) (_ bv65295 16)) true)) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) true))))
    5.59 +(let ((@x47 (trans (monotonicity @x40 (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) (not true))) (rewrite (= (not true) false)) (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) false))))
    5.60 +(mp (asserted (not (= (bvnot (_ bv240 16)) (_ bv65295 16)))) @x47 false))))))
    5.61 +
    5.62 +8d29c9b5ef712a3d9d2db87383c9c25c0b553e01 8 0
    5.63 +unsat
    5.64 +((set-logic <null>)
    5.65 +(proof
    5.66 +(let ((@x36 (monotonicity (rewrite (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) (= (_ bv3 2) (_ bv3 2))))))
    5.67 +(let ((@x40 (trans @x36 (rewrite (= (= (_ bv3 2) (_ bv3 2)) true)) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) true))))
    5.68 +(let ((@x47 (trans (monotonicity @x40 (= (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) (not true))) (rewrite (= (not true) false)) (= (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) false))))
    5.69 +(mp (asserted (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)))) @x47 false))))))
    5.70 +
    5.71  880bee16a8f6469b14122277b92e87533ef6a071 9 0
    5.72  unsat
    5.73  ((set-logic <null>)
    5.74 @@ -171,15 +180,6 @@
    5.75  (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (concat (_ bv3 4) (_ bv15 6)) (_ bv207 10))) false))))
    5.76  (mp (asserted (not (= (concat (_ bv3 4) (_ bv15 6)) (_ bv207 10)))) @x48 false)))))))
    5.77  
    5.78 -6b4cf44be412b1ba63dbf9b301260e877097b1be 8 0
    5.79 -unsat
    5.80 -((set-logic <null>)
    5.81 -(proof
    5.82 -(let ((@x36 (monotonicity (rewrite (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) (= (_ bv3 2) (_ bv3 2))))))
    5.83 -(let ((@x40 (trans @x36 (rewrite (= (= (_ bv3 2) (_ bv3 2)) true)) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) true))))
    5.84 -(let ((@x47 (trans (monotonicity @x40 (= (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) (not true))) (rewrite (= (not true) false)) (= (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) false))))
    5.85 -(mp (asserted (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)))) @x47 false))))))
    5.86 -
    5.87  446b3cb9d63aa1f488dc092ed3fb111d2ad50b4e 9 0
    5.88  unsat
    5.89  ((set-logic <null>)
    5.90 @@ -200,7 +200,7 @@
    5.91  (let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ sign_extend 2) (_ bv10 4)) (_ bv58 6))) false))))
    5.92  (mp (asserted (not (= ((_ sign_extend 2) (_ bv10 4)) (_ bv58 6)))) @x47 false)))))))
    5.93  
    5.94 -7a821bfbd2032abe40931e46e7875c58d78cac74 9 0
    5.95 +8e075e24ee51b2c8d282203ef406cf993a4d32e8 9 0
    5.96  unsat
    5.97  ((set-logic <null>)
    5.98  (proof
    5.99 @@ -210,7 +210,7 @@
   5.100  (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvshl (_ bv19 8) (_ bv2 8)) (_ bv76 8))) false))))
   5.101  (mp (asserted (not (= (bvshl (_ bv19 8) (_ bv2 8)) (_ bv76 8)))) @x48 false)))))))
   5.102  
   5.103 -3a90f9cf3517f16b198f07da78a10c267f6ca981 9 0
   5.104 +e11f6641dec327aa96166093ca6eb62aa10965c0 9 0
   5.105  unsat
   5.106  ((set-logic <null>)
   5.107  (proof
   5.108 @@ -220,7 +220,7 @@
   5.109  (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvlshr (_ bv25 8) (_ bv2 8)) (_ bv6 8))) false))))
   5.110  (mp (asserted (not (= (bvlshr (_ bv25 8) (_ bv2 8)) (_ bv6 8)))) @x48 false)))))))
   5.111  
   5.112 -512889429971c22172b835746742cd1214354685 9 0
   5.113 +f1f29c69ebfcb6af36e96ba5a738d9b0d7b31835 9 0
   5.114  unsat
   5.115  ((set-logic <null>)
   5.116  (proof
   5.117 @@ -230,7 +230,7 @@
   5.118  (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvashr (_ bv19 8) (_ bv2 8)) (_ bv4 8))) false))))
   5.119  (mp (asserted (not (= (bvashr (_ bv19 8) (_ bv2 8)) (_ bv4 8)))) @x48 false)))))))
   5.120  
   5.121 -85eb639dc934d6e3f29fcc025e09dac5e8ec35be 9 0
   5.122 +d5599ccc28266367053026b485d411472eb0665c 9 0
   5.123  unsat
   5.124  ((set-logic <null>)
   5.125  (proof
   5.126 @@ -240,16 +240,6 @@
   5.127  (let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ rotate_right 2) (_ bv6 4)) (_ bv9 4))) false))))
   5.128  (mp (asserted (not (= ((_ rotate_right 2) (_ bv6 4)) (_ bv9 4)))) @x47 false)))))))
   5.129  
   5.130 -072b118d30c575706ced09a142498447b46fa41f 9 0
   5.131 -unsat
   5.132 -((set-logic <null>)
   5.133 -(proof
   5.134 -(let ((@x36 (monotonicity (rewrite (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) (= (_ bv13 4) (_ bv13 4))))))
   5.135 -(let ((@x40 (trans @x36 (rewrite (= (= (_ bv13 4) (_ bv13 4)) true)) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) true))))
   5.136 -(let ((@x43 (monotonicity @x40 (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (not true)))))
   5.137 -(let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) false))))
   5.138 -(mp (asserted (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)))) @x47 false)))))))
   5.139 -
   5.140  5c4e275bed2d91897e820ccd6744b0a775a6e26e 17 0
   5.141  unsat
   5.142  ((set-logic <null>)
   5.143 @@ -268,6 +258,46 @@
   5.144  (let ((@x55 (unit-resolution ((_ th-lemma bv) $x53) @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 $x52)))
   5.145  (unit-resolution @x55 @x63 false)))))))))))))))
   5.146  
   5.147 +33a52e620069e1ecebbc00aa6b0099170558c111 9 0
   5.148 +unsat
   5.149 +((set-logic <null>)
   5.150 +(proof
   5.151 +(let ((@x36 (monotonicity (rewrite (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) (= (_ bv13 4) (_ bv13 4))))))
   5.152 +(let ((@x40 (trans @x36 (rewrite (= (= (_ bv13 4) (_ bv13 4)) true)) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) true))))
   5.153 +(let ((@x43 (monotonicity @x40 (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (not true)))))
   5.154 +(let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) false))))
   5.155 +(mp (asserted (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)))) @x47 false)))))))
   5.156 +
   5.157 +115ab22c9945d493b971e69a38d9e608c5b40a71 29 0
   5.158 +unsat
   5.159 +((set-logic <null>)
   5.160 +(proof
   5.161 +(let ((?x28 (bv2int$ (_ bv0 2))))
   5.162 +(let (($x183 (<= ?x28 0)))
   5.163 +(let (($x184 (not $x183)))
   5.164 +(let (($x175 (forall ((?v0 (_ BitVec 2)) )(!(let ((?x47 (bv2int$ ?v0)))
   5.165 +(let (($x53 (<= ?x47 0)))
   5.166 +(not $x53))) :pattern ( (bv2int$ ?v0) )))
   5.167 +))
   5.168 +(let (($x57 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0)))
   5.169 +(let (($x53 (<= ?x47 0)))
   5.170 +(not $x53))))
   5.171 +))
   5.172 +(let ((@x177 (refl (= (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0))))))
   5.173 +(let ((@x112 (refl (~ (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0))))))
   5.174 +(let (($x49 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0)))
   5.175 +(< 0 ?x47)))
   5.176 +))
   5.177 +(let ((@x56 (rewrite (= (< 0 (bv2int$ ?0)) (not (<= (bv2int$ ?0) 0))))))
   5.178 +(let ((@x115 (mp~ (mp (asserted $x49) (quant-intro @x56 (= $x49 $x57)) $x57) (nnf-pos @x112 (~ $x57 $x57)) $x57)))
   5.179 +(let ((@x180 (mp @x115 (quant-intro @x177 (= $x57 $x175)) $x175)))
   5.180 +(let (($x187 (not $x175)))
   5.181 +(let (($x188 (or $x187 $x184)))
   5.182 +(let ((@x189 ((_ quant-inst (_ bv0 2)) $x188)))
   5.183 +(let (($x29 (= ?x28 0)))
   5.184 +(let ((@x30 (asserted $x29)))
   5.185 +(unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x29) $x183)) @x30 (unit-resolution @x189 @x180 $x184) false)))))))))))))))))))
   5.186 +
   5.187  1d4a0e2a4449a8adbcf5a134bf7f2b0ee940d954 51 0
   5.188  unsat
   5.189  ((set-logic <null>)
   5.190 @@ -320,36 +350,6 @@
   5.191  (let ((@x314 (unit-resolution ((_ th-lemma bv) $x312) @x26 @x26 @x26 @x26 @x26 @x26 @x26 @x26 (unit-resolution (def-axiom (or $x95 (not $x74))) @x303 (not $x74)) (unit-resolution (def-axiom (or $x95 (not $x75))) @x303 (not $x75)) (unit-resolution (def-axiom (or $x95 (not $x76))) @x303 (not $x76)) (unit-resolution (def-axiom (or $x95 (not $x77))) @x303 (not $x77)) (unit-resolution (def-axiom (or $x95 (not $x78))) @x303 (not $x78)) (unit-resolution (def-axiom (or $x95 (not $x79))) @x303 (not $x79)) (unit-resolution (def-axiom (or $x95 (not $x80))) @x303 (not $x80)) (unit-resolution (def-axiom (or $x95 $x264)) @x303 $x264) $x300)))
   5.192  (unit-resolution @x314 @x322 false)))))))))))))))))))))))))))))))))))))))))))))))))
   5.193  
   5.194 -115ab22c9945d493b971e69a38d9e608c5b40a71 29 0
   5.195 -unsat
   5.196 -((set-logic <null>)
   5.197 -(proof
   5.198 -(let ((?x28 (bv2int$ (_ bv0 2))))
   5.199 -(let (($x183 (<= ?x28 0)))
   5.200 -(let (($x184 (not $x183)))
   5.201 -(let (($x175 (forall ((?v0 (_ BitVec 2)) )(!(let ((?x47 (bv2int$ ?v0)))
   5.202 -(let (($x53 (<= ?x47 0)))
   5.203 -(not $x53))) :pattern ( (bv2int$ ?v0) )))
   5.204 -))
   5.205 -(let (($x57 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0)))
   5.206 -(let (($x53 (<= ?x47 0)))
   5.207 -(not $x53))))
   5.208 -))
   5.209 -(let ((@x177 (refl (= (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0))))))
   5.210 -(let ((@x112 (refl (~ (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0))))))
   5.211 -(let (($x49 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0)))
   5.212 -(< 0 ?x47)))
   5.213 -))
   5.214 -(let ((@x56 (rewrite (= (< 0 (bv2int$ ?0)) (not (<= (bv2int$ ?0) 0))))))
   5.215 -(let ((@x115 (mp~ (mp (asserted $x49) (quant-intro @x56 (= $x49 $x57)) $x57) (nnf-pos @x112 (~ $x57 $x57)) $x57)))
   5.216 -(let ((@x180 (mp @x115 (quant-intro @x177 (= $x57 $x175)) $x175)))
   5.217 -(let (($x187 (not $x175)))
   5.218 -(let (($x188 (or $x187 $x184)))
   5.219 -(let ((@x189 ((_ quant-inst (_ bv0 2)) $x188)))
   5.220 -(let (($x29 (= ?x28 0)))
   5.221 -(let ((@x30 (asserted $x29)))
   5.222 -(unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x29) $x183)) @x30 (unit-resolution @x189 @x180 $x184) false)))))))))))))))))))
   5.223 -
   5.224  d14e7b8f0d1858316e700b4eb09e7d03e57cf9c3 16 0
   5.225  unsat
   5.226  ((set-logic <null>)
     6.1 --- a/src/HOL/Tools/SMT2/smt2_normalize.ML	Sun Jul 27 15:44:08 2014 +0200
     6.2 +++ b/src/HOL/Tools/SMT2/smt2_normalize.ML	Sun Jul 27 21:11:35 2014 +0200
     6.3 @@ -324,84 +324,6 @@
     6.4  end
     6.5  
     6.6  
     6.7 -(** embedding of standard natural number operations into integer operations **)
     6.8 -
     6.9 -local
    6.10 -  val nat_embedding = @{thms nat_int' int_nat_nneg int_nat_neg}
    6.11 -
    6.12 -  val simple_nat_ops = [
    6.13 -    @{const less (nat)}, @{const less_eq (nat)},
    6.14 -    @{const Suc}, @{const plus (nat)}, @{const minus (nat)}]
    6.15 -
    6.16 -  val mult_nat_ops =
    6.17 -    [@{const times (nat)}, @{const div (nat)}, @{const mod (nat)}]
    6.18 -
    6.19 -  val nat_ops = simple_nat_ops @ mult_nat_ops
    6.20 -
    6.21 -  val nat_consts = nat_ops @ [@{const numeral (nat)},
    6.22 -    @{const zero_class.zero (nat)}, @{const one_class.one (nat)}]
    6.23 -
    6.24 -  val nat_int_coercions = [@{const of_nat (int)}, @{const nat}]
    6.25 -
    6.26 -  val builtin_nat_ops = nat_int_coercions @ simple_nat_ops
    6.27 -
    6.28 -  val is_nat_const = member (op aconv) nat_consts
    6.29 -
    6.30 -  fun is_nat_const' @{const of_nat (int)} = true
    6.31 -    | is_nat_const' t = is_nat_const t
    6.32 -
    6.33 -  val expands = map mk_meta_eq @{thms nat_zero_as_int nat_one_as_int nat_numeral_as_int
    6.34 -    nat_less_as_int nat_leq_as_int Suc_as_int nat_plus_as_int nat_minus_as_int nat_times_as_int
    6.35 -    nat_div_as_int nat_mod_as_int}
    6.36 -
    6.37 -  val ints = map mk_meta_eq @{thms int_0 int_1 int_Suc int_plus int_minus int_mult zdiv_int
    6.38 -    zmod_int}
    6.39 -  val int_if = mk_meta_eq @{lemma "int (if P then n else m) = (if P then int n else int m)" by simp}
    6.40 -
    6.41 -  fun mk_number_eq ctxt i lhs =
    6.42 -    let
    6.43 -      val eq = SMT2_Util.mk_cequals lhs (Numeral.mk_cnumber @{ctyp int} i)
    6.44 -      val ctxt' = put_simpset HOL_ss ctxt addsimps @{thms Int.int_numeral}
    6.45 -      val tac = HEADGOAL (Simplifier.simp_tac ctxt')
    6.46 -    in Goal.norm_result ctxt (Goal.prove_internal ctxt [] eq (K tac)) end
    6.47 -
    6.48 -  fun ite_conv cv1 cv2 =
    6.49 -    Conv.combination_conv (Conv.combination_conv (Conv.arg_conv cv1) cv2) cv2
    6.50 -
    6.51 -  fun int_conv ctxt ct =
    6.52 -    (case Thm.term_of ct of
    6.53 -      @{const of_nat (int)} $ (n as (@{const numeral (nat)} $ _)) =>
    6.54 -        Conv.rewr_conv (mk_number_eq ctxt (snd (HOLogic.dest_number n)) ct)
    6.55 -    | @{const of_nat (int)} $ _ =>
    6.56 -        (Conv.rewrs_conv ints then_conv Conv.sub_conv ints_conv ctxt) else_conv
    6.57 -        (Conv.rewr_conv int_if then_conv
    6.58 -          ite_conv (nat_conv ctxt) (int_conv ctxt)) else_conv
    6.59 -        Conv.sub_conv (Conv.top_sweep_conv nat_conv) ctxt
    6.60 -    | _ => Conv.no_conv) ct
    6.61 -
    6.62 -  and ints_conv ctxt = Conv.top_sweep_conv int_conv ctxt
    6.63 -
    6.64 -  and expand_conv ctxt =
    6.65 -    SMT2_Util.if_conv (is_nat_const o Term.head_of)
    6.66 -      (expand_head_conv (Conv.rewrs_conv expands) then_conv ints_conv ctxt) (int_conv ctxt)
    6.67 -
    6.68 -  and nat_conv ctxt = SMT2_Util.if_exists_conv is_nat_const' (Conv.top_sweep_conv expand_conv ctxt)
    6.69 -
    6.70 -  val uses_nat_int = Term.exists_subterm (member (op aconv) nat_int_coercions)
    6.71 -in
    6.72 -
    6.73 -val nat_as_int_conv = nat_conv
    6.74 -
    6.75 -fun add_nat_embedding thms =
    6.76 -  if exists (uses_nat_int o Thm.prop_of) thms then (thms, nat_embedding) else (thms, [])
    6.77 -
    6.78 -val setup_nat_as_int =
    6.79 -  SMT2_Builtin.add_builtin_typ_ext (@{typ nat}, K true) #>
    6.80 -  fold (SMT2_Builtin.add_builtin_fun_ext' o Term.dest_Const) builtin_nat_ops
    6.81 -
    6.82 -end
    6.83 -
    6.84 -
    6.85  (** normalize numerals **)
    6.86  
    6.87  local
    6.88 @@ -414,14 +336,12 @@
    6.89          true
    6.90      | is_irregular_number (Const (@{const_name uminus}, _) $ Const (@{const_name Groups.zero}, _)) =
    6.91          true
    6.92 -    | is_irregular_number _ =
    6.93 -        false;
    6.94 +    | is_irregular_number _ = false
    6.95  
    6.96 -  fun is_strange_number ctxt t = is_irregular_number t andalso SMT2_Builtin.is_builtin_num ctxt t;
    6.97 +  fun is_strange_number ctxt t = is_irregular_number t andalso SMT2_Builtin.is_builtin_num ctxt t
    6.98  
    6.99    val proper_num_ss =
   6.100 -    simpset_of (put_simpset HOL_ss @{context}
   6.101 -      addsimps @{thms Num.numeral_One minus_zero})
   6.102 +    simpset_of (put_simpset HOL_ss @{context} addsimps @{thms Num.numeral_One minus_zero})
   6.103  
   6.104    fun norm_num_conv ctxt =
   6.105      SMT2_Util.if_conv (is_strange_number ctxt) (Simplifier.rewrite (put_simpset proper_num_ss ctxt))
   6.106 @@ -439,10 +359,13 @@
   6.107  fun unfold_conv ctxt =
   6.108    rewrite_case_bool_conv ctxt then_conv
   6.109    unfold_abs_min_max_conv ctxt then_conv
   6.110 -  nat_as_int_conv ctxt then_conv
   6.111    Thm.beta_conversion true
   6.112  
   6.113 -fun unfold1 ctxt = map (apsnd (Conv.fconv_rule (unfold_conv ctxt)))
   6.114 +fun unfold_polymorph ctxt = map (apsnd (Conv.fconv_rule (unfold_conv ctxt)))
   6.115 +fun unfold_monomorph ctxt = map (apsnd (Conv.fconv_rule (normalize_numerals_conv ctxt)))
   6.116 +
   6.117 +
   6.118 +(* overall normalization *)
   6.119  
   6.120  fun burrow_ids f ithms =
   6.121    let
   6.122 @@ -450,14 +373,6 @@
   6.123      val (thms', extra_thms) = f thms
   6.124    in (is ~~ thms') @ map (pair ~1) extra_thms end
   6.125  
   6.126 -fun unfold2 ctxt ithms =
   6.127 -  ithms
   6.128 -  |> map (apsnd (Conv.fconv_rule (normalize_numerals_conv ctxt)))
   6.129 -  |> burrow_ids add_nat_embedding
   6.130 -
   6.131 -
   6.132 -(* overall normalization *)
   6.133 -
   6.134  type extra_norm = Proof.context -> thm list * thm list -> thm list * thm list
   6.135  
   6.136  structure Extra_Norms = Generic_Data
   6.137 @@ -511,9 +426,9 @@
   6.138    wthms
   6.139    |> map_index I
   6.140    |> gen_normalize ctxt
   6.141 -  |> unfold1 ctxt
   6.142 +  |> unfold_polymorph ctxt
   6.143    |> monomorph ctxt
   6.144 -  |> unfold2 ctxt
   6.145 +  |> unfold_monomorph ctxt
   6.146    |> apply_extra_norms ctxt
   6.147  
   6.148  val _ = Theory.setup (Context.theory_map (
   6.149 @@ -521,7 +436,6 @@
   6.150    setup_unfolded_quants #>
   6.151    setup_trigger #>
   6.152    setup_case_bool #>
   6.153 -  setup_abs_min_max #>
   6.154 -  setup_nat_as_int))
   6.155 +  setup_abs_min_max))
   6.156  
   6.157  end;
     7.1 --- a/src/HOL/Word/Tools/smt2_word.ML	Sun Jul 27 15:44:08 2014 +0200
     7.2 +++ b/src/HOL/Word/Tools/smt2_word.ML	Sun Jul 27 21:11:35 2014 +0200
     7.3 @@ -12,7 +12,7 @@
     7.4  
     7.5  (* SMT-LIB logic *)
     7.6  
     7.7 -(* "QF_AUFBV" is too restricted for Isabelle's problems, which contain aritmetic and quantifiers.
     7.8 +(* "QF_AUFBV" is too restrictive for Isabelle's problems, which contain aritmetic and quantifiers.
     7.9     Better set the logic to "" and make at least Z3 happy. *)
    7.10  fun smtlib_logic ts =
    7.11    if exists (Term.exists_type (Term.exists_subtype is_wordT)) ts then SOME "" else NONE
    7.12 @@ -38,9 +38,7 @@
    7.13    fun if_fixed pred m n T ts =
    7.14      let val (Us, U) = Term.strip_type T
    7.15      in
    7.16 -      if pred (U, Us) then
    7.17 -        SOME (n, length Us, ts, Term.list_comb o pair (Const (m, T)))
    7.18 -      else NONE
    7.19 +      if pred (U, Us) then SOME (n, length Us, ts, Term.list_comb o pair (Const (m, T))) else NONE
    7.20      end
    7.21  
    7.22    fun if_fixed_all m = if_fixed (forall (can dest_wordT) o (op ::)) m
    7.23 @@ -50,12 +48,7 @@
    7.24      let val (m, _) = Term.dest_Const t
    7.25      in SMT2_Builtin.add_builtin_fun smtlib2C (Term.dest_Const t, K (f m n)) end
    7.26  
    7.27 -  fun hd2 xs = hd (tl xs)
    7.28 -
    7.29 -  fun mk_nat i = @{const nat} $ HOLogic.mk_number @{typ nat} i
    7.30 -
    7.31 -  fun dest_nat (@{const nat} $ n) = snd (HOLogic.dest_number n)
    7.32 -    | dest_nat t = raise TERM ("not a natural number", [t])
    7.33 +  val mk_nat = HOLogic.mk_number @{typ nat}
    7.34  
    7.35    fun mk_shift c [t, u] = Const c $ t $ mk_nat (snd (HOLogic.dest_number u))
    7.36      | mk_shift c ts = raise TERM ("bad arguments", Const c :: ts)
    7.37 @@ -63,7 +56,7 @@
    7.38    fun shift m n T ts =
    7.39      let val U = Term.domain_type T
    7.40      in
    7.41 -      (case (can dest_wordT U, try (dest_nat o hd2) ts) of
    7.42 +      (case (can dest_wordT U, try (snd o HOLogic.dest_number o hd o tl) ts) of
    7.43          (true, SOME i) =>
    7.44            SOME (n, 2, [hd ts, HOLogic.mk_number U i], mk_shift (m, T))
    7.45        | _ => NONE)   (* FIXME: also support non-numerical shifts *)
    7.46 @@ -74,7 +67,7 @@
    7.47    fun extract m n T ts =
    7.48      let val U = Term.range_type (Term.range_type T)
    7.49      in
    7.50 -      (case (try (dest_nat o hd) ts, try dest_wordT U) of
    7.51 +      (case (try (snd o HOLogic.dest_number o hd) ts, try dest_wordT U) of
    7.52          (SOME lb, SOME i) =>
    7.53            SOME (index2 n (i + lb - 1) lb, 1, tl ts, mk_extract (m, T) lb)
    7.54        | _ => NONE)
    7.55 @@ -97,7 +90,7 @@
    7.56    fun rotate m n T ts =
    7.57      let val U = Term.domain_type (Term.range_type T)
    7.58      in
    7.59 -      (case (can dest_wordT U, try (dest_nat o hd) ts) of
    7.60 +      (case (can dest_wordT U, try (snd o HOLogic.dest_number o hd) ts) of
    7.61          (true, SOME i) => SOME (index1 n i, 1, tl ts, mk_rotate (m, T) i)
    7.62        | _ => NONE)
    7.63      end
     8.1 --- a/src/HOL/Word/Word.thy	Sun Jul 27 15:44:08 2014 +0200
     8.2 +++ b/src/HOL/Word/Word.thy	Sun Jul 27 21:11:35 2014 +0200
     8.3 @@ -4760,4 +4760,3 @@
     8.4  hide_const (open) Word
     8.5  
     8.6  end
     8.7 -