A language $L$ is computable if there is a Turing machine $M$ such that:
- If $x \in L$ then $M$ halts on input $x$ with "YES" written on the output tape.
- If $x \notin L$ then $M$ halts on input $x$ with "NO" written on the output tape.
A language $L$ is recursively enumerable if there is a Turing machine $M$ such that:
- If $x \in L$ then $M$ halts on input $x$.
- If $x \notin L$ then $M$ doesn't halt on input $x$.
As an example, consider the language HALT of all Turing machines that halt on the empty input. HALT is recursively enumerable, since given a Turing machine $M$, we can simulate it on the empty input. However, HALT is not decidable, as Turing showed using diagonalization.
Turing completeness is an informal concept (though it can probably be formalized). According tot he Wikipedia definition, a computing system is Turing-complete if:
- Everything that can be computed by the system is computable (on a Turing machine).
- Every computable language can be computed by the system.
However, we could just as well define Turing completeness with respect to recursive enumerability. The two definitions are probably equivalent for all reasonable computing systems.