2026-08-28·by Sijie Wang#idea#math

curry-howard

Curry–Howard — proofs are programs

Parent: logic

The hinge of the whole branch: propositions = types, proofs = programs, proof-normalization = computation. Logic and computation are the same structure seen twice.

The dictionary

logictype theory / programming
proposition Atype A
proof of Aprogram (term) of type A
A → B (implies)function type A → B
A ∧ Bproduct A × B (pair)
A ∨ Bsum A + B (tagged union)
/ unit / empty type
∀x.P(x)dependent function Π(x:A). P x
∃x.P(x)dependent pair Σ(x:A). P x
cut / detour eliminationβ-reduction (evaluation)

A proof that assumes A and derives B is literally a function turning evidence-for-A into evidence-for-B. Checking a proof = type-checking a term.

Why it's deep, not a pun

  • Constructivity: to prove ∃x.P(x) you must build a witness x and a proof of P(x) — i.e. a program producing them. So intuitionistic logic ⟺ typed λ-calculus exactly (classical logic needs control operators — Griffin 1990, call/cc).
  • Normalization = running: cut-elimination (simplifying a proof) is β-reduction (evaluating a program). A normalized proof is a value.
  • History: Curry (combinatory logic, 1930s–58), Howard (1969) "formulae-as-types," de Bruijn (Automath). It's why machine proof is even possible.

Consequence

You can compute with proofs and verify programs as proofs. This is the foundation of proof assistants: dependent type theory gives types rich enough to be any proposition, and Lean 4 checks proofs by type-checking. From computation and proof, one object.

about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →

curry-howard