Documentation

Complexitylib.Circuits.DepthThree.LowerBound.Internal.TapeCopy

Unrestricted depth-three lower bound: tape copy #

Adapted from OpenAI's formalization at revision adc7f1241b42e322a6451854ab7e4b4c146bf78a. Source: https://github.com/openai/math/blob/adc7f1241b42e322a6451854ab7e4b4c146bf78a/lean/OAI/Computability/DepthThree/TapeCopy.lean

Imports, namespaces, module visibility, documentation, and formatting are adapted for complexitylib. The source theorem statements and mathematical proofs are retained.

Control states of the copy routine.

Instances For
    @[instance_reducible]
    Equations
    • One or more equations did not get rendered due to their size.
    def Complexity.DepthThreeLowerBound.TapeCopy.onPair {α : Type uDepth1} (src dst : TapeRegister) (base : TapeRegister → α) (s d : α) :

    Replace the values at two selected registers, giving priority to the first.

    Equations
    Instances For
      @[simp]
      theorem Complexity.DepthThreeLowerBound.TapeCopy.onPair_src {α : Type uDepth2} (src dst : TapeRegister) (base : TapeRegister → α) (s d : α) :
      onPair src dst base s d src = s
      @[simp]
      theorem Complexity.DepthThreeLowerBound.TapeCopy.onPair_dst {α : Type uDepth3} {src dst : TapeRegister} (hne : src ≠ dst) (base : TapeRegister → α) (s d : α) :
      onPair src dst base s d dst = d
      theorem Complexity.DepthThreeLowerBound.TapeCopy.onPair_other {α : Type uDepth4} (src dst : TapeRegister) (base : TapeRegister → α) (s d : α) (r : TapeRegister) (hs : r ≠ src) (hd : r ≠ dst) :
      onPair src dst base s d r = base r

      Write the two selected tape heads and move them together.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Transition function of the copy routine.

        Equations
        Instances For
          theorem Complexity.DepthThreeLowerBound.TapeCopy.step_emit {Q : Type uDepth6} (P : TapeMultiProgram Q) {src dst : TapeRegister} (hne : src ≠ dst) (T : TapeTapes) (S D : Turing.Tape TapeSymbol) (q q' : Q) (s d : TapeSymbol) (m : HeadMove) (h : P q (TapeMultiProgram.heads (onPair src dst T S D)) = emit src dst q' (TapeMultiProgram.heads (onPair src dst T S D)) s d m) :
          theorem Complexity.DepthThreeLowerBound.TapeCopy.runs_copy {src dst : TapeRegister} (hne : src ≠ dst) (T : TapeTapes) (bits : List Bool) :
          RunsIn (code src dst).step (TapeMultiProgram.cfg State.start (onPair src dst T (wordTape bits) (wordTape []))) (TapeMultiProgram.cfg State.done (onPair src dst T (wordTape bits) (wordTape bits))) (2 * bits.length + 4)