Skip to content

Add a test to compare names and structure descriptions - #34

Open
olexandr-konovalov wants to merge 11 commits into
gap-packages:masterfrom
olexandr-konovalov:names-check
Open

Add a test to compare names and structure descriptions#34
olexandr-konovalov wants to merge 11 commits into
gap-packages:masterfrom
olexandr-konovalov:names-check

Conversation

@olexandr-konovalov

Copy link
Copy Markdown
Member

This is a start of working over #31.

With it, #30 could have been detected as follows:

gap> checkname(1600);
[ 1600, 17 ] : PSU(4, 3) is PSU(3,4)
[ 1600, 18 ] : PSU(4, 3):2 is PSU(3,4) : C2
[ 1600, 19 ] : PSU(4, 3):4 is PSU(3,4) : C4

It filters some obvious cases, but because names and structure descriptions are not guaranteed to match, that's not always the case. One still needs to check manually a lot, e.g.

gap> checkname(100);
[ 100, 1 ] : J_2 is HJ
[ 100, 2 ] : J_2.2 is HJ : C2
[ 100, 5 ] : Alt(5) wreath Sym(2) is (A5 x A5) : C2
[ 100, 6 ] : Alt(5)^2.2^2 is (A5 x A5) : (C2 x C2)
[ 100, 7 ] : Alt(5)^2.4 is (A5 x A5) : C4
[ 100, 8 ] : Sym(5) wreath Sym(2) is (A5 x A5) : D8
[ 100, 9 ] : Alt(10) wreath Sym(2) is (A10 x A10) : C2
[ 100, 10 ] : Alt(10)^2.2^2 is (A10 x A10) : (C2 x C2)
[ 100, 11 ] : Alt(10)^2.4 is (A10 x A10) : C4
[ 100, 12 ] : Sym(10) wreath Sym(2) is (A10 x A10) : D8
[ 100, 13 ] : Alt(6) wreath Sym(2) is (A6 x A6) : C2
[ 100, 14 ] : Alt(6)^2.2^2 is (A6 x A6) : C4
[ 100, 15 ] : Alt(6)^2.2^2 is (A6 x A6) : (C2 x C2)
[ 100, 16 ] : Alt(6)^2.4 is (A6 x A6) : C4
[ 100, 17 ] : Alt(6)^2.2^2 is ((A6 x A6) : C2) : C2
[ 100, 18 ] : Alt(6)^2.4 is (A6 x A6) . C4
[ 100, 19 ] : Alt(6)^2.2^2 is (A6 x A6) : (C2 x C2)
[ 100, 20 ] : Alt(6)^2.D_8 is ((A6 x A6) : C4) : C2
[ 100, 21 ] : Alt(6)^2.2^3 is ((A6 x A6) : C2) : (C2 x C2)
[ 100, 22 ] : Alt(6)^2.D_8 is (A6 x A6) : D8
[ 100, 23 ] : Alt(6)^2.D_8 is (A6 x A6) : D8
[ 100, 24 ] : Alt(6)^2.D_8 is ((A6 x A6) . C4) : C2
[ 100, 25 ] : Alt(6)^2.D_8 is ((A6 x A6) . C4) : C2
[ 100, 26 ] : Alt(6)^2.(2 x 4) is ((A6 x A6) . C4) : C2
[ 100, 27 ] : Alt(6)^2.D_8 is ((A6 x A6) : C4) : C2
[ 100, 28 ] : Alt(6)^2.(2 x 4) is (A6 : (A6 : C2)) : C4
[ 100, 29 ] : Alt(6)^2.(2 x 4) is (A6 : (A6 . C2)) : C4
[ 100, 30 ] : Alt(6)^2.2^2:4 is ((A6 : S6) : C2) : C4
[ 100, 31 ] : Alt(6)^2.(2 x D_8) is (A6 : (A6 . C2)) : D8
[ 100, 32 ] : Alt(6)^2.2^2:4 is ((A6 : (A6 . C2)) : C2) : C4
[ 100, 33 ] : Alt(6)^2.(2 x D_8) is ((A6 x A6) . C4) : (C2 x C2)
[ 100, 34 ] : Alt(6)^2.(2 x D_8) is (A6 : (A6 : C2)) : D8
[ 100, 35 ] : Alt(6)^2.2^2:4 is ((A6 : (A6 . C2)) : C2) : C4
[ 100, 36 ] : PGammaL(2, 9) wreath Sym(2) is ((A6 : (A6 . C2)) : C2) : D8

Above, I've noticed the line

[ 100, 14 ] : Alt(6)^2.2^2 is (A6 x A6) : C4
  • shouldn't that by any chance be Alt(6)^2.4, @hulpke and @colva ?

@olexandr-konovalov
olexandr-konovalov force-pushed the names-check branch 2 times, most recently from 17f5a95 to cf8dd4b Compare July 1, 2020 22:10
Comment thread tst/testutils.g Outdated
@olexandr-konovalov

Copy link
Copy Markdown
Member Author

A fix for PrimitiveGroup(289, 35) and also for PrimitiveGroup(100,14) submitted in #36.

@codecov

codecov Bot commented Jul 3, 2020

Copy link
Copy Markdown

Codecov Report

Merging #34 (6d63375) into master (a4e2d7f) will decrease coverage by 0.01%.
The diff coverage is 74.15%.

@@            Coverage Diff             @@
##           master      #34      +/-   ##
==========================================
- Coverage   99.92%   99.90%   -0.02%     
==========================================
  Files          46       47       +1     
  Lines      382938   383100     +162     
==========================================
+ Hits       382633   382748     +115     
- Misses        305      352      +47     
Impacted Files Coverage Δ
lib/testutils.g 74.15% <74.15%> (ø)
lib/primitiv.gi 53.72% <0.00%> (-1.35%) ⬇️
lib/irredsol.gi 61.45% <0.00%> (-0.44%) ⬇️
lib/cohorts.grp 100.00% <0.00%> (ø)
lib/primitiv.grp 100.00% <0.00%> (ø)

@olexandr-konovalov
olexandr-konovalov force-pushed the names-check branch 2 times, most recently from e5c0924 to d231104 Compare July 3, 2020 12:08
Comment thread PackageInfo.g Outdated
Comment thread lib/testutils.g Outdated
@fingolfin

Copy link
Copy Markdown
Member

@alex-konovalov the name for [ 100, 14 ] is also definitely wrong. You can verify this even by "brute force": there is no quotient isomorphic to C_2^2 here:

gap> G:=PrimitiveGroup( 100, 14 );
Alt(6)^2.2^2
gap> StructureDescription(G/Socle(G));
"C4"
gap> List(NormalSubgroups(G), N -> StructureDescription(G/N));
[ "(A6 x A6) : C4", "C4", "C2", "1" ]

@olexandr-konovalov

Copy link
Copy Markdown
Member Author

@fingolfin thanks, [100,14] already in #36.

@olexandr-konovalov

Copy link
Copy Markdown
Member Author

Rebased after merging #36.

@olexandr-konovalov

Copy link
Copy Markdown
Member Author

This PR is unfinished, but at least issues detected with its help were merged and could be released.

@olexandr-konovalov

Copy link
Copy Markdown
Member Author

After rebase, I see this in stable-4.11,-4.10 but not in master:

########> Diff in /tmp/gaproot/pkg/primgrp/tst/testinstall/testutils.tst:12
# Input is:
for d in [1,2,3,4] do
  for q in [2,3,4,5,7,8,9] do
    facs := Factors(q);
    p := facs[1];
    e := Length(facs);
    Assert(0, Size(SL(d,q)) * q^d = Size(ASL(d,q)));
    Assert(0, Size(GL(d,q)) * q^d = Size(AGL(d,q)));
    Assert(0, Size(SigmaL(d,q)) * q^d = Size(ASigmaL(d,q)));
    Assert(0, Size(GammaL(d,q)) * q^d = Size(AGammaL(d,q)));
    if d > 1 then
        Assert(0, Size(PSL(d,q)) * e = Size(PSigmaL(d,q)));
        Assert(0, Size(PGL(d,q)) * e = Size(PGammaL(d,q)));
    fi;
  od;
od;
# Expected output:
# But found:
Error, Variable: 'PGammaL' must have an assigned value
########

fingolfin added a commit that referenced this pull request Aug 23, 2026
The socle ranks were not the whole of what the cross-check turned up.  Of the
354 name differences, 270 are the naming convention and 78 are names filled in
where the entry had none -- but six are simply wrong.  PrimitiveGroup(1057,1)
and (1057,2) are named PSL(2, 32) where the socle has order 1098404364288,
which is that of PSL(3, 32); PSL(2,32) has order 32736.  Four more are named
PSL(2, q).2, which does not say which of the three index-2 extensions is
meant, and all four are PGL(2, q) -- confirmed by the two-point stabiliser
being cyclic, the test that separates PGL from PSigmaL and PSL.2_3.

None of this is checked by anything.  Every consistency check recomputes order,
socle, suborbits, transitivity and O'Nan-Scott type; field 7 is free text and
no test has ever asked whether it is true.  That is task 24, and it is PR #34's
idea from 2020, now conflicting against master and worth reviving narrowly:
names of the form PSL(d, q) assert a specific group and can be checked exactly,
without StructureDescription, which is not deterministic.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@olexandr-konovalov

Copy link
Copy Markdown
Member Author

Cool @fingolfin! I see that this PR might be worth revisiting!

olexandr-konovalov and others added 11 commits September 2, 2026 22:47
- Move `testutils` to `lib` for coverage reports
- Rename sanity tests to consistency tests
- Reflect renaming of the consistency check
- Reorganise progress reports
PrimGrpNamesDuplicates now has two arguments to restrict the check
to degrees [d1..d2]. This is useful to check only a specific degree,
or check the testing code on a subset of the library.
@olexandr-konovalov

olexandr-konovalov commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

I have rebased this, and this is why the tests fail in tst/testinstall/duplicates.tst when calling PrimGrpNamesDuplicates to report duplicated names of primitive groups (more precisely, this tests searches for primitive groups which are non-isomorphic, and have different structure descriptions, but have the same name):

$ diff expected.txt found.txt 
22,23c22,23
< PGL(2, 11) : [ [ 12, 4 ], [ 55, 2 ], [ 55, 3 ] ]
< PGL(2, 7) : [ [ 8, 5 ], [ 21, 1 ], [ 28, 1 ] ]
---
> PGL(2, 11) : [ [ 55, 2 ], [ 55, 3 ] ]
> PGL(2, 7) : [ [ 21, 1 ], [ 28, 1 ] ]
25c25
< PGammaL(2, 8) : [ [ 9, 9 ], [ 28, 3 ], [ 36, 2 ] ]
---
> PGammaL(2, 8) : [ [ 28, 3 ], [ 36, 2 ] ]
28,29c28
< PSL(2, 11) : [ [ 12, 3 ], [ 55, 1 ] ]
< PSL(2, 8) : [ [ 9, 8 ], [ 28, 2 ], [ 36, 1 ] ]
---
> PSL(2, 8) : [ [ 28, 2 ], [ 36, 1 ] ]

@olexandr-konovalov

Copy link
Copy Markdown
Member Author

@fingolfin and I found why:

gap> List([ [ 12, 4 ], [ 55, 2 ], [ 55, 3 ] ], t -> PrimitiveGroup(t[1],t[2]));
[ PGL(2,11), PGL(2, 11), PGL(2, 11) ]
gap> List(  [ [ 8, 5 ], [ 21, 1 ], [ 28, 1 ] ], t -> PrimitiveGroup(t[1],t[2]));
[ PGL(2,7), PGL(2, 7), PGL(2, 7) ]
gap> List([ [ 9, 9 ], [ 28, 3 ], [ 36, 2 ] ], t -> PrimitiveGroup(t[1],t[2]));
[ PGammaL(2,8), PGammaL(2, 8), PGammaL(2, 8) ]
gap> List( [ [ 12, 3 ], [ 55, 1 ] ], t -> PrimitiveGroup(t[1],t[2]));
[ PSL(2,11), PSL(2, 11) ]
gap> List( [ [ 9, 8 ], [ 28, 2 ], [ 36, 1 ] ], t -> PrimitiveGroup(t[1],t[2]));
[ PSL(2,8), PSL(2, 8), PSL(2, 8) ]

Observe the extra space in the name, e.g.

gap> PrimitiveGroup(12,4);
PGL(2,11)
gap> PrimitiveGroup(55,2);
PGL(2, 11)

@fingolfin

Copy link
Copy Markdown
Member

Thanks @olexandr-konovalov but this not the best time: I am still in the middle of importing the groups of degree < 8192 and in that process, more things will be "aligned"

@olexandr-konovalov

Copy link
Copy Markdown
Member Author

Ok, can wait - at least I have rebased it and glad to see that it's not yet completely out of sync (and also I have updated my details in commit signatures).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants