"Bill Page" <[EMAIL PROTECTED]> writes: [...]
| >>> | >>> In Implicit System F, or in a forall-quantified style I would write | >>> | >>> forall(T: Type) . | >>> Associative(Modemap(T,T,T): op): Category == with nil | >>> | >>> so that when I say Associative(_+$Integer), T gets deduced to | >>> Integer. You can see how this relates to the issue Stephen and | >>> I discussed at the workshop in Hagenber. | >>> | >> | >> Yes, I thought it was an interesting discussion but this machinery | >> strikes me as being to "heavy" for what seems to me to be a relatively | >> simple problem. I am afraid that such changes lead away from the | >> original intend of Spad/Aldor as fundamentally an *algebraic* | >> language. But my ideas about this are only partially formed, so I do | >> want to keep an open mind. | > | > That is interesting. | > I would be highly interested in knowing what you think is not algebraic | > about a universally quantified type. | > | | Well, to start with the construction 'Associative(_+$Integer)' is | rather strange. `Strange' as in `I have never seen it before', or as in ...? | A category is a predicate which identifies a specific | subset of domains (subdomain of Domain), namely those which explicitly | include 'Associative(something)' in a 'Join' or 'with' clause. That is one interpretation of category. I find it more useful to view a category as a specification, freeing my mind of whether it should be tied to a domain or not. | The | expression '_+$Integer' on the other hand is evaluated as a specific | function exported by the domain 'Integer'. Not in the model I showed. Rather it evaluated to a modemap: an abstract description of an operation. E.g. it says what its domain of computation is, what is its name, and what is its signature. Exactly, all I need to identifier a specific operation. | How are we to use this to | imply that the operation exported by Integer is associative? Maybe you | would write: | | Integer():Join(Associative(_+$%),...) Nope, my opinion about something like Ring(a:Symbol,z:Symbol,m:Symbol,o:Symbol) == Join(Associative(a), Commutative(a), Identity(a,z), Associative(m), Commutative(m), Identity(m,o), ... etc. is unimprintable, so I did not engage in that road. Rather, my approach is that algebraic properties such as associativitity or commutativity are properties of *operations* or collection of *operations*. Consequently, their expressions in computer program should ideally directly reflect their mathematical notions. So, in my scheme, once _+$Integer is defined, one can augment the working environment with the idea that it is commutative and associative: assume Associative _+$Integer assume Commutative _+$Integer with neutralElement == 0$Integer (the category Commutative _+Integer exports the constant/operation neutralElement). It is a simple extensible scheme. I does not require excessive oversight from my part to know all the possible operations that are going to be defined for a given domain and and list them in the exports of the domain. | If so, then I do not see why you would prefer this over the semantics | of simply passing a symbol. See above. -- Gaby ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ open-axiom-devel mailing list open-axiom-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open-axiom-devel