Algorithmic Improvements of Dynamical Systems for SageMath - Google Summer of Code 2023

This summer, I worked on a Google Summer of Code (GSoC) project to improve height functionality in the context of dynamical systems for SageMath. I would like to thank my mentors Prof. Ben Hutz and Alexander Galarraga for helpful meetings and email exchanges.

You can see my commits on GitHub.

Is it important and useful, or why should I care?

Height functions allow mathematicians to quantify the complexity of mathematical objects, such as rational points or the size of solutions to Diophantine equations in Diophantine geometry.

For instance, the classical or naive height over the rational numbers is the maximum of the numerators and denominators of the coordinates. As an example, the height of \((3/9, 1/2)\) is \(3\).

For interested readers, Heights in Diophantine Geometry by Enrico Bombieri is really helpful.

What have I done?

I contributed to 5 Pull Requests (PRs) in two different components (algebraic geometry and dynamics). Each ticket represents a separate task and contains the implementation, tests, and documentation:

The points_of_bounded_height function in proj_bdd_height.py now returns correct results after renormalization by scaling, if in the ring of integers. We achieve this by introducing a new function ZZ_points_of_bounded_height.

This PR aims to fix the issue #35797. Before the fix, the following code would fail:

sage: R.<x> = QQ[]
sage: K.<a> = NumberField(3*x^2 + 1)
sage: P.<z,w> = ProjectiveSpace(K, 1)
sage: f = DynamicalSystem_projective([a*(z^2 + w^2), z*w])
sage: f.normalize_coordinates(); f

Now it returns the correct result:

Dynamical System of Projective Space of dimension 1 over
Number Field in a with defining polynomial 3*x^2 + 1
Defn: Defined on coordinates by sending (z : w) to
    ((-3/2*a + 1/2)*z^2 + (-3/2*a + 1/2)*w^2 : (-3/2*a - 3/2)*z*w)

It is achieved via considering the number-field case separately, when clearing the denominators from the coefficients.

This PR carries the work and fixes #28292, implementing John W. Milnor’s “On Lattès Maps”.

This PR aims to fix #34095.

We aim to implement Ben Hutz’s generalization of Wells’ algorithm from “Computing the Canonical Height of a Point in Projective Space”.

What happens after the coding period?

After the official coding period, I hope continue to contribute to open-source software and SageMath.