def Katsura(R, n=None, homog=False, singular=singular_default): """ ``n``-th katsura ideal of ``R`` if ``R`` is coercible to :class:`Singular <sage.interfaces.singular.Singular>`. INPUT: - ``R`` -- base ring to construct ideal for - ``n`` -- (default: ``None``) which katsura ideal of ``R``. If ``None``, then ``n`` is set to ``R.ngens()``. - ``homog`` -- if ``True`` a homogeneous ideal is returned using the last variable in the ideal (default: ``False``) - ``singular`` -- singular instance to use EXAMPLES:: sage: P.<x,y,z> = PolynomialRing(QQ,3) sage: I = sage.rings.ideal.Katsura(P,3); I Ideal (x + 2*y + 2*z - 1, x^2 + 2*y^2 + 2*z^2 - x, 2*x*y + 2*y*z - y) of Multivariate Polynomial Ring in x, y, z over Rational Field :: sage: Q.<x> = PolynomialRing(QQ,1) sage: J = sage.rings.ideal.Katsura(Q,1); J Ideal (x - 1) of Multivariate Polynomial Ring in x over Rational Field """ from rational_field import RationalField if n: if n > R.ngens(): raise ArithmeticError("n must be <= R.ngens().") else: n = R.ngens() singular.lib("poly") R2 = R.change_ring(RationalField()) R2._singular_().set_ring() if not homog: I = singular.katsura(n) else: I = singular.katsura(n).homog(R2.gen(n - 1)) return R2.ideal(I).change_ring(R)
def Cyclic(R, n=None, homog=False, singular=singular_default): """ Ideal of cyclic ``n``-roots from 1-st ``n`` variables of ``R`` if ``R`` is coercible to :class:`Singular <sage.interfaces.singular.Singular>`. INPUT: - ``R`` -- base ring to construct ideal for - ``n`` -- number of cyclic roots (default: ``None``). If ``None``, then ``n`` is set to ``R.ngens()``. - ``homog`` -- (default: ``False``) if ``True`` a homogeneous ideal is returned using the last variable in the ideal - ``singular`` -- singular instance to use .. NOTE:: ``R`` will be set as the active ring in :class:`Singular <sage.interfaces.singular.Singular>` EXAMPLES: An example from a multivariate polynomial ring over the rationals:: sage: P.<x,y,z> = PolynomialRing(QQ,3,order='lex') sage: I = sage.rings.ideal.Cyclic(P) sage: I Ideal (x + y + z, x*y + x*z + y*z, x*y*z - 1) of Multivariate Polynomial Ring in x, y, z over Rational Field sage: I.groebner_basis() [x + y + z, y^2 + y*z + z^2, z^3 - 1] We compute a Groebner basis for cyclic 6, which is a standard benchmark and test ideal:: sage: R.<x,y,z,t,u,v> = QQ['x,y,z,t,u,v'] sage: I = sage.rings.ideal.Cyclic(R,6) sage: B = I.groebner_basis() sage: len(B) 45 """ from rational_field import RationalField if n: if n > R.ngens(): raise ArithmeticError("n must be <= R.ngens()") else: n = R.ngens() singular.lib("poly") R2 = R.change_ring(RationalField()) R2._singular_().set_ring() if not homog: I = singular.cyclic(n) else: I = singular.cyclic(n).homog(R2.gen(n - 1)) return R2.ideal(I).change_ring(R)