Enumeration of rational points on product projective schemes¶
Naive algorithms for enumerating rational points over \(\QQ\), number fields or finite fields over general schemes.
Warning
Incorrect results and infinite loops may occur if using a wrong function. (For instance using an affine function for a product projective scheme or a finite field function for a scheme defined over an infinite field.)
EXAMPLES:
Product Projective, over \(\QQ\):
sage: PP.<x,y,z> = ProductProjectiveSpaces([1,0], QQ)
sage: from sage.schemes.product_projective.rational_point import \
enum_product_projective_rational_field
sage: enum_product_projective_rational_field(PP,3)
[(-3 : 1 , 1), (-2 : 1 , 1), (-3/2 : 1 , 1),
(-1 : 1 , 1), (-2/3 : 1 , 1), (-1/2 : 1 , 1),
(-1/3 : 1 , 1), (0 : 1 , 1), (1/3 : 1 , 1),
(1/2 : 1 , 1), (2/3 : 1 , 1), (1 : 0 , 1),
(1 : 1 , 1), (3/2 : 1 , 1), (2 : 1 , 1),
(3 : 1 , 1)]
Product projective over finite field:
sage: P1.<x,y,a,b> = ProductProjectiveSpaces([1,1], GF(7))
sage: X = P1.subscheme([2*x+3*y])
sage: from sage.schemes.product_projective.rational_point import \
enum_product_projective_finite_field
sage: enum_product_projective_finite_field(X)
[(2 : 1 , 0 : 1), (2 : 1 , 1 : 0), (2 : 1 , 1 : 1),
(2 : 1 , 2 : 1), (2 : 1 , 3 : 1), (2 : 1 , 4 : 1),
(2 : 1 , 5 : 1), (2 : 1 , 6 : 1)]
AUTHORS:
- Volker Braun and Ben Hutz (2014): initial version
- Raghukul Raman (2018): code cleanup and added support for rational fields
-
sage.schemes.product_projective.rational_point.
enum_product_projective_finite_field
(X)¶ Enumerates projective points on scheme
X
defined over a finite field.INPUT:
X
- a scheme defined over a finite field or a set of abstract rational points of such a scheme.
OUTPUT:
- a list containing the projective points of
X
over the finite field, sorted.
EXAMPLES:
sage: PP.<x,y,z,w> = ProductProjectiveSpaces([1, 1], GF(3)) sage: from sage.schemes.product_projective.rational_point import \ enum_product_projective_finite_field sage: enum_product_projective_finite_field(PP) [(0 : 1 , 0 : 1), (0 : 1 , 1 : 0), (0 : 1 , 1 : 1), (0 : 1 , 2 : 1), (1 : 0 , 0 : 1), (1 : 0 , 1 : 0), (1 : 0 , 1 : 1), (1 : 0 , 2 : 1), (1 : 1 , 0 : 1), (1 : 1 , 1 : 0), (1 : 1 , 1 : 1), (1 : 1 , 2 : 1), (2 : 1 , 0 : 1), (2 : 1 , 1 : 0), (2 : 1 , 1 : 1), (2 : 1 , 2 : 1)]
sage: PP.<x0,x1,x2,x3> = ProductProjectiveSpaces([1, 1], GF(17)) sage: X = PP.subscheme([x0^2 + 2*x1^2]) sage: from sage.schemes.product_projective.rational_point import \ enum_product_projective_finite_field sage: len(enum_product_projective_finite_field(X)) 36
-
sage.schemes.product_projective.rational_point.
enum_product_projective_number_field
(X, **kwds)¶ Enumerates product projective points on scheme
X
defined over a number field.Simply checks all of the points of absolute height of at most
B
and adds those that are on the scheme to the list.This algorithm computes 2 lists: L containing elements x in \(K\) such that H_k(x) <= B, and a list L’ containing elements x in \(K\) that, due to floating point issues, may be slightly larger then the bound. This can be controlled by lowering the tolerance.
ALGORITHM:
This is an implementation of the revised algorithm (Algorithm 4) in [DK2013]. Algorithm 5 is used for imaginary quadratic fields.
INPUT:
kwds:
bound
- a real numbertolerance
- a rational number in (0,1] used in doyle-krumm algorithm-4precision
- the precision to use for computing the elements of bounded height of number fields.
OUTPUT:
- a list containing the product projective points of
X
of absolute height up toB
, sorted.
EXAMPLES:
sage: u = QQ['u'].0 sage: K = NumberField(u^2 + 2, 'v') sage: PP.<x,y,z,w> = ProductProjectiveSpaces([1, 1], K) sage: X = PP.subscheme([x^2 + 2*y^2]) sage: from sage.schemes.product_projective.rational_point import \ enum_product_projective_number_field sage: enum_product_projective_number_field(X, bound=1.5) [(-v : 1 , -1 : 1), (-v : 1 , -v : 1), (-v : 1 , -1/2*v : 1), (-v : 1 , 0 : 1), (-v : 1 , 1/2*v : 1), (-v : 1 , v : 1), (-v : 1 , 1 : 0), (-v : 1 , 1 : 1), (v : 1 , -1 : 1), (v : 1 , -v : 1), (v : 1 , -1/2*v : 1), (v : 1 , 0 : 1), (v : 1 , 1/2*v : 1), (v : 1 , v : 1), (v : 1 , 1 : 0), (v : 1 , 1 : 1)]
-
sage.schemes.product_projective.rational_point.
enum_product_projective_rational_field
(X, B)¶ Enumerate projective, rational points on scheme
X
of height up to boundB
.INPUT:
X
– a scheme or set of abstract rational points of a schemeB
– a positive integer bound
OUTPUT:
- a list containing the product projective points of
X
of height up toB
, sorted.
EXAMPLES:
sage: PP.<x0,x1,x2,x3,x4> = ProductProjectiveSpaces([1, 2], QQ) sage: from sage.schemes.product_projective.rational_point import \ enum_product_projective_rational_field sage: enum_product_projective_rational_field(PP,1) [(-1 : 1 , -1 : -1 : 1), (-1 : 1 , -1 : 0 : 1), (-1 : 1 , -1 : 1 : 0), (-1 : 1 , -1 : 1 : 1), (-1 : 1 , 0 : -1 : 1), (-1 : 1 , 0 : 0 : 1), (-1 : 1 , 0 : 1 : 0), (-1 : 1 , 0 : 1 : 1), (-1 : 1 , 1 : -1 : 1), (-1 : 1 , 1 : 0 : 0), (-1 : 1 , 1 : 0 : 1), (-1 : 1 , 1 : 1 : 0), (-1 : 1 , 1 : 1 : 1), (0 : 1 , -1 : -1 : 1), (0 : 1 , -1 : 0 : 1), (0 : 1 , -1 : 1 : 0), (0 : 1 , -1 : 1 : 1), (0 : 1 , 0 : -1 : 1), (0 : 1 , 0 : 0 : 1), (0 : 1 , 0 : 1 : 0), (0 : 1 , 0 : 1 : 1), (0 : 1 , 1 : -1 : 1), (0 : 1 , 1 : 0 : 0), (0 : 1 , 1 : 0 : 1), (0 : 1 , 1 : 1 : 0), (0 : 1 , 1 : 1 : 1), (1 : 0 , -1 : -1 : 1), (1 : 0 , -1 : 0 : 1), (1 : 0 , -1 : 1 : 0), (1 : 0 , -1 : 1 : 1), (1 : 0 , 0 : -1 : 1), (1 : 0 , 0 : 0 : 1), (1 : 0 , 0 : 1 : 0), (1 : 0 , 0 : 1 : 1), (1 : 0 , 1 : -1 : 1), (1 : 0 , 1 : 0 : 0), (1 : 0 , 1 : 0 : 1), (1 : 0 , 1 : 1 : 0), (1 : 0 , 1 : 1 : 1), (1 : 1 , -1 : -1 : 1), (1 : 1 , -1 : 0 : 1), (1 : 1 , -1 : 1 : 0), (1 : 1 , -1 : 1 : 1), (1 : 1 , 0 : -1 : 1), (1 : 1 , 0 : 0 : 1), (1 : 1 , 0 : 1 : 0), (1 : 1 , 0 : 1 : 1), (1 : 1 , 1 : -1 : 1), (1 : 1 , 1 : 0 : 0), (1 : 1 , 1 : 0 : 1), (1 : 1 , 1 : 1 : 0), (1 : 1 , 1 : 1 : 1)]
sage: PP.<x,y,z,u,v> = ProductProjectiveSpaces([2,1], QQ) sage: X = PP.subscheme([x^2 + x*y + y*z, u*u-v*u]) sage: from sage.schemes.product_projective.rational_point import \ enum_product_projective_rational_field sage: enum_product_projective_rational_field(X,4) [(-2 : 4 : 1 , 0 : 1), (-2 : 4 : 1 , 1 : 1), (-1 : 1 : 0 , 0 : 1), (-1 : 1 : 0 , 1 : 1), (-2/3 : -4/3 : 1 , 0 : 1), (-2/3 : -4/3 : 1 , 1 : 1), (-1/2 : -1/2 : 1 , 0 : 1), (-1/2 : -1/2 : 1 , 1 : 1), (0 : 0 : 1 , 0 : 1), (0 : 0 : 1 , 1 : 1), (0 : 1 : 0 , 0 : 1), (0 : 1 : 0 , 1 : 1), (1 : -1/2 : 1 , 0 : 1), (1 : -1/2 : 1 , 1 : 1)]