On Fri, Jul 4, 2008 at 7:40 AM, Gabriel Dos Reis wrote: > Bill Page writes: > > | On Thu, Jul 3, 2008 at 12:18 PM, Gabriel Dos Reis wrote: > | > ... > | > The fact that `Type' is a category, but not a domain is something > | > that OpenAxiom inherits from the base AXIOM system. On many > | > occasions I've found it a blessing and a curse. > | > > | > | It is not clear to me when it might be a blessing... :-) As I see it, > | the main purpose of a category in OpenAxiom is to stand for some > | mathematical (or datastructure-like) concept. > > See the definition of the various collections. They have a heading > like > > HomogeneousAggregate(S: Type): Category == > ^^^^^^^ > > A most general category is needed here. The `magic' that is applied > to Category and Domain could be applied to Type, but that would > pose its own set of problems e.g. in the case of Aggregate. >
Although Type is a domain in Aldor, exactly this sort of construction is used there without a problem (notwithstanding a separate issue raised by Ralf concerning the use of 'has' in Aldor). Why do you think it is a problem in SPAD? > [...] > > | There is a related problem with the definition of the domain > | 'Category' - is it a domain or a category? > > Category is conceptually a category, just like Domain is conceptually > a category. What do you mean by "conceptually a category"? As far as I can see Domain is a domain - not conceptually a category at all. > Note that in the base AXIOM system, those don't have > representations and that can prove problematic on more than one > occasion. Categories and domains are objects; the ability to pass > them around and return them as function values, requires that we have > a representation for them. Yes, this is clear. A representation of categories and domains as values (objects) is definitely required. As I understand it, in Axiom objects belong only to domains. So categories and domains must be domains. > Therefore Category and Domain do have domain definition, but they > are conceptually categories. > I think that before we can make sense of what it means to be "conceptually a category" it is necessary to first define unambiguously what is a "category". Stephen Watt defined it as I quoted below: > > | I think the way out of this mess was correctly identified by Stephen > | Watt in the description of Aldor when he wrote: (ibid.): > | > | "Each domain is itself a value belonging to the domain Type. Domains > | may additionally belong to some number of subtypes (of Type), known as > | categories." > > This is already the case of all flavors of AXIOM, I think. > That is not clear to me. I think at best this might be implemented in different flavors of Axiom in different ways and in a more or less consistent manner. > | I.e. 'Type' is a Domain. Categories are subtypes of Type, but as such > | Type (being itself a subtype of Type) is also a category unless we > | consider only proper subtypes. > > The quote you gave does not itself impose that Type must be a domain. To me the phrase: "... the *domain* Type" (my emphasis **) says specifically that Type is a domain. How else can I understand it? > All it says is a semantics requirement on the value of > > x has Type > > for all domains x. > The quotation from Stephen Watt makes no reference to 'has'. 'has' is defined elsewhere in the Aldor documentation under the subject of type satisfaction. In both Aldor and Axiom the thing to the right of 'has' must be a category, so in Aldor it is not possible to write: x has Type because Type is a domain - not a category. > The decision to make Type a domain is a separate one. If I want to be able to write: x:Type := ... then it seems very clear that Type must be a domain. That is what is done in Aldor. But I agree that it may be possible to find another solution. In particular in OpenAxiom you have introduced a new domain called Domain that plays a similar role to Type in Aldor. That allows you to retain then name 'Type' for something else - a category. I proposed in my previous message that what it turns out to be is just Domain considered as a subdomain of itself. As far as I know Aldor has no name for this although Stephen Watt's definition would apparently allow it, i.e. the subtype of Type consisting of exactly all of Type. > One I have considered many times in the past, mostly when I > decided to give Domain and Category definitions. Yes I understand. I would argue similarly that writing in OpenAxiom x:Domain := ... x:Category := ... implies that Domain and Category are domains. However the following of course are all errors of various kinds: x:Type := 1 x:Domain := 1 x:Domain := IntegerNumberSystem x:Category := 1 x:Category := Integer > The fact that we have a two-level system implies that somewhere this > kind of problem will surface again, so just giving Type a domain definition > is not necessarily a solution to the fundamental problem. > I agree that just giving Type a domain definition is not a solution. I think the solution to the problem has to do with defining more precisely what is a "category" (i.e. in the case of Aldor a categories are subtypes of Type, domains are objects of Type and therefore via the subtype relation domains are also objects of categories). That Type and subtypes of Type (categories) are also domains is not a central part of the resolution of the problem but rather more a matter of convenience. It means that this "two-level system" is essentially flat. > | > | In OpenAxiom we now have the domain named 'Domain' so we should be > | able to say: "Each domain is itself a value belonging to the domain > | 'Domain'. Categories are sub-domains of 'Domain'. Then 'Type' is just > | Domain as a whole considered as a category." > > Why *should* we be able to say that? Especialy, that > > # Categories are sub-domains of 'Domain' > > ? That is a key part of the definition give by Stephen Watt: "... subtypes (of Type), known as categories." Unlike OpenAxiom, Aldor does not define 'Domain' as a domain, but 'Type' is literally a domain. Domains are all objects of a distinquished domain called 'Type'. (Quote: "Each domain is itself a value belonging to the domain Type."). As I see it, OpenAxiom has used the name 'Domain' in the same way that Aldor used the name 'Type'. So in OpenAxiom we may write: x:Domain := Domain but in Aldor we would say: x:Type := Type; So finally in OpenAxiom we should say: "Categories are sub-domains of 'Domain." The most recent revision of Open-Axiom gives these results: (1) -> x:Domain:=Domain (1) Domain Type: Type (2) -> y:Category:=IntegerNumberSystem Category is a category, not a domain, and declarations require domains. (2) -> y:Domain:=IntegerNumberSystem (2) IntegerNumberSystem Type: Category (3) -> z:Domain:=Integer (3) Integer Type: Domain (4) -> w:=Domain:=Category You have used the abbreviation Domain of the constructor Domain on the left-hand side of an assignment expression. This is not allowed. (4) -> w:Domain:=Category (4) Category Type: Type -------- I think that 'Type: Type' does not make sense and (2) and (4) above should not be errors. > > | 'Domain' is a domain, but are sub-domains of domain also domains? > > Exactly what do you mean by this? > Stephen Watt's definition does not require that sub-types of Type are domains - only that Type itself is a domain. However in Aldor (and Axiom) we also want categories to be values (object) belonging to some domain called Category. > | So again, what is Category? > > See my answer above. It is the type of all category objects. I think that is ok provided Category is itself a domain. But it misses an important aspect: Objects of type Category are subtypes of Type (subdomains of Domain). > > | For example IntegerNumberSystem is a category. Right now OpenAxiom > | says: > | > | (1) -> I:=Integer > | > | (1) Integer > | Type: Domain > | > | (2) -> x:=IntegerNumberSystem > | > | (2) IntegerNumberSystem > | Type: Category > | > | But in FriCAS (and Axiom), we still get: > | > | (1) -> I:=Integer > | > | (1) Integer > | Type: Domain > | > | (2) -> x:=IntegerNumberSystem > | > | (2) IntegerNumberSystem > | Type: SubDomain Domain > | > | ------ > | > | which I guess is technically correct, unfortunately 'Domain' and > | 'SubDomain' where never defined as domain constructors in either > | Axiom or FriCAS. OpenAxiom corrected that problem but it > | introduced 'Category' as a domain (sometimes) instead of defining > | 'SubDomain'. > > What is SubDomain? > I am guessing and trying to fill-in the blanks since as far as I know there is no written documentation in Axiom about this, but it seems to me that SubDomain must be a domain constructor that takes a domain as argument. Specify we need Category = SubDomain(Domain) But Domain is itself a domain so maybe one should be able to write, for example: x:SubDomain(Integer) := PositiveInteger ?? > | I guess I am still a little confused about all of this. :-) > > The problem, as I see it, is fundamentally that of bridging the gap > between two level systems. > Ok, I agree. I think that is exactly what Stephen Watt's definition accomplishes by: "Domains are objects of the domain Type and Categories are subtypes of Type". The difference between the two levels is one of membership versus subsets. > ... Regards, Bill Page. ------------------------------------------------------------------------- Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW! Studies have shown that voting for your favorite open source project, along with a healthy diet, reduces your potential for chronic lameness and boredom. Vote Now at http://www.sourceforge.net/community/cca08 _______________________________________________ open-axiom-devel mailing list open-axiom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open-axiom-devel