To obtain the dual group of a finite Abelian group, use the dual_group() method:
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") sage: 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 orignial group:
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
Base class for abelian group elements
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.
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],display=False) [[b^2*c^2*d^3*e^5, 245]]
The command e.word_problem([u,v,w,x,y],display=True) returns the same list but also prints \(e = (b^2*c^2*d^3*e^5)^245\).
This was in sage.misc.misc but commented out. Needed to add lists of strings in the word_problem method below.
Return the sum of the elements of x. If x is empty, return z.
The sum of the elements of x.
sage: from sage.groups.abelian_gps.dual_abelian_group_element import add_strings sage: add_strings(, z='empty') 'empty' sage: add_strings(['a', 'b', 'c']) 'abc'
Test whether x is a dual Abelian group element.
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) False sage: is_DualAbelianGroupElement(F.an_element()) True