Processing math: 100%

First time here? Check out the FAQ!

Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

In this rather special case we can find a lift of 1 quickly and efficiently using linear algebra.

Let R be a polynomial ring over C, IR a zero-dimensional radical ideal and fR. To show 1=I+f it suffices (by Hilbert's Nullstellensatz) to show =V(I+f)=V(I)V(f), i.e. that f does not vanish on V(I). Since I is radical, the ideal of polynomials in R vanishing on V(I) is exactly I (by the Nullstellensatz). By definition of zero-dimensional, the quotient R/I is a finite-dimensional C-vector space.

  • Consider the C-linear "multiplication by f" map Mf:gfg on R/I. Let g be an eigenvector of Mf with eigenvalue λ, so fg=λg or (fλ)g=0 holds in R/I, i.e. (fλ)gI. The fact that g0 in R/I means gI, hence there is a point pV(I) with g(p)0. Now from (fλ)gI it follows that λ=f(p) is the value of f at the point p.

  • Conversely, if P is the minimum polynomial of Mf then P(Mf)=0 implies P(f)=0 in R/I (by evaluating at 1R/I), hence P(f)I and it follows that 0=P(f)(p)=P(f(p)) for all pV(I), i.e. all values f(p) for pV(I) are zeros of P, and hence they are eigenvalues of Mf.

So the values of f on V(I) are exactly the eigenvalues of Mf, and it suffices to show that 0 is not one of them.

Given a Groebner basis G of I, the multivariate polynomial division algorithm implies that set of of all monomials not divisible by any leading terms of G is a basis of R/I as a C-vector space (called the normal basis). The matrix of Mf with respect to this basis is easily computed:

def multiplication_matrix(f, I):
    G = I.groebner_basis()
    f = f.reduce(G)
    NB = I.normal_basis()
    M = Matrix(f.base_ring(), len(NB))
    for (i, m1) in enumerate(NB):
        g = (f*m1).reduce(G)
        M.set_column(i, [g.monomial_coefficient(m2) for m2 in NB])
    return M

We apply it to the problem at hand:

sage: f = 5*u0*z2 + 5*u1*z4 + 7*u2*z6 - u0 + 1/125
sage: I = R.ideal(C1 +  C2)
sage: M_f = multiplication_matrix(f, I)
sage: M_f.det() != 0
True

Hence f does not attain the value 0 on V(I), so =V(I+f) and 1=I+f.

Since Mf is invertible, we can find a polynomial representative of f1+I:

sage: NB = list(I.normal_basis())
sage: len(NB), NB.index(1)
(196, 195)
sage: finv_coeffs = M_f \ vector([0]*195 + [1])
sage: finv = sum(c*m for (c,m) in zip(C_finv, NB))
sage: (f*finv).reduce(I)
1

Then we have 1=f1f in R/I, i.e. 1=f1f+g for some gI, and we can express g in terms of generators by applying the division algorithm to 1f1f (or finding a lift of it to I):

sage: lift_coeffs = [finv] + list((1 - finv*f).lift(I))
sage: sum(c*m for c,m in zip(lift_coeffs, [f] + I.gens()))
1
click to hide/show revision 2
No.2 Revision

In this rather special case we can find a lift of 1 quickly and efficiently using linear algebra.

Let R be a polynomial ring over C, IR a zero-dimensional radical ideal and fR. To show 1=I+f it suffices (by Hilbert's Nullstellensatz) to show =V(I+f)=V(I)V(f), i.e. that f does not vanish on V(I). Since I is radical, the ideal of polynomials in R vanishing on V(I) is exactly I (by the Nullstellensatz). By definition of zero-dimensional, the quotient R/I is a finite-dimensional C-vector space.

  • Consider the C-linear "multiplication by f" map Mf:gfg on R/I. Let g be an eigenvector of Mf with eigenvalue λ, so fg=λg or (fλ)g=0 holds in R/I, i.e. (fλ)gI. The fact that g0 in R/I means gI, hence there is a point pV(I) with g(p)0. Now from (fλ)gI it follows that λ=f(p) is the value of f at the point p.

  • Conversely, if P is the minimum polynomial of Mf then P(Mf)=0 implies P(f)=0 in R/I (by evaluating at 1R/I), hence P(f)I and it follows that 0=P(f)(p)=P(f(p)) for all pV(I), i.e. all values f(p) for pV(I) are zeros of P, and hence they are eigenvalues of Mf.

So the values of f on V(I) are exactly the eigenvalues of Mf, and it suffices to show that 0 is not one of them.

Given a Groebner basis G of I, the multivariate polynomial division algorithm implies that the set of of all monomials not divisible by any leading terms of G is a basis of R/I as a C-vector space (called the normal basis). The matrix of Mf with respect to this basis is easily computed:

def multiplication_matrix(f, I):
    G = I.groebner_basis()
    f = f.reduce(G)
    NB = I.normal_basis()
    M = Matrix(f.base_ring(), len(NB))
    for (i, m1) in enumerate(NB):
        g = (f*m1).reduce(G)
        M.set_column(i, [g.monomial_coefficient(m2) for m2 in NB])
    return M

We apply it to the problem at hand:

sage: f = 5*u0*z2 + 5*u1*z4 + 7*u2*z6 - u0 + 1/125
sage: I = R.ideal(C1 +  C2)
sage: M_f = multiplication_matrix(f, I)
sage: M_f.det() != 0
True

Hence f does not attain the value 0 on V(I), so =V(I+f) and 1=I+f.

Since Mf is invertible, we can find a polynomial representative of f1+I:

sage: NB = list(I.normal_basis())
sage: len(NB), NB.index(1)
(196, 195)
sage: finv_coeffs = M_f \ vector([0]*195 + [1])
sage: finv = sum(c*m for (c,m) in zip(C_finv, zip(finv_coeffs, NB))
sage: (f*finv).reduce(I)
1

Then we have 1=f1f in R/I, i.e. 1=f1f+g for some gI, and we can express g in terms of generators by applying the division algorithm to 1f1f (or finding a lift of it to I):

sage: lift_coeffs = [finv] + list((1 - finv*f).lift(I))
sage: sum(c*m for c,m in zip(lift_coeffs, [f] + I.gens()))
1