NP-Completeness

Definition. A language BB is NP-hard if A≤PBA \leq_{\mathsf{P}} B for every A∈NPA \in \mathsf{NP}, and NP-complete if in addition B∈NPB \in \mathsf{NP}.

An NP-complete problem is a hardest problem in NP\mathsf{NP}: if any one of them is in P\mathsf{P} then P=NP\mathsf{P} = \mathsf{NP}, so they stand or fall together. SATSAT was the first, by the Cook-Levin theorem, which reduces every language in NP\mathsf{NP} to it by encoding a machine's computation as a table and asserting its validity with a formula. Every later proof reuses that: to show CC is NP-complete, show C∈NPC \in \mathsf{NP} with a certificate and reduce one known NP-complete problem to it, as in Lecture 11. NP-hardness alone does not imply membership in NP\mathsf{NP}, and an NP-completeness proof shows no algorithm is impossible, only that a fast one would settle P versus NP.

Updated
Copyright © 2026 Jared Coleman. All rights reserved.