The Lambda Calculus
plato.stanford.edu
plato.stanford.edu
http://www.cse.chalmers.se/research/group/logic/TypesSS05/Ex... (also covers typed lambda calculus AFAIR)
One of the dominant modeling paradigms in formal semantics (e.g. understanding the meaning of human language) is built around a typed lambda calculus called Montague Semantics (see http://plato.stanford.edu/entries/montague-semantics/ )
The basic idea of MG (and CCG) is to treat lexical items ("words") as function in the lambda calculus, and use higher order functions to compose these lexical functions, yielding truth conditions in a logical language (typically anything from predicate logic, over intensional or two-sorted type logic, to even higher order logic, dynamic logic, probabilistic logic, etc.)
Some of the more interesting extensions of traditional MG are introduced by Combinatorial Categorial Grammar, which, you guessed it, uses combinators to enable compositional analyses of lexical items even in complex syntactic constructions. One more thing that is very interesting is that continuation passing style transformations on these combinators and lexical functions seems to be rather effective! Read Barker 2004 for an overview.
It's a very interesting field of study, but almost entirely academic. There is very little commercial interest nowadays, as everybody is all about statistical NLP.
The importance of systems like Montague Semantics are to kind of scope out what sort of thing we need to be able to model language in the abstract.
Statistical NLP is definitely way better for building engineering systems that are deployed to accomplish particular tasks.
Oh, how wrong we were. Natural language (and human thought for that matter, because ultimately, AI and NLP might be two facets of the same problem) is so much more complicated than we imagined.
Researching human language and thought gives us insight not only sufficient to engineer interactive systems, but also to understand the human condition as a whole. Just take the entire discussion about rigid designators, and naming across possible worlds in intensional logics (read "Naming and Necessity" by Saul Kripke.) It is but one of the ways in which the need for a good formal approach to language resulted in an amazing philosophical discussion that isn't just about models, but our understanding of the world. Ultimately, natural language semantics can quickly transcend into deep philosophy. It sometimes takes me completely by surprise, actually :-)
http://useless-factor.blogspot.com/2007/04/thoughts-on-churc...
That $10 also gets you nice pdfs of some really excellent articles on a very large range of philosophical topics (I mean it is the SEP, after all). A worthwhile use of ten bucks, IMO. (I used to work for Zalta, but I'd have and express the same high opinion of the SEP regardless.)
Plenty of materials out there, it might help you to learn a Lisp dialect, Scheme is excellent and closest to the lambda calculus.
I had never noticed how intension, used here in "intensional definition", was a different word than intention. I wonder what percentage of people who looked at this stuff outside a formal classroom haven't been confused by this?
http://matt.might.net/articles/compiling-up-to-lambda-calcul...
See also: http://en.wikipedia.org/wiki/Fixed-point_combinator#Y_combin...
Indirectly, because their language supports features that came about as a result of this? Almost everyone.
It's kind of like asking what percentage of programmers use binary arithmetic.
The lambda calculus forms the backbone of most theories of programming languages. Functional programmers use enriched forms of it directly, but all others, at least the useful ones, do make use of lambda-calculus techniques.
The LC demarcates the border between high and low-level languages. High-level programming languages have reducible expressions, low-level ones are flat. HLPLs have notion of heirarchical variable scope, within which some variables are "bound" while others are "free" and escape to a parent environment; while LLPLs often have a flat dictionary of variables, if at all.
The lambda-calculus can also be higher-level than mainstream languages. Most PLs treat functions with identical bodies as different, due to name/pointer inequality. In the LC, two forms are equal if they reduce to the same basic form, and names of bound variables are insignificant.
I can't recall where I first read this conjecture (booze; mobile).