1 Require pr0_confluence.
4 (*#* #caption "main properties of predicate \\texttt{pr1}" *)
5 (*#* #clauses pr1_props *)
7 Section pr1_confluence. (*************************************************)
9 (*#* #caption "confluence with single step reduction: strip lemma" *)
10 (*#* #cap #cap t0, t1, t2, t *)
12 Theorem pr1_strip : (t0,t1:?) (pr1 t0 t1) -> (t2:?) (pr0 t0 t2) ->
13 (EX t | (pr1 t1 t) & (pr1 t2 t)).
17 Intros until 1; XElim H; Intros.
22 LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ].
23 XElim H1; Intros; XEAuto.
28 (*#* #caption "confluence with itself: Church-Rosser property" *)
29 (*#* #cap #cap t0, t1, t2, t *)
31 Theorem pr1_confluence : (t0,t1:?) (pr1 t0 t1) -> (t2:?) (pr1 t0 t2) ->
32 (EX t | (pr1 t1 t) & (pr1 t2 t)).
36 Intros until 1; XElim H; Intros.
40 LApply (pr1_strip t3 t5); [ Clear H2; Intros H2 | XAuto ].
41 LApply (H2 t2); [ Clear H H2; Intros H | XAuto ].
43 LApply (H1 x); [ Clear H1 H2; Intros H1 | XAuto ].
44 XElim H1; Intros; XEAuto.
49 Tactic Definition Pr1Confluence :=
51 | [ H1: (pr1 ?1 ?2); H2: (pr0 ?1 ?3) |-? ] ->
52 LApply (pr1_strip ?1 ?2); [ Clear H1; Intros H1 | XAuto ];
53 LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ];
55 | [ H1: (pr1 ?1 ?2); H2: (pr1 ?1 ?3) |-? ] ->
56 LApply (pr1_confluence ?1 ?2); [ Clear H1; Intros H1 | XAuto ];
57 LApply (H1 ?3); [ Clear H1 H2; Intros H1 | XAuto ];