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:

[Bruin-Molnar]N. Bruin and A. Molnar, Minimal models for rational functions in a dynamical setting, LMS Journal of Computation and Mathematics, Volume 15 (2012), pp 400-417.
[Molnar](1, 2, 3, 4) A. Molnar, Fractional Linear Minimal Models of Rational Functions, M.Sc. Thesis.
sage.schemes.projective.endPN_minimal_model.Min(Fun, p, ubRes, conj)

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 projective space morphisms.
  • 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 projective morphism minimal at p.

EXAMPLES:

sage: P.<x,y> = ProjectiveSpace(QQ, 1)
sage: H = End(P)
sage: f = H([149*x^2 + 39*x*y + y^2, -8*x^2 + 137*x*y + 33*y^2])
sage: from sage.schemes.projective.endPN_minimal_model import Min
sage: Min(f, 3, -27000000, matrix(QQ,[[1, 0],[0, 1]]))
(
Scheme endomorphism 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]
)
sage.schemes.projective.endPN_minimal_model.affine_minimal(vp, return_transformation=False, D=None, quick=False)

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 – scheme morphism on the projective line.
  • D – a list of primes, in case one only wants to check minimality
    at those specific primes.
  • return_transformation – a boolean value, default value True. This signals a return of the PGL_2 transformation to conjugate vp to the calculated minimal model. default: False.
  • 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 – scheme morphism on the projective line.
  • conj – linear fractional transformation which conjugates vp to newvp.

EXAMPLES:

sage: PS.<X,Y> = ProjectiveSpace(QQ, 1)
sage: H = Hom(PS,PS)
sage: vp = H([X^2 + 9*Y^2, X*Y])
sage: from sage.schemes.projective.endPN_minimal_model import affine_minimal
sage: affine_minimal(vp, True)
(
Scheme endomorphism 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]
)
sage.schemes.projective.endPN_minimal_model.bCheck(c, v, p, b)

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.schemes.projective.endPN_minimal_model import bCheck
sage: bCheck(11664*b^2 + 70227*b + 76059, 15/2, 3, b)
-1
sage.schemes.projective.endPN_minimal_model.blift(LF, Li, p, S=None)

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.schemes.projective.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)
sage.schemes.projective.endPN_minimal_model.scale(c, v, p)

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.schemes.projective.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]