微積分と物理​/論理3

Unity学習帳2冊目微積分と物理 / 論理3

論理表(ビット演算) anchor.png

こちらは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))
AB
11011011
10001100
01101110
00100011

<メモ>

  • 論理式は括弧の一番深い所から計算を始める
  • A,BやP,Q,R等を原子式と呼ぶ。原始式にひとつだけ\(\neg\)をつけて作られる\(\neg P \)や\(\neg Q \)のような論理式をリテラルと呼ぶ。\( P,Q,\neg P,\neg P \)などがリテラルとなる
  • 日本語の断言や断定は独立したリテラルとなる(かならずしも「ならば」が利用される訳でない)
  • 「したがって」と「ならば(\(\rightarrow \))」は違う
  • 日本語の句読点(、。)によって終端がはっきりしていれば、そこで論理式による人工言語も「\(,\)」によって区切られる
Page Top

真理値分析の真理表 anchor.png

例:\(\neg ((P\wedge (P\rightarrow Q))\rightarrow R)\)の真理値分析の為の真理表を完成させよ

\(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)\)
111
110
101
100
011
010
001
000

原子式が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#を利用してコーディングすると以下になる

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
 
 
 
 
-
|
|
|
-
-
!
|
|
|
|
-
!
|
|
|
|
|
|
|
|
|
|
|
|
|
!
!
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'));
    }
}

計算結果は以下になる。コードの出力した結果と見比べてみて欲しい

\(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)\)
1111110
1101101
1010010
1000010
0111010
0101010
0011010
0001010

文法はシンタックス。その文の意味をセマンティクスと呼ぶ。たとえば文の書き方が間違っていた場合、シンタックスエラーになる。その文の意味の解釈が間違っていた場合はセマンティクスエラーとなる


添付ファイル:

トップ   差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Last-modified: 2015-08-27 (木) 22:45:29 (JST) (3167d) by osinko