# Light's associativity test

In mathematics, Light's associativity test is a procedure invented by F. W. Light for testing whether a binary operation defined in a finite set by a Cayley multiplication table is associative. The naive procedure for verification of the associativity of a binary operation specified by a Cayley table, which compares the two products that can be formed from each triple of elements, is cumbersome. Light's associativity test simplifies the task in some instances (although it does not improve the worst-case runtime of the naive algorithm, namely ${\mathcal {O}}\left(n^{3}\right)$ for sets of size $n$).

## Description of the procedure

Let a binary operation ' · ' be defined in a finite set A by a Cayley table. Choosing some element a in A, two new binary operations are defined in A as follows:
    x $\star$ y = x ⋅ ( a ⋅ y )
    x $\circ$ y = ( x ⋅ a ) ⋅ y
The Cayley tables of these operations are constructed and compared. If the tables coincide then x · ( a · y ) = ( x · a ) · y for all x and y. This is repeated for every element of the set A.
The example below illustrates a further simplification in the procedure for the construction and comparison of the Cayley tables of the operations ' $\star$ ' and ' $\circ$ '.
It is not even necessary to construct the Cayley tables of ' $\star$ ' and ' $\circ$ ' for all elements of A. It is enough to compare Cayley tables of ' $\star$ ' and ' $\circ$ ' corresponding to the elements in a proper generating subset of A.
When the operation ' . ' is commutative, then x $\star$ y = y $\circ$ x. As a result, only part of each Cayley table must be computed, because x $\star$ x = x $\circ$ x always holds, and x $\star$ y = x $\circ$ y implies y $\star$ x = y $\circ$ x.
When there is an identity element e, it does not need to be included in the Cayley tables because x $\star$ y = x $\circ$ y always holds if at least one of x and y are equal to e.

## Example

Consider the binary operation ' · ' in the set A = { a, b, c, d, e } defined by the following Cayley table (Table 1):
Table 1 :
| · | a | b | c | d | e |
| a | a | a | a | d | d |
| b | a | b | c | d | d |
| c | a | c | b | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |
The set { c, e } is a generating set for the set A under the binary operation defined by the above table, for, a = e · e, b = c · c, d = c · e. Thus it is enough to verify that the binary operations ' $\star$ ' and ' $\circ$ ' corresponding to c coincide and also that the binary operations ' $\star$ ' and ' $\circ$ ' corresponding to e coincide.
To verify that the binary operations ' $\star$ ' and ' $\circ$ ' corresponding to c coincide, choose the row in Table 1 corresponding to the element c :
Table 2 :
| · | a | b | c | d | e |
| a | a | a | a | d | d |
| b | a | b | c | d | d |
| c | a | c | b | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |
This row is copied as the header row of a new table (Table 3):
Table 3 :
| a | c | b | d | d |
Under the header a copy the corresponding column in Table 1, under the header b copy the corresponding column in Table 1, etc., and construct Table 4.
Table 4 :
| a | c | b | d | d |
| a | a | a | d | d |
| a | c | b | d | d |
| a | b | c | d | d |
| d | d | d | a | a |
| d | e | e | a | a |
The column headers of Table 4 are now deleted to get Table 5:
Table 5 :
| a | a | a | d | d |
| a | c | b | d | d |
| a | b | c | d | d |
| d | d | d | a | a |
| d | e | e | a | a |
The Cayley table of the binary operation ' $\star$ ' corresponding to the element c is given by Table 6.
Table 6 :
| $\star$ (c) | a | b | c | d | e |
| a | a | a | a | d | d |
| b | a | c | b | d | d |
| c | a | b | c | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |
Next choose the c column of Table 1:
Table 7 :
| · | a | b | c | d | e |
| a | a | a | a | d | d |
| b | a | b | c | d | d |
| c | a | c | b | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |
Copy this column to the index column to get Table 8:
Table 8 :
* a
* c
* b
* d
* e
Against the index entry a in Table 8 copy the corresponding row in Table 1, against the index entry b copy the corresponding row in Table 1, etc., and construct Table 9.
Table 9 :
| a | a | a | a | d | d |
| c | a | c | b | d | d |
| b | a | b | c | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |
The index entries in the first column of Table 9 are now deleted to get Table 10:
Table 10 :
| a | a | a | d | d |
| a | c | b | d | d |
| a | b | c | d | d |
| d | d | d | a | a |
| d | e | e | a | a |
The Cayley table of the binary operation ' $\circ$ ' corresponding to the element c is given by Table 11.
Table 11 :
| $\circ$(c) | a | b | c | d | e |
| a | a | a | a | d | d |
| b | a | c | b | d | d |
| c | a | b | c | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |
One can verify that the entries in the various cells in Table 6 agrees with the entries in the corresponding cells of Table 11. This shows that x · ( c · y ) = ( x · c ) · y for all x and y in A. If there were some discrepancy then it would not be true that x · ( c · y ) = ( x · c ) · y for all x and y in A.
That x · ( e · y ) = ( x · e ) · y for all x and y in A can be verified in a similar way by constructing the following tables (Table 12 and Table 13):
Table 12 :
| $\star$(e) | a | b | c | d | e |
| a | d | d | d | a | a |
| b | d | d | d | a | a |
| c | d | d | d | a | a |
| d | a | a | a | d | d |
| e | a | a | a | d | d |
Table 13 :
| $\circ$(e) | a | b | c | d | e |
| a | d | d | d | a | a |
| b | d | d | d | a | a |
| c | d | d | d | a | a |
| d | a | a | a | d | d |
| e | a | a | a | d | d |

### A further simplification

It is not necessary to construct the Cayley tables (Table 6 and table 11) of the binary operations ' $\star$ ' and ' $\circ$ '. It is enough to copy the column corresponding to the header c in Table 1 to the index column in Table 5 and form the following table (Table 14) and verify that the a -row of Table 14 is identical with the a -row of Table 1, the b -row of Table 14 is identical with the b -row of Table 1, etc. This is to be repeated mutatis mutandis for all the elements of the generating set of A.
Table 14 :
| | a | c | b | d | d |
| a | a | a | a | d | d |
| c | a | c | b | d | d |
| b | a | b | c | d | d |
| d | d | d | d | a | a |
| e | d | e | e | a | a |

## Program

Computer software can be written to carry out Light's associativity test. Kehayopulu and Argyris have developed such a program for Mathematica.

## Extension

Light's associativity test can be extended to test associativity in a more general context.
Let T = { t$_1$, t$_2$, $\ldots$, t$_m$ } be a magma in which the operation is denoted by juxtaposition. Let X = { x$_1$, x$_2$, $\ldots$, x$_n$ } be a set. Let there be a mapping from the Cartesian product T × X to X denoted by (t, x) ↦ tx and let it be required to test whether this map has the property
    (st)x = s(tx) for all s, t in T and all x in X.
A generalization of Light's associativity test can be applied to verify whether the above property holds or not. In mathematical notations, the generalization runs as follows: For each t in T, let L(t) be the m × n matrix of elements of X whose i - th row is
    ( (t$_i$t)x$_1$, (t$_i$t)x$_2$, $\ldots$ , (t$_i$t)x$_n$ ) for i = 1, $\ldots$, m
and let R(t) be the m × n matrix of elements of X, the elements of whose j - th column are
    ( t$_1$(tx$_j$), t$_2$(tx$_j$), $\ldots$ , t$_m$(tx$_j$) ) for j = 1, $\ldots$, n.
According to the generalised test (due to Bednarek), that the property to be verified holds if and only if L(t) = R(t) for all t in T. When X = T, Bednarek's test reduces to Light's test.

## More advanced algorithms

There is a randomized algorithm by Rajagopalan and Schulman to test associativity in time proportional to the input size. (The method also works for testing certain other identities.) Specifically, the runtime is $O(n^{2}\log {\frac {1}{\delta }})$ for an $n\times n$ table and error probability $\delta$. The algorithm can be modified to produce a triple $\langle a,b,c\rangle$ for which $(ab)c\neq a(bc)$, if there is one, in time $O(n^{2}\log n\cdot \log {\frac {1}{\delta }})$.