src/HOL/IMPP/Misc.ML
author oheimb
Mon, 31 Jan 2000 18:30:35 +0100
changeset 8177 e59e93ad85eb
child 8600 a466c687c726
permissions -rw-r--r--
added IMPP to HOL
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8177
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     1
(*  Title:      HOL/IMPP/Misc.ML
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     2
    ID:         $Id$
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     3
    Author:     David von Oheimb
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     4
    Copyright   1999 TUM
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     5
*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     6
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     7
section "state access";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     8
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
     9
Goalw [getlocs_def] "getlocs (st g l) = l";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    10
by (Simp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    11
qed "getlocs_def2";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    12
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    13
Goalw [update_def] "s[Loc Y::=s<Y>] = s";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    14
by (induct_tac "s" 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    15
by (simp_tac (simpset() addsimps [getlocs_def2]) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    16
br ext 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    17
by (Simp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    18
qed "update_Loc_idem2";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    19
Addsimps[update_Loc_idem2];
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    20
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    21
Goalw [update_def] "s[X::=x][X::=y] = s[X::=y]";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    22
by (induct_tac "X" 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    23
by  Auto_tac;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    24
by  (ALLGOALS (induct_tac "s"));
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    25
by  Auto_tac;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    26
by  (ALLGOALS (rtac ext));
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    27
by  Auto_tac;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    28
qed "update_overwrt";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    29
Addsimps[update_overwrt];
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    30
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    31
Goalw [update_def]"(s[Loc Y::=k])<Y'> = (if Y=Y' then k else s<Y'>)";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    32
by (induct_tac "s" 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    33
by (simp_tac (simpset() addsimps [getlocs_def2]) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    34
qed "getlocs_Loc_update";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    35
Addsimps[getlocs_Loc_update];
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    36
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    37
Goalw [update_def] "getlocs (s[Glb Y::=k]) = getlocs s";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    38
by (induct_tac "s" 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    39
by (simp_tac (simpset() addsimps [getlocs_def2]) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    40
qed "getlocs_Glb_update";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    41
Addsimps[getlocs_Glb_update];
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    42
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    43
Goalw [setlocs_def] "getlocs (setlocs s l) = l";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    44
by (induct_tac "s" 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    45
by Auto_tac;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    46
by (simp_tac (simpset() addsimps [getlocs_def2]) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    47
qed "getlocs_setlocs";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    48
Addsimps[getlocs_setlocs];
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    49
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    50
Goal "getlocs (setlocs s (getlocs s')[Y::=k]) = getlocs (s'[Y::=k])";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    51
by (induct_tac "Y" 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    52
br ext 2;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    53
by Auto_tac;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    54
qed "getlocs_setlocs_lemma";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    55
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    56
(*unused*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    57
Goalw [hoare_valids_def] 
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    58
"!v. G|={%Z s. P Z (s[Loc Y::=v]) & s<Y> = a (s[Loc Y::=v])}. \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    59
\ c .{%Z s. Q Z (s[Loc Y::=v])} ==> G|={P}. LOCAL Y:=a IN c .{Q}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    60
by (full_simp_tac (simpset() addsimps [triple_valid_def2]) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    61
by (Clarsimp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    62
by (dres_inst_tac [("x","s<Y>")] spec 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    63
by (smp_tac 1 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    64
bd spec 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    65
by (dres_inst_tac [("x","s[Loc Y::=a s]")] spec 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    66
by (Full_simp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    67
by (mp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    68
by (smp_tac 1 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    69
by (Simp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    70
qed "classic_Local_valid";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    71
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    72
Goal "!v. G|-{%Z s. P Z (s[Loc Y::=v]) & s<Y> = a (s[Loc Y::=v])}. \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    73
\ c .{%Z s. Q Z (s[Loc Y::=v])} ==> G|-{P}. LOCAL Y:=a IN c .{Q}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    74
br export_s 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    75
(*variant 1*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    76
br (hoare_derivs.Local RS conseq1) 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    77
be  spec 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    78
by (Force_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    79
(*variant 2
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    80
by (res_inst_tac [("P'","%Z s. s' = s & P Z (s[Loc Y::=a s][Loc Y::=s'<Y>]) & (s[Loc Y::=a s])<Y> = a (s[Loc Y::=a s][Loc Y::=s'<Y>])")] conseq1 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    81
by  (Clarsimp_tac 2);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    82
br hoare_derivs.Local 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    83
be spec 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    84
*)
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    85
qed "classic_Local";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    86
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    87
Goal "[| Y~=Y'; G|-{P}. c .{%Z s. s<Y'>=d} |] ==> \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    88
\ G|-{%Z s. P Z (s[Loc Y::=a s])}. LOCAL Y:=a IN c .{%Z s. s<Y'>=d}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    89
br classic_Local 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    90
by (ALLGOALS Clarsimp_tac);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    91
be conseq12 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    92
by (Clarsimp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    93
bd sym 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    94
by (Asm_full_simp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    95
qed "classic_Local_indep";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    96
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    97
Goal "[| Y~=Y'; G|-{P}. c .{%Z s. s<Y'>=d} |] ==> \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    98
\ G|-{%Z s. P Z (s[Loc Y::=a s])}. LOCAL Y:=a IN c .{%Z s. s<Y'>=d}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
    99
br export_s 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   100
br hoare_derivs.Local 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   101
by (Clarsimp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   102
qed "Local_indep";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   103
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   104
Goal "[| Y'~=Y; G|-{P}. c .{%Z s. s<Y'>=d} |] ==> \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   105
\ G|-{%Z s. P Z (s[Loc Y::=a s])}. LOCAL Y:=a IN c .{%Z s. s<Y'>=d}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   106
br weak_Local 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   107
by (ALLGOALS Clarsimp_tac);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   108
qed "weak_Local_indep";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   109
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   110
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   111
Goal "G|-{%Z s. Z = s<Y>}. LOCAL Y:=a IN c .{%Z s. Z = s<Y>}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   112
br export_s 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   113
by (res_inst_tac [("P'","%Z s. s'=s & True"), ("Q'","%Z s. s'<Y> = s<Y>")] (conseq12) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   114
by  (Clarsimp_tac 2);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   115
br hoare_derivs.Local 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   116
by (Clarsimp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   117
br trueI 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   118
qed "export_Local_invariant";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   119
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   120
Goal "G|-{%Z s. Z = s<Y>}. LOCAL Y:=a IN c .{%Z s. Z = s<Y>}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   121
br classic_Local 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   122
by (Clarsimp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   123
br (trueI RS conseq12) 1;
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   124
by (Clarsimp_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   125
qed "classic_Local_invariant";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   126
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   127
Goal "G|-{P}. BODY pn .{%Z s. Q Z (setlocs s (getlocs s')[X::=s<Res>])} ==> \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   128
\ G|-{%Z s. s'=s & I Z (getlocs (s[X::=k Z])) & P Z (setlocs s newlocs[Loc Arg::=a s])}. \
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   129
\ X:=CALL pn (a) .{%Z s. I Z (getlocs (s[X::=k Z])) & Q Z s}";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   130
by (res_inst_tac [("s'1","s'"),("Q'","%Z s. I Z (getlocs (s[X::=k Z])) = I Z (getlocs (s'[X::=k Z])) & Q Z s")] (hoare_derivs.Call RS conseq12) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   131
by  (asm_simp_tac  (simpset() addsimps [getlocs_setlocs_lemma]) 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   132
by (Force_tac 1);
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   133
qed "Call_invariant";
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   134
e59e93ad85eb added IMPP to HOL
oheimb
parents:
diff changeset
   135