The advent of Probabilistically Checkable Proofs (PCP) established the surprising result that the validity of a proof can be checked with good accuracy by reading only a very small number of randomly selected locations of the proof. In particular, if one is willing to tolerate a small probability of error, then one need not even read the entire proof in order to check its validity! The construction of efficient probabilistically checkable proofs has been a subject of active research in complexity theory in the past few years. The celebrated PCP theorem [AS92, ALMSS92] shows that it is possible to encode membership in any NP language into polynomially long proofs in such a manner that a probabilistic polynomial-time verifier can read only a constant number of locations in the proof and still reject any adversarially chosen proof of a false claim of membership with 50% probability. The probability of accepting a ``false proof'' is called the error probability of the PCP system.

The PCP theorem in addition to being an amazing statement about proof checking itself, also has applications in proving hardness of approximation results for a whole genre of optimization problems. The appearance of the PCP theorem spurred a lot of research devoted to finding quantitative strengthenings of it, with improved trade-offs between the different parameters arising in the proof-checking procedure. A sequence of surprising developments along these directions recently culminated in the striking results of [Hastad-97] showing that every language in NP has a PCP verifier querying only 3 bits of the proof and having error probability arbitrarily close to 1/2. This characterization of NP is tight as it is known that no verifier querying only 3 bits can achieve an error strictly smaller than 1/2, unless P=NP.

Hastad's construction of the 3-query PCP however has two-sided error in that there is a small but non-zero probability that even a correct proof is rejected, and this fact is used in a very critical manner in his construction. It seems somewhat more natural to require that the verifier only make one-sided error, so that ``correct'' proofs are always accepted. There is an aesthetically pleasing element to PCP proof systems with one-sided error: Every rejected proof has a short counterexample and the proof system explicitly exhibits a flaw in any proof it rejects; for example in the case of 3 query verifiers, the flaw is in the 3 bits queried.

We give a tight PCP construction for NP that makes only 3 queries to the proof, has error probability arbitrarily close to 1/2, and always accepts ``correct'' proofs. It is known that such a PCP cannot exist if the 3 queries are made non-adaptively all at once; so one important aspect of our construction is that the 3 queries are made adaptively i.e the next query location is chosen depending upon the value of the previously queried bits. This also establishes for the first time the previously unsuspected result that making queries adaptively is more powerful than making them all at once.

We also extend our PCP constructions for a slightly higher number of queries and in many cases construct proof systems with one-sided error achieving the same error probability as the previously best known constructions, which had to resort to two-sided error.