fix some typos
[lambda.git] / topics / _week8_reader_monad.mdwn
1 <!-- λ Λ ∀ ≡ α β γ ρ ω Ω ○ μ η δ ζ ξ ⋆ ★ • ∙ ● 𝟎 𝟏 𝟐 𝟘 𝟙 𝟚 𝟬 𝟭 𝟮 ¢ ⇧ -->
2
3 [[!toc levels=2]]
4
5 The Reader Monad
6 ================
7
8 The goal for this part is to introduce the Reader Monad, and present
9 two linguistics applications: binding and intensionality.  Along the
10 way, we'll continue to think through issues related to order, and a
11 related notion of flow of information.
12
13 At this point, we've seen monads in general, and three examples of
14 monads: the identity monad (invisible boxes), the Maybe monad (option
15 types), and the List monad.  
16
17 We've also seen an application of the Maybe monad to safe division.
18 The starting point was to allow the division function to return an int
19 option instead of an int.  If we divide 6 by 2, we get the answer Just
20 3.  But if we divide 6 by 0, we get the answer Nothing.  
21
22 The next step was to adjust the other arithmetic functions to teach them what to do if they received Nothing instead of a boxed integer.
23 This meant
24 changing the type of their input from ints to int options.  But we
25 didn't need to do this piecemeal; rather, we could "lift" the ordinary
26 arithmetic operations into the monad using the various tools provided
27 by the monad.  We'll go over this lifting operation in detail in the next section.
28
29 ## Tracing the effect of safe-div on a larger computation
30
31 So let's see how this works in terms of a specific computation.
32
33 <pre>
34 \tree ((((+) (1)) (((*) (((/) (6)) (2))) (4))))
35
36  ___________
37  |         |
38 _|__    ___|___
39 |  |    |     |
40 +  1  __|___  4
41       |    |
42       *  __|___
43          |    |
44         _|__  2
45         |  |
46         /  6
47 </pre>
48
49 This computation should reduce to 13.  But given a specific reduction
50 strategy, we can watch the order in which the computation proceeds.
51 Following on the lambda evaluator developed during the previous
52 homework, let's adopt the following reduction strategy:
53
54     In order to reduce (head arg), do the following in order:
55     1. Reduce head to h'
56     2. Reduce arg to a'.
57     3. If (h' a') is a redex, reduce it.
58
59 There are many details left unspecified here, but this will be enough
60 for today.  The order in which the computation unfolds will be
61
62     1. Reduce head (+ 1) to itself
63     2. Reduce arg ((* ((/ 6) 2)) 3)
64          1. Reduce head (* ((/ 6) 2))
65               1. Reduce head * 
66               2. Reduce arg ((/ 6) 2)
67                    1. Reduce head (/ 6) to itself
68                    2. Reduce arg 2 to itself
69                    3. Reduce ((/ 6) 2) to 3
70               3. Reduce (* 3) to itself
71          2. Reduce arg 4 to itself
72          3. Reduce ((* 3) 4) to 12
73      3. Reduce ((+ 1) 12) to 13
74
75 This reduction pattern follows the structure of the original
76 expression exactly, at each node moving first to the left branch,
77 processing the left branch, then moving to the right branch, and
78 finally processing the results of the two subcomputation.  (This is
79 called depth-first postorder traversal of the tree.)
80
81 It will be helpful to see how the types change as we make adjustments.
82
83     type num = int
84     type contents = Num of num   | Op of (num -> num -> num)
85     type tree = Leaf of contents | Branch of tree * tree
86
87 Never mind that these types will allow us to construct silly
88 arithmetric trees such as `+ *` or `2 3`.  Note that during the
89 reduction sequence, the result of reduction was in every case a
90 well-formed subtree.  So the process of reduction could be animated by
91 replacing subtrees with the result of reduction on that subtree, till
92 the entire tree is replaced by a single integer (namely, 13).
93
94 Now we replace the number 2 with 0:
95
96 <pre>
97 \tree ((((+) (1)) (((*) (((/) (6)) (0))) (4))))
98
99  ___________
100  |         |
101 _|__    ___|___
102 |  |    |     |
103 +  1  __|___  4
104       |    |
105       *  __|___
106          |    |
107         _|__  0
108         |  |
109         /  6
110 </pre>
111
112 When we reduce, we get quite a ways into the computation before things
113 go south:
114
115     1. Reduce head (+ 1) to itself
116     2. Reduce arg ((* ((/ 6) 0)) 3)
117          1. Reduce head (* ((/ 6) 0))
118               1. Reduce head * 
119               2. Reduce arg ((/ 6) 0)
120                    1. Reduce head (/ 6) to itself
121                    2. Reduce arg 0 to itself
122                    3. Reduce ((/ 6) 0) to ACKKKK
123
124 This is where we replace `/` with `safe-div`.  This means changing the
125 type of the arithmetic operators from `int -> int -> int` to 
126 `int -> int -> int option`; and since we now have to anticipate the
127 possibility that any argument might involve division by zero inside of
128 it, here is the net result for our types:
129
130     type num = int option
131     type contents = Num of num   | Op of (num -> num -> num)
132     type tree = Leaf of contents | Branch of tree * tree
133
134 The only difference is that instead of defining our numbers to be
135 simple integers, they are now int options; and so Op is an operator
136 over int options.
137
138 At this point, we bring in the monadic machinery.  In particular, here
139 is the ⇧ and the map2 function from the notes on safe division:
140
141     ⇧ (a: 'a) = Just a;;
142
143     map2 (g : 'a -> 'b -> 'c) (u : 'a option) (v : 'b option) =
144       match u with
145       | None -> None
146       | Some x ->
147           (match v with
148           | None -> None
149           | Some y -> Some (g x y));;
150
151 Then we lift the entire computation into the monad by applying ⇧ to
152 the integers, and by applying `map2` to the operators:
153
154 <pre>
155 \tree ((((map2 +) (⇧1)) (((map2 *) (((map2 /) (⇧6)) (⇧0))) (⇧4))))
156
157      ___________________
158      |                 |
159   ___|____         ____|_____
160   |      |         |        |
161 map2 +  ⇧1    _____|_____  ⇧4
162               |         |
163             map2 *  ____|____
164                     |       |
165                  ___|____  ⇧0
166                  |      |
167                map2 /  ⇧6
168 </pre>
169
170 With these adjustments, the faulty computation now completes smoothly:
171
172     1. Reduce head ((map2 +) ⇧1)
173     2. Reduce arg (((map2 *) (((map2 /) ⇧6) ⇧2)) ⇧3)
174          1. Reduce head ((map2 *) (((map2 /) ⇧6) ⇧2))
175               1. Reduce head * 
176               2. Reduce arg (((map2 /) ⇧6) ⇧0)
177                    1. Reduce head ((map2 /) ⇧6)
178                    2. Reduce arg ⇧0 
179                    3. Reduce (((map2 /) ⇧6) ⇧0) to Nothing
180               3. Reduce ((map2 *) Nothing) to Nothing
181          2. Reduce arg ⇧4
182          3. Reduce (((map2 *) Nothing) ⇧4) to Nothing
183      3. Reduce (((map2 +) ⇧1) Nothing) to Nothing
184
185 As soon as we try to divide by 0, safe-div returns Nothing.
186 Thanks to the details of map2, the fact that Nothing has been returned
187 by one of the arguments of a map2-ed operator guarantees that the
188 map2-ed operator will pass on the Nothing as its result.  So the
189 result of each enclosing computation will be Nothing, up to the root
190 of the tree.
191
192 It is unfortunate that we need to continue the computation after
193 encountering our first Nothing.  We know immediately at the result of
194 the entire computation will be Nothing, yet we continue to compute
195 subresults and combinations.  It would be more efficient to simply
196 jump to the top as soon as Nothing is encoutered.  Let's call that
197 strategy Abort.  We'll arrive at an Abort operator later in the semester.
198
199 So at this point, we can see how the Maybe/option monad provides
200 plumbing that allows subcomputations to send information from one part
201 of the computation to another.  In this case, the safe-div function
202 can send the information that division by zero has been attempted
203 throughout the rest of the computation.  If you think of the plumbing
204 as threaded through the tree in depth-first, postorder traversal, then
205 safe-div drops Nothing into the plumbing half way through the
206 computation, and that Nothing travels through the rest of the plumbing
207 till it comes out of the result faucet at the top of the tree.
208
209 ## Information flowing in the other direction: top to bottom
210
211 In the save-div example, a subcomputation created a message that
212 propagated upwards to the larger computation:
213
214 <pre>
215                  message: Division by zero occurred!
216                       ^
217  ___________          |
218  |         |          |
219 _|__    ___|___       |
220 |  |    |     |       |
221 +  1  __|___  4       |
222       |    |          |
223       *  __|___  -----|
224          |    |
225         _|__  0
226         |  |
227         /  6
228 </pre>
229
230 We might want to reverse the direction of information flow, making 
231 information available at the top of the computation available to the
232 subcomputations: 
233
234 <pre>
235                     [λx]  
236  ___________          |
237  |         |          |
238 _|__    ___|___       |
239 |  |    |     |       |
240 +  1  __|___  4       |
241       |    |          |
242       *  __|___       |
243          |    |       |
244         _|__  x  <----|
245         |  |
246         /  6
247 </pre>
248
249 We've seen exactly this sort of configuration before: it's exactly
250 what we have when a lambda binds a variable that occurs in a deeply
251 embedded position.  Whatever the value of the argument that the lambda
252 form combines with, that is what will be substituted in for free
253 occurrences of that variable within the body of the lambda.
254
255 So our next step is to add a (primitive) version of binding to our
256 computation.  Rather than anticipating any number of binding
257 operators, we'll allow for just one binding dependency for now.
258
259 This example is independent of the safe-div example, so we'll return
260 to a situation in which the Maybe monad hasn't been added.  So the
261 types are the ones where numbers are just integers, not int options.
262 (In a couple of weeks, we'll start combining monads into a single
263 system; if you're impatient, you might think about how to do that now.)
264
265     type num = int
266
267 And the computation will be without the map2 or the ⇧ from the option
268 monad.
269
270 As you might guess, the technique we'll use to arrive at binding will
271 be to use the Reader monad, defined here in terms of m-identity and bind:
272
273     α --> int -> α
274     ⇧a = \x.a
275     u >>= f = \x.f(ux)x
276     map2 u v = \x.ux(vx)
277
278 A boxed type in this monad will be a function from an integer to an
279 object in the original type.  The unit function ⇧ lifts a value `a` to
280 a function that expects to receive an integer, but throws away the
281 integer and returns `a` instead (most values in the computation don't
282 depend on the input integer).  
283
284 The bind function in this monad takes a monadic object `u`, a function
285 `f` lifting non-monadic objects into the monad, and returns a function
286 that expects an integer `x`.  It feeds `x` to `u`, which delivers a
287 result in the orginal type, which is fed in turn to `f`.  `f` returns
288 a monadic object, which upon being fed an integer, returns an object
289 of the orginal type.  
290
291 The map2 function corresponding to this bind operation is given
292 above.  It should look familiar---we'll be commenting on this
293 familiarity in a moment.
294
295 Lifing the computation into the monad, we have the following adjusted
296 types:
297
298 type num = int -> int
299
300 That is, `num` is once again replaced with the type of a boxed int.
301 When we were dealing with the Maybe monad, a boxed int had type `int
302 option`.  In this monad, a boxed int has type `int -> int`.
303
304 <pre>
305 \tree ((((map2 +) (⇧1)) (((map2 *) (((map2 /) (⇧6)) (x))) (⇧4))))
306
307      __________________
308      |                |
309   ___|____        ____|_____
310   |      |        |        |
311 map2 +  ⇧1    ____|_____  ⇧4
312               |        |
313             map2 *  ___|____
314                     |      |
315                  ___|____  x
316                  |      |
317                map2 /  ⇧6
318 </pre>
319
320 It remains only to decide how the variable `x` will access the value input
321 at the top of the tree.  Since the input value is supposed to be the
322 value put in place of the variable `x`.  Like every leaf in the tree
323 in argument position, the code we want in order to represent the
324 variable will have the type of a boxed int, namely, `int -> int`.  So
325 we have the following:
326
327     x (i:int):int = i
328
329 That is, variables in this system denote the indentity function!
330
331 The result of evaluating this tree will be a boxed integer: a function
332 from any integer `x` to `(+ 1 (* (/ 6 x)) 4)`.  
333
334 Take a look at the definition of the reader monad again.  The
335 midentity takes some object `a` and returns `\x.a`.  In other words,
336 `⇧a = Ka`, so `⇧ = K`.  Likewise, `map2` for this monad is the `S`
337 combinator.  We've seen this before as a strategy for translating a
338 lambda abstract into a set of combinators.  Here is a part of the
339 general scheme for translating a lambda abstract into Combinatory
340 Logic.  The translation function `[.]` translates a lambda term into a
341 term in Combinatory Logic:
342
343     [(MN)] = ([M] [N])
344     [\a.a] = I
345     [\a.M] = K[M]       (assuming a not free in M)
346     [\a.(MN)] = S[\a.M][\a.N]
347
348 The reason we can make do with this subset of the full function is
349 that we're making the simplifying assumption that there is at most a
350 single lambda involved.  So here you see the I (the translation of the
351 bound variable), the K and the S.
352
353
354 ## Jacobson's Variable Free Semantics as a Reader Monad
355
356 We've designed the discussion so far to make the following claim as
357 easy to show as possible: Jacobson's Variable Free Semantics
358 (e.g., Jacobson 1999, [Towards a
359 Variable-Free
360 Semantics](http://www.springerlink.com/content/j706674r4w217jj5/))
361 is a reader monad.
362
363 More specifically, it will turn out that Jacobson's geach combinator
364 *g* is exactly our `lift` operator, and her binding combinator *z* is
365 exactly our `bind` (though with the arguments reversed)!
366
367 Jacobson's system contains two main combinators, *g* and *z*.  She
368 calls *g* the Geach rule, and *z* performs binding.  Here is a typical
369 computation.  This implementation is based closely on email from Simon
370 Charlow, with beta reduction as performed by the on-line evaluator:
371
372 <pre>
373 ; Analysis of "Everyone_i thinks he_i left"
374 let g = \f g x. f (g x) in
375 let z = \f g x. f (g x) x in
376 let he = \x. x in
377 let everyone = \P. FORALL x (P x) in
378
379 everyone (z thinks (g left he))
380
381 ~~>  FORALL x (thinks (left x) x)
382 </pre>
383
384 Several things to notice: First, pronouns once again denote identity functions.
385 As Jeremy Kuhn has pointed out, this is related to the fact that in
386 the mapping from the lambda calculus into combinatory logic that we
387 discussed earlier in the course, bound variables translated to I, the
388 identity combinator (see additional comments below).  We'll return to
389 the idea of pronouns as identity functions in later discussions.
390
391 Second, *g* plays the role of transmitting a binding dependency for an
392 embedded constituent to a containing constituent.
393
394 Third, one of the peculiar aspects of Jacobson's system is that
395 binding is accomplished not by applying *z* to the element that will
396 (in some pre-theoretic sense) bind the pronoun, here, *everyone*, but
397 rather by applying *z* instead to the predicate that will take
398 *everyone* as an argument, here, *thinks*.  
399
400 The basic recipe in Jacobson's system, then, is that you transmit the
401 dependence of a pronoun upwards through the tree using *g* until just
402 before you are about to combine with the binder, when you finish off
403 with *z*.  (There are examples with longer chains of *g*'s below.)
404
405 Jacobson's *g* combinator is exactly our `lift` operator: it takes a
406 functor and lifts it into the monad.  
407 Furthermore, Jacobson's *z* combinator, which is what she uses to
408 create binding links, is essentially identical to our reader-monad
409 `bind`!  
410
411 <pre>
412 everyone (z thinks (g left he))
413
414 ~~> forall w (thinks (left w) w)
415
416 everyone (z thinks (g (t bill) (g said (g left he))))
417
418 ~~> forall w (thinks (said (left w) bill) w)
419 </pre>
420
421 (The `t` combinator is given by `t x = \xy.yx`; it handles situations
422 in which English word order places the argument (in this case, a
423 grammatical subject) before the predicate.)
424
425 So *g* is exactly `lift` (a combination of `bind` and `unit`), and *z*
426 is exactly `bind` with the arguments reversed.  It appears that
427 Jacobson's variable-free semantics is essentially a Reader monad.
428
429 ## The Reader monad for intensionality
430
431 Now we'll look at using monads to do intensional function application.
432 This is just another application of the Reader monad, not a new monad.
433 In Shan (2001) [Monads for natural
434 language semantics](http://arxiv.org/abs/cs/0205026v1), Ken shows that
435 making expressions sensitive to the world of evaluation is conceptually
436 the same thing as making use of the Reader monad.
437 This technique was beautifully re-invented
438 by Ben-Avi and Winter (2007) in their paper [A modular
439 approach to
440 intensionality](http://parles.upf.es/glif/pub/sub11/individual/bena_wint.pdf),
441 though without explicitly using monads.
442
443 All of the code in the discussion below can be found here: [[code/intensionality-monad.ml]].
444 To run it, download the file, start OCaml, and say 
445
446         # #use "intensionality-monad.ml";;
447
448 Note the extra `#` attached to the directive `use`.
449
450 First, the familiar linguistic problem:
451
452        Bill left.  
453            Cam left.
454            Ann believes [Bill left].
455            Ann believes [Cam left].
456
457 We want an analysis on which the first three sentences can be true at
458 the same time that the last sentence is false.  If sentences denoted
459 simple truth values or booleans, we have a problem: if the sentences
460 *Bill left* and *Cam left* are both true, they denote the same object,
461 and Ann's beliefs can't distinguish between them.
462
463 The traditional solution to the problem sketched above is to allow
464 sentences to denote a function from worlds to truth values, what
465 Montague called an intension.  So if `s` is the type of possible
466 worlds, we have the following situation:
467
468
469 <pre>
470 Extensional types              Intensional types       Examples
471 -------------------------------------------------------------------
472
473 S         t                    s->t                    John left
474 DP        e                    s->e                    John
475 VP        e->t                 (s->e)->s->t            left
476 Vt        e->e->t              (s->e)->(s->e)->s->t    saw
477 Vs        t->e->t              (s->t)->(s->e)->s->t    thought
478 </pre>
479
480 This system is modeled on the way Montague arranged his grammar.
481 There are significant simplifications compared to Montague: for
482 instance, determiner phrases are thought of here as corresponding to
483 individuals rather than to generalized quantifiers.
484
485 The main difference between the intensional types and the extensional
486 types is that in the intensional types, the arguments are functions
487 from worlds to extensions: intransitive verb phrases like "left" now
488 take so-called "individual concepts" as arguments (type s->e) rather than plain
489 individuals (type e), and attitude verbs like "think" now take
490 propositions (type s->t) rather than truth values (type t).
491 In addition, the result of each predicate is an intension.
492 This expresses the fact that the set of people who left in one world
493 may be different than the set of people who left in a different world.
494
495 Normally, the dependence of the extension of a predicate to the world
496 of evaluation is hidden inside of an evaluation coordinate, or built
497 into the the lexical meaning function, but we've made it explicit here
498 in the way that the intensionality monad makes most natural.
499
500 The intensional types are more complicated than the extensional
501 types.  Wouldn't it be nice to make the complicated types available
502 for those expressions like attitude verbs that need to worry about
503 intensions, and keep the rest of the grammar as extensional as
504 possible?  This desire is parallel to our earlier desire to limit the
505 concern about division by zero to the division function, and let the
506 other functions, like addition or multiplication, ignore
507 division-by-zero problems as much as possible.
508
509 So here's what we do:
510
511 In OCaml, we'll use integers to model possible worlds. Characters (characters in the computational sense, i.e., letters like `'a'` and `'b'`, not Kaplanian characters) will model individuals, and OCaml booleans will serve for truth values:
512
513         type s = int;;
514         type e = char;;
515         type t = bool;;
516
517         let ann = 'a';;
518         let bill = 'b';;
519         let cam = 'c';;
520
521         let left1 (x:e) = true;; 
522         let saw1 (x:e) (y:e) = y < x;; 
523
524         left1 ann;; (* true *)
525         saw1 bill ann;; (* true *)
526         saw1 ann bill;; (* false *)
527
528 So here's our extensional system: everyone left, including Ann;
529 and Ann saw Bill (`saw1 bill ann`), but Bill didn't see Ann.  (Note that the word
530 order we're using is VOS, verb-object-subject.)
531
532 Now we add intensions.  Because different people leave in different
533 worlds, the meaning of *leave* must depend on the world in which it is
534 being evaluated:
535
536     let left (x:e) (w:s) = match (x, w) with ('c', 2) -> false | _ -> true;;
537     left ann 1;; (* true: Ann left in world 1 *)
538     left cam 2;; (* false: Cam didn't leave in world 2 *) 
539
540 This new definition says that everyone always left, except that 
541 in world 2, Cam didn't leave.
542
543 Note that although this general *left* is sensitive to world of
544 evaluation, it does not have the fully intensionalized type given in
545 the chart above, which was `(s->e)->s->t`.  This is because
546 *left* does not exploit the additional resolving power provided by
547 making the subject an individual concept.  In semantics jargon, we say
548 that *leave* is extensional with respect to its first argument.  
549
550 Therefore we will adopt the general strategy of defining predicates
551 in a way that they take arguments of the lowest type that will allow
552 us to make all the distinctions the predicate requires.  When it comes
553 time to combine this predicate with monadic arguments, we'll have to
554 make use of various lifting predicates.
555
556 Likewise, although *see* depends on the world of evaluation, it is
557 extensional in both of its syntactic arguments:
558
559     let saw x y w = (w < 2) && (y < x);;
560     saw bill ann 1;; (* true: Ann saw Bill in world 1 *)
561     saw bill ann 2;; (* false: no one saw anyone in world 2 *)
562
563 This (again, partially) intensionalized version of *see* coincides
564 with the `saw1` function we defined above for world 1; in world 2, no
565 one saw anyone.
566
567 Just to keep things straight, let's review the facts:
568
569 <pre>
570      World 1: Everyone left.
571               Ann saw Bill, Ann saw Cam, Bill saw Cam, no one else saw anyone.              
572      World 2: Ann left, Bill left, Cam didn't leave.
573               No one saw anyone.
574 </pre>
575
576 Now we are ready for the intensionality monad:
577
578 <pre>
579 type 'a intension = s -> 'a;;
580 let unit x = fun (w:s) -> x;;
581 (* as before, bind can be written more compactly, but having
582    it spelled out like this will be useful down the road *)
583 let bind u f = fun (w:s) -> let a = u w in let u' = f a in u' w;;
584 </pre>
585
586 Then the individual concept `unit ann` is a rigid designator: a
587 constant function from worlds to individuals that returns `'a'` no
588 matter which world is used as an argument.  This is a typical kind of
589 thing for a monad unit to do.
590
591 Then combining a predicate like *left* which is extensional in its
592 subject argument with an intensional subject like `unit ann` is simply bind
593 in action:
594
595     bind (unit ann) left 1;; (* true: Ann left in world 1 *)
596     bind (unit cam) left 2;; (* false: Cam didn't leave in world 2 *)
597
598 As usual, bind takes a monad box containing Ann, extracts Ann, and
599 feeds her to the extensional *left*.  In linguistic terms, we take the
600 individual concept `unit ann`, apply it to the world of evaluation in
601 order to get hold of an individual (`'a'`), then feed that individual
602 to the extensional predicate *left*.
603
604 We can arrange for a transitive verb that is extensional in both of
605 its arguments to take intensional arguments:
606
607     let lift2' f u v = bind u (fun x -> bind v (fun y -> f x y));;
608
609 This is almost the same `lift2` predicate we defined in order to allow
610 addition in our division monad example.  The difference is that this
611 variant operates on verb meanings that take extensional arguments but
612 returns an intensional result.  Thus the original `lift2` predicate
613 has `unit (f x y)` where we have just `f x y` here.
614   
615 The use of `bind` here to combine *left* with an individual concept,
616 and the use of `lift2'` to combine *see* with two intensional
617 arguments closely parallels the two of Montague's meaning postulates
618 (in PTQ) that express the relationship between extensional verbs and
619 their uses in intensional contexts.
620
621 <pre>
622 lift2' saw (unit bill) (unit ann) 1;;  (* true *)
623 lift2' saw (unit bill) (unit ann) 2;;  (* false *)
624 </pre>
625
626 Ann did see bill in world 1, but Ann didn't see Bill in world 2.
627
628 Finally, we can define our intensional verb *thinks*.  *Think* is
629 intensional with respect to its sentential complement, though still extensional
630 with respect to its subject.  (As Montague noticed, almost all verbs
631 in English are extensional with respect to their subject; a possible
632 exception is "appear".)
633
634     let thinks (p:s->t) (x:e) (w:s) = 
635       match (x, p 2) with ('a', false) -> false | _ -> p w;;
636
637 Ann disbelieves any proposition that is false in world 2.  Apparently,
638 she firmly believes we're in world 2.  Everyone else believes a
639 proposition iff that proposition is true in the world of evaluation.
640
641     bind (unit ann) (thinks (bind (unit bill) left)) 1;;
642
643 So in world 1, Ann thinks that Bill left (because in world 2, Bill did leave).
644
645     bind (unit ann) (thinks (bind (unit cam) left)) 1;;
646
647 But in world 1, Ann doesn't believe that Cam left (even though he
648 did leave in world 1: `bind (unit cam) left 1 == true`).  Ann's thoughts are hung up on
649 what is happening in world 2, where Cam doesn't leave.
650
651 *Small project*: add intersective ("red") and non-intersective
652  adjectives ("good") to the fragment.  The intersective adjectives
653  will be extensional with respect to the nominal they combine with
654  (using bind), and the non-intersective adjectives will take
655  intensional arguments.
656
657 notes: cascade, general env