ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、テストなどについて学んだことを記録するブログです。

ド・モルガンの法則、そしてキルアのOR - その2

 今回はキルアとスタンド使いが出てきます。

ド・モルガンの法則の適用

法則の復習

 ド・モルガンの法則とは、以下の2つですね。
  • ¬(P ∨ Q) ⇔ ¬P ∧ ¬Q
  • ¬(P ∧ Q) ⇔ ¬P ∨ ¬Q
 腑に落とすために、次の例文を考えてみましょう。
わたしの名はダービーというんだ! オービーでもバービーでもない!

 

 命題Pを「オービーである」、命題Qを「バービーである」とすると、「オービーでもバービーでもない」という言明は「オービーでない、かつ、バービーでない」、つまり「¬P ∧ ¬Q」ということになります。
 これをド・モルガンの法則第1式で置換すると、「(オービーである、または、バービーである)ということはない」、ということになります。

NOT を消す試み

 さて、何故こんなことを言い出したかというと、AND、OR、NOT が日常語に現れたとき、最も紛らわしいのはNOT だと思っているからです。で、ド・モルガンの法則を使えばその紛れを軽減することができるかも知れません。
 たとえば、次のようなちょっとわかりづらい文章を書き換えていきましょう。
休日や19時を過ぎての入店でなければ、クーポンが使用可能です。
 この前半部分を論理式に変換しやすいように書くと、
(休日である または 19時より後) でない
 ド・モルガンの法則を適用して、
休日でない かつ 19時より後でない
 ここで、日常語ならではの変換をほどこします。
平日である かつ 19時以前である
 で、最終的に得られた命題は、
平日の19時以前であれば、クーポンが使用可能です。
 最初の命題より、ちょっとだけ人間が理解しやすくなりました。
 つまり、命題を結合した論理式全体にかかっていた否定語を、ド・モルガンの法則によって個々の命題に直接くっつけたうえで、日常語の変換をすることで、否定語を消すことができるかも知れないというお話です。特に大小関係は、「以上でない」が「未満」に変換できたりと、簡単です。
 ただし、注意点が2つあります。

(1)本当に補集合か?

 否定語を消して、¬A という表現を B に変換する場合に、B は A の補集合でなければなりません。AとBが、MECE であるといってもいい。
 上の例でいうと、「休日以外」=「平日」である、つまり、「すべての日は、休日か平日のいずれかである」ことが保証されていないと、ダメです。
 たとえば、これも秋山浩一さんのソフトウェアテスト技法ドリルで学んだことですが、ISO 5218 では、「人の性別の表示のためのコード」として、4つのコードを定義しています。「男性以外」を、そのまま「女性」と変換していいかは、考慮が必要ということですね。

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

ソフトウェアテスト技法ドリル―テスト設計の考え方と実際

 

(2)大小関係の表現自体が・・・

 そもそも、大小関係に関する日常語、たとえば「以上」「以下」「より大きい」「より小さい(未満)」という言葉自体が紛らわしい、避けろという話もあります。たしかに、不等号で表現する方が、紛れはないですね。

英語ではどうなっているのか

NOT と OR と、ド・モルガン

 英語の事例を見てみましょう。
 下の絵は、『HUNTER×HUNTER』というマンガのヒトコマです。

6-1_52f3e2bb

 この右の吹き出しのセリフ、「右手と左足を使っていない」という表現は、英語でどう訳されていると思いますか?

6-2_9d37a32c

 He hasn't used his right hand or left leg yet!
 「右手左足使っていない」と言うことを表すのに or を使うのは、ちょっと違和感がないでしょうか。
 でも、ド・モルガンの法則を使って、こう理解することができます。
 NOT (right hand OR left leg)
 → (NOT right hand) AND (NOT left leg)
 つまり、右手を使っていない、かつ 左足を使っていない、と。
 ここで and を使うとどうなるか。
 NOT (right hand AND left leg)
 → (NOT right hand) OR (NOT left leg)
 つまり、右手を使っていない、または、左足を使っていない。これだと、「どっちも使っていない」という意味にならないですね。

Either or と Neither nor

 命題AとBについて、次のような対応があります。
  • both A and B
     → A AND B
  • either A or B
     → A XOR B
  • neither A nor B
     → (NOT A) AND (NOT B) ⇒ NOT (A OR B) 
 普通の論理和にぴったり一致する表現は見当たりませんね。Google Scholar で OR を用いると、排他的論理和XORで検索されるそうです。 
 はい、あまり英語のことを書くとボロが出るので控えめにします。