Skip to content

Commit da29a4e

Browse files
committed
More Ochmanski (i) => (ii) 2
1 parent b331405 commit da29a4e

1 file changed

Lines changed: 92 additions & 29 deletions

File tree

TraceTheory/TraceTheory/Ochmanski.lean

Lines changed: 92 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -204,16 +204,16 @@ noncomputable def ccDec_aux' (I : Independence α) (w₀ w : List α) : List (Li
204204

205205
noncomputable def ccDec_aux_conn (I : Independence α) (w₀ w : List α) : Prop :=
206206
match w with
207-
| [] => False
207+
| [] => True -- by convention
208208
| a :: w =>
209209
match ccDec_aux' I w₀ w with
210210
| [] => False
211211
| v :: _ =>
212212
match v with
213-
| [] => False
213+
| [] => True -- by convention to make casework easier (first char is inserted as `[[·]]` and not `[·] :: _`)
214214
| b :: _ => dependencyTransClosureInL I w₀ a b
215215

216-
lemma ccDec'_aux_nonempty' (w₀ w : List α) : (ccDec_aux' I w₀ w) ≠ [] := by
216+
lemma ccDec_aux'_nonempty' (w₀ w : List α) : (ccDec_aux' I w₀ w) ≠ [] := by
217217
induction w with
218218
| nil => simp [ccDec_aux']
219219
| cons a u ih =>
@@ -229,7 +229,33 @@ lemma ccDec'_aux_nonempty' (w₀ w : List α) : (ccDec_aux' I w₀ w) ≠ [] :=
229229
by_cases hab : dependencyTransClosureInL I w₀ a b
230230
all_goals simp [hab]
231231

232-
lemma ccDec_aux'_len_C (u w : List α) (a : α) (h : ccDec_aux_conn I u (a :: w)) :
232+
lemma ccDec_aux_zero_idx {w₀ w : List α} : 0 < (ccDec_aux' I w₀ w).length := List.length_pos_iff.mpr (ccDec_aux'_nonempty' _ _)
233+
234+
lemma ccDec_aux'_nonempty_head (I : Independence α) (u w : List α) (h : w ≠ []) :
235+
(ccDec_aux' I u w)[0]'(ccDec_aux_zero_idx) ≠ [] := by
236+
induction w with
237+
| nil => simp at h
238+
| cons a w ih =>
239+
suffices hs_dec : ∃ _1 _2 _3, (ccDec_aux' I u (a :: w)) = (_1 ::_2) :: _3 from by
240+
replace ⟨_1, _2, _3, hs_dec⟩ := hs_dec
241+
rw [List.getElem_of_eq hs_dec]
242+
simp
243+
simp [ccDec_aux']
244+
let t := ccDec_aux' I u w
245+
have ht : ccDec_aux' I u w = t := rfl
246+
rcases t
247+
· exfalso
248+
exact ccDec_aux'_nonempty' _ _ ht
249+
· rename_i c_head c_tail
250+
simp [ht]
251+
cases c_head with
252+
| nil => simp
253+
| cons b c_head =>
254+
simp
255+
by_cases hab : dependencyTransClosureInL I u a b
256+
all_goals simp [hab]
257+
258+
lemma ccDec_aux'_len_C {u w : List α} {a : α} (h : ccDec_aux_conn I u (a :: w)) :
233259
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length := by
234260
simp [ccDec_aux_conn] at h
235261
let t := ccDec_aux' I u w
@@ -239,55 +265,91 @@ lemma ccDec_aux'_len_C (u w : List α) (a : α) (h : ccDec_aux_conn I u (a :: w)
239265
· rename_i c_head c_tail
240266
simp [ht] at h
241267
cases c_head with
242-
| nil => simp at h
268+
| nil => simp [ccDec_aux', ht]
243269
| cons b c_head =>
244270
simp at h
245271
simp [ccDec_aux', ht, h]
246272

247-
lemma ccDec_aux'_len_D (u w : List α) (a : α) (h : ¬ ccDec_aux_conn I u (a :: w)) (hw : w ≠ []) :
273+
lemma ccDec_aux'_len_D {u w : List α} {a : α} (h : ¬ ccDec_aux_conn I u (a :: w)) :
248274
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length + 1 := by
249275
simp [ccDec_aux_conn] at h
250276
let t := ccDec_aux' I u w
251277
have ht : ccDec_aux' I u w = t := rfl
252278
rcases t
253279
· exfalso
254-
exact ccDec'_aux_nonempty' _ _ ht
280+
exact ccDec_aux'_nonempty' _ _ ht
255281
· rename_i c_head c_tail
256282
simp [ht] at h
257283
cases c_head with
258284
| nil =>
259285
cases w with
260-
| nil => simp at hw
286+
| nil => simp at h
261287
| 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
288+
have := ccDec_aux'_nonempty_head I u (b :: w) (List.cons_ne_nil b w)
289+
simp [List.getElem_of_eq ht] at this
270290
| cons b c_head =>
271291
simp at h
272292
simp [ccDec_aux', ht, h]
273293

274-
lemma ccDec'_aux_len (u w : List α) (a : α) :
275-
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length ∨
276-
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length + 1 := by
277-
simp [ccDec_aux']
278-
cases ccDec_aux' I u w
279-
· simp
294+
lemma ccDec_aux'_tail_C {u w : List α} {a : α} (h : ccDec_aux_conn I u (a :: w))
295+
(i : ℕ) (hi : i < (ccDec_aux' I u w).length) (hiz : i > 0) :
296+
(ccDec_aux' I u (a :: w))[i]'(by rw [ccDec_aux'_len_C h]; exact hi) = (ccDec_aux' I u w)[i] := by
297+
by_cases hw : w = []
298+
· simp [hw, ccDec_aux'] at hi
299+
simp [hi] at hiz
300+
simp [ccDec_aux_conn] at h
301+
let t := ccDec_aux' I u w
302+
have ht : ccDec_aux' I u w = t := rfl
303+
rcases t
304+
· simp [ht] at hi
280305
· rename_i c_head c_tail
281-
simp
306+
simp [ht] at h
307+
have : c_head ≠ [] := by
308+
have := ccDec_aux'_nonempty_head I u w hw
309+
rw [List.getElem_of_eq ht] at this
310+
exact this
282311
cases c_head with
283-
| nil => simp
312+
| nil => simp at this
284313
| cons b c_head =>
285-
simp
286-
by_cases hab : dependencyTransClosureInL I u a b
287-
all_goals simp [hab]
314+
simp at h
315+
simp [ccDec_aux', ht, h] at hi ⊢
316+
have : ((a :: b :: c_head) :: c_tail)[i] =
317+
((a :: b :: c_head) :: c_tail)[i - 1 + 1]'(Nat.add_lt_of_lt_sub (Nat.sub_lt_right_of_lt_add hiz hi)) := by
318+
rw [getElem_congr _ (show i - 1 + 1 = i from Nat.sub_add_cancel (Nat.succ_le_of_lt hiz))]
319+
simp
320+
rw [this]
321+
have : ((b :: c_head) :: c_tail)[i] =
322+
((b :: c_head) :: c_tail)[i - 1 + 1]'(Nat.add_lt_of_lt_sub (Nat.sub_lt_right_of_lt_add hiz hi)) := by
323+
rw [getElem_congr _ (show i - 1 + 1 = i from Nat.sub_add_cancel (Nat.succ_le_of_lt hiz))]
324+
simp
325+
rw [this]
326+
simp [List.getElem_cons_succ]
327+
328+
lemma ccDec_aux'_tail_D {u w : List α} {a : α} (h : ¬ ccDec_aux_conn I u (a :: w))
329+
(i : ℕ) (hi : i < (ccDec_aux' I u w).length) :
330+
(ccDec_aux' I u (a :: w))[i + 1]'(by rw [ccDec_aux'_len_D h]; exact Nat.add_lt_add_right hi 1) = (ccDec_aux' I u w)[i] := by
331+
by_cases hw : w = []
332+
· simp [hw, ccDec_aux_conn, ccDec_aux'] at h
333+
simp [ccDec_aux_conn] at h
334+
let t := ccDec_aux' I u w
335+
have ht : ccDec_aux' I u w = t := rfl
336+
rcases t
337+
· simp [ht] at hi
338+
· rename_i c_head c_tail
339+
simp [ht] at h
340+
have : c_head ≠ [] := by
341+
have := ccDec_aux'_nonempty_head I u w hw
342+
rw [List.getElem_of_eq ht] at this
343+
exact this
344+
cases c_head with
345+
| nil => simp at this
346+
| cons b c_head =>
347+
simp at h
348+
simp [ccDec_aux', ht, h] at ⊢
288349

289-
lemma ccDec'_aux_offset (u w : List α) (a : α) :
290-
(∀ i, ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length ∨
350+
/-
351+
lemma ccDec'_aux_len (u w : List α) (a : α) :
352+
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length ∨
291353
(ccDec_aux' I u (a :: w)).length = (ccDec_aux' I u w).length + 1 := by
292354
simp [ccDec_aux']
293355
cases ccDec_aux' I u w
@@ -310,6 +372,7 @@ lemma ccDec'_aux_len_le (u w : List α) (a : α) :
310372
lemma ccDec'_aux_sub_idx (u w : List α) (a : α) (i : Fin (ccDec_aux' I u (a :: w)).length) (hiz : i.1 > 0) :
311373
∃ j : Fin (ccDec_aux' I u w).length, (ccDec_aux' I u (a :: w))[i] = (ccDec_aux' I u w)[j] := by
312374
sorry
375+
-/
313376

314377
lemma ccDec'_aux_nonempty (u w : List α) (i : ℕ) (hi : i < (ccDec_aux' I u w).length) (hz : w ≠ []) :
315378
(ccDec_aux' I u w)[i] ≠ [] := by

0 commit comments

Comments
 (0)