# Is the language of Turing Machines that halt on every input recognizable?

I am trying to reduce the complement of the HALTING problem (WLOG, the complement of the HALTING problem is the language of TMs that loop on some string w)to this language in order to show that it is not recognizable. Does anyone know how to do this reduction, what I come up with is:

Using python-like syntax:

def R(<M>,w):
def F(x):
if M(w)loops: //Run M on w
return True on every x
else
loop on every x
return F


Of course the problem here is that we can't really know when M loops on w

Does anyone know how to do this reduction, or if it is possible to prove that the language of TMs that accept every input string is unrecognizable using a reduction from a different unrecognizable language?

• I am afraid that a TM that does not halt is not necessarily looping. That is true only of memory bounded automata. – babou Feb 22 '15 at 10:20
• @babou "Not halting" is often called "looping" even though the machine may move to new tape cells all the time. – Raphael Feb 22 '15 at 11:07
• Using closure properties is easier here. (What happens if a language and its complement are both recognizable?) – Raphael Feb 22 '15 at 11:08
• @Raphael Regarding "looping". I will take your word for it. But I will still consider it a poor practice as it may cause confusion between two very distinct concepts. – babou Feb 22 '15 at 11:46
• Hint: you are doing the reduction the wrong way around. Assume that your new language was semi-decidable and build a machine/algorithm for the complement of HALTING using it. – Raphael Feb 23 '15 at 7:06

Preliminary

Let $H$ be the usual halting language: $$H=\{(\langle M\rangle, w)\mid M(w) \text{ halts}\}$$ Its complement is $$\overline{H}=\{(\langle M\rangle, w)\mid M(w) \text{ doesn't halt}\}$$ We know that $H$ is recognizable (just run $M$ on $w$ and do what it does), so $\overline{H}$ must be unrecognizable (otherwise $H$ would be decidable, which we know isn't true).

The Reduction

As you suggested, we'll produce a reduction from $\overline{H}$ to $$AH = \{\langle N\rangle\mid N \text{ halts on all }x\}$$ thus showing that $AH$ is unrecognizable. As you suggested, what we want is to map $(\langle M\rangle, w)$ to a description of a TM $M_w$ where

Mw(x) =
run M on w
if M(W) halts
loop
if M(w) doesn't halt
halt


That would do it, except for the fact that if $M$ didn't halt on $w$, we'd never get to the $\texttt{halt}$ instruction. What we need is a finite way of testing for non-halting. A standard way to deal with this kind of difficulty is to limit the number of steps our simulation will perform, like this:

N(x) =
run M on w for |x| steps
if M has halted
loop
if M(w) hasn't halted yet
halt


How does this modification help us?

• If $(\langle M\rangle, w)\in\overline{H}$, then $M(w)$ will never halt, so $N(x)$ will halt after $|\,x\,|$ steps and thus $\langle N\rangle\in AH$
• If $(\langle M\rangle, w)\notin\overline{H}$ then $M(w)$ will eventually halt, say after $s$ steps. This means that $N$ will halt on all inputs, $x$ of length less than $s$, and will loop on all longer inputs, so $\langle N\rangle\notin AH$.

This establishes the reduction we needed, and so we can conclude that $AH$ is non-recognizable.

• I have an issue with this answer. What happens if $<M>$ is the Turing machine: Read all the input $x$, then do another step to the right, and then halt? On one hand, it will never halt after $|x|$ steps, therefore $N(x)$ will halt for all inputs, but $(<M>, x)\notin\overline{H}$ for any word $X$. – Nescio Jun 21 '17 at 7:49
• @Nescio For all words $x$ that are fed to $N$ by the supposed machine that recognizes AH, $M$ will be run on its own fixed word $w$. Think of $x$ not as a word, but as a counter which the machine $M$ cannot access. – potestasity Dec 14 '17 at 14:52