src/HOL/Hoare/ExamplesAbort.thy
author haftmann
Tue, 23 Feb 2010 10:11:15 +0100
changeset 35316 870dfea4f9c0
parent 16733 236dfafbeb63
child 42154 478bdcea240a
permissions -rw-r--r--
dropped axclass; dropped Id; session theory Hoare.thy
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
    Author:     Tobias Nipkow
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     3
    Copyright   1998 TUM
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     4
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     5
Some small examples for programs that may abort.
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     6
*)
11d7c5a8dbb7 *** empty log message ***
nipkow
parents: 13856
diff changeset
     7
35316
870dfea4f9c0 dropped axclass; dropped Id; session theory Hoare.thy
haftmann
parents: 16733
diff changeset
     8
theory ExamplesAbort imports Hoare_Logic_Abort begin
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
     9
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    10
lemma "VARS x y z::nat
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    11
 {y = z & z \<noteq> 0} z \<noteq> 0 \<rightarrow> x := y div z {x = 1}"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    12
by vcg_simp
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    13
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    14
lemma
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    15
 "VARS a i j
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    16
 {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
    17
apply vcg_simp
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    18
done
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    19
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    20
lemma "VARS (a::int list) i
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    21
 {True}
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    22
 i := 0;
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    23
 WHILE i < length a
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    24
 INV {i <= length a}
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    25
 DO a[i] := 7; i := i+1 OD
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    26
 {True}"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    27
apply vcg_simp
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    28
done
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    29
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    30
end