HvdH machine lemma expNegBody_cost (`expNeg` as a register program)
ProvedNLogN.expNegBody_costThe following holds (Lean statement, in the scope of module NLogN.HNumExp3):
theorem NLogN.expNegBody_cost (n k j : ℕ) (s : IState HS) (L16 L17 L18 : List Item)
(h16 : s.G 16 = .int n :: L16) (h17 : s.G 17 = .int k :: L17)
(h18 : s.G 18 = .int j :: L18) :
expNegBody.cost s ≤ piCost 5 239 (2 * n + 10) +
expNegFixCost n (2 * n + 10) (zsz (-(piBits (2 * n + 10) * j / k)))
((-(-(piBits (2 * n + 10) * j / k))) / log2Bits (2 * n + 10)).toNat +
10 ^ 10 * (expNegBB n (zsz (-(piBits (2 * n + 10) * j / k)))
((-(-(piBits (2 * n + 10) * j / k))) / log2Bits (2 * n + 10)).toNat
(zsz (j : ℤ)) (zsz (k : ℤ)) + 4) ^ 2
Context. The lemma belongs to the part expNeg as a register program: expNegP: inputs n on 16, k on 17, j on 18; expNeg n k j pushed on 19.
It uses (with pushes popped) registers 3 … 15 and the scratch registers of
piP/log2P (0, 1, 2, 40 … 47) and expP (30 … 39).
Formalization Note. This is a lemma of the Lean development NLogN, a multitape-Turing-machine implementation of the Harvey–van der Hoeven integer multiplication algorithm, used in the proof of NLogN.FIN.theorem_1_1_nlogn : IntMul.MulTimeBound fun n => n * Real.log n. All names refer to the definition bundles IntMul_HvdH_M_Defs1–IntMul_HvdH_M_Defs8 (namespace NLogN), built on the platform model Def_IntMul_MultitapeModel and the published reference Def_IntMul_HvdH_MachineRef. The machine layer: IState HS is a state of 64 item stacks; RM programs have a semantics p.run s, a definedness predicate p.ok M s and a cost p.cost M s relative to a multiplication spec M : MulSpec; zsz z is the bit length of .
-- Harvey–van der Hoeven multitape-TM development (NLogN), generated by skeleton subtraction. import Definitions.Def_IntMul_HvdH_M_Defs8 set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 set_option linter.unusedSimpArgs false open NLogN open IntMul RS IntMul.HvdH set_option maxHeartbeats 4000000
theorem NLogN.expNegBody_cost (n k j : ℕ) (s : IState HS) (L16 L17 L18 : List Item)
(h16 : s.G 16 = .int n :: L16) (h17 : s.G 17 = .int k :: L17)
(h18 : s.G 18 = .int j :: L18) :
expNegBody.cost s ≤ piCost 5 239 (2 * n + 10) +
expNegFixCost n (2 * n + 10) (zsz (-(piBits (2 * n + 10) * j / k)))
((-(-(piBits (2 * n + 10) * j / k))) / log2Bits (2 * n + 10)).toNat +
10 ^ 10 * (expNegBB n (zsz (-(piBits (2 * n + 10) * j / k)))
((-(-(piBits (2 * n + 10) * j / k))) / log2Bits (2 * n + 10)).toNat
(zsz (j : ℤ)) (zsz (k : ℤ)) + 4) ^ 2 := by sorry