Compiling polynomial clocks #
A deterministic preparation program writes a unary budget on the last work tape. The common tape embedding and sequential compiler then run the common clock consumer. Preparation scratch tapes and source tapes are disjoint; all tapes start blank. Every preparation and controller instruction is charged to the compiled machine's polynomial bound.
Main definitions #
Turing.MultiTapePTM.PolynomialClock.compile: prepare a budget and consume it.
Main results #
Turing.MultiTapePTM.PolynomialClock.run_interpret_compile: retain the joint configuration and private interpreter state, apart from the source's discarded control state.Turing.MultiTapePTM.exists_polynomialClock: a finite-control machine implements the cutoff and halts within a uniform polynomial, against any query interpreter and stateless coin law.
References #
Adapts the role of MultiTape/Oracle/PolynomialClock.lean on the cslib crypto branch at
5ff69ca93402e7c947208dc56396d6d86203ccd8, using functional budget generation and the shared
machine compilers.
Reserve disjoint source and preparation tapes, then run the budget controller.
Instances For
A prepared word stays on the last tape when disjoint source tapes are added in front.
The preparation phase has halted, with only its last work tape nonempty.
Instances For
Handoff supplies precisely the initial source configuration and its prepared budget.
The embedded deterministic preparation reaches the exact ready configuration.
The source data after exhaustion, embedded alongside the consumed budget and halted control.
Instances For
Preparing and consuming a budget preserves the entire source data and private interpreter state. Both preparation time and every controller instruction are included in the bound.
A finite-control machine implements a polynomial cutoff uniformly and actually halts. Its polynomial charges budget generation, rewinding, and clock consumption. Oracle calls keep their abstract instruction cost; no efficiency of an arbitrary supplied query program is asserted.