Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement 2-cohomology and module computations for arbitrary finite groups, not just solvable ones, via TwoCohomologyGeneric #3383

Merged
merged 6 commits into from
May 3, 2019

Conversation

hulpke
Copy link
Contributor

@hulpke hulpke commented Mar 27, 2019

Uses rewriting system since pc presentation will not always be available.
This is both code for the cohomology group, and for constructing the extension corresponding to a particular cocycle. Group is constructed by default as Fp group, but there is an option to have it compute a faithful permutation representation.

Also includes improved routines for IrreducibleModules for the non-pc case once such cohomology routines exist, and action of compatible pairs on the cohomology group.

There is a test in testextra that, as application, constructs perfect groups anew. (This could easily go to larger orders, if desired, at the moment two quick tests are in.)

@hulpke hulpke added kind: new feature do not merge PRs which are not yet ready to be merged (e.g. submitted for discussion, or test results) topic: library do not review PRs which are not yet ready for a proper external review (e.g. only submitted for test results) labels Mar 27, 2019
@codecov
Copy link

codecov bot commented Mar 29, 2019

Codecov Report

Merging #3383 into master will increase coverage by 0.07%.
The diff coverage is 76.5%.

@@            Coverage Diff             @@
##           master    #3383      +/-   ##
==========================================
+ Coverage   85.17%   85.25%   +0.07%     
==========================================
  Files         699      699              
  Lines      346081   346872     +791     
==========================================
+ Hits       294784   295735     +951     
+ Misses      51297    51137     -160
Impacted Files Coverage Δ
lib/grp.gd 100% <100%> (ø) ⬆️
lib/grppcrep.gi 96.72% <100%> (+1.11%) ⬆️
lib/twocohom.gd 100% <100%> (ø) ⬆️
lib/ghomfp.gi 86.45% <100%> (+1.24%) ⬆️
lib/grpfp.gi 83.93% <100%> (+2.67%) ⬆️
lib/meataxe.gi 87.8% <100%> (+0.08%) ⬆️
lib/gpprmsya.gi 78.29% <52.06%> (+1.04%) ⬆️
lib/grppcext.gi 70.03% <61.48%> (-0.55%) ⬇️
lib/grpreps.gi 84.06% <79.86%> (-13.94%) ⬇️
lib/gpfpiso.gi 66.51% <84.61%> (+0.91%) ⬆️
... and 34 more

doc/ref/grppc.xml Outdated Show resolved Hide resolved
@hulpke hulpke force-pushed the ah/twocohom branch 2 times, most recently from 256316b to c26720d Compare April 8, 2019 20:13
@hulpke hulpke removed the do not review PRs which are not yet ready for a proper external review (e.g. only submitted for test results) label Apr 8, 2019
@coveralls
Copy link

coveralls commented Apr 8, 2019

Coverage Status

Coverage increased (+0.09%) to 85.08% when pulling ba83355 on hulpke:ah/twocohom into fcbaa66 on gap-system:master.

@hulpke hulpke added the release notes: to be added PRs introducing changes that should be (but have not yet been) mentioned in the release notes label Apr 9, 2019
@hulpke hulpke force-pushed the ah/twocohom branch 2 times, most recently from 20233f4 to 2c36816 Compare April 11, 2019 21:59
@hulpke hulpke changed the title ENHANCE: Two-cohomology routines for non-solvable groups (WIP) Non-solvable extensions: 2-Cohomology and module computation Apr 11, 2019
@wilfwilson
Copy link
Member

@hulpke I noticed you’ve removed the WIP from the title and the ‘do not review’ label. Just to check, for sure: does this mean that you’d be happy for the PR to be reviewed, and hopefully merged? If so, I’d suggest removing the ‘do not merge’ label because I get the impression it might put people off from reviewing. Sorry I’ve not had chance to look at your PR further yet.

@olexandr-konovalov
Copy link
Member

Travis reports two manual example diffs:

########> Diff in /home/travis/build/gap-system/gap/doc/ref/../../lib/twocohom\
.gd:273 (/home/travis/build/gap-system/gap/tst/testmanuals/ref-chapter039.tst:
992)
# Input is:
g1:=Image(IsomorphismPermGroup(p));
# Expected output:
<permutation group of size 38880 with 9 generators>
# But found:
<permutation group with 9 generators>
########
########> Diff in /home/travis/build/gap-system/gap/doc/ref/../../lib/twocohom\
.gd:273 (/home/travis/build/gap-system/gap/tst/testmanuals/ref-chapter039.tst:
999)
# Input is:
g2:=Image(IsomorphismPermGroup(p));
# Expected output:
<permutation group of size 38880 with 9 generators>
# But found:
<permutation group with 9 generators>
########

@hulpke
Copy link
Contributor Author

hulpke commented Apr 16, 2019

@wilfwilson
At this stage I am happy for comments about potential problems, but there is still some code (basic functionality for compatible pairs and action on the cohomology group) I am still working on and want to add before merging. (There also is a manual bug and a stupid typo in the perfect group construction example that need fixing.)
As there will still be code added (as soon as I fix a bug..), it might be best to wait with formal reviewing.

@hulpke hulpke force-pushed the ah/twocohom branch 3 times, most recently from dc4d6f1 to 4b442f2 Compare April 17, 2019 01:49
@hulpke hulpke removed the do not merge PRs which are not yet ready to be merged (e.g. submitted for discussion, or test results) label Apr 17, 2019
@hulpke
Copy link
Contributor Author

hulpke commented Apr 17, 2019

@wilfwilson OK, now the promised changes are in, and the holds are removed.
Since there is no need to backport, I'm not sure whether there is a need to squash into one commit, but could do so if desired.

Copy link
Member

@fingolfin fingolfin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice, thank you! Overall, this is of course a very welcome improvement!

Unfortunately I did not yet have time to look at everything (with easter and everything), but I left a few rather minor remarks. I would like to have a closer look at a few more things, I'll try to get this done this week or early next week.

Of course it would be nice to have this in GAP 4.11 -- @alex-konovalov is in charge of that.

lib/gpprmsya.gi Outdated Show resolved Hide resolved
lib/gpprmsya.gi Outdated Show resolved Hide resolved
lib/gpprmsya.gi Outdated Show resolved Hide resolved
lib/grppcext.gi Show resolved Hide resolved
lib/grpreps.gi Outdated Show resolved Hide resolved
lib/grpreps.gi Outdated Show resolved Hide resolved
lib/grpreps.gi Outdated Show resolved Hide resolved
lib/twocohom.gd Outdated Show resolved Hide resolved
@hulpke hulpke force-pushed the ah/twocohom branch 2 times, most recently from 7c5e2e3 to aa9bfe4 Compare April 23, 2019 16:22
lib/grppcext.gi Show resolved Hide resolved
else
if not IsPcgs(Ggens) then
elmlist:=fail;
epi:=EpimorphismFromFreeGroup(G);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code section is also untested with testinstall.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

until l=1;
else
#D:=Stabilizer(D,M.generators,gens,genimgs,f);
hf:=SparseIntKeyVecListAndMatrix(false,Concatenation(M.generators));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also not covered by testinstall.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

lib/grpreps.gi Show resolved Hide resolved

# The augmentation ideal of a P-normal subgroup lies in the radical
if Characteristic(F)=0 then
si:=TrivialSubgroup(G);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also not covered by testinstall.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

lib/twocohom.gi Show resolved Hide resolved
AddSet(hastail,Length(rules));
fi;
elif Length(r[1])>1 then
if Length(r[2])=0 then Error("generator is trivial");fi;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also not covered by testinstall.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

if model<>fail then
q:=GQuotients(model,G)[1];
pre:=List(gens,x->PreImagesRepresentative(q,x));
ker:=KernelOfMultiplicativeGeneralMapping(q);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also not covered by testinstall.

lib/twocohom.gi Show resolved Hide resolved
lib/twocohom.gi Show resolved Hide resolved
Uses rewriting system since pc presentation will not always be available.

Use a rewriting system based on extensions for the factor group (as it is
smaller).
Rename `PresentationCocycle` to `FpGroupCocycle` and offer to calculate a
faithful permutation representation for it.

Added test

Add info from decomp.

Avoid the global Gpword fct. for order issues.

ENHANCE: Allow for different presentations for better rewriting

Added IsomorphismFpGroupForRewriting and method for alternating groups.

ENHANCE: Avoid duplicate test, build on existing permrep first.

Examples reflect new code. Make immutable.

Simplify presentation before trying permrep.

Force natural An for presentation.

REBASE: Fix wrong suggestion.

ENHANCE: Two-Cohomology for arbitrary finite groups

Uses rewriting system since pc presentation will not always be available.

Use a rewriting system based on extensions for the factor group (as it is
smaller).
Rename `PresentationCocycle` to `FpGroupCocycle` and offer to calculate a
faithful permutation representation for it.

Added test

Add info from decomp.

Avoid the global Gpword fct. for order issues.

ENHANCE: Allow for different presentations for better rewriting

Added IsomorphismFpGroupForRewriting and method for alternating groups.

ENHANCE: Avoid duplicate test, build on existing permrep first.

Examples reflect new code. Make immutable.

Simplify presentation before trying permrep.

Force natural An for presentation.

Simplify presentation before finding subgroup quotients

Run Tietze in LargerAbelianQuotient with different heuristics

ENHANCE: Two-Cohomology for arbitrary finite groups

Uses rewriting system since pc presentation will not always be available.

Use a rewriting system based on extensions for the factor group (as it is
smaller).
Rename `PresentationCocycle` to `FpGroupCocycle` and offer to calculate a
faithful permutation representation for it.

Added test

Add info from decomp.

Avoid the global Gpword fct. for order issues.

ENHANCE: Allow for different presentations for better rewriting

Added IsomorphismFpGroupForRewriting and method for alternating groups.

ENHANCE: Avoid duplicate test, build on existing permrep first.

Examples reflect new code. Make immutable.

Simplify presentation before trying permrep.

Force natural An for presentation.

REBASE: Fix wrong suggestion.

REBASE: Simplify presentation before finding subgroup quotients

Run Tietze in LargerAbelianQuotient with different heuristics
Burnside-Brauer method for permutation groups.

Generically:
Factor out radical part stemming from P-core.
Spin submodules spanned by augmentation ideal vectors for first submodul
chain and chop, to avoid irreducibility tests in large regular module.

Also flag fix for `TrivialModule`.
Uses Module isomorphism/automorphism code, modeled on Cannon/Holt autom.
group paper.

Also add action of compatible pairs
Includes action of compatible pairs on cohomology group and model.
Copy link
Member

@fingolfin fingolfin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the added testinstall test. There are still about 300 new lines of code which are not covered by a test in testinstall, and the new code only has a coverage rate of ~76% as a result. I'd prefer if it was higher (not because high coverage by itself is a magic goal, but rather because it would increase my confidence in all those special cases, and also in our ability to keep this code from breaking in the future).

Anyway, I don't think we need to delay this further because of that. So let's merge it soon. (I'll wait for Travis to finish with its current truck loads of builds before merging it).

B:=MTX.ModuleAutomorphisms(M);
if Size(B)>1 then
for i in Set(GeneratorsOfGroup(B)) do
Add(pool,DirectProductElement([One(A),i]));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This loop is still not covered.


if oper=fail then
Ggens:=GeneratorsOfGroup(G);
oper := GroupHomomorphismByImagesNC( G, Mgrp, Ggens, M.generators );
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

else
if not IsPcgs(Ggens) then
elmlist:=fail;
epi:=EpimorphismFromFreeGroup(G);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

until l=1;
else
#D:=Stabilizer(D,M.generators,gens,genimgs,f);
hf:=SparseIntKeyVecListAndMatrix(false,Concatenation(M.generators));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

else
a:=MaximalAbelianQuotient(G);
si:=List(gens,x->ImagesRepresentative(a,x));
sub:=IrreducibleModules(Group(si),F,1);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

monreps:=fmgens{[loff+1..off]};
monreal:=mgens{[loff+1..off]};
if IsBound(m!.rewritingSystem) then
k:=m!.rewritingSystem;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is one of only two lines in this function which is no covered. Very nice!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this is as a hook for future extensions (RWS for simple groups).

else x:=-i/2;fi;
# word must be freely cancelled
if Length(g)>0 and x=-g[Length(g)] then
Unbind(g[Length(g)]);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(This is the other uncovered line).

lib/twocohom.gi Show resolved Hide resolved
AddSet(hastail,Length(rules));
fi;
elif Length(r[1])>1 then
if Length(r[2])=0 then Error("generator is trivial");fi;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still not covered.

lib/twocohom.gi Show resolved Hide resolved
@fingolfin fingolfin merged commit f00ff61 into gap-system:master May 3, 2019
@fingolfin fingolfin changed the title Non-solvable extensions: 2-Cohomology and module computation Implement 2-cohomology and module computations for arbitrary finite groups, not just solvable ones, via TwoCohomologyGeneric Aug 21, 2019
@DominikBernhardt DominikBernhardt added release notes: added PRs introducing changes that have since been mentioned in the release notes and removed release notes: to be added PRs introducing changes that should be (but have not yet been) mentioned in the release notes labels Aug 21, 2019
@olexandr-konovalov olexandr-konovalov added this to the GAP 4.11.0 milestone Feb 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind: new feature release notes: added PRs introducing changes that have since been mentioned in the release notes topic: library
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants