src/HOL/Hoare/ExamplesAbort.thy
author paulson
Tue, 29 Mar 2005 12:30:48 +0200
changeset 15635 8408a06590a6
parent 13875 12997e3ddd8d
child 16417 9bc16273c2d4
permissions -rw-r--r--
converted HOL-Subst to tactic scripts
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
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
     9
theory ExamplesAbort = HoareAbort:
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
apply arith
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    20
done
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    21
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    22
lemma "VARS (a::int list) i
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    23
 {True}
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    24
 i := 0;
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    25
 WHILE i < length a
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    26
 INV {i <= length a}
13875
12997e3ddd8d *** empty log message ***
nipkow
parents: 13857
diff changeset
    27
 DO a[i] := 7; i := i+1 OD
13856
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    28
 {True}"
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    29
apply vcg_simp
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    30
apply arith
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    31
done
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    32
f5d08c341216 *** empty log message ***
nipkow
parents:
diff changeset
    33
end