Documentation

Complexitylib.Models.TuringMachine.Universality.Internal

Generic universal-machine interfaces -- proof internals #

Proofs supporting the public API in Complexitylib.Models.TuringMachine.Universality.

theorem Complexity.TM.simulates_refl_internal {firstTapes : } (machine : TM firstTapes) :
machine.Simulates machine id
theorem Complexity.TM.simulates_comp_internal {firstTapes secondTapes thirdTapes : } {first : TM firstTapes} {second : TM secondTapes} {third : TM thirdTapes} {compileFirst compileSecond : List BoolList Bool} (hFirst : first.Simulates second compileFirst) (hSecond : second.Simulates third compileSecond) :
first.Simulates third (compileFirst compileSecond)
theorem Complexity.TM.additiveProgramOverhead_mono_internal {compile : List BoolList Bool} {first second : } (hbound : first second) (hoverhead : HasAdditiveProgramOverhead compile first) :
theorem Complexity.TM.additiveProgramOverhead_comp_internal {compileFirst compileSecond : List BoolList Bool} {first second : } (hFirst : HasAdditiveProgramOverhead compileFirst first) (hSecond : HasAdditiveProgramOverhead compileSecond second) :
HasAdditiveProgramOverhead (compileFirst compileSecond) (second + first)
theorem Complexity.TM.simulatesInTime_refl_internal {firstTapes : } (machine : TM firstTapes) :
machine.SimulatesInTime machine id fun (x : List Bool) (sourceTime : ) => sourceTime
theorem Complexity.TM.simulatesInTime_mono_internal {firstTapes secondTapes : } {simulator : TM firstTapes} {source : TM secondTapes} {compile : List BoolList Bool} {firstClock secondClock : TimeOverhead} (hclock : ∀ (program : List Bool) (sourceTime : ), firstClock program sourceTime secondClock program sourceTime) (hsim : simulator.SimulatesInTime source compile firstClock) :
simulator.SimulatesInTime source compile secondClock
theorem Complexity.TM.simulatesInTime_comp_internal {firstTapes secondTapes thirdTapes : } {first : TM firstTapes} {second : TM secondTapes} {third : TM thirdTapes} {compileFirst compileSecond : List BoolList Bool} {clockFirst clockSecond : TimeOverhead} (hFirst : first.SimulatesInTime second compileFirst clockFirst) (hSecond : second.SimulatesInTime third compileSecond clockSecond) :
first.SimulatesInTime third (compileFirst compileSecond) fun (program : List Bool) (sourceTime : ) => clockFirst (compileSecond program) (clockSecond program sourceTime)
theorem Complexity.TM.polynomialTimeOverhead_comp_internal {compileInner : List BoolList Bool} {additive : } {clockOuter clockInner : TimeOverhead} (hlength : HasAdditiveProgramOverhead compileInner additive) (hOuter : PolynomialTimeOverhead clockOuter) (hInner : PolynomialTimeOverhead clockInner) :
PolynomialTimeOverhead fun (program : List Bool) (sourceTime : ) => clockOuter (compileInner program) (clockInner program sourceTime)
theorem Complexity.TM.efficientlyUniversalFor_isUniversal_internal {firstTapes : } {simulator : TM firstTapes} {admissible : TimeOverheadProp} (h : simulator.IsEfficientlyUniversalFor admissible) :
simulator.IsUniversal
theorem Complexity.TM.efficientlyUniversalFor_mono_internal {firstTapes : } {simulator : TM firstTapes} {firstPolicy secondPolicy : TimeOverheadProp} (hpolicy : ∀ (clock : TimeOverhead), firstPolicy clocksecondPolicy clock) (h : simulator.IsEfficientlyUniversalFor firstPolicy) :
simulator.IsEfficientlyUniversalFor secondPolicy
theorem Complexity.TM.simulates_isUniversal_internal {firstTapes secondTapes : } {first : TM firstTapes} {second : TM secondTapes} {compile : List BoolList Bool} (hsim : first.Simulates second compile) (huniversal : second.IsUniversal) :