Skip to content

Commit c85174d

Browse files
Merge pull request #151 from giuliao27/extra-methods
Add computations for the transversal in the extra methods
2 parents 86cd6a7 + da43f1e commit c85174d

3 files changed

Lines changed: 104 additions & 3 deletions

File tree

lib/Orru/sl2methodsExtra.gi

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,55 @@ InstallMethod(CosetRepFunction,
7676
end;
7777

7878
return cosetRep;
79-
end);
79+
end);
80+
81+
##########################################################################
82+
##
83+
## AmbientTransversal( <G> )
84+
##
85+
## Right transversal for a congruence subgroup G in its ambient group GG
86+
InstallMethod(AmbientTransversal,
87+
"Right transversal for a congruence subgroup G in its ambient group",
88+
[ IsIntegerMatrixGroup and IsHAPCongruenceSubgroupGamma0 ],
89+
function(G)
90+
local n, GG, poscan, cosetPos, transversal, ProjLine, cosetOfInt;
91+
if DimensionOfMatrixGroup(G) <> 2 then
92+
TryNextMethod();
93+
fi;
94+
95+
n:=LevelOfCongruenceSubgroup(G);
96+
97+
ProjLine := FiniteProjectiveLine(n);
98+
99+
GG:=AmbientGroupOfCongruenceSubgroup(G);
100+
101+
cosetPos:=CosetPosFunction(G);
102+
103+
cosetOfInt := function(i)
104+
local a, c, b, d, gg;
105+
a := ProjLine[i][1];
106+
c := ProjLine[i][2];
107+
if a = 0 then
108+
return [[0,-1],[1,0]];
109+
fi;
110+
gg := Gcdex(a,c);
111+
b := -gg.coeff2;
112+
d := gg.coeff1;
113+
return [[a,b],[c,d]];
114+
end;
115+
116+
poscan := function(g)
117+
return cosetPos(g^-1);
118+
end;
119+
120+
transversal := List([1..Length(ProjLine)],i->cosetOfInt(i)^-1);
121+
122+
return Objectify( NewType( FamilyObj( GG ),
123+
IsHapRightTransversalSL2ZSubgroup and IsList and
124+
IsDuplicateFreeList and IsAttributeStoringRep ),
125+
rec( group := GG,
126+
subgroup := G,
127+
cosets:=transversal,
128+
poscan:=poscan
129+
));
130+
end);

lib/Orru/sl3methods.gi

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,54 @@ InstallMethod(CosetRepFunction,
7777
end;
7878

7979
return cosetRep;
80-
end);
80+
end);
81+
82+
##
83+
## AmbientTransversal( <G> )
84+
##
85+
## Right transversal for a congruence subgroup G in its ambient group GG
86+
InstallMethod(AmbientTransversal,
87+
"Right transversal for a congruence subgroup G in its ambient group",
88+
[ IsIntegerMatrixGroup and IsHAPCongruenceSubgroupGamma0 ],
89+
function(G)
90+
local n, GG, poscan, cosetPos, transversal, ProjPlane, cosetOfInt, MatrixInSL3_Hermite;
91+
92+
if DimensionOfMatrixGroup(G) <> 3 then
93+
TryNextMethod();
94+
fi;
95+
96+
n := LevelOfCongruenceSubgroup(G);
97+
ProjPlane := FiniteProjectivePlane(n);
98+
99+
GG:=AmbientGroupOfCongruenceSubgroup(G);
100+
cosetPos:=CosetPosFunction(G);
101+
102+
MatrixInSL3_Hermite := function(v)
103+
local Herm;
104+
Herm := HermiteNormalFormIntegerMatTransform([[v[1]],[v[2]],[v[3]]]);
105+
return Inverse(Herm!.rowtrans);
106+
end;
107+
108+
cosetOfInt:=function(i)
109+
local x,y,z;
110+
x := ProjPlane.Reps[i][1];
111+
y := ProjPlane.Reps[i][2];
112+
z := ProjPlane.Reps[i][3];
113+
return MatrixInSL3_Hermite([x,y,z]);
114+
end;
115+
116+
poscan := function(g)
117+
return cosetPos(g^-1);
118+
end;
119+
120+
transversal := List([1..Length(ProjPlane.Reps)],i->cosetOfInt(i)^-1);
121+
122+
return Objectify( NewType( FamilyObj( GG ),
123+
IsHapRightTransversalSL2ZSubgroup and IsList and
124+
IsDuplicateFreeList and IsAttributeStoringRep ),
125+
rec( group := GG,
126+
subgroup := G,
127+
cosets:=transversal,
128+
poscan:=poscan
129+
));
130+
end);

lib/Orru/subgroups.gi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,7 @@ function(G,H)
445445
TryNextMethod();
446446
fi;
447447

448-
HAPCongruenceSubgroupTree(H);
448+
#HAPCongruenceSubgroupTree(H);
449449

450450
return HAP_TransversalCongruenceSubgroupInAmbientGroup(G,H);
451451
end);

0 commit comments

Comments
 (0)