#include <abelian.h>
Collaboration diagram for atlas::abelian::Homomorphism:

Public Member Functions | |
| Homomorphism (const std::vector< GrpArr > &, const GroupType &, const GroupType &) | |
| void | apply (GrpArr &, const GrpArr &) const |
| GrpNbr | apply (GrpNbr) const |
| bool | defined (const GrpArr &) const |
| bool | defined (GrpNbr) const |
Private Attributes | |
| GroupType | d_source |
| GroupType | d_dest |
| GroupType | d_cosource |
| GroupType | d_codest |
| unsigned long | d_annihilator |
| matrix::Matrix< unsigned long > | d_matrix |
As we know, for such a homomorphism to be well defined, the matrix entry (i,j) should be a multiple of d_dest[i]/g, with g = gcd(d_dest[i],d_source[j]).
Here we take a different approach. We set M a common multiple of the annihilators of d_source and d_dest. Then we allow arbitrary coefficients in Z/M. The corresponding matrix is interpreted as follows. It is defined only for those tuples (x_1,...,x_m) s.t. for all i, sum_j a_ij q_j x_j is of index t_i in Z/M, where (q_j) is the cotype of d_source w.r.t. M; and then the corresponding value y_i is (sum_j a_ij q_j x_j)/(M/t_i). It is easy to see that this definition is in fact independent of the choice of M (of course we will take the lcm of the annihilators.)
Definition at line 207 of file abelian.h.
|
||||||||||||||||
|
Synopsis: constructs the homomorphism with matrix al, from a group of type source to a group of type dest. Precondition: the elements of al are of size source.size(), and their number is dest.size(); Definition at line 407 of file abelian.cpp. References d_annihilator, d_codest, d_cosource, d_dest, d_matrix, d_source, and atlas::arithmetic::lcm(). |
|
|
Synopsis: return h(source). Precondition: source is in the subgroup for which this makes sense; Forwarded to the GrpArr form. Definition at line 477 of file abelian.cpp. References atlas::abelian::toArray(), and atlas::abelian::toGrpNbr(). |
|
||||||||||||
|
Synopsis: applies the homomorphism to source according to the rules explained in the introduction to this section, and puts the result in dest. Precondition: source is in the subgroup for which this makes sense; dest is already allocated to the correct size. NOTE: we put in an assertion for safety. NOTE: sloppy implementation; we don't worry about overflow. Definition at line 449 of file abelian.cpp. |
|
|
Synopsis: tells whether x is in the domain. Forwarded to the array-version. Definition at line 517 of file abelian.cpp. References atlas::abelian::toArray(). |
|
|
Synopsis: tells whether a is in the domain. This means that a satisfies the congruences stated in the apply function. Definition at line 496 of file abelian.cpp. |
|
|
Definition at line 215 of file abelian.h. Referenced by Homomorphism(). |
|
|
Definition at line 214 of file abelian.h. Referenced by Homomorphism(). |
|
|
Definition at line 213 of file abelian.h. Referenced by Homomorphism(). |
|
|
Definition at line 212 of file abelian.h. Referenced by Homomorphism(). |
|
|
Definition at line 216 of file abelian.h. Referenced by Homomorphism(). |
|
|
Definition at line 211 of file abelian.h. Referenced by Homomorphism(). |
1.3.9.1