equal
deleted
inserted
replaced
333 by smt |
333 by smt |
334 |
334 |
335 |
335 |
336 lemma "let P = 2 * x + 1 > x + (x::real) in P \<or> False \<or> P" by smt |
336 lemma "let P = 2 * x + 1 > x + (x::real) in P \<or> False \<or> P" by smt |
337 |
337 |
338 lemma "x + (let y = x mod 2 in 2 * y + 1) \<ge> x + (1::int)" |
338 lemma "x + (let y = x mod 2 in 2 * y + 1) \<ge> x + (1::int)" by smt |
339 sorry (* FIXME: div/mod *) |
339 |
340 |
340 lemma "x + (let y = x mod 2 in y + y) < x + (3::int)" by smt |
341 lemma "x + (let y = x mod 2 in y + y) < x + (3::int)" |
|
342 sorry (* FIXME: div/mod *) |
|
343 |
341 |
344 lemma |
342 lemma |
345 assumes "x \<noteq> (0::real)" |
343 assumes "x \<noteq> (0::real)" |
346 shows "x + x \<noteq> (let P = (abs x > 1) in if P \<or> \<not>P then 4 else 2) * x" |
344 shows "x + x \<noteq> (let P = (abs x > 1) in if P \<or> \<not>P then 4 else 2) * x" |
347 using assms by smt |
345 using assms by smt |
348 |
346 |
349 lemma |
347 lemma |
350 assumes "(n + m) mod 2 = 0" and "n mod 4 = 3" |
348 assumes "(n + m) mod 2 = 0" and "n mod 4 = 3" |
351 shows "n mod 2 = 1 & m mod 2 = (1::int)" |
349 shows "n mod 2 = 1 & m mod 2 = (1::int)" |
352 using assms sorry (* FIXME: div/mod *) |
350 using assms by smt |
|
351 |
353 |
352 |
354 |
353 |
355 subsection {* Linear arithmetic with quantifiers *} |
354 subsection {* Linear arithmetic with quantifiers *} |
356 |
355 |
357 lemma "~ (\<exists>x::int. False)" by smt |
356 lemma "~ (\<exists>x::int. False)" by smt |
482 lemma |
481 lemma |
483 "(eval_dioph ks xs = l) = |
482 "(eval_dioph ks xs = l) = |
484 (eval_dioph ks (map (\<lambda>x. x mod 2) xs) mod 2 = l mod 2 \<and> |
483 (eval_dioph ks (map (\<lambda>x. x mod 2) xs) mod 2 = l mod 2 \<and> |
485 eval_dioph ks (map (\<lambda>x. x div 2) xs) = |
484 eval_dioph ks (map (\<lambda>x. x div 2) xs) = |
486 (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)" |
485 (l - eval_dioph ks (map (\<lambda>x. x mod 2) xs)) div 2)" |
487 sorry (* FIXME: div/mod *) |
|
488 (* |
|
489 by (smt eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2]) |
486 by (smt eval_dioph_mod[where n=2] eval_dioph_div_mult[where n=2]) |
490 *) |
|
491 |
487 |
492 |
488 |
493 section {* Monomorphization examples *} |
489 section {* Monomorphization examples *} |
494 |
490 |
495 definition Pred :: "'a \<Rightarrow> bool" where "Pred x = True" |
491 definition Pred :: "'a \<Rightarrow> bool" where "Pred x = True" |