atlas
0.6
|
Classes | |
class | Subquotient |
class | Subspace |
Functions | |
template<size_t dim> | |
BitMatrix< dim > | subquotientMap (const Subquotient< dim > &source, const Subquotient< dim > &dest, const BitMatrix< dim > &m) |
template BitMatrix< constants::RANK_MAX > | subquotientMap (const Subquotient< constants::RANK_MAX > &, const Subquotient< constants::RANK_MAX > &, const BitMatrix< constants::RANK_MAX > &) |
BitMatrix< dim > atlas::subquotient::subquotientMap | ( | const Subquotient< dim > & | source, |
const Subquotient< dim > & | dest, | ||
const BitMatrix< dim > & | m | ||
) |
Synopsis: puts in |msq| the matrix of the map induced by |m| at the subquotient level.
Precondition: |m| has |source.rank()| columns and |dest.rank()| rows, in other words it defines a map at the level of the ambient $Z/2Z$-vector spaces. Moreover it maps |source.space()| to |dest.space()| and |source.denominator()| to |dest.denominator()|. [This is a strong condition, which it is the caller's responsibility to ensure. It is not sufficient that |m| gives rise to a mathematically well-defined map between the subquotients; for instance while for any subspaces $A,B$ there is a canonical isomorphism between the subquotients $(A+B)/A$ and $B/(A B)$, the identity matrix might not produce such an isomorphism when applied from the former to the latter subquotient (although it would in the opposite direction). MvL]
The subquotient matrix will be expressed in terms of the canonical bases for the subquotients (which are made up of those elements of the basis of the larger subspace |space()| that are zero on the bits supporting the smaller subspace |denominator()|.) Therefore its size will be |source.dimension()| columns and |dest.dimension()| rows.
Algorithm: take the image through |m| of the subquotient basis in |source|; then project onto the subquotient basis in |dest|. Note that this procedure inspects neither |source.denominator()| nor |dest.space()|, but it does select using |source.support()| those basis vectors from |source.space()| that cannot be reduced modulo |source.denominator()|, forming a complementary space.
template BitMatrix<constants::RANK_MAX> atlas::subquotient::subquotientMap | ( | const Subquotient< constants::RANK_MAX > & | , |
const Subquotient< constants::RANK_MAX > & | , | ||
const BitMatrix< constants::RANK_MAX > & | |||
) |