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 , the subgroups defined by the values of coincide:

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 , define:

Then:

GVZ condition:
for all nonlinear

If this holds for all nonlinear irreducible characters, then is a GVZ-group.


πŸ” 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