Changes between Version 1 and Version 2 of Ticket #9792


Ignore:
Timestamp:
06/01/20 16:00:23 (11 months ago)
Author:
gh-mwageringel
Comment:

New commits:

ad0dc039792: ring homomorphism: inverse_image, kernel, is_injective

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #9792

    • Property Authors changed from to Markus Wageringel
    • Property Summary changed from kernel and inverse_image of (polynomial) ring maps to kernel and inverse_image of (polynomial) ring homomorphisms
    • Property Branch changed from to u/gh-mwageringel/9792
    • Property Milestone changed from sage-feature to sage-9.2
    • Property Owner changed from AlexGhitza to (none)
    • Property Commit changed from to ad0dc039713e3664b89f198ae96d508697652dd6
  • Ticket #9792 – Description

    v1 v2  
    1 It would be nice if kernels and inverse images of ring maps were implemented:
     1For polynomial ring homomorphisms, this ticket implements the methods
     2
     3- `inverse_image` (of both ideals and individual elements)
     4- `kernel`
     5- `is_injective`
     6- `_graph_ideal`
     7
     8(This also works for homomorphisms of polynomial quotient rings, number fields and Galois fields.)
     9
     10-----
     11
     12The implementation is based on the following:
     13
     14Given 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.
     15
     16References: 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.
     17
     18See 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].
     19
     20-----
     21
     22Example:
     23
    224{{{
    3 sage: R.<s,t>=PolynomialRing(QQ);R
    4 Multivariate Polynomial Ring in s, t over Rational Field
    5 sage: S.<x,y,z,w>=PolynomialRing(QQ);S
    6 Multivariate Polynomial Ring in x, y, z, w over Rational Field
    7 sage: f=S.hom([s^4,s^3*t,s*t^3,t^4],R);f
    8 Ring morphism:
    9   From: Multivariate Polynomial Ring in x, y, z, w over Rational Field
    10   To:   Multivariate Polynomial Ring in s, t over Rational Field
    11   Defn: x |--> s^4
    12         y |--> s^3*t
    13         z |--> s*t^3
    14         w |--> t^4
    15 sage: f.inverse_image(0)
    16 ---------------------------------------------------------------------------
    17 NotImplementedError                       Traceback (most recent call last)
     25sage: R.<s,t> = PolynomialRing(QQ)
     26sage: S.<x,y,z,w> = PolynomialRing(QQ)
     27sage: f = S.hom([s^4, s^3*t, s*t^3, t^4],R)
     28sage: f.inverse_image(R.ideal(0))
     29Ideal (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
     30sage: f.inverse_image(s^3*t^4*(s+t))
     31x*w + y*w
     32}}}
    1833
    19 /home/vbraun/opt/sage-4.5.2/devel/sage-main/sage/libs/singular/<ipython console> in <module>()
     34-----
    2035
    21 /home/vbraun/Sage/sage/local/lib/python2.6/site-packages/sage/rings/morphism.so in sage.rings.morphism.RingHomomorphism.inverse_image (sage/rings/morphism.c:4168)()
    22 
    23 NotImplementedError:
    24 sage: kernel(f)
    25 ---------------------------------------------------------------------------
    26 AttributeError                            Traceback (most recent call last)
    27 
    28 /home/vbraun/opt/sage-4.5.2/devel/sage-main/sage/libs/singular/<ipython console> in <module>()
    29 
    30 /home/vbraun/Sage/sage/local/lib/python2.6/site-packages/sage/misc/functional.pyc in kernel(x)
    31     907         ]
    32     908     """
    33 --> 909     return x.kernel()
    34     910
    35     911 def krull_dimension(x):
    36 
    37 /home/vbraun/Sage/sage/local/lib/python2.6/site-packages/sage/structure/element.so in sage.structure.element.Element.__getattr__ (sage/structure/element.c:2632)()
    38 
    39 /home/vbraun/Sage/sage/local/lib/python2.6/site-packages/sage/structure/parent.so in sage.structure.parent.getattr_from_other_class (sage/structure/parent.c:2835)()
    40 
    41 /home/vbraun/Sage/sage/local/lib/python2.6/site-packages/sage/structure/parent.so in sage.structure.parent.raise_attribute_error (sage/structure/parent.c:2602)()
    42 
    43 AttributeError: 'sage.rings.morphism.RingHomomorphism_im_gens' object has no attribute 'kernel'
    44 }}}
    45 Here is the corresponding Singular computation:
     36Note that the inverse image of ideals (but not of elements) could also be computed using Singular as follows:
    4637{{{
    4738sage: singular.eval('''