@@ -204,16 +204,16 @@ noncomputable def ccDec_aux' (I : Independence α) (w₀ w : List α) : List (Li
204204
205205noncomputable 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 : α) :
310372lemma 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
314377lemma 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