# Congruence Subgroups of ${\operatorname{PSL}}_2({\mathbb{R}})$

- [Introduction](introduction.md)

  - [`Example: Basic Example`](introduction.md#example-ex-97df07)

- [Congruence Subgroups](Congruence-subgroups.md)

  - [Creation of Subgroups of ${\operatorname{PSL}}_2({\mathbb{R}})$](Congruence-subgroups.md#creation-of-subgroups-of-operatorname-psl-2-mathbb-r)

    - [`PSL2(R): Rng → GrpPSL2`](Congruence-subgroups.md#function-psl2-rng)

    - [`Gamma0(N): RngIntElt → GrpPSL2`](Congruence-subgroups.md#function-gamma0-rngintelt)

    - [`Gamma1(N): RngIntElt → GrpPSL2`](Congruence-subgroups.md#function-gamma1-rngintelt)

    - [`GammaUpper0(N): RngIntElt → GrpPSL2`](Congruence-subgroups.md#function-gammaupper0-rngintelt)

    - [`GammaUpper1(N): RngIntElt → GrpPSL2`](Congruence-subgroups.md#function-gammaupper1-rngintelt)

    - [`CongruenceSubgroup(N): RngIntElt → GrpPSL2`](Congruence-subgroups.md#function-congruencesubgroup-rngintelt)

    - [`CongruenceSubgroup(i,N): RngIntElt, RngIntElt → GrpPSL2`](Congruence-subgroups.md#function-congruencesubgroup-rngintelt-rngintelt)

    - [`CongruenceSubgroup([N,M,P]): SeqEnum → GrpPSL2`](Congruence-subgroups.md#function-congruencesubgroup-seqenum)

    - [`Intersection(G,H): GrpPSL2, GrpPSL2 → GrpPSL2`](Congruence-subgroups.md#function-intersection-grppsl2-grppsl2)

    - [`G meet H: GrpPSL2, GrpPSL2 → GrpPSL2`](Congruence-subgroups.md#operation-op-meet-grppsl2-grppsl2)

    - [`Example: Creation`](Congruence-subgroups.md#example-ex-5fb4fb)

  - [Relations](Congruence-subgroups.md#relations)

    - [`G eq H: GrpPSL2, GrpPSL2 → BoolElt`](Congruence-subgroups.md#operation-op-eq-grppsl2-grppsl2)

    - [`H subset G: GrpPSL2, GrpPSL2 → BoolElt`](Congruence-subgroups.md#operation-op-subset-grppsl2-grppsl2)

    - [`Index(G,H): GrpPSL2, GrpPSL2 → RngIntElt`](Congruence-subgroups.md#function-index-grppsl2-grppsl2)

    - [`Index(G): GrpPSL2 → RngIntElt`](Congruence-subgroups.md#function-index-grppsl2)

  - [Basic Attributes](Congruence-subgroups.md#basic-attributes)

    - [`Level(G): GrpPSL2 → RngIntElt`](Congruence-subgroups.md#function-level-grppsl2)

    - [`IsCongruence(G): GrpPSL2 → BoolElt`](Congruence-subgroups.md#function-iscongruence-grppsl2)

    - [`IsGamma0(G): GrpPSL2 → BoolElt`](Congruence-subgroups.md#function-isgamma0-grppsl2)

    - [`IsGamma1(G): GrpPSL2 → BoolElt`](Congruence-subgroups.md#function-isgamma1-grppsl2)

    - [`BaseRing(G): GrpPSL2 → Rng`](Congruence-subgroups.md#function-basering-grppsl2)

    - [`Identity(G): GrpPSL2 → GrpPSL2Elt`](Congruence-subgroups.md#function-identity-grppsl2)

- [Structure of Congruence Subgroups](structure-of-congruence-groups.md)

  - [`CosetRepresentatives(G): GrpPSL2 → SeqEnum`](structure-of-congruence-groups.md#function-cosetrepresentatives-grppsl2)

  - [`Generators(G): GrpPSL2 → SeqEnum`](structure-of-congruence-groups.md#function-generators-grppsl2)

  - [`FindWord(G,g): GrpPSL2, GrpPSL2Elt → SeqEnum`](structure-of-congruence-groups.md#function-findword-grppsl2-grppsl2elt)

  - [`Genus(G): GrpPSL2 → RngIntElt`](structure-of-congruence-groups.md#function-genus-grppsl2)

  - [`FundamentalDomain(G): GrpPSL2 → SeqEnum`](structure-of-congruence-groups.md#function-fundamentaldomain-grppsl2)

  - [`Example Of Finding Coset Representatives`](structure-of-congruence-groups.md#example-ex-5c2d72)

  - [`Example: Element Of Congruence Subgroup In Terms Of Generators`](structure-of-congruence-groups.md#example-ex-15bd49)

  - [Cusps and Elliptic Points of Congruence Subgroups](structure-of-congruence-groups.md#cusps-and-elliptic-points-of-congruence-subgroups)

    - [`Cusps(G): GrpPSL2 → SeqEnum`](structure-of-congruence-groups.md#function-cusps-grppsl2)

    - [`CuspWidth(G,x): GrpPSL2, SetCspElt → RngIntElt`](structure-of-congruence-groups.md#function-cuspwidth-grppsl2-setcspelt)

    - [`EllipticPoints(G): GrpPSL2 → [SpcHypElt]`](structure-of-congruence-groups.md#function-ellipticpoints-grppsl2)

    - [`EllipticPoints(G,H): GrpPSL2, SpcHyp → [SpcHypElt]`](structure-of-congruence-groups.md#function-ellipticpoints-grppsl2-spchyp)

    - [`Example: Cusp Example`](structure-of-congruence-groups.md#example-ex-f5387a)

- [Elements of ${\operatorname{PSL}}_2({\mathbb{R}})$](GrpPSL2Elt.md)

  - [Creation](GrpPSL2Elt.md#creation)

    - [`G ! x: GrpPSL2, . → GrpPSL2`](GrpPSL2Elt.md#operation-op-grppsl2)

    - [`G ! x: GrpPSL2, RngIntElt → GrpPSL2`](GrpPSL2Elt.md#operation-op-grppsl2-rngintelt)

    - [`G ! x: GrpPSL2, GrpMatElt → GrpPSL2`](GrpPSL2Elt.md#operation-op-grppsl2-grpmatelt)

    - [`G ! x: GrpPSL2, AlgMatElt → GrpPSL2`](GrpPSL2Elt.md#operation-op-grppsl2-algmatelt)

    - [`G ! x: GrpPSL2, GrpPSL2Elt → GrpPSL2`](GrpPSL2Elt.md#operation-op-grppsl2-grppsl2elt)

    - [`Random(G,m): GrpPSL2, RngIntElt → GrpPSL2Elt`](GrpPSL2Elt.md#function-random-grppsl2-rngintelt)

  - [Membership and Equality Testing](GrpPSL2Elt.md#membership-and-equality-testing)

    - [`g eq h: GrpPSL2Elt, GrpPSL2Elt → BoolElt`](GrpPSL2Elt.md#operation-op-eq-grppsl2elt-grppsl2elt)

    - [`IsEquivalent(g,h,G): GrpPSL2Elt, GrpPSL2Elt, GrpPSL2 → BoolElt`](GrpPSL2Elt.md#function-isequivalent-grppsl2elt-grppsl2elt-grppsl2)

    - [`g in G: GrpPSL2Elt, GrpPSL2 → BoolElt`](GrpPSL2Elt.md#operation-op-in-grppsl2elt-grppsl2)

  - [Basic Functions](GrpPSL2Elt.md#basic-functions)

    - [`Eltseq(g): GrpPSL2Elt → SeqEnum`](GrpPSL2Elt.md#function-eltseq-grppsl2elt)

    - [`g * h: GrpPSL2Elt, GrpPSL2Elt → GrpPSL2Elt`](GrpPSL2Elt.md#operation-op-times-grppsl2elt-grppsl2elt)

    - [`g ^ n: GrpPSL2Elt, RngIntElt → GrpPSL2Elt`](GrpPSL2Elt.md#operation-op-pow-grppsl2elt-rngintelt)

    - [`Example: Creation CongruenceSubgroups`](GrpPSL2Elt.md#example-ex-baea46)

- [The Upper Half Plane](upper-plane.md)

  - [Creation](upper-plane.md#creation)

    - [`UpperHalfPlane() → SpcHyp`](upper-plane.md#function-upperhalfplane)

    - [`H ! x: SpcHyp, . → SpcHypElt`](upper-plane.md#operation-op-spchyp)

    - [`Example: Upper Half Plane Example`](upper-plane.md#example-ex-e422b2)

  - [Basic Attributes](upper-plane.md#basic-attributes)

    - [`Imaginary(z): SpcHypElt → FldReElt`](upper-plane.md#function-imaginary-spchypelt)

    - [`Real(z): SpcHypElt → FldReElt`](upper-plane.md#function-real-spchypelt)

    - [`IsReal(z): SpcHypElt → BoolElt`](upper-plane.md#function-isreal-spchypelt)

    - [`IsCusp(z): SpcHypElt → BoolElt`](upper-plane.md#function-iscusp-spchypelt)

    - [`IsInfinite(z): SpcHypElt → BoolElt`](upper-plane.md#function-isinfinite-spchypelt)

    - [`IsExact(z): SpcHypElt → BoolElt`](upper-plane.md#function-isexact-spchypelt)

    - [`ExactValue(z): SpcHypElt → .`](upper-plane.md#function-exactvalue-spchypelt)

    - [`ComplexValue(x): SpcHypElt → FldComElt`](upper-plane.md#function-complexvalue-spchypelt)

    - [`x eq y: SpcHypElt, SpcHypElt → BoolElt`](upper-plane.md#operation-op-eq-spchypelt-spchypelt)

- [Action of ${\operatorname{PSL}}_2({\mathbb{R}})$ on the Upper Half Plane](group-action.md)

  - [`g * z: GrpPSL2Elt, SpcHypElt → SpcHypElt`](group-action.md#operation-op-times-grppsl2elt-spchypelt)

  - [`g * z: GrpPSL2Elt, [SpcHypElt] → [SpcHypElt]`](group-action.md#operation-op-times-grppsl2elt-spchypelt-2)

  - [`g * z: GrpPSL2Elt, SetCspElt → SetCspElt`](group-action.md#operation-op-times-grppsl2elt-setcspelt)

  - [`g * z: RngIntElt, SpcHypElt → SpcHypElt`](group-action.md#operation-op-times-rngintelt-spchypelt)

  - [`g * z: RngIntElt, [SpcHypElt] → [SpcHypElt]`](group-action.md#operation-op-times-rngintelt-spchypelt-2)

  - [`g * z: RngIntElt, SetCspElt → SetCspElt`](group-action.md#operation-op-times-rngintelt-setcspelt)

  - [`FixedPoints(g,H): GrpPSL2Elt, SpcHyp → SeqEnum`](group-action.md#function-fixedpoints-grppsl2elt-spchyp)

  - [`IsEquivalent(G,a,b): GrpPSL2, SpcHypElt, SpcHypElt → BoolElt, GrpPSL2Elt`](group-action.md#function-isequivalent-grppsl2-spchypelt-spchypelt)

  - [`EquivalentPoint(x): SpcHypElt → SpcHypElt, GrpPSL2Elt`](group-action.md#function-equivalentpoint-spchypelt)

  - [`Stabilizer(a,G): SpcHypElt, GrpPSL2 → GrpPSL2Elt`](group-action.md#function-stabilizer-spchypelt-grppsl2)

  - [`FixedArc(g,H): GrpPSL2Elt, SpcHyp → SeqEnum`](group-action.md#function-fixedarc-grppsl2elt-spchyp)

  - [Arithmetic](group-action.md#arithmetic)

    - [`z + a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-plus-spchypelt-rngintelt)

    - [`z + a: SpcHypElt, FldRatElt → SpcHypElt`](group-action.md#operation-op-plus-spchypelt-fldratelt)

    - [`z - a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-minus-spchypelt-rngintelt)

    - [`z - a: SpcHypElt, FldRatElt → SpcHypElt`](group-action.md#operation-op-minus-spchypelt-fldratelt)

    - [`a * z: RngElt, SpcHypElt → SpcHypElt`](group-action.md#operation-op-times-rngelt-spchypelt)

    - [`z * a: SpcHypElt, RngElt → SpcHypElt`](group-action.md#operation-op-times-spchypelt-rngelt)

    - [`a * z: RngIntElt, SetCspElt → SetCspElt`](group-action.md#operation-op-times-rngintelt-setcspelt-2)

    - [`a * z: FldRatElt, SetCspElt → SetCspElt`](group-action.md#operation-op-times-fldratelt-setcspelt)

    - [`a * seq: RngElt, [SpcHypElt] → [SpcHypElt]`](group-action.md#operation-op-times-rngelt-spchypelt-2)

    - [`a * z: RngIntElt, [SetCspElt] → [SetCspElt]`](group-action.md#operation-op-times-rngintelt-setcspelt-3)

    - [`a * z: FldRatElt, [SetCspElt] → [SetCspElt]`](group-action.md#operation-op-times-fldratelt-setcspelt-2)

    - [`z * a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-times-spchypelt-rngintelt)

    - [`z * a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-times-spchypelt-rngintelt-2)

    - [`z * a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-times-spchypelt-rngintelt-3)

    - [`z * a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-times-spchypelt-rngintelt-4)

    - [`z * a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-times-spchypelt-rngintelt-5)

    - [`z / a: SpcHypElt, RngIntElt → SpcHypElt`](group-action.md#operation-op-div-spchypelt-rngintelt)

  - [Distances, Angles and Geodesics](group-action.md#distances-angles-and-geodesics)

    - [`Distance(z,w): SpcHypElt, SpcHypElt → FldReElt`](group-action.md#function-distance-spchypelt-spchypelt)

    - [`TangentAngle(x,y): SpcHypElt, SpcHypElt → FldReElt`](group-action.md#function-tangentangle-spchypelt-spchypelt)

    - [`Angle(e1,e2): [SpcHypElt], [SpcHypElt] → FldReElt`](group-action.md#function-angle-spchypelt-spchypelt)

    - [`ExtendGeodesic([z1,z2], H): [SpcHypElt], SpcHyp → [SpcHypElt]`](group-action.md#function-extendgeodesic-spchypelt-spchyp)

    - [`GeodesicsIntersection(x1,x2): [SpcHypElt], [SpcHypElt]) → SeqEnum`](group-action.md#function-geodesicsintersection-spchypelt-spchypelt)

    - [`GeodesicsIntersection(x1,x2): [SetCspElt], [SetCspElt]) → SeqEnum`](group-action.md#function-geodesicsintersection-setcspelt-setcspelt)

- [Farey Symbols and Fundamental Domains](Farey-Symbols.md)

  - [`FareySymbol(G): GrpPSL2 → SymFry`](Farey-Symbols.md#function-fareysymbol-grppsl2)

  - [`Cusps(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-cusps-symfry)

  - [`Labels(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-labels-symfry)

  - [`Generators(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-generators-symfry)

  - [`Group(FS): SymFry → GrpPSL2`](Farey-Symbols.md#function-group-symfry)

  - [`Widths(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-widths-symfry)

  - [`Index(FS): SymFry → RngIntElt`](Farey-Symbols.md#function-index-symfry)

  - [`FundamentalDomain(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-fundamentaldomain-symfry)

  - [`FundamentalDomain(FS,H): SymFry, SpcHyp → SeqEnum`](Farey-Symbols.md#function-fundamentaldomain-symfry-spchyp)

  - [`CosetRepresentatives(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-cosetrepresentatives-symfry)

  - [`InternalEdges(FS): SymFry → SeqEnum`](Farey-Symbols.md#function-internaledges-symfry)

- [Points and Geodesics](Geodesics.md)

  - [`GeodesicsIntersection(x,y): [SpcHypElt], [SpcHypElt] → SpcHypElt`](Geodesics.md#function-geodesicsintersection-spchypelt-spchypelt-2)

  - [`GeodesicsIntersection(x,y): [SetCspElt], [SetCspElt] → SpcHypElt`](Geodesics.md#function-geodesicsintersection-setcspelt-setcspelt-2)

  - [`Example: Geodesic Intersection`](Geodesics.md#example-ex-e0516e)

- [Graphical Output](graphics.md)

  - [`DisplayPolygons(P,file): SeqEnum, MonStgElt`](graphics.md#function-displaypolygons-seqenum-monstgelt)

  - [`DisplayFareySymbolDomain(FS,file): SymFry, MonStgElt → SeqEnum`](graphics.md#function-displayfareysymboldomain-symfry-monstgelt)

  - [`DisplayFareySymbolDomain(G,file): GrpPSL2, MonStgElt → SeqEnum`](graphics.md#function-displayfareysymboldomain-grppsl2-monstgelt)

  - [`Example: Graphics`](graphics.md#example-ex-73f434)

  - [`Example: More Graphics`](graphics.md#example-ex-a1acee)

  - [`Example: Graphics`](graphics.md#example-ex-da7abd)
