Documentation

Complexitylib.Algebraic.LowerBound.Cutwidth.Extractor.Strong.Block.Splitting.Iterated.Internal.Tuples

Coordinate laws for successive block splitting #

The index equivalence puts each first coordinate immediately before its second coordinate. Splitting a head pair therefore prepends two coordinates to the split tail, with only the equality of the tuple lengths transported.

theorem Algebraic.Cutwidth.Extractor.Internal.splitBlockEquiv_apply {α : Type u_1} {t : ℕ} (x : Fin t → α × α) (i : Fin t) (j : Fin 2) :
theorem Algebraic.Cutwidth.Extractor.Internal.splitBlockEquiv_apply_fst {α : Type u_1} {t : ℕ} (x : Fin t → α × α) (i : Fin t) :
(splitBlockEquiv α t) x ((splitBlockIndexEquiv t) (i, 0)) = (x i).1
theorem Algebraic.Cutwidth.Extractor.Internal.splitBlockEquiv_apply_snd {α : Type u_1} {t : ℕ} (x : Fin t → α × α) (i : Fin t) :
(splitBlockEquiv α t) x ((splitBlockIndexEquiv t) (i, 1)) = (x i).2
theorem Algebraic.Cutwidth.Extractor.Internal.pairPrependEquiv_apply {α : Type u_1} {t : ℕ} (ab : α × α) (z : Fin t → α) :
(pairPrependEquiv α t) (ab, z) = Fin.cons ab.1 (Fin.cons ab.2 z)
theorem Algebraic.Cutwidth.Extractor.Internal.splitBlockEquiv_cons {α : Type u_1} {t : ℕ} (ab : α × α) (z : Fin t → α × α) :
(splitBlockEquiv α (t + 1)) (Fin.cons ab z) = fun (i : Fin (2 * t.succ)) => (pairPrependEquiv α (2 * t)) (ab, (splitBlockEquiv α t) z) (Fin.cast ⋯ i)