不完全性定理のメモ
あまりにも寒いので布団に包まって「不完全性定理」の論文の概要を読んでいた。
まだ理解できたかどうか怪しいけどD言語でメモしてみる。
ちなみにこのD言語の世界では、引数も戻り値もstring縛りです。
/** * ソースコード文字列をバイトコードにコンパイルする。 * * Params: * src = ソースコード。 * Returns: * コンパイル結果のバイトコード。 */ string R(string src); /** * バイトコードの実行結果を判断できる関数。 * * Params: * code = 実行するバイトコード。 * arg = バイトコードに渡す引数。 * Returns: * バイトコードの実行結果を文字列で返す。 */ string Bew(string code, string arg); /// D言語の偉大なるトークン文字列。 string q = q{ /** * ソースコードの実行結果を判断し、その否定を返す。 * * Params: * src = 実行結果を求めるソースコード。 * Returns: * srcの実行結果の否定。 */ string K(string src) { return (Bew(R(src), src) == "true") ? "false" : "true"; } }; // qの終了。 // 必殺のmixin。qの内容がここに貼付けられ、Kが定義される。 mixin(q); assert(K("(string src){return q{true};}") == "false"); assert(K("(string src){return q{false};}") == "true"); assert(K("(string src){return src;}") == "true"); // Kのソースコードそのものを与える。 // Kがtrueならばfalseだが、するとtrueを返す事になり結果はfalseに、しかしーー // そんな感じでKを永久に判断し続ける。 // 素朴に考えればBew関数はインタープリタになるので、つまり無限に再帰する事になるのか? assert(K(q) == "true");
上記のように、D言語なら不完全性定理も簡単です。
(いろいろ間違っているかもだけど)
- 作者: ゲーデル,林晋,八杉満利子
- 出版社/メーカー: 岩波書店
- 発売日: 2006/09/15
- メディア: 文庫
- 購入: 17人 クリック: 122回
- この商品を含むブログ (65件) を見る