login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for SandBoxAbelianDuck revision 2 of 8

1 2 3 4 5 6 7 8
Editor: Bill Page
Time: 2008/07/27 14:04:07 GMT-7
Note: ducks

changed:
-presentations Stephen Watt began with:
-
-Q: When is a duck not a Duck?
-A: When it is an AbelianDuck!
presentations Stephen Watt began with::

  Q: When is a duck not a Duck?
  A: When it is an !AbelianDuck!

changed:
-But an AbelianDuck really is a Duck!
But an 'AbelianDuck' really is a 'Duck'!

During the Aldor/Axiom Workshop 2008 at RISC in one of his presentations Stephen Watt began with:

  Q: When is a duck not a Duck?
  A: When it is an AbelianDuck!

This is in reference to the problem of defining appropriate categories for domains such as Integer which have a monoid consisting of (*,1) as well as a monoid consisting of (+,0) (or more specifically, a commutative group which is contained in such a monoid). The issue is: Why should we be required to use different names for categories like Monoid to mean just (*,1) and AbelianGroup to mean (+,0).

But an AbelianDuck really is a Duck!

Here is another (still unsuccessful) attempt to express this in SPAD code. The error during compile suggests a compiler error, but the specifications of the language are not clear on exactly whether this sort of construction is really intended to work.

spad
)abbrev category ASSOC Associative
m(m(a,b),c) = m(a,m(b,c)) Associative(m:Symbol):Category == with m:(%,%) -> %
)abbrev category COM Commutative -- m(a,b) = m(b,a) Commutative(m:Symbol):Category == with m:(%,%) -> %
)abbrev category ID Identity -- m(u,a)=a and m(a,u)=a Identity(u:Symbol,m:Symbol):Category == Commutative(m) with u: () -> %
)abbrev category INV Inverse -- m(inv(a),a) = u and m(a,inv(a)) = u Inverse(m:Symbol,inv:Symbol,u:Symbol):Category == Join(Commutative(m),Identity(u)) with inv: % -> %
)abbrev category DIST Distributes -- m(a,s(b,c)) = s(m(a,b),m(a,c)) -- m(s(a,b),c) = s(m(a,c),m(b,c)) Distributes(m,s):Category == with nil
)abbrev category MONOID Monoid Monoid(m:Symbol,u:Symbol): Category == Join(Associative(m),Identity(u))
)abbrev category GROUP Group Group(m:Symbol,inv:Symbol,u:Symbol): Category == Join(Monoid(m,u),Inverse(m,inv,u))
)abbrev category ABELG AbelianGroup AbelianGroup(m:Symbol,inv:Symbol,u:Symbol): Category == Joint(Group(m,inv,u),Commutative(m))
)abbrev category RING Ring Ring(s:Symbol,inv:Symbol,z:Symbol, m:Symbol,u:Symbol): Category == Join(AbelianGroup(s,inv,z),Monoid(m,u),Distributes(m,s))
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/9120812264571396571-25px001.spad using 
      old system compiler.
   ASSOC abbreviates category Associative 
------------------------------------------------------------------------
   initializing NRLIB ASSOC for Associative 
   compiling into NRLIB ASSOC 
;;; *** |Associative| REDEFINED Time: 0 SEC.
finalizing NRLIB ASSOC Processing Associative for Browser database: --->-->Associative((m (% % %))): Not documented!!!! --->-->Associative(constructor): Not documented!!!! --->-->Associative(): Missing Description ------------------------------------------------------------------------ Associative is now explicitly exposed in frame initial Associative will be automatically loaded when needed from /var/zope2/var/LatexWiki/ASSOC.NRLIB/code
COM abbreviates category Commutative ------------------------------------------------------------------------ initializing NRLIB COM for Commutative compiling into NRLIB COM
;;; *** |Commutative| REDEFINED Time: 0 SEC.
finalizing NRLIB COM Processing Commutative for Browser database: --->-->Commutative((m (% % %))): Not documented!!!! --->-->Commutative(constructor): Not documented!!!! --->-->Commutative(): Missing Description ------------------------------------------------------------------------ Commutative is now explicitly exposed in frame initial Commutative will be automatically loaded when needed from /var/zope2/var/LatexWiki/COM.NRLIB/code
ID abbreviates category Identity ------------------------------------------------------------------------ initializing NRLIB ID for Identity compiling into NRLIB ID
;;; *** |Identity| REDEFINED Time: 0 SEC.
finalizing NRLIB ID Processing Identity for Browser database: --->-->Identity((u (%))): Not documented!!!! --->-->Identity(constructor): Not documented!!!! --->-->Identity(): Missing Description ------------------------------------------------------------------------
>> System error: |Identity;| [or a callee] requires more than one argument.

axiom
)sh Ring("+","-","0",*,"1")
The constructor Ring takes 0 arguments and you have given 5 . Ring("+","-","0","*","1") has commutative("+")
The constructor Ring takes 0 arguments and you have given 5 .

Let's try this ...

axiom
)sh Ring(a,b,c,d,e)
The constructor Ring takes 0 arguments and you have given 5 . Ring(a,b,c,d,e) has commutative(a)
The constructor Ring takes 0 arguments and you have given 5 .

Interesting! Is it somewhere written that "has" can have a category as its first argument?

OK, we are going to implement...

spad
)abbrev domain MYINT MyInteger MyInteger: Ring(a,b,c,d,e) == add Rep:=Integer a(x: %, y: %): % == x b(x: %): % == x c(): % == 0 pretend % d(x: %, y: %): % == x e(): % == 0 pretend %
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/4007632824524312372-25px004.spad using 
      old system compiler.
   MYINT abbreviates domain MyInteger 
------------------------------------------------------------------------
   initializing NRLIB MYINT for MyInteger 
   compiling into NRLIB MYINT 
>> System error: EVAL [or a callee] requires less than five arguments.