La notation musicale est-elle complète?


63

Je me demande si le langage de notation musicale est le langage Turing-Complete ?

Ma première pensée est qu'il y a des boucles dans la notation musicale, mais il n'y a aucun moyen d'écrire des branches conditionnelles, non?

Je ne suis pas musicien, alors peut-être que quelqu'un peut aider à combler les lacunes?


7
quelle est la langue de partition de musique ? une forme de notation musicale ?
moucher le

4
Je ne connais pas grand chose à la notation musicale: pouvez-vous en quelque sorte encoder une quantité illimitée de "variables mutables" (ou "bandes")? Sinon, je ne vois pas comment cela pourrait être complet.
Nikie

non, ça ne
marche

@nikie Je ne sais pas si un refrain agira comme une fonction stockée ou quelque chose de similaire ...
Klaim 21/02/2012

2
Bien sûr, il est complet, utilisez simplement 8 notes différentes pour représenter les 8 personnages de Brainfuck. :)
Chris Burt-Brown

Réponses:


37

Oui, si vous admettez quelques instructions de transposition, peu communes mais pas inconnues.

Vous pouvez ensuite interpréter une pièce comme Choon , qui est Turing-complete. L’artiste est la mémoire: il doit se rappeler le nombre de notes avec lesquelles la pièce est actuellement transposée et toutes les notes qu’il a jouées jusqu’à présent. Évidemment, ce n'est faisable que pour un ordinateur, ou peut-être un savant.

Du manuel de Choon:

  • Transpositions

    Il existe trois instructions de transposition, up ( +), down ( -) et cancel ( .). Une instruction de transposition transpose toutes les notes ultérieures jouées en fonction du montant de la dernière note jouée. L'instruction cancel ( .) remet la transposition à zéro.

    Les transpositions étant cumulatives, le code de Choon permettant de transposer les notes futures de 2 b+à 4 est le cas b++. En outre, la valeur utilisée est la valeur de la note précédente après application des b+b+transpositions . Transpose donc les notes futures de 6 et non de 4.

  • John Cage

    L'instruction John Cage ( %) provoque un silence d'une note dans le flux de sortie. La valeur de transposition d'un John Cage est zéro - %-et %+ne comporte aucune opération (sauf qu'un seul silence est ajouté à la sortie).

  • Répéter les barres

    Les instructions Répéter les barres ( ||:et :||) incluent une boucle. La boucle s'exécutera le nombre de fois indiqué par la dernière note jouée avant la ||:rencontre. Une valeur nulle ou négative signifie que Choon sautera immédiatement pour commencer à jouer à partir de la correspondance :||. Un John Cage signifie répéter pour toujours - %||::||est une boucle infinie.

  • Diapason

    L’instruction du diapason ~permet de rompre les boucles. Si un diapason est rencontré dans une boucle et que la dernière note jouée était une note de valeur A, alors Choon sautera immédiatement pour que la lecture commence après l' :||instruction suivante . S'il n'y a pas d'autre :||instruction (la signification ~a été utilisée en dehors des barres de répétition), l'exécution se termine immédiatement.

  • Marqueurs

    Les marqueurs offrent une merveilleuse commodité de programmation. Un marqueur est une lettre minuscule ou un mot qui rappelle un point du flux de sortie. Si vous vous référez à un marqueur (voir ci-dessous), la note jouée après que le marqueur se soit reproduit sera à nouveau jouée. Notez que les transpositions affecteront cette note nouvellement jouée.

    Lorsque deux ou plusieurs marqueurs apparaissent séquentiellement ou qu'un marqueur suit une instruction de lecture à partir d'un marqueur, ils doivent être séparés par des espaces.

  • Jouer de la sortie

    L'instruction Lire à partir de la sortie ( =) vous permet de rejouer des notes déjà jouées dans le flux de sortie. Vous pouvez vous référer aux notes par numéro - la 5ème note jouée depuis le début du programme serait =5, par numéro relatif - la 3ème note la plus récente jouée =-3ou par marqueur - la note jouée après marqueur xserait =x.

    Il est un idiome commun de réutiliser un marqueur et immédiatement se référer alors, comme ceci: x=x. Cela revient à dire x=x+ydans un langage de programmation conventionnel (où yreprésente la valeur de transposition actuellement effective).

Un John Cage est juste un repos , un diapason est (approximativement) dal segno, et un marqueur est un segno. Je suppose que le diapason pourrait être joué par un interprète supplémentaire auquel l’interprète principal répond, mais le principe est le même.


1
Je dirais que c'est la meilleure réponse à la question: aucune des autres réponses ne prouve que la notation musicale n'est pas complète.
K.Steff

24

Cette complétude nécessite au minimum trois choses: une boucle infinie, un saut conditionnel (si-alors) et un moyen de stocker les résultats des calculs quelque part en mémoire. Même si la notation musicale a des sauts conditionnels, elle n'a pas d' état, donc non, elle n'est pas complète.


13
Il a en quelque sorte des sauts conditionnels, utilisés en combinaison avec des signes de répétition: "lors de la première répétition, jouez cette partie, lors de la deuxième répétition, jouez cette partie". Le compteur de répétition (que vous tenez dans la tête pendant que vous jouez) est à l'état. Mais il n’a en effet pas d’état infini contenant la bande.
Jesper

49
Fait amusant: le calcul lambda n'a pas de boucle, pas de saut conditionnel et aucun moyen de stocker les résultats des calculs quelque part en mémoire. Pourtant, c'est complet ;-)
nikie

11
@ Nikie: Ne confondez pas les abstractions avec les réalités. Le calcul lambda a un concept d'évaluation conditionnelle, la récursivité est utilisée à la fois pour les boucles et les sauts, et l'état est calculé en tant que résultat de l'évaluation d'expressions. Les concepts sont là; ils sont juste mis en œuvre d'une manière très différente de la programmation informatique réelle.
Mason Wheeler

5
@MasonWheeler: LC n'a pas de concepts fondamentaux de boucles, d'états et de conditions, mais vous pouvez en déduire des choses ayant un objectif similaire. C'est juste une autre façon de dire que c'est Turing complet. La question n'est donc pas: la notation musicale a-t-elle ces concepts, mais: pouvez-vous en tirer quelque chose? Vous avez simplement prétendu que vous ne pouvez pas, sans preuve. (Je suis d'accord avec votre conclusion, je ne pense pas que votre raisonnement soit valide.)
nikie

9
@MasonWheeler: Le calcul lambda est une véritable programmation informatique.
dan_waterworth

23

La preuve standard pour qu'une langue soit complétée par Turing est d'écrire une machine de Turing dans cette langue. Cela prouve qu'il existe une équivalence entre le langage (généralement un sous-ensemble du langage) et la machine de Turing.

La notion de "notation musicale" est un peu glissante. Il y a beaucoup de gravures standardisées qui sont utilisées. Pourtant. Il y a des compositeurs qui poussent des enveloppes et qui écrivent toutes sortes de choses folles sur papier.

Imaginons que vous souhaitiez vous concentrer sur le sous-ensemble de la notation musicale considéré comme suffisamment standard pour faire partie de Finale ou de Sibelius ou d'un ensemble d'outils de gravure standard.

Alors.

Pour Python (ou C ou autre), vous définissez les symboles, la bande, les règles de transition et les différentes actions qui mettent à jour la bande pour refléter le changement d'état et le mouvement de la bande, ainsi que la lecture et l'écriture de symboles sur la bande.

En utilisant la "notation musicale", nous devons définir les symboles et la bande dynamique, les règles de transition et les différentes actions qui mettent à jour la bande.

Ce qui nous manque, c'est une bande dynamique et des règles indiquant aux musiciens comment réagir aux symboles sur la bande et comment mettre à jour cette bande.

En un sens, les bruits qui circulent dans l'air pourraient être la bande à états. Mais. Il n'y a pas de moyen facile de rembobiner la bande. Ce manque de rembobinage signifie que l’artiste interprète devrait conserver une "bande" privée quelconque.

Cela sort de la notation musicale et entre dans d'autres instructions extra-musicales à l'interprète.


Eh bien, vous ne pouvez pas vraiment
revenir en arrière dans

2
Vous ne rembobinez pas le programme. Vous rembobinez la bande. Le fait est que la bande de Turing a toutes les positions accessibles. C'est "Random Access Memory" simplifié à un temps linéaire avec des mouvements avant et arrière.
S.Lott

Ohhh, je m'en souviens maintenant, désolé. Je pensais à "bande" comme la chose sur laquelle la musique a été écrite pour une raison quelconque =)
Izkata

Construire une machine de Turing est le moyen standard de prouver que Turing est complet, mais l'inverse n'est pas vrai. Le simple fait de ne pas savoir comment construire une machine de Turing ne signifie pas que quelque chose n'est pas complet. Une machine de Turing (avec une bande et tout) est juste une abstraction arbitraire qui a suffisamment de puissance de calcul; il existe d'autres abstractions tout aussi puissantes, sans notion de bandes. Jetez un coup d'œil au lambda calcul, au calcul SKI ou à certaines langues ésotériques (Fractran est cool).
Tikhon Jelvis

3

Une grande partie de la notation est sujette à interprétation et les instructions en langage naturel sont un aspect accepté de la notation musicale - et ont été à peu près partout dans l'histoire de la musique notée occidentale.

Les Fermatas, par définition, dépendent de la discrétion de l'artiste, ce qui signifie que cela dépendrait de son propre état, qui est presque toujours altéré par la musique en conjonction avec des facteurs externes. Cela soulève donc certaines questions sur le caractère apatride de la notation musicale.

Canon a 2 par Tonus de l'offrande musicale de Bach est une pièce infiniment bouclée dont la tonalité augmente d'un pas complet à chaque fois tant que la pièce est jouée.

Plus récemment, il est courant de voir des instructions telles que "répéter pour chaque soliste" dans, par exemple, des versions notées de morceaux de Jazz tels que Take Five de Dave Brubeck .

Cela dit, mis à part des aspects intrinsèquement arbitraires tels que les fermata, ainsi que l’indique l’autre réponse, la notation musicale ne contenant que des symboles généraux n’est probablement pas complète.


1

Ce n'est pas lié aux langages complets de Turing puisqu'il s'agit d'un langage descriptif. Il n'y a pas de commandes en termes de calcul ou de modification de données, pas d'états, pas d'entrée, pas de sorties sauf pour le résultat de la description elle-même.

De plus, il n'y a pas de sauts conditionnels en fonction de l'entrée. Lorsque vous résolvez tous les sauts, vous obtenez une structure linéaire, pas un arbre. Ainsi, tous les "programmes" pouvant être modélisés par ce langage sont linéaires sans boucles ni sauts.


1
Ce que vous avez énuméré n'est pas nécessaire pour une langue complète de Turing. Le calcul lambda n'a que des applications, des variables et des lambdas (par exemple, pas de boucles, d'états ou de commandes), mais Turing est complet. Il en va de même pour plusieurs autres modèles de calcul, tels que les combinateurs SKI.
Tikhon Jelvis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.