Schemes#
AUTHORS:
William Stein, David Kohel, Kiran Kedlaya (2008): added zeta_series
Volker Braun (2011-08-11): documenting, improving, refactoring.
- class sage.schemes.generic.scheme.AffineScheme(R, S=None, category=None)#
Bases:
UniqueRepresentation
,Scheme
Class for general affine schemes.
See also
For affine spaces over a base ring and subschemes thereof, see
sage.schemes.generic.algebraic_scheme.AffineSpace
.- Element#
alias of
SchemeTopologicalPoint_prime_ideal
- base_extend(R)#
Extend the base ring/scheme.
INPUT:
R
– an affine scheme or a commutative ring
EXAMPLES:
sage: Spec_ZZ = Spec(ZZ); Spec_ZZ Spectrum of Integer Ring sage: Spec_ZZ.base_extend(QQ) Spectrum of Rational Field sage: Spec(ZZ['x']).base_extend(Spec(QQ)) Spectrum of Univariate Polynomial Ring in x over Rational Field
- coordinate_ring()#
Return the underlying ring of this scheme.
OUTPUT:
A commutative ring.
EXAMPLES:
sage: Spec(QQ).coordinate_ring() Rational Field sage: Spec(PolynomialRing(QQ, 3, 'x')).coordinate_ring() Multivariate Polynomial Ring in x0, x1, x2 over Rational Field
- dimension()#
Return the absolute dimension of this scheme.
OUTPUT:
Integer.
EXAMPLES:
sage: S = Spec(ZZ) sage: S.dimension_absolute() 1 sage: S.dimension() 1
- dimension_absolute()#
Return the absolute dimension of this scheme.
OUTPUT:
Integer.
EXAMPLES:
sage: S = Spec(ZZ) sage: S.dimension_absolute() 1 sage: S.dimension() 1
- dimension_relative()#
Return the relative dimension of this scheme over its base.
OUTPUT:
Integer.
EXAMPLES:
sage: S = Spec(ZZ) sage: S.dimension_relative() 0
- hom(x, Y=None)#
Return the scheme morphism from
self
toY
defined byx
.INPUT:
x
– anything that determines a scheme morphism; ifx
is a scheme, try to determine a natural map tox
Y
– the codomain scheme (optional); ifY
is not given, try to determineY
from contextcheck
– boolean (optional, default:True
); whether to check the defining data for consistency
OUTPUT:
The scheme morphism from
self
toY
defined byx
.EXAMPLES:
We construct the inclusion from \(\mathrm{Spec}(\QQ)\) into \(\mathrm{Spec}(\ZZ)\) induced by the inclusion from \(\ZZ\) into \(\QQ\):
sage: X = Spec(QQ) sage: X.hom(ZZ.hom(QQ)) Affine Scheme morphism: From: Spectrum of Rational Field To: Spectrum of Integer Ring Defn: Natural morphism: From: Integer Ring To: Rational Field
- is_noetherian()#
Return
True
ifself
is Noetherian,False
otherwise.EXAMPLES:
sage: Spec(ZZ).is_noetherian() True
- class sage.schemes.generic.scheme.Scheme(X=None, category=None)#
Bases:
Parent
The base class for all schemes.
INPUT:
X
– a scheme, scheme morphism, commutative ring, commutative ring morphism, orNone
(optional). Determines the base scheme. If a commutative ring is passed, the spectrum of the ring will be used as base.category
– the category (optional). Will be automatically constructed by default.
EXAMPLES:
sage: from sage.schemes.generic.scheme import Scheme sage: Scheme(ZZ) <sage.schemes.generic.scheme.Scheme_with_category object at ...>
A scheme is in the category of all schemes over its base:
sage: ProjectiveSpace(4, QQ).category() Category of schemes over Rational Field
There is a special and unique \(Spec(\ZZ)\) that is the default base scheme:
sage: Spec(ZZ).base_scheme() is Spec(QQ).base_scheme() True
- base_extend(Y)#
Extend the base of the scheme.
Derived classes must override this method.
EXAMPLES:
sage: from sage.schemes.generic.scheme import Scheme sage: X = Scheme(ZZ) sage: X.base_scheme() Spectrum of Integer Ring sage: X.base_extend(QQ) Traceback (most recent call last): ... NotImplementedError
- base_morphism()#
Return the structure morphism from
self
to its base scheme.OUTPUT:
A scheme morphism.
EXAMPLES:
sage: A = AffineSpace(4, QQ) sage: A.base_morphism() Scheme morphism: From: Affine Space of dimension 4 over Rational Field To: Spectrum of Rational Field Defn: Structure map sage: X = Spec(QQ) sage: X.base_morphism() Scheme morphism: From: Spectrum of Rational Field To: Spectrum of Integer Ring Defn: Structure map
- base_ring()#
Return the base ring of the scheme self.
OUTPUT:
A commutative ring.
EXAMPLES:
sage: A = AffineSpace(4, QQ) sage: A.base_ring() Rational Field sage: X = Spec(QQ) sage: X.base_ring() Integer Ring
- base_scheme()#
Return the base scheme.
OUTPUT:
A scheme.
EXAMPLES:
sage: A = AffineSpace(4, QQ) sage: A.base_scheme() Spectrum of Rational Field sage: X = Spec(QQ) sage: X.base_scheme() Spectrum of Integer Ring
- coordinate_ring()#
Return the coordinate ring.
OUTPUT:
The global coordinate ring of this scheme, if defined. Otherwise raise a
ValueError
.EXAMPLES:
sage: R.<x, y> = QQ[] sage: I = (x^2 - y^2)*R sage: X = Spec(R.quotient(I)) sage: X.coordinate_ring() Quotient of Multivariate Polynomial Ring in x, y over Rational Field by the ideal (x^2 - y^2)
- count_points(n)#
Count points over finite fields.
INPUT:
n
– integer.
OUTPUT:
An integer. The number of points over \(\GF{q}, \ldots, \GF{q^n}\) on a scheme over a finite field \(\GF{q}\).
EXAMPLES:
sage: P.<x> = PolynomialRing(GF(3)) sage: C = HyperellipticCurve(x^3+x^2+1) sage: C.count_points(4) [6, 12, 18, 96] sage: C.base_extend(GF(9,'a')).count_points(2) [12, 96]
sage: P.<x,y,z> = ProjectiveSpace(GF(4,'t'), 2) sage: X = P.subscheme([y^2*z - x^3 - z^3]) sage: X.count_points(2) [5, 17]
- dimension()#
Return the absolute dimension of this scheme.
OUTPUT:
Integer.
EXAMPLES:
sage: R.<x, y> = QQ[] sage: I = (x^2 - y^2)*R sage: X = Spec(R.quotient(I)) sage: X.dimension_absolute() Traceback (most recent call last): ... NotImplementedError sage: X.dimension() Traceback (most recent call last): ... NotImplementedError
- dimension_absolute()#
Return the absolute dimension of this scheme.
OUTPUT:
Integer.
EXAMPLES:
sage: R.<x, y> = QQ[] sage: I = (x^2 - y^2)*R sage: X = Spec(R.quotient(I)) sage: X.dimension_absolute() Traceback (most recent call last): ... NotImplementedError sage: X.dimension() Traceback (most recent call last): ... NotImplementedError
- dimension_relative()#
Return the relative dimension of this scheme over its base.
OUTPUT:
Integer.
EXAMPLES:
sage: R.<x, y> = QQ[] sage: I = (x^2 - y^2)*R sage: X = Spec(R.quotient(I)) sage: X.dimension_relative() Traceback (most recent call last): ... NotImplementedError
- hom(x, Y=None, check=True)#
Return the scheme morphism from
self
toY
defined byx
.INPUT:
x
– anything that determines a scheme morphism; ifx
is a scheme, try to determine a natural map tox
Y
– the codomain scheme (optional); ifY
is not given, try to determineY
from contextcheck
– boolean (optional, default:True
); whether to check the defining data for consistency
OUTPUT:
The scheme morphism from
self
toY
defined byx
.EXAMPLES:
sage: P = ProjectiveSpace(ZZ, 3) sage: P.hom(Spec(ZZ)) Scheme morphism: From: Projective Space of dimension 3 over Integer Ring To: Spectrum of Integer Ring Defn: Structure map
- identity_morphism()#
Return the identity morphism.
OUTPUT:
The identity morphism of the scheme
self
.EXAMPLES:
sage: X = Spec(QQ) sage: X.identity_morphism() Scheme endomorphism of Spectrum of Rational Field Defn: Identity map
- point(v, check=True)#
Create a point.
INPUT:
v
– anything that defines a pointcheck
– boolean (optional, default:True
); whether to check the defining data for consistency
OUTPUT:
A point of the scheme.
EXAMPLES:
sage: A2 = AffineSpace(QQ,2) sage: A2.point([4,5]) (4, 5) sage: R.<t> = PolynomialRing(QQ) sage: E = EllipticCurve([t + 1, t, t, 0, 0]) sage: E.point([0, 0]) (0 : 0 : 1)
- point_homset(S=None)#
Return the set of S-valued points of this scheme.
INPUT:
S
– a commutative ring.
OUTPUT:
The set of morphisms \(Spec(S) o X\).
EXAMPLES:
sage: P = ProjectiveSpace(ZZ, 3) sage: P.point_homset(ZZ) Set of rational points of Projective Space of dimension 3 over Integer Ring sage: P.point_homset(QQ) Set of rational points of Projective Space of dimension 3 over Rational Field sage: P.point_homset(GF(11)) Set of rational points of Projective Space of dimension 3 over Finite Field of size 11
- point_set(S=None)#
Return the set of S-valued points of this scheme.
INPUT:
S
– a commutative ring.
OUTPUT:
The set of morphisms \(Spec(S) o X\).
EXAMPLES:
sage: P = ProjectiveSpace(ZZ, 3) sage: P.point_homset(ZZ) Set of rational points of Projective Space of dimension 3 over Integer Ring sage: P.point_homset(QQ) Set of rational points of Projective Space of dimension 3 over Rational Field sage: P.point_homset(GF(11)) Set of rational points of Projective Space of dimension 3 over Finite Field of size 11
- structure_morphism()#
Return the structure morphism from
self
to its base scheme.OUTPUT:
A scheme morphism.
EXAMPLES:
sage: A = AffineSpace(4, QQ) sage: A.base_morphism() Scheme morphism: From: Affine Space of dimension 4 over Rational Field To: Spectrum of Rational Field Defn: Structure map sage: X = Spec(QQ) sage: X.base_morphism() Scheme morphism: From: Spectrum of Rational Field To: Spectrum of Integer Ring Defn: Structure map
- union(X)#
Return the disjoint union of the schemes
self
andX
.EXAMPLES:
sage: S = Spec(QQ) sage: X = AffineSpace(1, QQ) sage: S.union(X) Traceback (most recent call last): ... NotImplementedError
- zeta_function()#
Compute the zeta function of a generic scheme.
Derived classes should override this method.
OUTPUT: rational function in one variable.
EXAMPLES:
sage: P.<x,y,z> = ProjectiveSpace(GF(4,'t'), 2) sage: X = P.subscheme([y^2*z - x^3 - z^3]) sage: X.zeta_function() Traceback (most recent call last): ... NotImplementedError
- zeta_series(n, t)#
Return the zeta series.
Compute a power series approximation to the zeta function of a scheme over a finite field.
INPUT:
n
– the number of terms of the power series to computet
– the variable which the series should be returned
OUTPUT:
A power series approximating the zeta function of
self
EXAMPLES:
sage: P.<x> = PolynomialRing(GF(3)) sage: C = HyperellipticCurve(x^3+x^2+1) sage: R.<t> = PowerSeriesRing(Integers()) sage: C.zeta_series(4,t) 1 + 6*t + 24*t^2 + 78*t^3 + 240*t^4 + O(t^5) sage: (1+2*t+3*t^2)/(1-t)/(1-3*t) + O(t^5) 1 + 6*t + 24*t^2 + 78*t^3 + 240*t^4 + O(t^5)
If the scheme has a method
zeta_function
, this is used to provide the required approximation. Otherwise this function depends oncount_points
, which is only defined for prime order fields for general schemes. Nonetheless, since trac ticket #15108 and trac ticket #15148, it supports hyperelliptic curves over non-prime fields:sage: C.base_extend(GF(9,'a')).zeta_series(4,t) 1 + 12*t + 120*t^2 + 1092*t^3 + 9840*t^4 + O(t^5)
sage: P.<x,y,z> = ProjectiveSpace(GF(4,'t'), 2) sage: X = P.subscheme([y^2*z - x^3 - z^3]) sage: R.<t> = PowerSeriesRing(Integers()) sage: X.zeta_series(2,t) 1 + 5*t + 21*t^2 + O(t^3)
- sage.schemes.generic.scheme.is_AffineScheme(x)#
Return True if \(x\) is an affine scheme.
EXAMPLES:
sage: from sage.schemes.generic.scheme import is_AffineScheme sage: is_AffineScheme(5) False sage: E = Spec(QQ) sage: is_AffineScheme(E) True