December 9, 2008

Nick Hay, Marcello and I discussed this question a while ago: if you had a haltingoracle, how could you use it to help you prove a theorem, such as the Riemann Hypothesis? Let’s say you are only allowed to ask one question; you get one bit of information.

Of course, you might simply ask if the Riemann Hypothesis is true. If you trust your oracle, this may be good enough for your purposes. But let’s suppose what we really care about is the proof. Maybe we want to win a prize for our proof, and they won’t accept a proof by oracle.

Clearly, a complete proof of the Riemann Hypothesis is longer than one bit, so we can’t ask the oracle to output the proof for us. So what can we do? Well, we could ask it for a hint. Maybe we have some conjecture (which we can call Conjecture A) that could be useful in proving the RH. But we don’t know if A is true, nor do we know if proving A would actually help us prove the RH. So we could ask the oracle if it’s worth our time to try to prove A.

What we really want to know is if we would save time by trying to prove A, and then trying to use A to prove the RH, compared to some other strategy. To figure out how much time it would take, we need some sort of model of how we write proofs. Here’s a really simple model: “mathematicians write proofs by brute force; they look at every possible proof, from short to long, until finding one which proves their goal hypothesis, at which point they halt.”

Let’s suppose this model is true (lol). Let’s define the “difficulty” of a theorem as the length of its shortest proof. If our proofs are written in binary, then to prove a theorem of difficulty D, it takes time t = O(2D).

Let’s say D(RH) is the difficulty of the Riemann Hypothesis, D(A) is the difficulty of Conjecture A, and D(RH | A) is the difficulty of proving the RH once we have proved A. Then a mathematician who attempted to prove A before proving the RH would take time tA,RH ~ 2D(A) + 2D(RH | A), while a mathematician who attempted to prove the RH directly would take time tRH ~ 2D(RH).

So we could ask the oracle:

True or False? 2D(A) + 2D(RH | A) < 2D(RH)

If the oracle returns True, then we would start thinking about how to prove A.

Since you could simply extract a proof by asking the oracle “is the Nth bit of the lexicographically smallest valid proof in specified binary notation 1?” (you don’t even need a halting oracle for that, it’s recursively enumerable), the point of your procedure can only be in trying to get a more intuitively comprehensible proof, using understandable lemmas A. But without planning ahead, many reasonable but in the end irrelevant As could be used to compress the proof of target theorem in a way that would still be inscrutable, so I’m not sure that’ll help…

Interesting problem! First note that a one-bit answer from an oracle can’t improve our success probability by more than a factor of 2, since we can always simulate the oracle with a random coin flip and get the right answer with probability 1/2. (Your proposal seems to get better than a factor of 2, but only because the model mathematician is behaving suboptimally to start with, so you’re really combining two improvements: the oracle and a better search strategy.)

How can we get closer to this upper bound of 2?

Generally we should come up with two individually feasible plans A and B such that P(A will succeed OR B will succeed) is maximized, and then ask the oracle which plan we should pursue. P(A will succeed OR B will succeed) = P(A will succeed) + P(B will succeed) – P(A will succeed AND B will succeed) so we want two plans that individually have good success probabilities but are not too similar in approach. Then we write a program that simulates two worlds. In the first world we proceed with plan A, and in the second we proceed with plan B. The program halts if A succeeds but B doesn’t, and loops forever otherwise. Finally we ask whether this program halts.

To improve on this a bit more, instead of writing the world simulations by hand, write a program to use Solomonoff Induction to pick out two distributions of worlds and then simulate them.

This brings up an ethical question though: do we have to worry about possible suffering of people in these simulations, even though the program is never run anywhere except inside the halting oracle?