axiom-developer
[Top][All Lists]

## RE: [Axiom-developer] Curiosities with Axiom mathematical structures

 From: Bill Page Subject: RE: [Axiom-developer] Curiosities with Axiom mathematical structures Date: Sun, 26 Feb 2006 21:24:10 -0500

```On February 26, 2006 11:43 AM Gabriel Dos Reis wrote:
> | Gabriel Dos Reis wrote:
> | >   In the impressive diagram titled "Basic Agebra
> | > Hierarchy" displayed in the Axiom Book (I only have
> | > a copy of the edition copyrighted 1992, NAG),
> | > AbelianSemiGroup is not "derived" from SemiGroup,
> | > and similarly AbelianMonoid is not "derived" from
> | > Monoid.  I find that curious as it goes counter the
> | > mathematical fact that an AbelianMonoid *is* a
> | > Monoid, with an additional algebraic law (commutation).
> | >
> | >   Does anyone know the reason of those curiosities?
> |
>
> William Sit writes:
> | One probable reason may be the convention in mathematics to
> | use + instead of * when a semigroup, monoid, or group is
> | abelian.
>
> I find that argument very unconvincing for several reasons:
>
>    1.  "+" or "*" are *syntax*, not algebraic properties.
>        Whether a monoid is Abelian or not does stop it from
>        being a monoid.  The mathematical definition of an
>        Abelian monoid is that it is a monoid, whose operation

I don't think there is any essential reason why SemiGroup and
Monoid could not be implemented in the way you suggest. For
example:

)abbrev category SGROUP SemiGroup
SemiGroup(m:Symbol): Category == SetCategory with
m: (%,%) -> %    ++ returns the product of x and y.
associative(m)

)abbrev category ABELSQ AbelianSemiGroup
AbelianSemiGroup(m:Symbol): Category == SemiGroup(m) with
abelian(m)

------

The symbol for product can be passed as a parameter.

)show SemiGroup(*)

I think the reasons are only historical. The changes to the
Axiom library to implement this would be quite extensive.

One thing to remember about Axiom is that it does not actually
implement "axioms" in a constructive manner. The properties
'associative' and 'abelian' are simply declarative. It is up
to the SPAD programmer to include appropriate code such as

if D has associate("*"::Symbol) then ...

Regards,
Bill Page

```