Skip to content

Commit a3fe733

Browse files
committed
Complete lcd existence proof
1 parent 5828f06 commit a3fe733

1 file changed

Lines changed: 35 additions & 2 deletions

File tree

TraceTheory/TraceTheory/Trace.lean

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -596,7 +596,7 @@ lemma equiv_comm_append_of_indep {w₁ w₂ : List α} (h : independent I w₁ w
596596
variable (I) in
597597
lemma 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

619652
end Trace

0 commit comments

Comments
 (0)