Elements (characters) of the dual group of a finite Abelian group - Groups

Skip to content
Back to top
View this page
Edit this page

# Elements (characters) of the dual group of a finite Abelian group

To obtain the dual group of a finite Abelian group, use the `dual_group()` method:

Sage

    sage: F = AbelianGroup([2,3,5,7,8], names='abcde')
    sage: F
    Multiplicative Abelian group isomorphic to C2 x C3 x C5 x C7 x C8

    sage: Fd = F.dual_group(names='ABCDE'); Fd
    Dual of Abelian Group isomorphic to Z/2Z x Z/3Z x Z/5Z x Z/7Z x Z/8Z
    over Cyclotomic Field of order 840 and degree 192

Python

    >>> from sage.all import *
    >>> F = AbelianGroup([Integer(2),Integer(3),Integer(5),Integer(7),Integer(8)], names='abcde')
    >>> F
    Multiplicative Abelian group isomorphic to C2 x C3 x C5 x C7 x C8

    >>> Fd = F.dual_group(names='ABCDE'); Fd
    Dual of Abelian Group isomorphic to Z/2Z x Z/3Z x Z/5Z x Z/7Z x Z/8Z
    over Cyclotomic Field of order 840 and degree 192

The elements of the dual group can be evaluated on elements of the original group:

Sage

    sage: a,b,c,d,e = F.gens()
    sage: A,B,C,D,E = Fd.gens()
    sage: A*B^2*D^7
    A*B^2
    sage: A(a)
    -1
    sage: B(b)
    zeta840^140 - 1
    sage: CC(_)     # abs tol 1e-8
    -0.499999999999995 + 0.866025403784447*I
    sage: A(a*b)
    -1
    sage: (A*B*C^2*D^20*E^65).exponents()
    (1, 1, 2, 6, 1)
    sage: B^(-1)
    B^2

[Python]

    >>> from sage.all import *
    >>> a,b,c,d,e = F.gens()
    >>> A,B,C,D,E = Fd.gens()
    >>> A*B**Integer(2)*D**Integer(7)
    A*B^2
    >>> A(a)
    -1
    >>> B(b)
    zeta840^140 - 1
    >>> CC(_)     # abs tol 1e-8
    -0.499999999999995 + 0.866025403784447*I
    >>> A(a*b)
    -1
    >>> (A*B*C**Integer(2)*D**Integer(20)*E**Integer(65)).exponents()
    (1, 1, 2, 6, 1)
    >>> B**(-Integer(1))
    B^2

AUTHORS:

- David Joyner (2006-07); based on abelian_group_element.py.

- 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.

class sage.groups.abelian_gps.dual_abelian_group_element.DualAbelianGroupElement(parent, exponents)

  Bases: `AbelianGroupElementBase`

  Base class for abelian group elements

  word_problem(words)

    This is a rather hackish method and is included for completeness.

    The word problem for an instance of DualAbelianGroup as it can for an AbelianGroup. The reason why is that word problem for an instance of AbelianGroup simply calls GAP (which has abelian groups implemented) and invokes “EpimorphismFromFreeGroup” and “PreImagesRepresentative”. GAP does not have duals of abelian groups implemented. So, by using the same name for the generators, the method below converts the problem for the dual group to the corresponding problem on the group itself and uses GAP to solve that.

    EXAMPLES:

    Sage

        sage: G = AbelianGroup(5,[3, 5, 5, 7, 8], names='abcde')
        sage: Gd = G.dual_group(names='abcde')
        sage: a,b,c,d,e = Gd.gens()
        sage: u = a^3*b*c*d^2*e^5
        sage: v = a^2*b*c^2*d^3*e^3
        sage: w = a^7*b^3*c^5*d^4*e^4
        sage: x = a^3*b^2*c^2*d^3*e^5
        sage: y = a^2*b^4*c^2*d^4*e^5
        sage: e.word_problem([u,v,w,x,y])                                           # needs sage.libs.gap
        [[b^2*c^2*d^3*e^5, 245]]

    Python

        >>> from sage.all import *
        >>> G = AbelianGroup(Integer(5),[Integer(3), Integer(5), Integer(5), Integer(7), Integer(8)], names='abcde')
        >>> Gd = G.dual_group(names='abcde')
        >>> a,b,c,d,e = Gd.gens()
        >>> u = a**Integer(3)*b*c*d**Integer(2)*e**Integer(5)
        >>> v = a**Integer(2)*b*c**Integer(2)*d**Integer(3)*e**Integer(3)
        >>> w = a**Integer(7)*b**Integer(3)*c**Integer(5)*d**Integer(4)*e**Integer(4)
        >>> x = a**Integer(3)*b**Integer(2)*c**Integer(2)*d**Integer(3)*e**Integer(5)
        >>> y = a**Integer(2)*b**Integer(4)*c**Integer(2)*d**Integer(4)*e**Integer(5)
        >>> e.word_problem([u,v,w,x,y])                                           # needs sage.libs.gap
        [[b^2*c^2*d^3*e^5, 245]]

sage.groups.abelian_gps.dual_abelian_group_element.is_DualAbelianGroupElement(x)

  Test whether `x` is a dual Abelian group element.

  INPUT:

  - `x` – anything

  OUTPUT: boolean

  EXAMPLES:

  Sage

      sage: from sage.groups.abelian_gps.dual_abelian_group import is_DualAbelianGroupElement
      sage: F = AbelianGroup(5, [5,5,7,8,9], names=list("abcde")).dual_group()
      sage: is_DualAbelianGroupElement(F)
      doctest:warning...
      DeprecationWarning: The function is_DualAbelianGroupElement is deprecated;
      use 'isinstance(..., DualAbelianGroupElement)' instead.
      See https://github.com/sagemath/sage/issues/38184 for details.
      False
      sage: is_DualAbelianGroupElement(F.an_element())
      True

  Python

      >>> from sage.all import *
      >>> from sage.groups.abelian_gps.dual_abelian_group import is_DualAbelianGroupElement
      >>> F = AbelianGroup(Integer(5), [Integer(5),Integer(5),Integer(7),Integer(8),Integer(9)], names=list("abcde")).dual_group()
      >>> is_DualAbelianGroupElement(F)
      doctest:warning...
      DeprecationWarning: The function is_DualAbelianGroupElement is deprecated;
      use 'isinstance(..., DualAbelianGroupElement)' instead.
      See https://github.com/sagemath/sage/issues/38184 for details.
      False
      >>> is_DualAbelianGroupElement(F.an_element())
      True