Visual walkthrough — Church-Turing thesis
Step 1 — What is a "function" we want to compute?
WHAT: We picture computation as a box with an input slot and an output slot.
WHY: Before asking "which functions can a machine compute?", we need a clear mental image of what a function even is. Everything later is just building fancier boxes out of simpler boxes.
PICTURE: In the figure, the amber arrow is the input number going in; the cyan arrow is the output coming out. The dashed box is the function itself — its internal rule.

Here is the input (what you feed it) and is the output (what it returns). The set is just the counting numbers — our inputs and outputs live here.
Step 2 — The three starter boxes (base functions)
WHAT: We hand ourselves three trivial boxes for free.
WHY: Every construction has to start somewhere. Instead of assuming a whole computer, we start with the least controversial operations imaginable — erase to zero, count up by one, and pick one item out of a list. If a skeptic won't grant these, nothing is computable to them.
PICTURE: Reading the figure left to right — flattens any input to (all arrows collapse to one point); shifts you one step up the number line (amber hop); reaches into a bag of three numbers and pulls out the second.

Term-by-term on :
- = how many numbers you gave it (the size of the list),
- = which one you want back (the position, ),
- = the number sitting at that position — the whole output.
Step 3 — Gluing box (Composition)
WHAT: We connect boxes by pipes — the outputs of become the inputs of .
WHY this tool and not another: The most basic way to build a bigger procedure is "do these things, then do that thing with the results." That is exactly function composition. Without it we could never combine our three starters into anything interesting. It is finite (finitely many boxes) and always halts if each piece halts.
PICTURE: (the arrow with the little vector-hat, meaning "a whole list of inputs at once") fans out to every box. Each produces one cyan wire. All wires plug into , which emits the single final output.

Term-by-term:
- = the shared input list, sent to all the inner boxes,
- = the output of the -th inner box (an intermediate number),
- = the outer box that combines those intermediates into the final answer .
Step 4 — The for-loop box (Primitive recursion)
WHAT: We define a box that climbs a ladder: rung is set by ; each higher rung is built from the rung just below it using .
WHY this tool: Composition alone can't repeat an action a variable number of times. Real algorithms loop. Primitive recursion is the bounded for loop: "starting from , keep applying until you reach the target ." Because you always know the finish line in advance, this loop is guaranteed to halt.
PICTURE: Climb the amber staircase. The bottom step is . Each next step's height is decided by , which is allowed to look at three things: the original input , the step number , and the height of the step below, (drawn as the dashed feedback arrow curling down from the previous rung).

Term-by-term on the step case :
- = the fixed extra inputs, unchanged as we climb,
- = which rung we are standing on,
- = the value we already computed one rung down — this is the "recursion",
- = the recipe that turns "the rung below" into "this rung".
Step 5 — The while-loop box (Minimization )
WHAT: We add a searcher. It tries , then , then , … and stops the first moment equals . That winning is the output.
WHY this tool and not the for loop: The for loop of Step 4 always knew when to stop. But many real problems are "search until you find one" with no known upper bound on how far you must look. That is the unbounded while loop. Its power and its danger: if no ever makes , the search runs forever — the box produces nothing. This is where non-halting programs enter our clean picture.
PICTURE: Walk right along the number line testing each . Green ✓ marks where (keep going); the amber ✗-to-✓ flag marks the first where hits — search halts there. The dashed rail running off to the right with no flag is the non-halting case.

Term-by-term on :
- = "the least such that …" (the search operator),
- = a test function; when it reads we've found our answer,
- output = that first successful ; if none exists, output is undefined (the machine loops).
Step 6 — The class closes, and CTT is the last brick
WHAT: We collect everything reachable from the three starters using the three glue rules. Nothing more is added.
WHY: This gives a class defined with zero mention of Turing machines — pure function-building. It is a solid, formal object we can prove theorems about. Then two facts land:
- Theorem (provable): this class the Turing-computable functions the $\lambda$-definable functions register-machine functions. Different starting intuitions, same destination.
- Thesis (not provable): this class also equals "everything intuitively computable" — the Church–Turing thesis itself.
PICTURE: Three independent doorways (-recursion, Turing machines, -calculus) all open into the same room. The dashed amber balloon labelled "intuitively computable" is claimed — by CTT — to be that same room, but its boundary is dashed because that last equality is a belief backed by evidence, not a proof.

Step 7 — The edge case that proves the point: Halting
WHAT: We test our whole picture on a task outside the room: the Halting problem — "given a program, will it eventually stop?"
WHY this is the crucial edge case: In Step 5 we saw -search can run forever. Deciding in advance whether such a search halts is provably impossible for any Turing machine. Feeding that through CTT turns a statement about one model ("no TM") into a statement about all possible machines ("no algorithm, ever"). That universality is CTT's real payoff — see Decidability and Recursive Languages.
PICTURE: Inside the computable room sits "is prime?" (green — a bounded search, always halts). Outside the dashed wall floats "does program halt?" (amber — no box, of any kind, can be built). The wall is exactly the reach of the three glue rules.

Recall Check yourself
Does a faster machine (say a quantum computer) move the amber "halting" task inside the room? Answer ::: No. Speed changes how fast you cross the room (Computational Complexity, P vs NP), never which room you can reach. The Halting problem stays outside for every machine — that's what CTT guarantees.
The one-picture summary

The whole walkthrough on one blueprint: the three starter boxes at the bottom feed upward through composition, primitive recursion, and minimization ; that stack fills the "computable functions" room; three independent doorways (TM, -calculus, -recursion) all open into it; and the dashed amber balloon "everything intuitively computable" — claimed equal by CTT — wraps the same room, with the Halting problem stranded permanently outside.
Recall Feynman: the walkthrough in plain words
We started with a box: put a number in, get a number out. We were handed three baby boxes — one that always spits zero, one that adds one, one that picks an item out of a list. Then we got three kinds of glue: pipe boxes together (composition), stack a box on a ladder and climb a fixed number of rungs (the for loop), and set a box searching up the number line until it hits a bullseye, however long that takes (the while loop). That last searcher is special: it might search forever, which is exactly why our little world now contains programs that never stop — just like real code. Collect everything you can build this way and you get "the computable functions." The amazing part: Turing's tape-machine, Church's function-calculus, and this box-building game all reach the identical set of functions. The Church–Turing thesis takes one more brave step — it says this set is also everything a human, robot, or quantum gadget could ever compute, slow or fast. And because of that, when we prove no box can decide whether a program halts, we've proven nothing anywhere can. One tiny toolbox; one universal notion of "algorithm."
Flashcards
The three base functions of the computable class
Composition, in one line
Primitive recursion = which loop?
for loop — climb from to ; always halts.Minimization = which loop?
while search — try until ; may never halt.