The trace C1 # C2 # … # Cℓ — the bridge from TMs to humbler models.
CLO-2R1·30 ptsL7
🔊 Listen
1 · What a computation history is
A computation history of M on w is the full sequence of configurations the TM passes through, written as a single string with separators:
C1 # C2 # C3 # … # Cℓ
Each configuration Ci records the entire state of the computation at one moment: the tape contents, the head position, and the current control state. Convention (Sipser §5.1): write the state symbol inside the tape, immediately to the left of the head cell. So if M is in state q3 with head at position 4 on tape "01100", we write C = 0110 q3 0. State + head + tape, all encoded in one string of constant local width.
Local checkability — the only property that matters
A string σ is "an accepting computation history of M on w" iff it satisfies three local conditions:
Start: C1 = q0w (initial state, input on tape).
Step: for every adjacent pair (Ci, Ci+1), the second follows from the first by exactly one application of δ.
Accept: Cℓ contains the accept state qaccept.
All three checks are local: each can be verified by a small sliding window over σ, without remembering the whole string at once.
Why this matters: humble machine models (LBAs, CFGs, even some restricted NFAs) can perform local checks. They cannot simulate a full TM, but they can verify that someone's claimed computation history is genuine. This is the engine behind ELBA undecidability (Problem 10) and ALLCFG undecidability (Problem 11).
🔊 Listen
2 · What's local? The 2×3 window
This is the "local checkability" claim made concrete. A change of configuration affects at most three cells (one head cell plus its two neighbours, since the head can move left or right). Verifying a step means reading those three cells in Ci, checking that the corresponding three cells in Ci+1 match what δ prescribes. No global memory needed.
🔊 Listen
3 · Animated demo · auto-plays · loops
Render a TM's full execution as a history Auto-plays
🔊 Listen
4 · Pitfalls students stumble on
The state inside the tape is part of the string. Encoding Ci = 0110q30 means the q3 symbol literally appears in σ between the 4th and 5th tape symbols. The alphabet of σ is Γ ∪ Q (tape symbols + state symbols).
"Computation history" implies halting. If M loops on w, there's no accepting computation history — the string σ doesn't exist. Reductions exploit exactly this: M accepts w iff some valid σ exists.
Local checks ignore time order direction. The 2×3 window check works left-to-right or right-to-left — the constraint is symmetric. That's why CFGs (which can derive in any order) and LBAs (which can scan in any direction) can verify them.
Don't confuse "verify" with "produce." An LBA or CFG can verify someone hands you a candidate history. It cannot generate all histories without knowing how to simulate M — but it doesn't need to, because the existence of any accepting history is enough.
🔊 Listen
5 · Q&A defence notes
Q1. Why insert the state inside the tape?
A configuration must capture tape contents, head position, and state in one string. Writing the state symbol immediately before the head cell encodes all three compactly and lets the 2×3 window detect head movement directly — the state symbol shifts left or right between Ci and Ci+1.
Q2. Why is local checkability so powerful?
It bridges Turing power and humbler models. LBAs / CFGs can verify a 2×3 window but cannot count globally. Local checking is in their power; full TM simulation isn't. Computation histories let undecidable TM questions hide inside emptiness or universality questions about LBAs and CFGs.
Q3. Why doesn't this trick make ATM decidable?
The verification direction goes outward, not inward. We don't decide ATM by checking histories — we reduce from ATM to LBA/CFG questions. The undecidability of ATM flows into the LBA/CFG questions, making them undecidable too.
Q4. What if M loops on w?
No finite accepting computation history exists. The reduction's target language is empty in that case (no history to accept), which is exactly the information we want — "M loops or rejects on w" corresponds to "the LBA accepts no history."
Q5. Could we use a different separator instead of #?
Yes — any symbol not in Γ ∪ Q works. # is convention because it's visually clean. The choice doesn't affect the construction.
🔊 Listen
6 · Where to read more
Sipser: §5.1 introduces computation histories formally; Theorem 5.10 (ELBA) and Theorem 5.13 (ALLCFG) apply them. Lecture notes: Module 3 slides 1–4 use the same picture. Companion problems: P10 (ELBA) and P11 (ALLCFG) are direct applications of this technique.