Universal input coding and polynomial-time simulation #
The universal function Turing.MultiTapeTM.Universal.universal runs a described machine on an
input for a given number of steps. Its time and space are polynomial in the length of the
description, of the input and of the number of steps written in unary
(Turing.MultiTapeTM.Universal.universal_bounds_unary), so it is tidily computable in polynomial
time when the number of steps is written in unary
(Turing.MultiTapeTM.Universal.computableTidilyInPolyTime_universal). Written in binary, the
number of steps would be exponential in its length.
The input-coding API translates bits to unary symbols (false ↦ 0, true ↦ 1) in linear time
and output size. It also certifies polynomial-time decoding of descriptions and coding of a
single bit, independently of hierarchy theorems and Ladner's language.
Main definitions #
Turing.MultiTapeTM.Universal.encTrueDoubled: a bit-list encoding doubling everytrue.Turing.MultiTapeTM.Universal.eInUnary: the encoding of universal inputs with the number of steps in unary.Turing.MultiTapeTM.Universal.trueDoubleT,Turing.MultiTapeTM.Universal.symbolsT: transducers implementing the conversion from bit words to framed unary symbols.
Main results #
Turing.MultiTapeTM.Universal.computableTidilyInDegree_map_eBit: input symbols in linear time and output size.Turing.MultiTapeTM.Universal.computableInO_map_eBit: its plain linear certificate.Turing.MultiTapeTM.Universal.computableTidilyInPolyTime_map_eBit,Turing.MultiTapeTM.Universal.computableTidilyInPolyTime_eBit,Turing.MultiTapeTM.Universal.computableInPolyTime_decodeDesc,Turing.MultiTapeTM.Universal.computableInPolyTime_map_eBit,Turing.MultiTapeTM.Universal.computableInPolyTime_eBit,Turing.MultiTapeTM.Universal.computableInPolyTime_map_ne_zero: polynomial-time description decoding, bit coding, and output-symbol decoding.Turing.MultiTapeTM.Universal.universal_bounds_unary: the time and space of the universal function, polynomially in the length of its input with the number of steps in unary.Turing.MultiTapeTM.Universal.computableTidilyInPolyTime_universal,Turing.MultiTapeTM.Universal.computableInPolyTime_universal: the universal function, with its number of steps in unary, is polynomial-time.
References #
The symbols of the input #
The code of a bit list with every true doubled: false ↦ [false], true ↦ [true, true].
Instances For
Doubles every true.
Instances For
Reads a doubled word as the framed unary symbols 0 for false and 1 for true.
Instances For
The input as symbols, in linear time and space.
The input of a machine as symbols is linear.
The coding of bits as symbols is a finite computation.
Simulation with a unary clock #
The encoding of inputs of the universal function with the number of steps in unary: the
framed description, then the framed list of unary input symbols, then the step count in unary.
It differs from eIn only in its last component, which eIn writes in binary.
Instances For
The time and space of the universal function, polynomially in the length of its input with the number of steps in unary.
The universal function with a unary clock is polynomial-time: written in unary, the number of steps counts towards the length of the input.
Plain ComputableInPolyTime wrappers for the universal simulator #
Plain polynomial-time certificate for decodeDesc.
Plain linear certificate for coding a bit string as unary symbol numbers.
Plain polynomial-time certificate for coding a bit string as unary symbol numbers.
Plain polynomial-time certificate for coding a single bit as a unary symbol number.
Plain polynomial-time certificate for the universal simulator with a unary step budget.