X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=week1.mdwn;h=1bc2309e1e9c79eea7118b9f6e72045a90b3317d;hp=b4d584d4f7db1676ab42891b9e32f3d5980599f6;hb=c86596d41ed6ca32fff882b468eade84bc13fb07;hpb=1a4c40836dc37109b086d47ee9fb27c2f9726e6b diff --git a/week1.mdwn b/week1.mdwn index b4d584d4..1bc2309e 100644 --- a/week1.mdwn +++ b/week1.mdwn @@ -285,18 +285,16 @@ It's possible to enhance the lambda calculus so that functions do get identified It's often said that dynamic systems are distinguished because they are the ones in which **order matters**. However, there are many ways in which order can matter. If we have a trivalent boolean system, for example---easily had in a purely functional calculus---we might choose to give a truth-table like this for "and": -

-true and true   = true
-true and true   = true
-true and *      = *
-true and false  = false
-* and true      = *
-* and *         = *
-* and false     = *
-false and true  = false
-false and *     = false
-false and false = false
-
+ true and true = true + true and true = true + true and * = * + true and false = false + * and true = * + * and * = * + * and false = * + false and true = false + false and * = false + false and false = false And then we'd notice that `* and false` has a different intepretation than `false and *`. (The same phenomenon is already present with the material conditional in bivalent logics; but seeing that a non-symmetric semantics for `and` is available even for functional languages is instructive.) @@ -673,11 +671,8 @@ Here's how it looks to say the same thing in various of these languages. and there's no more mutation going on there than there is in: - +
∀x. (F x or ∀x (not (F x)))
+	
When a previously-bound variable is rebound in the way we see here, that's called **shadowing**: the outer binding is shadowed during the scope of the inner binding.