Unrestricted depth-three lower bound: tape unary compare scan #
Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a.
Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Computability/DepthThree/TapeUnaryCompareScan.lean
Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.
def
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.instDecidableEqState.decEq
(x✝ x✝¹ : State)
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[instance_reducible]
Equations
- One or more equations did not get rendered due to their size.
@[instance_reducible]
Compare two natural numbers, returning their ordering.
Equations
Instances For
A unary tape with a specified number of bits before and after the head.
Equations
Instances For
@[simp]
@[simp]
def
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.pairTapes
(r s : TapeRegister)
(T : TapeTapes)
(R S : Turing.Tape TapeSymbol)
:
Replace the tapes at two selected registers.
Equations
- Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.pairTapes r s T R S = Function.update (Function.update T r R) s S
Instances For
@[simp]
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.pairTapes_r
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(R S : Turing.Tape TapeSymbol)
:
@[simp]
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.pairTapes_s
(r s : TapeRegister)
(T : TapeTapes)
(R S : Turing.Tape TapeSymbol)
:
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.pairTapes_other
(r s : TapeRegister)
(T : TapeTapes)
(R S : Turing.Tape TapeSymbol)
(j : TapeRegister)
(hjr : j ≠ r)
(hjs : j ≠ s)
:
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.update_pairTapes_r
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(R S R' : Turing.Tape TapeSymbol)
:
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.update_pairTapes_s
(r s : TapeRegister)
(T : TapeTapes)
(R S S' : Turing.Tape TapeSymbol)
:
def
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.scanTapes
(r s : TapeRegister)
(T : TapeTapes)
(k m n : ℕ)
:
The pair of unary tapes during their synchronized comparison scan.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.scanTapes_other
(r s : TapeRegister)
(T : TapeTapes)
(k m n : ℕ)
(j : TapeRegister)
(hjr : j ≠ r)
(hjs : j ≠ s)
:
Transition function of the unary compare scan routine.
Equations
- One or more equations did not get rendered due to their size.
- Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.code r s (Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.State.done result) x✝ = none
Instances For
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.step_scan_zero_zero
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(k : ℕ)
:
(code r s).step (TapeMultiProgram.cfg State.scan (scanTapes r s T k 0 0)) = some (TapeMultiProgram.cfg (State.done Ordering.eq) (scanTapes r s T k 0 0))
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.step_scan_zero_succ
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(k n : ℕ)
:
(code r s).step (TapeMultiProgram.cfg State.scan (scanTapes r s T k 0 (n + 1))) = some (TapeMultiProgram.cfg (State.done Ordering.lt) (scanTapes r s T k 0 (n + 1)))
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.step_scan_succ_zero
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(k m : ℕ)
:
(code r s).step (TapeMultiProgram.cfg State.scan (scanTapes r s T k (m + 1) 0)) = some (TapeMultiProgram.cfg (State.done Ordering.gt) (scanTapes r s T k (m + 1) 0))
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.step_scan_succ_succ
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(k m n : ℕ)
:
(code r s).step (TapeMultiProgram.cfg State.scan (scanTapes r s T k (m + 1) (n + 1))) = some (TapeMultiProgram.cfg State.advanceS (pairTapes r s T (unaryCursor (k + 1) m) (unaryCursor k (n + 1))))
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.step_advanceS
(r s : TapeRegister)
(T : TapeTapes)
(R S : Turing.Tape TapeSymbol)
:
(code r s).step (TapeMultiProgram.cfg State.advanceS (pairTapes r s T R S)) = some (TapeMultiProgram.cfg State.scan (pairTapes r s T R (Turing.Tape.move Turing.Dir.right S)))
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.runs_scan
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(k m n : ℕ)
:
RunsIn (code r s).step (TapeMultiProgram.cfg State.scan (scanTapes r s T k m n))
(TapeMultiProgram.cfg (State.done (result m n)) (scanTapes r s T (k + min m n) (m - min m n) (n - min m n)))
(2 * min m n + 1)
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.runs_entry
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(m n : ℕ)
(hR : T r = wordTape (List.replicate m true))
(hS : T s = wordTape (List.replicate n true))
:
RunsIn (code r s).step (TapeMultiProgram.cfg State.beginR T) (TapeMultiProgram.cfg State.scan (scanTapes r s T 0 m n)) 2
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.runs_compare
{r s : TapeRegister}
(hrs : r ≠ s)
(T : TapeTapes)
(m n : ℕ)
(hR : T r = wordTape (List.replicate m true))
(hS : T s = wordTape (List.replicate n true))
:
RunsIn (code r s).step (TapeMultiProgram.cfg State.beginR T)
(TapeMultiProgram.cfg (State.done (result m n)) (scanTapes r s T (min m n) (m - min m n) (n - min m n)))
(2 * min m n + 3)
@[simp]
theorem
Complexity.DepthThreeLowerBound.TapeUnaryCompareScan.step_done
(r s : TapeRegister)
(T : TapeTapes)
(o : Ordering)
: