命題論理において、論理演算「ならば(→
)」は「前件が偽であれば、後件の真理値にかかわらず命題の真理値は真となる」という性質を持ちます。この性質が日常語の「ならば」の意味と乖離していることは、しばしば論理学の入門書で以下のような小噺を添えて説明されます。
親「明日晴れたら遊園地に連れて行ってあげる」
子「わーい」
・・・当日はどしゃぶりの雨だった。
親「よし、遊園地に行くぞ!」
子「雨降ってるけど?」
親「晴れたら行くとは言ったが、晴れなかったら行かないとは言ってない」
子「ヤダー!」
後日。
親「次のテストで学年1位をとったら、プレステ5を買ってあげる」
子「わーい!頑張るぞ!」
・・・子は学年1位をとれなかった。
子「1位とれなかったー」
親「そうか、じゃあ買ってあげない」
子「1位をとれなかった時に買ってあげないとは言ってないじゃないか」
親「1位をとれなかった場合、買ってあげるまたは買ってあげないのいずれかであっても命題の真理値は真である」
子「殺す」
上の小噺は、論理学というよりも「真理値の決定権が親にある」という権力の非対称性の話のような気がしますが(笑)。それはさておき、日常語の「ならば」はif and only if(晴れたなら、かつ晴れた時に限り行く)の意味で使われることが多いものの、論理演算の「ならば(→
)」と同じ意味で使われる場面もあり、つまり両方の意味を含むため上のような乖離が生じるのだと思われます。
論理演算というものを一段抽象化して考えてみる
そもそも論理演算とは何者か?という原点に立ち返って考えてみます。
以下は、おなじみのAND(Λ
)、OR(∨
)、IF(→
)の真理値表です。T
は真(True
)、F
は偽(False
)を意味します。ここにあげた論理演算以外にも、XOR
、NAND
などがありますが割愛します。
# | (P,Q) | P∧Q | P∨Q | P→Q |
---|---|---|---|---|
1 | (T,T) | T | T | T |
2 | (T,F) | F | T | F |
3 | (F,T) | F | T | T |
4 | (F,F) | F | F | T |
この表を眺めていて思うのですが、上記以外の真理値表をもつ論理演算子があってもいいのでは?と。例えば、入力(P,Q)=(F,F)
のみに対してT
を出力し、それ以外の入力に対してF
を出力する論理演算子があってもいいのではないか、と。
(P,Q)とP○Qの真理値の組み合わせ
そこで、P
の真理値と、Q
の真理値のすべての組(タプル)を表に書き出してみました。タプルは4通りとなります。
# | T | F | |
---|---|---|---|
1 | T | (T,T) | (T,F) |
2 | F | (F,T) | (F,F) |
さらに「4通りのタプルと、P○Q
の真理値」のすべてのタプルを表に書き出すと、以下となります(記号「○
」は、論理演算子を一般化した記号です)。
# | (P,Q) | ((P,Q),P○Q) | ((P,Q),P○Q) |
---|---|---|---|
1 | (T,T) | ((T,T),T) | ((T,T),F) |
2 | (T,F) | ((T,F),T) | ((T,F),F) |
3 | (F,T) | ((F,T),T) | ((F,T),F) |
4 | (F,F) | ((F,F),T) | ((F,F),F) |
4通りの各タプルに対して、P○Q
の真理値(T
またはF
)が対応づけられるので、対応づけのパターンは2^4=16
の16種類になります。この16種類の一部に、おなじみの論理演算(∧
、∨
、→
)を割り当てた表が以下となります。ここでは、既存の論理演算子が割り当てられない無名の論理演算を「?
」と表記しています。
# | (P,Q) | ? | ((P,Q),P∨Q) | ? | ? | ((P,Q),P→Q) | ? | ? | ((P,Q),P∧Q) | ? | ? | ? | ? | ? | ? | ? | ? |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | (T,T) | ((T,T),T) | ((T,T),T) | ((T,T),T) | ((T,T),T) | ((T,T),T) | ((T,T),T) | ((T,T),T) | ((T,T),T) | ((T,T),F) | ((T,T),F) | ((T,T),F) | ((T,T),F) | ((T,T),F) | ((T,T),F) | ((T,T),F) | ((T,T),F) |
2 | (T,F) | ((T,F),T) | ((T,F),T) | ((T,F),T) | ((T,F),T) | ((T,F),F) | ((T,F),F) | ((T,F),F) | ((T,F),F) | ((T,F),T) | ((T,F),T) | ((T,F),T) | ((T,F),T) | ((T,F),F) | ((T,F),F) | ((T,F),F) | ((T,F),F) |
3 | (F,T) | ((F,T),T) | ((F,T),T) | ((F,T),F) | ((F,T),F) | ((F,T),T) | ((F,T),T) | ((F,T),F) | ((F,T),F) | ((F,T),T) | ((F,T),T) | ((F,T),F) | ((F,T),F) | ((F,T),T) | ((F,T),T) | ((F,T),F) | ((F,T),F) |
4 | (F,F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) | ((F,F),T) | ((F,F),F) |
つまり、「P,Qの真理値の組み合わせ」と「P○Qの真理値の組み合わせ」のすべての組のうち、特定の組について割り当てたニーモニックが、AND(∧
)やOR(∨
)、IF(→
)である、ということです。
だから、なぜ「IF(ならば)」が上記のような組をとるかというと、「((P,Q),P→Q)
」列の組にニーモニックを割り当てる時、自然言語の語彙からもっとも名が体を表しているニーモニックを選ぶとすれば「IF(ならば)」だから、になりますかね。論理学の歴史を紐解いたわけではないので、私の想像ですが。
なぜ論理学の「ならば」は、日常用語の「ならば」と意味がずれているのかという疑問に対して、「そう定義したほうが便利だから」「都合がよいから」という簡便的説明をする人がいますが、ようはこういうことが言いたいのだと思います。
余談
プログラミング言語のif文(if式ではない)も、論理演算の「ならば(→
)」とは違います(if文は文であって式ではない)。コードで表現するとすれば、条件演算子の式((P) ? (Q) : true)
になるかと思います。