Nor has there been agreement about the right road to truth.
The notions of reducibility and completeness play an important role in the classification of the complexity of problems from diverse areas of applications. In this chapter, we formally define two types of reducibilities: the polynomial-time many-one reducibility and the polynomial-time Turing reducibility. Then we prove several basic NP-complete problems and discuss the complexity of some combinatorial optimization problems.
The complexity class NP has a nice characterization in terms of class P and polynomial length-bounded existential quantifiers.