id summary reporter owner description type status priority milestone component resolution keywords cc merged author reviewer upstream work_issues branch commit dependencies stopgaps
9792 kernel and inverse_image of (polynomial) ring homomorphisms vbraun "For polynomial ring homomorphisms, this ticket implements the methods
- `inverse_image` (of both ideals and individual elements)
- `kernel`
- `is_injective`
- `_graph_ideal`
(This also works for homomorphisms of polynomial quotient rings, number fields and Galois fields.)
-----
The implementation is based on the following:
Given a homomorphism `f: K[x] -> K[y]` of (multivariate) polynomial rings that respects the `K`-algebra structure, we can find preimages of `y` by computing normal forms modulo the graph ideal `(x-f(x))` in `K[y,x]` with respect to an elimination order. More generally, this works for morphisms of quotient rings `K[x]/I -> K[y]/J`, which allows to handle many types of ring homomorphisms in Sage.
References: e.g. [BW1993] Propositions 6.44, 7.71; or [https://www.math.uni-sb.de/ag/schreyer/images/PDFs/teaching/ws1617ag/book.pdf Decker-Schreyer], Proposition 2.5.12 and Exercise 2.5.13.
See also #29723 (inverses of ring homomorphisms) and related posts on the [https://groups.google.com/forum/#!topic/sage-support/aJn0T0jIfwU mailing list] and at [https://ask.sagemath.org/question/51336/implicitization-by-symmetric-polynomials/ Ask-Sagemath].
-----
Example:
{{{
sage: R.~~ = PolynomialRing(QQ)
sage: S. = PolynomialRing(QQ)
sage: f = S.hom([s^4, s^3*t, s*t^3, t^4],R)
sage: f.inverse_image(R.ideal(0))
Ideal (y*z - x*w, z^3 - y*w^2, x*z^2 - y^2*w, y^3 - x^2*z) of Multivariate Polynomial Ring in x, y, z, w over Rational Field
sage: f.inverse_image(s^3*t^4*(s+t))
x*w + y*w
}}}
-----
Note that the inverse image of ideals (but not of elements) could also be computed using Singular as follows:
{{{
sage: singular.eval('''
....: ring R=0,(s,t),dp;
....: ring S=0,(x,y,z,w),dp;
....: setring R;
....: map f=S,ideal(s^4,s^3*t,s*t^3,t^4);
....: setring S;
....: ideal ker=kernel(R,f)
....: ''');
sage: singular.get('ker')
'yz-xw,\nz3-yw2,\nxz2-y2w,\ny3-x2z'
sage: print(_)
yz-xw,
z3-yw2,
xz2-y2w,
y3-x2z
}}}" enhancement closed major sage-9.2 algebra fixed dimpase Markus Wageringel Travis Scrimshaw N/A fd6dee61ca094c0b34961f41d6ef357def6ead5e fd6dee61ca094c0b34961f41d6ef357def6ead5e
~~