Flat surfaces in Sage
Introduction
For general mathematical reference see the Flat surfaces wiki. A flat surface can be seen either
- as a union of polygons glued along pairs of parallel sides,
- as a flat metric with trivial SO(2) holonomy on a compact surface,
- as a Riemann surface together with a nonzero Abelian (or quadratic) differential,
- ...
This page is aimed as a roadmap for the implementation of various algorithms related to flat surfaces and more generally geometry/combinatorics/dynamics of surfaces (mapping class group, train tracks, pseudo-Anosov dynamics, ...).
Quick links
dynamics: the wider project sage-dynamics (look at it in particular installation)
dynamics/examples: examples of code that uses the algorithms developed here
General architecture
For now the main structure is as follows
- sage.combinat.flat_surfaces (various generic objects)
- sage.combinat.flat_surfaces.iet (interval exchange transformations)
- sage.combinat.flat_surfaces.origamis (origamis/square-tiled surfaces)
- sage.geometry.hyperbolic_geometry (hyperbolic spaces)
- sage.groups.surface_gps (abstract surface groups)
Where do we put?
- representations of surface groups into PSL(2,R)
- fundamental domains of such groups / Poincaré polygons / Dirichlet fundamental domains
Roadmap
Port of other programs
- Joshua Bowman's program on iso-Delaunay tessellations (written in Java)
- Finish porting Anton Zorich's programs on interval exchange transformations and linear involutions (written in Mathematica)
- Anton Zorich's program for computing approximations of various Lyapunov exponents (written in C and Mathematica)
- Alex Eskin's program for analyzing saddle connection directions in a surface (written in C++)
Different representations/implementations for flat surfaces
- (convex) polygonal surface
- rectangulated surface
- suspension of iet (and li) (almost in Sage)
- Thurston-Veech construction
- triangulated surface
- Delaunay surface (?)
- rectangulated surface
- algebraic curve with Abelian or quadratic differential
- coverings (make it relative)... need to implement homomorphism between translation surfaces
- square-tiled surfaces/origamis (torus coverings) (almost in Sage)
- pillow-case covers (almost in Sage)
- hyperelliptic curves (specifying a double cover of the sphere)
- unfoldings of rational billiards
Needed generic methods
- switch between representations (the one to which everybody can be converted is triangulated flat surface)
- compute fundamental group, relative homology, and homology (as well as functors between them)
- maps between flat surfaces (and functors to fundamental groups and homologies)
- action of SL(2,R) and isomorphisms (and functors)
- Siegel-Veech constants and volumes
- Lyapunov exponents
Surface groups
They are needed from two points of view: the group of the surface itself and the flat surface's stabilizer under the action of SL(2,R) or PSL(2,R). There must be some software for dealing with surface groups. We need to look at
kbmag: Knuth-Bendix in monoids and automatic groups, implemented by Derek Holt
Hyperbolic geometry
This part is roughly implemented in trac #9439
- the three 2D models: hyperbolic plane, hyperbolic disc and the hyperboloïd
- points, geodesics and polygonal domains
- tessellations (covering of HH by finite area convex polygonal domains)
- Fuchsian groups, their fundamental domains and their associated tessellations
The Experimental geometry lab (University of Maryland) published a lot of Mathematica packages/worksheets to deal with Kleinian and Fuchsian groups, hyperbolic tessellations, etc.