The class PPMonoidHom
is used for representing homomorphisms between
PPMonoid
s. 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).