Opened 7 years ago

# Can't make ring homomorphism from ring of integers to a residue field

Reported by: Owned by: Robert Harron major sage-6.8 number fields Ring of integers, homset, residue field N/A

### Description

It doesn't seem possible to create a ring homomorphism from an order in a number field to a residue field of the number field. For instance:

```sage: K.<a> = NumberField(x^2-2)
sage: OK = K.ring_of_integers()
sage: P = K.primes_above(3)
sage: kappa = P.residue_field()
sage: abar = kappa.gen()
sage: im = [g.polynomial().change_ring(ZZ)(abar) for g in OK.gens()]
sage: iota = OK.hom(im)
```

raises "TypeError?: images do not define a valid homomorphism".

Now, if instead you pass "check=False" to OK.hom, you of course get an iota, but you are unable to evaluate it:

```sage: iota = OK.hom(im, check=False)
sage: iota(K.gen())
```

This raises "TypeError?: unsupported operand parent(s) for '*': 'Rational Field' and 'Residue field in abar of Fractional ideal (3)'". I tried being clever and doing:

```sage: iota(OK(K.gen()))
```

but got the same error. Tracing it back, when sage tries to evaluate iota at an element a, it calls a._im_gens_(kappa, im) and this is totally wrong for this homset. Rather it is meant for homomorphisms between number fields. Basically, it looks like we need a function _im_gens_ for OrderElement? types. It should take the element a written out in the basis given by OK.gens() and replace the basis elements with the element in im.

### comment:1 Changed 8 months ago by Julian Rüth

Actually, the following works:

```iota = OK.hom(kappa)
iota(K.gen(0))
iota(OK.gen(0))
```
Version 0, edited 8 months ago by Julian Rüth (next)
Note: See TracTickets for help on using tickets.