atlas  0.6
atlas::abelian::Homomorphism Class Reference

`#include <abelian.h>`

Collaboration diagram for atlas::abelian::Homomorphism:
[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

 GrpArr atlas::abelian::Homomorphism::operator* ( const GrpArr & a ) const

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.

 GrpNbr atlas::abelian::Homomorphism::operator* ( GrpNbr x ) const

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 atlas::abelian::Homomorphism::d_matrix
private
 GroupType atlas::abelian::Homomorphism::d_source
private

The documentation for this class was generated from the following files:
• /home/ran/atlas_project/latest_branch_07182016/sources/utilities/abelian.h
• /home/ran/atlas_project/latest_branch_07182016/sources/utilities/abelian.cpp