Язык [math]L[/math] называется NP-трудным (NPH), если для любого языка [math]L_{1}[/math], принадлежащего NP, [math]L_{1}[/math] сводится по Карпу к [math]L[/math] ([math]L_{1}\le L[/math]).
Язык [math]L[/math] называется NP-полным (NPC), если он является NP-трудным и принадлежит классу NP.