#9773: Abelian groups
---------------------------+------------------------------------------------
   Reporter:  rbeezer      |       Owner:  AlexGhitza
       Type:  enhancement  |      Status:  needs_info
   Priority:  major        |   Milestone:  sage-4.5.3
  Component:  algebra      |    Keywords:            
     Author:  Rob Beezer   |    Upstream:  N/A       
   Reviewer:               |      Merged:            
Work_issues:               |  
---------------------------+------------------------------------------------
Changes (by newvalueoldvalue):

 * cc: davidloeffler, cremona, was, nthiery, boothby, jason, kcrisman
 (added)
  * status:  new => needs_info
  * type:  defect => enhancement
  * author:  => Rob Beezer


Comment:

 AAG is the class of additive abelian groups.  This is an infinite group
 with a subgroup and a quotient.  (Typically quotients lose the generators
 and are "generic" but not in this example.)

 {{{
 sage: A=AAG([3,4,0])
 sage: A.gens()
 ((2, 3, 0), (0, 0, 1))
 sage: A.0.order()
 12
 sage: A.1.order()
 +Infinity
 sage: B=A.subgroup([A.1])
 sage: B
 Infinite additive abelian group isomorphic to Z with generator(s): (0, 0,
 1)
 sage: C=A/B
 sage: C
 Finite additive abelian group isomorphic to Z_12 with generator(s): (2, 3,
 0)
 }}}

 GUN is a constructor of Groups of Units Mod n.  It employs MAG, the class
 of multiplicative abelian groups.  This is an intersection of two
 subgroups, and then a Cayley table is free (in the category of
 multiplicative groups).

 {{{
 sage: G=GUN(72)
 sage: G.list()
 [1, 65, 49, 17, 25, 41, 55, 47, 31, 71, 7, 23, 37, 29, 13, 53, 61, 5, 19,
 11, 67, 35, 43, 59]
 sage: G.subgroup([71,7])
 Finite multiplicative abelian group isomorphic to Z_2 + Z_6 with
 generator(s): 55, 65
 sage: K=G.subgroup([71,7])
 sage: K.list()
 [1, 65, 49, 17, 25, 41, 55, 47, 31, 71, 7, 23]
 sage: L=G.subgroup([13,7])
 sage: L
 Finite multiplicative abelian group isomorphic to Z_2 + Z_6 with
 generator(s): 55, 61
 sage: L.list()
 [1, 61, 49, 37, 25, 13, 55, 43, 31, 19, 7, 67]
 sage: M=K.intersection(L)
 sage: M.list()
 [1, 7, 49, 55, 25, 31]
 sage: M
 Finite multiplicative abelian group isomorphic to Z_6 with generator(s): 7
 sage: M.cayley_table()
 *  a b c d e f
  +------------
 a| a b c d e f
 b| b c d e f a
 c| c d e f a b
 d| d e f a b c
 e| e f a b c d
 f| f a b c d e
 }}}

 This is an example from the current additive abelian wrapper class.  It
 shows the generators keyword allowing arbitrary elements to form the
 group, so long as they know how to add.  GUN above is similar, but with
 multiplication.


 {{{
 sage: E = EllipticCurve('30a2')
 sage: pts = [E(4,-7,1), E(7/4, -11/8, 1), E(3, -2, 1)]
 sage: M=AAG([3,2,2], generators=pts)
 sage: M.list()
 [(0 : 1 : 0), (13 : -52 : 1), (4 : -7 : 1), (3 : -2 : 1), (4 : 2 : 1), (13
 : 38 : 1), (7/4 : -11/8 : 1), (1 : -4 : 1), (-2 : -7 : 1), (-5 : 2 : 1),
 (-2 : 8 : 1), (1 : 2 : 1)]
 sage: M.gens()
 ((7/4 : -11/8 : 1), (13 : -52 : 1))
 sage: N=M.subgroup([M.1])
 sage: N
 Finite additive abelian group isomorphic to Z_6 with generator(s): (13 :
 -52 : 1)
 sage: N.list()
 [(0 : 1 : 0), (13 : -52 : 1), (4 : -7 : 1), (3 : -2 : 1), (4 : 2 : 1), (13
 : 38 : 1)]
 }}}

 There is lots to do here still: different filenames, different class
 names, error-checking, doctests, comparisons, and so on.  But the code
 seems to be working.  I'm not 100% confident on the {{{__call__}}} method
 of the main abstract class and I don't know if I need some things to
 support coercion better.  Any advice or comments at this stage would be
 appreciated before I begin to clean this all up.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/9773#comment:1>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sage-trac?hl=en.

Reply via email to