src/HOLCF/IMP/HoareEx.thy
author aspinall
Wed, 13 Jul 2005 20:07:01 +0200
changeset 16821 ba1f6aba44ed
parent 16417 9bc16273c2d4
child 19737 3b8920131be2
permissions -rw-r--r--
Update PGIP packet handling, fixing unique session identifier.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3664
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     1
(*  Title:      HOLCF/IMP/HoareEx.thy
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow, TUM
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     4
    Copyright   1997 TUM
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     5
*)
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     6
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
     7
header "Correctness of Hoare by Fixpoint Reasoning"
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
     8
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 12600
diff changeset
     9
theory HoareEx imports Denotational begin
3664
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    10
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    11
text {*
12546
wenzelm
parents: 12431
diff changeset
    12
  An example from the HOLCF paper by Müller, Nipkow, Oheimb, Slotosch
wenzelm
parents: 12431
diff changeset
    13
  \cite{MuellerNvOS99}.  It demonstrates fixpoint reasoning by showing
wenzelm
parents: 12431
diff changeset
    14
  the correctness of the Hoare rule for while-loops.
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    15
*}
3664
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    16
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    17
types assn = "state => bool"
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    18
12600
wenzelm
parents: 12546
diff changeset
    19
constdefs
wenzelm
parents: 12546
diff changeset
    20
  hoare_valid :: "[assn, com, assn] => bool"    ("|= {(1_)}/ (_)/ {(1_)}" 50)
wenzelm
parents: 12546
diff changeset
    21
  "|= {A} c {B} == \<forall>s t. A s \<and> D c $(Discr s) = Def t --> B t"
3664
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    22
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    23
lemma WHILE_rule_sound:
12600
wenzelm
parents: 12546
diff changeset
    24
    "|= {A} c {A} ==> |= {A} \<WHILE> b \<DO> c {\<lambda>s. A s \<and> \<not> b s}"
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    25
  apply (unfold hoare_valid_def)
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    26
  apply (simp (no_asm))
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    27
  apply (rule fix_ind)
12600
wenzelm
parents: 12546
diff changeset
    28
    apply (simp (no_asm)) -- "simplifier with enhanced @{text adm}-tactic"
12431
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    29
   apply (simp (no_asm))
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    30
  apply (simp (no_asm))
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    31
  apply blast
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    32
  done
07ec657249e5 converted to Isar
kleing
parents: 10835
diff changeset
    33
3664
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    34
end