
Verifying the GVZ Property in GAP: A Computational Approach
As part of our research with Dr. Harmon, we aim to verify whether certain finite groups satisfy the GVZ property, meaning that for every nonlinear irreducible character
We implemented this test in GAP, a system for computational discrete algebra with powerful character theory tools.
π Full Flowchart of the Algorithm
START
β
βΌ
Get character table of G:
tbl := CharacterTable(G)
β
βΌ
Get all irreducible characters:
chars := Irr(tbl)
β
βΌ
For each Ο β chars:
βββΊ Is Ο nonlinear? (Ο(1) > 1)
β βββΊ No β skip this Ο
β βββΊ Yes
β β
β βΌ
β Initialize empty sets:
β V_elements := []
β Z_elements := []
β β
β βΌ
β For each conjugacy class c_i:
β For each g β c_i:
β βββΊ If Ο(c_i) β 0 β add g to V_elements
β βββΊ If |Ο(c_i)| = Ο(1) β add g to Z_elements
β β
β βΌ
β Form subgroups:
β V(Ο) := Subgroup(G, V_elements)
β Z(Ο) := Subgroup(G, Z_elements)
β β
β βΌ
β Compare:
β Is V(Ο) = Z(Ο)?
β βββΊ No β print failure info
β βββΊ Yes β continue
β
βΌ
If all Ο passed, return TRUE (G is GVZ)
Else, return FALSE
β Working GAP Code
IsGVZGroup := function(G)
local tbl, chars, chi, vchi, zchi, isGVZ, g, v_elements, z_elements, i, ccl, class_pos;
tbl := CharacterTable(G);
chars := Irr(tbl);
ccl := ConjugacyClasses(tbl);
isGVZ := true;
for i in [1..Length(chars)] do
chi := chars[i];
if chi[1] > 1 then
v_elements := [];
z_elements := [];
for class_pos in [1..Length(ccl)] do
for g in Elements(ccl[class_pos]) do
if chi[class_pos] <> 0 then
Add(v_elements, g);
fi;
if AbsoluteValue(chi[class_pos]) = chi[1] then
Add(z_elements, g);
fi;
od;
od;
vchi := Length(v_elements) > 0
and Subgroup(G, v_elements) or TrivialSubgroup(G);
zchi := Length(z_elements) > 0
and Subgroup(G, z_elements) or TrivialSubgroup(G);
if vchi <> zchi then
Print("Character ", i, " fails GVZ condition.\n");
Print("Character degree: ", chi[1], "\n");
Print("V(chi) size: ", Size(vchi), "\n");
Print("Z(chi) size: ", Size(zchi), "\n");
isGVZ := false;
fi;
fi;
od;
return isGVZ;
end;
π§ What the Code Does
Weβre checking the GVZ condition:
For each nonlinear irreducible character
Then:
GVZ condition:
for all nonlinear
If this holds for all nonlinear irreducible characters, then
π What We Learned So Far
-
We only need to test nonlinear irreducible characters because for linear ones (i.e.,
), the GVZ condition is vacuously true: -
CharacterTable(G)
pulls precomputed symbolic data, which is much faster and avoids looping over elements of. -
Irr(tbl)
gives us a list of irreducible characters as arrays of values over conjugacy classes, not group elements. -
ConjugacyClasses(tbl)
returns symbolic class identifiers (not concrete sets), which is ideal for character-theoretic computation.
π Next Steps
Weβll begin running this script across batches of known o-basis groups to test our conjecture empirically.
Weβll log each result in a .csv
file including:
- Group ID (e.g.
SmallGroup(32,27)
) - Character degrees
- Whether the GVZ condition holds
- Number of characters that fail the condition (if any)
Once we gather enough data, weβll explore:
- π§ Machine learning tools to detect deeper structural traits
- π Visualizations comparing GVZ vs. o-basis patterns
- π§© Discovering counterexamples or formulating improved conjectures