Week 12
Computability -
Problems range from simple (and computable) to noncomputable (no solutions...)
The Halting Problem -
A program (or function), called H, that solves the Halting Problem takes as input any program P and any input X for P.
-
H outputs TRUE if P would halt when given input X, and outputs FALSE otherwise (eg. if P would go into an infinite loop).
eg: Loop.cpp:
#include
#include
int main(int argc, char *argv[]) {
int Index;
Index = atoi(argv[1]);
while (Index != 0)
Index--;
return(0);
}
|
-
does not halt for input X = -1, but does halt for input X = 5.
-
H("Loop.cpp",-1) should output FALSE
-
H("Loop.cpp",5) should output TRUE.
-
A solution for the halting problem must work for all programs and all inputs. For some programs the analysis is easy, eg:
#include
int main(int argc, char *argv[]) {
while (TRUE) ;
return(0);
}
| -
Will obvious never halt for any input. Similarly:
#include
int main(int argc, char *argv[]) {
return(0);
}
| -
Will always halt for any input.
-
note: most programs are a far more complicated solving the halting problem much harder!
The Halting Problem is Noncomputable -
We can prove that (no matter how hard we try) we will never find a program that solves the halting problem (ie: the halting problem is noncomputable)
-
Assume that we actually have a program H that solves the halting problem.
H(P,X) = True if P halts when given input X
= False if P does not halt when given input X
-
THE PROOF, by contradiction:
-
Show that if H exists then contradictions are provable. Hence H does not exist.
-
Construct a new program called I that takes as input a program P:
-
I(P) {
if (H(P,P))
while (TRUE) ;
else return(TRUE);
}
|
-
I determines whether P does not halt when given itself as input.
-
I will go into an infinite loop if P does halt when given itself as input.
I(P) = True if P does not halt when given input P
Loops if P halts when given input P
-
Now try to determine the value of I(I) : will I halt when given I as input. There are two cases to consider:
-
I(I) returns TRUE and halts
-
This means that H says that I does not halt when given I as input contradiction
-
I(I) goes into an infinite loop.
-
Conclude that program I cannot exist.
-
I is constructed from H, so H cannot exist
-
The halting problem is noncomputable!
Other Noncomptable Problems
A program, called T, that solves the Totality Problem takes as input a program P. T outputs TRUE if P would halt when given any possible input, and outputs FALSE otherwise.
If the Totality Problem could be solved, then so could the Halting Problem. the Totality Problem is noncomputable.
A program, called E, that solves the Equivalence Problem takes as input two programs P and Q. E outputs TRUE if, given any input, P & Q produce the same output, and E outputs FALSE otherwise.
If the Equivalence Problem could be solved, then so could the Totality Problem. the Equivalence Problem is noncomputable.
-
others:
-
diophantine equations (impossible to write a program to find the solution for certain polynomial equations over integers)
-
basically, any nontrivial property of a program is noncomputable (eg. user input, the order of system calls in an OS, etc...)
Time Complexity and Big-O Notation -
Consider this code for adding 7 to each element of an array:
for (Index = 0; Index < N; Index++)
TheArray[Index] = TheArray[Index] + 7;
|
How long will it take on a computer?
-
The operations performed are:
-
Index = 0 once
-
Index < N, TheArray[Index] =, + 7, Index++ N times
-
Time taken is dominated by operations done N times. (ie: is proportional to N linear)
-
The proportion depends on the computer time to do <, +, ++
-
Consider this code for multiplying each element by 2 and adding 7:
for (Index = 0; Index < N; Index++)
TheArray[Index] = TheArray[Index] * 2 + 7;
|
How long will it take on a computer?
-
The only change is * 2 - N times. The time is taken is still proportional to N.
-
The Big-O notation says this code is O(N).
-
This is short hand for saying "proportional to N", and indicates linear complexity.
-
This is commonly said as "order N".
Share with your friends: |