A quick recap of Lecture 27.
Shown by dovetailing.
Shown by diagonalization.
Suppose for contradiction that there is a list $\{r_0, r_1, r_2, \ldots \}$ of all real numbers in $[0,1)$.
Consider the digits $x_0, x_{1}, x_{2}, x_{3}, \ldots$ on the diagonal of this list, i.e., the $n$-th digit of $r_n$ for $n\in\N$.
For each such digit $x_{i}$, construct the digit $\widehat{x}_i$ as follows:
Now, consider the number $\widehat{r} = 0.\widehat{x} _ 0 \widehat{x} _ 1 \widehat{x} _ 2 \widehat{x} _ 3 \ldots$
Note that $r_n \neq \widehat{r}$ for any $n\in\N$ because they differ on the $n$-th digit.
So the list doesn’t include $\widehat{r}$, which is a contradiction. Thus the set $[0, 1)$ is uncountable.
| $r_0$ | $0.$$5$$00000000000\ldots$ |
| $r_1$ | $0.3$$3$$3333333333\ldots$ |
| $r_2$ | $0.14$$2$$857142857\ldots$ |
| $r_3$ | $0.141$$5$$92653589\ldots$ |
| $r_4$ | $0.2000$$0$$0000000\ldots$ |
| $\vdots$ |
Suppose for contradiction that there is a list $\{f_1, f_2, f_3, \ldots \}$ of functions from $\N$ to $\{0,1\}$.
Consider the outputs $x_0, x_1, x_2, x_3, \ldots$ on the diagonal of this list, i.e., $f_n(n)$ for $n\in\N$.
For each such output $x_{i}$, construct $\widehat{x}_i$ as follows:
Now, consider the function $\widehat{f}(n) = \widehat{x} _ {n}$.
Note that $f_n \neq \widehat{f}$ for any $n\in\N$ because the functions differ on the $n$-th output.
So the list doesn’t include $\widehat{f}$, which is a contradiction. Thus the set $\{f \,|\, f:\N\to\{0,1\}\}$ is uncountable.
| $f_0$ | $0$$\,0\,0\,0\,0\,0\,0\,0\,0\ldots$ |
| $f_1$ | $1\,$$1$$\,1\,1\,1\,1\,1\,1\,1\ldots$ |
| $f_2$ | $0\,1\,$$0$$\,1\,0\,1\,0\,1\,0\ldots$ |
| $f_3$ | $0\,1\,1\,$$1$$\,0\,1\,1\,1\,0\ldots$ |
| $f_4$ | $1\,1\,0\,0\,$$0$$\,1\,1\,0\,0\ldots$ |
| $\vdots$ |
We’ll study one such important function today.
Important problems computers can’t solve.
code(P) will denote “the code of the program P”.public static boolean P(String x) {
return x.matches("public .*");
}
P(code(P))?code(P) for any program $P$ and an input $x$,true if $P$ halts on the input $x$, andfalse if $P$ does not halt (diverges) on the input $x$.code(P) for any program $P$ and an input $x$,true if $P$ halts on the input $x$, andfalse if $P$ does not halt (diverges) on the input $x$.In other words, there is no program H(code(P),x) that computes the function described by the halting problem.
This function is therefore uncomputable.
Because the function outputs a boolean (a yes/no decision),
we say that the underlying problem is undecidable.
H is a program that solves the halting problem.D as follows:public static void D(String x) {
if (H(x, x) == true) {
while (true); // diverge
} else {
return; // halt
}
}
Does D(code(D)) halt?
H solves the halting problem means the following:D(x) halts then H(code(D),x) is true otherwise H(code(D),x) is false.D(code(D)) halts.H, it must be that H(code(D),code(D)) is true.D(code(D)) doesn’t halt by definition of D.D(code(D)) doesn’t halt.H, it must be that H(code(D),code(D)) is false.D(code(D)) halts by definition of D.H exists must be false. $\square$D come from?public static void D(String x) {
if (H(x, x) == true) {
while (true); // diverge
} else {
return; // halt
}
}
D halts on code(P)H(code(P),code(P)) outputs false, i.e.,P doesn’t halt on the input code(P).D differs from every program P on the input code(P).code(P).D behaves like the flipped diagonalD isn’t included, it cannot exist!| $\langle P_0\rangle$ | $\langle P_1\rangle$ | $\langle P_2\rangle$ | $\langle P_3\rangle$ | $\langle P_4\rangle$ | $\ldots$ | |
| $P_0$ | 0 | 1 | 1 | 0 | 1 | $\ldots$ |
| $P_1$ | 1 | 1 | 0 | 1 | 0 | $\ldots$ |
| $P_2$ | 1 | 0 | 1 | 0 | 0 | $\ldots$ |
| $P_3$ | 0 | 1 | 1 | 0 | 1 | $\ldots$ |
| $P_4$ | 0 | 1 | 1 | 1 | 1 | $\ldots$ |
| $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\vdots$ | $\ldots$ |
Go forth and prove great things!