src/HOL/TLA/Memory/MemClerk.ML
author wenzelm
Sat, 17 Dec 2005 01:00:40 +0100
changeset 18428 4059413acbc1
parent 17309 c43ed29bd197
permissions -rw-r--r--
sort_distinct;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 9517
diff changeset
     1
(*
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     2
    File:        MemClerk.ML
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 9517
diff changeset
     3
    ID:          $Id$
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     4
    Author:      Stephan Merz
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     5
    Copyright:   1997 University of Munich
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
     6
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
     7
    RPC-Memory example: Memory clerk specification (theorems and proofs)
3807
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
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 9517
diff changeset
    10
val MC_action_defs =
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    11
   [MClkInit_def, MClkFwd_def, MClkRetry_def, MClkReply_def, MClkNext_def];
3807
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
6255
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    15
val mem_css = (claset(), simpset());
db63752140c7 updated (Stephan Merz);
wenzelm
parents: 4089
diff changeset
    16
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    17
(* 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
    18
   unanswered call for that process.
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    19
*)
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    20
Goal "|- ~$Calling send p & $(cst!p) = #clkA --> ~MClkNext send rcv cst p";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    21
by (auto_tac (mem_css addsimps2 (Return_def::MC_action_defs)));
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    22
qed "MClkidle";
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    23
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    24
Goal "|- $Calling rcv p --> ~MClkNext send rcv cst p";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    25
by (auto_tac (mem_css addsimps2 (Call_def::MC_action_defs)));
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    26
qed "MClkbusy";
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    27
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    28
(* Enabledness of actions *)
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    29
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    30
Goal "!!p. basevars (rtrner send!p, caller rcv!p, cst!p) ==> \
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    31
\     |- Calling send p & ~Calling rcv p & cst!p = #clkA  \
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    32
\        --> Enabled (MClkFwd send rcv cst p)";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    33
by (action_simp_tac (simpset() addsimps [MClkFwd_def,Call_def,caller_def,rtrner_def])
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    34
                    [exI] [base_enabled,Pair_inject] 1);
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    35
qed "MClkFwd_enabled";
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    36
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    37
Goal "|- Enabled (MClkFwd send rcv cst p)  -->  \
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    38
\        Enabled (<MClkFwd send rcv cst p>_(cst!p, rtrner send!p, caller rcv!p))";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    39
by (auto_tac (mem_css addSEs2 [enabled_mono] addsimps2 [angle_def,MClkFwd_def]));
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    40
qed "MClkFwd_ch_enabled";
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    41
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    42
Goal "|- MClkReply send rcv cst p --> \
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    43
\        <MClkReply send rcv cst p>_(cst!p, rtrner send!p, caller rcv!p)";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    44
by (auto_tac (mem_css addsimps2 [angle_def,MClkReply_def]
17309
c43ed29bd197 converted to Isar theory format;
wenzelm
parents: 9517
diff changeset
    45
                      addEs2 [Return_changed]));
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    46
qed "MClkReply_change";
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    47
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    48
Goal "!!p. basevars (rtrner send!p, caller rcv!p, cst!p) ==> \
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    49
\     |- Calling send p & ~Calling rcv p & cst!p = #clkB  \
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    50
\        --> Enabled (<MClkReply send rcv cst p>_(cst!p, rtrner send!p, caller rcv!p))";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    51
by (action_simp_tac (simpset()) [MClkReply_change RSN (2,enabled_mono)] [] 1);
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    52
by (action_simp_tac (simpset() addsimps [MClkReply_def,Return_def,caller_def,rtrner_def])
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    53
                    [exI] [base_enabled,Pair_inject] 1);
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    54
qed "MClkReply_enabled";
3807
82a99b090d9d A formalization of TLA in HOL -- by Stephan Merz;
wenzelm
parents:
diff changeset
    55
9517
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    56
Goal "|- MClkReply send rcv cst p --> ~MClkRetry send rcv cst p";
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    57
by (auto_tac (mem_css addsimps2 [MClkReply_def,MClkRetry_def]));
f58863b1406a tuned version by Stephan Merz (unbatchified etc.);
wenzelm
parents: 7881
diff changeset
    58
qed "MClkReplyNotRetry";