5

What does the notation co- mean when prefixing co-NP, co-RE (recursively enumerable), or co-CE (computably enumerable) ?

Raphael
  • 72,336
  • 29
  • 179
  • 389
Vanwaril
  • 161
  • 4
  • 7
    It means the complement. See for example co-NP on Wikipedia and/or more complement classes on the Complexity Zoo. – Juho Apr 19 '12 at 20:35
  • Just wondering, I tried finding a post in meta.cstheory about new guidelines for what is in scope there, and what is not, but couldn't. Can anyone point to why this was migrated from cstheory to cs (despite being unable to find it, I'm sure such a post already exists somewhere). – Vanwaril Apr 20 '12 at 05:28
  • 2
    Welcome! This is still not a (very) good question as it only asks for a definition that can easily looked up. – Raphael Apr 20 '12 at 07:55
  • When I came across co-RE, I didn't know what RE stood for, and googling didn't help much with that as you can imagine. When I was typing out the question on cstheory co-CE and co-NP popped up as related questions; none of them told me what co- meant, but I knew what CE was, and then RE just clicked. At that point I should have tried googling again, but I guess I wasn't thinking straight. – Vanwaril Apr 20 '12 at 08:08

2 Answers2

11

Often, in mathematical terminology, the prefix co- refers to a dual in some sense. For complexity and computability classes, the prefix co- has a fixed meaning: if X is a class of decision problems, then co-X is the class of problems whose complement is in X. That is, if the problem “does this object have the property $P$” is in X, then the problem “does this object have the property $\neg P$?” is in co-X.

For example, RE is the class of semi-decidable problems, that is, problems for which there is a Turing machine that can verify a positive answer. Co-RE is the class of problems for which there is a Turing machine that can verify a negative answer. A well-known problem that is in RE but not in co-RE is the halting problem (intuitively, you can verify that a Turing machine halts by running it to completion, but if the machine runs forever, you'll never be sure).

NP is the class of problems for which a solution can be verified in polynomial time; equivalently, NP is the class of problems that can be solved by a non-deterministic Turing machine in polynomial time. Co-NP is the class of problems for which the absence of a solution can be proved in polynomial time. It is not known whether $\text{NP} = \text{co-NP}$.

Gilles 'SO- stop being evil'
  • 43,613
  • 8
  • 118
  • 182
  • 6
    +1. This is a very minor point, but it is a common source of confusion. In the last paragraph, NP is the set of problems that can be semi-decided by a non-deterministic machine in polynomial time. The class that can be solved (i.e. fully decided) in polynomial time by a nondeterministic Turing machine is $\text{NP}\cap\text{co-NP}$ – Carl Mummert Apr 20 '12 at 00:23
5

In the more algebraic side of theoretical computer science, co- means dual, as in Gilles' answer, but it has a very precise interpretation. If the concept of interest (let's say a product) is formalised in Category Theory, then the dual (a coproduct) is the same concepts with the arrows going in the opposite direction.

A simple example (yet abstract) is the idea of an algebra, which, for a functor $F$, is a pair $\langle S,\alpha:FS\to S\rangle$. Algebras are important in computer science for modelling data types. The dual of an algebra is a coalgebra, which is a pair $\langle S,\alpha:S\to FS\rangle$. Coalgebras are important for modelling systems.

What happened when we dualized? Well, the arrow $FS\to S$ was reversed, obtaining $S\to FS$.

One of the cool things about this idea is that all of the theory that works for one concept works for the dual concept, where all of the arrows are reversed.

Dave Clarke
  • 20,205
  • 4
  • 68
  • 113