Simulating a clocked oracle machine with a computed oracle #
The run of a fair-coin oracle machine with every coin fixed to false, against a deterministic
answer function, is the iteration of one instruction on finite storage
(Turing.MultiTapePTM.answerStep, Turing.MultiTapePTM.interpret_run_pure_false): a local
instruction updates the tapes, and a query installs the answer to the pending request.
Against an oracle that answers a request w with the bit g w, an instruction costs polynomial
time in the encoded configuration plus one evaluation of g on the pending request
(Turing.MultiTapePTM.answerStep_inO). Along a clocked run the configuration grows by a bounded
amount per instruction and every request is no longer than the clock
(Turing.MultiTapePTM.spaceBound_answerStep, Turing.MultiTapePTM.length_pendingRequest_le).
Iterating the instruction with a binary counter
(Turing.MultiTapeTM.ComputableInO.iterate) therefore simulates a run of polynomial clock
within polynomial space whenever g is computable within polynomial space
(Turing.MultiTapePTM.exists_computableInO_run). The time is not bounded by a polynomial:
it charges, for every instruction, the largest time of g on a word no longer than the clock
(Turing.MultiTapeTM.wordMax). When g is polynomial-time, both the instruction and the clocked
run are polynomial-time (Turing.MultiTapePTM.computableInPolyTime_answerStep,
Turing.MultiTapePTM.computableInPolyTime_run).
Main definitions #
Turing.MultiTapePTM.answerStep: one instruction against an answer function.Turing.MultiTapePTM.pendingQuery,Turing.MultiTapePTM.pendingRequest: the query about to be submitted and its request word.Turing.MultiTapeTM.wordMax: the largest value of a function on the words up to a length.
Main results #
Turing.MultiTapePTM.interpret_run_pure_false: a coin-fixed run is an iteration ofanswerStep.Turing.MultiTapePTM.answerStep_inO: the bounds of an instruction.Turing.MultiTapePTM.exists_computableInO_run: a clocked run against an oracle computed within polynomial space is computable within polynomial space.Turing.MultiTapePTM.computableInPolyTime_answerStep: an instruction against a polynomial-time oracle is polynomial-time.Turing.MultiTapePTM.computableInPolyTime_run: a clocked run against a polynomial-time oracle is polynomial-time.
References #
- S. Arora, B. Barak, Computational Complexity: A Modern Approach, Section 3.4 (oracle Turing machines) and Theorem 3.7.
One instruction against an answer function #
One instruction of the run with every coin false, the reply to a query given by answer. A
halted configuration is unchanged.
Instances For
Interpreting a bounded loop against an answer function iterates the interpreted body.
A coin-fixed run is an iteration of answerStep on finite storage, against every answer
function.
The parts of an instruction #
The query about to be submitted: its channel and the next control state, if the machine has
not halted and its next instruction, with coin false, is a query.
Instances For
The request word of the pending query, or the empty word.
Instances For
The next instruction if it is local; otherwise the configuration is unchanged.
Instances For
Install a one-bit reply to the pending query.
Instances For
Against an oracle answering one bit, an instruction either installs the bit for the pending request or is local.
Bounds #
The bounds of an instruction. Against an oracle answering [g w] to a request w, an
instruction takes polynomial time and space in the encoded configuration, plus the time and space
of g on the pending request.
An instruction against a one-bit oracle grows the storage by a bounded amount.
A pending request after steps instructions has at most steps symbols.
A clocked coin-false run against a plain oracle decider is computable within polynomial space. Both oracle and run certificates charge encoded output in workspace. The independent time and workspace bounds are exactly those of the tidy simulation; only the realizing-machine presentation changes. No polynomial time bound on the oracle is assumed.
An instruction against a polynomial-time oracle is polynomial-time. Against an oracle
answering [g w] to a request w, with g polynomial-time, an instruction is polynomial-time in
the encoded configuration: it either installs g of the pending request or is local.
A clocked run against a polynomial-time oracle is polynomial-time. Against the oracle
answering [g w] to a request w, where g is polynomial-time, the run with every coin fixed to
false under the clock c * (n + 1) ^ d is polynomial-time in the encoded input.