Quote:Original post by Monder
Actually in order to prove something uncomputable you'd need to reduce the halting problem to it (as that means if you have a solution to that problem you'd have a solution to the halting problem).
Actually, you're saying the same thing either way. "X reduces to Y" means "X is Y"; the precise nature of "is" here depends on the problem you're solving. Whether we say "X reduces to Y" or "Y reduces to X" just depends on which expression is perceived to be more complicated.
Because it's generally easier to reduce things to simpler forms, proofs generally show how a more complicated solution is like a previously solved, simpler form. For example, consider the statement "(m^2 - n^2)/(m - n) == m + n". We can prove this either by:
(1) Try to gradually make changes to "m + n" until you arrive at "(m^2 - n^2)/(m - n)".
(2) Try to gradually make changes to "(m^2 - n^2)/(m - n)" until you arrive at "m + n".
If you're successful either way, you've shown that X is Y.
Quote:Original post by Monder
For a simple example of something computable that could be reduced to the halting problem take the decision problem of deciding whether something is the smallest element of the list.
[...]
Thus we have reduced the problem to the halting problem, though the original problem is clearly computable.
The halting problem doesn't ask whether a
specific program will terminate. It asks whether it's possible, in general, to decide if
any given program will terminate.
In other words, the halting problem asks whether it's possible to write a function H(p) that takes a program p as input, and that returns "true" if the program terminates and "false" if it doesn't. Your program is simply one example of a possible p (any program is, of course), but it's not an H. An H that only works for one particular p is also not an H, so either way, this example does not reduce to the halting problem.
Here's another example: imagine that, instead of H, I ask you to write S(n), the successor function. This simply takes any integer n as input and adds one to it. Would you be satisfied that this was really the successor function if it only worked with an input of 271?
Your program is trivial enough that you can show that it will, in fact, always halt. You can actually do even better, since you can say how the expected running time of the program is (number of list elements multiplied by the time cost to make a comparison). As long as the list is finite and there is a finite upper bound on how long it takes to determine if a particular element is the smallest thus far, it will terminate.