Question about Friedberg’s original proof of the Friedberg-Muchnik Theorem

371 Views Asked by At

This is Richard Friedberg’s original 1957 proof of the Friedberg-Muchnik Theorem, the origin of the ground-breaking priority argument. It is actually surprisingly understandable once you get past the notation. One part confuses me though:

Note that the only information about a function $f$ relevant to the statement $T_1^f(e,x,y)$ is information about its values on arguments $u< y$ (because all the relevant arguments occur in a formal expression with Godel number $y$). Therefore, the changes made in $x_2^a$ under Subcase 1.1 prevent the falsification of $T_1^{f_2^{a’}}(e_a, x_1^a(e_a),y)$ for any $a'> a$ except through an occurrence of Subcase 2.1 with $e_{a'}< e_{a}$.

Assuming anyone else can get past the notation, can someone explain the part in bold? I understand the part before that, it’s just talking about how you’re only using the first $y$ values of the oracle. But how does this imply that $T_1^{f_2^{a’}}(e_a, x_1^a(e_a),y)=1$ can never be false unless $e_{a'}< e_{a}$? And what do the changes made to $x_2^a$ in Subcase 1.1 have to do with anything?

The only logic that I can imagine is that if $T_1^{f_2^{a’}}(e_a, x_1^a(e_a),y)=1$ is false but $T_1^{f_2^{a}}(e_a, x_1^a(e_a),y)=1$ is true, then $f_2^{a’}(x)\neq f_2^{a}(x)$ for some $x$ between $0$ and $y$, and that would require some occurrence of Subcase 2.1. But I don’t see what the logic beyond that is or how the values of $x_2^a$ changeis relevant.

1

There are 1 best solutions below

0
On

I will first explain what's going on in the language of Friedberg's paper. But I want to make it clear that I don't think Friedberg's paper is the best place to learn this proof. I agree that it is surprisingly readable but that doesn't mean there is no better exposition in the last 60 years. So I will also try to explain in more modern (and informal) language what is going on in the proof and point to some other references where you can learn more about it.

In the language of Friedberg's paper

In general, $T_1^{f}(e_a, x_1^a(e_a), y)$ only depends on the first $y$ values of $f$. And $T_2^{f_2^{a}}(e_a, x_1^a(e_a), y)$ holds. But $f_2$ is just the pointwise limit of $f_2^{a'}$. So the only way $T_1^{f_2}(e_a, x_1^a(e_a), y)$ can fail is if for some $a' > a$, $f_2^{a'}$ disagrees with $f_2^a$ on some input $x\leq y$. This much you have already written in your question.

The next point is that the only time in the construction that $f_2^{a' + 1}(x)$ can be made to disagree with $f_2^{a'}(x)$ is if subcase 2.1 occurs at stage $a' + 1$. Furthermore, when subcase 2.1 occurs at stage $a' + 1$, the only disagreement between $f_2^{a' + 1}$ and $f_2^{a'}$ will be on input $x_2^{a'}(e_{a' + 1})$. Suppose for a moment that for all $a' \geq a$ such that subcase 2.1 occurs at stage $a' + 1$, $x_2^{a'}(e_{a' + 1}) > y$. Then for any $x \leq y$ we would have: $$ f_2^a(x) = f_2^{a+1}(x) = f_2^{a+2}(x) = f_2^{a+3}(x) = \cdots $$

The last point is the most important and maybe easiest to miss when reading the paper. The point is that at stage $a$ we set $x_2^a(e)$ to be larger than $y$ for all $e \geq e_a$ and at no point in the construction is $x^{a' + 1}_2(e)$ ever less than $x^{a'}_2(e)$. So for all $a' > a$ and all $e \geq e_a$, $x_2^{a'}(e)$ is greater than $y$. The fact that we set $x_2^a(e)$ to be larger than $y$ for all $e \geq e_a$ on stage $a$ is easy to miss because the paper seems to say that we set $x_2^a(e)$ greater than $a$. However, if you read carefully you will see that $y$ is at most $a$.

We now have all the pieces to explain Friedberg's comment: $T_1^{f_2}(e_a, x_1^a(e_a), y)$ can only disagree with $T_1^{f_2^a}(e_a, x_1^a(e_a), y)$ if for some $a' > a$, $f_2^{a'}$ disagrees with $f_2^a$ on some input $x\leq y$. And this can only happen if for some $a' \geq a$, subcase 2.1 occurs at stage $a' + 1$ and $x_2{a'}(e_{a' + 1}) < y$. And this can only occur when $e_{a' + 1} < e_a$.

In more modern and informal language

The main idea of Freidberg's proof is something that is now called a finite injury priority argument. Let me try to explain the idea. We want to construct r.e. sets and we have a bunch of requirements to fulfill. In this case, we want to construct r.e. sets $A_1$ and $A_2$ such that neither computes the other. So the requirements are that for each $e$, the $e^\text{th}$ machine with oracle $A_2$ does not compute $A_1$ and vice-versa. One way to ensure this is to find some $x_e$ and $y_e$ such that $\Phi_e^{A_2}(x_e) \neq A_1(x_e)$ and $\Phi_e^{A_1}(y_e) \neq A_2(y_e)$. By the way, I am using $\Phi_e^{A_2}(x_e)$ to denote the output of the $e^\text{th}$ machine with oracle $A_2$ on input $x_e$ and when I say it is not equal to $A_1(x_e)$ I mean it either diverges or converges and is not equal to $A_1(x_e)$ (and by $A_1(x_e)$ I mean the output of the indicator function for $A_1$ on input $x_e$).

One way to try to fulfill one of these requirements is to just set $x_e = e$ and ask if there is any way to modify $A_2$ to make $\Phi_e^{A_2}(e)$ converge. If not, there is no problem. If so, modify $A_2$ to make $\Phi_e^{A_2}(e)$ converge and set $A_1(e)$ to disagree with whatever you made $\Phi_e^{A_2}(e)$ converge to.

The first problem with this is that it doesn't give us an r.e. set. So the first modification we can make to this construction is to build $A_1$ and $A_2$ in stages. At the beginning, $e$ is not in $A_1$. If at any stage we see a way to add elements to $A_2$ to make $\Phi_e^{A_2}(e)$ converge then we do that (remember that to make sure $A_2$ is r.e. we can only ever add elements at a stage, not remove them). We then add those elements to $A_2$. If that caused $\Phi_e^{A_2}(e)$ to converge to $1$ then we make sure never to put $e$ into $A_1$. If it instead caused $\Phi_e^{A_2}(e)$ to converge to $0$ then we put $e$ into $A_1$.

That worked to find r.e. sets that satisfied one of the requirements, but we soon run into problems if we try to do a single construction using this strategy to satisfy multiple requirements at once. Namely suppose we satisfied one of the requirements by putting $e$ into $A_1$ because we saw that $\Phi_e^{A_2}(e)$ converged and was equal to $0$. But now suppose when trying to satisfy some other requirement we want to add some $a$ to $A_2$ and once we add $a$ to $A_2$, $\Phi_e^{A_2}(e)$ converges to $1$ instead of $0$. We have then destroyed the disagreement between $A_1$ and $\Phi_e^{A_2}$. So we have some conflict between different types of requirements.

How do we decide which requirement gets precedence? The basic idea of of the finite injury priority argument is that we give a priority to each requirement at the beginning of the construction and the requirement with the better priority will always take precedence. So even after we think we have satisfied some requirement there is a chance that at a later stage we will mess it up to satisfy a requirement with better priority. The "finite injury" in "finite injury priority argument" comes from the fact that we set up the construction to ensure that we only mess up a requirement ("injure" it) finitely many times. We do this by ensuring that for each requirement there are only finitely many requirements with better priority and each requirement will only mess up higher priority requirements finitely many times (in Friedberg's argument, only a single time) unless it itself gets messed up again. So the requirement with the best priority messes up worse priority requirements finitely many times then stops, then after that the second best priority requirement messes up the worse priority requirements at most finitely many more times then stops, and so on. Eventually each requirement will never be messed up again.

In the proof of the Friedberg-Muchnik theorem, suppose that a requirement of the form $\Phi_e^{A_2} \neq A_1$ gets messed up by a requirement with better priority. Perhaps we had seen $\Phi_e^{A_2}(e)$ converge to $0$ and then put $e$ into $A_1$ but at a later stage, a better priority requirement put something into $A_2$ and now $\Phi_e^{A_2}(e)$ converges to $1$. We cannot take $e$ out of $A_1$ (we want to keep $A_1$ r.e.) so there may be no way of ensuring $\Phi_e^{A_2}(e) \neq A_1(e)$. However, we can deal with this just by picking a larger number $x_e$ which is not yet in $A_1$ and now wait for $\Phi_e^{A_2}(x_e)$ to converge. Each time the requirement gets injured, we may need to increase the size of $x_e$. But since the requirement only gets injured finitely many times, we will eventually not have to increase $x_e$ any more and then once we satisfy the requirement it will remain satisfied.

This is of course not a complete description of the construction, but that's the main idea.

How does this relate to the confusing part of Friedberg's paper?

The part of Friedberg's paper that confused you is essentially just explaining why only requirements with better priority can injure the requirement that stage $a$ was trying to satisfy.

Further references

As I said, I think there are better places to read about the proof of the Friedberg-Muchnik theorem which will explain it in a more conceptual way with less overwhelming notation and also explain the general concept of finite injury priority arguments and give other examples of finite injury priority arguments for comparison. There are many sources for this, but two that I think might be helpful are:

  • Soare's book Turing Computability: Theory and Applications
  • Hirschfeldt and Downey's book Algorithmic Randomness and Complexity, specifically chapter 2, "Computability Theory"