Important premise: We assume in this section, that all considered origamis have no nontrivial translations. This is equivalent to that the corresponding torus cover has no nontrivial deck transformations.
This section contains functions, which compute a basis of the homology H = H_1( mathcalO, Z) of an origami mathcalO with d squares and the action of an affine transformation f of mathcalO on H. The later is the map f_∗: H -> H. We consider the cellular homology with the squares Q_1, dots Q_d of the origami as 2-cells. We call σ_i the bottom edge of the square Q_i and ξ_i the left edge of the square Q_i. Then we can represent an element of H as a formal linear combination of the σ 's and the ξ 's. In GAP we represent elements of H as elements of Z^2d in the following way: σ_i is represented by e_i and ξ_i is represented by e_i + d, where e_i is the i-th. standard basis vector of Z^2d. Formal sums of elements in H are represented by the appropriate sums in Z^2d. One has to keep in mind that this description is not unique. More precisely the homology H is isomorphic to a subquotient of Z^2d.
The homology has a splitting as sum of the tautological part H^T and the non-tautological part H^NT which is equivalent under the action of the affine group Aff(mathcalO) of the origami mathcalO. I.e. H = H^T ⊕ H^NT with H^T and H^NT both invariant under the action of Aff(mathcalO). The sum is orthogonal with respect to the intersection form, the dimension of H^T is 2 and the dimension of H^NT is 2g-2. In the part of the package described in this chapter we provide functions which compute the action of the affine group on the homology H and on the non-tautological part H^NT and thus obtain the shadow Veech group. For more information on this topic see for example [BKK+22].
‣ HomologyOrigami ( O ) | ( operation ) |
Returns: A list of vectors in Z^2d
This function computes a basis of the homology of O
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> HomologyOrigami(O); [ [ 0, 0, 1, 1, 1, -1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, -2, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ] ]
‣ NonTautPartOfHomologyOrigami ( O, H ) | ( operation ) |
Returns: A list of vectors in Z^2d
This function computes a basis of the non-tautological part of the homology H of O.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> NonTautPartOfHomologyOrigami(O, HomologyOrigami( O )); [ [ 0, 0, 1, 1, 1, -1, 0, -2, 1, 0, 2, -1, 0, 0, -1, -1 ], [ 0, 0, 0, 0, 0, 0, 1, -1, 0, -1, 1, 0, 0, 0, -2, 2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, -1 ] ]
‣ HomologyToString ( H1 ) | ( function ) |
Returns: a string
This function gives a string representation of the homology vector H1 in the homology of an origami as a formal linear combination of the σ_i 's (resp. s) and the ξ_i 's (resp. z).
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> H1 := HomologyOrigami(O)[1]; [ 0, 0, 1, 1, 1, -1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0 ] gap> HomologyToString( H1 ); "1s_3 + 1s_4 + 1s_5 - 1s_6 + 1z_1 - 1z_4 - 1z_7"
‣ ActionOfMatrixOnHom ( O, A ) | ( operation ) |
Returns: a matrix in Sp_2g(Z)
This function computes the action of an affine homeomorphism with derivative A on the homology of O w.r.t the basis of the homology computed with HomologyOrigami
.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> ActionOfMatrixOnHom(O, [[1,10],[0,1]]); [ [ 1, -2, -2, 2, 0, 0 ], [ -5, -11, -2, 2, 5, 0 ], [ -5, -14, -3, 4, 5, 10 ], [ -10, -26, -6, 7, 10, 10 ], [ -10, -26, -6, 6, 11, 0 ], [ 0, 0, 0, 0, 0, 1 ] ]
‣ ActionOfMatrixOnHom ( O, A, H ) | ( operation ) |
Returns: a matrix in Sp_2g(Z)
In this method you can choose a basis H of the homology.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> H := [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ]; [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ] gap> ActionOfMatrixOnHom(O, [[1,10],[0,1]], H); [ [ 1, 0, 0, 2, 2, 2 ], [ 0, 1, 0, 5, 5, 0 ], [ 0, 0, 1, 10, 0, 0 ], [ 0, 0, 0, 1, 0, 0 ], [ 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 0, 1 ] ]
‣ ActionOfMatrixOnNonTaut ( O, A ) | ( operation ) |
Returns: a matrix in Sp_2g-2(Z)
This function computes the action of an affine homeomorphism with derivative A on the non-tautological part of the homology of O w.r.t the basis of the homology computed with HomologyOrigami
and the basis of the non-tautological part of the homology is computed with NonTautPartOfHomologyOrigami
.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> ActionOfMatrixOnNonTaut(O, [[1,10],[0,1]]); [ [ 5, 0, 2, 0 ], [ -1, -9, 2, 5 ], [ -8, 0, -3, 0 ], [ 2, -20, 6, 11 ] ]
‣ ActionOfMatrixOnNonTaut ( O, A, H ) | ( operation ) |
Returns: a matrix in Sp_2g-2(Z)
In this method you can choose in addition a basis H of the homology.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> H := [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ]; [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ] gap> ActionOfMatrixOnNonTaut(O, [[1,10],[0,1]], H); [ [ 1, 0, -4, -2 ], [ 0, 1, 5, 5 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]
‣ ActionOfMatrixOnNonTaut ( O, A, NT, H ) | ( operation ) |
Returns: a matrix in Sp_2g-2(Z)
In this method you can choose in addition a basis H of the homology as well as a basis NT of the non-tautological part of the homology.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> H := [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ]; [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ] gap> ActionOfMatrixOnNonTaut(O, [[1,10],[0,1]], >NonTautPartOfHomologyOrigami(O, H), H); [ [ 1, 0, -4, -2 ], [ 0, 1, 5, 5 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ]
‣ ShadowVeechGroup ( O ) | ( operation ) |
Returns: a matrix group S ⊆ Sp_2g-2(Z)
This function computes the image of the action of the Veech group on the non-tautological part of the homology of O . If A is in the Veech group of O and f is an affine transformation with derivative A then f_∗_|H^NT} : H^NT -> H^NT is in the Shadow Veech group of O , encoded as matrix. The basis of the homology is computed with HomologyOrigami
and the basis of the non-tautological part is computed with NonTautPartOfHomologyOrigami
.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> ShadowVeechGroup(O); #I RRS defined 152 primary and 196 secondary subgroup generators <matrix group with 152 generators>
‣ ShadowVeechGroup ( O, H ) | ( operation ) |
Returns: a matrix group S ⊆ Sp_2g-2(Z)
In this method you can choose in addition a basis H of the homology, where the basis of the non-tautological part is computed with NonTautPartOfHomologyOrigami
.
gap> O := Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7)); Origami((1,2,3,4,5)(6,7), (1,6,8)(2,7), 8) gap> H := [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], >[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ]; [ [ 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] ] gap> ShadowVeechGroup(O, H); #I RRS defined 152 primary and 196 secondary subgroup generators <matrix group with 152 generators>
generated by GAPDoc2HTML