[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: [mizar] Re: Urelements?



Just for the record, we know that strict structures are equal, if they fields
are equal.

The question set/element arose a couple of months ago in completely different context. The sentence

     1 in 1-sorted(#A#);

is grammatically correct, but as you wrote we know nothing about its logical value. Actually, if somebody writes

     1 in 1-sorted(#A#)

then he probably uses the overloaded definition

 let S be 1-sorted;
 let x be set;
 pred x in S means
:: STRUCT_0:def 5
 x in the carrier of S;

That is a general phenomenon. It is simple for expandable type because they are expanded, so we freely use such overloading. In the case of predicates,
attributes and functors situation is different, because such definition as

 let S be 1-sorted;
 func id S -> Function of S,S equals
:: STRUCT_0:def 4
 id the carrier of S;

or the "membership" defined above, will cause necessity to refer to them.

The general rule is: if a locus in a definition is really a set (it is treated as set), the when we substitute 1-sorted structure for it we get something undefined, so it is reasonable to overload it taking substituting not a structure but its carrier instead. Intuitively we know what it means that
'a locus is "really" a set'. In the membership

         let x,X be set;
         pred x in X;

X is "really" a set, not so x. So a coercion was proposed:

if locus is 'really' a set, and somebody attempted to substitute a 1-sorted S for it, then let Mizar coerce it to 'the carrier of S'.

We either need a definition of "real" set, or allow to specify it by hand.
If we distinguish 'set' and 'element', Mizar will know when to use the coercion.


Regards,
Andrzej






Cytowanie Jesse Alama <jesse.alama@gmail.com>:


As for structures, the status quo seems to be that structures are in
fact sets, but we don't know any of their elements (or, at least no
membership statement is obvious for the Mizar checker) and thus
(accepting extensionality as globally valid) we don't know their
identities:

 {} in 1-sorted (# {} #)
 ::>                   *4
 ::> 4: This inference is not accepted

 not {} in 1-sorted (# {} #)
 ::>                       *4
 ::> 4: This inference is not accepted

 1-sorted (# 1 #) = 1-sorted (# 2 #);
 ::>                               *4

This seems fine to me as an approximation of the idea that they are
urelements.  A stricter approach would be to say reject as malformed
a membership statement whose right-hand side is a structure:

 {} in 1-sorted (# {} #)
 ::> *143,321
 ::> 143: No implicit qualification
 ::> 321: Predicate symbol or "is" expected