2016-09-27 1 views
0

Есть ли способ переписать это выражение в более простой (но эквивалентной) форме?Могу ли я переписать это булево выражение в более простой форме?

!(foo && !bar) 
+0

См. Https://en.m.wikipedia.org/wiki/De_Morgan%27s_laws – MrTux

+1

@MrTux, если бы я смог понять эту статью, вряд ли я задал бы этот вопрос –

ответ

2

Как уже упоминалось, это может быть разрешено Законами ДеМоргана. Простые правила:

!(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».