Dear Freek, Freek Wiedijk wrote: So, let us better use "possibly empty types". In any message to a type construction systems mailing list I will call Mizar types "non empty types" (I would would like "strong', but ...), I promise.You are right, the "weak types" of Rob Nederpelt and, yes, Fairouz Kamareddine, are something differently entirely. I used the term because I couldn't think of a better one, and because Josef was using this one. What I mean is "possibly empty type". Actually for me the non-weak types (strong types?) are the strange ones really, they are the ones that should have a special adjective. Interesting.It would be very interesting to know how type theorists look at our discussion (probably they would think that we both are crazy :-)) For them possibly empty types are utterly normal. In fact without them, the Curry-de Bruijn-Howard isomorphism wouldn't work (every statement would be true, because the type of the proofs of that statement would always be non-empty.) No, not in the sense of Rob and Fairouz. The point is if you want "apparent possibly non empty types" likeI would like to be more precise what we talk about. It looks to me that the whole problem is that you (and Josef and maybe some others) what to be allowed to write for h being Isomorphism of G,H holds ... instead of for h being Homomorphism of G,H st h is_an_isomorphism_of G,H holdsYes, for example! And let h be Isomorphism of G,H; instead of let h be Homomorphism of G,H; assume h is_an_isomorphism_of G,H;Or you really want weak types?In the sense of Rob and Fairouz? No! 'Isomorphism of G,H' above (when the actual type is 'Homomorphism of G,H') or you want to have 'intrinsic possibly empty type'. I want. :-)In HOL one also doesn't have "weak types" either. But _there_ I don't have a big problem with it, as _there_ the type system is so weak that it doesn't hurt me. However, once one has dependent types in the system, like you have in Mizar (and like one has in type theory, for that matter), really you don't want to restrict yourself to types that have to be non-empty no matter what the argument turns out to be. Maybe I will change the opinion, but as yet I want. No, he wrote about regular, 1-sorted logic. What I mean that typed quantifiers (with parameters or not) might be thought as a restriction of the domain (actually it is chosen semantics in Mizar). So when all quantifiers are typed in the same way you got the logic restricted to the denotation of the type, and I believe it should be the same logic as for the type set.So, if we treat types as a mean to restrict the domain they should be non empty.I would expect Grzegorczyk only was talking about many sorted logic without parameters to the sorts. In that case I don't think I would object to what he's writing. It might the problem. It is not.If I have no problem with for x being element of A holds ... (I use 'element' for weak type) if A is empty, the I am rather reluctant to write let x be element of A; in such a case.But are you reluctant to write let x be set such that x in A; It's exactly the same. _Exactly_ the same! One of possible valuation of x,y is 0, 1, and 1/(0-1) = -1 definitely exists. Well, the first assumption is false.And I definitely do not like the idea of ground terms that do not exist.If I reason let x, y be Real; assume x > y; assume y > x + 1; So what, we quite often use false assumptions. Of course when I say that the 'term exists' I mean that it has a meaning. I suppose you too.and I'm talking about a "ground term" 1/(x - y), then that ground term doesn't exist either. The rule dictum de omni is not valid anymore, to use for x being Theta holds P[x] ------------------------------------ P[a] I have to prove 'ex x st x is Theta' or something like this.Only if the "x" doesn't actually I assume that you can construct a term 'a' with type Theta. If you cannot , at least in a consistent context,occur in the "P[x]" (because else the "a" would be a witness for the existential statement.) that is OK with me. So, the crucial question: do you want to allow ground terms that have empty type? It is not what I was writing above. The fictitious bound variables are allowed in Mizar, it rather problem ofBut then what's the point of having the "for x" in the first place if it the "x" doesn't occur in the "P[x]". Maybe we should restrict Mizar in such a way that writing down formulas in which a "for" is not allowed when the variable doesn't occur in the body under it? (That is a restriction that would be just as silly and irritating as this "non empty types" restriction.) maintenance of MML. However they are removed in the CHECKER, that of course cannot be allowed if types may be empty. Again, "a" with empty type?So what the use we have for universal sentences if we cannot use them :-)But you can use them! You just need to come up with an "a" for this rule, even when the "x" is not in the "P[x]". That's not _so_ strange. You are probably right, that it is more natural. But also less useful.I also want to write "Function of X,Y" when X is non empty but Y is (let's call it "function of X,Y" with a small "f" :-)) Why should that be forbidden? It just makes everything much more natural to have the "Function of" type be allowed for all X and Y, and have it be empty in that specific case. I sort of understand what you write. The problem is that I believe that CH is true :-)When you're reasoning from an assumption like the continuum hypothesis, (so you're proving a statement of the shape "CH implies ...") you're in the same realm of ghosts. But _nothing_ in Mizar prevents you from doing that. I someone does that you _don't_ say: "Aha! If you want to reason from CH, then you first need to show that CH holds! Because if it cannot be shown to hold, then why would you be allowed to have it as an assumption? You're reasoning in a realm of ghosts!" What is the problem with an empty set? Of course there are non empty sets, too. E.g.When you talk about the empty set, do you also feel like you're in this realm of ghost? "How can a set be _there,_ when there's nothing in it? It has no substance!" (I'm sure that there are people who feel like that. But it's nonsense.) {{}}, { {}, {{}} } However you right, some people have problems. If I recall Bertrand Russel argued that "the empty set of ducks" and "the empty set of geese" are the same. If he argued, the I suppose somebody had a different opinion. Not at all. It shows that sometimes breaking permissiveness might be more practical, even ifIt is the original definition. Afterwards we learned that breaking the permissiveness makes life much easier.That shows that using permissive definitions is not a good alternative to having proper "weak types" (in Josef's sense.) less natural, than keeping to permissiveness. A logical equivalent, but semantic correlates are different.I think that the predicate 'meaningfulness_of_Element_for X' is rather ex IT being set st IT in XThat _is_ equivalent to "X is non empty", isn't it? :-) A bold claim.For many people. For me. For Josef, I would expect. For all people who do type theory. For de Bruijn, I'm certain. For a lot of at least moderately clever people. "A horror! "I believe that a regular mathematician would say 'what you are talking about?'.And if you show them that in Mizar you can prove that "{} is Element of {}", then they _won't_ say that? :-) But after some explanations: "let us suppose that we have real, mathematical 'element of ...' whatever it means. Then we may define an unorthodox Element of X : element of X if X <> {} {} otherwise According our experience in Mizar the second is more useful" The answer may be: "If you say so" It happens. But it is stupid, isn't it?It would be like you are reasoning by contradiction, and saying "okay, let's assume so-and-so" and then someone who is listening to your proof interrupting you with, "What are you talking about? You are trying to show that that isn't the case! So you can't assume that! Because it is false!" Yes, 'x is_element_of {}' is meaningful, no problem with predicates.Mathematician quite often treat a meaningless sentences as falseBut "x is element of {}" (with the small "e") is _not_ meaningless at all. It is false, but not because we _treat_ it as such. Because it _is._ It is just as meaningless as "x in {}", which also is not meaningless at all (but also just false). S, what I have written was obscure. I meant that some mathematician claim, against the logic, that the sentenceSo maybe some mathematicians would claim that for x being element of {} holds x = x is false, against the logic.Then they would also have to say that for x being set st x in {} holds x = x would be against logic! for x being element of {} holds x = x is false. Even if they agree that, according to logic, the sentence for x being set st x in {} holds x = x is true. I have a feeling that we made a progress.Josef is right, there's really no point in arguing about this again and again. But I can't stop myself, I feel too strongly about this! Mizar is such a nice system, I want to be able to like it. And this point really is one of the main things that is in the way of that. At least I think that I understand now a bit better what is the logic of empty types. Regards, Andrzej |