X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week1.mdwn;h=5ae3e65f5c154f36a84432585178ed81bdb179ba;hp=8d1ad0dd3a0ec34188415d1b6d76dc817c1956f2;hb=9452f39dcc5b7babde45142e2b24e3617813d6a6;hpb=75b0a95a29b968c3a6c42c04bdb4a908f586cd15 diff --git a/week1.mdwn b/week1.mdwn index 8d1ad0dd..5ae3e65f 100644 --- a/week1.mdwn +++ b/week1.mdwn @@ -39,44 +39,24 @@ Basics of Lambda Calculus The lambda calculus we'll be focusing on for the first part of the course has no types. (Some prefer to say it instead has a single type---but if you say that, you have to say that functions from this type to this type also belong to this type. Which is weird.) -Here is its syntax: - -
-Variables: x, y, z... -
- -Each variable is an expression. For any expressions M and N and variable a, the following are also expressions: - -
-Abstract: (λa M) -
- -We'll tend to write (λa M) as just `(\a M)`, so we don't have to write out the markup code for the λ. You can yourself write (λa M) or `(\a M)` or `(lambda a M)`. - -
-Application: (M N) -
- -Some authors reserve the term "term" for just variables and abstracts. We won't participate in that convention; we'll probably just say "term" and "expression" indiscriminately for expressions of any of these three forms. +Some authors reserve the term "term" for just variables and abstracts. We'll probably just say "term" and "expression" indiscriminately for expressions of any of these three forms. Examples of expressions: -
-x

-(y x)

-(x x)

-(\x y)

-(\x x)

-(\x (\y x))

-(x (\x x))

-((\x (x x)) (\x (x x)))

-

+ x + (y x) + (x x) + (\x y) + (\x x) + (\x (\y x)) + (x (\x x)) + ((\x (x x)) (\x (x x))) The lambda calculus has an associated proof theory. For now, we can regard the proof theory as having just one rule, called the rule of **beta-reduction** or "beta-contraction". Suppose you have some expression of the form: - ((\a M) N) + ((\ a M) N) that is, an application of an abstract to some other expression. This compound form is called a **redex**, meaning it's a "beta-reducible expression." `(\a M)` is called the **head** of the redex; `N` is called the **argument**, and `M` is called the **body**.