Являются ли || а также! операторов, достаточных для создания всех возможных логических выражений?

Логическое выражение ( a && b ) (как a, так и b имеет логические значения) может быть написано, например, как !(!a || !b). Разве это не означает, что && является "ненужным"? Означает ли это, что все логические выражения могут быть сделаны только с использованием || и !?

Ответ 1

Да, как указывали другие ответы, набор операторов, состоящий из || и !, функционально завершен. Вот конструктивное доказательство этого, показывающее, как использовать их для выражения всех шестнадцати возможных логических связок между булевыми переменными A и B:

Обратите внимание, что как NAND, так и NOR сами по себе функционально полны (что может быть доказано с использованием того же метода выше), поэтому, если вы хотите проверить, что набор операторов функционально завершен, достаточно показать, что вы можете выразить либо NAND или NOR.

Вот график, показывающий диаграммы Венна для каждой из перечисленных выше соединений:

введите описание изображения здесь

[источник]

Ответ 2

То, что вы описываете, это функциональная полнота.

Здесь описывается набор логических операторов, достаточный для "выражения всех возможных таблиц истинности". Ваш оператор Java, { ||, !}, достаточен; он соответствует множеству {∨, ¬}, который указан в разделе "Минимальные функционально полные операторные множества".

Набор всех таблиц истинности означает все возможные наборы из 4 булевых значений, которые могут быть результатом операции между двумя булевыми значениями. Поскольку существует 2 возможных значения для булева, существуют 2 4 или 16 возможных таблиц истинности.

A B | 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
----+------------------------------------------------
T T | T  T  T  T  T  T  T  T  F  F  F  F  F  F  F  F
T F | T  T  T  T  F  F  F  F  T  T  T  T  F  F  F  F
F T | T  T  F  F  T  T  F  F  T  T  F  F  T  T  F  F 
F F | T  F  T  F  T  F  T  F  T  F  T  F  T  F  T  F

Вот таблица чисел таблицы истинности (0-15), комбинаций || и !, которые дают ее, и описание.

Table  |  Operation(s)                    | Description
-------+----------------------------------+-------------
  0    | A || !A                          | TRUE
  1    | A || B                           | OR
  2    | A || !B                          | B IMPLIES A
  3    | A                                | A
  4    | !A || B                          | A IMPLIES B
  5    | B                                | B
  6    | !(!A || !B) || !(A || B)         | XNOR (equals)
  7    | !(!A || !B)                      | AND
  8    | !A || !B                         | NAND
  9    | !(A || !B) || !(!A || B)         | XOR
 10    | !B                               | NOT B
 11    | !(!A || B)                       | NOT A IMPLIES B
 12    | !A                               | NOT A
 13    | !(A || !B)                       | NOT B IMPLIES A
 14    | !(A || B)                        | NOR
 15    | !(A || !A)                       | FALSE

Существует множество других таких функционально полных наборов, в том числе один набор элементов {NAND} и {NOR}, которые не имеют соответствующих одиночных операторов в Java.

Ответ 4

Потратьте время, чтобы прочитать DeMorgan Laws, если сможете.

Вы найдете ответ в чтении там, а также ссылки на логические доказательства.

Но, по сути, ответ да.

РЕДАКТИРОВАТЬ. Для объяснения, я хочу сказать, что логически можно вывести выражение OR из выражения AND и наоборот. Существует также больше законов для логической эквивалентности и вывода, но я думаю, что это наиболее вероятно.


EDIT 2. Здесь приведено доказательство с помощью таблицы истинности, показывающей логическую эквивалентность следующего выражения.

Закон DeMorgan: !(!A || !B) -> A && B

 _____________________________________________________
| A | B | !A  | !B  | !A || !B | !(!A || !B) | A && B | 
-------------------------------------------------------
| 0 | 0 |  1  |  1  |    1     |      0      |   0    | 
-------------------------------------------------------
| 0 | 1 |  1  |  0  |    1     |      0      |   0    |
-------------------------------------------------------
| 1 | 0 |  0  |  1  |    1     |      0      |   0    |
-------------------------------------------------------
| 1 | 1 |  0  |  0  |    0     |      1      |   1    |
_______________________________________________________

Ответ 5

NAND и NOR являются универсальными, они могут использоваться для создания любой логической операции вы хотите где угодно; другой оператор доступен в языках программирования, чтобы упростить запись и делать читаемые коды.

Также все логические операции, которые необходимы для проводки в цепи, также разрабатываются с использованием либо NAND, либо только NOR.

Ответ 6

Да, согласно булевой алгебре любая булева функция может быть выражена как сумма minterms или произведение maxterms, которое называется канонической нормальной формой. Нет причин, по которым такая логика не может применяться к тем же операциям, которые используются в информатике.

https://en.wikipedia.org/wiki/Canonical_normal_form