# Saturation

The set of n-tuples of integers Z^n such that two n-tuples can be added coordinatewise is the free abelian group of rank n. Its subgroups have the property of **saturation** if for any element a of Z^n, if an integer multiple m*a of a belongs to a sublattice V, then a already belongs to V. Another way to put it is that if some linear combination with rational coefficients q1*v1 + ... + qk*vk of elements of V belongs to Z^n, then it belongs to V. For the latter definition we consider Z^n to be contained in the n-dimensional real vector space R^n, in which case Z^n is often called the integer lattice, or grid lattice.

If C represents the commas (nullspace or kernel) of a supposed regular temperament, i.e. the intervals it tempers out, then if C isn't saturated the supposed temperament it defines may be regarded as pathological, as it has notes with no clear interpretation (some JI intervals cannot be reached by a generator in the tempered lattice). For example, if (81/80)^2 = 6561/6400 is tempered out but 81/80 is not, then it is not clear how the tempered versions of 5/4 and 81/64 are related, as they are not the same note yet two of them in succession *are* the same note. This is called a *torsion* problem. Similarly, if V is the subgroup of vals of the temperament, and is not saturated, then we obtain a temperament of sorts in which all of the notes cannot be reached by tempered intervals (cannot be reached by tempering a JI interval); this at least is an actual system of musical intervals, but disconnected. This has been called a **contorsion** problem.

For example, consider the "temperament" with commas generated by 126/125 and 3645/3584. The group generated by the monzos |1 2 -3 1> and |-9 6 1 -1> is not saturated, since (126/125)*(3645/3584) = (81/80)^2, but 81/80 does not belong to the group. Hence (81/80)^2 is tempered out, but 81/80 is not, and we have torsion. If we take the two vals <12 19 28 34| and <26 41 60 72| we similarly get contorsion. However, this 5- and 7-limit contorsion can be fixed in a way by extending to the 11-limit, and interpreting the "unobtainable" notes as notes reached in the 11-limit. Adding 245/242 to the commas (81/80 and 126/125) of septimal meantone is one way of reinterpreting the situation.

Because unsaturated subgroups of Z^n are for these reasons problematic, it is useful to have a means to saturate them; that is, to find the minimal saturated subgroup of Z^n containing the given subgroup. We may do this by inverting the right-reducing matrix which in part converts a matrix of basis elements for the subgroup V to Smith normal form. If A is a matrix with r (the rank) rows of dimension n whose rows form a basis for V, then there are two square matrices L and R, such that S = LAR, where S is the Smith normal form. The right-reducing matrix is R, the matrix multiplying A on the right. The first r rows of R generate the saturation of V. This procedure is only useful if there is a routine for finding the Smith normal form available, so we will assume there is one and not concern ourselves with the Smith form as such.

To give an example, consider the matrix [<12 19 28 34|, <26 41 60 72|] whose rows are the two vals we considered above. The Smith form itself is the 2x4 matrix [[1 0 0 0], [0 2 0 0]]; this does not concern us. The left-reducing matrix does not concern us either; our interest lies in the right reducing matrix, which is an invertible square integral matrix, [[-11 19 4 13], [7 -12 -4 -10], [0 0 1 0], [0 0 0 1]]. Inverting this matrix gives another square integral matrix, [<12 19 28 34|, <7 11 16 19|, <0 0 1 0|, <0 0 0 1|]. The rank of V is two, so to find a basis for the saturation of V, we take the first two rows, which gives us the group generated by [<12 19 28 34|, <7 11 16 19|]. The normal val list for this is [<1 0 -4 -13|, <0 1 4 10|], which are period and generator maps for septimal meantone, which is the saturated temperament corresponding to the contorted V.

To test for saturation, we may take the wedge product of the generators. Wedging <26 41 60 72| with <12 19 28 34| gives us <<2 8 20 8 26 24||; this is not zero, so the rank of the group these generate is two. However the coefficients have a gcd of two, and hence the group is not saturated; for saturation, the coefficients must be relatively prime, with a gcd of one.

# Wolfram Language implementation

rightReducingMatrix[m_] := Last[SmithDecomposition[m]] geneDefactor[m_] := Take[Inverse[rightReducingMatrix[m]], MatrixRank[m]]