Visual walkthrough — NP-completeness — Cook's theorem (SAT is NP-complete), reduction
Step 0 — The words we are allowed to use
Before any symbol appears, here is every ingredient in plain language.
The strategy in one line: freeze the entire run of into a rectangular grid of cells, name every cell with switches, and write down local rules that force the grid to be a legal, accepting run.
Step 1 — Freeze the whole run into a grid (the tableau)
WHAT we did: replaced "a movie of the machine running" with "a single still photo of all frames stacked". WHY: a movie is unbounded and slippery; a fixed finite grid can be described by a fixed finite number of switches. Finiteness is the entire game — SAT formulas are finite objects. And because is a polynomial, that finite grid is only polynomially large. PICTURE: below, time flows downward; each row is the tape at one instant. Column is the left wall; the amber cell marks where the head is standing.

Step 2 — What must a single cell record?
Each cell of the grid is not just a tape letter. It must also say "is the head here, and if so, in which state?"
WHAT: gave each cell a small fixed menu of possible contents. WHY: to encode a configuration we need three facts — the tape letter, the head position, the state. Bundling "head + state" into special contents lets a single grid carry all three. PICTURE: one column of the menu ; a plain cell shows only a letter, a head-cell shows the little "(state, letter)" badge.

Step 3 — Name every cell-content with a switch (the variables)
Now the leap that connects machines to Boolean logic.
Counting the switches (this is where "polynomial" is born): Term by term: rows times columns gives ; is a fixed constant (doesn't grow with input), so it vanishes into big-. Because is a polynomial, the variable count is polynomial in . ✔
WHAT: turned "the grid is filled in like this" into "these switches are ON, those are OFF". WHY: SAT only understands switches. A filled tableau and a truth assignment are now the same information in two languages — this bijection is the heart of the proof. PICTURE: one grid cell exploded into its stack of candidate switches; exactly one glows.

Step 4 — Rule A: every cell holds exactly one thing
A truth assignment could be nonsense — it might turn ON two switches for the same cell ("this cell is both 0 and 1"). We forbid that.
WHAT: pinned each cell down to a single legal content. WHY: without this, "satisfiable" could be won by an incoherent grid, and the equivalence to a real run would break. PICTURE: two switches ON in one cell = a red ✗; exactly one ON = a green ✓.

Step 5 — Rules B & C: correct start, and reach acceptance
WHAT: forced the run to begin correctly and to end in success. WHY: a valid computation must start from the true input (not a convenient fantasy) and must actually accept. Start pins the boundary; accept is the goal. PICTURE: top row locked to ; anywhere a head-cell turns amber "accept", the whole run is crowned.

Step 6 — Rule D: legal moves via the window (the clever core)
The remaining danger: rows might not follow from one another by 's rules — teleporting heads, symbols changing far from the head, illegal state jumps. We must forbid all of that. The genius is that it suffices to check tiny local patches.
The two kinds of legal window, written as switches
Let a window's six cells carry contents named as follows (top row = time , bottom = time ): A specific assignment of contents to is one pattern. We now list which six-tuples are legal, and turn "this window equals this pattern" into a Boolean formula.
WHAT: replaced one impossible-to-check global rule ("this is a valid run") with a per-window OR over an explicit finite list of allowed six-tuples — each tuple being either a copy (head elsewhere) or a rule application (head present). WHY: global legality has no small formula, but each window has only cells and candidate patterns — a constant-size condition we can list explicitly.
PICTURE: identity patch (green copy) vs active transition patch (green rule-move) vs an illegal teleport (red ✗, matches no ).

Step 7 — Assemble, and read the equivalence both directions
WHY this exact conjunction — the two-way equivalence. This is the payoff we must argue explicitly, not just assert:
- () If accepts : there exists an accepting run. Fill the tableau with that run and switch on exactly the matching . Then holds (each real cell has one content), holds (a real run starts from in state ), holds (each real step obeys , so each window matches some ), and holds (an accepting run reaches ). All four ⇒ is satisfiable.
- () If is satisfiable: take any satisfying assignment. ⇒ it describes a well-defined grid (one content per cell). ⇒ row is the true start configuration (one head, state , input ). ⇒ every window is legal, so row follows from row by an actual transition of — inductively the whole grid is a legal run with one head per row. ⇒ some row contains , so the run accepts. Hence does accept .
WHY the whole thing is a legal reduction — the size/time bound. Summing the pieces: are each (Steps 3–6), so , and it is built by a simple deterministic scan over the grid in time. A polynomial-size, polynomial-time-computable map is exactly what a Polynomial-time reduction requires.
Putting it together: Since this works for every NP and is built in poly time, every NP problem reduces to SAT: SAT is NP-hard. With SAT NP (just plug in the assignment and evaluate), SAT is NP-complete, the anchor for Karp's 21 NP-complete problems, Independent Set, Vertex Cover, Clique, and the whole P vs NP problem landscape.
Degenerate & edge cases (never leave the reader stranded)
The one-picture summary

The single figure above compresses the whole journey: an arbitrary NP problem's poly-time NTM + input → a stacked tableau → renamed as switches → clamped by four rule-groups → a Boolean formula whose satisfiability is acceptance.
Recall Feynman retelling — say it back in plain words
Imagine any fast-checkable problem is run by a guessing machine that always finishes within a polynomial number of steps. I want to catch that machine's whole life story in one snapshot, so I lay every moment of its run as a row in a big square table — time going down, tape going across; the tape has a hard wall on the left at cell 0 (no negative cells), and because the machine is polynomial-time, the table is only polynomially big. In each little box I write what's there: a symbol, or "the head is here in such-and-such mood." Now I give every possible "this box says X" its own on/off switch. A filled-in table and a pattern of switches are the same thing said two ways. Then I write four kinds of rules as switch-logic: (A) no box says two contradictory things (each cell holds exactly one content); (B) the first row is the honest starting picture — the input string sitting on the tape, the head parked on cell 0 in the start state , which also plants the single head we'll carry down; (C) somewhere in the table the head shows up in the "accept" state , so the run actually says yes; and (D) — the clever bit — every tiny 2-by-3 patch of neighbouring boxes must match one entry in a short fixed list of legal patches: either the bottom just copies the top (no head present), or, if a head is present, the bottom is exactly what that transition rule produces. Each patch check is a small OR over that constant list, and each list entry is just six switches AND-ed; there are about (table area) patches, so the whole rule stays polynomial. Because one step only touches nearby boxes, these little local checks are enough to make the entire run legal, and they keep "exactly one head per row" true all the way down. AND all four rules into one giant formula whose total size is polynomial. Flipping the switches to light it up is exactly the same as the machine finding a way to say yes — and I argued it both ways: a real accepting run gives a satisfying assignment, and any satisfying assignment decodes back into a real accepting run. So if you had a magic fast SAT-solver, you'd solve every checkable problem in the world. That's why SAT is the master key.
Recall Self-test
Why is a window enough to guarantee the whole tableau is a legal run? ::: Because one step of the head only affects the cell under it and its two neighbours, so a cell at time depends only on 3 cells at time ; checking every such patch matches a legal pattern forces global legality and preserves one-head-per-row. How many Boolean variables are used, and why does that matter? ::: (rows columns constant menu ); since is a polynomial this count is polynomial ⇒ the reduction is polynomial-time, which is what NP-hardness requires. How large is and why? ::: : about windows, each a constant number of legal patterns, each pattern a -literal conjunction; constants vanish into big-. How do we forbid the head moving left off cell 0? ::: We use a one-sided tape with a left wall at cell 0, so no transition rule (and hence no legal window pattern ) represents such a move — no negative column is ever needed. If is unsatisfiable, what does it mean for ? ::: No legal accepting tableau exists, so never accepts , i.e. .