Domain basis: Difference between revisions

Cmloegcmluin (talk | contribs)
Vs. canonicalization in temperament merging: do not defactor: note about difference in enfactoring here
Cmloegcmluin (talk | contribs)
reorganize page to create an appropriate place to discuss interval basis intersections
Line 145: Line 145:
[[User:Cmloegcmluin/Interval_basis#Examples|A couple subsections ago]], we provided a couple examples where we used natural language to explain — between two interval subspaces — which one was a subspace of the other. But we still need to describe a method to determine this in general. Let's do that next.
[[User:Cmloegcmluin/Interval_basis#Examples|A couple subsections ago]], we provided a couple examples where we used natural language to explain — between two interval subspaces — which one was a subspace of the other. But we still need to describe a method to determine this in general. Let's do that next.


We can say that an interval subspace <math>B_1</math> is a subspace of another interval subspace <math>B_2</math> if when we merge<ref>The technical mathematical term for this is "sumset", not "union" as we might expect; in many contexts, "union" is the dual operation to "intersection", but for vector spaces, the dual operation to intersection is "sumset" (see page 4 of https://www2.math.upenn.edu/~siegelch/Notes/linalg.pdf). The difference between union and sumset can be explained like this: if we had two planes in a volume, their union would be both the planes, but their sumset would be the volume.</ref> <math>B_1</math> and <math>B_2</math> we just get <math>B_2</math> again. In layperson's terms, if <math>B_1</math> brings nothing to the table that <math>B_2</math> hasn't already brought, then it is completely contained by <math>B_2</math> and therefore is a subspace of it.
We can say that an interval subspace <math>B_1</math> is a subspace of another interval subspace <math>B_2</math> if when we merge <math>B_1</math> and <math>B_2</math> we just get <math>B_2</math> again. In layperson's terms, if <math>B_1</math> brings nothing to the table that <math>B_2</math> hasn't already brought, then it is completely contained by <math>B_2</math> and therefore is a subspace of it.


In order to fully explain this definition, however, we must expand upon what is meant by "merging". If you are familiar with [[temperament merging]], it's a similar idea: concatenate, then canonicalize the result.
For more information on merging interval bases, see [[User:Cmloegcmluin/Interval_basis#Merging]].
 
=== Concatenate ===
 
The first step is concatenation. This is the easy part. Suppose we're merging 2.3.5 and 2.3.7; the concatenation of those two is quite simply 2.3.5.2.3.7. Yes, that result contains a lot of repetition. But that's what the next step — the canonicalization step — is there to solve.
 
=== Canonicalize ===
 
==== Column Hermite normal form ====
 
First, we reduce the matrix. And the reduction method we will use is the [[Hermite normal form]]. If you are previously familiar with it, you may be surprised to see it here, because you may realize that it is defined for matrices, not lists of numbers. So far, when we've looked at subspaces — or at least looked at the bases that represent them — we've simply notated them as lists of numbers, such as 2.3.7. And in most contexts this number list notation is sufficient. However, in order to merge interval subspaces, we need to temporarily convert them into matrix form, in order to use the Hermite normal form.
 
To be exact, we want to use the ''column-style'' Hermite normal form, sometimes called column Hermite normal form for short. All this means is that we put the HNF call in an anti-transpose sandwich, [[Normal_lists#Defactored_Hermite_form_2|as described here]]).
 
==== Matrix conversion ====
 
Well, let's get to the matrix-ifying!
 
We can do this by factorizing the formal primes in just the same way we factorize intervals into prime count vectors, such as 5/4 factorizing to {{vector|-2 0 1}}. This is also the same way we represent comma intervals within the other key RTT basis: the comma basis.
 
But here, we're going one step deeper down! Now we're breaking down our formal primes — the building blocks of our intervals — into ''their own building blocks''. We can call these deeper building blocks '''formal prime basis elements'''.
 
Then, each resulting vector becomes a column of our desired matrix.
 
So, for example, 2.9/7.5 in the form of a matrix <math>B</math> looks like this. For convenience, we've labeled each column with the formal prime, and each row with the basis element:
 
 
<math>
 
\begin{array} {ccc}
 
\begin{array} {rrr}
\\
\end{array} \\
 
\begin{array} {rrr}
\scriptsize{2} \\
\scriptsize{3} \\
\scriptsize{5} \\
\scriptsize{7} \\
\end{array}
 
\end{array}
 
 
\begin{array} {ccc}
 
\begin{array} {ccc}
\scriptsize{2} & \scriptsize{9/7} & \scriptsize{5} \\
\end{array} \\
 
\left[ \begin{array} {rrr}
1 & 0 & 0 \\
0 & 2 & 0 \\
0 & 0 & 1 \\
0 & -1 & 1 \\
\end{array} \right]
 
\end{array}
 
</math>
 
 
To make a popular culture reference, you may be starting to get an [[Wikipedia:Inception|Inception]] vibe here: we're breaking primes into deeper primes (perhaps we could call this "intervalception"?). Indeed, this might all seem dizzyingly abstract, but fortunately, we don't need to go any deeper than this. And we assure you that this matrix representation of the interval basis will be quite helpful for comparing different interval bases.
 
==== Vs. canonicalization in temperament merging: do not defactor ====
 
There's an important difference between the canonicalization step as it's done with temperament merging versus with interval basis merging. When merging temperaments, it's typical to fully [[defactor]] them as well as [[normal form|normalize]] them, because [[The_pathology_of_enfactoring|enfactored representations of temperaments are pathological]]. Enfactored interval bases, however, are ''not'' pathological; they represent meaningfully distinct interval bases.<ref>Here's a key difference between an enfactored comma basis and an enfactored interval basis, by example. 2-enfactored meantone is {{bra|{{vector|-8 8 -2}}}}, representing a [[temperoid]] where somehow 6561/6400 = (81/80)² is tempered out but 81/80 is not, a situation which is musically absurd, and this is the crux of why comma basis enfactoring is pathological. We can achieve a similar but non-pathological situation with a nonstandard interval basis. In the 2.3.25 interval basis, the comma basis {{bra|{{vector|-8 8 1}}}} represents the temperament where 6561/6400 is tempered out. But this isn't absurd, because the temperament doesn't explicitly say that 81/80 is ''not'' tempered out. In this temperament, 81/80 doesn't even exist! The page [[Sane and insane temperaments]] contains some more discussion of ideas in this vicinity.</ref>
 
</ref>
 
For example, if we were to defactor the 2.9.5 interval basis, we'd get 2.3.5. But 2.9.5 is a perfectly reasonable interval basis that we don't wish to conflate with 2.3.5<ref>Even 4.9.25 is an acceptable interval basis. It's not a special situation where there's a common factor in the powers on each formal prime, which in this case is 2.</ref>.
 
More is left to be said about canonicalizing interval bases, but it is beyond the scope of this "Interval subspaces as subspaces of other interval subspaces" subsection. We will address it here: [[User:Cmloegcmluin/Interval basis#Canonicalization]].


=== Example ===
=== Example ===
Line 226: Line 153:
For instance, we can demonstrate how 2.25/9.11/7 is a subspace of 2.5/3.7.11 using this approach. If you've really got a knack for this stuff, you may be able to eyeball even this somewhat intense example, but it's obviously good to have a rigorous method like this to fall back on, if only to convince ourselves that we've got the right answer (or to automate things with code, as has been done with these methods in the [[RTT library in Wolfram Language]]).
For instance, we can demonstrate how 2.25/9.11/7 is a subspace of 2.5/3.7.11 using this approach. If you've really got a knack for this stuff, you may be able to eyeball even this somewhat intense example, but it's obviously good to have a rigorous method like this to fall back on, if only to convince ourselves that we've got the right answer (or to automate things with code, as has been done with these methods in the [[RTT library in Wolfram Language]]).


So, first, we concatenate our interval bases: 2.25/9.11/7.2.5/3.7.11.
So, first, we do the first step of merging interval bases: concatenate them. That gets us 2.25/9.11/7.2.5/3.7.11.


Next, we convert to a matrix <math>B</math>. Here, we've labeled the columns with the number-list representation of the interval basis, to help show the correspondence, as well as the rows with the basis elements:
The next step of merging is to canonicalize. To begin that, we convert our interval basis to a matrix <math>B</math>. Here, we've labeled the columns with the number-list representation of the interval basis, to help show the correspondence, as well as the rows with the basis elements:




Line 316: Line 243:


The canonical form of an interval basis requires a few steps to achieve:
The canonical form of an interval basis requires a few steps to achieve:
# Find the matrix representation of the interval basis, as described here: [[User:Cmloegcmluin/Interval basis#Matrix conversion]]
# Find the matrix representation of the interval basis.
# Put this matrix into column Hermite normal form. This step has the effect of sorting the formal primes so that those with higher primes as their basis elements come later, e.g. so that 7 comes after 9 even though 9 is a bigger number, because 9 factorizes into 3's.
# Put this matrix into column Hermite normal form. This step has the effect of sorting the formal primes so that those with higher primes as their basis elements come later, e.g. so that 7 comes after 9 even though 9 is a bigger number, because 9 factorizes into 3's.
# Eliminate any columns that are all zeros.
# Eliminate any columns that are all zeros.
# Convert the matrix back into a list of numbers (separated by periods).
# Convert the matrix back into a list of numbers (separated by periods).
# Take the [https://forum.sagittal.org/viewtopic.php?p=1296#undirected-value undirected value] of each number; that is, if it is less than 1, replace it with its reciprocal (which will be greater than 1). So this would flip e.g. the "subratio" 3/5 into its "superratio" 5/3, or little phi φ (~0.618) into big phi Φ (~1.618).
# Take the [https://forum.sagittal.org/viewtopic.php?p=1296#undirected-value undirected value] of each number; that is, if it is less than 1, replace it with its reciprocal (which will be greater than 1). So this would flip e.g. the "subratio" 3/5 into its "superratio" 5/3, or little phi φ (~0.618) into big phi Φ (~1.618).
== Matrix conversion ==
The reduction method we will use as part of canonicalization is the [[Hermite normal form]]. If you are previously familiar with it, you may be surprised to see it here, because you may realize that it is defined for matrices, not lists of numbers. So far, when we've looked at subspaces — or at least looked at the bases that represent them — we've simply notated them as lists of numbers, such as 2.3.7. And in most contexts this number list notation is sufficient. However, in order to merge interval subspaces, we need to temporarily convert them into matrix form, in order to use the Hermite normal form.
Well, let's get to the matrix-ifying!
We can do this by factorizing the formal primes in just the same way we factorize intervals into prime count vectors, such as 5/4 factorizing to {{vector|-2 0 1}}. This is also the same way we represent comma intervals within the other key RTT basis: the comma basis.
But here, we're going one step deeper down! Now we're breaking down our formal primes — the building blocks of our intervals — into ''their own building blocks''. We can call these deeper building blocks '''formal prime basis elements'''.
Then, each resulting vector becomes a column of our desired matrix.
So, for example, 2.9/7.5 in the form of a matrix <math>B</math> looks like this. For convenience, we've labeled each column with the formal prime, and each row with the basis element:
<math>
\begin{array} {ccc}
\begin{array} {rrr}
\\
\end{array} \\
\begin{array} {rrr}
\scriptsize{2} \\
\scriptsize{3} \\
\scriptsize{5} \\
\scriptsize{7} \\
\end{array}
\end{array}
\begin{array} {ccc}
\begin{array} {ccc}
\scriptsize{2} & \scriptsize{9/7} & \scriptsize{5} \\
\end{array} \\
\left[ \begin{array} {rrr}
1 & 0 & 0 \\
0 & 2 & 0 \\
0 & 0 & 1 \\
0 & -1 & 1 \\
\end{array} \right]
\end{array}
</math>
To make a popular culture reference, you may be starting to get an [[Wikipedia:Inception|Inception]] vibe here: we're breaking primes into deeper primes (perhaps we could call this "intervalception"?). Indeed, this might all seem dizzyingly abstract, but fortunately, we don't need to go any deeper than this. And we assure you that this matrix representation of the interval basis will be quite helpful for comparing different interval bases.
== Column Hermite normal form ==
To be exact, we want to use the ''column-style'' Hermite normal form, sometimes called column Hermite normal form for short. All this means is that we put the HNF call in an anti-transpose sandwich, [[Normal_lists#Defactored_Hermite_form_2|as described here]]).
== Vs. canonicalization in temperament merging: do not defactor ==
There's an important difference between the canonicalization step as it's done with comma bases (and mappings) and how it's done with interval bases. With the former, it's typical to fully [[defactor]] them as well as [[normal form|normalize]] them, because [[The_pathology_of_enfactoring|enfactored representations of temperaments are pathological]]. Enfactored interval bases, however, are ''not'' pathological; they represent meaningfully distinct interval bases.<ref>Here's a key difference between an enfactored comma basis and an enfactored interval basis, by example. 2-enfactored meantone is {{bra|{{vector|-8 8 -2}}}}, representing a [[temperoid]] where somehow 6561/6400 = (81/80)² is tempered out but 81/80 is not, a situation which is musically absurd, and this is the crux of why comma basis enfactoring is pathological. We can achieve a similar but non-pathological situation with a nonstandard interval basis. In the 2.3.25 interval basis, the comma basis {{bra|{{vector|-8 8 1}}}} represents the temperament where 6561/6400 is tempered out. But this isn't absurd, because the temperament doesn't explicitly say that 81/80 is ''not'' tempered out. In this temperament, 81/80 doesn't even exist! The page [[Sane and insane temperaments]] contains some more discussion of ideas in this vicinity.</ref>
For example, if we were to defactor the 2.9.5 interval basis, we'd get 2.3.5. But 2.9.5 is a perfectly reasonable interval basis that we don't wish to conflate with 2.3.5<ref>Even 4.9.25 is an acceptable interval basis. It's not a special situation where there's a common factor in the powers on each formal prime, which in this case is 2.</ref>.


== Example ==
== Example ==
Line 405: Line 395:


There are no zero columns to eliminate, we've already got the thing as a list of numbers since we've updated the labels on the matrix columns, and all of those numbers are super already, so we're done! The answer is 2.5/3.7/3.
There are no zero columns to eliminate, we've already got the thing as a list of numbers since we've updated the labels on the matrix columns, and all of those numbers are super already, so we're done! The answer is 2.5/3.7/3.
= Merging =
If you happen to already be familiar with [[temperament merging]], merging<ref>The technical mathematical term for this is "sumset", not "union" as we might expect; in many contexts, "union" is the dual operation to "intersection", but for vector spaces, the dual operation to intersection is "sumset" (see page 4 of https://www2.math.upenn.edu/~siegelch/Notes/linalg.pdf). The difference between union and sumset can be explained like this: if we had two planes in a volume, their union would be both the planes, but their sumset would be the volume.</ref> interval bases follows a similar pattern: concatenate, then canonicalize the result.
== Concatenate ==
This is the easy part. Suppose we're merging 2.3.5 and 2.3.7; the concatenation of those two is quite simply 2.3.5.2.3.7. Yes, that result contains a lot of repetition. But that's what the next step — the canonicalization step — is there to solve.
== Canonicalize ==
See [[User:Cmloegcmluin/Interval basis#Canonicalization]].
= Intersecting =
(TODO: fill out with results of that Andrew Young MathOverflow block matrix based solution)


= Changing interval basis =
= Changing interval basis =