A k-clique in G ⇔ a (n−k)-vertex-cover in G̅.
VERTEX-COVER = {⟨G, k⟩ : G has a vertex cover of size ≤ k}, where a vertex cover is a set S of vertices that touches every edge — for each edge (u, v), at least one of u, v is in S.
Let G be a graph on n vertices, and let G̅ be its complement (same vertices, edges flipped: uv is an edge of G̅ iff uv is not an edge of G). Then S is a clique of size k in G if and only if V \ S is a vertex cover of size n − k in G̅.
The reduction: f(⟨G, k⟩) = ⟨G̅, n − k⟩. Computing G̅ takes O(n²) time. Polynomial, so this is a many-one reduction. Since CLIQUE is NP-complete and CLIQUE ≤p VERTEX-COVER, VERTEX-COVER inherits NP-hardness. VERTEX-COVER ∈ NP (the cover is a polynomial-size witness), so it is NP-complete.
A clique S in G means every pair in S is connected in G — equivalently, no pair in S is connected in G̅. So no edge of G̅ has both endpoints in S, which means every edge of G̅ has at least one endpoint outside S, which means V \ S is a vertex cover of G̅. The argument is symmetric in both directions.
Sipser: Theorem 7.44 (CLIQUE ≤p VERTEX-COVER). Lecture notes: Module 5 slide 5. Companion problems: P27 (3SAT → CLIQUE), P31 (3-COLOR — another graph-theoretic NP-complete).