A push of an arbitrary (e.g. multiplying) expression, with the quadratic cost bound
ProvedNLogN.KIL.Sp.pushQA push of an arbitrary (e.g. multiplying) expression, with the quadratic cost bound.
The following holds (Lean statement, in the scope of module Solutions.KILBase):
theorem NLogN.KIL.Sp.pushQ {i : Fin HS} {e : Ex HS} {B : ℕ} (hi : i.val < 56) (hc : e.Clean)
(hok : e.ok (NLogN.KIL.encK s f)) (hB : e.Bnd (NLogN.KIL.encK s f) B) :
Sp (.push i e) (NLogN.KIL.encK s f) (NLogN.KIL.encK s (Function.update f i (e.eval (NLogN.KIL.encK s f) :: f i)))
((e.size + 1) * 10 ^ 7 * (B + 2) ^ 2)
Context. The lemma belongs to the part KIL base: register programs on "managed" stacks: encK s f is the state s with the list of integers f j pushed on top of every stack j
(f j = [] for unmanaged stacks). All programs of the KIL files are specified on such states;
updates are Function.updates of f, which keeps the bookkeeping small.
Formalization Note. This lemma belongs to layer 5 of the Lean formalization (integer-multiplication-kappa campaign) of the OpenAI preprint Integer multiplication below : the uniform item-language machine (register programs over the NLogN multitape framework) assembling the Proposition 14 / Lemma 13 / Proposition 18 pieces, the resampling and chirp stages and the cost recurrences into one fixed machine, culminating in NLogN.KFTop.kappa_bound : IntMul.KappaBound (1 / 2 ^ 182) (the bound of Def_IntMul_MultitapeModel). All names refer to the definition bundles up to IntMul_Kappa_K_Defs33.
-- OpenAI-preprint / κ-improvement development (integer-multiplication-kappa), generated by skeleton subtraction. import Definitions.Def_IntMul_Kappa_K_Defs33 set_option autoImplicit false set_option relaxedAutoImplicit false set_option maxHeartbeats 1000000 set_option linter.unusedSimpArgs false open NLogN open IntMul RS open NLogN.KIL variable (s : IState HS) (f : Fin HS → List ℤ)
theorem NLogN.KIL.Sp.pushQ {i : Fin HS} {e : Ex HS} {B : ℕ} (hi : i.val < 56) (hc : e.Clean)
(hok : e.ok (NLogN.KIL.encK s f)) (hB : e.Bnd (NLogN.KIL.encK s f) B) :
Sp (.push i e) (NLogN.KIL.encK s f) (NLogN.KIL.encK s (Function.update f i (e.eval (NLogN.KIL.encK s f) :: f i)))
((e.size + 1) * 10 ^ 7 * (B + 2) ^ 2) := by sorry