Savitch's machine #
⚠️ Unreviewed by Bolton
Everything is in place: Complexity.savG is the polynomial-time function
Complexity.SpaceIter.mem_PSPACE_of_iterate wants, Complexity.Sav.run_top says
its orbit reaches an answer, Complexity.Sav.runBound_le bounds how long that
takes, and Complexity.Sav.StkSize bounds how much room it needs. This file puts
them together.
Main results #
Complexity.savitch_mem_PSPACE— a language whose membership is reachability within2 ^ polysteps of a space-bounded machine is inPSPACE
The run at a fixed input #
The abstract step Complexity.savG performs, at the ruler it builds.
Equations
- Complexity.savSemAt tm qp x = Complexity.savSem tm (Complexity.savR qp x)
Instances For
The answer the recursion returns at x.
Equations
- One or more equations did not get rendered due to their size.
Instances For
What a run of T steps at x achieves: the flag stays down, then goes up,
then becomes the answer.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The number of steps Savitch's recursion takes at x.
Equations
- Complexity.savT tm qp lp x = Classical.choose ⋯
Instances For
The pieces of the space-bounded iteration #
The answer the recursion returns is membership.
The whole containment #
Savitch's machine. A language whose membership is reachability within
2 ^ lp(|x|) steps of a machine bounded by S is in PSPACE.
The containment #
The polynomial bounding the width of the window Savitch's machine writes on.
Equations
- Complexity.savWidthPoly cardQ p = Polynomial.X + p + Polynomial.C 1 + Polynomial.C cardQ
Instances For
The polynomial bounding the length of the state Savitch's machine carries.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The polynomial bounding the logarithm of the number of steps it takes.
Equations
- Complexity.savCountPoly k qp lp = (Polynomial.C (Complexity.codeBlocks k) * (2 * qp + 2) + 3) * lp + 2
Instances For
NPSPACE ⊆ PSPACE (Savitch's theorem).