src/HOL/SMT_Examples/Boogie.thy
author wenzelm
Tue, 03 Sep 2013 01:12:40 +0200
changeset 53374 a14d2a854c02
parent 52722 2c81f7baf8c4
child 54447 019394de2b41
permissions -rw-r--r--
tuned proofs -- clarified flow of facts wrt. calculation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52722
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     1
(*  Title:      HOL/SMT_Examples/Boogie.thy
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     2
    Author:     Sascha Boehme, TU Muenchen
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     3
*)
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     4
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     5
header {* Proving Boogie-generated verification conditions *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     6
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     7
theory Boogie
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     8
imports Main
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
     9
begin
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    10
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    11
text {*
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    12
HOL-Boogie and its applications are described in:
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    13
\begin{itemize}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    14
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    15
\item Sascha B"ohme, K. Rustan M. Leino, and Burkhart Wolff.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    16
HOL-Boogie --- An Interactive Prover for the Boogie Program-Verifier.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    17
Theorem Proving in Higher Order Logics, 2008.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    18
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    19
\item Sascha B"ohme, Micha{\l} Moskal, Wolfram Schulte, and Burkhart Wolff.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    20
HOL-Boogie --- An Interactive Prover-Backend for the Verifying C Compiler.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    21
Journal of Automated Reasoning, 2009.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    22
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    23
\end{itemize}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    24
*}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    25
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    26
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    27
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    28
section {* Built-in types and functions of Boogie *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    29
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    30
subsection {* Integer arithmetics *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    31
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    32
text {*
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    33
The operations @{text div} and @{text mod} are built-in in Boogie, but
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    34
without a particular semantics due to different interpretations in
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    35
programming languages. We assume that each application comes with a
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    36
proper axiomatization.
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    37
*}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    38
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    39
axiomatization
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    40
  boogie_div :: "int \<Rightarrow> int \<Rightarrow> int" (infixl "div'_b" 70) and
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    41
  boogie_mod :: "int \<Rightarrow> int \<Rightarrow> int" (infixl "mod'_b" 70)
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    42
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    43
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    44
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    45
section {* Setup *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    46
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    47
ML_file "boogie.ML"
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    48
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    49
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    50
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    51
section {* Verification condition proofs *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    52
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    53
declare [[smt_oracle = false]]
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    54
declare [[smt_read_only_certificates = true]]
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    55
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    56
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    57
declare [[smt_certificates = "Boogie_Max.certs"]]
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    58
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    59
setup {* Boogie.boogie_prove "Boogie_Max.b2i" *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    60
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    61
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    62
declare [[smt_certificates = "Boogie_Dijkstra.certs"]]
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    63
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    64
setup {* Boogie.boogie_prove "Boogie_Dijkstra.b2i" *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    65
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    66
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    67
declare [[z3_with_extensions = true]]
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    68
declare [[smt_certificates = "VCC_Max.certs"]]
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    69
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    70
setup {* Boogie.boogie_prove "VCC_Max.b2i" *}
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    71
2c81f7baf8c4 removed obsolete HOL-Boogie session;
boehmes
parents:
diff changeset
    72
end