深草の横取り四十萬

何をつくっているのでしょうか

2010-09-15論理パズルの答えから問題をつくる

正直者と嘘つきの論理パズル

論理パズルには多くの種類があるが、ここでは正直者と嘘つきが登場して自分たちのこと(誰が正直者で誰が嘘つきかといった情報)について発言するシンプルなタイプの問題に限定して考えてみることにしたい。

たとえば、次のような問題である。

AさんとBさんが次のように発言した。二人はそれぞれ「正直者」タイプか「嘘つき」タイプである。正直者は常に真実を述べ、嘘つきは常に嘘(真実の逆、偽)を述べる。

A「Bは嘘つき」
B「AとBは両方正直者」

AとBはそれぞれ正直者であるか、それとも嘘つきか?

【解答】Aが嘘つきであると仮定しよう。するとAの発言は嘘でBは正直者。正直者のBの発言は真実なので、AとBは両方正直者のはずだが、これは「Aが嘘つきである」という仮定と食い違う(矛盾)ため、仮定は誤り。故にAは正直者である。

Aは正直者なのでAの発言は真実。すると、Bは嘘つきでその発言は嘘となり、AとBの少なくとも一方は嘘つきでなければならないが、これは矛盾を起こさない。

以上より、Aは正直者、Bは嘘つきであることがわかる。

答えが確定する問題は限られている

このような問題のバリエーションを考えることにすると、発言の種類を増やしたり、発言者のの人数を増やすことが考えられる。ただ、登場人物の発言の仕方によっては必ずしも答え、つまり、誰が正直者で誰が嘘つきかは確定しないことがある。たとえば、次のような発言しか手がかりがなければそうである。

A「AとBのうち少なくとも一人は正直者」
B「AとBのうち少なくとも一人は正直者」


この場合、AとBは両方とも正直者かもしれないし、両方とも嘘つきかもしれないが、この手がかりだけではその二つの可能性のうちひとつには決まらない。

また、次のような場合は「解なし」になってしまう。

A「Bは正直者」
B「Aは嘘つき」


この場合、Aを正直者と仮定しても嘘つきと仮定しても矛盾になってしまうので、問題設定がおかしいか、もしくは答えがないことになる。

つまり、手がかりとなる発言によっては問題の解答が複数の可能性を残すものになってしまったり、「解なし」の問題になってしまう。だから、最初からそのように意図して問題をつくるのであればともかく、もし誰が正直者で誰が嘘つきなのか、問題中のすべての発言者について確定させたいなら、問題を自分で解いてみて吟味する必要がある。言い換えれば、答えがどうなるかをきちんと検討しておかないと、適切な問題にならない可能性がある。

答えから問題をつくろう

上記のような論理パズルの場合、発言をパターン化しておけば、機械的に答えが一つに確定するような問題を洗い出すことができる。

ここでは、発言者がAとBの二人しかいないパズルの場合を考えよう。二人の場合を考えることができれば三人以上でも手間はかかるが同様に考えられることが後からわかると思う。さて二人の場合、それぞれ正直者であるか嘘つきであるか二通りの可能性しかないのだから、2(人)×2(通り)で答えは次の四つのうちのどれか一つに定まるようにしたい、ということになる。下表のように、四つの可能性にそれぞれ1、2、3、4と番号を振っておこう。

たとえば、Aが「Bは嘘つき」と発言したと想定してみよう(Bの発言は考えない)。

このAの発言によって、この四つのケースの中からどれが排除されるだろうか。Aが正直者である(1または2のとき)とすれば、Bが正直者であるという可能性は除かれることになる(なぜならば「Bは嘘つき」という発言は真実だから)。一方で、Bの発言が嘘になるケースは排除されないから2の場合はあり得る。

また、Aが嘘つきである(3または4のとき)とした場合はどうだろうか。この場合、Bが正直者である可能性しか残らないから、3の場合だけが残る。

綜合して考えると、Aの「Bは嘘つき」という発言は、四つのケースのうち、1と4を排除し、2と3を残すことが分かる。

このAの発言とは別に、Bの「AとBは両方正直者」という発言を考えてみると、この発言が、上に挙げた四つの可能性のうち、3だけを排除することがわかるだろう。つまり、Bの発言からは1、2、4の三つの可能性が残ることがわかる。

以上からAの発言単独では2、3の二つのケースが残り、Bの発言単独では1、2、4の三つのケースが残ることがわかった。この二つが一緒になると、両方に共通する2の場合だけがあり得るものとして残ることになる。つまり、

A「Bは嘘つき」(→1、4を排除)
B「AとBは両方正直者」(→3を排除)


という手がかりを与える問題の解答は2の場合になる。すなわち、Aの発言は真実でAは正直者、Bの発言は嘘でBは嘘つきということに確定する。発言者をそれぞれ単独でみてどんな可能性が残るかを考えて、最後にすべての発言者から排除されない可能性を、言わば「重ね合わせてあぶり出す」ようなかたちで求めることができる。

こうした考え方を推し進めて、発言の組合せによって表をつくることができる。下の表では発言をそれぞれ論理記号を使って略して書いている。意味は次の通り:

  • 「A」  =「Aは正直者」
  • 「¬A」 =「Aは嘘つき」
  • 「A∧B」=「AとBは両方正直者」
  • 「A∨B」=「AとBのうち少なくとも一人は正直者」
  • 「A=B」=「AとBは同じタイプ(両方正直者か両方嘘つき)」
  • 「A≠B」=「AとBは同じタイプでない」

Bの発言
A(1,4)¬A(2,3)A∧B(1,2,4)A∨B(1,3,4)A=B(1,2)A≠B(3,4)
Aの発言 B(1,4) 1,4 1,4 1,4
¬B(2,3) 2,3
A∧B(1,3,4)1,4 1,4 1,3,4 3,4
A∨B(1,2,4)1,4 1,2,4 1,4 1,2
A=B(1,3) 1,3
A≠B(2,4) 2,4

上の表ではAの発言がタテに並び、Bの発言がヨコに並んでいる。発言の後のカッコ内の番号はその発言単独で残る可能性の番号(下に再掲)である。

発言を並べた表からAの発言とBの発言とをひとつずつ選んでみよう。選んだAの発言から右にたどった行と、一方で選んだBの発言から下にたどった列との交差したマスに書いてある番号がその二つの発言から導かれる論理パズルの答えになっている。番号が複数あるときは、その二つの発言から可能性がひとつに絞り切れないということで、「‐」のマスにたどりついた場合はひとつも可能性が残らない、つまり「解なし」ということである。

このような表をつくってみると、可能性が一つに絞られるような発言の組合せがどれだけあるのか、すぐに確かめることができる。ここでは6パターンしか発言のかたちを考えていないが、もちろんもっとパターンを増やすことは簡単であるし、また、発言者の人数も、二人だけでなく三人・四人の場合を同様に考えることができる。そういった場合でも、表は大きく複雑にはなるけれども、機械的につくることができるだろう。

このような表をつくって検討することによって、あらかじめ「答えが一つに確定する」ような手がかりの出し方を網羅的に洗い出すことができる。ここで示したのはごく単純なパズルの場合に過ぎないが、論理パズルを解いたり考えたりするときのヒントにしてほしいと思う。