X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week1.mdwn;h=5c880fbb7cba5289de03d371447f294cca74dbf3;hp=316cfa44fd9c7e5ac231ece21514d5837636c6d1;hb=8e19d24bbc5a9bb0dce40d6743a2742fc328ed9d;hpb=be4f2e949a6cb783561a2bbdbd3ba4d66dadec3f diff --git a/week1.mdwn b/week1.mdwn index 316cfa44..5c880fbb 100644 --- a/week1.mdwn +++ b/week1.mdwn @@ -114,19 +114,19 @@ The lambda calculus we'll be focusing on for the first part of the course has no Here is its syntax:
- **Variables**: `x`, `y`, `z`, ... +Variables:Each variable is an expression. For any expressions M and N and variable a, the following are also expressions:x
,y
,z
...
- **Abstract**:-We'll tend to write(λa M)
+Abstract:(λa M)
(λa M)
as just `( \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)`
+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.
@@ -142,7 +142,7 @@ Examples of expressions:
(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:
+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)
@@ -150,7 +150,7 @@ that is, an application of an abstract to some other expression. This compound f
The rule of beta-reduction permits a transition from that expression to the following:
- M {a:=N}
+ M [a:=N]
What this means is just `M`, with any *free occurrences* inside `M` of the variable `a` replaced with the term `N`.
@@ -167,7 +167,7 @@ For instance:
> T is defined to be `(x (\x (\y (x (y z)))))`
-The first occurrence of `x` in `T` is free. The `\x` we won't regard as being an occurrence of `x`. The next occurrence of `x` occurs within a form that begins with `\x`, so it is bound as well. The occurrence of `y` is bound; and the occurrence of `z` is free.
+The first occurrence of `x` in T is free. The `\x` we won't regard as being an occurrence of `x`. The next occurrence of `x` occurs within a form that begins with `\x`, so it is bound as well. The occurrence of `y` is bound; and the occurrence of `z` is free.
Here's an example of beta-reduction:
@@ -185,33 +185,33 @@ Different authors use different notations. Some authors use the term "contractio
M ~~> N
-We'll mean that you can get from M to N by one or more reduction steps. Hankin uses the symbol -> for one-step contraction, and the symbol ->> for zero-or-more step reduction. Hindley and Seldin use (triangle..sub1) and (triangle).
+We'll mean that you can get from M to N by one or more reduction steps. Hankin uses the symbol →
for one-step contraction, and the symbol ↠
for zero-or-more step reduction. Hindley and Seldin use ⊳1
and ⊳
.
When M and N are such that there's some P that M reduces to by zero or more steps, and that N also reduces to by zero or more steps, then we say that M and N are **beta-convertible**. We'll write that like this:
M <~~> N
-This is what plays the role of equality in the lambda calculus. Hankin uses the symbol `=` for this. So too do Hindley and Seldin.
+This is what plays the role of equality in the lambda calculus. Hankin uses the symbol `=` for this. So too do Hindley and Seldin. Personally, I keep confusing that with the relation to be described next, so let's use this notation instead. Note that `M <~~> N` doesn't mean that each of `M` and `N` are reducible to each other; that only holds when `M` and `N` are the same expression. (Or, with our convention of only saying "reducible" for one or more reduction steps, it never holds.)
-In the metatheory, it's also sometimes useful to talk about formulas that are syntactically equivalent *before any reductions take place*. Hankin uses the symbol (three bars) for this. So too do Hindley and Seldin. We'll use that too, and will avoid using `=` when discussing metatheory for the lambda calculus. Instead we'll use `<~~>` as we said above. When we want to introduce a stipulative definition, we'll write it out longhand, as in:
+In the metatheory, it's also sometimes useful to talk about formulas that are syntactically equivalent *before any reductions take place*. Hankin uses the symbol ≡
for this. So too do Hindley and Seldin. We'll use that too, and will avoid using `=` when discussing metatheory for the lambda calculus. Instead we'll use `<~~>` as we said above. When we want to introduce a stipulative definition, we'll write it out longhand, as in:
> T is defined to be `(M N)`.
We'll regard the following two expressions:
- (\x x y)
+ (\x (x y))
- (\z z y)
+ (\z (z y))
as syntactically equivalent, since they only involve a typographic change of a bound variable. Read Hankin section 2.3 for discussion of different attitudes one can take about this.
Note that neither of those expressions are identical to:
- (\x x w)
+ (\x (x w))
because here it's a free variable that's been changed. Nor are they identical to:
- (\y y y)
+ (\y (y y))
because here the second occurrence of `y` is no longer free.