editing disabled


A temperament mapping matrix, or M-map, is a Z-module homomorphism (aka abelian group homomorphism) T: J → K from the free Z-module (abelian group) J of JI ratios to a new free Z-module K, where K then comes to represent tempered intervals, that is to say, intervals of an abstract regular temperament. We can also consider Z-module homomorphisms S: J* → L*, where J* is the Z-module of linear functionals (elements of Hom(J, Z)) on J, and where we map directly from J* to another Z-module of linear functionals L*; this Z-module is unrelated to K above. A bit of analysis will reveal that these homomorphisms restrict vals to svals on a certain subgroup, and that the Z-module L which the elements of L* act on are smonzos. Hence, since these new homomorphisms can also be represented by integer matrices, we will call such matrices subgroup mapping matrices, or "val-maps" or V-maps when context demands they be distinguished from their temperamental counterparts, the M-maps.

If we use the convention that row matrices represent vals and column matrices represent monzos, then a matrix V is said to be a mapping matrix for a subgroup G of a JI module J if and only if the column module of V spans G and if V is of full column rank. Note that, unlike with M-maps, we drop the restriction that G must be saturated, so that we specifically allow for subgroups with prime powers and the like.

The column module of any subgroup mapping matrix is the submodule of J corresponding to the subgroup G. The row module of any subgroup mapping matrix V is the module of svals which take coefficients representing, in order, the mappings for the intervals specified by the columns of V. Note that, much like with M-maps, there is not a unique mapping matrix for any subgroup: any matrix V of full-column rank which has columns that form a basis for G will also send vals to svals on that subgroup, but the coefficients of the svals will change to reflect the basis of V.

Of note is that, much like temperament homomorphisms, these new subgroup homomorphisms also have a kernel, but this kernel is now a subspace of vals rather than monzos. For any V-map V and associated subgroup G defined by the columns of V, the kernel of V consists of those vals tempering out G. These vals have the property that, for any val k in the kernel and any other val v, (k+v)∙V = k∙V + v∙V = 0 + v∙V = v∙V. In other words, any two vals differing by an element in the left null module will restrict to the same sval. Rather than saying that these null vals are "tempered out," we instead say that they are restricted away, as their subgroup restriction under V is the zero sval.

As a final note, we can easily see if two V-maps represent the same subgroup by checking to see if they form the same normal interval list, or if they have the same Hermite normal form.

Dual Transformation

Much like with temperament mapping matrices, subgroup mapping matrices also have an associated dual transformation. Since the V-map represents a linear transformation S: J* → L*, the associated dual transformation is S*: L → J. Since L is the module that the module L* of svals acts on, we can identify L with smonzos, and since J is the module of JI monzos, S* maps from smonzos back to monzos. As with the dual transformation on a mapping matrix sending tvals → vals, this mapping is generally injective but not surjective. No two smonzos will map to the same monzo, and the only monzos in the image of this transformation are those lying in the submodule of J denoted by G.

The main transformation of any V-map V can be applied by matrix multiplication with the V-map on the right and a matrix with vals as rows on the left. Conversely, the dual transformation of V can be applied by matrix multiplication with the V-map on the left and a matrix with smonzos as columns on the right.


Say that our JI module J is in the 7-limit, and we want to look at temperaments on the 2.9/7.5/3 subgroup. We can create the V-map by forming a matrix in which the columns are the monzo representation of these intervals:

We can also write this matrix notationally as follows:

where it's understood that the kets are representing that the rows in this matrix are really column vectors, just written as rows due to an abuse of notation. A shorthand notation of this matrix is [|1 0 0 0>, |0 2 0 -1>, |0 -1 1 0>]. This matrix will be called V.

Subgroup Restriction
To restrict a val to the subgroup defined by the V-map, we'll left-multiply V by a val W. In this case, our val W will be the 7-limit patent val for 12-EDO:

Multiplying WV yields the result

which tells us that the restriction of the 12-EDO patent val to the 2.9/7.5/3 subgroup has a mapping of 12 steps for 2/1, a mapping of 4 steps for 9/7, and a mapping of 9 steps for 5/3.

We can also send temperament mapping matrices into the V-map. For instance, here's 7-limit sensi:

If we call this matrix M, then the matrix multiplication M∙V gives us the following result:

This tells us that the subgroup restriction of sensi to the 2.9/7.5/3 subgroup is a new temperament mapping on the subgroup which sends 2/1 to one generator, 9/7 to the other generator, and 5/3 to two 9/7's. Additionally, since this is the multiplication of an M-map and a V-map, the resulting matrix also has the interpretation of having a set of columns representing the tmonzos that the 7-limit sensi M-map sends 2/1, 9/7, and 5/3 to, respectively.

We can also look at the kernel of our V-map, which yields the null module spanned by <0 1 1 2|. Any vals which differ by any multiple of this null val will restrict down to the same sval. For instance, <12 19 28 34| restricts to <12 4 9| on the 2.9/7.5/3 subgroup, and <12 19 28 34| + <0 1 1 2| = <12 20 29 36| also restricts down exactly to <12 4 9|.

The Dual Transformation
V implies a dual transformation mapping smonzos to monzos. As an example, we'll consider the matrix of smonzos [|0 1 0>, |0 -2 1>|]. If this matrix is X, then the dual transformation can be found by multiplying V∙X, which yields

These monzos are the 7-limit representation of 9/7 and 245/243, respectively. Again, the "rows" here are in kets to specify that they're still supposed to be monzos and hence columns.