@@ -259,17 +259,25 @@ Theorem R2SCHC_R2SCHP : R2SCHC <-> R2SCHP.
259
259
Proof .
260
260
split.
261
261
- intros ssc P H HH. rewrite contra_RHP. intros [C' H0].
262
- specialize (ssc P C'). unfold twoSC in HH. destruct HH as [t1 [t2 HH]] .
263
- specialize (ssc t1 t2). destruct ssc as [C h0].
264
- split; firstorder .
265
- exists C. firstorder.
266
- - unfold R2SCHC. intros h0 P C' t1 t2 [H1 H2].
262
+ specialize (ssc P C'). rewrite (HH (beh (C' [P ↓]))) in H0 .
263
+ destruct H0 as [t1 [t2 [b_t1 [b_t2 H_t1_t2]]]].
264
+ destruct (ssc t1 t2) as [Cs [bs_t1 bs_t2]]. auto .
265
+ exists Cs. rewrite (HH _). exists t1, t2. split; auto.
266
+ - unfold R2SCHC. intros h0 P C' t1 t2 [H1 H2].
267
267
specialize (h0 P).
268
- assert (s : twoSC (fun π => (~(sem tgt ( C' [ P ↓ ]) t1 -> π t1)) \/ (~(sem tgt ( C' [ P ↓ ]) t2 -> π t2)))).
269
- { unfold twoSC. intros. exists t1, t2. intros b. split.
270
- intros. apply de_morgan2 in H. destruct H as [H1' H2'].
271
- apply dne in H1'. apply dne in H2'. split; auto.
272
- intros H. apply de_morgan2. split; rewrite <- dne; destruct H; intros; try assumption.
268
+ assert (s : twoSC (fun π => (~(sem tgt ( C' [ P ↓ ]) t1 -> π t1)) \/
269
+ (~(sem tgt ( C' [ P ↓ ]) t2 -> π t2)))).
270
+ { unfold twoSC. intros. split.
271
+ + intros h.
272
+ exists t1, t2. rewrite de_morgan2 in h. destruct h as [h1 h2].
273
+ rewrite <- dne in h1, h2.
274
+ repeat (split; auto).
275
+ intros [k | k]; apply k; [ now left | now right ].
276
+ + intros [t3 [t4 [b_t3 [b_t4 K]]]].
277
+ rewrite de_morgan2. rewrite <- dne. rewrite <- dne.
278
+ rewrite de_morgan2 in K. destruct K as [k1 k2]. rewrite <- dne in k1,k2.
279
+ specialize (k1 H1). specialize (k2 H2).
280
+ destruct k1, k2; now subst.
273
281
}
274
282
specialize (h0 (fun π => (~(sem tgt ( C' [ P ↓ ]) t1 -> π t1)) \/ (~(sem tgt ( C' [ P ↓ ]) t2 -> π t2)))).
275
283
specialize (h0 s).
@@ -335,12 +343,11 @@ Proof.
335
343
Qed .
336
344
337
345
Lemma R2SCHC_R2HSC : R2SCHC -> R2HSC.
338
- Proof .
339
- intros rsc P Ct m1 m2 H. unfold spref in *.
340
- destruct (H m1) as [t1 [Ht1 Hpref1]]; auto.
341
- destruct (H m2) as [t2 [Ht2 Hpref2]]; auto.
342
- specialize (rsc P Ct t1 t2). destruct rsc as [Cs [K1 K2]]; auto.
343
- exists Cs. intros x [H1 | H2]; subst; [now exists t1 | now exists t2].
346
+ Proof .
347
+ rewrite R2SCHC_R2SCHP. rewrite R2HSC_R2HSP.
348
+ intros twosc P S two_safetyS.
349
+ apply twoSC_H2Safe in two_safetyS.
350
+ now apply (twosc P S).
344
351
Qed .
345
352
346
353
0 commit comments