Pi(j) = Pj(j), for each j
= mci(prog(j),j)
where mci(P,x) is the meta-circular interpreter.
. \
. \
. \
. \
Pi --------\---- PPi(k) ---
. | \ ¦
. | \ ¦
. | f \ ¦
. | \ ¦
. \|/ \ ¦
. V \¦
Pk ----------------\------
. \
. \
. \
. \
Pk(j) = f(Pi(j)), for each j
Thus
f(PPi(k)) = Pf(Pi(k)) = PPk(k) = PPi(k)
-------- ----
and
V = prog * PPi(k)(x)
From a programming point of view,
this construction is not very interesting:
the viral "nucleus" PPi(k)(x) and the programs Pf(i)
do not inspect programs which contain them,
or contain other programs,
but compute some simple numeric function like
f(i) = i + r , where Pr = prog
without using the fact that these numbers index programs.
The fixed point theorem
("f)($n) Pf(n)(x) = Pn(x)
is a special case of Kleene's recursion theorem:
("Y)($n) Y(n,x) = Pn(x)
for Y(y,x) = Pf(y)(x).