src/HOLCF/IMP/HoareEx.ML
author paulson
Tue, 21 Oct 1997 10:36:23 +0200
changeset 3960 7a38fae985f9
parent 3664 2dced1ac2d8e
child 4098 71e05eb27fb6
permissions -rw-r--r--
New rewrite rules image_iff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3664
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     1
(*  Title:      HOLCF/IMP/HoareEx.ML
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     3
    Author:     Tobias Nipkow
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     4
    Copyright   1997 TUM
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     5
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     6
Correctness of while-loop.
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     7
*)
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     8
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
     9
val prems = goalw thy [hoare_valid_def]
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    10
"|= {A} c {A} ==> |= {A} WHILE b DO c {%s. A s & ~b s}";
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    11
by(cut_facts_tac prems 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    12
by (Simp_tac 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    13
by (rtac fix_ind 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    14
  (* simplifier with enhanced adm-tactic: *)
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    15
  by (Simp_tac 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    16
 by (Simp_tac 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    17
by (simp_tac (!simpset setloop (split_tac[expand_if])) 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    18
by(Blast_tac 1);
2dced1ac2d8e Example from HOLCF paper.
nipkow
parents:
diff changeset
    19
qed "WHILE_rule_sound";