Subschemes of affine space

AUTHORS:

  • David Kohel, William Stein (2005): initial version

  • Ben Hutz (2013): affine subschemes

class sage.schemes.affine.affine_subscheme.AlgebraicScheme_subscheme_affine(A, polynomials, embedding_center=None, embedding_codomain=None, embedding_images=None)[source]

Bases: AlgebraicScheme_subscheme

An algebraic subscheme of affine space.

INPUT:

  • A – ambient affine space

  • polynomials – single polynomial, ideal or iterable of defining polynomials

EXAMPLES:

sage: A3.<x, y, z> = AffineSpace(QQ, 3)
sage: A3.subscheme([x^2 - y*z])
Closed subscheme of Affine Space of dimension 3 over Rational Field defined by:
  x^2 - y*z
>>> from sage.all import *
>>> A3 = AffineSpace(QQ, Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = A3._first_ngens(3)
>>> A3.subscheme([x**Integer(2) - y*z])
Closed subscheme of Affine Space of dimension 3 over Rational Field defined by:
  x^2 - y*z
A3.<x, y, z> = AffineSpace(QQ, 3)
A3.subscheme([x^2 - y*z])
dimension()[source]

Return the dimension of the affine algebraic subscheme.

EXAMPLES:

sage: # needs sage.libs.singular
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
>>> from sage.all import *
>>> # needs sage.libs.singular
>>> A = AffineSpace(Integer(2), QQ, names=('x', 'y',)); (x, y,) = A._first_ngens(2)
>>> A.subscheme([]).dimension()
2
>>> A.subscheme([x]).dimension()
1
>>> A.subscheme([x**Integer(5)]).dimension()
1
>>> A.subscheme([x**Integer(2) + y**Integer(2) - Integer(1)]).dimension()
1
>>> A.subscheme([x*(x-Integer(1)), y*(y-Integer(1))]).dimension()
0
# needs sage.libs.singular
A.<x,y> = AffineSpace(2, QQ)
A.subscheme([]).dimension()
A.subscheme([x]).dimension()
A.subscheme([x^5]).dimension()
A.subscheme([x^2 + y^2 - 1]).dimension()
A.subscheme([x*(x-1), y*(y-1)]).dimension()

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()                                                         # needs sage.libs.singular
1
>>> from sage.all import *
>>> A = AffineSpace(Integer(4), QQ, names=('x', 'y', 'z', 'w',)); (x, y, z, w,) = A._first_ngens(4)
>>> X = A.subscheme([x**Integer(2), x**Integer(2)*y**Integer(2) + z**Integer(2), z**Integer(2) - w**Integer(2), Integer(10)*x**Integer(2) + w**Integer(2) - z**Integer(2)])
>>> 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
>>> X.dimension()                                                         # needs sage.libs.singular
1
A.<x,y,z,w> = AffineSpace(4, QQ)
X = A.subscheme([x^2, x^2*y^2 + z^2, z^2 - w^2, 10*x^2 + w^2 - z^2])
X
X.dimension()                                                         # needs sage.libs.singular
intersection_multiplicity(X, P)[source]

Return the intersection multiplicity of this subscheme and the subscheme X at the point P.

The intersection of this subscheme with X must be proper, that is \(\mathrm{codim}(self\cap X) = \mathrm{codim}(self) + \mathrm{codim}(X)\), and must also be finite. We use Serre’s Tor formula to compute the intersection multiplicity. If \(I\), \(J\) are the defining ideals of self, X, respectively, then this is \(\sum_{i=0}^{\infty}(-1)^i\mathrm{length}(\mathrm{Tor}_{\mathcal{O}_{A,p}}^{i} (\mathcal{O}_{A,p}/I,\mathcal{O}_{A,p}/J))\) where \(A\) is the affine ambient space of these subschemes.

INPUT:

  • X – subscheme in the same ambient space as this subscheme

  • P – a point in the intersection of this subscheme with X

OUTPUT: integer

EXAMPLES:

sage: # needs sage.schemes
sage: A.<x,y> = AffineSpace(QQ, 2)
sage: C = Curve([y^2 - x^3 - x^2], A)                                       # needs sage.libs.singular
sage: D = Curve([y^2 + x^3], A)                                             # needs sage.libs.singular
sage: Q = A([0,0])
sage: C.intersection_multiplicity(D, Q)                                     # needs sage.libs.singular
4
>>> from sage.all import *
>>> # needs sage.schemes
>>> A = AffineSpace(QQ, Integer(2), names=('x', 'y',)); (x, y,) = A._first_ngens(2)
>>> C = Curve([y**Integer(2) - x**Integer(3) - x**Integer(2)], A)                                       # needs sage.libs.singular
>>> D = Curve([y**Integer(2) + x**Integer(3)], A)                                             # needs sage.libs.singular
>>> Q = A([Integer(0),Integer(0)])
>>> C.intersection_multiplicity(D, Q)                                     # needs sage.libs.singular
4
# needs sage.schemes
A.<x,y> = AffineSpace(QQ, 2)
C = Curve([y^2 - x^3 - x^2], A)                                       # needs sage.libs.singular
D = Curve([y^2 + x^3], A)                                             # needs sage.libs.singular
Q = A([0,0])
C.intersection_multiplicity(D, Q)                                     # needs sage.libs.singular

sage: # needs sage.rings.number_field
sage: R.<a> = QQ[]
sage: K.<b> = NumberField(a^6 - 3*a^5 + 5*a^4 - 5*a^3 + 5*a^2 - 3*a + 1)
sage: A.<x,y,z,w> = AffineSpace(K, 4)
sage: X = A.subscheme([x*y, y*z + 7, w^3 - x^3])
sage: Y = A.subscheme([x - z^3 + z + 1])
sage: Q = A([0,
....:        -7*b^5 + 21*b^4 - 28*b^3 + 21*b^2 - 21*b + 14,
....:        -b^5 + 2*b^4 - 3*b^3 + 2*b^2 - 2*b,
....:        0])
sage: X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
3
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> R = QQ['a']; (a,) = R._first_ngens(1)
>>> K = NumberField(a**Integer(6) - Integer(3)*a**Integer(5) + Integer(5)*a**Integer(4) - Integer(5)*a**Integer(3) + Integer(5)*a**Integer(2) - Integer(3)*a + Integer(1), names=('b',)); (b,) = K._first_ngens(1)
>>> A = AffineSpace(K, Integer(4), names=('x', 'y', 'z', 'w',)); (x, y, z, w,) = A._first_ngens(4)
>>> X = A.subscheme([x*y, y*z + Integer(7), w**Integer(3) - x**Integer(3)])
>>> Y = A.subscheme([x - z**Integer(3) + z + Integer(1)])
>>> Q = A([Integer(0),
...        -Integer(7)*b**Integer(5) + Integer(21)*b**Integer(4) - Integer(28)*b**Integer(3) + Integer(21)*b**Integer(2) - Integer(21)*b + Integer(14),
...        -b**Integer(5) + Integer(2)*b**Integer(4) - Integer(3)*b**Integer(3) + Integer(2)*b**Integer(2) - Integer(2)*b,
...        Integer(0)])
>>> X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
3
# needs sage.rings.number_field
R.<a> = QQ[]
K.<b> = NumberField(a^6 - 3*a^5 + 5*a^4 - 5*a^3 + 5*a^2 - 3*a + 1)
A.<x,y,z,w> = AffineSpace(K, 4)
X = A.subscheme([x*y, y*z + 7, w^3 - x^3])
Y = A.subscheme([x - z^3 + z + 1])
Q = A([0,
       -7*b^5 + 21*b^4 - 28*b^3 + 21*b^2 - 21*b + 14,
       -b^5 + 2*b^4 - 3*b^3 + 2*b^2 - 2*b,
       0])
X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular

sage: A.<x,y,z> = AffineSpace(QQ, 3)
sage: X = A.subscheme([z^2 - 1])
sage: Y = A.subscheme([z - 1, y - x^2])
sage: Q = A([1,1,1])
sage: X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
Traceback (most recent call last):
...
TypeError: the intersection of this subscheme and (=Closed subscheme of Affine Space of dimension 3
over Rational Field defined by: z - 1, -x^2 + y) must be proper and finite
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = A._first_ngens(3)
>>> X = A.subscheme([z**Integer(2) - Integer(1)])
>>> Y = A.subscheme([z - Integer(1), y - x**Integer(2)])
>>> Q = A([Integer(1),Integer(1),Integer(1)])
>>> X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
Traceback (most recent call last):
...
TypeError: the intersection of this subscheme and (=Closed subscheme of Affine Space of dimension 3
over Rational Field defined by: z - 1, -x^2 + y) must be proper and finite
A.<x,y,z> = AffineSpace(QQ, 3)
X = A.subscheme([z^2 - 1])
Y = A.subscheme([z - 1, y - x^2])
Q = A([1,1,1])
X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular

sage: A.<x,y,z,w,t> = AffineSpace(QQ, 5)
sage: X = A.subscheme([x*y, t^2*w, w^3*z])
sage: Y = A.subscheme([y*w + z])
sage: Q = A([0,0,0,0,0])
sage: X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
Traceback (most recent call last):
...
TypeError: the intersection of this subscheme and (=Closed subscheme of Affine Space of dimension 5
over Rational Field defined by: y*w + z) must be proper and finite
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(5), names=('x', 'y', 'z', 'w', 't',)); (x, y, z, w, t,) = A._first_ngens(5)
>>> X = A.subscheme([x*y, t**Integer(2)*w, w**Integer(3)*z])
>>> Y = A.subscheme([y*w + z])
>>> Q = A([Integer(0),Integer(0),Integer(0),Integer(0),Integer(0)])
>>> X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
Traceback (most recent call last):
...
TypeError: the intersection of this subscheme and (=Closed subscheme of Affine Space of dimension 5
over Rational Field defined by: y*w + z) must be proper and finite
A.<x,y,z,w,t> = AffineSpace(QQ, 5)
X = A.subscheme([x*y, t^2*w, w^3*z])
Y = A.subscheme([y*w + z])
Q = A([0,0,0,0,0])
X.intersection_multiplicity(Y, Q)                                     # needs sage.libs.singular
is_smooth(point=None)[source]

Test whether the algebraic subscheme is smooth.

INPUT:

  • point – a point or None (default). The point to test smoothness at

OUTPUT:

boolean; if no point was specified, returns whether the algebraic subscheme is smooth everywhere. Otherwise, smoothness at the specified point is tested.

EXAMPLES:

sage: A2.<x,y> = AffineSpace(2, QQ)
sage: cuspidal_curve = A2.subscheme([y^2 - x^3])
sage: cuspidal_curve
Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:
  -x^3 + y^2
sage: smooth_point = cuspidal_curve.point([1,1])
sage: smooth_point in cuspidal_curve
True
sage: singular_point = cuspidal_curve.point([0,0])
sage: singular_point in cuspidal_curve
True
sage: cuspidal_curve.is_smooth(smooth_point)                                # needs sage.libs.singular
True
sage: cuspidal_curve.is_smooth(singular_point)                              # needs sage.libs.singular
False
sage: cuspidal_curve.is_smooth()                                            # needs sage.libs.singular
False
>>> from sage.all import *
>>> A2 = AffineSpace(Integer(2), QQ, names=('x', 'y',)); (x, y,) = A2._first_ngens(2)
>>> cuspidal_curve = A2.subscheme([y**Integer(2) - x**Integer(3)])
>>> cuspidal_curve
Closed subscheme of Affine Space of dimension 2 over Rational Field defined by:
  -x^3 + y^2
>>> smooth_point = cuspidal_curve.point([Integer(1),Integer(1)])
>>> smooth_point in cuspidal_curve
True
>>> singular_point = cuspidal_curve.point([Integer(0),Integer(0)])
>>> singular_point in cuspidal_curve
True
>>> cuspidal_curve.is_smooth(smooth_point)                                # needs sage.libs.singular
True
>>> cuspidal_curve.is_smooth(singular_point)                              # needs sage.libs.singular
False
>>> cuspidal_curve.is_smooth()                                            # needs sage.libs.singular
False
A2.<x,y> = AffineSpace(2, QQ)
cuspidal_curve = A2.subscheme([y^2 - x^3])
cuspidal_curve
smooth_point = cuspidal_curve.point([1,1])
smooth_point in cuspidal_curve
singular_point = cuspidal_curve.point([0,0])
singular_point in cuspidal_curve
cuspidal_curve.is_smooth(smooth_point)                                # needs sage.libs.singular
cuspidal_curve.is_smooth(singular_point)                              # needs sage.libs.singular
cuspidal_curve.is_smooth()                                            # needs sage.libs.singular
multiplicity(P)[source]

Return the multiplicity of P on this subscheme.

This is computed as the multiplicity of the local ring of this subscheme corresponding to P. This subscheme must be defined over a field. An error is raised if P is not a point on this subscheme.

INPUT:

  • P – a point on this subscheme

OUTPUT: integer

EXAMPLES:

sage: A.<x,y,z,w> = AffineSpace(QQ, 4)
sage: X = A.subscheme([z*y - x^7, w - 2*z])
sage: Q1 = A([1,1/3,3,6])
sage: X.multiplicity(Q1)                                                    # needs sage.libs.singular
1
sage: Q2 = A([0,0,0,0])
sage: X.multiplicity(Q2)                                                    # needs sage.libs.singular
2
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(4), names=('x', 'y', 'z', 'w',)); (x, y, z, w,) = A._first_ngens(4)
>>> X = A.subscheme([z*y - x**Integer(7), w - Integer(2)*z])
>>> Q1 = A([Integer(1),Integer(1)/Integer(3),Integer(3),Integer(6)])
>>> X.multiplicity(Q1)                                                    # needs sage.libs.singular
1
>>> Q2 = A([Integer(0),Integer(0),Integer(0),Integer(0)])
>>> X.multiplicity(Q2)                                                    # needs sage.libs.singular
2
A.<x,y,z,w> = AffineSpace(QQ, 4)
X = A.subscheme([z*y - x^7, w - 2*z])
Q1 = A([1,1/3,3,6])
X.multiplicity(Q1)                                                    # needs sage.libs.singular
Q2 = A([0,0,0,0])
X.multiplicity(Q2)                                                    # needs sage.libs.singular

sage: A.<x,y,z,w,v> = AffineSpace(GF(23), 5)
sage: C = A.curve([x^8 - y, y^7 - z, z^3 - 1, w^5 - v^3])                   # needs sage.libs.singular sage.schemes
sage: Q = A([22,1,1,0,0])
sage: C.multiplicity(Q)                                                     # needs sage.libs.singular sage.schemes
3
>>> from sage.all import *
>>> A = AffineSpace(GF(Integer(23)), Integer(5), names=('x', 'y', 'z', 'w', 'v',)); (x, y, z, w, v,) = A._first_ngens(5)
>>> C = A.curve([x**Integer(8) - y, y**Integer(7) - z, z**Integer(3) - Integer(1), w**Integer(5) - v**Integer(3)])                   # needs sage.libs.singular sage.schemes
>>> Q = A([Integer(22),Integer(1),Integer(1),Integer(0),Integer(0)])
>>> C.multiplicity(Q)                                                     # needs sage.libs.singular sage.schemes
3
A.<x,y,z,w,v> = AffineSpace(GF(23), 5)
C = A.curve([x^8 - y, y^7 - z, z^3 - 1, w^5 - v^3])                   # needs sage.libs.singular sage.schemes
Q = A([22,1,1,0,0])
C.multiplicity(Q)                                                     # needs sage.libs.singular sage.schemes

sage: # needs sage.rings.number_field
sage: K.<a> = QuadraticField(-1)
sage: A.<x,y,z,w,t> = AffineSpace(K, 5)
sage: X = A.subscheme([y^7 - x^2*z^5 + z^3*t^8 - x^2*y^4*z - t^8])
sage: Q1 = A([1,1,0,1,-1])
sage: X.multiplicity(Q1)                                                    # needs sage.libs.singular
1
sage: Q2 = A([0,0,0,-a,0])
sage: X.multiplicity(Q2)                                                    # needs sage.libs.singular
7
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> K = QuadraticField(-Integer(1), names=('a',)); (a,) = K._first_ngens(1)
>>> A = AffineSpace(K, Integer(5), names=('x', 'y', 'z', 'w', 't',)); (x, y, z, w, t,) = A._first_ngens(5)
>>> X = A.subscheme([y**Integer(7) - x**Integer(2)*z**Integer(5) + z**Integer(3)*t**Integer(8) - x**Integer(2)*y**Integer(4)*z - t**Integer(8)])
>>> Q1 = A([Integer(1),Integer(1),Integer(0),Integer(1),-Integer(1)])
>>> X.multiplicity(Q1)                                                    # needs sage.libs.singular
1
>>> Q2 = A([Integer(0),Integer(0),Integer(0),-a,Integer(0)])
>>> X.multiplicity(Q2)                                                    # needs sage.libs.singular
7
# needs sage.rings.number_field
K.<a> = QuadraticField(-1)
A.<x,y,z,w,t> = AffineSpace(K, 5)
X = A.subscheme([y^7 - x^2*z^5 + z^3*t^8 - x^2*y^4*z - t^8])
Q1 = A([1,1,0,1,-1])
X.multiplicity(Q1)                                                    # needs sage.libs.singular
Q2 = A([0,0,0,-a,0])
X.multiplicity(Q2)                                                    # needs sage.libs.singular

Check that upstream Issue #27479 is fixed:

sage: A1.<x> = AffineSpace(QQ, 1)
sage: X = A1.subscheme([x^1789 + x])
sage: Q = X([0])
sage: X.multiplicity(Q)                                                     # needs sage.libs.singular
1
>>> from sage.all import *
>>> A1 = AffineSpace(QQ, Integer(1), names=('x',)); (x,) = A1._first_ngens(1)
>>> X = A1.subscheme([x**Integer(1789) + x])
>>> Q = X([Integer(0)])
>>> X.multiplicity(Q)                                                     # needs sage.libs.singular
1
A1.<x> = AffineSpace(QQ, 1)
X = A1.subscheme([x^1789 + x])
Q = X([0])
X.multiplicity(Q)                                                     # needs sage.libs.singular
projective_closure(i=None, PP=None)[source]

Return the projective closure of this affine subscheme.

INPUT:

  • i – (default: None) determines the embedding to use to compute the projective closure of this affine subscheme. The embedding used is the one which has a 1 in the i-th coordinate, numbered from 0.

  • PP – (default: None) ambient projective space, i.e., ambient space of codomain of morphism; this is constructed if it is not given

OUTPUT: a projective subscheme

EXAMPLES:

sage: A.<x,y,z,w> = AffineSpace(QQ, 4)
sage: X = A.subscheme([x^2 - y, x*y - z, y^2 - w,
....:                  x*z - w, y*z - x*w, z^2 - y*w])
sage: X.projective_closure()                                                # needs sage.libs.singular
Closed subscheme of Projective Space of dimension 4 over Rational Field
 defined by:
  x0^2 - x1*x4,
  x0*x1 - x2*x4,
  x1^2 - x3*x4,
  x0*x2 - x3*x4,
  x1*x2 - x0*x3,
  x2^2 - x1*x3
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(4), names=('x', 'y', 'z', 'w',)); (x, y, z, w,) = A._first_ngens(4)
>>> X = A.subscheme([x**Integer(2) - y, x*y - z, y**Integer(2) - w,
...                  x*z - w, y*z - x*w, z**Integer(2) - y*w])
>>> X.projective_closure()                                                # needs sage.libs.singular
Closed subscheme of Projective Space of dimension 4 over Rational Field
 defined by:
  x0^2 - x1*x4,
  x0*x1 - x2*x4,
  x1^2 - x3*x4,
  x0*x2 - x3*x4,
  x1*x2 - x0*x3,
  x2^2 - x1*x3
A.<x,y,z,w> = AffineSpace(QQ, 4)
X = A.subscheme([x^2 - y, x*y - z, y^2 - w,
                 x*z - w, y*z - x*w, z^2 - y*w])
X.projective_closure()                                                # needs sage.libs.singular

sage: A.<x,y,z> = AffineSpace(QQ, 3)
sage: P.<a,b,c,d> = ProjectiveSpace(QQ, 3)
sage: X = A.subscheme([z - x^2 - y^2])
sage: X.projective_closure(1, P).ambient_space() == P                       # needs sage.libs.singular
True
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = A._first_ngens(3)
>>> P = ProjectiveSpace(QQ, Integer(3), names=('a', 'b', 'c', 'd',)); (a, b, c, d,) = P._first_ngens(4)
>>> X = A.subscheme([z - x**Integer(2) - y**Integer(2)])
>>> X.projective_closure(Integer(1), P).ambient_space() == P                       # needs sage.libs.singular
True
A.<x,y,z> = AffineSpace(QQ, 3)
P.<a,b,c,d> = ProjectiveSpace(QQ, 3)
X = A.subscheme([z - x^2 - y^2])
X.projective_closure(1, P).ambient_space() == P                       # needs sage.libs.singular
projective_embedding(i=None, PP=None)[source]

Return a morphism from this affine scheme into an ambient projective space of the same dimension.

The codomain of this morphism is the projective closure of this affine scheme in PP, if given, or otherwise in a new projective space that is constructed.

INPUT:

  • i – integer (default: dimension of self = last coordinate); determines which projective embedding to compute. The embedding is that which has a 1 in the \(i\)-th coordinate, numbered from 0.

  • PP – (default: None) ambient projective space, i.e., ambient space of codomain of morphism; this is constructed if it is not given

EXAMPLES:

sage: A.<x, y, z> = AffineSpace(3, ZZ)
sage: S = A.subscheme([x*y - z])
sage: S.projective_embedding()                                              # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 3 over Integer Ring
        defined by: x*y - z
  To:   Closed subscheme of Projective Space of dimension 3 over Integer Ring
        defined by: x0*x1 - x2*x3
  Defn: Defined on coordinates by sending (x, y, z) to (x : y : z : 1)
>>> from sage.all import *
>>> A = AffineSpace(Integer(3), ZZ, names=('x', 'y', 'z',)); (x, y, z,) = A._first_ngens(3)
>>> S = A.subscheme([x*y - z])
>>> S.projective_embedding()                                              # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 3 over Integer Ring
        defined by: x*y - z
  To:   Closed subscheme of Projective Space of dimension 3 over Integer Ring
        defined by: x0*x1 - x2*x3
  Defn: Defined on coordinates by sending (x, y, z) to (x : y : z : 1)
A.<x, y, z> = AffineSpace(3, ZZ)
S = A.subscheme([x*y - z])
S.projective_embedding()                                              # needs sage.libs.singular

sage: A.<x, y, z> = AffineSpace(3, ZZ)
sage: P = ProjectiveSpace(3, ZZ, 'u')
sage: S = A.subscheme([x^2 - y*z])
sage: S.projective_embedding(1, P)                                          # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 3 over Integer Ring
        defined by: x^2 - y*z
  To:   Closed subscheme of Projective Space of dimension 3 over Integer Ring
        defined by: u0^2 - u2*u3
  Defn: Defined on coordinates by sending (x, y, z) to (x : 1 : y : z)
>>> from sage.all import *
>>> A = AffineSpace(Integer(3), ZZ, names=('x', 'y', 'z',)); (x, y, z,) = A._first_ngens(3)
>>> P = ProjectiveSpace(Integer(3), ZZ, 'u')
>>> S = A.subscheme([x**Integer(2) - y*z])
>>> S.projective_embedding(Integer(1), P)                                          # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 3 over Integer Ring
        defined by: x^2 - y*z
  To:   Closed subscheme of Projective Space of dimension 3 over Integer Ring
        defined by: u0^2 - u2*u3
  Defn: Defined on coordinates by sending (x, y, z) to (x : 1 : y : z)
A.<x, y, z> = AffineSpace(3, ZZ)
P = ProjectiveSpace(3, ZZ, 'u')
S = A.subscheme([x^2 - y*z])
S.projective_embedding(1, P)                                          # needs sage.libs.singular

sage: A.<x,y,z> = AffineSpace(QQ, 3)
sage: X = A.subscheme([y - x^2, z - x^3])
sage: X.projective_embedding()                                              # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 3 over Rational Field
        defined by: -x^2 + y, -x^3 + z
  To:   Closed subscheme of Projective Space of dimension 3 over Rational Field
        defined by: x0^2 - x1*x3, x0*x1 - x2*x3, x1^2 - x0*x2
  Defn: Defined on coordinates by sending (x, y, z) to (x : y : z : 1)
>>> from sage.all import *
>>> A = AffineSpace(QQ, Integer(3), names=('x', 'y', 'z',)); (x, y, z,) = A._first_ngens(3)
>>> X = A.subscheme([y - x**Integer(2), z - x**Integer(3)])
>>> X.projective_embedding()                                              # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 3 over Rational Field
        defined by: -x^2 + y, -x^3 + z
  To:   Closed subscheme of Projective Space of dimension 3 over Rational Field
        defined by: x0^2 - x1*x3, x0*x1 - x2*x3, x1^2 - x0*x2
  Defn: Defined on coordinates by sending (x, y, z) to (x : y : z : 1)
A.<x,y,z> = AffineSpace(QQ, 3)
X = A.subscheme([y - x^2, z - x^3])
X.projective_embedding()                                              # needs sage.libs.singular

When taking a closed subscheme of an affine space with a projective embedding, the subscheme inherits the embedding:

sage: A.<u,v> = AffineSpace(2, QQ, default_embedding_index=1)
sage: X = A.subscheme(u - v)                                                # needs sage.libs.singular
sage: X.projective_embedding()                                              # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 2 over Rational Field
        defined by: u - v
  To:   Closed subscheme of Projective Space of dimension 2 over Rational Field
        defined by: x0 - x2
  Defn: Defined on coordinates by sending (u, v) to (u : 1 : v)
sage: phi = X.projective_embedding()                                        # needs sage.libs.singular
sage: psi = A.projective_embedding()
sage: phi(X(2, 2)) == psi(A(X(2, 2)))                                       # needs sage.libs.singular
True
>>> from sage.all import *
>>> A = AffineSpace(Integer(2), QQ, default_embedding_index=Integer(1), names=('u', 'v',)); (u, v,) = A._first_ngens(2)
>>> X = A.subscheme(u - v)                                                # needs sage.libs.singular
>>> X.projective_embedding()                                              # needs sage.libs.singular
Scheme morphism:
  From: Closed subscheme of Affine Space of dimension 2 over Rational Field
        defined by: u - v
  To:   Closed subscheme of Projective Space of dimension 2 over Rational Field
        defined by: x0 - x2
  Defn: Defined on coordinates by sending (u, v) to (u : 1 : v)
>>> phi = X.projective_embedding()                                        # needs sage.libs.singular
>>> psi = A.projective_embedding()
>>> phi(X(Integer(2), Integer(2))) == psi(A(X(Integer(2), Integer(2))))                                       # needs sage.libs.singular
True
A.<u,v> = AffineSpace(2, QQ, default_embedding_index=1)
X = A.subscheme(u - v)                                                # needs sage.libs.singular
X.projective_embedding()                                              # needs sage.libs.singular
phi = X.projective_embedding()                                        # needs sage.libs.singular
psi = A.projective_embedding()
phi(X(2, 2)) == psi(A(X(2, 2)))                                       # needs sage.libs.singular
class sage.schemes.affine.affine_subscheme.AlgebraicScheme_subscheme_affine_field(A, polynomials, embedding_center=None, embedding_codomain=None, embedding_images=None)[source]

Bases: AlgebraicScheme_subscheme_affine

Algebraic subschemes of projective spaces defined over fields.

tangent_space(p)[source]

Return the tangent space at the point p.

The points of the tangent space are the tangent vectors at p.

INPUT:

  • p – a rational point

EXAMPLES:

sage: A3.<x,y,z> = AffineSpace(3, QQ)
sage: X = A3.subscheme(z - x*y)
sage: X.tangent_space(A3.origin())                                          # needs sage.libs.singular
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  z
sage: X.tangent_space(X(1,1,1))                                             # needs sage.libs.singular
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  -x - y + z
>>> from sage.all import *
>>> A3 = AffineSpace(Integer(3), QQ, names=('x', 'y', 'z',)); (x, y, z,) = A3._first_ngens(3)
>>> X = A3.subscheme(z - x*y)
>>> X.tangent_space(A3.origin())                                          # needs sage.libs.singular
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  z
>>> X.tangent_space(X(Integer(1),Integer(1),Integer(1)))                                             # needs sage.libs.singular
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  -x - y + z
A3.<x,y,z> = AffineSpace(3, QQ)
X = A3.subscheme(z - x*y)
X.tangent_space(A3.origin())                                          # needs sage.libs.singular
X.tangent_space(X(1,1,1))                                             # needs sage.libs.singular

Tangent space at a point may have higher dimension than the dimension of the point.

sage: # needs sage.libs.singular sage.schemes
sage: C = Curve([x + y + z, x^2 - y^2*z^2 + z^3])
sage: C.singular_points()
[(0, 0, 0)]
sage: p = C(0,0,0)
sage: C.tangent_space(p)
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  x + y + z
sage: _.dimension()
2
sage: q = C(1,0,-1)
sage: C.tangent_space(q)
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  x + y + z,
  2*x + 3*z
sage: _.dimension()
1
>>> from sage.all import *
>>> # needs sage.libs.singular sage.schemes
>>> C = Curve([x + y + z, x**Integer(2) - y**Integer(2)*z**Integer(2) + z**Integer(3)])
>>> C.singular_points()
[(0, 0, 0)]
>>> p = C(Integer(0),Integer(0),Integer(0))
>>> C.tangent_space(p)
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  x + y + z
>>> _.dimension()
2
>>> q = C(Integer(1),Integer(0),-Integer(1))
>>> C.tangent_space(q)
Closed subscheme of Affine Space of dimension 3 over Rational Field
 defined by:
  x + y + z,
  2*x + 3*z
>>> _.dimension()
1
# needs sage.libs.singular sage.schemes
C = Curve([x + y + z, x^2 - y^2*z^2 + z^3])
C.singular_points()
p = C(0,0,0)
C.tangent_space(p)
_.dimension()
q = C(1,0,-1)
C.tangent_space(q)
_.dimension()