Есть ли способ переписать это выражение в более простой (но эквивалентной) форме?Могу ли я переписать это булево выражение в более простой форме?
!(foo && !bar)
Есть ли способ переписать это выражение в более простой (но эквивалентной) форме?Могу ли я переписать это булево выражение в более простой форме?
!(foo && !bar)
Как уже упоминалось, это может быть разрешено Законами ДеМоргана. Простые правила:
!(A && B) <-> !A || !B
Подумайте о том, что это означает: A && B
означает «А и В истинны.» Поэтому !(A && B)
означает, что «это не случай, когда оба А и В являются истинными» - другими словами, один или оба из них являются ложными.
!(A || B) <-> !A && !B
Подумайте об этом так: (A || B)
означает, что «либо А истинно, или B истинно (или А и В истинны).» Таким образом, !(A || B)
означает «это не тот случай, когда либо A истинно, либо что B истинно» - то есть ни одно из них не является истинным.
Таким образом,
!(foo && !bar)
означает, что это не тот случай, как "Foo" и "! Бар" истинны. По крайней мере один из них должен быть ложным.
!(foo && !bar) -> (!foo || !!bar) -> (!foo || bar)
Важное примечание: Обычно (математически и во многих языках программирования) «или» это включено или, так (A || B)
означает «либо А истинно, B истинно, или оба истинны.»
Еще одна нотация: «->» означает «подразумевает» (в математическом смысле) и «< ->» означает, что утверждения эквивалентны (то есть они подразумевают друг друга); это также иногда называют «тогда и только тогда» или просто «iff».
См. Https://en.m.wikipedia.org/wiki/De_Morgan%27s_laws – MrTux
@MrTux, если бы я смог понять эту статью, вряд ли я задал бы этот вопрос –