A notação musical Turing-Complete?

63

Eu estou querendo saber, é notação musical idioma Turing-Complete ?

Meu primeiro pensamento é que existem loops na notação musical, mas não há como escrever ramificações condicionais, certo?

Eu não sou músico, então talvez alguém possa ajudar a preencher as lacunas?

    
por Klaim 21.02.2012 / 13:33
fonte

5 respostas

37

Sim, se você admitir algumas instruções para transposição - incomum, mas não desconhecido.

Você pode então interpretar uma peça como Choon , que é Turing-complete. O intérprete é a memória: eles devem lembrar o número de notas pelas quais a peça está sendo transposta e todas as notas tocadas até o momento. Obviamente, é viável apenas para um computador ou talvez um savant.

Do manual do Choon:

  • Transpositions

    There are three transposition instructions, up (+), down (-) and cancel (.). A transposition instruction transposes all subsequent notes played by the amount of the last note played. The cancel instruction (.) sets the transposition back to zero.

    Transpositions are cumulative, so the Choon code to transpose future notes up by 2 is b+, and by 4 would be b++. Also, the value used is the value of the previous note after transpositions have been applied, so b+b+ transposes future notes up by 6, not by 4.

  • John Cage

    The John Cage instruction (%) causes a one note silence in the output stream. The transposition value of a John Cage is zero - %- and %+ are no-ops (except that a single silence is added to the output).

  • Repeat Bars

    The Repeat Bars instructions (||: and :||) enclose a loop. The loop will execute the number of times indicated by the most recent note played before the ||: was encountered. A zero or negative value will mean Choon will immediately jump to start playing from the matching :||. A John Cage means repeat forever - %||::|| is an infinite loop.

  • Tuning Fork

    The Tuning Fork instruction ~ provides a way to break out of loops. If a tuning fork is encountered in a loop, and the last note played was a note of value A, then Choon will immediately jump to start playing from after the next :|| instruction. If there is no further :|| instruction (meaning ~ has been used outside any repeat bars), then the performance will immediately terminate.

  • Markers

    Markers provide marvellous programming convenience. A marker is a lower case letter or word that remembers a point in the output stream. Referring to a marker (see below) will cause the note played after the Marker occurred to be played again. Note that transpositions will affect this newly played note.

    Where two or more markers occur sequentially, or a marker follows a play-from-marker instruction, they must be seperated by whitespace.

  • Play From Output

    The Play From Output instruction (=) allows you to play again notes that have already been played in the output stream. You can refer to the notes by number - the 5th note played since the program began would be =5, by relative number - the 3rd most recent note played would be =-3 or by marker - the note played after marker x would be =x.

    It is a common idiom to re-use a marker and immediately then refer to it, like this: x=x. This is akin to saying x=x+y in a conventional programming language (where y represents the currently effective transposition value).

Um John Cage é apenas um descanso , um Tuning Fork é (aproximadamente) dal segno, e um marcador é um segno. Suponho que o diapasão poderia ser tocado por um artista a quem o ator primário responde, mas o princípio é o mesmo.

    
por 21.02.2012 / 21:27
fonte
24

A completude de Turing requer, no mínimo, três coisas: um loop infinito, um salto condicional (if-then) e uma maneira de armazenar os resultados dos cálculos em algum lugar da memória. Mesmo que a notação musical tenha saltos condicionais, ela não tem estado, , então não, não é Turing-completo.

    
por 21.02.2012 / 14:10
fonte
23

A prova padrão para um idioma ser Turing completo é escrever uma máquina de Turing nesse idioma. Isso prova que há uma equivalência entre a linguagem (geralmente um subconjunto da linguagem) e a máquina de Turing.

A noção de "Notação Musical" é um pouco escorregadia. Há muita gravura padronizada que é usada. Contudo. Há compositores que enviam envelopes que escrevem todo tipo de coisas malucas no papel.

Vamos fingir que você quer se concentrar no subconjunto de notação musical que é considerado padrão o suficiente para fazer parte do Finale ou do Sibelius ou de algum conjunto de ferramentas de gravação principal.

Então.

Para Python (ou C ou qualquer outra), você define os símbolos, a fita, as regras de transição e as várias ações que atualizam a fita para refletir os movimentos de alteração de estado e movimentação da fita, ler e gravar na fita.

Usando "Notação Musical", temos que definir símbolos e a fita com estado, as regras de transição e as várias ações que atualizam a fita.

O que nos falta é uma fita com estado e regras que dizem aos músicos como responder a símbolos na fita e como atualizar essa fita.

Em certo sentido, os ruídos que fluem no ar podem ser a fita com estado. Mas. Não há maneira fácil de rebobinar a fita. Essa falta de retrocesso significa que o artista teria que manter uma "fita" privada de algum tipo.

Isso fica fora da notação musical e em algumas outras instruções extra-musicais para o artista.

    
por 21.02.2012 / 16:02
fonte
3

Grande parte da notação está aberta a interpretações, e as instruções de linguagem natural são um aspecto aceito da notação musical - e foram durante a maior parte, se não em toda a história da música notada do Ocidente.

Fermatas , por definição, dependem da discrição do intérprete, o que significa que dependerá do seu próprio estado, que é quase sempre alterada pela música em conjunto com fatores externos - então isso levanta algumas questões sobre a natureza sem estado da notação musical.

Canon a 2 por Tonus da Oferta Musical de Bach é uma peça infinitamente em loop cuja tonalidade sobe por um passo inteiro de cada vez durante o tempo que a peça é executada.

Mais recentemente, é comum ver instruções como "repetir para cada solista", por exemplo, em versões notáveis de peças de Jazz, como as de http://www.youtube.com/watch? v = y9aG3wUrfrE "> Tome Cinco .

Dito isto, além de aspectos inerentemente arbitrários como a fermata, como as outras respostas afirmam, a notação musical com nada além dos símbolos gerais provavelmente não é Turing completa.

    
por 21.02.2012 / 16:07
fonte
1

Não está relacionado com os idiomas completos de Turing, pois é uma linguagem descritiva. Não há comandos em termos de cálculo ou modificação de dados, sem estados, sem entrada, sem saída, exceto pelo resultado da descrição em si.

Além disso, não há saltos condicionais dependendo da entrada. Quando você resolve todos os saltos, você obtém uma estrutura linear, não uma árvore. Portanto, todos os "programas" que podem ser modelados por essa linguagem são lineares sem nenhum loop ou salto.

    
por 21.02.2012 / 16:14
fonte