Sage: Ticket #18865: Can't make ring homomorphism from ring of integers to a residue field
https://trac.sagemath.org/ticket/18865
<p>
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:
</p>
<pre class="wiki">sage: K.<a> = NumberField(x^2-2)
sage: OK = K.ring_of_integers()
sage: P = K.primes_above(3)[0]
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)
</pre><p>
raises "<a class="missing wiki">TypeError?</a>: images do not define a valid homomorphism".
</p>
<p>
Now, if instead you pass "check=False" to OK.hom, you of course get an iota, but you are unable to evaluate it:
</p>
<pre class="wiki">sage: iota = OK.hom(im, check=False)
sage: iota(K.gen())
</pre><p>
This raises "<a class="missing wiki">TypeError?</a>: unsupported operand parent(s) for '*': 'Rational Field' and 'Residue field in abar of Fractional ideal (3)'". I tried being clever and doing:
</p>
<pre class="wiki">sage: iota(OK(K.gen()))
</pre><p>
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 <a class="missing wiki">OrderElement?</a> 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.
</p>
en-usSagehttps://trac.sagemath.org/chrome/site/logo_sagemath_trac.png
https://trac.sagemath.org/ticket/18865
Trac 1.2Julian RĂ¼thTue, 01 Feb 2022 20:17:53 GMT
https://trac.sagemath.org/ticket/18865#comment:1
https://trac.sagemath.org/ticket/18865#comment:1
<p>
Actually, the following works:
</p>
<pre class="wiki">iota = OK.hom(kappa)
iota(K.gen(0))
iota(OK.gen(0))
</pre><p>
But you can't define the morphism explicitly.
</p>
Ticket