laurent.orseau
2020-8-25 08:35:06

I was reading = in these two boxes more like a mere syntactic renaming, but the = on p.26 looks a lot more like a reduction in context. But probably it’s the same idea, just with more stuff.


mflatt
2020-8-25 18:46:12

Yes, just more stuff. I view the top box as defining a relation with the elaborate name FV(_)= and the second relation with the even more elaborate name _[_ <- _]=.

(I hope the copy I’m looking at has the right page numbers. My normal copies are on campus.)


laurent.orseau
2020-8-25 19:22:58

Yes, that makes perfect sense!


laurent.orseau
2020-8-25 19:33:29

But then for _[_ <- _]=, wouldn’t it be more correct if the box was defining the mere relation (just replacing = with some R ), and then say that the equality is obtained by …-closure? In particular, the box doesn’t say that it’s reflexive for example. (Of course it would make it more difficult for the reader.)


mflatt
2020-8-25 20:03:42

I would say that the _[_ <- _]= relation is between three terms (or a tuple of three terms, of you prefer) and one term, so it’s domain and range are not the same; it won’t be an equality relation. That is, not just the = would be replaced by a simpler R, but the whole _[_ <- _]=. In any case, I agree that = is used in many different ways, perhaps unhelpfully even if traditionally.


laurent.orseau
2020-8-25 20:11:27

Ok, that’s a lot clearer now. Thank you


laurent.orseau
2020-8-25 20:31:18

So, writing the relation _[_ <- _]R in predicate form, this would be: R( [X1, X1, M], M) R( [X2, X1, M], X2) if X1≠X2 R( [λX1.M1, X1, M2], λX1.M1) R( [λX1.M1, X2, M2], M4) where R( [λX3.M1, X1, X3], M3) and R( [M3, X2, M2], M4), if X1≠X2, X3 ∉ FV(λX1.M1), X3 ∉ FV(M2) R( [(M1 M2), X, M3], (M4 M5) ) where R( [M1, X, M3], M4) and R( [M2, X, M3], M5) As you say, the domain and ranges are not the same, but this can easily be fixed by replacing all last arguments M with, say, [M, ε, ε] where ε <- ε is the identity element for substitutions.