The coefficient split of the back-substitution sum (round six, `hsplit_of`)
ProvedJ6Seg.hsplit_ofThe coefficient split of the back-substitution sum.
The following holds (Lean statement, in the scope of module Solutions.J6SegLn5):
theorem J6Seg.hsplit_of (b : ℕ → ℤ) (W : ℕ) (hsort : L.Pairwise (· < ·)) (r : ℕ) (hr : r < L.length)
(hwin : ∀ q, r < q → q < L.length → ¬ bd (L.getD q 0) → S (L.getD r 0) (L.getD q 0) →
q ≤ r + W) :
bsum P S L A b r = dotF P (cbOf P S L A bd W r) (accZ P S L A b (r + 1)) +
dotF P (czOf P S L A bd r) (accB P S L A b (flOf L bd) (r + 1))
Context. Segmented inverse (S2), machine side 5: the coefficient streams of the backward kernel
For a sorted line L and a border predicate bd (border positions: the cyclic wrap), the
back-substitution sum of row r splits into
- a band part over the next
Wrows (cbOf W r, zero on border rows and off the pattern), and - a border part over all later border rows (
czOf r, againstaccBwith flagsflOf).
hsplit_of: the split is exact (the hypothesis of bwdK_eq), given the window property
hwin: a non-border pattern entry (L_r, L_q) with r < q has q ≤ r + W.
win_of_band: for a strictly increasing L, a band of half-width W in positions gives
the window W in indices.
Formalization Note. Part of the Lean formalization of the round-six κ-improvement (integer-multiplication-kappa campaign, target IntMul.Kappa.jain_round6_framework). The statement is copied verbatim from the Lean development; the platform node carries the same declaration name. Definitions it mentions live in the IntMul_Kappa_R6_Defs* bundles (on top of the published κ bundles IntMul_Kappa_K_Defs*).
-- Round-six κ development (integer-multiplication-kappa), generated by skeleton subtraction.
import Definitions.Def_IntMul_Kappa_R6_Defs61
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
open J6Seg
open Finset
variable (P : ℕ) (S : ℕ → ℕ → Prop) [DecidableRel S] (L : List ℕ) (A : ℕ → ℕ → ℤ)
(bd : ℕ → Prop) [DecidablePred bd]
variable {P S L A bd}
theorem J6Seg.hsplit_of (b : ℕ → ℤ) (W : ℕ) (hsort : L.Pairwise (· < ·)) (r : ℕ) (hr : r < L.length)
(hwin : ∀ q, r < q → q < L.length → ¬ bd (L.getD q 0) → S (L.getD r 0) (L.getD q 0) →
q ≤ r + W) :
bsum P S L A b r = dotF P (cbOf P S L A bd W r) (accZ P S L A b (r + 1)) +
dotF P (czOf P S L A bd r) (accB P S L A b (flOf L bd) (r + 1)) := by sorry