Set of homomorphisms between two projective schemes¶
For schemes \(X\) and \(Y\), this module implements the set of morphisms
\(Hom(X,Y)\). This is done by SchemeHomset_generic
.
As a special case, the Hom-sets can also represent the points of a
scheme. Recall that the \(K\)-rational points of a scheme \(X\) over \(k\)
can be identified with the set of morphisms \(Spec(K) \to X\). In Sage
the rational points are implemented by such scheme morphisms. This is
done by SchemeHomset_points
and its subclasses.
Note
You should not create the Hom-sets manually. Instead, use the
Hom()
method that is inherited by all
schemes.
AUTHORS:
William Stein (2006): initial version.
Volker Braun (2011-08-11): significant improvement and refactoring.
Ben Hutz (June 2012): added support for projective ring
Ben Hutz (2018): add numerical point support
- class sage.schemes.projective.projective_homset.SchemeHomset_points_abelian_variety_field(X, Y, category=None, check=True, base=Integer Ring)[source]¶
Bases:
SchemeHomset_points_projective_field
Set of rational points of an Abelian variety.
INPUT:
See
SchemeHomset_generic
.- base_extend(R)[source]¶
Extend the base ring.
This is currently not implemented except for the trivial case
R==ZZ
.INPUT:
R
– a ring
EXAMPLES:
sage: # needs sage.schemes sage: E = EllipticCurve('37a') sage: Hom = E.point_homset(); Hom Abelian group of points on Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field sage: Hom.base_ring() Rational Field sage: Hom.base_extend(QQ) Traceback (most recent call last): ... NotImplementedError: Abelian variety point sets are not implemented as modules over rings other than ZZ
>>> from sage.all import * >>> # needs sage.schemes >>> E = EllipticCurve('37a') >>> Hom = E.point_homset(); Hom Abelian group of points on Elliptic Curve defined by y^2 + y = x^3 - x over Rational Field >>> Hom.base_ring() Rational Field >>> Hom.base_extend(QQ) Traceback (most recent call last): ... NotImplementedError: Abelian variety point sets are not implemented as modules over rings other than ZZ
- class sage.schemes.projective.projective_homset.SchemeHomset_points_projective_field(X, Y, category=None, check=True, base=Integer Ring)[source]¶
Bases:
SchemeHomset_points
Set of rational points of a projective variety over a field.
INPUT:
See
SchemeHomset_generic
.EXAMPLES:
sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_field sage: SchemeHomset_points_projective_field(Spec(QQ), ProjectiveSpace(QQ,2)) Set of rational points of Projective Space of dimension 2 over Rational Field
>>> from sage.all import * >>> from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_field >>> SchemeHomset_points_projective_field(Spec(QQ), ProjectiveSpace(QQ,Integer(2))) Set of rational points of Projective Space of dimension 2 over Rational Field
- numerical_points(F=None, **kwds)[source]¶
Return some or all numerical approximations of rational points of a projective scheme.
This is for dimension 0 subschemes only and the points are determined through a groebner calculation over the base ring and then numerically approximating the roots of the resulting polynomials. If the base ring is a number field, the embedding into
F
must be known.INPUT:
F
– numerical ring
kwds:
point_tolerance
– positive real number (default: \(10^{-10}\)). For numerically inexact fields, two points are considered the same if their coordinates are within tolerance.zero_tolerance
– positive real number (default: \(10^{-10}\)). For numerically inexact fields, points are on the subscheme if they satisfy the equations to within tolerance.
OUTPUT: list of points in the ambient space
Warning
For numerically inexact fields the list of points returned may contain repeated or be missing points due to tolerance.
EXAMPLES:
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2) sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z]) sage: L = E(QQ).numerical_points(F=RR); L # needs sage.libs.singular [(0.000000000000000 : 0.000000000000000 : 1.00000000000000), (1.00000000000000 : 1.00000000000000 : 0.000000000000000)] sage: L[0].codomain() # needs sage.libs.singular Projective Space of dimension 2 over Real Field with 53 bits of precision
>>> from sage.all import * >>> P = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3) >>> E = P.subscheme([y**Integer(3) - x**Integer(3) - x*z**Integer(2), x*y*z]) >>> L = E(QQ).numerical_points(F=RR); L # needs sage.libs.singular [(0.000000000000000 : 0.000000000000000 : 1.00000000000000), (1.00000000000000 : 1.00000000000000 : 0.000000000000000)] >>> L[Integer(0)].codomain() # needs sage.libs.singular Projective Space of dimension 2 over Real Field with 53 bits of precision
sage: S.<a> = QQ[] sage: K.<v> = NumberField(a^5 - 7, embedding=CC(7)**(1/5)) # needs sage.rings.number_field sage: P.<x,y,z> = ProjectiveSpace(K, 2) # needs sage.rings.number_field sage: X = P.subscheme([x^2 - v^2*z^2, y - v*z]) # needs sage.rings.number_field sage: len(X(K).numerical_points(F=CDF)) # needs sage.libs.singular sage.rings.number_field 2
>>> from sage.all import * >>> S = QQ['a']; (a,) = S._first_ngens(1) >>> K = NumberField(a**Integer(5) - Integer(7), embedding=CC(Integer(7))**(Integer(1)/Integer(5)), names=('v',)); (v,) = K._first_ngens(1)# needs sage.rings.number_field >>> P = ProjectiveSpace(K, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)# needs sage.rings.number_field >>> X = P.subscheme([x**Integer(2) - v**Integer(2)*z**Integer(2), y - v*z]) # needs sage.rings.number_field >>> len(X(K).numerical_points(F=CDF)) # needs sage.libs.singular sage.rings.number_field 2
sage: P.<x1, x2, x3> = ProjectiveSpace(QQ, 2) sage: E = P.subscheme([3000*x1^50 + 9875643*x2^2*x3^48 + 12334545*x2^50, x1 + x2]) sage: len(E(P.base_ring()).numerical_points(F=CDF, zero_tolerance=1e-6)) # needs sage.libs.singular 49
>>> from sage.all import * >>> P = ProjectiveSpace(QQ, Integer(2), names=('x1', 'x2', 'x3',)); (x1, x2, x3,) = P._first_ngens(3) >>> E = P.subscheme([Integer(3000)*x1**Integer(50) + Integer(9875643)*x2**Integer(2)*x3**Integer(48) + Integer(12334545)*x2**Integer(50), x1 + x2]) >>> len(E(P.base_ring()).numerical_points(F=CDF, zero_tolerance=RealNumber('1e-6'))) # needs sage.libs.singular 49
- points(**kwds)[source]¶
Return some or all rational points of a projective scheme.
For dimension 0 subschemes points are determined through a groebner basis calculation. For schemes or subschemes with dimension greater than 1 points are determined through enumeration up to the specified bound.
INPUT: keyword arguments:
bound
– real number (default: 0); the bound for the coordinates for subschemes with dimension at least 1precision
– integer (default: 53); the precision to use to compute the elements of bounded height for number fieldspoint_tolerance
– positive real number (default: \(10^{-10}\)); for numerically inexact fields, two points are considered the same if their coordinates are within tolerancezero_tolerance
– positive real number (default: \(10^{-10}\)); for numerically inexact fields, points are on the subscheme if they satisfy the equations to within tolerancetolerance
– a rational number in (0,1] used in Doyle-Krumm algorithm-4 for enumeration over number fields
OUTPUT: list of rational points of a projective scheme
Warning
For numerically inexact fields such as ComplexField or RealField the list of points returned is very likely to be incomplete. It may also contain repeated points due to tolerances.
EXAMPLES:
sage: P.<x,y> = ProjectiveSpace(QQ, 1) sage: P(QQ).points(bound=4) [(-4 : 1), (-3 : 1), (-2 : 1), (-3/2 : 1), (-4/3 : 1), (-1 : 1), (-3/4 : 1), (-2/3 : 1), (-1/2 : 1), (-1/3 : 1), (-1/4 : 1), (0 : 1), (1/4 : 1), (1/3 : 1), (1/2 : 1), (2/3 : 1), (3/4 : 1), (1 : 0), (1 : 1), (4/3 : 1), (3/2 : 1), (2 : 1), (3 : 1), (4 : 1)]
>>> from sage.all import * >>> P = ProjectiveSpace(QQ, Integer(1), names=('x', 'y',)); (x, y,) = P._first_ngens(2) >>> P(QQ).points(bound=Integer(4)) [(-4 : 1), (-3 : 1), (-2 : 1), (-3/2 : 1), (-4/3 : 1), (-1 : 1), (-3/4 : 1), (-2/3 : 1), (-1/2 : 1), (-1/3 : 1), (-1/4 : 1), (0 : 1), (1/4 : 1), (1/3 : 1), (1/2 : 1), (2/3 : 1), (3/4 : 1), (1 : 0), (1 : 1), (4/3 : 1), (3/2 : 1), (2 : 1), (3 : 1), (4 : 1)]
sage: u = QQ['u'].0 sage: K.<v> = NumberField(u^2 + 3) # needs sage.rings.number_field sage: P.<x,y,z> = ProjectiveSpace(K, 2) # needs sage.rings.number_field sage: len(P(K).points(bound=1.8)) # needs sage.rings.number_field 309
>>> from sage.all import * >>> u = QQ['u'].gen(0) >>> K = NumberField(u**Integer(2) + Integer(3), names=('v',)); (v,) = K._first_ngens(1)# needs sage.rings.number_field >>> P = ProjectiveSpace(K, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3)# needs sage.rings.number_field >>> len(P(K).points(bound=RealNumber('1.8'))) # needs sage.rings.number_field 309
sage: P1 = ProjectiveSpace(GF(2), 1) sage: F.<a> = GF(4, 'a') # needs sage.rings.finite_rings sage: P1(F).points() # needs sage.libs.singular sage.rings.finite_rings [(0 : 1), (1 : 0), (1 : 1), (a : 1), (a + 1 : 1)]
>>> from sage.all import * >>> P1 = ProjectiveSpace(GF(Integer(2)), Integer(1)) >>> F = GF(Integer(4), 'a', names=('a',)); (a,) = F._first_ngens(1)# needs sage.rings.finite_rings >>> P1(F).points() # needs sage.libs.singular sage.rings.finite_rings [(0 : 1), (1 : 0), (1 : 1), (a : 1), (a + 1 : 1)]
sage: P.<x,y,z> = ProjectiveSpace(QQ, 2) sage: E = P.subscheme([(y^3-y*z^2) - (x^3-x*z^2), (y^3-y*z^2) + (x^3-x*z^2)]) sage: E(P.base_ring()).points() # needs sage.libs.singular [(-1 : -1 : 1), (-1 : 0 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 0 : 1), (0 : 1 : 1), (1 : -1 : 1), (1 : 0 : 1), (1 : 1 : 1)]
>>> from sage.all import * >>> P = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3) >>> E = P.subscheme([(y**Integer(3)-y*z**Integer(2)) - (x**Integer(3)-x*z**Integer(2)), (y**Integer(3)-y*z**Integer(2)) + (x**Integer(3)-x*z**Integer(2))]) >>> E(P.base_ring()).points() # needs sage.libs.singular [(-1 : -1 : 1), (-1 : 0 : 1), (-1 : 1 : 1), (0 : -1 : 1), (0 : 0 : 1), (0 : 1 : 1), (1 : -1 : 1), (1 : 0 : 1), (1 : 1 : 1)]
sage: # needs sage.rings.real_mpfr sage: P.<x,y,z> = ProjectiveSpace(CC, 2) sage: E = P.subscheme([y^3 - x^3 - x*z^2, x*y*z]) sage: L = E(P.base_ring()).points(); sorted(L, key=str) # needs sage.libs.singular verbose 0 (...: projective_homset.py, points) Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly. [(-0.500000000000000 + 0.866025403784439*I : 1.00000000000000 : 0.000000000000000), (-0.500000000000000 - 0.866025403784439*I : 1.00000000000000 : 0.000000000000000), (-1.00000000000000*I : 0.000000000000000 : 1.00000000000000), (0.000000000000000 : 0.000000000000000 : 1.00000000000000), (1.00000000000000 : 1.00000000000000 : 0.000000000000000), (1.00000000000000*I : 0.000000000000000 : 1.00000000000000)] sage: L[0].codomain() # needs sage.libs.singular Projective Space of dimension 2 over Complex Field with 53 bits of precision
>>> from sage.all import * >>> # needs sage.rings.real_mpfr >>> P = ProjectiveSpace(CC, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3) >>> E = P.subscheme([y**Integer(3) - x**Integer(3) - x*z**Integer(2), x*y*z]) >>> L = E(P.base_ring()).points(); sorted(L, key=str) # needs sage.libs.singular verbose 0 (...: projective_homset.py, points) Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly. [(-0.500000000000000 + 0.866025403784439*I : 1.00000000000000 : 0.000000000000000), (-0.500000000000000 - 0.866025403784439*I : 1.00000000000000 : 0.000000000000000), (-1.00000000000000*I : 0.000000000000000 : 1.00000000000000), (0.000000000000000 : 0.000000000000000 : 1.00000000000000), (1.00000000000000 : 1.00000000000000 : 0.000000000000000), (1.00000000000000*I : 0.000000000000000 : 1.00000000000000)] >>> L[Integer(0)].codomain() # needs sage.libs.singular Projective Space of dimension 2 over Complex Field with 53 bits of precision
sage: # needs sage.rings.complex_double sage: P.<x,y,z> = ProjectiveSpace(CDF, 2) sage: E = P.subscheme([y^2 + x^2 + z^2, x*y*z]) sage: len(E(P.base_ring()).points()) # needs sage.libs.singular verbose 0 (...: projective_homset.py, points) Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly. 6
>>> from sage.all import * >>> # needs sage.rings.complex_double >>> P = ProjectiveSpace(CDF, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3) >>> E = P.subscheme([y**Integer(2) + x**Integer(2) + z**Integer(2), x*y*z]) >>> len(E(P.base_ring()).points()) # needs sage.libs.singular verbose 0 (...: projective_homset.py, points) Warning: computations in the numerical fields are inexact;points may be computed partially or incorrectly. 6
- class sage.schemes.projective.projective_homset.SchemeHomset_points_projective_ring(X, Y, category=None, check=True, base=Integer Ring)[source]¶
Bases:
SchemeHomset_points
Set of rational points of a projective variety over a commutative ring.
INPUT:
See
SchemeHomset_generic
.EXAMPLES:
sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring sage: SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ,2)) Set of rational points of Projective Space of dimension 2 over Integer Ring
>>> from sage.all import * >>> from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring >>> SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ,Integer(2))) Set of rational points of Projective Space of dimension 2 over Integer Ring
- points(B=0)[source]¶
Return some or all rational points of a projective scheme.
INPUT:
B
– integer (default: 0); the bound for the coordinates
EXAMPLES:
sage: from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring sage: H = SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ, 2)) sage: H.points(3) [(0 : 0 : 1), (0 : 1 : -3), (0 : 1 : -2), (0 : 1 : -1), (0 : 1 : 0), (0 : 1 : 1), (0 : 1 : 2), (0 : 1 : 3), (0 : 2 : -3), (0 : 2 : -1), (0 : 2 : 1), (0 : 2 : 3), (0 : 3 : -2), (0 : 3 : -1), (0 : 3 : 1), (0 : 3 : 2), (1 : -3 : -3), (1 : -3 : -2), (1 : -3 : -1), (1 : -3 : 0), (1 : -3 : 1), (1 : -3 : 2), (1 : -3 : 3), (1 : -2 : -3), (1 : -2 : -2), (1 : -2 : -1), (1 : -2 : 0), (1 : -2 : 1), (1 : -2 : 2), (1 : -2 : 3), (1 : -1 : -3), (1 : -1 : -2), (1 : -1 : -1), (1 : -1 : 0), (1 : -1 : 1), (1 : -1 : 2), (1 : -1 : 3), (1 : 0 : -3), (1 : 0 : -2), (1 : 0 : -1), (1 : 0 : 0), (1 : 0 : 1), (1 : 0 : 2), (1 : 0 : 3), (1 : 1 : -3), (1 : 1 : -2), (1 : 1 : -1), (1 : 1 : 0), (1 : 1 : 1), (1 : 1 : 2), (1 : 1 : 3), (1 : 2 : -3), (1 : 2 : -2), (1 : 2 : -1), (1 : 2 : 0), (1 : 2 : 1), (1 : 2 : 2), (1 : 2 : 3), (1 : 3 : -3), (1 : 3 : -2), (1 : 3 : -1), (1 : 3 : 0), (1 : 3 : 1), (1 : 3 : 2), (1 : 3 : 3), (2 : -3 : -3), (2 : -3 : -2), (2 : -3 : -1), (2 : -3 : 0), (2 : -3 : 1), (2 : -3 : 2), (2 : -3 : 3), (2 : -2 : -3), (2 : -2 : -1), (2 : -2 : 1), (2 : -2 : 3), (2 : -1 : -3), (2 : -1 : -2), (2 : -1 : -1), (2 : -1 : 0), (2 : -1 : 1), (2 : -1 : 2), (2 : -1 : 3), (2 : 0 : -3), (2 : 0 : -1), (2 : 0 : 1), (2 : 0 : 3), (2 : 1 : -3), (2 : 1 : -2), (2 : 1 : -1), (2 : 1 : 0), (2 : 1 : 1), (2 : 1 : 2), (2 : 1 : 3), (2 : 2 : -3), (2 : 2 : -1), (2 : 2 : 1), (2 : 2 : 3), (2 : 3 : -3), (2 : 3 : -2), (2 : 3 : -1), (2 : 3 : 0), (2 : 3 : 1), (2 : 3 : 2), (2 : 3 : 3), (3 : -3 : -2), (3 : -3 : -1), (3 : -3 : 1), (3 : -3 : 2), (3 : -2 : -3), (3 : -2 : -2), (3 : -2 : -1), (3 : -2 : 0), (3 : -2 : 1), (3 : -2 : 2), (3 : -2 : 3), (3 : -1 : -3), (3 : -1 : -2), (3 : -1 : -1), (3 : -1 : 0), (3 : -1 : 1), (3 : -1 : 2), (3 : -1 : 3), (3 : 0 : -2), (3 : 0 : -1), (3 : 0 : 1), (3 : 0 : 2), (3 : 1 : -3), (3 : 1 : -2), (3 : 1 : -1), (3 : 1 : 0), (3 : 1 : 1), (3 : 1 : 2), (3 : 1 : 3), (3 : 2 : -3), (3 : 2 : -2), (3 : 2 : -1), (3 : 2 : 0), (3 : 2 : 1), (3 : 2 : 2), (3 : 2 : 3), (3 : 3 : -2), (3 : 3 : -1), (3 : 3 : 1), (3 : 3 : 2)]
>>> from sage.all import * >>> from sage.schemes.projective.projective_homset import SchemeHomset_points_projective_ring >>> H = SchemeHomset_points_projective_ring(Spec(ZZ), ProjectiveSpace(ZZ, Integer(2))) >>> H.points(Integer(3)) [(0 : 0 : 1), (0 : 1 : -3), (0 : 1 : -2), (0 : 1 : -1), (0 : 1 : 0), (0 : 1 : 1), (0 : 1 : 2), (0 : 1 : 3), (0 : 2 : -3), (0 : 2 : -1), (0 : 2 : 1), (0 : 2 : 3), (0 : 3 : -2), (0 : 3 : -1), (0 : 3 : 1), (0 : 3 : 2), (1 : -3 : -3), (1 : -3 : -2), (1 : -3 : -1), (1 : -3 : 0), (1 : -3 : 1), (1 : -3 : 2), (1 : -3 : 3), (1 : -2 : -3), (1 : -2 : -2), (1 : -2 : -1), (1 : -2 : 0), (1 : -2 : 1), (1 : -2 : 2), (1 : -2 : 3), (1 : -1 : -3), (1 : -1 : -2), (1 : -1 : -1), (1 : -1 : 0), (1 : -1 : 1), (1 : -1 : 2), (1 : -1 : 3), (1 : 0 : -3), (1 : 0 : -2), (1 : 0 : -1), (1 : 0 : 0), (1 : 0 : 1), (1 : 0 : 2), (1 : 0 : 3), (1 : 1 : -3), (1 : 1 : -2), (1 : 1 : -1), (1 : 1 : 0), (1 : 1 : 1), (1 : 1 : 2), (1 : 1 : 3), (1 : 2 : -3), (1 : 2 : -2), (1 : 2 : -1), (1 : 2 : 0), (1 : 2 : 1), (1 : 2 : 2), (1 : 2 : 3), (1 : 3 : -3), (1 : 3 : -2), (1 : 3 : -1), (1 : 3 : 0), (1 : 3 : 1), (1 : 3 : 2), (1 : 3 : 3), (2 : -3 : -3), (2 : -3 : -2), (2 : -3 : -1), (2 : -3 : 0), (2 : -3 : 1), (2 : -3 : 2), (2 : -3 : 3), (2 : -2 : -3), (2 : -2 : -1), (2 : -2 : 1), (2 : -2 : 3), (2 : -1 : -3), (2 : -1 : -2), (2 : -1 : -1), (2 : -1 : 0), (2 : -1 : 1), (2 : -1 : 2), (2 : -1 : 3), (2 : 0 : -3), (2 : 0 : -1), (2 : 0 : 1), (2 : 0 : 3), (2 : 1 : -3), (2 : 1 : -2), (2 : 1 : -1), (2 : 1 : 0), (2 : 1 : 1), (2 : 1 : 2), (2 : 1 : 3), (2 : 2 : -3), (2 : 2 : -1), (2 : 2 : 1), (2 : 2 : 3), (2 : 3 : -3), (2 : 3 : -2), (2 : 3 : -1), (2 : 3 : 0), (2 : 3 : 1), (2 : 3 : 2), (2 : 3 : 3), (3 : -3 : -2), (3 : -3 : -1), (3 : -3 : 1), (3 : -3 : 2), (3 : -2 : -3), (3 : -2 : -2), (3 : -2 : -1), (3 : -2 : 0), (3 : -2 : 1), (3 : -2 : 2), (3 : -2 : 3), (3 : -1 : -3), (3 : -1 : -2), (3 : -1 : -1), (3 : -1 : 0), (3 : -1 : 1), (3 : -1 : 2), (3 : -1 : 3), (3 : 0 : -2), (3 : 0 : -1), (3 : 0 : 1), (3 : 0 : 2), (3 : 1 : -3), (3 : 1 : -2), (3 : 1 : -1), (3 : 1 : 0), (3 : 1 : 1), (3 : 1 : 2), (3 : 1 : 3), (3 : 2 : -3), (3 : 2 : -2), (3 : 2 : -1), (3 : 2 : 0), (3 : 2 : 1), (3 : 2 : 2), (3 : 2 : 3), (3 : 3 : -2), (3 : 3 : -1), (3 : 3 : 1), (3 : 3 : 2)]
- class sage.schemes.projective.projective_homset.SchemeHomset_polynomial_projective_space(X, Y, category=None, check=True, base=None)[source]¶
Bases:
SchemeHomset_generic
Set of morphisms of a projective space.
EXAMPLES:
sage: P.<x,y,z> = ProjectiveSpace(2, QQ) sage: Hom(P, P) Set of morphisms From: Projective Space of dimension 2 over Rational Field To: Projective Space of dimension 2 over Rational Field
>>> from sage.all import * >>> P = ProjectiveSpace(Integer(2), QQ, names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3) >>> Hom(P, P) Set of morphisms From: Projective Space of dimension 2 over Rational Field To: Projective Space of dimension 2 over Rational Field
- identity()[source]¶
Return the identity morphism of this hom-set.
EXAMPLES:
sage: P.<x,y,z> = ProjectiveSpace(2, QQ) sage: Hom(P, P) Set of morphisms From: Projective Space of dimension 2 over Rational Field To: Projective Space of dimension 2 over Rational Field sage: _.identity() Scheme endomorphism of Projective Space of dimension 2 over Rational Field Defn: Identity map
>>> from sage.all import * >>> P = ProjectiveSpace(Integer(2), QQ, names=('x', 'y', 'z',)); (x, y, z,) = P._first_ngens(3) >>> Hom(P, P) Set of morphisms From: Projective Space of dimension 2 over Rational Field To: Projective Space of dimension 2 over Rational Field >>> _.identity() Scheme endomorphism of Projective Space of dimension 2 over Rational Field Defn: Identity map