# Revision history [back]

This output should never occur, because Id.normal_basis() should return a list/sequence of monomials which form a vector space basis of the quotient ring, and 0 is not a monomial (it is the "empty sum of monomials").

If Id.dimension() > 0 then the quotient is not finite-dimensional, and the convention seems to be to return the empty list [] in this case. In recent versions of SageMath you can still obtain part of the (infinite) basis, by passing a degree argument to normal_basis; this will return all monomials of the specified degree in the basis:

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


In the above output z is absent because $z=0$ in the quotient, and x^2 is absent because $x^2 = 1 - y^2$ in the quotient, etc.

This output should never occur, because Id.normal_basis() should return a list/sequence of monomials which form a vector space basis of the quotient ring, and 0 is not a monomial (it is the "empty sum of monomials").

If Id.dimension() > 0 then the quotient is not finite-dimensional, finite-dimensional (i.e. the normal basis is infinite), and the convention convention seems to be for normal_basis() to return the empty list [] in this case. case (it does not mean that the normal basis is actually empty, it just means we cannot really return the whole thing in a reasonable way). In recent versions of SageMath you can still obtain part of the (infinite) basis, by passing a degree argument to normal_basis; this will return all monomials of the specified degree in the basis:

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


In the above output z is absent because $z=0$ in the quotient, and x^2 is absent because $x^2 = 1 - y^2$ in the quotient, etc.