This document summarizes a lecture on NP-completeness. It discusses techniques for proving problems are NP-complete like restriction, local replacement, and component design. It provides advice for proving problems hard like making the source problem simple, target problem hard, selecting the right source problem, and amplifying penalties. It then offers to demonstrate proving a problem hard by having a volunteer select a random problem from a book to prove hard.