GroupLoopTest.nb

Validation of GroupLoopHoop.m

R.H.Beresford. 11/10/6. From GroupLoopPackage.nb 2004-5

1. Tests & Data Validation.

Summary. A series of tests validate all the generation and prescription rules in the GroupLoopHoop database. Tables without generator rules or prescriptions are first identified and counted; every prescription and generator rule is then tested. Incorrect identification of the rules would be reported. Clifford, Grassmann, and Cayley-Dickson algebras are tested. All signed tables are listed. All the generator & matrix generator rules are tested. No significant errors were found in the current version; if any are found in copies, they must arise from transcription errors. Mathematica users should download, run (in your ExtraPackages file), save and close the GroupLoopHoop package from http://library.wolfram.com/infocenter/MathSource/4894/ and then use:-

<< GroupLoopHoop`

1.1 Validation of prescription Rules.

Test 1 counts the loops in the database, finding only two that are not created as a protoloop; those without prescriptions are then counted and listed.

Test 1. Report  Loops (< 64 elements) without Protoloops.

np = 0; nos = 0; noc = 0; lp = Length[loop] - 1; 
    Do[Do[noc++; 
        If[loop[[m, n, 4]] === "ca[]" && loop[[m, n, 5]] === {} && 
            loop[[m, n, 7]] === {} && loop[[m, n, 8]] === {} && 
            loop[[m, n, 9]] === {} && 
            Length[loop[[m, n]]] < 10, nos++; 
          If[m < 64, 
            Print[{gd[m, n][[3, 1]], " has no protoloop"}]; 
            nos = 0], np++], {n, Length[loop[[m]]]}], {m, 
        lp}]; {noc, "loops ", np, " with protoloops"}

139 loops have no protoloops. dico was found for them when they were created via GAP in external files.

Test 2. Unprescribed loops.

unp = {}; noc = 0; 
    Do[If[loop[[m]] ≠ {}, 
        Do[noc++; 
          If[loop[[m, n, 4]] === "ca[]", 
            AppendTo[unp, {{m, n}, loop[[m, n, 1]]}]], {n, 
            Length[loop[[m]]]}]], {m, 1, lp}]; 
    Print[{Length[unp], " tables without prescriptions"}];

Print["Small Loops without prescriptions:-"]; 
    tbl = Table[{unp[[i]], unp[[i + 24]]}, {i, 24}]; 
    tbl // tf

Test 3. Correctness of first available prescriptions.

mp uses the first available prescription to create a table. An error is reported if this does not have the correct id. set pr=1 to track progress. (As Clifford(3) is an isomorph of Clifford(1,2) it is shown as an error.)

pr = 0; presco = 0; 
    tt = AbsoluteTime[]; Do[
          Do[If[pr > 0, Print[{m, n}]]; 
If[
              Position[unp, {m, n}] == {}, 
              id[test = 
                  mp[{m, n}]]; 
If[{mm, nn} == {m, 
                    n}, presco++; mn = {mm, nn}, 
                Print[gd[], " ", dico[test], " ", 
                  loop[[m, n, 1]]]]], {n, Length[loop[[m]]]}], {m, 2, 
            lp - 1}]; // Timing
Print[{AbsoluteTime[] - tt, "actual seconds\n", 
        presco, " correct prescriptions.\nLast mm,nn=", mn}]

Test 4. Cayley-Dickson validation & listing.

cdcases = 0; cdd = {}; 
    Do[Do[If[Take[Characters[loop[[m, n, 4]]], 
              2] == {"c", "d"}, cdcases++; 
          AppendTo[cdd, {loop[[m, n, 1]], loop[[m, n, 4]]}]]; 
        If[idc[] ≠ loop[[m, n, 1]], Print[{m, n}]], {n, 
          Length[loop[[m]]]}], {m, 
        33}]; {cdcases, " have cd prescriptions"}

AppendTo[cdd, {}]; AppendTo[cdd, {}]; AppendTo[cdd, {}]; 
    AppendTo[cdd, {}]; AppendTo[cdd, {}]; 
    tbl = Table[{cdd[[i]], cdd[[i + 15]], cdd[[i + 30]]}, {i, 
          15}]; tbl // tf

Four of these (C8n, C12n, Alt12n, and Sed) are not conservative. Candidates for inclusion in the database should be checked by the following routine. The first  case is neither conservative nor Moufang, though it has the same dico as Q8C2M:-

id[
        tst = co[cd[{1, -1, -1, 1}], 
            C2]];
If[indexTableQ[tst], {idc[tst], associativeQ[tst], alternativeQ[tst], 
        MoufangQ[tst], dico[tst]}]
id[tst = mp["Q8C2M"]];
If[indexTableQ[tst], {idc[tst], associativeQ[tst], alternativeQ[tst], 
        MoufangQ[tst], dico[tst]}]

Other Clifford-like algebras are created by the cl routine, but their protoloops are generated by other routines:-

Test 5. Generalized Clifford Algebra validation & listing.

clcases = 0; cld = {}; 
    Do[Do[If[Take[Characters[loop[[m, n, 4]]], 
              2] == {"c", "l"}, clcases++; 
          If[idc[] ≠ loop[[m, n, 1]], Print[{m, n}]]; 
          AppendTo[cld, {loop[[m, n, 1]], loop[[m, n, 4]]}]], {n, 
          Length[loop[[m]]]}], {m, 
        33}]; {clcases, " have cl prescriptions"}

tbl = Table[{cld[[i]], cld[[i + 8]]}, {i, 8}]; 
    tbl // tf

Test 6. Signed Table Generation.

tscases = 0; tsd = {}; 
    Do[Do[If[Take[Characters[loop[[m, n, 4]]], 
              2] == {"t", "s"}, tscases++; 
          If[idc[] ≠ loop[[m, n, 1]], Print[{m, n}]]; 
          AppendTo[tsd, {loop[[m, n, 1]], loop[[m, n, 4]]}]], {n, 
          Length[loop[[m]]]}], {m, 
        24}]; {tscases, " have ts prescriptions"}

1.2 Validation of Relator Rules.

Test 7. Relator rules validation.

ung = {}; totl = 1; relco = 0;
Do[Do[totl++; 
        If[loop[[m, n, 5]] === {}, 
          AppendTo[ung, {{m, n}, loop[[m, n, 1]]}], relco++], {n, 
          Length[loop[[m]]]}], {m, 2, lp}]; 
    Print[totl, " loops, ",  relco, " relators."]; 
    Print[Length[ung] " tables without generation rules."];
\(Print[
      Length[unpg = 
            Intersection[unp, 
              ung]]\ " tables without prescription or generation rules."]\)

pr = 0; genco = 0; tt = AbsoluteTime[]; 
    Do[Do[If[pr == 1, Print[gd[m, n]]]; 
          If[Position[ung, {m, n}] === {}, 
            If[(gi = 
                    id[mp[{m, n}, 
                        1]]) ≠ (gj = gd[{m, n}][[3, 
                        1]]), Print[{gi, gj, m, n}], genco++; 
              mn = {m, n}]], {n, 1, Length[loop[[m]]]}], {m, 3, lp - 1}] // 
      Timing
{genco, " Loops tested"}
Print[{AbsoluteTime[] - tt, "actual seconds.\nLast mm,nn=", 
        mn}]

Many 64-element group descriptions are incomplete.

Error report occasionally appear for valid cases. Repeat the specific test to check these.

1.4 hoopTest for Hoop Algebras.

hoopTest[loop_identifier] looks in the database for a shape for the loop, and attempts to create it if it is not there. It aborts if the conservation test fails. Division using  genInverse is tested. Then polar-vector transformations are tested. Polar algebras are tested for +ve powers and roots, and (if abelian) for a valid solution of a random real quadratic equation. Finally, negative powers are tested (as non-abelian loops fail this test it is only applied to abelian tables, and is repeated until a vec with the correct shape is found, for up to 10 times.) The output identifies the loop (if it is in the database) and reports which tests have been passed. Test 10 tests the loops with known shapes (and the first non-hoop with known shape, Q4n):-

Test 8. hoopTest for small Loops.

Do[Print[hoopTest[hoopList[[ijk]]]], {ijk, 
        Length[hoopList] - 3}]

1.5 Plex-conjugates.

mcount = 0; 
    pl = {};

    Do[
Do[plex =. ; id[mp[m1, n1]]; 
          If[(Head[sh[gmn]] == List) && 
              ListQ[plex], 
AppendTo[pl, 
              gmn]; mcount++;], 
{n1, 
            Length[loop[[m1]]]}], 
{m1, 2, 
          16}];

    Print[{mcount, " plex-conjugates", pl}]

1.6 Remainders.

Multiplication (and division) using hoops with disparate zero sizes is not conservative unless the appropriate sizes of the multiplicands are "ejected" as remainders. The product is "projected" onto a sub-algebra with zeroed sizes. This is tested by the following procedure, which identifies the hoop, pads short vectors with zeroes, multiplies them, saves the result as R1, AB, R2, shows the results and their shapes, and confirms that AB/B+Rl=A & AB/A+Rr=B.

\(\(muldiv[Ao_, Bo_, H_] := 
        Module[{s = Length[sh[H]], z = Table[0, {i, 32}]}, gmn = H; 
          glo = mp[H]; mm = Length[glo]; 
          s = Take[Flatten[{"shape", Range[s]}]]; 
          A = Take[Flatten[Append[Ao, z]], mm]; 
          B = Take[Flatten[Append[Bo, z]], mm]; 
          Print[{Flatten[Append[{"A  ="}, A]], 
                Flatten[Append[{"B  ="}, B]], 
Flatten[
                  Append[{"AB ="}, 
                    AB = hoopTimes[A, B]]], 
Flatten[
                  Append[{"Rl ="}, R1 = Rl]], 
Flatten[
                  Append[{"Rr ="}, R2 = Rr]]} // tf]; 

          Print[Chop[{s, Flatten[Append[{"shA  ="}, shape[A]]], 
                  Flatten[Append[{"shB  ="}, shape[B]]], 
                  Flatten[Append[{"shAB ="}, shape[AB]]], 
                  Flatten[Append[{"shRl ="}, shape[Rl]]], 
                  Flatten[Append[{"shRr ="}, shape[Rr]]]}] // tf]; 
          Print[Chop[{"AB/B+Rl=A  ", 
                hoopTimes[AB, hoopInverse[B]] + R1, "
AB/A+Rr=B  ", 
                hoopTimes[hoopInverse[A], AB] + R2}]]];\)\)

The remainders have been checked for all the members of hoopList. Examples, with some zero sizes, are:-

muldiv[{3. , 4. , 1. , 0. , 1. , 1. , 2. , -2. , 3. , 
          4. , -2. , 3. , -1. , 0. , 3. , 2. }, {2. , 1. , 
          2. , -4. , 3. , -4. , 3. , 1. , 0. , 0. , -3. , 2. , 
          2. , 4. , 
          1. , -2. }, 
"C3C4"];

muldiv[{3, 4, 1, 0, 1, 1, 2, -2, 3, 4, -2, 3, -1, 0, 3, 
            2} // N, {2, 1, 2, -4, 4, 2, -1, 2, 0, 0, -3, 2, 2, 
            4, 1, -2} // N, 
"CL03"];

muldiv[{3, 4, 1, 0, 1, 1, 2, -2, 3, 4, -2, 3, -1, 0, 3, 
            2} // N, {2, 1, 2, -4, 3, -4, 3, 1, 0, 0, -3, 2, 2, 
            4, 1, -2} // N, 
"D3"];

2. Octonion and Dozal conservation.

Summary. Conservation is investigated for Octonion and Dozal algebras.

2.1 Conservation of Octonion Compositions.

hoopTimes[A,B,tst,1] uses a minimal multiplication routine, developed to test conservation of large tables that may not be in the databank. The table is conservative if at least one result is 0. Repeat the test if both are zero, as this means that the product has a zero size.

tst = co[Oct, tst1 = mp[8, 2]]; id[tst1]
A = Table[Random[Integer, {-9, 9}], {i, Length[tst]}]; 
    B = Table[
        Random[Integer, {-9, 9}], {i, 
          Length[tst]}];
AB = hoopTimes[A, B, tst, 1];
sA = Det[gmap[tst, A]]; 
    sB = Det[gmap[tst, B]];
sAB = 
      Det[gmap[tst, 
          AB]]; {Chop[(sA sB + sAB)/(sA + 
              sB)], 
Chop[(sA sB - sAB)/(sA + 
              sB)]}

Direct compositions of Oct and the followng tables gave the following results:-
Conservative.					Non-conservative.
C2,C3,C4,K,C5,C3C2,C8,C4C2,	C5n,D3,C6n,D4,Q8,D5,Q12,A4,
KC2,C9,C3C3,C10,C11,C3C4,C3K,	D3C2,Alt12n,KiC4,C4iC4,C8pC2,
C16,C4C4,C8C2,C4K,KK		D8,Q8iC2,Q16,D4C2,Q8C2,P16,Oct
In this test, all abelain groups, and no non-abelian tables, give conservative octonions on direct composition with Oct.
Indirect compositions (where the result differed from the direct composition) gave no conservative tables, as in the following test:-

tst = co[Oct, tst1 = mp[6, 2]]; {Length[tst], 
      id[tst], 
dico[tst], 
alternativeQ[
        tst], 
A = 
        Table[Random[Integer, {-9, 9}], {i, Length[tst]}]; 
      B = Table[
          Random[Integer, {-9, 9}], {i, 
            Length[tst]}]; 
AB = 
        hoopTimes[A, B, tst]; 
sA = Det[gmap[tst, A]]; 
      sB = Det[gmap[tst, B]]; 
sAB = 
        Det[gmap[tst, 
            AB]]; 
Chop[(sA sB - sAB)/(sA + 
              sB)]}

2.2 Conservation of Dozal functions.

This section attempts to tabulate the conservation rules for Dozal, to help relate them to physics.
Test cases for A, polar forms (orbits) that are converted to vectors:-

testA = { (*1 αβϵζληκ*) {1. , 
            1. ,  .34,  .4,  .51,  .22,  .71,  .3,  .82, 
            0.32,  .9,  .66}, 
 (*2 α*) {1, 
            0. ,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0}, 
 (*3 β*) {0. , 
            1,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0}, 
 (*4 ϵ or γ*) {0. ,  .0, 
            1,  .1,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0}, 
 (*5 ζ*) {0. ,  .0, 0. ,  .0, 
            1,  .1,  .0,  .0,  .0,  .0,  .0,  .0}, 
 (*6 λ*) {0. ,  .0,  .0,  .0,  .0,  .0, 
            1,  .2,  .0,  .0,  .0,  .0}, 
 (*7 η*) {0. ,  .0,  .0,  .0,  .0,  .0, 0. , 0. , 
            1,  .3,  .0,  .0}, 
 (*8 κ*) {0. ,  .0,  .0,  .0,  .0,  .0,  .0,  .0,  .0, 0. , 
            1. ,  .4}, 
 (*9 ϵζ*) {0. ,  .0, 1,  .1, 
            1. ,  .1,  .0,  .0,  .0,  .0,  .0,  .0}, 
 (*10 ϵλ*) {0. ,  .0, 1,  .1,  .0,  .0, 
            1. ,  .1,  .0,  .0,  .0,  .0}, 
 (*11 ϵη*) {0. ,  .0, 1,  .1,  .0,  .0,  .0,  .0, 
            1. ,  .1,  .0,  .0}, 
 (*12 ϵκ*) {0. ,  .0, 1,  .1,  .0,  .0,  .0,  .0,  .0,  .0, 
            1. ,  .1}, 
 (*13 ζη*) {0. ,  .0,  .0,  .0, 1. ,  .2, 0. , 0. , 
            1. ,  .3,  .0,  .0}, 
 (*14 ζκ*) {0. ,  .0,  .0,  .0, 1. ,  .2, 0. , 0. , 0. , 0. , 
            1. ,  .3}, 
 (*15 ληκ*) {0. ,  .0, 0,  .0,  .0,  .0, 1. ,  .1, 1. ,  .3, 
            1.0,  .2}, 
 (*16 ληκ=*) {0. ,  .0, 0,  .0,  .0,  .0, 1. ,  .1, 
            1. ,  .1, 
            1. ,  .1}, 
 (*17 βληκ*) {0. , 1. , 0,  .0,  .0,  .0, 1. ,  .1, 1. ,  .1, 
            1. ,  .1}, 
 (*18 ηκ*) {0. ,  .0,  .0,  .0, 0. ,  .0, 0. , 0. , 1. ,  .3, 
            1.0,  .7}, 
 (*19 ηκ=*) {0. ,  .0,  .0,  .0, 0. ,  .0, 0. , 0. , 1. ,  .3, 
            1. ,  .3}, 
 (*20 ληκr*) {0. , 0, 0, 0, 0, 0, 1. ,  .3,  .1,  .3, 10. ,  .3}};

Single sizes, pairs and triples (omitting the linear sizes) and 4 sets of unit sizes are squared in turn, with different angles unless the name has a trailing "=". The last case has three sizes  .1, 1, 10; this is the "Three Scales" model.
	Other cases can be added to investigate different hypotheses. Each loop is used in tern below;  the conserved functions are indicated by "C", "K", "Q", "D",  "c" , "1" if the function value is 1, "0" if it is zero, and those that are not conserved by "n".

tst = "C3C4"; id[tst]; dozalconserve = {Flatten[{tst, ds}]}; 
    colname = {};
Do[cs = {}; A = 
testA[[j]]; 
      A = Chop[toVector[A]]; AA =  hoopTimes[A, A]; 
      res = {sa = sh12[A], saa = sh12[AA], sasa = sa sa, 
          Chop[saa - sasa, 10^-8], Range[Length[sa]]}; 
      AppendTo[colname, tst]; AppendTo[cs, Length[colname]]; 
      Do[If[res[[3, i]] == 0, AppendTo[cs, 0], 
          If[res[[4, i]] == 0, 
            AppendTo[cs, If[res[[3, i]] == 1, "1", "C"]], 
            AppendTo[cs, "n"]]], {i, Length[sa]}]; 
      AppendTo[dozalconserve, cs], {j, Length[testA]}]; 
    Transpose[dozalconserve] // tf

tst = "C3K"; id[tst]; dozalconserve = {Flatten[{tst, ds}]}; 
    colname = {};
Do[cs = {}; A = 
testA[[j]]; 
      A = Chop[toVector[A]]; AA =  hoopTimes[A, A]; 
      res = {sa = sh12[A], saa = sh12[AA], sasa = sa sa, 
          Chop[saa - sasa, 10^-8], Range[Length[sa]]}; 
      AppendTo[colname, tst]; AppendTo[cs, Length[colname]]; 
      Do[If[res[[3, i]] == 0, AppendTo[cs, 0], 
          If[res[[4, i]] == 0, 
            AppendTo[cs, If[res[[3, i]] == 1, "1", "K"]], 
            AppendTo[cs, "n"]]], {i, Length[sa]}]; 
      AppendTo[dozalconserve, cs], {j, Length[testA]}]; 
    Transpose[dozalconserve] // tf

tst = "Q12"; id[tst]; dozalconserve = {Flatten[{tst, ds}]}; 
    colname = {};
Do[cs = {}; A = 
testA[[j]]; 
      A = Chop[toVector[A]]; AA =  hoopTimes[A, A]; 
      res = {sa = sh12[A], saa = sh12[AA], sasa = sa sa, 
          Chop[saa - sasa, 10^-8], Range[Length[sa]]}; 
      AppendTo[colname, tst]; AppendTo[cs, Length[colname]]; 
      Do[If[res[[3, i]] == 0, AppendTo[cs, 0], 
          If[res[[4, i]] == 0, 
            AppendTo[cs, If[res[[3, i]] == 1, "1", "Q"]], 
            AppendTo[cs, "n"]]], {i, Length[sa]}]; 
      AppendTo[dozalconserve, cs], {j, Length[testA]}]; 
    Transpose[dozalconserve] // tf

tst = "D3C2"; id[tst]; dozalconserve = {Flatten[{tst, ds}]}; 
    colname = {};
Do[cs = {}; A = testA[[jj]]; A = Chop[toVector[A]]; 
      AA =  hoopTimes[A, A]; 
      res = {sa = sh12[A], saa = sh12[AA], sasa = sa sa, 
          Chop[saa - sasa, 10^-8], Range[Length[sa]]}; 
      AppendTo[colname, tst]; AppendTo[cs, Length[colname]]; 
      Do[If[res[[3, i]] == 0, AppendTo[cs, 0], 
          If[res[[4, i]] == 0, 
            AppendTo[cs, If[res[[3, i]] == 1, "1", "D"]], 
            AppendTo[cs, "n"]]], {i, Length[sa]}]; 
      AppendTo[dozalconserve, cs], {jj, Length[testA]}]; 
    Transpose[dozalconserve] // tf

tst = "C3C4"; id[tst]; dozalconserve = {Flatten[{tst, ds}]}; 
    colname = {};
Do[cs = {}; 
      A = 1.1 testA[[j]];     
AA =  hoopTimes[A, A]; 
      res = {sa = sh12[A], saa = sh12[AA], sasa = sa sa, 
          Chop[saa - sasa, 10^-8], Range[Length[sa]]}; 
      AppendTo[colname, tst]; AppendTo[cs, Length[colname]]; 
      Do[If[res[[3, i]] == 0, AppendTo[cs, 0], 
          If[res[[4, i]] == 0, 
            AppendTo[cs, If[res[[3, i]] == 1, "1", "c"]], 
            AppendTo[cs, "n"]]], {i, Length[sa]}]; 
      AppendTo[dozalconserve, cs], {j, Length[testA]}]; 
    Transpose[dozalconserve] // tf

The following procedure tests conservation of the sh12 functions for multiplication of two vectors A & B. If the last parameter n is negative, toVector[A] & toVector[B] are used. NB n≥-4, as A4 lacks toVector.

\(Clear[dozaltest]; 
    dozaltest[A0_, B0_, n_:  5] := 
      Module[{A = A0, B = B0, alg, 
          tstname = 
            Take[{"C", "K", "Q", "D", "A", "P", "q", "k", "c"}, Abs[n]], 
          tst = Take[{"C3C4", "C3K", "Q12", "D3C2", "A4", "C3P4", "C3Qr", "C3KC2r", "Q12C2c"}, Abs[n]], dozalconserve, 
          sa, sb, sasb, sab, AB, cs}, 
        dozalconserve = {Range[39]}; 
Do[cs = {}; 
          alg = tst[\([ii]\)]; 
          If[n < 0, A = Chop[toVector[A, alg]]; 
            B = Chop[toVector[B, alg]]]; 
AB = \ 
            hoopTimes[A, B, alg]; sa = sh12[A]; sb = sh12[B]; sasb = sa\ sb; 
          sab = sh12[AB]; 
          res = Chop[{sa, sb, sab, sasb, sab - sasb, Range[Length[sa]]}]; 
          Do[If[res[\([3, i]\)] == 0, AppendTo[cs, 0], 
              If[res[\([5, i]\)] == 0, 
                AppendTo[cs, 
                  If[res[\([3, i]\)] == 1, "1", 
                    tstname[\([ii]\)]]], AppendTo[cs, "n"]]], {i, 
              Length[sa]}]; 
          AppendTo[dozalconserve, cs], {ii, 
            Abs[n]}]; 
{Transpose[
              Take[Transpose[dozalconserve], 21]] // tf, 
          Transpose[Drop[Transpose[dozalconserve], 21]] // tf}]\)

dozaltest[
      A = {1. , 1. , 1. , 1, 2. ,  .1, 1/2. ,  .1, 1. ,  .11, 1. ,  .12}, 
      B = {2. , 1/2. , 1. ,  .2, 3. , 0.3, 1/3. , 0.1, 1. , 0.1, 1. , 0.1}, 
      9]

Note that C3KC2r & Q12C2c do not conserve any of these functions, whilst C3P4 & C3Qr only conserve 15 & 26, 16 & 27, which are not conserved by any other hoops.

dozaltest[testA[[7]], testA[[17]], -4]

testA[[11]]

tst = "C3C4"; id[tst]; 
    dozalconserve = {Flatten[{tst, ds}]}; 
    colname = {};
cs = {};
A=Simplify[toVector[{α,β,ϵ,σ,ζ,τ,λ,ϕ,η,χ,κ,ψ}]]
FullSimplify[
      sh12[[A]]]

Chop[
      FullSimplify[
        sh12[toVector[{α, β, ϵ, σ, ζ, τ, η, ϕ, λ, ϕ, κ, ϕ}]] /. (Sqrt[any])_ -> any/2]]

The following table shows (for the first 25 functions) those functions that are sizes (irreducible determinant factors) as "i", those that are conserved combinations of sizes by "c", those that are conserved on orbit multiplication by "o", and those that are only conserved when some "radii" are zero or negative by "n". (Negative radii can occur in Q12 & D3C2 because they have sizes with 3 positive and 3 negative squared terms.)  The names indicate the type of function:- on are linear functions, offsets in orbits. pab-sab have b terms each of order a. l3 is the cubic A4 size. l4p-l4s are quartic sizes. The last column gives the polar form for toVec[{α, β, γ, δ, ζζ, τ, λλ, ϕ, ηη, χ, κκ, ψ}, "C3C4"], with ζ replacing (Sqrt[ζ])ζ (etc). Note that γ, δ are retained here, instead of ε, σ; a second term gives the corresponding form for C3K, where it differs from that for C3C4. Third and fourth terms are for Q12 & D3C2. Long terms are simplified by making all angles equal to τ. (Functions 26 onward are not categorised wrt. the four groups.)
I am attempting to correlate these relationships with the properties of fundamental particles.

No. Name C3C4 Q12 C3K D3C2 A4 C3C4,C4K,Q12,D3C2
1   o1   i    i   i   i    i  α
2   o2   i    i   i   i       β
3   o3            i   i       γ(Cos[δ]+Sin[δ]),γ,
                              γ(Cos[δ]+Sin[δ]),γ,
4   o4            i   i       γ(Cos[δ]-Sin[δ]),γ,
                              γ(Cos[δ]-Sin[δ]),δ,
5   l22a i
6   l22b i
7   p22  o    o   o   o       ((α^2)+(β^2))/2
8   q22  i    i   o   o       (γ^2),((γ^2)+(δ^2))/2,(γ^2),((γ^2)+(δ^2))/2
9   r22  c    c   c   c       α β
10  s22           c   c    i  (γ^2) Cos[2 δ],γ δ,(γ^2) Cos[2 δ],γ δ
11  p23  i    n   i   n       (ζ^2),(ζ^2),(ζ^2) + (λ^2) + 
        2 ζ λ Cos[τ - ϕ],
                                    (ζ^2) + (λ^2) - 
        2 ζ λ Cos[τ - ϕ] 
12  q23  i    n   i   n       (λ^2),(λ^2),(ζ^2) + (λ^2) + 
        2 ζ λ Cos[τ - ϕ],
                                    (ζ^2) + (λ^2) - 
        2 ζ λ Cos[τ - ϕ]
13  r23  o    n   i   n       (η^2),(η^2),(η^2) + (κ^2) + 
        2 η κ Cos[χ - ψ],
                                    (η^2) + (κ^2) - 
        2 η κ Cos[χ - ψ]
14  s23  o    n   i   n       (κ^2),(κ^2),(η^2) + (κ^2) - 
        2 η κ Cos[χ - ψ],
                                    (η^2) + (κ^2) + 
        2 η κ Cos[χ - ψ]
15  q24  o    o   o   o      ((α^2) + (β^2) + 2 (γ^2))/4,((α^2) + (β^2) + (γ^2) + (δ^2))/4,
                             ((α^2) + (β^2) + 2 (γ^2))/4,(α^2) + (β^2) + (γ^2) + (δ^2))/
        4
16  s24           o   o
           (-(((α - β))^2) - 2 (γ^2) + 
          4 (α + β) γ Cos[δ] + 
          2 (γ^2) Cos[2 δ])/8,
           (-(α^2) - (β^2) - (((γ - δ))^2) + 
          2 β (γ + δ) + 
          2 α (β + γ + δ))/8,
           (-(((α - β))^2) - 2 (γ^2) + 
          4 (α + β) γ Cos[δ] + 
          2 (γ^2) Cos[2 δ])/8,                  
           (-(α^2) - (β^2) - (((γ - δ))^2) + 
          2 β (γ + δ) + 
          2 α (β + γ + δ))/8
17  p26       i       f   ζ λ Cos[τ-ϕ],ζ λ Cos[τ-ϕ],(ζ^2) - (λ^2),(ζ^2) - (λ^2)
18  q26  o    o   n   i   η κ Cos[χ-ψ],η κ Cos[χ-ψ],(η^2) - (κ^2),(η^2) - (κ^2)
19  r26  o    n   o   o   ((ζ^2) + (λ^2))/2,((ζ^2) + (λ^2))/2,(ζ^2) + (λ^2),(ζ^2) + (λ^2)
20  s26  o    i   o   o   ((η^2) + (κ^2))/2,((η^2) + (κ^2))/2,(η^2) + (κ^2),(η^2) + (κ^2)
21  l3(δ->0)               i \(\((β\ η\ κ + \ λδ\ η + λγ\ κ)\)/3\),,
(β ((η^2) - (κ^2)) + 
          2 γ η (ζ - λ)),(γ(η+κ)(ζ+λ)+(η-κ)(β(η+κ)+δ(ζ+λ)))
22  l4p  c    n   c   n       (ζ^2) (λ^2),,(ζ^4) + (λ^4) - 
        2 (ζ^2) (λ^2) Cos[2 (τ - ϕ)],
23  l4q  o    n   c   n       (η^2) (κ^2),,(η^4) + (κ^4) - 
        2 (η^2) (κ^2) Cos[2 (χ - ψ)],
24  l4r       n       n       ((ζ^4) - 4 (ζ^2) (λ^2) + (λ^4) + 
              6 (ζ^2) (λ^2) Cos[2 (τ - ϕ)])/
          4
25  l4s  c    n   o   n              ((η^4) + (κ^4) + 
          2 (η^2) (κ^2) Cos[2 (χ - ψ)])/4
26  L4Q                 ((((ζ^2) + (η^2) + (κ^2) + (λ^2)))^2)/16,((((ζ^2) + (η^2) + (κ^2) + (λ^2)))^2)/16,
                        ((((ζ^2) + (η^2) + (κ^2) + (λ^2)))^2)/4, (\(\(\(ζ\^2 + η\^2 + κ\^2 + λ\^2\)\()\)\)\^2\)/4
27  L4σ  \(\((ζ\^2 + η\^2 + \((κ - λ)\)\^2 - 2\ η\ \((κ + λ)\) - 2\ ζ\ \((η + κ + λ)\))\)\^2\)/64,,
         (((-2 ζ η + (κ^2) + (λ^2)))^2)/4,
28  L4a3  (ζ^2) (2 (ζ^2) + (λ^2) - (λ^2) Cos[
                2 (τ - ϕ)])/2,,
          \(ζ\^4 + 6\ ζ\^2\ λ\^2 + λ\^4 - 
        4\ ζ\ λ\ \((ζ\^2 + λ\^2)\)\ Cos[τ - ϕ]\),
29  L4b3   (λ^2) (2 (λ^2) + (ζ^2) - (ζ^2) Cos[
                2 (τ - ϕ)])/2,,
           \(ζ\^4 + 6\ ζ\^2\ λ\^2 + λ\^4 + 
        4\ ζ\ λ\ \((ζ\^2 + λ\^2)\)\ Cos[τ - ϕ]\),
30  L4c3   (η^2) (2 (η^2) - (κ^2) + (κ^2) Cos[
                2 (χ - ψ)])/2,
           ((η^2) + (κ^2)) ((η^2) + (κ^2) - 
              4 η κ Cos[χ - ψ]) + 
        4 (η^2) (κ^2) Cos[2 (χ - ψ)],
           ((η^2) + (κ^2)) ((η^2) + (κ^2) + 
              4 η κ Cos[χ - ψ]) + 
        4 (η^2) (κ^2) Cos[2 (χ - ψ)]
31  L4d3   (κ^2) (2 (κ^2) - (η^2) + (η^2) Cos[
                2 (χ - ψ)])/2,
           ((η^2) + (κ^2)) ((η^2) + (κ^2) - 
              4 η κ Cos[χ - ψ]) + 
        4 (η^2) (κ^2) Cos[2 (χ - ψ)],
           ((η^2) + (κ^2)) ((η^2) + (κ^2) + 
              4 η κ Cos[χ - ψ]) + 
        4 (η^2) (κ^2) Cos[2 (χ - ψ)]
32  L4a6   (ζ^2) (λ^2), (ζ^2) (λ^2), (ζ^4) + (λ^4) - 
        2 (ζ^2) (λ^2) Cos[
            2 (τ - ϕ)],
33  L4b6   (η^2) (κ^2), (η^2) (κ^2), (η^4) + (κ^4) - 
        2 (η^2) (κ^2) Cos[
            2 (χ - ψ)],
34  L4c6   (η^2) (κ^2) Cos[
          2 (χ - ψ)],,(η^4) - 4 (η^2) (κ^2) + (κ^4) + 
        2 (η^2) (κ^2) Cos[2 (χ - ψ)],
35  L4d6  ((ζ^4) + (λ^4) + 
            2 (ζ^2) (λ^2) Cos[2 (τ - ϕ)])/
        4,
           (ζ^4) + (λ^4) + 
        2 (ζ^2) (λ^2) Cos[2 (τ - ϕ)],  
36  L49  ((η^4) + 12 (η^2) (κ^2) + (κ^4) + 
          10 (η^2) (κ^2) Cos[2 (χ - ψ)])/4,,
         6 (η^4) - 8 (η^2) (κ^2) + 6 (κ^4),
37  L49a ((ζ^4) + 12 (ζ^2) (λ^2) + (λ^4) + 
          10 (ζ^2) (λ^2) Cos[2 (τ - ϕ)])/4,,
         6 (ζ^4) - 8 (ζ^2) (λ^2) + 6 (λ^4),
38  L49b  long,,6 (η^4) - 8 (η^2) (λ^2) + 6 (λ^4),
39  L49c  long,,6 (ζ^4) - 8 (ζ^2) (κ^2) + 6 (κ^4)