Thm* E:TaggedEventStruct, P:TraceProperty(E).
switchable(E)(P) ![](FONT/eq.png) ((switch_inv(E) No-dup-send(E)) fuses P) | [switch_inv_theorem2] |
Thm* E:TaggedEventStruct, P:TraceProperty(E).
MCS(E)(P) ![](FONT/eq.png)
asyncR(E) preserves P ![](FONT/eq.png)
delayableR(E) preserves P ![](FONT/eq.png)
(P refines (Causal(E) No-dup-deliver(E))) ![](FONT/eq.png) ((switch_inv(E) No-dup-send(E)) fuses P) | [switch_inv_theorem] |
Thm* E:TaggedEventStruct, P:TraceProperty(E).
MCS(E)(P) ![](FONT/eq.png)
(P refines (Causal(E) No-dup-deliver(E))) ![](FONT/eq.png)
(((switch_inv(E) AD-normal(E)) No-dup-send(E)) fuses P) | [switch_inv_plus_normal] |
Thm* E:TaggedEventStruct, tr:Trace(E).
(switch_inv(E) No-dup-send(E))(tr) ![](FONT/eq.png)
( tr':Trace(E). switch_inv(E)(tr') & AD-normal(E)(tr') & (tr adR(E) tr')) | [switch_normal_exists] |
Thm* E:TaggedEventStruct.
(switch_inv(E) Causal(E) AD-normal(E) No-dup-deliver(E)) refines switch-decomposable(E) | [strong_switch_inv_decomposable] |
Thm* E:TaggedEventStruct. tag_splitable(E;adR(E)) | [tag_sublist_layer] |
Thm* E:TaggedEventStruct, tr:|E| List, ls: ||tr||.
switch_inv(E)(tr) ![](FONT/eq.png)
( i,j: ||tr||. (i (switchR(tr)^*) ls) ![](FONT/eq.png) (j (switchR(tr)^*) ls) ![](FONT/eq.png) tag(E)(tr[i]) = tag(E)(tr[j])) | [switch_inv_rel_closure] |
Thm* E:TaggedEventStruct, tr:|E| List.
switch_inv(E)(tr) ![](FONT/if_big.png) ( i,j: ||tr||. (i switchR(tr) j) ![](FONT/eq.png) tag(E)(tr[i]) = tag(E)(tr[j])) | [switch_inv_rel_same_tag] |
Thm* E:TaggedEventStruct. safetyR(E) preserves switch_inv(E) | [switch_inv_safety] |
Thm* E:TaggedEventStruct, x:|E| List, i: (||x||-1).
switch_inv(E)(x) ![](FONT/eq.png)
is-send(E)(x[(i+1)]) ![](FONT/eq.png)
is-send(E)(x[i]) loc(E)(x[i]) = loc(E)(x[(i+1)]) ![](FONT/eq.png) switch_inv(E)(swap(x;i;i+1)) | [switch_inv_swap] |
Thm* E:TaggedEventStruct. switch_inv(E) (|E| List)![](FONT/dash.png) Prop | [switch_inv_wf] |
Thm* E:TaggedEventStruct, P,I:TraceProperty(E).
MCS(E)(P) ![](FONT/eq.png) safetyR(E) preserves I ![](FONT/eq.png) (I refines single-tag-decomposable(E)) ![](FONT/eq.png) (I fuses P) | [M_DASH_C_DASH_S_SPACE_induction] |
Thm* E:TaggedEventStruct. safetyR(E) preserves AD-normal(E) | [switch_normal_safety] |
Thm* E:TaggedEventStruct.
(switch-decomposable(E) Tag-by-msg(E) Causal(E) No-dup-send(E))
refines single-tag-decomposable(E) | [switch_decomp_implies_single_tag_decomp] |
Thm* E:TaggedEventStruct, P,I:((|E| List)![](FONT/dash.png) Prop).
(P refines (Causal(E) No-dup-deliver(E))) ![](FONT/eq.png)
((I No-dup-send(E) Tag-by-msg(E) Causal(E) No-dup-deliver(E)) fuses P) ![](FONT/eq.png)
((I No-dup-send(E)) fuses P) | [no_DASH_dup_DASH_fusion] |
Thm* E:TaggedEventStruct. Tag-by-msg(E) fuses No-dup-deliver(E) | [no_dup_fusion] |
Thm* E:TaggedEventStruct, P,I:((|E| List)![](FONT/dash.png) Prop).
(P refines Causal(E)) ![](FONT/eq.png)
((I No-dup-send(E) Tag-by-msg(E)) fuses P) ![](FONT/eq.png) ((I No-dup-send(E)) fuses P) | [tag_by_msg_fusion_lemma] |
Thm* E:TaggedEventStruct. safetyR(E) preserves Tag-by-msg(E) | [P_tag_by_msg_safety] |
Thm* E:TaggedEventStruct, P,I,J,K:TraceProperty(E)
, R:(Trace(E)![](FONT/dash.png) Trace(E)![](FONT/dash.png) Prop).
tag_splitable(E;R) ![](FONT/eq.png)
( tr_1,tr_2:Trace(E). (tr_1 R tr_2) ![](FONT/eq.png) (tr_2 R tr_1)) ![](FONT/eq.png)
R preserves P ![](FONT/eq.png)
R preserves K ![](FONT/eq.png)
( tr:Trace(E). (I K)(tr) ![](FONT/eq.png) ( tr':Trace(E). I(tr') & J(tr') & (tr R tr'))) ![](FONT/eq.png)
(((I J) K) fuses P) ![](FONT/eq.png) ((I K) fuses P) | [normal_form_fusion] |
Thm* E:TaggedEventStruct, I,J,P:TraceProperty(E).
((I J) fuses P) ![](FONT/eq.png) (I fuses J) ![](FONT/eq.png) (P refines J) ![](FONT/eq.png) (I fuses P) | [fusion_simplification] |
Thm* E:TaggedEventStruct, I,P,Q:TraceProperty(E).
(I fuses P) ![](FONT/eq.png) (I fuses Q) ![](FONT/eq.png) (I fuses (P Q)) | [fusion_and] |
Thm* E:TaggedEventStruct, I,J,P:TraceProperty(E).
(J refines I) ![](FONT/eq.png) (I fuses P) ![](FONT/eq.png) (J fuses P) | [fusion_weakening] |
Thm* E:TaggedEventStruct, tr:|E| List, x,y:|E|.
Dec(R_ad_normal(tr)(x,y)) | [decidable__R_ad_normal] |
Thm* E:TaggedEventStruct. PTrue fuses Causal(E) | [causal_fusion] |
Thm* E:TaggedEventStruct, tr:|E| List.
( m:Label. Causal(E)( < tr > _m)) ![](FONT/eq.png) No-dup-send(E)(tr) ![](FONT/eq.png) Tag-by-msg(E)(tr) | [P_tag_by_msg_lemma] |