Given a reduced list of p-limit vals V, we may define a set of transversal generators for V as a set of p-limit intervals q such that one of the vals of V maps q to 1 and the rest map it to 0. By reduced is meant that the gcd of the elements of each of the vals is 1--or in other words, none of the vals are contorted--and that they are linearly independent, so that if there are r vals, the rank of V as a matrix is r.
If v1, v2, ... vr are the vals of V and t1, t2, ... tr are the corresponding transversal generators, then for any p-limit q we have, modulo the regular temperament defined by V
q ≅ t1^v1(q) * t2^v2(q) * ... * tr^vr(q)
In this way the transversal generators provide a transversal of the p-limit, and hence the name.
Suppose V consists of the 7-limit patent vals for 12 and 19; that is, V = [<12 19 28 34|, <19 30 44 53|]. Then a corresponding list of transversal generators is [49/48, 36/35]. 49/48 corresponds to one step of 12et, and zero steps of 19et, whereas 36/35 is zero steps of 12et, and one step of 19et. This gives us a septimal meantone transversal of the 7-limit where 3/2 is represented by (49/48)^7 * (36/35)^11, and 2 is represented by (49/48)^12 * (36/35)^19. A more familiar septimal meantone transversal starts from the normal val list, [<1 0 -4 -13|, <0 1 4 10|], which corresponds to the transversal generators [2, 3].
Given a list of transversal generators, we may append a comma basis for V and obtain a basis for the entire p-limit. For instance, we may extend [49/48, 36/35] to [49/48, 36/35, 81/80, 126/125]. Taking the corresponding matrix of monzos, whose rows are monzos for this list, inverting it and then transposing, we obtain
[<12 19 28 34|, <19 30 44 53|, <-4 -6 -9 -11|, <-5 -8 -12 -14|]
This is a unimodular matrix defining a change of basis for the p-limit.
For another example, consider [<1 1 1 2|, <0 2 1 1|, <0 0 2 1|] which is the normal val list for breed temperament, the temperament tempering out 2401/2400. A corresponding list of transversal generators is [2, 49/40, 10/7].
Finding the transversal generators
We can find transveral generators for V by the following procedure:
- Take the transpose of the pseudoinverse of V, call that U
- Find a basis for the commas of V
- For each row U[i] of U, clear denominators and append the monzos of the comma basis for V
- Saturate the result to a list of monzos, call that S
- Apply the ith val V[i] (dot product) to each element of S
- Insert V[i].S[j] in front of the elements of S[j] as the first element, obtaining the jth element T[j] of a modified list T
- Hermite reduce the modified list T, take the first row, and remove the first element (which should be a 1.)
- Consider the rest to be a monzo, which may be converted to a rational number if you prefer
- This is a corresponding transveral generator to the ith val V[i] of V; it may be reduced to an equivalent generator of minimal Tenney height by multiplying by the commas of V