命題論理
真か偽かが決まる文を1つの部品として扱い、それらを組み合わせる論理。
一階述語論理との違い
命題論理は、文の内部構造を見ず、文全体を1つの記号として扱う。
:太郎はプログラマーである :太郎はHaskellを使う
**一階述語論理**では、文を「対象」と「性質・関係」に分解できる。
: はプログラマー : は を使う
# 主な構成要素
# 命題
真か偽かを判断できる文。
- 「2は偶数である」
- 真なので命題
- 「3は偶数である」
- 偽だが、真偽を判断できるので命題
- 「
は偶数である」 が未定では真偽を判断できないので、そのままでは命題ではない
命題は
# 論理演算
- 否定
- 「
ではない」
- 「
- 論理積
- 「
かつ 」 - 両方が真の場合だけ真
- 「
- 論理和
- 「
または 」 - 少なくとも一方が真なら真
- 「
- 含意
- 「
ならば 」 が真なのに が偽の場合だけ偽
- 「
- 同値
- 「
と は同値」 と の真偽が同じ場合に真
- 「
日常語との違い
また、
「
含意の真理値表
| 真 | 真 | 真 |
| 真 | 偽 | 偽 |
| 偽 | 真 | 真 |
| 偽 | 偽 | 真 |
# プログラミングとの対応
命題を Bool 型の値と考えると、論理演算は Bool を操作する関数とみなせる。
not :: Bool -> Bool
(&&) :: Bool -> Bool -> Bool
(||) :: Bool -> Bool -> Bool
Hint
📝プログラマーのための圏論にある「Bool を返す関数は述語」という話とは、次のように区別できる。
isEven :: Integer -> Bool -- 述語
isEven 4 -- 真偽が確定した命題
isEven 4 && 4 > 0 -- 命題論理による組み合わせ