I was wondering whether someone could help me resolve an issue I have understanding the proof given for Savitch’s theorem in the Sipser text (3rd edition). The question I have is more or less identical to the first question given in a previous post (The crux of Savitch's Theorem); which has remained unanswered – hence I’ll re-state the question and elaborate on the details more in this post.
On page 335, the function ‘CANYIELD’ is described:
CANYIELD = “On input c1, c2, and t:
- If t = 1, then test directly whether c1 = c2 or whether c1 yields c2 in one step according to the rules of N. Accept if either test succeeds; reject if both fail.
- If t > 1, then for each configuration cm of N using space f(n):
-
Run CANYIELD(c1, cm, t/2 ).
-
Run CANYIELD(cm, c2, t/2 ).
-
If steps 3 and 4 both accept, then accept.
- If haven’t yet accepted, reject.”
My question concerns step 2 of this procedure: namely how exactly does it select cm of N? It says ‘for each configuration of N’ – but as far as I can tell no specific method is described for how M can implement this [which is important, since we need to be able to verify that this selection can be done in O(f2(n))]. It is not obvious to me how you would be able to know what all of N’s legal configurations are for a given input without running it and storing the computation tree in memory – which obviously we cannot do because it could be exponential in the size of the input. Any help on this would be greatly appreciated.