@@ -596,7 +596,7 @@ lemma equiv_comm_append_of_indep {w₁ w₂ : List α} (h : independent I w₁ w
596596variable (I) in
597597lemma exists_lcd {u v w : List α} (hu : isPrefix I ⟦u⟧ ⟦w⟧) (hv : isPrefix I ⟦v⟧ ⟦w⟧) :
598598 ∃ d, isPrefix I ⟦u⟧ ⟦d⟧ ∧ isPrefix I ⟦v⟧ ⟦d⟧
599- ∧ (∀ d', isPrefix I ⟦d' ⟧ ⟦d⟧ → ¬( isPrefix I ⟦u ⟧ ⟦d'⟧) ∨ ¬( isPrefix I ⟦v ⟧ ⟦d'⟧) ) := by
599+ ∧ (∀ d', isPrefix I ⟦u ⟧ ⟦d' ⟧ → isPrefix I ⟦v ⟧ ⟦d'⟧ → isPrefix I ⟦d ⟧ ⟦d'⟧) := by
600600 have ⟨u', hu'⟩ := hu
601601 have ⟨v', hv'⟩ := hv
602602 simp at hu' hv'
@@ -614,6 +614,39 @@ lemma exists_lcd {u v w : List α} (hu : isPrefix I ⟦u⟧ ⟦w⟧) (hv : isPre
614614 rw [← List.append_assoc, ← List.append_assoc] at hz
615615 apply (hvz.compat (TraceEquiv.refl z₂)).trans
616616 exact hz
617- · sorry
617+ · intro d' hud' hvd'
618+ have ⟨w₁, hw₁⟩ := hud'
619+ have ⟨w₂, hw₂⟩ := hvd'
620+ replace hw₁ := Quotient.exact hw₁
621+ replace hw₂ := Quotient.exact hw₂
622+ have huv : TraceEquiv I (u ++ w₁) (v ++ w₂) := hw₁.trans hw₂.symm
623+ have hzw : TraceEquiv I (z₂ ++ w₁) (z₃ ++ w₂) := by
624+ have huzw := huz.compat (TraceEquiv.refl w₁)
625+ have hvzw := hvz.compat (TraceEquiv.refl w₂)
626+ have huvzw := huzw.symm.trans (huv.trans hvzw)
627+ rw [List.append_assoc, List.append_assoc] at huvzw
628+ exact equiv_cancel_left I huvzw
629+ have ⟨y₁, y₂, y₃, y₄, ⟨_, hy_z₂, hy_w₁, hy_z₃, _⟩⟩ := levi_lemma I hzw
630+ have h_y1_empty : y₁ = [] := by
631+ have h_indep_yy : independent I (y₁ ++ y₂) (y₁ ++ y₃) := by
632+ intro a ha b hb
633+ exact h_indep a ((mem_iff_mem I a hy_z₂.symm).mp ha) b ((mem_iff_mem I b hy_z₃.symm).mp hb)
634+ by_cases he : y₁ = []
635+ · exact he
636+ · exfalso
637+ let ⟨a, ha⟩ := List.exists_mem_of_ne_nil y₁ he
638+ have ha_left : a ∈ y₁ ++ y₂ := List.mem_append.mpr (Or.inl ha)
639+ have ha_right : a ∈ y₁ ++ y₃ := List.mem_append.mpr (Or.inl ha)
640+ have h_rel := h_indep_yy a ha_left a ha_right
641+ exact I.irrefl a h_rel
642+ rw [h_y1_empty, List.nil_append] at hy_z₂ hy_z₃
643+ have hd' := hw₁.symm.trans (huz.compat (TraceEquiv.refl w₁))
644+ replace hd' := hd'.trans ((TraceEquiv.refl (z₁ ++ z₂)).compat hy_w₁)
645+ replace hd' :=
646+ hd'.trans ((TraceEquiv.refl (z₁ ++ z₂)).compat (hy_z₃.symm.compat (TraceEquiv.refl y₄)))
647+ rw [← List.append_assoc] at hd'
648+ use y₄
649+ apply Quotient.sound
650+ exact hd'.symm
618651
619652end Trace
0 commit comments