atlas  0.6
Public Member Functions | Private Attributes | List of all members
atlas::abelian::Homomorphism Class Reference

#include <abelian.h>

Collaboration diagram for atlas::abelian::Homomorphism:
Collaboration graph
[legend]

Public Member Functions

 Homomorphism (const std::vector< GrpArr > &, const FiniteAbelianGroup &, const FiniteAbelianGroup &)
 
GrpArr operator* (const GrpArr &) const
 
GrpNbr operator* (GrpNbr) const
 

Private Attributes

GroupType d_source
 
GroupType d_dest
 
GroupType d_cosource
 
GroupType d_codest
 
unsigned long d_annihilator
 
matrix::PID_Matrix< unsigned long > d_matrix
 

Detailed Description

A |Homomorphism| object represents a homomorphism from a group of type |d_source| to a group of type |d_dest|. The essential data is a matrix |d_matrix| with integral coefficients. As usual the matrix entry (i,j) expresses component $i$ of the image of generator $j$.

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

Computationally we shall proceed as follows. We set $M$ to a common multiple of the annihilators of |d_source| and |d_dest|, and think of all cyclic groups as embedded in $Z/M$; this means that before acting upon a source element $(x_1,...,x_m)$ we should multiply each component $x_j$ by the cotype $q_j=M/s_j$ of that component with respect to $M$, where $s_j$ is |d_source[j]|. After forming $y_j= a_{i,j} q_j x_j$ for each $i$, the component $y_i$ must be in the subgroup of index $t_i$ in $Z/M$, where $t_i$ is |d_dest[i]|, in other words it must be divisible by $M/t_i$, and the compoentn $i$ of the final result will be $y_i/(M/t_i)$. This definition is independent of the choice of $M$; we will take the lcm of the annihilators.

In fact this definition might work for some group elements of the source but not for all. In that case we don't really have a homomorphism, but we allow applying to those group elements for which it works nontheless. The predicates |defined| serve to find out whether a source element is OK.

Constructor & Destructor Documentation

atlas::abelian::Homomorphism::Homomorphism ( const std::vector< GrpArr > &  al,
const FiniteAbelianGroup source,
const FiniteAbelianGroup dest 
)

Constructs the homomorphism with matrix al, from groups |source| to |dest|.

Precondition: the elements of |al| are of size source.rank(), and their number is dest.rank(). Note that the matrix is therefore given by rows (linear forms on |source|), not by columns (images in |dest|); unusal!

Member Function Documentation

Synopsis: applies the homomorphism to x according to the rules explained in the introduction to this section, and puts the result in dest.

Precondition: x is in the subgroup for which this makes sense.

Synopsis: return h(x).

Precondition: x is in the subgroup for which this makes sense;

Forwarded to the GrpArr form.

Member Data Documentation

unsigned long atlas::abelian::Homomorphism::d_annihilator
private
GroupType atlas::abelian::Homomorphism::d_codest
private
GroupType atlas::abelian::Homomorphism::d_cosource
private
GroupType atlas::abelian::Homomorphism::d_dest
private
matrix::PID_Matrix<unsigned long> atlas::abelian::Homomorphism::d_matrix
private
GroupType atlas::abelian::Homomorphism::d_source
private

The documentation for this class was generated from the following files: