# Basics

The multiplicative group generated by any finite set of rational numbers is an r-rank free abelian group. Thus, an abstract regular temperament, can be represented by a group homomorphism T: J → K from the group J of JI rationals to a quotient group K of tempered intervals. This homomorphism can also be represented by a integer matrix, called a temperament mapping matrix; when context is clear enough it's also sometimes just called a mapping matrix for the temperament in question. (Note that many group homomorphisms can correspond to the same temperament, simply mapping to a different choice of tempered coordinates.)

These are dual, in a certain sense, to subgroup basis matrices, which can be thought of as "co-tempering" vals in the same way that temperament mapping matrices "temper" monzos.

Assuming we use the convention that row matrices represent vals and column matrices represent monzos, then a matrix M is said to be a mapping matrix for a temperament T if and only if the right nullspace of M consists of the kernel of T, M is of full row rank, and the rows of M generate a subgroup of the dual group of vals which is saturated. There is generally not a unique matrix M satisfying this definition for arbitrary temperament T, as for any M which is a valid mapping for T, any matrix U∙M where U is unimodular will also be a valid mapping for T. The different mapping matrices obtainable in this way still temper out the same commas, but differ in the choice of basis for the quotient group of tempered intervals.

The integer column span of any mapping matrix is the quotient group of T-tempered intervals, also known as the quotient group of tempered monzos tmonzos for T. The integer row span of any mapping matrix for a temperament T is the subgroup of vals that all support T. Note also that this means that if T is of rank r, then any rank-r matrix in which the rows span the subgroup of vals supporting T will be a valid mapping for T.

Note also that since all mapping matrices for T will have the same integer row span, we can easily check to see if two matrices represent the same temperament by checking to see if they generate the same normal val list, or more generally if they have the same Hermite normal form.

# Dual Transformation

Any mapping matrix can be said to represent a linear map M: J → K, where J is a group of JI intervals and K is a quotient group of tempered intervals. There is thus an associated dual transformation M*: K* → J*, where J* and K* are the dual groups to J and K, respectively. J* is the dual group of vals on J, and K* is the group of tempered vals or tvals on K. As tempered vals can naturally be viewed as a subgroup of all vals, so M* represents a linear transformation mapping from tvals to vals. This mapping will generally be injective but not surjective; its image is the subgroup of vals supporting the associated temperament, and no two tvals map to the same val.

These two transformations correspond to different types of matrix multiplication: the ordinary transformation M corresponds to multiplication with the mapping on the left and a matrix whose columns are monzos on the right, and the dual transformation M* corresponds to multiplication with the mapping on the right and a matrix whose rows are tvals on the left.

# Example

11-limit porcupine tempers out 55/54, 64/63, and 100/99, and is supported by the patent vals for 15-EDO and 22-EDO. Since these two vals form a saturated subgroup of the dual group of 11-limit vals, then the matrix formed by setting the rows to these vals is a valid mapping matrix for porcupine:

$\left[ \begin{array}{rrrrrrl} \langle & 15 & 24 & 35 & 42 & 52 & |\\ \langle & 22 & 35 & 51 & 62 & 76 & | \end{array} \right]$

where the row vectors are still placed in bras as a notational device to signify that these are vals. If we put this in normal val list form, we get

$\left[ \begin{array}{rrrrrrl} \langle & 1 & 2 & 3 & 2 & 4 & |\\ \langle & 0 & -3 & -5 & 6 & -4 & | \end{array} \right]$

or, in shorthand, [<1 2 3 2 4|, <0 -3 -5 6 -4|]. We'll call this matrix P.

Tempering an Interval

We'll now right-multiply P by the following matrix M of two monzos, representing 2/1 and 3/2:

$\left[ \begin{array}{rr} 1 & -1\\ 0 & 1\\ 0 & 0\\ 0 & 0\\ 0 & 0 \end{array} \right]$

we can also write this matrix as

$\left[ \begin{array}{rrrrrrl} | & 1 & 0 & 0 & 0 & 0 & \rangle\\ | & -1 & 1 & 0 & 0 & 0 & \rangle \end{array} \right]$

or, in shorthand, [|1 0 0 0 0>, |-1 1 0 0 0>], where it's understood in both cases that the kets represent columns.

The result of PM is the matrix [|1 0>, |1 -3>], telling us that 2/1 maps to the tmonzo |1 0>, and that 3/2 maps to the tmonzo |1 -3>. This tells us that 2/1 maps to one of the generators for porcupine and that 3/2 is made up of one 2/1 minus three of the other generator. It so happens that the other generator is 10/9, which maps to |0 1>.

We can use this technique to indeed confirm that 55/54, 64/63, and 100/99 form a basis for the kernel of P by putting these intervals in monzo form as columns of a matrix N, which works out to be [|-1 -3 1 0 1>, |6 -2 0 -1 0>, |2 -2 2 0 -1>]. If we then evaluate the product P∙N we get the matrix [|0 0>, |0 0>, |0 0>], meaning that all of these intervals map to the unison tmonzo. This confirms that the kernel of porcupine does indeed lie in the kernel of P.

The Dual Transformation

To explore the dual transformation implied by P, we'll look at the tval matrix [<7 1|, <15 2|], where again the bras signify that the tvals represent matrix rows. The first tval maps the first generator (for which 2/1 is a transversal) to 7 steps and the second generator (for which 10/9 is a transversal) to 1 step, and similarly with the second tval. If we call this matrix V, then the result of V∙P is the matrix

$\left[ \begin{array}{rrrrrrl} \langle & 7 & 11 & 16 & 20 & 24 & |\\ \langle & 15 & 24 & 35 & 42 & 52 & | \end{array} \right]$

for which the rows are the patent vals for 7-EDO and 15-EDO, respectively. Since the dual transformation is injective, these vals can be interpreted as the full-limit vals which are implied by the <7 1| and <15 2| tvals. Additionally, since the image of the dual transformation is the set of vals supporting porcupine, and since the above two vals are linearly independent, the resulting matrix V∙P is another valid mapping matrix for porcupine. We can confirm this by putting the matrix back into normal val list form and getting [<1 2 3 2 4|, <0 -3 -5 6 -4|] as a result again.