src/HOL/Hoare_Parallel/OG_Com.thy
author wenzelm
Sat, 22 Oct 2016 21:10:02 +0200
changeset 64350 3af8566788e7
parent 62390 842917225d56
permissions -rw-r--r--
remote_builds has PAR-SEQ semantics of old isatest-makedist; tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
     1
chapter \<open>The Owicki-Gries Method\<close>
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     2
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
     3
section \<open>Abstract Syntax\<close>
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     4
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13020
diff changeset
     5
theory OG_Com imports Main begin
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     6
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
     7
text \<open>Type abbreviations for boolean expressions and assertions:\<close>
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
     8
42174
d0be2722ce9f modernized specifications;
wenzelm
parents: 39246
diff changeset
     9
type_synonym 'a bexp = "'a set"
d0be2722ce9f modernized specifications;
wenzelm
parents: 39246
diff changeset
    10
type_synonym 'a assn = "'a set"
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    11
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    12
text \<open>The syntax of commands is defined by two mutually recursive
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 59189
diff changeset
    13
datatypes: \<open>'a ann_com\<close> for annotated commands and \<open>'a
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 59189
diff changeset
    14
com\<close> for non-annotated commands.\<close>
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    15
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    16
datatype 'a ann_com =
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    17
     AnnBasic "('a assn)"  "('a \<Rightarrow> 'a)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    18
   | AnnSeq "('a ann_com)"  "('a ann_com)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    19
   | AnnCond1 "('a assn)"  "('a bexp)"  "('a ann_com)"  "('a ann_com)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    20
   | AnnCond2 "('a assn)"  "('a bexp)"  "('a ann_com)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    21
   | AnnWhile "('a assn)"  "('a bexp)"  "('a assn)"  "('a ann_com)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    22
   | AnnAwait "('a assn)"  "('a bexp)"  "('a com)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    23
and 'a com =
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    24
     Parallel "('a ann_com option \<times> 'a assn) list"
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    25
   | Basic "('a \<Rightarrow> 'a)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    26
   | Seq "('a com)"  "('a com)"
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    27
   | Cond "('a bexp)"  "('a com)"  "('a com)"
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    28
   | While "('a bexp)"  "('a assn)"  "('a com)"
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    29
62042
6c6ccf573479 isabelle update_cartouches -c -t;
wenzelm
parents: 59189
diff changeset
    30
text \<open>The function \<open>pre\<close> extracts the precondition of an
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    31
annotated command:\<close>
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    32
39246
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    33
primrec pre ::"'a ann_com \<Rightarrow> 'a assn"  where
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    34
  "pre (AnnBasic r f) = r"
39246
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    35
| "pre (AnnSeq c1 c2) = pre c1"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    36
| "pre (AnnCond1 r b c1 c2) = r"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    37
| "pre (AnnCond2 r b c) = r"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    38
| "pre (AnnWhile r b i c) = r"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    39
| "pre (AnnAwait r b c) = r"
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    40
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    41
text \<open>Well-formedness predicate for atomic programs:\<close>
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    42
39246
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    43
primrec atom_com :: "'a com \<Rightarrow> bool" where
13020
791e3b4c4039 HoareParallel Theories
prensani
parents:
diff changeset
    44
  "atom_com (Parallel Ts) = False"
39246
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    45
| "atom_com (Basic f) = True"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    46
| "atom_com (Seq c1 c2) = (atom_com c1 \<and> atom_com c2)"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    47
| "atom_com (Cond b c1 c2) = (atom_com c1 \<and> atom_com c2)"
9e58f0499f57 modernized primrec
haftmann
parents: 32621
diff changeset
    48
| "atom_com (While b i c) = atom_com c"
59189
ad8e0a789af6 update_cartouches;
wenzelm
parents: 58884
diff changeset
    49
62390
842917225d56 more canonical names
nipkow
parents: 62042
diff changeset
    50
end