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

Re: [mizar] Isn't "Subset of" the same as "Element of bool"?




Hi,

I will probably just repeat what Grzegorz has written earlier:

(D1)
> definition
>  let B be set;
>  let A be Subset of B;
>  redefine func bool A -> Subset of bool B;
>  coherence by ZFMISC_1:79;
> end;
> 
(D2)
> definition
>  let A be set;
>  mode Subset of A is Element of bool A;
> end;

Note that tha "bool" in (D2) is the original "bool" (let's call it 
"bool#1"), not the redefined ("bool#2") from (D1),
and it behaves "statically", i.e. even if you later have 
A being Subset of B, Subset of A will still expand to Element of bool#1 A.

To get bool#2 here, you would have to write in (D2):
let B be set;
let A be Subset of B; 
instead (i.e. what Adam suggests).

So (D2) adds a new pattern for Subset of A, and this pattern overrides the 
old one from SUBSET_1, but there is no difference berween the two, so 
(D2) in the original form is redundant.


> for B being set, A being Subset of B, X being Subset of A holds
>  X qua Subset of B is set;
> ::>  *116

If you do in Emacs: 
Mizar->Const. Explanations->Verbosity->translated formula, 
and Shift-mouse3 on the final semicolon after processing,
this one expands to:

"for HIDDEN:mode.1 ;for SUBSET_1:mode.1 ZFMISC_1:func.1 B1 ;; 
 for SUBSET_1:mode.1 ZFMISC_1:func.1 B2 ;;B3 is HIDDEN:mode.1 ;"

(but you will get e.g. \235 instaed of "for", or \220 instead of "is" 
there - I was lazy to translate them too).

So X (= B3, the third quantification) is 
"SUBSET_1:mode.1 ZFMISC_1:func.1 B2" here, which is 
"Element bool#1 A". 
Similarily, A ( = B2) is "Element bool#1 B".

So (D1) and bool#2 really were not employed here.

> for B being set, A being Subset of B, X being Element of bool A holds
>  X qua Subset of B is set;

Now the translation is:
"for HIDDEN:mode.1 ;for SUBSET_1:mode.1 ZFMISC_1:func.1 B1 ;;
 for SUBSET_1:mode.2 ZFMISC_1:func.1 B1 ;FRTEST:func.1 B1 B2 ;;
 B3 is HIDDEN:mode.1 ;"

So A is as before, but X made it to:
"SUBSET_1:mode.2 ZFMISC_1:func.1 B1 ;FRTEST:func.1 B1 B2"

where FRTEST:func.1 is absolute name for "bool#2", and SUBSET_1:mode.2 is
the second Element from SUBSET_1 (which has one hidden argument), 
so X is:
Element#2(bool#1(B), bool#3(B,A) )

So (D1) could fire here (because you wrote "bool" explicitly), and since 
its result type is "(non empty) Element#1 bool#1 bool#1 B", Element#2 
could fire here too ("bool#1 B" is also non empty). The widening of 
"Element#2(bool#1(B), bool#3(B,A) )" is "Element#1 bool#1 B", which is 
exactly what you required by the "qua".
I hope I have clouded this enough :-).

> I repeat the expandable definition of "Subset of" and still
> it doesn't work?  What should I do to get the nice
> transitivity of "Subset of"?  I'm very confused.

I am not sure that these features are so nice. Actually, I added the 
Constructor Explanations, because I was terribly lost in such problems 
when writing articles in a bit richer environment. It seems to me that as 
the MML grows, the user that would (naively) want to use a bit more of it 
in one place, will be mostly facing such problems instead of doing 
mathematics.

Josef