src/HOL/SMT_Examples/SMT_Examples.thy
changeset 48069 e9b2782c4f99
parent 47155 ade3fc826af3
child 50666 6f48853f08d5
--- a/src/HOL/SMT_Examples/SMT_Examples.thy	Sun Jun 03 15:49:55 2012 +0200
+++ b/src/HOL/SMT_Examples/SMT_Examples.thy	Mon Jun 04 09:07:23 2012 +0200
@@ -327,9 +327,13 @@
 
 lemma "let P = 2 * x + 1 > x + (x::real) in P \<or> False \<or> P" by smt
 
-lemma "x + (let y = x mod 2 in 2 * y + 1) \<ge> x + (1::int)" by smt
+lemma "x + (let y = x mod 2 in 2 * y + 1) \<ge> x + (1::int)"
+  using [[z3_with_extensions]]
+  by smt
 
-lemma "x + (let y = x mod 2 in y + y) < x + (3::int)" by smt
+lemma "x + (let y = x mod 2 in y + y) < x + (3::int)"
+  using [[z3_with_extensions]]
+  by smt
 
 lemma
   assumes "x \<noteq> (0::real)"
@@ -339,7 +343,7 @@
 lemma
   assumes "(n + m) mod 2 = 0" and "n mod 4 = 3"
   shows "n mod 2 = 1 & m mod 2 = (1::int)"
-  using assms by smt
+  using assms [[z3_with_extensions]] by smt
 
 
 
@@ -393,18 +397,21 @@
 subsection {* Non-linear arithmetic over integers and reals *}
 
 lemma "a > (0::int) \<Longrightarrow> a*b > 0 \<Longrightarrow> b > 0"
-  using [[smt_oracle=true]]
+  using [[smt_oracle, z3_with_extensions]]
   by smt
 
 lemma  "(a::int) * (x + 1 + y) = a * x + a * (y + 1)"
+  using [[z3_with_extensions]]
   by smt
 
 lemma "((x::real) * (1 + y) - x * (1 - y)) = (2 * x * y)"
+  using [[z3_with_extensions]]
   by smt
 
 lemma
   "(U::int) + (1 + p) * (b + e) + p * d =
    U + (2 * (1 + p) * (b + e) + (1 + p) * d + d * p) - (1 + p) * (b + d + e)"
+  using [[z3_with_extensions]]
   by smt
 
 lemma [z3_rule]:
@@ -413,7 +420,9 @@
   shows False
   using assms by (metis mult_le_0_iff)
 
-lemma "x * y \<le> (0 :: int) \<Longrightarrow> x \<le> 0 \<or> y \<le> 0" by smt
+lemma "x * y \<le> (0 :: int) \<Longrightarrow> x \<le> 0 \<or> y \<le> 0"
+  using [[z3_with_extensions]]
+  by smt
 
 
 
@@ -498,6 +507,7 @@
     eval_dioph ks (map (\<lambda>x. x div 2) xs) =
       (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)"
   using [[smt_oracle=true]] (*FIXME*)
+  using [[z3_with_extensions]]
   by (smt eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2])