Reachability as a bounded fixpoint #
⚠️ Unreviewed by Bolton
Breadth-first search closes a set of configurations under the successor relation. reachSet
is that closure after a fixed number of rounds, and the theorem below says a polynomial number
of rounds already suffices: the rounds strictly grow until they stabilize, and they cannot grow
past the number of configurations available.
This is the specification a polynomial-time search has to implement — the counting it needs comes
from Complexitylib.Classes.Containments.Internal.LogSpaceBound.
reachSet itself is defined in Complexitylib.Classes.Containments.Defs.
Main results #
NTM.reachSet_mono,NTM.reachSet_stabilizes— the rounds grow and then stopNTM.reachSet_finite— each round is a finite setNTM.exists_stabilizing_round— they stop within the number of configuration codesNTM.reachesCfg_iff_mem_reachSet— enough rounds compute exactly reachabilityNTM.reachesCfg_iff_mem_reachSet— with enough rounds the fixpoint is exactly reachability
Reachability in t steps lands in round t.
The rounds stabilize within the configuration count #
The rounds stabilize by the number of codes. As long as the rounds keep growing they
consume a fresh code each time, and there are only Fintype.card α of those.
With enough rounds the fixpoint is exactly reachability. The number of rounds needed is the number of codes, so a polynomial code count makes this a polynomial-round search.
Running extra rounds is harmless. An implementation computes a round count it can evaluate rather than the exact number of codes; any count that reaches the bound is correct.