]>
While such statements are only comments, correctness Axiom can enforce their intention simply by shifting the burden of responsibility onto the author of a domain. A domain belongs to category only if the author asserts that the domain belongs to Ring or to a category that extends Ring.
This principle of assertion is important for large user-extendable systems. Axiom has a large library of operations offering facilities in many areas. Names such as norm and product, for example, have diverse meanings in diverse contexts. An inescapable hindrance to users would be to force those who wish to extend Axiom to always invent new names for operations. I don't think disambiguate is really a word, though I like it Axiom allows you to reuse names, and then use context to disambiguate one from another.
Here is another example of why this is important. Some languages, such as APL, APL denote the Boolean constants true and false by the integers and . You may want to let infix operators and serve as the logical operators or and and, respectively. But note this: Boolean is not a ring. The inverse axiom for Ring states:
Every element has an additive inverse such that .
Boolean is not a ring since true has no inverse---there is no inverse element such that (in terms of booleans, (true or a) = false). Nonetheless, Axiom could easily and correctly implement Boolean this way. Boolean simply would not assert that it is of category Ring. Thus the ``+'' for Boolean values is not confused with the one for Ring. Since the Polynomial constructor requires its argument to be a ring, Axiom would then refuse to build the domain Polynomial(Boolean). Also, Axiom would refuse to wrongfully apply algorithms to Boolean elements that presume that the ring axioms for ``+'' hold.