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)[source]¶
Bases:
ProjectiveConic_fieldCreate a projective plane conic curve over a number field. See
Conicfor 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
>>> from sage.all import * >>> K = NumberField(x**Integer(3) - Integer(2), 'a', names=('a',)); (a,) = K._first_ngens(1) >>> P = K['X, Y, Z']; (X, Y, Z,) = P._first_ngens(3) >>> Conic(X**Integer(2) + Y**Integer(2) - a*Z**Integer(2)) Projective Conic Curve over Number Field in a with defining polynomial x^3 - 2 defined by X^2 + Y^2 + (-a)*Z^2
- has_rational_point(point=False, obstruction=False, algorithm='default', read_cache=True)[source]¶
Return
Trueif and only ifselfhas a point defined over its base field \(B\).If
pointandobstructionare both False (default), then the output is a booleanoutsaying whetherselfhas a rational point.If
pointorobstructionisTrue, then the output is a pair(out, S), whereoutis as above and:if
pointisTrueandselfhas a rational point, thenSis a rational point,if
obstructionisTrue,selfhas no rational point, thenSis a prime or infinite place of \(B\) such that no rational point exists over the completion atS.
Points and obstructions are cached whenever they are found. Cached information is used for the output if available, but only if
read_cacheisTrue.ALGORITHM:
The parameter
algorithmspecifies the algorithm to be used:'rnfisnorm'– use PARI’srnfisnorm(cannot be combined withobstruction = True)'local'– check if a local solution exists for all primes and infinite places of \(B\) and apply the Hasse principle (cannot be combined withpoint = True)'default'– use algorithm'rnfisnorm'first. Then, if no point exists and obstructions are requested, use algorithm'local'to find an obstruction.'magma'(requires Magma to be installed) – delegates the task to the Magma computer algebra system
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
>>> from sage.all import * >>> C = Conic(QQ, [Integer(1), Integer(113922743), -Integer(310146482690273725409)]) >>> C.has_rational_point(point=True) (True, (-76842858034579/5424 : -5316144401/5424 : 1)) >>> 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, obstruction=True) (False, Fractional ideal (2*i - 1)) sage: C.has_rational_point(algorithm='rnfisnorm') False sage: C.has_rational_point(algorithm='rnfisnorm', obstruction=True, ....: read_cache=False) 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)) sage: K.<a> = NumberField(x^4+2) sage: Conic(QQ, [4,5,6]).has_rational_point() False sage: Conic(K, [4,5,6]).has_rational_point() True sage: Conic(K, [4,5,6]).has_rational_point(algorithm='magma', # optional - magma ....: read_cache=False) True sage: P.<a> = QuadraticField(2) sage: C = Conic(P, [1,1,1]) sage: C.has_rational_point() False sage: C.has_rational_point(point=True) (False, None) sage: C.has_rational_point(obstruction=True) (False, Ring morphism: From: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095? To: Algebraic Real Field Defn: a |--> -1.414213562373095?) sage: C.has_rational_point(point=True, obstruction=True) (False, Ring morphism: From: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095? To: Algebraic Real Field Defn: a |--> -1.414213562373095?)
>>> from sage.all import * >>> K = QuadraticField(-Integer(1), names=('i',)); (i,) = K._first_ngens(1) >>> C = Conic(K, [Integer(1), Integer(3), -Integer(5)]) >>> C.has_rational_point(point=True, obstruction=True) (False, Fractional ideal (2*i - 1)) >>> C.has_rational_point(algorithm='rnfisnorm') False >>> C.has_rational_point(algorithm='rnfisnorm', obstruction=True, ... read_cache=False) Traceback (most recent call last): ... ValueError: Algorithm rnfisnorm cannot be combined with obstruction = True in has_rational_point >>> P = QQ['x']; (x,) = P._first_ngens(1) >>> L = NumberField(x**Integer(3) - Integer(5), names=('b',)); (b,) = L._first_ngens(1) >>> C = Conic(L, [Integer(1), Integer(2), -Integer(3)]) >>> C.has_rational_point(point=True, algorithm='rnfisnorm') (True, (-5/3 : 1/3 : 1)) >>> K = NumberField(x**Integer(4)+Integer(2), names=('a',)); (a,) = K._first_ngens(1) >>> Conic(QQ, [Integer(4),Integer(5),Integer(6)]).has_rational_point() False >>> Conic(K, [Integer(4),Integer(5),Integer(6)]).has_rational_point() True >>> Conic(K, [Integer(4),Integer(5),Integer(6)]).has_rational_point(algorithm='magma', # optional - magma ... read_cache=False) True >>> P = QuadraticField(Integer(2), names=('a',)); (a,) = P._first_ngens(1) >>> C = Conic(P, [Integer(1),Integer(1),Integer(1)]) >>> C.has_rational_point() False >>> C.has_rational_point(point=True) (False, None) >>> C.has_rational_point(obstruction=True) (False, Ring morphism: From: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095? To: Algebraic Real Field Defn: a |--> -1.414213562373095?) >>> C.has_rational_point(point=True, obstruction=True) (False, Ring morphism: From: Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095? To: Algebraic Real Field Defn: a |--> -1.414213562373095?)
- is_locally_solvable(p)[source]¶
Return
Trueif and only ifselfhas a solution over the completion of the base field \(B\) ofselfatp. Herepis a finite prime or infinite place of \(B\).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) False sage: C.is_locally_solvable(p2) True sage: f = (2*K).factor() sage: C.is_locally_solvable(f[0][0]) True sage: C.is_locally_solvable(f[1][0]) False
>>> from sage.all import * >>> P = QQ['x']; (x,) = P._first_ngens(1) >>> K = NumberField(x**Integer(3) + Integer(5), names=('a',)); (a,) = K._first_ngens(1) >>> C = Conic(K, [Integer(1), Integer(2), Integer(3) - a]) >>> [p1, p2] = K.places() >>> C.is_locally_solvable(p1) False >>> C.is_locally_solvable(p2) True >>> f = (Integer(2)*K).factor() >>> C.is_locally_solvable(f[Integer(0)][Integer(0)]) True >>> C.is_locally_solvable(f[Integer(1)][Integer(0)]) False
- local_obstructions(finite=True, infinite=True, read_cache=True)[source]¶
Return the sequence of finite primes and/or infinite places such that
selfis locally solvable at those primes and places.If the base field is \(\QQ\), then the infinite place is denoted \(-1\).
The parameters
finiteandinfinite(bothTrueby default) are used to specify whether to look at finite and/or infinite places. Note thatfinite = Trueinvolves factorization of the determinant ofself, hence may be slow.Local obstructions are cached. The parameter
read_cachespecifies whether to look at the cache before computing anything.EXAMPLES:
sage: K.<i> = QuadraticField(-1) sage: Conic(K, [1, 2, 3]).local_obstructions() [] sage: L.<a> = QuadraticField(5) sage: Conic(L, [1, 2, 3]).local_obstructions() [Ring morphism: From: Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790? To: Algebraic Real Field Defn: a |--> -2.236067977499790?, Ring morphism: From: Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790? To: Algebraic Real Field Defn: a |--> 2.236067977499790?]
>>> from sage.all import * >>> K = QuadraticField(-Integer(1), names=('i',)); (i,) = K._first_ngens(1) >>> Conic(K, [Integer(1), Integer(2), Integer(3)]).local_obstructions() [] >>> L = QuadraticField(Integer(5), names=('a',)); (a,) = L._first_ngens(1) >>> Conic(L, [Integer(1), Integer(2), Integer(3)]).local_obstructions() [Ring morphism: From: Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790? To: Algebraic Real Field Defn: a |--> -2.236067977499790?, Ring morphism: From: Number Field in a with defining polynomial x^2 - 5 with a = 2.236067977499790? To: Algebraic Real Field Defn: a |--> 2.236067977499790?]