Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Apply veech group elements to homology #225

Closed
saraedum opened this issue Apr 6, 2023 · 3 comments · Fixed by #295
Closed

Apply veech group elements to homology #225

saraedum opened this issue Apr 6, 2023 · 3 comments · Fixed by #295
Assignees

Comments

@saraedum
Copy link
Member

saraedum commented Apr 6, 2023

We would like to make this interface work (bringing together #211, #163, flatsurf/flatsurf#308, #213 for the homology bits)

S = ...
M = matrix([[1, 2], [0, 1]])
H = SimplicialHomology(S)
automorphism = S.apply_automorphism(M)
# shortcut for:
# deformation = S.apply_matrix(M)
# undeformation = deformation.codomain().isomorphism(S) # what if this is not unique? Just pick one (with a keyword argument to return all or fail)
# return automorphism = undeformation * deformation

M = H.matrix(automorphism)
# shortcut for:
# for γ in H.gens():
#    γγ = automorphism(γ)
#    and decompose into a matrix

One application could be something like this:

MatrixGroup([SimplicialHomology(S).matrix(S.automorphism(g))
             for g in S.veech_group().gens()]).change_ring(GF(3)).order()
@saraedum saraedum self-assigned this Apr 6, 2023
@saraedum
Copy link
Member Author

saraedum commented Apr 6, 2023

cc @sfreedman67

@videlec
Copy link
Collaborator

videlec commented Apr 26, 2023

Elements of the Veech group (aka matrices) are not maps between surfaces. As a user interface, I would rather propose something like

S = ...
A = S.affine_automorphism_group()
M = matrix([[1, 2], [0, 1]])
f = A.derivative().section()(M)
H = SimplicialHomology(S)
Mhom = H.hom(f).matrix()

Here

  • A.derivative() is the morphism from the affine group to GL(2,R) (whose image is the Veech group and whose kernel is the group of translation automorphisms)
  • A.derivative().section() is choosing for you an automorphism representative with given derivative (if it exists)

@saraedum
Copy link
Member Author

saraedum commented Jun 5, 2023

@videlec that makes sense. I'll make sure to change that once #211 is in.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Development

Successfully merging a pull request may close this issue.

2 participants