Documentation

Complexity.Computability.Machines.Turing.MultiTape.Complexity.LogSpace.InductiveCounting.Graph

Feeding the compact native graph to inductive counting #

The local configuration edge test already rejects vertices beyond the ambient bound of its radix. Consequently restricting the graph to this bound changes no edge. A radix is closed on an input when no vertex reachable in its graph overflows (Turing.InductiveCounting.Closed): then every reachable view of the source fits the radix, and the counting controller's safety property for the accepting vertices is exactly nonacceptance by the source (Turing.InductiveCounting.safe_iff_not_accepts). No space bound of the source is used for this; a space bound only shows that large radices are closed (Turing.InductiveCounting.closed_of_runsInSpace).

Main definitions #

Main results #

References #

noncomputable def Turing.InductiveCounting.graphEdge {k : ℕ} {State : Type} [Fintype State] (ntm : MultiTapeNTM k Bool State) (B : ℕ) (input : List Bool) (u v : ℕ) :

The Boolean edge test obtained by supplying the one actual input symbol requested by the compact graph. The operational query machine supplies this symbol without storing input.

Instances For
    noncomputable def Turing.InductiveCounting.graphOverflow {k : ℕ} {State : Type} [Fintype State] (ntm : MultiTapeNTM k Bool State) (B : ℕ) (input : List Bool) (u : ℕ) :

    The overflow test on the actual input.

    Instances For
      noncomputable def Turing.InductiveCounting.graphAccepting (k : ℕ) (State : Type) [Fintype State] (B : ℕ) (input : List Bool) (u : ℕ) :

      The accepting halted vertices; no input symbol is needed.

      Instances For

        Both endpoints of every accepted local edge are below the ambient bound.

        The controller's explicit vertex guards remove no compact configuration edge.

        The first radix tried: above every input position and every finite tag.

        Instances For
          theorem Turing.InductiveCounting.le_startRadix {State : Type} [Fintype State] (n : ℕ) :
          n + 2 ≤ startRadix State n

          The initial view fits every radix above the finite tags.

          The start vertex lies below the ambient bound of every radix above the finite tags.

          def Turing.InductiveCounting.Closed {k : ℕ} {State : Type} [Fintype State] (ntm : MultiTapeNTM k Bool State) (B : ℕ) (input : List Bool) :

          A radix is closed on an input when no vertex reachable in its graph overflows.

          Instances For
            theorem Turing.InductiveCounting.closed_iff_fits {k : ℕ} {State : Type} [Fintype State] {ntm : MultiTapeNTM k Bool State} {B : ℕ} {input : List Bool} (hB : Fintype.card (Option State) + 1 < B) :

            A closed radix represents every reachable view, and conversely.

            theorem Turing.InductiveCounting.safe_iff_not_accepts {k : ℕ} {State : Type} [Fintype State] {ntm : MultiTapeNTM k Bool State} {B : ℕ} {input : List Bool} (hB : Fintype.card (Option State) + 1 < B) (hc : Closed ntm B input) :

            On a closed radix, the controller's safety property for the accepting vertices is exactly the absence of an accepting native computation path.

            theorem Turing.InductiveCounting.Closed.mono {k : ℕ} {State : Type} [Fintype State] {ntm : MultiTapeNTM k Bool State} {B : ℕ} {input : List Bool} {B' : ℕ} (hB : Fintype.card (Option State) + 1 < B) (hBB : B ≤ B') (hc : Closed ntm B input) :
            Closed ntm B' input

            A larger radix of a closed one is closed.

            theorem Turing.InductiveCounting.closed_of_runsInSpace {k : ℕ} {State : Type} [Fintype State] {ntm : MultiTapeNTM k Bool State} {B : ℕ} {input : List Bool} {S : ℕ} (hs : ntm.RunsInSpace input S) (hn : input.length + 2 ≤ B) (hB : Fintype.card (Option State) + 3 < B) (hstack : 3 ^ (4 * S + 1) ≤ B) :
            Closed ntm B input

            A space bound closes large radices: those above the input positions, the finite tags and the stack codes of the visited cells.