:: Intro 

We've talked about two ways to define EDOs. 

1) In the chapter "EDO And Non-EDO Generators", we looked at EDOs that could be defined over rank-2 interval space using a basis consisting of the octave, which we tuned purely, and a second rank-2 interval, which we tempered out. This did not allow us to define every possible EDO, but it was an interesting start. 

2) Later, in the chapter "Prime Bases and Comma Bases", we saw how to define an EDO over an interval space of arbitrary rank. In particular, for a given  number of EDO divisions and a desired interval rank, we took the prime harmonic basis of that rank and tuned each prime harmonic interval as closely as possible to its just value, subject to also being of the form 

2^(i / edo_divisions)

for an integer number of EDO steps, {i}.

In this post, we're going to expand the first method significantly, so that we can define more EDOs by tempering. In particular, we'll keep the octave pure, but we might simultaneously temper out two or three or even more commas to get an EDO. I'll also talk about the relationship between the two sorts of EDO definitions.

:: The Limitations of Rank-2 Interval Tempering

Let's take 24-EDO as an example. Many EDOs can be defined over rank-2 interval space by defining a tuning system which has, as a basis, a purely tuned octave and a second interval which is "tempered", i.e. tuned to a frequency ratio of 1/1. 

24-EDO isn't one of the EDOs that we were able to define using rank-2 interval tempering; there is no rank-2 interval that can be tempered out to produce 24-EDO. Neither are there two rank-3 intervals that can be tempered while keeping the octave pure. Indeed, to define or analyze 24-EDO it in terms of intervals, we need to go to rank-4 interval space. To be clear, 24-EDO is a tuning system with a single generating interval size, so we may call it rank-1 in frequency space, however to define and interpret it, we are required to use at least rank-4 intervals.

If you try to do define 24-EDO in lower-rank terms, then all of the intervals in your interval space will fall on the 12-EDO subset of frequency ratios. In order to analyze 24-EDO music intervallically, you need to go up to at least rank-4 interval space, at which point you get neutral intervals like the septimal super-major second, SpM2, or the septimal sub-minor third, Sbm3. It's neutral intervals like these that are tuned to odd steps of 24-EDO. And it's only when we include rank-4 intervals, that intervals are mapped to every step of the EDO, instead of the 12-EDO subset.

How do we predict the minimal rank of the interval space associated with an EDO? You can play around with interval tempering and see whether the full set of EDO steps is occupied, but there's a more systematic way.

Consider a definition of 24-EDO of the kind from the prime harmonic basis post: we tune {the intervals justly associated with the prime harmonic frequency ratios} to the respective nearest steps of 24-EDO. Below I show the 24-EDO steps for harmonics (2/1, 3/1, 5/1, 7/1, 11/1, 13/1, 17/1, 19/1):

    [24, 38, 56, 67, 83, 89, 98, 102] // 24-EDO tunings of prime harmonics in terms of EDO steps

When I say 56 steps is how 24-EDO tunes the 5th harmonic, it would be more technically correct to say that we are defining a 24-EDO which tunes the M17 (which is justly to to 5/1) to 2^(56/24). This is like 14 cents sharp of the pure value - a pretty good approximation. To find the closest step, we find {i} which solves this equation 

    5/1 = 2^(i / 24)

and round it to the nearest integral step, so that 24-EDO tunes M17 to

    round(24 * log_2(5))

which is 56.

You can see that the first three harmonics, [24, 38, 56, ...] are all tuned to even values. If we define our rank-3 interval space by combinations of the first three harmonic intervals,, and all of them are tuned to even steps, then of course we won't get any intervals tuned to odd steps, and the whole thing collapses to 12-EDO. The fact that the first prime harmonic tuned to an odd number of steps is the 7th harmonic, and the fact that 7 is the fourth prime, is most of the explanation of why 24-EDO is minimally analyzed with rank-4 interval space. More generally, instead of looking for the first harmonic tuned to an odd step, the full procedure is to look for the first point at which all the harmonics so far have no jointly common factor. 

I'll say that again a little differently. The minimal-rank interval space needed to analyze a given EDO is found as the smallest number of sequential prime harmonics such that the set has {1} as its greatest common divisor.

Let's look at 60-EDO to investigate. Here are its prime harmonic intervals, up to the one justly tuned to 19/1, but now tuned to 60-EDO steps: 

[60, 95, 139, 168, 208, 222, 245, 255]

Brief inspection tells us that 60-EDO must be rank-3, based on these facts:

    GCD(60) = 60

    GCD(60, 95) = 5

    GCD(60, 95, 139) = 1.

Here's the prime-harmonic GCD classification of many EDOs below 100 divisions:

rank-2: [5, 7, 8, 9, 11, 12, 13, 16, 17, 18, 19, 22, 23, 26, 27, 29, 31, 32, 33, 37, 39, 40, 41, 42, 43, 45, 46, 47, 49, 50, 53, 55, 56, 59, 61, 63, 64, 65, 67, 69, 70, 71, 73, 74, 75, 77, 79, 80, 81, 83, 88, 89, 90, 91, 94, 95, 97, 98, 99]-EDO

rank-3: [10, 14, 15, 21, 25, 28, 34, 35, 48, 51, 52, 54, 58, 60, 72, 78, 84, 85, 87, 96]-EDO

rank-4: [6, 24, 36, 38, 57, 66, 68, 76, 86, 100]-EDO

rank-5: [20, 93]-EDO

rank-6: [30, 44, 62, 82]-EDO

rank-8: [92]-EDO

Here also is the prime harmonic GCD classification of EDOs with rank >= 6, for divisions below 600:

rank-6 : [30, 44, 62, 82, 136, 144, 218, 404, 478, 496, 510]-EDO

rank-7 : [174, 448, 540]-EDO

rank-8 : [92]-EDO

rank-9 : [322]-EDO

We'll talk later about just when exactly the definition of an EDO in this way, by rounding prime harmonics, will be equivalent to a definition in terms of tempering intervals. But these intervallic ranks for defining and analyzing EDOs presented above do match the ranks that I found by tempering intervals, so I hope you find that a little encouraging: these very different definitions are producing the same data.

Here are the commas that can be used to define the EDOs which are minimally associated to rank-2 interval space. I've written the commas in prime harmonic coordinates, along with the basis matrix for defining the EDO that includes the octave.

3-EDO: (m3→ 32/27). Basis: ([1, 0], [5, -3])

5-EDO: (m2→ 256/243). Basis: ([1, 0], [8, -5])

7-EDO: (A1 → 2187/2048). Basis: ([1, 0], [-11, 7])

8-EDO: (d4 → 8192/6561). Basis: ([1, 0], [13, -8])

9-EDO: (A2 → 19683/16384). Basis: ([1, 0], [-14, 9])

11-EDO: (A3 → 177147/131072). Basis: ([1, 0], [-17, 11])

12-EDO: (A0 → 531441/524288). Basis: ([1, 0], [-19, 12])

13-EDO: (dd5 → 2097152/1594323). Basis: ([1, 0], [21, -13])

16-EDO: (AA2 → 43046721/33554432). Basis: ([1, 0], [-25, 16])

17-EDO: (dd3 → 134217728/129140163). Basis: ([1, 0], [27, -17])

18-EDO: (dd6 → 536870912/387420489). Basis: ([1, 0], [29, -18])

19-EDO: (AA0 → 1162261467/1073741824). Basis: ([1, 0], [-30, 19])

22-EDO: (ddd4 → 34359738368/31381059609). Basis: ([1, 0], [35, -22])

23-EDO: (AAA2 → 94143178827/68719476736). Basis: ([1, 0], [-36, 23])

26-EDO: (AAA0 → 2541865828329/2199023255552). Basis: ([1, 0], [-41, 26])

27-EDO: (dddd5 → 8796093022208/7625597484987). Basis: ([1, 0], [43, -27])

29-EDO: (dddd4 → 70368744177664/68630377364883). Basis: ([1, 0], [46, -29])

31-EDO: (AAAA-1 → 617673396283947/562949953421312). Basis: ([1, 0], [-49, 31])

32-EDO: (dddd6 → 2251799813685248/1853020188851841). Basis: ([1, 0], [51, -32])

33-EDO: (AAAA0 → 5559060566555523/4503599627370496). Basis: ([1, 0], [-52, 33])

37-EDO: (ddddd7 → 576460752303423488/450283905890997363). Basis: ([1, 0], [59, -37])

39-EDO: (ddddd6 → 4611686018427387904/4052555153018976267). Basis: ([1, 0], [62, -39])

40-EDO: (AAAAA0 → 12157665459056928801/9223372036854775808). Basis: ([1, 0], [-63, 40])

41-EDO: (dddddd5 → 36893488147419103232/36472996377170786403). Basis: ([1, 0], [65, -41])

42-EDO: (dddddd8 → 147573952589676412928/109418989131512359209). Basis: ([1, 0], [67, -42])

43-EDO: (AAAAAA-2 → 328256967394537077627/295147905179352825856). Basis: ([1, 0], [-68, 43])

45-EDO: (AAAAAA-1 → 2954312706550833698643/2361183241434822606848). Basis: ([1, 0], [-71, 45])

46-EDO: (dddddd6 → 9444732965739290427392/8862938119652501095929). Basis: ([1, 0], [73, -46])

47-EDO: (AAAAAA0 → 26588814358957503287787/18889465931478580854784). Basis: ([1, 0], [-74, 47])

49-EDO: (ddddddd8 → 302231454903657293676544/239299329230617529590083). Basis: ([1, 0], [78, -49])

50-EDO: (AAAAAAA-2 → 717897987691852588770249/604462909807314587353088). Basis: ([1, 0], [-79, 50])

53-EDO: (AAAAAAA-4 → 19383245667680019896796723/19342813113834066795298816). Basis: ([1, 0], [-84, 53])

55-EDO: (AAAAAAAA-3 → 174449211009120179071170507/154742504910672534362390528). Basis: ([1, 0], [-87, 55])

56-EDO: (dddddddd8 → 618970019642690137449562112/523347633027360537213511521). Basis: ([1, 0], [89, -56])

59-EDO: (dddddddd10 → 19807040628566084398385987584/14130386091738734504764811067). Basis: ([1, 0], [94, -59])

61-EDO: (dddddddd9 → 158456325028528675187087900672/127173474825648610542883299603). Basis: ([1, 0], [97, -61])

63-EDO: (ddddddddd8 → 1267650600228229401496703205376/1144561273430837494885949696427). Basis: ([1, 0], [100, -63])

64-EDO: (AAAAAAAAA-2 → 3433683820292512484657849089281/2535301200456458802993406410752). Basis: ([1, 0], [-101, 64])

65-EDO: (AAAAAAAAA-5 → 10301051460877537453973547267843/10141204801825835211973625643008). Basis: ([1, 0], [-103, 65])

67-EDO: (AAAAAAAAA-4 → 92709463147897837085761925410587/81129638414606681695789005144064). Basis: ([1, 0], [-106, 67])

69-EDO: (AAAAAAAAAA-3 → 834385168331080533771857328695283/649037107316853453566312041152512). Basis: ([1, 0], [-109, 69])

70-EDO: (dddddddddd8 → 2596148429267413814265248164610048/2503155504993241601315571986085849). Basis: ([1, 0], [111, -70])

71-EDO: (dddddddddd11 → 10384593717069655257060992658440192/7509466514979724803946715958257547). Basis: ([1, 0], [113, -71])

73-EDO: (dddddddddd10 → 83076749736557242056487941267521536/67585198634817523235520443624317923). Basis: ([1, 0], [1 16, -73])

74-EDO: (AAAAAAAAAA-4 → 202755595904452569706561330872953769/166153499473114484112975882535043072). Basis: ([1, 0], [-117, 74])

75-EDO: (dddddddddd9 → 664613997892457936451903530140172288/608266787713357709119683992618861307). Basis: ([1, 0], [119, -75])

77-EDO: (AAAAAAAAAAA-6 → 5474401089420219382077155933569751763/5316911983139663491615228241121378304). Basis: ([1, 0], [-122, 77])

79-EDO: (AAAAAAAAAAA-5 → 49269609804781974438694403402127765867/42535295865117307932921825928971026432). Basis: ([1, 0], [-125, 79])

80-EDO: (ddddddddddd10 → 170141183460469231731687303715884105728/147808829414345923316083210206383297601). Basis: ([1, 0], [127, -80])

81-EDO: (AAAAAAAAAAA-4 → 443426488243037769948249630619149892803/340282366920938463463374607431768211456). Basis: ([1, 0], [-128, 81])

83-EDO: (dddddddddddd12 → 5444517870735015415413993718908291383296/3990838394187339929534246675572349035227). Basis: ([1, 0], [132, -83])

88-EDO: (AAAAAAAAAAAA-4 → 969773729787523602876821942164080815560161/696898287454081973172991196020261297061888). Basis: ([1, 0], [-139, 88])

89-EDO: (AAAAAAAAAAAA-7 → 2909321189362570808630465826492242446680483/2787593149816327892691964784081045188247552). Basis: ([1, 0], [-141, 89])

90-EDO: (ddddddddddddd12 → 11150372599265311570767859136324180752990208/8727963568087712425891397479476727340041449). Basis: ([1, 0], [143, -90])

91-EDO: (AAAAAAAAAAAAA-6 → 26183890704263137277674192438430182020124347/22300745198530623141535718272648361505980416). Basis: ([1, 0], [-144, 91])

94-EDO: (ddddddddddddd10 → 713623846352979940529142984724747568191373312/706965049015104706497203195837614914543357369). Basis: ([1, 0], [149, -94])

95-EDO: (ddddddddddddd13 → 2854495385411919762116571938898990272765493248/2120895147045314119491609587512844743630072107). Basis: ([1, 0], [151, -95])

97-EDO: (dddddddddddddd12 → 22835963083295358096932575511191922182123945984/19088056323407827075424486287615602692670648963). Basis: ([1, 0], [154, -97])

98-EDO: (AAAAAAAAAAAAAA-6 → 57264168970223481226273458862846808078011946889/45671926166590716193865151022383844364247891968). Basis: ([1, 0], [-155, 98])

99-EDO: (dddddddddddddd11 → 182687704666362864775460604089535377456991567872/171792506910670443678820376588540424234035840667). Basis: ([1, 0], [157, -99])

All of these EDOs can be defined in multiple ways: if an EDO tempers out d2, then it will also temper out {d2 + d2} or {P1 - d2} or {P1 - (d2 + d2)} and so on. For each EDO, of all the possible options of definitional commas, I've chosen the comma which is justly tuned to the positive 3-limit ratio with the smallest numerator. This has the odd effect of sometimes using multiply diminished intervals and sometimes using multiply augmented intervals. If you take the octave complements of the augmented commas (like 43-EDO being defined in terms of the six-times augmented negative second, AAAAAA-2), then you get all diminished intervals and no negative ordinals.

Some EDOs ca not be produced by tempering a rank-2 interval and keeping octaves pure. If you try to define the EDO by a rank-2 interval which the EDO tempers, you will fail to get "full occupation" of the steps. To illustrate this,  here's a rank-2 reduction graph:

     256/243: 5 ← (10, 15, 20, 25, 30)

2187/2048: 7 ← (14, 21, 28, 35)

531441/524288: 12 ← (24, 36, 48, 60, 72, 84, 96)

134217728/129140163: 17 ← (34, 51, 68, 85)

1162261467/1073741824: 19 ← (38, 57, 76)

34359738368/31381059609: 22 ← (44, 66) 

2541865828329/2199023255552: 26 ← (52)

8796093022208/7625597484987: 27 ← (54)

70368744177664/68630377364883: 29 ← (58, 87)

617673396283947/562949953421312: 31 ← (62, 93)

4611686018427387904/4052555153018976267: 39 ← (78)

36893488147419103232/36472996377170786403: 41 ← (82)

328256967394537077627/295147905179352825856: 43 ← (86)

9444732965739290427392/8862938119652501095929: 46 ← (92)

When I write that

12 ← (24, 36, ...)

this means that if you attempt to define 24-EDO or 36-EDO using rank-2 intervals, your frequency ratio space will reduce to be the same as 12-EDO.

Here are rank-3 definitions of some EDOs, including some that could be defined in rank-2:

3-EDO: (M2 → 10/9, m2 → 16/15). Basis: ([1, 0, 0], [1, -2, 1], [4, -1, -1])

4-EDO: (AcM2 → 9/8 , A1 → 25/24). Basis: ([1, 0, 0], [-3, 2, 0], [-3, -1, 2])

5-EDO: (m2 → 16/15 , Acm2 → 27/25). Basis: ([1, 0, 0], [4, -1, -1], [0, 3, -2])

7-EDO: (A1 → 25/24 , Ac1 → 81/80). Basis: ([1, 0, 0], [-3, -1, 2], [-4, 4, -1])

8-EDO: (m2 → 16/15 , GrA1 → 250/243). Basis: ([1, 0, 0], [4, -1, -1], [1, -5, 3])

9-EDO: (Acm2 → 27/25 , d2 → 128/125). Basis: ([1, 0, 0], [0, 3, -2], [7, 0, -3])

10-EDO: (A1 → 25/24 , Grm2 → 256/243). Basis: ([1, 0, 0], [-3, -1, 2], [8, -5, 0])

11-EDO: (AcA1 → 135/128 , d3 → 144/125). Basis: ([1, 0, 0], [-7, 3, 1], [4, 2, -3])

12-EDO: (Ac1 → 81/80 , d2 → 128/125). Basis: ([1, 0, 0], [-4, 4, -1], [7, 0, -3])

13-EDO: (A1 → 25/24 , GrGrm3 → 2560/2187). Basis: ([1, 0, 0], [-3, -1, 2], [9, -7, 1])

14-EDO: (Acm2 → 27/25 , Grd2 → 2048/2025). Basis: ([1, 0, 0], [0, 3, -2], [11, -4, -2])

15-EDO: (d2 → 128/125 , GrA1 → 250/243). Basis: ([1, 0, 0], [7, 0, -3], [1, -5, 3])

16-EDO: (AcA1 → 135/128 , dAcm2 → 648/625). Basis: ([1, 0, 0], [-7, 3, 1], [3, 4, -4])

17-EDO: (A1 → 25/24 , GrGrm2 → 20480/19683). Basis: ([1, 0, 0], [-3, -1, 2], [12, -9, 1])

18-EDO: (d2 → 128/125 , GrM2 → 800/729). Basis: ([1, 0, 0], [7, 0, -3], [5, -6, 2])

19-EDO: (Ac1 → 81/80 , dd0 → 3125/3072). Basis: ([1, 0, 0], [-4, 4, -1], [-10, -1, 5])

21-EDO: (d2 → 128/125 , AcAcA1 → 2187/2048). Basis: ([1, 0, 0], [7, 0, -3], [-11, 7, 0])

22-EDO: (GrA1 → 250/243 , Grd2 → 2048/2025). Basis: ([1, 0, 0], [1, -5, 3], [11, -4, -2])

23-EDO: (AcA1 → 135/128 , dAcAcm2 → 6561/6250). Basis: ([1, 0, 0], [-7, 3, 1], [-1, 8, -5])

25-EDO: (Grm2 → 256/243 , dd0 → 3125/3072). Basis: ([1, 0, 0], [8, -5, 0], [-10, -1, 5])

26-EDO: (Ac1 → 81/80 , ddd0 → 78125/73728). Basis: ([1, 0, 0], [-4, 4, -1], [-13, -2, 7])

27-EDO: (d2 → 128/125 , GrGrA1 → 20000/19683). Basis: ([1, 0, 0], [7, 0, -3], [5, -9, 4])

28-EDO: (dAcm2 → 648/625 , AcAcA1 → 2187/2048). Basis: ([1, 0, 0], [3, 4, -4], [-11, 7, 0])

29-EDO: (GrA1 → 250/243 , Grdd0 → 16875/16384). Basis: ([1, 0, 0], [1, -5, 3], [-14, 3, 4])

31-EDO: (Ac1 → 81/80 , Grdddd3 → 393216/390625). Basis: ([1, 0, 0], [-4, 4, -1], [17, 1, -8])

32-EDO: (Grd2 → 2048/2025 , GrAA1 → 3125/2916). Basis: ([1, 0, 0], [11, -4, -2], [-2, -6, 5])

33-EDO: (d2 → 128/125 , AcAcAcA1 → 177147/163840). Basis: ([1, 0, 0], [7, 0, -3], [-15, 11, -1])

34-EDO: (Grd2 → 2048/2025 , ddAcm0 → 15625/15552). Basis: ([1, 0, 0], [11, -4, -2], [-6, -5, 6])

35-EDO: (AcAcA1 → 2187/2048 , dd0 → 3125/3072). Basis: ([1, 0, 0], [-11, 7, 0], [-10, -1, 5])

37-EDO: (GrA1 → 250/243 , GrGrddd3 → 262144/253125). Basis: ([1, 0, 0], [1, -5, 3], [18, -4, -5])

39-EDO: (d2 → 128/125 , ddAcAcAcm2 → 1594323/1562500). Basis: ([1, 0, 0], [7, 0, -3], [-2, 13, -8])

40-EDO: (dAcm2 → 648/625 , AcAcAcA1 → 177147/163840). Basis: ([1, 0, 0], [3, 4, -4], [-15, 11, -1])

41-EDO: (dd0 → 3125/3072 , GrGrA1 → 20000/19683). Basis: ([1, 0, 0], [-10, -1, 5], [5, -9, 4])

42-EDO: (d2 → 128/125 , GrGrGrAA1 → 5000000/4782969). Basis: ([1, 0, 0], [7, 0, -3], [6, -14, 7])

43-EDO: (Ac1 → 81/80 , Grdddddd4 → 50331648/48828125). Basis: ([1, 0, 0], [-4, 4, -1], [24, 1, -11])

45-EDO: (Ac1 → 81/80 , GrGrdddddd-1 → 146484375/134217728). Basis: ([1, 0, 0], [-4, 4, -1], [-27, 1, 11])

46-EDO: (Grd2 → 2048/2025 , ddAcAcm2 → 78732/78125). Basis: ([1, 0, 0], [11, -4, -2], [2, 9, -7])

47-EDO: (dAcAcm2 → 6561/6250 , Grdd0 → 16875/16384). Basis: ([1, 0, 0], [-1, 8, -5], [-14, 3, 4])

48-EDO: (Grdd0 → 16875/16384 , GrGrA1 → 20000/19683). Basis: ([1, 0, 0], [-14, 3, 4], [5, -9, 4])

49-EDO: (ddAcm0 → 15625/15552 , GrGrm2 → 20480/19683). Basis: ([1, 0, 0], [-6, -5, 6], [12, -9, 1])

50-EDO: (Ac1 → 81/80 , Grddddddd-2 → 1220703125/1207959552). Basis: ([1, 0, 0], [-4, 4, -1], [-27, -2, 13])

51-EDO: (GrA1 → 250/243 , GrGrddddd-1 → 17578125/16777216). Basis: ([1, 0, 0], [1, -5, 3], [-24, 2, 9])

52-EDO: (dAcm2 → 648/625 , GrGrGrdd0 → 4428675/4194304). Basis: ([1, 0, 0], [3, 4, -4], [-22, 11, 2])

53-EDO: (ddAcm0 → 15625/15552 , GrGrd0 → 32805/32768). Basis: ([1, 0, 0], [-6, -5, 6], [-15, 8, 1])

54-EDO: (Grd2 → 2048/2025 , GrGrAAA1 → 390625/354294). Basis: ([1, 0, 0], [11, -4, -2], [-1, -11, 8])

55-EDO: (Ac1 → 81/80 , GrGrdddddddd5 → 6442450944/6103515625). Basis: ([1, 0, 0], [-4, 4, -1], [31, 1, -14])

56-EDO: (Grd2 → 2048/2025 , dddAcAcm0 → 1953125/1889568). Basis: ([1, 0, 0], [11, -4, -2], [-5, -10, 9])

58-EDO: (Grd2 → 2048/2025 , ddAcAcAcm2 → 1594323/1562500). Basis: ([1, 0, 0], [11, -4, -2], [-2, 13, -8])

59-EDO: (GrA1 → 250/243 , GrGrdddddd4 → 268435456/263671875). Basis: ([1, 0, 0], [1, -5, 3], [28, -3, -10])

60-EDO: (dd0 → 3125/3072 , GrGrGrd0 → 531441/524288). Basis: ([1, 0, 0], [-10, -1, 5], [-19, 12, 0])

61-EDO: (GrGrA1 → 20000/19683 , GrGrddd3 → 262144/253125). Basis: ([1, 0, 0], [5, -9, 4], [18, -4, -5])

63-EDO: (dd0 → 3125/3072 , GrGrGrm2 → 1638400/1594323). Basis: ([1, 0, 0], [-10, -1, 5], [16, -13, 2])

64-EDO: (dAcm2 → 648/625 , GrGrGrGrdd0 → 71744535/67108864). Basis: ([1, 0, 0], [3, 4, -4], [-26, 15, 1])

65-EDO: (GrGrd0 → 32805/32768 , ddAcAcm2 → 78732/78125). Basis: ([1, 0, 0], [-15, 8, 1], [2, 9, -7])

67-EDO: (Ac1 → 81/80 , GrGrddddddddd6 → 824633720832/762939453125). Basis: ([1, 0, 0], [-4, 4, -1], [38, 1, -17])

69-EDO: (Ac1 → 81/80 , GrGrGrdddddddddd-3 → 2288818359375/2199023255552). Basis: ([1, 0, 0], [-4, 4, -1], [-41, 1, 17])

70-EDO: (Grd2 → 2048/2025 , ddddAcAcm3 → 51018336/48828125). Basis: ([1, 0, 0], [11, -4, -2], [5, 13, -11])

71-EDO: (GrGrm2 → 20480/19683 , Grdddd3 → 393216/390625). Basis: ([1, 0, 0], [12, -9, 1], [17, 1, -8])

72-EDO: (ddAcm0 → 15625/15552 , GrGrGrd0 → 531441/524288). Basis: ([1, 0, 0], [-6, -5, 6], [-19, 12, 0])

73-EDO: (ddAcAcm2 → 78732/78125 , GrGrddd3 → 262144/253125). Basis: ([1, 0, 0], [2, 9, -7], [18, -4, -5])

74-EDO: (Ac1 → 81/80 , GrGrdddddddddd6 → 19791209299968/19073486328125). Basis: ([1, 0, 0], [-4, 4, -1], [41, 2, -19])

75-EDO: (GrGrA1 → 20000/19683 , GrGrdddd-1 → 2109375/2097152). Basis: ([1, 0, 0], [5, -9, 4], [-21, 3, 7])

77-EDO: (GrGrd0 → 32805/32768 , ddAcAcAcm2 → 1594323/1562500). Basis: ([1, 0, 0], [-15, 8, 1], [-2, 13, -8])

78-EDO: (Grd2 → 2048/2025 , ddddAcAcAcm0 → 244140625/229582512). Basis: ([1, 0, 0], [11, -4, -2], [-4, -15, 12])

79-EDO: (dd0 → 3125/3072 , GrGrGrGrd0 → 43046721/41943040). Basis: ([1, 0, 0], [-10, -1, 5], [-23, 16, -1])

80-EDO: (Grd2 → 2048/2025 , dddAcAcAcAcm0 → 390625000/387420489). Basis: ([1, 0, 0], [11, -4, -2], [3, -18, 11])

81-EDO: (Ac1 → 81/80 , GrGrGrddddddddddd-4 → 286102294921875/281474976710656). Basis: ([1, 0, 0], [-4, 4, -1], [-48, 1, 20])

83-EDO: (ddAcm0 → 15625/15552 , GrGrGrGrdd3 → 8388608/7971615). Basis: ([1, 0, 0], [-6, -5, 6], [23, -13, -1])

84-EDO: (ddAcAcm2 → 78732/78125 , GrGrGrd0 → 531441/524288). Basis: ([1, 0, 0], [2, 9, -7], [-19, 12, 0])

85-EDO: (dd0 → 3125/3072 , GrGrGrGrGrdd3 → 134217728/129140163). Basis: ([1, 0, 0], [-10, -1, 5], [27, -17, 0])

87-EDO: (ddAcm0 → 15625/15552 , GrGrGrGrddd3 → 67108864/66430125). Basis: ([1, 0, 0], [-6, -5, 6], [26, -12, -3])

88-EDO: (Ac1 → 81/80 , GrGrGrdddddddddddd-4 → 2384185791015625/2251799813685248). Basis: ([1, 0, 0], [-4, 4, -1], [-51, 0, 22])

89-EDO: (GrGrd0 → 32805/32768 , ddddAcm3 → 10077696/9765625). Basis: ([1, 0, 0], [-15, 8, 1], [9, 9, -10])

90-EDO: (Grd2 → 2048/2025 , ddddAcAcAcAcm0 → 1220703125/1162261467). Basis: ([1, 0, 0], [11, -4, -2], [0, -19, 13])

91-EDO: (ddAcm0 → 15625/15552 , GrGrGrGrd0 → 43046721/41943040). Basis: ([1, 0, 0], [-6, -5, 6], [-23, 16, -1])

94-EDO: (GrGrd0 → 32805/32768 , dddAcAcAcm0 → 9765625/9565938). Basis: ([1, 0, 0], [-15, 8, 1], [-1, -14, 10])

95-EDO: (GrGrA1 → 20000/19683 , Grdddddd4 → 50331648/48828125). Basis: ([1, 0, 0], [5, -9, 4], [24, 1, -11])

96-EDO: (Grdddd3 → 393216/390625 , GrGrGrd0 → 531441/524288). Basis: ([1, 0, 0], [17, 1, -8], [-19, 12, 0])

97-EDO: (GrGrGrm2 → 1638400/1594323 , dddAcAcm0 → 1953125/1889568). Basis: ([1, 0, 0], [16, -13, 2], [-5, -10, 9])

98-EDO: (Ac1 → 81/80 , GrGrGrdddddddddddddd8 → 324259173170675712/298023223876953125). Basis: ([1, 0, 0], [-4, 4, -1], [55, 2, -25])

99-EDO: (Grdddd3 → 393216/390625 , GrGrGrA1 → 1600000/1594323). Basis: ([1, 0, 0], [17, 1, -8], [9, -13, 5])

:: Basis Minimality

For rank-2 intervals, I defined the EDO in terms of a pure octave and a tempered interval, and from all possible tempered intervals that would give the EDO, I chose the tempered interval that is justly tuned to the simplest positive frequency ratio. For higher rank-EDOs, I have a related but slightly more sophisticated notion of what set of tempered commas form a natural and minimal definition of the EDO. Let's in to that in a little detail.

...

:: The Rank-3 Reduction Graph

Here are some reductions that still happen when you have rank-3 commas available. 

3 ← (6)

10 ← (20)

12 ← (24, 36)

15 ← (30)

19 ← (38, 57, 76)

22 ← (44, 66)

31 ← (62, 93)

34 ← (68)

41 ← (82)

43 ← (86)

46 ← (92)

50 ← (100)

So all of the EDOs on the right side of an left-pointing arrow, ←, must have higher rank analysis and tempered definitions.

:: Rank-4 EDO definitions

6-EDO: (M2 → 10/9, m2 → 16/15, SbSbAcm2 → 49/48). Basis matrix: ([1, 0, 0, 0], [1, -2, 1, 0], [4, -1, -1, 0], [-4, -1, 0, 2])

24-EDO: (SbSbAcm2 → 49/48, Ac1 → 81/80, d2 → 128/125). Basis matrix: ([1, 0, 0, 0], [-4, -1, 0, 2], [-4, 4, -1, 0], [7, 0, -3, 0])

36-EDO: (Ac1 → 81/80, d2 → 128/125, SbSbSbdd3 → 686/675). Basis matrix: ([1, 0, 0, 0], [-4, 4, -1, 0], [7, 0, -3, 0], [1, -3, -2, 3])

38-EDO: (SpSpGrA0 → 50/49, Ac1 → 81/80, AA0 → 3125/3072). Basis matrix: ([1, 0, 0, 0], [1, 0, 2, -2], [-4, 4, -1, 0], [-10, -1, 5, 0])

57-EDO: (Ac1 → 81/80, SbSbSbAcAcm2 → 1029/1024, AA0 → 3125/3072). Basis matrix: ([1, 0, 0, 0], [-4, 4, -1, 0], [-10, 1, 0, 3], [-10, -1, 5, 0])

66-EDO: (GrA1 → 250/243, SbSbSbdd3 → 686/675, SbSbSbAcAcm2 → 1029/1024). Basis matrix: ([1, 0, 0, 0], [1, -5, 3, 0], [1, -3, -2, 3], [-10, 1, 0, 3])

68-EDO: (SbSbm2 → 245/243, Grd2 → 2048/2025, SbSbSbSbAcdd3 → 2401/2400). Basis matrix: ([1, 0, 0, 0], [0, -5, 1, 2], [11, -4, -2, 0], [-5, -1, -2, 4])

76-EDO: (Ac1 → 81/80, SbSbSbSbAcdd3 → 2401/2400, AA0 → 3125/3072). Basis matrix: ([1, 0, 0, 0], [-4, 4, -1, 0], [-5, -1, -2, 4], [-10, -1, 5, 0])

86-EDO: (Ac1 → 81/80, SpSpGrd1 → 6144/6125, SbSbSbSbAcdddd4 → 9604/9375). Basis matrix: ([1, 0, 0, 0], [-4, 4, -1, 0], [11, 1, -3, -2], [2, -1, -5, 4])

100-EDO: (Ac1 → 81/80, SpSpGrd1 → 6144/6125, SpSpSpSpGrAAAAA-2 → 78125/76832). Basis matrix: ([1, 0, 0, 0], [-4, 4, -1, 0], [11, 1, -3, -2], [-5, 0, 7, -4])


:: Rank-5 EDOs:


20-EDO: (A1 → 25/24, Sbm2 → 28/27, SbSbAcm2 → 49/48, AsAsGrd1 → 121/120). Basis matrix: ([1, 0, 0, 0, 0], [-3, -1, 2, 0, 0], [2, -3, 0, 1, 0], [-4, -1, 0, 2, 0], [-3, -1, -1, 0, 2])

93-EDO: (Ac1 → 81/80, SbAcd2 → 126/125, SbSbSbAcAcm2 → 1029/1024, DeDeDeSbAcAcM2 → 1344/1331). Basis matrix: ([1, 0, 0, 0, 0], [-4, 4, -1, 0, 0], [1, 2, -3, 1, 0], [-10, 1, 0, 3, 0], [6, 1, 0, 1, -3])


The rank-6 EDOs below 100-divisions are [30, 44, 62, 82]-EDO.


My program stopped working at rank-6 for some reason, but I tried figuring out minimal commas by hand. 


30-EDO: Sbm2 → 28/27, SbSbAcm2 → 49/48, AsGr1 → 55/54, AsSbd2 → 77/75, PrPrSpGrd1 → 169/168. Basis matrix: ([1, 0, 0, 0, 0, 0], [2, -3, 0, 1, 0, 0], [-4, -1, 0, 2, 0, 0], [-1, -3, 1, 0, 1, 0], [0, -1, -2, 1, 1, 0], [-3, -1, 0, -1, 0, 2])


44-EDO: SpSpGrA0 → 50/49, AsGr1 → 55/54, SpGr1 → 64/63, AsSpSpGrM0 → 99/98, PrPrSpGrd1 → 169/168. Basis matrix: ([1, 0, 0, 0, 0, 0], [1, 0, 2, -2, 0, 0], [-1, -3, 1, 0, 1, 0], [6, -2, 0, -1, 0, 0], [-1, 2, 0, -2, 1, 0], [-3, -1, 0, -1, 0, 2])


62-EDO: Ac1 → 81/80, AsSpSpGrM0 → 99/98, AsAsGrd1 → 121/120, SbAcd2 → 126/125, PrPrSpGrd1 → 169/168. Basis matrix: ([1, 0, 0, 0, 0, 0], [-4, 4, -1, 0, 0, 0], [-1, 2, 0, -2, 1, 0], [-3, -1, -1, 0, 2, 0], [1, 2, -3, 1, 0, 0], [-3, -1, 0, -1, 0, 2])


82-EDO: DeA1 → 100/99, SpA0 → 225/224, DeDeAcAcA1 → 243/242, DeDeSbSbAcAcM2 → 245/242, PrPrSpGrd1 → 169/168. Basis matrix: ([1, 0, 0, 0, 0, 0], [2, -2, 2, 0, -1, 0], [-5, 2, 2, -1, 0, 0], [-1, 5, 0, 0, -2, 0], [-1, 0, 1, 2, -2, 0], [-3, -1, 0, -1, 0, 2])


The absolute determinants of the basis matrices match the EDO divisions at least.


Rank-8: [92]-EDO


So 92-EDO is supposed to be rank-8 intervalically. And the program I wrote to find these things stopped working at rank-6. But I made this rank-6 matrix by hand, and it has determinant 92: 

    

    ([1, 0, 0, 0, 0, 0], [-3, -1, -1, 0, 2, 0], [1, 2, -3, 1, 0, 0], [4, 0, -2, -1, 1, 0], [0, -5, 1, 2, 0, 0], [-3, -1, 0, -1, 0, 2]]


But maybe that's not actually a definition of 92-EDO for some reason. I guess I should try tuning a bunch of intervals using that matrix and I can see if they span all the steps from 0 to 92.


If that doesn't work, I found a bunch of rank-8 matrices with determinant = 92 (and of course they're each made up of an octave and a bunch of comma intervals tuned to small frequency ratios). Here's the just tuning for one basis matrix which is quite low complexity in terms of the sum of tuned numerators and denominators:


    [221/220, 169/168, 136/135, 126/125, 364/361, 121/120, 91/90, 2/1]


and this one has low complexity in the sense of the largest numerator of the comma with the smallest cent value:


    [154/153, 136/135, 126/125, 364/361, 121/120, 343/340, 91/90, 2/1]


I meant to find the basis that minimizes the largesr numerator, but I messed up my sorting function. I'll fix it soon.


But maybe one of those will work.


...


Yeah, works fine. And they tune intervals in the same way. Empirically equivalent rank8  definitions of 92 EDO. Still have to look at the rank 6 definition.


I'm open to the possibility that some of these sets of intervals are not jointly optimally small in their frequency ratios. Like, for 92-EDO I came up with two different notions of complexity because I didn't remember what I did for the program that worked at lower ranks and I didn't want to look through my code.


I think the programs I wrote did a good job of finding compact bases, but I can't declare without doubt that these are the canonical forms for defining EDOs minimally by tempering.


I would love it if there were a simple way to directly figure out small commas from the tunings of the prime harmonics, or even just a set of tempered commas that were adequate to define the EDO, if not to define it with intervals that get justly tuned to small frequency ratios. The closest thing that I know of is a trick to find a set of commas that are tempered out by a pair of EDOs. So like, if you want some commas for 92-EDO, you could find the commas associated with (92 and 12)-EDO or (92 and 46)-EDO and so on. 


And then you could arrange all the commas by size and see if a different subsets get you a good matrix? Mostly I just do brute force search over comma coordinates to get commas and that works quickly and reliably enough. But I'll figure out something systematic one day. I think I'd be happy if I could figure out a procedure that would automatically give me a comma for each prime-limit. Like a 3-limit fractions, a 5-limit fraction, a 7-limit fraction, so on.


Suppose I have found the tempered comma such that its tuned fraction is the smallest possible, for each prime-limit for an EDO, with limits up to the rank of the interval space. Like 82-EDO requires rank-6 intervallic interpretations, so up to rank 6 we have:

    

    36893488147419103232/36472996377170786403 # rank-2 (3-limit)

    3125/3072 # rank-3 (5-limit)

    225/224 # rank-4 (7-limit)

    100/99 # rank-5 (11-limit)

    169/168 # rank-6 (13-limit)


If we have the smallest comma of each prime limit, that should make a suitable basis with absolute determinant 82 when combined with the octave, right?


After that we can look for a few tempered commas with small associated fractions that aren't necessarily the shortest for each prime limit, like:  (243/242), (245/242), (245/243), (441/440), (540/539), (625/616), (676/675), (875/864).


Those first three fractions look a little crazy, but they're real. Anyway, now we hope we can mix some of those in to replace longer fractions in the old 82-absolute-determinant basis, and still have a suitable basis, but a shorter one. Semi-automatically, hopefully.


Why are we doing this again? Because even though EDOs are 1D in frequency space, their intervallic interpretations live in higher dimensional interval spaces, and wouldn't it be nice if we could describe those spaces without having to make reference to garbage like 36893488147419103232/36472996377170786403 # rank-2 (3-limit). I think it would be nice. No one needs to look at that to understand 82-EDO.

...