@@ -182,6 +182,20 @@ lemma depTrClIn_refl {w : List α} {a : α} (h : a ∈ w) : dependencyTransClosu
182182 apply Relation.TransGen.single
183183 simp [Dependence.refl, h]
184184
185+ lemma depIn_symm {w : List α} {a b : α} : dependencyInL I w a b = dependencyInL I w b a := by
186+ simp [dependencyInL, inducedDependence]
187+ apply Iff.intro
188+ · exact fun ⟨h, ha, hb⟩ => ⟨(by contrapose h; exact I.symm b a h), hb, ha⟩
189+ · exact fun ⟨h, hb, ha⟩ => ⟨(by contrapose h; exact I.symm a b h), ha, hb⟩
190+
191+ lemma depTrClIn_symm {w : List α} {a b : α} : dependencyTransClosureInL I w a b = dependencyTransClosureInL I w b a := by
192+ unfold dependencyTransClosureInL
193+ rw [Relation.transGen_swap]
194+ have h_symm : (fun x y => dependencyInL I w y x) = (dependencyInL I w) := by
195+ ext a' b'
196+ rw [depIn_symm]
197+ rw [h_symm]
198+
185199--- variable [DecidableRel I.rel]
186200
187201---
@@ -581,7 +595,7 @@ lemma ccDec_aux_suffix (I : Independence α) (u w : List α) :
581595 · simp [hab]
582596 sorry
583597
584- lemma ccDec_across_substr (I : Independence α) (w : List α) (h : 1 < (ccDec I w).length) :
598+ lemma ccDec_across_infix (I : Independence α) (w : List α) (h : 1 < (ccDec I w).length) :
585599 List.IsInfix (
586600 ((ccDec I w).getLast (ccDec_aux_nonempty w w)) ++ (ccDec I w)[0 ] ++ (ccDec I w)[1 ]
587601 ) (w ++ w) := by
@@ -594,69 +608,179 @@ lemma ccDec_across_substr (I : Independence α) (w : List α) (h : 1 < (ccDec I
594608 simp only [<- List.append_assoc]
595609 rw [hs]
596610
597- lemma ccDec_aux_indep (u w : List α) (i : ℕ) (hi : i + 1 < (ccDec_aux I u w).length) :
611+ lemma ccDec_aux_head_conn (u w : List α) (hwu : w ⊆ u) :
612+ ∀ m n, m ∈ (ccDec_aux I u w)[0 ]'(ccDec_aux_zero_idx) → n ∈ (ccDec_aux I u w)[0 ]'(ccDec_aux_zero_idx) →
613+ dependencyTransClosureInL I u m n := by
614+ induction w with
615+ | nil => simp [ccDec_aux]
616+ | cons a w ih =>
617+ intro m n hm hn
618+ let t := ccDec_aux I u w
619+ have ht : ccDec_aux I u w = t := rfl
620+ rcases t
621+ · exfalso
622+ exact (ccDec_aux_nonempty _ _) ht
623+ · rename_i c_head c_tail
624+ cases c_head with
625+ | nil =>
626+ simp [ccDec_aux, ht] at hm hn
627+ rw [hm, hn]
628+ exact depTrClIn_refl (hwu List.mem_cons_self)
629+ | cons b c_head =>
630+ simp [ccDec_aux, ht] at hm hn
631+ by_cases hab : dependencyTransClosureInL I u a b
632+ · simp [hab] at hm hn
633+ simp [ht] at ih
634+ replace ih := ih (List.subset_of_cons_subset hwu)
635+ by_cases hma : m = a <;> by_cases hna : n = a
636+ · rw [hma, hna]
637+ exact depTrClIn_refl (hwu List.mem_cons_self)
638+ · rw [hma]
639+ simp [hna] at hn
640+ cases hn with
641+ | inl hn =>
642+ rw [hn]
643+ exact hab
644+ | inr hn =>
645+ replace ih := ih b n (by simp) (by simp [hn])
646+ exact Relation.TransGen.trans hab ih
647+ · rw [hna]
648+ simp [hma] at hm
649+ cases hm with
650+ | inl hm =>
651+ rw [hm, depTrClIn_symm]
652+ exact hab
653+ | inr hm =>
654+ replace ih := ih b m (by simp) (by simp [hm])
655+ rw [depTrClIn_symm]
656+ exact Relation.TransGen.trans hab ih
657+ · simp [hma, hna] at hm hn
658+ exact ih m n hm hn
659+ · simp [hab] at hm hn
660+ rw [hm, hn]
661+ exact depTrClIn_refl (hwu List.mem_cons_self)
662+
663+ lemma ccDec_aux_elem_conn (u w : List α) (hwu : w ⊆ u) (i : ℕ) (hi : i < (ccDec_aux I u w).length) :
664+ ∀ m n, m ∈ (ccDec_aux I u w)[i] → n ∈ (ccDec_aux I u w)[i] →
665+ dependencyTransClosureInL I u m n := by
666+ induction w generalizing i with
667+ | nil => simp [ccDec_aux]
668+ | cons a w ih =>
669+ by_cases hiz : i = 0
670+ · simp [hiz]
671+ apply ccDec_aux_head_conn
672+ exact hwu
673+ · by_cases hab : ccDec_aux_conn I u (a :: w)
674+ · rw [ccDec_aux_tail_C hab]
675+ apply ih (List.subset_of_cons_subset hwu)
676+ exact Nat.zero_lt_of_ne_zero hiz
677+ · rw [ccDec_aux_tail_D' hab]
678+ apply ih (List.subset_of_cons_subset hwu)
679+ rw [ccDec_aux_len_D hab] at hi
680+ cases i with
681+ | zero => simp at hiz
682+ | succ i => exact Nat.succ_lt_succ_iff.mp hi
683+
684+ lemma ccDec_aux_adj_head_char_indep (u w : List α) (h : 1 < (ccDec_aux I u w).length) (hw : w ≠ []) :
685+ ¬dependencyTransClosureInL I u
686+ ((ccDec_aux I u w)[0 ].getLast (ccDec_aux_elem_nonempty u w 0 ccDec_aux_zero_idx hw))
687+ ((ccDec_aux I u w)[1 ][0 ]'(List.length_pos_iff.mpr (ccDec_aux_elem_nonempty u w 1 h hw))) := by
688+ induction w with
689+ | nil => simp at hw
690+ | cons a w ih =>
691+ let t := ccDec_aux I u w
692+ have ht : ccDec_aux I u w = t := rfl
693+ rcases t
694+ · exfalso
695+ exact (ccDec_aux_nonempty _ _) ht
696+ · rename_i c_head c_tail
697+ by_cases hw' : w = []
698+ · simp [hw', ccDec_aux] at h -- #1 of 3 actually useful parts?
699+ cases c_head with
700+ | nil =>
701+ have := ccDec_aux_nonempty_head I u w hw'
702+ simp [List.getElem_of_eq ht] at this
703+ | cons b c_head =>
704+ simp [ccDec_aux, ht]
705+ by_cases hab : dependencyTransClosureInL I u a b
706+ · simp [hab] -- #2 of 3 actually useful parts?
707+ simp [ht] at ih
708+ simp [ccDec_aux, ht, hab] at h
709+ exact ih h hw'
710+ · simp [hab] -- #3 of 3 actually useful parts?
711+
712+ lemma ccDec_aux_adj_char_indep (u w : List α) (i : ℕ) (hi : i + 1 < (ccDec_aux I u w).length) (hw : w ≠ []) :
713+ ¬dependencyTransClosureInL I u
714+ ((ccDec_aux I u w)[i].getLast (ccDec_aux_elem_nonempty u w i (Nat.lt_of_succ_lt hi) hw))
715+ ((ccDec_aux I u w)[i + 1 ][0 ]'(List.length_pos_iff.mpr (ccDec_aux_elem_nonempty u w (i + 1 ) hi hw))) := by
716+ by_cases hiz : i = 0
717+ · simp [hiz] at hi ⊢
718+ exact ccDec_aux_adj_head_char_indep u w hi hw
719+ · induction w generalizing i with
720+ | nil => simp at hw
721+ | cons a w ih =>
722+ sorry
723+ /- by_cases hab : ccDec_aux_conn I u (a :: w)
724+ · rw [ccDec_aux_tail_C hab]
725+ apply ih (List.subset_of_cons_subset hwu)
726+ exact Nat.zero_lt_of_ne_zero hiz
727+ · rw [ccDec_aux_tail_D' hab]
728+ apply ih (List.subset_of_cons_subset hwu)
729+ rw [ccDec_aux_len_D hab] at hi
730+ cases i with
731+ | zero => simp at hiz
732+ | succ i => exact Nat.succ_lt_succ_iff.mp hi -/
733+
734+ lemma ccDec_aux_adj_indep (u w : List α) (i : ℕ) (hi : i + 1 < (ccDec_aux I u w).length) :
598735 Independent I (ccDec_aux I u w)[i] (ccDec_aux I u w)[i + 1 ] := by
599- sorry
600-
601- /-
602- def proj2 (S : Set α) (hd : ∀ x, Decidable (x ∈ S)) (w : List α) : List α := w.filter (· ∈ S)
736+ induction w generalizing i with
737+ | nil => simp [ccDec_aux]
738+ | cons a w ih =>
739+ intro p hp q hq
740+ sorry
603741
604- lemma proj2_prop {S : Set α} {hd : ∀ x, Decidable (x ∈ S)} {w : List α} {a : α} : a ∈ proj2 S hd w → a ∈ S := by
742+ lemma ccDec_aux_flatten (u w : List α) :
743+ (ccDec_aux I u w).flatten = w := by
605744 induction w with
606- | nil => simp [ proj2 ]
607- | cons b u ih =>
608- intro h
609- by_cases hab : a = b
610- · simp [proj2, <- hab] at h
611- exact h
612- · simp [ proj2 ] at h
613- exact h.2
614-
615- variable [LinearOrder α] in
616- theorem lexNf_dup_lexNf_isConnected {w : List α} (h : IsLexNf I (w ++ w)) : IsConnectedL I w := by
617- have h' : IsLexNf I w := by
618- contrapose h
619- simp [ IsLexNf ] at h ⊢
620- rcases h with ⟨u, h⟩
621- use w ++ u
622- exact ⟨TraceEqv.compat (TraceEqv.refl w) h.1, List.append_left_lt h.right⟩
623-
624- by_contra h_con
625- simp [ IsConnectedL ] at h_con
626- choose a b h_con using h_con
627- let A := {x | dependencyTransClosureInL I w a x}
628- let B := {x | ¬ dependencyTransClosureInL I w a x}
629- have hA_dec : ∀ x, Decidable (x ∈ A) := fun x => Classical.propDecidable (x ∈ A)
630- have hB_dec : ∀ x, Decidable (x ∈ B) := fun x => Classical.propDecidable (x ∈ B)
631- let u := proj2 A hA_dec w
632- let v := proj2 B hB_dec w
633- have : Independent I u v := by
634- intro j hj k hk
635- have hjw : j ∈ w := List.mem_of_mem_filter hj
636- have hkw : k ∈ w := List.mem_of_mem_filter hk
637- unfold u at hj
638- unfold v at hk
639- replace hj := proj2_prop hj
640- replace hk := proj2_prop hk
641- replace hj : dependencyTransClosureInL I w a j := hj
642- replace hk : ¬ dependencyTransClosureInL I w a k := hk
643- by_contra hjk
644-
645- have : dependencyTransClosureInL I w a k := by
646- have : dependencyInL I w j k := ⟨hjk, hjw, hkw⟩
647- exact Relation.TransGen.tail hj this
648-
649- exact hk this
650-
651- /- have : a ∈ u := by
652- have ha_A : a ∈ A := ⟨ha, ha, Relation.TransGen.single ((inducedDependence I).refl a)⟩
653- exact List.mem_filter_of_mem ha (decide_eq_true ha_A)
654- have : b ∈ v := by
655- have hb_B : b ∈ B := by simp [B, dependencyTransClosureInL, h_con]
656- exact List.mem_filter_of_mem hb (decide_eq_true hb_B) -/
657- sorry
658-
659- -/
745+ | nil => simp [ccDec_aux]
746+ | cons a w ih =>
747+ simp [ccDec_aux]
748+ let t := ccDec_aux I u w
749+ have ht : ccDec_aux I u w = t := rfl
750+ rcases t
751+ · exfalso
752+ exact (ccDec_aux_nonempty _ _) ht
753+ · rename_i c_head c_tail
754+ simp [ht] at ih ⊢
755+ cases c_head with
756+ | nil => simp at ih ⊢; exact ih
757+ | cons b c_head =>
758+ by_cases hab : dependencyTransClosureInL I u a b
759+ all_goals simp [hab] at ih ⊢; exact ih
760+
761+ lemma ccDec_disconnected_len (w : List α) (h : ¬ IsConnectedL I w) :
762+ (ccDec I w).length ≥ 2 := by
763+ by_contra h_len
764+ simp at h_len
765+ replace h_len : (ccDec I w).length = 1 := Nat.eq_of_le_of_lt_succ ccDec_aux_zero_idx h_len
766+ let t := ccDec I w
767+ have ht : ccDec I w = t := rfl
768+ rcases t
769+ · simp [ht] at h_len
770+ · rename_i c_head c_tail
771+ have h_conn := @ccDec_aux_head_conn α I w w (List.Subset.refl _)
772+ unfold ccDec at ht h_len
773+ simp [ht] at h_conn
774+ simp [ht] at h_len
775+ rw [h_len] at ht
776+ replace ht : (ccDec_aux I w w).flatten = c_head := by simp [ht]
777+ rw [ccDec_aux_flatten] at ht
778+ rw [ht] at h
779+ simp [IsConnectedL] at h
780+ replace ⟨m, hm, n, hn, h⟩ := h
781+ replace h_conn := (h_conn m n hm hn)
782+ rw [<- ht] at h
783+ exact h h_conn
660784
661785-----
662786
0 commit comments