楽譜はチューリング完全ですか?


63

私は思ったんだけど、ある楽譜言語チューリング完全

私の最初の考えは、楽譜にループがあるが、条件分岐を書く方法がないということですよね?

私はミュージシャンではないので、おそらく誰かがギャップを埋めることができますか?


7
音楽パーティション言語とは何ですか?何らかの形式の記譜法
-gnat

4
私は楽譜表記についてあまり知りません。どういうわけか、無制限の量の「可変変数」(または「テープ」)をエンコードできますか?そうでなければ、どのように完全にチューリングできるかわかりません。
ニキエ

いいえ、ありません
-shabunc

@nikieリフレインが保存された関数として機能するのか、それとも類似したものとして機能するのかわからない
...-クライム

2
もちろん、チューリング完全であり、単に8つの異なるノートを使用してBrainfuckの8つのキャラクターを表します。:)
クリスバートブラウン

回答:


37

はい。転置のためのいくつかの指示を認めた場合-珍しいことではありますが、未知ではありません。

その後、チューリング完全なChoonとして作品を解釈できます。演奏者は記憶です。彼らは、現在作品が移調されている音符の数と、これまでに演奏したすべての音符を覚えていなければなりません。明らかに、それはコンピューター、またはおそらく賢い人だけに実行可能です。

Choonマニュアルから:

  • 転置

    移調命令には、上(+)、下(-)、キャンセル(.)の3つがあります。移調命令は、最後に演奏されたノートの量だけ、演奏された後続のすべてのノートを移調します。キャンセル命令(.)は、転置をゼロに戻します。

    移調は累積的であるため、将来の音符を2だけトランスポーズするChoonコードはb+で、4でトランスフォーメーションはになりますb++。また、使用される値は、移調が適用された後の前のノートの値であるため、b+b+将来のノートを4ではなく6でトランスポーズします。

  • ジョン・ケイジ

    John Cage命令(%)により、出力ストリームに1つの音の無音が生じます。John Cageの転置値はゼロで%-あり%+、無操作です(1つの無音が出力に追加されることを除いて)。

  • 繰り返しバー

    繰り返しバーの指示(||:および:||)はループを囲みます。ループは、発生する前に再生された最新のノートで示された回数だけ実行され||:ます。ゼロまたは負の値は、Choonがすぐにジャンプしてマッチからプレーを始めることを意味するでしょう:||。ジョンケージと%||::||は、永遠に繰り返すことを意味します- 無限ループです。

  • 音叉

    Tuning Fork命令~は、ループから抜け出す方法を提供します。音叉がループ内で検出され、最後に演奏された音がvalueの音であった場合A、Choonは次の:||命令の後からすぐに演奏を開始します。それ以上の:||指示がない場合(つまり~、繰り返しバー以外で使用されている場合)、パフォーマンスはすぐに終了します。

  • マーカー

    マーカーは素晴らしいプログラミングの利便性を提供します。マーカーは、出力ストリームのポイントを記憶する小文字または単語です。マーカーを参照すると(以下を参照)、マーカーの発生後に再生されたノートが再び再生されます。移調はこの新しく演奏される音に影響することに注意してください。

    2つ以上のマーカーが連続して発生する場合、またはマーカーがマーカーから再生の指示に従う場合、マーカーは空白で区切る必要があります。

  • 出力から再生

    [出力から再生]命令(=)を使用すると、出力ストリームで既に再生されているノートを再度再生できます。あなたは数でノートを参照してくださいすることができます- 5ノートが演奏プログラムが始まってからだろう=5相対数で、 -第三最新のノートが演奏さだろう=-3か、マーカーで-マーカーが後にノートが演奏xになります=x

    次のように、マーカーを再利用してすぐに参照するのが一般的なイディオムですx=x。これはx=x+y、従来のプログラミング言語(y現在有効な転置値を表す)で言うことに似ています。

ジョン・ケージがちょうどで残りチューニングフォーク(おおよそ)のdal SEGNOで、マーカーは SEGNOです。音叉は、主演者が応答する追加の演者によって演奏されると思いますが、原理は同じです。


1
これが質問に対する最良の答えだと思います。他の答えはどれも、楽譜チューリング完全ではないこと証明しいません
K.ステフ

24

チューリングの完全性には、少なくとも3つのことが必要です。無限ループ、条件付きジャンプ(if-then)、および計算結果をメモリのどこかに保存する方法です。楽譜に条件付きジャンプがあったとしても、状態はありませんそのため、チューリング完全ではありません。


13
条件付きジャンプがあり、繰り返し記号と組み合わせて使用​​されます。「最初の繰り返しでこの部分を再生し、2回目の繰り返しでその部分を再生します」。リピートカウンター(再生中に頭を押さえる)は状態です。しかし、実際には状態を含む無限のテープはありません。
ジェスパー

49
楽しい事実:ラムダ計算にはループも条件付きジャンプもありません。また、計算結果をメモリのどこかに保存する方法もありません。しかし、それは完全なチューリングです
;

11
@Nikie:抽象化と現実を混同しないでください。ラムダ計算には条件付き評価の概念があり、再帰はループとジャンプの両方に使用され、状態は式を評価した結果として計算されます。コンセプトはそこにあります。実際のコンピュータープログラミングとは非常に異なる方法で実装されています。
メイソンウィーラー

5
@MasonWheeler:LCにはループ、状態、条件の基本的な概念はありませんが、同様の目的に役立つものを導き出すことができます。これは、チューリングが完了したと言う別の方法です。質問はそうではありません:楽譜にはこれらの概念がありますが、どうにかしてそれらを導き出すことができますか?あなたは、証拠がなければ、できないと主張しただけです。(私はあなたの結論に同意します、あなたの推論が有効であるとは思いません。)
ニキエ

9
@MasonWheeler:ラムダ計算実際のコンピュータープログラミングです。
dan_waterworth

23

言語がチューリング完全であることの標準的な証明は、その言語でチューリング機械を書くことです。これは、言語(通常は言語のサブセット)とチューリングマシンの間に同等性があることを証明しています。

「音楽表記法」の概念は少し滑りやすいです。多くの標準化された彫刻が使用されています。しかしながら。あらゆる種類のクレイジーなものを紙に書き留める封筒押しの作曲家がいます。

Finale、Sibelius、または主流の彫刻ツールセットの一部となるのに十分な標準と考えられている楽譜のサブセットに焦点を当てたいと思ってみましょう。

そう。

Python(またはCなど)の場合、シンボル、テープ、移行ルール、およびテープを更新して状態の変化とテープの動きを反映するさまざまなアクションを定義し、テープ上のシンボルの読み取りと書き込みを行います。

「楽譜」を使用して、シンボルとステートフルテープ、移行ルール、およびテープを更新するさまざまなアクションを定義する必要があります。

不足しているのは、ステートフルテープと、ミュージシャンにテープ上の記号への応答方法とそのテープの更新方法を伝えるルールです。

ある意味では、空中を流れるノイズはステートフルテープであるかもしれません。しかし。テープを巻き戻す簡単な方法はありません。この巻き戻しの欠如は、演奏者が何らかの種類のプライベートな「テープ」を保持しなければならないことを意味します。

これは、楽譜の外にあり、演奏者へのその他の音楽以外の指示になります。


さて、あなたは本当にどちらか、実行中のプログラムを巻き戻す...(しかし、ええ、私はあなたが状態を更新については何を意味するかを取得しますが、それが今度は関数型言語だろうか?)することはできません
Izkata

2
プログラムを巻き戻しません。テープを巻き戻します。ポイントは、チューリングテープにはすべての位置にアクセスできることです。「ランダムアクセスメモリ」は、前後の動きを伴う線形時間に単純化されています。
-S.Lott

ああ、私は今、それを覚えている、ごめんなさい。私は「テープ」を何らかの理由で音楽が書かれたものだと考えていました=)
Izkata

チューリングマシンの構築は、何かがチューリング完全であることを証明する標準的な方法ですが、逆は真実ではありません。単にチューリングマシンの構築方法を理解できないため、何かがチューリング完全ではないという意味ではありません。チューリングマシン(テープおよびすべてを含む)は、十分な計算能力を備えた単なる任意の抽象化です。テープの概念を持たない強力な抽象化もあります。ラムダ計算、SKI計算、またはいくつかの難解な言語(Fractranは素晴らしい)を見てください。
ティコンジェルビス

3

表記法の多くは解釈に開放されており、自然言語の指示は音楽表記法の受け入れられた側面であり、西洋の表記された音楽の歴史のすべてではないにしても、ほとんど全体に渡っています。

フェルマタスは定義上、演奏者の裁量に依存します。つまり、音楽によって外部要因に関連してほとんど常に変更される、自身の状態に依存することを意味します。

Bach's Musical OfferingのCanon a 2 Tonusは無限ループの曲で、曲が演奏される限り、毎回音調が1ステップずつ上がります。

最近では、たとえば、デイブ・ブルーベックのテイク・ファイブなどのジャズ作品の表記バージョンで「各ソリストのために繰り返し」などの指示を見ることが一般的です。

そうは言っても、フェルマータのような本質的にarbitrary意的な側面は別として、他の答えが述べているように、一般的な記号以外の音楽表記法はおそらくチューリング完全ではありません。


1

記述言語であるため、チューリング完全言語とは関係ありません。計算またはデータの変更に関するコマンド、状態、入力、出力は記述の結果以外にはありません。

また、入力に依存する条件付きジャンプはありません。すべてのジャンプを解決すると、ツリーではなく線形構造が得られます。したがって、この言語でモデル化できるすべての「プログラム」は、ループやジャンプのない線形です。


1
あなたがリストしたものは、チューリング完全言語には必要ありません。ラムダ計算には、アプリケーション、変数、ラムダ(ループ、状態、コマンドなどはありません)しかありませんが、チューリングは完了しています。同じことが、SKIコンビネーターのような他の多くの計算モデルにも当てはまります。
ティコンジェルビス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.