Mathematically, the two forms are equivalent as far as I can tell. For any U that contains A, you can rewrite it to U=U’(A). If A is a part of U, then in order to proof things about U, A would have to simulate or proof things about itself, which leads to all kinds of problems. However, if A knows that U=U’(A), it can consider different choices x in U’(x) without these problems.
For any U that contains A, you can rewrite it to U=U’(A).
...In many different ways. For example, you could rewrite it to a U’ that ignores its argument and just repeats the source code of U. Or if U contains one original copy of A and one slightly tweaked but logically equivalent copy, your rewrite might pick up on one but not the other, so you end up defecting in the Prisoner’s Dilemma against someone equivalent to yourself. To find the “one true rewrite” from U to U’, you’ll need the sort of math that we’re developing :-)
Also, do you mean U()=U’(A) (dependence on source code) or U()=U’(A()) (dependence on return value)? There’s a subtle difference, and the form U()=U’(A) is much harder to reason about, because U’(X) could do all sorts of silly things when X!=A and still stay equivalent to U when X=A.
Mathematically, the two forms are equivalent as far as I can tell. For any U that contains A, you can rewrite it to U=U’(A). If A is a part of U, then in order to proof things about U, A would have to simulate or proof things about itself, which leads to all kinds of problems. However, if A knows that U=U’(A), it can consider different choices x in U’(x) without these problems.
...In many different ways. For example, you could rewrite it to a U’ that ignores its argument and just repeats the source code of U. Or if U contains one original copy of A and one slightly tweaked but logically equivalent copy, your rewrite might pick up on one but not the other, so you end up defecting in the Prisoner’s Dilemma against someone equivalent to yourself. To find the “one true rewrite” from U to U’, you’ll need the sort of math that we’re developing :-)
Also, do you mean U()=U’(A) (dependence on source code) or U()=U’(A()) (dependence on return value)? There’s a subtle difference, and the form U()=U’(A) is much harder to reason about, because U’(X) could do all sorts of silly things when X!=A and still stay equivalent to U when X=A.