ターピットからの脱出(警官)


9

これは、言語の定義とそれらが完全なチューリングであることを証明することに基づく挑戦です。

これは警官のスレッドです。強盗のスレッドはこちらです。

警官

警官として、次の2つを準備します。

  • プログラミング言語またはその他の計算システムの正式な仕様。(計算システムは以下に定義されています。)

  • 以下のやや厳密な定義に従って、システムがチューリング完全であることの証明。

あなたはあなたの言語の仕様を投稿し、強盗はそのチューリングの完全性を証明することによってそれを「クラッキング」しようとします。提出物が1週間以内にクラックされない場合は、安全なものとしてマークし、証拠を投稿できます。(あなたがそれを修正できない限り、誰かがあなたの証明に欠陥を見つけた場合、あなたの答えは無効になる可能性があります。)

これはので、投票数が最も多く、クラックや無効化されていない答えが勝者になります。挑戦は自由回答です-私は答えを受け入れません。

この課題のために、計算システムは次の4つとして定義されます。

  • 「プログラムセット」P。これは、数え切れないほど無限のセットになります。たとえば、文字列、整数、バイナリツリー、グリッド上のピクセルの構成などです(ただし、以下の技術的な制限を参照してください)。

  • 「入力セット」I。これも数え切れないほど無限のセットであり、と同じセットである必要はありませんP(ただし、そうである場合もあります)。

  • 「出力セット」はO、同様に無数に無限のセットであり、Pまたはと同じであってもなくてもかまいません。I

  • 出力生成のための決定論的、機構的手順oプログラムからpの入力ipiおよびoのメンバーでありPIそしてOそれぞれ。この手順は、原則として、チューリングマシンまたは他の抽象的な計算モデルに実装できるような手順にする必要があります。もちろん、プログラムとその入力によっては、手順が停止しない場合があります。

セットPIそしてOあなたが計算可能な方法で文字列としてそれらを表現できるようなものでなければなりません。(ほとんどの賢明な選択の場合、これは重要ではありません。このルールは、停止しないチューリングマシンのセットなどの奇妙なセットを選択しないようにするために存在します。)

チューリング完全性は次のように定義されます。

  • 任意の計算部分の機能のためにfからIO、プログラムが存在するp中でP、そのような与えられたp入力i、出力されf(i)た場合f(i)の値を有します。(それ以外の場合、プログラムは停止しません。)

上記の定義で「計算可能」という用語は、「チューリングマシンを使用して計算できる」という意味です。

どちらのことを注意ルール110ビット単位のサイクリックタグは、彼らが必要な入出力構造を持っていないので、この定義にチューリング完全です。ラムダ計算は、私たちが定義IO教会の数字である限り、チューリング完全です。(一般的にラムダ式を採用するIと、チューリング完全ではありませんO。)

言語の実装を提供する必要はありませんが、必要に応じて回答に含めることもできます。ただし、言語を定義するために実装に依存するべきではありません。仕様自体が完全である必要があり、仕様と実装の間に矛盾がある場合、これは実装のバグとして扱われるべきです。


9
申し訳ありませんが、人気コンテスト 客観的な勝利基準です。ポップコンであることは、トピックから挑戦することはありませんし、決してしていません。最新のメタ議論はあなたの5あなたが本当に上に立つ何の足を持っていない異なることを好むかもしれないのでけれども、この賛成の27のコンセンサスを持っています。この質問は合意されたポリシーに反してクローズされているため、再オープンをお願いします。
ナサニエル

2
(WhatWizardが別の理由でクローズしたことに注意してください。)
user202729 2018

2
「賛成しない」または「私はこれが好きではない」ボタンとして近い投票を使用しないでください。サイトポリシーを実施するために近い投票が使用されます。ポリシーに同意しない場合は、メタに移してください。コミュニティのコンセンサスで話題になっている課題をクローズしないでください。
Mego

1
@Mego私はこれを広すぎると締めくくりましたが、これはポップコンに関する既存のルールによってトピックから外れていると思います。人気コンテストには「達成しなければならない目標の明確な仕様」があると予想されます。この質問は、最も創造的な方法で行うXです。有効な回答であること以外に目的はなく、開いたままにするためにpop-conタグが付けられていることは明らかです。
アドホックガーフハンター2018

2
@WhatWizard達成する必要がある目標は、明らかにチューリングが完全でないことであり、非自明性は1週間以内にクラックされないことによって評価されます。それは明確ではありませんか?
ナサニエル

回答:


10

目隠し演算

おそらく、比較的言えば、最初はかなり簡単な言語でしょう。(自分でチューリング完全であることを証明しなければならないため、作成できる言語には限界があります!)

この言語の場合、プログラムセットは、以下の「プログラム」のセクションで示すように、目隠し演算プログラムのセットであり、入力セットは正の整数のセットであり、出力セットは整数のセットです(セット全体ではなく、セット全体)正の整数)。

この言語はかなり興味深いです-おそらく実用的かもしれません-完全にあなたが見ることができない数の計算に完全に基づいているため、制御フローの多かれ少なかれ完全な欠如があるからです。これにより、準同型暗号化 システム内にプログラムを実装するための言語として潜在的に役立ち ます。

仕様

目隠し演算は、次の仕様を持つ難解なプログラミング言語です。

データストレージ

実行中の目隠し算術プログラムの状態は6つの変数で構成され、それぞれに整数を格納できます。(どのように大規模またはこれらの整数を取得することができ、小さなには制限はありません。特に、彼らは否定的に行くことができます。)の変数が呼び出されabcde、と i

プログラムの開始時に、ae含めそれぞれ0に初期化され、iユーザ入力から取られ、正の整数に初期化されます。(入力が利用できない場合、i1に初期化されます。)

プログラムが実行を停止した場合(これはゼロによる除算のためにのみ発生します)、i除算が試行される直前の値がプログラムの出力として使用されます。

プログラム

目隠し算術プログラムはコマンドのリストであり、各コマンドの形式は次のいずれかです(vは任意の変数名に置き換えることができ、使用するたびに異なる名前になる可能性があります)。

  • v = v + v
  • v = v - v
  • v = v * v
  • v = v / v

コマンドの各オペランドは変数でなければならないことに注意してください。この言語では、リテラル整数の使用は許可されていません。

プログラムの実行は、各コマンドを順番に実行し、最初から最後までループし、コマンドを順番に繰り返し実行し続けることで、無限に(またはゼロで除算しようとしてプログラムが終了するまで)実行されます。 。

各コマンドは、表記から予想されるのと同じセマンティクスを持ちます。これは、ほとんどの実用的なプログラミング言語で使用されているものと同じです。コマンドで言及された2番目と3番目の変数の値が使用され、算術演算(加算/減算)コマンドの4つの形式に対してそれぞれ/ multiply / divide)がそれらに適用され、結果の値が最初の変数に格納されます。ここでの除算は整数除算であり、0に丸められます。

プログラムの終了以外の制御フローはありません。コマンドは常に、ゼロによる除算(存在する場合)が発生してプログラムを終了するまで、順番に循環します。特に、変数を直接読み取る方法はなく、その結果を他の変数に割り当てられた値に影響を与える計算のソースとして使用するだけです。


私の答えに欠けているものがないかどうかを確認できますか?
user202729

@ user202729:(ここにコメントする担当者がいないため、ここにコメントします)フリップを元に戻すことができないため、「フリップ」および「真の場合に移動」から「偽の場合に移動」をシミュレートすることはできません。あなたが移動した後。そのため、これを処理する別の方法が必要になります(たとえば、テストを反転させる方法は難しくありません)。ただし、さらに注目すべきは、これは停止動作の点でチューリング完全性の証明ですが、質問の定義では、I / Oも実行できる必要があるため、それを実行できることを証明する必要があります。
ais523

I / Oパーツ(現在)に問題がないことを願っています。他の問題については、私は内部の状態が必要でなくても中間状態がすべての問題を解決することを理解しています(どのように言うかわかりませんが)
user202729

@ user202729:それはまだ完全に正しくありません(たとえば、質問では負の数を出力できる必要があり、また、目的の値を変更して、i常に「停止」する状態番号が表示されないようにする必要があります。出力の一部になります)。ただし、十分な時間を与え、ルールを十分に明確にすると、完全なクラックが確実に得られるため、これを安全とマークするつもりはありません。私はこの技術的な挑戦に勝ちたくありません。
ais523 2018

これは、de.ioccc.org / years-spoiler.html#1992_buzzard.1が使用する制限に非常に近いものです。この実装は固定サイズの整数を使用しているため、チューリング完全ではありません。これは、使用する変数の数が大幅に制限されていますが、それでも証明は似ていると思います。
b_jonas 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.