editing disabled


The multiplicative group generated by any finite set of rational numbers, which is an r-rank free abelian group, also naturally has the structure of being a Z-module. Thus, an abstract regular temperament, which is a group homomorphism T: J → K from the group J of JI rationals to a group K of tempered intervals, also has the additional structure of being a Z-module homomorphism. 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. Since there is more than one type of mapping matrix which appears in music theory, it has also more rarely been called a "monzo-map" or M-map when context demands, as opposed to the V-map which is a mapping on vals.

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 null module of M consists of the kernel of T, M is of full row rank, and the rows of M generate a submodule 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 tempered interval module.

The column module of any mapping matrix is the module of T-tempered intervals, also known as the module of tmonzos for T. The row module of any mapping matrix for a temperament T is the submodule of all vals supporting T. Note also that this means that if T is of rank r, then a rank-r matrix in which the rows are r linearly independent vals supporting T and which form a saturated submodule of the module of vals will be a valid mapping for T.

Note also that since all mapping matrices for T will have the same row module, 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 module of JI intervals and K is a module of tempered intervals. There is thus an associated dual transformation M*: K* → J*, where J* and K* are the dual modules to J and K, respectively. J* is the module of vals on J, and K* is the module of tvals on K, so M* represents a linear transformation mapping from tvals to vals. This mapping will generally be injective but not surjective; its image is the submodule 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.


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 submodule of the module of 11-limit vals, then the matrix formed by setting the rows to these vals is a valid mapping matrix for porcupine:

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

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:

we can also write this matrix as

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 null module 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 null module 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

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.