edits
[lambda.git] / topics / _week5_simply_typed_lambda.mdwn
index cfadf7a..b1b4d93 100644 (file)
@@ -2,10 +2,10 @@
 
 ##The simply-typed lambda calculus##
 
-The untyped lambda calculus is pure.  Pure in many ways: all variables
-and lambdas, with no constants or other special symbols; also, all
-functions without any types.  As we'll see eventually, pure also in
-the sense of having no side effects, no mutation, just pure
+The untyped lambda calculus is pure.  Pure in many ways: nothing but
+variables and lambdas, with no constants or other special symbols;
+also, all functions without any types.  As we'll see eventually, pure
+also in the sense of having no side effects, no mutation, just pure
 computation.
 
 But we live in an impure world.  It is much more common for practical
@@ -22,26 +22,48 @@ language.  If so, if it makes sense to gather a class of expressions
 together into a set of Nouns, or Verbs, it may also make sense to
 gather classes of terms into a set labelled with some computational type.
 
+To develop this analogy just a bit further, syntactic categories
+determine which expressions can combine with which other expressions.
+If a word is a member of the category of prepositions, it had better
+not try to combine (merge) with an expression in the category of, say,
+an auxilliary verb, since *under has* is not a well-formed constituent
+in English.  Likewise, types in formal languages will determine which
+expressions can be sensibly combined. 
+
+Now, of course it is common linguistic practice to supply an analysis
+of natural language both with syntactic categories and with semantic
+types.  And there is a large degree of overlap between these type
+systems.  However, there are mismatches in both directions: there are
+syntactic distinctions that do not correspond to any salient semantic
+difference (why can't adjectives behave syntactically like verb
+phrases, since they both denote properties with (extensional) type
+`<e,t>`?); and in some analyses there are semantic differences that do
+not correspond to any salient syntactic distinctions (as in any
+analysis that involves silent type-shifters, such as Herman Hendriks'
+theory of quantifier scope, in which expressions change their semantic
+type without any effect on the syntactic expressions they can combine
+with syntactically).  We will consider again the relationship between
+syntactic types and semantic types later in the course.
+
 Soon we will consider polymorphic type systems.  First, however, we
 will consider the simply-typed lambda calculus.  
 
-[Pedantic on.  Why "simply typed"?  Well, the type system is
-particularly simple.  As mentioned in class by Koji Mineshima, Church
+[Pedantic on.  Why "*simply* typed"?  Well, the type system is
+particularly simple.  As mentioned to us by Koji Mineshima, Church
 tells us that "The simple theory of types was suggested as a
 modification of Russell's ramified theory of types by Leon Chwistek in
 1921 and 1922 and by F. P. Ramsey in 1926."  This footnote appears in
 Church's 1940 paper [A formulation of the simple theory of
-types](church-simple-types.pdf).  In this paper, as Will Starr
-mentioned in class, Church does indeed write types by simple
-apposition, without the ugly angle brackets and commas used by
-Montague.  Furthermore, he omits parentheses under the convention that
-types associated to the *left*---the opposite of the modern
+types](church-simple-types.pdf).  In this paper, Church writes types
+by simple apposition, without the ugly angle brackets and commas used
+by Montague.  Furthermore, he omits parentheses under the convention
+that types associated to the *left*---the opposite of the modern
 convention.  This is ok, however, because he also reverses the order,
 so that `te` is a function from objects of type `e` to objects of type
 `t`.  Cool paper!  If you ever want to see Church numerals in their
 native setting--but I'm getting ahead of my story.  Pedantic off.]
 
-There's good news and bad news: the good news is that the simply-type
+There's good news and bad news: the good news is that the simply-typed
 lambda calculus is strongly normalizing: every term has a normal form.
 We shall see that self-application is outlawed, so &Omega; can't even
 be written, let alone undergo reduction.  The bad news is that
@@ -124,7 +146,7 @@ present it here; see Berendregt or Hankin.
 Since &Omega; does not have a normal form, it follows that &Omega;
 cannot have a type in &Lambda;_T.  We can easily see why:
 
-     &Omega; = (\x.xx)(\x.xx)
+<code>&Omega; = (\x.xx)(\x.xx)</code>
 
 Assume &Omega; has type &tau;, and `\x.xx` has type &sigma;.  Then
 because `\x.xx` takes an argument of type &sigma; and returns
@@ -138,36 +160,19 @@ In general, there is no way for a function to have a type that can
 take itself for an argument.  It follows that there is no way to
 define the identity function in such a way that it can take itself as
 an argument.  Instead, there must be many different identity
-functions, one for each type.
+functions, one for each type.  Some of those types can be functions,
+and some of those functions can be (type-restricted) identity
+functions; but a simply-types identity function can never apply to itself.
 
 #Typing numerals#
 
-Version 1 type numerals are not a good choice for the simply-typed
-lambda calculus.  The reason is that each different numberal has a
-different type!  For instance, if zero has type &sigma;, then since
-one is represented by the function `\x.x false 0`, it must have type
-`b --> &sigma; --> &sigma;`, where `b` is the type of a boolean.  But
-this is a different type than zero!  Because each number has a
-different type, it becomes unbearable to write arithmetic operations
-that can combine zero with one, since we would need as many different
-addition operations as we had pairs of numbers that we wanted to add.
-
-Fortunately, the Church numerals are well behaved with respect to
-types.  They can all be given the type (&sigma; --> &sigma;) -->
-&sigma; --> &sigma;.
-
-
-
-
-
-<!--
+The Church numerals are well behaved with respect to types.  They can
+all be given the type (&sigma; --> &sigma;) --> &sigma; --> &sigma;.
 
-Mau integrate some mention of this at some point.
 
-http://okmij.org/ftp/Computation/lambda-calc.html#predecessor
 
 
-Predecessor and lists are not representable in simply typed lambda-calculus
+## Predecessor and lists are not representable in simply typed lambda-calculus ##
 
     The predecessor of a Church-encoded numeral, or, generally, the encoding of a list with the car and cdr operations are both impossible in the simply typed lambda-calculus. Henk Barendregt's ``The impact of the lambda-calculus in logic and computer science'' (The Bulletin of Symbolic Logic, v3, N2, June 1997) has the following phrase, on p. 186:
 
@@ -184,5 +189,6 @@ Predecessor and lists are not representable in simply typed lambda-calculus
 
     Lists can also be represented in System F. As a matter of fact, we do not need the full System F (where the type reconstruction is not decidable). We merely need the extension of the Hindley-Milner system with higher-ranked types, which requires a modicum of type annotations and yet is able to infer the types of all other terms. This extension is supported in Haskell and OCaml. With such an extension, we can represent a list by its fold, as shown in the code below. It is less known that this representation is faithful: we can implement all list operations, including tail, drop, and even zip.
 
+See also [[Oleg Kiselyov on the predecessor function in the lambda
+calculus|http://okmij.org/ftp/Computation/lambda-calc.html#predecessor]].
 
--->