src/HOL/Hoare/ExamplesAbort.thy
author haftmann
Wed, 21 Jan 2009 16:47:31 +0100
changeset 29580 117b88da143c
parent 16733 236dfafbeb63
child 35316 870dfea4f9c0
permissions -rw-r--r--
dropped ID
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
*)
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     8
16417
9bc16273c2d4 migrated theory headers to new format
haftmann
parents: 13875
diff changeset
     9
theory ExamplesAbort imports HoareAbort begin
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    10
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    11
lemma "VARS x y z::nat
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    12
 {y = z & z \<noteq> 0} z \<noteq> 0 \<rightarrow> x := y div z {x = 1}"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    13
by vcg_simp
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    14
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    15
lemma
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    16
 "VARS a i j
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    17
 {k <= length a & i < k & j < k} j < length a \<rightarrow> a[i] := a!j {True}"
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    18
apply vcg_simp
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    19
done
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    20
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    21
lemma "VARS (a::int list) i
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    22
 {True}
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    23
 i := 0;
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    24
 WHILE i < length a
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    25
 INV {i <= length a}
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    26
 DO a[i] := 7; i := i+1 OD
13856
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
done
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    30
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    31
end