Savitch's recursive doubling #
The combinatorial half of Savitch's theorem (Savitch 1970), stated for an arbitrary relation and independent of any logic: reachability in a graph whose vertices are only known up to a classifying map into a finite type.
The setting is a relation R on a type St of presentations, together with a
map cls : St → T into a finite type of classes, such that R only depends on
its endpoints through their classes (DescriptiveComplexity.SavInv). That extra
generality is what the reduction of SUCCINCT-REACH to QSAT needs: a state of a
succinctly described transition system is a predicate on the whole universe, but
the clauses only read it on the state variables, so the honest vertex set is the
(finite) quotient.
Three notions of bounded reachability live here:
DescriptiveComplexity.SavStep: one move – a step ofR, or standing still inside a class;DescriptiveComplexity.SavLe n: at mostnmoves, the linear staging;DescriptiveComplexity.SavPow k: Savitch's staging,ψ_{k+1}(X, Y) = ∃Z, ψ_k(X, Z) ∧ ψ_k(Z, Y), which unfolds into a formula of depthkrather than length2 ^ k.
The two stagings agree, DescriptiveComplexity.savPow_iff_savLe : SavPow k = SavLe (2 ^ k), and the pigeonhole DescriptiveComplexity.savLe_card says that
SavLe saturates at Nat.card T moves – a walk that revisits a class can be
shortened. Together they give the statement a reduction uses,
DescriptiveComplexity.savPow_of_reflTransGen: as soon as 2 ^ k classes are
enough, SavPow k is reachability.
Moves, and the two stagings #
One move of the walk: a step of R, or standing still inside a class. The
reflexive part is cls-equality rather than equality because a class, not a
presentation, is what the walk really visits.
Equations
- DescriptiveComplexity.SavStep cls R X Y = (cls X = cls Y ∨ R X Y)
Instances For
Dependency graph
Reachability in at most n moves: the linear staging.
Equations
- DescriptiveComplexity.SavLe cls R 0 = fun (X Y : St) => cls X = cls Y
- DescriptiveComplexity.SavLe cls R n.succ = fun (X Y : St) => ∃ (Z : St), DescriptiveComplexity.SavLe cls R n X Z ∧ DescriptiveComplexity.SavStep cls R Z Y
Instances For
Dependency graph
Savitch's staging: SavPow k is “reachable through a midpoint, twice at
level k - 1”, which is reachability in at most 2 ^ k moves
(DescriptiveComplexity.savPow_iff_savLe) written with k nested midpoints.
Equations
- DescriptiveComplexity.SavPow cls R 0 = DescriptiveComplexity.SavStep cls R
- DescriptiveComplexity.SavPow cls R n.succ = fun (X Y : St) => ∃ (Z : St), DescriptiveComplexity.SavPow cls R n X Z ∧ DescriptiveComplexity.SavPow cls R n Z Y
Instances For
Dependency graph
The walk only depends on its endpoints through their classes: the hypothesis that makes the classes, rather than the presentations, the vertices.
Equations
- DescriptiveComplexity.SavInv cls R = ∀ (X X' Y Y' : St), cls X = cls X' → cls Y = cls Y' → R X Y → R X' Y'
Instances For
Dependency graph
Class-invariance of the stagings #
Dependency graph
Dependency graph
Dependency graph
The linear staging #
Dependency graph
Dependency graph
Dependency graph
The linear staging composes: walking a + b moves is walking a and
then b.
Dependency graph
The two stagings agree #
Savitch's staging is the linear one at 2 ^ k: k nested midpoints
describe a walk of exponentially many moves.
Dependency graph
Reachability, and the pigeonhole #
Dependency graph
A bounded walk is a genuine walk, up to the class of its endpoint.
Dependency graph
The pigeonhole: a walk saturates after as many moves as there are
classes. The set of classes reached in at most n moves grows with n, and as
soon as it stops growing it stops growing for good, so it is stable by the time
n reaches Nat.card T.
Dependency graph
Savitch's staging computes reachability, as soon as it is deep enough for the number of classes.