Hi Dan, On 17 jun, 17:53, Dan Gordon <dmgo...@gmail.com> wrote: > Back in 2008 there was a discussion of the elementary_divisors > function for abelian groups. While it's not universal, most group > theory and algebra books define the elementary divisors of a finite > abelian group G to be a list of prime powers such that G is isomorphic > to the direct product of cyclic groups of order {p_i}^{n_i}, while the > invariants are integers m_1,m_2,...,m_k such that m_i | m_{i+1}, and G > is isomorphic to the direct product of cyclic groups of order m_i. > For example, right now we have this: > > sage: G=AbelianGroup([6,10]) > sage: G.elementary_divisors() > [2, 30] > sage: G.invariants() > [6, 10]
Maybe I am missing something, but this doesn't look mathematically correct at all! The factors 2, 30 are not the elementary divisors of the group, but rather its invariant factors, whilst the elementary divisors should be 2,2,3,5. It looks to me like in the current implementation the terms "invariant factor" and "elementary divisor" are thought of as the same thing, but they shouldnt [1] Mathematically, the numbers 6 and 10 are not "invariant" for this group in any sense as there is no canonical way of picking them just out of the group structure, so I'd say that the use of the "invariant" word is not the most appropriate. IMO the function "elementary_divisors" should be renamed to "invariant_factors", and "elementary_divisors" should instead do something like def elementary_divisors(self): l = [] for f in G.invariants(): for p,e in f.factor(): l.append(p**e) l.sort() return l As Rob mentions, these algorithms work regardless the structure is additive or multiplicative (as the only thing needed is the orders of the direct summands used for defining the group), so they could easily be refactored inside 9773. Cheers Javier [1] http://en.wikipedia.org/wiki/Structure_theorem_for_finitely_generated_modules_over_a_principal_ideal_domain -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org