Farey Symbol for arithmetic subgroups of {\rm PSL}_2(\ZZ)

Farey Symbol for arithmetic subgroups of {\rm PSL}_2(\ZZ)

AUTHORS:

  • Hartmut Monien (08 - 2011)

based on the KFarey package by Chris Kurth. Implemented as C++ module for speed.

class sage.modular.arithgroup.farey_symbol.Farey

Bases: object

A class for calculating Farey symbols of arithmetics subgroups of {\rm PSL}_2(\ZZ). The arithmetic subgroup can be either any of the congruence subgroups implemented in Sage, i.e. Gamma, Gamma0, Gamma1 and GammaH or a subgroup of {\rm PSL}_2(\ZZ) which is given by a user written helper class defining membership in that group.

REFERENCES:

INPUTS:

  • G - an arithmetic subgroup of {\rm PSL}_2(\ZZ)

EXAMPLES:

Create a Farey symbol for the group \Gamma_0(11):

sage: F = FareySymbol(Gamma0(11)); F
FareySymbol(Congruence Subgroup Gamma0(11))

Calculate the generators:

sage: F.generators()
[
[1 1]  [ 7 -2]  [ 8 -3]  [-1  0]
[0 1], [11 -3], [11 -4], [ 0 -1]
]

Pickling the FareySymbol and recovering it:

sage: F == loads(dumps(F))
True

Calculate the index of \Gamma_H(33, [2, 5]) in {\rm PSL}_2(\ZZ) via FareySymbol:

sage: FareySymbol(GammaH(33, [2, 5])).index()
48

Calculate the generators of \Gamma_1(4):

sage: FareySymbol(Gamma1(4)).generators()
[
[1 1]  [-3  1]
[0 1], [-4  1]
]

Calculate the generators of the example of an index 10 arithmetic subgroup given by Tim Hsu:

sage: from sage.modular.arithgroup.arithgroup_perm import HsuExample10
sage: FareySymbol(HsuExample10()).generators()
[
[1 2]  [-2  1]  [ 4 -3]
[0 1], [-7  3], [ 3 -2]
]

Calculate the generators of the group \Gamma' =
\Gamma_0(8)\cap\Gamma_1(4) using a helper class to define group membership:

sage: class GPrime:
...     def __contains__(self, M):
...         return M in Gamma0(8) and M in Gamma1(4)
...

sage: FareySymbol(GPrime()).generators()
[
[1 1]  [ 5 -1]  [ 5 -2]
[0 1], [16 -3], [ 8 -3]
]

Calculate cusps of arithmetic subgroup defined via permutation group:

sage: L = SymmetricGroup(4)('(1, 2, 3)')

sage: R = SymmetricGroup(4)('(1, 2, 4)')

sage: FareySymbol(ArithmeticSubgroup_Permutation(L, R)).cusps()
[2, Infinity]

Calculate the left coset representation of \Gamma_H(8, [3]):

sage: FareySymbol(GammaH(8, [3])).coset_reps()
[
[1 0]  [ 4 -1]  [ 3 -1]  [ 2 -1]  [ 1 -1]  [ 3 -1]  [ 2 -1]  [-1  0]
[0 1], [ 1  0], [ 1  0], [ 1  0], [ 1  0], [ 4 -1], [ 3 -1], [ 3 -1],
[ 1 -1]  [-1  0]  [ 0 -1]  [-1  0]
[ 2 -1], [ 2 -1], [ 1 -1], [ 1 -1]
]
coset_reps()

Left coset of the arithmetic group of the FareySymbol.

EXAMPLES:

Calculate the left coset of \Gamma_0(6):

sage: FareySymbol(Gamma0(6)).coset_reps()
[
[1 0]  [ 3 -1]  [ 2 -1]  [ 1 -1]  [ 2 -1]  [ 3 -2]  [ 1 -1]  [-1  0]
[0 1], [ 1  0], [ 1  0], [ 1  0], [ 3 -1], [ 2 -1], [ 2 -1], [ 2 -1],
[ 1 -1]  [ 0 -1]  [-1  0]  [-2  1]
[ 3 -2], [ 1 -1], [ 1 -1], [ 1 -1]
]
cusps()

Cusps of the FareySymbol.

EXAMPLES:

sage: FareySymbol(Gamma0(6)).cusps()
[0, 1/3, 1/2, Infinity]
fractions()

Fractions of the FareySymbol.

EXAMPLES:

sage: FareySymbol(Gamma(4)).fractions()
[0, 1/2, 1, 3/2, 2, 5/2, 3, 7/2, 4]
fundamental_domain(show_pairing=True, show_tesselation=False, rgbcolor='lightgray', thickness=1, zorder=2, alpha=1, linestyle='solid', fill=True, **options)

Plot a fundamental domain of an arithmetic subgroup of {\rm PSL}_2(\ZZ) corresponding to the Farey symbol.

OPTIONS:

  • fill - boolean (default True) fill the fundamental domain
  • linestyle - string (default: ‘solid’) The style of the line, which is one of ‘dashed’, ‘dotted’, ‘solid’, ‘dashdot’, or ‘–’, ‘:’, ‘-‘, ‘-.’, respectively
  • rgbcolor - (default: ‘lightgray’) fill color
  • show_pairing - boolean (default: True) flag for pairing
  • show_tesselation - boolean (default: False) flag for the hyperbolic tesselation
  • thickness - float (default: 1) the thickness of the line

EXAMPLES:

For example to plot the fundamental domain of \Gamma_0(11) with pairings use the following command:

sage: FareySymbol(Gamma0(11)).fundamental_domain()

indicating that side 1 is paired with side 3 and side 2 is paired with side 4, see also paired_sides().

To plot the fundamental domain of \Gamma(3) without pairings use the following command:

sage: FareySymbol(Gamma(3)).fundamental_domain(show_pairing=False)

Plot the fundamental domain of \Gamma_0(23) showing the left coset representatives:

sage: FareySymbol(Gamma0(23)).fundamental_domain(show_tesselation=True)

The same as above but with a custom linestyle:

sage: FareySymbol(Gamma0(23)).fundamental_domain(show_tesselation=True, linestyle=':', thickness='2')
generators()

Minmal set of generators of the group of the FareySymbol.

EXAMPLES:

Calculate the generators of \Gamma_0(6):

sage: FareySymbol(Gamma0(6)).generators()
[
[1 1]  [ 5 -1]  [ 7 -3]  [-1  0]
[0 1], [ 6 -1], [12 -5], [ 0 -1]
]

Calculate the generators of {\rm SL}_2(\ZZ):

sage: FareySymbol(SL2Z).generators()
[
[ 0 -1]  [ 0 -1]
[ 1  0], [ 1 -1]
]

The unique index 2 even subgroup and index 4 odd subgroup each get handled correctly:

sage: FareySymbol(ArithmeticSubgroup_Permutation(S2="(1,2)", S3="()")).generators()
[
[ 0 -1]  [-1  1]
[ 1  1], [-1  0]
]
sage: FareySymbol(ArithmeticSubgroup_Permutation(S2="(1,2, 3, 4)", S3="(1,3)(2,4)")).generators()
[
[ 0  1]  [-1  1]
[-1 -1], [-1  0]
]
genus()

Return the genus of the arithmetic group of the FareySymbol.

EXAMPLES:

sage: [FareySymbol(Gamma0(n)).genus() for n in range(16, 32)]
[0, 1, 0, 1, 1, 1, 2, 2, 1, 0, 2, 1, 2, 2, 3, 2]
index()

Return the index of the arithmetic group of the FareySymbol in {\rm PSL}_2(\ZZ).

EXAMPLES:

sage: [FareySymbol(Gamma0(n)).index() for n in range(1, 16)]
[1, 3, 4, 6, 6, 12, 8, 12, 12, 18, 12, 24, 14, 24, 24]
level()

Return the level of the arithmetic group of the FareySymbol.

EXAMPLES:

sage: [FareySymbol(Gamma0(n)).level() for n in range(1, 16)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
nu2()

Return the number of elliptic points of order two.

EXAMPLES:

sage: [FareySymbol(Gamma0(n)).nu2() for n in range(1, 16)]
[1, 1, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0]
nu3()

Return the number of elliptic points of order three.

EXAMPLES:

sage: [FareySymbol(Gamma0(n)).nu3() for n in range(1, 16)]
[1, 0, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0]
paired_sides()

Pairs of index of the sides of the fundamental domain of the Farey symbol of the arithmetic group. The sides of the hyperbolic polygon are numbered 0, 1, ... from left to right.

../../../_images/pairing.png

EXAMPLES:

sage: FareySymbol(Gamma0(11)).paired_sides()
[(0, 5), (1, 3), (2, 4)]

indicating that the side 0 is paired with 5, 1 with 3 and 2 with 4.

pairing_matrices()

Pairing matrices of the sides of the fundamental domain. The sides of the hyperbolic polygon are numbered 0, 1, ... from left to right.

EXAMPLES:

sage: FareySymbol(Gamma0(6)).pairing_matrices()
[
[1 1]  [ 5 -1]  [ 7 -3]  [ 5 -3]  [ 1 -1]  [-1  1]
[0 1], [ 6 -1], [12 -5], [12 -7], [ 6 -5], [ 0 -1]
]
pairings()

Pairings of the sides of the fundamental domain of the Farey symbol of the arithmetic group. The sides of the hyperbolic polygon are numbered 0, 1, ... from left to right. Conventions: even pairings are denoted by -2, odd pairings by -3 while free pairings are denoted by an integer number greater than zero.

EXAMPLES:

Odd pairings:

sage: FareySymbol(Gamma0(7)).pairings()
[1, -3, -3, 1]

Even and odd pairings:

FareySymbol(Gamma0(13)).pairings()
[1, -3, -2, -2, -3, 1]

Only free pairings:

sage: FareySymbol(Gamma0(23)).pairings()
[1, 2, 3, 5, 3, 4, 2, 4, 5, 1]

Previous topic

The modular group {\rm SL}_2(\ZZ)

Next topic

Cython helper functions for congruence subgroups

This Page