← Hardness assumptions

P ≠ NP

Proposed by: Stephen Cook (1971), Leonid Levin (1973); anticipated by Gödel’s 1956 letter to von Neumann Category: Complexity-theoretic foundation

Mathematical form

Let P=⋃k≥1DTIME(nk)\mathsf{P} = \bigcup_{k \geq 1} \mathsf{DTIME}(n^k) be the class of languages decidable in deterministic polynomial time, and let

NP={L⊆{0,1}∗:∃ poly-time verifier V, polynomial p,  x∈L  ⟺  ∃w∈{0,1}p(∣x∣),V(x,w)=1}.\mathsf{NP} = \{ L \subseteq \{0,1\}^* : \exists \text{ poly-time verifier } V, \text{ polynomial } p, \; x \in L \iff \exists w \in \{0,1\}^{p(|x|)}, V(x, w) = 1 \}.

Assumption. P≠NP\mathsf{P} \neq \mathsf{NP}; equivalently, no NP-complete language (e.g., SAT) admits a polynomial-time decision algorithm.

Relation to cryptography

Status

Open since 1971; one of the Clay Millennium Problems. Known barriers: relativization (Baker–Gill–Solovay), natural proofs (Razborov–Rudich), algebrization (Aaronson–Wigderson).

Source: assumptions/p-vs-np.md — corrections welcome via pull request.