src/HOL/TLA/Memory/MemClerk.ML
author wenzelm
Wed, 29 Apr 1998 11:24:58 +0200
changeset 4850 050481f41e28
parent 4089 96fba19bcbe2
child 6255 db63752140c7
permissions -rw-r--r--
added none: 'a -> 'a * 'b attribute list; added no_attrs: 'a * 'b -> ('a * ('b * tag list)) * 'c attribute list; added no_attrss: 'a * 'b list -> ('a * ('b * tag list) list) * 'c attribute list; added applys: ('a * tthm list) * 'a attribute list -> ('a * tthm list);
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:        MemClerk.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 clerk 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 MC_action_defs = 
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    10
   [MClkInit_def RS inteq_reflection]
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    11
   @ [MClkFwd_def, MClkRetry_def, MClkReply_def, MClkNext_def];
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
val MC_temp_defs = [MClkIPSpec_def, MClkISpec_def];
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
(* The Clerk engages in an action for process p only if there is an outstanding,
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    16
   unanswered call for that process.
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
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    19
qed_goal "MClkidle" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    20
   ".~ $(Calling send p) .& ($(cst@p) .= #clkA) .-> .~ MClkNext send rcv cst p"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    21
   (fn _ => [ auto_tac (claset(),
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    22
                        simpset() addsimps (MC_action_defs @ [Return_def]))
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
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    25
qed_goal "MClkbusy" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    26
   "$(Calling rcv p) .-> .~ MClkNext send rcv cst p"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    27
   (fn _ => [ auto_tac (claset(),
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    28
                        simpset() addsimps (MC_action_defs @ [Call_def]))
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    29
            ]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    30
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    31
(* unlifted versions as introduction rules *)
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
bind_thm("MClkidleI", action_mp MClkidle);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    34
bind_thm("MClkbusyI", action_mp MClkbusy);
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
(* Enabledness of actions *)
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
qed_goal "MClkFwd_enabled" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    39
   "!!p. base_var <rtrner send @ p, caller rcv @ p, cst@p> ==> \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    40
\        $(Calling send p) .& .~ $(Calling rcv p) .& ($(cst@p) .= #clkA)  \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    41
\        .-> $(Enabled (MClkFwd send rcv cst p))"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    42
   (fn _ => [action_simp_tac (simpset() addsimps [MClkFwd_def,Call_def,caller_def,rtrner_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    43
                             [] [base_enabled,Pair_inject] 1]);
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    44
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    45
qed_goal "MClkFwd_ch_enabled" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    46
   "Enabled (MClkFwd send rcv cst p) s  \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    47
\   ==> Enabled (<MClkFwd send rcv cst p>_<cst@p, rtrner send @ p, caller rcv @ p>) s"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    48
   (fn [prem] => [auto_tac (claset() addSIs [prem RS enabled_mono],
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    49
			    simpset() addsimps [angle_def,MClkFwd_def])
3807
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
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    52
qed_goal "MClkReply_change" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    53
   "MClkReply send rcv cst p .-> <MClkReply send rcv cst p>_<cst@p, rtrner send @ p, caller rcv @ p>"
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    54
   (fn _ => [auto_tac (action_css addsimps2 [angle_def,MClkReply_def]
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    55
			          addEs2 [Return_changedE])
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    56
            ]);
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
qed_goal "MClkReply_enabled" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    59
   "!!p. base_var <rtrner send @ p, caller rcv @ p, cst@p> ==> \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    60
\        $(Calling send p) .& .~ $(Calling rcv p) .& ($(cst@p) .= #clkB)  \
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    61
\        .-> $(Enabled (<MClkReply send rcv cst p>_<cst@p, rtrner send @ p, caller rcv @ p>))"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    62
   (fn _ => [action_simp_tac (simpset()) [MClkReply_change RSN (2,enabled_mono)] [] 1,
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    63
	     action_simp_tac (simpset() addsimps [MClkReply_def,Return_def,caller_def,rtrner_def])
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    64
                             [] [base_enabled,Pair_inject] 1
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
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    67
qed_goal "MClkReplyNotRetry" MemClerk.thy
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    68
   "MClkReply send rcv cst p .-> .~(MClkRetry send rcv cst p)"
4089
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    69
   (fn _ => [ auto_tac (claset(),
96fba19bcbe2 isatool fixclasimp;
wenzelm
parents: 3807
diff changeset
    70
			simpset() addsimps [MClkReply_def,MClkRetry_def]) 
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    71
	    ]);