|
| FiniteAbelianGroup () |
|
| FiniteAbelianGroup (const GroupType &) |
|
bool | operator== (const FiniteAbelianGroup &A) const |
|
bool | operator!= (const FiniteAbelianGroup &A) const |
|
unsigned int | rank () const |
|
const GroupType & | type () const |
|
unsigned long long | order () const |
|
GrpArr | toArray (GrpNbr x) const |
|
GrpArr | toArray (const matrix::Vector< int > &v) const |
|
GrpNbr | toGrpNbr (const GrpArr &a) const |
|
void | toWeight (matrix::Vector< int > &, const GrpArr &) const |
|
void | toWeight (matrix::Vector< int > &, GrpNbr) const |
|
GrpNbr | add (GrpNbr, GrpNbr) const |
|
GrpNbr | add (GrpNbr, const GrpArr &) const |
|
GrpArr & | add (GrpArr &, const GrpArr &) const |
|
GrpArr & | add (GrpArr &, GrpNbr) const |
|
unsigned long | annihilator () const |
|
const GroupType & | cotype () const |
|
GrpNbr | leftApply (GrpNbr, const Endomorphism &) const |
|
GrpArr & | leftApply (GrpArr &, const Endomorphism &) const |
|
GrpNbr | minus (GrpNbr) const |
|
unsigned long | order (GrpNbr) const |
|
unsigned long | order (const bitmap::BitMap &, GrpNbr) const |
| Computes the order of |x| modulo |B|, where |B| is a subgroup represented by flagging the |GrpNbr| values of its elements in a bitmap. More...
|
|
unsigned long | pairing (const GrpArr &, const GrpArr &) const |
| Computes the m in [0,n[ s.t. a(b) = e^{m.2i/n}, where a is interpreted as an element of the dual group ($(G,^)$), which in our representation can be identified with the group itself, b as an element of the group, and n is the annihilator of the group (the last entry in d_type). This is a sort of scalar product, weighted by cotype, modulo n. More...
|
|
unsigned long | pairing (const GrpArr &, const GrpArr &, unsigned long) const |
|
GrpNbr | prod (GrpNbr, unsigned long) const |
|
GrpNbr | subtract (GrpNbr, const GrpNbr) const |
|
GrpArr & | subtract (GrpArr &, const GrpArr &) const |
|
A class representing a finite Abelian group as a product of finite cyclic groups of orders d_type[0], d_type[1], d_type[2]... It is assumed that d_type[0] divides d_type[1], which divides d_type[2], and so on; these orders are therefore invariants that characterise the group. The vector d_cotype has in its jth coordinate the quotient d_type[last]/d_type[j]. This means that the jth factor of the group may be written as the quotient of the cyclic group of order d_type[last] by the subgroup of order d_cotype[j]. The integer d_size is the order of the group.
unsigned long atlas::abelian::FiniteAbelianGroup::pairing |
( |
const GrpArr & |
a, |
|
|
const GrpArr & |
b |
|
) |
| const |
Computes the m in [0,n[ s.t. a(b) = e^{m.2i/n}, where a is interpreted as an element of the dual group ($(G,^)$), which in our representation can be identified with the group itself, b as an element of the group, and n is the annihilator of the group (the last entry in d_type). This is a sort of scalar product, weighted by cotype, modulo n.
T
unsigned long atlas::abelian::FiniteAbelianGroup::pairing |
( |
const GrpArr & |
a, |
|
|
const GrpArr & |
b, |
|
|
unsigned long |
t |
|
) |
| const |
Synopsis: computes the m in [0,t[ s.t. a(b) = e^{2i pi m/t}, where a is interpreted as an element of the dual group, b as an element of the group.
Precondition: pairing(a,b) is an element of t-torsion in Z/n, where n is the annihilator of the group;
The required m is just pairing(a,b)/(n/t).
NOTE: this is a sloppy implementation, that doesn't deal carefully with overflow. It is expected to be used only for very small groups.
NOTE: we put in an assertion for safety.