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)
go back 1 2 3 4 5 author
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).