Dual groups of Finite Multiplicative Abelian Groups

The basic idea is very simple. Let G be an abelian group and \(G^*\) its dual (i.e., the group of homomorphisms from G to \(\CC^\times\)). Let \(g_j\), \(j=1,..,n\), denote generators of \(G\) - say \(g_j\) is of order \(m_j>1\). There are generators \(X_j\), \(j=1,..,n\), of \(G^*\) for which \(X_j(g_j)=\exp(2\pi i/m_j)\) and \(X_i(g_j)=1\) if \(i\not= j\). These are used to construct \(G^*\).

Sage supports multiplicative abelian groups on any prescribed finite number \(n > 0\) of generators. Use AbelianGroup() function to create an abelian group, the dual_group() method to create its dual, and then the gen() and gens() methods to obtain the corresponding generators. You can print the generators as arbitrary strings using the optional names argument to the dual_group() method.

EXAMPLES:

sage: F = AbelianGroup(5, [2,5,7,8,9], names='abcde')
sage: (a, b, c, d, e) = F.gens()

sage: Fd = F.dual_group(names='ABCDE')
sage: Fd.base_ring()
Cyclotomic Field of order 2520 and degree 576
sage: A,B,C,D,E = Fd.gens()
sage: A(a)
-1
sage: A(b), A(c), A(d), A(e)
(1, 1, 1, 1)

sage: Fd = F.dual_group(names='ABCDE', base_ring=CC)
sage: A,B,C,D,E = Fd.gens()
sage: A(a)    # abs tol 1e-8
-1.00000000000000 + 0.00000000000000*I
sage: A(b); A(c); A(d); A(e)
1.00000000000000
1.00000000000000
1.00000000000000
1.00000000000000

AUTHORS:

  • David Joyner (2006-08) (based on abelian_groups)
  • David Joyner (2006-10) modifications suggested by William Stein
  • Volker Braun (2012-11) port to new Parent base. Use tuples for immutables. Default to cyclotomic base ring.
sage.groups.abelian_gps.dual_abelian_group.DualAbelianGroup_class

Dual of abelian group.

EXAMPLES:

sage: F = AbelianGroup(5,[3,5,7,8,9], names="abcde")
sage: F.dual_group()
Dual of Abelian Group isomorphic to Z/3Z x Z/5Z x Z/7Z x Z/8Z x Z/9Z
over Cyclotomic Field of order 2520 and degree 576
sage: F = AbelianGroup(4,[15,7,8,9], names="abcd")
sage: F.dual_group(base_ring=CC)
Dual of Abelian Group isomorphic to Z/15Z x Z/7Z x Z/8Z x Z/9Z
over Complex Field with 53 bits of precision
sage.groups.abelian_gps.dual_abelian_group.is_DualAbelianGroup(x)

Return True if \(x\) is the dual group of an abelian group.

EXAMPLES:

sage: from sage.groups.abelian_gps.dual_abelian_group import is_DualAbelianGroup
sage: F = AbelianGroup(5,[3,5,7,8,9], names=list("abcde"))
sage: Fd = F.dual_group()
sage: is_DualAbelianGroup(Fd)
True
sage: F = AbelianGroup(3,[1,2,3], names='a')
sage: Fd = F.dual_group()
sage: Fd.gens()
(1, X1, X2)
sage: F.gens()
(1, a1, a2)