Answering Mario's test question:  If I see "sum_ k e. A B" and I don't know 
the definition, then I will hope that A does not contain occurrences of k 
;-)  And if it does, then I would tend to think that the occurrences are 
bound, simply because k looks "dummy" in "k e. A", so the occurrences in A 
should, too.  (I admit I don't know if it's the case or not, I would have 
to look at the definition.)

Your example of the dependent Pi type is interesting.  Do you have a 
concrete example where the "indexing set" depends on the index variable, 
and where it is important that the occurrence be free?

Your other examples (nlab, bounded Zermelo, many-sorted logic) are very 
interesting.  They show that we should really avoid using the degenerate 
instance of df-opab and instances of df-ral where A contains occurrences of 
x, etc.  Since you are fine with it, if Norm agrees, I would like, as 
proposed in my previous message, to discourage use of df-ral, df-opab, 
etc., to deduce from them dfral, etc. which are identical but have a dv 
condition, and to use only the latter.  Would this help for your 
translation project?

I wrote above that Mario's proposal df-opab3 would yield
     |- { <. x , x >. | x = 2 } = { z | E. x z = <. x , 2 >. }
and I said that this was clearly false.  Mario wrote:
> This is intended behavior. I think we should probably more or less ban 
the use of { <. x , x >. | ph }, but when it is used, I want it to have 
this behavior; BOTH x's are new bound variables, and they are always bound 
in the order written, so the second x shadows the first and hence you can 
rename the "outer" one to get { <. x , x >. | x = 2 } = { <. y , x >. | x = 
2 }. I think that using { <. x , x >. | ph } to mean a subset of the 
diagonal is a horrible hack because it implies a flexibility on the left of 
a set comprehension that we don't actually have, and it breaks the pattern. 
If you have the general rule "all multiple binders are bound from left to 
right" you can guess this behavior without having to read the definition 
(assuming you realize that { <. x , y >. | ph } is a syntax constructor in 
the first place, rather than the composition of <. x , y >. and a 
nonexistent { A | ph }.)

I agree that writing { <. x , x >. | ph } is a hack (albeit not a horrible 
one), for the reasons you wrote.  The thing is that we write this 
informally very often, and everyone understands it as some subset of the 
diagonal.  Therefore, I agree that we should avoid/discourage or even ban 
it, but if this has to be defined, then it should really denote the 
intended subset of the diagonal.  It looks like on this last point, we have 
a deep disagreement, due to our different backgrounds.

I think I understand your points (though I'll certainly reread your posts), 
and I see how your proposal would help compatibility with typed languages, 
but here is the thing: there is a necessary compromise to find between 
proximity to mathematical practice and ease of coding (or "computer 
semantics", not sure what the best term is), since these two objectives may 
be conflicting sometimes.  I think that having, for instance, definitions 
which imply that { <. x , x >. | ph } is not a subset of the diagonal, 
would be going too far away from mathematical practice.

Benoit

-- 
You received this message because you are subscribed to the Google Groups 
"Metamath" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/metamath/f3990aac-1550-4e12-a3e5-c8b0c4bd4a09%40googlegroups.com.

Reply via email to