Apakah notasi musik Turing-Lengkap?

63

Saya bertanya-tanya, apakah bahasa notasi musik Turing-Lengkap ?

Pikiran pertama saya adalah bahwa ada loop dalam notasi musik, tetapi tidak ada cara untuk menulis cabang bersyarat, kan?

Saya bukan seorang musisi, jadi mungkin seseorang dapat membantu mengisi kekosongan?

Klaim
sumber
7
apa bahasa partisi musik ? beberapa bentuk notasi musik ?
nyamuk
4
Saya tidak tahu banyak tentang notasi musik: dapatkah Anda menyandikan "variabel yang dapat diubah" (atau "tape") dalam jumlah yang tidak terbatas? Kalau tidak, saya tidak melihat bagaimana itu bisa selesai lengkap.
nikie
tidak, itu tidak
shabunc
@nikie Saya tidak yakin apakah refrain bertindak sebagai fungsi tersimpan atau yang serupa ...
Klaim
2
Tentu saja Turing-complete, cukup gunakan 8 catatan berbeda untuk mewakili 8 karakter Brainfuck. :)
Chris Burt-Brown

Jawaban:

37

Ya, jika Anda mengakui beberapa instruksi untuk transposisi — tidak umum tetapi tidak diketahui.

Anda kemudian dapat menafsirkan sepotong sebagai Choon , yang Turing-lengkap. Penampilnya adalah ingatan: mereka harus mengingat jumlah nada yang digunakan untuk mengubah bagian itu, dan semua nada yang telah mereka mainkan sejauh ini. Jelas itu hanya layak untuk komputer, atau mungkin seorang ahli.

Dari manual Choon:

  • Transposisi

    Ada tiga instruksi transposisi, atas ( +), turun ( -) dan membatalkan ( .). Instruksi transposisi mentransposisi semua not selanjutnya yang dimainkan dengan jumlah not terakhir yang dimainkan. Instruksi pembatalan ( .) mengatur transposisi kembali ke nol.

    Transposisi bersifat kumulatif, sehingga kode Choon untuk mengubah catatan masa depan naik 2 adalah b+, dan dengan 4 akan b++. Selain itu, nilai yang digunakan adalah nilai catatan sebelumnya setelah transposisi diterapkan, sehingga b+b+transposes catatan masa depan naik 6, bukan 4.

  • John Cage

    Instruksi John Cage ( %) menyebabkan keheningan satu nada dalam aliran output. Nilai transposisi dari John Cage adalah nol - %-dan %+tidak ada op (kecuali bahwa satu keheningan ditambahkan ke output).

  • Ulangi Bilah

    Instruksi Ulangi Bilah ( ||:dan :||) melampirkan loop. Loop akan mengeksekusi berapa kali ditunjukkan oleh not terbaru yang diputar sebelum ||:ditemui. Nilai nol atau negatif berarti Choon akan segera melompat untuk mulai bermain dari pencocokan :||. John Cage berarti pengulangan selamanya - %||::||adalah loop tak terbatas.

  • Garpu tala

    Instruksi Tuning Fork ~menyediakan cara untuk keluar dari loop. Jika garpu tala ditemukan dalam satu lingkaran, dan nada terakhir yang dimainkan adalah nada nilai A, maka Choon akan segera melompat untuk mulai bermain dari setelah :||instruksi berikutnya . Jika tidak ada :||instruksi lebih lanjut (artinya ~telah digunakan di luar bilah berulang), maka kinerja akan segera berakhir.

  • Spidol

    Marker memberikan kenyamanan pemrograman yang luar biasa. Marker adalah huruf kecil atau kata yang mengingat titik dalam aliran output. Mengacu pada penanda (lihat di bawah) akan menyebabkan not dimainkan setelah Marker dimainkan lagi. Perhatikan bahwa transposisi akan memengaruhi catatan yang baru diputar ini.

    Jika dua atau lebih marker muncul secara berurutan, atau sebuah marker mengikuti instruksi play-from-marker, marker harus dipisahkan oleh spasi putih.

  • Mainkan Dari Output

    Instruksi Play From Output ( =) memungkinkan Anda memainkan lagi not yang sudah diputar di aliran output. Anda dapat merujuk ke catatan dengan nomor - catatan 5 dimainkan sejak program ini dimulai akan =5, dengan jumlah relatif - 3rd catatan terbaru yang dimainkan akan =-3atau dengan penanda - catatan dimainkan setelah penanda xakan =x.

    Ini adalah idiom umum untuk kembali menggunakan spidol dan segera kemudian menyebutnya, seperti ini: x=x. Ini mirip dengan mengatakan x=x+ydalam bahasa pemrograman konvensional (di mana ymerupakan nilai transposisi yang saat ini efektif).

Sebuah John Cage hanya beristirahat , sebuah Tuning Fork adalah (kira-kira) dal segno, dan penanda adalah segno a. Saya kira garpu tala bisa dimainkan oleh pemain tambahan yang kepadanya pemain utama merespons, tetapi prinsipnya sama.

Jon Purdy
sumber
1
Saya akan mengatakan ini adalah jawaban terbaik untuk pertanyaan: tidak ada jawaban lain yang membuktikan bahwa notasi musik tidak lengkap Turing.
K.Steff
24

Turing kelengkapan membutuhkan, minimal, tiga hal: loop tak terbatas, lompatan bersyarat (jika-maka), dan cara untuk menyimpan hasil perhitungan ke suatu tempat di memori. Bahkan jika notasi musik memiliki lompatan bersyarat, ia tidak memiliki keadaan, jadi tidak, itu bukan Turing-lengkap.

Mason Wheeler
sumber
13
Ini semacam memiliki lompatan bersyarat, digunakan dalam kombinasi dengan tanda-tanda pengulangan: "pada pengulangan pertama, mainkan bagian ini, pada pengulangan kedua, mainkan bagian itu". Penghitung berulang (yang akan Anda ingat saat bermain) adalah status. Tapi itu memang tidak memiliki rekaman yang mengandung keadaan tak terbatas.
Jesper
49
Fakta menyenangkan: Kalkulus Lambda tidak memiliki loop, tidak ada lompatan bersyarat, dan tidak ada cara untuk menyimpan hasil perhitungan di suatu tempat di memori. Namun itu turing lengkap ;-)
nikie
11
@ Nikie: Jangan bingung antara abstraksi dengan kenyataan. Kalkulus Lambda memiliki konsep evaluasi kondisional, rekursi digunakan untuk pengulangan dan lompatan, dan status dihitung sebagai hasil evaluasi ekspresi. Konsepnya ada di sana; mereka hanya diimplementasikan dengan cara yang sangat berbeda dari pemrograman komputer nyata.
Mason Wheeler
5
@MasonWheeler: LC tidak memiliki konsep dasar loop, state dan conditional, tetapi Anda dapat memperoleh hal-hal yang memiliki tujuan yang sama. Itu hanya cara lain untuk mengatakan bahwa itu Turing lengkap. Jadi pertanyaannya bukan: apakah notasi musik memiliki konsep-konsep ini, tetapi: dapatkah Anda menurunkannya? Anda hanya mengklaim bahwa Anda tidak bisa, tanpa bukti. (Saya setuju dengan kesimpulan Anda, saya hanya tidak berpikir alasan Anda valid.)
nikie
9
@MasonWheeler: Kalkulus Lambda adalah pemrograman komputer nyata.
dan_waterworth
23

Bukti standar untuk bahasa yang akan diselesaikan Turing adalah menulis mesin Turing dalam bahasa itu. Ini membuktikan bahwa ada kesetaraan antara bahasa (biasanya bagian dari bahasa) dan mesin Turing.

Gagasan "Notasi Musikal" agak licin. Ada banyak ukiran standar yang digunakan. Namun. Ada komposer pendorong amplop yang menulis semua jenis barang gila di atas kertas.

Mari berpura-pura Anda ingin fokus pada subset notasi musik yang dianggap cukup standar untuk menjadi bagian dari Finale atau Sibelius atau beberapa toolset aliran utama.

Begitu.

Untuk Python (atau C atau apa pun) Anda mendefinisikan simbol, rekaman, aturan transisi, dan berbagai tindakan yang memperbarui rekaman untuk mencerminkan perubahan keadaan dan gerakan pita, membaca dan menulis simbol pada rekaman itu.

Dengan menggunakan "Notasi Musik", kita harus mendefinisikan simbol dan rekaman stateful, aturan transisi dan berbagai tindakan yang memperbarui rekaman.

Yang tidak kita miliki adalah rekaman yang menyatakan keadaan dan aturan yang memberi tahu para musisi bagaimana cara merespons simbol pada rekaman itu dan bagaimana memperbarui rekaman itu.

Dalam arti tertentu, suara-suara yang mengalir di udara mungkin merupakan pita stateful. Tapi. Tidak ada cara mudah untuk memundurkan kaset itu. Kurangnya mundur ini berarti bahwa pemain harus menyimpan semacam "rekaman" pribadi.

Ini mendapat notasi musik luar dan ke beberapa instruksi ekstra-musik lain untuk pemain.

S.Lott
sumber
Ya, Anda tidak dapat benar-benar memundurkan program yang sedang berjalan, ... (Tapi ya, saya mengerti maksud Anda tentang memperbarui keadaan, tetapi bisakah itu pada gilirannya menjadi bahasa fungsional?)
Izkata
2
Anda tidak memundurkan program. Anda memutar ulang rekaman itu. Intinya adalah bahwa pita Turing memiliki semua posisi yang dapat diakses. Ini "Random Access Memory" disederhanakan menjadi waktu linier dengan gerakan maju dan mundur.
S.Lott
Ohhh, aku ingat itu sekarang, maaf. Saya sedang berpikir tentang "rekaman" sebagai hal musik ditulis untuk beberapa alasan =)
Izkata
Membangun mesin Turing adalah cara standar untuk membuktikan sesuatu Turing lengkap, tetapi kebalikannya tidak benar - hanya karena Anda tidak dapat menemukan cara membangun mesin Turing tidak berarti ada sesuatu yang tidak menyelesaikan Turing. Mesin Turing (dengan kaset dan semuanya) hanyalah abstraksi sewenang-wenang yang memiliki daya komputasi cukup; ada abstraksi lain yang sama kuatnya tanpa gagasan tentang kaset. Lihatlah kalkulus lambda, kalkulus SKI atau beberapa bahasa esoterik (Fractran keren).
Tikhon Jelvis
3

Sebagian besar notasi terbuka untuk interpretasi, dan instruksi bahasa alami merupakan aspek yang diterima dari notasi musik - dan telah ada di sebagian besar atau tidak semua sejarah musik notasi Barat.

Fermatas menurut definisi tergantung pada kebijaksanaan pemain, yang berarti bahwa itu akan tergantung pada keadaan mereka sendiri, yang hampir selalu diubah oleh musik dalam hubungannya dengan faktor eksternal - jadi ini menimbulkan beberapa pertanyaan tentang sifat kewarganegaraan notasi musik.

Canon a 2 per Tonus dari Bach's Musical Offering adalah bagian yang tak terhingga yang nada suaranya naik sebanyak satu langkah setiap kali lewat selama karya tersebut dimainkan.

Baru-baru ini, sudah umum untuk melihat instruksi seperti "repeat for each solois" di, misalnya, versi Jazz yang terkenal seperti Take Five karya Dave Brubeck .

Yang mengatakan, selain dari aspek sewenang-wenang yang inheren seperti fermata, sebagai jawaban lain menyatakan, notasi musik dengan apa pun kecuali simbol umum mungkin tidak lengkap Turing.

Rei Miyasaka
sumber
1

Ini tidak terkait dengan Turing bahasa lengkap karena merupakan bahasa deskriptif. Tidak ada perintah dalam hal perhitungan atau modifikasi data, tidak ada status, tidak ada input, tidak ada output kecuali untuk hasil deskripsi itu sendiri.

Juga tidak ada lompatan bersyarat tergantung pada input. Ketika Anda menyelesaikan semua lompatan Anda mendapatkan struktur linier, bukan pohon. Jadi semua "program" yang dapat dimodelkan dengan bahasa ini adalah linier tanpa loop atau melompat sama sekali.

Mononess
sumber
1
Apa yang Anda daftarkan tidak diperlukan untuk bahasa lengkap Turing. Kalkulus Lambda hanya memiliki aplikasi, variabel dan lambda (mis. Tidak ada loop, status atau perintah) tetapi Turing lengkap. Hal yang sama berlaku untuk sekelompok model komputasi lain seperti kombinator SKI.
Tikhon Jelvis