It is possible to prove that there are problems that algorithms cannot solve, but those proofs reply on pardoxes and different sizes of infinity and other tools that most people find difficult to accept. This page gives a more intuitive but less formal argument for the idea that some problems are hard to solve.
Suppose I wrote a program that took as input another program and returned as output one of two things: either an assertion that always returns after a finite amount of time, or an example input that would make run forever.
If such a program existed, it could be used to solve huge numbers of open math problems that mathematicians have spent centuries trying to solve without success. That power strongly suggests that we could never create . We outline a proof that cannot exist on another page, but since that proof is hard for many to grasp we give examples here that show why would be weirdly powerful if it did exist.
Many unsolved math problems are complicated to even describe, but not all are. The rest of this page shows how , if it existed, could be used to solve some famously hard problems in mathematics.
The Collatz conjecture asks if, for any positive integer , we would eventually reach if we repeatedly replace with .
To solve this using , define the following :
f(positive integer x):
repeat until x is 1:
if x is odd, replace x with 3x+1
otherwise, replace x with x/2
Then call ; it will either return an that never reaches under Collatz’s rules or it will prove that there is no such .
Goldbach’s conjecture asks if every even integer is the sum of two prime numbers.
To solve this using , define the following :
f(even integer x):
For every integer k from 2 to x-2:
if k is prime and x-k is also prime:
stop running
If you get here, repeat doing something pointless forever
Then call ; it will either return an even that is not the sum of two prime numbers or it will prove that there is no such .
Legendre’s conjecture asks if there is always at least one prime number between and .
To solve this using , define the following :
f(integer n):
For every integer k from n squared to (n+1) squared:
if k is prime:
stop running
If you get here, repeat doing something pointless forever
Then call ; it will either return an that has no primes between and or it will prove that there is no such .
A Fermat number has the form $F_n = 2^{2^n}}$. A square-free number cannot be divided by any integer twice without a remainder. It is not known if all Fermat numbers are square free.
To solve this open problem using , define the following :
f(positive integer n):
Compute F_n = 2^(2^n)
For every k between 2 and F_n
If (F_n / k) / k is an integer,
repeat doing something pointless forever
Then call ; it will either return an for which is not square-free or it will prove that there is no such .