The hints for problem 2 were being actively developed until Saturday morning. They're stable now. Remember you have a grace period until Sunday Nov. 28 to complete this homework.

  1. Make sure that your operation-counting monad from assignment6 is working. Modify it so that instead of counting operations, it keeps track of the last remainder of any integer division. You can help yourself to the functions:

    let div x y = x / y;;
    let remainder x y = x mod y;;

    Write a monadic operation that enables you to retrieve the last-saved remainder, at any arbitrary later point in the computation. For example, you want to be able to calculate expressions like this:

    (((some_long_computation / 12) + 5) - most_recent_remainder) * 2 - same_most_recent_remainder + 1

    The remainder here is retrieved later than (and in addition to) the division it's the remainder of. It's also retrieved more than once. Suppose a given remainder remains retrievable until the next division is performed.

  2. For the next assignment, read the paper Coreference and Modality. Your task will be to re-express the semantics they offer up to the middle of p. 16, in the terms we're now working with. You'll probably want to review the lecture notes from this week's meeting.

    Some advice:

    • You don't need to re-express the epistemic modality part of their semantics, just their treatment of extensional predicate logic. Though extra credit if you want to do the whole thing.

    • You'll want to use "implicitly represented" mutable variables, or a State monad.

    • Here are some hints.