Ask Your Question

a basis for quotient module/vector space

asked 2020-04-04 19:23:39 +0200

arpit gravatar image

updated 2020-04-06 06:27:40 +0200

I have a ring (field) $R$, a polynomial ring $R[x_1,x_2,...,x_n]$ and a quotient module (vector space) $R[x_1,x_2,...,x_n]/I$ where $I$ is an ideal of $R[x_1,x_2,...,x_n]$ . For the case, when $R$ is a field, the basis of the quotient vector space can be found to consist of the cosets of monomials which are not divisible by leading monomials of grobner basis of $I$. A similar theorem exists for the case when $R$ is a ring with effective coset representatives. For example, the ring of integers. Can I find these coset representatives that form the basis for the quotient module/vector space in sage?

edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted

answered 2020-04-06 22:26:23 +0200

mwageringel gravatar image

I am not very familiar with the case when R is not a field, so let me try to answer the case when R is a field.

If R is a field and I is a zero-dimensional ideal, then R/I is a finite dimensional vector space and a basis can be computed using the method normal_basis:

sage: R.<x,y,z> = QQ[]
sage: I = R.ideal([x^2 + y^2 - 1, z^3, z - x^3])
sage: I.dimension()
sage: I.normal_basis()
[y^3*z^2, y^2*z^2, x*y*z^2, y*z^2, x*z^2, z^2, y^3*z, y^2*z, x*y*z, y*z, x*z, z, y^3, y^2, x*y, y, x, 1]

If the ideal is of positive dimension, then Sage does not currently have a way to compute this directly. However, we can use Singular for this. Given a Gröbner basis of an ideal, the function kbase can be used to find the finitely-many monomials of certain degree in a vector space basis of this infinite-dimensional space. Let us define a wrapper function:

def kbasis(I, d):
    gb = I.groebner_basis()
    # the Singular interface works with ideals, but in Sage we prefer
    # polynomial sequences, so we need these conversions
    return singular.kbase(gb.ideal(), d).sage().gens()

Now we get:

sage: R.<x,y,z> = QQ[]
sage: I = R.ideal([x^2 + y^2 - 1, z^3])
sage: kbasis(I, 0)
sage: kbasis(I, 1)
[z, y, x]
sage: kbasis(I, 2)
[z^2, y*z, x*z, y^2, x*y]
sage: kbasis(I, 3)
[y*z^2, x*z^2, y^2*z, x*y*z, y^3, x*y^2]

In Sage, we can now even construct the infinite union over all degrees of these finite sets, which might be convenient for some purposes:

sage: D = DisjointUnionEnumeratedSets(Family(NN, lambda d: kbasis(I, d), name='kbasis_I'))
sage: D
Disjoint union of Lazy family (kbasis_I(i))_{i in Non negative integer semiring}
sage: D[0:15]
[1, z, y, x, z^2, y*z, x*z, y^2, x*y, y*z^2, x*z^2, y^2*z, x*y*z, y^3, x*y^2]
edit flag offensive delete link more


I have created trac ticket #29543 to make this functionality more accessible.

mwageringel gravatar imagemwageringel ( 2020-04-21 21:05:29 +0200 )edit

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: 2020-04-04 19:23:39 +0200

Seen: 251 times

Last updated: Apr 06 '20