src/HOL/IMP/VC.ML
author nipkow
Tue, 05 Jan 1999 17:27:59 +0100
changeset 6059 aa00e235ea27
parent 5278 a903b66822e2
permissions -rw-r--r--
In Main: moved Bin to the left to preserve the solver in its simpset.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1465
5d7a7e439cec expanded tabs
clasohm
parents: 1451
diff changeset
     1
(*  Title:      HOL/IMP/VC.ML
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
     2
    ID:         $Id$
1465
5d7a7e439cec expanded tabs
clasohm
parents: 1451
diff changeset
     3
    Author:     Tobias Nipkow
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
     4
    Copyright   1996 TUM
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
     5
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
     6
Soundness and completeness of vc
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
     7
*)
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
     8
1973
8c94c9a5be10 Converted proofs to use default clasets.
nipkow
parents: 1940
diff changeset
     9
AddIs hoare.intrs;
8c94c9a5be10 Converted proofs to use default clasets.
nipkow
parents: 1940
diff changeset
    10
3842
b55686a7b22c fixed dots;
wenzelm
parents: 2810
diff changeset
    11
val lemma = prove_goal HOL.thy "!s. P s --> P s" (K[Fast_tac 1]);
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    12
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4089
diff changeset
    13
Goal "!Q. (!s. vc c Q s) --> |- {awp c Q} astrip c {Q}";
5183
89f162de39cf Adapted to new datatype package.
berghofe
parents: 5117
diff changeset
    14
by (induct_tac "c" 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    15
    by (ALLGOALS Simp_tac);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    16
    by (Fast_tac 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    17
   by (Fast_tac 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    18
  by (Fast_tac 1);
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    19
 (* if *)
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    20
 by (Deepen_tac 4 1);
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    21
(* while *)
2031
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    22
by (safe_tac HOL_cs);
1465
5d7a7e439cec expanded tabs
clasohm
parents: 1451
diff changeset
    23
by (resolve_tac hoare.intrs 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    24
  by (rtac lemma 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    25
 by (resolve_tac hoare.intrs 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    26
 by (resolve_tac hoare.intrs 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    27
   by (ALLGOALS(fast_tac HOL_cs));
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    28
qed "vc_sound";
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    29
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4089
diff changeset
    30
Goal "!P Q. (!s. P s --> Q s) --> (!s. awp c P s --> awp c Q s)";
5183
89f162de39cf Adapted to new datatype package.
berghofe
parents: 5117
diff changeset
    31
by (induct_tac "c" 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    32
    by (ALLGOALS Asm_simp_tac);
2031
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    33
by (EVERY1[rtac allI, rtac allI, rtac impI]);
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    34
by (EVERY1[etac allE, etac allE, etac mp]);
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    35
by (EVERY1[etac allE, etac allE, etac mp, atac]);
2810
c4e16b36bc57 Added wp_while.
nipkow
parents: 2055
diff changeset
    36
qed_spec_mp "awp_mono";
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    37
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4089
diff changeset
    38
Goal "!P Q. (!s. P s --> Q s) --> (!s. vc c P s --> vc c Q s)";
5183
89f162de39cf Adapted to new datatype package.
berghofe
parents: 5117
diff changeset
    39
by (induct_tac "c" 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    40
    by (ALLGOALS Asm_simp_tac);
2031
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    41
by (safe_tac HOL_cs);
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    42
by (EVERY[etac allE 1,etac allE 1,etac impE 1,etac allE 2,etac mp 2,atac 2]);
2810
c4e16b36bc57 Added wp_while.
nipkow
parents: 2055
diff changeset
    43
by (fast_tac (HOL_cs addEs [awp_mono]) 1);
1486
7b95d7b49f7a Introduced qed_spec_mp.
nipkow
parents: 1465
diff changeset
    44
qed_spec_mp "vc_mono";
1447
bc2c0acbbf29 Added a verified verification-condition generator.
nipkow
parents:
diff changeset
    45
5278
a903b66822e2 even more tidying of Goal commands
paulson
parents: 5223
diff changeset
    46
Goal "|- {P}c{Q} ==> \
5117
7b5efef2ca74 Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
    47
\  (? ac. astrip ac = c & (!s. vc ac Q s) & (!s. P s --> awp ac Q s))";
1743
f7feaacd33d3 Updated for new form of induction rules
paulson
parents: 1486
diff changeset
    48
by (etac hoare.induct 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    49
     by (res_inst_tac [("x","Askip")] exI 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    50
     by (Simp_tac 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    51
    by (res_inst_tac [("x","Aass x a")] exI 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    52
    by (Simp_tac 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    53
   by (SELECT_GOAL(safe_tac HOL_cs)1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    54
   by (res_inst_tac [("x","Asemi ac aca")] exI 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    55
   by (Asm_simp_tac 1);
2810
c4e16b36bc57 Added wp_while.
nipkow
parents: 2055
diff changeset
    56
   by (fast_tac (HOL_cs addSEs [awp_mono,vc_mono]) 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    57
  by (SELECT_GOAL(safe_tac HOL_cs)1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    58
  by (res_inst_tac [("x","Aif b ac aca")] exI 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    59
  by (Asm_simp_tac 1);
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    60
 by (SELECT_GOAL(safe_tac HOL_cs)1);
5117
7b5efef2ca74 Removed leading !! in goals.
nipkow
parents: 5069
diff changeset
    61
 by (res_inst_tac [("x","Awhile b P ac")] exI 1);
2055
cc274e47f607 Ran expandshort
paulson
parents: 2031
diff changeset
    62
 by (Asm_simp_tac 1);
1743
f7feaacd33d3 Updated for new form of induction rules
paulson
parents: 1486
diff changeset
    63
by (safe_tac HOL_cs);
2031
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    64
by (res_inst_tac [("x","ac")] exI 1);
03a843f0f447 Ran expandshort
paulson
parents: 1973
diff changeset
    65
by (Asm_simp_tac 1);
2810
c4e16b36bc57 Added wp_while.
nipkow
parents: 2055
diff changeset
    66
by (fast_tac (HOL_cs addSEs [awp_mono,vc_mono]) 1);
1743
f7feaacd33d3 Updated for new form of induction rules
paulson
parents: 1486
diff changeset
    67
qed "vc_complete";
1451
6803ecb9b198 Added vcwp
nipkow
parents: 1447
diff changeset
    68
5069
3ea049f7979d isatool fixgoal;
wenzelm
parents: 4089
diff changeset
    69
Goal "!Q. vcawp c Q = (vc c Q, awp c Q)";
5183
89f162de39cf Adapted to new datatype package.
berghofe
parents: 5117
diff changeset
    70
by (induct_tac "c" 1);
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3842
diff changeset
    71
by (ALLGOALS (asm_simp_tac (simpset() addsimps [Let_def])));
2810
c4e16b36bc57 Added wp_while.
nipkow
parents: 2055
diff changeset
    72
qed "vcawp_vc_awp";