Here's one possible intuition, which could be totally misguided given that we haven't yet resolved P versus NP.
The complexity class P can be thought of as all problems for which the following statement is true: there's a boolean function solveProblem
such that
solveProblem
runs in polynomial time in the size of its input,
- for any input
x
where the answer is "yes," solveProblem(x)
returns true, and
- for any input
x
where the answer is "no," solveProblem(x)
returns false.
Now, let's look at the definition of NP. It's the set of problems for which the following statement is true: there's a boolean function checkYesAnswer
such that
checkYesAnswer
runs in polynomial time,
- for any input
x
where the answer is "yes", there is some y
where checkYesAnswer(x, y)
returns true, and
- for any input
x
where the answer is "no," checkYesAnswer(x, y)
always returns false.
The difference between P and NP, then, is that when you're looking at the complexity class P, you're given just the input and need to make a yes/no determination, whereas in the class NP there may be some auxiliary information that helps you make a yes/no decision. That makes the distinction between the definitions of P and NP pretty large - in one case you need to solve the problem, and in the other you need to check whether some auxiliary information helps you.
Now, here's another, equivalent definition of co-NP. The class co-NP consists of all problems where there's a boolean function checkNoAnswer
such that
checkNoAnswer
runs in polynomial time,
- for any input
x
where the answer is "yes," checkNoAnswer(x, y)
always returns true, and
- for any input
x
where the answer is "no," there is a choice of y
where checkNoAnswer(x, y)
returns true.
In other words, the definitions of NP and co-NP are very closely related to one another, with the only difference being that the branches for "yes" and "no" are swapped. So in that sense, even if P ≠ NP, it still could be plausible that NP and co-NP could be equal, since we're basically just flipping the role of the words "yes" and "no."
There's also good reasons to see why NP might not be co-NP. You can think of the distinction between the definitions as follows: with NP, the answer is "yes" if there exists some y
with some property, whereas with co-NP the answer is "yes" if for all y
something holds. And since the ∃ and ∀ quantifiers work differently, perhaps there's something else going on here.