XGitUrl: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=exercises%2Fassignment3_answers.mdwn;h=ae35731b0333982c915d357e9ed1d4bd92225848;hp=7530534f3c4e086c6260aaaface0b1b6b4126809;hb=dd911c78a79577243800cafec55f75ef9d76d63a;hpb=cff9857e52ac59c4905efeb80fcf8a91c2fd1ed8
diff git a/exercises/assignment3_answers.mdwn b/exercises/assignment3_answers.mdwn
index 7530534f..ae35731b 100644
 a/exercises/assignment3_answers.mdwn
+++ b/exercises/assignment3_answers.mdwn
@@ 167,7 +167,7 @@ where `one` abbreviates `succ zero`, and `two` abbreviates `succ (succ zero)`.
> let leq? = \l r. zero? (sub l r) in
> ...
 > Here is another solution. Jim crafted this particular implementation, but like a great deal of the CS knowledge he's gained over the past eight years, Oleg Kiselyov pointed the way.
+ > Here is another solution. Jim crafted this particular implementation, but like a great deal of the CS knowledge he's gained over the past eight years, Oleg Kiselyov pointed the way.
> let leq? = (\base build consume. \l r. r consume (l build base) fst)
> ; where base is
@@ 238,23 +238,6 @@ Reduce the following forms, if possible:
Using the mapping specified in this week's notes, translate the following lambda terms into combinatory logic:

Let's say that for any lambda term T, [T] is the equivalent Combinatory Logic term. Then we define the [.] mapping as follows.

 1. [a] = a
 2. [(\aX)] = @a[X]
 3. [(XY)] = ([X][Y])

Wait, what is that @a ... business? Well, that's another operation on (a variable and) a CL expression, that we can define like this:

 4. @aa = I
 5. @aX = KX if a is not in X
 6. @a(Xa) = X if a is not in X
 7. @a(XY) = S(@aX)(@aY)




[\x x] = @x x = I
[\x y. x] = @x [\y. x] = @x. (@y x) = @x (Kx) = S (@x K) (@x x) = S (KK) I
; in general expressions of this form S(KM)I
will behave just like M
for any expression M
@@ 284,6 +267,12 @@ S (S (KS) (S (KK) (S (KS) K))) (KI); this is the B combinator, whi
25. For each of the above translations, how many `I`s are there? Give a rule for describing what each `I` corresponds to in the original lambda term.
+ This generalization depends on you omitting the translation rule:
+
+ 6. @a(Xa) = X if a is not in X
+
+ > With that shortcut rule omitted, then there turn out to be one `I` in the result corresponding to each occurrence of a bound variable in the original term.
+
Evaluation strategies in Combinatory Logic

@@ 323,8 +312,8 @@ Reduce to betanormal forms:
(\x. x (\y. y x)) (v w) ~~> v w (\y. y (v w))
(\x. x (\x. y x)) (v w) ~~> v w (\x. y x)
(\x. x (\y. y x)) (v x) ~~> v w (\y. y (v x))
(\x. x (\y. y x)) (v y) ~~> v w (\u. u (v y))
+(\x. x (\y. y x)) (v x) ~~> v x (\y. y (v x))
+(\x. x (\y. y x)) (v y) ~~> v y (\u. u (v y))
(\x y. x y y) u v ~~> u v v
(\x y. y x) (u v) z w ~~> z (u v) w