Skip to content

kernel and inverse_image of (polynomial) ring homomorphisms #9792

@vbraun

Description

@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 Decker-Schreyer, Proposition 2.5.12 and Exercise 2.5.13.

See also #29723 (inverses of ring homomorphisms) and related posts on the mailing list and at Ask-Sagemath.


Example:

sage: R.<s,t> = PolynomialRing(QQ)
sage: S.<x,y,z,w> = 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

CC: @dimpase

Component: algebra

Author: Markus Wageringel

Branch/Commit: fd6dee6

Reviewer: Travis Scrimshaw

Issue created by migration from https://trac.sagemath.org/ticket/9792

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions