Projective plane conics over a number field

AUTHORS:

  • Marco Streng (2010-07-20)
class sage.schemes.plane_conics.con_number_field.ProjectiveConic_number_field(A, f)

Bases: sage.schemes.plane_conics.con_field.ProjectiveConic_field

Create a projective plane conic curve over a number field. See Conic for full documentation.

EXAMPLES:

sage: K.<a> = NumberField(x^3 - 2, 'a')
sage: P.<X, Y, Z> = K[]
sage: Conic(X^2 + Y^2 - a*Z^2)
Projective Conic Curve over Number Field in a with defining polynomial x^3 - 2 defined by X^2 + Y^2 + (-a)*Z^2

TESTS:

sage: K.<a> = NumberField(x^3 - 3, 'a')
sage: Conic([a, 1, -1])._test_pickling()
has_rational_point(point=False, obstruction=False, algorithm='default', read_cache=True)

Returns True if and only if self has a point defined over its base field B.

If point and obstruction are both False (default), then the output is a boolean out saying whether self has a rational point.

If point or obstruction is True, then the output is a pair (out, S), where out is as above and:

  • if point is True and self has a rational point, then S is a rational point,
  • if obstruction is True, self has no rational point, then S is a prime or infinite place of B such that no rational point exists over the completion at S. Finding obstructions is not yet implemented for number fields (see Sage trac ticket #10742).

Points and obstructions are cached whenever they are found. Cached information is used for the output if available, but only if read_cache is True.

ALGORITHM:

The parameter algorithm specifies the algorithm to be used:

  • 'rnfisnorm' – Use PARI’s rnfisnorm (cannot be combined with obstruction = True)
  • 'local' – Check if a local solution exists for all primes and infinite places of B and apply the Hasse principle. (cannot be combined with point = True, not yet implemented for number fields other than QQ, see Sage trac ticket #10742.)
  • 'default' – Use 'rnfisnorm'.

EXAMPLES:

An example over \QQ

sage: C = Conic(QQ, [1, 113922743, -310146482690273725409])
sage: C.has_rational_point(point = True)
(True, (-76842858034579/5424 : -5316144401/5424 : 1))
sage: C.has_rational_point(algorithm = 'local', read_cache = False)
True

Examples over number fields

sage: K.<i> = QuadraticField(-1)
sage: C = Conic(K, [1, 3, -5])
sage: C.has_rational_point(point = True)
(False, None)
sage: C.has_rational_point(algorithm = "rnfisnorm")
False
sage: C.has_rational_point(algorithm = "rnfisnorm", obstruction = True)
Traceback (most recent call last):
...
ValueError: Algorithm rnfisnorm cannot be combined with obstruction = True in has_rational_point

sage: P.<x> = QQ[]
sage: L.<b> = NumberField(x^3-5)
sage: C = Conic(L, [1, 2, -3])
sage: C.has_rational_point(point = True, algorithm = 'rnfisnorm')
(True, (5/3 : -1/3 : 1))

TESTS:

Create a bunch of conics over number fields and check if has_rational_point runs without errors for algorithm = 'rnfisnorm'. Check if all points returned are valid.

sage: P.<X> = QQ[]
sage: Q = P.fraction_field()
sage: c = [1, X/2, 1/X]
sage: l = Sequence(cartesian_product_iterator([c for i in range(3)]))
sage: l = l + [[X, 1, 1, 1, 1, 1]] + [[X, 1/5, 1, 1, 2, 1]]
sage: K.<a> = QuadraticField(-23)
sage: L.<b> = QuadraticField(19)
sage: M.<c> = NumberField(X^3+3*X+1)
sage: m = [[Q(b)(F.gen()) for b in a] for a in l for F in [K, L, M]]
sage: d = []
sage: c = []
sage: c = [Conic(a) for a in m if a != [0,0,0]] # long time: 1 second
sage: d = [C.has_rational_point(algorithm = 'rnfisnorm', point = True) for C in c] # long time: 15 seconds
sage: assert all([c[k].defining_polynomial()(Sequence(d[k][1])) == 0 for k in range(len(c)) if d[k][0]])

Create a bunch of conics that are known to have rational points already over \QQ and check if points are found by has_rational_point.

sage: l = Sequence(cartesian_product_iterator([[-1, 0, 1] for i in range(3)]))
sage: K.<a> = QuadraticField(-23)
sage: L.<b> = QuadraticField(19)
sage: M.<c> = NumberField(x^5+3*x+1)
sage: m = [[F(b) for b in a] for a in l for F in [K, L, M]]
sage: c = [Conic(a) for a in m if a != [0,0,0] and a != [1,1,1] and a != [-1,-1,-1]] # long time 0.4 seconds
sage: assert all([C.has_rational_point(algorithm = 'rnfisnorm') for C in c]) # long time: 3.5 seconds
sage: assert all([C.defining_polynomial()(Sequence(C.has_rational_point(point = True)[1])) == 0 for C in c]) # uses cache, long time if previous line isn't run
is_locally_solvable(p)

Returns True if and only if self has a solution over the completion of the base field B of self at p. Here p is a finite prime or infinite place of B.

This is currently not implemented for Number Fields. See Sage trac ticket #10742.

EXAMPLES:

sage: P.<x> = QQ[]
sage: K.<a> = NumberField(x^3 + 5)
sage: C = Conic(K, [1, 2, 3 - a])
sage: [p1, p2] = K.places()
sage: C.is_locally_solvable(p1)
Traceback (most recent call last):
...
NotImplementedError: Sorry, is_locally_solvable is not yet implemented for number fields.

sage: C.is_locally_solvable(p2)
Traceback (most recent call last):
...
NotImplementedError: Sorry, is_locally_solvable is not yet implemented for number fields.

sage: O = K.maximal_order()
sage: f = (2*O).factor()
sage: C.is_locally_solvable(f[0][0])
Traceback (most recent call last):
...
NotImplementedError: Sorry, is_locally_solvable is not yet implemented for number fields.

sage: C.is_locally_solvable(f[1][0])
Traceback (most recent call last):
...
NotImplementedError: Sorry, is_locally_solvable is not yet implemented for number fields.
local_obstructions(finite=True, infinite=True, read_cache=True)

Returns the sequence of finite primes and/or infinite places such that self is locally solvable at those primes and places.

If the base field is \QQ, then the infinite place is denoted -1.

The parameters finite and infinite (both True by default) are used to specify whether to look at finite and/or infinite places. Note that finite = True involves factorization of the determinant of self, hence may be slow.

Local obstructions are cached. The parameter read_cache specifies whether to look at the cache before computing anything.

This is currently not implemented for Number Fields. See Sage trac ticket #10742.

EXAMPLES

sage: K.<i> = QuadraticField(-1)
sage: Conic(K, [1, 2, 3]).local_obstructions()
Traceback (most recent call last):
...
NotImplementedError: Sorry, is_locally_solvable is not yet implemented for number fields.

sage: L.<a> = QuadraticField(5)
sage: Conic(L, [1, 2, 3]).local_obstructions()
Traceback (most recent call last):
...
NotImplementedError: Sorry, is_locally_solvable is not yet implemented for number fields.

Previous topic

Projective plane conics over a field

Next topic

Projective plane conics over \QQ

This Page