Skip to content

Commit 61feae8

Browse files
committed
Add Ochmanski (i) => (ii) lemmas 2
1 parent 16232bb commit 61feae8

1 file changed

Lines changed: 185 additions & 61 deletions

File tree

TraceTheory/TraceTheory/Ochmanski.lean

Lines changed: 185 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)