References for further reading are included at the ends of appropriate chapters, for the reader who wishes to go deeper. Some chapters on special topics are included after the initial basic chapters. This book is essentially an updated and re-written version of [HS86]. Those parts of [HS86] which are still relevant have been retained here with only minor changes, but other parts have been re-written considerably.
|Published (Last):||9 December 2015|
|PDF File Size:||17.19 Mb|
|ePub File Size:||2.21 Mb|
|Price:||Free* [*Free Regsitration Required]|
This is the same general convention left-associativity as for multiple application in lambda calculus. Reduction in combinatory logic[ edit ] In combinatory logic, each primitive combinator comes with a reduction rule of the form P x It is in this way that primitive combinators behave as functions.
Or put another way, x is applied to y inside the environment z. We say the terms are extensionally equal. Extensional equality captures the mathematical notion of the equality of functions: that two functions are equal if they always produce the same results for the same arguments. In contrast, the terms themselves, together with the reduction of primitive combinators, capture the notion of intensional equality of functions: that two functions are equal only if they have identical implementations up to the expansion of primitive combinators when these ones are applied to enough arguments.
There are many ways to implement an identity function; S K K and I are among these ways. S K S is yet another. We will use the word equivalent to indicate extensional equality, reserving equal for identical combinatorial terms. A more interesting combinator is the fixed point combinator or Y combinator, which can be used to implement recursion. This process is also known as abstraction elimination. This definition is exhaustive: any lambda expression will be subject to exactly one of these rules see Summary of lambda calculus above.
This is typical. E is clearly equivalent to K T[E] if x does not appear free in E. The first two rules are also simple: Variables convert to themselves, and applications, which are allowed in combinatory terms, are converted to combinators simply by converting the applicand and the argument to combinators.
It is rules 5 and 6 that are of interest. Rule 5 simply says that to convert a complex abstraction to a combinator, we must first convert its body to a combinator, and then eliminate the abstraction. Rule 6 actually eliminates the abstraction. E x is the function which takes an argument, x, and applies the function E to it; this is extensionally equal to the function E itself.
It is therefore sufficient to convert E to combinatorial form. One-point basis[ edit ] There are one-point bases from which every combinator can be composed extensionally equal to any lambda term.
The Iota programming language uses X as its sole combinator. They were also used by Curry , and much later by David Turner , whose name has been associated with their computational use.
Lambda-Calculus and Combinators An Introduction pdf
Lambda-Calculus and Combinators: An Introduction