# HomomorphismOps

* © 2017 John Abbott, Anna M. Bigatti*

GNU Free Documentation License, Version 1.2

CoCoALib Documentation Index
## Examples

## User documentation

This file offers some functions for working with homomorphisms between
(quotients of) polynomial algebras.

### Queries and views

Let `phi`

be a `RingHom`

from `R`

to `S`

where both rings are
either polynomial rings or quotients of polynomial rings.

`IsInjective(phi)`

-- `true`

iff `phi`

is injective
`IsSurjective(phi)`

-- `true`

iff `phi`

is surjective
`IsInImage(phi,y)`

-- `true`

iff `y`

is in the image of `phi`

### Operations

Let `phi`

be a `RingHom`

from `R`

to `S`

where both rings are
either polynomial rings or quotients of polynomial rings.

`ker(phi)`

-- computes the kernel of `phi`

as an ideal in `R`

`preimage(phi,y)`

-- computes an element `x`

of `R`

such that `phi(x) = y`

; throws an exception if `y`

is not in the image of `phi`

`preimage0(phi,y)`

-- computes an element `x`

of `R`

such that `phi(x) = y`

; returns `zero(domain(phi))`

if `y`

is not in the image of `phi`

## Maintainer documentation

The centrepiece is the structure `RichRingHom`

which contains several
components useful for actually doing the computation. In particular,
all operations require computation in a new ring `RS`

which contains "orthogonal"
copies of the polynomial rings in `R`

and `S`

There are natutal homomorphisms
from `RS`

to `R`

and from `S`

into `RS`

.

The hope is that this structure will be memorized inside the `RingHom`

object so that it does not need to be recomputed.

## Bugs, shortcomings and other ideas

Maintainer doc is very incomplete. The algorithms are not especially
hard, but they are also not so simple. Reference to K+R book?

## Main changes

**2017**

- July (v0.99556): first release (ported from CoCoA-5 package)