Logo

Nola's Backyard

命題論理

真か偽かが決まる文を1つの部品として扱い、それらを組み合わせる論理。

一階述語論理との違い

命題論理は、文の内部構造を見ず、文全体を1つの記号として扱う。

  • PP:太郎はプログラマーである
  • QQ:太郎はHaskellを使う
  • P⇒QP \Rightarrow Q

**一階述語論理**では、文を「対象」と「性質・関係」に分解できる。

  • Programmer(x)\mathrm{Programmer}(x):xx はプログラマー
  • Uses(x,y)\mathrm{Uses}(x,y):xx は yy を使う
  • ∀x (Programmer(x)⇒Uses(x,Haskell))\forall x\, (\mathrm{Programmer}(x) \Rightarrow \mathrm{Uses}(x,\mathrm{Haskell}))

# 主な構成要素

# 命題

真か偽かを判断できる文。

  • 「2は偶数である」
    • 真なので命題
  • 「3は偶数である」
    • 偽だが、真偽を判断できるので命題
  • 「xx は偶数である」
    • xx が未定では真偽を判断できないので、そのままでは命題ではない

命題は P,Q,RP,Q,R などの記号で表す。

# 論理演算

  • 否定 ¬P\lnot P
    • 「PP ではない」
  • 論理積 P∧QP \land Q
    • 「PP かつ QQ」
    • 両方が真の場合だけ真
  • 論理和 P∨QP \lor Q
    • 「PP または QQ」
    • 少なくとも一方が真なら真
  • 含意 P⇒QP \Rightarrow Q
    • 「PP ならば QQ」
    • PP が真なのに QQ が偽の場合だけ偽
  • 同値 P⇔QP \Leftrightarrow Q
    • 「PP と QQ は同値」
    • PP と QQ の真偽が同じ場合に真
日常語との違い

P∨QP \lor Q は、PP と QQ の両方が真の場合も真になる。

また、P⇒QP \Rightarrow Q は因果関係を表すわけではない。
「PP が真なのに QQ が偽」という反例がないことを表す。

含意の真理値表
PP QQ P⇒QP \Rightarrow Q
真 真 真
真 偽 偽
偽 真 真
偽 偽 真

# プログラミングとの対応

命題を Bool 型の値と考えると、論理演算は Bool を操作する関数とみなせる。

not  :: Bool -> Bool
(&&) :: Bool -> Bool -> Bool
(||) :: Bool -> Bool -> Bool
Hint

📝プログラマーのための圏論にある「Bool を返す関数は述語」という話とは、次のように区別できる。

isEven   :: Integer -> Bool -- 述語
isEven 4                  -- 真偽が確定した命題
isEven 4 && 4 > 0         -- 命題論理による組み合わせ