# 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 (2016-02-07): 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)#

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. Assumes self 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 – 3-tuple where supports[i] is a list of all monic irreducible $$p \in F[t]$$ that divide the $$i$$’th of the 3 coefficients.

• roots – 3-tuple containing lists of roots of all elements of supports[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^2 - 2, 2*t^3, -2*t^3 - 13*t^2 - 2*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^2 - 2, 2*t, -2*t^3 - 13*t^2 - 2*t + 18])
sage: supp = [[t^2 - 2], [t], [t^3 + 13/2*t^2 + t - 9]]
sage: tbar1 = QQ.extension(supp, 'tbar').gens()
sage: tbar2 = QQ.extension(supp, 'tbar').gens()
sage: tbar3 = QQ.extension(supp, 'tbar').gens()
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)


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^2 - 2, 2*t^3, -2*t^3 - 13*t^2 - 2*t + 18])
sage: C.has_rational_point(point=True)
(True, (-3 : (t + 1)/t : 1))
sage: R.<t> = FiniteField(23)[]                                             # optional - sage.rings.finite_rings
sage: C = Conic([2, t^2 + 1, t^2 + 5])                                      # optional - sage.rings.finite_rings
sage: C.has_rational_point()                                                # optional - sage.rings.finite_rings
True
sage: C.has_rational_point(point=True)                                      # optional - sage.rings.finite_rings
(True, (5*t : 8 : 1))
sage: F.<i> = QuadraticField(-1)                                            # optional - sage.rings.number_field
sage: R.<t> = F[]                                                           # optional - sage.rings.number_field
sage: C = Conic([1, i*t, -t^2 + 4])                                         # optional - sage.rings.number_field
sage: C.has_rational_point(point=True)                                      # optional - sage.rings.number_field
(True, (-t - 2*i : -2*i : 1))


It works on non-diagonal 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, (t-1), -2*(t-1)])
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*t2 - t1^2
sage: c = -3*t2^4 - 4*t1*t2^3 + 8*t1^2*t2^2 + 16*t1^3 - t2 - 48*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)                                    # optional - sage.rings.function_field
sage: R.<t> = F[]                                                           # optional - sage.rings.function_field
sage: K = R.fraction_field()                                                # optional - sage.rings.function_field
sage: C = Conic(K, [u, v, 1])                                               # optional - sage.rings.function_field
sage: C.has_rational_point()                                                # optional - sage.rings.function_field
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 github issue #20003:

sage: K.<t> = PolynomialRing(GF(7))                                         # optional - sage.rings.finite_rings
sage: C = Conic([5*t^2 + 4, t^2 + 3*t + 3, 6*t^2 + 3*t + 2,                 # optional - sage.rings.finite_rings
....:            5*t^2 + 5, 4*t + 3, 4*t^2 + t + 5])
sage: C.has_rational_point()                                                # optional - sage.rings.finite_rings
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
(-2*t^2 - 3)*x^2 + (-t^3 + 3*t^2 - 2*t - 2)/(t + 3)*y^2 + (-t^6 + 3*t^5 + t^3 - t^2 - t + 2)/(t^4 + t^3 - 3*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
(-2*t^2 - 3)*x^2 + (t^2 + 3*t + 3)*x*y + (-2*t^2 - 2)*y^2 + (-t^2 + 3*t + 2)*x*z + (-3*t + 3)*y*z + (-3*t^2 + t - 2)*z^2
Defn: Defined on coordinates by sending (x : y : z) to
(x + (2*t - 2)/(t + 3)*y + (3*t^4 + 2*t^3 - 2*t^2 - 2*t + 3)/(t^4 + t^3 - 3*t^2 + 3*t + 1)*z
: y + (-t^3 - t^2 + 3*t - 1)/(t^3 - 3*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
(-2*t^3 - t^2 + 3*t + 3)*x^2 + (t - 3)*y^2 + (-t^7 + 2*t^5 + t^4 + 2*t^3 + 3*t^2 - 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
-2/(t^3 - 3*t^2 + 2*t + 2)*x^2 + 1/(t^3 + 3*t^2 - 2*t + 1)*y^2 + (-t^6 + 3*t^5 + t^3 - t^2 - t + 2)/(t^9 - 2*t^8 + t^7 - t^6 + 3*t^5 - 3*t^3 + t^2 - 2*t + 3)*z^2
Defn: Defined on coordinates by sending (x : y : z) to
((t^3 - 3*t^2 + 2*t + 2)*x : (t^2 - 2)*y : (t^5 - 3*t^4 + t^2 + 3*t + 3)*z))
codomain