Points on affine varieties

Scheme morphism for points on affine varieties.

AUTHORS:

  • David Kohel, William Stein
  • Volker Braun (2011-08-08): Renamed classes, more documentation, misc cleanups.
  • Ben Hutz (2013)
class sage.schemes.affine.affine_point.SchemeMorphism_point_affine(X, v, check=True)

Bases: sage.schemes.generic.morphism.SchemeMorphism_point

A rational point on an affine scheme.

INPUT:

  • X – a subscheme of an ambient affine space over a ring \(R\).
  • v – a list/tuple/iterable of coordinates in \(R\).
  • check – boolean (optional, default:True). Whether to check the input for consistency.

EXAMPLES:

sage: A = AffineSpace(2, QQ)
sage: A(1, 2)
(1, 2)
global_height(prec=None)

Returns the logarithmic height of the point.

INPUT:

  • prec – desired floating point precision (default: default RealField precision).

OUTPUT:

  • a real number.

EXAMPLES:

sage: P.<x,y> = AffineSpace(QQ, 2)
sage: Q = P(41, 1/12)
sage: Q.global_height()
3.71357206670431
sage: P = AffineSpace(ZZ, 4, 'x')
sage: Q = P(3, 17, -51, 5)
sage: Q.global_height()
3.93182563272433
sage: R.<x> = PolynomialRing(QQ)
sage: k.<w> = NumberField(x^2+5)
sage: A = AffineSpace(k, 2, 'z')
sage: A([3, 5*w+1]).global_height(prec=100)
2.4181409534757389986565376694

Todo

P-adic heights.

homogenize(n)

Return the homogenization of the point at the nth coordinate.

INPUT:

  • n – integer between 0 and dimension of the map, inclusive.

OUTPUT:

  • A point in the projectivization of the codomain of the map .

EXAMPLES:

sage: A.<x,y> = AffineSpace(ZZ, 2)
sage: Q = A(2, 3)
sage: Q.homogenize(2).dehomogenize(2) == Q
True

::

sage: A.<x,y> = AffineSpace(QQ, 2)
sage: Q = A(2, 3)
sage: P = A(0, 1)
sage: Q.homogenize(2).codomain() == P.homogenize(2).codomain()
True
nth_iterate(f, n)

Returns the point \(f^n(self)\)

INPUT:

  • f – a SchemeMorphism_polynomial with self if f.domain().
  • n – a positive integer.

OUTPUT:

  • a point in f.codomain().

EXAMPLES:

sage: A.<x,y> = AffineSpace(QQ, 2)
sage: H = Hom(A, A)
sage: f = H([(x-2*y^2)/x,3*x*y])
sage: A(9,3).nth_iterate(f, 3)
doctest:warning
...
(-104975/13123, -9566667)
orbit(f, N)

Returns the orbit of the point by \(f\).

If \(n\) is an integer it returns \([self,f(self), \ldots, f^{n}(self)]\).

If \(n\) is a list or tuple \(n=[m, k]\) it returns \([f^{m}(self), \ldots, f^{k}(self)]\).

INPUT:

  • f – a SchemeMorphism_polynomial with the point in f.domain().
  • N – a non-negative integer or list or tuple of two non-negative integers.

OUTPUT:

  • a list of points in f.codomain().

EXAMPLES:

sage: A.<x,y>=AffineSpace(QQ, 2)
sage: H = Hom(A, A)
sage: f = H([(x-2*y^2)/x, 3*x*y])
sage: A(9, 3).orbit(f, 3)
doctest:warning
...
[(9, 3), (-1, 81), (13123, -243), (-104975/13123, -9566667)]
class sage.schemes.affine.affine_point.SchemeMorphism_point_affine_field(X, v, check=True)

Bases: sage.schemes.affine.affine_point.SchemeMorphism_point_affine

intersection_multiplicity(X)

Return the intersection multiplicity of the codomain of this point and X at this point.

This uses the intersection_multiplicity implementations for projective/affine subschemes. This point must be a point on an affine subscheme.

INPUT:

  • X – a subscheme in the same ambient space as that of the codomain of this point.

OUTPUT: Integer.

EXAMPLES:

sage: A.<x,y> = AffineSpace(GF(17), 2)
sage: X = A.subscheme([y^2 - x^3 + 2*x^2 - x])
sage: Y = A.subscheme([y - 2*x + 2])
sage: Q1 = Y([1,0])
sage: Q1.intersection_multiplicity(X)
2
sage: Q2 = X([4,6])
sage: Q2.intersection_multiplicity(Y)
1
sage: A.<x,y,z,w> = AffineSpace(QQ, 4)
sage: X = A.subscheme([x^2 - y*z^2, z - 2*w^2])
sage: Q = A([2,1,2,-1])
sage: Q.intersection_multiplicity(X)
Traceback (most recent call last):
...
TypeError: this point must be a point on an affine subscheme
multiplicity()

Return the multiplicity of this point on its codomain.

Uses the subscheme multiplicity implementation. This point must be a point on an affine subscheme.

OUTPUT: an integer.

EXAMPLES:

sage: A.<x,y,z> = AffineSpace(QQ, 3)
sage: X = A.subscheme([y^2 - x^7*z])
sage: Q1 = X([1,1,1])
sage: Q1.multiplicity()
1
sage: Q2 = X([0,0,2])
sage: Q2.multiplicity()
2
weil_restriction()

Compute the Weil restriction of this point over some extension field.

If the field is a finite field, then this computes the Weil restriction to the prime subfield.

A Weil restriction of scalars - denoted \(Res_{L/k}\) - is a functor which, for any finite extension of fields \(L/k\) and any algebraic variety \(X\) over \(L\), produces another corresponding variety \(Res_{L/k}(X)\), defined over \(k\). It is useful for reducing questions about varieties over large fields to questions about more complicated varieties over smaller fields. This functor applied to a point gives the equivalent point on the Weil restriction of its codomain.

OUTPUT: Scheme point on the Weil restriction of the codomain of this point.

EXAMPLES:

sage: A.<x,y,z> = AffineSpace(GF(5^3, 't'), 3)
sage: X = A.subscheme([y^2-x*z, z^2+y])
sage: Y = X.weil_restriction()
sage: P = X([1, -1, 1])
sage: Q = P.weil_restriction();Q
(1, 0, 0, 4, 0, 0, 1, 0, 0)
sage: Q.codomain() == Y
True
sage: R.<x> = QQ[]
sage: K.<w> = NumberField(x^5-2)
sage: R.<x> = K[]
sage: L.<v> = K.extension(x^2+w)
sage: A.<x,y> = AffineSpace(L, 2)
sage: P = A([w^3-v,1+w+w*v])
sage: P.weil_restriction()
(w^3, -1, w + 1, w)
class sage.schemes.affine.affine_point.SchemeMorphism_point_affine_finite_field(X, v, check=True)

Bases: sage.schemes.affine.affine_point.SchemeMorphism_point_affine_field

orbit_structure(f)

This function returns the pair \([m, n]\) where \(m\) is the preperiod and \(n\) is the period of the point by f.

Every point is preperiodic over a finite field.

INPUT:

  • f – a ScemeMorphism_polynomial with the point in f.domain().

OUTPUT:

  • a list \([m, n]\) of integers.

EXAMPLES:

sage: P.<x,y,z> = AffineSpace(GF(5), 3)
sage: f = DynamicalSystem_affine([x^2 + y^2, y^2, z^2 + y*z], domain=P)
sage: f.orbit_structure(P(1, 1, 1))
[0, 6]
sage: P.<x,y,z> = AffineSpace(GF(7), 3)
sage: X = P.subscheme(x^2 - y^2)
sage: f = DynamicalSystem_affine([x^2, y^2, z^2], domain=X)
sage: f.orbit_structure(X(1, 1, 2))
[0, 2]
sage: P.<x,y> = AffineSpace(GF(13), 2)
sage: f = DynamicalSystem_affine([x^2 - y^2, y^2], domain=P)
sage: P(3, 4).orbit_structure(f)
doctest:warning
...
[2, 6]
sage: P.<x,y> = AffineSpace(GF(13), 2)
sage: H = End(P)
sage: f = H([x^2 - y^2, y^2])
sage: f.orbit_structure(P(3, 4))
doctest:warning
...
[2, 6]