src/HOL/TLA/Memory/Memory.ML
author oheimb
Thu, 12 Mar 1998 13:17:13 +0100
changeset 4743 b3bfcbd9fb93
parent 4719 21af5c0be0c9
child 4828 ee3317896a47
permissions -rw-r--r--
renamed not1_or to disj_not1, not2_or to disj_not2
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:        Memory.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 specification (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
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     9
val RM_action_defs = 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
   (map (fn t => t RS inteq_reflection)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    11
        [MInit_def, PInit_def, RdRequest_def, WrRequest_def, MemInv_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    12
   @ [GoodRead_def, BadRead_def, ReadInner_def, Read_def,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    13
      GoodWrite_def, BadWrite_def, WriteInner_def, Write_def,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    14
      MemReturn_def, RNext_def];
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    15
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    16
val UM_action_defs = RM_action_defs @ [MemFail_def, UNext_def];
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    18
val RM_temp_defs = [RPSpec_def, MSpec_def, IRSpec_def];
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    19
val UM_temp_defs = [UPSpec_def, MSpec_def, IUSpec_def];
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    20
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    21
(* Make sure the simpset accepts non-boolean simplifications *)
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    22
simpset_ref() := simpset() setmksimps ((mksimps mksimps_pairs) o maybe_unlift);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    24
(* -------------------- Proofs -------------------------------------------------- *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    25
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    26
(* The reliable memory is an implementation of the unreliable one *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
qed_goal "ReliableImplementsUnReliable" Memory.thy 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    28
   "IRSpec ch mm rs .-> IUSpec ch mm rs"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    29
   (fn _ => [auto_tac (temp_css addsimps2 ([square_def,UNext_def] @ RM_temp_defs @ UM_temp_defs)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    30
		                addSEs2 [STL4E])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    31
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    32
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    33
(* The memory spec implies the memory invariant *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    34
qed_goal "MemoryInvariant" Memory.thy 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    35
   "(MSpec ch mm rs l) .-> []($(MemInv mm l))"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    36
   (fn _ => [ auto_inv_tac (simpset() addsimps RM_temp_defs @ MP_simps @ RM_action_defs) 1 ]);
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    37
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    38
(* The invariant is trivial for non-locations *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    39
qed_goal "NonMemLocInvariant" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    40
   ".~ #(MemLoc l) .-> []($MemInv mm l)"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    41
   (fn _ => [ auto_tac (temp_css addsimps2 [MemInv_def] addSIs2 [necT RS tempD]) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    42
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    43
qed_goal "MemoryInvariantAll" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    44
   "((RALL l. #(MemLoc l) .-> MSpec ch mm rs l)) .-> (RALL l. []($MemInv mm l))"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    45
   (fn _ => [step_tac temp_cs 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    46
	     case_tac "MemLoc l" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    47
	     auto_tac (temp_css addSEs2 (map temp_mp [MemoryInvariant,NonMemLocInvariant]))
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    48
	    ]);
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
(* The memory engages in an action for process p only if there is an unanswered call from p.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    51
   We need this only for the reliable memory.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    52
*)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    53
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    54
qed_goal "Memoryidle" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    55
   ".~ $(Calling ch p) .-> .~ RNext ch mm rs p"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    56
   (fn _ => [ auto_tac (action_css addsimps2 (RM_action_defs @ [Return_def])) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    57
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    58
bind_thm("MemoryidleI", action_mp Memoryidle);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    59
bind_thm("MemoryidleE", action_impE Memoryidle);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    60
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    61
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    62
(* Enabledness conditions *)
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
qed_goal "MemReturn_change" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    65
   "MemReturn ch rs p .-> <MemReturn ch rs p>_<rtrner ch @ p, rs@p>"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    66
   (fn _ => [ auto_tac (action_css addsimps2 [MemReturn_def,angle_def]) ]);
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
qed_goal "MemReturn_enabled" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    69
   "!!p. base_var <rtrner ch @ p, rs@p> ==> \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    70
\        $(Calling ch p) .& ($(rs@p) .~= #NotAResult) \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    71
\        .-> $(Enabled (<MemReturn ch rs p>_<rtrner ch @ p, rs@p>))"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    72
   (fn _ => [action_simp_tac (simpset()) [MemReturn_change RSN (2,enabled_mono)] [] 1,
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    73
             action_simp_tac (simpset() addsimps [MemReturn_def,Return_def,rtrner_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    74
                             [] [base_enabled,Pair_inject] 1
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    75
	    ]);
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 "ReadInner_enabled" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    78
   "!!p. base_var <rtrner ch @ p, rs@p> ==> \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    79
\        $(Calling ch p) .& (arg[$(ch@p)] .= #(Inl (read,l))) \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    80
\        .-> $(Enabled (ReadInner ch mm rs p l))"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    81
   (fn _ => [Action_simp_tac 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    82
               (* unlift before applying case_tac: case_split_thm expects boolean conclusion *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    83
	     case_tac "MemLoc l" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    84
             ALLGOALS
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    85
	        (action_simp_tac 
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    86
                    (simpset() addsimps [ReadInner_def,GoodRead_def,BadRead_def,
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    87
					RdRequest_def])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    88
                    [] [base_enabled,Pair_inject])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    89
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    90
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    91
qed_goal "WriteInner_enabled" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    92
   "!!p. base_var <rtrner ch @ p, mm@l, rs@p> ==> \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    93
\        $(Calling ch p) .& (arg[$(ch@p)] .= #(Inr (write,l,v))) \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    94
\        .-> $(Enabled (WriteInner ch mm rs p l v))"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    95
   (fn _ => [Action_simp_tac 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    96
	     case_tac "MemLoc l & MemVal v" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    97
             ALLGOALS
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    98
	        (action_simp_tac 
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    99
                    (simpset() addsimps [WriteInner_def,GoodWrite_def,BadWrite_def,
4743
b3bfcbd9fb93 renamed not1_or to disj_not1, not2_or to disj_not2
oheimb
parents: 4719
diff changeset
   100
					WrRequest_def] delsimps [disj_not1])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   101
                    [] [base_enabled,Pair_inject])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   102
            ]);
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
qed_goal "ReadResult" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   105
   "(Read ch mm rs p) .& (RALL l. $(MemInv mm l)) .-> (rs@p)$ .~= #NotAResult"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   106
   (fn _ => [action_simp_tac 
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   107
               (simpset() addsimps (MP_simps 
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   108
				   @ [Read_def,ReadInner_def,GoodRead_def,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   109
				      BadRead_def,MemInv_def]))
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   110
	       [] [] 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   111
	     auto_tac (action_css addsimps2 MP_simps) ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   112
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   113
qed_goal "WriteResult" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   114
   "(Write ch mm rs p l) .-> (rs@p)$ .~= #NotAResult"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   115
   (fn _ => [auto_tac (claset(),
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   116
		       simpset() addsimps (MP_simps @
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   117
				   [Write_def,WriteInner_def,GoodWrite_def,BadWrite_def]))
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   118
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   119
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   120
qed_goal "ReturnNotReadWrite" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   121
   "(RALL l. $MemInv mm l) .& (MemReturn ch rs p) \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   122
\   .-> .~(Read ch mm rs p) .& (RALL l. .~(Write ch mm rs p l))"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   123
   (fn _ => [auto_tac
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   124
	       (action_css addsimps2 [MemReturn_def]
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   125
		           addSEs2 [action_impE WriteResult,action_conjimpE ReadResult])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   126
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   127
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   128
qed_goal "RWRNext_enabled" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   129
   "($(rs@p) .= #NotAResult) .& (RALL l. $(MemInv mm l))  \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   130
\      .& $(Enabled (Read ch mm rs p .| (REX l. Write ch mm rs p l))) \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   131
\   .-> $(Enabled (<RNext ch mm rs p>_<rtrner ch @ p, rs@p>))"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   132
   (fn _ => [auto_tac
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   133
	       (action_css addsimps2 [RNext_def,angle_def]
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   134
		     addSEs2 [enabled_mono2]
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   135
		     addEs2 [action_conjimpE ReadResult,action_impE WriteResult])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   136
	    ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   137
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   138
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   139
(* Combine previous lemmas: the memory can make a visible step if there is an
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   140
   outstanding call for which no result has been produced.
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 "RNext_enabled" Memory.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   143
   "!!p. (ALL l. base_var <rtrner ch @ p, mm@l, rs@p>) ==> \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   144
\        ($(rs@p) .= #NotAResult) .& $(Calling ch p) .& (RALL l. $(MemInv mm l))  \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   145
\        .-> $(Enabled (<RNext ch mm rs p>_<rtrner ch @ p, rs@p>))"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   146
   (fn _ => [auto_tac (action_css addsimps2 [enabled_disj]
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   147
		                  addSIs2 [action_mp RWRNext_enabled]),
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   148
	     res_inst_tac [("s","arg(ch s p)")] sumE 1,
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   149
	     action_simp_tac (simpset() addsimps [Read_def,enabled_ex,base_pair])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   150
	                     [action_mp ReadInner_enabled,exI] [] 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   151
	     split_all_tac 1, Rd.induct_tac "xa" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   152
	     (* introduce a trivial subgoal to solve flex-flex constraint?! *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   153
	     subgoal_tac "y = snd(xa,y)" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   154
	     TRYALL Simp_tac,  (* solves "read" case *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   155
	     etac swap 1,
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
   156
	     action_simp_tac (simpset() addsimps [Write_def,enabled_ex,base_pair])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   157
	                     [action_mp WriteInner_enabled,exI] [] 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   158
	     split_all_tac 1, Wr.induct_tac "x" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   159
	     subgoal_tac "(xa = fst(snd(x,xa,y))) & (y = snd(snd(x,xa,y)))" 1,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
   160
	     ALLGOALS Simp_tac ]);