Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
r""" Sage functions to compute minimal models of rational functions under the conjugation action of `PGL_2(QQ)`.
AUTHORS:
- Alex Molnar (May 22, 2012)
- Brian Stout, Ben Hutz (Nov 2013): Modified code to use projective morphism functionality so that it can be included in Sage.
REFERENCES: [BM2012]_, [Mol2015]_ """
#***************************************************************************** # Copyright (C) 2012 Alexander Molnar # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # http://www.gnu.org/licenses/ #*****************************************************************************
r""" Compute a lower bound on the value of ``b``.
This value is needed for a transformation `A(z) = z*p^k + b` to satisfy `ord_p(Res(\phi^A)) < ord_p(Res(\phi))` for a rational map `\phi`. See Theorem 3.3.5 in [Molnar]_.
INPUT:
- ``c`` -- a list of polynomials in `b`. See v for their use
- ``v`` -- a list of rational numbers, where we are considering the inequalities `ord_p(c[i]) > v[i]`
- ``p`` -- a prime
- ``b`` -- local variable
OUTPUT: ``bval`` -- Integer, lower bound in Theorem 3.3.5
EXAMPLES::
sage: R.<b> = PolynomialRing(QQ) sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import bCheck sage: bCheck(11664*b^2 + 70227*b + 76059, 15/2, 3, b) -1 """
r""" Create scaled integer polynomial with respect to prime ``p``.
Given an integral polynomial ``c``, we can write `c = p^i*c'`, where ``p`` does not divide ``c``. Returns ``c'`` and `v - i` where `i` is the smallest valuation of the coefficients of `c`.
INPUT:
- ``c`` -- an integer polynomial
- ``v`` -- an integer - the bound on the exponent from blift
- ``p`` -- a prime
OUTPUT:
- boolean -- the new exponent bound is 0 or negative
- the scaled integer polynomial
- an integer the new exponent bound
EXAMPLES::
sage: R.<b> = PolynomialRing(QQ) sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import scale sage: scale(24*b^3 + 108*b^2 + 162*b + 81, 1, 3) [False, 8*b^3 + 36*b^2 + 54*b + 27, 0] """ else:
r""" Search for a solution to the given list of inequalities.
If found, lift the solution to an appropriate valuation. See Lemma 3.3.6 in [Molnar]_
INPUT:
- ``LF`` -- a list of integer polynomials in one variable (the normalized coefficients)
- ``Li`` -- an integer, the bound on coefficients
- ``p`` -- a prime
OUTPUT:
- boolean -- whether or not the lift is successful
- integer -- the lift
EXAMPLES::
sage: R.<b> = PolynomialRing(QQ) sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import blift sage: blift([8*b^3 + 12*b^2 + 6*b + 1, 48*b^2 + 483*b + 117, 72*b + 1341, -24*b^2 + 411*b + 99, -144*b + 1233, -216*b], 2, 3) (True, 4) """
#Determine which inequalities are trivial, and scale the rest, so that we only lift #as many times as needed. #Determine the valuation to lift until. else: #All inequalities are satisfied. #We need a solution for each polynomial on the left hand side of the inequalities, #so we need only find a solution for their gcd. #Recursively try to lift each root #Lift successful. #Lift non successful.
r""" Determine if given map is affine minimal.
Given vp a scheme morphisms on the projective line over the rationals, this procedure determines if `\phi` is minimal. In particular, it determines if the map is affine minimal, which is enough to decide if it is minimal or not. See Proposition 2.10 in [Bruin-Molnar]_.
INPUT:
- ``vp`` -- dyanmical system on the projective line
- ``D`` -- a list of primes, in case one only wants to check minimality at those specific primes
- ``return_transformation`` -- (default: False) a boolean value, default value True. This signals a return of the ``PGL_2`` transformation to conjugate ``vp`` to the calculated minimal model
- ``quick`` -- a boolean value. If true the algorithm terminates once algorithm determines F/G is not minimal, otherwise algorithm only terminates once a minimal model has been found
OUTPUT:
- ``newvp`` -- dynamical system on the projective line
- ``conj`` -- linear fractional transformation which conjugates ``vp`` to ``newvp``
EXAMPLES::
sage: PS.<X,Y> = ProjectiveSpace(QQ, 1) sage: vp = DynamicalSystem_projective([X^2 + 9*Y^2, X*Y]) sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import affine_minimal sage: affine_minimal(vp, True) ( Dynamical System of Projective Space of dimension 1 over Rational Field Defn: Defined on coordinates by sending (X : Y) to (X^2 + Y^2 : X*Y) , [3 0] [0 1] ) """
#want the polynomial ring not the fraction field #If the valuation of a prime in the resultant is small enough, we can say the #map is affine minimal at that prime without using the local minimality loop. See #Theorem 3.2.2 in [Molnar, M.Sc. thesis] else: g = 2*d
#Some quantities needed for the local minimization loop, but we compute now #since the value is constant, so we do not wish to compute in every local loop. #See Theorem 3.3.3 in [Molnar, M.Sc thesis] #Set the primes to check minimality at, if not already prescribed
#Check minimality at all primes in D. If D is all primes dividing #Res(minF/minG), this is enough to show whether minF/minG is minimal or not. See #Propositions 3.2.1 and 3.3.7 in [Molnar, M.Sc. thesis]. #The model is minimal at p else: #The model may not be minimal at p. else: #The model is minimal at p #The model is minimal at p break else: #The model is not minimal at p
r""" Local loop for Affine_minimal, where we check minimality at the prime p.
First we bound the possible k in our transformations A = zp^k + b. See Theorems 3.3.2 and 3.3.3 in [Molnar]_.
INPUT:
- ``Fun`` -- a dynamical systems on projective space
- ``p`` - a prime
- ``ubRes`` -- integer, the upper bound needed for Th. 3.3.3 in [Molnar]_
- ``conj`` -- a 2x2 matrix keeping track of the conjugation
OUTPUT:
- boolean -- ``True`` if ``Fun`` is minimal at ``p``, ``False`` otherwise
- a dynamical system on projective space minimal at ``p``
EXAMPLES::
sage: P.<x,y> = ProjectiveSpace(QQ, 1) sage: f = DynamicalSystem_projective([149*x^2 + 39*x*y + y^2, -8*x^2 + 137*x*y + 33*y^2]) sage: from sage.dynamics.arithmetic_dynamics.endPN_minimal_model import Min sage: Min(f, 3, -27000000, matrix(QQ,[[1, 0],[0, 1]])) ( Dynamical System of Projective Space of dimension 1 over Rational Field Defn: Defined on coordinates by sending (x : y) to (181*x^2 + 313*x*y + 81*y^2 : -24*x^2 + 73*x*y + 151*y^2) , [3 4] [0 1] ) """ #want the polynomial ring not the fraction field else:
#There are no possible transformations to reduce the resultant. return Fun,conj else: #Looping over each possible k, we search for transformations to reduce the #resultant of F/G #If there is some b such that Res(phi^A) < Res(phi), we must have ord_p(c) > #RHS for each c in coeffs. #Make sure constant coefficients in coeffs satisfy the inequality. #Constant coefficients in coeffs have large enough valuation, so check #the rest. We start by checking if simply picking b=0 works #A = z*p^k satisfies the inequalities, and F/G is not minimal #"Conjugating by", p,"^", k, "*z +", 0
#Otherwise we search if any value of b will work. We start by finding a #minimum bound on the valuation of b that is necessary. See Theorem 3.3.5 #in [Molnar, M.Sc. thesis].
#We scale the coefficients in coeffs, so that we may assume ord_p(b) is #at least 0
#We now scale the inequalities, ord_p(coeff) > RHS, so that coeff is in #ZZ[b]
#We now search for integers that satisfy the inequality ord_p(coeff) > #RHS. See Lemma 3.3.6 in [Molnar, M.Sc. thesis].
#If bool is true after lifting, we have a solution b, and F/G is not #minimal. #Rescale, conjugate and return new map #"Conjugating by ", p,"^", k, "*z +", bsol
|