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( \mathcal{O}, \mathbb{Z}) \) of an origami \(\mathcal{O} \) with \(d\) squares and the action of an affine transformation \(f\) of \( \mathcal{O}\) on \( H \). The later is the map \(f_\ast\colon H \to H \). We consider the cellular homology with the squares \( Q_1, \dots Q_d \) of the origami as 2-cells. We call \( \sigma_i \) the bottom edge of the square \(Q_i\) and \( \xi_i\) the left edge of the square \( Q_i \). Then we can represent an element of \(H \) as a formal linear combination of the \(\sigma 's \) and the \(\xi 's \). In GAP we represent elements of \( H \) as elements of \( \mathbb{Z}^{2d} \) in the following way: \(\sigma_i \) is represented by \( e_i \) and \( \xi_i \) is represented by \( e_{i + d} \), where \( e_i \) is the i-th. standard basis vector of \( \mathbb{Z}^{2d}\). Formal sums of elements in \( H \) are represented by the appropriate sums in \( \mathbb{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 \(\mathbb{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\((\mathcal{O})\) of the origami \( \mathcal{O}\). I.e. \( H = H^{T} \oplus H^{NT} \) with \( H^{T} \) and \( H^{NT} \) both invariant under the action of Aff\((\mathcal{O})\). 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 \(\mathbb{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 \(\mathbb{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 \( \sigma_i 's\) (resp. s) and the \( \xi_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}(\mathbb{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}(\mathbb{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}(\mathbb{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}(\mathbb{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}(\mathbb{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 \subseteq Sp_{2g-2}(\mathbb{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_\ast}_{|H^{NT}} \colon {H^{NT} \to {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 \subseteq Sp_{2g-2}(\mathbb{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