Upgrade to Pro — share decks privately, control downloads, hide ads and more …

真理とは何か

tsuda.a
December 06, 2015

 真理とは何か

真理についてまとめてみました #違う

tsuda.a

December 06, 2015
Tweet

More Decks by tsuda.a

Other Decks in Programming

Transcript

  1. 真理値表 False True False False False True False True False

    True False False True True True True AND OR
  2. 3値論理の場合の真理値表 False Unknown True False False False False Unknown False

    Unknown Unknown True False Unknown True AND OR False Unknown True False False Unknown True Unknown Unknown Unknown True True True True True
  3. 確かめてみる (oracle) • 比較 • 真 select 1 from dual

    where ('1' = '1'); • 偽 select 1 from dual where not('1' = '0'); • Unkhown select 1 from dual where ('1' = null); select 1 from dual where not('1' = null); どちらもヒット しない ヒットする ヒットする ※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
  4. 確かめてみる (oracle) • AND select 1 from dual where (1

    = 1) and (null = null); select 1 from dual where not((1 = 0) and (null = null)); • OR select 1 from dual where (1 = 1) or (null = null); select 1 from dual where not((1 = 0) or (null = null)); True False Unkown ※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
  5. 確かめてみる (oracle) • AND select 1 from dual where (1

    = 1) and (null = null); select 1 from dual where not((1 = 0) and (null = null)); • OR select 1 from dual where (1 = 1) or (null = null); select 1 from dual where not((1 = 0) or (null = null)); ヒットしない [Unknown判定] ヒットする [not(False)判定] ヒットしない [Unknown判定] ヒットする [True判定] ※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。
  6. 3値論理の論理演算結果の覚え方 False (=0) Unknown (=1.5) True (=1) False (=0) False

    False False Unknown (=1.5) False Unknown Unknown True (=1) False Unknown True AND OR False (=0) Unknown (=1.5) True (=1) False (=0) False Unknown True Unknown (=1.5) Unknown Unknown True True (=1) True True True False < Unknown < True を満たす数値をてきとーに割り当てて、 ・AND は値のもっとも小さいもの ・OR は値のもっとも大きいもの が結果になります。
  7. ちなみに null と NaN は違う (oracle) create table test (

    a BINARY_FLOAT ); insert into test values (1000000.0); insert into test values (0.0000001); insert into test values (BINARY_FLOAT_INFINITY); insert into test values (BINARY_FLOAT_NAN); insert into test values (NULL); select * from test where a > 0 ※上記は、http://sqlfiddle.com/ で Oracle 11g に設定して確認することができます。 null はヒットしないが、 NaN はヒットする
  8. Order by だと null が最大になる? • 処理系依存。 • データベースによって異なる。 •

    指定で変えられる。 (oracle) • select * from test order by a nulls first • select * from test order by a nulls last
  9. 9値論理 Character 意味 'U' uninitialized 未初期化 'X' strong drive, unknown

    logic value 強い 不明 '0' strong drive, logic zero 強い 0 '1' strong drive, logic one 強い 1 'Z' high impedance ハイインピーダンス 'W' weak drive, unknown logic value 弱い 不明 'L' weak drive, logic zero 弱い 0 'H' weak drive, logic one 弱い 1 '-' don't care 不関知
  10. なにこれ? • VHDL という言語で定義されている論理型 (std_logic 型) • IEEE1164 に定義されている。 https://en.wikipedia.org/wiki/IEEE_1164

    • 3値論理と違って数学的な論理ではなく、電気回路にとって都合がよいように定義して いる(のだと思う)
  11. 9値論理の場合の真理値 and U X 0 1 Z W L H

    - / U U 0 U U U 0 U U U X 0 X X X 0 X X X 0 0 0 0 0 0 0 0 1 X X 0 1 X 1 X X 0 X X Z X 0 X X W 0 0 0 L 1 X H X - or U X 0 1 Z W L H - / U U U 1 U U U 1 U U X X 1 X X X 1 X X 0 1 X X 0 1 X 0 1 1 1 1 1 1 1 X X X 1 X Z X X 1 X W 0 1 X L 1 1 H X - not U X 0 1 Z W L H - U X 1 0 X X 1 0 X
  12. ところで「不明」は null っぽいとしても、「強い」「弱い」って何よ? Character 意味 'U' uninitialized 未初期化 'X' strong

    drive, unknown logic value 強い 不明 '0' strong drive, logic zero 強い 0 '1' strong drive, logic one 強い 1 'Z' high impedance ハイインピーダンス 'W' weak drive, unknown logic value 弱い 不明 'L' weak drive, logic zero 弱い 0 'H' weak drive, logic one 弱い 1 '-' don't care 不関知 強い 弱い
  13. 答え。 • 強い信号と弱い信号が衝突した場合、強い信号が有効になる。 resolution U X 0 1 Z W

    L H - / U U U U U U U U U U X X X X X X X X X 0 X 0 0 0 0 X 0 1 1 1 1 1 X 1 Z W L H X Z W W W X W L W X L H X H X - 解決関数という謎のしくみがある