lambda abstraction a la Arrows

Francois-Rene Rideau fare@tunes.org
Fri, 29 Jan 1999 16:00:22 +0100


On Mon, Jan 04, 1999 at 11:06:23PM +0300, RE01 Rice Brian T. EM2 wrote:
> [lambda abstraction without symbols]
There are many ways to achieve the expressivity of lambda-expressions
without using symbols. See
1) combinatory logic: choose a set of combinators that can generate any
 function (together with function application as an operator),
 the simplest being Schonfinkel's SKI:
   I x = x ; K x y = x ; S x y z = (x z) (y z)
 The downside is that expressions get very hairy and unreadable/unwritable,
 since scoping has to be explicitly maintained in the very structure of
 combinations.
2) lambda-sigma: explicitly use deBruijn indices instead of identifiers;
 you have to systematically shift/unshift them when entering/exiting
 a lexical scope.

The proof that SKI generates all functions is isomorphic (per Curry-Howard),
in the simply-typed case, to the well-known deduction theorem
for propositional calculus (in constructive logic).
The categorical logic formulation of it is also well-known.

See your usual courses on lambda-calculus for an explanation.
See a file named lambda-foo.scm in the Tunes CVS archive,
for an implementation.
Actually, I think it is interesting to know about all these different
points of view on what seems to be the "same" function space;
each of these views also gives insight on the constraints that
implementors have to face when programming pure objects that give good
modularity instead of impure objects to lead to a conceptual mess.

Good luck!

[ "Faré" | VN: Уng-Vû Bân | Join the TUNES project!   http://www.tunes.org/  ]
[ FR: François-René Rideau | TUNES is a Useful, Nevertheless Expedient System ]
[ Reflection&Cybernethics  | Project for  a Free Reflective  Computing System ]
The last good thing written in C was Franz Schubert's Symphony number 9.
	-- Erwin Dieterich <erwin@cvt12.verfahrenstechnik.uni-stuttgart.de>