Дизъюнкция

Материал из testwiki
Версия от 12:44, 24 февраля 2025; imported>InternetArchiveBot (Добавление ссылок на электронные версии книг (20250223)) #IABot (v2.0.9.5) (GreenC bot)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Шаблон:Похожие буквы Шаблон:Булева функция Дизъю́нкция (от Шаблон:Lang-la — «разобщение»), логи́ческое сложе́ние, логи́ческое ИЛИ, включа́ющее ИЛИ; иногда просто ИЛИ — логическая операция, по своему применению максимально приближённая к союзу «или» в смысле «или то, или это, или оба сразу»[1].

Дизъюнкция может быть операцией как бинарной (имеющей два операнда), так и n-арной (имеющей n операндов) для произвольного n.

Запись может быть префиксной — знак операции стоит перед операндами (польская запись), инфиксной — знак операции стоит между операндами или постфиксной — знак операции стоит после операндов. При числе операндов более двух префиксная и постфиксная записи экономичнее.

Инверсией дизъюнкции является стрелка Пирса.

Обозначения

Наиболее часто встречаются следующие обозначения для операции дизъюнкции:

ab,a || b,a | b,aORb,max(a,b).

При этом обозначение ab, рекомендованное международным стандартом ISO 31-11, наиболее широко распространено в современной математике и математической логикеШаблон:Sfn. Появилось оно не сразу: Джордж Буль, положивший начало систематическому применению символического метода к логике, не работал с дизъюнкцией (используя вместо неё строгую дизъюнкцию, которую обозначал знаком Шаблон:Big), а Уильям Джевонс предложил для дизъюнкции знак ·|·. Эрнст Шрёдер и П. С. Порецкий вновь использовали знак Шаблон:Big, но уже применительно к обычной дизъюнкции[2]. Символ как обозначение дизъюнкции впервые встречается в статье «Математическая логика, основанная на теории типов»[3] Бертрана Рассела (1908); он образован от Шаблон:Lang-la, что означает «или»[4]Шаблон:Sfn.

Обозначение для дизъюнкции было использовано и в раннем языке программирования Алгол 60Шаблон:Sfn. Однако из-за отсутствия соответствующего символа в стандартных наборах символов (например, в ASCII или EBCDIC), применявшихся на большинстве компьютеров, в получивших наибольшее распространение языках программирования были предусмотрены иные обозначения для дизъюнкции. Так, в Фортране IV и PL/I применялись соответственно обозначения .OR. и | (с возможностью замены последнего на ключевое слово OR)[5]; в языках Паскаль и Ада используется зарезервированное слово or[6][7]; в языках C и C++ применяются обозначения | для побитовой дизъюнкции и || для логической дизъюнкции[8]).

Наконец, при естественном упорядочении значений истинности двузначной логики (когда полагают, что 0<1), оказывается, что (ab)=max(a,b). Таким образом, дизъюнкция оказывается частным случаем операции вычисления максимума; это открывает наиболее естественный способ определить операцию дизъюнкции в системах многозначной логики[9][10].

Булева алгебра

Логическая функция MAX в двухзначной (двоичной) логике называется дизъюнкция (логи́ческое «ИЛИ», логи́ческое сложе́ние или просто «ИЛИ»). При этом результат равен наибольшему операнду.

В булевой алгебре дизъюнкция — это функция двух, трёх или более переменных (они же — операнды операции, они же — аргументы функции). Таким образом, результат равен 0, если все операнды равны 0; во всех остальных случаях результат равен 1.

Таблица истинности
a b ab
0 0 0
0 1 1
1 0 1
1 1 1

Таблица истинности для тернарной (трёхоперандной) дизъюнкции:

a b c abc
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1

Многозначная логика

Операция, называемая в двоичной логике дизъюнкция, в многозначных логиках называется максимум: max(a,b), где a,b[0,...,n1], а n — значность логики. Возможны и другие вариантыШаблон:Чего. Как правило, стараются сохранить совместимость с булевой алгеброй для значений операндов 0,1.

Название этой операции максимум имеет смысл в логиках с любой значностью, в том числе и в двоичной логике, а названия дизъюнкция, логи́ческое «ИЛИ», логическое сложе́ние и просто «ИЛИ» характерны для двоичной логики, а при переходе к многозначным логикам используются реже.

Классическая логика

В классическом исчислении высказываний свойства дизъюнкции определяются с помощью аксиом. Классическое исчисление высказываний может быть задано разными системами аксиом, и некоторые из них будут описывать свойства дизъюнкции. Один из самых распространённых вариантов включает 3 аксиомы для дизъюнкции:

  • aab
  • bab
  • (ac)((bc)((ab)c))

С помощью этих аксиом можно доказать другие формулы, содержащие операцию дизъюнкции. Обратите внимание, что в классическом исчислении высказываний не происходит вычисления результата по значениям операндов (как в булевой алгебре), а требуется доказать формулу как единое целое на основе аксиом и правил вывода.

Схемотехника

Шаблон:Основная статья

Логический элемент 2ИЛИ

Мнемоническое правило для дизъюнкции с любым количеством входов звучит так: На выходе будет:

  • «1» тогда и только тогда, когда хотя бы на одном входе есть «1»,
  • «0» тогда и только тогда, когда на всех входах «0»

Шаблон:Clear

Теория множеств

С точки зрения теории множеств, дизъюнкция аналогична операции объединения.

Программирование

В компьютерных языках используется два основных варианта дизъюнкции: логическое «ИЛИ» и побитовое «ИЛИ». Например, в языках C/C++/Perl/PHP логическое «ИЛИ» обозначается символом "||", а побитовое — символом "|". В языках Pascal/Delphi оба вида дизъюнкции обозначаются с использованием ключевого слова «or», а результат действия определяется типом операндов. Если операнды имеют логический тип (например, Boolean) — выполняется логическая операция, если целочисленный (например, Byte) — поразрядная.

Логическое «ИЛИ» применяется в операторах условного перехода или в аналогичных случаях, когда требуется получение результата false или true. Например:

if (a || b)
{
    /* какие-то действия */
};

Результат будет равен false, если оба операнда равны false или 0. В любом другом случае результат будет равен true.

При этом применяется стандартное соглашение: если значение левого операнда равно

true

, то значение правого операнда не вычисляется (вместо

b

может стоять сложная формула). Такое соглашение ускоряет исполнение программы и служит полезным приёмом в некоторых случаях. Компилятор Delphi поддерживает специальную директиву, включающую

{$B-}

или выключающую

{$B+}

подобное поведение. Например, если левый операнд проверяет необходимость вычисления правого операнда:

if (a == NULL || a->x == 0)
{
    /* какие-то действия */
};

В этом примере, благодаря проверке в левом операнде, в правом операнде никогда не произойдёт разыменования нулевого указателя.

Побитовое «ИЛИ» выполняет обычную операцию булевой алгебры для всех битов левого и правого операнда попарно. Например,

если
a = 011001012
b = 001010012
то
a ИЛИ b = 011011012

Связь с естественным языком

Часто указывают на сходство между дизъюнкцией и союзом «или» в естественном языке, когда он употребляется в смысле «или то, или то, или оба сразу». В юридических документах часто пишут: «и (или)», иногда «и/или», подразумевая «или то, или то, или оба сразу». Составное утверждение «A и/или B» считается ложным, когда ложны оба утверждения A и B, в противном случае составное утверждение истинно. Это в точности соответствует определению дизъюнкции в булевой алгебре, если «истину» обозначать как 1, а «ложь» как 0.

Неоднозначность естественного языка заключается в том, что союз «или» используется в двух значениях: то для обозначения дизъюнкции, то для другой операции — строгой дизъюнкции (исключающего «ИЛИ»).

См. также

Примечания

Шаблон:Примечания

Литература

Шаблон:Викисловарь

Шаблон:Внешние ссылки Шаблон:Логические операции Шаблон:Логика