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_field- Create 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 if- selfhas a point defined over its base field \(B\).- If - pointand- obstructionare both False (default), then the output is a boolean- outsaying whether- selfhas a rational point.- If - pointor- obstructionis- True, then the output is a pair- (out, S), where- outis as above and:- if - pointis- Trueand- selfhas a rational point, then- Sis a rational point,
- if - obstructionis- True,- selfhas no rational point, then- Sis a prime or infinite place of \(B\) such that no rational point exists over the completion at- S.
 - Points and obstructions are cached whenever they are found. Cached information is used for the output if available, but only if - read_cacheis- True.- ALGORITHM: - The parameter - algorithmspecifies 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)
- '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 if- selfhas a solution over the completion of the base field \(B\) of- selfat- p. Here- pis 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 - finiteand- infinite(both- Trueby default) are used to specify whether to look at finite and/or infinite places. Note that- finite = Trueinvolves factorization of the determinant of- self, 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?]