Polynomial morphisms for products of projective spaces

This class builds on the projective space class and its point and morphism classes.

EXAMPLES:

sage: P1xP1.<x,y,u,v> = ProductProjectiveSpaces(QQ, [1, 1])
sage: H = End(P1xP1)
sage: H([x^2*u, y^2*v, x*v^2, y*u^2])
Scheme endomorphism of Product of projective spaces P^1 x P^1 over Rational Field
  Defn: Defined by sending (x : y , u : v) to (x^2*u : y^2*v , x*v^2 : y*u^2).
>>> from sage.all import *
>>> P1xP1 = ProductProjectiveSpaces(QQ, [Integer(1), Integer(1)], names=('x', 'y', 'u', 'v',)); (x, y, u, v,) = P1xP1._first_ngens(4)
>>> H = End(P1xP1)
>>> H([x**Integer(2)*u, y**Integer(2)*v, x*v**Integer(2), y*u**Integer(2)])
Scheme endomorphism of Product of projective spaces P^1 x P^1 over Rational Field
  Defn: Defined by sending (x : y , u : v) to (x^2*u : y^2*v , x*v^2 : y*u^2).
class sage.schemes.product_projective.morphism.ProductProjectiveSpaces_morphism_ring(parent, polys, check=True)[source]

Bases: SchemeMorphism_polynomial

The class of morphisms on products of projective spaces.

The components are projective space morphisms.

EXAMPLES:

sage: T.<x,y,z,w,u> = ProductProjectiveSpaces([2, 1], QQ)
sage: H = T.Hom(T)
sage: H([x^2, y^2, z^2, w^2, u^2])
Scheme endomorphism of Product of projective spaces P^2 x P^1 over Rational Field
  Defn: Defined by sending (x : y : z , w : u) to (x^2 : y^2 : z^2 , w^2 : u^2).
>>> from sage.all import *
>>> T = ProductProjectiveSpaces([Integer(2), Integer(1)], QQ, names=('x', 'y', 'z', 'w', 'u',)); (x, y, z, w, u,) = T._first_ngens(5)
>>> H = T.Hom(T)
>>> H([x**Integer(2), y**Integer(2), z**Integer(2), w**Integer(2), u**Integer(2)])
Scheme endomorphism of Product of projective spaces P^2 x P^1 over Rational Field
  Defn: Defined by sending (x : y : z , w : u) to (x^2 : y^2 : z^2 , w^2 : u^2).
as_dynamical_system()[source]

Return this endomorphism as a DynamicalSystem_product_projective.

OUTPUT: DynamicalSystem_product_projective

EXAMPLES:

sage: Z.<a,b,x,y,z> = ProductProjectiveSpaces([1, 2], ZZ)
sage: H = End(Z)
sage: f = H([a^3, b^3, x^2, y^2, z^2])
sage: type(f.as_dynamical_system())                                         # needs sage.schemes
<class 'sage.dynamics.arithmetic_dynamics.product_projective_ds.DynamicalSystem_product_projective'>
>>> from sage.all import *
>>> Z = ProductProjectiveSpaces([Integer(1), Integer(2)], ZZ, names=('a', 'b', 'x', 'y', 'z',)); (a, b, x, y, z,) = Z._first_ngens(5)
>>> H = End(Z)
>>> f = H([a**Integer(3), b**Integer(3), x**Integer(2), y**Integer(2), z**Integer(2)])
>>> type(f.as_dynamical_system())                                         # needs sage.schemes
<class 'sage.dynamics.arithmetic_dynamics.product_projective_ds.DynamicalSystem_product_projective'>
global_height(prec=None)[source]

Return the maximum of the absolute logarithmic heights of the coefficients in any of the coordinate functions of this map.

INPUT:

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

OUTPUT: a real number

Todo

Add functionality for \(\QQbar\), implement function to convert the map defined over \(\QQbar\) to map over a number field.

EXAMPLES:

sage: P1xP1.<x,y,u,v> = ProductProjectiveSpaces([1, 1], ZZ)
sage: H = End(P1xP1)
sage: f = H([x^2*u, 3*y^2*v, 5*x*v^2, y*u^2])
sage: f.global_height()                                                     # needs sage.rings.real_mpfr
1.60943791243410
>>> from sage.all import *
>>> P1xP1 = ProductProjectiveSpaces([Integer(1), Integer(1)], ZZ, names=('x', 'y', 'u', 'v',)); (x, y, u, v,) = P1xP1._first_ngens(4)
>>> H = End(P1xP1)
>>> f = H([x**Integer(2)*u, Integer(3)*y**Integer(2)*v, Integer(5)*x*v**Integer(2), y*u**Integer(2)])
>>> f.global_height()                                                     # needs sage.rings.real_mpfr
1.60943791243410

sage: # needs sage.rings.number_field
sage: u = QQ['u'].0
sage: R = NumberField(u^2 - 2, 'v')
sage: PP.<x,y,a,b> = ProductProjectiveSpaces([1, 1], R)
sage: H = End(PP)
sage: O = R.maximal_order()
sage: g = H([3*O(u)*x^2, 13*x*y, 7*a*y, 5*b*x + O(u)*a*y])
sage: g.global_height()                                                     # needs sage.rings.real_mpfr
2.56494935746154
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> u = QQ['u'].gen(0)
>>> R = NumberField(u**Integer(2) - Integer(2), 'v')
>>> PP = ProductProjectiveSpaces([Integer(1), Integer(1)], R, names=('x', 'y', 'a', 'b',)); (x, y, a, b,) = PP._first_ngens(4)
>>> H = End(PP)
>>> O = R.maximal_order()
>>> g = H([Integer(3)*O(u)*x**Integer(2), Integer(13)*x*y, Integer(7)*a*y, Integer(5)*b*x + O(u)*a*y])
>>> g.global_height()                                                     # needs sage.rings.real_mpfr
2.56494935746154
is_morphism()[source]

Return True if this mapping is a morphism of products of projective spaces.

For each component space of the codomain of this mapping we consider the subscheme of the domain of this map generated by the corresponding coordinates of the map. This map is a morphism if and only if each of these subschemes has no points.

OUTPUT: boolean

EXAMPLES:

sage: Z.<a,b,x,y,z> = ProductProjectiveSpaces([1, 2], ZZ)
sage: H = End(Z)
sage: f = H([a^2, b^2, x*z - y*z, x^2 - y^2, z^2])
sage: f.is_morphism()                                                       # needs sage.libs.singular
False
>>> from sage.all import *
>>> Z = ProductProjectiveSpaces([Integer(1), Integer(2)], ZZ, names=('a', 'b', 'x', 'y', 'z',)); (a, b, x, y, z,) = Z._first_ngens(5)
>>> H = End(Z)
>>> f = H([a**Integer(2), b**Integer(2), x*z - y*z, x**Integer(2) - y**Integer(2), z**Integer(2)])
>>> f.is_morphism()                                                       # needs sage.libs.singular
False

sage: P.<x,y,z,u,v,w> = ProductProjectiveSpaces([2, 2], QQ)
sage: H = End(P)
sage: f = H([u, v, w, u^2, v^2, w^2])
sage: f.is_morphism()                                                       # needs sage.libs.singular
True
>>> from sage.all import *
>>> P = ProductProjectiveSpaces([Integer(2), Integer(2)], QQ, names=('x', 'y', 'z', 'u', 'v', 'w',)); (x, y, z, u, v, w,) = P._first_ngens(6)
>>> H = End(P)
>>> f = H([u, v, w, u**Integer(2), v**Integer(2), w**Integer(2)])
>>> f.is_morphism()                                                       # needs sage.libs.singular
True

sage: P.<x,y,z,w,u> = ProductProjectiveSpaces([2, 1], QQ)
sage: Q.<a,b,c,d,e> = ProductProjectiveSpaces([1, 2], QQ)
sage: H = Hom(P, Q)
sage: f = H([x^2, y^2, u^3, w^3, u^3])
sage: f.is_morphism()                                                       # needs sage.libs.singular
False
>>> from sage.all import *
>>> P = ProductProjectiveSpaces([Integer(2), Integer(1)], QQ, names=('x', 'y', 'z', 'w', 'u',)); (x, y, z, w, u,) = P._first_ngens(5)
>>> Q = ProductProjectiveSpaces([Integer(1), Integer(2)], QQ, names=('a', 'b', 'c', 'd', 'e',)); (a, b, c, d, e,) = Q._first_ngens(5)
>>> H = Hom(P, Q)
>>> f = H([x**Integer(2), y**Integer(2), u**Integer(3), w**Integer(3), u**Integer(3)])
>>> f.is_morphism()                                                       # needs sage.libs.singular
False
local_height(v, prec=None)[source]

Return the maximum of the local height of the coefficients in any of the coordinate functions of this map.

INPUT:

  • v – a prime or prime ideal of the base ring

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

OUTPUT: a real number

EXAMPLES:

sage: T.<x,y,z,w,u> = ProductProjectiveSpaces([2, 1], QQ)
sage: H = T.Hom(T)
sage: f = H([4*x^2 + 3/100*y^2, 8/210*x*y, 1/10000*z^2, 20*w^2, 1/384*u*w])
sage: f.local_height(2)                                                     # needs sage.rings.real_mpfr
4.85203026391962
>>> from sage.all import *
>>> T = ProductProjectiveSpaces([Integer(2), Integer(1)], QQ, names=('x', 'y', 'z', 'w', 'u',)); (x, y, z, w, u,) = T._first_ngens(5)
>>> H = T.Hom(T)
>>> f = H([Integer(4)*x**Integer(2) + Integer(3)/Integer(100)*y**Integer(2), Integer(8)/Integer(210)*x*y, Integer(1)/Integer(10000)*z**Integer(2), Integer(20)*w**Integer(2), Integer(1)/Integer(384)*u*w])
>>> f.local_height(Integer(2))                                                     # needs sage.rings.real_mpfr
4.85203026391962

sage: # needs sage.rings.number_field
sage: R.<z> = PolynomialRing(QQ)
sage: K.<w> = NumberField(z^2 - 5)
sage: P.<x,y,a,b> = ProductProjectiveSpaces([1, 1], K)
sage: H = Hom(P, P)
sage: f = H([2*x^2 + w/3*y^2, 1/w*y^2, a^2, 6*b^2 + 1/9*a*b])
sage: f.local_height(K.ideal(3))                                            # needs sage.rings.real_mpfr
2.19722457733622
>>> from sage.all import *
>>> # needs sage.rings.number_field
>>> R = PolynomialRing(QQ, names=('z',)); (z,) = R._first_ngens(1)
>>> K = NumberField(z**Integer(2) - Integer(5), names=('w',)); (w,) = K._first_ngens(1)
>>> P = ProductProjectiveSpaces([Integer(1), Integer(1)], K, names=('x', 'y', 'a', 'b',)); (x, y, a, b,) = P._first_ngens(4)
>>> H = Hom(P, P)
>>> f = H([Integer(2)*x**Integer(2) + w/Integer(3)*y**Integer(2), Integer(1)/w*y**Integer(2), a**Integer(2), Integer(6)*b**Integer(2) + Integer(1)/Integer(9)*a*b])
>>> f.local_height(K.ideal(Integer(3)))                                            # needs sage.rings.real_mpfr
2.19722457733622