flatsurf / sage-flatsurf

Flat surfaces in Sage
https://flatsurf.github.io/sage-flatsurf/
GNU General Public License v2.0
10 stars 10 forks source link

Explain how to deform a surface #113

Open saraedum opened 3 years ago

saraedum commented 3 years ago

We should explain how to deform a surface during an orbit closure search like flatsurvey does.

See #41 for automation of this.

Otherwise, sage-flatsurf fails to determine the orbit closure in some cases.

However, it is unclear what's a good deformation strategy in general, see https://github.com/flatsurf/flatsurvey/issues/3.

Originally, this issue was about sage-flatsurf's failure to determine orbit closures in some cases. The details are below:


Paul Apisa wrote:

During Summer@ICERM, three of our participants (Brin Harper, Hamilton Wan, and Hanna Yang) found examples of surfaces in H^{hyp}(4) for which the code that the two of you wrote for computing the dimension of orbit closures seems to return a smaller value than the true one (three versus six; by Aulicino-Nguyen-Wright every orbit closure in H^{hyp}(4) has dimension either 2 or 6). I mentioned this a couple weeks ago to Julian and offered to have my students document the surfaces and send them to you. Below is their code. There are two classes of surfaces that they found that have this property, (1) unfoldings of (1/6, 5/6, 1/2, 1/2)*pi trapezoids and (2) convex 12-gons with 60 degree rotational symmetry about their midpoint. In both cases, only a countable collection of periods will produce examples.

The First Example

sage: from flatsurf import EquiangularPolygons
sage: from flatsurf import similarity_surfaces
sage: from flatsurf import GL2ROrbitClosure

sage: P = EquiangularPolygons(3, 1, 5, 3)

sage: a = 1
sage: r = P.base_ring()
sage: b = -1/2
sage: c = r.gens()[0]
sage: ell = a + b * c
sage: poly=P(ell + c, 1)

sage: B = similarity_surfaces.billiard(poly)
sage: S = B.minimal_cover('translation').canonicalize().erase_marked_points()
sage: O = GL2ROrbitClosure(S)

We can also invoke flatsurvey with this surface directly:

python -m flatsurvey.worker orbit-closure pickle --base64 eJydVod/FEUUDqEvSEBAsIL9QDkTioiVSABD5MQH6FniOrc3udnclvu2hESMYtlbYsXeO/bee//HfFsClxAQ/d3vtzdv3vu+ee/NezNzoN0YsETgh96QHCny34AwpF90aq7jayX+amjrx7SC4YuaLHqmU/OLphPImvQ0W9SlPi6gvTytra1tHaZHmEGYqTK5C7MizCbMyeUNmBtBI8xT7Yot5xNOkeXZrJBrhBOYBha0ruSEdkV6+oApreoEQZeWtKUT6AhF1RMM1HQ99aeUWm1LjLZOtunS0JFH4gdeaAShJ4sccOB6I1pNOtIzDT2X9dBpmEbdkhoWHhdjuW49bOg1y60IS8Oi8iaO5GT8L7a4qQ9JzzddZy1OjbCYsKRvbt/0JpZOyHniv+sIK4NrlIspgYbTVhGWtZo3XGvEcW1TWC1D/SiJxdum7TquBssLJ8HGOt3gOknT4nraeMb0o8TENhpOL6hl6e4P44wIZ5bGApxFOLsf50wZY1ZYRySsKLczds06rIxwLuE8tSIl68T5ES4gXKhWKC6yiwgXyzGmLhBWpQYGVke4ZPLeVUccYfM+G5bwfW2ihEsL5ZWM7LZqsuIJ0yCZ51jfZwZKNwQXO2881rT6DVSEpx2L0VA0dL0SmlZgOrrOFRaIIOBWuWyyT6FjIuSQZcOTPpdsGjrn05PV0OAK7MwA+fImN+i4J9oO13S2jAvoygxt0zfYxLK05KPbMlAuu7NWTf4dS2yLmi18XThVXVSrZmAOST2b03amf91OtTtXZBMa1q0axfoYGwiXl+dx+rJkiWHTtbGxPJ9nekwO1qyECQpXxNhEuFJtLC9Ocp2Tdfu+a5gitbgqxtWEayZZbHFtOwwyi2tjXEfYzBYLWiz2OmYgLHTHuJ6whZWJN63EPTG2EraxpqMF1uskLSixPcYNhF7WzmJtTrYjRh/hRp6ckwYyZCbNip0xSoSb8jVaXdsV42YCTZldXwZ+UkXabh5o2M2J2xNjL+GWnL/XGTB5XYlbY5QJtzVxe4Q7RnFnjH7CXWkyG8JLjrW0ZKE3cTdBNFEplVQxgEGo8mkg/6VANQxMYVHaOhxIJ4kvPzs11E5AtD05MkXS+lBqYUEtUUu509XygjrS8SMwIwwmHV8nWP2wC+pIOzsRXEKD25cbGQQva2SfEKSNHBKGUhKBfRGGS2pfaawUYGQU95RnJv2tpFHH/jE/wL2E0aniIdflGO47QQxHz6o9njDqyU12fxIB+3qgxdcHIjxIeCjz9WFClPnaJMSprwcJYxEeITw64UTjTOt2Y8Dk28lgIZC6nmS/ly9Nbyg/Jsavqfwa4Evqsf/MMQ7u1PB43+axJp4gPDkVizeJJbuHWuCHTgY1ec2neM3yDM4UlXr24ukYzxCeLS9K7v+iUx1E0GWsb4jBQXdzJ57rWxnjecIL6pBqxfXgxRgvEV6eAldn3CsJ7lXCazFeJ7zRNy3Gm4S3mnib8I7qKKjR//tyONGTQcNhfqnwnr9LeI9HvOfvEz7IRh8SPgrwMeGTJj4lfBbhc8IXTXypVqeV+tUovlb7D3J9fkP4Vh3O30Br8V2E7wk/ZCw/En7iEc/9TPglwK+E3zLN74Q/mvgzxl+Ev4v/AKxggFs=

Strangely, not even --deform seems to help here. However, just invoking flatsurvey with ngon -a 3 -a 1 -a 3 -a 5 works as expected with both e-antic and exact-real lengths. (Update: changing --deform to deform with the sum of the third and the fourth tangent vector, we find the full orbit closure.)

The Second Example

sage: from flatsurf import translation_surfaces, polygons, similarity_surfaces, GL2ROrbitClosure, EquiangularPolygons
sage: from flatsurf.geometry.translation_surface import TranslationSurface
sage: import flatsurf
sage: r = AA(3).sqrt()
sage: K, a, phi = r.as_number_field_element(embedded=True)
sage: M = matrix([[1/2, -a/2], [a/2, 1/2]])
sage: p = vector((13/171 + 42/85*a, 42/85 - 13/171*a))
sage: vertices = [ (1, 0), p, (1/2, 1/2*a), M*p, (-1/2, 1/2*a), M*M*p, (-1,0), M*M*M*p, (-1/2, -1/2*a), M*M*M*M*p, (1/2, -1/2*a), M*M*M*M*M*p, ]
sage: P = polygons(vertices=vertices)
sage: gluings = [((0, 0), (0, 6)), ((0, 1), (0, 7)), ((0, 2), (0, 8)), ((0, 3), (0, 9)), ((0, 4), (0, 10)), ((0, 5), (0, 11))]
sage: S = TranslationSurface(flatsurf.geometry.surface.surface_list_from_polygons_and_gluings([P], gluings))
sage: O = GL2ROrbitClosure(S.erase_marked_points())

We can also invoke flatsurvey with this surface directly:

python -m flatsurvey.worker orbit-closure pickle --base64 eJydWgeYE9Ua3Z1Qh14VRekQwF13F5amKEgTVla8gMayjpNkdidsyv43k5VVV0FMwtq72HvvvYu994K99957e/eemWQym+jjvY/vS/4759y/zbl/JhvWKKHGqG4lU7zVaKsUb416yEhWWlyPJ8X1SCKuORfVFe615c4lKpu4lsrbSQkMLysr04oZWm43+XJxGiubjETMsHjbZkfpIqJ0baduAUVGSVL3Er5y+3OBo5GkpVIPsbNnO6l+e2sL9Wqg3v4G6uMPJfUmozJp8VTISnGjMtwW12ORkBaK6smk6l1RX39gktg/LxFvNVYvS0TbmhLxpHZgxDK1kG4ZTQmRgBE1YkbcsrdQvxIpttgbVY8blfqHNC2YikStSFzT1CbD0i2LqzSgc4apeIRShsaNFm4kRST0SE3FuRFOyS4NtDc4CUXEXUwaVlImqC4XhkqDJrbT4CwNYTQ00EeU4814iwxtyWhYhraqr6+3aGtGw0XztjEHbm4lIsK2nXMWt8ISzRFVxQ0u+umstVS8JRJqjoqsRxTdidyeaCLRnGrRmqKJoB5VaWRgpsgZXB6JNyUr46lY0OBaY8SIhr2LeiwWSltrNXhS9KmGRqVpNKMxdT3rfBka60S1PXG0Uo/a21XmLOFApXETGY0vpMvq44lYRI8WmJrrJBqJW+qyf0Rogn8zvAlMC4mmoi0JruY6prmOmeCo5Peb4wPlojWraWKaJtV3WDSZ0XYNVFGyRjWmNxv5lFSqxMmomELbp6mKUbVZCWdVVJOmKYymOutqqk3TNEbTjQ4RYAajmbis06w07WCK8zFSrOZGm4wg1yMhZjjd854R2rEwI6KgztXiPSrNNgeYxWrOeVGXJCLxebkF7WQTY5FkSFCiUVW+aEKnZkK42tns/K/YcUxviulJTY+HNT0cjliRVkOzr6lL8TY3Hp7rAPYFleaIszQ3S7swmhfoJUcLCtVXRxIxmh/oLa7MFwOIR4IpuYsWZGkho0Xm/MAg2SfH2dxkMhGK6GDsmqXFjJZ0YsxLxGIpy2bUZWk3RksFo28BY2U8YulRqs/S7oyWCVBmU+h4jywxRssF0q9g2+K4PBgGrcjSSkZ7CrSbQB1ne2UpwGhvcbEHCmmNyCNE+2RpX0b7OTEKU2vI0v6MNNHdoc6mxfHGiHBm0AFZ0hkFMxRKU7idjCw1MmpCh1p07o4fM0MRRqsy1Fxfb862KMooJg5e/L8oRqVECUb9gtWWEZdJL7BnnEot/+JokZxOujxlROYIvznGHCsOlTnBb+YPVxvxNCXl4bIYpRqo1W/mT86BaVrNqM2sNMWZOYjRwcISp+UQRu04LYcyOswU52RNvTmrvkPM1rXtdHigq9gcMo1QM63rSFp0BKN0qUpYIiGyz/xL9u5AEJ+doWZDVJGVuYss1xdk2ZGmIxkdZWd5NKNj7CyPZXQcsjye0QlpOpHRSZ6xIXqsxVoaI6qmhcTCEh/psu+L45bBW50T6zQ5N2urVTr5f/aR21yl0il1czoydCqj00p54Z282MO+YPuGzdnVOebpImagi+gUq5+/ks7I0pmMzgoMkJOvMh5eRVZ1aGqLvmpVYk4VnV03MkvnMDrX3GAW7ptP52XpfEYXlNjXLPZdKPddxOjiLF3C6NK68ixdxujyDF3B6MrQ5nyyabmPbErpYTnDQ6IsDPSCj7wFnTniflzlN9P/b4R/c63S1YVuxceb0SQEiJRyC7pGKu5aRteZ10jFXc/oBtu6kdFNFt3M6JYM3crotjTdzuiODN3pnJO72uluc916cTruYbQxTfe2031Zup/RA+30oP1E10oPOfM/EU5FxTBv5IaY3ljkarHTWSiApbieqyL3UBIWo8LQWkWbHvbL4z8yoArXLp8eSdOjjB6TU2FjnSIze7ydnrDoSUZPNdDTflO0d6N5tYlCn2H0rG09x+h5u9AXGL1o0UuMNpmbDOHBopcZvWKKcGL/q+5+jBqi19L0OqM3bC9vMnpLILLa2iC9naZ3GL1r0XuM3nf3SbSmmT5I04eMPrI3fszokxwUpU/T9Bmjzy36gtGXdg5fMfrayeGbghykmiuqa0z6Nk3fMfo+d2l6lUE/pOlHRj+JSz75ADltOv2cpl8Y/WrRb4x+7+RE7vgjTX8y+svZId3+neZlok7Gy8Wr64krYpnmPkBdxKvFu8LuJl6RMO+OdQ/xmuU9xWsyw1XxFmzgvcSbv85XV57hvYUpHvKE1Uda5XVKhveVLowG3k/STPFcy/vL2A+08wHy/SG7C3wg4Nw94oMQbrBk2PgQ4J6mT2vlQ5H3FiBviZJE9/kwrLeyS5RMPca3BnM4kG1Q4bawR0iWx23tDD4S5FEgjHY7VVET5WMAjQU0zo1Qq/PxQCYA8SPCRNiT8j2cjPV2blEV3qKcu8Qr4Wl7sKvc8OKW8mpANYCmeO/hVEC1gKYh/nTYMzwV5hzNBHsWGDvYjnLi4zsCmw1sJ2+QnQHNATQXQXaBPS9f5HysF0AoC22hLLKFsiuEokh5LJbyUKQ8lkirTFp1jlB2ywtlqSOU+kKh7O4VyjKE28PtKSvd0+VIfAXYK7093RPQXoAC3nL3BrQPoH1R7n6wG0r2dH+wNTAO6NRTHVgQWMgbJAzIANSIIE2wzXxPI1ivcots9haJKE3BmTwKVzHQ4wVRqpI8AagFELlQMmRwDigJyEICKditnioRRHo6EPTVoLS5nkLVtfwgQAcDOsQbpB3QoYAOQ5A1sNfmqzwc63VQzhG2ctK2cjJQTre6sgzP2oNFWOttS6ipw1HOkXnlHOUo5+hC5RzjVc6xCHec29TjSzQ1PCXGT0DmJ4J+klc6JwM6BdCp3rt6GqANgE5HvWfAPrOkdM4C+2wwzukknXOBnQfsfG+QCwBdCOgiBLkY9iX5pl6K9WVulZeXqLJxRoJfAVdXgn6Vt8qrAV0D6FpvAtcBuh7QDUjgRtg3FUtHeroZ9FtAubVTmbcBux3YHd4odwK6C9DdiHIP7I35Mu/F+j5o535bOw/Y2nkQ2ukiFfOQPWuE9bC0usip84ijnUfz2nnM0c7jhdp5wqudJxHuKberTxdPHSmdZ5D4s2A/V1Cv7MXzwF4A9qK33pcAbQL0Mup9Bfarpbv6Guivg/KG60k29U1AbwF62xvkHUDvAnoPQd6H/UG+qR9i/ZFb5cfFVUrpfAJPn4L9WacqPwf2BbAvvQl8BehrQN8ggW9hf1fyhHwP9g9g/Ogt8idAPwP6xRvjV0C/AfodMf6A/We+yL+w/hvKKVOgnHIFylEU+8FG6MUnzLoe0uoiLZ9UTlfFVk43Jaec7oqtnB5KgXJ6Kh7lqIoM10vJ97S3UtRTOUn7KDLxvmD3U9yeygHcH9gAYAMVz5QdBGgwoCGKrHco7C2UkqN8S9CHgbKV60l+lGwNaDigbbxBtgU0AtBIBBkFe7SSa+oYrMe6VY4rrlLeufHwNAFsv+JVzkRgk4BNVjx3dTtAFYAqkcD2sKuUUsqpBrsGjCmKRzlTAdUCmuaNMR3QDEAzEWMW7B3yRe6I9WxFKmcnWzk728qZA+V0lyqZK/XSXSpnF2l1k9fmOcqZn1fOAkc5CwuVs8irnF0RbrHb0yVK8SSXRdUh891AX9qpqfXAdge2zFvwHoAYoOUoeAXslcXSwVMT6HuBEvB2dW9A+wDa1xtkP0ANgPZHEA32Afmu6lgH3TJD/1BmGK4M0BvdKDK3JkAmoIg3gVWAmgFFkUAMdrx0lQnQW0Chgl7KBDiwJDDLGyUFqBXQgYiyGnZbvsyDsD4Y4jnEFk+7LZ5DFfsxWUjmMHvsCMmskVZXaa11xHN4XjzrHPEcUSietFc8GYTLul1drxR9n5oS5x3I+0iQj1Jy36eOxvoYpfD71LFgHgfkeFR4AuwTi45ghfhCdRLYJ4NxiutHfJ86FchpQDa4iPg+dTqQM4CciQhnwT4738NzsD7XLeq84ikjZ+n58HQB2BcW3EQ5AS8CdjGwSxTPmLsU0GWALkcCV8C+slgq0tNVoF8NyjWuJzlLrwV0HaDrvUFuAHQjoJsQ5GbYt+SrvBXr26CU222l3GEr5U4opat8BL5LwTdvoZm7baUI6x5HKRvzSrnXUcp9hUq536uUBxDuQbepDxUrpYL4w8j7EZAfzSvlMawfL7iPQf4EmE8CeQoVPg37mWKl1DTzZ8F+Dozn835fwPpFj3JeAnMTkJfh9xXYr+Y79xrWr7ulvOEpRTp+E5S3Chw387fh+B0g73pCvgfkfSAfIOSHsD8qLEW6/RiXP3E3i459is2fAfnc06EvgHwJ5Cu4/Rr2N/lKvsX6O2jge1sDP9ga+FGxH2+FBn6yNSBmxM8KPmrEtV8cDfya18BvjgZ+L9TAH14N/Ilwf7mN+1spPYPLfDLzcp+kKz7PDPYB6gKoqwvJ6dgNUHdAPXyy3p6wVV/JGdwL9N6g9PF5Z3BfYP2A9fdGGQBoIKBBiDIY9hBfrqtDsd7Cly9zS1/R/KipreHD4GkrsLcuCCIO/XBA2wDa1ht/BKCRgEYh/mjYY3yddS8djQV7HBjjC4qU8ScA8wOb6A0yCdBkQNshSAXsynyR22Nd5ZPSqfZBOjU+SGeKz35KETKZ6sM3I2HV+vCRI6xp0oVhBAbKv/Vyo9HgRjxk5P6zAJ8u4Hr8riXAWKLVCGtRPWhEk3yGQBr4TPGKn7q1eCqmOb9aJ/ks6V/FX3m1oJ408Gsr30FWtdH+NQ9X4YrviLQC3eVl+zctPltcWo+fuTT5E1gwavCdxKUO/IamhfSQafCdxYV2Pke8poJJ8a/yP1xd5zA=

The same deformation approach works here. However, we see very bad coefficient blow up since we deform with 3.7092061506874214e-68 * tangent vector.

videlec commented 3 years ago

What is a? It is used in a + b + c but not defined.

saraedum commented 3 years ago

What is a? It is used in a + b + c but not defined.

Indeed, a=1. Fixed.

saraedum commented 2 years ago

Playing a bit with the vectors from the tangent space, I found one for the (3, 1, 3, 5) example that lets us find the orbit closure once we deform.

Before, the approach was simply: Once the tangent space is at least three-dimensional, deform with a basis vector from the tangent space, scaled such that the coefficients stay reasonable.

Now, I take a linear combination of some vectors from the tangent space. That seems to do the trick here.

See also https://github.com/flatsurf/flatsurvey/issues/3.

videlec commented 2 years ago

EDIT: Your previous comment shows that we do not have a counterexample to Question B2 in the DRW article.

Without deformations, are there a lot of "unknown" components that forbid us to get more dimension? Or does it look like a counterexample to the question B1 of the DRW article?

saraedum commented 2 years ago

Without deformations, are there a lot of "unknown" components that forbid us to get more dimension? Or does it look like a counterexample to the question B1 of the DRW article?

There are very few unknowns. I think I phrased Question B1 in an unfortunate way. We should rewrite it so that essentially says "all directions on all deformations".

saraedum commented 2 years ago

@videlec flatsurvey can solve both cases now. However, I had to guess a good deformation for it to work it seems.