src/HOL/Hoare/ExamplesAbort.thy
author haftmann
Fri, 01 Nov 2013 18:51:14 +0100
changeset 54230 b1d955791529
parent 42154 478bdcea240a
child 72990 db8f94656024
permissions -rw-r--r--
more simplification rules on unary and binary minus
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}"
42154
478bdcea240a tuned proofs;
wenzelm
parents: 35316
diff changeset
    17
by vcg_simp
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    18
13856
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}
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    24
 DO a[i] := 7; i := i+1 OD
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    25
 {True}"
42154
478bdcea240a tuned proofs;
wenzelm
parents: 35316
diff changeset
    26
by vcg_simp
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    27
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    28
end