Ask Your Question

Writing elements as a linear combination in a basis in a quotient ring

asked 2016-05-05 21:07:11 +0200

this post is marked as community wiki

This post is a wiki. Anyone with karma >750 is welcome to improve it.

I have an explicit ideal in a multivariable polynomial ring R. I know a priori that the quotient ring R/I is finite dimensional (as a vector space). In fact I have an explicit basis in R/I. I have all this programmed into sage. Is there a way to find the linear combination for a given element in R/I in the given basis?


sage: R.<e1,e2>=PolynomialRing(QQ)

sage: I = ideal(e1^3 -2 * e2 * e1 +1, e2 * e1^2 - e2^2 - e1)

sage: I.vector_space_dimension()


sage: f22= e2^2 - e1; f21 = e2*e1 - 1; f11 = e1^2 - e2; f1= e1; f2 = e2; f0 = 1;

sage: I.reduce(f21*f21)


sage: I.reduce(f21*f21) == f21 + f0


I have an ideal I in R and I know that the quotient ring R/I is 6 dimensional over the field. I have the basis f22,f21,f11,f2,f1,f0 of R/I as a vector space over QQ. I would like to find the structure constants of this finite dimensional algebra. For example compute f21^2 in the quotient ring, and write it in the basis, we get f21^2=f21+f0. But I only get it by hand and would like to compute it with sage, so that I could get the whole set of structure constants.

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted

answered 2016-05-06 11:18:46 +0200

tmonteil gravatar image

You can use the lift method. You can look at the following links for concrete examples:

edit flag offensive delete link more


Thanks. I think that the lift can only be used to find a combination of given elements where the coefficients come from the whole polynomial ring, and not just from the field. What I need is a linear combination where the coefficients come from the field. See the extended question.

mathworker gravatar imagemathworker ( 2016-05-06 15:07:04 +0200 )edit

answered 2019-03-04 20:56:58 +0200

You want I.normal_basis(). The documentation is abysmal (both in Sage and for the underlying Singular routine). In practice it appears that the leading term of the result of g=I.reduce(f) belongs to I.normal_basis(). So, you can subtract that off, reduce the result, pick off the next leading term, etc. to get the coefficients you're after. You can of course use a change of basis matrix to use your own preferred basis. For certain nice quotients I.reduce(f) yields an expression that's a linear combination of I.normal_basis(), but sometimes I've had to use the iterative approach. It's never been enough of a bottleneck for me to investigate what's actually going on (i.e. read Singular's kbase method's source code), and there's at least no correctness concerns with this approach.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2016-05-05 21:07:11 +0200

Seen: 1,510 times

Last updated: May 06 '16