社長のコラム


ウソツキ村とショウジキ村

2025.04.18

業務アプリケーションの開発におけるソフトウェアの製造工程をプログラミングと言い、その作業を担う人をプログラマと言います。プログラミングのことをコーディング、プログラマのことをコーダーと言う人もいます。していることは同じです。

プログラミングは、ロジックという橋の上で成立します。プログラマはそれを踏み外さないよういつも気をつけています。

ロジック、日本語では「論理」と訳されますが、プログラマの持つロジックのイメージと、そうではない人が想像している論理との間には、若干の隔たりがあります。

そのギャップを説明するにあたって、次のなぞなぞを検討しましょう。


【問い】
ショウジキ村とウソツキ村の間に、一人の男が立っていた。彼が、どちらかの村の住人であることは、分かっている。
ショウジキ村の男は、どんな質問にも、必ず正直に答え、ウソツキ村の男は、どんな質問にも、必ずウソをつく。
彼に一つだけ質問をして、どちらがショウジキ村か知りたい。
なんと尋ねたらよいか。

【答え】
あなたは、どちらに住んでいるのですか。

このように尋ねられると、ショウジキ村の男は、正直に、ショウジキ村を指すだろうし、ウソツキ村の男は、ウソをついて、ショウジキ村を指すだろう。質問を受ける男が、ショウジキ村の人間であっても、ウソツキ村の人間であっても、ともにショウジキ村を指す質問であるところが要所であります。

このロジックは実に、プログラマ的であります。明確な前提があって、論理の展開がその粋を出ないからです。


プログラマ的ではない普通の論理では、このなぞなぞは解けません。普通に考えて、ウソツキの男から100パーセントの確率で正しい情報をゲットすることは有り得ないからであります。

たとえば、ウソツキ村の男が「あなたはどちらに住んでいるのですか」と尋ねられて「ウソツキ村」を指したら「ウソツキ!!」となじられるでしょう。ウソツキ村の男たるものすべからくかくあらねば、ウソツキ村の男意気は廃ってしまうのではないでしょうか。

私も四捨五入すれば、プログラマでありますので、ウソツキとショウジキとは上記の延長で考えます。

「私はウソをつく」か「私はウソをつかない」か。どちらが正しいか、証明してみましょう。


まず、
私がウソツキだと仮定したら、「私はウソをつく」は、ウソではないから、矛盾する。
私がショウジキだと仮定したら、「私はウソをつく」は、ウソだから、矛盾する。

一方、
私がウソツキだと仮定しても、「私はウソをつかない」は、ウソだから、矛盾しない。
私がショウジキだと仮定しても、「私はウソをつかない」は、ウソではないから、矛盾しない。

まとめると、
私がウソツキだとしてもショウジキだとしても、「私はウソをつく」は矛盾し、「私はウソをつかない」は矛盾しない。

私は矛盾が嫌いである、ゆえに背理法より「私はウソをつかない」
(証明終)


かつて、私がウソを追及されたとき、そのようなロジックで脱出を試みました。むかし孔子は「女人と小人は養いがたし」と言いました。ロジックの通用しない相手には当然ながら通用しません。

さて、ここまで読まれて、プログラマのロジックというのは、そうでない人の普通の論理と比べて、あるいは、なんだか幼稚なものだなと思われた方もいるかもしれません

それは正常な感覚ではありますが、論理的な思考が少々欠けています。実は、幼稚に思える原因は、ロジックそのものにありません。そのロジックの前提が幼稚だったに過ぎません。

前提とはこのケースでは、「ウソツキは100回のうち100回ともウソをつき、ショウジキは100回のうち100回とも正直に答える」というものです。


どのくらいの頻度でウソをつけば、人は「ウソツキ」呼ばわりされるのでしょう。100回ほど発言の機会があって、そのうち5回もウソをつけば、もはやウソツキではないでしょうか。つまり、ウソツキの人の発言でも、その大半は、ホントのことであるわけです。

この前提がおかしかった。ロジックそのものには何の欠陥もないのです。

ロジックは、プログラマの日常会話にもっともよく出てくる言葉の一つであり、彼らがそのよりどころにしているものですが、弱点として、前提の吟味がおろそかになるという特徴であります。

そして蛇足ながら、前提に論理矛盾があるとプログラマは泣くはめになるのです。

© 2025 ばんな情報システム株式会社