How to resolve this computability paradox?

47 Views Asked by At

Let's define two Turing machines, $T_1$ and $T_2$, as follows: Given a number $n$ as input, let $T_1$ be a Turing machine that enumerates over all pairs $(p,s)$ where $p$ is the code of some Turing machine and $s$ is a number of computational steps, simulates $p$ for $s$ steps, outputs the result if it is the $nth$ result computed in this way. (So for input "7" $T_1$ will output the result of simulating $p$ in the 7th $(p,s)$ pair for $s$ steps).

Let $T_2$ be a program that takes $T_1$'s input for some $n$, and outputs that input with another '1' bit appended at the end. As far as I can see there is no problem in the definition of $T_2$, since it merely runs $T_1$ on a given input and then appends a bit at the end.

The paradox is this: Based on $T_1$ and $T_2$'s code, their output should never be the same for some $n$. However, since both machines always halt there necessarily exists an $n$ for which $T_1$ simulates $T_2$ on input $n$ for enough computational steps to know $T_2$'s output for input $n$. In this case it seems like both programs should output the same result - a contradiction.

How does one resolve this?