(* lfxs_pair_repl_dx is not generic enough **********************************) fact tc_lfxs_pair_repl_dx_aux: ∀R. (∀L. reflexive … (R L)) → ∀I,L1,Y,V1,T. L1.ⓑ{I}V1 ⦻**[R, T] Y → ∀L2,V2. Y = L2.ⓑ{I}V2 → L1.ⓑ{I}V1 ⦻**[R, T] L2.ⓑ{I}V1. #R #HR #I #L1 #Y #V1 #T #H elim H -Y /3 width=6 by lfxs_pair_repl_dx, step, inj/ #Y #Y2 #HY #HY2 #IH #L2 #V2 #H destruct elim (lfxs_fwd_dx … HY2) #L #V #H destruct lapply (IH ???) [4: |*: // ] -IH #HL1 @(step … HL1) -HL1 // /3 width=6 by lfxs_pair_repl_dx, step, inj/ lemma tc_lfxs_pair_repl_dx: ∀R. (∀L. reflexive … (R L)) → ∀I,L1,L2,V1,V2,T. L1.ⓑ{I}V1 ⦻**[R, T] L2.ⓑ{I}V2 → L1.ⓑ{I}V1 ⦻**[R, T] L2.ⓑ{I}V1. (* does this really hold? ***************************************************) lemma pippo1: ∀R. s_r_confluent1 … R (lfxs R) → s_r_transitive … R (lfxs R) → s_r_transitive … R (tc_lfxs R). #R #H1R #H2R @s_r_trans_LTC2 @s_r_trans_LTC1 // qed-. definition s_r_confluent2: ∀A,B. relation2 (A→relation B) (B→relation A) ≝ λA,B,R1,R2. ∀L2,T1,T2. R1 L2 T1 T2 → ∀L1. R2 T1 L1 L2 → R2 T2 L1 L2. axiom s_r_conf2_LTC2: ∀R. s_r_transitive … R (lfxs R) → s_r_confluent1 … R (lfxs R) → s_r_confluent2 … R (tc_lfxs R). (* #R #H1R #H2R #L2 #T1 #T2 #HT12 #L1 #H @(TC_ind_dx ??????? H) -L1 /3 width=3 by inj/ #L1 #L #HL1 #HL2 #IH @(tc_lfxs_step_sn … IH) -IH // *) lemma tc_lfxs_inv_zero: ∀R,Y1,Y2. Y1 ⪤**[R, #0] Y2 → ∨∨ Y1 = ⋆ ∧ Y2 = ⋆ | ∃∃I,L1,L2,V1,V2. L1 ⪤**[R, V1] L2 & R L1 V1 V2 & Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2 | ∃∃f,I,L1,L2. 𝐈⦃f⦄ & L1 ⪤*[cext2 R, cfull, f] L2 & Y1 = L1.ⓤ{I} & Y2 = L2.ⓤ{I}. #R #Y1 #Y2 #H elim H -Y2 [ | #Y #Y2 #_ #H elim (lfxs_inv_zero … H) -H * [ #H #H2 * * /3 width=9 by or3_intro0, or3_intro1, or3_intro2, ex4_5_intro, ex4_4_intro, conj/ | #I #L #L2 #V #V2 #HL2 #HV2 #H #H2 * * [ #H1 #H0 destruct | #I0 #L0 #L1 #V0 #V1 #HL01 #HV01 #H1 #H0 destruct lemma tc_lfxs_inv_zero: ∀R. s_r_confluent1 … R (lfxs R) → s_r_transitive … R (lfxs R) → ∀Y1,Y2. Y1 ⦻**[R, #0] Y2 → (Y1 = ⋆ ∧ Y2 = ⋆) ∨ ∃∃I,L1,L2,V1,V2. L1 ⦻**[R, V1] L2 & LTC … R L1 V1 V2 & Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2. #R #H1R #H2R #Y1 #Y2 #H elim H -Y2 [ #Y2 #H elim (lfxs_inv_zero … H) -H * /4 width=9 by ex4_5_intro, inj, or_introl, or_intror, conj/ | #Y #Y2 #_ #H elim (lfxs_inv_zero … H) -H * [ #H #H2 * * /3 width=9 by ex4_5_intro, or_introl, or_intror, conj/ | #I #L #L2 #V #V2 #HL2 #HV2 #H #H2 * * [ #H1 #H0 destruct | #I0 #L1 #L0 #V1 #V0 #HL10 #HV10 #H1 #H0 destruct @or_intror @ex4_5_intro [6,7: |*: /width=7/ ] [ | -HL2 @(trans_TC … HV10) @(pippo1 … HV2) // -V2 @pippo2 // lapply (H2R … HV2 … HL2) -HL2 #HL02 /4 width=8 by ex3_5_intro, step, or_intror/ ] ] ] qed-. (* has no meaning without the former ****************************************) lemma lfxs_inv_lref: ∀R,Y1,Y2,i. Y1 ⦻*[R, #⫯i] Y2 → (Y1 = ⋆ ∧ Y2 = ⋆) ∨ ∃∃I,L1,L2,V1,V2. L1 ⦻*[R, #i] L2 & Y1 = L1.ⓑ{I}V1 & Y2 = L2.ⓑ{I}V2. #R #Y1 #Y2 #i * #f #H1 #H2 elim (frees_inv_lref … H1) -H1 * [ #H #_ lapply (lexs_inv_atom1_aux … H2 H) -H2 /3 width=1 by or_introl, conj/ | #I1 #L1 #V1 #g #HV1 #HY1 #Hg elim (lexs_inv_push1_aux … H2 … HY1 Hg) -H2 -Hg /4 width=8 by ex3_5_intro, ex2_intro, or_intror/ ] qed-. (****************************************************************************) lemma lfxs_inv_zero_pair_sn: ∀R,I,Y2,L1,V1. L1.ⓑ{I}V1 ⦻*[R, #0] Y2 → ∃∃L2,V2. L1 ⦻*[R, V1] L2 & R L1 V1 V2 & Y2 = L2.ⓑ{I}V2. #R #I #Y2 #L1 #V1 #H elim (lfxs_inv_zero … H) -H * [ #H destruct | #J #Y1 #L2 #X1 #V2 #HV1 #HV12 #H1 #H2 destruct /2 width=5 by ex3_2_intro/ ] qed-. lemma lfxs_inv_zero_pair_dx: ∀R,I,Y1,L2,V2. Y1 ⦻*[R, #0] L2.ⓑ{I}V2 → ∃∃L1,V1. L1 ⦻*[R, V1] L2 & R L1 V1 V2 & Y1 = L1.ⓑ{I}V1. #R #I #Y1 #L2 #V2 #H elim (lfxs_inv_zero … H) -H * [ #_ #H destruct | #J #L1 #Y2 #V1 #X2 #HV1 #HV12 #H1 #H2 destruct /2 width=5 by ex3_2_intro/ ] qed-. lemma lfxs_inv_lref_pair_sn: ∀R,I,Y2,L1,V1,i. L1.ⓑ{I}V1 ⦻*[R, #⫯i] Y2 → ∃∃L2,V2. L1 ⦻*[R, #i] L2 & Y2 = L2.ⓑ{I}V2. #R #I #Y2 #L1 #V1 #i #H elim (lfxs_inv_lref … H) -H * [ #H destruct | #J #Y1 #L2 #X1 #V2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/ ] qed-. lemma lfxs_inv_lref_pair_dx: ∀R,I,Y1,L2,V2,i. Y1 ⦻*[R, #⫯i] L2.ⓑ{I}V2 → ∃∃L1,V1. L1 ⦻*[R, #i] L2 & Y1 = L1.ⓑ{I}V1. #R #I #Y1 #L2 #V2 #i #H elim (lfxs_inv_lref … H) -H * [ #_ #H destruct | #J #L1 #Y2 #V1 #X2 #Hi #H1 #H2 destruct /2 width=4 by ex2_2_intro/ ] qed-.