This paper presents a proof of the conjecture that the complexity classes P and NP are not equal. The proof involves showing that a particular problem in NP cannot be solved in polynomial time. The problem in question is the satisfiability problem for logical expressions in conjunctive normal form (CSAT). The strategy of the proof is to construct what amounts to the most efficient algorithm for CSAT and then show that this algorithm does not run in polynomial time. The algorithm is constructed by constructing, from first principles, a set of constraints that any efficient algorithm for CSAT must satisfy. The constraints are made so restrictive that any two algorithms that satisfy all of them are essentially interchangeable