1: 2015-08-26 (水) 20:40:59 osinko |
2: 2015-08-26 (水) 22:19:08 osinko |
| TITLE:微積分と物理/論理3 | | TITLE:微積分と物理/論理3 |
| + | #jsmath |
| | | |
| + | **論理表(ビット演算) [#odf9d821] |
| こちらはC#のビット演算向きに論理表を書いています | | こちらはC#のビット演算向きに論理表を書いています |
| + | |
| + | |CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c |
| + | |論理式|<|<|\(\neg A\)|\(A\wedge B\)|\(A\vee B\)|\(A \underline{\vee}B\)|\(A\rightarrow B\)|\(A\leftrightarrow B\)| |
| + | |日本訳|<|<|でない|かつ|または|排他|ならば|双条件| |
| + | |C#ビット演算|<|<|(~A)|(A&B)|(A|B)|(A^B)|(~A|B)|((~A|B)&(~B|A))| |
| + | |A|B|| | | | | | | |
| + | |1|1||0|1|1|0|1|1| |
| + | |1|0||0|0|1|1|0|0| |
| + | |0|1||1|0|1|1|1|0| |
| + | |0|0||1|0|0|0|1|1| |
| + | |
| + | <メモ> |
| + | -論理式は括弧の一番深い所から計算を始める |
| + | -A,BやP,Q,R等を原子式と呼ぶ。原始式にひとつだけ\(\neg\)をつけて作られる\(\neg P \)や\(\neg Q \)のような論理式をリテラルと呼ぶ。\( P,Q,\neg P,\neg P \)などがリテラルとなる |
| + | -日本語の断言や断定は独立したリテラルとなる(かならずしも「ならば」が利用される訳でない) |
| + | -「したがって」と「ならば(\(\rightarrow \))」は違う |
| + | -日本語の句読点(、。)によって終端がはっきりしていれば、そこで論理式による人工言語も「\(,\)」によって区切られる |
| + | |
| + | ***真理値分析の真理表 [#o165592c] |
| + | |
| + | 例:\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)の真理値分析の為の真理表を完成させよ |
| + | |
| + | |CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c |
| + | |\(P\)|\(Q\)|\(R\)|\(P\rightarrow Q \)|\( P\wedge (P\rightarrow Q) \)|\( (P\wedge (P\rightarrow Q))\rightarrow R\)|\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)| |
| + | |1|1|1| | | | | |
| + | |1|1|0| | | | | |
| + | |1|0|1| | | | | |
| + | |1|0|0| | | | | |
| + | |0|1|1| | | | | |
| + | |0|1|0| | | | | |
| + | |0|0|1| | | | | |
| + | |0|0|0| | | | | |
| + | |
| + | 原子式がP,Q,Rと3つある時、その真理値の組み合わせは8通りとなる。これを順序良く漏れなく組み合わせを書くには、ある法則に従って書くと良い。1番右のRは1を始めにして1と0を交互に書く。次のQは1を始めとして1と0を二個ずつ交互に書く。次のPは1と0を4個ずつ交互に書く。そうすると8つの場合が綺麗に並ぶことになる |
| + | |
| + | 真理分析を行う際は論理式の括弧の内側から計算を始める。\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)の場合、\(P\rightarrow Q \)から始める。C#で計算させる場合でも同様、式の変換は括弧の内側から始める。下記のコードのtotal部分がこの論理式をまとめて書いたものになっている。この時、括弧の計算範囲をしっかり把握し区切る事が重要になっている |
| + | |
| + | この論理表の作成にC#を利用してコーディングすると以下になる |
| + | |
| + | #code(csharp){{ |
| + | using UnityEngine; |
| + | using System.Collections; |
| + | using System; |
| + | |
| + | public class Logic2 : MonoBehaviour |
| + | { |
| + | int mask, p, q, r; |
| + | |
| + | void Start () |
| + | { |
| + | //2進数でint値を設定 |
| + | |
| + | p = Convert.ToInt32 ("11110000", 2); |
| + | q = Convert.ToInt32 ("11001100", 2); |
| + | r = Convert.ToInt32 ("10101010", 2); |
| + | |
| + | //ビットマスク |
| + | mask = Convert.ToInt32 ("11111111", 2); |
| + | |
| + | int PconditonalQ = (~p | q) & mask; // p⇒q |
| + | int PconjunctionPconditonalQ = (p & PconditonalQ) & mask; // p^(p⇒q) |
| + | int PconjunctionPconditonalQconjunctionR = (~PconjunctionPconditonalQ | r) & mask; // (p^(p⇒q))⇒r |
| + | int negationPconjunctionPconditonalQconjunctionR = ~PconjunctionPconditonalQconjunctionR & mask; // ¬((p^(p⇒q))⇒r) |
| + | |
| + | int total = (~(~(p & (~p | q)) | r)) & mask; //¬((p^(p⇒q))⇒r) |
| + | |
| + | print (Convert.ToString (PconditonalQ, 2).PadLeft (8, '0')); |
| + | print (Convert.ToString (PconjunctionPconditonalQ, 2).PadLeft (8, '0')); |
| + | print (Convert.ToString (PconjunctionPconditonalQconjunctionR, 2).PadLeft (8, '0')); |
| + | print (Convert.ToString (negationPconjunctionPconditonalQconjunctionR, 2).PadLeft (8, '0')); |
| + | print (Convert.ToString (total, 2).PadLeft (8, '0')); |
| + | } |
| + | } |
| + | }} |
| + | |
| + | 計算結果は以下になる。コードの出力した結果と見比べてみて欲しい |
| + | |CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|CENTER:|c |
| + | |\(P\)|\(Q\)|\(R\)|\(P\rightarrow Q \)|\( P\wedge (P\rightarrow Q) \)|\( (P\wedge (P\rightarrow Q))\rightarrow R\)|\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)| |
| + | |1|1|1|1|1|1|0| |
| + | |1|1|0|1|1|0|1| |
| + | |1|0|1|0|0|1|0| |
| + | |1|0|0|0|0|1|0| |
| + | |0|1|1|1|0|1|0| |
| + | |0|1|0|1|0|1|0| |
| + | |0|0|1|1|0|1|0| |
| + | |0|0|0|1|0|1|0| |
| + | |
| + | 文法はシンタックス。その文の意味をセマンティクスと呼ぶ。たとえば文の書き方が間違っていた場合、シンタックスエラーになる。その文の意味の解釈が間違っていた場合はセマンティクスエラーとなる |