Talk:SKI combinator calculus

message: An external link says:
: Drakos, Nikos, and Moore, Ross (1993-99) "The SKI Combinator Calculus as a Universal System."
when, in fact, Drakos and Moore are authors of the LaTeX2HTML-software used to generate the linked page. Changing to Mike O'Donnell who appers to be the author. 89.27.19.182 (talk) 19:23, 15 February 2008 (UTC)
thread_title:  Authorship 

message: Lambda calculus gives rise to a notion of cartesian closed category. S and K can be defined generally for such a category as follows: Given a monad (T,η,µ) on C, define the forgetful functor U : Kl(T) → C (where Kl(T) is the Kleisli category of the monad T) by UA = A, Uf = μTf. Then K and S arise as, respectively, η and the morphism part of U for the monad —A for all objects A (the covariant exponential functor for A : C). (The "morphism part of U" is the operation called "bind" or ">>=" in functional programming languages with monads.)
I would add this as an extra section, but it would probably be considered original research because I came up with this description from memory (with some help from Abstract and Concrete Categories by Adámek et al) and I can't find any citations for its content. Also I'm not sure it explains how S can be a morphism (or maybe natural transformation) in such a category. Can anyone help here? Hairy Dude (talk) 21:10, 23 October 2009 (UTC)
thread_title:  K and S arising from the exponential monad on a cartesian closed category 

message: In the article, it says that SKI combinator calculus is a computational system that may be perceived as a reduced version of untyped Lambda calculus. This is indeed a good way to think about it, and it is also the way it is usually taught, but historically, Combinator Calculus actually predates Lambda Calculus.
Because of the way Combinator Calculus is usually taught, there is a common misconception that it is based on Lambda Calculus. It would be nice to explicitly spell out somewhere that this is in fact not true. In this article, the only indication of this is the "may be percieved" portion of the sentence I quoted above.
It is implicit, of course, in the publication dates of the papers in the references section of the Lambda calculus and Combinatory logic pages, but it would be nice to make it more explicit.
Could someone who actually speaks English natively take a stab at this?
--jwmittag (talk) 13:37, 16 September 2010 (UTC)
replies: text: I'll have a stab at this tomorrow, but in the meantime I note that this article has no primary references (e.g. the names Curry and Schönfinkel are entirely absent). So this "implicit" information isn't really present in this article right now. Hairy Dude (talk) 00:20, 19 September 2010 (UTC)

text: I was wondering the same sort of thing: who created the calculus and when. (Jkauzlar (talk) 00:25, 1 February 2011 (UTC)
thread_title:  Historical timeline of SKI Calculus and Lambda Calculus 

message: These esoteric languages, Unlambda and Lazy K, are based in S K I calculus, maybe they deserve to be included in this article.
Patillotes (talk) 19:35, 17 June 2011 (UTC)
thread_title:  Unlambda and Lazy K references 

message: in https://groups.google.com/a/urbit.org/forum/#!topic/dev/GM3xsVNpxXQ 75.130.143.161 (talk) 13:39, 16 January 2020 (UTC)
thread_title:  The paragraph about Nock's connection to S and K is disputed 

message: Would it be worth linking to current implementations of SKI combinator calculus?  I know nothing of SKI, very little of Lambda calculus, and my functional programming experience is currently Clojure, but I am very interested in a minimal and complete implementation of something like SKI or minimal lambda calculus syntax.  I would happily link to the implementations I've found, but it's my feeling that this is best handled by an expert in lambda calculus, functional programming or SKI.  Would people be against having implementations being linked to?  This is an exciting development in functional languages, and I'd love for people to easily be able to go to a given (hopefully open source) implementation of the language spec.
Stilroc (talk) 17:03, 10 July 2012 (UTC)
thread_title:  Implementations 

message: I wonder if it would be worth adding the algorithm for converting lambda expressions to SKI expressions.  What I use to eliminate a single lambda is:
:1. Convert \lambda x\,.\,x to I.
:2. Convert \lambda x\,.\,y to K~y if y is either a free variable other than x, or one of the combinators S, K, I.  (As an optional optimization, also apply this rule if y is a complex expression in which x is not a free variable.)
:3. As an optional optimization, convert \lambda x\,.\,f x to f if x does not appear as a free variable in f.  (\eta equivalence)
:4. Given \lambda x\,.\,a~b, recursively convert \lambda x\,.\,a and \lambda x\,.\,b to A and B respectively, and convert \lambda x\,.\,a~b to S~A~B.
Then apply this from inside to outside, and the result should be an SKI expression with the same free variables as the original lambda expression.
As examples:
The composition operator is
: \begin{align}
\circ & = \lambda f~g \,.\, \lambda x\,.\,f (g~x) \\
& = \lambda f~g\,.\,S~(K~f)~g \\
& = \lambda f \,.\, S~(K~f) \\
& = S~(K~S)~K.
\end{align}
For the boolean operator examples:
: \begin{align}
T & = \lambda x~y\,.\,x \\
& = \lambda x\,.\,K~x \\
& = K;
\end{align}
: \begin{align}
F & = \lambda x~y\,.\,y \\
& = \lambda x\,.\,I \\
& = K~I;
\end{align}
: \begin{align}
\vee & = \lambda x~y\,.\,x~T~y \\
& = \lambda x\,.\,x~T \\
& = S~I~(K~T) \\
& = S~I~(K~K);
\end{align}
: \begin{align}
\wedge & = \lambda x~y\,.\,x~y~F \\
& = \lambda x\,.\,S~x~(K~F) \\
& = S~S~(K~(K~F)) \\
& = S~S~(K~(K~(K~I)));
\end{align}
: \begin{align}
\lnot & = \lambda x\,.\,x~F~T \\
& = S~(S~I~(K~F))~(K~T) \\
& = S~(S~I~(K~(K~I)))~(K~K).
\end{align}
I don't have a reference for this as I came up with this independently; but I seriously doubt this could be new, and in fact I see a previous reference to it on this Talk page.
(Also these are possibly some good examples why SKI combinator calculus isn't really a practical programming language, as simple lambda expressions tend to balloon to insanely large and indecipherable SKI expressions.)
Daniel Schepler (talk) 20:46, 11 December 2014 (UTC)
thread_title:  Describe abstraction elimination algorithm? 

message: I note that this author has the same bad habit that I have: saying "note that X" rather than simply saying "X".
Note that, for all trees x and all trees y, SKxy will always evaluate to y in two steps, Ky(xy) = y, so the ultimate result of evaluating SKxy will always equal the result of evaluating y. We say that SKx and I are "functionally equivalent" because they always yield the same result when applied to any y.
Note that from these definitions it can be shown that SKI calculus is not the minimum system that can fully perform the computations of lambda calculus, as all occurrences of I in any expression can be replaced by (SKK) or (SKS) or (SK whatever) and the resulting expression will yield the same result. So the "I" is merely syntactic sugar.
The "note that" is simply unnecessary, and the article would be improved by its removal.
Paul Murray (talk) 13:46, 1 March 2020 (UTC)
thread_title:  Note That 

message: This section was not motivated, has symbols not defined in this article, and has no text description.
It is only useful to those who already know what it means. Chris2crawford (talk) 00:10, 18 May 2020 (UTC)
thread_title:  Recursive parameter passing and quoting K=λq.λi.q