Recursively Enumerable Languages A language is called Recursively Enumerable if there is a Turing Machine that accepts on any input within the language. Reminder: A language is called Recursive if there is a Turing Machine that accepts on any input within the language and rejects on any other input.
Recursive vs Recursively Enumerable Languages Recursive languages are also called Decidable Languages because a Turing Machine can decide membership in those languages (it can either accept or reject a string). Recursively Enumerable Languages are also called Recognizable because a Turing Machine can recognize a string in the language (accept it). It might not be able to decide if a string is not in the language since the machine might loop for that input.
Recursive Languages are also Recursively Enumerable Proof: If L is recursive then there is a Turing Machine M that decides membership in L: M accepts on x if x is in L M rejects on x if x is not in L By definition, M can recognize strings in the language (accept on those strings).
Partial Predicates Partial Predicates are predicates defined only for some input. We use the symbol ↑ to denote that some value is undefined Example:
Recursively Enumerable Languages revisited Partially Computable Predicates: There is a Turing Machine that halts on the defined values and loops on the undefined. A language L is Recursively Enumerable if its characteristic function χL is partially computable, i.e. there is a Turing Machine that accepts for χL = 1, rejects for χL = 0 and loops for χL = ↑.
Predicate H is partially computable The partial predicate is partially computable. Run U’, a slightly changed version of the Universal Turing machine U on input (<M>,<M>) (U’ should accept if U accepts or rejects, else it should loop).
A predicate that is not partially computable Consider the predicate This predicate is not partially computable (Intuition: there is no way that we can design a Turing Machine that halts for input <M> when M loops).
Ī is not partially computable Assume that there was a Turing Machine Ū that could partially compute Ī. Idea: Run both machines U’ and Ū on input (<M>,<M>). At some point one of them will halt: If U’ halts then accept if Ū halts then reject. But this decides the H predicate. Contradiction! (Simulation of the concurrent running of U’ and Ū can be performed using a 2-tape TM and performing one step of the computation of U’ and Ū at a time interchangeably).