src/HOL/SMT/Z3.thy
author boehmes
Tue, 20 Oct 2009 15:03:17 +0200
changeset 33021 c065b9300d44
parent 33010 39f73a59e855
child 33610 43bf5773f92a
permissions -rw-r--r--
additional schematic rules for Z3's rewrite rule
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33010
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     1
(*  Title:      HOL/SMT/Z3.thy
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     2
    Author:     Sascha Boehme, TU Muenchen
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     3
*)
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     4
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     5
header {* Binding to the SMT solver Z3, with proof reconstruction *}
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     6
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     7
theory Z3
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     8
imports SMT_Base
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
     9
uses
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    10
  "Tools/z3_proof_terms.ML"
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    11
  "Tools/z3_proof_rules.ML"
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    12
  "Tools/z3_proof.ML"
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    13
  "Tools/z3_model.ML"
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    14
  "Tools/z3_interface.ML"
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    15
  "Tools/z3_solver.ML"
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    16
begin
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    17
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    18
setup {* Z3_Proof_Rules.setup #> Z3_Solver.setup *}
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    19
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    20
lemmas [z3_rewrite] =
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    21
  refl eq_commute conj_commute disj_commute simp_thms nnf_simps
33021
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    22
  ring_distribs field_eq_simps if_True if_False
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    23
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    24
lemma [z3_rewrite]: "(\<not>False \<longrightarrow> P) = P" by fast
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    25
lemma [z3_rewrite]: "(P \<longrightarrow> Q) = (Q \<or> \<not>P)" by fast
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    26
lemma [z3_rewrite]: "(\<not>P \<longrightarrow> Q) = (P \<or> Q)" by fast
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    27
lemma [z3_rewrite]: "(\<not>P \<longrightarrow> Q) = (Q \<or> P)" by fast
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    28
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    29
lemma [z3_rewrite]: "(if P then True else False) = P" by simp
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    30
lemma [z3_rewrite]: "(if P then False else True) = (\<not>P)" by simp
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    31
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    32
lemma [z3_rewrite]:
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    33
  "0 + (x::int) = x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    34
  "x + 0 = x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    35
  "0 * x = 0"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    36
  "1 * x = x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    37
  "x + y = y + x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    38
  by auto
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    39
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    40
lemma [z3_rewrite]:
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    41
  "0 + (x::real) = x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    42
  "x + 0 = x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    43
  "0 * x = 0"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    44
  "1 * x = x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    45
  "x + y = y + x"
c065b9300d44 additional schematic rules for Z3's rewrite rule
boehmes
parents: 33010
diff changeset
    46
  by auto
33010
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    47
39f73a59e855 added proof reconstructon for Z3,
boehmes
parents:
diff changeset
    48
end