From 0012b969fa430178dc265d9fa4fce1c99a434ef8 Mon Sep 17 00:00:00 2001 From: Thomas Breuer Date: Fri, 12 Apr 2024 09:24:52 +0200 Subject: [PATCH] fix a problem with `isomorphism` for trivial groups (#3586) --- experimental/GModule/Cohomology.jl | 7 ++++--- experimental/GModule/test/runtests.jl | 4 ++++ src/Groups/homomorphisms.jl | 12 ++++++++++-- test/Groups/homomorphisms.jl | 2 ++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/experimental/GModule/Cohomology.jl b/experimental/GModule/Cohomology.jl index aa32aae0ae39..c8fb1964a33f 100644 --- a/experimental/GModule/Cohomology.jl +++ b/experimental/GModule/Cohomology.jl @@ -184,11 +184,12 @@ end function fp_group_with_isomorphism(C::GModule) #TODO: better for PcGroup!!! if !isdefined(C, :F) - if (!isa(group(C), FPGroup)) && is_trivial(group(C)) + G = group(C) + if (!isa(G, FPGroup)) && is_trivial(G) C.F = free_group(0) - C.mF = hom(group(C), C.F, gens(group(C)), elem_type(C.F)[]) + C.mF = hom(G, C.F, elem_type(G)[], elem_type(C.F)[]) else - C.F, C.mF = fp_group_with_isomorphism(gens(group(C))) + C.F, C.mF = fp_group_with_isomorphism(gens(G)) end end return C.F, C.mF diff --git a/experimental/GModule/test/runtests.jl b/experimental/GModule/test/runtests.jl index c379e59525ff..5697809cc3e1 100644 --- a/experimental/GModule/test/runtests.jl +++ b/experimental/GModule/test/runtests.jl @@ -24,6 +24,10 @@ end @testset "Experimental.gmodule" begin + G = small_group(1, 1) + z = Oscar.RepPc.reps(QQ, G) + _, mp = Oscar.GrpCoh.fp_group_with_isomorphism(z[1]) + @test is_bijective(mp) G = small_group(7*3, 1) z = Oscar.RepPc.reps(abelian_closure(QQ)[1], G) diff --git a/src/Groups/homomorphisms.jl b/src/Groups/homomorphisms.jl index c790e9546911..6f81429d2b22 100644 --- a/src/Groups/homomorphisms.jl +++ b/src/Groups/homomorphisms.jl @@ -534,8 +534,16 @@ function isomorphism(::Type{FPGroup}, G::GAPGroup; on_gens::Bool=false) isos = get_attribute!(Dict{Tuple{Type, Bool}, Any}, G, :isomorphisms)::Dict{Tuple{Type, Bool}, Any} return get!(isos, (FPGroup, on_gens)) do if on_gens - f = GAPWrap.IsomorphismFpGroupByGenerators(G.X, - GAP.Globals.GeneratorsOfGroup(G.X)) + Ggens = GAPWrap.GeneratorsOfGroup(G.X) + if length(Ggens) == 0 +# TODO: remove this special treatment as soon as the change from +# https://github.com/gap-system/gap/pull/5700 is available in Oscar +# (not yet in GAP 4.13.0) + f = GAP.Globals.GroupHomomorphismByImages(G.X, GAP.Globals.FreeGroup(0), GAP.Obj([]), GAP.Obj([])) + GAP.Globals.SetIsBijective(f, true) + else + f = GAPWrap.IsomorphismFpGroupByGenerators(G.X, Ggens) + end else f = GAPWrap.IsomorphismFpGroup(G.X) end diff --git a/test/Groups/homomorphisms.jl b/test/Groups/homomorphisms.jl index 74f7420501fd..a8963636ab53 100644 --- a/test/Groups/homomorphisms.jl +++ b/test/Groups/homomorphisms.jl @@ -425,6 +425,8 @@ end @test [preimage(f2, x) for x in gens(codomain(f2))] == gens(G) @test [preimage(f, x) for x in gens(codomain(f))] != gens(G) + @test is_bijective(isomorphism(FPGroup, symmetric_group(1), on_gens = true)) + G = abelian_group(PermGroup, [2, 2]) f = @inferred isomorphism(FinGenAbGroup, G) @test codomain(f) isa FinGenAbGroup