src/HOL/Hoare/ExamplesAbort.thy
author nipkow
Tue, 11 Mar 2003 15:04:24 +0100
changeset 13857 11d7c5a8dbb7
parent 13856 f5d08c341216
child 13875 12997e3ddd8d
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13857
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     1
(*  Title:      HOL/Hoare/ExamplesAbort.thy
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     2
    ID:         $Id$
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     3
    Author:     Tobias Nipkow
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     4
    Copyright   1998 TUM
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     5
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     6
Some small examples for programs that may abort.
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     7
Currently only show the absence of abort.
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     8
*)
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     9
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    10
theory ExamplesAbort = HoareAbort:
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    11
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    12
syntax guarded_com :: "'bool \<Rightarrow> 'a com \<Rightarrow> 'a com"  ("_ \<rightarrow> _" 60)
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    13
translations "P \<rightarrow> c" == "IF P THEN c ELSE Abort FI"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    14
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    15
lemma "VARS x y z::nat
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    16
 {y = z & z \<noteq> 0} z \<noteq> 0 \<rightarrow> x := y div z {x = 1}"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    17
by vcg_simp
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    18
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    19
lemma "VARS (a::int list) i
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    20
 {True}
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    21
 i := 0;
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    22
 WHILE i < length a
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    23
 INV {i <= length a}
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    24
 DO i < length a \<rightarrow> a := a[i := 7];
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    25
    i := i+1
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    26
 OD
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    27
 {True}"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    28
apply vcg_simp
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    29
apply arith
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    30
done
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    31
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    32
end