Hi, 

The next combinator thread (“combinator 6”) will be the proof of the 
(Turing/Church) universality.

Here, I correct the typo error, which was that I forgot the predecessor P in 
the last formula. See below.

It is time to revise, and to ask any question if anything remains unclear.

After the Turing universality, I will give the definition of the first and 
third person “pronouns”, and go toward the notion of Löbian combinator or 
Löbian number, and explain the Curry-Löb paradox. That will be the thread 
Combinator 7.

The main results will be the first and second recursion theorems (or fixed-pint 
theorem):

1) For any combinator F there is a combinator X such that FX = X.
2) For any combinator F there is a combinator X such that F’X' = X.

‘X’ will be a Gödel numbering, or code, of the combinator X.

Bruno




> On 16 Sep 2018, at 12:05, Bruno Marchal <[email protected]> wrote:
> 
> Hi, 
> 
> We will implement the numbers with the combinators. In particular we will 
> emulate Robinson Arithmetic(*) with the combinators. 
> 
> Robinson arithmetic is classical logic +
> 
> 1) 0 ≠ s(x)                           0 is not a successor of any number x
> 2) s(x) = s(y) -> x = y               Different numbers have different 
> successors
> 3) x = 0 v Ey(x = s(y))               Each number has a predecessor
> 4) x+0 = x                            Adding nothing keep a number invariant
> 5) x+s(y) = s(x+y)                    Recursion equation of addition
> 6) x*0=0                                      Multiplying by 0 gives 0
> 7) x*s(y)=(x*y)+x                     Recursion equation of multiplication
> 
> On the right I have put the intended intuitive semantic.
> 
> Usually I use the "Church numerals”, but I will use those of Barendrecht. 
> Smullyan’s book convinced me of their elegance, and it gives a nice 
> opportunity to use our new recursion tools, as they strikes the eyes in line 
> “5)” and “7)”. Isn’t it? “+” is defined from itself. “*” also. 
> 
> 
> Barendrecht's Numerals
> 
> Definitions.
> 
> The number 0 is defined by I, that is SKK, but I will abbreviate it by I.
> The successeur function is defined by the combinator Vf. V is the Vireo,
> Vxyz = zxy. f is KI. We have seen that V = BTC (and that B = S(KS)K, …). I 
> mean V is a combinator (a combination of K and S), and it does what it does 
> (that circular permutation of its argument). Reread previous post if 
> necessary.
> 
> f is the “logical” abbreviation for false, that is KI, i.e. K(SKK), as 
> defined  in the logical interlude.
> 
> Does it work? 
> 
> We have that 
> 
> 0 = I
> 1 = VfI               which remains stable, as V has not enough of its 
> “arguments”.
> 2 = Vf(VfI)   idem
> 3) = Vf(Vf(VfI)       It looks everything is fine and (by induction) will 
> remain fine.
> Etc.
> 
> So a number n, which is defined by s(s(s(s(…(0))…), with n “s“ in, or by, 
> Robinson Arithmetic is defined, or represented by 
> 
>                       Vf(Vf(Vf(Vf( …(I))…)            with n “Vf”.
> 
> It will be handy to have a predecessor. 
> You might try to find one by yourself before reading what follows, but there 
> is no obligation. What is obligatory is to verify that it works. Barendrecht 
> proposes Tf. (Where T is the “trush”: Txy = yx).
> 
> OK, but does it works? We need to verify this. So let us try it on 0, just to 
> see!
> 
> TfI = If = f. 
> 
> Well, that is OK. All we need is that it does not give some number, and 
> giving f is not so bad, almost an “error message” :)
> 
> I will abbreviate Vf(Vf(Vf(Vf( …(I))…) by n (hoping the underline will not 
> disappear).
> 
> We have tested the predecessor Tf on 0, now we must test it on some 
> successor, that is some Vfn 
> 
> Tf(Vfn)
> Vfnf          (Vfn)f  for the beginners
> ffn           f is KI, KIxy = y, revise the preceding posts if needed)
> n
> 
> It works!
> 
> Now, to implement “x + y” we need an ability to distinguish between a null 
> and a non null number, to decide between using axiom “4)” or “5)”.
> 
> So we need a combinator Z which answer truth, i.e t, that is K, when given 0, 
> that is I,  and gives KI when given a non null n. 
> 
> We want Z0 = ZI = K, and Zn = KI in case n is different from 0.
> 
> Barendregt's solution: Z = Tt.
> 
> We have already met Tt. It played the role of the “OR” in logic, and works 
> very well also to test if a number is null or not:
> 
> TtI = It = t
> Tt(Vfn) = Vfnt = tfn = f.
> 
> Let me sum up:
> 
>  t = K
>  f = KI
> 
> 0 = I
> s = Vf   (successor)
> p = Tf    (predecessor)
> 
> Z = testing “nullness” = Tt.
> 
> And I recall that, thanks to t = K and f = KI, we have that 
> 
>       if A then B else C
> 
> becomes simply ABC, as tBC = B, and fBC = C.
> 
> ===================
> 
> ADDITION
> 
> 
> Now, we have all we need to program addition. 
> 
> Addition is defined by its recursive equation (cf above)
> 
> 4) x+0 = x                            Adding nothing keep a number invariant
> 5) x+s(y) = s(x+y)                    Recursion equation of addition
> 
> I replace “5)" by
> 
> 5’) x+y = s(x + (py))
> 
> which is more suitable here.
> 
> So a (recursive) program, for adding x + y,  could be
> 
> If y = 0 then output x else output s applied to the addition of x and py.
> 
> I will use “a" for the combinator doing the addition. It is the one we are 
> searching.
> 
> axy = if (Zy) then x else  (Vf(ax(py)))
> 
> And thus (cf: if A then B else C = ABC. I wrote (Zy)x = Zyx, as always.
> 
> axy = Zyx(Vf(ax(py)))
> 
> Do you see this?  You should read it:  If Zy then x else Vf(ax(py)).
> 
> Of course, we need to solve the recursion. You might need to revise the post 
> on Recursion (Combinator 4).
> 
> 1) renaming of the variables:
> 
> azy = Zzy(Vf(ay(pz)))
> 
> 2) There is a combinator A such that (a is replaced by x)
> 
> Axyz = Zzy(Vf(xyz))


Typo error. Read instead

Axyz = Zzy(Vf(xy(pz)))





> 
> Indeed A = [x][y][z]Zzy(Vf(xyz))


Same here:


A =  = [x][y][z]Zzy(Vf(xy(pz)))


> 
> Then, the adding combinator a is just the fixed point of A:
> 
> a = YA = Y[x][y][z]Zzy(Vf(xyz))

Same here:

a = = YA = Y[x][y][z]Zzy(Vf(xy(pz)))


> 
> Done.
> 
> We know that the paradoxical combinator does well its job, so let us test the 
> recursion directly, on 2+2=4, say:
> 
> a 2 2 = a(Vf(VfI))(Vf(VfI) 
> = Z(Vf(VfI))(Vf(VfI))(Vf (a (Vf(VfI)) (p (Vf(VfI))))
> = Z(Vf(VfI))(Vf(VfI))(Vf (a (Vf(VfI)) (VfI)))
> = Vf(a (Vf(VfI)) (VFI))    as Vf(VfI) is not null.
> = Vf(Z(VfI) (Vf(VfI)) (Vf(a (Vf(VfI)) (p (VfI)))
> = Vf(Z(VfI) (Vf(VfI)) (Vf(a (Vf(VfI)) I))
> = Vf(Vf (a (Vf(VfI))I)
> = Vf(Vf(ZI(Vf(VfI))(a <whatever>)    “whatever is not needed, as ZI = t.
> = Vf(Vf(Vf(VfI)))
> = 4 
> 
> It works well!
> 
> Exercise:
> 
> Find combinators doing the following task:
> 
> Multiplication
> Exponentiation
> Parity testing (is a number even or odd)
> Test of which number is is greatest.
> 
> Solution is the next post.
> 
> Later, in combinator 6, we will prove the Turing universality of the 
> SK-combinator. What is still lacking is the MU operator, allowing the 
> unbounded search on numbers verifying some decidable property. I will revisit 
> and re-explain the definition of Turing universality before proving it (of 
> course).
> 
> Time to revise all the posts, as the material accumulates. I hope that those 
> who have read the posts see how all this is very simple (compared to the 
> mathematics needed for quantum mechanics, for example). If you find anything 
> difficult here might mean you have not grasped the notation. Yesterday, some 
> student of mine showed that they have still difficulties to decompose a 
> combinator in two. In a test, they saw SI(xx) as S on I(xx), where SI(xx) is 
> (SI)(xx), that is SI applied on xx. Eventually, add the left parentheses if 
> needed, then suppress them as it will become unreadable if not.
> 
> Good Sunday!
> 
> Bruno
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>> On 10 Sep 2018, at 19:08, Bruno Marchal <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Hi,
>> 
>> 
>> All right, now the almost last fundamental result before showing the Turing 
>> Universality of the SK-combinators (or simply combinators).
>> 
>> (Except for an important but easy arithmetical interlude).
>> 
>> We have solved the following problem: to find a combinator A, i.e. a 
>> combination of S and K, such that, in virtue of the two laws (Kxy =x, Sxyz = 
>> xz(yz)), we have:
>> 
>> Axyz = xy(yxz)      (or any other combinations).
>> 
>> Indeed A is given by the ABF algorithm (or the others):
>> 
>> A = [x] [y] [z] xy(yxz).
>> 
>> The new problem of the day is, ‘---can you find a combinator A such that
>> 
>> Ax = x(Ax),
>> 
>> or
>> 
>> Axy = xAy(yA),
>> 
>> or similar?
>> 
>> You see the difficulty? The unknown combinator A appears at both sides of 
>> the equation. It is not clear at first sight if such a combinator A can even 
>> exist.
>> Such an equation is called a recursion equation. A is somehow defined in 
>> term of itself.
>> 
>> The fundamental result explained here is that the solution to the recursion 
>> equation always exists! 
>> 
>> So can we find it? I will again prove that such equations have always a 
>> solution by providing an algorithm which gives the solution (and proving 
>> that the algorithm is correct).
>> 
>> You will recognise a variant of the little song-question that I have used 
>> many times: “If Dx gives xx, what gives DD?”, which also appeared when we 
>> defined the Mocking Bird M (Mx gives xx). And we know the trouble when we 
>> apply M to itself, which is that MM gives a combinator without normal form, 
>> or unstable. The two laws keep being triggered and MM does not halt on some 
>> normal or stable combinator.
>> 
>> So, we might expect that the solution of the recursion equation have not 
>> necessarily a normal form (i.e. are stable). But that can be OK, given that 
>> our goal consists in implementing the computations, including the infinite 
>> computations (the processes) and what is an infinite  computation but an 
>> unstable combinators?
>> 
>> 
>> In Smullyan's book (How to Mock a Mocking Bird?) Smullyan is very quick on 
>> this, and he is right, because it is simpler that way. He made his hero, 
>> Craig, particularly “alert” that day, and Craig found very quickly two ways 
>> to solve the problem. One using a “sage bird”, and one “from scratch”.
>> 
>> The “sage birds” are known in the old literature as the “paradoxical 
>> combinators”, and are known in the modern literature as the “fixed point 
>> combinators”.
>> 
>> I have not talked much about them, and so I will give the method “from 
>> scratch” first. Then I will use it to define the sage, paradoxical, birds, 
>> and the relation with the fixed points theorems, and give the first method, 
>> which will be more efficacious and provide shorter solutions.
>> 
>> Instead of reasoning on arbitrary combinations, let us reason with the 
>> particular exercise above: to find A such that
>> 
>> Axy = xAy(yA).
>> 
>> I will first rename the variable x -> y, and y -> z. The reason for this is 
>> that I want x playing some role related to A.
>> 
>> 
>> Ayz = yAz(zA).  (This change nothing of course. OK?)
>> 
>> Then I replace A by x. And we know that there is a combinator A’, such that
>> 
>> A’xyz = yxz(zx).  (Which is the right hand side above with A replaced by x).
>> 
>> A’ has one more variable than A, and A, being replaced by x in the right 
>> hans side has become into an argument.
>> 
>> We know that such combinator A’ exist, because we can eliminate the variable:
>> 
>> A’ = [x][y][z]yxz(zx).
>> 
>> Then we give A’ to as sage bird, and that gives the (first) solution!
>> 
>> But wait! We don’t have yet studied the sage bird yet!
>> 
>> So, in the method from scratch, instead of A’, we use A’’, which is exactly 
>> like A’ except that it duplicates the variable x:
>> 
>> A’’xyz = y(xx)z(z(xx))
>> 
>> Of course A’’ exists too:
>> 
>> A’’ =  [x][y][z]y(xx)z(z(xx)). 
>> 
>> You can, or not, compute this at your time and convenience (if you are 
>> masochist), but you need only to understand that this expression defined 
>> some precise combinator (with extensional identity, that is up to 
>> syntactical differences).
>> 
>> Now, apply A’’ on itself, taken as first argument: you get
>> 
>> A’’A’’yz = y(A’’A'')z(z(A’’A'’))
>> 
>> And that solves the problem! The solution is A’’A’’, as you can see. 
>> With  A = A’’A’', we do have Ayz : yAz(zA), or, changing the variable again: 
>> Axy = xAy(yA), like we wanted.
>> 
>> Now the task of eliminating z, y and x in y(xx)z(z(xx)) is tedious. I will 
>> not illustrate it. 
>> 
>> 
>> So let us search a better solution, and for this we need to use Smullyan’s 
>> Sage Birds, or Curry's paradoxical combinators.
>> 
>> 
>> Definition. A combinator X is a fixed point of a combinator F if FX = X. 
>> (Smullyan says that F is fond of X).
>> 
>> Crazily enough all combinators have a fixed point. A student thought, at 
>> first,  that if that is true, a combinator should not be able to mimic a 
>> translation in the plane (say), as a translation is a typical transformation 
>> having no fixed point, unlike a rotation. But of course that does not 
>> follow. If a combinator mimic a translation in the plane, his fixed point 
>> will just denote an element which is not representing an element of the 
>> plane.
>> 
>> How is that possible? By the result above we know that 
>> 
>> Ax = x(Ax)
>> 
>> admits a solution. We will need it, and thus will derive it with the method 
>> “from scratch”. But having that solution A, we can see now that for any F 
>> 
>> AF = F(AF)
>> 
>> that is,
>> 
>> F(AF) = AF.
>> 
>> So AF is the fixed point of F, and we see that A is a combinator which gives 
>> us, for any combinator F, its fixed point AF. 
>> A is called a paradoxical combinator, or the fixed point combinator, or a 
>> sage bird!
>> 
>> OK?
>> 
>> So let us derive some precise paradoxical combinators, and search with them 
>> some combinator fixed point.
>> 
>> The paradoxical combinator(s) is very often named Y, (Smullyan uses the 
>> majuscule greek Theta), and is defined by its recursion equation:
>> 
>> Yx = x(Yx).     
>> 
>> I hope you directly see that x(Yx) = Yx, so that Yx is a fixed point of x.
>> 
>> Let us solve the recursion equation Yx = x(Yx) with the method from scratch.
>> 
>> 1) renaming of the variable Yy = y(Yy)
>> 2) Y (the unknown) is replaced by xx at the right: y(xxy), and that gives 
>> our A’’, which happens to be a celebrity: U, a combinator discovered by 
>> Turing:
>> 
>> Uxy = y(xxy)
>> 
>> Let us find it.
>> 
>> U = [x][y] y(xxy)
>> = [x]  [y]y(xxy)
>> = [x] (S [y]y [y]xxy)  (by rule “F)”)
>> = [x] (SIxx)  (by rule “A)" and rule “C)”)
>> = (S [x]SI [x]xx)
>> = (S (K(SI)) M)
>> 
>> Verification:
>> Uxy = S(K(SI))Mxy
>> = K(SI)x(Mx)y (Law 2)
>> = SI(Mx)y  (Law 1)
>> = Iy(Mxy) (Law 2)
>> =y(xxy)  OK.
>> 
>> SI is Smullyan’s Owl, Oxy =  SIxy = Iy(xy) =  y(xy), so  U can be written 
>> S(KO)M.
>> O = SI = S(SKK).
>> 
>> You would find U = BOM when using the ABCDEF algorithm.
>> Let us verify BOMxy = O(Mx)y (B is the blue bird (Bxyz = x(yz))))
>> = O(xx)y = y(xxy).
>> 
>> So Y = A’’A’’ = UU = BOM(BOM) = S(KO)M(S(KO)M).
>> 
>> But note that we could have find it also by using the Lark L (Lxy = x(yy)).
>> LOxy = O(xx)y = y(xxy).
>> 
>> So U = (also) LO, and Y = LO(LO). Not to be confused with the TV series 
>> “Hello Hello” (grin).
>> 
>> Another simple fixed point combinator is provided by SLL. Indeed SLLx
>> = Lx(Lx), and I let you show that this is always a fixed point of x.
>> 
>> Now, to find a fixed point of a combinator F, we just need to apply Y on F. 
>> YF is a fixed point of F.
>> 
>> Now, let me explain the first method to solve the recursion axiom, with the 
>> example above. We were searching A such that Axy = xAy(yA).
>> 
>> 1) we rename the variable:
>> Ayz = yAz(zA)
>> 2) we substitute A by x, and consider the corresponding combinator A’
>> A’xyz = yxz(zx)
>> 3) the solution is given by YA’. Indeed YA’ = B such that A’B = B (A’ is 
>> fond of B, B is fixed point of A’), so, let us replace x by B just above (B 
>> is just a metavariable here, not the blue bird):
>> 
>> A’Bxyz = yBz(zB)
>> 
>> But A’B = B, so
>> 
>> A’Bxyz = Bxyz = yBz(zB). And we see that B, the fixed point of A’, is the 
>> solution of the recursion equation.
>> 
>> ============== examples/exercices ==========
>> 
>> Exercise 1: find a bird A such that Ax = A
>> 
>> So A should be a combinator such that A applied on any bird gives itself (I 
>> will use “bird” as a shorter name for combinator).
>> 
>> Solution: 
>> 1) variable renaming: Ay = A
>> 2) A’xy =x
>> 3) A’ = [x][y]x = K
>> 4) so A = YK = BOM(BOM)K
>> 
>> Verification BOM(BOM)Kx = O(M(BOM))Kx, I recall that Oxy = y(xy), so that 
>> gives
>> K(M(BOM)K)x = M(BOM)K = BOM(BOM)K. It works.
>> 
>> Of course, here I have used the fact that Mx = xx.
>> 
>> A shorter and simpler verification is by using similarly directly Y, defined 
>> by its recursion equation Yx = x(Yx):
>> 
>> YKx = (YK)x = K(YK)x = YK. YK applied on any x gives YK.
>> 
>> 
>> Exercice 2: find a bird A such that 
>> 
>> Ax = xA 
>> 
>> (A applied on any x gives x applied to itself).
>> 
>> Solution:
>> 1) variable renaming Ay = yA
>> 2) A’xy =yx
>> 3) A’ = T (the trush T which is the elementary permuter Txy = yx)
>> 4) Thus A = YT
>> 
>> Verification YTx = T(YT)x = x(YT). It works!
>> 
>> Exercise 3: Find A, and/or verify the solution
>> 
>> Ax = Ayx    (sol: A = YC)
>> Ax = Axx   (sol: A = YW)
>> Ax = A(xx)  (sol: A = YL)
>> Ax = AA     (sol: A = Y(SBK))
>> 
>> =====
>> What if we search now the solution of Ax = x(Ax) with the first method, that 
>> is what gives the first method for the paradoxical bird?
>> 
>> 1) renaming: Ay = y(Ay)
>> 2) A’xy = y(xy)
>> 3) so A’ is the owl O, and so
>> 4) A = YA’ = YO. 
>> 
>> We see that if Y is a paradoxical bird, then Y applied to an owl O is again 
>> a paradoxical combinator. We can also see that all fixed point A of O is a 
>> paradoxical combinator: if OA = A, then Ax = OAx = x(Ax).  So, a sage bird, 
>> alias a paradoxical or fixed point combinator can also be defined by being a 
>> fixed point of the combinator O. Note the resemblance between O and U
>> 
>> Oxy = y(xy)
>> Uxy = y(xxy).
>> 
>> Here is a small gallery of paradoxical birds:
>> 
>> LO(LO)
>> UU
>> BOM(BOM)
>> SLL
>> BML
>> BM(BWM)
>> BM(RMB)
>> BM(CBM)
>> 
>> A famous one is the original one by Curry: 
>> 
>> WS(BWB). 
>> 
>> It is, I think, the first one. It’s Curry’s Paradoxical Combinator.
>> 
>> OK? Please work all this out by hands, pen and papers. Be sure nothing 
>> remains unclear, as now, we have all the pieces of the puzzle to prove that 
>> the SK theory is Turing complete, or said differently, that the combinators 
>> provides a Universal Machinery. 
>> 
>> The only things which are still missing to show this are … the Numbers.
>> 
>> So the next chapter is simply arithmetic, seen through the combinators, like 
>> we have already seen how to implement elementary logic, entirely with the 
>> fact that if we use K for true and KI for false, the combinator ABC 
>> implements if "A then B else C”. 
>> 
>> A last thing, why “paradoxical”? You can imagine that the fact that all 
>> recursion equations have solutions will make the combinators very powerful, 
>> and indeed so much powerful that its mathematics can lead to contradiction 
>> and paradoxes very easily. Church ’s initial theory, and Curry's one where 
>> shown inconsistent, by Kleene and Rosser, and attempts in that direction are 
>> very rich, leads rather quickly to category theory and many interesting 
>> things, but out of the direct scope of machine theology. I might say a bit 
>> more if the opportunity happens to give the Curry-Löb’s paradox, very close 
>> to the usual “proof" of the existence of Santa Klaus.  
>> There are many subject which I don’t talk about, like the semantics of 
>> combinator theories (Scott Models), or the ultra large field of typed 
>> combinators. Combinators are so powerful that sometimes the computer 
>> scientist, wanting to keep a bit of control, types the combinators, and 
>> suddenly not all combinators can be applied to any combinators, the variable 
>> are declared, and things get secure. The price is the loss of Turing 
>> universality, but that is necessary when solving complex particular 
>> problems. Not all man made universal machine are as lucky as Curiosity and 
>> Opportunity, to walk around freely on Mars and take some initiative ...
>> 
>> Bruno
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Everything List" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected] 
>> <mailto:[email protected]>.
>> Visit this group at https://groups.google.com/group/everything-list 
>> <https://groups.google.com/group/everything-list>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Everything List" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/everything-list 
> <https://groups.google.com/group/everything-list>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Everything List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/everything-list.
For more options, visit https://groups.google.com/d/optout.

Reply via email to