Scalars of the whole program (round six, `sc_prog`)
ProvedIntMul.Kappa.R6.Bit.NB.sc_progScalars of the whole program.
The following holds (Lean statement, in the scope of module Solutions.R6BitNBNetC):
theorem IntMul.Kappa.R6.Bit.NB.sc_prog :
(∀ a < 1771, ∀ s < 1771,
(IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι2 a (wY s)) = φ0 ch N (ι2 a (wX s)) ∧
(IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι2 a (wX s)) = φ0 ch N (ι2 a (wY s))) ∧
(∀ b < 1771, ∀ q < 40077, (IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι1 b (wS q)) = φ0 ch N (ι1 b (wS q))) ∧
(∀ a < 1771, ∀ q < 40077, (IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι2 a (wS q)) = φ0 ch N (ι2 a (wS q)))
Context. Round six, bit network: the scalar circuit and formal correctness (FormalOK)
The module-valued scalar circuit (formal values over ZMod 2) of the whole program: stage one
adds X(T, b) into Y(T, b), stage two adds Y(a, S) into X(a, S), the correction adds
X into τ and τ into Y. With the labels of R6BitNBNetB and formal_labels, every role
ρ w ends with (swapMat, w).
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_Defs52
set_option autoImplicit false
set_option relaxedAutoImplicit false
set_option maxHeartbeats 1000000
open IntMul IntMul.Kappa IntMul.Kappa.R6 IntMul.Kappa.R6.Bit IntMul.Kappa.R6.Bit.NB
open Matrix R6Chk R6Chk.Bit R6Chk.Bit.Loc AModel AModelFac
variable {N : ℕ}
variable (ch : Ch)
theorem IntMul.Kappa.R6.Bit.NB.sc_prog :
(∀ a < 1771, ∀ s < 1771,
(IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι2 a (wY s)) = φ0 ch N (ι2 a (wX s)) ∧
(IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι2 a (wX s)) = φ0 ch N (ι2 a (wY s))) ∧
(∀ b < 1771, ∀ q < 40077, (IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι1 b (wS q)) = φ0 ch N (ι1 b (wS q))) ∧
(∀ a < 1771, ∀ q < 40077, (IntMul.Kappa.R6.Bit.NB.prog ch).foldl scalarStepM (φ0 ch N) (ι2 a (wS q)) = φ0 ch N (ι2 a (wS q))) := by sorry