以前の「ひとこと」 : 2009年4月前半
4月1日(水) 数字の入った自己言及文(その1)
きっかけは忘れたのですが、昨夜、疲れているのに眠れなくて、ふと「数字の入った自己言及文」のことをぼんやり考えました。「自己言及文」というのは、パラドックスや論理のパズルなどでよく取り上げられる話題です。たとえば「この文はウソである。」という文があったとします。この文が述べていることが正しいとすると、「この文はウソ」という命題が真ということになって、ならば「この文はウソ」が正しくなって、ということは(この文はウソなのだから)この文は正しくないことになります。これは明らかに矛盾です。
最初に思いついたのはこの例(例1)です。
例1 この文には数字の2が2個含まれている。 この文の中には '2' という数字がふたつあるよ、ということで、これは正しいことを述べています。
では、これをちょっと変えてみます。(例2)
例2 この文には数字の1が[ ]個含まれている。 この例では、'1'という数字に言及していますが、個数のカギカッコの中にはどんな数字を入れても正しくなりません。( この文には数字の1が「いっ個」含まれている というように逃げる方法はあるかもしれませんが、ここでは0〜9の数字の文字を入れることにします。)
例3 この文には数字の0が1個、1が2個、2が3個、3が[ ]個含まれている。 この例3はどうでしょうか? この場合は、カッコの中に'2'を入れると、この文はきれいに成立していることがわかります。
できれば、数字の0から9まで全部出てくる、正しい自己言及文が作りたいな、と思ったのですが、暗闇の中の布団の中だけではちょっと大変そうだったので、ターゲットを二進数にすることにしました。
例4 この文には数字の0が(二進法で)[ ]個、1が(二進法で)[ ]個含まれている。 さて、この文を正しくなるような数値を入れられるでしょうか? 二進法なので、カッコの中に入るのは0と1を組み合わせた表記の数字のみです。「二進法で」という言葉に漢数字が登場するのがちょっと気持ちが悪いという気もしますが、その場合は「バイナリ表記で」などと言い換えてもいいかもしれません。
(つづく) <おまけのひとこと>
この4月から、会社の組織も少し変わり、自分の役割も少し変わり、座席のレイアウトも少し変わりました。ちょっと新鮮な気分です。
4月2日(木) 数字の入った自己言及文(その2)
昨日、数字の入った自己言及文の話を紹介して、二進法だったらどうでしょう? という提起をしておきました。ちょっと考え方を説明したいと思います。
二進法の例 この文には数字の0が(二進法で)[ ]個、1が(二進法で)[ ]個含まれている。 最も素朴に考えると、カッコの中にありとあらゆる自然数の組み合わせを入れてみて、この文が真になっているかどうか試す、という方法が考えられます。しかし、この方法では時間がかかって仕方がありません。そんなときには次のような方法が効果がある場合があります。
○ たとえばこの例文は、カッコの中を無視すると0が1個、1が1個あります。そこでまず、それぞれのカッコに1を入れてみましょう。
この文には数字の0が1個、1が1個含まれている。 これは偽です。なぜなら、0は1個ですが、1は3個もあります。じゃあ、1の個数を3にしてみましょう。3は二進法で表すと11ですから、これを新たにカッコに代入すると、こうなります。
この文には数字の0が1個、1が11個含まれている。 これでよいかと思いきや、この文に含まれる1の数は4個になってしまいました。4は二進法では100です。これを代入してみましょう。
この文には数字の0が1個、1が100個含まれている。 おやおや、今度は0の数まで変わってしまいました。0が3個、1が3個になってしまいました。
○ この続きは皆さんにお任せしたいと思うのですが、この手続きは、0の数と1の数の組を考えると、
(1,1)→(1,3)→(1,4)→(3,3)… と表記できます。これは、整数の組から整数の組への写像になっています。これは二次元座標の格子点だと考えることができますから、この写像を座標平面上で矢印で表記することをイメージしてみると、この0と1の数を自己言及文に代入して、その結果を数えて、再び代入する、という操作は、座標平面状で矢印を辿ってゆく操作になります。
矢印は2つに分岐することはありません。なぜなら、「0と1の数を数えた結果」は必ず答えは1通りしかないはずですから、ある座標から出た矢印は必ず決まった座標を指しているからです。
では、ずっと矢印をたどってゆくとどうなるでしょうか? 可能性は3つで、1).無限大に発散する か、2).周期解に陥る か、3).不動点に到達する か、のいずれかになります。
不動点というのは、ある座標から出ている矢印が、自分自身の座標を指している場合で、実はこれがもともとの自己言及文の「正解」になります。
しらみつぶしに、機械的に全部の整数の組み合わせを代入してゆくのではなく、適当な初期値を入れてみて、値を次々に更新して「矢印をたどってゆく」操作をするほうが、不動点を見つけるためにははるかに効率的なのです。
(つづく) <おまけのひとこと>
昨日、4月1日に、昨年度一年間PTAで一緒だった会長さんから「一年間ご苦労様でした」というお花が届きました。たいへんびっくりしました。とてもきれいな生花で、家内が喜んでくれました。早速電話でお礼を申し上げて、おかげさまで家内が喜んでいると伝えたら、「あなたも私も昨年度は奥さんには点数を失っているはずだから、少しでも挽回になればと思って」とのことでした。そのお気遣いに大変感謝しています。自分には思いつきもしない心配りだなと感心しています。
4月3日(金) 数字の入った自己言及文(その3)
昨日、二進法による「数字が入った自己言及文」の話をご紹介しました。
この文には数字の0が(二進法で)[ ]個、1が(二進法で)[ ]個含まれている。 カッコに適当な数値を入れて、出来上がった文の0と1の数を数えて、カッコの中の値を更新する、というステップをたどっていくことで、効率的に解を探索することができる、という方法を紹介しました。これを計算機にやってもらうプログラムを書いてみましたので、ソースコードをこちらに置いておきます。興味がある方はご覧下さい。15分くらいで思いつくままに書いたもので、コメントも一切ないので読みにくいと思います。
このプログラムは、0と1の数の初期値を引数として実行すると、次のように動作します。
[0] num0:1, num1:3
[1] num0:1, num1:4
[2] num0:3, num1:3
[3] num0:1, num1:5
[4] num0:2, num1:4
[5] num0:4, num1:3
[6] num0:3, num1:4
このプログラムを改造すると、もっといろいろ遊べそうですが、時間がないので今回の話題はここまでにしたいと思います。
<おまけのひとこと>
暖冬だったといいながら、昨日の朝もうっすら雪が積もっていました。