¿La notación musical es completa?

63

Me pregunto, ¿el lenguaje de notación musical es Turing-Complete ?

Mi primer pensamiento es que hay bucles en la notación musical, pero no hay forma de escribir ramas condicionales, ¿verdad?

No soy músico, ¿entonces tal vez alguien pueda ayudar a llenar los vacíos?

Klaim
fuente
77
¿Qué es el lenguaje de partición de música ? alguna forma de notación musical ?
mosquito
44
No sé mucho sobre notación musical: ¿puedes codificar de alguna manera una cantidad ilimitada de "variables mutables" (o "cinta")? De lo contrario, no veo cómo podría estar completando.
nikie
no, no lo hace
shabunc
@nikie No estoy seguro si un estribillo actúa como una función almacenada o algo similar ...
Klaim
2
Por supuesto, es Turing completo, simplemente use 8 notas diferentes para representar los 8 personajes de Brainfuck. :)
Chris Burt-Brown

Respuestas:

37

Sí, si admite algunas instrucciones para la transposición, poco común pero no desconocido.

Luego puede interpretar una pieza como Choon , que es completa de Turing. El intérprete es la memoria: deben recordar la cantidad de notas por las cuales la pieza se transpone actualmente y todas las notas que han tocado hasta ahora. Obviamente, es factible solo para una computadora, o tal vez un sabio.

Del manual de Choon:

  • Transposiciones

    Hay tres instrucciones de transposición, arriba ( +), abajo ( -) y cancelar ( .). Una instrucción de transposición transpone todas las notas posteriores reproducidas por la cantidad de la última nota tocada. La instrucción cancel ( .) establece la transposición de nuevo a cero.

    Las transposiciones son acumulativas, por lo que el código Choon para transponer notas futuras en 2 es b+, y en 4 sería b++. Además, el valor utilizado es el valor de la nota anterior después de que se hayan aplicado las b+b+transposiciones , por lo que transpone las notas futuras en 6, no en 4.

  • John Cage

    La instrucción John Cage ( %) provoca un silencio de una nota en la secuencia de salida. El valor de transposición de un John Cage es cero, %-y %+no opera (excepto que se agrega un solo silencio a la salida).

  • Repetir barras

    Las instrucciones de Repetir barras ( ||:y :||) encierran un bucle. El bucle ejecutará el número de veces indicado por la nota más reciente reproducida antes de que ||:se encuentre. Un valor cero o negativo significará que Choon saltará inmediatamente para comenzar a jugar desde la coincidencia :||. Un John Cage significa repetir para siempre: %||::||es un bucle infinito.

  • Diapasón

    La instrucción Tuning Fork ~proporciona una forma de salir de los bucles. Si se encuentra un diapasón en un bucle, y la última nota tocada fue una nota de valor A, Choon saltará inmediatamente para comenzar a tocar después de la siguiente :||instrucción. Si no hay más :||instrucciones ( ~se ha utilizado el significado fuera de las barras de repetición), la ejecución terminará inmediatamente.

  • Marcadores

    Los marcadores proporcionan una conveniencia de programación maravillosa. Un marcador es una letra minúscula o una palabra que recuerda un punto en la secuencia de salida. Hacer referencia a un marcador (ver más abajo) hará que la nota que se reproduce después de que se repita el marcador vuelva a reproducirse. Tenga en cuenta que las transposiciones afectarán a esta nota recién reproducida.

    Cuando dos o más marcadores ocurren secuencialmente, o un marcador sigue una instrucción de jugar desde el marcador, deben estar separados por espacios en blanco.

  • Reproducir desde salida

    La instrucción Reproducir desde salida ( =) le permite reproducir nuevamente notas que ya se han reproducido en la secuencia de salida. Puede referirse a las notas por número: la quinta nota tocada desde que comenzó el programa sería =5, por número relativo, la tercera nota más reciente tocada sería =-3o por marcador, la nota tocada después del marcador xsería =x.

    Es un idioma común para volver a usar un marcador e inmediatamente a continuación se refieren a ella, como esto: x=x. Esto es similar a decir x=x+yen un lenguaje de programación convencional (donde yrepresenta el valor de transposición actualmente efectivo).

Un John Cage es solo un descanso , un diapasón es (aproximadamente) dal segno, y un marcador es un segno. Supongo que el diapasón podría ser jugado por un intérprete adicional al que responde el intérprete principal, pero el principio es el mismo.

Jon Purdy
fuente
1
Diría que esta es la mejor respuesta a la pregunta: ninguna de las otras respuestas demuestra que la notación musical no está completa.
K.Steff
24

La integridad de Turing requiere, como mínimo, tres cosas: un bucle infinito, un salto condicional (si-entonces) y una forma de almacenar los resultados de los cálculos en algún lugar de la memoria. Incluso si la notación musical tuviera saltos condicionales, no tiene estado, así que no, no es completa de Turing.

Mason Wheeler
fuente
13
Tiene saltos condicionales, usados ​​en combinación con signos de repetición: "en la primera repetición, juega esta parte, en la segunda repetición, juega esa parte". El contador de repetición (que mantendrás en tu cabeza mientras juegas) es el estado. Pero, de hecho, no tiene una cinta infinita que contiene el estado.
Jesper
49
Dato curioso: el cálculo Lambda no tiene bucles, no tiene saltos condicionales y no tiene forma de almacenar los resultados de los cálculos en algún lugar de la memoria. Sin embargo, se está completando ;-)
nikie
11
@Nikie: No confundas abstracciones con realidades. El cálculo Lambda tiene un concepto de evaluación condicional, la recursión se usa tanto para bucles como para saltos, y el estado se calcula como el resultado de la evaluación de expresiones. Los conceptos están ahí; simplemente se implementan de una manera muy diferente a la programación de computadora real.
Mason Wheeler
55
@MasonWheeler: LC no tiene conceptos fundamentales de bucles, estado y condicionales, pero puede derivar cosas que tienen un propósito similar. Esa es solo otra forma de decir que Turing está completo. Entonces la pregunta no es: ¿la notación musical tiene estos conceptos, sino: ¿puedes derivarlos de alguna manera? Simplemente afirmó que no puede, sin pruebas. (Estoy de acuerdo con su conclusión, simplemente no creo que su razonamiento sea válido.)
Nikkie
99
@MasonWheeler: el cálculo de Lambda es una programación informática real.
dan_waterworth
23

La prueba estándar para que un idioma sea completo de Turing es escribir una máquina de Turing en ese idioma. Esto demuestra que existe una equivalencia entre el idioma (generalmente un subconjunto del idioma) y la máquina de Turing.

La noción de "notación musical" es un poco resbaladiza. Hay muchos grabados estandarizados que se utilizan. Sin embargo. Hay compositores que empujan sobres y escriben todo tipo de cosas locas en papel.

Supongamos que desea centrarse en el subconjunto de notación musical que se considera lo suficientemente estándar como para ser parte de Finale o Sibelius o algún conjunto de herramientas de grabado de la corriente principal.

Entonces.

Para Python (o C o lo que sea), usted define los símbolos, la cinta, las reglas de transición y las diversas acciones que actualizan la cinta para reflejar el cambio de estado y el movimiento de la cinta, leer y escribir símbolos en la cinta.

Usando "Notación musical", tenemos que definir símbolos y la cinta con estado, las reglas de transición y las diversas acciones que actualizan la cinta.

Lo que nos falta es una cinta con estado y reglas que les digan a los músicos cómo responder a los símbolos en la cinta y cómo actualizar esa cinta.

En cierto sentido, los ruidos que circulan en el aire podrían ser la cinta con estado. Pero. No hay una manera fácil de rebobinar la cinta. Esta falta de rebobinado significa que el artista tendría que mantener una "cinta" privada de algún tipo.

Esto sale de la notación musical y entra en otras instrucciones extra-musicales para el intérprete.

S.Lott
fuente
Bueno, tampoco puedes rebobinar un programa en ejecución ... (Pero sí, entiendo lo que quieres decir sobre actualizar el estado, pero ¿podría ser un lenguaje funcional?)
Izkata
2
No rebobinas el programa. Rebobinas la cinta. El punto es que la cinta Turing tiene todas las posiciones accesibles. Es "Memoria de acceso aleatorio" simplificada a un tiempo lineal con movimientos hacia adelante y hacia atrás.
S.Lott
Ohhh, lo recuerdo ahora, lo siento. Estaba pensando en "cinta" como algo en lo que se escribió la música por alguna razón =)
Izkata
La construcción de una máquina de Turing es la forma estándar de demostrar que algo está completo, pero lo contrario no es cierto, simplemente porque no puede descubrir cómo construir una máquina de Turing no significa que algo no esté completo. Una máquina de Turing (con una cinta y todo) es solo una abstracción arbitraria que tiene suficiente poder de cómputo; Hay otras abstracciones igual de poderosas sin la noción de cintas. Eche un vistazo al cálculo lambda, el cálculo SKI o algunos idiomas esotéricos (Fractran es genial).
Tikhon Jelvis
3

Gran parte de la notación está abierta a la interpretación, y las instrucciones en lenguaje natural son un aspecto aceptado de la notación musical, y han estado presentes en la mayor parte de la historia de la música occidental.

Las fermatas, por definición, dependen de la discreción del intérprete, lo que significa que dependerá de su propio estado, que casi siempre se ve alterado por la música junto con factores externos, por lo que esto plantea algunas preguntas sobre la naturaleza apátrida de la notación musical.

Canon a 2 por Tonus de Bach's Musical Offering es una pieza en bucle infinito cuya tonalidad aumenta un paso cada vez que se ejecuta la pieza.

Más recientemente, es común ver instrucciones como "repetir para cada solista" en, por ejemplo, versiones anotadas de piezas de Jazz como Take Five de Dave Brubeck .

Dicho esto, aparte de aspectos intrínsecamente arbitrarios como los fermata, como dicen las otras respuestas, la notación musical con nada más que los símbolos generales probablemente no esté completa.

Rei Miyasaka
fuente
1

No está relacionado con los idiomas completos de Turing, ya que es un lenguaje descriptivo. No hay comandos en términos de cálculo o modificación de datos, ni estados, ni entradas, ni salidas, excepto el resultado de la descripción misma.

Además, no hay saltos condicionales según la entrada. Cuando resuelve todos los saltos, obtiene una estructura lineal, no un árbol. Por lo tanto, todos los "programas" que puede modelar este lenguaje son lineales sin ningún bucle o salto.

Mononess
fuente
1
Lo que usted enumeró no es necesario para un lenguaje completo de Turing. El cálculo de Lambda solo tiene aplicaciones, variables y lambdas (por ejemplo, sin bucles, estados o comandos), pero Turing está completo. Lo mismo ocurre con muchos otros modelos de cómputo como los combinadores SKI.
Tikhon Jelvis