A notação musical é Turing-Complete?


63

Gostaria de saber, é a linguagem de notação musical Turing-Complete ?

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

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


7
o que é o idioma da partição musical ? alguma forma de notação musical ?
Gnat

4
Não sei muito sobre notação musical: você pode de alguma forma codificar uma quantidade ilimitada de "variáveis ​​mutáveis" (ou "fita")? Caso contrário, não vejo como poderia estar completo.
Nikie

Não,
shabunc

@nikie Eu não tenho certeza se um ato refrão como uma função armazenada ou algo semelhante ...
Klaim

2
Claro que é Turing-completo, basta usar 8 notas diferentes para representar os 8 caracteres do Brainfuck. :)
Chris Burt-Brown

Respostas:


37

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

Você pode interpretar uma peça como Choon , que é Turing-complete. O intérprete é a memória: eles devem se lembrar do número de notas pelas quais a peça é atualmente transposta e de todas as notas que tocaram até agora. Obviamente, é viável apenas para um computador, ou talvez um sábio.

No manual do Choon:

  • Transposições

    Existem três instruções de transposição, up ( +), down ( -) e cancel ( .). Uma instrução de transposição transpõe todas as notas subsequentes tocadas pela quantidade da última nota tocada. A instrução cancel ( .) define a transposição de volta a zero.

    As transposições são cumulativas; portanto, o código de Choon para transpor notas futuras por 2 é b+e por 4 seria b++. Além disso, o valor usado é o valor da nota anterior após a aplicação das transposições, portanto b+b+transpõe as notas futuras em 6, e não em 4.

  • John Cage

    A instrução John Cage ( %) causa um silêncio de uma nota no fluxo de saída. O valor de transposição de um John Cage é zero - %-e %+não é operacional (exceto que um único silêncio é adicionado à saída).

  • Repetir barras

    As instruções de barras de repetição ( ||:e :||) incluem um loop. O loop executará o número de vezes indicado pela nota mais recente tocada antes da ||:ocorrência. Um valor zero ou negativo significa que Choon irá pular imediatamente para começar a jogar a partir da correspondência :||. Um John Cage significa repetir para sempre - %||::||é um loop infinito.

  • Diapasão

    A instrução Tuning Fork ~fornece uma maneira de interromper os loops. Se um diapasão for encontrado em um loop, e a última nota tocada for uma nota de valor A, Choon pulará imediatamente para começar a tocar após a próxima :||instrução. Se não houver mais :||instruções (o significado ~foi usado fora das barras de repetição), o desempenho será imediatamente encerrado.

  • Marcadores

    Os marcadores oferecem conveniência de programação maravilhosa. Um marcador é uma letra ou palavra em minúscula que lembra um ponto no fluxo de saída. Referir-se a um marcador (veja abaixo) fará com que a nota tocada após a ocorrência do Marcador seja reproduzida novamente. Observe que as transposições afetarão esta nota tocada recentemente.

    Onde dois ou mais marcadores ocorrem sequencialmente ou um marcador segue uma instrução de reprodução de marcador, eles devem ser separados por espaços em branco.

  • Reproduzir da saída

    A instrução Play From Output ( =) permite reproduzir novamente as notas que já foram tocadas no fluxo de saída. Você pode consultar as notas por número - a 5ª nota tocada desde o início do programa seria =5, pelo número relativo - a 3ª nota mais recente jogado seria =-3ou pelo marcador - a nota tocada depois do marcador xseria =x.

    É uma expressão comum para re-utilizar um marcador e imediatamente depois se referem a ele, como este: x=x. É o mesmo que dizer x=x+yem uma linguagem de programação convencional (onde yrepresenta o valor de transposição atualmente eficaz).

Um John Cage é apenas um descanso , um diapasão é (aproximadamente) dal segno e um marcador é um segno. Suponho que o diapasão possa ser tocado por um artista adicional a quem o artista principal responde, mas o princípio é o mesmo.


1
Eu diria que esta é a melhor resposta para a pergunta: nenhuma das outras respostas prova que a notação musical não é Turing completa.
precisa saber é o seguinte

24

A perfeição de Turing requer, no mínimo, três coisas: um loop infinito, um salto condicional (se-então) 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.


13
Ele tem saltos condicionais, usados ​​em combinação com sinais de repetição: "na primeira repetição, faça esta parte, na segunda repetição, faça essa parte". O contador de repetição (que você seguraria em sua cabeça enquanto jogava) é o estado. Mas, de fato, não possui uma fita infinita contendo estado.
Jesper

49
Curiosidade: o cálculo do Lambda não possui loops, nenhum salto condicional e nenhuma maneira de armazenar os resultados dos cálculos em algum lugar da memória. No entanto, é turing completa ;-)
Nikie

11
@ Nikie: Não confunda abstrações com realidades. O cálculo lambda tem um conceito de avaliação condicional, a recursão é usada para loop e jump e o estado é calculado como o resultado da avaliação de expressões. Os conceitos estão aí; eles são implementados de uma maneira muito diferente da programação real do computador.
Mason Wheeler

5
@MasonWheeler: LC não possui conceitos fundamentais de loops, estado e condicionais, mas você pode derivar coisas que servem a um propósito semelhante. Essa é apenas outra maneira de dizer que é Turing completo. Portanto, a questão não é: a notação musical possui esses conceitos, mas: você pode derivá-los de alguma forma? Você simplesmente alegou que não pode, sem provas. (Concordo com a sua conclusão, eu só não acho que o seu raciocínio é válido.)
Nikie

9
@MasonWheeler: O cálculo Lambda é uma programação de computador real.
22412 dan_waterworth

23

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

A noção de "Notação Musical" é um pouco escorregadia. Há muita gravação padronizada usada. Contudo. Há compositores que empurram envelopes que escrevem todo tipo de coisa louca no papel.

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

Assim.

Para Python (ou C ou qualquer outra coisa), você define os símbolos, a fita, as regras de transição e as várias ações que atualizam a fita para refletir a mudança de estado e o movimento da fita, lendo e escrevendo símbolos na fita.

Usando "Notação Musical", precisamos 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 digam aos músicos como responder aos símbolos da fita e como atualizá-la.

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

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


Bem, você realmente não pode retroceder um programa em execução, ou ... (Mas sim, eu tenho o que você quer dizer sobre a atualização do estado, mas isso poderia, por sua vez ser uma linguagem funcional?)
Izkata

2
Você não rebobina o programa. Você rebobina a fita. O ponto é que a fita de Turing tem todas as posições acessíveis. É "Memória de Acesso Aleatório" simplificada para um tempo linear com movimentos para frente e para trás.
21412 S.Lott

Ohhh, eu lembro disso agora, desculpe. Eu estava pensando em "fita" como a coisa a música foi escrita por algum motivo =)
Izkata

Construir uma máquina de Turing é a maneira padrão de provar que Turing está completo, mas o inverso não é verdadeiro - simplesmente porque você não consegue descobrir como construir uma máquina de Turing não significa que algo não esteja completo. Uma máquina de Turing (com fita e tudo) é apenas uma abstração arbitrária que possui poder computacional suficiente; existem outras abstrações igualmente poderosas sem noção de fitas. Dê uma olhada no cálculo lambda, cálculo SKI ou em algumas línguas esotéricas (o Fractran é legal).
Tikhon Jelvis

3

Grande parte da notação está aberta à interpretação, e as instruções em linguagem natural são um aspecto aceito da notação musical - e estiveram presentes na maior parte, se não toda, na história da música ocidental notada.

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

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

Mais recentemente, é comum ver instruções como "repetir para cada solista" em, por exemplo, versões notadas de peças de Jazz como Take Five, de Dave Brubeck .

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


1

Não está relacionado aos idiomas completos de Turing, pois é um idioma descritivo. Não há comandos em termos de cálculo ou modificação de dados, estados, entradas ou saídas, exceto pelo resultado da descrição em si.

Também não há saltos condicionais, dependendo da entrada. Quando você resolve todos os saltos, 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.


1
O que você listou não é necessário para um idioma completo de Turing. O cálculo do Lambda possui apenas aplicativos, variáveis ​​e lambdas (por exemplo, sem loops, estados ou comandos), mas o Turing está completo. O mesmo vale para vários outros modelos de computação como combinadores SKI.
Tikhon Jelvis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.