Подтвердить что ты не робот

Что упрощает? A && (a || b)?

Я немного запутался в !a&&(a||b). Если я смотрю на него напрямую и просто интерпретирую его, он выглядит так, как будто он совпадает с

!a&&a or !a&&b

но это кажется немного странным, потому что поскольку a не может быть истинным и ложным, это было бы справедливо только в том случае, если последнее было истинным. Я также интерпретировал это так:

!a || a&&b

Я действительно не знаю, как я придумал этот, но он выглядит более логичным, поскольку нет противоречий. Может ли кто-нибудь помочь мне в этом, пожалуйста?

4b9b3361

Ответ 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