From f057210592c0ba15a9026f80d536aa4185fae803 Mon Sep 17 00:00:00 2001 From: Martin Wagner Date: Tue, 26 May 2026 11:27:03 +0200 Subject: [PATCH 1/4] Test a stronger condition --- gap/projective/classicalnatural.gi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gap/projective/classicalnatural.gi b/gap/projective/classicalnatural.gi index b9040e00..05c62ed2 100644 --- a/gap/projective/classicalnatural.gi +++ b/gap/projective/classicalnatural.gi @@ -654,7 +654,7 @@ RECOG.IsThisSL2Natural := function(gens,f) Info(InfoRecog,4,"SL2: Computing stabiliser chain."); S := StabilizerChain(Group(gens)); Info(InfoRecog,4,"SL2: size is ",Size(S)); - return Size(S) mod (q*(q-1)*(q+1)) = 0; + return Size(S) = (q*(q-1)*(q+1)); fi; seenqp1 := false; From 8b24b8bbe23e1f13a26c829acbe9b7b9e9ef68a6 Mon Sep 17 00:00:00 2001 From: Martin Wagner Date: Wed, 27 May 2026 14:32:55 +0200 Subject: [PATCH 2/4] First normalize determinants --- gap/projective/classicalnatural.gi | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/gap/projective/classicalnatural.gi b/gap/projective/classicalnatural.gi index 05c62ed2..e38685a9 100644 --- a/gap/projective/classicalnatural.gi +++ b/gap/projective/classicalnatural.gi @@ -854,12 +854,7 @@ function(ri) RECOG.SetPseudoRandomStamp(g,"ClassicalNatural"); # First check whether we are applicable: - if d = 2 then - if not RECOG.IsThisSL2Natural(GeneratorsOfGroup(g),f) then - Info(InfoRecog,2,"ClassicalNatural: Is not PSL_2."); - return TemporaryFailure; # FIXME: TemporaryFailure here really correct? - fi; - else + if d <> 2 then classical := RecogniseClassical(g); if classical.isSLContained <> true then Info(InfoRecog,2,"ClassicalNatural: Is not PSL."); @@ -884,6 +879,15 @@ function(ri) changed := true; fi; od; + + # Now check whether the normalized matrices generate an SL_2: + if d = 2 then + if not RECOG.IsThisSL2Natural(gens,f) then + Info(InfoRecog,2,"ClassicalNatural: Is not PSL_2."); + return TemporaryFailure; # FIXME: TemporaryFailure here really correct? + fi; + fi; + if changed then gm := GroupWithMemory(gens); pr := ProductReplacer(GeneratorsOfGroup(gm),rec(maxdepth := 500)); From 5e5be86a01ca8c47b32454cc1586928c562685f6 Mon Sep 17 00:00:00 2001 From: Martin Wagner Date: Wed, 27 May 2026 15:54:56 +0200 Subject: [PATCH 3/4] Apply suggestion from @fingolfin Co-authored-by: Max Horn --- gap/projective/classicalnatural.gi | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gap/projective/classicalnatural.gi b/gap/projective/classicalnatural.gi index e38685a9..bf867a76 100644 --- a/gap/projective/classicalnatural.gi +++ b/gap/projective/classicalnatural.gi @@ -854,6 +854,9 @@ function(ri) RECOG.SetPseudoRandomStamp(g,"ClassicalNatural"); # First check whether we are applicable: + # check if this group contains SL_d -- for d > 2 we can use RecogniseClassical; + # for d = 2, we can use RECOG.IsThisSL2Natural, but only after adjusting + # the determinants of the generators (comes next) if d <> 2 then classical := RecogniseClassical(g); if classical.isSLContained <> true then From b1e88ef8d90a3ab385379733f6c99301fb8e80a4 Mon Sep 17 00:00:00 2001 From: Martin Wagner Date: Wed, 27 May 2026 15:57:28 +0200 Subject: [PATCH 4/4] Update a comment --- gap/projective/classicalnatural.gi | 3 --- 1 file changed, 3 deletions(-) diff --git a/gap/projective/classicalnatural.gi b/gap/projective/classicalnatural.gi index bf867a76..d69ffb99 100644 --- a/gap/projective/classicalnatural.gi +++ b/gap/projective/classicalnatural.gi @@ -647,9 +647,6 @@ RECOG.IsThisSL2Natural := function(gens,f) q := Size(f); p := Characteristic(f); # For small q, compute the order of the group via a stabilizer chain. - # Note that at this point we are usually working projective, and thus - # scalars are factored out "implicitly". Thus the generators we are - # looking at may generate a group which only contains SL2 as a subgroup. if q <= 11 then # this could be increased if needed Info(InfoRecog,4,"SL2: Computing stabiliser chain."); S := StabilizerChain(Group(gens));