■
[数学][会社]*社内数学勉強会 第三回 ド・モルガンの法則
段々難しくなってきました><
ド・モルガンの法則とは
(¬A)∨(¬B)は、¬(A∧B)と置き換える事ができ、(¬A)∧(¬B)は¬(A∨B)と置き換える事ができる。この法則の事。
わけわかめ
訳が解らないので、自然言語に直してみる。
(¬A)∨(¬B)
Aで無い、または、Bで無い
¬(A∧B)
AかつB、で無い
(¬A)∧(¬B)
Aでない、かつ、Bでない
¬(A∨B)
AかつB、で無い
まだよくわからない
日本語にすると余計わからないかも><
多分、¬(A∧B)とかっこでひとまとめにしているのがポイントで、 雰囲気的にはこれも「AかBのどちらかが¬」て意味合いなんだと思う。
Tips ∨(または)と∧(かつ)の覚え方
- または、の方を覚えるよ!
- また→またと言えばコマネチ→V(ブイの字)→∨
- 残ったもう一つが∧(かつ)
「またはコマネチ」と覚えよう!やったね!もう覚えたね!
双対性
登場人物が
- Aさん
- Bさん
- Cさん
- Dさん
- Eさん
だったとして、
AさんとBさんとCさんとDさんがいない時
という条件文を書こうとしたら、
Eさん以外がいない時
としても同じ意味になる。条件文が多くなるとIFじゃなくてUNLESSの方がいい、みたいな。
カルノー図
ランプゲームで例える
青と黄色の二つのランプがあり、
- 青が消えていて黄色が点いている時はスイッチを押す
- 青が点いていて黄色が消えている時はスイッチを押す
- 両方とも点いている時はスイッチを押す
というゲームがあったとします。
なお、以降はこのように略します。
- 青× 黄○
- 青○ 黄×
- 青○ 黄○
これを論理式にすると、
(青→A 黄→B とする)
((¬A)∧B) ∨ (A∧(¬B)) ∨ (A∧B)
となります。
これをカルノー図という図で表します。○がある部分が、ゲームのスイッチを押す時です。
B | B | |||||
F | T | |||||
A | F | ○ | ○ | |||
A | T | ○ |
この○を、隣接している同士でグループ化(隣り合ってる同士を繋げる事)すると、Aのfalseの行と、Bのtrueの列にグループ化できます。
これを論理式にすると、
(¬A)∨B
となります。
ランプが3つになったら
- 青× 黄× 赤×
- 青▲ 黄× 赤○
- 青× 黄○ 赤▲
- 青○ 黄○ 赤○
(▲はどちらでもよいの意味)
青→A 黄→B 赤→C
これをカルノー図にすると
BC | BC | BC | BC | |||||||
FF | FT | TT | TF | |||||||
A | F | ○ | ○ | ○ | ○ | |||||
A | T | ○ | ○ |
となります。
○がついてる部分をグループ化すると、Aのfalseの列と、Afalse Bfalse Ctrue、Afalse Btrue Ctrue、Atrue Bfalse Ctrue、Atrue Btrue Ctrueの四角になります(超解りづらい><)。
これを論理式に直すと、
(¬A)∧C
となります。
これらがプログラミングの何に役立つかと言うと、複雑な条件式を作る時に簡潔に書けるようになる。
ただ余りにも簡潔にしすぎると、一年後とかに見直したら時に自分でも「?」ってなるよね、との事。
3つめの値
これまではtrueとfalseだけだったけど、ここでもう一つの値が登場する。それが未定義値を意味するundefined.
未定義値っていうのは、真でも偽でもなく、「わからない」とかそんな感じの。プログラムだと言語によって微妙に扱いが違ったりする。
true、false、undefinedの3つの値を使った論理を3値論理という。
条件付論理積(かつ)
A&&B
*A | *B | *A&&B | ||
T | T | T | ||
T | F | F | ||
T | U | U | ||
F | T | F | ||
F | F | F | ||
F | U | F | ||
U | T | U | ||
U | F | U | ||
U | U | U |
- Aがtrueなら、Bの値はA&&Bと同じになる
- Aがfalseなら、Bは関係なくfalse
- Aがundefinedなら、Bは関係なくundefined
- B&&Aとは結果が異なる
条件付論理和(または)
*A | *B | *A||B | ||
T | T | T | ||
T | F | T | ||
T | U | T | ||
F | T | T | ||
F | F | F | ||
F | U | U | ||
U | T | U | ||
U | F | U | ||
U | U | U |
- Aがtrueなら、Bは関係なくtrue
- Aがfalseなら、Bの値がA||Bの値と同じ
- Aがundefienedなら、Bは関係なくundefiened
- B||Aとは結果が異なる
3値論理での否定(ノット)
*A | *!A | |
T | F | |
F | T | |
U | U |
- 未定義はひっくり返しても未定義なので、undefienedはundefienedになる。