Documentation

Complexitylib.Classes.PPoly.Uniform.Unrolling.Generator.Finalization.Internal

Direct-unrolling finalization generator -- proof internals #

theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.emitPadding_spaceBoundByWidth_internal {initialSpace : } {values : BinaryValues WorkCount} {width : } (hfrontier : ∀ (inputLength : ), values inputLength Work.frontier width inputLength) (hreference : ∀ (inputLength : ), values inputLength Work.reference₀ width inputLength) :
emitPadding.SpaceBoundByWidthAt initialSpace values width
theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.finalization_spaceBoundByPolynomial_internal {k : } (tm : TM k) (p : Polynomial ) {initialSpace : } {values : BinaryValues WorkCount} (hvalues : ∀ (inputLength : ) (index : Fin WorkCount), values inputLength index Polynomial.eval inputLength p) :
∃ (width : Polynomial ), (finalization tm).SpaceBoundByWidthAt initialSpace values fun (x : ) => Polynomial.eval x width
theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.finalization_space_bigO_log_internal {k : } (tm : TM k) (p : Polynomial ) {initialSpace : } {values : BinaryValues WorkCount} (hinitial : BigO initialSpace fun (inputLength : ) => Nat.log 2 inputLength) (hvalues : ∀ (inputLength : ) (index : Fin WorkCount), values inputLength index Polynomial.eval inputLength p) :
(finalization tm).SpaceBoundInLogAt initialSpace values
theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.finalization_requires_internal {k : } (tm : TM k) (values : BinaryValues WorkCount) (hemit : values Work.emitCounter = 0) (hcopy : values Work.copyCounter = 0) (hadd : values Work.addCounter = 0) (hmultiply : values Work.multiplyCounter = 0) (hle : values Work.available + 1 values Work.frontier) :
theorem Complexity.CircuitUnrolling.Serializer.DirectGenerator.finalization_emitted_eq_numericSchedule_internal {k : } (tm : TM k) (values : BinaryValues WorkCount) (n originalRawGateCount closedBound T finalConfigBase : ) (hn : 0 < n) (havailable : values Work.available = n + originalRawGateCount - 1) (hfrontier : values Work.frontier = n + closedBound) (hhorizon : values Work.horizon = T) (hconfigBase : values Work.configBase = finalConfigBase) :
(finalization tm).emitted values = List.flatMap CircuitCode.RawGate.encode ([numericAcceptanceGate (Fintype.card tm.Q) (stateIndex tm.toNTM tm.qhalt) (k + 2) T finalConfigBase] ++ directFinalizationSuffix n originalRawGateCount closedBound)