Rice’s Theorem
For a predicate ρ over turing machines, let
ext(ρ)={ρ(T):T is a turing machine}
Then ext(ρ) is computable exactly when ext(ρ)∈{∅,TM}; ie, ρ is either always true or always false (ρ is “trivial”).
(Modified from a proof presented in GGCC)
We show that if there exists some nontrivial computable ρ, then we can construct and algorithm taking an n and deciding if φn(n)↓. This is impossible, so by contradiction ρ cannot exist.
Take ρ. Let div be a TM which always diverges; WLOG assume ρ(div) (if that’s not the case, replace ρ by ¬ρ; one is computable exactly when the other is). Let s be a TM abiding by ¬ρ(s); one exists since ρ is nontrivial.
Now our algorithm is as follows. Accept input n. Compute the program An which takes an input m, runs φn(n), ignores the result, and then computes s(m). Such a program is uniquely characterized by:
An(m)={s(m)divergeφn(n)↓φn(n)↑
Note that if φn(n)↓ then An=s and if φn(n)↑ then An=div. Hence:
φn(n)↑⟹An=divρ(div)⟹ρ(An)and likewise
φn(n)↓⟹An=sρ(div)⟹¬ρ(An)
This all entails that φn(n)↓ exactly when ¬ρ(An). By assumption we can compute if ρ(An) or not, and hence we can also compute if φn(n)↓ or not; done.