誠に恥ずかしながら「AならばB」という条件が昔から理解できなかった。プログラミングをしているときは、A || BA && B もわかるし、A ?? BA?.B もわかる。でも「A ⇒ B」がわからないのだ。

初めて「AならばB」と出会った高校生時代はわからないながらも、それほど扱われることがなかったので、なんとかやり過ごしたように思う。

真理値表

「AならばB」の真理値表は次のようになる。なんもわからん。プログラム的には !A || B と表現される。

ABA ⇒ B
truetruetrue
truefalsefalse
falsetruetrue
falsefalsetrue

意味がわからん

まず直感的でない。「Aが真のときに、Bも真であるか?」を問われていることはわかる。しかし、Aが偽であるときに、「AならばB」が真になることがわからない。

「言ってないことは真だよーん!バーカバーカ!」と言っているクソガキみたいな印象を受けるなあ…と思って調べてみたらわりとそういうことらしく、偽からはなんでも導ける爆発律というものに基づくらしい。

クソガキの例

とは言っても具体的な例を出されないと理解できないところもあるので、ひとつ考えてみた。次はふたりのクソガキ小学生X, Yが会話している風景である。

X「お前、明日学校でデュエルするから、覚えてたらポケカ1持ってこいよ!」
Y「いいぜー」

~翌日~

X「お前ポケカ持ってきたか?」

さて、ここでYについて4種類の行動が生まれる。

  • Yが覚えていて、持ってきた「持ってきたよ!」(約束を果たした)
  • Yが覚えていて、持ってこなかった「持ってくるわけねーだろ」(約束を果たさなかった)
  • Yが忘れていて、持ってきた「あっ忘れてたけど、体が覚えていて持ってきてたからセーフ」(過程はともあれ約束を果たした)
  • Yが忘れていて、持ってこなかった「忘れてたし、お前『覚えてたら』って言ったよな?だからノーカンだろ」(約束を無効として正当化した)

なるほど、わかりやすい。言及されてないことについては真にできてしまう。

まとめ

高校を卒業してもう何年も経つが、やっと「AならばB」を理解できたような気がする。普段のプログラミングではあまり使わないが(もしかしたら意識せず使っているかもしれないが)、またひとつ賢くなった。

Footnotes

  1. ポケモンカードのこと。