Skip to content

Commit db0cdff

Browse files
author
Carmine Abate
committed
nits
1 parent 10c4869 commit db0cdff

1 file changed

Lines changed: 135 additions & 0 deletions

File tree

Robust2relSafetyCriterion.v

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
From mathcomp Require Import all_ssreflect.
2+
3+
Set Implicit Arguments.
4+
Unset Printing Implicit Defensive.
5+
6+
Require Import ClassicalExtras.
7+
Require Import MyNotation.
8+
Require Import Setoid.
9+
Require Import FunctionalExtensionality.
10+
11+
Require Import Galois.
12+
Require Import LanguageModel.
13+
Require Import TraceModel.
14+
Require Import Properties.
15+
Require Import ChainModel.
16+
17+
Require Import Robust2relSafetyProperty.
18+
(* Require Import Robust2relTraceProperty.
19+
Require Import Robust2relTraceCriterion. *)
20+
21+
Require Import PropExtensionality.
22+
Definition prop_extensionality := propositional_extensionality.
23+
24+
Section Robust2relSafetyCriterion.
25+
26+
Variable Source Target: Language.
27+
Variable compilation_chain : CompilationChain Source Target.
28+
29+
Variable T_evs S_evs : Events.
30+
Variable T_end S_end : Endstates.
31+
32+
Locate Safety.
33+
34+
Local Definition trace__S:= @trace S_evs S_end.
35+
Local Definition finpref__S := @finpref S_evs S_end.
36+
Local Definition trace__T := @trace T_evs T_end.
37+
Local Definition finpref__T := @finpref T_evs T_end.
38+
39+
Local Definition prop__S := prop trace__S.
40+
Local Definition Safety__S := @Safety2 S_evs S_end.
41+
Local Definition prop__T := prop trace__T.
42+
Local Definition Safety__T := @Safety2 T_evs T_end.
43+
44+
Variable Source_Semantics : Semantics Source trace__S.
45+
Variable Target_Semantics : Semantics Target trace__T.
46+
47+
Local Definition sem__S := sem Source_Semantics.
48+
Local Definition sem__T := sem Target_Semantics.
49+
Local Definition par__S := par Source.
50+
Local Definition par__T := par Target.
51+
Local Definition ctx__S := ctx Source.
52+
Local Definition ctx__T := ctx Target.
53+
Local Definition rsat__S := rsat2 Source_Semantics.
54+
Local Definition rsat__T := rsat2 Target_Semantics.
55+
56+
Local Definition cmp := compile_par Source Target compilation_chain.
57+
58+
Local Notation "P ↓" := (cmp P) (at level 50).
59+
(* CA: don't understand why this does not work
60+
61+
Local Notation " C [ P ] " := (plug _ P C) (at level 50).
62+
*)
63+
Local Definition plug__S:= plug Source.
64+
Local Definition plug__T := plug Target.
65+
66+
Variable rel : trace__S -> trace__T -> Prop.
67+
68+
Local Definition σ : (trace__T * trace__T -> Prop) -> (trace__S * trace__S -> Prop) :=
69+
γ (@induced_connection_prod (trace__T) (trace__S) rel).
70+
71+
Local Definition τ : (trace__S * trace__S -> Prop) -> (trace__T * trace__T -> Prop) :=
72+
α (@induced_connection_prod (trace__T) (trace__S) rel).
73+
74+
Local Definition induced_adj : Adjunction_law τ σ :=
75+
adjunction_law (induced_connection_prod rel).
76+
77+
78+
Local Definition σR2rSP := σR2rSP compilation_chain
79+
Source_Semantics Target_Semantics
80+
σ.
81+
82+
Local Definition s2Cl_τR2rTP := s2Cl_τR2rTP compilation_chain
83+
Source_Semantics Target_Semantics
84+
τ.
85+
86+
Definition rel_R2rSC : Prop :=
87+
forall C__T P1 P2 t1 t2 m1 m2,
88+
prefix m1 t1 ->
89+
prefix m2 t2 ->
90+
sem__T (plug__T (P1 ↓) C__T) t1 ->
91+
sem__T (plug__T (P2 ↓) C__T) t2 ->
92+
exists C__S t1' t2' s1 s2,
93+
rel s1 t1' /\ rel s2 t2' /\ prefix m1 t1' /\ prefix m2 t2' /\
94+
sem__S (plug__S P1 C__S) s1 /\ sem__S (plug__S P2 C__S) s2.
95+
96+
Theorem rel_R2rSC_σR2rSP : rel_R2rSC <-> σR2rSP.
97+
Proof.
98+
have G2 : Galois_snd τ σ by firstorder.
99+
split.
100+
- move => Htilde P1 P2 π HSafety. setoid_rewrite contra_σR2rP.
101+
move => [C__T [t1 [t2 [Hsemt1 [Hsemt2 Hnot_t]]]]].
102+
destruct (HSafety t1 t2 Hnot_t) as [m1 [m2 [Hpref_m1_t1 [Hpref_m2_t2 m_witness]]]].
103+
destruct (Htilde C__T P1 P2 t1 t2 m1 m2) as
104+
[C__S [t1' [t2' [s1 [s2 [Hrel_s1_t1' [Hrel_s2_t2' [Hpref_m1_t1' [Hpref_m2_t2' [Hsem_s1 Hsem_s2]]]]]]]]]]; auto.
105+
exists C__S, s1, s2. split; auto. split; auto => Hσs.
106+
have Ht0 : π (t1', t2').
107+
{ apply: G2; auto. now exists (s1, s2). }
108+
by apply: (m_witness t1' t2').
109+
- move => H_RP C__T P1 P2 t1 t2 m1 m2 Hpref_m1_t1 Hpref_m2_t2 Hsemt1 Hsemt2.
110+
have HSafetyπ : Safety__T (fun t => ~ prefix m1 (fst t) \/ ~ prefix m2 (snd t)).
111+
{ move => t1' t2' /=. rewrite de_morgan2. move => [prefix_m1_t1' prefix_m2_t2'].
112+
rewrite <- dne in prefix_m1_t1', prefix_m2_t2'.
113+
exists m1, m2.
114+
repeat split; auto.
115+
move => t0 t00 m1_t0 m2_t0. rewrite de_morgan2. by repeat (rewrite -dne).
116+
}
117+
move : (H_RP P1 P2 (fun t => ~ prefix m1 (fst t) \/ ~ prefix m2 (snd t)) HSafetyπ).
118+
setoid_rewrite contra_σR2rP => Himp. destruct Himp as [C__S [s1 [s2 [Hsem_s1 [Hsem_s2 Hσ]]]]].
119+
exists C__T, t1, t2. repeat split; auto.
120+
rewrite de_morgan2 /=. by repeat (rewrite -dne).
121+
move: Hσ. rewrite /σ. rewrite not_forall_ex_not.
122+
move => [[t1' t2'] H].
123+
move/not_imp: H => [rel1 H].
124+
move/not_imp: H => [rel2 H].
125+
simpl in *. move/de_morgan2: H. repeat (rewrite -dne). move => [pref1 pref2].
126+
by exists C__S, t1', t2', s1, s2.
127+
Qed.
128+
129+
Theorem rel_R2rSC_2sCl_τR2rTP : rel_R2rSC <-> s2Cl_τR2rTP.
130+
Proof.
131+
setoid_rewrite <- (Adj_σR2rSP_iff_s2Cl_τR2rTP _ _ _ induced_adj).
132+
exact rel_R2rSC_σR2rSP.
133+
Qed.
134+
135+
End Robust2relSafetyCriterion.

0 commit comments

Comments
 (0)