Small finite Groups, Loops & Hoops for non-Mathematica users.

Small Groups, Moufang Loops, Hoop Algebras; Demonstrations.

R.H.Beresford. 2004. Latest Revision 11/10/2006

"To see what is in front of your nose needs a constant struggle." (George Orwell.)

Symmetry-conserving partial-fraction-division "Hoop Algebras" are closely related to Groups and Moufang Loops. (See Figure 1 for examples.) They multiply, divide, add and "split" generalized vectors with "generalized signs" and employ many new or neglected mathematical concepts to re-define physical mathematics. Do not confuse them with the traditional use of groups as coordinate transformation matrices for a single vector or with dot multiplication of two vectors to give a scalar. Hoop multiplication or division operates on two vectors to produce a third vector and (in many cases) one or two "remainder" vectors carrying different symmetries.

This notebook demonstrates the material on small groups, Moufang loops, and "Hoop Algebras" supplied in the GroupLoopHoop.m package in http://library.wolfram.com/infocenter/MathSource/4894/. Another notebook, HoopDemo.nb, deals solely with Hoop Algebras. A shorter and simpler account of Hoop Algebras (using a much smaller package, and omitting all the material specific to groups and loops) is available as HoopFundamentals.nb in http://library.wolfram.com/infocenter/MathSource/6198/ .

Algebraic loops are closed binary "multiplication" operations with a unit. They may involve quantum operators, but usually operate on "vecs" (generalized vectors), sets of un-signed numerical "coefficients". The GroupLoopHoop.m database includes over 800 loops, as preferred Cayley Table isomorphs or "protoloops", together with procedures to create, identify, and manipulate them. If a loop is associative, xy.z=x.yz for all x,y,z, it is a group. The database includes all groups with up to 73 elements, and a few larger groups. If the condition is relaxed to the Moufang division property, zx.yz = (z.xy)z , it is a Moufang loop. (Groups are associative Moufang loops.) The database includes a few non-associative Moufang loops.
	Algebras combine loop multiplication with the operations of addition and generalized subtraction. This "folds" two or more "directions" to a "dimension", and introduces "generalized signs". Loops with m unsigned coefficients and r-fold symmetry "fold" by equivalence-relationships to algebras with m/r coefficients. Two-folding creates real numbers with the signs "+" & "-". One case of four-folding creates complex numbers with the signs "+", "i", "-" & "-i"; another creates Study numbers with a second sign "𝕜" that squares to +1 but differs from "-". Algebras often have "signed multiplication tables" that are not loops because some products are signed, and so are not members of the defining set. Many algebras, (ℝ, ℂ, ℍ, 𝕆, Clifford, Davenport, Dirac, Lie, Pauli, Study, "Terplex", Wedge, etc,) are "Symmetry-conserving Partial-Fraction Division Algebras" (I call them "Hoops" - they conserve their "shapes" or symmetries) because their multiplication tables have the (necessary and sufficient) Frobenius determinant conservation property Det[AB]= ±Det[A] Det[B] for vector operations. They also have the (necessary but insufficient) Moufang division property, so that every vector has an inverse that (in non-degenerate cases) splits into partial fractions. Hoop multiplication tables are either unsigned Moufang Loops (including all Groups, Octonions, and a few other non-associative Moufang loops) or signed tables. Each entry in the Cayley table is a single (possibly signed) element, so they are a very restricted sub-set of general algebras; each row and column contains every (possibly signed) element once; the first row and column are identical and define the unit element
	 Hoops transcend the limitations of "rings", "fields" & "real division algebras without divisors of zero", and introduce many new concepts to mathematics and mathematical physics (summarized in Section 1.2 and in HoopGlossary.nb).
	The GroupLoopHoop.m package also contains many procedures to create, identify, and manipulate loops, groups and hoops as Cayley tables. These are demonstrated in this notebook (GroupLoopDemo.nb); the associated HoopDemo.nb notebook demonstrates hoop procedures. The demonstrations are designed to be read (using MathReader [1]) by non-users of Mathematica. The subject is developed by many examples, starting with Cayley tables and ending with applications in mathematical physics. The output of the examples is meant to be self-explanatory and the (probably incomprehensible) input statements are hidden in "closed cells". If you wish to inspect these cells, click on their (tiny) cell bracket and then on Cell, Cell Properties, and Cell Open.
	If you are a Mathematica user and wish to check the examples, to test them with changed data, or to investigate any other aspects of groups, loops, or hoops, activate the GroupLoopHoop.m notebook. This provides a database of over 800 Cayley tables, including all groups with up to 73 elements, together with the relevant procedures.
	Please inform me by e-mail to rhberesford@btinternet.com of any errors or infelicities.

1. Preamble.

1.1 Summary.

"Primal" (unsigned continuous) numbers, "Generalized Signs" (orthogonal roots of unity) and "Hoops" (Symmetry-conserving Partial-fraction-division Algebras) re-write much of mathematics. Hoops multiply, divide, add and split sets of operators or primal coefficients. They are defined by having Cayley tables with Frobenius determinant-factor conservation. They also have the Moufang properties [2, p92] , including zx.yz=(z.xy)z, left & right units, & multiplicative inverses for "vecs" (sets of operators or coefficients, generalized vectors). They conserve symmetries or "sizes" (factors of the symbolic conjugate table determinant) on multiplication and division. The existence of multiplicative inverses makes vector division the same operation as vector multiplication; this creates "remainders" to maintain size conservation when the operands have disparate sizes.
	Roots of unity provide generalized signs that "fold" groups and many Moufang loops to "Hoop algebras" with vector multiplication and generalized negation. Simple negation "-" is an equivalence relation on pairs of unsigned numbers. Generalized signs (𝕤^r) involve equivalence relations on indexed sets of r unsigned numbers, and extend many aspects of standard mathematics - they generate groups and multi-phase sinusoids; complex & quaternion algebras are degenerate mono-sized hoop algebras, minus one is not unique, etc.
	Some hoops with quadratic sizes have polar or hyperbolic duals, generalized powers and roots, and deBroglie-wave-like continuous "orbits" (polar duals with unit determinant). A few orbits have stable Planck-area-like squared amplitudes, possibly related to stable particles. Elements in these algebras act as unit-spin and half-spin quantum operators. Indirect composition of "supersymmetric" commutative algebras creates "subsymmetric" non-commutative algebras with more symmetries. (Physicists originated this nomenclature, wrongly assuming it to be one-to-one.)
	"Zero-sized vecs" have some sizes equal to zero; multiplication and division by them "projects" the result into a sub-algebra with these sizes zeroed, whilst "ejecting" size-conserving "remainders". Thus A*B = P(product) + Rl + Rr (remainders) and P/B + Rl = A,  P/A + Rr = B; the sizes of Rl & Rr are those that are zero in B & A respectively. This generalizes integer division, where A/B gives Q (quotient) + R (remainder) with R⩽B and Q*B+R=A. Remainders provide "renormalization" and eliminate vector division-by-zero.
	The GroupLoopHoop.m package provides a database of over 800 loops including over 80 hoops, all groups with up to 73 elements, and the 12 smallest non-associative Moufang loops. It also includes procedures to create, test, identify and manipulate groups, loops & hoops.

1.2 New and Neglected Mathematical Concepts Related to Hoops.

Many new, and some neglected, mathematical concepts are developed below, in bold when first mentioned; they are related to hoop algebras (and summarized in the companion notebook HoopGlossary.nb).
	Algebraic loops are closed binary operations with a unit. If they are finite, they can be expressed as indexed Cayley tables, with the first row and column being {1,2,...,m} (the unit) and with every row and column containing each index once. A Protoloop has been chosen for each loop in the database; this is a preferred isomorph that is related to the protoloops of similar loops.
	Loops that are associative, with x(yz) = (xy)z (for all elements x,y,z in the table), are Groups. If they have the slightly less restrictive Moufang division property zx.yz = (z.xy)z they are "Moufang Loops" [2, p92] . (Other Moufang properties are equivalent to this division property.) All groups are Moufang Loops, and all non-associative Moufang Loops are "square associative" or "alternative", with xx.y = x(xy).
	Frobenius showed that all groups have Frobenius conservation, Det[A] Det[B] = ± Det[AB]. Here, A = {(Subscript[a, 1]), (Subscript[a, 2]), ..(Subscript[a, m])} and B = {(Subscript[b, 1]), (Subscript[b, 2]), ..(Subscript[b, m])} are vecs (generalized vectors), sets of unsigned operators or coefficients (loops can be defined without recourse to negation) and AB is the product {(Subscript[c, 1]), (Subscript[c, 2]),.., (Subscript[c, m])} obtained by (Subscript[c, k])=∑(Subscript[a, i])(Subscript[b, j]), where i.j=k in the table. Det[A] is that of the protoloop table mapped with the generalized conjugate of A. All groups, Octonions and a few other non-associative Moufang Loops have this conservative property (most loops do not). The division property guarantees that every vec A has an inverse, Ai = {(Subscript[d, 1]),(Subscript[d, 2]),..(Subscript[d, m])} /Det[A] with Ai.A={1,0,...}. Hence multiplication is invertible, and division is defined for Moufang Loops. The inverse can be calculated by Cramer's rule. An important feature of Moufang Loops is that the inverse splits into partial fractions because Det[A] always factorises ((Subscript[a, 1])+(Subscript[a, 2])+..+(Subscript[a, m]) must be a first factor of a quasigroup determinant). Note that the multiplication operation involves two vectors; it is not matrix multiplication, which transforms a single vector to a different coordinate system.

Conservative loops have two operations, multiplication and division; they become algebras when generalized signs (and generalized subtraction) are defined. The traditional signs {+,i,-,-i} are created by equivalence relations on sets of unsigned numbers. Integers are created [8, p20 et seq] when pairs of Natural (unsigned) numbers {a, b} & {c, d} are equivalenced to a single integer x if a+d=b+c. Unsigned continuous numbers (I call them "Primal numbers") can be created via an axiom of continuity on unsigned rational numbers. If the cyclic group of 2 elements, C2, is used as a multiplication table for ordered pairs of primals, {(Subscript[a, 1]), (Subscript[a, 2])} and {(Subscript[b, 1]), (Subscript[b, 2])}, the result is the ordered pair {(Subscript[a, 1])(Subscript[b, 1])+ (Subscript[a, 2])(Subscript[b, 2]), (Subscript[a, 1])(Subscript[b, 2]) + (Subscript[a, 2])(Subscript[b, 1])}. Equivalencing then gives the rules of Real Algebra, {"+"×"+" = "+", "-"×"-" = "+", "+"×"-" = "-", "-"×"+" = "-"}, and these rules give a division algebra because C2 has the Moufang property. I use the term "folding" for equivalencing from m elements to m/r elements for loops with r-fold symmetry. Many mathematical properties can be extended to handle generalized signs.
	Using the C4 multiplication table to multiply sets of four unsigned numbers give Complex algebra after folding to a pair of "real" coefficients, the real and imaginary parts. (These are "real" because they can be positive, zero, or negative.) The rules of Complex arithmetic include those of real algebra, together with "i"×"i" = "-", "-"×"i" = "-i", etc.; they originate in the properties of C4. Four unsigned coefficients have been folded to one complex number.
	Folding the Klein 4-group K gives "Study numbers" or "double algebra" [3, p24] describing the hyperbolic plane instead of the complex plane. K has three elements that square to +1, i.e. "j", "k" and "jk"; so "minus one is not unique".
	Similarly, the eight-element Quaternion group provides the rules for Quaternion algebra, with four "real" coefficients that are folded from the eight unsigned elements. "+1" has three different fourth roots in Quaternion algebra.
	Octonion algebra involves eight "real" coefficients and seven fourth roots of +1, but there is no group to provide the multiplication table for the 16 un-equivalenced elements. The relevant multiplication table "Oct" is not a group (it is only square-associative), but it is folded from a "non-associative Moufang Loop".
	Hamilton noted the two-to-one relationships between the quaternion and octonion tables and their multiplication tables. (Reference lost. ?? in Lectures on Quaternions, Dublin 1853.) He distinguished between the (unsigned) "directions" of the larger tables and the (signed) "dimensions" of the smaller tables.
	 Sets of m unsigned coefficients are folded to vecs (generalized vectors) with m/2 signed coefficients on 2-fold equivalencing. Conservative m×m loops, with 2-fold symmetry, are folded to algebras with multiplication tables of size (m/2)×(m/2). The Frobenius determinant-conservation property Det[A] Det[B] = Det[AB] and the Moufang division property zx.yz = (z.xy)z (relaxed to "up to a sign") survive the folding process, and so are shared by all Hoop algebras. The conservation property makes them relevant to physics, via Noether's law. (Non-Moufang algebras, and most non-associative Moufang algebras, do not provide consistent conservation laws.) The division property ensures that every vec has a multiplicative inverse (making multiplication and division a single operation). In most cases, the inverse splits into partial fractions with the determinant factors as denominators.
	 I propose the name Hoops for these symmetry-conserving partial-fraction division algebras. (Hoops are rings or loops that conserve their shape, and come between groups and loops.) A single procedure hoopTimes[A,B,table] performs multiplication of the vecs A & B according to the specified table, and makes table the Target algebra. Another procedure hoopInverse[A] calculates the inverse of A in the target algebra.
	Folding can be generalized to use other symmetries. As all groups are hoops, every group with r-fold symmetry can be folded to an r-signed algebra. Figure 1 shows protoloops for three Moufang Loops (the C4C2, quaternion, and C9 groups). The top left corner is repeated in the tables; it also occurs with offsets of 3, 4, or 6, showing the symmetry. It is then shown as folded tables, with the indices replaced by the usual complex or quaternion symbols, or (in the C9j algebra) by signed indices, with (𝕁^3)=1 providing a new sign 𝕁 so that indices 4 & 5 becoming 𝕁1 and 𝕁2. The last table has {a,b,c} mapped onto {1,2,3}, to give the symbolic table, with the determinant -(c^3) - (b^3) 𝕁 + 
        3 a b c 𝕁 - 
        (a^3) (𝕁^2). Note also that the C4C2 table can be folded a second time, to give the Complex multiplication table "C4c" with i.i=-1.

Figure 1. Two-fold and three-fold Folding of Moufang Loops
            and the resulting signed algebras.

C4C2 group          Quaternion group       C9 Group

({{1, 2, 3, 4, 5, 6, 7, 8}, {2, 3, 4, 1, 6, 7, 8, 5}, {3, 4, 1, 2, 7, 8, 5, 6}, {4, 1, 2, 3, 8, 5, 6, 7}, {5, 6, 7, 8, 1, 2, 3, 4}, {6, 7, 8, 5, 2, 3, 4, 1}, {7, 8, 5, 6, 3, 4, 1, 2}, {8, 5, 6, 7, 4, 1, 2, 3}}), ({{1, 2, 3, 4, 5, 6, 7, 8}, {2, 5, 8, 3, 6, 1, 4, 7}, {3, 4, 5, 6, 7, 8, 1, 2}, {4, 7, 2, 5, 8, 3, 6, 1}, {5, 6, 7, 8, 1, 2, 3, 4}, {6, 1, 4, 7, 2, 5, 8, 3}, {7, 8, 1, 2, 3, 4, 5, 6}, {8, 3, 6, 1, 4, 7, 2, 5}}) , ({{1, 2, 3, 4, 5, 6, 7, 8, 9}, {2, 3, 4, 5, 6, 7, 8, 9, 1}, {3, 4, 5, 6, 7, 8, 9, 1, 2}, {4, 5, 6, 7, 8, 9, 1, 2, 3}, {5, 6, 7, 8, 9, 1, 2, 3, 4}, {6, 7, 8, 9, 1, 2, 3, 4, 5}, {7, 8, 9, 1, 2, 3, 4, 5, 6}, {8, 9, 1, 2, 3, 4, 5, 6, 7}, {9, 1, 2, 3, 4, 5, 6, 7, 8}}) 

  C4 & Complex    Quaternion        C9J      Symbolic
    algebra        algebra         algebra     C9J  
({{1, i, -1, -i}, {i, -1, -i, 1}, {-1, -i, 1, i}, {-i, 1, i, -1}}), ({{1, i, j, ij}, {i, -1, -ij, j}, {j, ij, -1, -i}, {ij, -j, i, -1}}),     ({{1, 2, 3}, {2, 3 , 𝕁1}, {3, 𝕁1, 𝕁2}}),({{a, b, c}, {b, c, 𝕁a }, {c, 𝕁a, 𝕁b}})

I call the symbolic determinant factors sizes, and the list of sizes are the shape. (Hoops conserve their shape.)  One or more determinant factor is destroyed on folding. C4C2 has 6 sizes, C4 has 3, and C4c a single factor. The quaternion group has four linear and one (repeated) quadratic factor whilst the quaternion algebra loses the linear factors. C9 has 3 factors, C9J only one. 
	As each factor is a symmetry, each signed algebra is super-symmetric (sic, by an accident of nomenclature) to the (larger) parent Moufang loop. A few Hoops (including ℝ, ℂ, ℍ & 𝕆) are degenerate because they have lost all but one factor and so the inverses cannot split into partial fractions. Sizes can be zero, and division by a vec with a zero size would appear to give an infinite result. This is eliminated by the convention that a zero-sized vector projects vecs into a sub-algebra in which this size is constrained to be zero. Consequently, the inverse is also in the sub-algebra. Conic sections provide an analogy - their distance from a plane is zero and the 3D cone is reduced to a 2D figure of reduced symmetry. (Projection reduces symmetry.) To maintain the key conservative property, remainders have to be introduced. If multiplication (or division, which is multiplication by an inverse) would give a result which has lost some sizes, these sizes are ejected as remainders. This has physical analogies. When "particles" decay or interact, various symmetries are conserved by ejecting other "particles". In the case of Dozal algebra, different 12-element groups provide different (but overlapping) sets of symmetries resembling those of fundamental particles; this may correspond to different "forces" with different conservation laws.
	Some hoops conserve quadratic sizes (complex-conjugate factors are not conserved) that lead to polar or hyperbolic duals, and provide generalized powers and roots, with deBroglie-like continuous orbits and Planck-area-like squared radii or ulnae.
	Hoops are fundamental to mathematical physics because they alone possess the conservation properties that lead (via Noether's theorem) to particles and forces. Groups are relevant because they are conservative, not because they are associative. The mathematical physicist's emphasis on symmetries as transformations using continuous groups (often based on complex matrices) appears to be unduly restrictive. Hoop symmetries act via operations, as well as transformations.

Hoop Algebras unify many traditional algebras. Some mathematical "facts" (such as "minus one is unique", which is proved by a circular argument using a rarely acknowledged axiom) are only true in the restricted context of the degenerate hoops ℝ, ℂ, ℍ, 𝕆. Primal numbers (unsigned continuous numbers, the half-line) can be developed from set theory via Natural numbers ℕ, unsigned Rational numbers \(TraditionalForm\`\(ℚ\^+\)\), and a continuity axiom. Negation, subtraction, signed integers ℤ, and signed continuous Reals ℝ should NOT be introduced until indexed sets have been developed. As mathematics is widely thought of as operations on rings & fields (because they are easy to handle) integers and reals are (implicitly or explicitly) assumed to exist on page 1 of most mathematical texts. Negation and subtraction constitute a "blind spot" for many mathematicians; few texts even index the topics and only a handful consider their axiomatic definition. However, they are the special first case of generalized negation which uses equivalence relations on indexed sets to create generalized signs, orthogonal roots of unity. ℤ & ℝ are the simplest examples, being equivalence relations on indexed pairs of natural or primal numbers; the C2 group provides the multiplication table. ℂ is one equivalence relation on indexed quads of primal numbers; the C4 group provides the multiplication table. The C3 group provides (chiral) Terplex numbers; the Klein 4-group provides "Study numbers" aka "Double numbers"; the 8-element Quaternion group provides the 4-element quaternion algebra, etc. Every "real" number is obtained from a pair of primal numbers; every "terplex" number is obtained from a triple of primal numbers, etc.

The GroupLoopHoop.m package provides a database of over 800 entries - all the groups with up to 73 elements, some larger groups, octonions, and a number of other tables. Procedures are provided to create, identify, and investigate small groups, loops, and hoops. Key properties are provided for the hoop algebras for which compact symbolic inverses have been found. GroupLoopTest.nb contains general test procedures that confirm the correctness of the database and procedures.
	The database entries relate to ordered quasigroup "indexTables" i.e. m×m Cayley multiplication tables with the first row and column containing the element indices {1,2,..,m} and with each (possibly signed) index occuring once in each row and column. Note that "Cayley table multiplication" is not "Matrix Multiplication", which transforms a single vector. It is implemented by the hoopTimes procedure and operates on two vecs to create another vec and two (possibly null) remainders. 
	Most loops in the database have at least one compact "incantation" that generates the Cayley table as a protoloop (a preferred isomorph). Different incantations use formulae, relators, permutations, matrix multiplication, and generalized Cayley-Dickson or Clifford procedures to create the tables. Apart from a few counter-examples with names ending in n, all the entries have the conservation property, making them Hoops. Many are loops, unsigned tables that multiply and divide sets of primal numbers; negation is not initially defined for them. They become Hoop Algebras when a second operation introduces some form of negation via generalized signs such as "-" , "𝕁" and "i" (second, third and fourth roots of unity that create real, terplex and complex numbers). m×m loops can be folded to m/r×m/r multiplication tables under r-fold negation if the loop has r-fold symmetry. This often creates signed tables such as Complex algebra C4c, in which i.i = -1, and the Quaternion Algebra Qr, in which i.j = k but j.i = -k. Many signed tables, with names ending in r, c, or J, are included. Every (unsigned) group G also defines algebras over the fields ℝ, ℂ etc. because the compositions GC2, GC4, etc are also groups that fold to G.

Generalized signs (𝕤^j) are distinct orthogonal r'th roots of unity. Projecting them onto the complex unit circle (as "cyclotomic numbers") distorts their properties and loses information. They occur as loop generators, as elements of generator matrices, in the bodies of "signed tables", in the definition of multi-phase sinusoids, and in generalizations of many functions that involve i in traditional mathematics. Some algebras involve more than one instance of an r'th root; in particular, "-1" is not the only square root of unity in many algebras and it is absent from some others.

The database includes some small group, loop, and signed tables that are pre-defined for use in prescriptions for larger loops. Procedures are supplied to generate tables, using several descriptions:- (1) an explicit table, (2) the GAP Group Atlas [6] identifier gmmnn corresponding to GAP>SmallGroups(mm,nn) (this Atlas is extended in the database to include many non-groups), (3) a mnemonic such as "D3", (4) incantations ca[], cd[], cl[], co[], ge[], ma[], md[],mg[], mp[], & ms[] that create index tables in different ways. (These two-letter abbreviations are used to reduce clutter in the database.)

Procedures are supplied to identify, characterise and manipulate Cayley tables. Any isomorphic Cayley table can be identified for most of the database tables. Group and subgroup properties can be tested. Functions that are conserved on multiplication (which I call sizes; the list of sizes is the shape of a vector in a specific hoop) are identified for over 80 small tables. They are the factors of a symbolic table determinant; sizes have not been found for larger tables because of computational limitations. Generalised multiplication and inversion procedures hoopTimes, hoopInverse are defined for algebras with conservative multiplication tables.

Wherever one or more sizes are zero (to within an arbitrary hmin), hoopTimes implements conservative multiplication & division; results are constrained to a sub-space or sub-algebra and remainders are created to maintain conservation. The result is projected onto a sub-algebra with these sizes zeroed, and the lost sizes are ejected as remainders to maintain conservation. Division-by-zero is eliminated by this process; when one or more zero size of the denominator is non-zero in the numerator the result of division is a dividend (with the same zeroes) together with remainders containing the sizes that would otherwise be lost. This appears to be related to particle interactions and decays, where properties are similarly conserved.

Some hoops have sinusoidal and/or hyperbolic dual forms that lead to generalized powers and generalized roots. Polar-duals generalize the polar description of the complex plane. Hoops with polar-dual forms have continuous orbits related to the "discrete orbits" of groups. Quadratic sizes become squared radii (releasing a degree of freedom); linear sizes displace the centre of rotation from zero. Orbit angle-parameters are "hidden variables" for the cartesian (vector-like) form; in the polar form they take up the degrees of freedom released by the squared radii. Constraining the determinants (ignoring any zero sizes) to be 1 defines unital sub-algebras. Their orbits resemble multi-phase deBroglie waves. A few hoops appear to have orbits with stable squared radii that resemble Planck areas. I conjecture that this relates to the limited number of stable particles. The Hexal and Dozal algebras (having 6 and 12 elements) are in a "super/subsymmetric" relationship; they have elements that act as unit spin and half-spin quantum operators that are neither real nor complex. Their Planck-scale orbits may correspond to lepton wave packets with 4 phases and quark wave packets with 3, 6, & 12 phases, giving a non-point-like description of particles. A unit-velocity equation leads to stable wave-packet formulations for particles; mass corresponds to orbital velocities in Kaluza-Klein dimensions (rather than spatial velocities). Indirect composition of commutative loops such as C2, C3, & K gives non-commutative hoops such as D3C2, which pseudo-powers and introduce uncertainty because the angles do not add on multiplication. The "law of large numbers" may arise from a reciprocal relationship between sizes of three sets of squared radii, that of the universe and that of the "point-like" particles (electrons), with other particles at their geometric mean near the Planck size.

Hoops unify and generalize many standard algebras and their conservation properties make them relevant to physics. I claim that primal numbers & hoop algebras provide new foundations for mathematical physics, transcending (but not discrediting) the approach based on complex numbers. They could not have been discovered without computer-aided maths. Their conserved properties provide the mathematics for half-spin, renormalization, supersymmetry, polarized and chiral waves, mass, hidden variables, the "law of large numbers" etc, and the limited number of fundamental particles.

1.3 Note on Nomenclature.

The GAP Atlas [6] instruction SmallGroup(mm,nn) has been adapted to provide an unambiguous identifier gmmnn for any loop in the database, by inserting non-groups of size mm after the groups of the same size. (The GAP numbering is not followed for mm>73). E.g. g0201 is the C2 group and g0202 is the complex algebra multiplication table with elements r & i and with i·i = -r. "Protoloops" (preferred isomorphic Cayley tables) are defined for most database entries. Where possible, these are defined in terms of "relators", usually ordered by decreasing complexity. Thus the 12-element groups have relators (a^3)=(b^2)=(c^2)=1 or (a^3)=(b^4)=1. Wherever a "loop structure" has been identified the loop has been given a specific mnemonic such as Q8 & Q12 for the 8- & 12-element quaternionic group tables. (Q12 is called T in Mathworld, (Subscript[Dic, 3]) in Wikipedia). Some loops have been predefined as Cayley Tables (identified by their mnemonic) because they lack an incantation or are needed as building blocks for larger tables. The majority of protoloops can be created by makeProtoloop[mm,nn,o] (with abbreviation mp[mm,nn,o]) where the option o selects between different creation procedures if more than one has been defined. The procedure idc[L] will identify any conservative isomorphic loop table L for most of the entries in the database (the faster & more general id[L] does not test for conservation). loop[[mm]] lists the data entries for all the tables with mm elements; gd[mnemonic] and gd[mm,nn] (or gd[] after id or idc has been used) will provide mm,nn followed by the specific loop entry.
	Cyclic groups are called Cn rather than ℤn because ℤn implies a ring with subtraction. 
		Mnemonics: Cn, Dn/2, and Qn are cyclic, generalised Dihedral, and Quaternion groups with n elements. An & Sn have n generators. Alt12n, Oct, D3M2 & D3M1n, etc., are "alternative" or "square-associative, aa.b=a.ab" loops. The M indicates that the loop is a "Moufang double" of D3 (etc.). Compound names XY, XiY, XpY are the direct or indirect compositions of X & Y. Xa, Xb, are second & third isomorphs of X.  Xr, XJ & Xc are conservative signed tables obtained from X that also provide conservative tables on expanding with C2 (r), C3 (J), or both C2 & C4 (c). Names ending with "n" (Q4n, C5n, C6n, C8n, Q8n, Alt12n,  etc.) are non-conservative loops.

2. Loops, Groups, & Hoops.

Summary. Algebraic Loops are multiplication tables. Groups are associative loops; Moufang loops are loops with division and (in all commutative and some noncommutative cases) symmetry conservation. Introducing another operation via "generalized signs" folds conservative loops to "Hoop algebras" over generalized fields. Unlike the use of groups in mathematical physics (as matrices to transform a single vector) hoops multiply or divide two vectors to give a product and two, possibly null, remainder vectors.

The examples in this notebook are intended to be comprehensible by non-Mathematica users. Mathematica users can install the GroupLoopHoop.m package and activate it with the following instruction, so they can test the examples with other data, or carry out other investigations.

Quit[]

<< GroupLoopHoop`

The GroupLoopHoop.m package is concerned with "Finite Algebraic Loops", with their subsets "Moufang Loops" and "Groups", and with the related symmetry-conserving partial-fraction division algebras or "Hoops". GroupLoopDemo.nb & HoopDemo.nb explain and demonstrate the concepts. They handle algebraic loops as normalized quasi-group Cayley index-tables with left and right units, i.e. as square tables with every index occurring once in each row and column, and with the first row and column defining the unit or neutral element. These tables define closed binary operations on unsigned elements, a.b=c.  The test routines abelianQ, associativeQ, abelGrassmanQ, alternativeQ, amQ, cQ, conservativeQ,  entropicQ, flexQ, flexibleQ, hamiltonianQ, indexTableQ, jordanQ, jacobiQ, MoufangQ, negatableQ, quasigroupQ, reductiveQ, riffQ, & signedTableQ are provided, and test whether tables possess specific properties. Appendix A demonstrates these tests. The "conservativeQ" test uses the table to multiply two vectors A & B. It then tests whether Det[A].Det[B] = ± Det[AB], where Det is the determinant of the loop inverse table mapped with the vector elements. A & B are random, but must not have zero determinants.

Tables with the associative property, (xy)z = x(yz) are "groups". Tables with the slightly less restrictive Moufang property zx.yz=(z.xy)z are Moufang loops. This covers all tables with a division property. I conjectured that all Moufang loops have another key property, conservation of the symbolic inverse determinant, but the D3Mn table disproves this conjecture. Frobenius established that all groups are conservative. This Frobenius conservation property is significant because Noether's law links coonservation to particles and forces. Extensive searching suggests that a few "Moufang-doubled" loops (Octonions, split-octonions, D4M2, and a few others, together with their direct compositions with Abelian groups) are the only non-associative conservative tables. Moufang loops are "square-associative", a(ab) = (a(ab) (also called alternative). Other square-associative tables lack both the conservation and the division properties. References to groups in much of mathematical physics should perhaps be to hoops; the key properties are division and conservation; associativity is not relevant.

Moufang loops are defined in terms of multiplication. Division is multiplication by a multiplicative inverse, whose existence is guaranteed by the Moufang properties. Negation and subtraction are not involved in their definition, so elements of Moufang loops are unsigned. Describing Abelian Moufang loops in terms of an invertible addition operation is abuse of nomenclature.
	A second operation is needed to convert a loop into an algebra with addition and (generalized) subtraction. This is provided by equivalence relationships that "fold" an m×m loop that multiplies sets of m unsigned elements to an (m/r)×(m/r) algebraic multiplication table that multiplies vecs of m/r signed elements. r = 2 or 4 gives real and complex vectors and algebras over the corresponding fields. Other r values provide generalized signs and define new "rigs" (rings without negation). The second operation often introduces signed products that are not included in the set of defining elements, so these tables are not loops. Hoops are algebras that pass the conservativeQ test; they are only introduced briefly here; HoopDemo.nb and Hoops.nb deal with them in greater detail.

3. Loop Properties, Loop & Signed Table creation.

Summary. GroupLoopHoop.m provides a database of groups, loops & hoops, together with procedures to create, identify & manipulate them. This section demonstrates the creation & identification of loops & signed tables. Index Tables represent loops, m×m Cayley multiplication tables. Introducing r-fold negation converts loops into hoop algebras with tables of size m/r×m/r. These are often "signed tables" with some signed products. Ten table-creating procedures are described and demonstrated.

3.1. Index & Cayley Tables, Loops, Table Identification.

The GroupLoopHoop.m package includes a database of index tables. These are normalized quasi-group arrays with indices as elements. They describe a loop operation (usually called vector multiplication) for indexed sets of coefficients, A={(Subscript[a, 1]),(Subscript[a, 2]),..}, which can be written (Subscript[a, 1]) (Subscript[d, 1])+(Subscript[a, 2])(Subscript[d, 2])+... where  (Subscript[d, i]) is a (loop) direction or (hoop) dimension. Multiplication AB gives C={(Subscript[c, 1]),(Subscript[c, 2]),...} where (Subscript[c, k]) = ∑(Subscript[a, i]) (Subscript[b, j]), with k=i.j in the loop. In Moufang Loops this operation has a (left & right) "unit" or "1" and multiplication of sets of coefficients is invertible, making division identical to multiplication. All groups are associative Moufang loops; all non-associative Moufang loops are square-associative (or alternative). Negation is not defined for loops, so they do not represent algebras until they have been "folded" via a second operation, introducing negation and additive elimination (generalized subtraction). This may give a "signed table" (Section 3.7) in which some products are signed indices. E.g. the 2-element complex algebra has elements {1, i} with the signed product i.i = -1; it is folded from the 4-element C4 group; the 4-element Quaternion algebra {1, i, j, k} has i.j = k but j.i = -k, and is folded from the 8-element quaternion group. "Symmetry-conserving" tables (I call them "Hoops") are discussed in Section 4.3. They define partial-fraction-division algebras; tables folded from loops with this property are also conservative.
	Cayley tables include index tables, but may also have symbols or coefficients mapped onto the indices, to give symbolic or general Cayley tables. The caylindex procedure converts a table to an index table, whilst gmap reverses the process, mapping a vec (an indexed list of symbols and/or coefficients, which is sometimes a vector) onto an index table, respecting signs.
	The identification gmmnn (based on SmallGroup( mm, nn) in the GAP Atlas, and extended to include all the non-groups in the database) can be found for most conservative (Group, Moufang Loop, & Hoop) table isomorphs with up to 73 elements and for some non-associative and larger tables. nn is the position in the sub-list of loops with mm elements. The id procedure uses a diagnostic property dico (diagonal count), together with specific tests where this is not unique. Some database tables can only be provisionally identified because there may be non-isomorphic non-conservative tables with the same dico. 
	loop[[mm,nn]], gd["mnemonic"], gd[mm,nn] or gd[] all supply the database entry. The first two entries in gd[] are mm,nn for the "target loop", i.e. the one currently in use. The database also includes information about the shape, polar form and plex (Sections 4.3, 6.2, 7.) of many small groups.
	Example 1 demonstrates tables and mappings, and shows that the id procedure identifies a table whatever its form, provided that it is in the database. (As the input may be incomprehensible to non-Mathematica users, input is hidden in "closed cells"; it can be revealed by un-checking the Cell<Cell Properties<Cell open box. The frequent \n entries in the input are new-line symbols, used to organise the output.)

Example 1. Groups C3 & C4

{"The group {{a,b,c},{b,c,a},{c,a,b}} is ", id[caylindex[{{a,b,c},{b,c,a},{c,a,b}}]],
"\nwith {mm,nn} = ",{mm,nn},
"\nand index Table ",C3//tf,
"\n{3.,2.+I, -4.} mapped onto C3 gives", gmap[C3,{3.,2.+I, -4.}]//tf,
"\nListForm C4 is ",C4,"\nTraditional form C4 is",C4//tf,"\nMapping {a,b,c,d} onto C4 gives a symbolic table",gmap[C4,{a,b,c,d}]//tf}

Most  GroupLoopHoop.m procedures accept TraditionalForm array as well as ListForm as input. Example 2 shows this for the Klein 4-group "K". The different ways of accessing the data about a loop are demonstrated:-

Example 2. TraditionalForm input, Loop Data Access.

{"TraditionalForm input such as",tst={{1,2,3,4},{2,1,4,3},{3,4,1,2},{4,3,2,1}}//tf," is accepted.\nThis group is",
  id[tst],"\nLoop data can be accessed in different ways:-\nloop[[4,1]] gives",loop[[4,1]],"\ngd[4,1] gives",gd[4,1],"\ngd[\"K\"] gives",gd["K"],"\ngd[]    gives",gd[]}

Information about the Mathematica procedures (Usage) can always be found by the "?" help system, and the Mathematica implementation by "??". "Usage" for the GroupLoopHoop.m package can be seen in Section 2.7 of that package; Example 3 gives it for id & dico, which should be read carefully as the information is not repeated in this notebook (Warning! ??id generates several pages of irrelevant output!):-

Example 3a. Help system, ?id.

?id

Identification employs a variety of "table invariants" to distinguish between different conservative tables. These are functions that are unaffected by re-ordering a table. The most important is dico, the "diagonal count", which is a generalized signature for a hoop table:-

Example 3b. Help system,  ?dico, ?abbr.

{"dico[g3207] =",dico[makeProtoloop["g3207"]]}
?dico
?abbr

Note that dico is the second element of  loop[[mm,nn]], following the table mnemonic.

Most of the procedures require that the argument is a quasigroup, so they apply gpd to ensure that arrays have the required properties. Example 4 tests a variation on the C3 example. The quasigroup property is so fundamental to the package that operations are aborted if it is absent.

Example 4. Alter one element of C3 and the result is rejected as it is not a quasigroup.

gpd[{{a,b,c},{b,d,a},{d,a,b}}]
?gpd

3.2. Creating Cayley Tables.

Procedures are supplied to construct loops as indexTables from formulae, compositions, relators, cycles, permutations, "unitary monomial matrices", and "univectors". Each construction is demonstrated in the following subsections. Some skeleton routines are shown, to allow programmers to see what is going on. They are non-executable because they omit all checks and special cases.

3.2.1. Creating Cayley Tables with ca.

Example 5 uses the procedure ca to create the 6-element tables for the groups C6 (≃ C3C2) and D3. ca employs a fast formula:-  i*j →Mod[i+j,m] for even i,  i*j → Mod[i+j*k,m] for odd i. It uses an optional parameter k to create non-abelian groups; m is the number of elements. A skeleton implementation is given below. (The programmed formula is complicated by the Mathematica indices being {1,..,m} rather than {0,...,m-1}).

ca[m_, k_:  0]:=(*skeleton .  non - executable*)
Table[
          Mod[i + If[EvenQ[i], j k - k + 1, j] - 1, m, 
            1], 
{i, m}, {j, m}];

Example 5. Create and identify two 6-element Tables using ca.

{"ca[6] creates",c6 = ca[6]; 
        id [c6],c6 // tf,"ca[6,5] creates",d3 = ca[6, 5]; 
        id [d3],d3 // tf}

Note that Dihedral groups such as D3 are given by ca[2n,2n-1] and generalized quaternion groups by ca[2n,n-1]. In general ca[i,j] often generates groupoids that are not Moufang loops.

3.2.2. Composing Cayley Tables with co.

A skeleton implementation of the composition procedure, co[g,h,o], is given below. It puts the elements of the second array, h, suitably offset, in the place of each element of the first array g. The composition is "indirect" if the parameter a=2. The full procedure handles some other values of a. (The expression mod[t,m,1] gives indices in the range 1 to m.)

co[g_, h_, a_:  0]:=(*Skeleton .  Shortened,  non - executable*)
Module[{g1 = Dimensions[
                  g][[1]], 
            h1 = Dimensions[h][[1]], 
            im, lm, result = {}, t, m}, 
          m = g1 h1; 
Do[
            lm = l - 1; 
Do[
              t = {}; 
Do[
Do[
If[a == 2, 
                    If[EvenQ[l] && i > 1, 
                      AppendTo[
                        t, (h[[k, 
                                  l]] - 1) g1 + 
                          g[[g1 + 2 - i, 
                            j]]], 
                      AppendTo[
                        t, (h[[k, 
                                  l]] - 1) g1 + 
                          g[[i, 
                            j]]]], 
AppendTo[
                      t, (h[[k, l]] - 
                              1) g1 + 
                        g[[i, 
                          j]]]], 
{i, 
                    g1}], 
{k, 
                  h1}]; 
AppendTo[result, 
                Mod[t, m, 1]], 
{j, 
                g1}], 
{l, 
              h1}]; 
result];

Example 6a uses co to compose the C3 table with C4, both directly and indirectly. The results are groups C3C4 & Q12.  Their tables are shown. Direct composition of abelian loops gives an abelian loop; indirect compositions gives non-abelian loops.

Example 6a. Direct & Indirect Composition of C3 & C4 using co.

{"Composing C3 with C4, co[C3,C4], gives the abelian table",idc[tst = co[C3, C4]],gd[],"\n",tst // tf,"Indirect composition of C3 with C4, co[C3,C4,2], gives the non-abelian table",idc[tst1 = co[C3, C4, 2]],"\n",gd[],"\n ",
tst1 // tf}

Example 6b shows that three different 48-element groups can be created by direct or indirect composition of D3 & Q8.

Example 6b. Direct & Indirect Composition of D3 & Q8 using co.

{"Composing D3 with Q8, co[D3,Q8], gives the non-abelian table",tst = co[D3, Q8]; 
        idc[tst],gd[],"\n","Indirect composition of D3 with Q8, co[Q8,D3,2] & co[Q8,D3,4],gives two non-abelian tables",tst1 = co[Q8, D3, 2]; "\n",idc[tst1],gd[],tst1 = co[Q8, D3, 4]; "\nand",idc[tst1],"\n",gd[]}
tst1 =. ;

Direct and indirect compositions create larger tables, with more symmetries. The reverse procedure, "folding" from larger to smaller tables, creates "supersymmetry" (sic because of the way that physicists have defined supersymmetry); some symmetries are lost. The indirect compositions are all non-commutative, and so this may be a paradigm for boson-fermion supersymmetry, where the bosons commute and the fermions anti-commute. The ts procedure reverses direct composition. I have not looked for a corresponding indirect composition reversal.

3.2.3. Creating Matrix Cayley Tables with ma.

Most groups can be represented (in many isomorphic ways) by elements that are square matrices, using dot-multiplication as the group operation. The procedure ma inverts this, finding the group generated by dot-multiplication of a given set of square matrices. Whenever a dot-product gives a new matrix it is added to the list of elements, until the group closes or the size limit is exceeded. A skeleton version is supplied. Defining matrices are specified in the database for many loops. st is conversion table that converts thematrices to indices.

ma[{mm__}, maxel_:  73, o_:  0]:=(*Skeleton .  Abbreviated,  non - executable *)
Module[{m = {mm},g,j = 2,k = 1,lg,mx = 2,n,rs={(𝕁^(any_))->(𝕁^(Mod[any, 3])),(𝕜^any)_ -> (𝕜^Mod)[any, 2]},st},\(g = Insert[m, IdentityMatrix[Length[m[\([1, 1]\)]]], 1]; 
          While[lg = Length[g]; j ≤ lg, \(k++\); 
            n = g[[j]] . 
                  g[[
                    k]] /. rs; 
            If[\(! MemberQ[g, n]\), AppendTo[g, n]; \(mx++\); 
              If[mx > maxel, k = 9999; j = mx]]; 
            If[k ≥ lg, k = 1; \(j++\); 
              If[j > maxel, g = {{}}; Goto[tag]]]]; 
          g = Table[
              g[[i]] . 
                  g[[j]] /. rs, {i, 
                lg}, {j, lg}]; Label[tag]; 
          st = Table[
              g[[j, 1]] -> j, {j, lg, 
                1, \(-1\)}]; 
g /. st\)]

Example 7 sets up the three Pauli-σ matrices [3, p51] and uses ma to dot-multiply them to give a 16-element group; the 16 matrix elements are shown. The result is an isomorph of the P16 protoloop, which is also shown. These tables have physical significance (discussed elsewhere) because they possess the Riemann metric.

Ex. 7. Using ma to generate a group from Pauli Matrices.

{"The 3 σ matrices are ", (Subscript[σ, 1]) = {{0, 1}, {1, 0}}; (Subscript[σ, 1]) // tf,(Subscript[σ, 2]) = {{0, -I}, {I, 
              0}}; (Subscript[σ, 2]) // tf,(Subscript[σ, 3]) = {{1, 0}, {0, -1}}; (Subscript[σ, 3]) // tf,"\nma[{(Subscript[σ, 1]),(Subscript[σ, 2]),(Subscript[σ, 3])}] generates",id[ma[{(Subscript[σ, 1]), (Subscript[σ, 2]), (Subscript[σ, 3])}]],"\nThe elements are stored in matel as",Table[matel[[i]] // tf, {i, 16}],
"\nWith protoloop P16:-\n",
P16 // tf}

Note that non-associative hoops cannot be created by the dot-multiplication of matrices and are not members of GL[n].

3.2.4. Generating Cayley Tables with ge.

Another way to create a group is to specify a list of relators a, b,... and some relations (substitution rules such as ba→aab) between them. The relators act as the letters to be used in names of the group element. ge creates group elements by concatenation of relator strings. Non-abelian rules can be specified, leading to non-abelian groups. The relations are used to give lexicographic order in individual element names. Each relator acts as a root of unity; the ge procedure uses strings "a", "b", etc. as relators. Thus if (a^3)→1, there will be string elements "a" and "aa" whilst "aaa" becomes the unit or empty string "".  ge was originally written to use symbolic variables a, (a^2),  etc. (and called ge because I originally thought that they were "generators"), these were converted to strings to reduce interference with other calculations. A final parameter o can be set to ±1; this results in the creation of global variables genel, matel that record the elements and the loop, with the elements as strings. An experimental feature is the creation of a string replacement rule strep if o=-1, to allow investigation of noncommutative loop properties. These features are not demonstrated.

ge[gp_, post_: {}]:=(* skeleton version of ge, for groups only *)\(Module[{g = {}, cr, j, l = Plus @@ gp + 2, 
            le = Length[gp], ln = 1, lh, n = {""}, new, p, st, rhs, si, 
            sij, t = post}, 
          cr = Take[{"a", "b", "c", "d", "e", "f", "g"}, le]; 
Do[ (*i\ loop . \ 
                  Rules\ to\ reduce\ repetitions*) st = 
              cr[\([i]\)]; 
AppendTo[t, 
              Do[st = st <> cr[\([i]\)], {gp[\([i]\)] - 1}]; 
              Rule[st, ""]], {i, le}]; 
Do[ (*i, 
              j\ loops . \ Add\ abelian\ rules*) new = 
              Rule[lh = cr[\([j]\)] <> cr[\([i]\)], 
                cr[\([i]\)] <> 
                  cr[\([j]\)]]; 
Do[ (*k\ loop . 
                    Omit\ redundant\ rules*) If[lh == t[\([k, 1]\)], 
                new = ""], {k, Length[t] - 1}]; 
If[
              Length[new] == 2, AppendTo[t, new]], {i, 1, le - 1}, {j, 
              i + 1, le}]; 
Do[ (*i\ loop . \ 
                  Build\ the\ element\ list*) si = cr[\([i]\)]; sij = si; 
            p = gp[\([i]\)] - 
                1; 
Do[ (*j\ loop . Repetitions*) 
                Do[ (*k\ loop . \ New\ element = 
                    j\ repeats\ of\ k' th\ existing\ element*) AppendTo[n, 
                  If[k == 1, sij, n[\([k]\)] <> sij]], {k, 
                  ln}]; 
sij = sij <> si, {j, p}]; 
            ln = Length[n], {i, 
              le}];  (*element\ list\ \(\(completed\)\(.\)\)*) 
            Do[ (*i\ loop . Build\ table\ by\ \(\(concatenation\)\(.\)\)*) 
              AppendTo[
              g,  (*add\ successive\ n[\([i]\)] <> n\ rows\ to\ g*) MapThread[
                StringJoin, {Table[n[\([i]\)], {j, ln}], n}]], {i, 
              ln}]; 
g = 
            Table[l = 0; s1 = g[[i, j]]; 
              s1 = While[\((s2 = StringReplace[s1, t])\) ≠ s1 && 
                    l < 99, \(l++\); s1 = s2]; 
              s2, {i, ln}, {j, 
                ln}]; 
 (*Conversion\ to\ \(\(indices\)\(.\)\)*) st = 
            Table[g[[j, 1]] -> 
                j, {j, ln, 1, \(-1\)}]; 
g /. st]\);

Example 8 creates A4 by setting up relators a, b, & c, with (a^3) → 1, (b^2) → 1, (c^2) → 1. This is implied by the {3,2,2} entry. The elements {"", "a", "aa", "b", "ab", "aab", "c", "ac", "aac", "bc", "abc", "aabc"} are created. These are put into genel if the last parameter is ±1, as in this example. A loop is then created by concatenation. The non-abelian rules ba→abc & ca→ab are applied, followed by the (implicit) abelian rule cb→bc, until all strings are reduced to elements. The Index table is created and identified.
	The corresponding traditional formulation of relators is discussed in Section 5.2. I have not investigated the creation of non-associative Moufang loops from relators.

Example 8. Group creation from relators and non-abelian rules.

{"On generating ",id[
          a4 = ge[{3, 2, 
                2}, {"ba" -> "abc", "ca" -> "ab"}, 
              1]],"by ge[{3,2,2},{ba->abc,ca->ab},1]]\nthe string elements are",genel,"(the first element is the empty string)\nThe Index table is:-",
a4 // tf}

3.2.5. Generating Cayley Tables with pe.

Every group can be generated from permutations and cycles; this is of limited value for small groups, but suitable procedures (not shown here) are implemented and the database includes a few examples derived from GAP data. The incantations tend to be voluminous in comparison with the other incantations for the same group.
	Example 8a generates groups from permutations, using examples from the basic permutations that have been set up as arrays s3, s4, and s5. Note that 120-element S5 group needs the permissible size to be increased from the default value of 72. Then some small groups are created from 6-member permutations. In Example 8b the 120-element (Subscript[SL, 2]) (5) group is created from the two permutations specified in a tutorial in the GAP manual.

Example 8a Generation from pre-defined permutations.

{"Permutations s3 =",s3,"generate\n",id[pe[{s3[[1]]}]]  ,id[pe[{s3[[2]]}]]  ,id[pe[{s3[[1]], s3[[2]]}]]  ,"\nPermutations s4 =",s4,"generate\n",id[pe[{s4[[1]]}]]  ,id[pe[{s4[[3]]}]]  ,id[pe[{s4[[5]]}]]  ,id[pe[{s4[[1]], s4[[2]]}]]  ,id[pe[{s4[[1]], s4[[4]]}]]  ,id[pe[{s4[[3]], s4[[4]]}]]  ,id[pe[{s4[[1]], s4[[5]]}]]  ,"\nPermutations s5 =",s5,"generate\n",id[pe[{s5[[1]]}]]  ,id[pe[{s5[[2]]}]]  ,id[pe[{s5[[3]]}]]  ,id[pe[{s5[[1]], s5[[8]]}]]  ,id[pe[{s5[[5]]}]]  ,id[pe[{s5[[1]], s5[[2]]}]]  ,id[pe[{s5[[4]], s5[[7]]}]]  ,id[pe[{s5[[1]], s5[[7]]}]]  ,id[
          pe[{s5[[1]], s5[[2]], s5[[8]]}]]  ,id[pe[{s5[[2]], s5[[4]]}]]  ,id[pe[{s5[[1]], s5[[3]]}]]  ,id[pe[{s5[[2]], s5[[5]]}]]  ,id[pe[{s5[[2]], s5[[3]]}, 120]]  ,"\nSome groups from 6-member permutations -",id[pe[{{1, 2, 3, 4, 6, 5}}]]  ,id[pe[{{1, 2, 3, 6, 4, 5}}]]  ,id[pe[{{1, 2, 6, 3, 4, 5}}]]  ,id[
          pe[{{1, 2, 3, 4, 6, 5}, {1, 2, 4, 3, 5, 6}}]]  ,id[pe[{{1, 3, 4, 6, 2, 5}}]]  ,id[pe[{{1, 3, 2, 6, 4, 5}}]]  ,id[
          pe[{{1, 2, 3, 4, 6, 5}, {1, 2, 3, 5, 4, 6}}]]  ,id[
          pe[{{1, 2, 4, 3, 6, 5}, {1, 2, 3, 6, 5, 4}}]]  ,id[
          pe[{{1, 2, 4, 3, 6, 5}, {1, 2, 3, 6, 4, 5}}]]  ,
id[
          pe[{{1, 3, 2, 4, 6, 5}, {1, 3, 2, 5, 6, 4}}]]  ,
id[
          pe[{{1, 2, 3, 4, 6, 5}, {1, 2, 6, 3, 4, 5}}]]  ,id[
          pe[{{1, 4, 2, 6, 3, 5}, {1, 2, 5, 6, 3, 4}}]]  ,id[
          pe[{{1, 2, 6, 3, 5, 4}, {2, 1, 5, 3, 4, 6}}]]  }

\(\(\(Example\)\(\ \)\(8\) \( b . \ 
        Generation\)\(\ \)\(of\)\(\ \)\(SL\_2\) \((5)\)\(\ \)\(from\)\(\ \)\(GAP\)\(\ \)\(tutorial\)\(\ \)\(Ch\)  \(.6\)  \(.2\)\(\ \)\)\)

{"Permutations ",perm1=fromCycles[{{1}, { 2,  3,  5,  9, 15}, { 4,  7, 12,  8, 
                  14}, 
{10, 17, 23, 20, 24}, {11, 19, 22, 
                  16, 13}}],
perm2=fromCycles[{{1, 2, 4, 8, 3, 6, 11, 20, 17, 19},
{5, 10, 18, 7, 13, 22, 12, 21, 24, 15},{9, 16},{14, 23}}],
SL25 = pe[{perm1, perm2}, 120];"Create Group SL25 of Length = ",Length[SL25],
"\ndico = ",dico[SL25]}

3.2.6. Creating Signed Tables with ms & ts.

The database of over 800 loops includes many non-associative tables (octonions etc.) and "signed-tables". The signed tables have unsigned elements (as in "C4c", complex algebra, & "Qr", quaternion algebra, and in the tables in the following examples) but they include signed products such as i i = - 1  and j i = - k. They are not groups, because the signed products are not in the list of elements; however composing them with one of {C2,C3,C4} usually creates an (unsigned) Moufang loop. The definitions of loop properties have been extended to signed tables by defining tests that allow for signed elements.

Some signed tables can be created from matrices, by using ms. This dot-multiplies the matrices (as in ma, Section 3.2.3), but does not add a new matrix to the element list if it only differs from an existing element by a sign. In Example 9, two matrices generate the Clifford(2) algebra [3,p10]; the generating matrices are the second and third in the matel list, after the unit matrix. The unit matrix and one new matrix have been added; all four negated matrices are present in the signed table.

Example 9. CL2 signed table from two2×2 matrices.

tst=ms[{2,13}];{"ms[{2,13}] uses two 2×2 matrices",{u2[[2]]//tf,u2[[13]]//tf},"\nto create",id[tst],tst//tf,"\n The matrices stored in matel are the elements",{matel[[1]]//tf,matel[[2]]//tf,matel[[3]]//tf,matel[[4]]//tf}}

Other signed tables can be made by folding a table that has a suitable symmetric structure, using the ts (toSignedTable) procedure; this creates single signed elements as equivalence relations on r unsigned elements. P16 (shown in Example 7) splits into four 8×8 tables or into sixteen 4×4 tables that repeat the structure of the top left corner with offsets mod 8 or 4. In Example 10, ts finds the signed tables corresponding to these structures. The 8-element case (r =2) is not in the database; the 4-element case (r=4) is the algebra that I call the Pauli-σ algebra, P4:-

Example 10. Collapsing P16.

tst = 
      ts[P16]; {"Collapse of P16 by ts[P16,2]. \nIs the result \
conservative?", conservativeQ[tst], "\nThe table is", 
      tst // tf, "\nC4 Collapse of P16 by ts[P16,4] gives", 
      tst4 = ts[P16, 4]; tst4 // tf; id[tst4], tst4 // tf}

3.2.7. Generalized Cayley-Dickson and Clifford Algebras, Moufang doubling.

Example 11 uses generalizations (cd & cl) of the Cayley-Dickson [3, p285] and Clifford [3, p284] procedures to create the Octonion and Clifford(2,1) algebra signed tables. Composing them with C2 "expands" or "unfolds" them to Oct & D4C2 respectively. Octonions cannot be created by ms as they are non-associative, unlike matrix multiplication. I call the generators of these tables "univectors" - some authors confusingly call them either "vectors" or "scalars"; I contend that "scalar" should be reserved for the unit element, and "vector" should be reserved for sets of elements. Bivectors and trivectors are products of two or three univectors, etc.

Ex. 11. Signed table hoops from univectors.

\({"cd[{-1,-1,-1}]  creates ", 

      idc[tst = cd[{\(-1\), \(-1\), \(-1\)}]], 
      tst // tf, "
Is this alternative?", 
      alternativeQ[tst], "
It expands to ", 
      id[co[tst, C2]], "

cl[2,1] creates
", 
idc[
        tst2 = cl[2, 1]], tst2 // tf, "
Is this conservative?", 
      alternativeQ[tst2], "
It expands to ", 
      id[co[tst2, C2]]}\)

The original Cayley-Dickson process corresponds to cd[{-1,-1...}] with each new γ being -1. Schafer generalized this to γ=±1. Using some γ=+1 creates some new conservative signed tables. I generalized further, introducing a list as an optional final γ; this composes the signed table with an abelian group to create a "parent" unsigned table. I also introduced some variations and some new starting tables in place of C2. Test 4 in GroupLoopTest listed 45 tables with cd incantations; only 4 of the many non-conservative cases have been included. The following is a (non-exhaustive) list of conservative outcomes:-

Ex. 11a. Generalized Cayley-Dickson process.

{"cd[{1,-1}]        creates ", 
      idc[cd[{1, -1}]], "\ncd[{1,-1,{2}}]     creates ", 
      idc[cd[{1, -1, {2}}]], "\ncd[{-1,-1.}]       creates ", 
      idc[cd[{-1, -1. }]], 
"\ncd[{-1,-1,-1}]     \
creates ", 
      idc[cd[{-1, -1, -1}]], "\ncd[{-1,-1,-1,{2}}] creates ", 
      idc[cd[{-1, -1, -1, {2}}]], "\ncd[{-2,1,1}]       creates \
", idc[cd[{-2, 1, 
            1}]], 
"\ncd[{-2,1,-1.}]     creates ", 
      idc[cd[{-2, 
            1, -1. }]], 
"\ncd[{3,-1.,-1.}]    \
creates ", 
      idc[cd[{3, -1. , -1. }]], 
"\ncd[{3.,1,1}]  \
     creates ", 
      idc[cd[{3. , 1, 
            1}]], 
"\ncd[{1,-1,-1}]      creates ", 
      idc[cd[{1, -1, -1}]], "\ncd[{1,-1,-1,{2}}]  creates ", 
      idc[cd[{1, -1, -1, {2}}]], "\ncd[{-2,1}]         creates ", 
      idc[cd[{-2, 1}]], "\ncd[{3.,1.}]        creates ", 
      idc[cd[{3. , 1. }]], "\ncd[{4.,1.}]        creates ", 
      idc[cd[{4. , 1. }]], "\ncd[{-1,1}]         creates ", 
      idc[cd[{-1, 1}]], "\ncd[{-1,1,1}]       creates ", 
      idc[cd[{-1, 1, 1}]], "\ncd[{-1,1,1,1}]     creates ", 
      idc[cd[{-1, 1, 1, 1}]], "\ncd[{-1,1,1,1,1}]   creates ", 
      idc[cd[{-1, 1, 1, 1, 1}]]}

The O2, O4,...  series have 2, 4,... quadratic sizes and so describe that number of copies of the complex plane, with the origin as the only common point. Dav is an O2 isomorph.

The non-associative Moufang loops (Loops package, Gabor P. Nagy & Petr Vojtechovsky, in  www.GAP-system.org) are obtained by "Chein doubling" or by "Moufang modification" of non-abelian groups. This is partially implemented by the md procedure. M1201 or D3Mn is the smallest non-associative Moufang loop (doubled D3), but does not conserve its non-linear factors. Neither do M1601 (doubled D4), M1604 (modified from D4), nor M1605 (modified from Q8). The only other 16 element non-associative Moufang loops are M1602 (doubled Q8) & M1603 (the Octonion table); they conserve sums of 8 squares (with 4 negated in the M1602 case). Of the 71 32-element cases, only 6 (M3202 = Q8C2m; M3216 = OctC2; M3221 = P16M; M3235 = C8pC2M; M3254 = KiC4M & M3265 = C4iC4m) are conservative. Example 11b. creates all those in the database.

Ex. 11b. Moufang Doubling processes.

{"md[D3]                  creates ", 
      id[md[D3]], "\nmd[ca[8,7]]              creates ", 
      id[md[ca[8, 7]]], "\nmd[Q8]      creates conservative ", 
      idc[md[Q8]], 
"\nmd[D4,{1,2,3,8,5,6,7,4}] creates \
", id[md[
          D4, {1, 2, 3, 8, 5, 6, 7, 
            4}]], "\nmd[Q8,{1,2,3,8,5,6,7,4}] creates ", 
      id[md[Q8, {1, 2, 3, 8, 5, 6, 7, 
            4}]], "\nmd[ca[10,9]              creates ", 
      id[md[ca[10, 9]]], "\nmd[D3C2]                 creates ", 
      id[md[D3C2]], 
"\nmd[co[Q8,C2]] creates \
conservative", 
      idc[md[co[Q8, 
            C2]]], 
"\n\
md[co[P4,C4],{1,10,11,12,5,14,15,16,9,2,3,4,13,6,7,8}] \n creates \
conservative ", 
      id[md[co[P4, C4], {1, 10, 11, 12, 5, 14, 15, 16, 9, 2, 3, 4, 13, 6, 7, 
            8}]], 
"\n\
md[md[co[ca[8],C2,4],{1,6,3,8,5,2,7,4,13,14,15,16,9,10,11,12}]\n creates \
conservative", 
      id[md[co[ca[8], C2, 4], {1, 6, 3, 8, 5, 2, 7, 4, 13, 14, 15, 16, 9, 10, 
            11, 12}]], 
"\n\
md[md[co[ca[8],C2,4],{1,6,3,8,5,2,7,4,13,14,15,16,9,10,11,12}]\n creates \
conservative",                          id[
        md[co[K, C4, 2], {1, 4, 3, 2, 7, 8, 5, 6, 9, 12, 11, 10, 15, 16, 13, 
            14}]]}

3.3. Database rules for loop creation.

The loop[[mm,nn]] data includes information that allows the creation of the loop gmmnn, usually in several ways. The 4th entry is a prescription such as "co[C3,C4,2]" (used to create Q12 in Example 6); the next two are relators and non-abelian rules such as {3,2,2}, {"ba"-> "abc","ca"-> "ab"} (used to create A4 in Example 8). Entries 7, 8, & 9  are lists pointing to 2×2, 3×3, & 4×4 matrices that generate the loop via ma or the signed table via ms (where such generating matrix sets are known to the author). Example 13 first gives gd["P16"] and then demonstrates the different creation processes for P16. Entry 7 is {2,3,4} because the Pauli-σ matrices (as used in Example 7) are stored as u2[[2]], u2[[3]], u2[[4]].  Entry 9 is {1,7,16} because the Dirac-γ matrices are stored as u4[[2]], u4[[7]], u4[[16]]. In a few cases (including P16 & A5) extra entries provide additional prescriptions. Thus makeProtoloop["P16",o] creates P16 in six different ways:-

Example 13. Loop generation rules demonstrated.

{"P16 Data",gd["P16"],
"\n\nEffect of makeProtoloop[16,13,o] or mp[\"P16\",o] etc.\no=0 uses co[P4,C4] to create       ",id[co[P4,C4]],
"\no=1 uses ge[{2,2,2,2},{dd->c,ba->abc}] to create",
id[ge[{2,2,2,2},{dd->c,ba->abc}]],
"\no=2 uses mg[{2,3,4},u2] to create  ",id[mg[{2,3,4},u2]],
"\no=4 uses mg[{1,7,16},u4] to create ",id[mg[{1,7,16},u4]],
"\no=5 uses co[Q8,C2,4] to create     ",id[co[Q8,C2,4]],
"\no=6 uses co[cl[3],C2] to create    ",id[co[cl[3],C2]]}

Example 14 tabulates abbreviated data entries for 43 of the smallest non-abelian groups (mg & ms rules are omitted). The non-abelian rules are in compressed form, "a4b" being equivalent to "aaaab". The fastest prescription is usually supplied, ca[mm,o] being preferred to "co[g,h,o]". Note that prescriptions have not been found for "A4", "g2003","SL23", "P27", and "g2704"; their prescription entries are ca[]. Every group appears to have generators (called "relators" here and in GAP) whose powers multiply to give the group size; John Conway assures me (private communication) that this is likely. The GAP system can provide a (not necessarily minimal) set of relators; this is demonstrated later (in Example 22).

Example 14. Small non-abelian groups.

({{"Name", "Length", "GAP", "Prescription", "Gens", "non-Abelian"}, {"D3", 6, 1, "ca[6,5]", {3, 2}, {"ba" -> "a2b"}}, {"D4", 8, 3, "ca[8,7]", {4, 2}, {"ba" -> "a3b"}}, {"Q8", 8, 4, "ca[8,3]", {2, 2, 
              2}, \({"aa" -> "c", "bb" -> "c", 
"ba" -> "abc"}\)}, {"D5", 10, 1, "ca[10,9]", {5, 
              2}, {"ba" -> "a4b"}}, {"Q12", 12, 1, "co[C3,C4,2]", {3, 
              4}, {"ba" -> "a2b"}}, {"A4", 12, 3, "ca[]", {3, 2, 
              2}, \({"ba" -> "abc", "ca" -> "ab"}\)}, {"D3C2", 12, 4, "co[C3,K,2]", {3, 2, 
              2}, {"ba" -> "a2b"}}, {"D7", 14, 2, "ca[14,13]", {7, 
              2}, {"ba" -> "a6b"}}, {"KiC4", 16, 3, "co[K,C4,2]", {4, 2, 
              2}, {"ba" -> "abc"}}, {"C4iC4", 16, 4, "co[C4,C4,2]", {4, 
              4}, {"ba" -> "a3b"}}, {"C8pC2", 16, 6, "co[ca[8],C2,4]", {8, 
              2}, {"ba" -> "a5b"}}, {"D8", 16, 7, "ca[16,15]", {8, 
              2}, {"ba" -> "a7b"}}, {"Q8iC2", 16, 8, "co[Q8,C2,2]", {8, 
              2}, {"ba" -> "a3b"}}, {"Q16", 16, 9, "ca[16,7]", {2, 2, 2, 
              2}, \({"aa" -> "c", "bb" -> "c", 
"dd" -> "c", "ba" -> "abc", 
"da" -> "abd", "db" -> "bcd"}\)}, {"D4C2", 16, 11, "co[D4,C2]", {4, 2, 
              2}, {"ba" -> "a3b"}}, {"Q8C2", 16, 12, "co[Q8,C2]", {2, 2, 2, 
              2}, \({"aa" -> "c", "bb" -> "c", 
"ba" -> "abc"}\)}, {"P16", 16, 13, "co[P4,C4]", {2, 2, 2, 
              2}, \({"dd" -> "c", "ba" -> "abc"}\)}, {"D9", 18, 1, "ca[18,17]", {9, 
              2}, {"ba" -> "a8b"}}, {"D3C3", 18, 3, "co[D3,C3]", {3, 
              6}, {"ba" -> "a2b"}}, {"E18", 18, 4, "co[C3,ca[6,5],2]", {2, 3, 
              3}, \({"ba" -> "abb", "ca" -> "acc"}\)}, {"Q20", 20, 1, "ca[20,9]", {5, 
              4}, {"ba" -> "a4b"}}, {"g2003", 20, 3, "ca[]", {5, 4}, {"ba" -> "a2b"}}, {"D10", 20, 4, "ca[20,19]", {10, 
              2}, {"ba" -> "a9b"}}, {"g2101", 21, 1, "co[ca[7],C3,7]", {7, 
              3}, {"ba" -> "a2b"}}, {"D11", 22, 1, "ca[22,21]", {11, 
              2}, {"ba" -> "a10b"}}, {"C3iC8", 24, 1, "co[C3,C8,2]", {3, 
              8}, {"ba" -> "a2b"}}, {"SL23", 24, 3, "ca[]", {3, 2, 2, 
              2}, \({"bb" -> "d", "cc" -> "d", 
"ba" -> "abcd", "ca" -> "abd", 
"cb" -> "bcd"}\)}, {"Q24", 24, 4, "ca[24,11]", {3, 2, 2, 
              2}, \({"ba" -> "a2b", "bb" -> "c", 
"dd" -> "c", "db" -> "bcd"}\)}, {"D3C4", 24, 5, "co[D3,C4]", {3, 2, 
              4}, {"ba" -> "a2b"}}, {"D12", 24, 6, "ca[24,23]", {12, 
              2}, {"ba" -> "a11b"}}, {"Q12C2", 24, 7, "co[ca[12,5],C2]", {6, 
              4}, {"ba" -> "a5b"}}, {"C3iC4iC2", 24, 8, "co[C3,C4,C2,2,2]", {6, 2, 
              2}, {"ba" -> "a5bc"}}, {"D4C3", 24, 10, "co[D4,C3]", {4, 2, 
              3}, {"ba" -> "a3b"}}, {"Q8C3", 24, 11, "co[Q8,C3]", {2, 2, 2, 
              3}, \({"aa" -> "c", "bb" -> "c", 
"ba" -> "abc"}\)}, {"S4", 24, 12, "sgroup[4]", {3, 2, 2, 
              2}, \({"ba" -> "abc", "ca" -> "ab", 
"da" -> "a2d", "db" -> "cd", 
"dc" -> "bd"}\)}, {"A4C2", 24, 13, "co[A4a,C2]", {3, 2, 2, 
              2}, \({"ba" -> "abc", "ca" -> "ab"}\)}, {"D6C2", 24, 14, "co[ca[12,11],C2]", {6, 2, 
              2}, {"ba" -> "a5b"}}, {"D13", 26, 1, "ca[26,25]", {13, 
              2}, {"ba" -> "a12b"}}, {"P27", 27, 3, "ca[]", {3, 3, 3}, {"ba" -> "abc"}}, {"g2704", 27, 4, "ca[]", {9, 3}, {"ba" -> "a4b"}}, {"Q28", 28, 1, "ca[28,13]", {7, 
              4}, {"ba" -> "a6b"}}, {"D14", 28, 3, "ca[28,27]", {14, 
              2}, {"ba" -> "a13b"}}})

4. Moufang Loops, Conserved "sizes" and "shapes".

Summary. Moufang loops have invertible multiplication, so vector division and multiplication are one operation; associative (and a few non-associative) Moufang loops "conserve" functions ("sizes") related to the determinant of the symbolic table. Most loops lack this Frobenius property. The division and conservation properties are fundamental requirements for mathematical physics. Sizes are generalized norms for which the triangle inequality becomes an equality. Non-linear sizes are symmetric polynomials; compact expression have been found for many, often as sums of powers or products of simpler polynomials that I call "fragments".

4.1. Moufang Loops, Division.

Moufang loops are "loops with units & division", i.e. quasigroup multiplication tables with the indices in order in the first row and column (left & right units) and with zx.yz=(z.xy)z for all xyz. (There are other, related, Moufang properties. [2, p93]) They are groups if the multiplication is associative. Every finite group (and every Octonion) can be expressed as a Moufang loop index table (often in many isomorphic forms). A specific isomorph or "protoloop" (chosen because it demonstrates the structure of the loop and its similarities with other loops) is defined for every loop in my database. It is a convenient definition of the loop as an index table; shape & toPol (etc.) definitions employ it.

Example 15 uses makeProtoloop["Qr"] to create a copy (called qr here) of the Quaternion algebra signed multiplication table. This is shown both as a signed table and in the usual form with the univectors i & j (i.e. the Cayley-Dickson generators [3, p285] that are fourth roots of unity). Tests then shows that the table is non-abelian but has the associative and extended moufangQ properties. (The strict MoufangQ test fails because at least one product changes sign.)

Example 15. Quaternion algebra tables & properties.

qr = 
      makeProtoloop["Qr"]; {"Quaternion Index Table & Univector \
multiplication table", qr // tf, 
      gmap[qr, {1, i, j, i j}] // tf, "\nAbelian    ", 
      abelianQ[qr], "\nAssociative", 
      associativeQ[qr], "\nmoufang    ", 
      moufangQ[qr], "\nMoufang    " , MoufangQ[qr]}

?MoufangQ

The Moufang division property means that multiplicative inverses exist for vectors (and not just for table elements). The unit of a loop multiplication is the vec {1,0,...}, and so the inverse of a vec such as {a,b,...} can be found (for small loops) by solving for the vec {p,q,...} that gives the unit as a product, {p,q,...}{a,b,...} = {1,0,...}. This defines a left inverse iff the loop is conservative. (A right inverse could be found similarly; an abelian table gives a single inverse.)  The table determinant is a denominator for each element of the inverse, as Cramer's method has been used in its calculation. Each numerator is a derivation, so division and differentiation are linked.
	Example 16 finds left inverses for C4, Qr, CL2, P4, Dav [7], & C9j & C9J (which are both "𝕁-signed"), finding the expressions for p,q, etc. The C4 and Dav inverses are shown to split into partial fractions, because their determinants factorise.

Example 16. Solving for Multiplicative Inverses.

(*16a C4*)
C4inv=Solve[hoopTimes[{p,q,r,s},{a,b,c,d},"C4"]=={1,0,0,0},{p,q,r,s}]
Apart[{p,q,r,s}/.C4inv]

(*16b Quaternion*)
Solve[hoopTimes[{p,q,r,s},{a,b,c,d},"Qr"]=={1,0,0,0},{p,q,r,s}]

(*16c Clifford(2)*)
Solve[hoopTimes[{p,q,r,s},{a,b,c,d},"CL2"]=={1,0,0,0},{p,q,r,s}]

(*16d Pauli-σ*)
Solve[hoopTimes[{p,q,r,s},{a,b,c,d},"P4"]=={1,0,0,0},{p,q,r,s}]

(*16e Davenport Algebra*)
Davinv=Solve[hoopTimes[{p,q,r,s},{a,b,c,d},"Dav"]=={1,0,0,0},{p,q,r,s}]
Apart[{p,q,r,s}/.Davinv]

(*16f C9j*)
C9jinv=Solve[(hoopTimes[{p,q,r},{a,b,c},"C9j"]/.𝕁^3 -> 1)=={1,0,0},{p,q,r}]/.𝕁^3 -> 1

(*16g C9J*)
C9Jinv=Solve[(hoopTimes[{p,q,r},{a,b,c},"C9J"]/.𝕁^3 -> 1)=={1,0,0},{p,q,r}]/.𝕁^3 -> 1

The procedure hoopInverse calculates the inverse of a vec in a conservative algebra. It is discussed in detail in Section 6.3, but is demonstrated in Example 17. The Qr inverse Ai of an arbitrary vec A={4.,1.,2.,3} is calculated, and Ai·A is shown to be {1,0,0,0}. Then A is multiplied by B={5., 2., 1., 7.}, giving AB= {-5., 24., 13., 40.}. Finally, AB is divided by A (by pre-multiplying by Ai), and B is recovered.

Example 17. Multiplicative Inverse, Division.

{id["Qr"];"A is",A={4.,1.,2.,3},"\nQuaternion Inverse of A is",Ai=hoopInverse[A],"\nAi·A is the unit",Chop[hoopTimes[Ai,A]],"\nB is            ",B={5.,2.,1.,7.},"\nAB is           ",AB=hoopTimes[A,B],"\nAi·AB recovers B",hoopTimes[Ai,AB]}

4.2. Size Conservation.

If the multiplication table is a loop, the determinant has at least two factors. (It is a quasigroup with each element occuring once in each row and column. Add all the other rows to the first row; the sum of elements is then seen to be a determinant factor.) This is not true for signed tables; some factors (including the sum of the elements) are destroyed when a Moufang loop is folded to a signed table.
	Moufang Loop inverses split into partial fractions with their factors as denominators (Example 16a). A few small signed tables have a single factor or one repeated factor (Examples 16 b-d); most have a number of different factors (Example 16 e). I call the symbolic protoloop factors "sizes", and the list of sizes the "shape" of a loop or hoop. Section 4.3 goes into more detail of sizes & shapes. The complex-conjugate factor-pairs of quadratic factors are not conserved.
	I first inverted signed tables involving i or 𝕁 (Example 16f) in September 2003 and found that sizes are actually "generalized conjugates" of the signed determinant factors. This is related to Frobenius's discovery (Section 4.4) that it is the determinant of the inverted associative table that is conserved. As the factors are identical where negation is the only sign, many sizes can be found from the direct table.
	Conservative hoops conserve all their "sizes" on multiplication - they are defined by that property. They also (trivially) conserve linear sizes on addition and splitting. Example 18 demonstrates conservation for two 6-element groups by adding and multiplying two symbolic vecs. The linear size of the sum is subtracted from the linear sizes of the summands, giving {0,0} to show that it is conserved on addition. Then all the sizes of the product are shown to match the product of the multiplicand sizes.

Example 18. Conservation of C3C2 & D3 Sizes

a4 =. ;A = {a1, a2, a3, a4, a5, a6};B = {b1, b2, b3, b4, b5, b6};{"Set Target Loop to",id["C3C2"],C3C2 // tf,"\nSet  A =",A = {a1, a2, a3, a4, a5, a6},"\nSet  B =",B = {b1, b2, b3, b4, b5, b6},"\nThen AB=",AB = hoopTimes[A, B],"\nShape of A is  ",sa = shape[A],"\nShape of B is  ",sb = shape[B],"\nShape of A+B is ",sapb = Simplify[shape[A + B]],"\n'+' conserves linear factors",sapb = Simplify[Take[sa + sb - sapb, 2]],"\nShape of AB is ",sab = Simplify[shape[AB]],"\nProduct of shapes A & B = shape of product AB",Simplify[sa sb == sab],
"\n\nChange Target Loop to",id["D3"],D3 // tf,"\nAB=",AB = hoopTimes[A, B],"\nShape of A is  ",sa = shape[A],"\nShape of B is  ",sb = shape[B],"\nShape of A+B is ",sapb = Simplify[shape[A + B]],"\n'+' conserves linear factors",sapb = Simplify[Take[sa + sb - sapb, 2]],"\nShape of AB is ",sab = Simplify[shape[AB]],"\nProduct of shapes A & B = shape of product AB",Simplify[sa sb == sab]}

Sizes are a generalization of metrics and norms. The triangle inequality becomes exact, but sizes may be negative for non-abelian hoops, and may be linear, quadratic, cubic (rare), quartic etc. A4 is the smallest group with a conserved volume (cubic size); quartic sizes are very common.

4.3. Algebras, Determinant Factors, "sizes" & "shapes".

Whilst general algebras allow very general entries (structure constants) in each cell of the Cayley multiplication table, many algebras of physical significance have single entries in each cell. The most relevant of these are related to Moufang Loops, and in particular to those tables that have "Frobenius-conservation" for functions related to the factors of the multiplication table determinant. (I conjectured this to be a consequence of the Moufang properties until finding many exceptions amongst the non-associative Moufang loops in [8].) This is discussed and demonstrated in the next section, after introducing the determinant and its factors.

The database is restricted to tables with single elements in each cell; the elements are indices (or signed indices), and so vecs can be mapped (using gmap) onto the table by putting the signed i'th component of the vec wherever the index "i" appears in the protoloop. Hoops are algebras with very simple structure constants.

Loop determinants can be calculated after mapping symbolic or numeric vec elements onto the index table. Frobenius [4] showed that the group property, associativity, was a sufficient condition for the determinant of a product to be the product of the multiplicand determinants (up to a minus sign). Octonions, a few other nonassociative Moufang loops, and many signed tables share this property with groups. I use it as the defining property for hoop algebras.

Conservative loops are found to conserve (up to a sign) the real factors of the determinant on multiplication - complex linear factors obtained by splitting quadratic factors into complex-conjugate pairs are not generally conserved. Real linear factors are trivially conserved on addition. I call each determinant factor a "size", and the list of sizes the "shape" of a vec in a particular algebra. Each size is a group "ideal". It is also a symmetric polynomial.

Frobenius worked with the inverse of the group table, whilst I usually work with the table itself. This is significant for signed tables, where the conserved properties appear to be "plex-conjugates" of the determinant factors of the non-inverted table (Section 6.3). If the table is unsigned, or only involves "-", the group table and the inverse table have the same factors, and sizes have been found from the group table determinant; conjugation does not alter them. With signed tables involving i or 𝕁, etc, ((𝕁^3)=1, see Section 5.1) the group table factors have to be modified in a way that is not yet fully understood; several such signed tables have been found to conserve their modified shapes. Appendix D goes into more detail.

As computer-mathematics systems such as Mathematica are needed in all but the smallest cases, GroupLoopHoop.nb provides procedures to factorize table determinants, and to find compact expressions for these factors. Mathematica can only factorise full symbolic tables up to 11×11 on my PC, and a number of techniques have been developed for larger tables (Appendix D). The shapes of many small loops have been found and are included in the database; the largest are for 32-element loops.

Many non-linear sizes can be expressed in compact forms as the sums of smaller polynomials (which I call "fragments"). These are often sums of squares.  Some progress (Appendix D2) has been made with the automatic calculation of these compact forms by the heuristic procedure frag.
(Technical note. Negation is undefined for loops, but "-" always occurs in determinants as the "symmetric differences" of numbers. Squaring a symmetric difference gives a positive result; conservation "up to a sign" copes with negation in linear terms.)

4.4. Loop Determinant Factor Conservation, Hoops.

Example 19 multiplies two symbolic 4-vecs A & B using Qr as the multiplication rule; this sets glo (the "target" loop) to Qr so that it can be omitted from later instructions. (hoopShape["Qr"]  could be used to set the target loop.) The shape (the list of factors of the determinant) is available in the database, and so the shapes of A, B, & AB can be found. It is shown that the product of the sizes of A & B equals the sizes of the product AB. This is "size conservation on multiplication", the defining property for a hoop algebra.

Example 19. Conservation of sizes.

{"Symbolic shape for",a4 =. ; qr = id["Qr"],sh["Qr"],"\nThe table is stored as glo=",glo // tf,"\nA=",A = {a1, a2, a3, a4},"B=",B = {b1, b2, b3, b4},"\nAB=",AB = hoopTimes[A, B, qr],"\nShape of A is",sa = shape[A],"\nShape of B is",sb = shape[B],"\nShape of AB is",sab = shape[AB],"\nProduct of shapes of A & B equals shape of AB", Simplify[sa sb  == sab]}

Whilst Frobenius showed that all groups conserve their determinants, this property is also possessed by the larger class that I call "hoops" (because they are shape-conserving loops or rings). Octonions [3, pp97,303] and a few other non-associative Moufang Loops are included; they (and their direct compositions with abelian groups) appear to be the only "alternative" (square-associative, xx.y=x.xy but xy.z≠x.yz) tables that are conservative. The database contains many conservative tables. Most loops (even if they have a unit) are non-conservative but only a few such (identified by mnemonics ending in n) are included in the database. The table C6n is tested in Example 20; it also has a shape, with two linear and two quadratic sizes, in the databank. Simplifying the product of the shapes minus the shape of the product gives {0,0, two long expressions}, showing that the last two sizes are NOT conserved. C6n is not a division algebra; the result of Ai= hoopInverse[ A,"C6n"] is NOT an inverse; neither is the solution to Ai·A={1,0,0,0,0,0}.

Example 20. Non-conservation of sizes with C6n.

{"Target Loop is",tst=C6n;id[tst],tst//tf,"\nMoufang Property",MoufangQ[tst],A={a1,a2,a3,a4,a5,a6};B={b1,b2,b3,b4,b5,b6};"\nAB=",AB=hoopTimes[A,B],sa=shape[A];sb=shape[B];"\nShape[AB]-Shape[A]*Shape[B]",sab=Simplify[shape[AB]-sa sb]}

The database contains the direct compositions of Oct with C2, C3, C4, K, C5, & Oct (all conservative), the same indirect compositions and the composition with C5n (none conservative). Several alternative tables are also included apart from these; apart from Q8M2, Q8pC2M, P16M, C8pC2M and C4iC4M they lack the Frobenius property.

Noether's laws show that the particles and forces of physics are related to symmetries and conserved properties; and Stephen Adler argues that division algebras are needed to describe physics. Consequently these algebras should be relevant to particle physics.

5. Generalized Signs.

Summary. Roots of unity are generalized signs, which I write as (𝕤^j) : (𝕤^r)=1; I propose a set of double struck characters for specific generalized signs. "-" is one of the square roots, and "i" is one of the fourth roots, of unity. Many algebras employ several different square roots, cube roots, etc. Algebraic expressions involving "-" & "i" are special cases of more general expressions involving generalized signs; e.g (e^(𝕤 θ)) defines multi-phase sinusoids with r phases ((e^(i θ)) defines a 4-phase sinusoid that folds to Cos[θ]+i Sin[θ]); ordinary negation is an equivalence relation on indexed pairs of numbers and generalizes to rotations of indexed sets.

5.1. Roots of Unity provide Generalized Signs.

The "ordinary signs" are "+" & "-"; the latter is a square root of +1 (or "unity"). The imaginary numbers "i" & "-i" also behave as signs; they are fourth roots of +1. As many algebras have more than one entity that squares to unity, "-" is ambiguous, and so it is misleading to call i "the" square root of -1. 
	Generalized signs are distinct primitive roots of unity. There are "terplex" algebras using 𝕁, with (𝕁^3)=1; "Study numbers" have two entities that square to unity; Quaternions have three entities (i, j, ij in Example 15) that are fourth roots of unity.
	Example 21 shows my proposed standard nomenclature for generalised signs, with (𝕤^j) : (𝕤^𝕣)->1 as a general case, the  𝕣'th roots of unity. Example 21 also shows the substitution rules that make Mathematica handle 𝕕, 𝕘, 𝕙, 𝕀, 𝕁, 𝕜, 𝕝, 𝕞, 𝕟, 𝕠, 𝕤, 𝕡 & 𝕐 as generalized signs akin to i. Various properties have to be specified; these are shown for 𝕁.
	Whilst roots of unity are commonly called "cyclotomic roots of unity", because they can be projected onto the unit circle in the complex plane, as generalized signs they are independent orthogonal mathematical entities. Expressing them as complex numbers puts them on a Procrustean bed and conceals their orthogonality. Generalised primitive roots of unitysigns (and their powers, until reaching unity) act as orthogonal directions, and several distinct 𝕣'th roots occur in many algebras - impossible for "cyclotomic roots of unity". In general, these signs are not converted to complex cyclotomic numbers; the properties shown in Example 21 are sufficient to define them. Section 5.5 is an exception; it is convenient to use the Mathematica procedures for the standard Cos, Sin, etc functions there.

Example 21. Generalized Signs.

{"Proposed nomenclature for Generalized Signs ",unitSigns,"\nVarious properties are imposed to ensure correct behaviour e.g.:-\nNumber 𝕁 =",NumberQ[𝕁],"\nSign[𝕁] =",Sign[𝕁],"\nAbs[𝕁] =",Abs[𝕁],"\nAbs[-𝕁] =",Abs[-𝕁],"\nPositive 𝕁 =",Positive[𝕁],"\nPositive -𝕁 =",Positive[-𝕁] ,"\nRe[𝕁] =",Re[𝕁],"\nRe[a_𝕁] =",Re[a_ 𝕁],"\nImaginary[𝕁] =",Im[𝕁],"\nImaginary[a_𝕁] =",Im[a_ 𝕁]}

The following sections show how generalized signs are used as (1) group relators, (2) in 2×2 (σ), 3×3 (τ) and 4×4 (γ) unitary monomial matrices, to generate groups with second negation ((𝕜^2)=+1), ternary ((𝕁^3)=+1), and other symmetries, (3) as signs in tables such as C9J, and (4) to define generalized "polyhelix" sinusoids.

5.2. Generalized Signs as group relators.

Example 8 (Section 3.2.5) demonstrated the use of generalized signs to create the group A4 via the ge procedure. This required one cube root and two distinct square roots of unity (called "a", "b" & "c" rather than 𝕁, 𝕜 & 𝕝 because ge needs lex ordering of relators). Prime groups have a single (prime root) relator. Every group probably has relators whose powers multiply to the group length; e.g. g3251 needs 5 relators that are different square roots of unity, (2^5)=32. The database includes a few groups for which I have not found such relators.

Most relator rules were discovered empirically, retaining the shortest wherever more than one gave a particular group. I later learned that most could have been found by using the GAP instruction gap> RelatorsOfFpGroup( Image( IsomorphismFpGroup( SmallGroup( mm,nn)))). See Section 13.2.

5.3. Generalized Signs in Unitary Monomial Matrices.

Example 22  shows two "unitary monomial matrices" employing the generalized signs 𝕁  & 𝕘. The determinants of these matrices are 1 (unitary) and they have exactly one non-zero element in each row and column (monomial); together they generate the group C21.

Example 22. Generalized Signs in Unitary Monomial Matrices.

{"Two 2×2 unitary matrices using generalized signs ",u2[[10]] // tf,u2[[21]] // tf,"\nThey generate the isomorph of ",mm =. ; 
        id[test = mg[{21, 10}, u2]],"which has matrix elements ",matel,"\nand dimensions ",Dimensions[test]}

5.4. Generalized Signs in Signed Tables.

All groups are hoops, because they can be considered to be folded from the composition of the group with C2 or C4, and this allows them to be algebras over the real and complex fields, as well as being loop multiplication tables for sets of primal coefficients. If they have the appropriate structure, as in Example 10, they can be folded to versions with some negated indices or, as in P4, some complex indices. Others fold to 𝕁-signed algebras, such as those in Example 23. This uses the ts procedure (tosignedTable) which is sufficiently general to handle signs i & 𝕁 and to fold suitable loops to signed tables.

Example 23. Generalized Sign 𝕁 in Signed Tables.

{"The C9 group isomorph", 
      tstJ = {{1, 2, 3, 4, 5, 6, 7, 8, 9}, {2, 9, 1, 5, 3, 4, 8, 6, 7}, {3, 
            1, 5, 6, 4, 8, 9, 7, 2}, {4, 5, 6, 7, 8, 9, 1, 2, 3}, {5, 3, 4, 
            8, 6, 7, 2, 9, 1}, {6, 4, 8, 9, 7, 2, 3, 1, 5}, {7, 8, 9, 1, 2, 
            3, 4, 5, 6}, {8, 6, 7, 2, 9, 1, 5, 3, 4}, {9, 7, 2, 3, 1, 5, 6, 
            4, 8}}; 
tstJ // 
        tf, "𝕁-folds to", id[tstj = ts[tstJ, 3]], 
      tstj // tf, "The C3C3 group isomorph", 
      tstJJ = {{1, 2, 3, 4, 5, 6, 7, 8, 9}, {2, 9, 4, 5, 3, 7, 8, 6, 1}, {3, 
            4, 8, 6, 7, 2, 9, 1, 5}, {4, 5, 6, 7, 8, 9, 1, 2, 3}, {5, 3, 7, 
            8, 6, 1, 2, 9, 4}, {6, 7, 2, 9, 1, 5, 3, 4, 8}, {7, 8, 9, 1, 2, 
            3, 4, 5, 6}, {8, 6, 1, 2, 9, 4, 5, 3, 7}, {9, 1, 5, 3, 4, 8, 6, 
            7, 2}}; 
tstJJ // 
        tf, "𝕁-folds to", id[tstjj = ts[tstJJ, 3]], 
      tstjj // tf}

5.5. Exponent of Generalised Signs, PolyHelix Identity.

Extended signs, 𝕤 : (𝕤^r)=1, generalize the sinusoids Cos[x] = Re[(e^(i x))], Sin[x] = Im[(e^(i x))] to multi-phase sinusoids genCos[x,m] = Re[(Subscript[e, m]^(𝕤 x))] where (Subscript[e, m]) is a (normalizing) modification of e that depends on m, the number of phases. The normalising element is easily shown to be Re[(Subscript[e, m]^(Im[𝕤]))] = Re[(e^Im)[(((-1))^(2/m))]], where the second expression is the Mathematica implementation of the first. (This gives (Subscript[e, 3])=(Subscript[e, 6])=(e^((Sqrt[3])/2))≃2.3774, (Subscript[e, 12])=(Sqrt[e])≃1.6487). The generation of these sinusoids as solutions to banded differential equations is described in Appendix E.
	Multi-phase sinusoids have an exponential series formulation that simplifies, when m = 4, to half the standard Cos and Sin series, with half the terms becoming zero. This is traditionally folded and mis-interpreted as two asymmetrical phases, {Cos[x], Sin[x]} instead of four symmetrical phases (e^(i x)) = {Cos[x], Sin[x], -Cos[x], -Sin[x]}/2. 
	It is convenient to include a phase parameter "j" in the generalised sinusoid procedures genCos[x,m,j] & genSin[x,m,j], and to normalize the amplitude to 1.  I also include phases between +Cosh[x] and -Cosh[x] if m=0, and between Cosh[x] and Sinh[x] if m=2.

Example  24.  genCos, genSin.

?genCos

?genSin

Examples 25 & 26 demonstrate genCos & genSin by plotting three phases of the 3-phase & 12-phase sinusoids over their periods 2π/Sin[2π/3] = (Sqrt[3])π = 7.2552 & 4π=12.5664.

Example  25.  3-phase Sinusoids.

Plot[{genCos[x, 3], genCos[x, 3, 1], genCos[x, 3, 2]}, {x, 0, 
          2  π/Sin[2  π/3]}, 
        PlotLabel -> "Fig.4. genCos. Phases 0,1,2 for m = 3"];

Example  26. 12-phase Half-Spin Sinusoids.

Plot[{genSin[x, 12], genSin[x, 12, 1], genSin[x, 12, 2]}, {x, 0, 
          2  π/Sin[2  π/12]}, 
        PlotLabel -> "Fig.5. genSin. Phases 0,1,2 for m = 12"];

Note that neither the phasality m nor the phase j need be an integer. Also genCos[x,m,m/4]≡genSin[x,m], so one of the series is redundant. Both are included for compatibility with normal mathematics, with genSin as the antisymmetric sinusoid. genSin is preferable to genCos in some situations such as Direction Sines, as genSin[x,m,0]~x for small x and the value tends to zero with x. When x = 0, terms involving genSin[x,m,0] drop out of expressions, making them compatible with renormalization.

5.6. Generalized Signs & Generalized negation.

Ordinary negation "-" is a first member of the "generalized negations". It corresponds to a binary equivalence relation, with (Subscript[r, i])~{(Subscript[a, i]),(Subscript[a, i + m/2])}, -(Subscript[r, i])~{(Subscript[a, i + m/2]),(Subscript[a, i])}, 0~{(Subscript[a, i]),(Subscript[a, i])} in a group with m elements. This is the rotation of the elements by m/2, either to the left or the right. It fails for odd m groups and for some even-m groups such as D3 that lack a C2 symmetry, but it can be extended to rotation by factors of m. Extra negations are introduced in this way. Thus C3 has two (left and right) negations (Overscript[A, ←]), (Overscript[A, →]). The real (C2) axiom that A+ (Overscript[A, ↔])~0 is {a,b}+{b,a} = {a+b,a+b} ∼ 0. In the C3 case this becomes A+(Overscript[A, ←])+(Overscript[A, →]) ~ 0, {a,b,c} + {b,c,a} + {c,a,b} = {a+b+c, a+b+c, a+b+c} ∼ 0. As {a+b+...+m} is always a factor of a quasigroup determinant, r-fold negation corresponds to equivalencing that factor to zero. Renormalization makes it (and usually some other factors) explicitly zero. Subtraction is "additive elimination", adding one or more terms to give a result that equivalences to zero.

The standard development of numbers from sets [8, p46] is defective, prematurely introducing ordinary negation as an equivalence relation (ER) on a two-element indexed set; {(Subscript[a, 1]), (Subscript[a, 2])} is arbitrarily given the "+" sign and {(Subscript[a, 2]), (Subscript[a, 1])} the "-" sign. Negation is not needed in the development of unsigned rational and continuous numbers from set theory and a continuum axiom. The unsigned Rationals, \(TraditionalForm\`\(ℚ\^+\)\), are an ER on a two-element ordered set of natural numbers; a continuity axiom extends them to the unsigned continuous numbers (the half-line) that I call "Primal" numbers. The development and multiplication of indexed sets of primal coefficients then leads to loops, and to generalized negation as ER's on rotated multi-element indexed sets. Ordinary negation then arises in many, but not all, algebras.
	Some physical entities appear to be primal - they can be expressed using non-negative coefficients. There is no evidence for negative time, so it is always positive, i.e. Time is a Direction. Other entities, such as derivatives, are Real, being ER's on pairs of primal coefficients. Accelerations are ambiguous; are they ER's on three coefficients (terplex numbers), or on two derivatives (Study numbers)? Complex numbers are ER's on quads of primal numbers, Quaternions are ER's on sets of eight primal numbers.

6. Hoop Algebras.

Summary. Conservative m×m loops become m/r×m/r "Hoop Algebras" after imposing r-fold negation to provide generalized signs, addition & generalized subtraction. Polar & Hyperbolic dual forms exist for some hoops, and provide generalized powers, roots, and rotations. When sizes approach zero, multiplication & division "renormalize" by working in a constrained sub-algebra and splitting-off  "remainders" of appropriate shape. Multiplication or division by a vec with some zero sizes "projects" the result into a constrained sub-algebra and "ejects" one or two remainder(s).

6.1. "Hoops" - Generalized Division Algebras.

I coined the name "Hoops" for all algebras obtained by folding conservative loops because they are rings or loops that conserve their shape, and fit between groups and loops. Many of the algebras relevant to mathematical physics are hoops or specializations of particular hoops. This is discussed in Section 7, but complex algebra is treated  here.

Example 27 shows the relationship of C4 to ℂ, by mapping {"+1", "i", "-1", "-i"} onto the C4 index table and then isolating the quarter-table, which can be seen to be the complex algebra multiplication table; this is a C2 fold. The 4-vecs {a,b,-a,-b} & {d,e,-d,-e} (which fold to {2a,2b} & {2d,2e}) are then multiplied; the product matches the complex product of (2a+2ib)*(2d+2ie).

Example 27. The C4 group "equivalences" to ℂ.

{"Full C4 Table = ",c4 = 
              gmap[C4, {"+1", "\[ImaginaryI]", "-1", "-\
\[ImaginaryI]"}]," Signed quarter table is ℂ",c4c = Take[Transpose[Take[c4, 2]], 2]}//TraditionalForm

{"C4 product {a,b,-a,-b}*{d,e,-d,-e}= ",abef = 
          hoopTimes[{a, b, -a, -b}, {e, f, -e, -f}, C4],
"\nThis equivalences to ",abef[[1]] - abef[[3]],abef[[2]] - abef[[4]],
"\n &  to (a+I b)*(e+I f) =",ComplexExpand[(2  a + 2  I b) (2  e + 
                2  I f)],"\nC4 determinant Factors",frag[
          Factor[Det[{{a, b, c, d}, {b, c, d, a}, {c, d, a, b}, {d, a, b, 
                  c}}]]],"\nC4c determinant       ",Factor[Det[{{a, b}, {b, -a}}]]}

6.2. Polar and Hyperbolic "Duals", Powers & Roots.

The polyhelix identity (Appendix E) ensures that some hoop algebras have polar "duals" with conserved radii and offsets, together with angles that are added (in abelian algebras) when the vecs are multiplied. The shapes of these hoops include conserved signed sums of squares. If a size can be expressed as (x^2) + (y^2) = (r^2), x, y and r can be interpreted as sides of a right angled triangle with θ=Arctan[x,y]; if  (x^2) + (y^2) + (z^2) = (r^2); θ=ArcTan[2x-y-z,(Sqrt[3])(z-y)]. Polar duals are generalizations of the Cartesian {x,y} ↔ Polar {r,θ} duality of the complex plane. hoopPower uses the additivity of angles in duals to calculate vec powers and roots. Hoops are not restricted to infinitesimal rotations.
 	Example 28 demonstrates the sinusoidal dual for the Terplex hoop (which uses the C3 group as the multiplication table and conserves ((((a - b))^2)+ (((b - c))^2)+ (((c - a))^2))/2 ). The 3-vec A has been chosen to have a simple polar form, so that the relation between the polar form of the cube root r3A and that of A can be seen. The original value is recovered on cubing r3A. Note that roots of powers will recover a "rotated" version of the original vec if the angle of the power exceeds 2π. The result will have the same sizes as the original vec, but the angle may be different. Raising a root to the corresponding power does not have this problem as 2π is not exceeded.

6.2.1 Terplex Powers and Roots.

Example 28. "Terplex" vecs have polar duals that provide powers and roots.

\({id[C3]; "Terplex A = ", A = {1. , 5, 5}, "
Polar form   ", 
      toPolar[A, "C3"], "
Cube Root r3A", 
      r3A = hoopPower[A, 1/3], "
Polar form   ", 
      toPolar[r3A], \*""\n(11^(1/3)),(16^(1/3)),π/3"", {\@11. \%3, \@16. \%3, π/3. }, \*""\n(r3A^3)=A       "", 
      hoopPower[r3A, 3]}\)

Whilst A has components from the real field in the above examples, hoop algebras are valid over the complex field (because any G can be considered to be folded from GC4). This is demonstrated in the next example; hyperbolic functions are inherently complex, even for real arguments.

6.2.2 Hypolar Powers and Roots.

When a size involves the difference of two squares, or (as in C4 & K) two linear sizes can combine to conserve a difference of two squares, a hyperbolic dual polar ("hypolar") form exists. This is based on (Cosh^2) - (Sinh^2) = 1, and I write (u^2)=(x^2)-(y^2); here x & y are coordinates on the "hyperbolic plane" rather than the complex plane and u is (by analogy with the bones of the forearm) an "ulna". These are "Study numbers", the hyperbolic analogue of complex numbers. The arcTanh[adj,opp] function (defined in section 2.8.2 and discussed in Appendix C) is an extension of ArcTanh that gives results for complex or real arguments by taking the quadrant of the real adj,opp components into account. The "hyperangle" is a complex number that becomes infinite whenever adj = ± opp, i.e. on the 45° lines in the "hypercomplex plane".  tohyVec recovers the signed adjacent-opposite components, unlike Tanh, which only provides their ratio. The database contains nine hypolar examples. The hypolar form may have both hypolar and polar components as in C4. Example 29 shows the same vecs A={3.-2i, 5., -2, 2.+i} & B={5.+i, 3.-2i, -2. -3i, 4.} being multiplied by both C4 & the Klein group K, which has two hypolar angles (the first matching that of C4). The hypolar coordinates are "synthetic" in both examples, as they are obtained from pairs of linear sizes.

Example 29. Hypolar sizes multiply & angles add on multiplication.

\(\(\({"Target group is", 
      id[C4], "with hypolar form", 
tohyPolar[{a, b, c, 
          d}]}\)\(
\)
    \)\)
{A = {3.  - 2  I, 5. , -2, 2.  + I}, 
        hA = tohyPolar[A, "C4"], Chop[tohyVector[hA] - A], 
        B = {5.  + I, 
            3.  - 2  I, -2.  - 3  I, 4. }, 
        hB = tohyPolar[B], AB = hoopTimes[A, B], hAB = tohyPolar[AB], 
        Chop[hA*hB - hAB], Chop[hA + hB - hAB]} // TraditionalForm
{"Change Target group to", id[K]}
{A, hA = tohyPolar[A, "K"], Chop[tohyVector[hA] - A], B, 
        hB = tohyPolar[B], AB = hoopTimes[A, B], hAB = tohyPolar[AB], 
        Chop[hA*hB - hAB], Chop[hA + hB - hAB]} // 
      TraditionalForm

(({{Function, a or (u^2), .b or hyperangle, c or (v^2), .d or hyperangle}, {vectorA, 3 - 2 I, 5, -2, 2.  + I}, {hA = hypolarC4[A], -51 - 
                18 I, 0.0919 + 
                1.2768  I, 29 - 
                26 I, 0.5306 + 
                0.0257 I}, {A - hyvectorC4[hA], 0, 0, 0, 0}, {vector B, 5 + I, 3.  - 
                2 I, -2 - 3 I, 4.}, {hB = hypolarC4[B], -40 + 
                16 I, 0.4952 - 
                1.7610 I, 30 + 
                60 I, -0.2318 - 
                0.1469 I}, {vector AB, 49 - 
                2 I, 21 . -15 I, 1 - 
                13 I, 5.  - 
                12.  I}, {hypolarC4[AB], 2328 - 
                96 I, 0.5872 - 
                0.4842 I, 2430 + 
                960 I, 0.2988 - 
                0.1213 I}, {Both sizes multiply, 0, 1.7068 + 0.9547 I, 0, -0.4180 + 0.0374 I}, {Both angles add, -2419 + 94 I, 0, -2371 - 926 I, 0}}))

(({{Function, a or (u^2), .b or hyperangle, c or (v^2), .d or hyperangle}, {vectorA, 3 - 2  I, 5, -2, 2.  + I}, {hA = hypolarC4[A], -51 - 
                18  I,  .09193 + 
                1.2768  I, 13 - 
                14  I,  .67026 +  .0524  I}, {A - hyvectorC4[hA], 0, 0, 0, 0}, {vector B, 5 + I, 3.  - 
                2 I, -2 - 3 I, 4}, {hB = hypolarC4[B], -40 + 
                16 I, 0.49525 - 
                1.7610 I, 36 + 
                52 I, -0.22291 - 
                0.1609 I}, {vector AB, 44 - 
                7 I, 21.  - 
                15 I, 6 - 8 I, 5.  - 
                12 I}, {hypolarC4[AB], 2328 - 
                96 I, 0.58718 - 
                0.48425 I, 1196 + 
                172 I, 0.4412 - 0.1084 I}, {Both sizes multiply, 0, 1.7069 +  .9547 I, 0, - .5863 +  .0114  I}, {Both angles add, -2419 + 94 I, 0, -1147 - 134 I, 0}}))

6.2.3 Non-abelian Pseudo-powers and Roots induce rotations.

Until November 2005, I had found no non-abelian polar forms. Non-abelian hoops conserve repeated quadratic factors that are sums of more than three squares; each duplicated quadratic releases three degrees of freedom and an angle can only take up one. I then realized that both the quadratic size and two {r,θ} components were needed. Applying this to D3, ηη=((((a - c))^2) + (((c - e))^2) + (((e - a))^2))/2 and
κκ=\(\((\((a - c)\)\^2 + \((c - e)\)\^2 + \((e - a)\)\^2 - \((b - d)\)\^2 - \((d - f)\)\^2 - \((f - b)\)\^2)\)/2\) are supplied by toPolar. The two radii are then calculated by toVector as (Sqrt[κ])κ and (Sqrt[κκ - ηη]) i.e. \(TraditionalForm\`\@\(\((\((b - d)\)\^2 - \((d - f)\)\^2 - \((f - b)\)\^2)\)/2\)\). The corresponding angles are multiplied by exponents in hoopPower, and give results with correct sizes, so ((((A^(1/p))))^p)=A, but the radii are not conserved. Consequently these "powers" differ from repeated products, though they have the same sizes. I call them "pseudo-powers". The following examples show this for (A^(1/3)) and (A^2) in the D3 algebra. The same calculations in the C3C2 algebra show that abelian powers match repeated products - provided that angles do not exceed 2π.

Example 29A. D3 pseudo-powers induce rotations.

\(id["D3"]; {"A         ", 
      A = {1. , 3. , 0. , \(-1. \), \(-2. \), 1. }, "
shape  A  =", 
      shape[A], \*""\nr3A=\!\(A\^\(1/3\)\)    "", 
      r3A = hoopPower[A, 1/3], "
shape r3A =", 
      shape[r3A], \*""\n\!\(r3A\^3\)=A     "", 

      r3A3 = hoopPower[r3A, 3. ], \*""\nshape \!\(r3A\^3\)="", 
      shape[r3A3], "
r3A.r3A.r3A", 
      A3AA = hoopTimes[r3A, 
          hoopTimes[r3A, r3A]], \*""\nshape \!\(r3A\^3\)="", 
      shape[A3AA], \*""\n\!\(A\^2\)=        "", 

      hoopPower[A, 2. ], "
AA =       ", hoopTimes[A, A]}\)

Example 29B. C3C2 powers are not rotated unless angles exceed 2π.

\(id["C3C2"]; 
    Chop[{"A         ", 
        A = {1. , 3. , 0. , \(-1. \), \(-2. \), 1. }, "
shape  A  =", 
        shape[A], \*""\nr3A=\!\(A\^\(1/3\)\)    "", 
        r3A = hoopPower[A, 1/3], "
shape r3A =", 
        shape[r3A], \*""\n\!\(r3A\^3\)=A     "", 

        r3A3 = hoopPower[r3A, 3. ], \*""\nshape \!\(r3A\^3\)="", 
        shape[r3A3], "
r3A.r3A.r3A", 
        A3AA = hoopTimes[r3A, 
            hoopTimes[r3A, r3A]], \*""\nshape \!\(r3A\^3\)="", 
        shape[A3AA], \*""\n\!\(A\^2\)=        "", 

        hoopPower[A, 2. ], "
AA =       ", hoopTimes[A, A]}]\)

Quaternion pseudo-powers can be formulated in different ways; quaternions conserve the sum of four squares which can be paired off arbitrarily. The implementation uses ArcTan[a,b] and ArcTan[c,d]; ((((Q^r)))^(1/r)) reverts correctly (if no wrap-round occurs). The standard Mathematica package <<Quaternion`  implements procedures for Quaternion[{a,b,c,d}] objects, but rejects biquaternions (i.e.with complex coefficients). My QPower[{a,b,c,d},r] calculates powers and roots for both quaternions and biquaternions, matching Quaternion[{a,b,c,d}]^r in the first case.

Example 29c. Quaternion powers and pseudo-powers.

\({"A           =", {1 +  .2\ I,  .5 -  .1  I,  .3, \(- .4\)}, "
Cube Root r3A=", 
      r3A = QPower[
          A = {1 +  .2\ I,  .5 -  .1  I,  .3, \(- .4\)}, 1/3], "
cubes correctly", 
r3A3 = 
        Chop[QPower[r3A, 
            3]], 
id["Qr"]; "
Pseudo-Cube Root q3A=", g3A = 
        hoopPower[A, 1/3], "
cubes correctly", 
g3A3 = 
        Chop[hoopPower[g3A, 
            3]], "
A^2           =", 
A2 = 
        Chop[QPower[A, 2]], "
A A is the same", 

      AA = Chop[hoopTimes[A, A]], "
correct QPower roots  ", 

      rA2 = Chop[
          QPower[A2, 1/2]], "
hoopPower A^2", 
gA2 = 
        Chop[hoopPower[A, 
            2]], "
correct hoopPower roots", 
Chop[
        hoopPower[gA2, 1/2]]}\)

6.2.4 Powers and Repeated Products may differ for Signed Sizes.

A distinction must be drawn between powers and repeated products wherever sizes are signed or angles are large. Powers are continuous functions of the exponent, and so are their shapes. Powers revert correctly unless angles exceed 2π.
Repeated products must have sizes that respect the signs of the original sizes. If A has a negative size, AAA and AAAAA will have the same sign negative, but AA and AAAA will have it positive. (Sqrt[AA]) will not equal A. If A has a complex size, powers will only have the same sign when the exponent is divisible by 4, etc. The power (A^p) is a continuous function of p.
	This is demonstrated in the next example, where a C4 vector is chosen to have the second size negative. A={3.,4.,2.,4.5}, but (Sqrt[AA])={4.75,2.25,3.75,2.75}. The angle is small, so powers up the 6th reverts correctly; the 7th power gives a rotated 7th root (not shown).

Example 29a. C4 powers & multiplication with a negative size.

id["C4"]; {"If A = ", 
      A = {3. , 4. , 2. , 4.5}, "\nShape[A] =   ", 
      shape[A], "\n& toPolar[A]=", toPolar[A]}

{\(A19 = 
            Flatten[{\*""\!\(A\^1.99\)"", hoopPower[A, 1.99]}]\),\(Flatten[{\*""\!\(A\^2\)"", A20 = hoopPower[A, 2]}]\),\(Flatten[{\*""\!\(A\^2.01\)"", 
              A21 = hoopPower[A, 2.01]}]\),\(Flatten[rA20 = {\*""\!\(\@A\^2\)"", hoopPower[A20]}]\),Flatten[{"A.A",AA = hoopTimes[A, A]}],\(Flatten[{\*""\!\(\@\(A . A\)\)"", 
              rAA = hoopPower[AA]}]\),\(Flatten[{\*""\!\(\@\(A\^6\)\%6\)"", 
              r6A6 = hoopPower[hoopPower[A, 6], 1/6]}]\)}//tf

6.3. Generalized Multiplicative Inverse, Division .

Cramer's rule provides a generalized multiplicative inverse Ainv, such that Ainv·A = {1,0,...} (the unit). Wherever the multiplication is conservative, Ainv·AB = B, allowing division C/A = Ainv·C. This is implemented as hoopInverse. Ainv is the left inverse in non-abelian hoops. For small algebras, Ainv can be found by solving the equations {p,q,r,..} × {a,b,c,..} == {1,0,0,..} for the elements of the inverse, {p,q,r,..}. This was demonstrated in Example 16. It is shown for several more algebras in Examples 30 - 32. Each element of the inverse is a fraction, with a divisor (denominator) that is related to the table determinant. The denominators factorise in many cases, permitting the inverse elements to be expressed as partial fractions. This provides generalised "partial-fraction division", which is developed in Sections 6.4. & 6.5. The partial fraction numerators are derivations of the denominators, wrt. each variable. Division is closely related to differentiation and the orbits are solutions to the banded sets of differential equations described by the hoops.
	Example 30 gives the general "Terplex" or C3 inverse of {a,b,c}, and then shows that Ainv*AB=B. Terplex "fits between" Real and Complex algebra (which are folded from the C2 and C4 groups and are "algebras without real divisors of zero"). It differs from them in having partial-fraction divisors of zero.

Example 30. "Terplex" vecs have a multiplicative inverse & Partial-fraction Division.

{id[C3];"Terplex solution to {p,q,r}×{a,b,c}=={1,0,0} is",Solve[hoopTimes[{p,q,r},{a,b,c},C3]=={1,0,0},{p,q,r}],
"\nThe denominator is the determinant. It factorises into" ,fa[C3],"\nallowing the elements to split into partial fractions so that the Terplex inverse of {a,b,c} =",Apart[hoopInverse[{a,b,c}]],"\nNumeric Example:-",{"\nA    =",
A={1.,5,5},"\nB    =",B={4.,3,1},"\nAB   =",AB=hoopTimes[A,B],"\nAi =  ",Ainv=hoopInverse[A],
    "\nAi×AB ",hoopTimes[Ainv,AB]}//tf}

The database contains nine 3×3 signed tables that define conservative division algebras. The multiplicative inverses for four of these are found in Example 31. The shapes are conjugates of the determinants; in the first example conjugation has no effect as everything is real.

Example 31. Inverses for some other 3-element algebras.

{"C3C2c =",tst=cd[{3}];tst//tf,id[tst];"C3C2c solution to {p,q,r}×{a,b,c}]=={1,0,0} is",Solve[hoopTimes[{p,q,r},{a,b,c}]=={1,0,0},{p,q,r}],
"\nThe denominator is the determinant and factorises into\n (a-b+c)*(((a+b)^2+(b+c)^2+(c-a)^2)/2)",

"\n\nC4C3c =",tst=C4C3c;tst//tf,id[tst];
"\nC4C3c solution to {p,q,r}×{a,b,c}]=={1,0,0} is",
Solve[hoopTimes[{p,q,r},{a,b,c}]=={1,0,0},{p,q,r}],
"\nThe denominator is NOT the determinant, which is",
Expand[fa[tst]],"the denominator factorises into ((a-I b-I c)((a + I b)^2-(b-c)^2+(I c+a)^2)/2",

tst=C3i;id[tst];"\n\nC3i =",tst//tf,"\nC3i solution to {p,q,r}×{a,b,c}]=={1,0,0} 
is",Solve[hoopTimes[{p,q,r},{a,b,c}]=={1,0,0},{p,q,r}],    "\nThe denominator is NOT the determinant, which is",
Expand[fa[tst]],"the denominator factorises into (a-I b-c)((a+I b)^2+(I b-c)^2+(c+a)^2)/2",

tst=C9J;"\n\nC9J =",tst//tf,id[C9J];"\nC9J solution to {p,q,r}×{a,b,c}]=={1,0,0} is",
Solve[hoopTimes[{p,q,r},{a,b,c}]=={1,0,0},{p,q,r}]/.𝕁^3 -> 1,
"\nThe denominator does not factorize. It is NOT the determinant, which is" ,-fa[tst]/.𝕁^3 -> 1}

The database also contains eleven 4×4 signed tables. Example 32 calculates the inverses for four of them:-

Example 32. Some 4-element algebra inverses.

{"Qr =",tst=cd[{-1,-1}];tst//tf,id[tst];"Qr solution to {p,q,r,s}×{a,b,c,d}]=={1,0,0,0} is",Solve[hoopTimes[{p,q,r,s},{a,b,c,d}]=={1,0,0,0},{p,q,r,s}],"\nThe determinant is the denominator squared 
(a^2+b^2+c^2+d^2)^2",

"\n\nDav =",tst=cd[{-1,-1.}];tst//tf,id[tst];"\nDavenport Algebra solution to {p,q,r,s}×{a,b,c,d}]=={1,0,0,0} is",ss=Solve[hoopTimes[{p,q,r,s},{a,b,c,d}]=={1,0,0,0},{p,q,r,s}];d0=Factor[ss[[1,1,2,3,1]]][[1]];d1=frag[d0];e0=  Factor[ss[[1,1,2,3,1]]][[2]];e1=frag[e0];{p->Apart[ss[[1,1,2]]],"\n",q->Apart[ss[[1,2,2]]],"\n",r->Apart[ss[[1,3,2]]],"\n",s->Apart[ss[[1,4,2]]]}/.{d0->d1,e0->e1},"\nThe denominator is the determinant, with factors", {d1,e1},

"\n\nP4 =",tst=P4;tst//tf,id[tst];"\nP4 solution to {p,q,r,s}×{a,b,c,d}]=={1,0,0,0} is",Solve[hoopTimes[{p,q,r,s},{a,b,c,d}]=={1,0,0,0},{p,q,r,s}],
"\nThe determinant is the denominator squared ",Factor[Det[gmap[tst,alph]]],

"\n\nCL2 =",
tst=cd[{1,-1}];tst//tf,id[tst];"\nClifford(2) solution to {p,q,r,s}×{a,b,c,d}]=={1,0,0,0} is",Solve[hoopTimes[{p,q,r,s},{a,b,c,d}]=={1,0,0,0},{p,q,r,s}],
"\nThe negated determinant is the denominator squared ",-Factor[Det[gmap[tst,alph]]]}

The denominators are the "plex-conjugates" (Section 7) of the determinants; in many cases the only signs in an expression are "+" and "-" and the conjugate is identical to the determinant. Many inverses were found empirically. They led me to believe (until September 2003) that the determinant (or its repeated factor) was the denominator. The more general conjugate relationship was discovered after finding the inverses for C9J & C3C3J by the above technique.

The hoopInverse procedure calculates the inverse for vecs in any conservatve algebra, provided that the sizes are known or can be calculated. The individual partial-fractions are "derivates" (polynomials identical to the derivative but defined without recourse to infinitesimals) of the denominators, derived with respect to the variables taken in an order corresponding to the position of the (possibly signed) unit in the multiplication table. This is a consequence of Cramer's method. As another consequence, repeated factors appear as multiples of the single-factor term, rather than in the general partial-fraction with several terms appearing with different powers in the denominators. The database contains the shape of many protoloop tables, as symbolic denominators or their factors; the lists gi & gp are also included. gp is related to polar duals and is described in Section 9.1; gi is the above-mentioned location of the variables, multiplied by any sign needed by the corresponding partial fraction; gi also includes the multiplicity of each size, needed by hoopInverse. Where known, plex is also set by sh. Multiplying a vector by its plex gives a quadratic size; each plex is an involution.
	The relationship between division and derivates implies a relationship with differentiation. This needs to be explored.
	hoopInverse builds up the inverse for the symbolic protoloop (i.e. with elements {a,b,..}), and finally replaces the standard symbols by the coefficients of the argument. (The next section discusses the inverse when a size becomes zero.) Example 33 uses hoopInverse to calculate symbolic inverses for several tables, and confirms their correctness by showing that Ai·A={1,0...}. (This has already been checked in Test 8 , Section 1.4. of GroupLoopTest.nb)

Example 33. hoopInverse for some small hoops.

{glo = C3; id[glo], " Inverse =", 
      tst = hoopInverse[{a, b, c}], "\nconfirmation", 
      Simplify[hoopTimes[
          tst, {a, b, c}]], 

"\n\n", 
      glo = cd[{3}]; id[glo], " Inverse =", 
      tst = hoopInverse[{a, b, c}], "\nconfirmation Ainv.A =", 
      Simplify[hoopTimes[
          tst, {a, b, c}]], 

"\n\n", 
      glo = C4C3c; id[glo], " Inverse =", 
      tst = hoopInverse[{a, b, c}], "\nconfirmation Ainv.A =", 
      Simplify[hoopTimes[
          tst, {a, b, c}]], 

"\n\n", 
      glo = C9J; id[glo], " Inverse =", 
      tst = hoopInverse[{a, b, c}], "\nconfirmation Ainv.A =", 
      Simplify[hoopTimes[
            tst, {a, b, c}]] /. (𝕁^3) -> 
          1, 

"\n\n", glo = C4; 
      id[glo], " Inverse =", 
      tst = hoopInverse[{a, b, c, d}], "\nconfirmation Ainv.A =", 
      Simplify[hoopTimes[
          tst, {a, b, c, 
            d}]], 

"\n\n", 
      glo = cd[{1, -1}]; id[glo], " Inverse =", 
      tst = hoopInverse[{a, b, c, d}], "\nconfirmation Ainv.A =", 
      Simplify[hoopTimes[tst, {a, b, c, d}]]}

6.4. Zero sizes, "Renormalizing" Partial-Fraction Division, "remainders" .

If a vec has one or more size that is zero, size conservation means that the same size(s) of any product will also be zero. The result is "projected" onto a sub-algebra in which this size is constrained to be zero. This can create "annihilators" (vecs with all shapes zero). Example 34 sets up three vecs, each having one of the D3 sizes equal to zero. Their product is an annihilator - a vector with all sizes zero - in the D3 algebra.

Example 34. D3 vecs with Zero Sizes, Annihilators.

id[D3]; {"z0      =", 
      z0 = {1, 0, -2, -4, -2, 1}, "\n z1      =", 
      z1 = {1, 3, 2, -4, -2, 0}, "\n z2      =", 
      z2 = {0, -5, -1, -4, -2, -6}, "\nz0 z1    =", 
      z01 = hoopTimes[z0, z1], "\nz0 z1 z2 =", 
      zz = hoopTimes[z2, z01], "\nz0 shape      =", 
      shape[z0], "\nz1 shape      =", shape[z1], "\nz0z1 shape    =", 
      shape[z01], "\nz2 shape      =", 
      shape[z2], "\nz0 z1 z2 shape=", shape[zz]}

Any vec A0 with one or more zero size is a member of a constrained sub-algebra (of reduced symmetry) in which these sizes are constrained to be zero. The result of multiplying a general vec by such a vec must be in this sub-algebra, for the zero sizes are conserved. Multiplication "projects" vecs into the sub-algebra. To make the algebra conservative, the sizes that would be lost are "ejected" into "remainders". This is analogous to integer division of I by J, where I/J gives a quotient Q and a remainder (smaller than J) of R, so that I = Q*J + R. By analogy, hoop division A/B gives a quotient Q and (if necessary) two remainders Rl & Rr (whose sizes are the zeroes of the left and right arguments respectively), with A=Q*B+Rl, B=Q*A+Rr. As division is multiplication by an inverse (e.g. B=1/C), multiplication gives a product P but also generates left & right remainders; A*B = P+Rl+Rr, with P/A+Rl = B, P/B+Rr = A. This is implemented in hoopTimes wherever the multiplicands have different sizes that are zero to within an arbitrarily small number hmin. This requires that the inverse calculated by hoopInverse[B] is given a zero size wherever B has near-zero size. Note the analogy with "q-deformed" algebras. In effect, the multiplicands are reduced to vecs with compatible sizes before multiplication, by ejecting the remainders. Of course, in many cases the shapes are compatible and both the remainders are zero vectors. 
	Example 35 sets up two vecs that have different zero-sizes in the C4 algebra, multiplies them, shows that the remainders have the correct sizes, and shows that dividing AB by B0 does not give A until the remainder has been added.

id[C4];Chop[{"Example 35. C4 multiplication with remainders","\n         A0 = ",A0 = {2, 1, 2, 1},"\nshape of A0 = ",sA0 = shape[A0, "C4"],
"\n         B0 = ",B0 = {3, -1, 2, -4},
"\nshape of B0 = ",shape[B0],
"\n         AB = ",AB = hoopTimes[A0, B0],
"\nshape of AB = ",shape[AB],
"\nNote that two sizes have become 0",
"\nRemainder Rl",RA = Rl,"\nhas a shape ",shape[Rl],"\nremainder Rr",Rr,"\nhas a shape ",shape[Rr],"\nAB/B0      =",AoB = hoopTimes[AB, hoopInverse[B0]],"\nAdding Rl gives A0",AoB + RA}]

Division is multiplication by the multiplicative inverse, found by hoopInverse. This is therefore formulated so that the inverse A0inv has the same zeroes as A0, rather than these sizes being infinite. If any of the numerator sizes approach zero (to within an arbitrary hmin), the calculation proceeds in the sub-algebra in which these factors are constrained to be zero. The result is projected into the sub-algebra, and the infinite terms have been "factored out" or "renormalized". Conic sections provide an analogy - constraining a distance from some plane reduces the 3D symmetry of the bicone to one of several 2d symmetries. hoopInverse is a unary operation and the remainders do not exist until division (multiplication by the inverse) occurs. Thus remainders are the result of the binary operation of hoop multiplication. (Discovered 19th Dec. 2004.)

Vecs can be projected onto a sub-space by pre-multiplying by a vec such as A0 and then post-multiplying by its inverse. This is demonstrated in Example 36, using the C4 algebra (complex coefficients are used to show that the algebra is effective over the complex field); A0 is chosen to have the second size zero. The size of the remainder is the second size of the original vec:-

Example 36. C4 Division with Zero Sizes; Projection, Remainders.

id[C4];Chop[{"        A0=  ",A0 = {1, 4, 5.  + I, 2 + I},"\nshape of A0 = ",sA0 = shape[A0, "C4"],"\nA0i, the Inverse of A0, =",A0i = hoopInverse[A0],
"\nshape of A0i =",shape[A0i],
"\n         B=   ",B = {1.  + 4  I, -2, -4, -4 - 
                  3  I},
"\nshape of B   =",shape[B],
"\n      BA0i=   ",BA0i = hoopTimes[A0i, B, "C4"],
"\nshape of BA0i ",shape[BA0i],
"\nNote that the 2nd size has become 0   ↑",
"\nMultiplying by A0 gives a projection of B",A0BA0i = hoopTimes [A0, BA0i, "C4"],"\nwith a shape  ",shape[A0BA0i],
"\nwith 1st & 3rd sizes matching B, & 2nd size zero.",
"\nPremultiplying B by A0 gives A0B",A0B = hoopTimes[A0, B, "C4"],"\nshape of A0B =",shape[A0B = hoopTimes[A0, B, "C4"]],
"\nMultiply by A0i gives the same projection of B",B0 = hoopTimes[A0i, A0B, "C4"],"\nThe difference between B & A0BA0i is the remainder Rr",Rr = B - A0BA0i,"\nwith sizes",shape[Rr]," i.e. the second size of  B."}]

Thus renormalizing multiplication/division is conservative if it is interpreted as projecting the result into the constrained sub-algebra whilst splitting off (ejecting) remainders that contains the lost sizes. Conjecture - this may be related to fundamental particle interactions and decay, where particles with different symmetries occur, but the symmetries may be conserved by the creation of more than one particle.

6.5. Degenerate monosized algebras.

Collapsing loops to hoops makes many sizes zero; some signed table hoops have only one (often repeated) size and so cannot exhibit renormalisation. In this respect, they are degenerate hoops. Those in the database are shown in Example 37. They include C4c=ℂ; Qr=quaternion algebra, ℍ; the octonion algebra Octi, Octc=Octonions 𝕆; Octi=split-Octonions, P4=Pauli-σ; Cliffords(2), (3), (0,4), (1,3), (2,2), (3,1), (4) (but not C8r, Clifford(2,1), Clifford(0,3), shown in Example 37a). In the example, some factors are found by fa[mp[mnemonic]], which factorizes the determinant after mapping members of the alphabet onto the index table. Others are given by the same mapping onto the known shape, whilst the 16-membered Cliffords are mapped with {a,3,7,1,2,.. (2^n)...(2^12)} (truncated as appropriate) to provide compact output. Three other hoops, with two distinct factors, are shown in Example 37a.

Example 37. Some degenerate hoops.

a8 = Take[alpha, 8];{"ℂ   Factor ",-fa[mp["C4c"]],"\nC9J  Factor ",sh["C9J"][[1]],"\nQr   Factors",fa[mp["Qr"]],"\nOctr Factors",fa[mp["Octr"]],"\nOcti Factors",fa[cd[{1, -1, -1}]],"\nP4   Factors",fa[mp["P4"]],"\nCL2  Factors",fa[cl[2]],"\nCL3  Factors",(shape[a8, "CL3"])^2,"\nCL04 Factors",fp[cl[0, 4]],"\nCL13 Factors",fp[cl[1, 3]],"\nCL22 Factors",fp[cl[2, 2]],"\nCL31 Factors",fp[cl[3, 1]],"\nCL4  Factors",fp[cl[4]]}

Example 37a. Related Hoops with two factors.

{"C8r splits",shape[a8, "C8r"],"\nCL21 splits ",(shape[a8, "CL21"])^2,"\nCL03 splits ",(shape[a8, "CL03"])^2}

The sizes of ℂ, ℍ, and 𝕆 are sums of squared coefficients, and so can only be zero (for real coefficients) in the trivial case where all the coefficients are zero. This makes them (together with ℝ) the only "division algebras without real divisors of zero". All other hoops have real divisors of zero; all hoops (including ℝ, ℂ, ℍ, and 𝕆) have divisors of zero in the complex field. (The sizes of Sed and higher Cayley-Dickson algebras are also sums of squares, but they are not conserved.) 
	Division of a vector A by an annihilitor (i.e. a vector whose sizes are all zero) is interpreted as giving a result {0,0...} and a remainder that is all of A.

7. Many algebras are Hoops.

Summary. Most of the algebras of Mathematical Physics are Hoop algebras or constrained Hoop algebras.

7.1. Real, Complex, Quaternion, Octonion Algebras.

The importance of hoops is that most "physical" algebras are hoops or restrictions on hoops, and so have conserved properties. C2 is the multiplication table for real numbers, expressed as {+,-}, with +*+ and -*- both giving +. C4c (folded from C4) is Complex, {r,i}, with i*i = - r (Example 27). Non-abelian Quaternions, non-associative Octonions, non-alternative & non-conservative (but power-associative) sedenions are all Cayley-Dickson algebras:- Qr, Octc, Sed. Qr, Oct & Octi compose with C2 to form (associative) Q8 & (alternative) Oct and M(16,2) Moufang loops; they describe rotations in 3 & 7 dimensions (Section 6.6) and also multiply univectors to give scalar products and cross products. Composing Sed and higher Cayley-Dickson algebras does not give Moufang loops; they are not conservative division algebras.

(Technical note. It is well-known that the 16 vectors {±1/2,±1/2,±1/2,±1/2} are "rational units" for Quaternions; it may be a new observation that there are many others. Permutations of {±2/3,±2/3,±1/3,0}, {±4/5,±2/5,±2/5,±1/5}, {±5/6,±3/6,±1/6,±1/6}, {±4/6,±4/6,±1/6,±1/6}, {±5/7,±4/7,±2/7,±2/7}, and {±6/7,±3/7,±2/7,0} are examples - in each case the sum of the squared elements (the size) is 1. Similarly, permutations of {±1/2,±1/2,±1/2,±1/2,0,0,0,0}, {±2/3,±1/3,±1/3,±1/3,±1/3,±1/3,0,0}, {±3/4,±1/4,±1/4,±1/4,±1/4,±1/4,±1/4,±1/4},  {±1/2,±1/2,±1/2,±1/4,±1/4,±1/4,±1/4,0} are all octonion rational units.)

7.2. Vector Dot & Cross products.

Example 38 shows that dot & cross products are hoop multiplications where only the univectors are multiplied (i.e. the scalar and multivector elements of the multiplicands are kept at zero). The symbols are chosen to match those in [3, p11] for quaternions and CL2, and to match [3, p37] for octonions and CL3.

Example 38. Dot & Cross products with Qr & Octr.

hoopTimes[{0, (Subscript[e, 1]), (Subscript[e, 2]), 0}, {0, (Subscript[u, 1]), (Subscript[u, 2]), 
        0}, "Qr"]

hoopTimes[{0, (Subscript[a, 1]), (Subscript[a, 2]), 0, (Subscript[a, 3]), 0, 0, 0}, {0, (Subscript[b, 1]), 
        (Subscript[b, 2]), 0, (Subscript[b, 3]), 0, 0, 0}, "Octr"]

In both cases the first term is the scalar product (up to a sign), whilst the univectors (and octonion trivector) in the product are zero. The Qr trivector result (Subscript[e, 2]) (Subscript[u, 1]) - (Subscript[e, 1]) (Subscript[u, 2]) is the 2D cross product, and Octc gives the (negated) 3D scalar product (Subscript[a, 1]) (Subscript[b, 1]) + (Subscript[a, 2]) (Subscript[b, 2]) + (Subscript[a, 3]) (Subscript[b, 3]) together with the vector cross product  (-(Subscript[a, 2]) (Subscript[b, 1]) + (Subscript[a, 1]) (Subscript[b, 2]))(Subscript[e, 1]) (Subscript[e, 2])+ (-(Subscript[a, 3]) (Subscript[b, 1]) + (Subscript[a, 1]) (Subscript[b, 3]))(Subscript[e, 1]) (Subscript[e, 3])+ (-(Subscript[a, 3]) (Subscript[b, 2]) + (Subscript[a, 2]) (Subscript[b, 3]))(Subscript[e, 2]) (Subscript[e, 3]). (Remember that the bivector (Subscript[e, 1]) (Subscript[e, 2]) is the 4th element basis direction, etc., with coefficient 0 in the multiplicands).

7.3. Cayley-Dickson, Clifford, Exterior, Wedge & Lie Algebras.

Section 3.2.7 demonstrated some generalisations of the Cayley-Dickson process, creating many hoops.

Clifford algebras are hoops, created by cl or by folding a specific group isomorph. Wedge (exterior) algebras are the bivector part of the Clifford product ([3] p.10). They multiply univectors using Clifford algebra rules; the scalars and multivectors are kept at zero in the multiplicands so various products are zero (i.e. these are Grassmann algebras). Multiplying univectors (Subscript[u, 1]), (Subscript[u, 2]) and (Subscript[v, 1]), (Subscript[v, 2]) in CL2 gives a scalar (Subscript[e, 1]) (Subscript[u, 1]) - (Subscript[e, 2]) (Subscript[u, 2]) and a bivector (Subscript[e, 1]) (Subscript[u, 2]) - (Subscript[e, 2]) (Subscript[u, 1]); the univectors in the product are zero. CL3 gives the wedge product of three univectors when the scalar and multivector terms are zero in the multiplicands:-

Example 39a. Wedge Products, Exterior Algebras. Qr, Octr.

hoopTimes[{0, (Subscript[u, 1]), (Subscript[u, 2]), 0}, {0, (Subscript[v, 1]), (Subscript[v, 2]), 
        0}, "Qr"]
hoopTimes[{0, (Subscript[u, 1]), (Subscript[u, 2]), 0, (Subscript[u, 3]), 0, 0, 0}, {0, (Subscript[v, 1]), 
        (Subscript[v, 2]), 0, (Subscript[v, 3]), 0, 0, 0}, "Octr"]

Example 39b. Wedge Products, Exterior Algebras. CL2, CL3

hoopTimes[{0, (Subscript[u, 1]), (Subscript[u, 2]), 0}, {0, (Subscript[v, 1]), (Subscript[v, 2]), 
        0}, "CL2"]
hoopTimes[{0, (Subscript[u, 1]), (Subscript[u, 2]), 0, (Subscript[u, 3]), 0, 0, 0}, {0, (Subscript[v, 1]), 
        (Subscript[v, 2]), 0, (Subscript[v, 3]), 0, 0, 0}, "CL3"]

These only differ from the quaternion and octonion univector products in the sign of the first term.
	Lounesto [3, footnote 11, p11; p38] points out the distinction between the oriented plane-area bivector wedge product and the vector-valued cross product. The cross products involve a metric; wedge products do not.
	Different 16-element Clifford algebras multiply 4 univectors to give scalars and three bivectors with assorted signs. (Trailing zeroes are omitted in the input; hoopTimes pads out short vecs with zeroes.):-

Example 40. Wedge Products, Exterior Algebras. CL4 etc

hoopTimes[{0, (Subscript[e, 1]), (Subscript[e, 2]), 0, (Subscript[e, 3]), 0, 0, (Subscript[e, 4])}, {0, (Subscript[u, 1]), 
            (Subscript[u, 2]), 0, (Subscript[u, 3]), 0, 0, (Subscript[u, 4])}, "CL4"]
hoopTimes[{0, (Subscript[e, 1]), (Subscript[e, 2]), 0, (Subscript[e, 3]), 0, 0, (Subscript[e, 4])}, {0, (Subscript[u, 1]), 
            (Subscript[u, 2]), 0, (Subscript[u, 3]), 0, 0, (Subscript[u, 4])}, "CL04"]
hoopTimes[{0, (Subscript[e, 1]), (Subscript[e, 2]), 0, (Subscript[e, 3]), 0, 0, (Subscript[e, 4])}, {0, (Subscript[u, 1]), 
            (Subscript[u, 2]), 0, (Subscript[u, 3]), 0, 0, (Subscript[u, 4])}, "CL31"]

Finite Lie algebras appear to be Clifford hoops for which the real (scalar) elements have been zeroed. This has yet to be explored. Clifford(5) has the same number of distinct off-diagonal elements as the string theory group with 496 (=32/31/2) elements, suggesting that these elements are related to multivectors.

7.4. Penrose Twistors.

[Wikipedia,Twistor theory] "Twistors map the geometric objects of the four dimensional (Minkowski) space-time .. into the geometric objects in the 4-dimensional complex space with the metric signature (2,2)."

CL2 conserves (a^2) - (b^2) + (c^2) - (d^2). C2D4r & CL21 conserve two (repeated) functions, both composed of four squares, with two negated. Thus they have sub-algebras with the signature (2,2). D4, KiC4c & KiC4r have (2,2) repeated sizes, but also have other sizes. I have not explored the relationships with twistors.

{"Shape C2D4r =", id[mp["C2D4r"]]; 
      shape[a8 = Take[alph, 8]], "\nShape  CL21 =", id[mp["CL21"]]; 
      shape[a8], "\nShape    D4 =", id[mp["D4"]]; 
      shape[a8], "\nShape KiC4c =", id[mp["KiC4c"]]; 
      shape[a8], "\nShape KiC4r =", id[mp["KiC4r"]]; 
      shape[a8]}

8. (Visualization Deleted).

9. Orbits.

Summary. Polar duals become continuous "Orbits" when the non-zero offsets and squared radii (or their product) are constrained to be one, defining "unital" sub-algebras. Many orbits appear to be unstable and have zero size. The implications of the few cases with finite sizes are discussed Section 10.

9.1. C3, K & C4 Orbits have fixed amplitudes.

Finite groups have finite "orbits", sets of points. These become continuous orbits (continuous multi-phase sinusoids) in algebras with polar duals - the duals form an equivalence class if offsets and squared radii (or ulnae) are constrained to values of 0 or 1 whilst angles are allowed to vary. They constitute continuous closed unitary sub-algebras; hoop multiplication of two orbits gives another orbit.
	Orbit vector values are given by toVector using arbitrary angles, all other parameters being 0 or 1. (toVector uses the table gp which is set up by sh["mnemonic"] to distinguish between sizes and angles.) The three C3 and four C4 orbits are set up in Example 41; the names correspond to the sizes. Note that shape["C3"] has one L1(linear) and one L2 (quadratic) size whilst a C3 vector has 3 degrees of freedom. Similarly, shape["C4"] has three size parameters to describe a 4-element vector. Each squared radius provides a degree of freedom that is utilized by the angle parameter, which is a "hidden variable" for the cartesian form. Each polar form is the shape together with an angle for each quadratic size. Example 41 also sets up and multiplies the C3 orbits, showing the product to be an orbit with the angles added. Then four C4 orbit pairs are set up and multiplied; the products are orbits with the correct sizes:-

Example 41. C3 & C4 Orbit Multiplication.

a

\({"C3 Orbits", "
OC301 is {0,1,σ} with vector form", 
      gmn = "C3"; mm = 3; 
      OC301 = toVector[{0, 
            1, σ}], "
OC311 is {1,1,σ} with vector form", 
      OC311 = toVector[{1, 
            1, σ}], "
Products are orbits with added angles; the polar form of the product is", 
      Simplify[toPolar[
          hoopTimes[OC301, OC311, 
            C3]]], "

C4 Orbits", 
gmn = "C4"; 
      mm = 4; "
OC4001 is {0,0,1,a} with vector form", 
      OC4001 = toVector[{0, 0, 1, 
            a}], "
OC4011 is {0,1,1,b} with vector form", 
      OC4011 = toVector[{0, 1, 1, 
            b}], "
OC4101 = {1,0,1,c} with vector form", 
      OC4101 = toVector[{1, 0, 1, 
            c}], "
OC4111 is {1,1,1,d} with vector form", 
      OC4111 = toVector[{1, 1, 1, 
            d}], "

", 
Simplify[{"OC4001×OC4001 has the 001 shape", 
          shape[hoopTimes[OC4001, OC4001, 
              C4]], "
OC4101×OC4011 also has the 001 shape
as the two offsets disappear   ", 
          shape[hoopTimes[OC4101, 
              OC4011]], "
OC4101×OC4111 has the 101 shape", 
          shape[hoopTimes[OC4101, 
              OC4111]], "
OC4111×OC4111 has the 111 shape", 
          shape[hoopTimes[OC4111, OC4111]]}]}\)

Example 42. C3 & C4 Chiral Orbits.

These orbits possess chirality, as the order of the orbit components is reversed if the angle is negated. I appending a c to the orbit name to indicate negation of the angle

{"OC301c is {0,1,-a} with vector form", gmn = "C3"; mm = 3; 
      OC301 = toVector[{0, 1, -a}], gmn = "C4"; 
      mm = 4; "\nOC4001c is {0,0,1,-a} with vector form", 
      OC4001 = toVector[{0, 0, 1, -a}]}

The group K (C2C2) cannot have a polar orbit as it has no L2 size, but the four L1 sizes can be combined to give six paired difference-of-squares formulations. Hyperbolic orbits can be defined using any of these as adjacent\(TraditionalForm\`\^2\), opposite\(TraditionalForm\`\^2\) pairs. Two orbits are set up in Example 43 and multiplied. The product is shown to be an orbit with unit sizes; its "angles" appear in complex form but numeric substitutions show that they are the sums of those in the multiplicands.

Example 43. Klein Group Hyperbolic Orbit Multiplication.

\({gmn = "K"; "OKh11a is {1,α,1,a} with vector form
", 
      OKh11a = tohyVector[{1, α, 1, 
            a}], "
OKh11b is {1,β,1,b} with vector form", 
      OKh11b = tohyVector[{1, β, 1, 
            b}], "
Their product Polar form is
", 
      Simplify[tohyPolar[
          hoopTimes[OKh11a, OKh11b, 
            K]]], "
Substituting α->.1, β->.3, a->.22, b->.28 shows that the angles have added to give ", {Log[\((Cosh[α + β] + Sinh[α + β])\)], 
          Log[\((Cosh[a + b] + Sinh[a + b])\)]} /. {α ->  .1, 
          a ->  .22, β ->  .3, b ->  .28}}\)

9.2. C5, C7 & C8 Orbits have unstable amplitudes.

The orbits of C3 are of fixed squared radius 2/3 and offsets 0 or 1/3.  Those of C4 are of fixed squared radii or ulnae of magnitude 1/2, and offsets 0 or ±1/4. For C2 there is only one, hyperbolic, orbit with a unit ulna. Orbits of Cp (p prime>3) can be developed, with p sinusoidal phases, but their radii are unconstrained, though their offsets are 0 or 1/p. Example 44 shows that OC51r, a five-phase orbit with radius r, has an L4 size of zero and so is unconstrained. The angle and L1 and L4 parameters only use 3 of the 5 degrees of freedom. Example 45 shows that a seven-phase orbit with radius r has a zero size in C7 (I have not found a polar expression for this group). These orbits also appear to be unstable - numerical integration of the relevant differential-equation sets is unstable. Example 46 shows that an eight-phase orbit with radius r has a zero size in C8.

Example 44.  Zero-sized C5 orbit.

{gmn = "C5";"OC51r is",OC51r = 
    toVector[{d, r, σ}], 
  "\nThe radius disappears from the shape", 
  Simplify[shape[OC51r]]}

Example 45.  Zero-sized C7 orbit.

{tst = {d + r*Sin[σ], 
     d + r*Sin[(2*Pi)/7 + σ], 
     d + r*Sin[(4*Pi)/7 + σ], 
     d + r*Sin[(6*Pi)/7 + σ], 
     d + r*Sin[(8*Pi)/7 + σ], 
     d + r*Sin[(10*Pi)/7 + 
         σ], d + 
      r*Sin[(12*Pi)/7 + σ]}/
    7;"OC7dr is",tst,"The determinant simplifies (slowly!) to", Simplify[
    fp[ca[7], tst]]}

Example 46.  Zero-sized C8 orbit.

{tst = {d + r*Sin[σ], 
     d + r*Sin[(2*Pi)/8 + σ], 
     d + r*Sin[(4*Pi)/8 + σ], 
     d + r*Sin[(6*Pi)/8 + σ], 
     d + r*Sin[(8*Pi)/8 + σ], 
     d + r*Sin[(10*Pi)/8 + 
         σ], d + 
      r*Sin[(12*Pi)/8 + σ], d + 
      r*Sin[(14*Pi)/8 + σ]}/
    8;"OC8dr is",tst,"The determinant simplifies to", Simplify[
    fp[ca[8], tst]]}

Stable, finite amplitude, orbits with 3, 4, 6, 9, and 12 phases have been found, some of which have polarization and chirality. They may be related to deBroglie waves. This leads to the surmise that quarks are wave packets with ternary symmetry, and leptons are wave packets with 4-fold symmetry. Some of the elements of hoops act as half-spin and unit-spin quantum operators (see Section 10). The orbit magnitudes may be related to the Planck size of "extended" particles; the number of types of particles may be related to the number of stable orbits. This is discussed in Section 10.

9.3. Non-Abelian Orbits. (Under development.)

Non-Abelian groups have repeated factors that release extra degrees of freedom that cannot be taken up by the (radius,angle} formulation. On 25/11/05 I discovered a polar form for repeated (i.e. non-abelian) quadratic shapes such as D3 and Qr, breaking the quadratic into two parts that are not conserved separately. These give "pseudo-powers" that revert to a vector of the correct size, even though the angles do not add.

Example 47.  D3 orbit.

toPol[{a, b, c, d, e, f}, "D3"]

\(toVec[{γ, δ, ηη, χ, κκ, ψ}, "D3"] /. {4 \@ ηη -> η, 
        4 \@ κκ -> κ, 
        4\ \@\(\(-ηη\) + κκ\) -> ν}\)

\(id[D3]; {"If A=", 
      A, \*""\n\!\(\@\(\(A\)\(\\ \)\)\)="", 
      rA = hoopPower[A], 
"
 with Polar form", 
      toPolar[A], 
\*""\n((Sqrt[A]))^2 is correct"", 
      rA2 = hoopPower[rA, 
          2], 
\*""\nbut (Sqrt[A]).\!\(\@\(\(A\)\(\\ \)\)\)="", rArA = hoopTimes[rA, rA]}\)
{Prepend[shape[A],"Shape[A]"],\(Prepend[shape[rA], \*""Shape[\!\(\@A\)]""]\),\(Prepend[shape[rA2], \*""Shape[\!\(\((\@A)\)\^2\)]""]\),\(Prepend[
            shape[rArA], \*""Shape[\!\(\@A\).\!\(\@A\)]""]\)}//tf

id[D3]; {Flatten[{"If B=", 
            B = {3. , -1. , 2. , 2. , 5. , 3. }}], 
        Flatten[{"AB = ", 
            AB = hoopTimes[A, 
                B]}], 
Flatten[{"Polar A= ", 
            sa = toPolar[A]}], 
Flatten[{"Polar B= ", 
            sb = toPolar[B]}], 
        Flatten[{"Polar AB=", 
            sab = toPolar[
                AB]}], 
Flatten[{"Only 3 sizes \
multiply", sa sb - sab}]} // tf

As with high-angle abelian multiplication, non-abelian powers rotate vectors.

9.4. Harmonics. (Under development.)

This study started with the observation that banded sets of differential equations had multi-phase sinusoidal solutions, and was followed by the study of groups. Multi-phase sinusoidal orbits imply a relationship - the groups are acting like the differential equations, with each group element being the rate of change of two other elements. Orbits may be first harmonics corresponding to stable particles, and higher harmonics should be resonances corresponding to unstable particles.

10. "ROGER" Algebras, Quantum Operators, Subsymmetry.

Summary. A few hoop algebras have stable orbits that define a fundamental area, and provide operators with half-integral or integral spin. It is surmized that these Renormalizing Orbit-Generating Equivalence-Relation (ROGER) algebras may provide an explanation of  fundamental particle stability. Their use as Quantum Operators is discussed. C3K provides half-spin operators; folding it to C3C2 gives integer-spin sub-symmetrical operators. "Dozal" (the unitary algebra of 12-element directors) conserves many functions that may be related to particle properties.

10.1. Quantum operators.

Orbits have only been found for a few hoops in the database, but some hoops have stable orbits with 3, 4, 6, 12 & 16 phases that may define a fundamental size. Some other hoops have unstable orbits that do not define a fundamental size (Section 9.2). It is conjectured that stable orbit sizes are related to the Planck area, and that their orbits are related to deBroglie waves. These Renormalizing Orbit-Generating Equivalence-Relation "ROGER" algebras may provide quantum operators for fundamental particles. In particular, elements of the C3K (g1205) algebra appear to be half-spin operators.

J.J.Hamilton published [9] a "hypercomplex arithmetic" with half-spin hypercomplex quantum operators as well as integer-spin quantum operators. He generalised complex conjugation (in which the conjugate of a conjugate is the original, i:(i*)*=+i) to include elements {a,b,a*,b*} demonstrating "biconjugation" (my term) in which the conjugate of a conjugate is the negated original, a:a** =-a, (a*)** =-a*,  b:b** =-b, (b*)** =-b*.  He demonstrated that {a,b,a*,b*}  act like fundamental half-integral spin quantum operators with properties that cannot be expressed as complex numbers. (This is because they exist in the hyperbolic plane of Example 41 rather than the complex plane. They are different square roots of unity whilst his full-spin operators i & k are different fourth roots.) Matrix representations (which are are not fundamental) can be obtained for them. He stated that (2^r) elements are required, thereby unnecessarily restricting himself to hypercomplex, rather than general, number systems. His multiplication table (Table II, reproduced below) uses the eight elements (Subscript[E, n ])= {1, i, h, k, a, \(TraditionalForm\`\(b\^*\)\), \(TraditionalForm\`\(a\^*\)\), b}. However, he has several distinct "-1" elements ((h^2),  (a^2) and (a^(*2)) are all +1); he also introduces several other elements and many aliases. Example 48 converts his Table II to an index table and identifies it as an O4 isomorph. O4 is obtained on folding C4K, C3KC2, & C8K.

Example 48. J.J.Hamiltons's Hypercomplex Multiplication Table.  (His Table II.)

({{ , (Subscript[E, 0]), (Subscript[E, 1]), (Subscript[E, 2]), (Subscript[E, 3]), (Subscript[E, 4]), (Subscript[E, 5]), (Subscript[E, 6]), (Subscript[E, 7])}, {(Subscript[E, 0]), 1, i, h, k, a, \(b\^*\), \(a\^*\), b}, {(Subscript[E, 1]), i, -1, k, -h, \(b\^*\), -a, b, \(-\(a\^*\)\)}, {(Subscript[E, 2]), h, k, 1, i, \(a\^*\), b, a, \(b\^*\)}, {(Subscript[E, 3]), k, -h, i, -1, b, \(-\(a\^*\)\), \(b\^*\), -a}, {(Subscript[E, 4]), a, \(b\^*\), \(a\^*\), b, 1, i, h, k}, {(Subscript[E, 5]), \(b\^*\), -a, b, \(-\(a\^*\)\), i, -1, k, -h}, {(Subscript[E, 6]), \(a\^*\), b, a, \(b\^*\), h, k, 1, i}, {(Subscript[E, 7]), b, \(-\(a\^*\)\), \(b\^*\), -a, k, -h, i, -1}})

{"This is ",id[tst=caylindex[   ({{1, i, h, k, a, \(b\^*\), \(a\^*\), b}, {i, -1, k, -h, \(b\^*\), -a, b, \(-\(a\^*\)\)}, {h, k, 1, i, \(a\^*\), b, a, \(b\^*\)}, {k, -h, i, -1, b, \(-\(a\^*\)\), \(b\^*\), -a}, {a, \(b\^*\), \(a\^*\), b, 1, i, h, k}, {\(b\^*\), -a, b, \(-\(a\^*\)\), i, -1, k, -h}, {\(a\^*\), b, a, \(b\^*\), h, k, 1, i}, {b, \(-\(a\^*\)\), \(b\^*\), -a, k, -h, i, -1}})]],tst // tf}

Because O4 (g0813) is an equivalence relation on C3KC2 (g2415), Table II is embedded in C3KC2, and also in C3K, which is folded from C3KC2. Completing an "extended table" using Hamilton's definitions for -1,-h,-a, and -a*, and for their products, gives a 12×12 C3K isomorph. Choosing generators  (i^3)=(h^2)=(a^2)=1 (to match Hamilton's nomenclature) gives the elements that are shown above the table in Example 48. If the supplementary and ill-defined "-1" term is converted to an arbitrary variable ii (it is (i^2) or (Subscript[E, 1]^2) in Table II), the table becomes C3K. Deleting the rows and columns starting with negated elements (and shown in plain face) reduces this table to his Table II, which is therefore embedded in C3K:-

Example 49. J.J.Hamiltons's Table II is embedded in C3K.

jjh3=({{1, i, -1, h, k, -h, a, \(b\^*\), -a, \(a\^*\), b, \(-\(a\^*\)\)}, {i, -1, 1, k, -h, h, \(b\^*\), -a, a, b, \(-\(a\^*\)\), \(a\^*\)}, {-1, 1, i, -h, h, k, -a, a, \(b\^*\), \(-\(a\^*\)\), \(a\^*\), b}, {h, k, -h, 1, i, -1, \(a\^*\), b, \(-\(a\^*\)\), a, \(b\^*\), -a}, {k, -h, h, i, -1, 1, b, \(-\(a\^*\)\), \(a\^*\), \(b\^*\), -a, a}, {-h, h, k, -1, 1, i, \(-\(a\^*\)\), \(a\^*\), b, -a, a, \(b\^*\)}, {a, \(b\^*\), -a, \(a\^*\), b, \(-\(a\^*\)\), 1, i, -1, h, k, -h}, {\(b\^*\), -a, a, b, \(-\(a\^*\)\), \(a\^*\), i, -1, 1, k, -h, h}, {-a, a, \(b\^*\), \(-\(a\^*\)\), \(a\^*\), b, -1, 1, i, -h, h, k}, {\(a\^*\), b, \(-\(a\^*\)\), a, \(b\^*\), -a, h, k, -h, 1, i, -1}, {b, \(-\(a\^*\)\), \(a\^*\), \(b\^*\), -a, a, k, -h, h, i, -1, 1}, {\(-\(a\^*\)\), \(a\^*\), b, -a, a, \(b\^*\), -h, h, k, -1, 1, i}})/.-1 -> ii;{"This is ", id[caylindex[jjh3]]}

Hence Hamilton's hypercomplex algebra can be interpreted as the C3K algebra if his i is a cube root of 1, with a and h being different square roots of 1. His half-spin operators {a, a*, -a≡a**,b, b*, -b≡b**≡-a*} are then {a, a h, a i i, a h i, a i , a h i i}; conjugation is multiplication by h (with h h =1), but biconjugation becomes multiplication by i or i i. This introduces ternary symmetry, and defies the prejudice that there must be (2^n) elements in an algebra - which is only true for real algebras without divisors of zero.

C3K has a polar-vector duality, interconverting the vector form {e,i,ii, h,hi,hii, a,ai,aii, ah,ahi,ahii} (where e is the neutral element or 1) and the polar form with four scalar offsets {α, β, γ, δ}, and four {squared radius, angle} pairs {ζζ, τ, λλ, ϕ, ηη, χ, ϰϰ, ψ} in a three-phase system. The squared radii are sums of squares, and so are positive for real vec coefficients. (The interconversions are still valid for complex coefficients, but these can give complex and negative radii.) 
The following expressions are edited to emphasise the inter-relationships between the vector and polar forms. In particular, quadratic polar elements such as ζζ become radii such as ζ, and 2π/3 is written as ω:-

Example 50. C3K Polar Dual.

toPolar[{a, b, c, d, e, f, g, h, i, j, k, l}, "C3K"]

{ (*α*) a + b + c + d + e + f + g + h + i + j + k + l, β = 
        a + b + c - d - e - f + g + h + i - j - k - 
          l, 
 (*γ*) a + b + c + d + e + f - g - h - 
        i - j - k - l, δ = 
        a + b + c - d - e - f - g - h - i + j + k + 
          l, 
 (*ζζ*) ((((a - b + d - e + g - h + j - k))^2) + (((b - c + e - f + h - i + k - l))^2) + (((-a + c - d + f - g + i - j + l))^2))/2, 
 (*τ*) ArcTan[
        2 a - b - c + 2 d - e - f + 2 g - h - i + 2 j - k - 
          l, -(Sqrt[3]) (b - c + e - f + h - i + k - 
              l)], 
 (*λλ*) ((((a - b - d + e + g - h - j + k))^2) + (((-a + c + d - f - g + i + j - l))^2) + (((b - c - e + f + h - i - k + l))^2))/2, 
 (*ϕ*) 
        ArcTan[2 a - b - c - 2 d + e + f + 2 g - h - i - 2 j + k + 
          l, -(Sqrt[3]) (b - c - e + f + h - i - k + 
              l)], 
 (*ηη*) ((((a - b + d - e - g + h - j + k))^2) + (((-a + c - d + f + g - i + j - l))^2) + (((b - c + e - f - h + i - k + l))^2))/2, 
 (*χ*) ArcTan[
        2 a - b - c + 2 d - e - f - 2 g + h + i - 2 j + k + 
          l, -(Sqrt[3]) (b - c + e - f - h + i - k + 
              l)], 
 (*ϰϰ*) ((((a - b - d + e - g + h + j - k))^2) + (((b - c - e + f - h + i + k - l))^2) + (((-a + c + d - f + g - i - j + l))^2))/
        2, 
 (*ψ*) ArcTan[
        2 a - b - c - 2 d + e + f - 2 g + h + i + 2 j - k - 
          l, -(Sqrt[3]) (b - c - e + f - h + i + k - l)]}

Example 51. C3K Polar-Dual reversion to Cartesian form.

\(C3Kv = 
      toVector[{α, β, γ, δ, ζζ, τ, λλ, ϕ, ηη, χ, ϰϰ, ψ}, "C3K"] /. {2  π/3 -> ω, \ 
          4  π/3 -> 
            2  ω, \@ζζ -> ζ, \@λλ -> λ, \@ηη -> η, \@ϰϰ -> ϰ}\)

{   (*a*) (α + β + γ + δ + 
            2 ζ Cos[τ]       + 
            2 λ Cos[ϕ]        + 
            2 η Cos[χ]       + 
            2 ϰ Cos[ψ]),   (*b*) (α + β + γ + δ + 2 ζ Cos[τ + ω] + 
            2 λ Cos[ϕ + ω] + 
            2 η Cos[χ + ω] + 
            2 ϰ Cos[ψ + ω]),   (*c*) (α + β + γ + δ + 2 ζ Cos[τ - ω] + 
            2 λ Cos[ϕ - ω] + 
            2 η Cos[χ - ω] + 
            2 ϰ Cos[ψ - ω]),   (*d*) (α - β + γ - δ + 2 ζ Cos[τ]       - 
            2 λ Cos[ϕ]       + 
            2 η Cos[χ]       - 
            2 ϰ Cos[ψ]),   (*e*) (α - β + γ - δ + 2 ζ Cos[τ + ω] - 
            2 λ Cos[ϕ + ω] + 
            2 η Cos[χ + ω] - 
            2 ϰ Cos[ψ + ω]),   (*f*) (α - β + γ - δ + 2 ζ Cos[τ - ω] - 
            2 λ Cos[ϕ - ω] + 
            2 η Cos[χ - ω] - 
            2 ϰ Cos[ψ - ω]),   (*g*) (α + β - γ - δ + 2 ζ Cos[τ]       + 
            2 λ Cos[ϕ]       - 
            2 η Cos[χ]       - 
            2 ϰ Cos[ψ]),   (*h*) (α + β - γ - δ + 2 ζ Cos[τ + ω] + 
            2 λ Cos[ϕ + ω] - 
            2 η Cos[χ + ω] - 
            2 ϰ Cos[ψ + ω]),   (*i*) (α + β - γ - δ + 2 ζ Cos[τ - ω] + 
            2 λ Cos[ϕ - ω] - 
            2 η Cos[χ - ω] - 
            
            2 ϰ Cos[ψ - ω]),   (*j*) (α - β - γ + δ + 2 ζ Cos[τ]       - 
            2 λ Cos[ϕ]       - 
            2 η Cos[χ]       + 
            2 ϰ Cos[ψ]),   (*k*) (α - β - γ + δ + 2 ζ Cos[τ + ω] - 
            2 λ Cos[ϕ + ω] - 
            2 η Cos[χ + ω] + 
            2 ϰ Cos[ψ + ω]),   (*l*) (α - β - γ + δ + 2 ζ Cos[τ - ω] - 
            2 λ Cos[ϕ - ω] - 
            2 η Cos[χ - ω] + 
            2 ϰ Cos[ψ - ω])}/12

These polar-duals define orbits in the unital cases (i.e. when the product of non-zero sizes is constrained to be 1). Giving angles such as τ the form -((Subscript[E, p]) t-P.x)/ℏ  gives the orbit the properties of a multi-phase deBroglie wave.

10.2. Dozal. (under development.)

"Dozal" is my name for the algebra of 12 real elements. There are five 12-element groups, with mnemonics C3C4, Q12, C3K, D3C2 & A4. I have not found a polar form for A4, but the others have closely related polar forms with intrinsic Planck-area-like finite amplitudes. The cubic A4 size l3 discriminates between different types of orbit - a topic still to be investigated. The interconversions are shown in the same format as that used in Examples 50 & 51. 
In Sci.Math, Jan 2006. Robert Israel provided a lemma to split a quartic C3C4 factor "L4" into two sums of squares, giving the l22a & l22b sizes. Prior to that, my version of the C3C4 shape did not conserve angles and so did not calculate powers correctly. The conversion of the vector form to the polar form is only expressed compactly if local variables {e1,e2, etc, with ψ6=ψ+π/6}are used:-

Example 52. General C3C4 orbit.

C3C4abcdefghijkl . 
Local symbols {ϵ, 
        r = -Sqrt[3], e1 = a + b + c - g - h - i, 
        e2 = d + e + f - j - k - l, 
a1 = 
          a - b + d - e + g - h + j - k, 
        a2 = a - b - d + e + g - h - j + k, 
b1 = 
          b - c + e - f + h - i + k - l, 
        b2 = b - c - e + f + h - i - k + l, 
c1 = 
          c - a + f - d + i - g + l - j, c2 = c - a - f + d + i - g - l + j, 
        f1 = a - b - g + 
            h + (d + e - 2 f - j - k + 2  l) 
              r3, 
f2 = (a + b - 2  c - g - h + 2  i) 
              r3 - d + e + j - k, 
f3 = 
          a - b - g + 
            h - (d + e - 2 f - j - k + 2  l) 
              r3, 
f4 = (a + b - 2  c - g - h + 2  i) 
              r3 + d - e - j + k}
{a + b + c + d + e + f + g + h + i + j + k + l, 
        a + b + c - d - e - f + g + h + i - j - k - 
          l, 
ϵ = (e1^2) + (e2^2), 
        If[ϵ == 0 && e2 == 0, 0, ArcTan[e1, e2], 
          ArcTan[e1, e2]], 
((a1^2) + (b1^2) + (c1^2))/2, 
        If[b1 == 0, 0, 
          ArcTan[a1 - c1, 
            r b1]], 
((a2^2) + (b2^2) + (c2^2))/2, 
        If[b2 == 0, 0, 
          ArcTan[a2 - c2, r b2]], 
((f1^2) + (f2^2)) 
          3/4, If[f2 == 0, -π/6, 
          ArcTan[f1, f2] - π/6], 
((f3^2) + (f4^2)) 
          3/4, If[f4 == 0, -π/6, 
          ArcTan[f3, f4] - π/6]};

C3C4αβϵσζτλϕηχκψ  . 
{α + β + ϵ Cos[σ] + ζ Cos[τ]       + 
            2 λ Cos[ϕ]       + (Sqrt[3]) η Cos[χ6] + η Sin[χ6] + (Sqrt[3]) κ Cos[ψ6] + κ Sin[ψ6], α + β + ϵ Cos[σ] + ζ Cos[τ + ω] + 
            2 λ Cos[ϕ + ω] - (Sqrt[3]) η Cos[χ6] + η Sin[χ6] - (Sqrt[3]) κ Cos[ψ6] + κ Sin[ψ6], α + β + ϵ Cos[σ] + ζ Cos[τ - ω] + 
            2 λ Cos[ϕ - ω]                           - 
            2 η Sin[χ6]                          - 
            2 κ Sin[ψ6], α - β + ϵ Sin[σ] + ζ Cos[τ]       - 
            2 λ Cos[ϕ]       - (Sqrt[3]) η Sin[χ6] + η Cos[χ6] - κ Cos[ψ6] + (Sqrt[3]) κ Sin[ψ6], α - β + ϵ Sin[σ] + ζ Cos[τ + ω] - 
            2 λ Cos[ϕ + ω] + (Sqrt[3]) η Sin[χ6] + η Cos[χ6] - κ Cos[ψ6] - (Sqrt[3]) κ Sin[ψ6], α - β + ϵ Sin[σ] + ζ Cos[τ - ω] - 
            2 λ Cos[ϕ - ω]                          - 2 η Cos[χ6] + 
            2 κ Cos[ψ6], α + β - ϵ Cos[σ] + ζ Cos[τ]       + 
            2 λ Cos[ϕ]       - (Sqrt[3]) η Cos[χ6] - η Sin[χ6] - (Sqrt[3]) κ Cos[ψ6] - κ Sin[ψ6], α + β - ϵ Cos[σ] + ζ Cos[τ + ω] + 
            2 λ Cos[ϕ + ω] + (Sqrt[3]) η Cos[χ6] - η Sin[χ6] + (Sqrt[3]) κ Cos[ψ6] - κ Sin[ψ6], α + β - ϵ Cos[σ] + ζ Cos[τ - ω] + 
            2 λ Cos[ϕ - ω]                          + 
            2 η Sin[χ6]                           + 
            2 κ Sin[ψ6], α - β - ϵ Sin[σ] + ζ Cos[τ]       - 
            2 λ Cos[ϕ]       + (Sqrt[3]) η Sin[χ6] - η Cos[χ6] + κ Cos[ψ6] - (Sqrt[3]) κ Sin[ψ6], α - β - ϵ Sin[σ] + ζ Cos[τ + ω] - 
            2 λ Cos[ϕ + ω] - (Sqrt[3]) η Sin[χ6] - η Cos[χ6] + κ Cos[ψ6] + (Sqrt[3]) κ Sin[ψ6], α - β - ϵ Sin[σ] + ζ Cos[τ - ω] - 
            2 λ Cos[ϕ - ω]                             2 η Cos[χ6]                      - 
            2 κ Cos[ψ6]}/12

As Q12 and D3C2 are noncommutative, the dual forms do not create angles that add on multiplication and cannot create true powers or roots.

Example 53. Q12 Cartesian & Polar-Dual interconversions.

id[Q12]; 
    Q12p = toPolar[{a, b, c, d, e, f, g, h, i, j, k, l}]

{a + b + c + d + e + f + g + h + i + j + k + l, 
a + 
        b + c - d - e - f + g + h + i - j - k - 
        l, 
(((a + b + c - g - h - i))^2) + (((d + e + f - j - k - l))^2), 
ArcTan[a + b + c - g - h - i, 
        d + e + f - j - k - 
          l], 
((((a - b + g - h))^2) + (((b - c + h - i))^2) + (((-a + c - g + i))^2))/2, 
ArcTan[
        2 a - b - c + 2 g - h - 
          i, -(Sqrt[3]) (b - c + h - 
              i)], 
((((d - e + j - k))^2) + (((e - f + k - l))^2) + (((-d + f - j + l))^2))/2, 
ArcTan[
        2 d - e - f + 2 j - k - 
          l, -(Sqrt[3]) (e - f + k - 
              l)], 
((((a - b - g + h))^2) + (((-a + c + g - i))^2) + (((b - c - h + i))^2))/2, 
ArcTan[
        2 a - b - c - 2 g + h + 
          i, -(Sqrt[3]) (b - c - h + 
              i)], 
((((d - e - j + k))^2) + (((-d + f + j - l))^2) + (((e - f - k + l))^2))/2, 
ArcTan[
        2 d - e - f - 2 j + k + 
          l, -(Sqrt[3]) (e - f - k + l)]}

Q12αβϵσζτλϕηχϰψ

    {  (α + β + 2 ϵ Cos[σ] + 
            4 ζ Cos[τ]      + 
            4 η Cos[χ]), 
(α + β + 2 ϵ Cos[σ] + 4 ζ Cos[τ + ω] + 
            4 η Cos[χ + ω]), 
(α + β + 2 ϵ Cos[σ] + 
            4 ζ Cos[τ - ω] + 
            4 η Cos[χ - ω]), 
(α - β + 2 ϵ Sin[σ]      + 
            4 λ Cos[ϕ]      + 
            4 ϰ Cos[ψ]), 
(α - β + 2 ϵ Sin[σ]      + 
            4 λ Cos[ϕ + ω] + 
            4 ϰ Cos[ψ + ω]), 
(α - β + 
            2 ϵ Sin[σ]      + 
            4 λ Cos[ϕ - ω] + 
            4 ϰ Cos[ψ - ω]), 
(α + β - 2 ϵ Cos[σ] + 
            4 ζ Cos[τ]          - 
            4 η Cos[χ]), 
(α + β - 2 ϵ Cos[σ] + 4 ζ Cos[τ + ω] - 
            4 η Cos[χ + ω]), 
(α + β - 2 ϵ Cos[σ] + 
            4 ζ Cos[τ - ω] - 
            4 η Cos[χ - ω]), 
(α - β - 2 ϵ Sin[σ]       + 
            4 λ Cos[ϕ]      - 
            4 ϰ Cos[ψ]), 
(α - β - 2 ϵ Sin[σ]       + 
            4 λ Cos[ϕ + ω] - 
            4 ϰ Cos[ψ + ω]), 
(α - β - 
            2 ϵ Sin[σ]       + 
            4 λ Cos[ϕ - ω] - 
            4 ϰ Cos[ψ - ω])}/12

Example 54. General D3C2 orbit.

id[D3C2];  
    D3C2p = toPolar[{a, b, c, d, e, f, g, h, i, j, k, l}]

{a + b + c + d + e + f + g + h + i + j + k + l, 
      a + b + c - d - e - f + g + h + i - j - k - l, 
a + 
        b + c + d + e + f - g - h - i - j - k - l, 
      a + b + c - d - e - f - g - h - i + j + k + 
        l,  ((((a - b + g - h))^2) + (((b - c + h - i))^2) + (((-a + c - g + i))^2))/2,   ArcTan[
        2 a - b - c + 2 g - h - 
          i, -(Sqrt[3]) (b - c + h - 
              i)],  ((((-d + e - j + k))^2) + (((d - f + j - l))^2) + (((-e + f - k + l))^2))/2, 
      ArcTan[-2 d + e + f - 2 j + k + 
          l, -(Sqrt[3]) (-e + f - k + 
              l)], ((((a - b - g + h))^2) + (((-a + c + g - i))^2) + (((b - c - h + i))^2))/2,   ArcTan[
        2 a - b - c - 2 g + h + 
          i, -(Sqrt[3]) (b - c - h + 
              i)],  ((((-d + e + j - k))^2) + (((-e + f + k - l))^2) + (((d - f - j + l))^2))/2, 
      ArcTan[-2 d + e + f + 2 j - k - 
          l, -(Sqrt[3]) (-e + f + k - l)]}

D3C2αβγδζτλϕηχϰψ

    {  (α + β + γ + δ + 
            4 ζ Cos[τ]      + 
            4 η Cos[χ]), 
(α + β + γ + δ + 4 ζ Cos[τ + ω] + 
            4 η Cos[χ + ω]), 
(α + β + γ + δ + 
            4 ζ Cos[τ - ω] + 
            4 η Cos[χ - ω]), 
(α - β + γ - δ       - 
            4 λ Cos[ϕ]       - 
            4 ϰ Cos[ψ]), 
(α - β + γ - δ       - 
            4 λ Cos[ϕ + ω] - 
            4 ϰ Cos[ψ + ω]), 
(α - β + γ - δ       - 
            4 λ Cos[ϕ - ω] - 
            4 ϰ Cos[ψ - ω]), 
(α + β - γ - δ + 
            4 ζ Cos[τ]       - 
            4 η Cos[χ]), 
(α + β - γ - δ + 4 ζ Cos[τ + ω] - 
            4 η Cos[χ + ω]), 
(α + β - γ - δ + 
            4 ζ Cos[τ - ω] - 
            4 η Cos[χ - ω]), 
(α - β - γ + δ       - 
            4 λ Cos[ϕ]       + 
            4 ϰ Cos[ψ]), 
(α - β - γ + δ       - 
            4 λ Cos[ϕ + ω] + 
            4 ϰ Cos[ψ + ω]), 
(α - β - γ + δ       - 
            4 λ Cos[ϕ - ω] + 
            4 ϰ Cos[ψ - ω])}/12

Dozal algebra has been investigated because of its potential as a particle paradigm, having just enough variety to describe fundamental particles. 39 functions have been found to be conserved by one or more of the five Dozal group multiplications. The following table shows (for the first 23) those functions that are sizes (irreducible determinant factors) as "i",  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.) Preliminary speculations about the relation between functions and particle properties are also included. 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.

No. Name C3C4 Q12 C3K D3C2 A4 Property?
1   o1   i    i   i   i    i   
2   o2   i    i   i   i       Charge
3   o3            i   i       Hypercharge
4   o4            i   i       
5  l22a  i
6  l22b  i
7   p22  o    o   o   o       
8   q22  i    i   o   o       Leptons
9   r22  c    c   c   c       
10  s22           c   c    i   
11  p23  i    n   i   n       u Quarks
12  q23  i    n   i   n       d Quarks    
13  r23  o    n   i   n       
14  s23  o    n   i   n       
15  q24  o    o   o   o       metric(0,4)
16  p24           o   o       Minkowski(1,3)
17  p26       i       i       
18  q26  o    o   n   i       s Quarks
19  r26  o    n   o   o       c Quarks
20  s26  o    i   o   o
21  l3                     i  Discriminant
22  l4
23  l4p  c    n   c   n
24  l4q  o    n   c   n
25  l4r       n       n
26  l4s  c    n   o   n       Gravity??

This topic needs to be explored in more detail. The implications of remainders being split-off have yet to be explored. GroupLoopTest.nb includes extensive tabulations of functions that are conserved in various Dozal operations; I hope to correlate them with particle properties

Conservation, general vector.

Arbitrary vectors (with no sizes zero) are multiplied using the Dozal hoops, and conservation is recorded.

A = { .2, 1. , 1.3,  .7,  .4,  .6,  .5,  .9,  .8, 0,  .1,  .2}; 
    B = { .3, 2. , 1. , 0. , 4,  .66,  .55,  .7,  .8,  .9, 1.1, 1.2}; 
    AB = hoopTimes[A, B, "C3C4"];
res = 
      Transpose {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
          Chop[sab - sasb, 10^-8], Range[26]}; cs = {"C3C4"}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, i]], {i, 
        39}];
res = 
      Chop[{sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
          Chop[sab - sasb, 10^-8]}]; AppendTo[cs, "\nNames"]; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

AB = hoopTimes[A, B, "Q12"];
res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[26]}; cs = {"Q12"}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, i]], {i, 
        39}];
res = 
      Chop[{sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
          Chop[sab - sasb, 10^-8]}]; AppendTo[cs, "\nNames"]; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

id[C3K]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[26]}; cs = {"C3K"}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, i]], {i, 
        39}];
res = 
      Chop[{sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
          Chop[sab - sasb, 10^-8]}]; AppendTo[cs, "\nNames"]; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

AB = hoopTimes[A, B, "D3C2"];
res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[26]}; cs = {"D3C2"}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, i]], {i, 
        39}];
res = 
      Chop[{sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
          Chop[sab - sasb, 10^-8]}]; AppendTo[cs, "\nNames"]; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

AB = hoopTimes[A, B, "A4"];
res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[26]}; cs = {"A4"}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, i]], {i, 
        39}];
res = 
      Chop[{sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
          Chop[sab - sasb, 10^-8]}]; AppendTo[cs, "\nNames"]; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

Summary.

C3C4 conserves o1, o2, l22a, l22b, q22, r23,       p23, q23,        l4p, l4s, L4a6
Q12 conserves   o1, o2,                 q22, r22,            p26,s26
C3K conserves  o1, o2, o3, o4,              r22, s22, p23, q23,  r23, s23, l4p, l4q, L4a6,L4b6
D3C2 conserves o1, o2, o3, o4,             r22, s22,     p26,   q26, 
A4 conserves     o1,                                               p23,            l3.

Conservation, unitary vector, equal angles.

Now look at unitary vectors (so A4 must be omitted) and sh12 by inserting the names in the hidden cell:-

cs = {id["C3C4"], "conserves"}; 
    A = Chop[toVector[{3. , -1. /3, 4. , 0.1, 1. /4, 0.1, 8. /3, 0.1, 
            3. /5. , 0.1, 5. /8, 0.1}]];
B = 
        Chop[toVector[{2. ,  .5, 3. /5, 0.2, 5/3. , 0.2, 4/7, 0.2, 7/5. , 
              0.2, 4/5, 0.2}]];
AB = hoopTimes[A, B];
res = 
      Chop[Transpose[{sa = sh12[A], sb = sh12[B], sab = sh12[AB], 
            sasb = sa sb, Chop[sab - sasb, 10^-8], 
            Range[39]}]];Do[
      If[res[[i, 5]] == 0, AppendTo[cs, ds[[i]]]], {i, 
        39}];cs

Summary

Conservation, unitary vector, no angles zero.

Random angle:-

cs = {id[D3C2], "random angles"}; 
    A = Chop[toVector[{3. , -1. /3, 4. ,  .1, 1. /4,  .2, 8. /3,  .3, 
            3. /5. , 0.4, 5. /8,  .5}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2,  .12, 2/3. ,  .34, 4/5,  .56, 
            4/5. ,  .78, 25/16,  .11}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

Summary

Equal angles (except first) :-

cs = {id[C3C4], " Equal angles"}; 
    A = Chop[toVector[{3. , -1. /3, 4. ,  .1, 1. /4,  .2, 8. /3,  .2, 
            3. /5. , 0.2, 5. /8,  .2}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2,  .1, 2/3. ,  .1, 4/5, 0.1, 4/5. , 
            0.1, 25/16, 0.1}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

cs = {id[Q12], " Equal angles"}; 
    A = Chop[toVector[{3. , -1. /3, 4. ,  .1, 1. /4,  .2, 8. /3,  .2, 
            3. /5. , 0.2, 5. /8,  .2}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2,  .1, 2/3. ,  .1, 4/5, 0.1, 4/5. , 
            0.1, 25/16, 0.1}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

cs = {id[C3K], "Equal angles"}; 
    A = Chop[toVector[{3. , -1. /3, 4. ,  .1, 1. /4,  .2, 8. /3,  .2, 
            3. /5. , 0.2, 5. /8,  .2}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2, 0, 2/3. ,  .1, 4/5, 0.1, 4/5. , 
            0.1, 25/16, 0.1}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

cs = {id[D3C2], "Equal angles"}; 
    A = Chop[toVector[{3. , -1. /3, 4. ,  .1, 1. /4,  .2, 8. /3,  .2, 
            3. /5. , 0.2, 5. /8,  .2}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2, 0, 2/3. ,  .1, 4/5, 0.1, 4/5. , 
            0.1, 25/16, 0.1}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

id[Q12]; 
    A = Chop[toVector[{3. , -1. /3, 4. ,  .0, 1. /4,  .0, 8. /3,  .0, 
            3. /5. , 0.0, 5. /8,  .0}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2,  .1, 2/3. ,  .0, 4/5, 0.0, 4/5. , 
            0.0, 25/16, 0.0}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[26]}; 
    cs = {"Q12uni,zeroangle"}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, i]], {i, 
        26}];
res = 
      Chop[{sa = dozalcons[A], sb = dozalcons[B], sab = dozalcons[AB], 
          sasb = sa sb, Chop[sab - sasb, 10^-8]}]; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, dname[[i]]]], {i, 
        16}]; cs

zero angles:-

cs = {id[C3C4], " zero angles"}; 
    A = Chop[toVector[{3. , -1. /3, 1. ,  .2, 1. /3,  .3, 8. /3,  .3, 
            3. /5. ,  .3, 5. /8,  .3}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2,  .1, 2/3. ,  .1, 4/5, 0.1, 4/5. , 
            0.1, 25/16, 0.1}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

cs = {id[Q12], " zero angles"}; 
    A = Chop[toVector[{3. , -1. /3, 1. ,  .2, 1. /3,  .3, 8. /3,  .3, 
            3. /5. ,  .3, 5. /8,  .3}]];
B = 
      Chop[toVector[{-2. ,  .5, 3. /2,  .1, 2/3. ,  .1, 4/5, 0.1, 4/5. , 
            0.1, 25/16, 0.1}]]; AB = hoopTimes[A, B]; 
    res = {sa = sh12[A], sb = sh12[B], sab = sh12[AB], sasb = sa sb, 
        Chop[sab - sasb, 10^-8], Range[39]}; 
    Do[If[res[[5, i]] == 0, AppendTo[cs, ds[[i]]]], {i, 39}]; 
    cs

Summary

10.3. Unital Subalgebras, Chirality, Polarization,

Constraining any set of sizes to multiply to 1 (ignoring zero sizes) gives a constrained sub-algebra. Signed-tables are sub-algebras of loops, for the introduction of negation (via equivalence relations) constrains one or more of the loop sizes to be zero. The offsets and squared radii of polar algebras are sizes in the algebra. Setting some offsets and squared radii to 0 gives subalgebras that are even more constrained, being restricted to a subspace of the full algebra (which is already a subspace of the parent loop). Setting the product of the remaining sizes to 1 gives "unital" subalgebras, in which the determinant is 1 (after factoring-out the irrelevant zeroes). Products in these algebras remain within the constraints. The expressions C3Kv & C3Kp for vector-polar interconversions in the C3K hoop were set up in section 10.1. They simplify to unital algebras when the offsets and radii are constrained to be 1:-

Example 52. C3K Orbits are Chiral.

C3KOrbit  =  
      Simplify[C3Kv /. {o1 -> 1, o2 -> 1, o3 -> 1, 
            o4 -> 1, p -> 1, q -> 1, r -> 1, s -> 1, 
            2 π/3 -> ω, 
            4  π/3 -> 2  ω}]

{ (         Cos[pa] +          Cos[
              qa] +          Cos[ra] +          Cos[sa] + 
            2),  (Cos[   ω + pa] + Cos[   ω + qa] + 
            Cos[   ω + ra] + Cos[   ω + sa] + 
            2),  (Cos[2  ω + pa] + Cos[2  ω + qa] + 
            Cos[2  ω + ra] + Cos[2  ω + sa] + 
            2),  (        Cos[pa] -          Cos[
              qa] +          Cos[ra] -     Cos[
              sa]),  (Cos[   ω + pa] - 
            Cos[   ω + qa] + Cos[   ω + ra] - 
            Cos[   ω + sa]),  (Cos[2  ω + pa] - 
            Cos[2  ω + qa] + Cos[2  ω + ra] - 
            Cos[2  ω + sa]), (        Cos[
              pa] +          Cos[qa] -         Cos[
              ra] -          Cos[
              sa]),  (Cos[   ω + pa] + 
            Cos[   ω + qa] - Cos[  ω + ra] - 
            Cos[   ω + sa]),  (Cos[2  ω + pa] + 
            Cos[2  ω + qa] - Cos[2  ω + ra] - 
            Cos[2  ω + sa]),  (        Cos[
              pa] -          Cos[qa] -          Cos[
              ra] +          Cos[
              sa]),  (Cos[   ω + pa] - 
            Cos[   ω + qa] - Cos[   ω + ra] + 
            Cos[   ω + sa]),  (Cos[2  ω + pa] - 
            Cos[2  ω + qa] - Cos[2  ω + ra] + 
            Cos[2  ω + sa])}/6

Angle pa contributes four sets of three-phase sinusoids in a clockwise arrangement, Cos[pa], Cos[2 π/3+pa], Cos[4 π/3+pa]. Angle qa gives two sets of six-phase sinusoids, Cos[qa], Cos[2 π/3+qa], Cos[4 π/3+qa], -Cos[qa], -Cos[2 π/3+qa], -Cos[4 π/3+qa]. Angles ra, sa also give two sets of six-phase sinusoids, but with different sequences. These are all chiral; negating the angles reverses the chirality.
	If any two angles are linked, e.g. by putting qa=pa+ϕ, they form polarized phases:-

Example 53. C3K Orbits can exhibit Polarizations.

Simplify[C3KOrbit /. {qa -> pa, sa -> ra}]

{ (1 + Cos[pa] + Cos[ra]),  (1 + Cos[pa + 2 π/3] + 
            Cos[2 π/3 + ra]),  (1 + Cos[pa + 4 π/3] + 
            Cos[4 π/3 + ra]), 0, 0, 
        0,  (Cos[pa] - Cos[ra]),  (Cos[pa + 2 π/3] - 
            Cos[2 π/3 + ra]),  (Cos[pa + 4 π/3] - 
            Cos[4 π/3 + ra]), 0, 0, 0}/3

Another unital possibility is that two or more sizes are in a reciprocal relationship, with their product constrained to be 1. If two squared radii are reciprocal (one very small, the other very large), the result could be the so-called "law of large numbers", the observation that some large and small characteristics of the universe have magnitudes that are (approximately) powers of (10^40). This is illustrated in Example 54, by making rr.ss=1, and writing them as r & R. All the offsets have been set to 1 and qa=pa for simplicity. The C3K orbits have phases with amplitudes (p±q)/6, R/6, and r/6. If r is very small & R is very large, the other terms resemble "curled-up" Kaluza-Klein terms and the R terms resemble a space curvature, whilst r is curled much more tightly than the Kaluza-Klein terms. Also the amplitudes p+q and p-q can give six phases with very small amplitudes if p-q is small. I speculate that this relates to point-like particles.

Example 54. C3K Orbits with reciprocal Radii. "Law of Large Numbers"?

C3KR = 
      Simplify[C3KOrbit
 /. {qa -> pa, o1 -> 1, 
              o2 -> 1, o3 -> 1, o4 -> 1}] /. {(Sqrt[pp]) -> 
            p, (Sqrt[qq]) -> q, (Sqrt[rr]) -> R, (Sqrt[ss]) -> r}

{  ((p + q) Cos[pa]                + 
            R Cos[ra]                + 
            r Cos[sa]                + 
            2),  ((p + q) Cos[pa + 2 π/3] + 
            R Cos[2 π/3 + ra] + r Cos[2 π/3 + sa] + 
            2),  ((p + q) Cos[pa + 4 π/3] + 
            R Cos[4 π/3 + ra] + r Cos[4 π/3 + sa] + 
            2),  ((p - q) Cos[pa]                + 
            R Cos[ra]               -  
            r Cos[sa]),  ((p - q) Cos[pa + 2 π/3] + 
            R Cos[2 π/3 + ra] - 
            r Cos[2 π/3 + sa]),  ((p - q) Cos[
                pa + 4 π/3] + R Cos[4 π/3 + ra] - 
            r Cos[4 π/3 + sa]),  ((p + q) Cos[
                pa]                - 
            R Cos[ra]               -  
            r Cos[sa]),  ((p + q) Cos[pa + 2 π/3] - 
            R Cos[2 π/3 + ra] - 
            r Cos[2 π/3 + sa]),  ((p + q) Cos[
                pa + 4 π/3] - R Cos[4 π/3 + ra] - 
            r Cos[4 π/3 + sa]),  ((p - q) Cos[
                pa]                - 
            R Cos[ra]               +  
            r Cos[sa]),  ((p - q) Cos[pa + 2 π/3] - 
            R Cos[2 π/3 + ra] + 
            r Cos[2 π/3 + sa]), ((p - q) Cos[
                pa + 4 π/3] - R Cos[4 π/3 + ra] + 
            r Cos[4 π/3 + sa])}/6

10.4. Hoops & Anti-Hermitian Matrix Multiplication.

Hoops multiplication is not matrix multiplication, but hoop products can be obtained by matrix multiplication of the matrices lmatrix & rmatrix. These are the matrix equivalents of the corresponding hoop; the multiplication of two vectors can be effected by mapping one vector onto lmatrix or rmatrix and then dot multiplying the result by the second vector. (Hoop multiplication is conceptually simpler!) This is demonstrated with the signed table C8r :-

Example 55. Hoop multiplication by mapping vecs onto lmatrix or rmatrix.

{C8r = ts[ca[8, 5]]; "C8r =   ", C8r // tf, "\nlmatrix =", 
      l4 = lmatrix[C8r] // tf, "\nrmatrix =", 
      r4 = rmatrix[C8r] // tf, "\nC8r product of A", 
      A = {6. , 1, 2, 0}, " and B", B = {5. , 0. , 3, 7}, "\ngives", 
      AB  = hoopTimes[A, 
          B, "C8r"], 
"\nUsing the lmatrix dot \
product gives the same \nA=", la4 = gmap[l4, B]; la4 // tf, 
      la4 . A, 
"\nSo does the rmatrix dot product", 
      ra4 = gmap[r4, A]; "\nB.", ra4 // tf, "=", 
      B . ra4, "\nPlease ignore the extraneous commas!"}

This is true for all hoops, by the definition of rmatrix & lmatrix.  The matrices are anti-hermitian, insofar as their off-diagonal transposed elements are mutual inverses in the hoop table. Consequently, Hoop multiplication is always anti-hermitian.

10.5. Projection & ejection of wavicles.

If Dozal emulates physics, the stable particles (neutrinos, electron, positron, proton, antiproton) must be minimal orbits - they cannot eject something to give a simpler system. Electrons and protons have mass & charge, but are produced by decay of neutral more-massive particles and from uncharged massless photon pairs. This constrains the search space in the Dozal conserved functions. The factorization of L4 (x^2)-3(y^2) = (x+(Sqrt[3])y)(x-(Sqrt[3])y)  (which is not found by Mathematica) could be relevant, with (x-(Sqrt[3])y)→ℏ?
More work (and inspiration?) needed.

10.6. The Lepton family.

Three "electrons" e, μ, τ and their anti-particles. They have charge, half-spin, and mass.
Three "neutrinos" and their anti-particles. They have half-spin, and very small mass.
All are involved in weak-force interactions and are unaffected by the strong force. They do not have quark structures, so C3K & D3C2 are not relevant, as they only have terplex orbits. The relevant orbit is based on ϵ Cos[σ], with 3 repetitions of the 4 phases. These are common to C3C4 and Q12, but are absent from C3K and D3C2, where they are replaced by γ & δ, which combine to give a hyperbolic orbit. The α & β terms should relate to the neutrinos and the 3 generations. If α is charge, α=0 defines the electron neutrino and β=±1 must relate to muons and tauons.

10.7. The Hadron family.

I conjecture that Quarks are different phases of a multiphase system with 12-fold (Dozal) symmetry. Three, six, and 12-phase wave systems occur in the C3C4 and C3K polar duals.

11. Speculations about Mass & Gravity.

Hoop algebras give tantalizing suggestions about the re-interpretation of mathematical physics, which (at 77) I cannot expect to explore:-
  a. Hoop multiplication with remainders has analogies with particle interactions, and addition/subtraction (which conserves linear sizes) with particle combination and decay. 
  b. Time enters orbits as a separate "direction" parameter that cannot fold to a dimension. It may enter a "mixed metric" via a "city-blocks" contribution, whilst spatial dimensions remain pythagorean; interval = (t-(Subscript[t, 0])) - Sqrt[(((x-(Subscript[x, 0])))^2) + (((y-(Subscript[y, 0])))^2)+ (((z-(Subscript[z, 0])))^2)]. The L4 metric (Section 10.6) (((((((a-b))^2)+(((b-c))^2)+(((c-a))^2)+(((d-e))^2)+(((e-f))^2)+(((f-d))^2)))^2)-
3(((a(e-f)+b(f-d)+c(d-e)))^2)is non-negative. It simplifies (with a-b→w, b-c→x, d-e→y, e-f→z)  to ((((w^2)+w x+(x^2)+(y^2)+y z+(z^2)))^2) -3(((x y-w z))^2) and this factorises into  (w^2)+w x+(x^2)+(y^2)+y z+(z^2) ±(Sqrt[3])(x y-w z); this may provide a "6-vector" metric in which (x y-w z) is related to time, which is then a dependent variable. 
  c. A "Fixed Velocity PDE" describes (see Glossary) non-dispersive disturbances travelling in any number of directions at a fixed (light?) speed. If this applies to particles as wave-packets, Kaluza-Klein orbital velocities would provide mass by reducing spatial velocities below the speed of light; massless packets, with no KK velocity, would travel at light speed. Remember that wave-packets decay because of "dispersion", the variation of wave velocity with period, so fixed velocity packets do not decay..
  d.  Orbits must be "unital", the product of the non-zero sizes is 1. Some dimensions could be in a reciprocal relation, with large (curvature of space, (10^40)?) and small ((10^(-40))?) values, leaving some "force" (KK Planck-scale) fields. This could explain the "law of large numbers" conjecture - that several properties of the universe scale to powers of approximately (10^40).  Phases in the intermediate dimensions would describe non-point-like particles with an intrinsic Planck scale. Does orbit maths underly (and simplify) string maths?
  e. The 4-element Pauli-sigma hoop conserves the Minkowski metric t^2 - x^2 - y^2 - z^2, and is related to a group (describing (ℝ^(3, 1))) obtained by dot multiplication of the Dirac 4x4 gamma matrices. This group conserves a square of the Minkowski metric added to another squared term; it needs investigating in connection with gravity.
  f. Ternary symmetries occur without invoking octonion triality.

12. Conclusion.

Primal (unsigned continuous) numbers provide a more fundamental basis for mathematics than real or complex numbers. Loop multiplications of directors (indexed sets of primal coefficients) become algebras when a negation operation is supplied. Conservative "Hoop" algebras have the Frobenius determinant-conservation property, and provide a generalisation that includes many standard algebras used in particle physics. Noether's laws relate their conserved symmetries to particles and forces

The generalised function hoopTimes defines multiplication with any multiplication table or "loop". For conservative Moufang loops, if the shape function has been found for the table (or the table is smaller than 12×12 so the shape can be calculated in a reasonable time),  hoopShape & hoopInverse define division. This will be renormalisable (projecting onto a sub-space of reduced symmetry, ejecting remainders to maintain conservation) if there are at least two determinant factors - hence all group algebras have renormalising division because the sum of the elements always provides a first factor. For some tables, hoopPower, toPolar & toVector give consistent powers and roots via a polar or a hyperbolic transformation. hoopTest determines which algebraic properties are valid for any table. Algebras without renormalization are degenerate equivalence relations, with only one conserved factor, on more general algebras.

Many algebras have "signed tables" as multiplication rules. The signs +, - =(Sqrt[+1]), i=((+1)^(1/4)), and -i=(((((+1)^(1/4))))^3) must be extended to the "generalized signs" that are needed in mathematical physics; in particular 𝕜=(Sqrt[+1]), 𝕁=((+1)^(1/3)) and 𝕙=((+1)^(1/6)), which are needed to describe quark symmetries. Complex mathematics is a special case of mathematics involving generalized signs, such as multi-phase sinusoids.

	Renormalizing Orbit-Generating Equivalence Relation "ROGER" algebras may provide an explanation of fundamental particle properties. They have integer-spin and half-integer-spin quantum operators with multi-phase (polar or chiral) deBroglie-wave-like orbits and a stable finite Planck-area-like amplitude.

Renormalization corresponds to symmetry breaking by ejecting remainders and projecting the result into a constrained sub-algebra, which may relate to different full algebras (e.g. O4 is a sub-algebra of both C3K and C4K). Bosonic integer spin algebras (e.g. C3C2) are supersymmetries of fermionic half-integer spin algebras (e.g. C3K again) that describe quantum phenomena. In this interpretation, there are fewer supersymmetric particles than their (subsymmetric) partner particles! Pauli and Dirac matrix sub-algebras conserve the Minkowski metric; their full algebras conserve a quartic function that may relate to general relativity. The algebras that combine these particle and relativistic properties are too large for the author to investigate properly (even if he had the ability), but the properties of the universe may be emergent properties of conservative Moufang loop algebras.

I have made many discoveries that appear to be new, and I claim to have opened up a new area of mathematics and mathematical physics.

13. Appendix A. Loop operations.

Summary. Some operations that are relevant to groups and loops rather than hoops are collected here. Tests for group properties and the development of ge rules are included.

13.1 Loop Properties.

Example A1 demonstrates various property tests on Q12 and on the 16-element octonion groupoid "Oct", which is shown to be alternative & conservative. conservativeQ substitutes small random numbers into A & B and tests whether the product determinant equals the product of the multiplicand determinants. The groupoid "Alt12n" is then shown to be alternative but not conservative - alternativity does not imply conservativity. Functions for Q12 and some subgroups of Q12 are then evaluated.

\(\(\( (*\ \(Example\ A1 . \ 
              Properties\  &\)\ Functions\ *) \)\(\ \)\({"Q12 properties ", glo = Q12; "
abelian     ", abelianQ[], "
associative ", 
      associativeQ[], "
alternative ", 
      alternativeQ[], "
conservative", 
      conservativeQ[], "
moufang     ", 
      moufangQ[], "
flexible    ", flexibleQ[], "
flex        ", 
      flexQ[], "
entropic    ", entropicQ[], "
fenyves     ", 
      fenyvesQ[], "
negatable   ", negatableQ[], "
hamiltonian ", 
      hamiltonianQ[], "
jacobi      ", jacobiQ[], "
jordan      ", 
      jordanQ[], "

Oct properties ", 
      glo = cd[{\(-1\), \(-1\)}]; "
abelian     ", 
      abelianQ[], "
associative ", associativeQ[], "
alternative ", 
      alternativeQ[], "
conservative", 
      conservativeQ[], "
moufang     ", 
      moufangQ[], "
flexible    ", flexibleQ[], "
flex        ", 
      flexQ[], "
entropic    ", entropicQ[], "
fenyves     ", 
      fenyvesQ[], "
negatable   ", negatableQ[], "
hamiltonian ", 
      hamiltonianQ[], "
jacobi      ", jacobiQ[], "
jordan      ", 
      jordanQ[], "

Alt12n properties ", 
      glo = Alt12n; "
alternative ", 
      alternativeQ[], "
conservative", 
      conservativeQ[], 
"

Q12 centralizer ", 
      centralizer[3, Q12], "
Q12 period", 
      period[Q12], "
Q12 orderCount", 
      orderCount[Q12], "
Q12 centre", 
      centre[Q12], "
Q12 inverses ", 
      gInverse[Q12], "
Q12 subgroups=", 
      subgroups[Q12], "
Q12 subgroups are identified as ", 
      collect[subgroupTypes[sg]], "
Normal {1,4,7,10} in Q12?", 
      normalSubgroup[{1, 4, 7, 10}, 
        Q12], "
factorGroup of {1,2,3} in Q12 =", 
      factorGroup[{1, 2, 3}, Q12], "
allFactorGroups in Q12 =", 
      allFactorGroups[Q12], "
lcoset {1,2,3} in Q12 =", 
      lcoset[{1, 2, 3}, 
        Q12], "
C3C4 (q1202) is a 12-element subgroup of Q24 (shown by returning '2')", subgroups[ca[24, 11], 0, 12, 12, {2}]}\)\)\)

Example A2 demonstrates loops that have different combinations of properties. "type" is taken from dico, so that Abelian tables give real numbers, non-abelian tables give integers, signed tables give negated numbers, and unrecognised tables give zero. The tables with names "?" are not groups (but are shown to have normal subgroups by the hamiltonianQ test in Ex A3). The second row named ? is a non-conservative quasigroup created by cd[{-1,-1,1,{2}}] that is not in the database but has the same dico as Q8C2.

\(\(\( (*\ 
      Example\ A2 . \ 
          Properties\ of\ different\ tables\ *) \)\(\ \)\(res = {{"loop", "len", "type", "Abl'n", "AbelGr", "Alt", "Cons.", "Entr.", "Flex", "mouf"}, {"test", "", "", "xy=", "xy.z=", "xx.y=", "DetADetB=", "wx.yz=", "xy.z", "|zx.yx|="}, {"", "", "", "yx", "x.yz", "x.xy", "DetAB", "wz.yx", "x.yz", "|z.xy.z|"}}; 
    inc = {C3, cd[{\(-1\), \(-1\)}], P4, ts[ca[8, 5]], C5n, D3, C6n, 
        ca[8, 3], ca[10, 3], co[C3, C4, 2], Alt12n, 
        cd[{\(-1\), \(-1\), 1, {2}}], cd[{4. , 1, 1}], 
        cd[{\(-1\), \(-1\), \(-1\), {2}}], 
        cd[{\(-1\), \(-1\), \(-1\), \(-1\)}]};

    Do[AppendTo[
        res, {i = id[tst = inc[\([i]\)]]; 
          If[\ i == "Q8C2" || i === "Unrecognised", "?", i], 
          Length[tst], 
          If[i === "Unrecognised", 0, Sign[\(gd[]\)[\([3, 2, 1]\)]]], 
          abelianQ[tst], abelGrassmanQ[tst], alternativeQ[tst], 
          conservativeQ[tst], entropicQ[tst], flexQ[tst], 
          moufangQ[tst]}], {i, Length[inc]}]; res // tf\)\)\)

Example A3 demonstrates further properties with the same set of loops.

\(\(\( (*\ 
      Example\ A3 . \ 
          Further\ \(\(properties\)\(.\)\)\ *) \)\(\ \)\(res = {{"loop", "len", "type", "A_m", "bol", "C", "Hamilton", "Mouf", "moufL", "RIFF"}, {"test", "", "", "x(yx.zx)=", "(z.yz)x=", "(xy.y)z=", "Normal", "zx.yx=", "|(zy.z)x|=", "xy(z.xy)="}, {"", "", "", "(xy.xz)x", "z(y.zx)", "x(yy.z)", "subgrps", "z.xy.z", "|z(y.zx)|", "((x.yz))x)y"}}; 
    inc = {C3, cd[{\(-1\), \(-1\)}], P4, ts[ca[8, 5]], C5n, D3, C6n, 
        ca[8, 3], ca[10, 3], co[C3, C4, 2], Alt12n, 
        cd[{\(-1\), \(-1\), 1, {2}}], cd[{4. , 1, 1}], 
        cd[{\(-1\), \(-1\), \(-1\), {2}}], 
        cd[{\(-1\), \(-1\), \(-1\), \(-1\)}]};

    Do[AppendTo[
        res, {i = id[tst = inc[\([i]\)]]; 
          If[\ i == "Q8C2" || i === "Unrecognised", "?", i], 
          Length[tst], 
          If[i === "Unrecognised", 0, Sign[\(gd[]\)[\([3, 2, 1]\)]]], 
          amQ[tst], bolQ[tst], cQ[tst], hamiltonianQ[tst], MoufangQ[tst], 
          moufangLQ[tst], riffQ[tst]}], {i, Length[inc]}]; 
    res // tf

    inc =. \)\)\)

The conservativeQ test does not match any of the other tests exactly.  moufangQ  is the nearest, but passes Sed; AbelGrassmann is split by C8r / D3; alternativeQ is split by Octi / Alt12n; entropicQ fails for Oct; A_m fails for Qr; bolQ, CQ &HamiltonQ fail for C8r.
	Example A4 is a test-bed for newly discovered tables. It tests the signed table tst10  (from Example 10) for most of the programmed properties:-

{"abelian    ", 
      abelianQ(tst), "\nassociative ", 
      associativeQ(tst), "\nabelGrassman", 
      abelGrassmanQ(tst), "\nalternative ", 
      alternativeQ(tst), "\nam          ", 
      amQ(tst), "\nbol         ", bolQ(tst), "\nc           ", 
      cQ(tst), "\nentropic    ", entropicQ(tst), "\nflexible    ", 
      flexibleQ(tst), "\nfenyves     ", 
      fenyvesQ(tst), "\nflex        ", flexQ(tst), "\nhamiltonian ", 
      hamiltonianQ(tst), "\njacobi      ", 
      jacobiQ(tst), "\njordan      ", jordanQ(tst), "\nmoufang     ", 
      moufangQ(tst), "\nnegatable   ", 
      negatableQ(tst), "\nriff        ", riffQ(tst)}

hoopTimes[A,B,tst,1] uses a minimal multiplication routine, developed to test conservation of large tables that need not be in the databank. It is used below to test which compositions of Oct are conservative. (Only compositions with Abelian groups.) The table is conservative if 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[16, 7]]; 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)]}

13.2. Groups from Relators.

Most of the ge rules were discovered empirically, retaining the shortest wherever more than one gave a particular group. I later learned that they could be found by the GAP instruction:- gap>RelatorsOfFpGroup(Image(IsomorphismFpGroup(SmallGroup(mm,nn))));
this gives the result in terms of F1, F2, etc. The result can be copied (e.g. from a Wordpad document) and processed as in Example A6. The GAP formulation {2,2,3},{aa->b,ca->acc} is not the most compact form; the database rule for Q12 is {3,4},{"ba"->"a2b"}:-

Example A5. Gap relators & generators for SmallGroup(12,1)

{"The GAP Relators for SmallGroup{12,1) are F1^2*F2^-1, F2^-1*F1^-1*F2*F1, F3^-1*F1^-1*F3*F1*F3^-1, F2^2, 
  F3^-1*F2^-1*F3*F2, F3^3\nThey convert to",\(Hold[\ F1^2*F2^\(-1\), \ F2^\(-1\)*F1^\(-1\)*F2*F1, \ 
              F3^\(-1\)*F1^\(-1\)*F3*F1*F3^\(-1\), \ 
              F2^2, \ 
\ \ F3^\(-1\)*F2^\(-1\)*F3*F2, \ F3^3] /. {F1 -> a, 
              F2 -> b, F3 -> c}\),"\nwhich translates to {2,2,3},{aa->b,ca->acc}.\nThis generates",id[
          ge[{2, 2, 3}, {aa -> b, ca -> acc}]],"\nData",gd[]}

The ba/ba etc cases are handled automatically by ge and are ignored. 
The (a^n), (a^n)/b & (a^n)/(b^m) etc. cases define n for the members of the generator power list. 
(a^n)/b & (a^n)/(b^m) imply non-abelian rules "an"->"b" & "an"->"bm". 
ba/(ba,c)  becomes "ba"->"abc". (KnC4)
ba/(ba,cb) becomes "ba"->"abc".  
ca/(ca,c) becomes "ca"->"acc". (Q12)
ba/(ba,(a^(n - 1))) becomes "ba"->"anb" (g2003)
cb/(cb,(c^(n - 1))) becomes "cb"->"bcn"
ba/(ba,yxc)  becomes "ba"->"abcxy"
ba/(ba,yxb)  becomes "ba"->"abxy" (SL23).  
g4828, g4829 and g6005 ("A5") have terms that have not been resolved. E.g. A5 gives a5/b5, a5/baba, 1/aa bb/aa bb.

14. Appendix B. Signed Table Search.

This appendix demonstrates the search for a reordering that allows a table to be folded. dico is first inspected. The counts must be divisible by r to allow r-fold folding. In the example they are 12, 4, (Subscript[8, 2]) (the 23 is a diagnostic, not a count) and so r may be 2 or 4.

tst2 = mp["KiC4M"] ;
id[tst2]
gd[]

A partial reordering is compared with the required form for the (m/2+1)th row, and modified in an obvious way to correct the errors. In this case, the 17'th column is not correct, and the table does not 2-fold.

ord = 
      Flatten[Table[
          Position[tst2[[17]], Mod[i + 16, 32, 1]], {i, 32}]]

tst = reorder[tst2, ord];
{Range[17, 32], Take[tst[[17]], 16], Take[tst[[17]], -16], 
        Range[16]} // tf

tst = 
        reorder[tst2, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
            17, 20, 19, 18, 23, 24, 21, 22, 25, 28, 27, 26, 31, 32, 29, 
            30}];
{Take[tst[[17]], 16], Take[tst[[17]], -16]} // 
      tf
Transpose[tst][[17]]

The other 32-element Moufang Loops also fail:-

tstp = mp["P16M"] ;
name = id[tstp]
gd[]
ord = 
      Flatten[{Range[16], 
          Table[Position[tstp[[17]], Mod[i + 16, 32, 1]], {i, 17, 
              32}]}]

tst = reorder[tstp, ord];
{Take[tst[[17]], 16], Take[tst[[17]], -16]} // 
      tf
Transpose[tst][[17]]

tstc = mp["C8pC2M"] ;
name = id[tstc]
gd[]
ord = 
      Flatten[{Range[16], 
          Table[Position[tstc[[17]], Mod[i + 16, 32, 1]], {i, 17, 
              32}]}]
tst = reorder[tstc, ord];
{Take[tst[[17]], 16], Take[tst[[17]], -16]} // 
      tf
Transpose[tst][[17]]

tstq = mp["Q8C2M"] ;
name = id[tstq]
gd[]
ord = 
      Flatten[{Range[16], 
          Table[Position[tstq[[17]], Mod[i + 16, 32, 1]], {i, 17, 
              32}]}]
tst = reorder[tstq, ord];
{Take[tst[[17]], 16], Take[tst[[17]], -16]} // 
      tf
Transpose[tst][[17]]

tsto = mp["O16"] ;
name = id[tsto]
gd[]
ord = 
      Flatten[{Range[16], 
          Table[Position[tsto[[17]], Mod[i + 16, 32, 1]], {i, 17, 
              32}]}]
tst = reorder[tsto, ord];
{Take[tst[[17]], 16], Take[tst[[17]], -16]} // 
      tf
Transpose[tst][[17]]

Unresolved problem with ts??

id[tst = ts[cd[{-1, 1, 1}]]]
tst // tf

15. Appendix C. The Hypercomplex Plane, arcTanh.

toHypolar & toHyvector provide coordinates in the hypercomplex plane. (I have not explored the relationship between this and the "Projected Hyperbolic Plane" discussed in Penrose 2004.) An extended definition of ArcTanh (as arcTanh[adj,opp]) accounts for the octant of the arguments (this makes the resulting angle complex in 6 octants). Cosh and Sinh are used in definitions of tohyVec such as:-

tohyPol[{a_, b_}, "C2"] := 
      Chop[{(a^2) - (b^2), arcTanh[a, b]}]
tohyVec[{uu_, ϕ_}, "C2"] := 
      Chop[(Sqrt[uu]) {Cosh[ϕ], Sinh[ϕ]}]

?? arcTanh

This definition was brought to my attention by "Klueless", sci.math.symbolic, May 2001, and implemented by me in Mathematica for tohyPol & tohyVec. Example 35 (Section 6.2) showed that complex values are handled successfully. The different combinations of real coordinates and complex angles are illustrated below.

Example C1. arcTanh.

{"arcTanh[2, 1]  is  ", 
      arcTanh[2, 1], "\narcTanh[-2, 1]  is ", 
      arcTanh[-2, 1], "\narcTanh[-2,-1]  is  ", 
      arcTanh[-2, -1], "\narcTanh[ 2,-1]  is ", 
      arcTanh[2, -1], "\narcTanh[ 1, 2]  is  ", 
      arcTanh[1, 2], "\narcTanh[-1, 2]  is ", 
      arcTanh[-1, 2], "\narcTanh[-1,-2]  is  ", 
      arcTanh[-1, -2], "\narcTanh[ 1,-2]  is ", 
      arcTanh[1, -2], "\narcTanh[1,2+\[ImaginaryI]]  is  ", 
      arcTanh[1, 2 + I]}

Example C2. Hyperbolic Plane.

xy = 
          Table[tohyVec[{1, th}, "C2"], {th, -1.6, 1.6,  .1}];
xy1 = I Table[
                tohyVec[{1, th}, "C2"], {th, 
                  1.6 - I π/
                        2, -1.6 - I π/2, - .1}];
xy2 = 
            Table[tohyVec[{1, 
                  th}, "C2"], {th, -1.6 + I π, 
                1.6 + I π,  .1}];
xy3 = I Table[
                tohyVec[{1, th}, "C2"], {th, 
                  1.6 + I π/
                        2, -1.6 + I π/2, - .1}];
xy7 = I Table[
              tohyVec[{-1.5, th}, "C2"], {th, -1.4, 1.4,  .1}];
xy6 = 
            Table[tohyVec[{-1.5, th}, "C2"], {th, 
                1.4 - I π/2, -1.4 - I π/
                      2, - .1}];
xy5 = I Table[
                tohyVec[{-1.5, 
                    th}, "C2"], {th, -1.4 + I π, 
                  1.4 + I π,  .1}];
xy8 = 
          Table[tohyVec[{-1.5, th}, "C2"], {th, 
              1.4 + I π/2, -1.4 + I π/
                    2, - .1}];
xy9 = 
          Table[Re[
              tohyVec[{ .8  I, th}, "C2"]], {th, -2.05, 
              2.05,  .1}];xy10 = 
              Table[Re[tohyVec[{ .8  I, th}, "C2"]], {th, 
                  2.05 - I π/
                        2, -2.05 - I π/2, - .1}];
xy11 = 
            Table[Re[
                tohyVec[{ .8  I, 
                    th}, "C2"]], {th, -2.05 + I π, 
                2.05 + I π,  .1}];
xy12 = 
            Table[Re[tohyVec[{ .8  I, th}, "C2"]], {th, 
                2.05 + I π/
                      2, -2.05 + I π/2, - .1}];
xyp = 
            Flatten[{xy9, xy10, xy11, xy12, xy, xy1, xy2, xy3, xy5, xy6, xy7, 
                xy8}, 1];
ListPlot[xyp, PlotJoined -> True, 
          AspectRatio -> Automatic, 
          PlotRange -> {{-2, 2}, {-2, 2}} ];

16. Appendix D. Loop Factors, Shapes, Duals.

Summary. Shapes are the factors of protoloops. Many loop factors are tabulated. Techniques to find factors are discussed.

D.1 Significance of & Tables for Loop Determinant Factors.

Every group, and many hoops, have more than one determinant factor. Non-abelian hoops have repeated factors [11]. The structure of the factors provides a significant indicator of loop inter-relationships, as well as indicating whether polar duals can be defined. In many cases the structure can be found by fp and expressed compactly by abbrFactors. The following tables give these compact expressions for hoops of various sizes. Monosized hoops are omitted. The output lists linear, quadratic, cubic and quartic factors in order, with superscripts to show repeated factors, subscripts to show the number of instances. E.g. S4 has the determinant structure {(Subscript["1", 2]), ("2"^"2"), (Subscript["3", 2]^("3"))}, indicating two different linear factors, one quadratic factor that is repeated, and two cubic factors, each repeated three times.

Ex. D1. Loop factor structure.

Unprotect[j]; tst = {}; ll = {3, 4, 6, 8, 12, 16}; 
    Do[j = ll[[n]]; 
      Do[len = abbrFactors[test = mp[j, i]]; 
        If[len ≠ {"0"}, AppendTo[tst, {len, id[test]}]], {i, 
          Length[loop[[j]]]}], {n, Length[ll]}]; 
    len = Floor[Length[tst]/5];
Table[{tst[[i]], tst[[i + len]], tst[[i + 2  len]], 
          tst[[i + 3  len]], tst[[i + 4  len]]}, {i, len}] // 
      tf

The following cases needed tables from other files:-

(({{{{(Subscript[1, 2]), 2, (Subscript[2, 2]^2), (Subscript[6, 2]^2)}, 
                  Q36}, {{(Subscript[1, 4]), (Subscript[2, 2]^2), (Subscript[6, 2]^2)}, 
                  D18}, {{(Subscript[1, 2]), 2, (Subscript[2, 8]^2)}, 
                  C3nQ12}, {{(Subscript[1, 4]), (Subscript[2, 4]^2), (4^4)}, 
                  D3D3}, {{(Subscript[1, 4]), (Subscript[2, 8]^2)}, E18C2}}, {{{(Subscript[1, 2]), 12, (Subscript[2, 3]), 4, (Subscript[6, 2])}, C36}, {{(Subscript[1, 4]), (Subscript[2, 4]), (Subscript[6, 4])}, 
                  C18C2}, {{(Subscript[1, 2]), (Subscript[2, 9]), (Subscript[4, 4])}, 
                  C12C3}, {{1, (Subscript[2, 4]), (3^3), (6^3)}, 
                  A4C3}, {{(Subscript[1, 4]), (Subscript[2, 16])}, C6C6}}, {{{1, 2, (3^3), 6, (6^3)}, 
                  g3603}, {{(Subscript[1, 2]), (Subscript[2, 3]), (Subscript[2, 2]^2), 4, (Subscript[4, 2]^2)}, 
                  Q12C3}, {{(Subscript[1, 2]), 2, (Subscript[4, 2]^4)}, 
                  g3609}, {{(Subscript[1, 4]), (Subscript[2, 4]), (Subscript[2, 2]^2), (Subscript[4, 2]^2)}, 
                  D6C3}, {}}}))

D.2 Creating Shapes and Duals.

?hoopShape

Known shapes are stored as sh["mnemonic"], which also defines the lists gi, together with (where polar duals occur) gp, and (where known) plex. hoopShape will attempt to create a shape if it is not in the database. gi contains the location of the 1's in the protoloop, with signs attached (see below about i & 𝕁 signed tables), followed by the multiplicity m of the sizes in the determinant. hoopInverse needs the location and the sign of the 1's to define the Cramer's method (∂_variable)[(size^m)]/(size^m) terms. The exponent becomes a multiplier for the size. Powers do not result in the usual sets of partial fractions for repeated factors, because of the form of the derivation expression; a single partial fraction is created, weighted by the multiplicity. gp is a list used by hoopPower to distinguish between sizes (1) and angles (0.) in polar forms. Finally, the sizes (stripped of multiplicities) are provided. Example D.2 demonstrated the process for the Q12r loop, which is a signed table obtained from Q12, ca[12,5]. In this case, frag fails with the second size, but the correct fragmentation was deduced by inspection of the diagnostic output given by frag[ff[[2]],1].

Example D.2 Shape Creation for Q12r

tst = ts[ca[12, 5]]; {"Q12r Table", tst // tf, "\nFactors", 
      ff = fa[tst], "\nFragmented first size", 
      frag[ff[[1]]]}

frag[ff[[2]], 1]

The signs in the proposed fragments can be corrected by inspection:-

Expand[((a^2) + (b^2) + a c + (c^2) + b d + (d^2) - 
            a e + c e + (e^2) - b f + d f + 
            (f^2)) - ((((a + c))^2) + (((c + e))^2) + (((a - e))^2) + (((b + d))^2) + (((d + f))^2) + (((b - f))^2))/2]

The 1's are in columns 1, 2, 5, 4, 3, & 6, and all but the first are negated; the size multiplicities are 1 & 2; this fixes gi.
 As there are no shapes larger than quadratics, a polar form exists. It is created below, and has alternating sizes and angles, so gp can be specified. (The following cells are copied from the database, and are made non-evaluatable here.)

\(\(sh["Q12r"] := 
        Module[{}, gi = {1, \(-2\), \(-5\), \(-4\), \(-3\), \(-6\), 1, 2}; 
          gp = {1, 0. , 1, 0. , 1, 
              0. }; {\((a - c + e)\)\^2 + \((b - d + f)\)\^2, \((\((a + c)\)\^2 + \((c + e)\)\^2 + \((a - e)\)\^2 + \((b + d)\)\^2 + \((d + f)\)\^2 + \((b - f)\)\^2)\)/2}];\)\)

The first size gives a four-phase contribution to the polar form toPol, whilst the repeated second size has to be split into two three-phase contributions. The toVec elements relate directly to the (signed) elements in the ArcTan expressions:-

\(toPol[{a_, b_, c_, d_, e_, f_}, "Q12r"] := 
      Module[{}, {\((a - c + e)\)\^2 + \((b - d + f)\)\^2, 
          If[b + f == d, 0, 
            ArcTan[a - c + e, 
              b - d + f]], \((\((a + c)\)\^2 + \((c + e)\)\^2 + \((a - e)\)\^2)\)/2, 
          If[c == \(-e\), 0, 
            ArcTan[2\ a + c - e, 
              Sqrt[3] \((c + 
                    e)\)]], \((\((b + d)\)\^2 + \((d + f)\)\^2 + \((b - f)\)\^2)\)/2, 
          If[d == \(-f\), 0, 
            ArcTan[2\ b + d - f, Sqrt[3] \((d + f)\)]]}]\)
\(toVec[{ϵϵ_, σ_, ηη_, χ_, κκ_, ψ_}, "Q12r"] := 
      Module[{ϵ = \@ϵϵ/3, η = 
            2 \@ ηη/3, κ = 
            2 \@ κκ/
                3}, {\ \ ϵ\ Cos[σ] + η\ Cos[χ]\ , 
\ \ ϵ\ Sin[σ] + κ\ Cos[ψ], 
\(-ϵ\)\ Cos[σ] - η\ Cos[χ + 
                  2\ π/
                      3], 
\(-ϵ\)\ Sin[σ] - κ\ \ Cos[ψ + 
                  2\ π/
                      3], 
\ \ ϵ\ Cos[σ] + η\ Cos[χ + 
                  4\ π/
                      3], 
\ \ ϵ\ Sin[σ] + κ\ \ Cos[ψ + 4\ π/3]}]\)

Finally, the hoopTest procedure confirms that the sizes are conserved on multiplication, that the inverse provides division, that the polar-vector interconversions are correct, and that powers and roots are correct.

hoopTest["Q12r"]

D.3 Shapes for i, 𝕁-signed Conservative Division Algebra.

P4 has i & -i as signs in the multiplication table, and the correct shape was obtained by the standard procedure. On 20/9/03 I found two more i-signed tables with Det conservation & division, C12c & g2401c. Their shapes did not match the form for ±signed tables, but were found by experiment.

Example D.3 C12c

{tf[C12c], id[co[C12c, C4]], fa[C12c]}

I found that the i & -i terms have to be exchanged in gi & a-i b-c to give the correct shape:-

sh["C12c"]:=Module[{},gi={1,3*I,2*I,1,1};gp=.;{a+I*b-c,((a-I*b)^2+(a+c)^2+(c+I*b)^2)/2}];

I then investigated g2401c:-

{tst = ts[mp[{24, 1}], -4];id[tst],tst//tf,
  "\nfa=", fa[tst]}

Here, the i & -i terms are exchanged in gi & both sizes to give the correct shape. The plex relates directly to the sizes as the difference of the first two and as sum of all three elements:-

sh["g2401c"]:=Module[{},gi={1,3,2,-4*I,-5*I,-6*I,2,1};gp=.;{plex={a,c,b,-d,-e,-f};((a-b)^2+(a-c)^2+(b-c)^2-I*((d-e)^2+(d-f)^2+(e-f)^2))/2, (a+b+c)^2-I*(d+e+f)^2}]

On 21/9/03 I found inverses of C3C3J & C9J by Solve, and constructed suitable shapes. The gi elements 𝕁↔(𝕁^2), i↔-i, so they are divisors rather than multipliers. This is equivalent to using the conjugate.

id[C3C3j];mi=minsign[C3C3j];
Simplify[Solve[Chop[hoopTimes[{p,q,r},{a,b,c}]/.mi]=={1,0,0},{p,q,r}]]/.mi

id[C9J];mi=minsign[C9J];Simplify[Solve[Chop[hoopTimes[{p,q,r},{a,b,c}]/.mi]=={1,0,0},{p,q,r}]]/.mi

id[C9J];mi=minsign[C9J];Simplify[Solve[Chop[hoopTimes[{p,q,r},{a,b,c}]/.mi]=={1,0,0},{p,q,r}]]/.mi

The C4C3c shape was found in the same way:-

id[C4C3c];mi=minsign[C4C3c];Simplify[Solve[Chop[hoopTimes[{p,q,r},{a,b,c}]/.mi]=={1,0,0},{p,q,r}]]/.mi

sh["C4C3c"]:=Module[{},gi={1,-3,-2,1,1};{a+I b+I c,((a-I b)^2+(a-I c)^2-(b-c)^2)/2}];

The conserved properties are conjugate to the determinant factor. This corresponds to Frobenius's use of the inverse group table in his development of group characters.

D.4 Finding Loop Determinant Factors.

For loops with fewer than 11 elements, the symbolic determinant can be calculated and factorised by fa[G], which is an abbreviation for Factor[ Det[ gmap[ G,alph]]]. The time taken increases roughly as m!; it is greatly reduced if integers replace most of the symbols, and becomes feasible (but much less informative) for groups with up to at least 72 elements if all but one of the elements are integers.

fa gives the result as symmetric polynomials, which can be voluminous. "Fragmentation" is a generalization of factorization; it expresses symmetric polynomials as signed sums of powers of smaller "fragment" polynomials. A number of these were found by trial and error, including the cubic and quartic factors of A4 and C3C4. Plex-conjugation led to other quartics, but no general approach has been found. The most important factors are the quadratics, because they lead to polar forms; frag2 was developed to help with their fragmentation.

frag2 heuristically converts quadratic factors of loop tables into signed sums of squared terms, putting them into res, which is initialized as {}. polsort is used to set up a matrix of coefficients for the expanded polynomial; if this is not a matrix the polynomial is rejected as asymmetrical. Polynomials higher than quadratic are returned unchanged. An addnew function is defined; it adds new terms to res, ignoring any already present. Factors of length = 1 ( and -(a^2) - (b^2)) are passed through unchanged. Non-ternary terms are created with a positive first component. Ternary terms have a divisor d=2 and are handled next, with various adjustments. The result is compared with the original, and errors are fiddled. Incorrect results can be reported, so that manual correction can be attempted, as in Example D.2 (above).

As linear factors are always signed sums of loop elements, they can be found for quite large groups after using Factor[Det[gmap[G,pow2]]] (abbreviated to fp[G,pow2]), which maps pow2= {a,1,2,4,8...} onto the table. The factors appear as ±a±integer. linearFactor[f_,l_] then adds or subtracts decreasing powers of 2 from the integer and builds up the signed elements in the factor. Example D4 finds the two linear sizes for C3C4:-

Ex. D4. C3C4 linearFactor identification.

fp[mp["C3C4"], pow2]

{j=.;linearFactor[-1593+a,12],linearFactor[2047+a,12]}

Quadratic factors of small groups can be found explicitly, and frag will then help to simplify them.

Ex. D4.1. Quadratic Factor identification.

frag[fa[C3C3]]

fC4iC4c=frag[fa[mp["C4iC4c"]]]

When factors for the determinant of a folded table such as C4iC4c (in the previous example) have been found, they can be "unfolded" to give the larger factors of the un-folded table (linearFactor giving the linear factors). C4iC4c is created by folding C4iC4 so the shape of C4iC4 was found in this way; :-

gd["C4iC4c"]

fC4iC4c/.{a->a-i,b->b-j,c->c-k,d->d-l,e->e-m,f->f-n,g->g-o,h->h-p}

Some quartic factors involve a fragment that is the squared sum of the squared elements; another fragment then may "drop-out":-

Factor[fa[mp["C8c"]]]
Factor[%-(a^2+b^2+c^2+d^2)^2]

This is not the simplest shape, for the plex {a,-b,c,-d} gives \(\((a\^2 - c\^2 + 2\ b\ d)\)\^2 + \((\(-b\^2\) + 2\ a\ c + d\^2)\)\^2\)

Factor[fa[mp["C8r"]]]
Factor[%-(a^2+b^2+c^2+d^2)^2]

Some loops have plex-conjugates (see Section 7) that give products with many zero elements. These can often be used to deduce the fragmentation of some sizes. The signs of the conjugate have to be found:-

C4C4r Plex-Conjugate Quartic Fragmentation.

{hoopTimes[{a,b,c,d,e,f,g,h},{a,-b,-c,d,e,-f,-g,h},tst="C4C4r"],"\nFactors",fp[mp[tst]]}

Some experimentation using fromAlph[Take[pow2,8]] led to the correct factors:-

Expand[{(b+d+e+g)^2+(a+c-f-h)^2,(a+b-c-d)^2+(e+f-g-h)^2, (a-b-c+d)^2+(e-f-g+h)^2,(b+d-e-g)^2+(a+c+f+h)^2}/.fromAlph[Take[pow2,8]]]

This shape was not previously known, and was added to the databank on 17th Aug. 2003.

Fragmentation of Clifford Quartic sizes.

{"Symbolic Factor for CL12",tsts=fa[tst=cl[1,2]],"\nProduct with Plex-conjugate",tstf=hoopTimes[{a,b,c,d,e,f,g,h},{a,-b,-c,-d,-e,-f,-g,h},tst],"\nCheck the fragmentation",
Expand[tsts[[1]]-(tstf[[1]]^2+tstf[[-1]]^2)]}

{"Symbolic Factor for CL3",tsts=fa[tst=cl[3]],"\nProduct with plex-conjugate",tstf=hoopTimes[{a,b,c,d,e,f,g,h},{a,-b,-c, -d,-e,-f,-g,h},tst],"\nCheck the fragmentation", 
  Expand[tsts[[1]]-(tstf[[1]]^2+tstf[[-1]]^2)]}

hoopTimes[{a,b,c,d,e,f,g,h},{a,-b,-c,-d,-e,-f,-g,h},cl[3,{2}]]

{"Numeric Factor for CL4",tsts=fp[tst=cl[4]],tstf=hoopTimes[{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p},{a,b,c,-d,e,-f,-g,-h,i,-j,-k,-l,-m,-n,-o,p},tst],"\nShape in DataBase",sh["CL4"]}

(This is not the only plex-conjugate for CL4; See Polymorphs, Section 18.3.)
	The above result gave the first shape to be found for a 32-element group, CL4C2, by the expansion a→ a-q, etc, and the linearFactor procedure.

The Cubic Factor for A4

A4 is the smallest group with a cubic factor. The compact form of this factor, as the sum of six triple products, was obtained by a long process of trial and error. This involved repeatedly factorizing the determinant with 8 symbolic and 4 zero elements (more symbolic elements overloaded the available computer) to build up a pattern. It is shown below. It could be used to define the shape of A4C2 by unfolding, and might provide a starting point for the development of sh["S4"]

(* Example A4 Shape *)
sh["A4"]

17. Appendix E. Multi-phase & Power-Sinusoids.

Summary. Differential equations generate multi-phase and power-sinusoids, generalizing Cos[θ]^2+Sin[θ]^2=1. Multi-phase sinusoids are exponents of generalized signs.

Banded sets of differential equations generate multi-phase sinusoids (just as \(TraditionalForm\`\(x\_1\)\& . \) = a (Subscript[x, 2,])\(TraditionalForm\`\(\(\ \)\(\(x\_2\)\& . \)\)\)= -a (Subscript[x, 1]), equivalent to (Overscript[x, ¨]) = -(a^2)x, generates ordinary sinusoids). A simple set is the m equations (with m-1 being independent):- 
     D[(Subscript[x, j]), t] = c'[t] + 
            a ((Subscript[x, Mod[j + k, m]]) - (Subscript[x, Mod[j - k, m]])), 
        j = 0.  ..  m - 1, k < m/2. 
Substituting the trial function (Subscript[x, j]) = c[t] + (Subscript[c, 1]) Sin[(Subscript[c, 2]) t + ϕ + 2  j k π/m] leads to                  (Subscript[x, j]) = 
        c[t] + (∑_p) (Subscript[c, p]) 
              Sin[2  a Sin[2  k π/m] t + (Subscript[ϕ, p]) + 
                  2  j k π/m].
j is one of the m phases; c[t] gives freedom from the origin;  (Subscript[c, p]) and (Subscript[ϕ, p]) are phase amplitude and phase offset constants which are subscripted because independent sets can arise; k is a phase step. Sin[2k π/m] is a constant that determines the frequency & period.  When m=4, k must be 1; folding then removes the c[t] term and reproduces the ordinary sinusoid equation-pair with double the amplitude. Other values of m and k give a frequency reduction.
	The period is 2π/Sin[2k π/m], and the function is non-sinusoidal (constant) if 2/m is integral; m=12 gives half-spin with a period of 4π. Spin-2 is (Sin^2) with period π; the spin-2 sinusoids (gravity waves) are essentially non-negative.

Some years ago I generalised Sin[θ]^2+Cos[θ]^2=1 to give the polyhelix identity (∑_(n = 0)^(n = m - 1))Sin[θ + 2  n π/m]^2/m≡1. On 17/11/2000 I generalised this to other powers. Firstly I found that the sum of fourth powers of m-phase sinusoids, apart from m={1,2,4}, is 3m/8. Example E1 demonstrates this for 3, 5, & 6 phases. An arbitrary value of the angle τ=1.1 is employed because the simplification of the symbolic expressions is very slow in early versions of Mathematica:-

Example E1. Sums of 4'th powers of multiphase sinusoids.

tau = 
      1.1; {"Eight times the sum of\nthree equispaced 4'th power sinusoids \
=", 8*Simplify[
          Sin[tau]^4 + Sin[tau + 2  π/3]^4 + 
            Sin[tau + 4  π/3]^4], "\nfive equispaced 4'th power \
sinusoids  =", 
      8*Simplify[
          Sin[tau]^4 + Sin[tau + 2  π/5]^4 + Sin[tau + 4  π/5]^4 + 
            Sin[tau + 6  π/5]^4 + 
            Sin[tau + 8  π/5]^4], "\nsix equispaced 4'th power \
sinusoids   =", 
      8*Simplify[
          Sin[tau]^4 + Sin[tau + π/3]^4 + Sin[tau + 2  π/3]^4 + 
            Sin[tau + π]^4 + Sin[tau + 4  π/3]^4 + 
            Sin[tau + 5  π/3]^4]}

I developed this "Power-Sinusoid" identity as an empirical observation. The correct relationship was derived for me by John Thwaites (Fellow of Caius College, Cambridge) and is (∑_(n = 0)^(n = m - 1))(((Sin[t + 2  n π/m]))^(2  p))= (4^(-p))m (({{2  p}, {p}})), {p<m if m is even, else p<2m}.  (If p exceeds the stated limit, the sum has a small high-frequency ripple.) The (({{2  p}, {p}})) term is the Binomial, sometimes written (Subscript[, 2  
              p])(Subscript[C, p]).  He derived this relationship by converting to exponential form, performing a binomial expansion, and summing typical terms. This gives (4^(-n))m (({{2  p}, {r}}))(E^(2  j(p - r) i)) multiplied by a geometric series that is zero unless p = n, when it sums to m. Replacing 2p by an odd integer always gives zero.
	Example E2 shows the 4'th power of the 3-phase sinusoids in red, green, and blue, and their sum (the straight line at y=9/8) in black.

Example E2. Plots of 4'th powers of 3-phase sinusoids and their sum.

Plot[{Sin[τ]^4, Sin[τ + 2  π/3]^4, 
          Sin[τ + 4  π/3]^4, 
          Sin[τ]^4 + Sin[τ + 2  π/3]^4 + 
            Sin[τ + 4  π/3]^4}, {τ, 0, 2  π}, 
        PlotStyle -> {{RGBColor[1, 0, 0]}, {RGBColor[0, 1, 
                0]}, {RGBColor[0, 0, 1]}, {RGBColor[0, 0, 0]}}, 
        PlotLabel -> "Fig.1 4th Power Sinusoid Summation"];

When the power is large, the phases take the form of isolated pulses of near-gaussian form, approaching \(TraditionalForm\`E\^\(\(-n\)\ \(\(k\^2\)(π/2  k\  - t)\)\^2/2\)\) as the power tends to infinity. Example E3 compares the Gaussian expression with the 10'th power of a 12-phase sinusoid. Higher powers give closer approximations. Note the analogy with JacobiCN periodic pulse solitonic solutions to the KdV non-linear PDE. They go to (Sech^2) pulses as the period becomes infinite. Modulated Gaussian pulses are dispersive wave-packet solutions to the Schroedinger equation; I have not found a power-sinusoid analogue.

Example E3. Plotting Sin[12 t]^10 & Exp[-12*(10^2) (((π/20 - t))^2)/2].

pp = 12;kk = 10;s1210 = Sin[kk t]^pp;Plot[{s1210, Exp[-pp (kk^2)/2 (π/2/kk - t)^2]},{t, π/2/kk -  .9/kk, π/2/kk +  .9/kk},PlotStyle -> {{RGBColor[1, 0, 0]}, {RGBColor[0, 1, 
                  0]}},PlotRange -> {0, 1},PlotLabel->"Fig.2 Power Sinusoid vs Gauss"];

The power-sinusoid travelling pulse V=(a Sin[(∑_(x, y,  .. ))kx*(x+xi-jx*t)])^p is a solution of the non-linear TXY.. differential equation (Overscript[V, ¨])=(1-1/p) \(TraditionalForm\`V\& . \^2\)/V + pV(∑_(x, y,  .. ))(((jx kx))^2), which reduces to the TX fixed power sinusoid (Overscript[V, ¨]) = (1-1/p)\(TraditionalForm\`\(\(\ \)\(V\& . \^2\)\)\)/V +p (ω^2)V. Example E4 compares the integration (red) with the 12th. power sinusoid, which has been shifted up slightly for clarity (green). As the function and derivatives become zero when t→π, the integration blows up beyond this point. An integration procedure that set very small values to zero would generate a single pulse resembling a wavelet.

Example E4. Power-sinusoid Differential Equation solution & Sin[x]^12+.05.

pp = 12;kk = 1;startvals = {Sin[kk t]^pp, D[Sin[kk t]^pp, t]};sv = startvals /. t -> π/4;solution=NDSolve[{y''[x]==(1 - 1/12)((y'[x])^2)/y[x]-12  y[x],y[π/4] == sv[[1]],y'[π/4]==sv[[2]]},y,{x, π/4, 5}];Plot[{Evaluate[y[x] /. solution], Sin[x]^12 +  .05}, {x,  .8, 
          5}, PlotRange -> {- .02, 1.05}, 
        PlotStyle -> {{RGBColor[1, 0, 0]}, {RGBColor[0, 1, 0]}}, 
        PlotLabel -> "Fig.3 Power-Sinusoid Integration"];

The non-linearity disappears if p=1, simplifying to the standard sinusoid equation (Overscript[V, ¨]) = (ω^2)V.

18. Appendix F. Plex-conjugation.

Summary. Loops with sizes that are the signed sum of squared elements have conjugates, pairs of vectors whose product is the vector size followed by zeroes. The complex conjugate is the archetype: (a+i b)(a-i b)= ((a^2) + (b^2)+i 0). Some other loops have "plex-conjugates" that give hoop products (usually with many zeroes) that are related to the sizes. A number of compact sizes have been found via such conjugates. "Polymorphic" conjugates & shape formulations have been obtained for some hoops. Ternary conjugates have inverted element pairs,𝕁↔(𝕁^2) instead of negated elements i↔(i^3). Useless discovery - sums of quasi-group product elements factorize into the multiplicands.

18.1. Complex Conjugates.

Complex, Quaternion, & Octonion numbers have "complex conjugates"; a squared "length" is obtained on multiplying a vector by its complex conjugate. This actually gives the size of the vector, which also appears as the first element of the (hoop) product of the vector and its conjugate; the other elements become zero. The same is true for P4, CL2, & higher Cayley-Dickson non-associative algebras such as Sed, as well as ℂ, ℍ, & 𝕆, as can be seen in Example F1. These are all the loops known to me with shapes that are signed sums of squared elements. Louenesto [3, p15] calls the CL2 conjugate the Clifford-conjugate.

Example F1. Multiplication by complex conjugates that give sizes.

hoopTimes[{a, 
        b}, {a, -b, -c, -d}, "C4c"]

hoopTimes[{a, b, c, 
        d}, {a, -b, -c, -d}, "Qr"]

hoopTimes[{a, b, c, 
        d}, {a, -b, -c, -d}, "P4"]

hoopTimes[{a, b, c, 
        d}, {a, -b, -c, -d}, "CL2"]

\(TraditionalForm\`hoopTimes[{a, b, c, d, e, f, g, 
        h}, {a, \(-b\), \(-c\), \(-d\), \(-e\), \(-f\), \(-g\), \(-h\)}, "Octc"]\)

\(TraditionalForm\`hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l, m, n, 
        o, p}, {a, \(-b\), \(-c\), \(-d\), \(-e\), \(-f\), \(-g\), \(-h\), \(-i\), \(-j\), \(-k\), \(-l\), \(-m\), \(-n\), \(-o\), \(-p\)}, "Sed"]\)

18.2. Plex-conjugates.

Other loops have "plex-conjugates" that may give a number of zeroes in the hoop product. The non-zero products are related to the sizes. Sizes can sometimes be identified, if they are not already known, with the aid of plex-conjugates and knowledge of the number and order of the factors in the shape (provided by fa or fp). Example F2 demonstrates this. The pattern of signs of the conjugate have to be discovered in each case. For CL3 the plex-conjugate that gives two non-zero terms gives the shape directly, as the sum of the squares of the two non-zero elements in the product:-

Example F2.  Plex-conjugate defining shape. CL3.

{"CL3 {a,b,c,d,e,f,g,h}×{a,-b,-c,-d,-e,-f,-g,h}=",hoopTimes[{a, b, c, d, e, f, g, 
              h}, {a, -b, -c, -d, -e, -f, -g, h}, 
            tst = "CL3"],
"\nFactors after Alph substitution",fp[mp[tst]],
"\nShape",sh[tst],"\nShape found from plex gives the correct factor\n",Expand[sh[tst]] /. fromAlph[Take[pow2, 8]]}

Plex-conjugate products for CL4, CL13 & CL04 have six non-zero terms that give the shapes directly - as the squared sum of the squared elements minus the squares of the other non-zero products. (As pow2 gives anomalous results with some Clifford algebras a different substitution is used.) Only CL4 is shown:-

Example F3.  Plex-conjugate defining shape. CL4.

subs = {a, 1, 3, 2, 7, 5, 41, 11, 13, 29, 17, 19, 31, 
        61, 37, 43}; 
    sbs = fromAlph[
        subs]; {"{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p}×{a,b,c,-d,e,-f,-g,\
-h,i,-j,-k,-l,-m,-n,-o,p} using CL4 is", 
      fcl4 = hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p}, {a, 
            b, c, -d, e, -f, -g, -h, 
            i, -j, -k, -l, -m, -n, -o, p}, 
          tst = "CL4"], 
"\nFactors after a \
substitution", 
      fp[mp[tst], 
        subs], 
"\nThe shape is the first factor squared, \
minus the other factors squared, giving, after the same substitution ", 
      Expand[(fcl4[[1]]^2 - fcl4[[2]]^2 - fcl4[[3]]^2 - 
              fcl4[[5]]^2 - fcl4[[9]]^2 - fcl4[[16]]^2) /. 
          sbs]}

The relation between plex-conjugate products is often less obvious:

Example F5.  Plex-conjugate and related sizes.  O4.

Here each of the four sizes can be expressed as the sum of two squares, which are equal to the scalar term res[[1]], combined with signed sums of the remaining terms.

{"{a,b,c,d,e,f,g,h}×{a,b,c,d,-e,-f,-g,-h}, \
using O4 is", 
      res = hoopTimes[{a, b, c, d, e, f, g, h}, {a, b, c, 
            d, -e, -f, -g, -h}, 
          tst = "O4"], 
"\nFactors", 
      fp[mp[tst]], 
"\nShape", sh[tst]}

Expand[{(((a - b - c + d))^2) + (((e - f - g + h))^2) - 
          res[[1]] + res[[2]] + res[[3]] - 
          res[[4]], 
(((a - b + c - d))^2) + (((e - f + g - h))^2) - res[[1]] + res[[2]] - res[[3]] + 
          res[[4]], 
(((a + b - c - d))^2) + (((e + f - g - h))^2) - res[[1]] - res[[2]] + res[[3]] + 
          res[[4]], 
(((a + b + c + d))^2) + (((e + f + g + h))^2) - res[[1]] - res[[2]] - res[[3]] - 
          res[[4]]}]

Example F6.  Plex-conjugate and related sizes.  CL03.

Here there are two sizes and two non-zero terms (the scalar and trivector parts). The sizes are their sum and difference. The same is true for CL21.

{"{a,b,c,d,e,f,g,h}×{a,-b,-c,-d,-e,-f,-g,h}, \
using CL03 is", 
      hoopTimes[{a, b, c, d, e, f, g, 
          h}, {a, -b, -c, -d, -e, -f, -g, h}, 
        tst = "CL03"], 
"\nShape", 
      sh[tst]}

Example F7.  Plex-conjugate and related sizes.  CL21.

{"{a,b,c,d,e,f,g,h},{a,-b,-c,-d,-e,-f,-g,h}, using \
CL21 is", 
      hoopTimes[{a, b, c, d, e, f, g, 
          h}, {a, -b, -c, -d, -e, -f, -g, h}, 
        tst = "CL21"], 
"\nShape", 
      sh[tst]}

Some ternary algebras have plex-conjugates with reversed pairs of elements, 𝕁↔(𝕁^2), and the product has repeated, instead of zero, elements.

Example F8.  Ternary Plex-conjugate and related sizes.  C3.

{"{a,b,c},{a,c,b}, using C3 is", 
      hoopTimes[{a, b, c}, {a, c, b}, 
        tst = "C3"], 
"\nShape", 
      Expand[sh[tst]]}

Example F9.  Conjugate Plex-conjugate and related sizes. g2401c.

{id[tst = mp[6, 9]], tst // tf, "Shape ", sh[gmn], "\nPlex ", 
      plex}

ff = fa[tst]

res = hoopTimes[{a, b, c, d, e, f}, plex, gmn]

The conjugate of the repeated factor is the difference between the first two elements of the product:-

Expand[
      (a^2) - a b + (b^2) - a c - b c + 
        (c^2) - I (d^2) + I d e - I (e^2) + I d f + I e f - I (f^2) - 
        res[[1]] + res[[3]]]

The conjugate of the other factor is the sum of the elements of the product:-

Expand[
      (a^2) + 2 a b + (b^2) + 2 a c + 2 b c + 
        (c^2) - I (d^2) - 
        2 I d e - I (e^2) - 
        2 I d f - 
        2 I e f - I (f^2) - (res[[1]] + 
            res[[2]] + res[[3]])]

18.3. Polymorphs.

Some quartic shapes are polymorphic, with different plex-conjugates leading to different fragmented formulations of the shape. These correspond to the different involutions. Louenesto p86 mentions grade involution, reversion, and Clifford conjugation.
	Example F1 showed that CL3 has a shape consisting of the sum of two squares. Example F9 shows three polymorphs, each being the signed sum of 4 squares. In these case, four zeroes occur in the sizes of a plex-conjugate. The appropriately signed sums of squares of the sizes is then shown to match the determinant of the CL3 table, as found by fp.  (CL4 and CL04 dimorphs have also been found.)

Example F9.  Plex-conjugate Polymorphs. CL3.

\(TraditionalForm\`{"Conjugate {a,b,c,-d,e,-f,-g,-h}", 
      hoopTimes[{a, b, c, d, e, f, g, h}, {a, b, c, \(-d\), 
          e, \(-f\), \(-g\), \(-h\)}, tst = "CL3"], "
 Det    ", 
      fp[mp[tst]], \*""1st Shape is ((a^2)+(b^2)+(c^2)+(d^2)+(e^2)+(f^2)+(g^2)+(h^2))^2-(2 a b+2 c d+2 e f+2 g h)^2-(2 a c-2 b d+2 e g-2 f h)^2-(2 a e-2 b f-2 c g+2 d h)^2"", 
"
Factor OK", 
      Expand[\((a\^2 + b\^2 + c\^2 + d\^2 + e\^2 + f\^2 + g\^2 + 
                  h\^2)\)^2 - \((2\ a\ b + 2\ c\ d + 2\ e\ f + 
                  2\ g\ h)\)^2 - \((2\ a\ c - 2\ b\ d + 2\ e\ g - 
                  2\ f\ h)\)^2 - \((2\ a\ e - 2\ b\ f - 2\ c\ g + 
                  2\ d\ h)\)^2] /. 
        fromAlph[
          Take[pow2, 
            8]], 
"

Conjugate {a,-b,-c,-d,e,f,g,-h}", 
      hoopTimes[{a, b, c, d, e, f, g, h}, {a, \(-b\), \(-c\), \(-d\), e, f, 
          g, \(-h\)}], \*""2nd Shape is ((a^2)-(b^2)-(c^2)+(d^2)+(e^2)-(f^2)-(g^2)+(h^2))^2-(2 a e+2 b f+2 c g+2 d h)^2+(2 b e+2 a f+2 d g+2 c h)^2+(2 c e-2 d f+2 a g-2 b h)^2"", 
"
Factor OK", 
      Expand[\((a\^2 - b\^2 - c\^2 + d\^2 + e\^2 - f\^2 - g\^2 + 
                  h\^2)\)^2 - \((2\ a\ e + 2\ b\ f + 2\ c\ g + 
                  2\ d\ h)\)^2 + \((2\ b\ e + 2\ a\ f + 2\ d\ g + 
                  2\ c\ h)\)^2 + \((2\ c\ e - 2\ d\ f + 2\ a\ g - 
                  2\ b\ h)\)^2] /. 
        fromAlph[Take[pow2, 8]], "

Conjugate {a,-b,-c,-d,e,f,g,-h}", 
      hoopTimes[{a, b, c, d, e, f, g, h}, {a, \(-b\), \(-c\), \(-d\), e, f, 
          g, \(-h\)}], \*""3rd Shape is((a^2)-(b^2)-(c^2)+(d^2)+(e^2)-(f^2)-(g^2)+(h^2))^2-(2 a e+2 b f+2 c g+2 d h)^2+(2 b e+2 a f+2 d g+2 c h)^2+(2 c e-2 d f+2 a g-2 b h)^2"", 
"
Factor OK", 
      Expand[\((a\^2 - b\^2 - c\^2 + d\^2 + e\^2 - f\^2 - g\^2 + 
                  h\^2)\)^2 - \((2\ a\ e + 2\ b\ f + 2\ c\ g + 
                  2\ d\ h)\)^2 + \((2\ b\ e + 2\ a\ f + 2\ d\ g + 
                  2\ c\ h)\)^2 + \((2\ c\ e - 2\ d\ f + 2\ a\ g - 
                  2\ b\ h)\)^2] /. 
        fromAlph[Take[pow2, 8]], "

Conjugate {a,-b,c,d,-e,-f,g,-h}", 
      hoopTimes[{a, b, c, d, e, f, g, h}, {a, \(-b\), c, d, \(-e\), \(-f\), 
          g, \(-h\)}], \*""4th Shape is ((a^2)-(b^2)+(c^2)-(d^2)-(e^2)+(f^2)-(g^2)+(h^2))^2-(2 a c+2 b d-2 e g-2 f h)^2+(2 b c+2 a d-2 f g-2 e h)^2+(2 c e-2 d f-2 a g+2 b h)^2"", 
"
Factor OK", 
      Expand[\((a\^2 - b\^2 + c\^2 - d\^2 - e\^2 + f\^2 - g\^2 + 
                  h\^2)\)^2 - \((2\ a\ c + 2\ b\ d - 2\ e\ g - 
                  2\ f\ h)\)^2 + \((2\ b\ c + 2\ a\ d - 2\ f\ g - 
                  2\ e\ h)\)^2 + \((2\ c\ e - 2\ d\ f - 2\ a\ g + 
                  2\ b\ h)\)^2] /. fromAlph[Take[pow2, 8]]}\)

18.4. Database Plexes, chirality.

A number of plex vecs (involutions) have been included in the shapes in the database. Some only give one of several sizes as functions of plex products, others give a different formulation of the shape, which is included as a comment in the sh definition. More work is needed. The following plex conjugate was discovered on 8/12/3, and reverses bc to cb, ef to fe; it gives the two quadratic shapes for C3C2. Other ternary conjugates were then found; pairs of elements are interchanged instead of being negated.

Example F10.  Chiral Plex-conjugate. C3C2.

pr = 
      hoopTimes[{a, b, c, d, e, f}, {a, c, b, d, f, 
          e}, "C3C2"]
shh = sh["C3C2"]; 
    Expand[{pr[[1]] - pr[[2]] + pr[[4]] - pr[[5]] - 
          shh[[3]], 
        pr[[1]] - pr[[2]] - pr[[4]] + pr[[5]] - 
          shh[[4]]}]

D3 still not sorted:-

pr = 
      hoopTimes[{a, b, c, d, e, f}, {a, -f, e, -d, 
          c, -b }, "D3"]
shh = Expand[sh["D3"]]
Factor[{pr[[1]] + pr[[2]] + pr[[3]] + pr[[4]] + 
          pr[[5]] + pr[[6]] - shh[[3]]}]

pr = 
      hoopTimes[{a, b, c, d, e, f}, {a, -b, e, -f, 
          c, -d }, "D3"]
shh = Expand[sh["D3"]]
Factor[{pr[[1]] + pr[[2]] + pr[[3]] + pr[[4]] + 
          pr[[5]] + pr[[6]] - shh[[3]]}]

sh["D3"]

18.3. Factorization of sums of quasi-group product elements.

Any pair of vectors are factors of the sums of their quasi-group Cayley Table product elements:-

Example F11.  Product factorisation.

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f}, {m, -n, o, p, 
            q, -r}, "C3C2"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f}, {m, -n, o, p, 
            q, -r}, "D3"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f}, {m, -n, o, p, 
            q, -r}, "C6an"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e}, {m, -n, o, 
            p - q}, "C5n"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {m, -n, o, 
            p, q, -r, s, t, u, -v, w, x}, "C3C4"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {m, -n, o, 
            p, q, -r, s, t, u, -v, w, x}, "C3K"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {m, -n, o, 
            p, q, -r, s, t, u, -v, w, x}, "Q12"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {m, -n, o, 
            p, q, -r, s, t, u, -v, w, x}, "D3C2"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {m, -n, o, 
            p, q, -r, s, t, u, -v, w, x}, "A4"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {m, -n, o, 
            p, q, -r, s, t, u, -v, w, x}, "Alt12n"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, 
            p}, {a, -b, c, c, e, -f, g, h, i, -j, k, l, q, r, s, 
            t}, "Oct"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f}, {m, -n, o, p, 
            q, -r}, "C6n"]]

This is not true for signed tables

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h}, {m, -n, o, p, 
            q, -r, s, t}, "O4"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h}, {m, -n, o, p, 
            q, -r, s, t}, "P8"]]

Factor[
      Plus @@ hoopTimes[{a, b, c, d, e, f, g, h, i, j, k, l}, {a, -b, c, 
            c, e, -f, g, h, i, -j, k, l}, "C3Qr"]]

19. Appendix G. Rotations in various dimensions.

Classical (Euler) "rigid rotation" only occurs in the complex plane for 2D, in the imaginary quaternions for 3D, and the imaginary octonions for 7D. It is implemented (for real or complex vector lists, axes of rotation, and angles) by rotateQOP for the quaternion, octonion, and Pauli-σ algebra; the Pauli algebra gives the same result as the quaternion algebra, with the direction of rotation reversed. Example G1 rotates sets of arbitrary vectors about arbitrary axes in each of these algebras, and checks that the effect of rotation is additive. (As expected, testing an extension of the procedure to the 16-element non-conservative Sedenion algebra did not give additive 15-dimension rotation.)

Example G1. Rigid rotations in 3 & 7 dimensions.

{"Rotation of vec", 
      v4  = {{4. , 6. , 7, -1}}, "\nabout axis  ax =", 
      ax = {-1. , 
          9. , -3}, "by π/4 using Qr or -π/4 using P4 gives the \
same result", 
      q1 = rotateQOP[v4, ax = {-1. , 9. , -3}, π/4. , "Qr"], 
      q1 = rotateQOP[v4, 
          ax = {-1. , 9. , -3}, -π/
            4. , "P4"], 
"Qr Rotates back \
correctly", 
      rotateQOP[q1, ax, -π/4. , "Qr"] == 
        v4, 
"\n P4 reverses Qr           ", 
      rotateQOP[q1, ax, π/4. , "P4"] == 
        v4, 
"\n A further rotation by .4 gives ", 
      rotateQOP[q1, 
        ax,  .4, "Qr"], "\nthe same as rotating by π/4+.4", 
      rotateQOP[v4, 
        ax = {-1. , 9. , -3}, π/4 +  .4, "Qr"]}

Many hoops have polar forms that describe rotations, with angles adding on multiplication. The simplest is "Terplex", based on the C3 group. This rotates about the {1,1,1} axis. Example G2 converts {1,2,4} to the C3 polar form {7,7,2.42787}. Subtracting π/4 and reverting to vector form gives the same effect as quaternion rotation of {1,1,2,4} by π/4 about {1,1,1}.
	Note that the Euler procedure is to pre- and post-multiply by a half-rotation and its conjugate. Hoop rotation is a single multiplication using the full angle.

Example G2. Rotations in C3 match Quaternion rotations about {1,1,1}.

{"C3 Polar form of {1,2,4} is", 
      toPolar[{1. , 2. , 
          4}, "C3"], 
"\n Rotate by -π/4        \
", toVector[{7. , 7. , 
          2.42787 - π/
              4}, "C3"], 
"\n Qr rotation by \
π/4", 
      rotateQOP[{{1. , 1. , 2. , 4. }}, {1. , 1. , 1. }, π/
          4. , "Qr"]}

The hoops O4, Octi, C4C4r, C2D4r, QC2cO8, KiC4r, CL21, CL03 define different rotations in 4D; O8, O8a, C4KC2r & C8Kr define different rotations in  8D. (Of these, only O4, Octi, C2D4r, CL21, CL03 have toPol & toVec in the database.)

Example G3. O4 Rotations.

A = {2. , 1, 3, 3, 5, 4, 6, 2. }; {"A= ", 
      A, "\nPolar A ", 
      pA = toPolar[
          A, "O4"], "\n Rotated by angles 1,-.1,.2,.3 gives vector", 
      vA1 = toVec[
          pA + {0, 1, 0, - .1, 0,  .2, 
              0,  .3}, "O4"], "\n The Rotated Polar is", 
      rA = toPolar[
          vA1, "O4"], "\n Radii unchanged, Angles altered correctly", 
      Chop[pA - rA]}

The above are all "central rotations" without offsets; all the sizes are quadratic. Many loops have "offset rotations" in which the shapes include linear sizes that displace the centre of rotation from the origin.
	Mixed polar-hypolar rotations can be defined for various hoops; the database contains those for C4, P4, C4C2r, C3C2, D3, D4, & Q8. Example 40 shows rotation in D3 & C3C2, with two offsets (o & O here) and two related angles.

Example G4. D3, C3C2 Rotations.

\(TraditionalForm\`{\*""D3 vector form of {o,O,(p^2),ϕ,(q^2),ψ} is"", 
      toVec[{o, O, p\^2, ϕ, 
            q\^2, ψ}, "D3"] /. \@any_\^2 -> 
          any, 
"
C3C2 vector form is
", 
toVec[{o, O, p\^2, ϕ, 
            q\^2, ψ}, "C3C2"] /. \@any_\^2 -> any}\)

20. Appendix H. Noncommutative algebras.

Octonions are the best-known non-associative algebra; they are "square associative" or alternative. Their compositions with cyclic groups are also alternative and conservative. Because I knew of no other non-associative Moufang loops, I conjectured that conservation resulted from the Moufang property. On 4/5/6 I obtained the "Loops" package (in [6]) and found a list of Noncommutative Moufang loops. The database now contains all 12 with fewer than 28 elements. Only two (Oct and D4M2, related to split octonions Octi) are conservative:-

{conservativeQ[D3Mn], conservativeQ[D4M1n], conservativeQ[Oct], 
      conservativeQ[D4M2], conservativeQ[D4M4n], conservativeQ[D4M5n], 
      conservativeQ[D5Mn], conservativeQ[D3C2Mn], conservativeQ[A4Mn], 
      conservativeQ[Q12M3n], conservativeQ[Q12M4n], 
      conservativeQ[Q12M5n]}

Noncommutative group determinants such as D3 have repeated factors, which are conserved but which only appear once in the inverse denominators. In April 2006, I conjectured that a different, noncommutative (NC), formulation might yield a new conserved angle. NC versions of ge & det were developed. No progress has been made with NC powers.
	The next example has vectors selected to give prime sizes; as no extra conserved values appear, the search for new radius/conserved angle does not look promising:-

\({"If A & B are", 
      A = {3, 5, 0, 4, 3, 2}, 
B = {7, 5, 1, 5, 3, 
          2}, "
 In D3, AB is", 
      AB = hoopTimes[A, 
          B, "D3"], 
"
 the factors of Det[A] are", FactorInteger[
        Det[gmap[D3, 
            A]]], 
"
 the factors of Det[B] are", 
FactorInteger[
        Det[gmap[D3, 
            B]]], 
"
 the factors of Det[AB] are", 
FactorInteger[\(-Det[
            gmap[D3, 
              AB]]\)], 
"
The shapes of A & B are", 
      shape[A], 
shape[
        B], "
and the shape of AB has factors", \ 
FactorInteger[shape[AB]]}\)

The quadratic is squared, giving repeated factors (2,2) in A, (19,2) in B. The inverse only involves the unsquared quadratic, with the divisor being 23*1*19, not 23*1*(19^2). It does not use the ordinary partial-fraction formulation for repeated factors, but confirms the generality of the specific partial fraction formulation used in hoopInverse.

hoopInverse[B]

As the quadratic is a repeated factor that involves three positive and three negative squared fragments, the pseudo-polar form is expressed as:-

toPolar[{a, b, c, d, e, f}]

with two three-phase systems. The conserved size has to be split into two components, neither of which are conserved.

{toPolar[A], toPolar[B], toPolar[AB]} // N

Curiosity - angles of π/3?? Specific to the chosen vectors; others give general angles:-

AB = 
      hoopTimes[(A = {1, -2, 4, 3, 7, 0}), (B = {-3, 9, 1, 5, 
              3, 4}), "D3"]
FactorInteger[Det[gmap[D3, A]]]
FactorInteger[Det[gmap[D3, B]]]
FactorInteger[Det[gmap[D3, AB]]]
shape[A]
shape[B]
shape[AB]
FactorInteger[%]

{toPolar[A], toPolar[B], toPolar[AB]} // N

21. References.