| English | 意味 |
|---|---|
| equivalent/ɪˈkwɪvələnt/ | 等価 |
| De Morgan's Laws/də ˈmɔːɡənz lɔːz/ | ド・モルガンの法則 |
1つの反例でブール変換を否定する
- 提案された変換は !(a && b) を !a && !b に変更します。a = true、b = false と設定します。
- 元の式はtrueですが、提案された変換はfalseです。ド・モルガンの法則では !a || !b が必要であり、これが元の式と一致します。
2つの条件が同じ意味を持つ場合
- 2つのブール式は、すべての入力に対して同じ結果 を出す場合に 同等 です。整数
xにおいて、x >= 5と!(x < 5)は同等です。どちらもxが5以上であるときにのみtrueになります。 - 副作用のないブール変数については、同等の式は同じ結果を持ちます。また、式がメソッドを呼び出したり状態を変えたりする場合、評価順序も確認してください。真値表は同等性を証明します:各行で出力が同じであれば同等です。
ド・モルガンの法則
- ド・モルガンの法則 は、AND/OR上のNOTを再書式化します:
!(a && b)は!a || !bと等価です。 !(a || b)は!a && !bに等しいです。このパターン:!を内部に押し込み、&&↔||を反転させます。
条件の簡略化
- ド・モルガンの法則と論理則を使って、短く、明確な同等式を書いてください。整数得点の場合、
!(score < 60)はscore >= 60になります——意味は同じで、読みやすくなります。 - 二重否定や外側の
!を取り除くことで意図が明確になることがあります。正確な入力領域と評価挙動を確認してください。文字数が少ないことはバグが少ないことを保証しません。
ド・モルガンの法則により、!(a && b) は以下と等価です...
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
! を内部に押し込み、&& を || に反転させます。
ド・モルガンの法則により、!(a || b) は以下と等価です...
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
! を内部に押し込み、|| を && に反転させます。
整数のスコアにおいて、 !(score < 60) と等価な式は何ですか?
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
「60未満ではない」は「60以上」を意味します。
2つのブール式がすべての入力に対して同じ結果を返せば、等価です。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
真値表の各行で同じ出力 ⇒ 等価。
ド・モルガンの法則を適用すると、!(a && b) は !a && !b になります。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
!a || !b になります — 演算子も反転する必要があります。
真理表によるテスト
- 2つの式が等価か確認するには、すべての入力に対して両方の式を表形式で計算します。各行が一致すれば等価であり、1つでも不一致があれば等価ではありません。
- 2つの純布尔変数には4つの入力行があり、これにより真理関数が完全に決定されます。これは任意のメソッド呼び出しの影響を列挙するものではなく、浮動小数点比較の改変すべてを検証するものではありません。
デ・モルガンの法則を適用する際は、!を分配するだけでなく演算子も反転させる必要がある。 !(a && b)は !a || !b (AND が OR に変換) であり、!a && !bと書くことは誤りである。暗記のヒント:NOT を中へ押し込み、&& ↔ || を入れ替える。迷った場合は、真理表で4行に収まるかを確認できる。
a=true, b=false のとき、 !(a && b)、 !a && !b、 !a || !b の値を順に求めよ。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
The mismatching middle expression is a counterexample to the proposed equivalence.
double の score が NaN の場合、 !(score < 60) and score >= 60 return となる式で同じ布尔値結果が得られるか。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
NaN に対して score < 60 and score >= 60 の比較はどちらも false となるため、否定された最初の式は true、二番目の式は false となる。
f() が false を返すとき、 !(f() && g()) を評価する間に g() は何回実行されるか。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
最初の演算子(false)によって短絡演算 && が停止するため、g() は呼び出されない。同等の式 !f() || !g() も g() をスキップする。
!(a && b) の書き換え:
- 誤り:
!a && !b。 - 正解(デ・モルガン):
!a || !b— AND は OR に反転する。 - 検証:
a = true, b = falseならば!(true && false) = !false = trueかつ!a || !b = false || true = true。✓
の推論を新しいケースへ適用せよ
- 純布尔変数の場合、すべての4つの入力ペアが等価性を証明します。ド・モルガンの法則は左から右への短路評価を維持します:
!(f() && g())と!f() || !g()は f が false のとき g をスキップします。 - 演算子の順序を入れ替えるのは異なる変換です。纯布尔変数では
a && bとb && aは同じ真理表を持ちますが、f() && g()とg() && f()は異なるメソッドを呼び出すことがあります。double 型 score=NaN の場合、!(score < 60)は true ですがscore >= 60は false です;整数比較規則は NaN には適用されません。
2つのブール式は、すべての入力に対して結果が一致する場合に等価である(真理表で証明可能)。デ・モルガンの法則:!(a && b) = !a || !b および !(a || b) = !a && !b — ! を内側へ押し込み、&& ↔ || を反転させる。これらを用いて条件をより明確な等価形に簡略化できる。