Round-six lemma `gP1_sp`
ProvedJ6A.SL.gP1_spcomplexity-theoryinteger-multiplicationkappa-improvement
An auxiliary lemma of the round-six development, published as a separate node because its proof is long or shared.
The following holds (Lean statement, in the scope of module Solutions.J6AIL16):
theorem J6A.SL.gP1_sp (hM : 0 < t / (16 * J6A.PA.HH p α)) (ht : 0 < t)
(hWs : J6A.WA p α (J6A.PA.HH p α) ≤ sr)
(hn' : 8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)) ≤ 2 ^ W) (hn : 32 * t ≤ 2 ^ W) :
∃ v, BV W v ∧ v 1 = pre ∧ v 2 = post ∧ v 7 = ((32 * t : ℕ) : ℤ) ∧
v 12 = ((8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)) : ℕ) : ℤ) ∧
∀ s, Sp (gP1 X) (encK s F) (encK s (J6Seg.PJ.RF v (update F 44
(srcTab (J6A.srcG sr t (J6A.PA.HH p α) (J6A.WA p α (J6A.PA.HH p α)) (t / (16 * J6A.PA.HH p α)) (8 * J6A.PA.HH p α))
(fun _ => 0) (8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)))))))
(cG1 W p (sWidth p α) (8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α))))
Context. A lines, IL side 16: the prologues of the gather and compress slab set-ups
gP1 X = initP; parAX X; 12 := 8 (M · 8H); 7 := 4 (8 t); gthP 3 4 8 9 10 11 12(gP1_sp): the gather source tablesrcTab (srcG s t H W M 8H) 0 n'on44,n = 32 ton7,n' = 8 (M · 8H)on12;cP1 X = initP; parAX X; 7 := (M · 8) · 8H; cmpP 8 11 4(cP1_sp): the compress source tablesrcTab (srcC H 8H) 0 ton44,n = M · 8 · 8Hon7,n' = ton4.
Here H = HH p α, W = WA p α H, M = t / 16H (the registers of parAX).
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*).
Preamble
-- Round-six κ development (integer-multiplication-kappa), generated by skeleton subtraction.
import Definitions.Def_IntMul_Kappa_R6_Defs67
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
open J6A J6A.SL
open IntMul NLogN NLogN.KIL Function NLogN.RS J6Seg.PJ J6A.PA J6A.ST IntMul.HvdH
open J6Seg.Slab (srcTab flatC)
open J6Seg.Src (uC DD)
variable {X : Fin HS} (hXr : X ∉ rg) (hX5 : X.val < 56) (hXT : X ≠ sTmp) (hXC : X ≠ cRdC)
{F : Fin HS → List ℤ} (hrg : ∀ j ∈ rg, F j = []) (h13 : F cL = []) (h44 : F 44 = [])
{k pre post sr t p α d W : ℕ} (hc : F X = J6A.PA.dL k pre post sr t p α d)
(hL : ∀ x ∈ J6A.PA.dL k pre post sr t p α d, |x| < 2 ^ W) (hp : 1 ≤ p) (hα : 1 ≤ α)
(hmW : sWidth p α + 4 ≤ W)
include hXr hX5 hXT hXC hrg h13 h44 hc hL hp hα hmW
Formal statement
theorem J6A.SL.gP1_sp (hM : 0 < t / (16 * J6A.PA.HH p α)) (ht : 0 < t)
(hWs : J6A.WA p α (J6A.PA.HH p α) ≤ sr)
(hn' : 8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)) ≤ 2 ^ W) (hn : 32 * t ≤ 2 ^ W) :
∃ v, BV W v ∧ v 1 = pre ∧ v 2 = post ∧ v 7 = ((32 * t : ℕ) : ℤ) ∧
v 12 = ((8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)) : ℕ) : ℤ) ∧
∀ s, Sp (gP1 X) (encK s F) (encK s (J6Seg.PJ.RF v (update F 44
(srcTab (J6A.srcG sr t (J6A.PA.HH p α) (J6A.WA p α (J6A.PA.HH p α)) (t / (16 * J6A.PA.HH p α)) (8 * J6A.PA.HH p α))
(fun _ => 0) (8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)))))))
(cG1 W p (sWidth p α) (8 * (t / (16 * J6A.PA.HH p α) * (8 * J6A.PA.HH p α)))) := by sorrySource
S. Jain, round-six networks for the integer-multiplication κ-improvement campaign (https://github.com/Swapnil-jain/integer-mult-kappa, commit 5868dc7) and D. Colkitt, integer-mult-bounds (https://github.com/CrocSwap/integer-mult-bounds); target `IntMul.Kappa.jain_round6_framework`. Lean declaration `J6A.SL.gP1_sp`, Solutions/J6AIL16.lean (lines 62–127) of the round-six development.