Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

atlas::abelian Namespace Reference


Classes

class  atlas::abelian::FiniteAbelianGroup
class  atlas::abelian::Homomorphism

Typedefs

typedef matrix::Matrix< unsigned
long > 
Endomorphism
typedef unsigned long GrpNbr
typedef std::vector< GrpNbrGrpNbrList
typedef std::vector< unsigned
long > 
GrpArr
typedef std::vector< GrpArrGrpArrList
typedef std::vector< unsigned
long > 
GroupType

Functions

void basis (latticetypes::WeightList &b, const bitmap::BitMap &B, const FiniteAbelianGroup &A)
void coset (bitmap::BitMap &C, const bitmap::BitMap &B, GrpNbr x, const FiniteAbelianGroup &A)
const bitmap::BitMapcycGenerators (const FiniteAbelianGroup &A)
void generateSubgroup (bitmap::BitMap &B, GrpNbr x, const FiniteAbelianGroup &A)
void generators (GrpNbrList &gen, const bitmap::BitMap &B, const FiniteAbelianGroup &A)
bool isElementaryAbelian (const std::vector< unsigned long > &c)
void quotReps (bitmap::BitMap &qr, const bitmap::BitMap &B, const FiniteAbelianGroup &A)
void toArray (GrpArr &a, GrpNbr x, const GroupType &t)
void toArray (GrpArr &a, const latticetypes::Weight &v, const GroupType &t)
void toEndomorphism (Endomorphism &e, const latticetypes::LatticeMatrix &q, const FiniteAbelianGroup &A)
GrpNbr toGrpNbr (const GrpArr &a, const GroupType &t)
void transpose (Endomorphism &e, const FiniteAbelianGroup &A)


Typedef Documentation

typedef matrix::Matrix< unsigned long > atlas::abelian::Endomorphism
 

Definition at line 29 of file abelian.h.

Referenced by atlas::abelian::FiniteAbelianGroup::leftApply(), toEndomorphism(), and transpose().

typedef std::vector<unsigned long> atlas::abelian::GroupType
 

Definition at line 31 of file abelian_fwd.h.

typedef std::vector<unsigned long> atlas::abelian::GrpArr
 

Definition at line 29 of file abelian_fwd.h.

typedef std::vector<GrpArr> atlas::abelian::GrpArrList
 

Definition at line 30 of file abelian_fwd.h.

typedef unsigned long atlas::abelian::GrpNbr
 

Definition at line 27 of file abelian_fwd.h.

typedef std::vector<GrpNbr> atlas::abelian::GrpNbrList
 

Definition at line 28 of file abelian_fwd.h.

Referenced by basis().


Function Documentation

void atlas::abelian::basis latticetypes::WeightList b,
const bitmap::BitMap &  B,
const FiniteAbelianGroup &  A
 

Synopsis: writes A/B in canonical form.

Explanation: we see the current group A as a quotient of Z^d, where d is the rank of A, and the generators of the kernel are given by d_type. Then we wish to write the quotient A/B in canonical form (i.e., as a product of cyclic groups with cardinalities dividing each other.) For this, we put in b a scaled Smith normal basis for the inverse image of B in Z^d.

Note that A is not necessarily in canonical form, so even when B is the trivial subgroup this might yield a basis rather different from the kernel basis.

Definition at line 544 of file abelian.cpp.

References generators(), GrpNbrList, atlas::matrix::initBasis(), atlas::latticetypes::LatticeMatrix, atlas::abelian::FiniteAbelianGroup::rank(), atlas::smithnormal::smithNormal(), atlas::abelian::FiniteAbelianGroup::toWeight(), atlas::abelian::FiniteAbelianGroup::type(), atlas::latticetypes::Weight, and atlas::latticetypes::WeightList.

Referenced by atlas::interpreter::based_involution_wrapper(), atlas::interpreter::filter_units_wrapper(), atlas::testrun::CoveringIterator::makeBasis(), atlas::interpreter::set_inner_class_wrapper(), and atlas::interpreter::set_type_wrapper().

void atlas::abelian::coset bitmap::BitMap &  C,
const bitmap::BitMap &  B,
GrpNbr  x,
const FiniteAbelianGroup &  A
 

Synopsis: puts in C the coset x+B in A.

Precondition: C.size() == A.size();

NOTE : this is a straightforward implementation, shifting elements of B individually.

Definition at line 605 of file abelian.cpp.

References atlas::abelian::FiniteAbelianGroup::add(), atlas::bitmap::BitMap::begin(), atlas::bitmap::BitMap::end(), atlas::bitmap::BitMap::insert(), and atlas::bitmap::BitMap::reset().

Referenced by generateSubgroup(), quotReps(), and atlas::updateCycGenerator().

const bitmap::BitMap & atlas::abelian::cycGenerators const FiniteAbelianGroup &  A  ) 
 

Synopsis: returns a reference to a bitmap containing exactly one generator for each cyclic subgroup of A.

NOTE: it is expected that this function will typically be called repeatedly for the same group. The bitmap is constructed on the first call for the given group, following the principle of lazy evaluation.

Definition at line 631 of file abelian.cpp.

References atlas::bitmap::BitMap::begin(), atlas::bitmap::BitMap::end(), atlas::bitmap::BitMap::fill(), atlas::arithmetic::gcd(), atlas::abelian::FiniteAbelianGroup::order(), atlas::abelian::FiniteAbelianGroup::prod(), atlas::bitmap::BitMap::remove(), atlas::bitmap::BitMap::set_capacity(), atlas::abelian::FiniteAbelianGroup::size(), and atlas::abelian::FiniteAbelianGroup::type().

Referenced by atlas::setCycGenerator().

void atlas::abelian::generateSubgroup bitmap::BitMap &  B,
GrpNbr  x,
const FiniteAbelianGroup &  A
 

Synopsis: transforms B into the subgroup generated by B and x in A.

NOTE : this is a simple-minded implementation; we do not aim for speed.

Definition at line 673 of file abelian.cpp.

References coset(), atlas::abelian::FiniteAbelianGroup::order(), atlas::abelian::FiniteAbelianGroup::prod(), atlas::abelian::FiniteAbelianGroup::size(), and atlas::bitmap::BitMap::swap().

Referenced by atlas::testrun::SubgroupIterator::incrementGenerator().

void atlas::abelian::generators GrpNbrList gen,
const bitmap::BitMap &  B,
const FiniteAbelianGroup &  A
 

Synopsis: puts in gen a list of generators of the subgroup B.

Definition at line 699 of file abelian.cpp.

References atlas::bitmap::BitMap::begin(), and atlas::bitmap::BitMap::end().

Referenced by basis().

bool atlas::abelian::isElementaryAbelian const std::vector< unsigned long > &  c  ) 
 

Tells if c is all twos.

Definition at line 712 of file abelian.cpp.

void atlas::abelian::quotReps bitmap::BitMap &  qr,
const bitmap::BitMap &  B,
const FiniteAbelianGroup &  A
 

Synopsis: puts in qr a list of representatives of the cosets modulo B.

Precondition: qr.size() = A.size();

Algorithm: fill up qr; traverse qr, and for each x that is reached, remove from qr the elements of the coset of x other than x.

The efficiency depends on the efficiency of coset computations.

Definition at line 726 of file abelian.cpp.

References atlas::bitmap::BitMap::andnot(), atlas::bitmap::BitMap::begin(), coset(), atlas::bitmap::BitMap::end(), atlas::bitmap::BitMap::fill(), and atlas::abelian::FiniteAbelianGroup::size().

Referenced by atlas::testrun::CoveringIterator::CoveringIterator(), and atlas::testrun::CoveringIterator::operator++().

void atlas::abelian::toArray GrpArr a,
const latticetypes::Weight v,
const GroupType t
 

Synopsis: reduces v mod d_type.

The only difficulty is to make sure that negative values are reduced in the way that we want.

Precondition: a is set to v.size();

Definition at line 777 of file abelian.cpp.

References atlas::arithmetic::remainder().

Referenced by atlas::abelian::FiniteAbelianGroup::toArray().

void atlas::abelian::toArray GrpArr a,
GrpNbr  x,
const GroupType t
 

Synopsis: puts the array-form of x in a.

Precondition: x is representable for t (x < prod t[j]); otherwise the result is the expression of x modulo that product.

Explanation: the array-form (relative to type) is the unique expression of x in the variable base defined by type.

Definition at line 756 of file abelian.cpp.

Referenced by atlas::abelian::FiniteAbelianGroup::add(), atlas::abelian::Homomorphism::apply(), atlas::abelian::Homomorphism::defined(), atlas::abelian::FiniteAbelianGroup::leftApply(), and atlas::abelian::FiniteAbelianGroup::order().

void atlas::abelian::toEndomorphism Endomorphism e,
const latticetypes::LatticeMatrix q,
const FiniteAbelianGroup &  A
 

Synopsis: transforms q into the corresponding Endomorphism.

This just involves rewriting the coeficients as unsigned longs modulo the type factors. Just in case the conventions for modular arithmetic with negative numbers are not what we want, we make sure that we deal with nonnegative numbers all along.

NOTE: there should be some better way to do this!

Definition at line 797 of file abelian.cpp.

References Endomorphism, atlas::latticetypes::LatticeMatrix, atlas::matrix::Matrix< C >::numColumns(), atlas::matrix::Matrix< C >::numRows(), atlas::arithmetic::remainder(), atlas::matrix::Matrix< C >::resize(), and atlas::abelian::FiniteAbelianGroup::type().

GrpNbr atlas::abelian::toGrpNbr const GrpArr a,
const GroupType t
 

Synopsis: returns the number-form of a.

Precondition: a is representable as a GrpNbr;

Definition at line 823 of file abelian.cpp.

Referenced by atlas::abelian::FiniteAbelianGroup::add(), atlas::abelian::Homomorphism::apply(), atlas::abelian::FiniteAbelianGroup::leftApply(), and atlas::abelian::FiniteAbelianGroup::toGrpNbr().

void atlas::abelian::transpose Endomorphism e,
const FiniteAbelianGroup &  A
 

Synopsis: transposes the endomorphism e.

This is more subtle than one might think; the main point is that when m|n, the transpose of the canonical map Z/nZ -> Z/mZ is the injection Z/mZ -> Z/nZ which takes 1 to n/m. In general, any map Z/nZ -> Z/mZ factors thru Z/dZ, where d = gcd(m,n), so it is a multiple of the map defined by 1 -> m/d; the transpose is the same multiple of 1 -> n/d.

NOTE: this implementation works for homomorphisms between different groups just as well (except that one needs two grouptypes then.)

Definition at line 843 of file abelian.cpp.

References Endomorphism, atlas::arithmetic::gcd(), atlas::matrix::Matrix< C >::numColumns(), atlas::matrix::Matrix< C >::numRows(), atlas::matrix::Matrix< C >::resize(), atlas::abelian::FiniteAbelianGroup::type(), and atlas::lietype::type().


Generated on Wed Mar 26 16:52:17 2008 for atlas by  doxygen 1.3.9.1