The class PPMonoidHom is used for representing homomorphisms between
PPMonoids. Each indeterminate in the domain monoid maps into an
element of the codomain (i.e. a power product).
Here is a list of the (pseudo-)ctors for PPMonoidHom
IdentityHom(PPM) the identity
GeneralHom(PPM, images) where images is a vector of PPMonoidElem whose i-th entry is the image of the i-th indet in PPM
RestrictionHom(PPM, IndetIndexes) where IndetIndexes is a vector of indices of the indets which map to themselves, the others map to 1.
The PPMonoidHom object may be applied to a value by using normal
function call syntax: for instance
PPMonoidElem t = ...;
PPMonoidHom phi = ...;
cout << "phi applied to t gives " << phi(t) << endl;
Given a PPMonoidHom you can find out its domain and codomain:
domain(phi) |
the domain of phi as a PPMonoid |
codomain(phi) |
the codomain of phi as a PPMonoid |
Add some more special cases: e.g. permutations of the indets, and the "identity" between PPMonoids which differ only in their orderings.
Should we allow partial homs? e.g. one which maps x^2 to y
(so odd powers of x have no image).