# HG changeset patch # User blanchet # Date 1406488295 -7200 # Node ID fb71c6f100f814d82a840a12d4480164b8448139 # Parent 987c9ceeaafd40ff14a3215ef53d223fbaacd4a8 do not embed 'nat' into 'int's in 'smt2' method -- this is highly inefficient and decreases the Sledgehammer success rate significantly diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/SMT2.thy --- a/src/HOL/SMT2.thy Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/SMT2.thy Sun Jul 27 21:11:35 2014 +0200 @@ -13,15 +13,15 @@ text {* Some SMT solvers support patterns as a quantifier instantiation -heuristics. Patterns may either be positive terms (tagged by "pat") +heuristics. Patterns may either be positive terms (tagged by "pat") triggering quantifier instantiations -- when the solver finds a term matching a positive pattern, it instantiates the corresponding quantifier accordingly -- or negative terms (tagged by "nopat") -inhibiting quantifier instantiations. A list of patterns +inhibiting quantifier instantiations. A list of patterns of the same kind is called a multipattern, and all patterns in a multipattern are considered conjunctively for quantifier instantiation. A list of multipatterns is called a trigger, and their multipatterns -act disjunctively during quantifier instantiation. Each multipattern +act disjunctively during quantifier instantiation. Each multipattern should mention at least all quantified variables of the preceding quantifier block. *} @@ -46,7 +46,7 @@ text {* Application is made explicit for constants occurring with varying -numbers of arguments. This is achieved by the introduction of the +numbers of arguments. This is achieved by the introduction of the following constant. *} @@ -54,7 +54,7 @@ text {* Some solvers support a theory of arrays which can be used to encode -higher-order functions. The following set of lemmas specifies the +higher-order functions. The following set of lemmas specifies the properties of such (extensional) arrays. *} @@ -66,26 +66,6 @@ lemma case_bool_if[abs_def]: "case_bool x y P = (if P then x else y)" by simp -lemma nat_int': "\n. nat (int n) = n" by simp -lemma int_nat_nneg: "\i. i \ 0 \ int (nat i) = i" by simp -lemma int_nat_neg: "\i. i < 0 \ int (nat i) = 0" by simp - -lemma nat_zero_as_int: "0 = nat 0" by simp -lemma nat_one_as_int: "1 = nat 1" by simp -lemma nat_numeral_as_int: "numeral = (\i. nat (numeral i))" by simp -lemma nat_less_as_int: "op < = (\a b. int a < int b)" by simp -lemma nat_leq_as_int: "op \ = (\a b. int a <= int b)" by simp -lemma Suc_as_int: "Suc = (\a. nat (int a + 1))" by (rule ext) simp -lemma nat_plus_as_int: "op + = (\a b. nat (int a + int b))" by (rule ext)+ simp -lemma nat_minus_as_int: "op - = (\a b. nat (int a - int b))" by (rule ext)+ simp -lemma nat_times_as_int: "op * = (\a b. nat (int a * int b))" by (simp add: nat_mult_distrib) -lemma nat_div_as_int: "op div = (\a b. nat (int a div int b))" by (simp add: nat_div_distrib) -lemma nat_mod_as_int: "op mod = (\a b. nat (int a mod int b))" by (simp add: nat_mod_distrib) - -lemma int_Suc: "int (Suc n) = int n + 1" by simp -lemma int_plus: "int (n + m) = int n + int m" by (rule of_nat_add) -lemma int_minus: "int (n - m) = int (nat (int n - int m))" by auto - lemmas Ex1_def_raw = Ex1_def[abs_def] lemmas Ball_def_raw = Ball_def[abs_def] lemmas Bex_def_raw = Bex_def[abs_def] @@ -154,15 +134,14 @@ *} - subsection {* General configuration options *} text {* The option @{text smt2_solver} can be used to change the target SMT -solver. The possible values can be obtained from the @{text smt2_status} +solver. The possible values can be obtained from the @{text smt2_status} command. -Due to licensing restrictions, Z3 is not enabled by default. Z3 is free +Due to licensing restrictions, Z3 is not enabled by default. Z3 is free for non-commercial applications and can be enabled by setting Isabelle system option @{text z3_non_commercial} to @{text yes}. *} @@ -170,15 +149,14 @@ declare [[smt2_solver = z3]] text {* -Since SMT solvers are potentially non-terminating, there is a timeout -(given in seconds) to restrict their runtime. A value greater than -120 (seconds) is in most cases not advisable. +Since SMT solvers are potentially nonterminating, there is a timeout +(given in seconds) to restrict their runtime. *} declare [[smt2_timeout = 20]] text {* -SMT solvers apply randomized heuristics. In case a problem is not +SMT solvers apply randomized heuristics. In case a problem is not solvable by an SMT solver, changing the following option might help. *} @@ -186,16 +164,16 @@ text {* In general, the binding to SMT solvers runs as an oracle, i.e, the SMT -solvers are fully trusted without additional checks. The following +solvers are fully trusted without additional checks. The following option can cause the SMT solver to run in proof-producing mode, giving -a checkable certificate. This is currently only implemented for Z3. +a checkable certificate. This is currently only implemented for Z3. *} declare [[smt2_oracle = false]] text {* Each SMT solver provides several commandline options to tweak its -behaviour. They can be passed to the solver by setting the following +behaviour. They can be passed to the solver by setting the following options. *} @@ -207,14 +185,14 @@ The SMT method provides an inference mechanism to detect simple triggers in quantified formulas, which might increase the number of problems solvable by SMT solvers (note: triggers guide quantifier instantiations -in the SMT solver). To turn it on, set the following option. +in the SMT solver). To turn it on, set the following option. *} declare [[smt2_infer_triggers = false]] text {* Enable the following option to use built-in support for div/mod, datatypes, -and records in Z3. Currently, this is implemented only in oracle mode. +and records in Z3. Currently, this is implemented only in oracle mode. *} declare [[z3_new_extensions = false]] @@ -227,9 +205,9 @@ all following applications of an SMT solver a cached in that file. Any further application of the same SMT solver (using the very same configuration) re-uses the cached certificate instead of invoking the -solver. An empty string disables caching certificates. +solver. An empty string disables caching certificates. -The filename should be given as an explicit path. It is good +The filename should be given as an explicit path. It is good practice to use the name of the current theory (with ending @{text ".certs"} instead of @{text ".thy"}) as the certificates file. Certificate files should be used at most once in a certain theory context, @@ -241,7 +219,7 @@ text {* The option @{text smt2_read_only_certificates} controls whether only stored certificates are should be used or invocation of an SMT solver -is allowed. When set to @{text true}, no SMT solver will ever be +is allowed. When set to @{text true}, no SMT solver will ever be invoked and only the existing certificates found in the configured cache are used; when set to @{text false} and there is no cached certificate for some proposition, then the configured SMT solver is @@ -251,11 +229,10 @@ declare [[smt2_read_only_certificates = false]] - subsection {* Tracing *} text {* -The SMT method, when applied, traces important information. To +The SMT method, when applied, traces important information. To make it entirely silent, set the following option to @{text false}. *} @@ -273,7 +250,7 @@ subsection {* Schematic rules for Z3 proof reconstruction *} text {* -Several prof rules of Z3 are not very well documented. There are two +Several prof rules of Z3 are not very well documented. There are two lemma groups which can turn failing Z3 proof reconstruction attempts into succeeding ones: the facts in @{text z3_rule} are tried prior to any implemented reconstruction procedure for all uncertain Z3 proof diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/SMT_Examples/SMT_Examples.certs2 --- a/src/HOL/SMT_Examples/SMT_Examples.certs2 Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/SMT_Examples/SMT_Examples.certs2 Sun Jul 27 21:11:35 2014 +0200 @@ -3600,6 +3600,33 @@ (let ((@x73 (not-or-elim @x70 $x62))) (unit-resolution (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x65 (not $x62))) @x73 $x65) @x74 false)))))))))))))))))) +271390ea915947de195c2202e30f90bb84689d60 26 0 +unsat +((set-logic ) +(proof +(let ((?x35 (+ y$ 1))) +(let ((?x36 (* a$ ?x35))) +(let ((?x34 (* a$ x$))) +(let ((?x37 (+ ?x34 ?x36))) +(let ((?x30 (+ x$ 1))) +(let ((?x32 (+ ?x30 y$))) +(let ((?x33 (* a$ ?x32))) +(let (($x38 (= ?x33 ?x37))) +(let (($x39 (not $x38))) +(let (($x82 (= (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$))) true))) +(let (($x80 (= $x38 (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$)))))) +(let ((@x76 (rewrite (= (+ ?x34 (+ a$ (* a$ y$))) (+ a$ ?x34 (* a$ y$)))))) +(let ((@x66 (monotonicity (rewrite (= ?x35 (+ 1 y$))) (= ?x36 (* a$ (+ 1 y$)))))) +(let ((@x71 (trans @x66 (rewrite (= (* a$ (+ 1 y$)) (+ a$ (* a$ y$)))) (= ?x36 (+ a$ (* a$ y$)))))) +(let ((@x78 (trans (monotonicity @x71 (= ?x37 (+ ?x34 (+ a$ (* a$ y$))))) @x76 (= ?x37 (+ a$ ?x34 (* a$ y$)))))) +(let ((@x58 (rewrite (= (* a$ (+ 1 x$ y$)) (+ a$ ?x34 (* a$ y$)))))) +(let ((@x46 (monotonicity (rewrite (= ?x30 (+ 1 x$))) (= ?x32 (+ (+ 1 x$) y$))))) +(let ((@x51 (trans @x46 (rewrite (= (+ (+ 1 x$) y$) (+ 1 x$ y$))) (= ?x32 (+ 1 x$ y$))))) +(let ((@x60 (trans (monotonicity @x51 (= ?x33 (* a$ (+ 1 x$ y$)))) @x58 (= ?x33 (+ a$ ?x34 (* a$ y$)))))) +(let ((@x88 (monotonicity (trans (monotonicity @x60 @x78 $x80) (rewrite $x82) (= $x38 true)) (= $x39 (not true))))) +(let ((@x92 (trans @x88 (rewrite (= (not true) false)) (= $x39 false)))) +(mp (asserted $x39) @x92 false)))))))))))))))))))))))) + d98ad8f668dead6f610669a52351ea0176a811b0 26 0 unsat ((set-logic ) @@ -3627,33 +3654,6 @@ (let ((@x73 (and-elim (not-or-elim (mp (asserted $x35) @x69 $x65) $x52) $x49))) ((_ th-lemma arith farkas 1 1 1) @x73 @x72 @x74 false)))))))))))))))))))))))) -271390ea915947de195c2202e30f90bb84689d60 26 0 -unsat -((set-logic ) -(proof -(let ((?x35 (+ y$ 1))) -(let ((?x36 (* a$ ?x35))) -(let ((?x34 (* a$ x$))) -(let ((?x37 (+ ?x34 ?x36))) -(let ((?x30 (+ x$ 1))) -(let ((?x32 (+ ?x30 y$))) -(let ((?x33 (* a$ ?x32))) -(let (($x38 (= ?x33 ?x37))) -(let (($x39 (not $x38))) -(let (($x82 (= (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$))) true))) -(let (($x80 (= $x38 (= (+ a$ ?x34 (* a$ y$)) (+ a$ ?x34 (* a$ y$)))))) -(let ((@x76 (rewrite (= (+ ?x34 (+ a$ (* a$ y$))) (+ a$ ?x34 (* a$ y$)))))) -(let ((@x66 (monotonicity (rewrite (= ?x35 (+ 1 y$))) (= ?x36 (* a$ (+ 1 y$)))))) -(let ((@x71 (trans @x66 (rewrite (= (* a$ (+ 1 y$)) (+ a$ (* a$ y$)))) (= ?x36 (+ a$ (* a$ y$)))))) -(let ((@x78 (trans (monotonicity @x71 (= ?x37 (+ ?x34 (+ a$ (* a$ y$))))) @x76 (= ?x37 (+ a$ ?x34 (* a$ y$)))))) -(let ((@x58 (rewrite (= (* a$ (+ 1 x$ y$)) (+ a$ ?x34 (* a$ y$)))))) -(let ((@x46 (monotonicity (rewrite (= ?x30 (+ 1 x$))) (= ?x32 (+ (+ 1 x$) y$))))) -(let ((@x51 (trans @x46 (rewrite (= (+ (+ 1 x$) y$) (+ 1 x$ y$))) (= ?x32 (+ 1 x$ y$))))) -(let ((@x60 (trans (monotonicity @x51 (= ?x33 (* a$ (+ 1 x$ y$)))) @x58 (= ?x33 (+ a$ ?x34 (* a$ y$)))))) -(let ((@x88 (monotonicity (trans (monotonicity @x60 @x78 $x80) (rewrite $x82) (= $x38 true)) (= $x39 (not true))))) -(let ((@x92 (trans @x88 (rewrite (= (not true) false)) (= $x39 false)))) -(mp (asserted $x39) @x92 false)))))))))))))))))))))))) - b216c79478e44396acca3654b76845499fc18a04 23 0 unsat ((set-logic ) @@ -3730,842 +3730,6 @@ (let ((@x152 (trans (monotonicity @x145 (= $x52 (not true))) (rewrite (= (not true) false)) (= $x52 false)))) (mp (asserted $x52) @x152 false))))))))))))))))))))))))))))))))))))))))))))))))) -49c385b161a0c500f84c45f85272a8ec9574fef4 126 0 -unsat -((set-logic AUFLIA) -(proof -(let ((?x29 (of_nat$ x$))) -(let ((?x30 (* 2 ?x29))) -(let ((?x31 (nat$ ?x30))) -(let ((?x212 (of_nat$ ?x31))) -(let ((?x532 (* (- 1) ?x212))) -(let ((?x533 (+ ?x30 ?x532))) -(let (($x513 (<= ?x533 0))) -(let (($x531 (= ?x533 0))) -(let (($x193 (>= ?x29 0))) -(let (($x487 (>= ?x212 1))) -(let (($x485 (= ?x212 1))) -(let ((?x33 (nat$ 1))) -(let ((?x504 (of_nat$ ?x33))) -(let (($x505 (= ?x504 1))) -(let (($x546 (forall ((?v0 Int) )(!(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x51 (= ?x50 ?v0))) -(let (($x64 (>= ?v0 0))) -(let (($x65 (not $x64))) -(or $x65 $x51)))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x71 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x51 (= ?x50 ?v0))) -(let (($x64 (>= ?v0 0))) -(let (($x65 (not $x64))) -(or $x65 $x51))))))) -)) -(let ((?x49 (nat$ ?0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x51 (= ?x50 ?0))) -(let (($x64 (>= ?0 0))) -(let (($x65 (not $x64))) -(let (($x68 (or $x65 $x51))) -(let (($x53 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x51 (= ?x50 ?v0))) -(let (($x48 (<= 0 ?v0))) -(=> $x48 $x51)))))) -)) -(let (($x59 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x51 (= ?x50 ?v0))) -(or (not (<= 0 ?v0)) $x51))))) -)) -(let ((@x67 (monotonicity (rewrite (= (<= 0 ?0) $x64)) (= (not (<= 0 ?0)) $x65)))) -(let ((@x73 (quant-intro (monotonicity @x67 (= (or (not (<= 0 ?0)) $x51) $x68)) (= $x59 $x71)))) -(let ((@x58 (rewrite (= (=> (<= 0 ?0) $x51) (or (not (<= 0 ?0)) $x51))))) -(let ((@x76 (mp (asserted $x53) (trans (quant-intro @x58 (= $x53 $x59)) @x73 (= $x53 $x71)) $x71))) -(let ((@x551 (mp (mp~ @x76 (nnf-pos (refl (~ $x68 $x68)) (~ $x71 $x71)) $x71) (quant-intro (refl (= $x68 $x68)) (= $x71 $x546)) $x546))) -(let (($x526 (not $x546))) -(let (($x489 (or $x526 $x505))) -(let ((@x506 (rewrite (= (>= 1 0) true)))) -(let ((@x219 (trans (monotonicity @x506 (= (not (>= 1 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 1 0)) false)))) -(let ((@x223 (monotonicity @x219 (= (or (not (>= 1 0)) $x505) (or false $x505))))) -(let ((@x503 (trans @x223 (rewrite (= (or false $x505) $x505)) (= (or (not (>= 1 0)) $x505) $x505)))) -(let ((@x493 (monotonicity @x503 (= (or $x526 (or (not (>= 1 0)) $x505)) $x489)))) -(let ((@x496 (trans @x493 (rewrite (= $x489 $x489)) (= (or $x526 (or (not (>= 1 0)) $x505)) $x489)))) -(let ((@x497 (mp ((_ quant-inst 1) (or $x526 (or (not (>= 1 0)) $x505))) @x496 $x489))) -(let (($x34 (= ?x31 ?x33))) -(let ((@x42 (mp (asserted (not (not $x34))) (rewrite (= (not (not $x34)) $x34)) $x34))) -(let ((@x356 (trans (monotonicity @x42 (= ?x212 ?x504)) (unit-resolution @x497 @x551 $x505) $x485))) -(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))))) -(let ((@x374 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not (= ?x212 0)) (<= ?x212 0))) @x371 (not (= ?x212 0))))) -(let (($x515 (= ?x212 0))) -(let (($x517 (or $x193 $x515))) -(let (($x552 (forall ((?v0 Int) )(!(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x78 (= ?x50 0))) -(let (($x64 (>= ?v0 0))) -(or $x64 $x78))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x101 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x78 (= ?x50 0))) -(let (($x64 (>= ?v0 0))) -(or $x64 $x78)))))) -)) -(let ((@x556 (quant-intro (refl (= (or $x64 (= ?x50 0)) (or $x64 (= ?x50 0)))) (= $x101 $x552)))) -(let ((@x120 (nnf-pos (refl (~ (or $x64 (= ?x50 0)) (or $x64 (= ?x50 0)))) (~ $x101 $x101)))) -(let (($x80 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x78 (= ?x50 0))) -(let (($x77 (< ?v0 0))) -(=> $x77 $x78)))))) -)) -(let (($x86 (forall ((?v0 Int) )(let ((?x49 (nat$ ?v0))) -(let ((?x50 (of_nat$ ?x49))) -(let (($x78 (= ?x50 0))) -(let (($x77 (< ?v0 0))) -(let (($x82 (not $x77))) -(or $x82 $x78))))))) -)) -(let (($x78 (= ?x50 0))) -(let (($x98 (or $x64 $x78))) -(let (($x77 (< ?0 0))) -(let (($x82 (not $x77))) -(let (($x83 (or $x82 $x78))) -(let ((@x97 (trans (monotonicity (rewrite (= $x77 $x65)) (= $x82 (not $x65))) (rewrite (= (not $x65) $x64)) (= $x82 $x64)))) -(let ((@x105 (trans (quant-intro (rewrite (= (=> $x77 $x78) $x83)) (= $x80 $x86)) (quant-intro (monotonicity @x97 (= $x83 $x98)) (= $x86 $x101)) (= $x80 $x101)))) -(let ((@x557 (mp (mp~ (mp (asserted $x80) @x105 $x101) @x120 $x101) @x556 $x552))) -(let (($x156 (not $x552))) -(let (($x520 (or $x156 $x193 $x515))) -(let ((@x530 (rewrite (= (>= ?x30 0) $x193)))) -(let ((@x523 (monotonicity (monotonicity @x530 (= (or (>= ?x30 0) $x515) $x517)) (= (or $x156 (or (>= ?x30 0) $x515)) (or $x156 $x517))))) -(let ((@x215 (trans @x523 (rewrite (= (or $x156 $x517) $x520)) (= (or $x156 (or (>= ?x30 0) $x515)) $x520)))) -(let ((@x229 (mp ((_ quant-inst (* 2 ?x29)) (or $x156 (or (>= ?x30 0) $x515))) @x215 $x520))) -(let (($x185 (not $x193))) -(let (($x534 (or $x185 $x531))) -(let (($x188 (or $x526 $x185 $x531))) -(let (($x213 (= ?x212 ?x30))) -(let (($x208 (>= ?x30 0))) -(let (($x209 (not $x208))) -(let (($x214 (or $x209 $x213))) -(let (($x189 (or $x526 $x214))) -(let ((@x536 (monotonicity (monotonicity @x530 (= $x209 $x185)) (rewrite (= $x213 $x531)) (= $x214 $x534)))) -(let ((@x175 (trans (monotonicity @x536 (= $x189 (or $x526 $x534))) (rewrite (= (or $x526 $x534) $x188)) (= $x189 $x188)))) -(let ((@x176 (mp ((_ quant-inst (* 2 ?x29)) $x189) @x175 $x188))) -(let ((@x470 (unit-resolution (unit-resolution @x176 @x551 $x534) (unit-resolution (unit-resolution @x229 @x557 $x517) @x374 $x193) $x531))) -(let (($x514 (>= ?x533 0))) -(let (($x486 (<= ?x212 1))) -((_ 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)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - -1c2b6530334930f2f4f6e0d6b73f1d249b6c5fd8 22 0 -unsat -((set-logic AUFLIA) -(proof -(let ((?x28 (of_nat$ a$))) -(let (($x57 (>= ?x28 4))) -(let (($x64 (not (or (>= ?x28 3) (not $x57))))) -(let (($x34 (< (* 2 ?x28) 7))) -(let (($x30 (< ?x28 3))) -(let (($x38 (not $x30))) -(let (($x39 (or $x38 $x34))) -(let ((@x51 (monotonicity (rewrite (= $x30 (not (>= ?x28 3)))) (= $x38 (not (not (>= ?x28 3))))))) -(let ((@x55 (trans @x51 (rewrite (= (not (not (>= ?x28 3))) (>= ?x28 3))) (= $x38 (>= ?x28 3))))) -(let ((@x63 (monotonicity @x55 (rewrite (= $x34 (not $x57))) (= $x39 (or (>= ?x28 3) (not $x57)))))) -(let ((@x44 (monotonicity (rewrite (= (=> $x30 $x34) $x39)) (= (not (=> $x30 $x34)) (not $x39))))) -(let ((@x68 (trans @x44 (monotonicity @x63 (= (not $x39) $x64)) (= (not (=> $x30 $x34)) $x64)))) -(let ((@x71 (not-or-elim (mp (asserted (not (=> $x30 $x34))) @x68 $x64) $x57))) -(let (($x58 (not $x57))) -(let (($x47 (>= ?x28 3))) -(let (($x45 (not $x47))) -(let ((@x70 (not-or-elim (mp (asserted (not (=> $x30 $x34))) @x68 $x64) $x45))) -(unit-resolution (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x58 $x47)) @x70 $x58) @x71 false)))))))))))))))))))) - -995f80f06d5874ea2208846fb3b3217c3a3b9bfd 147 0 -unsat -((set-logic AUFLIA) -(proof -(let ((?x29 (of_nat$ y$))) -(let ((?x30 (+ 1 ?x29))) -(let ((?x31 (nat$ ?x30))) -(let ((?x32 (of_nat$ ?x31))) -(let ((?x43 (* (- 1) ?x29))) -(let ((?x44 (+ ?x43 ?x32))) -(let ((?x47 (nat$ ?x44))) -(let ((?x50 (of_nat$ ?x47))) -(let ((?x567 (* (- 1) ?x32))) -(let ((?x255 (+ ?x29 ?x567 ?x50))) -(let (($x513 (>= ?x255 0))) -(let (($x532 (= ?x255 0))) -(let ((?x568 (+ ?x29 ?x567))) -(let (($x248 (<= ?x568 0))) -(let (($x551 (<= ?x568 (- 1)))) -(let (($x558 (= ?x568 (- 1)))) -(let (($x229 (>= ?x29 (- 1)))) -(let (($x387 (>= ?x29 0))) -(let ((?x154 (nat$ ?x29))) -(let ((?x388 (of_nat$ ?x154))) -(let (($x352 (= ?x388 0))) -(let (($x498 (or $x387 $x352))) -(let (($x584 (forall ((?v0 Int) )(!(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x110 (= ?x82 0))) -(let (($x95 (>= ?v0 0))) -(or $x95 $x110))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x133 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x110 (= ?x82 0))) -(let (($x95 (>= ?v0 0))) -(or $x95 $x110)))))) -)) -(let ((?x81 (nat$ ?0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x110 (= ?x82 0))) -(let (($x95 (>= ?0 0))) -(let (($x130 (or $x95 $x110))) -(let (($x112 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x110 (= ?x82 0))) -(let (($x109 (< ?v0 0))) -(=> $x109 $x110)))))) -)) -(let (($x118 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x110 (= ?x82 0))) -(let (($x109 (< ?v0 0))) -(let (($x114 (not $x109))) -(or $x114 $x110))))))) -)) -(let ((@x125 (monotonicity (rewrite (= (< ?0 0) (not $x95))) (= (not (< ?0 0)) (not (not $x95)))))) -(let ((@x129 (trans @x125 (rewrite (= (not (not $x95)) $x95)) (= (not (< ?0 0)) $x95)))) -(let ((@x135 (quant-intro (monotonicity @x129 (= (or (not (< ?0 0)) $x110) $x130)) (= $x118 $x133)))) -(let ((@x117 (rewrite (= (=> (< ?0 0) $x110) (or (not (< ?0 0)) $x110))))) -(let ((@x138 (mp (asserted $x112) (trans (quant-intro @x117 (= $x112 $x118)) @x135 (= $x112 $x133)) $x133))) -(let ((@x589 (mp (mp~ @x138 (nnf-pos (refl (~ $x130 $x130)) (~ $x133 $x133)) $x133) (quant-intro (refl (= $x130 $x130)) (= $x133 $x584)) $x584))) -(let (($x555 (not $x584))) -(let (($x500 (or $x555 $x387 $x352))) -(let ((@x404 (mp ((_ quant-inst (of_nat$ y$)) (or $x555 $x498)) (rewrite (= (or $x555 $x498) $x500)) $x500))) -(let ((@x487 (unit-resolution (unit-resolution @x404 @x589 $x498) (hypothesis (not $x387)) $x352))) -(let (($x239 (= ?x154 y$))) -(let (($x570 (forall ((?v0 Nat$) )(!(= (nat$ (of_nat$ ?v0)) ?v0) :pattern ( (of_nat$ ?v0) ))) -)) -(let (($x77 (forall ((?v0 Nat$) )(= (nat$ (of_nat$ ?v0)) ?v0)) -)) -(let ((@x575 (trans (rewrite (= $x77 $x570)) (rewrite (= $x570 $x570)) (= $x77 $x570)))) -(let ((@x144 (refl (~ (= (nat$ (of_nat$ ?0)) ?0) (= (nat$ (of_nat$ ?0)) ?0))))) -(let ((@x576 (mp (mp~ (asserted $x77) (nnf-pos @x144 (~ $x77 $x77)) $x77) @x575 $x570))) -(let (($x241 (not $x570))) -(let (($x231 (or $x241 $x239))) -(let ((@x242 ((_ quant-inst y$) $x231))) -(let ((@x475 (monotonicity (symm (unit-resolution @x242 @x576 $x239) (= y$ ?x154)) (= ?x29 ?x388)))) -(let ((@x480 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not (= ?x29 0)) $x387)) (hypothesis (not $x387)) (trans @x475 @x487 (= ?x29 0)) false))) -(let ((@x468 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x387) $x229)) (lemma @x480 $x387) $x229))) -(let (($x564 (not $x229))) -(let (($x559 (or $x564 $x558))) -(let (($x578 (forall ((?v0 Int) )(!(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x83 (= ?x82 ?v0))) -(let (($x95 (>= ?v0 0))) -(let (($x97 (not $x95))) -(or $x97 $x83)))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x103 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x83 (= ?x82 ?v0))) -(let (($x95 (>= ?v0 0))) -(let (($x97 (not $x95))) -(or $x97 $x83))))))) -)) -(let ((@x580 (refl (= (or (not $x95) (= ?x82 ?0)) (or (not $x95) (= ?x82 ?0)))))) -(let ((@x139 (refl (~ (or (not $x95) (= ?x82 ?0)) (or (not $x95) (= ?x82 ?0)))))) -(let (($x85 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x83 (= ?x82 ?v0))) -(let (($x80 (<= 0 ?v0))) -(=> $x80 $x83)))))) -)) -(let (($x91 (forall ((?v0 Int) )(let ((?x81 (nat$ ?v0))) -(let ((?x82 (of_nat$ ?x81))) -(let (($x83 (= ?x82 ?v0))) -(or (not (<= 0 ?v0)) $x83))))) -)) -(let (($x83 (= ?x82 ?0))) -(let (($x97 (not $x95))) -(let (($x100 (or $x97 $x83))) -(let (($x88 (or (not (<= 0 ?0)) $x83))) -(let ((@x99 (monotonicity (rewrite (= (<= 0 ?0) $x95)) (= (not (<= 0 ?0)) $x97)))) -(let ((@x93 (quant-intro (rewrite (= (=> (<= 0 ?0) $x83) $x88)) (= $x85 $x91)))) -(let ((@x107 (trans @x93 (quant-intro (monotonicity @x99 (= $x88 $x100)) (= $x91 $x103)) (= $x85 $x103)))) -(let ((@x148 (mp~ (mp (asserted $x85) @x107 $x103) (nnf-pos @x139 (~ $x103 $x103)) $x103))) -(let ((@x583 (mp @x148 (quant-intro @x580 (= $x103 $x578)) $x578))) -(let (($x202 (not $x578))) -(let (($x544 (or $x202 $x564 $x558))) -(let (($x557 (or (not (>= ?x30 0)) (= ?x32 ?x30)))) -(let (($x205 (or $x202 $x557))) -(let ((@x566 (monotonicity (rewrite (= (>= ?x30 0) $x229)) (= (not (>= ?x30 0)) $x564)))) -(let ((@x560 (monotonicity @x566 (rewrite (= (= ?x32 ?x30) $x558)) (= $x557 $x559)))) -(let ((@x549 (trans (monotonicity @x560 (= $x205 (or $x202 $x559))) (rewrite (= (or $x202 $x559) $x544)) (= $x205 $x544)))) -(let ((@x550 (mp ((_ quant-inst (+ 1 ?x29)) $x205) @x549 $x544))) -(let ((@x453 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x558) $x551)) (unit-resolution (unit-resolution @x550 @x583 $x559) @x468 $x558) $x551))) -(let (($x251 (not $x248))) -(let (($x535 (or $x251 $x532))) -(let (($x523 (or $x202 $x251 $x532))) -(let (($x541 (or (not (>= ?x44 0)) (= ?x50 ?x44)))) -(let (($x524 (or $x202 $x541))) -(let ((@x531 (monotonicity (rewrite (= (>= ?x44 0) $x248)) (= (not (>= ?x44 0)) $x251)))) -(let ((@x522 (monotonicity @x531 (rewrite (= (= ?x50 ?x44) $x532)) (= $x541 $x535)))) -(let ((@x369 (trans (monotonicity @x522 (= $x524 (or $x202 $x535))) (rewrite (= (or $x202 $x535) $x523)) (= $x524 $x523)))) -(let ((@x511 (mp ((_ quant-inst (+ ?x43 ?x32)) $x524) @x369 $x523))) -(let ((@x459 (unit-resolution (unit-resolution @x511 @x583 $x535) (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x551) $x248)) @x453 $x248) $x532))) -(let (($x59 (<= ?x50 0))) -(let ((@x65 (monotonicity (rewrite (= (< 0 ?x50) (not $x59))) (= (not (< 0 ?x50)) (not (not $x59)))))) -(let ((@x69 (trans @x65 (rewrite (= (not (not $x59)) $x59)) (= (not (< 0 ?x50)) $x59)))) -(let (($x53 (< 0 ?x50))) -(let (($x56 (not $x53))) -(let (($x38 (not (< (* 0 ?x32) (of_nat$ (nat$ (- ?x32 ?x29))))))) -(let ((@x49 (monotonicity (rewrite (= (- ?x32 ?x29) ?x44)) (= (nat$ (- ?x32 ?x29)) ?x47)))) -(let ((@x55 (monotonicity (rewrite (= (* 0 ?x32) 0)) (monotonicity @x49 (= (of_nat$ (nat$ (- ?x32 ?x29))) ?x50)) (= (< (* 0 ?x32) (of_nat$ (nat$ (- ?x32 ?x29)))) $x53)))) -(let ((@x72 (mp (asserted $x38) (trans (monotonicity @x55 (= $x38 $x56)) @x69 (= $x38 $x59)) $x59))) -((_ th-lemma arith farkas -1 -1 1) @x72 @x453 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x532) $x513)) @x459 $x513) false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - -5d99a07ea08069a53b86d7f3330815887331e82a 145 0 -unsat -((set-logic AUFLIA) -(proof -(let ((?x29 (of_nat$ y$))) -(let ((?x30 (+ 1 ?x29))) -(let ((?x31 (nat$ ?x30))) -(let ((?x32 (of_nat$ ?x31))) -(let ((?x48 (+ (- 1) ?x32))) -(let ((?x51 (nat$ ?x48))) -(let ((?x585 (of_nat$ ?x51))) -(let ((?x299 (* (- 1) ?x585))) -(let ((?x434 (+ ?x29 ?x299))) -(let (($x436 (>= ?x434 0))) -(let (($x558 (= ?x29 ?x585))) -(let (($x54 (= ?x51 y$))) -(let (($x88 (<= ?x32 0))) -(let (($x98 (not (or (= (not $x88) $x54) (not $x88))))) -(let (($x40 (=> (not (ite (< 0 ?x32) true false)) false))) -(let (($x33 (< 0 ?x32))) -(let (($x34 (ite $x33 true false))) -(let (($x38 (= $x34 (= (nat$ (- ?x32 1)) y$)))) -(let (($x42 (or false (or $x38 $x40)))) -(let (($x43 (not $x42))) -(let (($x60 (= $x33 $x54))) -(let (($x75 (or $x60 $x33))) -(let ((@x94 (monotonicity (rewrite (= $x33 (not $x88))) (= $x60 (= (not $x88) $x54))))) -(let ((@x97 (monotonicity @x94 (rewrite (= $x33 (not $x88))) (= $x75 (or (= (not $x88) $x54) (not $x88)))))) -(let ((@x70 (monotonicity (monotonicity (rewrite (= $x34 $x33)) (= (not $x34) (not $x33))) (= $x40 (=> (not $x33) false))))) -(let ((@x74 (trans @x70 (rewrite (= (=> (not $x33) false) $x33)) (= $x40 $x33)))) -(let ((@x53 (monotonicity (rewrite (= (- ?x32 1) ?x48)) (= (nat$ (- ?x32 1)) ?x51)))) -(let ((@x59 (monotonicity (rewrite (= $x34 $x33)) (monotonicity @x53 (= (= (nat$ (- ?x32 1)) y$) $x54)) (= $x38 (= $x33 $x54))))) -(let ((@x77 (monotonicity (trans @x59 (rewrite (= (= $x33 $x54) $x60)) (= $x38 $x60)) @x74 (= (or $x38 $x40) $x75)))) -(let ((@x84 (trans (monotonicity @x77 (= $x42 (or false $x75))) (rewrite (= (or false $x75) $x75)) (= $x42 $x75)))) -(let ((@x102 (trans (monotonicity @x84 (= $x43 (not $x75))) (monotonicity @x97 (= (not $x75) $x98)) (= $x43 $x98)))) -(let ((@x106 (not-or-elim (mp (asserted $x43) @x102 $x98) $x88))) -(let ((@x187 (monotonicity (iff-true @x106 (= $x88 true)) (= (= $x88 $x54) (= true $x54))))) -(let ((@x191 (trans @x187 (rewrite (= (= true $x54) $x54)) (= (= $x88 $x54) $x54)))) -(let (($x173 (= $x88 $x54))) -(let ((@x105 (not-or-elim (mp (asserted $x43) @x102 $x98) (not (= (not $x88) $x54))))) -(let ((@x192 (mp (mp @x105 (rewrite (= (not (= (not $x88) $x54)) $x173)) $x173) @x191 $x54))) -(let ((@x457 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x558) $x436)) (monotonicity (symm @x192 (= y$ ?x51)) $x558) $x436))) -(let ((?x613 (* (- 1) ?x32))) -(let ((?x614 (+ ?x29 ?x613))) -(let (($x595 (<= ?x614 (- 1)))) -(let (($x612 (= ?x614 (- 1)))) -(let (($x610 (>= ?x29 (- 1)))) -(let (($x557 (>= ?x585 0))) -(let (($x559 (= ?x585 0))) -(let (($x586 (>= ?x32 1))) -(let (($x589 (not $x586))) -(let (($x632 (forall ((?v0 Int) )(!(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x144 (= ?x116 0))) -(let (($x129 (>= ?v0 0))) -(or $x129 $x144))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x167 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x144 (= ?x116 0))) -(let (($x129 (>= ?v0 0))) -(or $x129 $x144)))))) -)) -(let ((?x115 (nat$ ?0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x144 (= ?x116 0))) -(let (($x129 (>= ?0 0))) -(let (($x164 (or $x129 $x144))) -(let (($x146 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x144 (= ?x116 0))) -(let (($x143 (< ?v0 0))) -(=> $x143 $x144)))))) -)) -(let (($x152 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x144 (= ?x116 0))) -(let (($x143 (< ?v0 0))) -(let (($x148 (not $x143))) -(or $x148 $x144))))))) -)) -(let ((@x159 (monotonicity (rewrite (= (< ?0 0) (not $x129))) (= (not (< ?0 0)) (not (not $x129)))))) -(let ((@x163 (trans @x159 (rewrite (= (not (not $x129)) $x129)) (= (not (< ?0 0)) $x129)))) -(let ((@x169 (quant-intro (monotonicity @x163 (= (or (not (< ?0 0)) $x144) $x164)) (= $x152 $x167)))) -(let ((@x151 (rewrite (= (=> (< ?0 0) $x144) (or (not (< ?0 0)) $x144))))) -(let ((@x172 (mp (asserted $x146) (trans (quant-intro @x151 (= $x146 $x152)) @x169 (= $x146 $x167)) $x167))) -(let ((@x637 (mp (mp~ @x172 (nnf-pos (refl (~ $x164 $x164)) (~ $x167 $x167)) $x167) (quant-intro (refl (= $x164 $x164)) (= $x167 $x632)) $x632))) -(let (($x601 (not $x632))) -(let (($x564 (or $x601 $x586 $x559))) -(let ((@x588 (rewrite (= (>= ?x48 0) $x586)))) -(let ((@x394 (monotonicity (monotonicity @x588 (= (or (>= ?x48 0) $x559) (or $x586 $x559))) (= (or $x601 (or (>= ?x48 0) $x559)) (or $x601 (or $x586 $x559)))))) -(let ((@x554 (trans @x394 (rewrite (= (or $x601 (or $x586 $x559)) $x564)) (= (or $x601 (or (>= ?x48 0) $x559)) $x564)))) -(let ((@x555 (mp ((_ quant-inst (+ (- 1) ?x32)) (or $x601 (or (>= ?x48 0) $x559))) @x554 $x564))) -(let ((@x539 (unit-resolution @x555 @x637 (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x589 (not $x88))) @x106 $x589) $x559))) -(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))) -(let (($x605 (not $x610))) -(let (($x616 (or $x605 $x612))) -(let (($x626 (forall ((?v0 Int) )(!(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x117 (= ?x116 ?v0))) -(let (($x129 (>= ?v0 0))) -(let (($x131 (not $x129))) -(or $x131 $x117)))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x137 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x117 (= ?x116 ?v0))) -(let (($x129 (>= ?v0 0))) -(let (($x131 (not $x129))) -(or $x131 $x117))))))) -)) -(let ((@x628 (refl (= (or (not $x129) (= ?x116 ?0)) (or (not $x129) (= ?x116 ?0)))))) -(let ((@x185 (refl (~ (or (not $x129) (= ?x116 ?0)) (or (not $x129) (= ?x116 ?0)))))) -(let (($x119 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x117 (= ?x116 ?v0))) -(let (($x114 (<= 0 ?v0))) -(=> $x114 $x117)))))) -)) -(let (($x125 (forall ((?v0 Int) )(let ((?x115 (nat$ ?v0))) -(let ((?x116 (of_nat$ ?x115))) -(let (($x117 (= ?x116 ?v0))) -(or (not (<= 0 ?v0)) $x117))))) -)) -(let (($x117 (= ?x116 ?0))) -(let (($x131 (not $x129))) -(let (($x134 (or $x131 $x117))) -(let (($x122 (or (not (<= 0 ?0)) $x117))) -(let ((@x133 (monotonicity (rewrite (= (<= 0 ?0) $x129)) (= (not (<= 0 ?0)) $x131)))) -(let ((@x127 (quant-intro (rewrite (= (=> (<= 0 ?0) $x117) $x122)) (= $x119 $x125)))) -(let ((@x141 (trans @x127 (quant-intro (monotonicity @x133 (= $x122 $x134)) (= $x125 $x137)) (= $x119 $x137)))) -(let ((@x196 (mp~ (mp (asserted $x119) @x141 $x137) (nnf-pos @x185 (~ $x137 $x137)) $x137))) -(let ((@x631 (mp @x196 (quant-intro @x628 (= $x137 $x626)) $x626))) -(let (($x269 (not $x626))) -(let (($x607 (or $x269 $x605 $x612))) -(let (($x273 (= ?x32 ?x30))) -(let (($x291 (>= ?x30 0))) -(let (($x292 (not $x291))) -(let (($x609 (or $x292 $x273))) -(let (($x271 (or $x269 $x609))) -(let ((@x268 (monotonicity (monotonicity (rewrite (= $x291 $x610)) (= $x292 $x605)) (rewrite (= $x273 $x612)) (= $x609 $x616)))) -(let ((@x593 (trans (monotonicity @x268 (= $x271 (or $x269 $x616))) (rewrite (= (or $x269 $x616) $x607)) (= $x271 $x607)))) -(let ((@x594 (mp ((_ quant-inst (+ 1 ?x29)) $x271) @x593 $x607))) -(let ((@x538 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x612) $x595)) (unit-resolution (unit-resolution @x594 @x631 $x616) @x545 $x612) $x595))) -((_ 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))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - -8704d70b06a6aa746ec0e023752eaa0b7eb0df18 78 0 -unsat -((set-logic AUFLIA) -(proof -(let ((?x37 (* (- 1) x$))) -(let (($x55 (>= x$ 0))) -(let ((?x62 (ite $x55 x$ ?x37))) -(let ((?x554 (* (- 1) ?x62))) -(let ((?x217 (+ ?x37 ?x554))) -(let (($x562 (<= ?x217 0))) -(let (($x249 (= ?x37 ?x62))) -(let (($x56 (not $x55))) -(let (($x163 (= x$ ?x62))) -(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)))) -(let (($x254 (>= ?x62 0))) -(let (($x255 (not $x254))) -(let (($x588 (forall ((?v0 Int) )(!(let ((?x90 (nat$ ?v0))) -(let ((?x91 (of_nat$ ?x90))) -(let (($x92 (= ?x91 ?v0))) -(let (($x104 (>= ?v0 0))) -(let (($x106 (not $x104))) -(or $x106 $x92)))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x112 (forall ((?v0 Int) )(let ((?x90 (nat$ ?v0))) -(let ((?x91 (of_nat$ ?x90))) -(let (($x92 (= ?x91 ?v0))) -(let (($x104 (>= ?v0 0))) -(let (($x106 (not $x104))) -(or $x106 $x92))))))) -)) -(let ((?x90 (nat$ ?0))) -(let ((?x91 (of_nat$ ?x90))) -(let (($x92 (= ?x91 ?0))) -(let (($x104 (>= ?0 0))) -(let (($x106 (not $x104))) -(let (($x109 (or $x106 $x92))) -(let (($x94 (forall ((?v0 Int) )(let ((?x90 (nat$ ?v0))) -(let ((?x91 (of_nat$ ?x90))) -(let (($x92 (= ?x91 ?v0))) -(let (($x89 (<= 0 ?v0))) -(=> $x89 $x92)))))) -)) -(let (($x100 (forall ((?v0 Int) )(let ((?x90 (nat$ ?v0))) -(let ((?x91 (of_nat$ ?x90))) -(let (($x92 (= ?x91 ?v0))) -(or (not (<= 0 ?v0)) $x92))))) -)) -(let ((@x108 (monotonicity (rewrite (= (<= 0 ?0) $x104)) (= (not (<= 0 ?0)) $x106)))) -(let ((@x114 (quant-intro (monotonicity @x108 (= (or (not (<= 0 ?0)) $x92) $x109)) (= $x100 $x112)))) -(let ((@x99 (rewrite (= (=> (<= 0 ?0) $x92) (or (not (<= 0 ?0)) $x92))))) -(let ((@x117 (mp (asserted $x94) (trans (quant-intro @x99 (= $x94 $x100)) @x114 (= $x94 $x112)) $x112))) -(let ((@x593 (mp (mp~ @x117 (nnf-pos (refl (~ $x109 $x109)) (~ $x112 $x112)) $x112) (quant-intro (refl (= $x109 $x109)) (= $x112 $x588)) $x588))) -(let ((?x67 (nat$ ?x62))) -(let ((?x70 (of_nat$ ?x67))) -(let (($x73 (= ?x70 ?x62))) -(let (($x76 (not $x73))) -(let (($x28 (< x$ 0))) -(let ((?x30 (ite $x28 (- x$) x$))) -(let (($x34 (not (= (of_nat$ (nat$ ?x30)) ?x30)))) -(let (($x77 (= (not (= (of_nat$ (nat$ (ite $x28 ?x37 x$))) (ite $x28 ?x37 x$))) $x76))) -(let ((?x40 (ite $x28 ?x37 x$))) -(let ((?x43 (nat$ ?x40))) -(let ((?x46 (of_nat$ ?x43))) -(let (($x49 (= ?x46 ?x40))) -(let ((@x66 (trans (monotonicity (rewrite (= $x28 $x56)) (= ?x40 (ite $x56 ?x37 x$))) (rewrite (= (ite $x56 ?x37 x$) ?x62)) (= ?x40 ?x62)))) -(let ((@x75 (monotonicity (monotonicity (monotonicity @x66 (= ?x43 ?x67)) (= ?x46 ?x70)) @x66 (= $x49 $x73)))) -(let ((@x45 (monotonicity (monotonicity (rewrite (= (- x$) ?x37)) (= ?x30 ?x40)) (= (nat$ ?x30) ?x43)))) -(let ((@x51 (monotonicity (monotonicity @x45 (= (of_nat$ (nat$ ?x30)) ?x46)) (monotonicity (rewrite (= (- x$) ?x37)) (= ?x30 ?x40)) (= (= (of_nat$ (nat$ ?x30)) ?x30) $x49)))) -(let ((@x80 (trans (monotonicity @x51 (= $x34 (not $x49))) (monotonicity @x75 $x77) (= $x34 $x76)))) -(let ((@x81 (mp (asserted $x34) @x80 $x76))) -(let (($x239 (or (not $x588) $x255 $x73))) -(let ((@x576 (mp ((_ quant-inst (ite $x55 x$ ?x37)) (or (not $x588) (or $x255 $x73))) (rewrite (= (or (not $x588) (or $x255 $x73)) $x239)) $x239))) -(let ((@x561 ((_ th-lemma arith farkas -1 1 1) (hypothesis $x55) (unit-resolution @x576 @x81 @x593 $x255) @x559 false))) -(let ((@x198 (lemma @x561 $x56))) -(let ((@x566 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x249) $x562)) (unit-resolution (def-axiom (or $x55 $x249)) @x198 $x249) $x562))) -(let (($x578 (<= ?x62 0))) -(let ((@x257 (unit-resolution ((_ th-lemma arith farkas 1 1) (or $x578 $x254)) (unit-resolution @x576 @x81 @x593 $x255) $x578))) -((_ th-lemma arith farkas 1 1 1) @x257 @x198 @x566 false))))))))))))))))))))))))))))))))))))))))))))))))))))))) - -ce85402875b83dc2f06a381810d29a2061933b9f 312 0 -unsat -((set-logic AUFLIA) -(declare-fun ?v1!0 (Nat$) Nat$) -(proof -(let ((?x89 (of_nat$ m$))) -(let ((?x90 (* 4 ?x89))) -(let ((?x98 (+ 1 ?x90))) -(let ((?x101 (nat$ ?x98))) -(let ((?x295 (of_nat$ ?x101))) -(let ((?x598 (* (- 1) ?x295))) -(let ((?x599 (+ ?x90 ?x598))) -(let (($x574 (>= ?x599 (- 1)))) -(let (($x597 (= ?x599 (- 1)))) -(let (($x610 (>= ?x89 0))) -(let (($x380 (<= ?x295 1))) -(let (($x687 (not $x380))) -(let (($x701 (forall ((?v1 Nat$) )(!(let ((?x89 (of_nat$ m$))) -(let ((?x90 (* 4 ?x89))) -(let ((?x98 (+ 1 ?x90))) -(let ((?x101 (nat$ ?x98))) -(let (($x382 (= ?v1 ?x101))) -(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(let (($x381 (dvd$ ?v1 ?x101))) -(let (($x371 (not $x381))) -(or $x371 $x35 $x382)))))))))) :pattern ( (dvd$ ?v1 (nat$ (+ 1 (* 4 (of_nat$ m$))))) ))) -)) -(let (($x702 (not $x701))) -(let (($x357 (or $x380 $x702))) -(let (($x487 (not $x357))) -(let (($x104 (prime_nat$ ?x101))) -(let (($x110 (not $x104))) -(let (($x697 (or $x110 $x487))) -(let ((?x703 (?v1!0 ?x101))) -(let (($x707 (= ?x703 ?x101))) -(let ((?x34 (nat$ 1))) -(let (($x706 (= ?x703 ?x34))) -(let (($x704 (dvd$ ?x703 ?x101))) -(let (($x705 (not $x704))) -(let (($x708 (or $x705 $x706 $x707))) -(let (($x698 (not $x708))) -(let (($x360 (or $x104 $x380 $x698))) -(let (($x700 (not $x360))) -(let (($x369 (not $x697))) -(let (($x342 (or $x369 $x700))) -(let (($x684 (not $x342))) -(let (($x738 (forall ((?v0 Nat$) )(!(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0)))) -(let (($x220 (not $x219))) -(let ((?x30 (of_nat$ ?v0))) -(let (($x65 (<= ?x30 1))) -(let (($x28 (prime_nat$ ?v0))) -(let (($x245 (or $x28 $x65 $x220))) -(let (($x710 (forall ((?v1 Nat$) )(!(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0)))) :pattern ( (dvd$ ?v1 ?v0) ))) -)) -(let (($x200 (not $x28))) -(not (or (not (or $x200 (not (or $x65 (not $x710))))) (not $x245))))))))))) :pattern ( (prime_nat$ ?v0) ) :pattern ( (of_nat$ ?v0) ))) -)) -(let (($x290 (forall ((?v0 Nat$) )(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0)))) -(let (($x220 (not $x219))) -(let ((?x30 (of_nat$ ?v0))) -(let (($x65 (<= ?x30 1))) -(let (($x28 (prime_nat$ ?v0))) -(let (($x245 (or $x28 $x65 $x220))) -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0))))) -)) -(let (($x221 (not $x72))) -(let (($x273 (not (or $x65 $x221)))) -(let (($x200 (not $x28))) -(let (($x276 (or $x200 $x273))) -(not (or (not $x276) (not $x245))))))))))))))) -)) -(let (($x219 (or (not (dvd$ (?v1!0 ?0) ?0)) (= (?v1!0 ?0) ?x34) (= (?v1!0 ?0) ?0)))) -(let (($x220 (not $x219))) -(let ((?x30 (of_nat$ ?0))) -(let (($x65 (<= ?x30 1))) -(let (($x28 (prime_nat$ ?0))) -(let (($x245 (or $x28 $x65 $x220))) -(let (($x710 (forall ((?v1 Nat$) )(!(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?0)) $x35 (= ?v1 ?0)))) :pattern ( (dvd$ ?v1 ?0) ))) -)) -(let (($x200 (not $x28))) -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?0)) $x35 (= ?v1 ?0))))) -)) -(let (($x221 (not $x72))) -(let (($x273 (not (or $x65 $x221)))) -(let (($x276 (or $x200 $x273))) -(let (($x285 (not (or (not $x276) (not $x245))))) -(let (($x734 (= $x285 (not (or (not (or $x200 (not (or $x65 (not $x710))))) (not $x245)))))) -(let (($x731 (= (or (not $x276) (not $x245)) (or (not (or $x200 (not (or $x65 (not $x710))))) (not $x245))))) -(let (($x35 (= ?0 ?x34))) -(let (($x69 (or (not (dvd$ ?0 ?1)) $x35 (= ?0 ?1)))) -(let ((@x717 (monotonicity (quant-intro (refl (= $x69 $x69)) (= $x72 $x710)) (= $x221 (not $x710))))) -(let ((@x723 (monotonicity (monotonicity @x717 (= (or $x65 $x221) (or $x65 (not $x710)))) (= $x273 (not (or $x65 (not $x710))))))) -(let ((@x729 (monotonicity (monotonicity @x723 (= $x276 (or $x200 (not (or $x65 (not $x710)))))) (= (not $x276) (not (or $x200 (not (or $x65 (not $x710))))))))) -(let ((@x740 (quant-intro (monotonicity (monotonicity @x729 $x731) $x734) (= $x290 $x738)))) -(let (($x253 (forall ((?v0 Nat$) )(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0)))) -(let (($x220 (not $x219))) -(let ((?x30 (of_nat$ ?v0))) -(let (($x65 (<= ?x30 1))) -(let (($x28 (prime_nat$ ?v0))) -(let (($x245 (or $x28 $x65 $x220))) -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0))))) -)) -(let (($x66 (not $x65))) -(let (($x75 (and $x66 $x72))) -(let (($x200 (not $x28))) -(let (($x229 (or $x200 $x75))) -(and $x229 $x245))))))))))))) -)) -(let ((@x278 (monotonicity (rewrite (= (and (not $x65) $x72) $x273)) (= (or $x200 (and (not $x65) $x72)) $x276)))) -(let ((@x281 (monotonicity @x278 (= (and (or $x200 (and (not $x65) $x72)) $x245) (and $x276 $x245))))) -(let ((@x289 (trans @x281 (rewrite (= (and $x276 $x245) $x285)) (= (and (or $x200 (and (not $x65) $x72)) $x245) $x285)))) -(let (($x233 (forall ((?v0 Nat$) )(let (($x219 (or (not (dvd$ (?v1!0 ?v0) ?v0)) (= (?v1!0 ?v0) (nat$ 1)) (= (?v1!0 ?v0) ?v0)))) -(let (($x220 (not $x219))) -(let ((?x30 (of_nat$ ?v0))) -(let (($x65 (<= ?x30 1))) -(let (($x66 (not $x65))) -(let (($x211 (not $x66))) -(let (($x224 (or $x211 $x220))) -(let (($x28 (prime_nat$ ?v0))) -(let (($x228 (or $x28 $x224))) -(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0))))) -)) -(let (($x75 (and $x66 $x72))) -(let (($x200 (not $x28))) -(let (($x229 (or $x200 $x75))) -(and $x229 $x228))))))))))))))) -)) -(let (($x66 (not $x65))) -(let (($x75 (and $x66 $x72))) -(let (($x229 (or $x200 $x75))) -(let (($x250 (and $x229 $x245))) -(let (($x211 (not $x66))) -(let (($x224 (or $x211 $x220))) -(let (($x228 (or $x28 $x224))) -(let (($x230 (and $x229 $x228))) -(let ((@x244 (monotonicity (monotonicity (rewrite (= $x211 $x65)) (= $x224 (or $x65 $x220))) (= $x228 (or $x28 (or $x65 $x220)))))) -(let ((@x249 (trans @x244 (rewrite (= (or $x28 (or $x65 $x220)) $x245)) (= $x228 $x245)))) -(let (($x81 (forall ((?v0 Nat$) )(let (($x72 (forall ((?v1 Nat$) )(let ((?x34 (nat$ 1))) -(let (($x35 (= ?v1 ?x34))) -(or (not (dvd$ ?v1 ?v0)) $x35 (= ?v1 ?v0))))) -)) -(let ((?x30 (of_nat$ ?v0))) -(let (($x65 (<= ?x30 1))) -(let (($x66 (not $x65))) -(let (($x75 (and $x66 $x72))) -(let (($x28 (prime_nat$ ?v0))) -(= $x28 $x75)))))))) -)) -(let ((@x227 (nnf-neg (refl (~ $x211 $x211)) (sk (~ $x221 $x220)) (~ (not $x75) $x224)))) -(let ((@x210 (monotonicity (refl (~ $x66 $x66)) (nnf-pos (refl (~ $x69 $x69)) (~ $x72 $x72)) (~ $x75 $x75)))) -(let ((@x232 (nnf-pos (refl (~ $x28 $x28)) (refl (~ $x200 $x200)) @x210 @x227 (~ (= $x28 $x75) $x230)))) -(let (($x42 (forall ((?v0 Nat$) )(let (($x39 (forall ((?v1 Nat$) )(let (($x33 (dvd$ ?v1 ?v0))) -(=> $x33 (or (= ?v1 (nat$ 1)) (= ?v1 ?v0))))) -)) -(let ((?x30 (of_nat$ ?v0))) -(let (($x31 (< 1 ?x30))) -(let (($x28 (prime_nat$ ?v0))) -(= $x28 (and $x31 $x39))))))) -)) -(let (($x62 (forall ((?v0 Nat$) )(let (($x48 (forall ((?v1 Nat$) )(or (not (dvd$ ?v1 ?v0)) (or (= ?v1 (nat$ 1)) (= ?v1 ?v0)))) -)) -(let ((?x30 (of_nat$ ?v0))) -(let (($x31 (< 1 ?x30))) -(let (($x51 (and $x31 $x48))) -(let (($x28 (prime_nat$ ?v0))) -(= $x28 $x51))))))) -)) -(let (($x78 (= $x28 $x75))) -(let (($x48 (forall ((?v1 Nat$) )(or (not (dvd$ ?v1 ?0)) (or (= ?v1 (nat$ 1)) (= ?v1 ?0)))) -)) -(let (($x31 (< 1 ?x30))) -(let (($x51 (and $x31 $x48))) -(let (($x57 (= $x28 $x51))) -(let ((@x71 (rewrite (= (or (not (dvd$ ?0 ?1)) (or $x35 (= ?0 ?1))) $x69)))) -(let ((@x77 (monotonicity (rewrite (= $x31 $x66)) (quant-intro @x71 (= $x48 $x72)) (= $x51 $x75)))) -(let (($x39 (forall ((?v1 Nat$) )(let (($x33 (dvd$ ?v1 ?0))) -(=> $x33 (or (= ?v1 (nat$ 1)) (= ?v1 ?0))))) -)) -(let (($x41 (= $x28 (and $x31 $x39)))) -(let (($x45 (or (not (dvd$ ?0 ?1)) (or $x35 (= ?0 ?1))))) -(let ((@x50 (quant-intro (rewrite (= (=> (dvd$ ?0 ?1) (or $x35 (= ?0 ?1))) $x45)) (= $x39 $x48)))) -(let ((@x56 (monotonicity (monotonicity @x50 (= (and $x31 $x39) $x51)) (= $x41 (= $x28 $x51))))) -(let ((@x64 (quant-intro (trans @x56 (rewrite (= (= $x28 $x51) $x57)) (= $x41 $x57)) (= $x42 $x62)))) -(let ((@x85 (trans @x64 (quant-intro (monotonicity @x77 (= $x57 $x78)) (= $x62 $x81)) (= $x42 $x81)))) -(let ((@x236 (mp~ (mp (asserted $x42) @x85 $x81) (nnf-pos @x232 (~ $x81 $x233)) $x233))) -(let ((@x256 (mp @x236 (quant-intro (monotonicity @x249 (= $x230 $x250)) (= $x233 $x253)) $x253))) -(let ((@x741 (mp (mp @x256 (quant-intro @x289 (= $x253 $x290)) $x290) @x740 $x738))) -(let (($x348 (or (not $x738) $x684))) -(let ((@x685 ((_ quant-inst (nat$ ?x98)) $x348))) -(let ((@x569 (unit-resolution (def-axiom (or $x342 $x697)) (unit-resolution @x685 @x741 $x684) $x697))) -(let (($x125 (not (or $x110 (>= ?x89 1))))) -(let (($x94 (<= 1 ?x89))) -(let (($x95 (=> (prime_nat$ (nat$ (+ ?x90 1))) $x94))) -(let (($x96 (not $x95))) -(let ((@x124 (monotonicity (rewrite (= $x94 (>= ?x89 1))) (= (or $x110 $x94) (or $x110 (>= ?x89 1)))))) -(let ((@x103 (monotonicity (rewrite (= (+ ?x90 1) ?x98)) (= (nat$ (+ ?x90 1)) ?x101)))) -(let ((@x109 (monotonicity (monotonicity @x103 (= (prime_nat$ (nat$ (+ ?x90 1))) $x104)) (= $x95 (=> $x104 $x94))))) -(let ((@x115 (trans @x109 (rewrite (= (=> $x104 $x94) (or $x110 $x94))) (= $x95 (or $x110 $x94))))) -(let ((@x129 (trans (monotonicity @x115 (= $x96 (not (or $x110 $x94)))) (monotonicity @x124 (= (not (or $x110 $x94)) $x125)) (= $x96 $x125)))) -(let ((@x131 (not-or-elim (mp (asserted $x96) @x129 $x125) $x104))) -(let ((@x572 (unit-resolution (unit-resolution (def-axiom (or $x369 $x110 $x487)) @x131 (or $x369 $x487)) @x569 $x487))) -(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))))) -(let ((@x561 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not (= ?x295 0)) (<= ?x295 0))) @x530 (not (= ?x295 0))))) -(let (($x575 (= ?x295 0))) -(let (($x577 (or $x610 $x575))) -(let (($x756 (forall ((?v0 Int) )(!(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x169 (= ?x141 0))) -(let (($x155 (>= ?v0 0))) -(or $x155 $x169))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x192 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x169 (= ?x141 0))) -(let (($x155 (>= ?v0 0))) -(or $x155 $x169)))))) -)) -(let ((?x140 (nat$ ?0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x169 (= ?x141 0))) -(let (($x155 (>= ?0 0))) -(let (($x189 (or $x155 $x169))) -(let (($x171 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x169 (= ?x141 0))) -(let (($x168 (< ?v0 0))) -(=> $x168 $x169)))))) -)) -(let (($x177 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x169 (= ?x141 0))) -(let (($x168 (< ?v0 0))) -(let (($x173 (not $x168))) -(or $x173 $x169))))))) -)) -(let ((@x184 (monotonicity (rewrite (= (< ?0 0) (not $x155))) (= (not (< ?0 0)) (not (not $x155)))))) -(let ((@x188 (trans @x184 (rewrite (= (not (not $x155)) $x155)) (= (not (< ?0 0)) $x155)))) -(let ((@x194 (quant-intro (monotonicity @x188 (= (or (not (< ?0 0)) $x169) $x189)) (= $x177 $x192)))) -(let ((@x176 (rewrite (= (=> (< ?0 0) $x169) (or (not (< ?0 0)) $x169))))) -(let ((@x197 (mp (asserted $x171) (trans (quant-intro @x176 (= $x171 $x177)) @x194 (= $x171 $x192)) $x192))) -(let ((@x761 (mp (mp~ @x197 (nnf-pos (refl (~ $x189 $x189)) (~ $x192 $x192)) $x192) (quant-intro (refl (= $x189 $x189)) (= $x192 $x756)) $x756))) -(let (($x580 (not $x756))) -(let (($x581 (or $x580 $x610 $x575))) -(let ((@x612 (rewrite (= (>= ?x98 0) $x610)))) -(let ((@x579 (monotonicity @x612 (= (or (>= ?x98 0) $x575) $x577)))) -(let ((@x555 (monotonicity @x579 (= (or $x580 (or (>= ?x98 0) $x575)) (or $x580 $x577))))) -(let ((@x564 (trans @x555 (rewrite (= (or $x580 $x577) $x581)) (= (or $x580 (or (>= ?x98 0) $x575)) $x581)))) -(let ((@x565 (mp ((_ quant-inst (+ 1 ?x90)) (or $x580 (or (>= ?x98 0) $x575))) @x564 $x581))) -(let (($x613 (not $x610))) -(let (($x600 (or $x613 $x597))) -(let (($x750 (forall ((?v0 Int) )(!(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x142 (= ?x141 ?v0))) -(let (($x155 (>= ?v0 0))) -(let (($x156 (not $x155))) -(or $x156 $x142)))))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x162 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x142 (= ?x141 ?v0))) -(let (($x155 (>= ?v0 0))) -(let (($x156 (not $x155))) -(or $x156 $x142))))))) -)) -(let ((@x752 (refl (= (or (not $x155) (= ?x141 ?0)) (or (not $x155) (= ?x141 ?0)))))) -(let ((@x263 (refl (~ (or (not $x155) (= ?x141 ?0)) (or (not $x155) (= ?x141 ?0)))))) -(let (($x144 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x142 (= ?x141 ?v0))) -(let (($x139 (<= 0 ?v0))) -(=> $x139 $x142)))))) -)) -(let (($x150 (forall ((?v0 Int) )(let ((?x140 (nat$ ?v0))) -(let ((?x141 (of_nat$ ?x140))) -(let (($x142 (= ?x141 ?v0))) -(or (not (<= 0 ?v0)) $x142))))) -)) -(let (($x142 (= ?x141 ?0))) -(let (($x156 (not $x155))) -(let (($x159 (or $x156 $x142))) -(let (($x147 (or (not (<= 0 ?0)) $x142))) -(let ((@x158 (monotonicity (rewrite (= (<= 0 ?0) $x155)) (= (not (<= 0 ?0)) $x156)))) -(let ((@x152 (quant-intro (rewrite (= (=> (<= 0 ?0) $x142) $x147)) (= $x144 $x150)))) -(let ((@x166 (trans @x152 (quant-intro (monotonicity @x158 (= $x147 $x159)) (= $x150 $x162)) (= $x144 $x162)))) -(let ((@x266 (mp~ (mp (asserted $x144) @x166 $x162) (nnf-pos @x263 (~ $x162 $x162)) $x162))) -(let ((@x755 (mp @x266 (quant-intro @x752 (= $x162 $x750)) $x750))) -(let (($x603 (not $x750))) -(let (($x604 (or $x603 $x613 $x597))) -(let (($x608 (= ?x295 ?x98))) -(let (($x618 (>= ?x98 0))) -(let (($x619 (not $x618))) -(let (($x609 (or $x619 $x608))) -(let (($x605 (or $x603 $x609))) -(let ((@x602 (monotonicity (monotonicity @x612 (= $x619 $x613)) (rewrite (= $x608 $x597)) (= $x609 $x600)))) -(let ((@x590 (trans (monotonicity @x602 (= $x605 (or $x603 $x600))) (rewrite (= (or $x603 $x600) $x604)) (= $x605 $x604)))) -(let ((@x591 (mp ((_ quant-inst (+ 1 ?x90)) $x605) @x590 $x604))) -(let ((@x532 (unit-resolution (unit-resolution @x591 @x755 $x600) (unit-resolution (unit-resolution @x565 @x761 $x577) @x561 $x610) $x597))) -(let ((@x133 (not-or-elim (mp (asserted $x96) @x129 $x125) (not (>= ?x89 1))))) -((_ 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))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) - 5e90e9139eb4e9a7c2678bca8dda6cda05861f4c 23 0 unsat ((set-logic AUFLIA) @@ -4780,21 +3944,6 @@ (let ((@x53 (trans (monotonicity @x46 (= $x33 (not true))) (rewrite (= (not true) false)) (= $x33 false)))) (mp (asserted $x33) @x53 false))))))))))) -8b09776b03122aeacc9dd9526e1f0e5d41a07f14 14 0 -unsat -((set-logic AUFLIA) -(proof -(let (($x29 (forall ((?v0 A$) )(g$ ?v0)) -)) -(let (($x30 (ite $x29 true false))) -(let (($x31 (f$ $x30))) -(let (($x32 (=> $x31 true))) -(let (($x33 (not $x32))) -(let ((@x42 (monotonicity (monotonicity (rewrite (= $x30 $x29)) (= $x31 (f$ $x29))) (= $x32 (=> (f$ $x29) true))))) -(let ((@x46 (trans @x42 (rewrite (= (=> (f$ $x29) true) true)) (= $x32 true)))) -(let ((@x53 (trans (monotonicity @x46 (= $x33 (not true))) (rewrite (= (not true) false)) (= $x33 false)))) -(mp (asserted $x33) @x53 false))))))))))) - b221de9d8dbe279344ac85e2ada07f5722636ce5 46 0 unsat ((set-logic AUFLIA) @@ -4842,195 +3991,96 @@ (let ((@x478 (mp ((_ quant-inst 3 42) (or (not $x52) $x171)) (trans (monotonicity @x131 $x137) (rewrite (= $x134 $x134)) $x137) $x134))) (unit-resolution (unit-resolution @x478 @x78 $x168) (mp @x77 @x472 (not $x168)) false))))))))))))))))))))))))))))))))))) -c94d83d8571ae767bf6025c563cdac64250f7638 189 0 +8b09776b03122aeacc9dd9526e1f0e5d41a07f14 14 0 +unsat +((set-logic AUFLIA) +(proof +(let (($x29 (forall ((?v0 A$) )(g$ ?v0)) +)) +(let (($x30 (ite $x29 true false))) +(let (($x31 (f$ $x30))) +(let (($x32 (=> $x31 true))) +(let (($x33 (not $x32))) +(let ((@x42 (monotonicity (monotonicity (rewrite (= $x30 $x29)) (= $x31 (f$ $x29))) (= $x32 (=> (f$ $x29) true))))) +(let ((@x46 (trans @x42 (rewrite (= (=> (f$ $x29) true) true)) (= $x32 true)))) +(let ((@x53 (trans (monotonicity @x46 (= $x33 (not true))) (rewrite (= (not true) false)) (= $x33 false)))) +(mp (asserted $x33) @x53 false))))))))))) + +5d3ccbcf168a634cad3952ad8f6d2798329d6a77 75 0 unsat ((set-logic AUFLIA) (proof -(let ((?x74 (nat$ 2))) -(let ((?x75 (cons$ ?x74 nil$))) -(let ((?x69 (nat$ 1))) -(let ((?x76 (cons$ ?x69 ?x75))) -(let ((?x70 (cons$ ?x69 nil$))) -(let ((?x68 (nat$ 0))) -(let ((?x71 (cons$ ?x68 ?x70))) -(let ((?x72 (map$ uu$ ?x71))) -(let (($x77 (= ?x72 ?x76))) -(let ((?x264 (map$ uu$ ?x70))) -(let ((?x427 (map$ uu$ nil$))) -(let ((?x426 (fun_app$ uu$ ?x69))) -(let ((?x428 (cons$ ?x426 ?x427))) -(let (($x429 (= ?x264 ?x428))) -(let (($x598 (forall ((?v0 Nat_nat_fun$) (?v1 Nat$) (?v2 Nat_list$) )(!(let ((?x64 (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2)))) -(let ((?x61 (map$ ?v0 (cons$ ?v1 ?v2)))) -(= ?x61 ?x64))) :pattern ( (map$ ?v0 (cons$ ?v1 ?v2)) ) :pattern ( (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2)) ))) +(let ((?x78 (cons$ 2 nil$))) +(let ((?x79 (cons$ 1 ?x78))) +(let ((?x74 (cons$ 1 nil$))) +(let ((?x75 (cons$ 0 ?x74))) +(let ((?x76 (map$ uu$ ?x75))) +(let (($x80 (= ?x76 ?x79))) +(let ((?x185 (map$ uu$ ?x74))) +(let ((?x189 (map$ uu$ nil$))) +(let ((?x188 (fun_app$ uu$ 1))) +(let ((?x160 (cons$ ?x188 ?x189))) +(let (($x290 (= ?x185 ?x160))) +(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)) ))) )) -(let (($x66 (forall ((?v0 Nat_nat_fun$) (?v1 Nat$) (?v2 Nat_list$) )(let ((?x64 (cons$ (fun_app$ ?v0 ?v1) (map$ ?v0 ?v2)))) -(let ((?x61 (map$ ?v0 (cons$ ?v1 ?v2)))) -(= ?x61 ?x64)))) -)) -(let ((?x64 (cons$ (fun_app$ ?2 ?1) (map$ ?2 ?0)))) -(let ((?x61 (map$ ?2 (cons$ ?1 ?0)))) -(let (($x65 (= ?x61 ?x64))) -(let ((@x158 (mp~ (asserted $x66) (nnf-pos (refl (~ $x65 $x65)) (~ $x66 $x66)) $x66))) -(let ((@x603 (mp @x158 (quant-intro (refl (= $x65 $x65)) (= $x66 $x598)) $x598))) -(let (($x582 (not $x598))) -(let (($x524 (or $x582 $x429))) -(let ((@x511 ((_ quant-inst uu$ (nat$ 1) nil$) $x524))) -(let (($x515 (= ?x427 nil$))) -(let (($x590 (forall ((?v0 Nat_nat_fun$) )(!(= (map$ ?v0 nil$) nil$) :pattern ( (map$ ?v0 nil$) ))) -)) -(let (($x55 (forall ((?v0 Nat_nat_fun$) )(= (map$ ?v0 nil$) nil$)) +(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)))) )) -(let ((@x592 (refl (= (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$))))) -(let ((@x152 (refl (~ (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$))))) -(let ((@x595 (mp (mp~ (asserted $x55) (nnf-pos @x152 (~ $x55 $x55)) $x55) (quant-intro @x592 (= $x55 $x590)) $x590))) -(let (($x506 (or (not $x590) $x515))) -(let ((@x507 ((_ quant-inst uu$) $x506))) -(let ((?x281 (of_nat$ ?x69))) -(let ((?x516 (+ 1 ?x281))) -(let ((?x517 (nat$ ?x516))) -(let (($x508 (= ?x426 ?x517))) -(let (($x47 (forall ((?v0 Nat$) )(!(let ((?x29 (fun_app$ uu$ ?v0))) -(= ?x29 (nat$ (+ 1 (of_nat$ ?v0))))) :pattern ( (fun_app$ uu$ ?v0) ))) -)) -(let ((?x29 (fun_app$ uu$ ?0))) -(let (($x44 (= ?x29 (nat$ (+ 1 (of_nat$ ?0)))))) -(let (($x36 (forall ((?v0 Nat$) )(!(let ((?x29 (fun_app$ uu$ ?v0))) -(= ?x29 (nat$ (+ (of_nat$ ?v0) 1)))) :pattern ( (fun_app$ uu$ ?v0) ))) +(let (($x71 (= (map$ ?2 (cons$ ?1 ?0)) (cons$ (fun_app$ ?2 ?1) (map$ ?2 ?0))))) +(let ((@x97 (mp~ (asserted $x72) (nnf-pos (refl (~ $x71 $x71)) (~ $x72 $x72)) $x72))) +(let ((@x526 (mp @x97 (quant-intro (refl (= $x71 $x71)) (= $x72 $x521)) $x521))) +(let (($x173 (or (not $x521) $x290))) +(let ((@x506 ((_ quant-inst uu$ 1 nil$) $x173))) +(let (($x492 (= ?x189 nil$))) +(let (($x513 (forall ((?v0 Int_int_fun$) )(!(= (map$ ?v0 nil$) nil$) :pattern ( (map$ ?v0 nil$) ))) )) -(let ((@x43 (monotonicity (rewrite (= (+ (of_nat$ ?0) 1) (+ 1 (of_nat$ ?0)))) (= (nat$ (+ (of_nat$ ?0) 1)) (nat$ (+ 1 (of_nat$ ?0))))))) -(let ((@x46 (monotonicity @x43 (= (= ?x29 (nat$ (+ (of_nat$ ?0) 1))) $x44)))) -(let ((@x156 (mp~ (mp (asserted $x36) (quant-intro @x46 (= $x36 $x47)) $x47) (nnf-pos (refl (~ $x44 $x44)) (~ $x47 $x47)) $x47))) -(let (($x494 (or (not $x47) $x508))) -(let ((@x495 ((_ quant-inst (nat$ 1)) $x494))) -(let ((?x445 (of_nat$ ?x517))) -(let ((?x376 (nat$ ?x445))) -(let (($x377 (= ?x376 ?x517))) -(let (($x605 (forall ((?v0 Nat$) )(!(= (nat$ (of_nat$ ?v0)) ?v0) :pattern ( (of_nat$ ?v0) ))) -)) -(let (($x82 (forall ((?v0 Nat$) )(= (nat$ (of_nat$ ?v0)) ?v0)) +(let (($x61 (forall ((?v0 Int_int_fun$) )(= (map$ ?v0 nil$) nil$)) )) -(let ((@x610 (trans (rewrite (= $x82 $x605)) (rewrite (= $x605 $x605)) (= $x82 $x605)))) -(let ((@x162 (refl (~ (= (nat$ (of_nat$ ?0)) ?0) (= (nat$ (of_nat$ ?0)) ?0))))) -(let ((@x611 (mp (mp~ (asserted $x82) (nnf-pos @x162 (~ $x82 $x82)) $x82) @x610 $x605))) -(let (($x384 (or (not $x605) $x377))) -(let ((@x385 ((_ quant-inst (nat$ ?x516)) $x384))) -(let ((?x437 (* (- 1) ?x445))) -(let ((?x410 (+ ?x281 ?x437))) -(let (($x431 (<= ?x410 (- 1)))) -(let (($x378 (= ?x410 (- 1)))) -(let (($x448 (>= ?x281 (- 1)))) -(let (($x442 (>= ?x281 1))) -(let (($x282 (= ?x281 1))) -(let (($x613 (forall ((?v0 Int) )(!(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0))) -(let (($x101 (>= ?v0 0))) -(let (($x102 (not $x101))) -(or $x102 $x88)))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x108 (forall ((?v0 Int) )(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0))) -(let (($x101 (>= ?v0 0))) -(let (($x102 (not $x101))) -(or $x102 $x88))))) +(let ((@x515 (refl (= (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$))))) +(let ((@x83 (refl (~ (= (map$ ?0 nil$) nil$) (= (map$ ?0 nil$) nil$))))) +(let ((@x518 (mp (mp~ (asserted $x61) (nnf-pos @x83 (~ $x61 $x61)) $x61) (quant-intro @x515 (= $x61 $x513)) $x513))) +(let (($x495 (or (not $x513) $x492))) +(let ((@x496 ((_ quant-inst uu$) $x495))) +(let (($x136 (= ?x188 2))) +(let (($x51 (forall ((?v0 Int) )(!(= (+ ?v0 (* (- 1) (fun_app$ uu$ ?v0))) (- 1)) :pattern ( (fun_app$ uu$ ?v0) ))) )) -(let (($x88 (= (of_nat$ (nat$ ?0)) ?0))) -(let (($x101 (>= ?0 0))) -(let (($x102 (not $x101))) -(let (($x105 (or $x102 $x88))) -(let (($x90 (forall ((?v0 Int) )(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0))) -(let (($x85 (<= 0 ?v0))) -(=> $x85 $x88)))) +(let (($x47 (= (+ ?0 (* (- 1) (fun_app$ uu$ ?0))) (- 1)))) +(let (($x34 (forall ((?v0 Int) )(!(let ((?x29 (fun_app$ uu$ ?v0))) +(= ?x29 (+ ?v0 1))) :pattern ( (fun_app$ uu$ ?v0) ))) )) -(let (($x96 (forall ((?v0 Int) )(let (($x88 (= (of_nat$ (nat$ ?v0)) ?v0))) -(or (not (<= 0 ?v0)) $x88))) +(let (($x42 (forall ((?v0 Int) )(!(let ((?x29 (fun_app$ uu$ ?v0))) +(= ?x29 (+ 1 ?v0))) :pattern ( (fun_app$ uu$ ?v0) ))) )) -(let ((@x104 (monotonicity (rewrite (= (<= 0 ?0) $x101)) (= (not (<= 0 ?0)) $x102)))) -(let ((@x110 (quant-intro (monotonicity @x104 (= (or (not (<= 0 ?0)) $x88) $x105)) (= $x96 $x108)))) -(let ((@x95 (rewrite (= (=> (<= 0 ?0) $x88) (or (not (<= 0 ?0)) $x88))))) -(let ((@x113 (mp (asserted $x90) (trans (quant-intro @x95 (= $x90 $x96)) @x110 (= $x90 $x108)) $x108))) -(let ((@x618 (mp (mp~ @x113 (nnf-pos (refl (~ $x105 $x105)) (~ $x108 $x108)) $x108) (quant-intro (refl (= $x105 $x105)) (= $x108 $x613)) $x613))) -(let (($x227 (not $x613))) -(let (($x271 (or $x227 $x282))) -(let ((@x578 (rewrite (= (not true) false)))) -(let ((@x181 (rewrite (= (>= 1 0) true)))) -(let ((@x289 (trans (monotonicity @x181 (= (not (>= 1 0)) (not true))) @x578 (= (not (>= 1 0)) false)))) -(let ((@x560 (monotonicity @x289 (= (or (not (>= 1 0)) $x282) (or false $x282))))) -(let ((@x270 (trans @x560 (rewrite (= (or false $x282) $x282)) (= (or (not (>= 1 0)) $x282) $x282)))) -(let ((@x552 (monotonicity @x270 (= (or $x227 (or (not (>= 1 0)) $x282)) $x271)))) -(let ((@x555 (trans @x552 (rewrite (= $x271 $x271)) (= (or $x227 (or (not (>= 1 0)) $x282)) $x271)))) -(let ((@x541 (mp ((_ quant-inst 1) (or $x227 (or (not (>= 1 0)) $x282))) @x555 $x271))) -(let ((@x351 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x282) $x442)) (unit-resolution @x541 @x618 $x282) $x442))) -(let (($x451 (not $x448))) -(let (($x409 (or $x227 $x451 $x378))) -(let (($x446 (= ?x445 ?x516))) -(let (($x443 (>= ?x516 0))) -(let (($x444 (not $x443))) -(let (($x447 (or $x444 $x446))) -(let (($x411 (or $x227 $x447))) -(let ((@x441 (monotonicity (monotonicity (rewrite (= $x443 $x448)) (= $x444 $x451)) (rewrite (= $x446 $x378)) (= $x447 (or $x451 $x378))))) -(let ((@x420 (trans (monotonicity @x441 (= $x411 (or $x227 (or $x451 $x378)))) (rewrite (= (or $x227 (or $x451 $x378)) $x409)) (= $x411 $x409)))) -(let ((@x430 (mp ((_ quant-inst (+ 1 ?x281)) $x411) @x420 $x409))) -(let ((@x343 (unit-resolution @x430 @x618 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x442) $x448)) @x351 $x448) $x378))) -(let (($x432 (>= ?x410 (- 1)))) -(let (($x331 (<= ?x281 1))) -(let ((@x335 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x282) $x331)) (unit-resolution @x541 @x618 $x282) $x331))) -(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)))) -(let ((@x327 (trans (monotonicity (symm @x341 (= 2 ?x445)) (= ?x74 ?x376)) (unit-resolution @x385 @x611 $x377) (= ?x74 ?x517)))) -(let ((@x329 (trans @x327 (symm (unit-resolution @x495 @x156 $x508) (= ?x517 ?x426)) (= ?x74 ?x426)))) -(let ((@x312 (monotonicity @x329 (symm (unit-resolution @x507 @x595 $x515) (= nil$ ?x427)) (= ?x75 ?x428)))) -(let ((@x316 (trans @x312 (symm (unit-resolution @x511 @x603 $x429) (= ?x428 ?x264)) (= ?x75 ?x264)))) -(let ((?x577 (of_nat$ ?x68))) -(let ((?x522 (+ 1 ?x577))) -(let ((?x523 (nat$ ?x522))) -(let ((?x263 (fun_app$ uu$ ?x68))) -(let (($x512 (= ?x263 ?x523))) -(let (($x513 (or (not $x47) $x512))) -(let ((@x514 ((_ quant-inst (nat$ 0)) $x513))) -(let ((?x496 (of_nat$ ?x523))) -(let ((?x373 (nat$ ?x496))) -(let (($x375 (= ?x373 ?x523))) -(let (($x380 (or (not $x605) $x375))) -(let ((@x381 ((_ quant-inst (nat$ ?x522)) $x380))) -(let ((?x490 (* (- 1) ?x577))) -(let ((?x491 (+ ?x496 ?x490))) -(let (($x465 (<= ?x491 1))) -(let (($x492 (= ?x491 1))) -(let (($x499 (>= ?x577 (- 1)))) -(let (($x502 (>= ?x577 0))) -(let (($x249 (= ?x577 0))) -(let (($x228 (or $x227 $x249))) -(let ((@x584 (rewrite (= (>= 0 0) true)))) -(let ((@x241 (trans (monotonicity @x584 (= (not (>= 0 0)) (not true))) @x578 (= (not (>= 0 0)) false)))) -(let ((@x580 (monotonicity @x241 (= (or (not (>= 0 0)) $x249) (or false $x249))))) -(let ((@x226 (trans @x580 (rewrite (= (or false $x249) $x249)) (= (or (not (>= 0 0)) $x249) $x249)))) -(let ((@x568 (monotonicity @x226 (= (or $x227 (or (not (>= 0 0)) $x249)) $x228)))) -(let ((@x571 (trans @x568 (rewrite (= $x228 $x228)) (= (or $x227 (or (not (>= 0 0)) $x249)) $x228)))) -(let ((@x208 (mp ((_ quant-inst 0) (or $x227 (or (not (>= 0 0)) $x249))) @x571 $x228))) -(let ((@x323 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x249) $x502)) (unit-resolution @x208 @x618 $x249) $x502))) -(let (($x487 (not $x499))) -(let (($x477 (or $x227 $x487 $x492))) -(let (($x497 (= ?x496 ?x522))) -(let (($x509 (>= ?x522 0))) -(let (($x510 (not $x509))) -(let (($x498 (or $x510 $x497))) -(let (($x478 (or $x227 $x498))) -(let ((@x476 (monotonicity (monotonicity (rewrite (= $x509 $x499)) (= $x510 $x487)) (rewrite (= $x497 $x492)) (= $x498 (or $x487 $x492))))) -(let ((@x486 (trans (monotonicity @x476 (= $x478 (or $x227 (or $x487 $x492)))) (rewrite (= (or $x227 (or $x487 $x492)) $x477)) (= $x478 $x477)))) -(let ((@x464 (mp ((_ quant-inst (+ 1 ?x577)) $x478) @x486 $x477))) -(let ((@x304 (unit-resolution @x464 @x618 (unit-resolution ((_ th-lemma arith farkas 1 1) (or (not $x502) $x499)) @x323 $x499) $x492))) -(let (($x466 (>= ?x491 1))) -(let (($x504 (<= ?x577 0))) -(let ((@x298 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x249) $x504)) (unit-resolution @x208 @x618 $x249) $x504))) -(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)))) -(let ((@x294 (trans (monotonicity (symm @x300 (= 1 ?x496)) (= ?x69 ?x373)) (unit-resolution @x381 @x611 $x375) (= ?x69 ?x523)))) -(let ((@x273 (trans @x294 (symm (unit-resolution @x514 @x156 $x512) (= ?x523 ?x263)) (= ?x69 ?x263)))) -(let ((@x279 (symm (monotonicity @x273 @x316 (= ?x76 (cons$ ?x263 ?x264))) (= (cons$ ?x263 ?x264) ?x76)))) -(let ((?x265 (cons$ ?x263 ?x264))) -(let (($x266 (= ?x72 ?x265))) -(let (($x237 (or $x582 $x266))) -(let ((@x367 ((_ quant-inst uu$ (nat$ 0) (cons$ ?x69 nil$)) $x237))) -(let (($x78 (not $x77))) -(let ((@x79 (asserted $x78))) -(unit-resolution @x79 (trans (unit-resolution @x367 @x603 $x266) @x279 $x77) false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(let ((@x53 (quant-intro (rewrite (= (= (fun_app$ uu$ ?0) (+ 1 ?0)) $x47)) (= $x42 $x51)))) +(let ((?x29 (fun_app$ uu$ ?0))) +(let (($x39 (= ?x29 (+ 1 ?0)))) +(let ((@x41 (monotonicity (rewrite (= (+ ?0 1) (+ 1 ?0))) (= (= ?x29 (+ ?0 1)) $x39)))) +(let ((@x56 (mp (asserted $x34) (trans (quant-intro @x41 (= $x34 $x42)) @x53 (= $x34 $x51)) $x51))) +(let ((@x85 (mp~ @x56 (nnf-pos (refl (~ $x47 $x47)) (~ $x51 $x51)) $x51))) +(let (($x145 (not $x51))) +(let (($x499 (or $x145 $x136))) +(let ((@x498 (rewrite (= (= (+ 1 (* (- 1) ?x188)) (- 1)) $x136)))) +(let ((@x204 (monotonicity @x498 (= (or $x145 (= (+ 1 (* (- 1) ?x188)) (- 1))) $x499)))) +(let ((@x207 (trans @x204 (rewrite (= $x499 $x499)) (= (or $x145 (= (+ 1 (* (- 1) ?x188)) (- 1))) $x499)))) +(let ((@x104 (mp ((_ quant-inst 1) (or $x145 (= (+ 1 (* (- 1) ?x188)) (- 1)))) @x207 $x499))) +(let ((@x191 (monotonicity (symm (unit-resolution @x104 @x85 $x136) (= 2 ?x188)) (symm (unit-resolution @x496 @x518 $x492) (= nil$ ?x189)) (= ?x78 ?x160)))) +(let ((@x473 (trans @x191 (symm (unit-resolution @x506 @x526 $x290) (= ?x160 ?x185)) (= ?x78 ?x185)))) +(let ((?x182 (fun_app$ uu$ 0))) +(let (($x163 (= ?x182 1))) +(let (($x487 (or $x145 $x163))) +(let ((@x501 (monotonicity (rewrite (= (+ 0 (* (- 1) ?x182)) (* (- 1) ?x182))) (= (= (+ 0 (* (- 1) ?x182)) (- 1)) (= (* (- 1) ?x182) (- 1)))))) +(let ((@x503 (trans @x501 (rewrite (= (= (* (- 1) ?x182) (- 1)) $x163)) (= (= (+ 0 (* (- 1) ?x182)) (- 1)) $x163)))) +(let ((@x151 (monotonicity @x503 (= (or $x145 (= (+ 0 (* (- 1) ?x182)) (- 1))) $x487)))) +(let ((@x490 (trans @x151 (rewrite (= $x487 $x487)) (= (or $x145 (= (+ 0 (* (- 1) ?x182)) (- 1))) $x487)))) +(let ((@x491 (mp ((_ quant-inst 0) (or $x145 (= (+ 0 (* (- 1) ?x182)) (- 1)))) @x490 $x487))) +(let ((@x478 (monotonicity (symm (unit-resolution @x491 @x85 $x163) (= 1 ?x182)) @x473 (= ?x79 (cons$ ?x182 ?x185))))) +(let ((?x186 (cons$ ?x182 ?x185))) +(let (($x187 (= ?x76 ?x186))) +(let (($x504 (or (not $x521) $x187))) +(let ((@x505 ((_ quant-inst uu$ 0 (cons$ 1 nil$)) $x504))) +(let ((@x466 (trans (unit-resolution @x505 @x526 $x187) (symm @x478 (= ?x186 ?x79)) $x80))) +(let (($x81 (not $x80))) +(let ((@x82 (asserted $x81))) +(unit-resolution @x82 @x466 false)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) 40c61a0200976d6203302a7343af5b7ad1e6ce36 11 0 unsat @@ -5044,533 +4094,452 @@ (let ((@x42 (trans (monotonicity (rewrite (= $x31 true)) (= $x32 (not true))) (rewrite (= (not true) false)) (= $x32 false)))) (mp (asserted $x32) @x42 false)))))))) -825fdd8f086b9606c3db6feacf7565b92faf5ae2 190 0 +f17a5e4d5f1a5a93fbc847f858c7c845c29d8349 109 0 unsat ((set-logic AUFLIA) (proof -(let ((?x87 (nat$ 6))) -(let ((?x80 (nat$ 4))) -(let ((?x81 (dec_10$ ?x80))) -(let ((?x82 (of_nat$ ?x81))) -(let ((?x83 (* 4 ?x82))) -(let ((?x84 (nat$ ?x83))) -(let ((?x85 (dec_10$ ?x84))) -(let (($x88 (= ?x85 ?x87))) -(let ((?x461 (dec_10$ ?x87))) -(let (($x421 (= ?x461 ?x87))) -(let ((?x487 (of_nat$ ?x87))) -(let ((?x464 (+ (- 10) ?x487))) -(let ((?x447 (nat$ ?x464))) -(let ((?x389 (dec_10$ ?x447))) -(let (($x448 (= ?x461 ?x389))) -(let (($x460 (>= ?x487 10))) -(let (($x449 (ite $x460 $x448 $x421))) -(let (($x602 (forall ((?v0 Nat$) )(!(let ((?x29 (of_nat$ ?v0))) -(let (($x60 (>= ?x29 10))) -(ite $x60 (= (dec_10$ ?v0) (dec_10$ (nat$ (+ (- 10) ?x29)))) (= (dec_10$ ?v0) ?v0)))) :pattern ( (of_nat$ ?v0) ) :pattern ( (dec_10$ ?v0) ))) +(let ((?x75 (dec_10$ 4))) +(let ((?x76 (* 4 ?x75))) +(let ((?x77 (dec_10$ ?x76))) +(let (($x79 (= ?x77 6))) +(let (($x150 (<= ?x75 4))) +(let (($x174 (= ?x75 4))) +(let (($x513 (forall ((?v0 Int) )(!(let (($x55 (>= ?v0 10))) +(ite $x55 (= (dec_10$ ?v0) (dec_10$ (+ (- 10) ?v0))) (= (dec_10$ ?v0) ?v0))) :pattern ( (dec_10$ ?v0) ))) )) -(let (($x180 (forall ((?v0 Nat$) )(let ((?x29 (of_nat$ ?v0))) -(let (($x60 (>= ?x29 10))) -(ite $x60 (= (dec_10$ ?v0) (dec_10$ (nat$ (+ (- 10) ?x29)))) (= (dec_10$ ?v0) ?v0))))) +(let (($x92 (forall ((?v0 Int) )(let (($x55 (>= ?v0 10))) +(ite $x55 (= (dec_10$ ?v0) (dec_10$ (+ (- 10) ?v0))) (= (dec_10$ ?v0) ?v0)))) )) -(let ((?x29 (of_nat$ ?0))) -(let (($x60 (>= ?x29 10))) -(let (($x177 (ite $x60 (= (dec_10$ ?0) (dec_10$ (nat$ (+ (- 10) ?x29)))) (= (dec_10$ ?0) ?0)))) -(let (($x73 (forall ((?v0 Nat$) )(let ((?x46 (dec_10$ (nat$ (+ (- 10) (of_nat$ ?v0)))))) -(let ((?x29 (of_nat$ ?v0))) -(let (($x60 (>= ?x29 10))) -(let ((?x65 (ite $x60 ?x46 ?v0))) -(let ((?x28 (dec_10$ ?v0))) -(= ?x28 ?x65))))))) -)) -(let ((?x46 (dec_10$ (nat$ (+ (- 10) ?x29))))) -(let ((?x65 (ite $x60 ?x46 ?0))) -(let ((?x28 (dec_10$ ?0))) -(let (($x70 (= ?x28 ?x65))) -(let (($x37 (forall ((?v0 Nat$) )(let ((?x29 (of_nat$ ?v0))) -(let (($x31 (< ?x29 10))) +(let (($x55 (>= ?0 10))) +(let (($x87 (ite $x55 (= (dec_10$ ?0) (dec_10$ (+ (- 10) ?0))) (= (dec_10$ ?0) ?0)))) +(let (($x68 (forall ((?v0 Int) )(let ((?x38 (+ (- 10) ?v0))) +(let ((?x41 (dec_10$ ?x38))) +(let (($x55 (>= ?v0 10))) +(let ((?x60 (ite $x55 ?x41 ?v0))) (let ((?x28 (dec_10$ ?v0))) -(= ?x28 (ite $x31 ?v0 (dec_10$ (nat$ (- ?x29 10))))))))) -)) -(let (($x55 (forall ((?v0 Nat$) )(let ((?x46 (dec_10$ (nat$ (+ (- 10) (of_nat$ ?v0)))))) -(let ((?x29 (of_nat$ ?v0))) -(let (($x31 (< ?x29 10))) -(let ((?x49 (ite $x31 ?v0 ?x46))) -(let ((?x28 (dec_10$ ?v0))) -(= ?x28 ?x49))))))) +(= ?x28 ?x60))))))) )) -(let ((@x64 (monotonicity (rewrite (= (< ?x29 10) (not $x60))) (= (ite (< ?x29 10) ?0 ?x46) (ite (not $x60) ?0 ?x46))))) -(let ((@x69 (trans @x64 (rewrite (= (ite (not $x60) ?0 ?x46) ?x65)) (= (ite (< ?x29 10) ?0 ?x46) ?x65)))) -(let ((@x72 (monotonicity @x69 (= (= ?x28 (ite (< ?x29 10) ?0 ?x46)) $x70)))) -(let (($x31 (< ?x29 10))) -(let ((?x49 (ite $x31 ?0 ?x46))) -(let (($x52 (= ?x28 ?x49))) -(let ((@x45 (monotonicity (rewrite (= (- ?x29 10) (+ (- 10) ?x29))) (= (nat$ (- ?x29 10)) (nat$ (+ (- 10) ?x29)))))) -(let ((@x51 (monotonicity (monotonicity @x45 (= (dec_10$ (nat$ (- ?x29 10))) ?x46)) (= (ite $x31 ?0 (dec_10$ (nat$ (- ?x29 10)))) ?x49)))) -(let ((@x54 (monotonicity @x51 (= (= ?x28 (ite $x31 ?0 (dec_10$ (nat$ (- ?x29 10))))) $x52)))) -(let ((@x77 (trans (quant-intro @x54 (= $x37 $x55)) (quant-intro @x72 (= $x55 $x73)) (= $x37 $x73)))) -(let ((@x161 (mp~ (mp (asserted $x37) @x77 $x73) (nnf-pos (refl (~ $x70 $x70)) (~ $x73 $x73)) $x73))) -(let ((@x183 (mp @x161 (quant-intro (rewrite (= $x70 $x177)) (= $x73 $x180)) $x180))) -(let ((@x607 (mp @x183 (quant-intro (refl (= $x177 $x177)) (= $x180 $x602)) $x602))) -(let (($x256 (not $x602))) -(let (($x452 (or $x256 $x449))) -(let ((@x420 ((_ quant-inst (nat$ 6)) $x452))) -(let (($x385 (not $x460))) -(let (($x450 (<= ?x487 6))) -(let (($x488 (= ?x487 6))) -(let (($x616 (forall ((?v0 Int) )(!(let ((?x97 (nat$ ?v0))) -(let ((?x98 (of_nat$ ?x97))) -(let (($x99 (= ?x98 ?v0))) -(let (($x112 (>= ?v0 0))) -(let (($x113 (not $x112))) -(or $x113 $x99)))))) :pattern ( (nat$ ?v0) ))) +(let ((?x38 (+ (- 10) ?0))) +(let ((?x41 (dec_10$ ?x38))) +(let ((?x60 (ite $x55 ?x41 ?0))) +(let ((?x28 (dec_10$ ?0))) +(let (($x65 (= ?x28 ?x60))) +(let (($x35 (forall ((?v0 Int) )(let ((?x28 (dec_10$ ?v0))) +(= ?x28 (ite (< ?v0 10) ?v0 (dec_10$ (- ?v0 10)))))) )) -(let (($x119 (forall ((?v0 Int) )(let ((?x97 (nat$ ?v0))) -(let ((?x98 (of_nat$ ?x97))) -(let (($x99 (= ?x98 ?v0))) -(let (($x112 (>= ?v0 0))) -(let (($x113 (not $x112))) -(or $x113 $x99))))))) +(let (($x50 (forall ((?v0 Int) )(let ((?x38 (+ (- 10) ?v0))) +(let ((?x41 (dec_10$ ?x38))) +(let (($x30 (< ?v0 10))) +(let ((?x44 (ite $x30 ?v0 ?x41))) +(let ((?x28 (dec_10$ ?v0))) +(= ?x28 ?x44))))))) )) -(let ((?x97 (nat$ ?0))) -(let ((?x98 (of_nat$ ?x97))) -(let (($x99 (= ?x98 ?0))) -(let (($x112 (>= ?0 0))) -(let (($x113 (not $x112))) -(let (($x116 (or $x113 $x99))) -(let (($x101 (forall ((?v0 Int) )(let ((?x97 (nat$ ?v0))) -(let ((?x98 (of_nat$ ?x97))) -(let (($x99 (= ?x98 ?v0))) -(let (($x96 (<= 0 ?v0))) -(=> $x96 $x99)))))) -)) -(let (($x107 (forall ((?v0 Int) )(let ((?x97 (nat$ ?v0))) -(let ((?x98 (of_nat$ ?x97))) -(let (($x99 (= ?x98 ?v0))) -(or (not (<= 0 ?v0)) $x99))))) -)) -(let ((@x115 (monotonicity (rewrite (= (<= 0 ?0) $x112)) (= (not (<= 0 ?0)) $x113)))) -(let ((@x121 (quant-intro (monotonicity @x115 (= (or (not (<= 0 ?0)) $x99) $x116)) (= $x107 $x119)))) -(let ((@x106 (rewrite (= (=> (<= 0 ?0) $x99) (or (not (<= 0 ?0)) $x99))))) -(let ((@x124 (mp (asserted $x101) (trans (quant-intro @x106 (= $x101 $x107)) @x121 (= $x101 $x119)) $x119))) -(let ((@x621 (mp (mp~ @x124 (nnf-pos (refl (~ $x116 $x116)) (~ $x119 $x119)) $x119) (quant-intro (refl (= $x116 $x116)) (= $x119 $x616)) $x616))) -(let (($x544 (not $x616))) -(let (($x480 (or $x544 $x488))) -(let ((@x491 (rewrite (= (>= 6 0) true)))) -(let ((@x495 (trans (monotonicity @x491 (= (not (>= 6 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 6 0)) false)))) -(let ((@x475 (monotonicity @x495 (= (or (not (>= 6 0)) $x488) (or false $x488))))) -(let ((@x479 (trans @x475 (rewrite (= (or false $x488) $x488)) (= (or (not (>= 6 0)) $x488) $x488)))) -(let ((@x465 (monotonicity @x479 (= (or $x544 (or (not (>= 6 0)) $x488)) $x480)))) -(let ((@x468 (trans @x465 (rewrite (= $x480 $x480)) (= (or $x544 (or (not (>= 6 0)) $x488)) $x480)))) -(let ((@x469 (mp ((_ quant-inst 6) (or $x544 (or (not (>= 6 0)) $x488))) @x468 $x480))) -(let ((@x415 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x488) $x450)) (unit-resolution @x469 @x621 $x488) $x450))) -(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))) -(let ((?x251 (of_nat$ ?x80))) -(let ((?x454 (* (- 1) ?x251))) -(let ((?x455 (+ ?x82 ?x454))) -(let (($x456 (<= ?x455 0))) -(let (($x453 (= ?x82 ?x251))) -(let (($x238 (= ?x81 ?x80))) -(let ((?x233 (+ (- 10) ?x251))) -(let ((?x575 (nat$ ?x233))) -(let ((?x236 (dec_10$ ?x575))) -(let (($x237 (= ?x81 ?x236))) -(let (($x252 (>= ?x251 10))) -(let (($x239 (ite $x252 $x237 $x238))) -(let (($x578 (or $x256 $x239))) -(let ((@x579 ((_ quant-inst (nat$ 4)) $x578))) -(let (($x581 (not $x252))) -(let (($x380 (<= ?x251 4))) -(let (($x563 (= ?x251 4))) -(let (($x545 (or $x544 $x563))) -(let ((@x566 (rewrite (= (>= 4 0) true)))) -(let ((@x558 (trans (monotonicity @x566 (= (not (>= 4 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 4 0)) false)))) -(let ((@x398 (monotonicity @x558 (= (or (not (>= 4 0)) $x563) (or false $x563))))) -(let ((@x543 (trans @x398 (rewrite (= (or false $x563) $x563)) (= (or (not (>= 4 0)) $x563) $x563)))) -(let ((@x549 (monotonicity @x543 (= (or $x544 (or (not (>= 4 0)) $x563)) $x545)))) -(let ((@x377 (trans @x549 (rewrite (= $x545 $x545)) (= (or $x544 (or (not (>= 4 0)) $x563)) $x545)))) -(let ((@x379 (mp ((_ quant-inst 4) (or $x544 (or (not (>= 4 0)) $x563))) @x377 $x545))) -(let ((@x393 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x563) $x380)) (unit-resolution @x379 @x621 $x563) $x380))) -(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))) -(let ((@x215 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x453) $x456)) (monotonicity @x367 $x453) $x456))) -(let (($x457 (>= ?x455 0))) -(let ((@x376 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x453) $x457)) (monotonicity @x367 $x453) $x457))) -(let (($x536 (>= ?x251 4))) -(let ((@x362 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x563) $x536)) (unit-resolution @x379 @x621 $x563) $x536))) -(let ((?x576 (of_nat$ ?x84))) -(let ((?x439 (* (- 1) ?x576))) -(let ((?x440 (+ ?x83 ?x439))) -(let (($x517 (<= ?x440 0))) -(let (($x438 (= ?x440 0))) -(let (($x532 (>= ?x82 0))) -(let ((@x354 (unit-resolution ((_ th-lemma arith assign-bounds 1 1) (or $x532 (not $x536) (not $x457))) @x362 @x376 $x532))) -(let (($x434 (not $x532))) -(let (($x533 (or $x434 $x438))) -(let (($x522 (or $x544 $x434 $x438))) -(let (($x530 (= ?x576 ?x83))) -(let (($x529 (>= ?x83 0))) -(let (($x433 (not $x529))) -(let (($x531 (or $x433 $x530))) -(let (($x523 (or $x544 $x531))) -(let ((@x535 (monotonicity (monotonicity (rewrite (= $x529 $x532)) (= $x433 $x434)) (rewrite (= $x530 $x438)) (= $x531 $x533)))) -(let ((@x528 (trans (monotonicity @x535 (= $x523 (or $x544 $x533))) (rewrite (= (or $x544 $x533) $x522)) (= $x523 $x522)))) -(let ((@x516 (mp ((_ quant-inst (* 4 ?x82)) $x523) @x528 $x522))) -(let ((@x351 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x438) $x517)) (unit-resolution (unit-resolution @x516 @x621 $x533) @x354 $x438) $x517))) -(let (($x518 (>= ?x440 0))) -(let ((@x345 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x438) $x518)) (unit-resolution (unit-resolution @x516 @x621 $x533) @x354 $x438) $x518))) -(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)))) -(let ((?x574 (+ (- 10) ?x576))) -(let ((?x278 (nat$ ?x574))) -(let ((?x292 (dec_10$ ?x278))) -(let (($x293 (= ?x85 ?x292))) -(let (($x294 (= ?x85 ?x84))) -(let (($x577 (>= ?x576 10))) -(let (($x295 (ite $x577 $x293 $x294))) -(let (($x568 (or $x256 $x295))) -(let ((@x299 ((_ quant-inst (nat$ ?x83)) $x568))) -(let ((@x336 (unit-resolution ((_ th-lemma arith assign-bounds 1 4 4) (or $x577 (not $x517) (not $x536) (not $x457))) @x362 @x351 @x376 $x577))) -(let ((@x337 (unit-resolution (def-axiom (or (not $x295) (not $x577) $x293)) @x336 (unit-resolution @x299 @x607 $x295) $x293))) -(let ((@x323 (trans (trans @x337 (monotonicity @x349 (= ?x292 ?x461)) (= ?x85 ?x461)) @x386 $x88))) -(let (($x89 (not $x88))) -(let ((@x90 (asserted $x89))) -(unit-resolution @x90 @x323 false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(let ((@x59 (monotonicity (rewrite (= (< ?0 10) (not $x55))) (= (ite (< ?0 10) ?0 ?x41) (ite (not $x55) ?0 ?x41))))) +(let ((@x64 (trans @x59 (rewrite (= (ite (not $x55) ?0 ?x41) ?x60)) (= (ite (< ?0 10) ?0 ?x41) ?x60)))) +(let ((@x67 (monotonicity @x64 (= (= ?x28 (ite (< ?0 10) ?0 ?x41)) $x65)))) +(let (($x30 (< ?0 10))) +(let ((?x44 (ite $x30 ?0 ?x41))) +(let (($x47 (= ?x28 ?x44))) +(let ((@x43 (monotonicity (rewrite (= (- ?0 10) ?x38)) (= (dec_10$ (- ?0 10)) ?x41)))) +(let ((@x49 (monotonicity (monotonicity @x43 (= (ite $x30 ?0 (dec_10$ (- ?0 10))) ?x44)) (= (= ?x28 (ite $x30 ?0 (dec_10$ (- ?0 10)))) $x47)))) +(let ((@x72 (trans (quant-intro @x49 (= $x35 $x50)) (quant-intro @x67 (= $x50 $x68)) (= $x35 $x68)))) +(let ((@x86 (mp~ (mp (asserted $x35) @x72 $x68) (nnf-pos (refl (~ $x65 $x65)) (~ $x68 $x68)) $x68))) +(let ((@x95 (mp @x86 (quant-intro (rewrite (= $x65 $x87)) (= $x68 $x92)) $x92))) +(let ((@x518 (mp @x95 (quant-intro (refl (= $x87 $x87)) (= $x92 $x513)) $x513))) +(let (($x501 (not $x513))) +(let (($x163 (or $x501 $x174))) +(let ((?x97 (+ (- 10) 4))) +(let ((?x183 (dec_10$ ?x97))) +(let (($x184 (= ?x75 ?x183))) +(let (($x96 (>= 4 10))) +(let (($x185 (ite $x96 $x184 $x174))) +(let ((@x172 (monotonicity (monotonicity (rewrite (= ?x97 (- 6))) (= ?x183 (dec_10$ (- 6)))) (= $x184 (= ?x75 (dec_10$ (- 6))))))) +(let ((@x507 (monotonicity (rewrite (= $x96 false)) @x172 (= $x185 (ite false (= ?x75 (dec_10$ (- 6))) $x174))))) +(let ((@x511 (trans @x507 (rewrite (= (ite false (= ?x75 (dec_10$ (- 6))) $x174) $x174)) (= $x185 $x174)))) +(let ((@x148 (trans (monotonicity @x511 (= (or $x501 $x185) $x163)) (rewrite (= $x163 $x163)) (= (or $x501 $x185) $x163)))) +(let ((@x149 (mp ((_ quant-inst 4) (or $x501 $x185)) @x148 $x163))) +(let ((@x438 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x174) $x150)) (unit-resolution @x149 @x518 $x174) $x150))) +(let (($x151 (>= ?x75 4))) +(let ((@x428 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x174) $x151)) (unit-resolution @x149 @x518 $x174) $x151))) +(let ((?x489 (+ (- 10) ?x76))) +(let ((?x490 (dec_10$ ?x489))) +(let ((?x448 (* (- 1) ?x490))) +(let ((?x449 (+ ?x76 ?x448))) +(let (($x444 (<= ?x449 10))) +(let (($x292 (= ?x449 10))) +(let ((?x455 (+ (- 20) ?x76))) +(let ((?x458 (dec_10$ ?x455))) +(let (($x461 (= ?x490 ?x458))) +(let (($x310 (>= ?x75 5))) +(let (($x450 (ite $x310 $x461 $x292))) +(let (($x453 (or $x501 $x450))) +(let (($x470 (= ?x490 ?x489))) +(let ((?x467 (+ (- 10) ?x489))) +(let ((?x468 (dec_10$ ?x467))) +(let (($x469 (= ?x490 ?x468))) +(let (($x466 (>= ?x489 10))) +(let (($x471 (ite $x466 $x469 $x470))) +(let ((@x463 (monotonicity (monotonicity (rewrite (= ?x467 ?x455)) (= ?x468 ?x458)) (= $x469 $x461)))) +(let ((@x452 (monotonicity (rewrite (= $x466 $x310)) @x463 (rewrite (= $x470 $x292)) (= $x471 $x450)))) +(let ((@x442 (trans (monotonicity @x452 (= (or $x501 $x471) $x453)) (rewrite (= $x453 $x453)) (= (or $x501 $x471) $x453)))) +(let ((@x443 (mp ((_ quant-inst (+ (- 10) ?x76)) (or $x501 $x471)) @x442 $x453))) +(let (($x346 (not $x310))) +(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)))) +(let ((@x422 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x292) $x444)) (unit-resolution @x418 (unit-resolution @x443 @x518 $x450) $x292) $x444))) +(let (($x336 (>= ?x449 10))) +(let ((@x410 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x292) $x336)) (unit-resolution @x418 (unit-resolution @x443 @x518 $x450) $x292) $x336))) +(let (($x491 (= ?x77 ?x490))) +(let ((?x499 (* (- 1) ?x77))) +(let ((?x485 (+ ?x76 ?x499))) +(let (($x497 (= ?x485 0))) +(let (($x131 (>= ?x75 3))) +(let (($x486 (ite $x131 $x491 $x497))) +(let (($x205 (or $x501 $x486))) +(let ((@x204 (monotonicity (rewrite (= (>= ?x76 10) $x131)) (rewrite (= (= ?x77 ?x76) $x497)) (= (ite (>= ?x76 10) $x491 (= ?x77 ?x76)) $x486)))) +(let ((@x479 (monotonicity @x204 (= (or $x501 (ite (>= ?x76 10) $x491 (= ?x77 ?x76))) $x205)))) +(let ((@x212 (trans @x479 (rewrite (= $x205 $x205)) (= (or $x501 (ite (>= ?x76 10) $x491 (= ?x77 ?x76))) $x205)))) +(let ((@x481 (mp ((_ quant-inst (* 4 ?x75)) (or $x501 (ite (>= ?x76 10) $x491 (= ?x77 ?x76)))) @x212 $x205))) +(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))) +(let (($x80 (not $x79))) +(let ((@x81 (asserted $x80))) +(unit-resolution @x81 (trans @x397 ((_ th-lemma arith eq-propagate 1 1 -4 -4) @x410 @x422 @x428 @x438 (= ?x490 6)) $x79) false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) -f8d23ebbeac7f77a32b969922f558052d0057659 336 0 +fa62bf7228a50eb8c663092f87f9af7c25feaffe 336 0 unsat ((set-logic ) (proof -(let ((?x102 (mod$ l$ 2))) -(let ((?x99 (map$ uu$ xs$))) -(let ((?x100 (eval_dioph$ ks$ ?x99))) -(let ((?x101 (mod$ ?x100 2))) -(let (($x103 (= ?x101 ?x102))) -(let ((?x96 (eval_dioph$ ks$ xs$))) -(let (($x98 (= ?x96 l$))) -(let ((?x113 (* (- 1) ?x100))) -(let ((?x114 (+ l$ ?x113))) -(let ((?x117 (div$ ?x114 2))) -(let ((?x104 (map$ uua$ xs$))) -(let ((?x105 (eval_dioph$ ks$ ?x104))) -(let (($x120 (= ?x105 ?x117))) -(let (($x364 (not $x120))) -(let (($x363 (not $x103))) -(let (($x365 (or $x363 $x364))) -(let ((?x849 (div ?x96 2))) -(let ((?x1076 (* (- 1) ?x849))) -(let ((?x804 (mod ?x96 2))) -(let ((?x831 (* (- 1) ?x804))) -(let ((?x621 (mod l$ 2))) -(let ((?x648 (* (- 1) ?x621))) -(let (($x1078 (>= (+ l$ ?x102 ?x648 (* (- 1) (div l$ 2)) ?x831 ?x1076) 1))) -(let ((?x475 (* (- 1) l$))) -(let ((?x798 (+ ?x96 ?x475))) -(let (($x800 (>= ?x798 0))) -(let (($x874 (not $x800))) -(let (($x799 (<= ?x798 0))) -(let ((?x791 (+ ?x105 (* (- 1) ?x117)))) -(let (($x792 (<= ?x791 0))) -(let (($x366 (not $x365))) -(let ((@x583 (hypothesis $x366))) -(let ((@x577 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x364 $x792)) (unit-resolution (def-axiom (or $x365 $x120)) @x583 $x120) $x792))) -(let ((?x542 (+ l$ ?x113 (* (- 2) (div ?x114 2)) (* (- 1) (mod (+ l$ ?x100) 2))))) -(let (($x548 (>= ?x542 0))) -(let (($x539 (= ?x542 0))) +(let ((?x99 (mod$ l$ 2))) +(let ((?x96 (map$ uu$ xs$))) +(let ((?x97 (eval_dioph$ ks$ ?x96))) +(let ((?x98 (mod$ ?x97 2))) +(let (($x100 (= ?x98 ?x99))) +(let ((?x93 (eval_dioph$ ks$ xs$))) +(let (($x95 (= ?x93 l$))) +(let ((?x110 (* (- 1) ?x97))) +(let ((?x111 (+ l$ ?x110))) +(let ((?x114 (div$ ?x111 2))) +(let ((?x101 (map$ uua$ xs$))) +(let ((?x102 (eval_dioph$ ks$ ?x101))) +(let (($x117 (= ?x102 ?x114))) +(let (($x282 (not $x117))) +(let (($x281 (not $x100))) +(let (($x283 (or $x281 $x282))) +(let ((?x744 (div ?x93 2))) +(let ((?x970 (* (- 1) ?x744))) +(let ((?x699 (mod ?x93 2))) +(let ((?x726 (* (- 1) ?x699))) +(let ((?x516 (mod l$ 2))) +(let ((?x543 (* (- 1) ?x516))) +(let (($x972 (>= (+ l$ ?x99 ?x543 (* (- 1) (div l$ 2)) ?x726 ?x970) 1))) +(let ((?x369 (* (- 1) l$))) +(let ((?x693 (+ ?x93 ?x369))) +(let (($x695 (>= ?x693 0))) +(let (($x857 (not $x695))) +(let (($x694 (<= ?x693 0))) +(let ((?x686 (+ ?x102 (* (- 1) ?x114)))) +(let (($x687 (<= ?x686 0))) +(let (($x284 (not $x283))) +(let ((@x837 (hypothesis $x284))) +(let ((@x591 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x282 $x687)) (unit-resolution (def-axiom (or $x283 $x117)) @x837 $x117) $x687))) +(let ((?x437 (+ l$ ?x110 (* (- 2) (div ?x111 2)) (* (- 1) (mod (+ l$ ?x97) 2))))) +(let (($x443 (>= ?x437 0))) +(let (($x434 (= ?x437 0))) (let ((@x26 (true-axiom true))) -(let ((@x898 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x539) $x548)) (unit-resolution ((_ th-lemma arith) (or false $x539)) @x26 $x539) $x548))) -(let ((?x606 (* (- 2) ?x105))) -(let ((?x607 (+ ?x96 ?x113 ?x606))) -(let (($x614 (<= ?x607 0))) -(let (($x608 (= ?x607 0))) -(let (($x386 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(!(let ((?x48 (eval_dioph$ ?v0 ?v1))) -(let ((?x86 (+ ?x48 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1)))))) -(= ?x86 0))) :pattern ( (eval_dioph$ ?v0 (map$ uu$ ?v1)) ) :pattern ( (eval_dioph$ ?v0 (map$ uua$ ?v1)) ))) +(let ((@x793 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x434) $x443)) (unit-resolution ((_ th-lemma arith) (or false $x434)) @x26 $x434) $x443))) +(let ((?x501 (* (- 2) ?x102))) +(let ((?x502 (+ ?x93 ?x110 ?x501))) +(let (($x509 (<= ?x502 0))) +(let (($x503 (= ?x502 0))) +(let (($x304 (forall ((?v0 Int_list$) (?v1 Int_list$) )(!(let ((?x45 (eval_dioph$ ?v0 ?v1))) +(let ((?x83 (+ ?x45 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1)))))) +(= ?x83 0))) :pattern ( (eval_dioph$ ?v0 (map$ uu$ ?v1)) ) :pattern ( (eval_dioph$ ?v0 (map$ uua$ ?v1)) ))) )) -(let (($x88 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(let ((?x48 (eval_dioph$ ?v0 ?v1))) -(let ((?x86 (+ ?x48 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1)))))) -(= ?x86 0)))) +(let (($x85 (forall ((?v0 Int_list$) (?v1 Int_list$) )(let ((?x45 (eval_dioph$ ?v0 ?v1))) +(let ((?x83 (+ ?x45 (* (- 1) (eval_dioph$ ?v0 (map$ uu$ ?v1))) (* (- 2) (eval_dioph$ ?v0 (map$ uua$ ?v1)))))) +(= ?x83 0)))) )) -(let ((?x48 (eval_dioph$ ?1 ?0))) -(let ((?x86 (+ ?x48 (* (- 1) (eval_dioph$ ?1 (map$ uu$ ?0))) (* (- 2) (eval_dioph$ ?1 (map$ uua$ ?0)))))) -(let (($x82 (= ?x86 0))) -(let (($x61 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(let ((?x48 (eval_dioph$ ?v0 ?v1))) -(let ((?x51 (eval_dioph$ ?v0 (map$ uu$ ?v1)))) -(let ((?x59 (+ (* (eval_dioph$ ?v0 (map$ uua$ ?v1)) 2) ?x51))) -(= ?x59 ?x48))))) +(let ((?x45 (eval_dioph$ ?1 ?0))) +(let ((?x83 (+ ?x45 (* (- 1) (eval_dioph$ ?1 (map$ uu$ ?0))) (* (- 2) (eval_dioph$ ?1 (map$ uua$ ?0)))))) +(let (($x79 (= ?x83 0))) +(let (($x58 (forall ((?v0 Int_list$) (?v1 Int_list$) )(let ((?x45 (eval_dioph$ ?v0 ?v1))) +(let ((?x48 (eval_dioph$ ?v0 (map$ uu$ ?v1)))) +(let ((?x56 (+ (* (eval_dioph$ ?v0 (map$ uua$ ?v1)) 2) ?x48))) +(= ?x56 ?x45))))) )) -(let (($x77 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(let ((?x48 (eval_dioph$ ?v0 ?v1))) -(let ((?x57 (eval_dioph$ ?v0 (map$ uua$ ?v1)))) -(let ((?x63 (* 2 ?x57))) -(let ((?x51 (eval_dioph$ ?v0 (map$ uu$ ?v1)))) -(let ((?x69 (+ ?x51 ?x63))) -(= ?x69 ?x48))))))) +(let (($x74 (forall ((?v0 Int_list$) (?v1 Int_list$) )(let ((?x45 (eval_dioph$ ?v0 ?v1))) +(let ((?x54 (eval_dioph$ ?v0 (map$ uua$ ?v1)))) +(let ((?x60 (* 2 ?x54))) +(let ((?x48 (eval_dioph$ ?v0 (map$ uu$ ?v1)))) +(let ((?x66 (+ ?x48 ?x60))) +(= ?x66 ?x45))))))) )) -(let ((?x57 (eval_dioph$ ?1 (map$ uua$ ?0)))) -(let ((?x63 (* 2 ?x57))) -(let ((?x51 (eval_dioph$ ?1 (map$ uu$ ?0)))) -(let ((?x69 (+ ?x51 ?x63))) -(let (($x74 (= ?x69 ?x48))) -(let ((@x68 (monotonicity (rewrite (= (* ?x57 2) ?x63)) (= (+ (* ?x57 2) ?x51) (+ ?x63 ?x51))))) -(let ((@x73 (trans @x68 (rewrite (= (+ ?x63 ?x51) ?x69)) (= (+ (* ?x57 2) ?x51) ?x69)))) -(let ((@x79 (quant-intro (monotonicity @x73 (= (= (+ (* ?x57 2) ?x51) ?x48) $x74)) (= $x61 $x77)))) -(let ((@x92 (trans @x79 (quant-intro (rewrite (= $x74 $x82)) (= $x77 $x88)) (= $x61 $x88)))) -(let ((@x337 (mp~ (mp (asserted $x61) @x92 $x88) (nnf-pos (refl (~ $x82 $x82)) (~ $x88 $x88)) $x88))) -(let ((@x391 (mp @x337 (quant-intro (refl (= $x82 $x82)) (= $x88 $x386)) $x386))) -(let (($x612 (or (not $x386) $x608))) -(let ((@x613 ((_ quant-inst ks$ xs$) $x612))) -(let ((@x905 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x608) $x614)) (unit-resolution @x613 @x391 $x608) $x614))) -(let ((?x502 (+ ?x117 (* (- 1) (div ?x114 2))))) -(let (($x519 (<= ?x502 0))) -(let (($x503 (= ?x502 0))) -(let (($x413 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x212 (div ?v0 ?v1))) -(let ((?x224 (* (- 1) ?v1))) -(let ((?x221 (* (- 1) ?v0))) -(let ((?x227 (div ?x221 ?x224))) -(let (($x242 (<= ?v1 0))) -(let ((?x249 (ite $x242 ?x227 ?x212))) -(let (($x210 (= ?v1 0))) -(let ((?x209 (div$ ?v0 ?v1))) -(= ?x209 (ite $x210 0 ?x249)))))))))) :pattern ( (div$ ?v0 ?v1) ))) +(let ((?x54 (eval_dioph$ ?1 (map$ uua$ ?0)))) +(let ((?x60 (* 2 ?x54))) +(let ((?x48 (eval_dioph$ ?1 (map$ uu$ ?0)))) +(let ((?x66 (+ ?x48 ?x60))) +(let (($x71 (= ?x66 ?x45))) +(let ((@x65 (monotonicity (rewrite (= (* ?x54 2) ?x60)) (= (+ (* ?x54 2) ?x48) (+ ?x60 ?x48))))) +(let ((@x70 (trans @x65 (rewrite (= (+ ?x60 ?x48) ?x66)) (= (+ (* ?x54 2) ?x48) ?x66)))) +(let ((@x76 (quant-intro (monotonicity @x70 (= (= (+ (* ?x54 2) ?x48) ?x45) $x71)) (= $x58 $x74)))) +(let ((@x89 (trans @x76 (quant-intro (rewrite (= $x71 $x79)) (= $x74 $x85)) (= $x58 $x85)))) +(let ((@x270 (mp~ (mp (asserted $x58) @x89 $x85) (nnf-pos (refl (~ $x79 $x79)) (~ $x85 $x85)) $x85))) +(let ((@x309 (mp @x270 (quant-intro (refl (= $x79 $x79)) (= $x85 $x304)) $x304))) +(let (($x507 (or (not $x304) $x503))) +(let ((@x508 ((_ quant-inst ks$ xs$) $x507))) +(let ((@x800 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) $x509)) (unit-resolution @x508 @x309 $x503) $x509))) +(let ((?x396 (+ ?x114 (* (- 1) (div ?x111 2))))) +(let (($x413 (<= ?x396 0))) +(let (($x397 (= ?x396 0))) +(let (($x311 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x145 (div ?v0 ?v1))) +(let ((?x157 (* (- 1) ?v1))) +(let ((?x154 (* (- 1) ?v0))) +(let ((?x160 (div ?x154 ?x157))) +(let (($x175 (<= ?v1 0))) +(let ((?x182 (ite $x175 ?x160 ?x145))) +(let (($x143 (= ?v1 0))) +(let ((?x141 (div$ ?v0 ?v1))) +(= ?x141 (ite $x143 0 ?x182)))))))))) :pattern ( (div$ ?v0 ?v1) ))) )) -(let (($x260 (forall ((?v0 Int) (?v1 Int) )(let ((?x212 (div ?v0 ?v1))) -(let ((?x224 (* (- 1) ?v1))) -(let ((?x221 (* (- 1) ?v0))) -(let ((?x227 (div ?x221 ?x224))) -(let (($x242 (<= ?v1 0))) -(let ((?x249 (ite $x242 ?x227 ?x212))) -(let (($x210 (= ?v1 0))) -(let ((?x209 (div$ ?v0 ?v1))) -(= ?x209 (ite $x210 0 ?x249))))))))))) +(let (($x193 (forall ((?v0 Int) (?v1 Int) )(let ((?x145 (div ?v0 ?v1))) +(let ((?x157 (* (- 1) ?v1))) +(let ((?x154 (* (- 1) ?v0))) +(let ((?x160 (div ?x154 ?x157))) +(let (($x175 (<= ?v1 0))) +(let ((?x182 (ite $x175 ?x160 ?x145))) +(let (($x143 (= ?v1 0))) +(let ((?x141 (div$ ?v0 ?v1))) +(= ?x141 (ite $x143 0 ?x182))))))))))) )) -(let ((?x212 (div ?1 ?0))) -(let ((?x224 (* (- 1) ?0))) -(let ((?x221 (* (- 1) ?1))) -(let ((?x227 (div ?x221 ?x224))) -(let (($x242 (<= ?0 0))) -(let ((?x249 (ite $x242 ?x227 ?x212))) -(let (($x210 (= ?0 0))) -(let ((?x209 (div$ ?1 ?0))) -(let (($x257 (= ?x209 (ite $x210 0 ?x249)))) -(let (($x219 (forall ((?v0 Int) (?v1 Int) )(let (($x210 (= ?v1 0))) -(let ((?x217 (ite $x210 0 (ite (< 0 ?v1) (div ?v0 ?v1) (div (- ?v0) (- ?v1)))))) -(let ((?x209 (div$ ?v0 ?v1))) -(= ?x209 ?x217))))) +(let ((?x145 (div ?1 ?0))) +(let ((?x157 (* (- 1) ?0))) +(let ((?x154 (* (- 1) ?1))) +(let ((?x160 (div ?x154 ?x157))) +(let (($x175 (<= ?0 0))) +(let ((?x182 (ite $x175 ?x160 ?x145))) +(let (($x143 (= ?0 0))) +(let ((?x141 (div$ ?1 ?0))) +(let (($x190 (= ?x141 (ite $x143 0 ?x182)))) +(let (($x152 (forall ((?v0 Int) (?v1 Int) )(let (($x143 (= ?v1 0))) +(let ((?x150 (ite $x143 0 (ite (< 0 ?v1) (div ?v0 ?v1) (div (- ?v0) (- ?v1)))))) +(let ((?x141 (div$ ?v0 ?v1))) +(= ?x141 ?x150))))) )) -(let (($x239 (forall ((?v0 Int) (?v1 Int) )(let ((?x224 (* (- 1) ?v1))) -(let ((?x221 (* (- 1) ?v0))) -(let ((?x227 (div ?x221 ?x224))) -(let ((?x212 (div ?v0 ?v1))) -(let (($x211 (< 0 ?v1))) -(let ((?x230 (ite $x211 ?x212 ?x227))) -(let (($x210 (= ?v1 0))) -(let ((?x233 (ite $x210 0 ?x230))) -(let ((?x209 (div$ ?v0 ?v1))) -(= ?x209 ?x233))))))))))) +(let (($x172 (forall ((?v0 Int) (?v1 Int) )(let ((?x157 (* (- 1) ?v1))) +(let ((?x154 (* (- 1) ?v0))) +(let ((?x160 (div ?x154 ?x157))) +(let ((?x145 (div ?v0 ?v1))) +(let (($x144 (< 0 ?v1))) +(let ((?x163 (ite $x144 ?x145 ?x160))) +(let (($x143 (= ?v1 0))) +(let ((?x166 (ite $x143 0 ?x163))) +(let ((?x141 (div$ ?v0 ?v1))) +(= ?x141 ?x166))))))))))) )) -(let (($x211 (< 0 ?0))) -(let ((?x230 (ite $x211 ?x212 ?x227))) -(let ((?x233 (ite $x210 0 ?x230))) -(let ((@x248 (monotonicity (rewrite (= $x211 (not $x242))) (= ?x230 (ite (not $x242) ?x212 ?x227))))) -(let ((@x253 (trans @x248 (rewrite (= (ite (not $x242) ?x212 ?x227) ?x249)) (= ?x230 ?x249)))) -(let ((@x259 (monotonicity (monotonicity @x253 (= ?x233 (ite $x210 0 ?x249))) (= (= ?x209 ?x233) $x257)))) -(let (($x236 (= ?x209 ?x233))) -(let (($x237 (= (= ?x209 (ite $x210 0 (ite $x211 ?x212 (div (- ?1) (- ?0))))) $x236))) -(let ((@x229 (monotonicity (rewrite (= (- ?1) ?x221)) (rewrite (= (- ?0) ?x224)) (= (div (- ?1) (- ?0)) ?x227)))) -(let ((@x235 (monotonicity (monotonicity @x229 (= (ite $x211 ?x212 (div (- ?1) (- ?0))) ?x230)) (= (ite $x210 0 (ite $x211 ?x212 (div (- ?1) (- ?0)))) ?x233)))) -(let ((@x264 (trans (quant-intro (monotonicity @x235 $x237) (= $x219 $x239)) (quant-intro @x259 (= $x239 $x260)) (= $x219 $x260)))) -(let ((@x357 (mp~ (mp (asserted $x219) @x264 $x260) (nnf-pos (refl (~ $x257 $x257)) (~ $x260 $x260)) $x260))) -(let ((@x418 (mp @x357 (quant-intro (refl (= $x257 $x257)) (= $x260 $x413)) $x413))) -(let (($x509 (or (not $x413) $x503))) -(let ((?x467 (div ?x114 2))) -(let (($x463 (<= 2 0))) -(let ((?x468 (ite $x463 (div (* (- 1) ?x114) (* (- 1) 2)) ?x467))) -(let (($x462 (= 2 0))) -(let ((?x469 (ite $x462 0 ?x468))) -(let (($x470 (= ?x117 ?x469))) -(let ((@x480 (rewrite (= (* (- 1) 2) (- 2))))) -(let ((@x483 (monotonicity (rewrite (= (* (- 1) ?x114) (+ ?x475 ?x100))) @x480 (= (div (* (- 1) ?x114) (* (- 1) 2)) (div (+ ?x475 ?x100) (- 2)))))) -(let ((@x474 (rewrite (= $x463 false)))) -(let ((@x486 (monotonicity @x474 @x483 (= ?x468 (ite false (div (+ ?x475 ?x100) (- 2)) ?x467))))) -(let ((@x490 (trans @x486 (rewrite (= (ite false (div (+ ?x475 ?x100) (- 2)) ?x467) ?x467)) (= ?x468 ?x467)))) -(let ((@x472 (rewrite (= $x462 false)))) -(let ((@x497 (trans (monotonicity @x472 @x490 (= ?x469 (ite false 0 ?x467))) (rewrite (= (ite false 0 ?x467) ?x467)) (= ?x469 ?x467)))) -(let ((@x507 (trans (monotonicity @x497 (= $x470 (= ?x117 ?x467))) (rewrite (= (= ?x117 ?x467) $x503)) (= $x470 $x503)))) -(let ((@x516 (trans (monotonicity @x507 (= (or (not $x413) $x470) $x509)) (rewrite (= $x509 $x509)) (= (or (not $x413) $x470) $x509)))) -(let ((@x907 (unit-resolution (mp ((_ quant-inst (+ l$ ?x113) 2) (or (not $x413) $x470)) @x516 $x509) @x418 $x503))) -(let ((?x530 (mod (+ l$ ?x100) 2))) -(let (($x570 (>= ?x530 0))) -(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))) -(let (($x137 (not $x98))) -(let (($x372 (= $x98 $x365))) -(let ((@x371 (monotonicity (rewrite (= (and $x103 $x120) $x366)) (= (= $x137 (and $x103 $x120)) (= $x137 $x366))))) -(let ((@x376 (trans @x371 (rewrite (= (= $x137 $x366) $x372)) (= (= $x137 (and $x103 $x120)) $x372)))) -(let (($x123 (and $x103 $x120))) -(let (($x138 (= $x137 $x123))) -(let (($x110 (= $x98 (and $x103 (= ?x105 (div$ (- l$ ?x100) 2)))))) -(let (($x111 (not $x110))) -(let ((@x119 (monotonicity (rewrite (= (- l$ ?x100) ?x114)) (= (div$ (- l$ ?x100) 2) ?x117)))) -(let ((@x125 (monotonicity (monotonicity @x119 (= (= ?x105 (div$ (- l$ ?x100) 2)) $x120)) (= (and $x103 (= ?x105 (div$ (- l$ ?x100) 2))) $x123)))) -(let ((@x133 (trans (monotonicity @x125 (= $x110 (= $x98 $x123))) (rewrite (= (= $x98 $x123) (= $x98 $x123))) (= $x110 (= $x98 $x123))))) -(let ((@x142 (trans (monotonicity @x133 (= $x111 (not (= $x98 $x123)))) (rewrite (= (not (= $x98 $x123)) $x138)) (= $x111 $x138)))) -(let ((@x377 (mp (mp (asserted $x111) @x142 $x138) @x376 $x372))) -(let ((@x449 (unit-resolution (def-axiom (or $x137 $x365 (not $x372))) @x377 (or $x137 $x365)))) -(let ((@x603 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x98 (not $x799) $x874)) (unit-resolution @x449 @x583 $x137) (or (not $x799) $x874)))) -(let ((@x604 (unit-resolution @x603 (unit-resolution (lemma @x915 (or $x799 (not $x792))) @x577 $x799) $x874))) -(let ((?x649 (+ ?x102 ?x648))) -(let (($x666 (>= ?x649 0))) -(let (($x650 (= ?x649 0))) -(let (($x420 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x267 (mod ?v0 ?v1))) -(let ((?x224 (* (- 1) ?v1))) -(let ((?x221 (* (- 1) ?v0))) -(let ((?x275 (mod ?x221 ?x224))) -(let ((?x281 (* (- 1) ?x275))) -(let (($x242 (<= ?v1 0))) -(let ((?x301 (ite $x242 ?x281 ?x267))) -(let (($x210 (= ?v1 0))) -(let ((?x306 (ite $x210 ?v0 ?x301))) -(let ((?x266 (mod$ ?v0 ?v1))) -(= ?x266 ?x306))))))))))) :pattern ( (mod$ ?v0 ?v1) ))) +(let (($x144 (< 0 ?0))) +(let ((?x163 (ite $x144 ?x145 ?x160))) +(let ((?x166 (ite $x143 0 ?x163))) +(let ((@x181 (monotonicity (rewrite (= $x144 (not $x175))) (= ?x163 (ite (not $x175) ?x145 ?x160))))) +(let ((@x186 (trans @x181 (rewrite (= (ite (not $x175) ?x145 ?x160) ?x182)) (= ?x163 ?x182)))) +(let ((@x192 (monotonicity (monotonicity @x186 (= ?x166 (ite $x143 0 ?x182))) (= (= ?x141 ?x166) $x190)))) +(let (($x169 (= ?x141 ?x166))) +(let (($x170 (= (= ?x141 (ite $x143 0 (ite $x144 ?x145 (div (- ?1) (- ?0))))) $x169))) +(let ((@x162 (monotonicity (rewrite (= (- ?1) ?x154)) (rewrite (= (- ?0) ?x157)) (= (div (- ?1) (- ?0)) ?x160)))) +(let ((@x168 (monotonicity (monotonicity @x162 (= (ite $x144 ?x145 (div (- ?1) (- ?0))) ?x163)) (= (ite $x143 0 (ite $x144 ?x145 (div (- ?1) (- ?0)))) ?x166)))) +(let ((@x197 (trans (quant-intro (monotonicity @x168 $x170) (= $x152 $x172)) (quant-intro @x192 (= $x172 $x193)) (= $x152 $x193)))) +(let ((@x275 (mp~ (mp (asserted $x152) @x197 $x193) (nnf-pos (refl (~ $x190 $x190)) (~ $x193 $x193)) $x193))) +(let ((@x316 (mp @x275 (quant-intro (refl (= $x190 $x190)) (= $x193 $x311)) $x311))) +(let (($x403 (or (not $x311) $x397))) +(let ((?x361 (div ?x111 2))) +(let (($x357 (<= 2 0))) +(let ((?x362 (ite $x357 (div (* (- 1) ?x111) (* (- 1) 2)) ?x361))) +(let (($x356 (= 2 0))) +(let ((?x363 (ite $x356 0 ?x362))) +(let (($x364 (= ?x114 ?x363))) +(let ((@x374 (rewrite (= (* (- 1) 2) (- 2))))) +(let ((@x377 (monotonicity (rewrite (= (* (- 1) ?x111) (+ ?x369 ?x97))) @x374 (= (div (* (- 1) ?x111) (* (- 1) 2)) (div (+ ?x369 ?x97) (- 2)))))) +(let ((@x368 (rewrite (= $x357 false)))) +(let ((@x380 (monotonicity @x368 @x377 (= ?x362 (ite false (div (+ ?x369 ?x97) (- 2)) ?x361))))) +(let ((@x384 (trans @x380 (rewrite (= (ite false (div (+ ?x369 ?x97) (- 2)) ?x361) ?x361)) (= ?x362 ?x361)))) +(let ((@x366 (rewrite (= $x356 false)))) +(let ((@x391 (trans (monotonicity @x366 @x384 (= ?x363 (ite false 0 ?x361))) (rewrite (= (ite false 0 ?x361) ?x361)) (= ?x363 ?x361)))) +(let ((@x401 (trans (monotonicity @x391 (= $x364 (= ?x114 ?x361))) (rewrite (= (= ?x114 ?x361) $x397)) (= $x364 $x397)))) +(let ((@x410 (trans (monotonicity @x401 (= (or (not $x311) $x364) $x403)) (rewrite (= $x403 $x403)) (= (or (not $x311) $x364) $x403)))) +(let ((@x802 (unit-resolution (mp ((_ quant-inst (+ l$ ?x110) 2) (or (not $x311) $x364)) @x410 $x403) @x316 $x397))) +(let ((?x425 (mod (+ l$ ?x97) 2))) +(let (($x465 (>= ?x425 0))) +(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))) +(let (($x134 (not $x95))) +(let (($x290 (= $x95 $x283))) +(let ((@x289 (monotonicity (rewrite (= (and $x100 $x117) $x284)) (= (= $x134 (and $x100 $x117)) (= $x134 $x284))))) +(let ((@x294 (trans @x289 (rewrite (= (= $x134 $x284) $x290)) (= (= $x134 (and $x100 $x117)) $x290)))) +(let (($x120 (and $x100 $x117))) +(let (($x135 (= $x134 $x120))) +(let (($x107 (= $x95 (and $x100 (= ?x102 (div$ (- l$ ?x97) 2)))))) +(let (($x108 (not $x107))) +(let ((@x116 (monotonicity (rewrite (= (- l$ ?x97) ?x111)) (= (div$ (- l$ ?x97) 2) ?x114)))) +(let ((@x122 (monotonicity (monotonicity @x116 (= (= ?x102 (div$ (- l$ ?x97) 2)) $x117)) (= (and $x100 (= ?x102 (div$ (- l$ ?x97) 2))) $x120)))) +(let ((@x130 (trans (monotonicity @x122 (= $x107 (= $x95 $x120))) (rewrite (= (= $x95 $x120) (= $x95 $x120))) (= $x107 (= $x95 $x120))))) +(let ((@x139 (trans (monotonicity @x130 (= $x108 (not (= $x95 $x120)))) (rewrite (= (not (= $x95 $x120)) $x135)) (= $x108 $x135)))) +(let ((@x295 (mp (mp (asserted $x108) @x139 $x135) @x294 $x290))) +(let ((@x344 (unit-resolution (def-axiom (or $x134 $x283 (not $x290))) @x295 (or $x134 $x283)))) +(let ((@x870 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x95 (not $x694) $x857)) (unit-resolution @x344 @x837 $x134) (or (not $x694) $x857)))) +(let ((@x897 (unit-resolution @x870 (unit-resolution (lemma @x810 (or $x694 (not $x687))) @x591 $x694) $x857))) +(let ((?x544 (+ ?x99 ?x543))) +(let (($x561 (>= ?x544 0))) +(let (($x545 (= ?x544 0))) +(let (($x318 (forall ((?v0 Int) (?v1 Int) )(!(let ((?x200 (mod ?v0 ?v1))) +(let ((?x157 (* (- 1) ?v1))) +(let ((?x154 (* (- 1) ?v0))) +(let ((?x208 (mod ?x154 ?x157))) +(let ((?x214 (* (- 1) ?x208))) +(let (($x175 (<= ?v1 0))) +(let ((?x234 (ite $x175 ?x214 ?x200))) +(let (($x143 (= ?v1 0))) +(let ((?x239 (ite $x143 ?v0 ?x234))) +(let ((?x199 (mod$ ?v0 ?v1))) +(= ?x199 ?x239))))))))))) :pattern ( (mod$ ?v0 ?v1) ))) )) -(let (($x312 (forall ((?v0 Int) (?v1 Int) )(let ((?x267 (mod ?v0 ?v1))) -(let ((?x224 (* (- 1) ?v1))) -(let ((?x221 (* (- 1) ?v0))) -(let ((?x275 (mod ?x221 ?x224))) -(let ((?x281 (* (- 1) ?x275))) -(let (($x242 (<= ?v1 0))) -(let ((?x301 (ite $x242 ?x281 ?x267))) -(let (($x210 (= ?v1 0))) -(let ((?x306 (ite $x210 ?v0 ?x301))) -(let ((?x266 (mod$ ?v0 ?v1))) -(= ?x266 ?x306)))))))))))) +(let (($x245 (forall ((?v0 Int) (?v1 Int) )(let ((?x200 (mod ?v0 ?v1))) +(let ((?x157 (* (- 1) ?v1))) +(let ((?x154 (* (- 1) ?v0))) +(let ((?x208 (mod ?x154 ?x157))) +(let ((?x214 (* (- 1) ?x208))) +(let (($x175 (<= ?v1 0))) +(let ((?x234 (ite $x175 ?x214 ?x200))) +(let (($x143 (= ?v1 0))) +(let ((?x239 (ite $x143 ?v0 ?x234))) +(let ((?x199 (mod$ ?v0 ?v1))) +(= ?x199 ?x239)))))))))))) )) -(let ((?x267 (mod ?1 ?0))) -(let ((?x275 (mod ?x221 ?x224))) -(let ((?x281 (* (- 1) ?x275))) -(let ((?x301 (ite $x242 ?x281 ?x267))) -(let ((?x306 (ite $x210 ?1 ?x301))) -(let ((?x266 (mod$ ?1 ?0))) -(let (($x309 (= ?x266 ?x306))) -(let (($x273 (forall ((?v0 Int) (?v1 Int) )(let (($x210 (= ?v1 0))) -(let ((?x271 (ite $x210 ?v0 (ite (< 0 ?v1) (mod ?v0 ?v1) (- (mod (- ?v0) (- ?v1))))))) -(let ((?x266 (mod$ ?v0 ?v1))) -(= ?x266 ?x271))))) +(let ((?x200 (mod ?1 ?0))) +(let ((?x208 (mod ?x154 ?x157))) +(let ((?x214 (* (- 1) ?x208))) +(let ((?x234 (ite $x175 ?x214 ?x200))) +(let ((?x239 (ite $x143 ?1 ?x234))) +(let ((?x199 (mod$ ?1 ?0))) +(let (($x242 (= ?x199 ?x239))) +(let (($x206 (forall ((?v0 Int) (?v1 Int) )(let (($x143 (= ?v1 0))) +(let ((?x204 (ite $x143 ?v0 (ite (< 0 ?v1) (mod ?v0 ?v1) (- (mod (- ?v0) (- ?v1))))))) +(let ((?x199 (mod$ ?v0 ?v1))) +(= ?x199 ?x204))))) )) -(let (($x295 (forall ((?v0 Int) (?v1 Int) )(let ((?x224 (* (- 1) ?v1))) -(let ((?x221 (* (- 1) ?v0))) -(let ((?x275 (mod ?x221 ?x224))) -(let ((?x281 (* (- 1) ?x275))) -(let ((?x267 (mod ?v0 ?v1))) -(let (($x211 (< 0 ?v1))) -(let ((?x286 (ite $x211 ?x267 ?x281))) -(let (($x210 (= ?v1 0))) -(let ((?x289 (ite $x210 ?v0 ?x286))) -(let ((?x266 (mod$ ?v0 ?v1))) -(= ?x266 ?x289)))))))))))) +(let (($x228 (forall ((?v0 Int) (?v1 Int) )(let ((?x157 (* (- 1) ?v1))) +(let ((?x154 (* (- 1) ?v0))) +(let ((?x208 (mod ?x154 ?x157))) +(let ((?x214 (* (- 1) ?x208))) +(let ((?x200 (mod ?v0 ?v1))) +(let (($x144 (< 0 ?v1))) +(let ((?x219 (ite $x144 ?x200 ?x214))) +(let (($x143 (= ?v1 0))) +(let ((?x222 (ite $x143 ?v0 ?x219))) +(let ((?x199 (mod$ ?v0 ?v1))) +(= ?x199 ?x222)))))))))))) )) -(let ((@x300 (monotonicity (rewrite (= $x211 (not $x242))) (= (ite $x211 ?x267 ?x281) (ite (not $x242) ?x267 ?x281))))) -(let ((@x305 (trans @x300 (rewrite (= (ite (not $x242) ?x267 ?x281) ?x301)) (= (ite $x211 ?x267 ?x281) ?x301)))) -(let ((@x311 (monotonicity (monotonicity @x305 (= (ite $x210 ?1 (ite $x211 ?x267 ?x281)) ?x306)) (= (= ?x266 (ite $x210 ?1 (ite $x211 ?x267 ?x281))) $x309)))) -(let ((?x286 (ite $x211 ?x267 ?x281))) -(let ((?x289 (ite $x210 ?1 ?x286))) -(let (($x292 (= ?x266 ?x289))) -(let (($x293 (= (= ?x266 (ite $x210 ?1 (ite $x211 ?x267 (- (mod (- ?1) (- ?0)))))) $x292))) -(let ((@x277 (monotonicity (rewrite (= (- ?1) ?x221)) (rewrite (= (- ?0) ?x224)) (= (mod (- ?1) (- ?0)) ?x275)))) -(let ((@x285 (trans (monotonicity @x277 (= (- (mod (- ?1) (- ?0))) (- ?x275))) (rewrite (= (- ?x275) ?x281)) (= (- (mod (- ?1) (- ?0))) ?x281)))) -(let ((@x288 (monotonicity @x285 (= (ite $x211 ?x267 (- (mod (- ?1) (- ?0)))) ?x286)))) -(let ((@x291 (monotonicity @x288 (= (ite $x210 ?1 (ite $x211 ?x267 (- (mod (- ?1) (- ?0))))) ?x289)))) -(let ((@x316 (trans (quant-intro (monotonicity @x291 $x293) (= $x273 $x295)) (quant-intro @x311 (= $x295 $x312)) (= $x273 $x312)))) -(let ((@x362 (mp~ (mp (asserted $x273) @x316 $x312) (nnf-pos (refl (~ $x309 $x309)) (~ $x312 $x312)) $x312))) -(let ((@x425 (mp @x362 (quant-intro (refl (= $x309 $x309)) (= $x312 $x420)) $x420))) -(let (($x655 (not $x420))) -(let (($x656 (or $x655 $x650))) -(let ((?x465 (* (- 1) 2))) -(let ((?x616 (mod ?x475 ?x465))) -(let ((?x617 (* (- 1) ?x616))) -(let ((?x622 (ite $x463 ?x617 ?x621))) -(let ((?x623 (ite $x462 l$ ?x622))) -(let (($x624 (= ?x102 ?x623))) -(let ((@x630 (monotonicity (monotonicity @x480 (= ?x616 (mod ?x475 (- 2)))) (= ?x617 (* (- 1) (mod ?x475 (- 2))))))) -(let ((@x633 (monotonicity @x474 @x630 (= ?x622 (ite false (* (- 1) (mod ?x475 (- 2))) ?x621))))) -(let ((@x637 (trans @x633 (rewrite (= (ite false (* (- 1) (mod ?x475 (- 2))) ?x621) ?x621)) (= ?x622 ?x621)))) -(let ((@x644 (trans (monotonicity @x472 @x637 (= ?x623 (ite false l$ ?x621))) (rewrite (= (ite false l$ ?x621) ?x621)) (= ?x623 ?x621)))) -(let ((@x654 (trans (monotonicity @x644 (= $x624 (= ?x102 ?x621))) (rewrite (= (= ?x102 ?x621) $x650)) (= $x624 $x650)))) -(let ((@x663 (trans (monotonicity @x654 (= (or $x655 $x624) $x656)) (rewrite (= $x656 $x656)) (= (or $x655 $x624) $x656)))) -(let ((@x664 (mp ((_ quant-inst l$ 2) (or $x655 $x624)) @x663 $x656))) -(let ((@x921 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x650) $x666)) (unit-resolution @x664 @x425 $x650) $x666))) -(let ((?x862 (* (- 2) ?x849))) -(let ((?x863 (+ ?x96 ?x831 ?x862))) -(let (($x869 (>= ?x863 0))) -(let (($x861 (= ?x863 0))) -(let ((@x924 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x861) $x869)) (unit-resolution ((_ th-lemma arith) (or false $x861)) @x26 $x861) $x869))) -(let ((?x667 (div l$ 2))) -(let ((?x680 (* (- 2) ?x667))) -(let ((?x681 (+ l$ ?x648 ?x680))) -(let (($x687 (>= ?x681 0))) -(let (($x679 (= ?x681 0))) -(let ((@x934 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x679) $x687)) (unit-resolution ((_ th-lemma arith) (or false $x679)) @x26 $x679) $x687))) -(let ((?x609 (mod$ ?x96 2))) -(let ((?x832 (+ ?x609 ?x831))) -(let (($x833 (= ?x832 0))) -(let (($x838 (or $x655 $x833))) -(let ((?x801 (* (- 1) ?x96))) -(let ((?x802 (mod ?x801 ?x465))) -(let ((?x803 (* (- 1) ?x802))) -(let ((?x805 (ite $x463 ?x803 ?x804))) -(let ((?x806 (ite $x462 ?x96 ?x805))) -(let (($x807 (= ?x609 ?x806))) -(let ((@x813 (monotonicity (monotonicity @x480 (= ?x802 (mod ?x801 (- 2)))) (= ?x803 (* (- 1) (mod ?x801 (- 2))))))) -(let ((@x816 (monotonicity @x474 @x813 (= ?x805 (ite false (* (- 1) (mod ?x801 (- 2))) ?x804))))) -(let ((@x820 (trans @x816 (rewrite (= (ite false (* (- 1) (mod ?x801 (- 2))) ?x804) ?x804)) (= ?x805 ?x804)))) -(let ((@x827 (trans (monotonicity @x472 @x820 (= ?x806 (ite false ?x96 ?x804))) (rewrite (= (ite false ?x96 ?x804) ?x804)) (= ?x806 ?x804)))) -(let ((@x837 (trans (monotonicity @x827 (= $x807 (= ?x609 ?x804))) (rewrite (= (= ?x609 ?x804) $x833)) (= $x807 $x833)))) -(let ((@x845 (trans (monotonicity @x837 (= (or $x655 $x807) $x838)) (rewrite (= $x838 $x838)) (= (or $x655 $x807) $x838)))) -(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)))) -(let ((?x888 (* (- 1) ?x609))) -(let ((?x889 (+ ?x102 ?x888))) -(let (($x891 (>= ?x889 0))) -(let (($x887 (= ?x102 ?x609))) -(let (($x881 (= ?x101 ?x609))) -(let (($x610 (= ?x609 ?x101))) -(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)) ))) +(let ((@x233 (monotonicity (rewrite (= $x144 (not $x175))) (= (ite $x144 ?x200 ?x214) (ite (not $x175) ?x200 ?x214))))) +(let ((@x238 (trans @x233 (rewrite (= (ite (not $x175) ?x200 ?x214) ?x234)) (= (ite $x144 ?x200 ?x214) ?x234)))) +(let ((@x244 (monotonicity (monotonicity @x238 (= (ite $x143 ?1 (ite $x144 ?x200 ?x214)) ?x239)) (= (= ?x199 (ite $x143 ?1 (ite $x144 ?x200 ?x214))) $x242)))) +(let ((?x219 (ite $x144 ?x200 ?x214))) +(let ((?x222 (ite $x143 ?1 ?x219))) +(let (($x225 (= ?x199 ?x222))) +(let (($x226 (= (= ?x199 (ite $x143 ?1 (ite $x144 ?x200 (- (mod (- ?1) (- ?0)))))) $x225))) +(let ((@x210 (monotonicity (rewrite (= (- ?1) ?x154)) (rewrite (= (- ?0) ?x157)) (= (mod (- ?1) (- ?0)) ?x208)))) +(let ((@x218 (trans (monotonicity @x210 (= (- (mod (- ?1) (- ?0))) (- ?x208))) (rewrite (= (- ?x208) ?x214)) (= (- (mod (- ?1) (- ?0))) ?x214)))) +(let ((@x221 (monotonicity @x218 (= (ite $x144 ?x200 (- (mod (- ?1) (- ?0)))) ?x219)))) +(let ((@x224 (monotonicity @x221 (= (ite $x143 ?1 (ite $x144 ?x200 (- (mod (- ?1) (- ?0))))) ?x222)))) +(let ((@x249 (trans (quant-intro (monotonicity @x224 $x226) (= $x206 $x228)) (quant-intro @x244 (= $x228 $x245)) (= $x206 $x245)))) +(let ((@x280 (mp~ (mp (asserted $x206) @x249 $x245) (nnf-pos (refl (~ $x242 $x242)) (~ $x245 $x245)) $x245))) +(let ((@x323 (mp @x280 (quant-intro (refl (= $x242 $x242)) (= $x245 $x318)) $x318))) +(let (($x550 (not $x318))) +(let (($x551 (or $x550 $x545))) +(let ((?x359 (* (- 1) 2))) +(let ((?x511 (mod ?x369 ?x359))) +(let ((?x512 (* (- 1) ?x511))) +(let ((?x517 (ite $x357 ?x512 ?x516))) +(let ((?x518 (ite $x356 l$ ?x517))) +(let (($x519 (= ?x99 ?x518))) +(let ((@x525 (monotonicity (monotonicity @x374 (= ?x511 (mod ?x369 (- 2)))) (= ?x512 (* (- 1) (mod ?x369 (- 2))))))) +(let ((@x528 (monotonicity @x368 @x525 (= ?x517 (ite false (* (- 1) (mod ?x369 (- 2))) ?x516))))) +(let ((@x532 (trans @x528 (rewrite (= (ite false (* (- 1) (mod ?x369 (- 2))) ?x516) ?x516)) (= ?x517 ?x516)))) +(let ((@x539 (trans (monotonicity @x366 @x532 (= ?x518 (ite false l$ ?x516))) (rewrite (= (ite false l$ ?x516) ?x516)) (= ?x518 ?x516)))) +(let ((@x549 (trans (monotonicity @x539 (= $x519 (= ?x99 ?x516))) (rewrite (= (= ?x99 ?x516) $x545)) (= $x519 $x545)))) +(let ((@x558 (trans (monotonicity @x549 (= (or $x550 $x519) $x551)) (rewrite (= $x551 $x551)) (= (or $x550 $x519) $x551)))) +(let ((@x559 (mp ((_ quant-inst l$ 2) (or $x550 $x519)) @x558 $x551))) +(let ((@x900 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x545) $x561)) (unit-resolution @x559 @x323 $x545) $x561))) +(let ((?x757 (* (- 2) ?x744))) +(let ((?x758 (+ ?x93 ?x726 ?x757))) +(let (($x764 (>= ?x758 0))) +(let (($x756 (= ?x758 0))) +(let ((@x903 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x756) $x764)) (unit-resolution ((_ th-lemma arith) (or false $x756)) @x26 $x756) $x764))) +(let ((?x562 (div l$ 2))) +(let ((?x575 (* (- 2) ?x562))) +(let ((?x576 (+ l$ ?x543 ?x575))) +(let (($x582 (>= ?x576 0))) +(let (($x574 (= ?x576 0))) +(let ((@x906 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x574) $x582)) (unit-resolution ((_ th-lemma arith) (or false $x574)) @x26 $x574) $x582))) +(let ((?x504 (mod$ ?x93 2))) +(let ((?x727 (+ ?x504 ?x726))) +(let (($x728 (= ?x727 0))) +(let (($x733 (or $x550 $x728))) +(let ((?x696 (* (- 1) ?x93))) +(let ((?x697 (mod ?x696 ?x359))) +(let ((?x698 (* (- 1) ?x697))) +(let ((?x700 (ite $x357 ?x698 ?x699))) +(let ((?x701 (ite $x356 ?x93 ?x700))) +(let (($x702 (= ?x504 ?x701))) +(let ((@x708 (monotonicity (monotonicity @x374 (= ?x697 (mod ?x696 (- 2)))) (= ?x698 (* (- 1) (mod ?x696 (- 2))))))) +(let ((@x711 (monotonicity @x368 @x708 (= ?x700 (ite false (* (- 1) (mod ?x696 (- 2))) ?x699))))) +(let ((@x715 (trans @x711 (rewrite (= (ite false (* (- 1) (mod ?x696 (- 2))) ?x699) ?x699)) (= ?x700 ?x699)))) +(let ((@x722 (trans (monotonicity @x366 @x715 (= ?x701 (ite false ?x93 ?x699))) (rewrite (= (ite false ?x93 ?x699) ?x699)) (= ?x701 ?x699)))) +(let ((@x732 (trans (monotonicity @x722 (= $x702 (= ?x504 ?x699))) (rewrite (= (= ?x504 ?x699) $x728)) (= $x702 $x728)))) +(let ((@x740 (trans (monotonicity @x732 (= (or $x550 $x702) $x733)) (rewrite (= $x733 $x733)) (= (or $x550 $x702) $x733)))) +(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)))) +(let ((?x783 (* (- 1) ?x504))) +(let ((?x784 (+ ?x99 ?x783))) +(let (($x786 (>= ?x784 0))) +(let (($x782 (= ?x99 ?x504))) +(let (($x663 (= ?x98 ?x504))) +(let (($x505 (= ?x504 ?x98))) +(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)) ))) )) -(let (($x54 (forall ((?v0 Int_list$) (?v1 Nat_list$) )(= (mod$ (eval_dioph$ ?v0 ?v1) 2) (mod$ (eval_dioph$ ?v0 (map$ uu$ ?v1)) 2))) +(let (($x51 (forall ((?v0 Int_list$) (?v1 Int_list$) )(= (mod$ (eval_dioph$ ?v0 ?v1) 2) (mod$ (eval_dioph$ ?v0 (map$ uu$ ?v1)) 2))) )) -(let (($x53 (= (mod$ ?x48 2) (mod$ ?x51 2)))) -(let ((@x332 (mp~ (asserted $x54) (nnf-pos (refl (~ $x53 $x53)) (~ $x54 $x54)) $x54))) -(let ((@x384 (mp @x332 (quant-intro (refl (= $x53 $x53)) (= $x54 $x379)) $x379))) -(let (($x619 (or (not $x379) $x610))) -(let ((@x620 ((_ quant-inst ks$ xs$) $x619))) -(let ((@x965 (symm (unit-resolution (def-axiom (or $x365 $x103)) @x583 $x103) (= ?x102 ?x101)))) -(let ((@x962 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x887) $x891)) (trans @x965 (symm (unit-resolution @x620 @x384 $x610) $x881) $x887) $x891))) -(let (($x890 (<= ?x889 0))) -(let ((@x1023 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x887) $x890)) (trans @x965 (symm (unit-resolution @x620 @x384 $x610) $x881) $x887) $x890))) -(let (($x793 (>= ?x791 0))) -(let ((@x522 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x364 $x793)) (unit-resolution (def-axiom (or $x365 $x120)) @x583 $x120) $x793))) -(let ((@x1085 (unit-resolution ((_ th-lemma arith) (or false (not (>= ?x530 2)))) @x26 (not (>= ?x530 2))))) -(let (($x665 (<= ?x649 0))) -(let ((@x767 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x650) $x665)) (unit-resolution @x664 @x425 $x650) $x665))) -(let (($x868 (<= ?x863 0))) -(let ((@x858 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x861) $x868)) (unit-resolution ((_ th-lemma arith) (or false $x861)) @x26 $x861) $x868))) -(let (($x686 (<= ?x681 0))) -(let ((@x1092 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x679) $x686)) (unit-resolution ((_ th-lemma arith) (or false $x679)) @x26 $x679) $x686))) -(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)))) -(let (($x615 (>= ?x607 0))) -(let ((@x1100 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x608) $x615)) (unit-resolution @x613 @x391 $x608) $x615))) -(let ((@x1104 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) (>= ?x502 0))) @x907 (>= ?x502 0)))) -(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)))) -(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))) -(let ((@x576 (unit-resolution (lemma @x1108 (or (not $x1078) (not $x793) (not $x890))) @x522 @x1023 (not $x1078)))) -(let ((@x966 (unit-resolution @x576 ((_ th-lemma arith) @x962 @x775 @x934 @x924 @x921 @x604 $x1078) false))) -(let ((@x967 (lemma @x966 $x365))) -(let ((@x445 (unit-resolution (def-axiom (or $x98 $x366 (not $x372))) @x377 (or $x98 $x366)))) -(let ((@x586 (unit-resolution @x445 @x967 $x98))) -(let ((@x1067 (trans (symm (unit-resolution @x620 @x384 $x610) $x881) (monotonicity @x586 (= ?x609 ?x102)) $x103))) -(let (($x916 (not $x792))) -(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)))) -(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))) -(let ((@x1040 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x120 $x916 (not $x793))) (hypothesis $x364) (or $x916 (not $x793))))) -(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))) -(let ((@x569 (unit-resolution (unit-resolution (def-axiom (or $x366 $x363 $x364)) @x967 $x365) (lemma @x1060 $x120) $x363))) -(unit-resolution @x569 @x1067 false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(let (($x50 (= (mod$ ?x45 2) (mod$ ?x48 2)))) +(let ((@x265 (mp~ (asserted $x51) (nnf-pos (refl (~ $x50 $x50)) (~ $x51 $x51)) $x51))) +(let ((@x302 (mp @x265 (quant-intro (refl (= $x50 $x50)) (= $x51 $x297)) $x297))) +(let (($x514 (or (not $x297) $x505))) +(let ((@x515 ((_ quant-inst ks$ xs$) $x514))) +(let ((@x658 (symm (unit-resolution (def-axiom (or $x283 $x100)) @x837 $x100) (= ?x99 ?x98)))) +(let ((@x911 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x782) $x786)) (trans @x658 (symm (unit-resolution @x515 @x302 $x505) $x663) $x782) $x786))) +(let (($x785 (<= ?x784 0))) +(let ((@x814 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x782) $x785)) (trans @x658 (symm (unit-resolution @x515 @x302 $x505) $x663) $x782) $x785))) +(let (($x688 (>= ?x686 0))) +(let ((@x824 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x282 $x688)) (unit-resolution (def-axiom (or $x283 $x117)) @x837 $x117) $x688))) +(let ((@x979 (unit-resolution ((_ th-lemma arith) (or false (not (>= ?x425 2)))) @x26 (not (>= ?x425 2))))) +(let (($x560 (<= ?x544 0))) +(let ((@x427 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x545) $x560)) (unit-resolution @x559 @x323 $x545) $x560))) +(let (($x763 (<= ?x758 0))) +(let ((@x569 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x756) $x763)) (unit-resolution ((_ th-lemma arith) (or false $x756)) @x26 $x756) $x763))) +(let (($x581 (<= ?x576 0))) +(let ((@x986 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x574) $x581)) (unit-resolution ((_ th-lemma arith) (or false $x574)) @x26 $x574) $x581))) +(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)))) +(let (($x510 (>= ?x502 0))) +(let ((@x994 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x503) $x510)) (unit-resolution @x508 @x309 $x503) $x510))) +(let ((@x998 (unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x397) (>= ?x396 0))) @x802 (>= ?x396 0)))) +(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)))) +(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))) +(let ((@x821 (unit-resolution (lemma @x1002 (or (not $x972) (not $x688) (not $x785))) @x824 @x814 (not $x972)))) +(let ((@x769 (unit-resolution @x821 ((_ th-lemma arith) @x911 @x455 @x906 @x903 @x900 @x897 $x972) false))) +(let ((@x770 (lemma @x769 $x283))) +(let ((@x340 (unit-resolution (def-axiom (or $x95 $x284 (not $x290))) @x295 (or $x95 $x284)))) +(let ((@x753 (unit-resolution @x340 @x770 $x95))) +(let ((@x867 (trans (symm (unit-resolution @x515 @x302 $x505) $x663) (monotonicity @x753 (= ?x504 ?x99)) $x100))) +(let (($x811 (not $x687))) +(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)))) +(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))) +(let ((@x935 (unit-resolution ((_ th-lemma arith triangle-eq) (or $x117 $x811 (not $x688))) (hypothesis $x282) (or $x811 (not $x688))))) +(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))) +(let ((@x939 (unit-resolution (unit-resolution (def-axiom (or $x284 $x281 $x282)) @x770 $x283) (lemma @x955 $x117) $x281))) +(unit-resolution @x939 @x867 false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) d277a40ca34ecc409672601e981711fef2d0064f 64 0 unsat @@ -5663,30 +4632,30 @@ (let ((@x258 ((_ quant-inst 1) $x257))) (unit-resolution @x258 @x620 @x145 false)))))))))))))))))) -4e5cf2f6b4df716b03e440b50af106a8af8b2799 170 0 +b4b100f728c8f0d6f96483e4de44e248cc4be1aa 101 0 unsat ((set-logic AUFLIA) (proof -(let ((?x209 (some$a true))) -(let ((?x210 (g$b ?x209))) -(let ((?x206 (some$ 3))) -(let ((?x208 (g$ ?x206))) -(let (($x211 (= ?x208 ?x210))) -(let ((?x434 (cons$a true nil$a))) -(let ((?x435 (g$c ?x434))) -(let (($x406 (= ?x210 ?x435))) -(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) ))) +(let ((?x124 (some$a true))) +(let ((?x125 (g$b ?x124))) +(let ((?x122 (some$ 3))) +(let ((?x123 (g$ ?x122))) +(let (($x126 (= ?x123 ?x125))) +(let ((?x269 (cons$a true nil$a))) +(let ((?x270 (g$c ?x269))) +(let (($x587 (= ?x125 ?x270))) +(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) ))) )) (let (($x43 (forall ((?v0 Bool) )(= (g$b (some$a ?v0)) (g$c (cons$a ?v0 nil$a)))) )) (let (($x42 (= (g$b (some$a ?0)) (g$c (cons$a ?0 nil$a))))) -(let ((@x280 (mp~ (asserted $x43) (nnf-pos (refl (~ $x42 $x42)) (~ $x43 $x43)) $x43))) -(let ((@x773 (mp @x280 (quant-intro (refl (= $x42 $x42)) (= $x43 $x768)) $x768))) -(let (($x419 (or (not $x768) $x406))) -(let ((@x752 ((_ quant-inst true) $x419))) -(let ((?x720 (size$ ?x434))) -(let (($x444 (= ?x435 ?x720))) -(let (($x776 (forall ((?v0 Bool_list$) )(!(let ((?x61 (size$ ?v0))) +(let ((@x160 (mp~ (asserted $x43) (nnf-pos (refl (~ $x42 $x42)) (~ $x43 $x43)) $x43))) +(let ((@x609 (mp @x160 (quant-intro (refl (= $x42 $x42)) (= $x43 $x604)) $x604))) +(let (($x254 (or (not $x604) $x587))) +(let ((@x255 ((_ quant-inst true) $x254))) +(let ((?x227 (size$ ?x269))) +(let (($x569 (= ?x270 ?x227))) +(let (($x612 (forall ((?v0 Bool_list$) )(!(let ((?x61 (size$ ?v0))) (let ((?x60 (g$c ?v0))) (= ?x60 ?x61))) :pattern ( (g$c ?v0) ) :pattern ( (size$ ?v0) ))) )) @@ -5694,115 +4663,46 @@ (let ((?x60 (g$c ?v0))) (= ?x60 ?x61)))) )) -(let ((@x780 (quant-intro (refl (= (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (= $x63 $x776)))) -(let ((@x306 (nnf-pos (refl (~ (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (~ $x63 $x63)))) -(let ((@x781 (mp (mp~ (asserted $x63) @x306 $x63) @x780 $x776))) -(let (($x711 (or (not $x776) $x444))) -(let ((@x712 ((_ quant-inst (cons$a true nil$a)) $x711))) -(let ((?x149 (size$ nil$a))) -(let ((?x724 (of_nat$ ?x149))) -(let ((?x710 (+ 1 ?x724))) -(let ((?x713 (nat$ ?x710))) -(let (($x714 (= ?x720 ?x713))) -(let (($x819 (forall ((?v0 Bool) (?v1 Bool_list$) )(!(= (size$ (cons$a ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$ ?v1))))) :pattern ( (cons$a ?v0 ?v1) ))) -)) -(let (($x177 (forall ((?v0 Bool) (?v1 Bool_list$) )(= (size$ (cons$a ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$ ?v1)))))) -)) -(let (($x174 (= (size$ (cons$a ?1 ?0)) (nat$ (+ 1 (of_nat$ (size$ ?0))))))) -(let (($x161 (forall ((?v0 Bool) (?v1 Bool_list$) )(= (size$ (cons$a ?v0 ?v1)) (nat$ (+ (of_nat$ (size$ ?v1)) (+ 0 1))))) +(let ((@x616 (quant-intro (refl (= (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (= $x63 $x612)))) +(let ((@x142 (nnf-pos (refl (~ (= (g$c ?0) (size$ ?0)) (= (g$c ?0) (size$ ?0)))) (~ $x63 $x63)))) +(let ((@x617 (mp (mp~ (asserted $x63) @x142 $x63) @x616 $x612))) +(let (($x571 (or (not $x612) $x569))) +(let ((@x572 ((_ quant-inst (cons$a true nil$a)) $x571))) +(let ((?x89 (suc$ zero$))) +(let ((?x105 (size$ nil$a))) +(let ((?x233 (plus$ ?x105 ?x89))) +(let (($x570 (= ?x227 ?x233))) +(let (($x657 (forall ((?v0 Bool) (?v1 Bool_list$) )(!(= (size$ (cons$a ?v0 ?v1)) (plus$ (size$ ?v1) (suc$ zero$))) :pattern ( (cons$a ?v0 ?v1) ))) )) -(let (($x160 (= (size$ (cons$a ?1 ?0)) (nat$ (+ (of_nat$ (size$ ?0)) (+ 0 1)))))) -(let (($x172 (= (nat$ (+ (of_nat$ (size$ ?0)) (+ 0 1))) (nat$ (+ 1 (of_nat$ (size$ ?0))))))) -(let ((?x61 (size$ ?0))) -(let ((?x157 (of_nat$ ?x61))) -(let ((?x166 (+ 1 ?x157))) -(let ((?x92 (+ 0 1))) -(let ((?x158 (+ ?x157 ?x92))) -(let ((@x170 (trans (monotonicity (rewrite (= ?x92 1)) (= ?x158 (+ ?x157 1))) (rewrite (= (+ ?x157 1) ?x166)) (= ?x158 ?x166)))) -(let ((@x179 (quant-intro (monotonicity (monotonicity @x170 $x172) (= $x160 $x174)) (= $x161 $x177)))) -(let ((@x323 (mp~ (mp (asserted $x161) @x179 $x177) (nnf-pos (refl (~ $x174 $x174)) (~ $x177 $x177)) $x177))) -(let ((@x824 (mp @x323 (quant-intro (refl (= $x174 $x174)) (= $x177 $x819)) $x819))) -(let (($x718 (or (not $x819) $x714))) -(let ((@x556 ((_ quant-inst true nil$a) $x718))) -(let ((?x153 (size$a nil$))) -(let ((?x730 (of_nat$ ?x153))) -(let (($x716 (<= ?x730 0))) -(let (($x715 (= ?x730 0))) -(let ((?x73 (nat$ 0))) -(let ((?x748 (of_nat$ ?x73))) -(let (($x412 (= ?x748 0))) -(let (($x841 (forall ((?v0 Int) )(!(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0))) -(let (($x236 (>= ?v0 0))) -(let (($x237 (not $x236))) -(or $x237 $x223)))) :pattern ( (nat$ ?v0) ))) -)) -(let (($x243 (forall ((?v0 Int) )(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0))) -(let (($x236 (>= ?v0 0))) -(let (($x237 (not $x236))) -(or $x237 $x223))))) -)) -(let (($x223 (= (of_nat$ (nat$ ?0)) ?0))) -(let (($x236 (>= ?0 0))) -(let (($x237 (not $x236))) -(let (($x240 (or $x237 $x223))) -(let (($x225 (forall ((?v0 Int) )(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0))) -(let (($x220 (<= 0 ?v0))) -(=> $x220 $x223)))) +(let (($x114 (forall ((?v0 Bool) (?v1 Bool_list$) )(= (size$ (cons$a ?v0 ?v1)) (plus$ (size$ ?v1) (suc$ zero$)))) )) -(let (($x231 (forall ((?v0 Int) )(let (($x223 (= (of_nat$ (nat$ ?v0)) ?v0))) -(or (not (<= 0 ?v0)) $x223))) +(let (($x113 (= (size$ (cons$a ?1 ?0)) (plus$ (size$ ?0) ?x89)))) +(let ((@x173 (mp~ (asserted $x114) (nnf-pos (refl (~ $x113 $x113)) (~ $x114 $x114)) $x114))) +(let ((@x662 (mp @x173 (quant-intro (refl (= $x113 $x113)) (= $x114 $x657)) $x657))) +(let (($x576 (or (not $x657) $x570))) +(let ((@x213 ((_ quant-inst true nil$a) $x576))) +(let ((?x108 (size$a nil$))) +(let (($x109 (= ?x108 zero$))) +(let ((@x110 (asserted $x109))) +(let (($x106 (= ?x105 zero$))) +(let ((@x107 (asserted $x106))) +(let ((@x287 (monotonicity (trans @x107 (symm @x110 (= zero$ ?x108)) (= ?x105 ?x108)) (= ?x233 (plus$ ?x108 ?x89))))) +(let ((?x246 (plus$ ?x108 ?x89))) +(let ((?x256 (cons$ 3 nil$))) +(let ((?x588 (size$a ?x256))) +(let (($x584 (= ?x588 ?x246))) +(let (($x664 (forall ((?v0 Int) (?v1 Int_list$) )(!(= (size$a (cons$ ?v0 ?v1)) (plus$ (size$a ?v1) (suc$ zero$))) :pattern ( (cons$ ?v0 ?v1) ))) )) -(let ((@x239 (monotonicity (rewrite (= (<= 0 ?0) $x236)) (= (not (<= 0 ?0)) $x237)))) -(let ((@x245 (quant-intro (monotonicity @x239 (= (or (not (<= 0 ?0)) $x223) $x240)) (= $x231 $x243)))) -(let ((@x230 (rewrite (= (=> (<= 0 ?0) $x223) (or (not (<= 0 ?0)) $x223))))) -(let ((@x248 (mp (asserted $x225) (trans (quant-intro @x230 (= $x225 $x231)) @x245 (= $x225 $x243)) $x243))) -(let ((@x846 (mp (mp~ @x248 (nnf-pos (refl (~ $x240 $x240)) (~ $x243 $x243)) $x243) (quant-intro (refl (= $x240 $x240)) (= $x243 $x841)) $x841))) -(let (($x381 (not $x841))) -(let (($x382 (or $x381 $x412))) -(let ((@x733 (rewrite (= (>= 0 0) true)))) -(let ((@x736 (trans (monotonicity @x733 (= (not (>= 0 0)) (not true))) (rewrite (= (not true) false)) (= (not (>= 0 0)) false)))) -(let ((@x739 (monotonicity @x736 (= (or (not (>= 0 0)) $x412) (or false $x412))))) -(let ((@x742 (trans @x739 (rewrite (= (or false $x412) $x412)) (= (or (not (>= 0 0)) $x412) $x412)))) -(let ((@x731 (monotonicity @x742 (= (or $x381 (or (not (>= 0 0)) $x412)) $x382)))) -(let ((@x450 (trans @x731 (rewrite (= $x382 $x382)) (= (or $x381 (or (not (>= 0 0)) $x412)) $x382)))) -(let ((@x451 (mp ((_ quant-inst 0) (or $x381 (or (not (>= 0 0)) $x412))) @x450 $x382))) -(let ((@x621 (trans (monotonicity (asserted (= ?x153 ?x73)) (= ?x730 ?x748)) (unit-resolution @x451 @x846 $x412) $x715))) -(let (($x557 (>= ?x730 0))) -(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)))) -(let (($x700 (<= ?x724 0))) -(let (($x558 (= ?x724 0))) -(let ((@x583 (trans (monotonicity (asserted (= ?x149 ?x73)) (= ?x724 ?x748)) (unit-resolution @x451 @x846 $x412) $x558))) -(let (($x701 (>= ?x724 0))) -(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)))) -(let ((@x563 (trans @x559 (symm @x610 (= 1 (+ 1 ?x730))) (= ?x710 (+ 1 ?x730))))) -(let ((@x539 (symm (monotonicity @x563 (= ?x713 (nat$ (+ 1 ?x730)))) (= (nat$ (+ 1 ?x730)) ?x713)))) -(let ((?x437 (+ 1 ?x730))) -(let ((?x440 (nat$ ?x437))) -(let ((?x431 (cons$ 3 nil$))) -(let ((?x728 (size$a ?x431))) -(let (($x719 (= ?x728 ?x440))) -(let (($x826 (forall ((?v0 Int) (?v1 Int_list$) )(!(= (size$a (cons$ ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$a ?v1))))) :pattern ( (cons$ ?v0 ?v1) ))) +(let (($x119 (forall ((?v0 Int) (?v1 Int_list$) )(= (size$a (cons$ ?v0 ?v1)) (plus$ (size$a ?v1) (suc$ zero$)))) )) -(let (($x202 (forall ((?v0 Int) (?v1 Int_list$) )(= (size$a (cons$ ?v0 ?v1)) (nat$ (+ 1 (of_nat$ (size$a ?v1)))))) -)) -(let (($x199 (= (size$a (cons$ ?1 ?0)) (nat$ (+ 1 (of_nat$ (size$a ?0))))))) -(let (($x186 (forall ((?v0 Int) (?v1 Int_list$) )(= (size$a (cons$ ?v0 ?v1)) (nat$ (+ (of_nat$ (size$a ?v1)) (+ 0 1))))) -)) -(let (($x185 (= (size$a (cons$ ?1 ?0)) (nat$ (+ (of_nat$ (size$a ?0)) ?x92))))) -(let (($x197 (= (nat$ (+ (of_nat$ (size$a ?0)) ?x92)) (nat$ (+ 1 (of_nat$ (size$a ?0))))))) -(let ((?x67 (size$a ?0))) -(let ((?x181 (of_nat$ ?x67))) -(let ((?x191 (+ 1 ?x181))) -(let ((?x183 (+ ?x181 ?x92))) -(let ((@x195 (trans (monotonicity (rewrite (= ?x92 1)) (= ?x183 (+ ?x181 1))) (rewrite (= (+ ?x181 1) ?x191)) (= ?x183 ?x191)))) -(let ((@x204 (quant-intro (monotonicity (monotonicity @x195 $x197) (= $x185 $x199)) (= $x186 $x202)))) -(let ((@x328 (mp~ (mp (asserted $x186) @x204 $x202) (nnf-pos (refl (~ $x199 $x199)) (~ $x202 $x202)) $x202))) -(let ((@x831 (mp @x328 (quant-intro (refl (= $x199 $x199)) (= $x202 $x826)) $x826))) -(let (($x722 (or (not $x826) $x719))) -(let ((@x723 ((_ quant-inst 3 nil$) $x722))) -(let ((?x432 (g$a ?x431))) -(let (($x729 (= ?x432 ?x728))) -(let (($x784 (forall ((?v0 Int_list$) )(!(let ((?x67 (size$a ?v0))) +(let (($x118 (= (size$a (cons$ ?1 ?0)) (plus$ (size$a ?0) ?x89)))) +(let ((@x178 (mp~ (asserted $x119) (nnf-pos (refl (~ $x118 $x118)) (~ $x119 $x119)) $x119))) +(let ((@x669 (mp @x178 (quant-intro (refl (= $x118 $x118)) (= $x119 $x664)) $x664))) +(let (($x231 (or (not $x664) $x584))) +(let ((@x232 ((_ quant-inst 3 nil$) $x231))) +(let ((?x267 (g$a ?x256))) +(let (($x592 (= ?x267 ?x588))) +(let (($x620 (forall ((?v0 Int_list$) )(!(let ((?x67 (size$a ?v0))) (let ((?x66 (g$a ?v0))) (= ?x66 ?x67))) :pattern ( (g$a ?v0) ) :pattern ( (size$a ?v0) ))) )) @@ -5810,27 +4710,27 @@ (let ((?x66 (g$a ?v0))) (= ?x66 ?x67)))) )) -(let ((@x788 (quant-intro (refl (= (= (g$a ?0) ?x67) (= (g$a ?0) ?x67))) (= $x69 $x784)))) -(let ((@x295 (nnf-pos (refl (~ (= (g$a ?0) ?x67) (= (g$a ?0) ?x67))) (~ $x69 $x69)))) -(let ((@x789 (mp (mp~ (asserted $x69) @x295 $x69) @x788 $x784))) -(let (($x438 (or (not $x784) $x729))) -(let ((@x439 ((_ quant-inst (cons$ 3 nil$)) $x438))) -(let (($x433 (= ?x208 ?x432))) -(let (($x760 (forall ((?v0 Int) )(!(= (g$ (some$ ?v0)) (g$a (cons$ ?v0 nil$))) :pattern ( (some$ ?v0) ) :pattern ( (cons$ ?v0 nil$) ))) +(let ((@x622 (refl (= (= (g$a ?0) (size$a ?0)) (= (g$a ?0) (size$a ?0)))))) +(let ((@x129 (nnf-pos (refl (~ (= (g$a ?0) (size$a ?0)) (= (g$a ?0) (size$a ?0)))) (~ $x69 $x69)))) +(let ((@x625 (mp (mp~ (asserted $x69) @x129 $x69) (quant-intro @x622 (= $x69 $x620)) $x620))) +(let (($x248 (or (not $x620) $x592))) +(let ((@x585 ((_ quant-inst (cons$ 3 nil$)) $x248))) +(let (($x268 (= ?x123 ?x267))) +(let (($x596 (forall ((?v0 Int) )(!(= (g$ (some$ ?v0)) (g$a (cons$ ?v0 nil$))) :pattern ( (some$ ?v0) ) :pattern ( (cons$ ?v0 nil$) ))) )) (let (($x34 (forall ((?v0 Int) )(= (g$ (some$ ?v0)) (g$a (cons$ ?v0 nil$)))) )) (let (($x33 (= (g$ (some$ ?0)) (g$a (cons$ ?0 nil$))))) -(let ((@x297 (mp~ (asserted $x34) (nnf-pos (refl (~ $x33 $x33)) (~ $x34 $x34)) $x34))) -(let ((@x765 (mp @x297 (quant-intro (refl (= $x33 $x33)) (= $x34 $x760)) $x760))) -(let (($x750 (or (not $x760) $x433))) -(let ((@x751 ((_ quant-inst 3) $x750))) -(let ((@x550 (trans (unit-resolution @x751 @x765 $x433) (unit-resolution @x439 @x789 $x729) (= ?x208 ?x728)))) -(let ((@x554 (trans (trans @x550 (unit-resolution @x723 @x831 $x719) (= ?x208 ?x440)) @x539 (= ?x208 ?x713)))) -(let ((@x525 (trans @x554 (symm (unit-resolution @x556 @x824 $x714) (= ?x713 ?x720)) (= ?x208 ?x720)))) -(let ((@x527 (trans @x525 (symm (unit-resolution @x712 @x781 $x444) (= ?x720 ?x435)) (= ?x208 ?x435)))) -(let ((@x528 (trans @x527 (symm (unit-resolution @x752 @x773 $x406) (= ?x435 ?x210)) $x211))) -(let (($x212 (not $x211))) -(let ((@x213 (asserted $x212))) -(unit-resolution @x213 @x528 false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) +(let ((@x157 (mp~ (asserted $x34) (nnf-pos (refl (~ $x33 $x33)) (~ $x34 $x34)) $x34))) +(let ((@x601 (mp @x157 (quant-intro (refl (= $x33 $x33)) (= $x34 $x596)) $x596))) +(let (($x250 (or (not $x596) $x268))) +(let ((@x586 ((_ quant-inst 3) $x250))) +(let ((@x275 (trans (unit-resolution @x586 @x601 $x268) (unit-resolution @x585 @x625 $x592) (= ?x123 ?x588)))) +(let ((@x280 (trans (trans @x275 (unit-resolution @x232 @x669 $x584) (= ?x123 ?x246)) (symm @x287 (= ?x246 ?x233)) (= ?x123 ?x233)))) +(let ((@x558 (trans @x280 (symm (unit-resolution @x213 @x662 $x570) (= ?x233 ?x227)) (= ?x123 ?x227)))) +(let ((@x560 (trans @x558 (symm (unit-resolution @x572 @x617 $x569) (= ?x227 ?x270)) (= ?x123 ?x270)))) +(let ((@x546 (trans @x560 (symm (unit-resolution @x255 @x609 $x587) (= ?x270 ?x125)) $x126))) +(let (($x127 (not $x126))) +(let ((@x128 (asserted $x127))) +(unit-resolution @x128 @x546 false))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/SMT_Examples/SMT_Examples.thy --- a/src/HOL/SMT_Examples/SMT_Examples.thy Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/SMT_Examples/SMT_Examples.thy Sun Jul 27 21:11:35 2014 +0200 @@ -393,27 +393,6 @@ by smt (* smt2 FIXME: "th-lemma" tactic fails *) -subsection {* Linear arithmetic for natural numbers *} - -lemma "2 * (x::nat) ~= 1" by smt2 - -lemma "a < 3 \ (7::nat) > 2 * a" by smt2 - -lemma "let x = (1::nat) + y in x - y > 0 * x" by smt2 - -lemma - "let x = (1::nat) + y in - let P = (if x > 0 then True else False) in - False \ P = (x - 1 = y) \ (\P \ False)" - by smt2 - -lemma "int (nat \x::int\) = \x\" by smt2 - -definition prime_nat :: "nat \ bool" where - "prime_nat p = (1 < p \ (\m. m dvd p --> m = 1 \ m = p))" -lemma "prime_nat (4*m + 1) \ m \ (1::nat)" by (smt2 prime_nat_def) - - section {* Pairs *} lemma "fst (x, y) = a \ x = a" @@ -444,30 +423,28 @@ lemma True using let_rsp by smt2 lemma "le = op \ \ le (3::int) 42" by smt2 -lemma "map (\i::nat. i + 1) [0, 1] = [1, 2]" by (smt2 list.map) +lemma "map (\i::int. i + 1) [0, 1] = [1, 2]" by (smt2 list.map) lemma "(ALL x. P x) \ ~ All P" by smt2 -fun dec_10 :: "nat \ nat" where +fun dec_10 :: "int \ int" where "dec_10 n = (if n < 10 then n else dec_10 (n - 10))" lemma "dec_10 (4 * dec_10 4) = 6" by (smt2 dec_10.simps) axiomatization - eval_dioph :: "int list \ nat list \ int" + eval_dioph :: "int list \ int list \ int" where - eval_dioph_mod: - "eval_dioph ks xs mod int n = eval_dioph ks (map (\x. x mod n) xs) mod int n" + eval_dioph_mod: "eval_dioph ks xs mod n = eval_dioph ks (map (\x. x mod n) xs) mod n" and eval_dioph_div_mult: - "eval_dioph ks (map (\x. x div n) xs) * int n + + "eval_dioph ks (map (\x. x div n) xs) * n + eval_dioph ks (map (\x. x mod n) xs) = eval_dioph ks xs" lemma "(eval_dioph ks xs = l) = (eval_dioph ks (map (\x. x mod 2) xs) mod 2 = l mod 2 \ - eval_dioph ks (map (\x. x div 2) xs) = - (l - eval_dioph ks (map (\x. x mod 2) xs)) div 2)" - using [[smt2_oracle=true]] (*FIXME*) + eval_dioph ks (map (\x. x div 2) xs) = (l - eval_dioph ks (map (\x. x mod 2) xs)) div 2)" + using [[smt2_oracle = true]] (*FIXME*) using [[z3_new_extensions]] by (smt2 eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2]) diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/SMT_Examples/SMT_Tests.thy --- a/src/HOL/SMT_Examples/SMT_Tests.thy Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/SMT_Examples/SMT_Tests.thy Sun Jul 27 21:11:35 2014 +0200 @@ -223,119 +223,6 @@ by smt2+ -section {* Natural numbers *} - -lemma - "(0::nat) = 0" - "(1::nat) = 1" - "(0::nat) < 1" - "(0::nat) \ 1" - "(123456789::nat) < 2345678901" - by smt2+ - -lemma - "Suc 0 = 1" - "Suc x = x + 1" - "x < Suc x" - "(Suc x = Suc y) = (x = y)" - "Suc (x + y) < Suc x + Suc y" - by smt2+ - -lemma - "(x::nat) + 0 = x" - "0 + x = x" - "x + y = y + x" - "x + (y + z) = (x + y) + z" - "(x + y = 0) = (x = 0 \ y = 0)" - by smt2+ - -lemma - "(x::nat) - 0 = x" - "x < y \ x - y = 0" - "x - y = 0 \ y - x = 0" - "(x - y) + y = (if x < y then y else x)" - "x - y - z = x - (y + z)" - by smt2+ - -lemma - "(x::nat) * 0 = 0" - "0 * x = 0" - "x * 1 = x" - "1 * x = x" - "3 * x = x * 3" - by smt2+ - -lemma - "(0::nat) div 0 = 0" - "(x::nat) div 0 = 0" - "(0::nat) div 1 = 0" - "(1::nat) div 1 = 1" - "(3::nat) div 1 = 3" - "(x::nat) div 1 = x" - "(0::nat) div 3 = 0" - "(1::nat) div 3 = 0" - "(3::nat) div 3 = 1" - "(x::nat) div 3 \ x" - "(x div 3 = x) = (x = 0)" - using [[z3_new_extensions]] - by smt2+ - -lemma - "(0::nat) mod 0 = 0" - "(x::nat) mod 0 = x" - "(0::nat) mod 1 = 0" - "(1::nat) mod 1 = 0" - "(3::nat) mod 1 = 0" - "(x::nat) mod 1 = 0" - "(0::nat) mod 3 = 0" - "(1::nat) mod 3 = 1" - "(3::nat) mod 3 = 0" - "x mod 3 < 3" - "(x mod 3 = x) = (x < 3)" - using [[z3_new_extensions]] - by smt2+ - -lemma - "(x::nat) = x div 1 * 1 + x mod 1" - "x = x div 3 * 3 + x mod 3" - using [[z3_new_extensions]] - by smt2+ - -lemma - "min (x::nat) y \ x" - "min x y \ y" - "min x y \ x + y" - "z < x \ z < y \ z < min x y" - "min x y = min y x" - "min x 0 = 0" - by smt2+ - -lemma - "max (x::nat) y \ x" - "max x y \ y" - "max x y \ (x - y) + (y - x)" - "z > x \ z > y \ z > max x y" - "max x y = max y x" - "max x 0 = x" - by smt2+ - -lemma - "0 \ (x::nat)" - "0 < x \ x \ 1 \ x = 1" - "x \ x" - "x \ y \ 3 * x \ 3 * y" - "x < y \ 3 * x < 3 * y" - "x < y \ x \ y" - "(x < y) = (x + 1 \ y)" - "\ (x < x)" - "x \ y \ y \ z \ x \ z" - "x < y \ y \ z \ x \ z" - "x \ y \ y < z \ x \ z" - "x < y \ y < z \ x < z" - "x < y \ y < z \ \ (z < x)" - by smt2+ - - section {* Integers *} lemma diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/SMT_Examples/SMT_Word_Examples.certs2 --- a/src/HOL/SMT_Examples/SMT_Word_Examples.certs2 Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/SMT_Examples/SMT_Word_Examples.certs2 Sun Jul 27 21:11:35 2014 +0200 @@ -43,6 +43,14 @@ (let ((@x49 (trans @x45 (rewrite (= (not true) false)) (= (not (= (bvmul (_ bv7 8) (_ bv3 8)) (_ bv21 8))) false)))) (mp (asserted (not (= (bvmul (_ bv7 8) (_ bv3 8)) (_ bv21 8)))) @x49 false))))))) +6dd848d7b26e0521039e21a5e2bafebc1fee8c9b 7 0 +unsat +((set-logic ) +(proof +(let ((@x35 (monotonicity (rewrite (= (= (_ bv11 5) (_ bv11 5)) true)) (= (not (= (_ bv11 5) (_ bv11 5))) (not true))))) +(let ((@x39 (trans @x35 (rewrite (= (not true) false)) (= (not (= (_ bv11 5) (_ bv11 5))) false)))) +(mp (asserted (not (= (_ bv11 5) (_ bv11 5)))) @x39 false))))) + 45bf9e0a746f7dde46f8242e5851928c2671c7f2 9 0 unsat ((set-logic ) @@ -53,14 +61,6 @@ (let ((@x54 (trans @x50 (rewrite (= (not true) false)) (= (not (= (bvsub (_ bv11 8) (_ bv27 8)) (bvneg (_ bv16 8)))) false)))) (mp (asserted (not (= (bvsub (_ bv11 8) (_ bv27 8)) (bvneg (_ bv16 8))))) @x54 false))))))) -6dd848d7b26e0521039e21a5e2bafebc1fee8c9b 7 0 -unsat -((set-logic ) -(proof -(let ((@x35 (monotonicity (rewrite (= (= (_ bv11 5) (_ bv11 5)) true)) (= (not (= (_ bv11 5) (_ bv11 5))) (not true))))) -(let ((@x39 (trans @x35 (rewrite (= (not true) false)) (= (not (= (_ bv11 5) (_ bv11 5))) false)))) -(mp (asserted (not (= (_ bv11 5) (_ bv11 5)))) @x39 false))))) - 00a7ff287d9c23d984163ea8e0cac8ac61008afd 11 0 unsat ((set-logic ) @@ -142,15 +142,6 @@ (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvxor (_ bv240 8) (_ bv255 8)) (_ bv15 8))) false)))) (mp (asserted (not (= (bvxor (_ bv240 8) (_ bv255 8)) (_ bv15 8)))) @x48 false))))))) -3838eb33edcd292c3a0ecbf1662b54af3940189f 8 0 -unsat -((set-logic ) -(proof -(let ((@x36 (monotonicity (rewrite (= (bvnot (_ bv240 16)) (_ bv65295 16))) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) (= (_ bv65295 16) (_ bv65295 16)))))) -(let ((@x40 (trans @x36 (rewrite (= (= (_ bv65295 16) (_ bv65295 16)) true)) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) true)))) -(let ((@x47 (trans (monotonicity @x40 (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) (not true))) (rewrite (= (not true) false)) (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) false)))) -(mp (asserted (not (= (bvnot (_ bv240 16)) (_ bv65295 16)))) @x47 false)))))) - 14431ccb33137348161eb6ca6cfb2e57942c3f9d 9 0 unsat ((set-logic ) @@ -161,6 +152,24 @@ (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (concat (_ bv11 4) (_ bv27 8)) (_ bv2843 12))) false)))) (mp (asserted (not (= (concat (_ bv11 4) (_ bv27 8)) (_ bv2843 12)))) @x48 false))))))) +3838eb33edcd292c3a0ecbf1662b54af3940189f 8 0 +unsat +((set-logic ) +(proof +(let ((@x36 (monotonicity (rewrite (= (bvnot (_ bv240 16)) (_ bv65295 16))) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) (= (_ bv65295 16) (_ bv65295 16)))))) +(let ((@x40 (trans @x36 (rewrite (= (= (_ bv65295 16) (_ bv65295 16)) true)) (= (= (bvnot (_ bv240 16)) (_ bv65295 16)) true)))) +(let ((@x47 (trans (monotonicity @x40 (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) (not true))) (rewrite (= (not true) false)) (= (not (= (bvnot (_ bv240 16)) (_ bv65295 16))) false)))) +(mp (asserted (not (= (bvnot (_ bv240 16)) (_ bv65295 16)))) @x47 false)))))) + +8d29c9b5ef712a3d9d2db87383c9c25c0b553e01 8 0 +unsat +((set-logic ) +(proof +(let ((@x36 (monotonicity (rewrite (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) (= (_ bv3 2) (_ bv3 2)))))) +(let ((@x40 (trans @x36 (rewrite (= (= (_ bv3 2) (_ bv3 2)) true)) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) true)))) +(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)))) +(mp (asserted (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)))) @x47 false)))))) + 880bee16a8f6469b14122277b92e87533ef6a071 9 0 unsat ((set-logic ) @@ -171,15 +180,6 @@ (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (concat (_ bv3 4) (_ bv15 6)) (_ bv207 10))) false)))) (mp (asserted (not (= (concat (_ bv3 4) (_ bv15 6)) (_ bv207 10)))) @x48 false))))))) -6b4cf44be412b1ba63dbf9b301260e877097b1be 8 0 -unsat -((set-logic ) -(proof -(let ((@x36 (monotonicity (rewrite (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2))) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) (= (_ bv3 2) (_ bv3 2)))))) -(let ((@x40 (trans @x36 (rewrite (= (= (_ bv3 2) (_ bv3 2)) true)) (= (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)) true)))) -(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)))) -(mp (asserted (not (= ((_ extract 2 1) (_ bv6 4)) (_ bv3 2)))) @x47 false)))))) - 446b3cb9d63aa1f488dc092ed3fb111d2ad50b4e 9 0 unsat ((set-logic ) @@ -200,7 +200,7 @@ (let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ sign_extend 2) (_ bv10 4)) (_ bv58 6))) false)))) (mp (asserted (not (= ((_ sign_extend 2) (_ bv10 4)) (_ bv58 6)))) @x47 false))))))) -7a821bfbd2032abe40931e46e7875c58d78cac74 9 0 +8e075e24ee51b2c8d282203ef406cf993a4d32e8 9 0 unsat ((set-logic ) (proof @@ -210,7 +210,7 @@ (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvshl (_ bv19 8) (_ bv2 8)) (_ bv76 8))) false)))) (mp (asserted (not (= (bvshl (_ bv19 8) (_ bv2 8)) (_ bv76 8)))) @x48 false))))))) -3a90f9cf3517f16b198f07da78a10c267f6ca981 9 0 +e11f6641dec327aa96166093ca6eb62aa10965c0 9 0 unsat ((set-logic ) (proof @@ -220,7 +220,7 @@ (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvlshr (_ bv25 8) (_ bv2 8)) (_ bv6 8))) false)))) (mp (asserted (not (= (bvlshr (_ bv25 8) (_ bv2 8)) (_ bv6 8)))) @x48 false))))))) -512889429971c22172b835746742cd1214354685 9 0 +f1f29c69ebfcb6af36e96ba5a738d9b0d7b31835 9 0 unsat ((set-logic ) (proof @@ -230,7 +230,7 @@ (let ((@x48 (trans @x44 (rewrite (= (not true) false)) (= (not (= (bvashr (_ bv19 8) (_ bv2 8)) (_ bv4 8))) false)))) (mp (asserted (not (= (bvashr (_ bv19 8) (_ bv2 8)) (_ bv4 8)))) @x48 false))))))) -85eb639dc934d6e3f29fcc025e09dac5e8ec35be 9 0 +d5599ccc28266367053026b485d411472eb0665c 9 0 unsat ((set-logic ) (proof @@ -240,16 +240,6 @@ (let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ rotate_right 2) (_ bv6 4)) (_ bv9 4))) false)))) (mp (asserted (not (= ((_ rotate_right 2) (_ bv6 4)) (_ bv9 4)))) @x47 false))))))) -072b118d30c575706ced09a142498447b46fa41f 9 0 -unsat -((set-logic ) -(proof -(let ((@x36 (monotonicity (rewrite (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) (= (_ bv13 4) (_ bv13 4)))))) -(let ((@x40 (trans @x36 (rewrite (= (= (_ bv13 4) (_ bv13 4)) true)) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) true)))) -(let ((@x43 (monotonicity @x40 (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (not true))))) -(let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) false)))) -(mp (asserted (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)))) @x47 false))))))) - 5c4e275bed2d91897e820ccd6744b0a775a6e26e 17 0 unsat ((set-logic ) @@ -268,6 +258,46 @@ (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))) (unit-resolution @x55 @x63 false))))))))))))))) +33a52e620069e1ecebbc00aa6b0099170558c111 9 0 +unsat +((set-logic ) +(proof +(let ((@x36 (monotonicity (rewrite (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) (= (_ bv13 4) (_ bv13 4)))))) +(let ((@x40 (trans @x36 (rewrite (= (= (_ bv13 4) (_ bv13 4)) true)) (= (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)) true)))) +(let ((@x43 (monotonicity @x40 (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) (not true))))) +(let ((@x47 (trans @x43 (rewrite (= (not true) false)) (= (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4))) false)))) +(mp (asserted (not (= ((_ rotate_left 1) (_ bv14 4)) (_ bv13 4)))) @x47 false))))))) + +115ab22c9945d493b971e69a38d9e608c5b40a71 29 0 +unsat +((set-logic ) +(proof +(let ((?x28 (bv2int$ (_ bv0 2)))) +(let (($x183 (<= ?x28 0))) +(let (($x184 (not $x183))) +(let (($x175 (forall ((?v0 (_ BitVec 2)) )(!(let ((?x47 (bv2int$ ?v0))) +(let (($x53 (<= ?x47 0))) +(not $x53))) :pattern ( (bv2int$ ?v0) ))) +)) +(let (($x57 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0))) +(let (($x53 (<= ?x47 0))) +(not $x53)))) +)) +(let ((@x177 (refl (= (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0)))))) +(let ((@x112 (refl (~ (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0)))))) +(let (($x49 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0))) +(< 0 ?x47))) +)) +(let ((@x56 (rewrite (= (< 0 (bv2int$ ?0)) (not (<= (bv2int$ ?0) 0)))))) +(let ((@x115 (mp~ (mp (asserted $x49) (quant-intro @x56 (= $x49 $x57)) $x57) (nnf-pos @x112 (~ $x57 $x57)) $x57))) +(let ((@x180 (mp @x115 (quant-intro @x177 (= $x57 $x175)) $x175))) +(let (($x187 (not $x175))) +(let (($x188 (or $x187 $x184))) +(let ((@x189 ((_ quant-inst (_ bv0 2)) $x188))) +(let (($x29 (= ?x28 0))) +(let ((@x30 (asserted $x29))) +(unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x29) $x183)) @x30 (unit-resolution @x189 @x180 $x184) false))))))))))))))))))) + 1d4a0e2a4449a8adbcf5a134bf7f2b0ee940d954 51 0 unsat ((set-logic ) @@ -320,36 +350,6 @@ (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))) (unit-resolution @x314 @x322 false))))))))))))))))))))))))))))))))))))))))))))))))) -115ab22c9945d493b971e69a38d9e608c5b40a71 29 0 -unsat -((set-logic ) -(proof -(let ((?x28 (bv2int$ (_ bv0 2)))) -(let (($x183 (<= ?x28 0))) -(let (($x184 (not $x183))) -(let (($x175 (forall ((?v0 (_ BitVec 2)) )(!(let ((?x47 (bv2int$ ?v0))) -(let (($x53 (<= ?x47 0))) -(not $x53))) :pattern ( (bv2int$ ?v0) ))) -)) -(let (($x57 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0))) -(let (($x53 (<= ?x47 0))) -(not $x53)))) -)) -(let ((@x177 (refl (= (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0)))))) -(let ((@x112 (refl (~ (not (<= (bv2int$ ?0) 0)) (not (<= (bv2int$ ?0) 0)))))) -(let (($x49 (forall ((?v0 (_ BitVec 2)) )(let ((?x47 (bv2int$ ?v0))) -(< 0 ?x47))) -)) -(let ((@x56 (rewrite (= (< 0 (bv2int$ ?0)) (not (<= (bv2int$ ?0) 0)))))) -(let ((@x115 (mp~ (mp (asserted $x49) (quant-intro @x56 (= $x49 $x57)) $x57) (nnf-pos @x112 (~ $x57 $x57)) $x57))) -(let ((@x180 (mp @x115 (quant-intro @x177 (= $x57 $x175)) $x175))) -(let (($x187 (not $x175))) -(let (($x188 (or $x187 $x184))) -(let ((@x189 ((_ quant-inst (_ bv0 2)) $x188))) -(let (($x29 (= ?x28 0))) -(let ((@x30 (asserted $x29))) -(unit-resolution ((_ th-lemma arith triangle-eq) (or (not $x29) $x183)) @x30 (unit-resolution @x189 @x180 $x184) false))))))))))))))))))) - d14e7b8f0d1858316e700b4eb09e7d03e57cf9c3 16 0 unsat ((set-logic ) diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/Tools/SMT2/smt2_normalize.ML --- a/src/HOL/Tools/SMT2/smt2_normalize.ML Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/Tools/SMT2/smt2_normalize.ML Sun Jul 27 21:11:35 2014 +0200 @@ -324,84 +324,6 @@ end -(** embedding of standard natural number operations into integer operations **) - -local - val nat_embedding = @{thms nat_int' int_nat_nneg int_nat_neg} - - val simple_nat_ops = [ - @{const less (nat)}, @{const less_eq (nat)}, - @{const Suc}, @{const plus (nat)}, @{const minus (nat)}] - - val mult_nat_ops = - [@{const times (nat)}, @{const div (nat)}, @{const mod (nat)}] - - val nat_ops = simple_nat_ops @ mult_nat_ops - - val nat_consts = nat_ops @ [@{const numeral (nat)}, - @{const zero_class.zero (nat)}, @{const one_class.one (nat)}] - - val nat_int_coercions = [@{const of_nat (int)}, @{const nat}] - - val builtin_nat_ops = nat_int_coercions @ simple_nat_ops - - val is_nat_const = member (op aconv) nat_consts - - fun is_nat_const' @{const of_nat (int)} = true - | is_nat_const' t = is_nat_const t - - val expands = map mk_meta_eq @{thms nat_zero_as_int nat_one_as_int nat_numeral_as_int - nat_less_as_int nat_leq_as_int Suc_as_int nat_plus_as_int nat_minus_as_int nat_times_as_int - nat_div_as_int nat_mod_as_int} - - val ints = map mk_meta_eq @{thms int_0 int_1 int_Suc int_plus int_minus int_mult zdiv_int - zmod_int} - val int_if = mk_meta_eq @{lemma "int (if P then n else m) = (if P then int n else int m)" by simp} - - fun mk_number_eq ctxt i lhs = - let - val eq = SMT2_Util.mk_cequals lhs (Numeral.mk_cnumber @{ctyp int} i) - val ctxt' = put_simpset HOL_ss ctxt addsimps @{thms Int.int_numeral} - val tac = HEADGOAL (Simplifier.simp_tac ctxt') - in Goal.norm_result ctxt (Goal.prove_internal ctxt [] eq (K tac)) end - - fun ite_conv cv1 cv2 = - Conv.combination_conv (Conv.combination_conv (Conv.arg_conv cv1) cv2) cv2 - - fun int_conv ctxt ct = - (case Thm.term_of ct of - @{const of_nat (int)} $ (n as (@{const numeral (nat)} $ _)) => - Conv.rewr_conv (mk_number_eq ctxt (snd (HOLogic.dest_number n)) ct) - | @{const of_nat (int)} $ _ => - (Conv.rewrs_conv ints then_conv Conv.sub_conv ints_conv ctxt) else_conv - (Conv.rewr_conv int_if then_conv - ite_conv (nat_conv ctxt) (int_conv ctxt)) else_conv - Conv.sub_conv (Conv.top_sweep_conv nat_conv) ctxt - | _ => Conv.no_conv) ct - - and ints_conv ctxt = Conv.top_sweep_conv int_conv ctxt - - and expand_conv ctxt = - SMT2_Util.if_conv (is_nat_const o Term.head_of) - (expand_head_conv (Conv.rewrs_conv expands) then_conv ints_conv ctxt) (int_conv ctxt) - - and nat_conv ctxt = SMT2_Util.if_exists_conv is_nat_const' (Conv.top_sweep_conv expand_conv ctxt) - - val uses_nat_int = Term.exists_subterm (member (op aconv) nat_int_coercions) -in - -val nat_as_int_conv = nat_conv - -fun add_nat_embedding thms = - if exists (uses_nat_int o Thm.prop_of) thms then (thms, nat_embedding) else (thms, []) - -val setup_nat_as_int = - SMT2_Builtin.add_builtin_typ_ext (@{typ nat}, K true) #> - fold (SMT2_Builtin.add_builtin_fun_ext' o Term.dest_Const) builtin_nat_ops - -end - - (** normalize numerals **) local @@ -414,14 +336,12 @@ true | is_irregular_number (Const (@{const_name uminus}, _) $ Const (@{const_name Groups.zero}, _)) = true - | is_irregular_number _ = - false; + | is_irregular_number _ = false - fun is_strange_number ctxt t = is_irregular_number t andalso SMT2_Builtin.is_builtin_num ctxt t; + fun is_strange_number ctxt t = is_irregular_number t andalso SMT2_Builtin.is_builtin_num ctxt t val proper_num_ss = - simpset_of (put_simpset HOL_ss @{context} - addsimps @{thms Num.numeral_One minus_zero}) + simpset_of (put_simpset HOL_ss @{context} addsimps @{thms Num.numeral_One minus_zero}) fun norm_num_conv ctxt = SMT2_Util.if_conv (is_strange_number ctxt) (Simplifier.rewrite (put_simpset proper_num_ss ctxt)) @@ -439,10 +359,13 @@ fun unfold_conv ctxt = rewrite_case_bool_conv ctxt then_conv unfold_abs_min_max_conv ctxt then_conv - nat_as_int_conv ctxt then_conv Thm.beta_conversion true -fun unfold1 ctxt = map (apsnd (Conv.fconv_rule (unfold_conv ctxt))) +fun unfold_polymorph ctxt = map (apsnd (Conv.fconv_rule (unfold_conv ctxt))) +fun unfold_monomorph ctxt = map (apsnd (Conv.fconv_rule (normalize_numerals_conv ctxt))) + + +(* overall normalization *) fun burrow_ids f ithms = let @@ -450,14 +373,6 @@ val (thms', extra_thms) = f thms in (is ~~ thms') @ map (pair ~1) extra_thms end -fun unfold2 ctxt ithms = - ithms - |> map (apsnd (Conv.fconv_rule (normalize_numerals_conv ctxt))) - |> burrow_ids add_nat_embedding - - -(* overall normalization *) - type extra_norm = Proof.context -> thm list * thm list -> thm list * thm list structure Extra_Norms = Generic_Data @@ -511,9 +426,9 @@ wthms |> map_index I |> gen_normalize ctxt - |> unfold1 ctxt + |> unfold_polymorph ctxt |> monomorph ctxt - |> unfold2 ctxt + |> unfold_monomorph ctxt |> apply_extra_norms ctxt val _ = Theory.setup (Context.theory_map ( @@ -521,7 +436,6 @@ setup_unfolded_quants #> setup_trigger #> setup_case_bool #> - setup_abs_min_max #> - setup_nat_as_int)) + setup_abs_min_max)) end; diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/Word/Tools/smt2_word.ML --- a/src/HOL/Word/Tools/smt2_word.ML Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/Word/Tools/smt2_word.ML Sun Jul 27 21:11:35 2014 +0200 @@ -12,7 +12,7 @@ (* SMT-LIB logic *) -(* "QF_AUFBV" is too restricted for Isabelle's problems, which contain aritmetic and quantifiers. +(* "QF_AUFBV" is too restrictive for Isabelle's problems, which contain aritmetic and quantifiers. Better set the logic to "" and make at least Z3 happy. *) fun smtlib_logic ts = if exists (Term.exists_type (Term.exists_subtype is_wordT)) ts then SOME "" else NONE @@ -38,9 +38,7 @@ fun if_fixed pred m n T ts = let val (Us, U) = Term.strip_type T in - if pred (U, Us) then - SOME (n, length Us, ts, Term.list_comb o pair (Const (m, T))) - else NONE + if pred (U, Us) then SOME (n, length Us, ts, Term.list_comb o pair (Const (m, T))) else NONE end fun if_fixed_all m = if_fixed (forall (can dest_wordT) o (op ::)) m @@ -50,12 +48,7 @@ let val (m, _) = Term.dest_Const t in SMT2_Builtin.add_builtin_fun smtlib2C (Term.dest_Const t, K (f m n)) end - fun hd2 xs = hd (tl xs) - - fun mk_nat i = @{const nat} $ HOLogic.mk_number @{typ nat} i - - fun dest_nat (@{const nat} $ n) = snd (HOLogic.dest_number n) - | dest_nat t = raise TERM ("not a natural number", [t]) + val mk_nat = HOLogic.mk_number @{typ nat} fun mk_shift c [t, u] = Const c $ t $ mk_nat (snd (HOLogic.dest_number u)) | mk_shift c ts = raise TERM ("bad arguments", Const c :: ts) @@ -63,7 +56,7 @@ fun shift m n T ts = let val U = Term.domain_type T in - (case (can dest_wordT U, try (dest_nat o hd2) ts) of + (case (can dest_wordT U, try (snd o HOLogic.dest_number o hd o tl) ts) of (true, SOME i) => SOME (n, 2, [hd ts, HOLogic.mk_number U i], mk_shift (m, T)) | _ => NONE) (* FIXME: also support non-numerical shifts *) @@ -74,7 +67,7 @@ fun extract m n T ts = let val U = Term.range_type (Term.range_type T) in - (case (try (dest_nat o hd) ts, try dest_wordT U) of + (case (try (snd o HOLogic.dest_number o hd) ts, try dest_wordT U) of (SOME lb, SOME i) => SOME (index2 n (i + lb - 1) lb, 1, tl ts, mk_extract (m, T) lb) | _ => NONE) @@ -97,7 +90,7 @@ fun rotate m n T ts = let val U = Term.domain_type (Term.range_type T) in - (case (can dest_wordT U, try (dest_nat o hd) ts) of + (case (can dest_wordT U, try (snd o HOLogic.dest_number o hd) ts) of (true, SOME i) => SOME (index1 n i, 1, tl ts, mk_rotate (m, T) i) | _ => NONE) end diff -r 987c9ceeaafd -r fb71c6f100f8 src/HOL/Word/Word.thy --- a/src/HOL/Word/Word.thy Sun Jul 27 15:44:08 2014 +0200 +++ b/src/HOL/Word/Word.thy Sun Jul 27 21:11:35 2014 +0200 @@ -4760,4 +4760,3 @@ hide_const (open) Word end -