| ホーム > 結城浩の日記 > Goedel is the last name of Kurt... | 検索 | 更新情報 |
|
|
|
解答
言えない。 反例は「NDSNDS」。
以下、NDSNDSのカードはスキャナを通らないが有効なカードであることを証明する。
ルール(d)により、
「NDSNDSが有効である」⇔「NDSNDSのカードがスキャナを通らない」
である。したがって、次の(A)(B)のいずれかが真となる。
ところで、(B)はルール(f)と矛盾する。 したがって(A)が成り立つ。
解説
意味論的に書いてみましょう。
つまりこのシステムでは、カードに書かれている文字列によって、 有効なカードは何であるかを記述できることになります。
「NDSNDS」というのは「NDSを2回繰り返したものがスキャナを通らない」という命題です。 つまり「自分はスキャナを通らない」という命題になっているのですね。 これはカントールの対角線論法や、計算機の停止問題と類似した考え方です。
ゲーデルはこれと似た議論を展開して不完全性定理を証明しました。 「あるカードがスキャナを通る」というのを「ある文が証明可能である」に置き換え、 「あるカードが有効である」というのを「ある文が真である」に置き換えます。 すると「真であるのに証明が不可能な文が存在する」ということが言えることになります。
以下余談。 KurtくんはLedeog Universityの研究者、と4月1日の日記で書きましたが、 LedeogというのはGoedelの逆綴りです。 また、Kurtというのはゲーデルの名前です。
解答
「有効なカードはすべてこのスキャナを通る」とは言えない。
「有効なのにスキャナを通らないカード」として、
文字列 "NDSNDS" を持つカードが存在する。
この解答を得た過程を以下に示す。
[ルール]
以降において、カードが持つ文字列のタイプを「Card」と記述する。
ある文字列 c がスキャナを通るかどうかの真理値を示す式を「S(c)」と、
有効であるかどうかの真理値を示す式を「V(c)」と記述する。
記号「+」は文字列の連結を表す。
ルール(a) (∀c : Card |: S(c) ≡ V("S" + c) ) が成り立つ
ルール(b) (∀c : Card |: ¬S(c) ≡ V("NS" + c) ) が成り立つ
ルール(c) (∀c : Card |: S(c + c) ≡ V("DS" + c) ) が成り立つ
ルール(d) (∀c : Card |: ¬S(c + c) ≡ V("NDS" + c) ) が成り立つ
ルール(e) (∀c : Card | S(c) : V(c) )
= (∀c : Card |: S(c) ⇒ V(c) ) が成り立つ
ルール(f) (∀c : Card | ¬V(c) : ¬S(c) )
= (∀c : Card |: ¬V(c) ⇒ ¬S(c) )
= (∀c : Card |: S(c) ⇒ V(c) ) が成り立つ
つまり、(e) と (f) は同値。
[問題]
(q) (∀c : Card |: V(c) ⇒ S(c) ) が成り立つか?
[解答1]
以下に反例を示す。
(e) より、
(e') S("NDSNDS") ⇒ V("NDSNDS") が成り立つ。
(d) より、
(d'') ¬S("NDS" + "NDS") ≡ V("NDS" + "NDS")
= ¬S("NDSNDS") ≡ V("NDSNDS")
= S("NDSNDS") ≡ ¬V("NDSNDS") が成り立つ。
(e') より、
(e'') S("NDSNDS") ⇒ V("NDSNDS")
= ¬V("NDSNDS") ⇒ V("NDSNDS")
= ¬V("NDSNDS") ∧ V("NDSNDS") ≡ ¬V("NDSNDS")
= V("NDSNDS") ≡ true
= S("NDSNDS") ≡ false が成り立つ。
従って、文字列 "NDSNDS" を持つカードは有効であるが
スキャナを通らない。 □
[解答2]
以下に (q) が成り立たないことを示す。
(q) が成り立つならば、(e) より
(q') (∀c : Card |: S(c) ≡ V(c) )
が成り立つ。
(q')が成り立つならば、
(q'') S("NDS" + "NDS") ≡ V("NDS" + "NDS")
が成り立つ。
一方、(d) より
(d') !S("NDS" + "NDS") ≡ V("NDS" + "NDS")
が成り立つ。
しかし (q'') と (d') は矛盾する。
従って (q) は成り立たない。 □
今回のパズルの題材は以下の本から得ています。