Что упрощает? A && (a || b)?
Я немного запутался в !a&&(a||b)
. Если я смотрю на него напрямую и просто интерпретирую его, он выглядит так, как будто он совпадает с
!a&&a or !a&&b
но это кажется немного странным, потому что поскольку a
не может быть истинным и ложным, это было бы справедливо только в том случае, если последнее было истинным. Я также интерпретировал это так:
!a || a&&b
Я действительно не знаю, как я придумал этот, но он выглядит более логичным, поскольку нет противоречий. Может ли кто-нибудь помочь мне в этом, пожалуйста?
Ответы
Ответ 1
Таблица тавтологии
| a | b | !a | a || b | !a && (a || b) | !a && b | [ !a && (a || b) ] <=> [!a && b] |
|---|---|----|--------|------------------|---------|-------------------------------------|
| 0 | 0 | 1 | 0 | 0 | 0 | 1 |
| 0 | 1 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 | 1 |
"Proof"
Ответ 2
Вы можете упростить его так: (!a && b)
, потому что в выражении (!a && a || !a && b)
условие !a && a
всегда false
Ответ 3
В Java, как и в большинстве языков 1 унарный !
имеет более высокий приоритет, чем &&
.
Итак, !a&&(a||b)
есть (!a)&&(a||b)
Вы можете представить таблицу истинности этого выражения с помощью карты Карно:
| a = 0 | a = 1 |
------+-------+-------+
b = 0 | 0 | 0 |
------+-------+-------+
b = 1 | 1 | 0 |
------+-------+-------+
Теперь легко видеть, что единственный истинный случай - это когда (!a) && b
.
Итак, !a&&(a||b)
есть !a && b
1 См. комментарии ниже.
Ответ 4
Это просто означает !a && b
, a должно быть false, а b должно быть истинным, поскольку оно должно быть истинным
Ответ 5
(!a && a) || (!a && b)
является правильным расширением этого (с использованием закона дистрибутивности).
Это можно упростить до !a && b
.
Распределяющие законы для булевой алгебры:
a && (b || c) == (a && b) || (a && c)
a || (b && c) == (a || b) && (a || c)
Ответ 6
!a && (a || b)
можно рассматривать с бинарной таблицей истинности,
a b out
true true false
false true true
false false false
true false false
Итак, единственное, что проходит, - это
(!a && b)
и мы могли бы применить законы DeMorgan к этому и получить
!(a || !b)
Ответ 7
Я бы рекомендовал вам использовать Wolfram alpha для упрощения, как это, может быть удивительно, что он может делать с вашими выражениями иногда. Это конкретное выражение упрощается до !a && b
Ссылка на WA: http://www.wolframalpha.com/input/?i=%21a%26%26%28a%7C%7Cb%29
Ответ 8
Похоже, это упростит только
!a && b
Если вы откроете скобку, у вас будет
(!a && a) || (!a && b)
Первая часть (! a && a) всегда неверна, поэтому вы можете просто опустить ее.
Ответ 9
Я предполагаю, что "или" имеет более низкий приоритет (обычно логическая логика && или || равны, и, как таковая, это было бы неоднозначным
!a&&a or !a&&b
= (!a&&a) || (!a && b)
= false || (!a && b)
// because X and not X will never be true for any combination of X
= (!a && b)
// because false || X == X for any value of X
= !a && b
// removed parens