計算可能な全単射関数のみを実装できるプログラミング言語?


10

fが計算可能な全単射関数の場合に限り、関数を実装(または表現)できるプログラミング言語(またはロジック)はありますか?f:NNf


誰かが、終了するプログラムのみを受け入れる言語を作成することは不可能であることを私に証明しました。あなたの質問はかなり似ているので、私はそうは思いません。
FUZxxl

1
そのようなプログラミング言語が存在する可能性は低いと思われます。それを強制しようとすることはできると思いますが、少なくとも恐ろしく複雑で苦痛にならない限り、ソートのような単純なことはできません。
ルークマシソン

@FUZxxlこれは多くの終了プログラムをキャプチャしません。実際、関数f(x)= 1でもこの言語で表現することは不可能です。また、すべての関数は完全な関数であるため、この種の関数は完全な関数型プログラミングによって取得されると感じています。
Chao Xu

@FUZxxl、私はそうは思いませんが、そのような言語は制限されなければなりません。たとえば、有限の決定論的オートマトンと同等の言語は必ず終了しますが、計算できるものは非常に制限されます。
jmite 2012年

@FUZxxl、そのようなステートメントの詳細は重要です。すべてのプログラムが終了するプログラミング言語を設計するのは簡単です。計算可能なすべての関数を表現できる言語を設計することは別の問題です。
Vijay D

回答:


9

そのような言葉はありません。

ただし、Boomerangを見てください。文字列間の全単射を書くための言語です。どれだけ広い範囲の地図が表現可能かはわかりませんが、少し検索すればわかると思います。

有効なプログラムのセットがインタープリターまたはコンパイラーによって認識可能であること、つまり計算可能に列挙可能なセットであることをプログラミング言語に要求することは合理的です。次に、有効なプログラムのセットが計算可能に列挙可能で、計算可能なすべての全単射正確に実装したプログラミング言語があるとします。これは、すべての計算可能な全単射を計算可能に列挙できることを意味します(このプログラミング言語のすべての有効なプログラムを単純に列挙できます)が、これは次の定理では不可能です。NN

定理: と仮定計算全単射の計算シーケンスです。次に、シーケンスにない計算可能な全単射があります。f0,f1,f2,

証明。全単射を以下のように構築します。値g 2 k g 2 k + 1 を定義するには、f k2 k を見てください。g:NNg(2k)g(2k+1)fk(2k)

  • 場合、次にセットG 2 kは= 2 、K + 1及びG 2 K + 1 = 2 kはfk(2k)=2kg(2k)=2k+1g(2k+1)=2k
  • fk(2k)2kg(2k)=2kg(2k+1)=2k+1

kNgfkg(2k)fk(2k)g


2k2k+1g(k)=fk(k)+1

fk(k)+1

g

最初の声明は間違っています、文学にはそのような言語がたくさんあります。
ナサニエル14

一方、あなたの証明は正当なようです。たぶん私はどういうわけか混乱しています。ここで何が起こっているのかを理解するために、アクセルセンとグリュックの論文(私の回答を参照)を注意深く読む必要があります。
ナサニエル14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.