@@ -86,30 +86,27 @@ theorem isLexNF_iff_factorCondition (x : List α) :
8686variable [Fintype α] [DecidableRel I.rel]
8787
8888/-- A single symbol. -/
89- def Letter (a : α) : Language α :=
90- { [a] }
89+ def char (a : α) : Language α := { [a] }
9190
9291/-- The set of all symbols. -/
93- def sigma : Language α :=
94- ⊤
92+ def sigma : Language α := ⊤
9593
9694/-- The language consisting of single letters that are independent of `a`. -/
9795def independentLetters (a : α) : Language α :=
98- ∑ c ∈ (Finset.univ.filter (fun c => I.rel a c)), Letter c
96+ ∑ c ∈ (Finset.univ.filter (fun c => I.rel a c)), char c
9997
10098/-- The "Forbidden Pattern" for a specific pair (a, b).
10199Pattern: Σ* b (independent of a)* a Σ* -/
102100def forbiddenPattern (a b : α) : Language α :=
103- sigma∗ * Letter b * (independentLetters I a)∗ * Letter a * sigma∗
101+ sigma∗ * char b * (independentLetters I a)∗ * char a * sigma∗
104102
105103/-- Union of all forbidden patterns for (a,b) ∈ I with a < b. -/
106104def allForbiddenPatterns : Language α :=
107105 ∑ p ∈ (Finset.univ.filter (fun (p : α × α) => p.1 < p.2 ∧ I.rel p.1 p.2 )),
108106 forbiddenPattern I p.1 p.2
109107
110108/-- LexNF is the complement of the forbidden patterns. -/
111- def lexNFLanguage : Language α :=
112- (allForbiddenPatterns I)ᶜ
109+ def lexNFLanguage : Language α := (allForbiddenPatterns I)ᶜ
113110
114111omit [LinearOrder α] in
115112lemma isRegular_independentLetters (a : α) : Language.IsRegular (independentLetters I a) := by
@@ -122,7 +119,7 @@ lemma isRegular_independentLetters (a : α) : Language.IsRegular (independentLet
122119
123120omit [LinearOrder α] in
124121lemma isRegular_forbiddenPattern (a b : α) : Language.IsRegular (forbiddenPattern I a b) := by
125- unfold forbiddenPattern sigma Letter
122+ unfold forbiddenPattern sigma char
126123 repeat apply Language.IsRegular.mul
127124 · apply Language.IsRegular.kstar
128125 exact Language.IsRegular.top
@@ -185,14 +182,14 @@ lemma mem_forbiddenPattern_iff {x : List α} {a b : α} :
185182 rcases h with ⟨a1, b1, b2, b3, ⟨⟨ha1, hb1, hb2⟩, hb3⟩, ⟨x, hx, rfl⟩⟩
186183 use a1, b2, x
187184 constructor
188- · simp only [Letter ] at hb3 hb1
185+ · simp only [char ] at hb3 hb1
189186 rw [Set.mem_singleton_iff] at hb3 hb1
190187 subst hb3 hb1
191188 simp
192189 · intro c hc
193190 rw [Language.mem_kstar] at hb2
194191 rcases hb2 with ⟨L, rfl, hL⟩
195- unfold Letter at hL
192+ unfold char at hL
196193 simp only [mem_flatten] at hc
197194 rcases hc with ⟨y, hy, hcy⟩
198195 have hy_indep := hL y hy
@@ -208,7 +205,7 @@ lemma mem_forbiddenPattern_iff {x : List α} {a b : α} :
208205 rcases h with ⟨y, u, z, rfl, h_indep⟩
209206 simp [Language.mem_mul]
210207 use y, [b], u, [a]
211- unfold Letter
208+ unfold char
212209 and_intros
213210 · apply mem_sigma
214211 · rfl
@@ -320,8 +317,7 @@ def IsIterativeFactor (X : Language α) (t : List α) :=
320317 ∃ u v, ∀ n : ℕ, u ++ t ^ n ++ v ∈ X
321318
322319/-- Maps a word language to a trace language. -/
323- def toTrace (I : Independence α) (X : Language α) : Set (Trace I) :=
324- Trace.mk' I '' X
320+ def toTrace (I : Independence α) (X : Language α) : Set (Trace I) := Trace.mk' I '' X
325321
326322/-- The `Language` of all strings trace equivalent to strings in language `X`. -/
327323def traceClosure (I : Independence α) (X : Language α) : Language α :=
@@ -350,12 +346,12 @@ theorem traceClosure.idem {X : Language α} :
350346 · apply mono
351347 apply le_closure
352348
353- theorem kstar_diff_one (L : Language α) : (L \ {[]})∗ = L ∗ := by
354- ext w
349+ theorem kstar_diff_one (X : Language α) : (X \ {[]})∗ = X ∗ := by
350+ ext x
355351 constructor
356- · intro ⟨ls, hw , hls⟩
352+ · intro ⟨ls, hx , hls⟩
357353 use ls
358- simp [hw ]
354+ simp [hx ]
359355 exact fun y hy => Set.diff_subset (hls y hy)
360356 · intro ⟨ls, hls, ht⟩
361357 use ls.filter (!·.isEmpty)
0 commit comments