src/HOL/TLA/Memory/MemoryImplementation.ML
author wenzelm
Mon, 29 Nov 1999 15:52:49 +0100
changeset 8039 a901bafe4578
parent 7570 a9391550eea1
child 9517 f58863b1406a
permissions -rw-r--r--
Goal: tuned pris;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     1
(* 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     2
    File:        MemoryImplementation.ML
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     3
    Author:      Stephan Merz
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
    Copyright:   1997 University of Munich
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     5
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
    RPC-Memory example: Memory implementation (ML file)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     7
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     8
    The main theorem is theorem "Implementation" at the end of this file,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
    which shows that the composition of a reliable memory, an RPC component, and
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
    a memory clerk implements an unreliable memory. The files "MIsafe.ML" and
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    11
    "MIlive.ML" contain lower-level lemmas for the safety and liveness parts.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    12
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    13
    Steps are (roughly) numbered as in the hand proof.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    14
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    15
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    16
(* --------------------------- automatic prover --------------------------- *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
6919
7985b229806c changed header to cope with default if_weak_cong
paulson
parents: 6255
diff changeset
    18
Delcongs [if_weak_cong];
7985b229806c changed header to cope with default if_weak_cong
paulson
parents: 6255
diff changeset
    19
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    20
val MI_css = (claset(), simpset());
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    21
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    22
(* A more aggressive variant that tries to solve subgoals by assumption
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
   or contradiction during the simplification.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    24
   THIS IS UNSAFE, BECAUSE IT DOESN'T RECORD THE CHOICES!!
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    25
   (but it can be a lot faster than MI_css)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    26
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
val MI_fast_css =
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    28
  let 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    29
    val (cs,ss) = MI_css
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    30
  in
7570
a9391550eea1 Mod because of new solver interface.
nipkow
parents: 6919
diff changeset
    31
    (cs addSEs [squareE], ss addSSolver (mk_solver "" (fn thms => assume_tac ORELSE' (etac notE))))
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    32
end;
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    33
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    34
val temp_elim = make_elim o temp_use;
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    35
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    36
(****************************** The history variable ******************************)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    37
section "History variable";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    38
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    39
qed_goal "HistoryLemma" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    40
   "|- Init(!p. ImpInit p) & [](!p. ImpNext p)  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    41
\      --> (EEX rmhist. Init(! p. HInit rmhist p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    42
\                     & [](!p. [HNext rmhist p]_(c p, r p, m p, rmhist!p)))"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    43
   (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    44
             rtac historyI 1, TRYALL atac, rtac MI_base 1,
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    45
             action_simp_tac (simpset() addsimps [HInit_def]) [] [] 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    46
             etac fun_cong 1,
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    47
             action_simp_tac (simpset() addsimps [HNext_def]) [busy_squareI] [] 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    48
             etac fun_cong 1
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    49
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    50
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    51
qed_goal "History" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    52
   "|- Implementation --> (EEX rmhist. Hist rmhist)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    53
   (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    54
             rtac ((temp_use HistoryLemma) RS eex_mono) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    55
             force_tac (MI_css 
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    56
                        addsimps2 [Hist_def,HistP_def,Init_def,all_box,split_box_conj]) 3,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    57
             auto_tac (MI_css
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    58
                       addsimps2 [Implementation_def,MClkISpec_def,RPCISpec_def,IRSpec_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    59
                                  MClkIPSpec_def,RPCIPSpec_def,RPSpec_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    60
                                  ImpInit_def,Init_def,ImpNext_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    61
                                  c_def,r_def,m_def,all_box,split_box_conj])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    62
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    63
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    64
(******************************** The safety part *********************************)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    65
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    66
section "The safety part";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    67
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    68
(* ------------------------- Include lower-level lemmas ------------------------- *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    69
use "MIsafe.ML";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    70
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    71
section "Correctness of predicate-action diagram";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    72
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    73
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    74
(* ========== Step 1.1 ================================================= *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    75
(* The implementation's initial condition implies the state predicate S1 *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    76
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    77
qed_goal "Step1_1" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    78
   "|- ImpInit p & HInit rmhist p --> S1 rmhist p"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    79
   (fn _ => [auto_tac (MI_fast_css
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    80
		       addsimps2 [MVNROKBA_def,MClkInit_def,RPCInit_def,PInit_def,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    81
			          HInit_def,ImpInit_def,S_def,S1_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    82
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    83
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    84
(* ========== Step 1.2 ================================================== *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    85
(* Figure 16 is a predicate-action diagram for the implementation. *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    86
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    87
qed_goal "Step1_2_1" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    88
   "|- [HNext rmhist p]_(c p,r p,m p, rmhist!p) & ImpNext p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    89
\             & ~unchanged (e p, c p, r p, m p, rmhist!p)  & $S1 rmhist p \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    90
\      --> (S2 rmhist p)$ & ENext p & unchanged (c p, r p, m p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    91
   (fn _ => [action_simp_tac (simpset() addsimps [ImpNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    92
                             (map temp_elim [S1ClerkUnch,S1RPCUnch,S1MemUnch,S1Hist]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    93
             auto_tac (MI_fast_css addSIs2 [S1Env])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    94
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    95
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    96
qed_goal "Step1_2_2" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    97
   "|- [HNext rmhist p]_(c p,r p,m p, rmhist!p) & ImpNext p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    98
\             & ~unchanged (e p, c p, r p, m p, rmhist!p) & $S2 rmhist p \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
    99
\      --> (S3 rmhist p)$ & MClkFwd memCh crCh cst p & unchanged (e p, r p, m p, rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   100
   (fn _ => [action_simp_tac (simpset() addsimps [ImpNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   101
                             (map temp_elim [S2EnvUnch,S2RPCUnch,S2MemUnch,S2Hist]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   102
	     auto_tac (MI_fast_css addSIs2 [S2Clerk,S2Forward])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   103
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   104
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   105
qed_goal "Step1_2_3" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   106
   "|- [HNext rmhist p]_(c p,r p,m p, rmhist!p) & ImpNext p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   107
\             & ~unchanged (e p, c p, r p, m p, rmhist!p) & $S3 rmhist p \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   108
\      --> ((S4 rmhist p)$ & RPCFwd crCh rmCh rst p & unchanged (e p, c p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   109
\        | ((S6 rmhist p)$ & RPCFail crCh rmCh rst p & unchanged (e p, c p, m p))"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   110
   (fn _ => [action_simp_tac (simpset() addsimps [ImpNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   111
	          (map temp_elim [S3EnvUnch,S3ClerkUnch,S3MemUnch]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   112
             action_simp_tac (simpset()) [] 
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   113
                  (squareE::map temp_elim [S3RPC,S3Forward,S3Fail]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   114
             auto_tac (MI_css addDs2 [S3Hist])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   115
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   116
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   117
qed_goal "Step1_2_4" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   118
   "|- [HNext rmhist p]_(c p,r p,m p, rmhist!p) & ImpNext p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   119
\             & ~unchanged (e p, c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   120
\             & $S4 rmhist p & (!l. $(MemInv mm l))     \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   121
\      --> ((S4 rmhist p)$ & Read rmCh mm ires p & unchanged (e p, c p, r p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   122
\        | ((S4 rmhist p)$ & (? l. Write rmCh mm ires p l) & unchanged (e p, c p, r p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   123
\        | ((S5 rmhist p)$ & MemReturn rmCh ires p & unchanged (e p, c p, r p))"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   124
   (fn _ => [action_simp_tac (simpset() addsimps [ImpNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   125
                             (map temp_elim [S4EnvUnch,S4ClerkUnch,S4RPCUnch]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   126
             action_simp_tac (simpset() addsimps [RNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   127
                             (squareE::map temp_elim [S4Read,S4Write,S4Return]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   128
             auto_tac (MI_css addDs2 [S4Hist])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   129
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   130
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   131
qed_goal "Step1_2_5" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   132
   "|- [HNext rmhist p]_(c p,r p,m p, rmhist!p) & ImpNext p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   133
\             & ~unchanged (e p, c p, r p, m p, rmhist!p) & $S5 rmhist p \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   134
\      --> ((S6 rmhist p)$ & RPCReply crCh rmCh rst p & unchanged (e p, c p, m p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   135
\        | ((S6 rmhist p)$ & RPCFail crCh rmCh rst p & unchanged (e p, c p, m p))"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   136
   (fn _ => [action_simp_tac (simpset() addsimps [ImpNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   137
                             (map temp_elim [S5EnvUnch,S5ClerkUnch,S5MemUnch,S5Hist]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   138
	     action_simp_tac (simpset()) [] [squareE, temp_elim S5RPC] 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   139
	     auto_tac (MI_fast_css addSDs2 [S5Reply,S5Fail])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   140
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   141
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   142
qed_goal "Step1_2_6" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   143
   "|- [HNext rmhist p]_(c p,r p,m p, rmhist!p) & ImpNext p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   144
\             & ~unchanged (e p, c p, r p, m p, rmhist!p) & $S6 rmhist p \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   145
\      --> ((S1 rmhist p)$ & MClkReply memCh crCh cst p & unchanged (e p, r p, m p))\
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   146
\        | ((S3 rmhist p)$ & MClkRetry memCh crCh cst p & unchanged (e p,r p,m p,rmhist!p))"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   147
   (fn _ => [action_simp_tac (simpset() addsimps [ImpNext_def]) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   148
                             (map temp_elim [S6EnvUnch,S6RPCUnch,S6MemUnch]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   149
             action_simp_tac (simpset()) []
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   150
                             (squareE::map temp_elim [S6Clerk,S6Retry,S6Reply]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   151
             auto_tac (MI_css addDs2 [S6Hist])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   152
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   153
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   154
(* --------------------------------------------------------------------------
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   155
   Step 1.3: S1 implies the barred initial condition.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   156
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   157
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   158
section "Initialization (Step 1.3)";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   159
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   160
qed_goal "Step1_3" MemoryImplementation.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   161
   "|- S1 rmhist p --> PInit (resbar rmhist) p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   162
   (fn _ => [action_simp_tac (simpset() addsimps [resbar_def,PInit_def,S_def,S1_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   163
                             [] [] 1
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   164
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   165
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   166
(* ----------------------------------------------------------------------
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   167
   Step 1.4: Implementation's next-state relation simulates specification's
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   168
             next-state relation (with appropriate substitutions)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   169
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   170
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   171
section "Step simulation (Step 1.4)";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   172
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   173
qed_goal "Step1_4_1" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   174
   "|- ENext p & $S1 rmhist p & (S2 rmhist p)$ & unchanged (c p, r p, m p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   175
\      --> unchanged (rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   176
  (fn _ => [ auto_tac (MI_fast_css addsimps2 [c_def,r_def,m_def,resbar_def]) ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   177
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   178
qed_goal "Step1_4_2" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   179
   "|- MClkFwd memCh crCh cst p & $S2 rmhist p & (S3 rmhist p)$  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   180
\                & unchanged (e p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   181
\      --> unchanged (rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   182
  (fn _ => [action_simp_tac
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   183
                (simpset() addsimps [MClkFwd_def, e_def, r_def, m_def, resbar_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   184
                                     S_def, S2_def, S3_def]) [] [] 1
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   185
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   186
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   187
qed_goal "Step1_4_3a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   188
   "|- RPCFwd crCh rmCh rst p & $S3 rmhist p & (S4 rmhist p)$    \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   189
\                  & unchanged (e p, c p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   190
\      --> unchanged (rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   191
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   192
            REPEAT (dresolve_tac (map temp_use [S3_excl,S4_excl]) 1),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   193
            action_simp_tac 
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   194
                 (simpset() addsimps [e_def,c_def,m_def,resbar_def,S_def, S3_def]) [] [] 1
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   195
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   196
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   197
qed_goal "Step1_4_3b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   198
   "|- RPCFail crCh rmCh rst p & $S3 rmhist p & (S6 rmhist p)$ & unchanged (e p, c p, m p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   199
\      --> MemFail memCh (resbar rmhist) p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   200
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   201
            dtac (temp_use S6_excl) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   202
            auto_tac (MI_css addsimps2 [RPCFail_def,MemFail_def,e_def,c_def,m_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   203
		                        resbar_def]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   204
            force_tac (MI_css addsimps2 [S3_def,S_def]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   205
            auto_tac (MI_css addsimps2 [Return_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   206
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   207
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   208
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   209
qed_goal "Step1_4_4a1" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   210
   "|- $S4 rmhist p & (S4 rmhist p)$ & ReadInner rmCh mm ires p l \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   211
\             & unchanged (e p, c p, r p, rmhist!p) & $MemInv mm l \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   212
\      --> ReadInner memCh mm (resbar rmhist) p l"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   213
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   214
            REPEAT (dtac (temp_use S4_excl) 1),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   215
            action_simp_tac 
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   216
               (simpset() addsimps [ReadInner_def,GoodRead_def,BadRead_def,e_def,c_def,m_def]) 
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   217
               [] [] 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   218
            auto_tac (MI_css addsimps2 [resbar_def]),
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   219
	    ALLGOALS (action_simp_tac 
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   220
                        (simpset() addsimps [RPCRelayArg_def,MClkRelayArg_def,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   221
		                            S_def,S4_def,RdRequest_def,MemInv_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   222
		      [] [impE,MemValNotAResultE])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   223
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   224
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   225
qed_goal "Step1_4_4a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   226
   "|- Read rmCh mm ires p & $S4 rmhist p & (S4 rmhist p)$ \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   227
\           & unchanged (e p, c p, r p, rmhist!p) & (!l. $(MemInv mm l)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   228
\      --> Read memCh mm (resbar rmhist) p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   229
  (fn _ => [ force_tac (MI_css addsimps2 [Read_def] addSEs2 [Step1_4_4a1]) 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   230
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   231
qed_goal "Step1_4_4b1" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   232
   "|- $S4 rmhist p & (S4 rmhist p)$ & WriteInner rmCh mm ires p l v   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   233
\                   & unchanged (e p, c p, r p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   234
\      --> WriteInner memCh mm (resbar rmhist) p l v"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   235
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   236
            REPEAT (dtac (temp_use S4_excl) 1),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   237
            action_simp_tac 
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   238
               (simpset() addsimps [WriteInner_def, GoodWrite_def, BadWrite_def,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   239
			           e_def, c_def, m_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   240
               [] [] 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   241
	    auto_tac (MI_css addsimps2 [resbar_def]),
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   242
	    ALLGOALS (action_simp_tac
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   243
                        (simpset() addsimps [RPCRelayArg_def,MClkRelayArg_def,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   244
		                            S_def,S4_def,WrRequest_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   245
		      [] [])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   246
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   247
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   248
qed_goal "Step1_4_4b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   249
   "|- Write rmCh mm ires p l & $S4 rmhist p & (S4 rmhist p)$   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   250
\                 & unchanged (e p, c p, r p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   251
\      --> Write memCh mm (resbar rmhist) p l"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   252
  (fn _ => [ force_tac (MI_css addsimps2 [Write_def] addSEs2 [Step1_4_4b1]) 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   253
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   254
qed_goal "Step1_4_4c" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   255
   "|- MemReturn rmCh ires p & $S4 rmhist p & (S5 rmhist p)$ & unchanged (e p, c p, r p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   256
\      --> unchanged (rtrner memCh!p, resbar rmhist!p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   257
  (fn _ => [action_simp_tac
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   258
	       (simpset() addsimps [e_def,c_def,r_def,resbar_def]) [] [] 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   259
	    REPEAT (dresolve_tac [temp_use S4_excl, temp_use S5_excl] 1),
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   260
	    auto_tac (MI_fast_css addsimps2 [MemReturn_def,Return_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   261
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   262
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   263
qed_goal "Step1_4_5a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   264
   "|- RPCReply crCh rmCh rst p & $S5 rmhist p & (S6 rmhist p)$ & unchanged (e p, c p, m p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   265
\      --> unchanged (rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   266
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   267
            REPEAT (dresolve_tac [temp_use S5_excl, temp_use S6_excl] 1),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   268
            auto_tac (MI_css addsimps2 [e_def,c_def,m_def, resbar_def]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   269
	    auto_tac (MI_css addsimps2 [RPCReply_def,Return_def,S5_def,S_def] 
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   270
                             addSDs2 [MVOKBAnotRF])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   271
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   272
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   273
qed_goal "Step1_4_5b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   274
   "|- RPCFail crCh rmCh rst p & $S5 rmhist p & (S6 rmhist p)$ & unchanged (e p, c p, m p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   275
\      --> MemFail memCh (resbar rmhist) p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   276
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   277
            dtac (temp_use S6_excl) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   278
            auto_tac (MI_css addsimps2 [e_def, c_def, m_def, RPCFail_def, Return_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   279
		 		        MemFail_def, resbar_def]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   280
	    auto_tac (MI_css addsimps2 [S5_def,S_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   281
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   282
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   283
qed_goal "Step1_4_6a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   284
   "|- MClkReply memCh crCh cst p & $S6 rmhist p & (S1 rmhist p)$ & unchanged (e p, r p, m p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   285
\      --> MemReturn memCh (resbar rmhist) p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   286
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   287
            dtac (temp_use S6_excl) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   288
            action_simp_tac
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   289
	      (simpset() addsimps [e_def, r_def, m_def, MClkReply_def, MemReturn_def,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   290
				  Return_def, resbar_def]) [] [] 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   291
	    ALLGOALS Asm_full_simp_tac,  (* simplify if-then-else *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   292
	    ALLGOALS (action_simp_tac
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   293
    	              (simpset() addsimps [MClkReplyVal_def,S6_def,S_def])
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   294
		      [] [MVOKBARFnotNR])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   295
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   296
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   297
qed_goal "Step1_4_6b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   298
   "|- MClkRetry memCh crCh cst p & $S6 rmhist p & (S3 rmhist p)$   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   299
\                & unchanged (e p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   300
\      --> MemFail memCh (resbar rmhist) p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   301
  (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   302
            dtac (temp_use S3_excl) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   303
            action_simp_tac
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   304
	       (simpset() addsimps [e_def, r_def, m_def, MClkRetry_def, MemFail_def, resbar_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   305
	       [] [] 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   306
	    auto_tac (MI_css addsimps2 [S6_def,S_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   307
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   308
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   309
qed_goal "S_lemma" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   310
   "|- unchanged (e p, c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   311
\      --> unchanged (S rmhist ec cc rc cs rs hs1 hs2 p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   312
   (fn _ => [auto_tac (MI_css addsimps2 [e_def,c_def,r_def,m_def,caller_def,rtrner_def,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   313
					 S_def,Calling_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   314
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   315
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   316
qed_goal "Step1_4_7H" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   317
   "|- unchanged (e p, c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   318
\      --> unchanged (rtrner memCh!p, S1 rmhist p, S2 rmhist p, S3 rmhist p, \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   319
\                     S4 rmhist p, S5 rmhist p, S6 rmhist p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   320
   (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   321
             rtac conjI 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   322
             force_tac (MI_css addsimps2 [c_def]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   323
             force_tac (MI_css addsimps2 [S1_def,S2_def,S3_def,S4_def,S5_def,S6_def]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   324
                               addSIs2 [S_lemma]) 1
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   325
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   326
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   327
qed_goal "Step1_4_7" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   328
   "|- unchanged (e p, c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   329
\      --> unchanged (rtrner memCh!p, resbar rmhist!p, S1 rmhist p, S2 rmhist p, S3 rmhist p, \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   330
\                     S4 rmhist p, S5 rmhist p, S6 rmhist p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   331
  (fn _ => [rtac actionI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   332
            rewrite_goals_tac action_rews,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   333
            rtac impI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   334
            forward_tac [temp_use Step1_4_7H] 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   335
	    auto_tac (MI_css addsimps2 [e_def,c_def,r_def,m_def,rtrner_def,resbar_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   336
           ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   337
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   338
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   339
(* Frequently needed abbreviation: distinguish between idling and non-idling
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   340
   steps of the implementation, and try to solve the idling case by simplification
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   341
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   342
fun split_idle_tac simps i = 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   343
    EVERY [TRY (rtac actionI i),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   344
	   case_tac "(s,t) |= unchanged (e p, c p, r p, m p, rmhist!p)" i,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   345
	   rewrite_goals_tac action_rews,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   346
	   forward_tac [temp_use Step1_4_7] i,
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   347
	   asm_full_simp_tac (simpset() addsimps simps) i
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   348
	  ];
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   349
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   350
(* ----------------------------------------------------------------------
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   351
   Combine steps 1.2 and 1.4 to prove that the implementation satisfies
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   352
   the specification's next-state relation.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   353
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   354
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   355
(* Steps that leave all variables unchanged are safe, so I may assume
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   356
   that some variable changes in the proof that a step is safe. *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   357
qed_goal "unchanged_safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   358
   "|- (~unchanged (e p, c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   359
\        --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   360
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   361
   (fn _ => [split_idle_tac [square_def] 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   362
             Force_tac 1
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   363
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   364
(* turn into (unsafe, looping!) introduction rule *)
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   365
bind_thm("unchanged_safeI", impI RS (action_use unchanged_safe));
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   366
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   367
qed_goal "S1safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   368
   "|- $S1 rmhist p & ImpNext p & [HNext rmhist p]_(c p,r p,m p, rmhist!p)   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   369
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   370
   (fn _ => [Clarsimp_tac 1, 
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   371
             rtac unchanged_safeI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   372
             rtac idle_squareI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   373
	     auto_tac (MI_css addSDs2 [Step1_2_1,Step1_4_1])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   374
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   375
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   376
qed_goal "S2safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   377
   "|- $S2 rmhist p & ImpNext p & [HNext rmhist p]_(c p,r p,m p, rmhist!p)   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   378
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   379
   (fn _ => [Clarsimp_tac 1, 
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   380
             rtac unchanged_safeI 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   381
             rtac idle_squareI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   382
	     auto_tac (MI_css addSDs2 [Step1_2_2,Step1_4_2])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   383
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   384
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   385
qed_goal "S3safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   386
   "|- $S3 rmhist p & ImpNext p & [HNext rmhist p]_(c p,r p,m p, rmhist!p)   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   387
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   388
   (fn _ => [Clarsimp_tac 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   389
	     rtac unchanged_safeI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   390
             auto_tac (MI_css addSDs2 [Step1_2_3]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   391
	     auto_tac (MI_css addsimps2 [square_def,UNext_def]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   392
		              addSDs2 [Step1_4_3a,Step1_4_3b])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   393
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   394
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   395
qed_goal "S4safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   396
   "|- $S4 rmhist p & ImpNext p & [HNext rmhist p]_(c p,r p,m p, rmhist!p)  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   397
\                   & (!l. $(MemInv mm l)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   398
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   399
   (fn _ => [Clarsimp_tac 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   400
	     rtac unchanged_safeI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   401
             auto_tac (MI_css addSDs2 [Step1_2_4]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   402
	     auto_tac (MI_css addsimps2 [square_def,UNext_def,RNext_def]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   403
                              addSDs2 [Step1_4_4a,Step1_4_4b,Step1_4_4c])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   404
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   405
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   406
qed_goal "S5safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   407
   "|- $S5 rmhist p & ImpNext p & [HNext rmhist p]_(c p,r p,m p, rmhist!p)  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   408
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   409
   (fn _ => [Clarsimp_tac 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   410
	     rtac unchanged_safeI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   411
             auto_tac (MI_css addSDs2 [Step1_2_5]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   412
	     auto_tac (MI_css addsimps2 [square_def,UNext_def]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   413
		              addSDs2 [Step1_4_5a,Step1_4_5b])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   414
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   415
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   416
qed_goal "S6safe" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   417
   "|- $S6 rmhist p & ImpNext p & [HNext rmhist p]_(c p,r p,m p, rmhist!p)   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   418
\      --> [UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   419
   (fn _ => [Clarsimp_tac 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   420
	     rtac unchanged_safeI 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   421
             auto_tac (MI_css addSDs2 [Step1_2_6]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   422
	     auto_tac (MI_css addsimps2 [square_def,UNext_def,RNext_def]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   423
		              addSDs2 [Step1_4_6a,Step1_4_6b])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   424
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   425
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   426
(* ----------------------------------------------------------------------
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   427
   Step 1.5: Temporal refinement proof, based on previous steps.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   428
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   429
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   430
section "The liveness part";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   431
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   432
use "MIlive.ML";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   433
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   434
section "Refinement proof (step 1.5)";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   435
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   436
(* Prove invariants of the implementation:
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   437
   a. memory invariant
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   438
   b. "implementation invariant": always in states S1,...,S6
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   439
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   440
qed_goal "Step1_5_1a" MemoryImplementation.thy 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   441
   "|- IPImp p --> (!l. []$MemInv mm l)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   442
   (fn _ => [auto_tac (MI_css addsimps2 [IPImp_def,box_stp_act]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   443
			      addSIs2 [MemoryInvariantAll])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   444
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   445
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   446
qed_goal "Step1_5_1b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   447
   "|- Init(ImpInit p & HInit rmhist p) & [](ImpNext p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   448
\      & [][HNext rmhist p]_(c p, r p, m p, rmhist!p) & [](!l. $MemInv mm l) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   449
\      --> []ImpInv rmhist p"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   450
   (fn _ => [inv_tac MI_css 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   451
	     auto_tac (MI_css addsimps2 [Init_def, ImpInv_def, box_stp_act]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   452
                              addSDs2 [Step1_1]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   453
		              addDs2 [S1_successors,S2_successors,S3_successors,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   454
			              S4_successors,S5_successors,S6_successors])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   455
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   456
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   457
(*** Initialization ***)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   458
qed_goal "Step1_5_2a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   459
   "|- Init(ImpInit p & HInit rmhist p) --> Init(PInit (resbar rmhist) p)"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   460
   (fn _ => [auto_tac (MI_css addsimps2 [Init_def]
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   461
                              addSIs2 [Step1_1,Step1_3])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   462
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   463
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   464
(*** step simulation ***)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   465
qed_goal "Step1_5_2b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   466
   "|- [](ImpNext p & [HNext rmhist p]_(c p, r p, m p, rmhist!p)   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   467
\                   & $ImpInv rmhist p & (!l. $MemInv mm l))       \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   468
\      --> [][UNext memCh mm (resbar rmhist) p]_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   469
   (fn _ => [auto_tac (MI_css 
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   470
                          addsimps2 [ImpInv_def] addSEs2 [STL4E]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   471
                          addSDs2 [S1safe,S2safe,S3safe,S4safe,S5safe,S6safe])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   472
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   473
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   474
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   475
(*** Liveness ***)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   476
qed_goal "GoodImpl" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   477
   "|- IPImp p & HistP rmhist p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   478
\      -->   Init(ImpInit p & HInit rmhist p)   \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   479
\          & [](ImpNext p & [HNext rmhist p]_(c p, r p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   480
\          & [](!l. $MemInv mm l) & []($ImpInv rmhist p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   481
\          & ImpLive p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   482
   (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   483
	     subgoal_tac
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   484
	       "sigma |= Init(ImpInit p & HInit rmhist p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   485
\                        & [](ImpNext p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   486
\                        & [][HNext rmhist p]_(c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   487
\                        & [](!l. $MemInv mm l)" 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   488
	     auto_tac (MI_css addsimps2 [split_box_conj,box_stp_act] addSDs2 [Step1_5_1b]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   489
	     force_tac (MI_css addsimps2 [IPImp_def,MClkIPSpec_def,RPCIPSpec_def,RPSpec_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   490
					  ImpLive_def,c_def,r_def,m_def]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   491
	     force_tac (MI_css addsimps2 [IPImp_def,MClkIPSpec_def,RPCIPSpec_def,RPSpec_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   492
					  HistP_def,Init_def,ImpInit_def]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   493
	     force_tac (MI_css addsimps2 [IPImp_def,MClkIPSpec_def,RPCIPSpec_def,RPSpec_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   494
					  ImpNext_def,c_def,r_def,m_def,split_box_conj]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   495
	     force_tac (MI_css addsimps2 [HistP_def]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   496
             force_tac (MI_css addsimps2 [temp_use allT] addSDs2 [Step1_5_1a]) 1
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   497
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   498
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   499
(* The implementation is infinitely often in state S1... *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   500
qed_goal "Step1_5_3a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   501
   "|- [](ImpNext p & [HNext rmhist p]_(c p, r p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   502
\      & [](!l. $MemInv mm l)  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   503
\      & []($ImpInv rmhist p) & ImpLive p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   504
\      --> []<>S1 rmhist p"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   505
   (fn _ => [clarsimp_tac (MI_css addsimps2 [ImpLive_def]) 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   506
             rtac S1Infinite 1,
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   507
	     force_tac (MI_css
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   508
			  addsimps2 [split_box_conj,box_stp_act]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   509
			  addSIs2 [NotS1LeadstoS6,S2_live,S3_live,S4a_live,S4b_live,S5_live]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   510
             auto_tac (MI_css addsimps2 [split_box_conj] addSIs2 [S6_live])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   511
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   512
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   513
(* ... which implies that it satisfies the fairness requirements of the specification *)
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   514
qed_goal "Step1_5_3b" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   515
   "|- [](ImpNext p & [HNext rmhist p]_(c p, r p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   516
\      & [](!l. $MemInv mm l) & []($ImpInv rmhist p) & ImpLive p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   517
\      --> WF(RNext memCh mm (resbar rmhist) p)_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   518
   (fn _ => [ auto_tac (MI_css addSIs2 [RNext_fair,Step1_5_3a]) ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   519
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   520
qed_goal "Step1_5_3c" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   521
   "|- [](ImpNext p & [HNext rmhist p]_(c p, r p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   522
\      & [](!l. $MemInv mm l) & []($ImpInv rmhist p) & ImpLive p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   523
\      --> WF(MemReturn memCh (resbar rmhist) p)_(rtrner memCh!p, resbar rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   524
   (fn _ => [ auto_tac (MI_css addSIs2 [Return_fair,Step1_5_3a]) ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   525
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   526
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   527
(* QED step of step 1 *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   528
qed_goal "Step1" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   529
   "|- IPImp p & HistP rmhist p --> UPSpec memCh mm (resbar rmhist) p"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   530
   (fn _ => [auto_tac
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   531
               (MI_css addsimps2 [UPSpec_def,split_box_conj]
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   532
		       addSDs2 [GoodImpl]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   533
                       addSIs2 [Step1_5_2a,Step1_5_2b,Step1_5_3b,Step1_5_3c])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   534
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   535
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   536
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   537
(* ------------------------------ Step 2 ------------------------------ *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   538
section "Step 2";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   539
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   540
qed_goal "Step2_2a" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   541
   "|- Write rmCh mm ires p l & ImpNext p & [HNext rmhist p]_(c p, r p, m p, rmhist!p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   542
\      & $ImpInv rmhist p  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   543
\      --> (S4 rmhist p)` & unchanged (e p, c p, r p, rmhist!p)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   544
   (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   545
             dtac (action_use WriteS4) 1, atac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   546
             split_idle_tac [] 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   547
             auto_tac (MI_css addsimps2 [ImpNext_def] 
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   548
                              addSDs2 [S4EnvUnch,S4ClerkUnch,S4RPCUnch]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   549
             auto_tac (MI_css addsimps2 [square_def] addDs2 [S4Write])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   550
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   551
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   552
qed_goal "Step2_2" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   553
   "|-   (!p. ImpNext p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   554
\      & (!p. [HNext rmhist p]_(c p, r p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   555
\      & (!p. $ImpInv rmhist p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   556
\      & [? q. Write rmCh mm ires q l]_(mm!l) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   557
\      --> [? q. Write memCh mm (resbar rmhist) q l]_(mm!l)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   558
   (fn _ => [auto_tac (MI_css addSIs2 [squareCI] addSEs2 [squareE]),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   559
             REPEAT (ares_tac [exI, action_use Step1_4_4b] 1),
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   560
             force_tac (MI_css addSIs2 [WriteS4]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   561
             auto_tac (MI_css addSDs2 [Step2_2a])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   562
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   563
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   564
qed_goal "Step2_lemma" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   565
   "|-  [](  (!p. ImpNext p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   566
\          & (!p. [HNext rmhist p]_(c p, r p, m p, rmhist!p)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   567
\          & (!p. $ImpInv rmhist p) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   568
\          & [? q. Write rmCh mm ires q l]_(mm!l)) \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   569
\       --> [][? q. Write memCh mm (resbar rmhist) q l]_(mm!l)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   570
   (fn _ => [ force_tac (MI_css addSEs2 [STL4E] addSDs2 [Step2_2]) 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   571
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   572
qed_goal "Step2" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   573
   "|- #l : #MemLoc & (!p. IPImp p & HistP rmhist p)  \
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   574
\      --> MSpec memCh mm (resbar rmhist) l"
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   575
   (fn _ => [auto_tac (MI_css addsimps2 [MSpec_def]),
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   576
	     force_tac (MI_css addsimps2 [IPImp_def,MSpec_def]) 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   577
	     auto_tac (MI_css addSIs2 [Step2_lemma]
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   578
		              addsimps2 [split_box_conj,all_box]),
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   579
	     force_tac (MI_css addsimps2 [IPImp_def,MSpec_def]) 4,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   580
             auto_tac (MI_css addsimps2 [split_box_conj] addSEs2 [allE] addSDs2 [GoodImpl])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   581
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   582
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   583
(* ----------------------------- Main theorem --------------------------------- *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   584
section "Memory implementation";
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   585
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   586
(* The combination of a legal caller, the memory clerk, the RPC component,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   587
   and a reliable memory implement the unreliable memory.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   588
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   589
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   590
(* Implementation of internal specification by combination of implementation
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   591
   and history variable with explicit refinement mapping
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   592
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   593
qed_goal "Impl_IUSpec" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   594
   "|- Implementation & Hist rmhist --> IUSpec memCh mm (resbar rmhist)"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   595
   (fn _ => [auto_tac (MI_css addsimps2 [IUSpec_def,Implementation_def,IPImp_def,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   596
					 MClkISpec_def,RPCISpec_def,IRSpec_def,Hist_def]
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   597
		              addSIs2 [Step1,Step2])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   598
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   599
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   600
(* The main theorem: introduce hiding and eliminate history variable. *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   601
qed_goal "Implementation" MemoryImplementation.thy
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   602
   "|- Implementation --> USpec memCh"
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   603
   (fn _ => [Clarsimp_tac 1,
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   604
             forward_tac [temp_use History] 1,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   605
             auto_tac (MI_css addsimps2 [USpec_def] 
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   606
                              addIs2 [eexI, Impl_IUSpec, MI_base]
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   607
                              addSEs2 [eexE])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   608
            ]);
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   609
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4477
diff changeset
   610