Douglas Blumeyer's RTT How-To: Difference between revisions
Cmloegcmluin (talk | contribs) |
Cmloegcmluin (talk | contribs) fix bad vector and map templates |
||
Line 488: | Line 488: | ||
[[File:Different nestings.png|400px|thumb|left|'''Figure 5a.''' How to write matrices in terms of either columns/vectors/commas or rows/covectors/maps.]] | [[File:Different nestings.png|400px|thumb|left|'''Figure 5a.''' How to write matrices in terms of either columns/vectors/commas or rows/covectors/maps.]] | ||
We can extend our angle bracket notation (technically called [https://en.wikipedia.org/wiki/Bra%E2%80%93ket_notation bra-ket notation, or Dirac notation]<ref>Bra-ket notation comes to RTT from quantum mechanics, not algebra.</ref>) to handle matrices by nesting rows inside columns, or columns inside rows ''(see Figure 5a)''. For example, we could have written our comma-basis like this: {{ | We can extend our angle bracket notation (technically called [https://en.wikipedia.org/wiki/Bra%E2%80%93ket_notation bra-ket notation, or Dirac notation]<ref>Bra-ket notation comes to RTT from quantum mechanics, not algebra.</ref>) to handle matrices by nesting rows inside columns, or columns inside rows ''(see Figure 5a)''. For example, we could have written our comma-basis like this: {{bra|{{vector|-4 4 -1}} {{vector|-10 -1 5}}}}. Starting from the outside, the {{map|}} tells us to think in terms of a row. It's just that this row isn't a row of numbers, like the ones we've gotten used to by now, but rather a row of ''columns of'' numbers. So this row houses two such columns. Alternatively, we could have written this same matrix like {{ket|{{map|-4 -10}} {{map|4 -1}} {{map|-1 5}}}}, but that would obscure the fact that it is the combination of two familiar commas (but that notation ''would'' be useful for expressing a matrix built out of multiple maps, as we will soon see). | ||
Sometimes a comma-basis may have only a single comma. That’s okay. A single vector can become a matrix. To disambiguate this situation, you could put the vector inside row brackets, like this: {{ | Sometimes a comma-basis may have only a single comma. That’s okay. A single vector can become a matrix. To disambiguate this situation, you could put the vector inside row brackets, like this: {{bra|{{vector|-4 4 -1}}}}. Similarly, a single covector can become a matrix, by nesting inside column brackets, like this: {{ket|{{map|19 30 44}}}}. | ||
If a comma-basis is the name for the matrix made out of commas, then we could say a “'''mapping'''” is the name for the matrix made out of maps. Why isn't this one a "basis", you ask? Well, it can be thought of as a basis too. It depends on the context. When you use the word "mapping" for it, you're treating it like a function, or a machine: it takes in intervals, and spits out new forms of intervals. That's how we've been using it here. But in other places, you may be thinking of this matrix as a basis for the infinite space of possible maps that could be combined to produce a matrix which works the same way as a given mapping, i.e. it tempers out the same commas. In these contexts, it might make more sense to call such a mapping matrix a "mapping-row-basis". | If a comma-basis is the name for the matrix made out of commas, then we could say a “'''mapping'''” is the name for the matrix made out of maps. Why isn't this one a "basis", you ask? Well, it can be thought of as a basis too. It depends on the context. When you use the word "mapping" for it, you're treating it like a function, or a machine: it takes in intervals, and spits out new forms of intervals. That's how we've been using it here. But in other places, you may be thinking of this matrix as a basis for the infinite space of possible maps that could be combined to produce a matrix which works the same way as a given mapping, i.e. it tempers out the same commas. In these contexts, it might make more sense to call such a mapping matrix a "mapping-row-basis". | ||
Line 502: | Line 502: | ||
=== null-space === | === null-space === | ||
There’s nothing special about the pairing of meantone and magic. We could have chosen meantone|hanson, or magic|negri, etc. A matrix formed out of the meet of any two of these particular commas will capture the same exact null-space of {{ | There’s nothing special about the pairing of meantone and magic. We could have chosen meantone|hanson, or magic|negri, etc. A matrix formed out of the meet of any two of these particular commas will capture the same exact null-space of {{ket|{{map|19 30 44}}}}. | ||
We already have the tools to check that each of these commas’ vectors is tempered out individually by the mapping-row {{map|19 30 44}}; we learned this bit in the very first section: all we have to do is make sure that the comma maps to zero steps in this ET. But that's not a special relationship between 19-ET and any of these commas ''individually''; each of these commas are tempered out by many different ETs, not just 19-ET. The special relationship 19-ET has is to a null-space which can be expressed in basis form as the meet of ''two'' commas (at least in the 5-limit; more on this later). In this way, the comma-bases which represent the meet of two commas are greater than the sum of their individual parts. | We already have the tools to check that each of these commas’ vectors is tempered out individually by the mapping-row {{map|19 30 44}}; we learned this bit in the very first section: all we have to do is make sure that the comma maps to zero steps in this ET. But that's not a special relationship between 19-ET and any of these commas ''individually''; each of these commas are tempered out by many different ETs, not just 19-ET. The special relationship 19-ET has is to a null-space which can be expressed in basis form as the meet of ''two'' commas (at least in the 5-limit; more on this later). In this way, the comma-bases which represent the meet of two commas are greater than the sum of their individual parts. | ||
We can confirm the relationship between an ET and its null-space by converting back and forth between them. There exists a mathematical function which — when input any one of these comma-bases — will output {{ | We can confirm the relationship between an ET and its null-space by converting back and forth between them. There exists a mathematical function which — when input any one of these comma-bases — will output {{ket|{{map|19 30 44}}}}, thus demonstrating the various bases' equivalence with respect to it. If the operation called "taking the null-space" is what gets you from {{ket|{{map|19 30 44}}}} to one basis for the null-space, then ''this'' mathematical function is in effect ''undoing'' the null-space operation; maybe we could call it an anti-null-space operation. | ||
And interestingly enough, as you'll soon see, the process is almost the same to take the null-space as it is to undo it. | And interestingly enough, as you'll soon see, the process is almost the same to take the null-space as it is to undo it. | ||
Line 608: | Line 608: | ||
</math> | </math> | ||
And ta-da! You’ve found a mapping from a comma-basis, and it is {{ | And ta-da! You’ve found a mapping from a comma-basis, and it is {{ket|{{map|19 30 44}}}}. In other words, for this temperament, you have converted a basis for its null-space to a row-basis for its mapping row-space. Feel free to try this with any other combination of two commas tempered out by this mapping-row. | ||
So why the anti-transpose sandwich? What we (and everyone) want in a canonical mapping is to have a triangle of zeros in the bottom left corner. What we want in a comma-basis is also to have a triangle of zeros in the bottom left corner. But the comma-basis is on the other side of duality from the mapping, so it must be transposed before we can apply our nullSpaceBasis[] function to it, because that function is designed for mappings. But when we transpose the comma-basis we end up with the triangle of zeros in the top right. If we take the null-space of that and then transpose it back again, we don't get our canonical form of the mapping, we get a mapping with a triangle of zeros in the top right. The way to fix this is to anti-transpose instead of transpose, before and after taking the null-space. Because when you anti-transpose the comma-basis, you still turn columns into rows, but this time the triangle of zeros stays on the bottom left. | So why the anti-transpose sandwich? What we (and everyone) want in a canonical mapping is to have a triangle of zeros in the bottom left corner. What we want in a comma-basis is also to have a triangle of zeros in the bottom left corner. But the comma-basis is on the other side of duality from the mapping, so it must be transposed before we can apply our nullSpaceBasis[] function to it, because that function is designed for mappings. But when we transpose the comma-basis we end up with the triangle of zeros in the top right. If we take the null-space of that and then transpose it back again, we don't get our canonical form of the mapping, we get a mapping with a triangle of zeros in the top right. The way to fix this is to anti-transpose instead of transpose, before and after taking the null-space. Because when you anti-transpose the comma-basis, you still turn columns into rows, but this time the triangle of zeros stays on the bottom left. | ||
Line 632: | Line 632: | ||
Notice how when writing our comma-basis in Wolfram Language, we have to write it differently than we probably would otherwise. Wolfram doesn't understand RTT's angle bracket syntax for indicating how a matrix is sliced and diced; it supports only one way of writing matrices: as lists within lists, where the outermost list is always assumed to be vertical. So if we have a comma-basis with two commas, we can't just write one comma and then the other; we have to do one element from each comma in a group at a time. Also, note that our output is within two layers of curly brackets; this is because it's a matrix with one row, not a vector with one column. None of this is a huge deal or anything, but again, it may just take a little getting used to. | Notice how when writing our comma-basis in Wolfram Language, we have to write it differently than we probably would otherwise. Wolfram doesn't understand RTT's angle bracket syntax for indicating how a matrix is sliced and diced; it supports only one way of writing matrices: as lists within lists, where the outermost list is always assumed to be vertical. So if we have a comma-basis with two commas, we can't just write one comma and then the other; we have to do one element from each comma in a group at a time. Also, note that our output is within two layers of curly brackets; this is because it's a matrix with one row, not a vector with one column. None of this is a huge deal or anything, but again, it may just take a little getting used to. | ||
Now the null-space function, to take you from {{ | Now the null-space function, to take you from {{ket|{{map|19 30 44}}}} back to the matrix, is pretty much the same thing, but simpler! No need to anti-transpose. Just start at the augmentation step: | ||
<math> | <math> | ||
Line 696: | Line 696: | ||
</math> | </math> | ||
So that’s not any of the commas we’ve looked at so far (it’s the [[19-comma]] and the [[acute limma]]). But it is clear to see that either of them would be tempered out by 19-ET (no need to map by hand — just look at these commas side-by-side with the mapping-row {{ | So that’s not any of the commas we’ve looked at so far (it’s the [[19-comma]] and the [[acute limma]]). But it is clear to see that either of them would be tempered out by 19-ET (no need to map by hand — just look at these commas side-by-side with the mapping-row {{ket|{{map|19 30 44}}}} and it should be apparent). We're done! | ||
{| class="wikitable" | {| class="wikitable" | ||
Line 723: | Line 723: | ||
</math> | </math> | ||
This matrix represents meantone. In our angle bracket notation, we would write it as two covectors inside a column bracket (one column of two rows), like this: {{ | This matrix represents meantone. In our angle bracket notation, we would write it as two covectors inside a column bracket (one column of two rows), like this: {{ket|{{map|5 8 12}} {{map|7 11 16}}}}. | ||
Again, we find ourselves in the position where we must reconcile a strange new representation of an object with an existing one. We already know that meantone can be represented by the vector for the comma it tempers out, {{vector|-4 4 -1}}. How are these two representations related? | Again, we find ourselves in the position where we must reconcile a strange new representation of an object with an existing one. We already know that meantone can be represented by the vector for the comma it tempers out, {{vector|-4 4 -1}}. How are these two representations related? | ||
Well, it’s actually quite simple! They’re related in the same way as {{ | Well, it’s actually quite simple! They’re related in the same way as {{ket|{{map|19 30 44}}}} was related to {{bra|{{vector|-4 4 -1}} {{vector|-10 -1 5}}}}: by the null-space operation. Specifically, {{bra|{{vector|-4 4 -1}}}} is a basis for the null-space of the temperament with mapping-row-basis {{ket|{{map|5 8 12}} {{map|7 11 16}}}}, because it is the minimal representation of all the commas tempered out by meantone temperament, which means mapped to zeros by the meantone mapping. | ||
We can work this one out by hand too: | We can work this one out by hand too: | ||
Line 816: | Line 816: | ||
|} | |} | ||
And there’s our {{ | And there’s our {{bra|{{vector|4 -4 1}}}}<ref>Interestingly, the other two columns in the bottom half of this matrix are valuable too. They tell you prime count vectors that would work for your generators. In this case, the two vectors are {{vector|1 0 0}} and {{vector|-8 5 0}}, so that tells you that the octave and the [[diesis]] could generate meantone. They're not necessarily the ''best'' generators, though. You can find other generators from these by adding or subtracting temperament commas, because of course — being tempered out — don't change anything.</ref>. Feel free to try reversing the operation by working out the mapping-row-basis from this if you like. And/or you could try working out that {{bra|{{vector|4 -4 1}}}} is a basis for the null-space of any other combination of ETs we found that could specify meantone, such as 7&12, or 12&19. | ||
It’s worth noting that, just as 2 commas were exactly enough to define a rank-1 temperament, though there were an infinitude of equivalent pairs of commas we could choose to fill that role, there’s a similar thing happening here, where 2 maps are exactly enough to define a rank-2 temperament, but an infinitude of equivalent pairs of them. We can even see that we can convert between these maps using Gauss-Jordan addition and subtraction, just like we could manipulate commas to get from one to the other. For example, the map for 12-ET {{map|12 19 28}} is exactly what you get from summing the terms of 5-ET {{map|5 8 12}} and 7-ET {{map|7 11 16}}: {{map|5+7 8+11 12+16}} = {{map|12 19 28}}. Cool! | It’s worth noting that, just as 2 commas were exactly enough to define a rank-1 temperament, though there were an infinitude of equivalent pairs of commas we could choose to fill that role, there’s a similar thing happening here, where 2 maps are exactly enough to define a rank-2 temperament, but an infinitude of equivalent pairs of them. We can even see that we can convert between these maps using Gauss-Jordan addition and subtraction, just like we could manipulate commas to get from one to the other. For example, the map for 12-ET {{map|12 19 28}} is exactly what you get from summing the terms of 5-ET {{map|5 8 12}} and 7-ET {{map|7 11 16}}: {{map|5+7 8+11 12+16}} = {{map|12 19 28}}. Cool! | ||
Line 835: | Line 835: | ||
Let’s consider some facts: | Let’s consider some facts: | ||
* {{ | * {{ket|{{map|19 30 44}}}} is the mapping for a rank-1 temperament. | ||
* {{ | * {{ket|{{map|5 8 12}} {{map|7 11 16}}}} is the mapping for a rank-2 temperament. | ||
* A rank-1 temperament has one generator. | * A rank-1 temperament has one generator. | ||
* A rank-2 temperament has two generators. | * A rank-2 temperament has two generators. | ||
Line 929: | Line 929: | ||
* We’ve made it to a critical point here: we are now able to explain why RTT is called “regular” temperament theory. Regular here is a mathematical term, and I don’t have a straightforward definition of it for you, but it apparently refers to the fact that all intervals in the tuning are combinations of only these specified generators. So there you go. | * We’ve made it to a critical point here: we are now able to explain why RTT is called “regular” temperament theory. Regular here is a mathematical term, and I don’t have a straightforward definition of it for you, but it apparently refers to the fact that all intervals in the tuning are combinations of only these specified generators. So there you go. | ||
* Both {{ | * Both {{ket|{{map|5 8 12}} {{map|7 11 16}}}} and {{ket|{{map|1 1 0}} {{map|0 1 4}}}} are equivalent mappings, then. In other words, they are both mapping-row-bases of the same mapping row-space. Converting between them is sometimes called a “change of basis”, though this is a different sort of “basis” than the basis of a space, like comma-bases or mapping-row-bases. Using what we know now, it may be clearer to think of it as a “change of generators”. We’ll look at this idea more in the tuning section later. | ||
* Note well: this is not to say that {{map|1 1 0}} or {{map|0 1 4}} ''are'' the generators for meantone. They are generator ''mappings'': when assembled together, they collectively describe behavior of the generators, but they are ''not'' themselves the generators. This situation can be confusing; it confused me for many weeks. I thought of it this way: because the first generator is 2/1 — i.e. {{vector|1 0 0}} maps to {{vector|1 0}} — referring to {{map|1 1 0}} as the octave or period seems reasonable and is effective when the context is clear. And similarly, because the second generator is 3/2 — i.e. {{vector|-1 1 0}} maps to {{vector|0 1}} — referring to {{map|0 1 4}} as the fifth or the generator seems reasonable as is effective when the context is clear. But it's critical to understand that the first generator "being" the octave here is ''contingent upon the definition of the second generator'', and vice versa, the second generator "being" the fifth here is ''contingent upon the definition of the first generator''. Considering {{map|1 1 0}} or {{map|0 1 4}} individually, we cannot say what intervals the generators are. What if the mapping was {{ | * Note well: this is not to say that {{map|1 1 0}} or {{map|0 1 4}} ''are'' the generators for meantone. They are generator ''mappings'': when assembled together, they collectively describe behavior of the generators, but they are ''not'' themselves the generators. This situation can be confusing; it confused me for many weeks. I thought of it this way: because the first generator is 2/1 — i.e. {{vector|1 0 0}} maps to {{vector|1 0}} — referring to {{map|1 1 0}} as the octave or period seems reasonable and is effective when the context is clear. And similarly, because the second generator is 3/2 — i.e. {{vector|-1 1 0}} maps to {{vector|0 1}} — referring to {{map|0 1 4}} as the fifth or the generator seems reasonable as is effective when the context is clear. But it's critical to understand that the first generator "being" the octave here is ''contingent upon the definition of the second generator'', and vice versa, the second generator "being" the fifth here is ''contingent upon the definition of the first generator''. Considering {{map|1 1 0}} or {{map|0 1 4}} individually, we cannot say what intervals the generators are. What if the mapping was {{ket|{{map|0 1 4}} {{map|1 2 4}}}} instead? We'd still have the first generator mapping as {{map|1 1 0}}, but now that the second generator mapping is {{map|1 2 4}}, the two generators must be the fourth and the fifth. In summary, neither mapping-row describes a generator in a vacuum, but does so in the context of all the other mapping-rows. | ||
* This also gives us a new way to think about the scale tree patterns. Remember how earlier we pointed out that {{map|12 19 28}} was simply {{map|5 8 12}} + {{map|7 11 16}}? Well, if {{ | * This also gives us a new way to think about the scale tree patterns. Remember how earlier we pointed out that {{map|12 19 28}} was simply {{map|5 8 12}} + {{map|7 11 16}}? Well, if {{ket|{{map|5 8 12}} {{map|7 11 16}}}} is a way of expressing meantone in terms of its two generators, you can imagine that 12-ET is the point where those two generators converge on being the same exact size<ref>For real numbers <span><math>p,q</math></span> we can make the two generators respectively <span><math>\frac{p}{5p+7q}</math></span> and <span><math>\frac{q}{5p+7q}</math></span> of an octave, e.g. <span><math>(p,q)=(1,0)</math></span> for 5-ET, <span><math>(0,1)</math></span> for 7-ET, <span><math>(1,1)</math></span> for 12-ET, and many other possibilities.</ref>. If they become the same size, then they aren’t truly two separate generators, or at least there’s no effect in thinking of them as separate. And so for convenience you can simply combine their mappings into one. You could imagine gradually increasing the size of one generator and decreasing the size of the other until they were both 100¢. As long as you maintain the correct proportion, you'll stay along the meantone line.. | ||
* Technically speaking, when we first learned how to map vectors with ETs, we could think of those outputs as vectors too, but they'd be 1-dimensional vectors, i.e. if 12-ET maps 16/15 to 1 step, we could write that as {{map|12 19 28}}{{vector|4 -1 -1}} = {{vector|1}}, where writing the answer as {{vector|1}} expresses that 1 step as 1 of the only generator in this equal temperament. | * Technically speaking, when we first learned how to map vectors with ETs, we could think of those outputs as vectors too, but they'd be 1-dimensional vectors, i.e. if 12-ET maps 16/15 to 1 step, we could write that as {{map|12 19 28}}{{vector|4 -1 -1}} = {{vector|1}}, where writing the answer as {{vector|1}} expresses that 1 step as 1 of the only generator in this equal temperament. | ||
Line 972: | Line 972: | ||
In this rank-2 example of 5-limit meantone, we have 2 generators, so the lattice is 2D, and can therefore be viewed on a simple square grid on the page. Up and down correspond to movements by one generator, and left and right correspond to movements by the other generator. | In this rank-2 example of 5-limit meantone, we have 2 generators, so the lattice is 2D, and can therefore be viewed on a simple square grid on the page. Up and down correspond to movements by one generator, and left and right correspond to movements by the other generator. | ||
The next step is to understand our primes in terms of this temperament’s generators. Meantone’s mapping is {{ | The next step is to understand our primes in terms of this temperament’s generators. Meantone’s mapping is {{ket|{{map|1 0 -4}} {{map|0 1 4}}}}. This maps prime 2 to one of the first generators and zero of the second generators. This can be seen plainly by slicing the first column from the matrix; we could even write it as the vector {{vector|1 0}}. Similarly, this mapping maps prime 3 to zero of the first generator and one of the second generator, or in vector form {{vector|0 1}}. Finally, this mapping maps prime 5 to negative four of the first generator and four of the second generator, or {{vector|-4 4}}. | ||
So we could label the nodes with a list of approximations. For example, the node at {{vector|-4 4}} would be ~5. We could label ~9/8 on {{vector|-3 2}} just the same as we could label {{vector|-3 2}} 9/8 in JI, however, here, we can also label that node ~10/9, because {{vector|1 -2 1}} → 1×{{vector|1 0}} + -2×{{vector|0 1}} + 1×{{vector|-4 4}} = {{vector|1 0}} + {{vector|0 -2}} + {{vector|-4 4}} = {{vector|-3 2}}. Cool, huh? Because conflating 9/8 and 10/9 is a quintessential example of the effect of tempering out the meantone comma ''(see Figure 5b)''. | So we could label the nodes with a list of approximations. For example, the node at {{vector|-4 4}} would be ~5. We could label ~9/8 on {{vector|-3 2}} just the same as we could label {{vector|-3 2}} 9/8 in JI, however, here, we can also label that node ~10/9, because {{vector|1 -2 1}} → 1×{{vector|1 0}} + -2×{{vector|0 1}} + 1×{{vector|-4 4}} = {{vector|1 0}} + {{vector|0 -2}} + {{vector|-4 4}} = {{vector|-3 2}}. Cool, huh? Because conflating 9/8 and 10/9 is a quintessential example of the effect of tempering out the meantone comma ''(see Figure 5b)''. | ||
Line 978: | Line 978: | ||
[[File:Mapping to tempered vector.png|400px|thumb|right|'''Figure 5b.''' Converting from a JI interval vector to a tempered interval vector, with one less rank, conflating intervals related by the tempered out comma.]] | [[File:Mapping to tempered vector.png|400px|thumb|right|'''Figure 5b.''' Converting from a JI interval vector to a tempered interval vector, with one less rank, conflating intervals related by the tempered out comma.]] | ||
Sometimes it may be more helpful to imagine slicing your mapping matrix the other way, by columns (vectors) corresponding to the different primes, rather than rows (covectors) corresponding to generators. Meaning we can look at {{ | Sometimes it may be more helpful to imagine slicing your mapping matrix the other way, by columns (vectors) corresponding to the different primes, rather than rows (covectors) corresponding to generators. Meaning we can look at {{ket|{{map|1 0 -4}} {{map|0 1 4}}}} as a matrix of three vectors, {{bra|{{vector|1 0}} {{vector|0 1}} {{vector|-4 4}}}} which tells us that 2/1 is {{vector|1 0}}, 3/1 is {{vector|0 1}}, and 5/1 is {{vector|-4 4}}}}. | ||
And so we can see that tempering has reduced the dimensionality of our lattice by 1. Or in other words, the dimensionality of our lattice was always the rank; it’s just that in JI, the rank was equal to the dimensionality. And what’s happened by reducing this rank is that we eliminated one of the primes in a sense, by making it so we can only express things in terms of it via combinations of the other remaining primes. | And so we can see that tempering has reduced the dimensionality of our lattice by 1. Or in other words, the dimensionality of our lattice was always the rank; it’s just that in JI, the rank was equal to the dimensionality. And what’s happened by reducing this rank is that we eliminated one of the primes in a sense, by making it so we can only express things in terms of it via combinations of the other remaining primes. | ||
Line 1,107: | Line 1,107: | ||
</math> | </math> | ||
If you take the integer canonical form of {{ | If you take the integer canonical form of {{ket|{{map|5 8 12}} {{map|7 11 16}}}}, that’s what you get. It’s also what you get if you take the integer canonical form of {{ket|{{map|12 19 28}} {{map|19 30 44}}}}, etc. That’s the power of canonicalization. | ||
To find the integer canonical form, we can combine the two processes we already know how to do: null-space for getting from a mapping-row-basis to a comma-basis, and anti-null-space to get from a comma-basis to a mapping-row-basis. Basically, to achieve canonical form of one type of basis, we convert it into the other type of basis, then back, and voilà: canonicalization. | To find the integer canonical form, we can combine the two processes we already know how to do: null-space for getting from a mapping-row-basis to a comma-basis, and anti-null-space to get from a comma-basis to a mapping-row-basis. Basically, to achieve canonical form of one type of basis, we convert it into the other type of basis, then back, and voilà: canonicalization. |