Projective plane conics over a rational function field¶
The class ProjectiveConic_rational_function_field
represents a
projective plane conic over a rational function field \(F(t)\), where \(F\)
is any field. Instances can be created using Conic()
.
AUTHORS:
 Lennart Ackermans (20160207): initial version
EXAMPLES:
Create a conic:
sage: K = FractionField(PolynomialRing(QQ, 't'))
sage: P.<X, Y, Z> = K[]
sage: Conic(X^2 + Y^2  Z^2)
Projective Conic Curve over Fraction Field of Univariate
Polynomial Ring in t over Rational Field defined by
X^2 + Y^2  Z^2
Points can be found using has_rational_point()
:
sage: K.<t> = FractionField(QQ['t'])
sage: C = Conic([1,t,t])
sage: C.has_rational_point(point = True)
(True, (0 : 1 : 1))

class
sage.schemes.plane_conics.con_rational_function_field.
ProjectiveConic_rational_function_field
(A, f)¶ Bases:
sage.schemes.plane_conics.con_field.ProjectiveConic_field
Create a projective plane conic curve over a rational function field \(F(t)\), where \(F\) is any field.
The algorithms used in this class come mostly from [HC2006].
EXAMPLES:
sage: K = FractionField(PolynomialRing(QQ, 't')) sage: P.<X, Y, Z> = K[] sage: Conic(X^2 + Y^2  Z^2) Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Rational Field defined by X^2 + Y^2  Z^2
REFERENCES:

find_point
(supports, roots, case, solution=0)¶ Given a solubility certificate like in [HC2006], find a point on
self
. Assumesself
is in reduced form (see [HC2006] for a definition).If you don’t have a solubility certificate and just want to find a point, use the function
has_rational_point()
instead.INPUT:
self
– conic in reduced form.supports
– 3tuple wheresupports[i]
is a list of all monic irreducible \(p \in F[t]\) that divide the \(i\)’th of the 3 coefficients.roots
– 3tuple containing lists of roots of all elements ofsupports[i]
, in the same order.case
– 1 or 0, as in [HC2006].solution
– (default: 0) a solution of (5) in [HC2006], if case = 0, 0 otherwise.
OUTPUT:
A point \((x,y,z) \in F(t)\) of
self
. Output is undefined when the input solubility certificate is incorrect.ALGORITHM:
The algorithm used is the algorithm FindPoint in [HC2006], with a simplification from [Ack2016].
EXAMPLES:
sage: K.<t> = FractionField(QQ['t']) sage: C = Conic(K, [t^22, 2*t^3, 2*t^313*t^22*t+18]) sage: C.has_rational_point(point=True) # indirect test (True, (3 : (t + 1)/t : 1))
Different solubility certificates give different points:
sage: K.<t> = PolynomialRing(QQ, 't') sage: C = Conic(K, [t^22, 2*t, 2*t^313*t^22*t+18]) sage: supp = [[t^2  2], [t], [t^3 + 13/2*t^2 + t  9]] sage: tbar1 = QQ.extension(supp[0][0], 'tbar').gens()[0] sage: tbar2 = QQ.extension(supp[1][0], 'tbar').gens()[0] sage: tbar3 = QQ.extension(supp[2][0], 'tbar').gens()[0] sage: roots = [[tbar1 + 1], [1/3*tbar2^0], [2/3*tbar3^2 + 11/3*tbar3  3]] sage: C.find_point(supp, roots, 1) (3 : t + 1 : 1) sage: roots = [[tbar1  1], [1/3*tbar2^0], [2/3*tbar3^2  11/3*tbar3 + 3]] sage: C.find_point(supp, roots, 1) (3 : t  1 : 1)

has_rational_point
(point=False, algorithm='default', read_cache=True)¶ Returns True if and only if the conic
self
has a point over its base field \(F(t)\), which is a field of rational functions.If
point
is True, then returns a second output, which is a rational point if one exists.Points are cached whenever they are found. Cached information is used if and only if
read_cache
is True.The default algorithm does not (yet) work for all base fields \(F\). In particular, sage is required to have:
 an algorithm for finding the square root of elements in finite extensions of \(F\);
 a factorization and gcd algorithm for \(F[t]\);
 an algorithm for solving conics over \(F\).
ALGORITHM:
The parameter
algorithm
specifies the algorithm to be used:'default'
– use a native Sage implementation, based on the algorithm Conic in [HC2006].'magma'
(requires Magma to be installed) – delegates the task to the Magma computer algebra system.
EXAMPLES:
We can find points for function fields over (extensions of) \(\QQ\) and finite fields:
sage: K.<t> = FractionField(PolynomialRing(QQ, 't')) sage: C = Conic(K, [t^22, 2*t^3, 2*t^313*t^22*t+18]) sage: C.has_rational_point(point=True) (True, (3 : (t + 1)/t : 1)) sage: R.<t> = FiniteField(23)[] sage: C = Conic([2, t^2+1, t^2+5]) sage: C.has_rational_point() True sage: C.has_rational_point(point=True) (True, (5*t : 8 : 1)) sage: F.<i> = QuadraticField(1) sage: R.<t> = F[] sage: C = Conic([1,i*t,t^2+4]) sage: C.has_rational_point(point = True) (True, (t  2*i : 2*i : 1))
It works on nondiagonal conics as well:
sage: K.<t> = QQ[] sage: C = Conic([4, 4, 8, 1, 4, t + 4]) sage: C.has_rational_point(point=True) (True, (1/2 : 1 : 0))
If no point exists output still depends on the argument
point
:sage: K.<t> = QQ[] sage: C = Conic(K, [t^2, (t1), 2*(t1)]) sage: C.has_rational_point() False sage: C.has_rational_point(point=True) (False, None)
Due to limitations in Sage of algorithms we depend on, it is not yet possible to find points on conics over multivariate function fields (see the requirements above):
sage: F.<t1> = FractionField(QQ['t1']) sage: K.<t2> = FractionField(F['t2']) sage: a = K(1) sage: b = 2*t2^2+2*t1*t2t1^2 sage: c = 3*t2^44*t1*t2^3+8*t1^2*t2^2+16*t1^3t248*t1^4 sage: C = Conic([a,b,c]) sage: C.has_rational_point() Traceback (most recent call last): ... NotImplementedError: is_square() not implemented for elements of Univariate Quotient Polynomial Ring in tbar over Fraction Field of Univariate Polynomial Ring in t1 over Rational Field with modulus tbar^2 + t1*tbar  1/2*t1^2
In some cases, the algorithm requires us to be able to solve conics over \(F\). In particular, the following does not work:
sage: P.<u> = QQ[] sage: E = P.fraction_field() sage: Q.<Y> = E[] sage: F.<v> = E.extension(Y^2  u^3  1) sage: R.<t> = F[] sage: K = R.fraction_field() sage: C = Conic(K, [u, v, 1]) sage: C.has_rational_point() Traceback (most recent call last): ... NotImplementedError: has_rational_point not implemented for conics over base field Univariate Quotient Polynomial Ring in v over Fraction Field of Univariate Polynomial Ring in u over Rational Field with modulus v^2  u^3  1
has_rational_point
fails for some conics over function fields over finite fields, due to trac ticket #20003:sage: K.<t> = PolynomialRing(GF(7)) sage: C = Conic([5*t^2+4, t^2+3*t+3, 6*t^2+3*t+2, 5*t^2+5, 4*t+3, 4*t^2+t+5]) sage: C.has_rational_point() Traceback (most recent call last): ... TypeError: self (=Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (5*t^2 + 4)*x^2 + ((6*t^3 + 3*t^2 + 5*t + 5)/(t + 3))*y^2 + ((6*t^6 + 3*t^5 + t^3 + 6*t^2 + 6*t + 2)/(t^4 + t^3 + 4*t^2 + 3*t + 1))*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (5*t^2 + 4)*x^2 + (t^2 + 3*t + 3)*x*y + (5*t^2 + 5)*y^2 + (6*t^2 + 3*t + 2)*x*z + (4*t + 3)*y*z + (4*t^2 + t + 5)*z^2 Defn: Defined on coordinates by sending (x : y : z) to (x + ((2*t + 5)/(t + 3))*y + ((3*t^4 + 2*t^3 + 5*t^2 + 5*t + 3)/(t^4 + t^3 + 4*t^2 + 3*t + 1))*z : y + ((6*t^3 + 6*t^2 + 3*t + 6)/(t^3 + 4*t^2 + 2*t + 2))*z : z)) domain must equal right (=Scheme morphism: From: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (5*t^3 + 6*t^2 + 3*t + 3)*x^2 + (t + 4)*y^2 + (6*t^7 + 2*t^5 + t^4 + 2*t^3 + 3*t^2 + 6*t + 6)*z^2 To: Projective Conic Curve over Fraction Field of Univariate Polynomial Ring in t over Finite Field of size 7 defined by (5/(t^3 + 4*t^2 + 2*t + 2))*x^2 + (1/(t^3 + 3*t^2 + 5*t + 1))*y^2 + ((6*t^6 + 3*t^5 + t^3 + 6*t^2 + 6*t + 2)/(t^9 + 5*t^8 + t^7 + 6*t^6 + 3*t^5 + 4*t^3 + t^2 + 5*t + 3))*z^2 Defn: Defined on coordinates by sending (x : y : z) to ((t^3 + 4*t^2 + 2*t + 2)*x : (t^2 + 5)*y : (t^5 + 4*t^4 + t^2 + 3*t + 3)*z)) codomain
