# PPMonoidHom

* © 2010,2012 John Abbott*

GNU Free Documentation License, Version 1.2

CoCoALib Documentation Index
## User documentation for the class PPMonoidHom

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).

### Examples

### Functions for PPMonoidHoms

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` |

## Library Contributor Documentation

## Maintainer documentation for PPMonoid, PPMonoidElem, and PPMonoidBase

## Bugs, Shortcomings and other ideas

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).