Skip to content

Commit b331405

Browse files
committed
More Ochmanski (i) => (ii)
1 parent 887c408 commit b331405

2 files changed

Lines changed: 124 additions & 30 deletions

File tree

TraceTheory/TraceTheory/Language.lean

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,27 @@ theorem mem_lexNfLanguage_iff_factorCondition (x : List α) :
288288
exact hc_not_indep (h_all_indep c hc_mem)
289289

290290
theorem exists_lexNf_rep (t : Trace I) : ∃ s : List α, ⟦s⟧ = t ∧ s ∈ LexNfLanguage I := by
291-
sorry
291+
rcases t with ⟨u⟩
292+
rw [show Quot.mk (⇑(TraceSetoid I)) u = ⟦u⟧ from rfl]
293+
induction u using List.reverseRecOn with
294+
| nil =>
295+
use []
296+
simp
297+
apply (mem_lexNfLanguage_iff_factorCondition _ _).mpr
298+
apply (isLexNf_iff_factorCondition _ _).mp
299+
unfold IsLexNf
300+
intro w h_equiv
301+
replace h_equiv : w = [] := by
302+
simp [List.eq_nil_of_length_eq_zero, length_eq_of_eqv h_equiv.symm]
303+
exact ge_of_eq h_equiv
304+
| append_singleton u a ih =>
305+
rcases ih with ⟨s, hs_equiv, hs_lexNf⟩
306+
have h_equiv : TraceEqv I ([a] ++ s) ([a] ++ u) := by
307+
apply TraceEqv.compat
308+
· exact TraceEqv.refl [a]
309+
· --exact hs_equiv
310+
sorry
311+
sorry
292312

293313
end LexNf
294314

TraceTheory/TraceTheory/Ochmanski.lean

Lines changed: 103 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,17 @@ noncomputable def ccDec_aux' (I : Independence α) (w₀ w : List α) : List (Li
202202
then (a :: b :: v) :: vs
203203
else [a] :: (b :: v) :: vs
204204

205+
noncomputable def ccDec_aux_conn (I : Independence α) (w₀ w : List α) : Prop :=
206+
match w with
207+
| [] => False
208+
| a :: w =>
209+
match ccDec_aux' I w₀ w with
210+
| [] => False
211+
| v :: _ =>
212+
match v with
213+
| [] => False
214+
| b :: _ => dependencyTransClosureInL I w₀ a b
215+
205216
lemma ccDec'_aux_nonempty' (w₀ w : List α) : (ccDec_aux' I w₀ w) ≠ [] := by
206217
induction w with
207218
| nil => simp [ccDec_aux']
@@ -218,6 +229,48 @@ lemma ccDec'_aux_nonempty' (w₀ w : List α) : (ccDec_aux' I w₀ w) ≠ [] :=
218229
by_cases hab : dependencyTransClosureInL I w₀ a b
219230
all_goals simp [hab]
220231

232+
lemma ccDec_aux'_len_C (u w : List α) (a : α) (h : ccDec_aux_conn I u (a :: w)) :
233+
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length := by
234+
simp [ccDec_aux_conn] at h
235+
let t := ccDec_aux' I u w
236+
have ht : ccDec_aux' I u w = t := rfl
237+
rcases t
238+
· simp [ht] at h
239+
· rename_i c_head c_tail
240+
simp [ht] at h
241+
cases c_head with
242+
| nil => simp at h
243+
| cons b c_head =>
244+
simp at h
245+
simp [ccDec_aux', ht, h]
246+
247+
lemma ccDec_aux'_len_D (u w : List α) (a : α) (h : ¬ ccDec_aux_conn I u (a :: w)) (hw : w ≠ []) :
248+
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length + 1 := by
249+
simp [ccDec_aux_conn] at h
250+
let t := ccDec_aux' I u w
251+
have ht : ccDec_aux' I u w = t := rfl
252+
rcases t
253+
· exfalso
254+
exact ccDec'_aux_nonempty' _ _ ht
255+
· rename_i c_head c_tail
256+
simp [ht] at h
257+
cases c_head with
258+
| nil =>
259+
cases w with
260+
| nil => simp at hw
261+
| cons b w =>
262+
simp [ccDec_aux'] at ht
263+
let t' := ccDec_aux' I u w
264+
have ht' : ccDec_aux' I u w = t' := rfl
265+
rcases t'
266+
· exfalso
267+
exact ccDec'_aux_nonempty' _ _ ht'
268+
· rename_i c'_head c'_tail
269+
simp [ht'] at ht
270+
| cons b c_head =>
271+
simp at h
272+
simp [ccDec_aux', ht, h]
273+
221274
lemma ccDec'_aux_len (u w : List α) (a : α) :
222275
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length ∨
223276
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length + 1 := by
@@ -233,12 +286,31 @@ lemma ccDec'_aux_len (u w : List α) (a : α) :
233286
by_cases hab : dependencyTransClosureInL I u a b
234287
all_goals simp [hab]
235288

289+
lemma ccDec'_aux_offset (u w : List α) (a : α) :
290+
(∀ i, ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length ∨
291+
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length + 1 := by
292+
simp [ccDec_aux']
293+
cases ccDec_aux' I u w
294+
· simp
295+
· rename_i c_head c_tail
296+
simp
297+
cases c_head with
298+
| nil => simp
299+
| cons b c_head =>
300+
simp
301+
by_cases hab : dependencyTransClosureInL I u a b
302+
all_goals simp [hab]
303+
236304
lemma ccDec'_aux_len_le (u w : List α) (a : α) :
237305
(ccDec_aux' I u w).length ≤ (ccDec_aux' I u (a :: w)).length := by
238306
cases ccDec'_aux_len u w a with
239307
| inl h => rw [h]
240308
| inr h => simp [h]
241309

310+
lemma ccDec'_aux_sub_idx (u w : List α) (a : α) (i : Fin (ccDec_aux' I u (a :: w)).length) (hiz : i.1 > 0) :
311+
∃ j : Fin (ccDec_aux' I u w).length, (ccDec_aux' I u (a :: w))[i] = (ccDec_aux' I u w)[j] := by
312+
sorry
313+
242314
lemma ccDec'_aux_nonempty (u w : List α) (i : ℕ) (hi : i < (ccDec_aux' I u w).length) (hz : w ≠ []) :
243315
(ccDec_aux' I u w)[i] ≠ [] := by
244316
induction w generalizing i with
@@ -263,37 +335,39 @@ lemma ccDec'_aux_nonempty (u w : List α) (i : ℕ) (hi : i < (ccDec_aux' I u w)
263335
simp
264336
by_cases hab : dependencyTransClosureInL I u a b
265337
all_goals simp [hab]
266-
· -- cases a
267-
have : (ccDec_aux' I u (a :: w))[i] = (ccDec_aux' I u w)[i]'sorry ∨ (ccDec_aux' I u (a :: w))[i] = (ccDec_aux' I u w)[i - 1]'sorry := by
268-
simp [ccDec_aux']
269-
/- cases ccDec_aux' I u w
270-
· simp
271-
· rename_i c_head c_tail
272-
simp
273-
cases c_head with
274-
| nil => simp
275-
| cons b c_head =>
276-
simp
277-
by_cases hab : dependencyTransClosureInL I u a b
278-
all_goals simp [hab] -/
279-
sorry
280-
cases this with
281-
| inl h =>
282-
rw [h]
283-
apply ih
284-
by_contra hz
285-
simp [ccDec_aux', hz] at hi
286-
exact hiz hi
287-
| inr h =>
288-
rw [h]
289-
have : i - 1 < (ccDec_aux' I u w).length := by sorry
290-
apply ih (i - 1) this
291-
by_contra hz
292-
simp [ccDec_aux', hz] at hi
338+
· have hw : w ≠ [] := by
339+
by_contra hw
340+
simp [hw, ccDec_aux'] at hi
293341
exact hiz hi
342+
have ⟨⟨j, hj⟩, hjw⟩ := ccDec'_aux_sub_idx u w a ⟨i, hi⟩ (Nat.zero_lt_of_ne_zero hiz)
343+
simp at hjw
344+
rw [hjw]
345+
exact ih j hj hw
294346

295-
296-
347+
lemma ccDec'_subst (u w : List α) (p : α) (i : ℕ) (hi : i + 1 < (ccDec_aux' I u w).length) :
348+
List.Sublist ((ccDec_aux' I u w)[i] ++ (ccDec_aux' I u w)[i + 1]) w := by
349+
induction w generalizing i with
350+
| nil => simp [ccDec_aux'] at hi
351+
| cons a w ih =>
352+
by_cases hiz : i = 0
353+
· simp [hiz]
354+
sorry
355+
·
356+
have ⟨⟨j, hj⟩, hjw⟩ := ccDec'_aux_sub_idx u w a ⟨i, by omega⟩ (Nat.zero_lt_of_ne_zero hiz)
357+
simp at hjw
358+
rw [hjw]
359+
exact ih j hj
360+
cases ccDec_aux' I u w
361+
· simp
362+
· rename_i c_head c_tail
363+
simp
364+
cases c_head with
365+
| nil => simp
366+
| cons b c_head =>
367+
simp
368+
by_cases hab : dependencyTransClosureInL I w a b
369+
all_goals simp [hab]
370+
all_goals apply List.Sublist.cons
297371

298372
noncomputable def ccDec_aux (I : Independence α) (w₀ w : List α) (p : α) : List (List α × List α) :=
299373
match w with

0 commit comments

Comments
 (0)