3値論理

プログラマの数学の論理の章の続き。trueとfalseを得られないときに使われる表現がundefined(未定義)。trueとfalseとundefinedを使った論理のことを3値論理と言われる。

カルノー図

プログラマの数学の論理の章の続き。カルノー図について学習した。複雑な論理式を整理したり単純化させるために使うもの。trueとfalseの全体を見るときに役立つと思った。

 (\lnot A) \land B
 (\lnot A) \land (\lnot B)
 A \land B

これをカルノー図に使うと以下の論理式にまとめることができる

 (\lnot A) \lor B

双対性

プログラマの数学の論理の章の続き。論理には双対性(そうついせい)が適応される。and演算をor演算に書き換えるときに使う。やり方はシンプルで

trueとfalse
Aと \lnot A
 \land \lor

それぞれ交換すると出来る。ド・モルガンの法則も双対性があるからandをorに、orをandに、変換できるみたいだ。

 (\lnot A) \lor (\lnot B) =  \lnot(A \land B)
 (\lnot A) \land (\lnot B) =  \lnot(A \lor B)

最初のor演算をand演算に変換しているところを双対性で見ていくと

 \lor \landにひっくり返す。
 \lnot A \lnot B A Bにひっくり返す。

ここまでで、 (A \land B)となる。あとはtrueをfalseにする。そうすると \lnot(A \land B)となる。

オニオンスープ飲みたい

f:id:onionsword:20170725215723j:plain

 

音楽を聴きながらハンドスピナーをくるくるさせるのが楽しくて精神の安定を手にいれることができる。Hiphopとかと相性よくて繰り返されるドラムの音と同時にクルッと回転させることによって心地よさが生まれる。バシ、くる。バシ、くる。

 

単純なルーティンな手遊びをやるだけで精神が安定するなら誰でもやるだろうと思う人はいるだろうけどこれは効果絶大。部屋にこもってストレスを溜めてしまう自分は、こういうのを一つでも持っておくだけで違う気がする。

 

プラモデルを作ることも精神の安定をもたらす。コンピュータをシャットダウンさせてテーブルに明かりを照らして黙々と作る。プラモ自体も1000円程で売ってるのでニッパーとカッターを買ってきて適当に作ればいいことにしている。

 

そういえば昔。マウスをクリックしまくってコンピュータを破壊するフラッシュゲームがあったんだけど、あれも似たような効果をもたらしてたのか。

 

まあ適当にストレスを発散させることが好きなのです。

AとBからつくられるすべての演算の真理値表

プログラマの数学の論理の章の続き。

A B
true true
true false
false true
false false
常にfalse  A \land B  A \land (\lnot B) A  (\lnot A) \land B B  \lnot (A = B)  A \lor B  \lnot(A \lor B)
false true false true false true false true false
false false true true false false true true false
false false false false true true true true false
false false false false false false false false true
A=B  \lnot B  A \lor (\lnot B)  \lnot A  (\lnot A) \lor B  \lnot(A \land B) 常にtrue
true false true false true false true
false true true false false true true
false false false true true true true
true true true true true true true

上記の「falseを0」「trueを1」に置き換えると2進数で0から15を表現した数となる。

常にfalse  A \land B  A \land (\lnot B) A  (\lnot A) \land B B  \lnot (A = B)  A \lor B  \lnot(A \lor B)
0 1 0 1 0 1 0 1 0
0 0 1 1 0 0 1 1 0
0 0 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 1
A=B  \lnot B  A \lor (\lnot B)  \lnot A  (\lnot A) \lor B  \lnot(A \land B) 常にtrue
1 0 1 0 1 0 1
0 1 1 0 0 1 1
0 0 0 1 1 1 1
1 1 1 1 1 1 1

含意

数学のプログラマーの論理の章の続き。含意(がんい)という論理演算が出てきた。AならばB。
記号で表現すると

A \to B

本書によると含意は直感的に分かりづらい部分がある。真理値表を出してみる。

A B A \to B
true true true
true false false
false true true
false false true

初見で見たとき。AならばBというのはAがTrueで初めてBがTrueになるものだと思う。だけど真理値表にはAがFalseのときBがTrueとなっている。

前提条件であるAがfalseであれば、Bの真偽によらず「AならばB」の値はtrueになるのです
これが、論理における「ならば」の定義です。


頭の中で処理しづらいので、処理しやすい論理演算に置き換えると

A \to B = \lnot A \lor B

に置き換えることができる。or演算で対応すると割と分かりやすい。

否定,論理積,論理和,排他的論理和,等値

プログラマの数学の論理の章を読んでる。否定,論理積,論理和,排他的論理和,等値を知った。真理値表が便利だった。Wikipediaによると

真理値表(しんりちひょう、Truth table)は、論理関数の、入力の全てのパターンとそれに対する結果の値を、表にしたものである。

否定

A \lnot A
true false
false true

論理積

A B A \land B
true true true
true false false
false true false
false false false

論理和

A B A \lor B
true true true
true false true
false true true
false false false

排他的論理和

A B A \oplus B
true true false
true false true
false true true
false false false

等値

A B A=B
true true true
true false false
false true false
false false true

プログラマの数学にはベン図もついてるのでそれも一緒に見ておきたい