Given a polynomial-time algorithm, can we compute an explicit polynomial time bound just from the program? - MathOverflow most recent 30 from http://mathoverflow.net 2013-06-20T10:58:55Z http://mathoverflow.net/feeds/question/28056 http://www.creativecommons.org/licenses/by-nc/2.5/rdf http://mathoverflow.net/questions/28056/given-a-polynomial-time-algorithm-can-we-compute-an-explicit-polynomial-time-bou Given a polynomial-time algorithm, can we compute an explicit polynomial time bound just from the program? Joel David Hamkins 2010-06-13T19:00:33Z 2010-06-14T03:18:19Z <p><b>Question.</b> Given a Turing-machine program $e$, which is guaranteed to run in polynomial time, can we computably find such a polynomial?</p> <p>In other words, is there a computable function $e\mapsto p_e$, such that whenever $e$ is a Turing-machine program that runs in polynomial time, then $p_e$ is such a polynomial time bound? That is, $p_e$ is a polynomial over the integers in one variable and program $e$ on every input $n$ runs in time at most $p_e(|n|)$, where $|n|$ is the length of the input $n$.</p> <p>(Note that I impose no requirement on $p_e$ when $e$ is not a polynomial-time program, and I am not asking whether the function $e\mapsto p_e$ is polynomial-time computable, but rather, just whether it is computable at all.)</p> <p>In the field of complexity theory, it is common to treat polynomial-time algorithms as coming equipped with an explicit polynomial clock, that counts steps during the computation and forces a halt when expired. This convention allows for certain conveniences in the theory. In the field of computability theory, however, one does not usually assume that a polynomial-time algorithm comes equipped with such a counter. My question is whether we can computably produce such a counter just from the Turing machine program.</p> <p><em>I expect a negative answer.</em> I think there is no such computable function $e\mapsto p_e$, and the question is really about how we are to prove this. But I don't know...</p> <p>Of course, given a program $e$, we can get finitely many sample points for a lower bound on the polynomial, but this doesn't seem helpful. Furthermore, it seems that the lesson of Rice's Theorem is that we cannot expect to compute nontrivial information by actually looking at the program itself, and I take this as evidence against an affirmative answer. At the same time, Rice's theorem does not directly apply, since the polynomial $p_e$ is not dependent on the set or function that $e$ computes, but rather on the way that it computes it. So I'm not sure.</p> <p>Finally, let me mention that this question is related to and inspired by <a href="http://mathoverflow.net/questions/27867/non-existence-of-algorithm-converting-np-algorithm-to-p-algorithm" rel="nofollow">this recent interesting MO question about the impossibility of converting NP algorithms to P algorithms</a>. Several of the proposed answers there hinged critically on whether the polynomial-time counter was part of the input or not. In particular, an affirmative answer to the present question leads to a solution of that question by those answers. My expectation, however, is for a negative answer here and an answer there ruling out a computable transformation.</p> http://mathoverflow.net/questions/28056/given-a-polynomial-time-algorithm-can-we-compute-an-explicit-polynomial-time-bou/28060#28060 Answer by Timothy Chow for Given a polynomial-time algorithm, can we compute an explicit polynomial time bound just from the program? Timothy Chow 2010-06-13T19:36:42Z 2010-06-14T02:16:30Z <p>[Edit: A bug in the original proof has been fixed, thanks to a comment by Francois Dorais.]</p> <p>The answer is no. This kind of thing can be proved by what I call a "gas tank" argument. First enumerate all Turing machines in some manner $N_1, N_2, N_3, \ldots$ Then construct a sequence of Turing machines $M_1, M_2, M_3, \ldots$ as follows. On an input of length $n$, $M_i$ simulates $N_i$ (on empty input) for up to $n$ steps. If $N_i$ does not halt within that time, then $M_i$ halts immediately after the $n$th step. However, if $N_i$ halts within the first $n$ steps, then $M_i$ "runs out of gas" and starts behaving erratically, which in this context means (say) that it continues running for $n^e$ steps before halting where $e$ is the number of steps that $N_i$ took to halt.</p> <p>Now if we had a program $P$ that could compute a polynomial upper bound on any polytime machine, then we could determine whether $N_i$ halts by calling $P$ on $M_i$, reading off the exponent $e$, and simulating $N_i$ for (at most) $e$ steps. If $N_i$ doesn't halt by then, then we know it will never halt.</p> <p>Of course this proof technique is very general; for example, $M_i$ can be made to simulate any fixed $M$ as long as it has gas but then do something else when it runs out of gas, proving that it will be undecidable whether an arbitrary given machine behaves like $M$.</p> http://mathoverflow.net/questions/28056/given-a-polynomial-time-algorithm-can-we-compute-an-explicit-polynomial-time-bou/28061#28061 Answer by Carl Mummert for Given a polynomial-time algorithm, can we compute an explicit polynomial time bound just from the program? Carl Mummert 2010-06-13T20:17:23Z 2010-06-14T03:18:19Z <p>You can also diagonalize directly against a purported bound-producing algorithm. Say that $R(j)$ returns a polynomial when run with any index $j$ of a polynomial time function as input. </p> <p>Define a function $B(j,n)$ as follows. On input $n$, run $R(j)$ for $n$ steps. If this doesn't halt, return $0$ immediately. Otherwise, if $R(j)$ does not return a polynomial when it halts, return $0$ immediately. Otherwise, if the polynomial is $p(x)$, waste at least $(n+p(n))^2$ steps and then return $0$. </p> <p>Note that for any $j$, the function $C_j(n) = \lambda n . B(j,n)$ is total and runs in polynomial time, and if $R(j)$ returns a polynomial then this is not a bound on the running time of $C_j(n)$.</p> <p>Now the function that takes a number $j$ and returns an index for the $C_j$ is a total computable function. So we can use the recursion theorem to produce an index $k$ such that $\phi_k(n) = C_k(n)$. Then $\phi_k$ will be a total polynomial-time function, but if $R(k)$ returns a polynomial then this is not an upper bound for $\phi_k$.</p> <p><strong>Note:</strong> The previous paragraph requires more than the usual statement of the recursion theorem, it requires some knowledge of the proof to show that $\phi_k$ is polynomial-time. Here is the construction I need.</p> <p>Let $s(j,k)$ be the usual polynomial-time function such that $\phi_{s(j,k)}(n) \simeq \phi_j(k,n)$; the key point we need is that the running time of $\phi_{s(j,k)}(n)$ is polynomially bounded if the running time of $\phi_j(k,n)$ is polynomially bounded, and the first of these is not smaller than the second. This can be checked by examining the construction of $s$ in the chosen model of computation. </p> <p>Now let $d$ be the index for the computable function $\phi_d(j,n) = B(s(j,j),n)$ obtained by simple composition. Let $k = s(d,d)$. Then $\phi_k(n) = \phi_d(d,n) = B(k,n)$ as desired; this is the proof of the recursion theorem. Moreover, the implementation of these functions ensures that $\phi_k(n)$ runs in polynomial time but not faster than $B(k,n)$, because each computation of $\phi_k(n)$ consists of some polynomial-time-in-$n$ invocations of $s$ functions followed by the literal execution of the program for $B(k,n)$. </p>