Müzik notasyonu Turing-Complete midir?


63

Merak ediyorum, müzik gösterim dili Turing-Complete mi?

İlk düşüncem müzikal notasyonda döngüler olduğu, ancak koşullu dallar yazmanın bir yolu olmadığı, değil mi?

Ben müzisyen değilim, belki birileri boşlukları doldurmada yardımcı olabilir?


7
ne müzik bölümü dil ? bir çeşit müzik notasyonu mu?
tatarcık

4
Müzik notasyonu hakkında pek bir şey bilmiyorum: bir şekilde sınırsız miktarda "değişken değişkenler" (veya "kaset") kodlayabilir misiniz? Aksi takdirde, nasıl sonuçlanabileceğini anlamıyorum.
nikie

hayır, öyle değil
shabunc

@nikie Bir kaçınma işleminin saklı bir işlev veya benzeri bir şey gibi davrandığından emin değilim ...
Klaim

2
Elbette Turing tamamlandı, Brainfuck'ın 8 karakterini temsil etmek için sadece 8 farklı not kullanın. :)
Chris Burt-Brown

Yanıtlar:


37

Evet, aktarma için birkaç talimat kabul ediyorsanız - nadir ama bilinmeyen.

Daha sonra bir parçayı Turing tamamlandı olan Choon olarak yorumlayabilirsiniz . Müzikçalar hafızadır: parçanın o anda aktarıldığı nota sayısını ve şimdiye kadar oynadıkları notaları hatırlamaları gerekir. Açıkçası bu sadece bir bilgisayar için uygun, ya da belki de bir bilgin için.

Choon el kitabından:

  • Transpositions

    Yukarı ( +), aşağı ( -) ve iptal ( .) olmak üzere üç aktarma talimatı vardır . Bir aktarım talimatı, oynanan son notun miktarına göre oynanan tüm notları aktarır. İptal talimatı ( .), aktarımı tekrar sıfıra ayarlar.

    Transpozisyonlar birikimlidir, bu nedenle Choon kodu gelecekteki notları 2'ye kadar çevirir b+ve 4 olur b++. Ayrıca, kullanılan değer, aktarımların uygulanmasından sonra önceki notun değeridir, bu nedenle b+b+gelecekteki notları 4'e değil 6'ya kadar çevirir.

  • John Cage

    John Cage talimatı ( %) çıkış akışında bir nota sessizliğe neden olur. Bir John Cage'in aktarma değeri sıfırdır - %-ve %+op-op değildir (çıktıya tek bir sessizlik eklenmesi dışında).

  • Barları tekrarla

    Yinelenen Çubuklar talimatları ( ||:ve :||) bir döngü içine alır. Döngü ||:karşılaşılmadan önce oynanan en son nota ile belirtilen sayıda çalışacaktır . Sıfır veya negatif bir değer, Choon'un eşleştirmeden oynamaya başlamak için hemen atlayacağı anlamına gelir :||. Bir John Cage sonsuza dek tekrar etmek demektir - %||::||sonsuz bir döngüdür.

  • Tuning Çatal

    Tuning Fork talimatı ~döngülerden kurtulmak için bir yol sağlar. Bir ayar çatalı bir döngüde karşılaşılırsa ve oynanan son nota bir değer Anotuysa, Choon bir sonraki :||komuttan sonra oynamaya başlamak için hemen atlayacaktır . Başka bir :||talimat yoksa (anlamı ~herhangi bir yineleme çubuğunun dışında kullanılmışsa), performans derhal sonlandırılır.

  • İşaretleyiciler

    Markerler, muhteşem programlama kolaylığı sağlar. Bir işaretleyici, çıkış akışındaki bir noktayı hatırlayan küçük harf veya kelimedir. Bir işarete atıfta bulunmak (aşağıya bakınız), İşaretçi oluştuktan sonra çalınan notun tekrar çalınmasına neden olur. Yerleşimlerin bu yeni oynanan notu etkileyeceğini unutmayın.

    İki veya daha fazla markörün sırayla ortaya çıktığı veya bir markörün bir marker-play talimatını takip etmesi durumunda, bunlar boşlukla ayrılmalıdır.

  • Çıkıştan Oynat

    Çıkıştan Çalma talimatı ( =) çıkış akışında daha önce çalınan notaları tekrar çalmanıza izin verir. Notlara numaradan başvurabilirsiniz - program başladıktan sonra oynanan 5. not =5, göreceli sayıya göre - oynanan en son 3. not =-3ya da işaretleyici tarafından - işaretleyiciden sonra oynanan not xolacaktır =x.

    Bu normal bir deyim bir işaretçi yeniden kullanmak ve hemen sonra böyle, buna bakmaya geçerli: x=x. Bu, x=x+ygeleneksel bir programlama dilinde ( yşu anda etkin aktarım değerini temsil ettiği yerde) söylemeye benzer .

Bir John Cage sadece bir dinlenme , bir Tuning Fork (kabaca) dal segno ve bir marker bir segno. Sanırım ayar çatalı birincil oyuncunun cevap verdiği ilave bir oyuncu tarafından çalınabilir, ancak prensip aynı.


1
Bu soruya en iyi yanıtı söyleyebilirim: diğer cevapların hiçbiri kanıtlamak müzik notaları o değil tam Turing.
K.Steff

24

Bütünlüğü tamamlamak, en azından üç şey gerektirir: sonsuz bir döngü, koşullu bir sıçrama (eğer öyleyse) ve hesaplamaların sonuçlarını bellekte saklamak için bir yol. Müzik notasyonu şartlı atlayışlara sahip olsa bile, durumu yoktur, yani hayır, Turing-tamamlanmadı.


13
Sıralı tekrarlama işaretleri ile birlikte kullanılan koşullu sıçramalar vardır: "ilk tekrarda, bu kısmı oynat, ikinci tekrarda, bu kısmı oynat". Tekrarlama sayacı (oyun sırasında kafanızda tutarsınız) durumdur. Fakat gerçekte devlet içeren sonsuz bir kasete sahip değil.
Jesper

49
Eğlenceli gerçek: Lambda hesabında döngü yok, koşullu sıçrama yok ve hesaplama sonuçlarını bellekte saklamak için bir yol yok. Oysa tamamlandı ;-)
nikie,

11
@Nikie: Soyutlamaları gerçeklerle karıştırmayın. Lambda hesabı, koşullu değerlendirme kavramına sahiptir, özyineleme hem döngü hem de atlama için kullanılır ve durum ifadelerin değerlendirilmesinin sonuçları olarak hesaplanır. Kavramlar orada; gerçek bilgisayar programlamasından çok farklı bir şekilde uygulanmaktadırlar.
Mason Wheeler

5
@MasonWheeler: LC temel döngüler, durum ve koşul kavramlarına sahip değildir, ancak benzer bir amaca hizmet eden şeyleri türetebilirsiniz. Bu Turing'in tamamlandığını söylemenin bir başka yolu. Öyleyse soru şu: müzik notasyonu bu kavramlara sahip mi, ama: bir şekilde bunları türetebilir misiniz? Basitçe, kanıt olmadan yapamayacağını iddia ettin. (Kararınıza katılıyorum, sadece mantığınızın geçerli olduğunu düşünmüyorum.)
nikie

9
@MasonWheeler: Lambda hesabı , gerçek bilgisayar programlamasıdır.
dan_waterworth

23

Turing'in eksiksiz olduğu bir dilin standart kanıtı, bu dilde bir Turing makinesi yazmaktır. Bu, dil (genellikle dilin alt kümesi) ile Turing makinesi arasında bir denklik olduğunu kanıtlar.

"Müzik Notasyonu" kavramı biraz kaygandır. Kullanılan çok sayıda standart gravür vardır. Ancak. Her türlü çılgınca şeyi kağıda yazan, zar zorlayan besteciler var.

Finale ya da Sibelius'un ya da bazı ana akım gravür araçlarının bir parçası olacak kadar standart kabul edilen müzikal notasyon alt grubuna odaklanmak istediğinizi varsayalım.

Yani.

Python için (veya C veya her neyse) sembolleri, kaseti, geçiş kurallarını ve kaseti durum değişikliği ve kaset hareketini yansıtacak şekilde bantı güncelleyen çeşitli kaset hareketlerini tanımlayın, kasetteki simgeleri okuyarak yazın.

"Müzik Notasyonu" nu kullanarak, sembolleri ve durumlu bandı, geçiş kurallarını ve bandı güncelleyen çeşitli eylemleri tanımlamamız gerekir.

Bizim eksik olduğumuz, kasetli bir kaset ve müzisyenlere kasetteki sembollere nasıl cevap vereceğini ve kaseti nasıl güncelleyeceğini söyleyen kurallar.

Bir anlamda, havada dolaşan sesler durum bilgisi olan bant olabilir. Fakat. Kaseti geri sarmanın kolay yolu yok. Bu geri sarma eksikliği, sanatçının bir tür özel "kaset" tutması gerektiği anlamına gelir.

Bu, müzik notasının dışına ve sanatçıya yapılan diğer ekstra müzikal talimatlara girer.


Peki, çalışan bir programı gerçekten geri
saramazsınız

2
Programı geri almıyorsun. Kaseti geri sardın. Mesele şu ki, Turing bandı tüm pozisyonlara erişilebilir durumda. İleri ve geri hareketleriyle doğrusal bir zamana basitleştirilen "Rasgele Erişim Belleği" dir.
S.Lott

Ohhh, bunu şimdi hatırlıyorum, üzgünüm. Müziğin bir sebepten dolayı yazdığı şey olarak "kaset" i düşünüyordum =)
Izkata

Bir Turing makinesi inşa etmek, bir şeyi kanıtlamanın standart yoludur Turing'in eksiksiz olduğunu, ancak görüşmenin doğru olmadığını - sadece bir Turing makinesinin nasıl inşa edileceğini çözemediğiniz için, bir şeyin Turing'in tamamlanmadığı anlamına gelmediği anlamına gelmez. Bir Turing makinesi (bir kasetli ve tümü) sadece yeterli işlem gücüne sahip olan keyfi bir soyutlamadır; Bant fikri olmayan güçlü soyutlamalar da var. Lambda matematiği, SKI matematiği veya bazı ezoterik dillere bakınız (Fractran soğuktur).
Tikhon Jelvis

3

Notasyonun çoğu yorumlamaya açıktır ve doğal dil talimatları müzik notasyonunun kabul edilen bir yönüdür - ve Batı noter müziğinin tarihi olmasa da çoğu boyunca olmuştur.

Fermatalar tanımı gereği, müziğin dış etkenlerle bağlantılı olarak hemen hemen değiştirdiği kendi durumlarına bağlı olacağı anlamına gelen sanatçının takdirine bağlıdır - bu, müzikal gösterimin vatansız doğası hakkında bazı sorulara yol açar.

Bach'ın Müzikal Teklifi'nden Tonus başına Canon 2 , tonalitesi parça çalındığı sürece her seferinde bir adım adım yükselen sonsuz döngülü bir parçadır.

Daha yakın bir zamanda, örneğin Dave Brubeck'in Take Five gibi Jazz eserlerinin not edilmiş versiyonlarında "her solist için tekrarla" gibi talimatlar görmek yaygındır .

Bununla birlikte, fermata gibi doğası gereği keyfi yönlerin yanı sıra, diğer cevapların ifade ettiği gibi, genel sembollerden başka hiçbir şeyle müzikal gösterim yapılmadığı söylenebilir.


1

Açıklayıcı bir dil olduğu için tam dilleri Turing ile ilgili değildir. Açıklamanın kendisinin sonucu dışında hesaplama ya da veri değiştirmeyle ilgili hiçbir komut yok, durum yok, girdi yok, çıktı yok.

Ayrıca girişe bağlı olarak koşullu atlama yoktur. Tüm sıçramaları çözdüğünüzde, bir ağaç değil doğrusal bir yapı elde edersiniz. Dolayısıyla, bu dilin modellenebileceği tüm "programlar", herhangi bir döngü veya sıçrama olmadan doğrusaldır.


1
Turing tam bir dil için listeledikleriniz gerekli değildir. Lambda matematiğinde sadece uygulamalar, değişkenler ve lambdalar vardır (örn. Döngüler, durumlar veya komutlar yoktur) fakat Turing tamamlanmıştır. Aynı durum, SKI birleştiricileri gibi bir sürü hesaplama modeli için de geçerlidir.
Tikhon Jelvis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.