Module: sage.schemes.generic.algebraic_scheme
Algebraic schemes
An algebraic scheme must be defined by sets of equations in affine or projective spaces, perhaps by means of gluing relations.
Module-level Functions
x) |
Return True if
is an algebraic scheme, i.e., a subscheme of an
ambient space over a ring defined by polynomial equations.
Affine space is itself not an algebraic scheme, though the closed subscheme defined by no equations is.
sage: is_AlgebraicScheme(AffineSpace(10, QQ)) False sage: V = AffineSpace(10, QQ).subscheme([]); V Closed subscheme of Affine Space of dimension 10 over Rational Field defined by: (no equations) sage: is_AlgebraicScheme(V) True
We create a more complicated closed subscheme.
sage: A, x = AffineSpace(10, QQ).objgens() sage: X = A.subscheme([sum(x)]); X Closed subscheme of Affine Space of dimension 10 over Rational Field defined by: x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 sage: is_AlgebraicScheme(X) True
sage: is_AlgebraicScheme(QQ) False sage: S = Spec(QQ) sage: is_AlgebraicScheme(S) False
Class: AlgebraicScheme
self, A) |
Functions: ambient_space,
coordinate_ring,
ngens
Special Functions: __init__,
_homset_class,
_point_class,
_repr_
Class: AlgebraicScheme_quasi
self, X, Y) |
Functions: rational_points,
X,
Y
self, [F=None], [bound=0]) |
Return the set of rational points over its base ring.
Special Functions: __init__,
_check_satisfies_equations,
_error_bad_coords,
_repr_
self, v) |
Verify that the coordinates of v define a point on this scheme, or raise a TypeError.
Class: AlgebraicScheme_subscheme
Input:
self, A, G) |
Functions: base_extend,
defining_ideal,
defining_polynomials,
exclude,
intersection,
irreducible_components,
rational_points,
reduce,
union
self, other) |
Return the scheme-theoretic complement self - other.
HERE
self, other) |
Return the scheme-theoretic intersection of self and other in their common ambient space.
self) |
Return the irreducible components of this algebraic scheme, as subschemes of the same ambient space.
Output: an immutable sequence of irreducible subschemes of the ambient space of this scheme
The components are cached.
We define what is clearly a union of four hypersurfaces in
then find the irreducible components.
sage: PP.<x,y,z,w,v> = ProjectiveSpace(4,QQ) sage: V = PP.subscheme( (x^2 - y^2 - z^2)*(w^5 - 2*v^2*z^3)* w * (v^3 - x^2*z) ) sage: V.irreducible_components() [ Closed subscheme of Projective Space of dimension 4 over Rational Field defined by: w^5 - 2*z^3*v^2, Closed subscheme of Projective Space of dimension 4 over Rational Field defined by: x^2*z - v^3, Closed subscheme of Projective Space of dimension 4 over Rational Field defined by: x^2 - y^2 - z^2, Closed subscheme of Projective Space of dimension 4 over Rational Field defined by: w ]
self, [F=None], [bound=0]) |
One can enumerate points up to a given bound on a projective scheme over the rationals.
sage: E = EllipticCurve('37a') sage: E.rational_points(bound=8) [(0 : 0 : 1), (1 : 0 : 1), (-1 : 0 : 1), (0 : -1 : 1), (1 : -1 : 1), (-1 : -1 : 1), (2 : 2 : 1), (2 : -3 : 1), (1/4 : -3/8 : 1), (1/4 : -5/8 : 1), (0 : 1 : 0)]
For a small finite field, the complete set of points can be enumerated.
sage: Etilde = E.base_extend(GF(3)) sage: Etilde.rational_points() [(0 : 0 : 1), (1 : 0 : 1), (2 : 0 : 1), (0 : 2 : 1), (1 : 2 : 1), (2 : 2 : 1), (0 : 1 : 0)]
The class of hyperelliptic curves does not (yet) support desingularization of the places at infinity into two points.
sage: FF = FiniteField(7) sage: P.<x> = PolynomialRing(FiniteField(7)) sage: C = HyperellipticCurve(x^8+x+1) sage: C.rational_points() [(2 : 0 : 1), (4 : 0 : 1), (0 : 1 : 1), (6 : 1 : 1), (0 : 6 : 1), (6 : 6 : 1), (0 : 1 : 0)]
TODO:
1. The above algorithms enumerate all projective points and test whether they lie on the scheme; Implement a more naive sieve at least for covers of the projective line.
2. Implement Stoll's model in weighted projective space to resolve singularities and find two points (1 : 1 : 0) and (-1 : 1 : 0) at infinity.
self) |
Return the corresponding reduced algebraic space associated to this scheme.
First we construct the union of a doubled and triplled line
in the affine plane over
.
sage: A.<x,y> = AffineSpace(2, QQ) sage: X = A.subscheme([(x-1)^2*(x-y)^3]); X Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x^5 - 3*x^4*y + 3*x^3*y^2 - x^2*y^3 - 2*x^4 + 6*x^3*y - 6*x^2*y^2 + 2*x*y^3 + x^3 - 3*x^2*y + 3*x*y^2 - y^3 sage: X.dimension() 1
Then we compute the corresponding reduced scheme.
sage: Y = X.reduce(); Y Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x^2 - x*y - x + y
Finally, we verify that the reduced scheme
is the union of those two lines.
sage: L1 = A.subscheme([x-1]); L1 Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x - 1 sage: L2 = A.subscheme([x-y]); L2 Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x - y sage: W = L1.union(L2); W # taken in ambient space Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x^2 - x*y - x + y sage: Y == W True
self, other) |
Return the scheme-theoretic union of self and other in their common ambient space.
We construct the union of a line and a tripled-point on the line.
sage: A.<x,y> = AffineSpace(2, QQ) sage: I = ideal([x,y])^3 sage: P = A.subscheme(I) sage: L = A.subscheme([y-1]) sage: S = L.union(P); S Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: y^4 - y^3 x*y^3 - x*y^2 x^2*y^2 - x^2*y x^3*y - x^3 sage: S.dimension() 1 sage: S.reduce() Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: y^2 - y x*y - x
We can also use the notation "+" for the union:
sage: A.subscheme([x]) + A.subscheme([y^2 - (x^3+1)]) Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: -x^4 + x*y^2 - x
Saving and loading:
sage: loads(S.dumps()) == S True
Special Functions: __cmp__,
__init__,
_check_satisfies_equations,
_error_bad_coords,
_repr_,
_validate
self, v) |
Verify that the coordinates of v define a point on this scheme, or raise a TypeError.
Class: AlgebraicScheme_subscheme_affine
Functions: dimension,
projective_embedding
self) |
sage: A.<x,y> = AffineSpace(2, QQ) sage: A.subscheme([]).dimension() 2 sage: A.subscheme([x]).dimension() 1 sage: A.subscheme([x^5]).dimension() 1 sage: A.subscheme([x^2 + y^2 - 1]).dimension() 1 sage: A.subscheme([x*(x-1), y*(y-1)]).dimension() 0
Something less obvious
sage: A.<x,y,z,w> = AffineSpace(4, QQ) sage: X = A.subscheme([x^2, x^2*y^2 + z^2, z^2 - w^2, 10*x^2 + w^2 - z^2]) sage: X Closed subscheme of Affine Space of dimension 4 over Rational Field defined by: x^2 x^2*y^2 + z^2 z^2 - w^2 10*x^2 - z^2 + w^2 sage: X.dimension() 1
self, [i=None], [X=None]) |
Returns a morphism from this affine scheme into an ambient projective space of the same dimension.
Input:
X - (default: None) projective scheme, i.e., codomain of morphism; this is constructed if it is not given.
Special Functions: _point_morphism_class
Class: AlgebraicScheme_subscheme_projective
Functions: affine_patch,
dimension
self, i) |
Return the
-th affine patch of this projective scheme.
This is the intersection with this
-th affine patch of
its ambient space.
Input:
sage: PP = ProjectiveSpace(2, QQ, names='X,Y,Z') sage: X,Y,Z = PP.gens() sage: C = PP.subscheme(X^3*Y + Y^3*Z + Z^3*X) sage: U = C.affine_patch(0) sage: U Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x0^3*x1 + x1^3 + x0 sage: U.projective_embedding() Scheme morphism: From: Closed subscheme of Affine Space of dimension 2 over Rational Field defined by: x0^3*x1 + x1^3 + x0 To: Closed subscheme of Projective Space of dimension 2 over Rational Field defined by: X^3*Y + Y^3*Z + X*Z^3 Defn: Defined on coordinates by sending (x0, x1) to (1 : x0 : x1)
self) |
sage: A.<x,y> = AffineSpace(2, QQ) sage: A.subscheme([]).dimension() 2 sage: A.subscheme([x]).dimension() 1 sage: A.subscheme([x^5]).dimension() 1 sage: A.subscheme([x^2 + y^2 - 1]).dimension() 1 sage: A.subscheme([x*(x-1), y*(y-1)]).dimension() 0
Something less obvious
sage: A.<x,y,z,w> = AffineSpace(4, QQ) sage: X = A.subscheme([x^2, x^2*y^2 + z^2, z^2 - w^2, 10*x^2 + w^2 - z^2]) sage: X Closed subscheme of Affine Space of dimension 4 over Rational Field defined by: x^2 x^2*y^2 + z^2 z^2 - w^2 10*x^2 - z^2 + w^2 sage: X.dimension() 1
Special Functions: _point_morphism_class,
_validate
See About this document... for information on suggesting changes.