IFLB

Matemática y música · 20 may 2024

¿Cuántas escalas de 9 alturas hay?

Parece un simple problema de enumerar escalas en el sistema temperado de 12 clases de alturas. Pero el camino pasa por particiones, composiciones cíclicas y el lema de Burnside.

Matemática y música/20 may 2024/19 min de lectura

Este es un simple problema de enumerar las escalas que hay en el sistema temperado de 12 clases de alturas. Pero puede que no sea tan simple de obtener…

Cuando me hice esta pregunta, lo primero fue intentar resolverlo por medio del círculo cromático. No pueden ser tantos, pensé. Y así me dispuse a dibujar los puntos sobre un reloj de 12 rayitas.

Círculo cromático con 12 rayitas representando 1 altura y 1 semitono
Círculo cromático con 12 rayitas representando 1 altura y 1 semitono

Pero descubrí que no es tan simple, que me faltaba sistematización. Por lo que me orienté hacia lo matemático.

Resulta que resolver este problema es pensar en particiones.

Básicamente la idea es esta: una escala es una sucesión de intervalos. En el sistema temperado podemos pensar en cada intervalo como una suma de semitonos, sin importar si son diatónicos o cromáticos. Entre dos alturas hay una distancia contada en semitonos y la distancia mínima es la de 1 semitono.

De DO a RE hay 2 semitonos, de MI a SOL hay 3 semitonos. Si tomamos la octava como un límite donde se define la escala, tenemos en total 12 semitonos. Entonces, al sumar todas las distancias que hay entre 2 alturas consecutivas de la escala, obtenemos el valor de 12 semitonos.

Vamos a pensar que cada distancia es un sumando en una suma cuyo total tiene que dar 12. Y estos 12 semitonos debo repartirlos entre las 9 distancias que separan las alturas consecutivas de la escala (contando la que cierra la octava). El enfoque es repartir semitonos entre las distancias, no fijar cada distancia por separado.

Cuando necesito resolver algo que es muy preciso, suelo comenzar desde lo más genérico. Esta es la aproximación adoptada aquí mediante una serie de preguntas.

1. ¿Cuántas sumas que den 12 se pueden hacer?

En un conjunto con 12 semitonos, podemos crear subconjuntos agrupándolos de tal manera que no haya un semitono que pertenezca a 2 subconjuntos. El tamaño (en semitonos) de cada subconjunto es una distancia entre dos alturas consecutivas. Esto es lo que significa particionar un conjunto.

Los 12 elementos de nuestro conjunto de semitonos. Cada uno vale 1
Los 12 elementos de nuestro conjunto de semitonos. Cada uno vale 1

El subíndice puede ser confuso, pero es para diferenciar cada elemento en el conjunto. Los podemos agrupar así:

Tres formas de particionar un conjunto de 12 semitonos
Tres formas de particionar un conjunto de 12 semitonos

En el caso de las particiones, ni la cantidad de sumandos ni el orden importa.

Veamos resumidamente qué es una partición. Una partición de un número entero nn es una forma de escribir nn como la suma de enteros positivos, sin importar el orden. Se tiene en cuenta que:

  • Los sumandos son enteros positivos (no se permiten ceros ni negativos).
  • El orden no importa, es decir, 4+3+2+34+3+2+3 es la misma partición que 3+3+4+23+3+4+2.
  • Puede haber repetición de sumandos, por ejemplo, 5+5+25+5+2 es una partición de 12.

Toda esta información se puede encontrar más detallada en Wikipedia: Partición.

Veamos un ejemplo. Las particiones de 44 son:

  1. 44
  2. 3+13+1
  3. 2+22+2
  4. 2+1+12+1+1
  5. 1+1+1+11+1+1+1

En total, hay 5 particiones de 4.

Los valores de p(n)p(n) para n=0,1,2,3,4n = 0, 1, 2, 3, 4 \ldots son:

1, 1, 2, 3, 5, 7, 11, 15, 22, 30, 42, 56, 77, 1,\ 1,\ 2,\ 3,\ 5,\ 7,\ 11,\ 15,\ 22,\ 30,\ 42,\ 56,\ 77,\ \ldots

Esto es lo que se llama una secuencia y se puede encontrar en OEIS: A000041. Incluso existe una recurrencia, derivada del teorema de los números pentagonales de Euler, para calcular la cantidad de particiones de un número dado:

Recurrencia de Euler para p(n)p(n)

p(n)=k=1(1)k1(p(nk(3k1)/2)+p(nk(3k+1)/2))p(n) = \sum_{k=1}^{\infty} (-1)^{k-1} \left( p(n - k(3k-1)/2) + p(n - k(3k+1)/2) \right)

con las convenciones p(0)=1p(0) = 1 y p(m)=0p(m) = 0 para m<0m < 0. Aunque el índice diga infinito, la suma es finita: los argumentos se vuelven negativos enseguida.

En el caso para p(12)=77p(12) = 77:

  1. 1212
  2. 11+111 + 1
  3. 10+1+110 + 1 + 1
  4. 10+210 + 2
  5. 8+1+1+28 + 1 + 1 + 2

Estas son las formas en que se puede sumar para obtener 12.

Pero

8+1+1+2=8+1+2+18 + 1 + 1 + 2 = 8 + 1 + 2 + 1

por definición de las particiones. Sin embargo, en música un intervalo de 8 semitonos seguido de 1 semitono, 1 semitono y 2 semitonos no es igual a uno de 8 semitonos, 1 semitono, 2 semitonos, 1 semitono. Escrito en forma de tuplas:

(8,1,1,2)(8,1,2,1)(8, 1, 1, 2) \neq (8, 1, 2, 1)

Y en el círculo cromático:

Dos escalas distintas de 4 alturas mostradas en el círculo cromático
Dos escalas distintas de 4 alturas mostradas en el círculo cromático

Es decir, hay 77 formas de sumar para obtener 12. Pero esto no quiere decir que haya 77 escalas distintas en nuestro ámbito musical de 12 semitonos. Nos hemos quedado cortos. En una partición, dos sumas con los mismos sumandos se consideran iguales. Mientras que en música no. El orden de los sumandos sí importa.

Eso nos lleva a la siguiente pregunta.

2. ¿Cuántas sumas que den 12 se pueden hacer donde el orden de los sumandos importa?

Cuando el orden importa, se le llama composiciones. En las composiciones no importa la cantidad de sumandos, pero el orden sí importa. Este número va a ser mayor que 77 porque cada partición genera una o más composiciones al reordenar sus sumandos.

¿Qué es una composición?

En matemáticas, una composición de un entero nn es una forma de escribir nn como la suma de una secuencia de enteros estrictamente positivos. Dos secuencias que difieren en el orden de sus términos definen diferentes composiciones de su suma, mientras que se considera que definen la misma partición entera de ese número. Cada número entero tiene un número finito de composiciones distintas. Cada entero positivo nn tiene 2n12^{n-1} composiciones distintas.

Total de composiciones de un número nn

k=1n(n1k1)=2n1\sum_{k=1}^{n} \binom{n-1}{k-1} = 2^{n-1}

Por lo tanto, para 12 semitonos hay 2112^{11} posibilidades, o sea 2048.

211=20482^{11} = 2048

Acá se incluyen todas las escalas que se pueden formar de 1, 2, 3, 4, etc. alturas. Por ejemplo, aquí está 1212, que es la única escala de 1 altura que se puede formar. También está (2,2,2,2,2,2)(2, 2, 2, 2, 2, 2), que es la escala de tonos enteros. A nosotros nos interesan las escalas de 9 alturas, entonces nos hemos pasado de largo. Debemos obtener un subconjunto de este conjunto donde la cantidad de sumandos sea 9.

3. ¿Cuántas sumas de 9 sumandos que den 12 se pueden hacer y en las que el orden de los sumandos importa?

Para este problema, estamos buscando el número de composiciones de 12 en exactamente 9 partes. Una composición es similar a una partición, pero el orden de los sumandos sí importa.

Podemos resolver este problema utilizando el método de "estrellas y barras". Imaginemos 12 estrellas que representan el número 12.

12 estrellas
12 estrellas

Necesitamos dividir estas 12 estrellas en 9 grupos (9 sumandos). Para hacer esto, necesitamos colocar 8 "barras" en los espacios entre las estrellas. Hay 121=1112 - 1 = 11 espacios posibles donde podemos colocar las barras:

12 estrellas y 11 lugares donde colocar una barra
12 estrellas y 11 lugares donde colocar una barra

Ahora el problema es binario. En un espacio tenemos dos opciones: colocamos una barra o no colocamos una barra. Para dividir estas estrellas en 9 grupos, necesitamos elegir 8 de estos 11 espacios para colocar las barras.

3 formas de combinar las barras en los espacios
3 formas de combinar las barras en los espacios

Se trata, entonces, de encontrar todas las combinaciones de agregar las barras: un coeficiente binomial. Como estamos pensando en espacios, hay (cantidad de estrellas) − 1 espacios donde elegir (cantidad de grupos) − 1 barras. De ahí los 1-1 de la fórmula, que se suele anotar de la siguiente manera:

(n1k1)\binom{n-1}{k-1}

En este caso, n=12n = 12 y k=9k = 9.

(12191)=(118)\binom{12-1}{9-1} = \binom{11}{8}

O sea que podemos usar la combinatoria de nn en kk para obtener nuestro valor de 9 sumandos cuya suma dé 12. Como:

(nr)=n!r!(nr)!\binom{n}{r} = \frac{n!}{r!\,(n-r)!}

Esto nos da el resultado de 165. Hay 165 escalas de 9 alturas en el sistema de 12 clases de alturas.

De nuevo, la respuesta es no. Porque, de nuevo, nos hemos pasado de largo. Resulta que en este conjunto también están los modos de una misma escala. Por lo tanto, hay más combinaciones de las que musicalmente nos gustaría.

4. ¿Cuántas sumas de 9 sumandos que dan 12 se pueden hacer, en las que el orden de los sumandos importa y una suma no es un ciclo de otra?

Veamos qué quiere decir esta pregunta. Hasta ahora, en cada pregunta hemos ido agregando más restricciones para llegar a lo que queremos. Ya entendimos las primeras partes; solo la parte de "no es un ciclo de otra" puede ser confusa.

Una escala musical puede comenzar en cualquier clase de altura: siempre que respete la sucesión de semitonos, es considerada la misma escala. A esto le llamamos transporte. Pero también, una escala musical puede comenzar en cualquier lugar en la sucesión de semitonos que le corresponde y aún así ser la misma escala; a esto le llamamos modo.

Como estamos trabajando con intervalos de unidad 1 semitono, no nos interesan los transportes. Estos no aparecen en los conjuntos que estamos calculando.

Veamos algunos ejemplos:

  1. La escala diatónica (2,2,1,2,2,2,1)(2, 2, 1, 2, 2, 2, 1) tiene 12 transportes y 7 modos en el caso de dividir la octava en 12 partes (como en el sistema temperado).
  2. La escala de tonos enteros (2,2,2,2,2,2)(2, 2, 2, 2, 2, 2) tiene 2 transportes y 1 modo.

¿Cómo vemos si una secuencia de sumandos es un "modo" en el sentido musical? Vemos su ciclo. Una secuencia numérica es un ciclo de otra si, al comenzar por un lugar diferente y avanzar hacia la derecha, obtengo la última.

Rotaciones 1 2 3, 2 3 1, 3 1 2: forman un ciclo
Rotaciones 1 2 3, 2 3 1, 3 1 2: forman un ciclo

Sin embargo, (1,3,2)(1, 3, 2) no es parte de este ciclo porque no hay forma de empezar nuestra secuencia original en una posición diferente y llegar a esta secuencia, aunque tenga los mismos sumandos.

Vale la pena anotar aquí que estos ciclos no son permutaciones. Las permutaciones de 1, 2 y 3 son:

  1. 1,2,31, 2, 3
  2. 2,3,12, 3, 1
  3. 3,1,23, 1, 2
  4. 1,3,21, 3, 2
  5. 3,2,13, 2, 1
  6. 2,1,32, 1, 3

Estas permutaciones contienen 2 ciclos: (1,2,3)(1, 2, 3) y (1,3,2)(1, 3, 2).

Los ciclos son lo mismo que los modos. Entonces, dentro del conjunto que obtuvimos anteriormente (165) tenemos que reconocer los ciclos y conjugarlos en una única sucesión. Esto ya no es tan fácil de obtener.

Una solución es comenzar a iterar por estas 165 secuencias y, para cada una, hallar sus ciclos y quitarlos del conjunto. Es decir, usar la fuerza bruta. Al final nos vamos a quedar con un conjunto que nos dé el número exacto de escalas de 9 alturas. ¿Cuál es ese número? 165 es un número grande para comenzar a escribirlos uno por uno y chequear. Necesitamos ser más listos.

Primero tratemos de averiguar cuántas escalas en total hay. Para eso necesitamos algo de matemáticas.

Composiciones cíclicas

Una composición cíclica de un entero nn es una clase de equivalencia de composiciones lineales de nn donde dos composiciones se consideran equivalentes si una puede obtenerse de la otra mediante un desplazamiento cíclico de sus partes.

Pensemos en las partes de la composición dispuestas en un círculo, como en el círculo cromático. Si rotamos el círculo, la composición sigue siendo la misma. También se dice que forman una órbita.

Ejemplo de composiciones lineales y sus composiciones cíclicas equivalentes

Para n=4n = 4:

  1. Composiciones lineales:
    • 44
    • 3+13 + 1
    • 1+31 + 3
    • 2+22 + 2
    • 2+1+12 + 1 + 1
    • 1+2+11 + 2 + 1
    • 1+1+21 + 1 + 2
    • 1+1+1+11 + 1 + 1 + 1
  2. Composiciones cíclicas (clases de equivalencia):
    • [4][4] (solo hay una forma lineal, 4)
    • [3,1][3, 1] y [1,3][1, 3] se agrupan en una sola composición cíclica (3,1)(3, 1)
    • [2,2][2, 2] (esta es "cíclicamente simétrica", así que es su propia clase)
    • [2,1,1][2, 1, 1], [1,2,1][1, 2, 1], [1,1,2][1, 1, 2] se agrupan en una sola composición cíclica (2,1,1)(2, 1, 1)
    • [1,1,1,1][1, 1, 1, 1] (también es cíclicamente simétrica)

Así, las composiciones cíclicas de 4 son:

  1. (4)(4)
  2. (3,1)(3, 1)
  3. (2,2)(2, 2)
  4. (2,1,1)(2, 1, 1)
  5. (1,1,1,1)(1, 1, 1, 1)

Hay 5 composiciones cíclicas de 4. Observamos que el número de composiciones cíclicas es a menudo menor que el número de composiciones lineales.

¿Cómo se cuentan las composiciones cíclicas?

Contar composiciones cíclicas es más complejo que contar composiciones lineales: no hay una fórmula tan directa como 2n12^{n-1} o (n1k1)\binom{n-1}{k-1}, porque hay que contar clases de equivalencia bajo rotación.

Hay que usar herramientas más avanzadas de combinatoria, como el lema de Burnside o el teorema de enumeración de Pólya, que cuentan objetos bajo la acción de un grupo de simetrías; en nuestro caso, el grupo cíclico de rotaciones.

La fórmula general para el número de composiciones cíclicas de nn (sin restricciones en el número de partes) es:

1ndnϕ(d)2n/d1\frac{1}{n}\sum_{d\mid n}\phi(d)\cdot 2^{n/d} - 1

donde ϕ(d)\phi(d) es la función totiente de Euler, que cuenta el número de enteros positivos menores o iguales a dd que son coprimos con dd. La sumatoria cuenta los collares binarios de longitud nn (en cada uno de los nn semitonos, o comienza una parte o no); el 1-1 descarta el collar sin ninguna marca, que no corresponde a ninguna composición. Podemos verificar la fórmula con nuestro ejemplo: para n=4n = 4 da 14(24+22+22)1=61=5\frac{1}{4}\left(2^4 + 2^2 + 2\cdot 2\right) - 1 = 6 - 1 = 5, las cinco composiciones cíclicas que listamos arriba. La secuencia completa es A008965 en OEIS.

Un ejemplo

φ(36)=φ ⁣(3222)=36(113)(112)=362312=12\varphi(36)=\varphi\!\left(3^{2}\,2^{2}\right)=36\left(1-\tfrac{1}{3}\right)\left(1-\tfrac{1}{2}\right)=36\cdot\tfrac{2}{3}\cdot\tfrac{1}{2}=12

También:

φ(36)=φ ⁣(3222)=(31)3(21)(21)2(21)=2312=12\varphi(36)=\varphi\!\left(3^{2}\,2^{2}\right)=(3-1)\,3^{(2-1)}\,(2-1)\,2^{(2-1)}=2\cdot 3\cdot 1\cdot 2=12

Se puede comprobar manualmente que los números coprimos con 36 (o sea, que no son divisibles por 2 ni por 3) son doce: 1, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31 y 35.

Esta fórmula responde la pregunta con la que abrimos la sección: ¿cuántas escalas hay en total, de cualquier cantidad de alturas? Para n=12n = 12, los divisores son 1, 2, 3, 4, 6 y 12:

112(1212+126+224+223+222+421)1=4224121=351\frac{1}{12}\left(1\cdot 2^{12} + 1\cdot 2^{6} + 2\cdot 2^{4} + 2\cdot 2^{3} + 2\cdot 2^{2} + 4\cdot 2^{1}\right) - 1 = \frac{4224}{12} - 1 = 351

En el sistema temperado hay 351 escalas de entre 1 y 12 alturas, contando los modos como una sola escala.

Para nuestro caso específico de composiciones de 12 en 9 partes bajo rotación, el problema es aún más granular, ya que estamos fijando el número de partes (k=9k = 9). La fórmula se vuelve más específica:

1kdgcd(n,k)ϕ(d)(n/d1k/d1)\frac{1}{k} \sum_{d\,\mid\,\gcd(n,k)} \phi(d)\,\binom{n/d - 1}{k/d - 1}

Lo de abajo de la sumatoria indica sobre qué valores se suma: dd recorre los divisores de gcd(n,k)\gcd(n, k), el máximo común divisor de nn y kk — en nuestro caso, de 12 y 9. La última parte

(n/d1k/d1)\binom{n/d - 1}{k/d - 1}

cuenta las composiciones lineales de n/dn/d en k/dk/d partes. Es el coeficiente binomial que vimos antes.

Aplicando esto a n=12n = 12, k=9k = 9:

gcd(12,9)=3\gcd(12, 9) = 3

Los divisores de 3 son 1 y 3, así que la sumatoria recorre d=1d = 1 y d=3d = 3.

Para d=1d = 1:

ϕ(1)=1\phi(1) = 1

El valor a la derecha de la sumatoria termina siendo:

1(12/119/11)=(118)=1651 \cdot \binom{12/1 - 1}{9/1 - 1} = \binom{11}{8} = 165

Para d=3d = 3:

ϕ(3)=2\phi(3) = 2

Los números coprimos con 3 menores o iguales a 3 son 1 y 2. Por lo tanto:

2(12/319/31)=2(4131)=2(32)=23=62 \cdot \binom{12/3 - 1}{9/3 - 1} = 2 \cdot \binom{4-1}{3-1} = 2 \cdot \binom{3}{2} = 2 \cdot 3 = 6

Por fin, el número de composiciones cíclicas de 12 en 9 partes es:

19(ϕ(1)(118)+ϕ(3)(32))=19(1165+23)=19(165+6)=1719=19\frac{1}{9}\left(\phi(1)\,\binom{11}{8} + \phi(3)\,\binom{3}{2}\right) = \frac{1}{9}\left(1\cdot 165 + 2\cdot 3\right) = \frac{1}{9}(165 + 6) = \frac{171}{9} = 19

Así que, de las 165 composiciones lineales, solo hay 19 composiciones cíclicas distintas.

¿Cuántas escalas de 9 alturas hay?

19.

Listo el problema, pero… ¿podemos listarlas?

¿Cómo hago para listar todas las 19 escalas?

Aquí hay un nuevo desafío: enumerar las 19 composiciones cíclicas para n=12n = 12 y k=9k = 9 es bastante difícil y no se puede realizar simplemente con una fórmula de combinaciones. La fórmula que usamos nos da el número total de tales composiciones cíclicas, pero no las genera directamente.

La generación de todas las composiciones cíclicas implica la identificación de ciclos y la reducción por el grupo cíclico. O sea que tenemos que, primero, generar todas las 165 composiciones lineales y luego agruparlas por sus rotaciones cíclicas y eliminar los duplicados.

Por qué es difícil listar sin un algoritmo específico

  1. Generación de 165 composiciones lineales. Incluso listar todas las 165 composiciones lineales manualmente es propenso a errores y muy tedioso. Es más fácil hacerlo programáticamente. Un enfoque sería generar todas las combinaciones de 8 "barras" en 11 "espacios" y luego interpretar cada combinación como una secuencia de sumandos.
  2. Identificación de la equivalencia cíclica. Una vez que tenemos las 165, para cada composición lineal [x1,x2,,xk][x_1, x_2, \ldots, x_k] tendríamos que generar todas sus kk rotaciones ([x2,,xk,x1]([x_2, \ldots, x_k, x_1], etc.). Luego tendríamos que almacenar cada composición cíclica de una manera canónica (por ejemplo, la rotación lexicográficamente más pequeña) para evitar contar la misma clase de equivalencia varias veces.
  3. Filtrado por clases de equivalencia. Algunas composiciones tienen menos de kk rotaciones distintas (como [1,1,2,1,1,2,1,1,2][1,1,2,1,1,2,1,1,2], que solo tiene 3 rotaciones únicas), lo que complica el proceso de agrupación. Esto se debe a la simetría interna de la composición (su período).

Las 19 composiciones cíclicas serían conjuntos de secuencias de 9 enteros positivos que suman 12, donde cada conjunto representa una clase de equivalencia bajo rotación.

Características de las 19 composiciones:

  • Variedad de intervalos. Habría una gran variedad de combinaciones de 1, 2, 3 y quizás un 4 para llegar a 12 en 9 partes.
    • El sumando más pequeño posible es 1.
    • El sumando más grande posible es 4 (si todos los demás son 1: 1+1+1+1+1+1+1+1+4=121+1+1+1+1+1+1+1+4 = 12). No puede haber un 5, por ejemplo, porque si hubiera un 5, los otros 8 sumandos deberían sumar 7, lo cual es imposible si todos son al menos 1 (sumarían al menos 8).
  • Período. Algunas composiciones cíclicas tendrían un período de 9 (es decir, las 9 rotaciones lineales son distintas antes de que se repita la primera). Estas son las composiciones "asimétricas". Otras tendrían un período más corto: sucede cuando la composición es el resultado de repetir un patrón más pequeño. Como el período debe dividir a k=9k = 9, solo puede ser 1, 3 o 9.

Entonces:

  • No habrá composiciones de período 1, ya que eso implicaría que todos los sumandos son iguales, y 12/9 no es un entero.
  • Con período 3 hay exactamente una. El bloque de 3 sumandos que se repite debe sumar 12/3=412/3 = 4, y las tres composiciones de 4 en 3 partes —(1,1,2)(1, 1, 2), (1,2,1)(1, 2, 1) y (2,1,1)(2, 1, 1)— son rotaciones entre sí: la única clase es (1,1,2,1,1,2,1,1,2)(1, 1, 2, 1, 1, 2, 1, 1, 2).
  • Las otras 18 tendrán período 9.

Esto da una verificación independiente del resultado: 189+13=16518 \cdot 9 + 1 \cdot 3 = 165, exactamente la cantidad de composiciones lineales.

El siguiente script primero genera todas las composiciones lineales y luego las agrupa en sus respectivas clases cíclicas. Para cada clase, presenta la composición lineal lexicográficamente más pequeña como su representante.

import math
# Usamos itertools.combinations para elegir las posiciones de las barras
from itertools import combinations


def generate_compositions(n, k):
    """
    Genera todas las composiciones lineales de n en k partes.
    Utiliza el método de estrellas y barras,
    representando las barras como combinaciones.
    """
    if n < k or k <= 0:
        return []

    compositions = []

    # Los 'espacios' son los índices donde se pueden colocar las barras
    spaces = range(1, n)

    # Generar todas las combinaciones de k-1 barras en n-1 espacios
    for bar_positions in combinations(spaces, k - 1):
        current_composition = []
        last_bar_pos = 0
        for bar_pos in bar_positions:
            current_composition.append(bar_pos - last_bar_pos)
            last_bar_pos = bar_pos
        current_composition.append(n - last_bar_pos)
        compositions.append(tuple(current_composition))
    return compositions


def get_cyclic_rotations(composition):
    """
    Obtiene todas las rotaciones cíclicas de una composición dada.
    """
    rotations = []
    k = len(composition)
    for i in range(k):
        rotated_composition = composition[i:] + composition[:i]
        rotations.append(tuple(rotated_composition))
    return rotations


def get_lexicographically_smallest(composition_list):
    """
    Devuelve la composición lexicográficamente
    más pequeña de una lista de composiciones.
    """
    return min(composition_list)


# Definir n y k
n = 12  # La suma total
k = 9   # El número de partes

# --- Ejecución del script ---

print(f"Generando composiciones cíclicas para n={n} (suma) y k={k} (número de partes):\n")

# 1. Generar todas las composiciones lineales
linear_compositions = generate_compositions(n, k)
print(f"Total de composiciones lineales (donde el orden importa): {len(linear_compositions)}\n")

# 2. Identificar las clases de equivalencia cíclica
cyclic_classes = set()  # Usaremos un conjunto para almacenar representantes únicos

for comp in linear_compositions:
    # Obtener todas las rotaciones de la composición actual
    rotations = get_cyclic_rotations(comp)

    # Encontrar la rotación lexicográficamente más pequeña para esta clase
    # Este será nuestro representante canónico para la clase cíclica
    canonical_representative = get_lexicographically_smallest(rotations)

    # Añadir el representante canónico al conjunto de clases cíclicas
    cyclic_classes.add(canonical_representative)

# Convertir el conjunto a una lista y ordenar para una salida consistente
sorted_cyclic_compositions = sorted(list(cyclic_classes))

print(f"Total de composiciones cíclicas (donde las rotaciones son equivalentes): {len(sorted_cyclic_compositions)}\n")

print("Lista de las 19 composiciones cíclicas (representadas por su forma lexicográficamente más pequeña):")
for i, comp in enumerate(sorted_cyclic_compositions):
    print(f"{i+1}. {list(comp)}")

Veamos todo este código:

generate_compositions(n, k)

  • Esta función toma nn (la suma) y kk (el número de partes).
  • Utiliza el principio de estrellas y barras. Si tenemos nn estrellas, hay n1n - 1 espacios entre ellas. Para dividir estas estrellas en kk partes (todas positivas), necesitamos colocar k1k - 1 barras en esos n1n - 1 espacios.
  • itertools.combinations es una herramienta que genera todas las formas de elegir k1k - 1 posiciones de barra de los n1n - 1 posibles espacios.
  • Para cada combinación de posiciones de barras, calcula la longitud de cada segmento (la "parte" de la composición) y la agrega a la lista de composiciones.

get_cyclic_rotations(composition)

  • Toma una composición lineal (una tupla de números).
  • Genera todas las kk posibles rotaciones de esa composición. Por ejemplo, si la composición es (a,b,c)(a, b, c), sus rotaciones son (a,b,c)(a, b, c), (b,c,a)(b, c, a) y (c,a,b)(c, a, b).

get_lexicographically_smallest(composition_list)

  • Esta función simplemente encuentra la "menor" composición en una lista de tuplas. Las tuplas se comparan elemento por elemento (lexicográficamente). Por ejemplo, (1,1,2)(1, 1, 2) es lexicográficamente menor que (1,2,1)(1, 2, 1). Esto es crucial para tener un representante canónico para cada clase de equivalencia cíclica.

Lógica principal

  • Primero, se generan todas las 165 composiciones lineales.
  • Luego, el script itera a través de cada una de estas composiciones lineales.
  • Para cada una, genera todas sus posibles rotaciones.
  • De esas rotaciones, encuentra la que es lexicográficamente más pequeña. Esta se convierte en el "nombre" único de su clase de equivalencia cíclica.
  • Este representante canónico se agrega a un set de clases cíclicas. Los sets en Python automáticamente manejan la unicidad, asegurando que no se agreguen duplicados de las clases cíclicas.
  • Finalmente, el contenido del set se convierte a una lista y se ordena para presentar los resultados de manera limpia y consistente.

Este script se puede ejecutar en cualquier lugar con Python. Su salida es la lista completa de las 19 escalas, cada una representada por su rotación lexicográficamente más pequeña:

  1. (1,1,1,1,1,1,1,1,4)(1, 1, 1, 1, 1, 1, 1, 1, 4)
  2. (1,1,1,1,1,1,1,2,3)(1, 1, 1, 1, 1, 1, 1, 2, 3)
  3. (1,1,1,1,1,1,1,3,2)(1, 1, 1, 1, 1, 1, 1, 3, 2)
  4. (1,1,1,1,1,1,2,1,3)(1, 1, 1, 1, 1, 1, 2, 1, 3)
  5. (1,1,1,1,1,1,2,2,2)(1, 1, 1, 1, 1, 1, 2, 2, 2)
  6. (1,1,1,1,1,1,3,1,2)(1, 1, 1, 1, 1, 1, 3, 1, 2)
  7. (1,1,1,1,1,2,1,1,3)(1, 1, 1, 1, 1, 2, 1, 1, 3)
  8. (1,1,1,1,1,2,1,2,2)(1, 1, 1, 1, 1, 2, 1, 2, 2)
  9. (1,1,1,1,1,2,2,1,2)(1, 1, 1, 1, 1, 2, 2, 1, 2)
  10. (1,1,1,1,1,3,1,1,2)(1, 1, 1, 1, 1, 3, 1, 1, 2)
  11. (1,1,1,1,2,1,1,1,3)(1, 1, 1, 1, 2, 1, 1, 1, 3)
  12. (1,1,1,1,2,1,1,2,2)(1, 1, 1, 1, 2, 1, 1, 2, 2)
  13. (1,1,1,1,2,1,2,1,2)(1, 1, 1, 1, 2, 1, 2, 1, 2)
  14. (1,1,1,1,2,2,1,1,2)(1, 1, 1, 1, 2, 2, 1, 1, 2)
  15. (1,1,1,1,3,1,1,1,2)(1, 1, 1, 1, 3, 1, 1, 1, 2)
  16. (1,1,1,2,1,1,1,2,2)(1, 1, 1, 2, 1, 1, 1, 2, 2)
  17. (1,1,1,2,1,1,2,1,2)(1, 1, 1, 2, 1, 1, 2, 1, 2)
  18. (1,1,1,2,1,2,1,1,2)(1, 1, 1, 2, 1, 2, 1, 1, 2)
  19. (1,1,2,1,1,2,1,1,2)(1, 1, 2, 1, 1, 2, 1, 1, 2)

Sin embargo, también podemos llegar a esta lista dibujando. Veamos de qué forma.

Otra forma de dibujar

Aún podemos usar el círculo cromático para describir todas las escalas. Pero el círculo cromático asocia cada punto (o rayita) a una altura (aunque no importa qué nombre tiene) y la separación entre 2 puntos consecutivos significa un semitono. Me parece que el círculo cromático se enfoca en las clases de alturas, mientras que todo mi enfoque para describir las escalas se centra en sus distancias contadas en semitonos. Por lo tanto, no me resulta muy aclarador usar el círculo cromático.

Círculo cromático con 12 rayitas
Círculo cromático con 12 rayitas

En su lugar vamos a usar cajas.

Me voy a basar en los diagramas de Young, que son una forma de representar las particiones de un número. Se puede encontrar información en Wikipedia: Tablas de Young, pero no es necesario saber mucho más que lo que voy a explicar seguidamente.

Cada caja representa 1 semitono. Como las escalas que buscamos tienen 9 alturas, las vamos a colocar en 9 filas. De este modo nos aseguramos que hay 9 alturas. Pero debemos definir las distancias entre esas alturas. Como debe haber 12 semitonos para que cierre el ciclo, nos faltan 3 cajas por colocar.

9 filas con 1 caja cada una: los 9 "pasos" que hay que dar para cerrar la escala
9 filas con 1 caja cada una: los 9 "pasos" que hay que dar para cerrar la escala

Con cajas, no hay que pensar de antemano en cómo distribuir los semitonos. Estos se van agregando a la derecha pero los pasos ya están determinados. Sin embargo, el círculo cromático manifiesta mejor la naturaleza cíclica de las escalas.

Nos faltan 3 cajas para completar 12 cajas (12 semitonos). ¿Cómo las distribuimos? No podemos seguir agregando filas porque ya no habría 9 pasos (o alturas) en la escala resultante. Entonces vamos a agregarlas al costado de las cajas ya colocadas. Lo haremos hacia la derecha, pero es indistinto. De este modo, no modificamos la cantidad de filas.

¿De cuántas formas podemos apilar esas 3 cajas restantes? No hay muchas:

  • Apilamos las 3 cajas en una fila.
  • Apilamos 1 caja en una fila y 2 cajas en otra fila.
  • Apilamos 1 caja en 3 filas.

¡Estas son las particiones del número 3! Por lo tanto, algunas filas tendrán 4, 3 o 2 cajas.

La clave está en poner estas cajas desde abajo hacia arriba y contar desde arriba hacia abajo. Esto nos da una forma sistemática de contar y nos asegura la forma básica y evita los ciclos. Podemos contar desde abajo hacia arriba; nos daría la escala inversa: la que resulta de leer la secuencia de intervalos en el orden contrario (en el círculo cromático, su reflejo). Es lo mismo. Pero para evitar duplicados es importante seguir una de las dos formas de contar.

Primero colocamos la caja mayor en la última fila, luego la que le sigue en la penúltima fila, y así sucesivamente. Cuando hay la misma cantidad de cajas, no importa su orden.

Tres formas de completar las 12 cajas: (1,1,1,1,1,1,1,1,4), (1,1,1,1,1,1,1,2,3) y (1,1,1,1,1,1,2,2,2)
Tres formas de completar las 12 cajas: (1,1,1,1,1,1,1,1,4), (1,1,1,1,1,1,1,2,3) y (1,1,1,1,1,1,2,2,2)

Entonces, ahora solo nos queda mover las filas donde haya más de una caja para obtener todas las escalas. Pero siempre dejamos la última fila con la mayor cantidad de cajas.

Veamos por qué sirve esto. En la forma numérica, tenemos (1,1,1,1,1,1,1,2,3)(1, 1, 1, 1, 1, 1, 1, 2, 3). Lo que hacemos es mover el 2 hacia la izquierda y dejamos quieto el 3. Esto da todas las posibilidades con 2 y 3 semitonos. Cuando lleguemos a esto: (2,1,1,1,1,1,1,1,3)(2, 1, 1, 1, 1, 1, 1, 1, 3), veremos que ya no hay dónde seguir; cualquier otro movimiento nos dará un ciclo.

(2,1,1,1,1,1,1,1,3)=(1,1,1,1,1,1,1,3,2)(2, 1, 1, 1, 1, 1, 1, 1, 3) = (1, 1, 1, 1, 1, 1, 1, 3, 2)

Una forma concisa

Hay una forma más concisa de escribir las secuencias de 1, 2, 3 y 4. Podemos agrupar los 1s cuando están juntos sin perder información:

(1,1,1,1,1,1,1,1,4)=(8, 4)(1, 1, 1, 1, 1, 1, 1, 1, 4) = (8,\ \underline{4})

El número ordinario indica la cantidad de 1s y el número subrayado la cantidad de cajas en esa fila. Veamos un ejemplo más elaborado:

(1,2,1,1,1,2,1,1,2)=(1, 2, 3, 2, 2, 2)(1, 2, 1, 1, 1, 2, 1, 1, 2) = (1,\ \underline{2},\ 3,\ \underline{2},\ 2,\ \underline{2})

De este modo es más fácil reconocer los ciclos. También vemos que cuando se llega a los extremos con números subrayados, ya no existen más versiones.

(1, 2, 3, 2, 2, 2)=(2, 3, 2, 2, 2, 1)=(3, 2, 2, 2, 1, 2)(1,\ \underline{2},\ 3,\ \underline{2},\ 2,\ \underline{2}) = (\underline{2},\ 3,\ \underline{2},\ 2,\ \underline{2},\ 1) = (3,\ \underline{2},\ 2,\ \underline{2},\ 1,\ \underline{2})

Trasladando a la versión completa:

(1, 2, 3, 2, 2, 2)=(1,2,1,1,1,2,1,1,2)=(2,1,1,1,2,1,1,2,1)=(1,1,1,2,1,1,2,1,2)(1,\ \underline{2},\ 3,\ \underline{2},\ 2,\ \underline{2}) = (1, 2, 1, 1, 1, 2, 1, 1, 2) = (2, 1, 1, 1, 2, 1, 1, 2, 1) = (1, 1, 1, 2, 1, 1, 2, 1, 2)\ldots

Y usando otra versión, nos lleva a escribir menos ciclos sin perder información:

(3, 2, 2, 2, 1, 2)=(1,1,1,2,1,1,2,1,2)=(1,1,2,1,1,2,1,2,1)=(1,2,1,1,2,1,2,1,1)=(2,1,1,2,1,2,1,1,1)=(1,1,2,1,2,1,1,1,2)(3,\ \underline{2},\ 2,\ \underline{2},\ 1,\ \underline{2}) = (1, 1, 1, 2, 1, 1, 2, 1, 2) = (1, 1, 2, 1, 1, 2, 1, 2, 1) = (1, 2, 1, 1, 2, 1, 2, 1, 1) = (2, 1, 1, 2, 1, 2, 1, 1, 1) = (1, 1, 2, 1, 2, 1, 1, 1, 2)

Para la versión completa hay 9 formas de escribir, mientras que para la versión concisa hay 6. Y esta es la más larga para las escalas de 9 alturas.

Por ejemplo, (7, 2, 3)(7,\ \underline{2},\ \underline{3}) es más concisa aún. Y es fácil obtener sus ciclos: (2, 3, 7)(\underline{2},\ \underline{3},\ 7) y (3, 7, 2)(\underline{3},\ 7,\ \underline{2}). En comparación con los 9 ciclos que hay que escribir para la versión completa. Más aún, vemos que (7, 2, 3)(7,\ \underline{2},\ \underline{3}) es distinta a (7, 3, 2)(7,\ \underline{3},\ \underline{2}).

La clave es nunca mover las cajas en la última fila, que siempre va a ser la de mayor cantidad.

Listemos todas las posibilidades con las restricciones que se aplican a una escala.

Utilizando 4 cajas

Existe una sola versión, ya que cualquier otra es un modo de la misma:

Escala (8, 4): una columna de 8 cajas con 4 cajas al pie
Escala (8, 4): una columna de 8 cajas con 4 cajas al pie

Utilizando 2 y 3 cajas

Estas son las 8 versiones:

Las 8 versiones con 2 y 3 cajas: (7,2,3), (6,2,1,3), (5,2,2,3), (4,2,3,3), (3,2,4,3), (2,2,5,3), (1,2,6,3) y (2,7,3)
Las 8 versiones con 2 y 3 cajas: (7,2,3), (6,2,1,3), (5,2,2,3), (4,2,3,3), (3,2,4,3), (2,2,5,3), (1,2,6,3) y (2,7,3)

Fácilmente podemos ver los ciclos:

(7, 2, 3)=(2, 3, 7)=(3, 7, 2)(7,\ \underline{2},\ \underline{3}) = (\underline{2},\ \underline{3},\ 7) = (\underline{3},\ 7,\ \underline{2})

Su inversa aparece en el último dibujo:

(2, 7, 3)=(7, 3, 2)=(3, 2, 7)(\underline{2},\ 7,\ \underline{3}) = (7,\ \underline{3},\ \underline{2}) = (\underline{3},\ \underline{2},\ 7)

Utilizando 2 cajas

Hay 10 versiones donde se utilizan 3 filas con 2 cajas:

Las seis escalas con tres filas de 2 cajas cuya mayor corrida inicial es de 6, 5 o 4 unos: (1,1,1,1,1,1,2,2,2), (1,1,1,1,1,2,1,2,2), (1,1,1,1,1,2,2,1,2), (1,1,1,1,2,1,1,2,2), (1,1,1,1,2,2,1,1,2) y (1,1,1,1,2,1,2,1,2)
Las seis escalas con tres filas de 2 cajas cuya mayor corrida inicial es de 6, 5 o 4 unos: (1,1,1,1,1,1,2,2,2), (1,1,1,1,1,2,1,2,2), (1,1,1,1,1,2,2,1,2), (1,1,1,1,2,1,1,2,2), (1,1,1,1,2,2,1,1,2) y (1,1,1,1,2,1,2,1,2)
Las cuatro restantes: (1,1,1,2,1,1,1,2,2), (1,1,1,2,1,1,2,1,2), (1,1,1,2,1,2,1,1,2) y (1,1,2,1,1,2,1,1,2)
Las cuatro restantes: (1,1,1,2,1,1,1,2,2), (1,1,1,2,1,1,2,1,2), (1,1,1,2,1,2,1,1,2) y (1,1,2,1,1,2,1,1,2)

Debido a la distribución de las 3 cajas en una fila distinta cada una, se da lo siguiente: la fila con mayor cantidad de cajas siempre va al final y la mayor agrupación de 1s siempre va al principio. Cuando esta mayor agrupación de 1s está en las filas intermedias, entonces esta disposición ya fue listada.

(4, 2, 2, 2, 2)(4,\ \underline{2},\ 2,\ \underline{2},\ \underline{2}) es un ciclo de (2, 2, 2, 4, 2)(2,\ \underline{2},\ \underline{2},\ 4,\ \underline{2})

En la versión de 2 y 3 cajas, cuando la mayor distribución de 1s es en las filas intermedias, se obtiene la inversa. En la versión de 2, 2 y 2 cajas ocurren las dos cosas: hay tres pares de inversas —por ejemplo, (3, 2, 2, 2, 1, 2)(3,\ \underline{2},\ 2,\ \underline{2},\ 1,\ \underline{2}) y (3, 2, 1, 2, 2, 2)(3,\ \underline{2},\ 1,\ \underline{2},\ 2,\ \underline{2})— y cuatro escalas que son su propia inversa, entre ellas la de período 3, (2, 2, 2, 2, 2, 2)(2,\ \underline{2},\ 2,\ \underline{2},\ 2,\ \underline{2}).

Conclusión

A lo largo de este artículo, hemos desvelado un fascinante entramado entre las aparentemente abstractas matemáticas combinatorias y el tangible mundo de la creatividad musical. Para mí, la creatividad comienza como alguna pregunta, sea esta interesante o no. Y la cuestión sobre cuántas sumas distintas pueden formar un número evolucionó hacia una mayor exploración de las estructuras que forman a las escalas musicales.

Demostramos que el problema de construir escalas de 9 alturas en el círculo cromático de 12 semitonos se mapea directamente al concepto matemático de composiciones cíclicas. A diferencia de las particiones, donde el orden no importa, las composiciones valoran la secuencia de sus elementos, reflejando la importancia de la serie de intervalos en una escala. Sin embargo, en el contexto cíclico del círculo cromático, las rotaciones de una misma secuencia de intervalos definen una única estructura de escala, revelando que de las 165 composiciones lineales posibles, solo 19 son estructuras interválicas musicalmente distintas.

Pudimos desarrollar un método constructivo y un sistema de notación conciso. Este método, basado en la distribución de "cajas" o semitonos excedentes y la agrupación de "unos", demuestra una comprensión profunda de cómo se generan estas formas canónicas sin la necesidad de un filtrado masivo posterior. La capacidad de este sistema para reconocer visualmente las equivalencias cíclicas y las simetrías internas subraya cómo la lógica estructurada puede potenciar la percepción creativa.

En última instancia, esta exploración conjunta revela que las matemáticas no son solo una herramienta de cálculo, sino un lenguaje poderoso para describir, analizar e incluso inspirar la creatividad. La música, en su esencia, está repleta de patrones y simetrías que la combinatoria nos ayuda a desentrañar, ofreciendo nuevas perspectivas para la composición y la teoría musical. Este diálogo entre disciplinas abre caminos para futuros descubrimientos en la intersección del arte y la ciencia.

Apéndice 1 — Las 19 escalas en el círculo cromático

Escala (8, 4) en el círculo cromático
Escala (8, 4) en el círculo cromático
Ocho escalas usando 2 y 3 cajas, con sus relaciones de inversión/reflexión
Ocho escalas usando 2 y 3 cajas, con sus relaciones de inversión/reflexión
Escalas usando tres filas de 2 cajas, con sus relaciones de inversión/reflexión
Escalas usando tres filas de 2 cajas, con sus relaciones de inversión/reflexión
Escala (2, 2, 2, 2, 2, 2) con simetría interna y modo de transporte limitado
Escala (2, 2, 2, 2, 2, 2) con simetría interna y modo de transporte limitado
Volver al blogiflb · 2026