[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Axiom-developer] Curiosities with Axiom mathematical structures

From: Ralf Hemmecke
Subject: Re: [Axiom-developer] Curiosities with Axiom mathematical structures
Date: Mon, 27 Feb 2006 11:38:40 +0100
User-agent: Thunderbird 1.5 (X11/20051201)

On 02/26/2006 05:42 PM, Gabriel Dos Reis wrote:
Hello Willian,

thanks for the quick reply.

William Sit <address@hidden> writes:

| 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? | | 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 *additionally* is commutative.
2. The set of natural numbers, NN, has *many* Abelian structures on it,
       for examples:
          a. (NN, +, 0) -- the usual addition
          b. (NN, *, 1) -- the usual multiplication, commutative!
          c. (NN, max, 0) -- "max" is the usual maximum function

        Such a counterexample can be multiplied.

One reason for having Monoid and AbelianMoniod (one with "*" and the other with "+") is that neither SPAD nor Aldor allows to rename functions during inheritance.

Note that one would have to say something like

define Monoid(
  *: (%, %) -> %;
  1: %
): Category == ...

define Group(
  *: (%, %) -> %,
  inv: % -> %,
  1: %
): Category == ...

define Ring(.....): Category == with {
  Monoid(*, 1);
  Group(+, -, 0);

OK, that is not well thought of...

Anyway, there is not way to do this in Aldor, yet. At least nobody has told me so far.

If such renaming could be implemented into the Aldor language that would make it even better suited for mathematics. However, then there is need that someone implements these ideas into the compiler. Who?


reply via email to

[Prev in Thread] Current Thread [Next in Thread]