Created
June 3, 2021 05:51
-
-
Save diracdeltafunk/d886b9ea31d1f61b19d8ca77bbda4696 to your computer and use it in GitHub Desktop.
Checks that the total number of h-fixed points is |C(h)| times the number of G-classes in the inverse image of {h}
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CheckClaim := function (G, N) # Checks if the claim holds for a given normal subgroup N in a given finite group G | |
local f, H, A, ActionHonA, NumFixedPoints, C, NumConjClassesIntersecting, h; | |
# Print("\nChecking\nG = ", G, "\nN = ", N, "\n...\n"); | |
f := NaturalHomomorphismByNormalSubgroup(G, N); # G → H ≅ G/N | |
H := Image(f); # ≅ G/N | |
# NOTE: H = img(f) does *not* consist of cosets, it has some other internal representation! | |
# This is why we need to hang on to the actual map f, to keep track of things. | |
A := Orbits(N, G, OnPoints); # N-conjugacy classes of G | |
ActionHonA := function (a, h) # The action of H = G/N on A | |
local h0, a0; | |
h0 := PreImagesRepresentative(f, h); # Pick an element of the coset corresponding to h ∈ H | |
a0 := a[1]; # Pick an element of the orbit a ∈ A | |
return Orbit(N, a0^h0, OnPoints); # Take the N-conjugacy class of (a0 conjugated by h0) | |
end; | |
NumFixedPoints := function (h) # Directly counts fixed points of the action of h ∈ H | |
local count, a; | |
count := 0; | |
for a in A do | |
if IsEqualSet(ActionHonA(a, h), a) then | |
count := count+1; | |
fi; | |
od; | |
return count; | |
end; | |
C := ConjugacyClasses(G); | |
NumConjClassesIntersecting := function (h) # Directly counts the number of conjugacy classes of G | |
# which are sent to the conjugacy class of h ∈ H | |
# NOTE: A conjugacy class X in G is sent to the conjugacy class of aN iff X ∩ aN ≠ ∅, | |
# hence the name of this function. | |
local count, coset, c; | |
count := 0; | |
coset := PreImages(f, h); | |
for c in C do | |
if Intersection(c, coset) <> [] then | |
count := count+1; | |
fi; | |
od; | |
return count; | |
end; | |
# Now we're ready to check the claim. | |
for h in H do | |
if Size(Centralizer(H,h)) * NumConjClassesIntersecting(h) <> NumFixedPoints(h) then | |
# Print("FAILURE!\nOn coset ", PreImagesRepresentative(f, h), "N\n", Size(Centralizer(H,h)), " * ", NumConjClassesIntersecting(h), " != ", NumFixedPoints(h)); | |
return false; | |
fi; | |
od; | |
return true; | |
end; | |
# Let's check the claim for all quotients of all groups of small orders! | |
bound := 255;; | |
for n in [1..bound] do | |
gs := AllSmallGroups(n); | |
for G in gs do | |
for N in NormalSubgroups(G) do | |
if not CheckClaim(G,N) then | |
Print("Failure on G = ", G, " N = ", N, "\n"); | |
fi; | |
od; | |
od; | |
Print("Checked groups of order ", n, "\n"); | |
od; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment