# PPMonoidHom

© 2010,2012 John Abbott
GNU Free Documentation License, Version 1.2

- User documentation for the class PPMonoidHom
  - Examples
  - Functions for PPMonoidHoms
- Library Contributor Documentation
- Maintainer documentation for PPMonoid, PPMonoidElem, and PPMonoidBase
- Bugs, Shortcomings and other ideas

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

- ex-PPMonoidHom.C

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