Appendix F: Bordered Group-Developed CHM

created: 2026-09-18

updated: 2026-09-20 by W. Bruzda


Not every file in the repository is listed on this page. The collection grows faster than these tables – for the complete set, browse the repository directly.

This appendix records the defect and the Haagerup set of 1118 complex Hadamard matrices that are developed over a finite group. The construction is not new – it is the classical group-developed family [178, 150, 183], studied since the 1990s. What has not been recorded is what these matrices look like from the point of view of this Catalog: their defect d and #Λ. Every one of the 1118 below has d = 0, so this extends the number of isolated cases.

construction

Take a finite group G of order N - 1 and a unimodular F : G → U(1). Border the array [F(hg-1)]g,h∈G with a row and a column of ones. The result is a complex Hadamard matrix of order N exactly when

$$ \sum_g F(g)=-1\quad\text{and}\quad \sum_g F(g) \overline{F(gu)}=-1 : u \neq e. $$

That system is square for every finite group: |G| real unknowns against |G| real conditions, with no arithmetic condition on N and no ansatz to guess. That is what makes an exhaustive sweep possible. The solver was run over every one of the 144 groups of order 4 to 34, from a group library built here and verified against A000001, so the list below is complete over its index groups rather than being a collection of whatever a search happened to find.

For G cyclic these are the circulant core matrices of Nicoară and Worley [182], the one case of the construction that has been studied before. Nothing forces G to be cyclic, or abelian, hence of the 130 groups that carry a matrix here only 25 are cyclic, so 105 lie outside that case and 948 of the 1118 matrices below are developed over non-abelian groups.

The sequence LN from Appendix E meets this condition. It is the case G cyclic with an extra conjugate symmetry – and its VN sequence does not. Neither is listed here. LN came first and the classes this sweep rediscovered are among the 23 it excludes as already catalogued.


Everything here is numerical. The generators are solutions of the system above, found by Newton from random starts and exact only to floating point, so what is collected below is a sample of the solution set rather than a classification of it. That is also why so much of the description concerns tolerances, rank thresholds and residuals rather than the construction itself. An invariant is only as sharp as the accuracy behind it and the easiest error to make is to read rounding as structure.

A bordered group-developed matrix is determined by the group and by the single unimodular function F, that is by N - 1 phases, not by the N2 entries of H. Each file therefore stores the generator, i.e., one row holding the phases of F in the order of the group elements, so that F = exp(2πi·a) as usual.

GH_N_d_L_group.gen
GH_N_d_L_group__k.gen

        N     = size(H)
        d     = defect(H) = 0 (here it always vanishes)
        L     = #Λ(H) = cardinality of the Haagerup set
        group = the group of order N - 1 the core is developed over
        __k   = only when several inequivalent classes share all four
                it labels the file and it is not part of the group name

The matrix is recovered by reading F through the index table I(i, j) = position of gjgi-1 which GH_groups.tsv tabulates for each of the 130 groups used here:

$$ H(*,*) = H(*,h) = H(g,*) = 1,\qquad H(g,h) = F(h g^{-1}) = F(I(g,h)) $$

Two readers are provided and either returns H:

octave:1> H = GH_expand("GH_13_0_89_A4.gen");

$ python3 gh_expand.py GH_13_0_89_A4.gen # prints the N × N phase array

Group names follow the usual conventions: Z12xZ2, D11, Q16, SD32, Dic7, He3 (Heisenberg), SL2_3, A4, S4, Dih... (generalised dihedral), ZasZb for a semidirect product Za⋊Zb and Gn_i for the groups of order 32 that have no short standard name.

The core of a group-developed matrix is a Cayley table with its symbols relabelled by F, so its pattern is always a Latin square. Its values form one as well exactly when F is injective (no entry repeats in a row or in a column). 588 of the 1118 matrices have that property (the smallest is at N = 12) and carry the flag L in browse. The flag records a property of the generator. It is not a separate construction and nothing below depends on it.


The system was solved over every one of the 144 groups of order 4 to 34, that is for every N from 5 to 35 and every group of order N - 1, from 400 to 5000 random starts each. Of the 144 groups, 140 yielded a solution. No solution was found in these runs for the other four, all 2-groups of order at most 16, namely Z22, Z23, Z2×Z4 and Z24. Every group of order 32 succeeds, including Z25.

The yield tracks the group theory, not the arithmetic of N. Order 32 has 51 groups, dimension N = 33 accounts for 627 of the 1141 classes and 11 of the 31 dimensions have only one group. The single dimension producing no isolated matrix is N = 8 where the only group of order 7 is Z7 and every converged solution is a real Paley matrix with d = 21. This is (so far) consistent with Appendix A where no isolated BH(8, q) occurs for any q ⩽ 16 among 5472 matrices.

Ngroups of order N - 1 (solvable)isolated classes
52 (1)1
61 (1)1
72 (2)2
81 (1)0
95 (3)4
102 (2)3
112 (2)7
121 (1)1
135 (5)18
141 (1)4
152 (2)5
161 (1)3
1714 (13)60
181 (1)6
195 (5)24
201 (1)4
215 (5)34
222 (2)8
232 (2)10
241 (1)4
2515 (15)162
262 (2)10
272 (2)16
285 (5)34
294 (4)30
301 (1)4
314 (4)31
321 (1)3
3351 (51)627
341 (1)5
352 (2)20
total144 (140)1141

The 1118 matrices below are pairwise inequivalent, by exhaustive monomial search. The count of 1141 classes includes 23 further ones that the sweep found but that the Catalog already holds. They carry no generator here and were not re-measured in this release, so their #Λ still comes from the superseded routine. The 1118 carry a triple (N, d, #Λ) that (so far) occurs nowhere else in the rest of the Catalog. Within this appendix the triple is not a complete invariant because, among the 1118 matrices below, 185 triples are shared by two or more of the classes, most often by a group and one of its non-abelian partners of the same order, such as Z2×Z5 and D5 at N = 11. They are too many to list here and the full list of invariants is GH_classes.tsv and the generators themselves are the GH_*.gen files. Below is the smallest #Λ in each dimension. None is of Butson type for q ⩽ 104.

matrixNgroupdefect#Λsymmetric
GH11,0,13911Z2×Z50139–
GH12,0,46312Z110463–
GH13,0,8913A4089–
GH14,0,10314Z130103–
GH15,0,34515Z2×Z70345–
GH16,0,41516Z3×Z50415–
GH17,0,12117M160121–
GH18,0,1818Z17018–
GH19,0,26319Z2×Z3×Z30263–
GH20,0,84920Z190849–
GH21,0,18921Z5⋊Z40189–
GH22,0,56122Z7⋊Z30561–
GH23,0,127923D1101279–
GH24,0,358724Z2303587–
GH25,0,40325SL(2,3)0403–
GH26,0,180126Z5×Z501801–
GH27,0,77527D130775–
GH28,0,120728He301207–
GH29,0,252129Dic702521–
GH30,0,696130Z2906961–
GH31,0,322931D1503229–
GH32,0,843132Z3108431–
GH33,0,33833SD320338–
GH34,0,1009734Z3×Z11010097–
GH35,0,470535D1704705–

These scripts (made with help of Claude) rebuild the group library, the search and the invariants from scratch. Two things they do not reproduce: 1. the stored generators carry 60 significant digits, obtained by a separate high-precision refinement, while gh_report.py writes 17, and 2. the random search is not deterministic across library versions. The search is a capped sample of the solution set, not an enumeration of it so a re-run may rediscover some of these classes, miss others and find classes not listed here.

gh_groups.py   all 147 groups of order ⩽ 34, built from scratch
gh_names.py    readable names for them
gh_sweep.py    solves the system over every group, in parallel
gh_report.py   invariants, equivalence classes, comparison with the catalog
gh_expand.py   rebuilds H from a generator (python)
GH_expand.m    rebuilds H from a generator (octave)
gh_check.py    is a given matrix group-developed and over which group?

$ python3 gh_groups.py 34 # builds and verifies the library
$ python3 gh_sweep.py --orders 4-34 --out GH_sweep.json --tmp /tmp
$ python3 gh_report.py GH_sweep.json out /tmp # writes the generators

Every group of order below 60 is solvable, so it has a normal subgroup of prime index, hence enumerating the extensions H.⟨t⟩ over all H of order n/p is complete. The resulting counts agree with the known number of groups of each order (A000001) at every order up to 34, which certifies both completeness and the absence of duplicates.


warning about defect↑

Deciding d numerically means deciding the rank of a real linear system and two different things can go wrong. A rank threshold set too high counts a small non-zero singular value as zero, which only raises the computed defect and since d ⩾ 0 that can never identify an isolated matrix. The other direction is the dangerous one. At a solution where the Jacobian of the system above is singular, Newton converges only linearly, F stalls at accuracy √ε ≈ 10-8 and the residual does not reveal it – being quadratic in the error, it still reads 10-16. The singular values that ought to vanish are then lifted to 10-8 and counted as non-zero and the defect is reported far too small. At N = 8 this returns d = 0 for a Paley matrix whose true defect is 21.

Accordingly every solution was screened on the smallest singular value of the Jacobian of the system above, relative to the largest. This is numerical evidence, not a certificate: a single error law does not describe every singular Newton convergence. What is recorded in GH_census.tsv is the per-group degenerate tally, not a per-matrix value. Solutions failing it are excluded and 21 of the 1179 representatives did, ten of which would otherwise have been listed as isolated. The defects of the 1118 matrices published here were computed twice – from the singular values of the first-order system and with the catalog tools – agreeing in every case. The 23 further classes counted in the 1141 have no generator here and were not re-measured. The same caution applies to any defect in this catalog obtained from a numerically found matrix.

#Λ here is taken with CHM_tool/lambda at its default ε = 10−8, which counts two invariants equal when the distance between them falls below ε. These counts are resolved at that tolerance, not exact cardinalities: 131 of the 1118 change again at 10−9 and a further 11 at 10−10. Nor is 10−8 uniform across the Catalog – Appendix E states 10−6 for its own figures. So #Λ may be compared across appendices only after re-measuring both sides at one tolerance, and a match or a mismatch of (N, d, #Λ) is evidence about equivalence, never a decision. That is what check_me is for.