web-dev-qa-db-ja.com

楽譜はTuring-Completeですか?

楽譜 言語 Turing-Complete ですか?

私の最初の考えは、楽譜にはループがあるということですが、条件付きブランチを書く方法はありませんよね?

私はミュージシャンではないので、おそらく誰かがギャップを埋めるのを手伝ってくれるでしょうか?

68
Klaim

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

その後、ピースを Choon と解釈できます。これはチューリング完全です。演奏者は記憶です。彼らは、曲が現在トランスポーズされているノートの数と、これまでに演奏したすべてのノートを覚えておく必要があります。明らかに、それはコンピュータ、またはおそらくサバントに対してのみ実行可能です。

Choonマニュアルから:

  • 転置

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

    移調は累積的であるため、将来の音符を2だけ転置するChoonコードはb+であり、4まで転置するとb++になります。また、使用される値は、転置が適用された後の前のノートの値なので、b+b+は、将来のノートを4ではなく6だけ転置します。

  • ジョンケージ

    John Cage命令(%)は、出力ストリームで1つの音を無音にします。 John Cageの転置値はゼロです-%-および%+は何もしません(出力に単一の無音が追加される場合を除く)。

  • リピートバー

    リピートバー命令(||:および:||)はループを囲みます。ループは、||:が検出される前に、最後に再生されたノートが示す回数だけ実行されます。ゼロまたは負の値は、Choonが一致する:||からすぐに再生を開始することを意味します。ジョンケージは、永遠に繰り返すことを意味します。%||::||は無限ループです。

  • 音叉

    Tuning Fork命令~は、ループから抜け出す方法を提供します。ループ内で音叉が検出され、最後に再生されたノートが値Aのノートであった場合、Choonはすぐにジャンプして、次の:||命令の後で再生を開始します。 :||命令がそれ以上ない場合(つまり、~が繰り返しバーの外側で使用されたことを意味します)、パフォーマンスは直ちに終了します。

  • マーカー

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

    2つ以上のマーカーが連続して出現する場合、またはマーカーがplay-from-marker命令の後に続く場合は、空白で区切る必要があります。

  • 出力から再生

    Play From Output命令(=)を使用すると、出力ストリームですでに再生されているノートを再度再生できます。番号でノートを参照できます-プログラムの開始以降に再生された5番目のノートは=5、相対番号で参照されます-再生された最新の3番目のノートは=-3またはマーカーで表示されます-後に再生されたノートマーカーx=xになります。

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

John Cageは単なる rest であり、Tuning Forkは(おおよそ)dal segnoであり、 markerはsegnoです。音叉は、主要な演奏者が応答する追加の演奏者が演奏できると思いますが、原理は同じです。

42
Jon Purdy

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

24
Mason Wheeler

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

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

Finale、Sibelius、または一部のメインストリームの彫刻ツールセットの一部になるのに十分な標準と見なされている楽譜のサブセットに焦点を合わせたいとしましょう。

そう。

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

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

私たちが欠けているのは、ミュージシャンにテープ上のシンボルへの対応方法とそのテープの更新方法を伝えるステートフルテープとルールです。

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

これは、楽譜の外に出て、演奏者への他のいくつかの特別な音楽の指示になります。

24
S.Lott

表記法の多くは解釈に開放されており、自然言語による指示は音楽表記法の容認されている側面であり、西洋の表記音楽の歴史のすべてではないにしても、ほとんどの部分で使用されています。

Fermatas 定義により、パフォーマーの裁量に依存します。これは、自身の状態に依存することを意味します。これは、ほとんどの場合、外部要因に関連して音楽によって変更されます-したがって、ステートレスに関するいくつかの質問が生じます楽譜の性質。

バッハのミュージカルオファリングのキヤノン2 tonusごとに2 は無限ループの曲であり、曲が演奏されている限り、そのトーンは毎回1ステップずつ上昇します。

最近では、たとえば、Dave Brubeckの Take Five などのジャズ作品の表記バージョンに「ソリストごとのリピート」などの指示が表示されることがよくあります。

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

4
Rei Miyasaka

いいえ。作品が永遠に続くのか、最終的に終了するのかは、常に楽譜を見ることで判断できます。したがって、楽譜は 停止問題 を示さず、これはそれがnot Turing-completeでないことを証明します。

チューリング完全性とは、一連の記号と、これらの記号を操作するための一連の規則と一連の規則を指します。ルールは興味深い部分です。シンボルは何でもかまいませんが、2つのシンボルだけで済むことはよく知られています。

音楽表記を記号のセットと見なして独自のルールのセットを作成すれば、チューリングコンプリートシステムを簡単に作成できます。任意の記号のセットを使用してこれを行うことができるため、特に楽譜について興味深いことは何もありません。

しかし、楽譜に内在する規則(つまり、ミュージシャンが音符を解釈して演奏する方法)のみを受け入れる場合、いいえ、楽譜はチューリング完全ではありません。これは、どの楽譜も終了するという点で見ることができます。

セクションは常に一定回数繰り返されるため、繰り返しは役に立ちません。

(まあ、繰り返しで「無制限に繰り返す」と書けると思います。しかし、それを表記法の一部として許可したとしても、すべての曲が終了するかどうかを簡単に判断することができます。楽譜表記がチューリング完全だった場合、これは一般的に不可能です。)

2
JacquesB

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

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

1
Mononess