Site Loader

Проект «логика для чайников». Параграф 26.

Простейшие логические операции

Простейшие логические операции относятся к двузначной логике. Их 4 штуки: “НЕ”, “И”, “ИЛИ”, “XOR”. Также для обозначения этих операций используют разные значки (“~”, “&” и т.п.).

При записи логических формул вместо слов “истина” и “ложь” обычно используют стандартные международные обозначения:
Вместо “истина” пишут: true, T, t, 1.
Вместо “ложь” пишут: false, F, f, 0.

“НЕ”

Операция “НЕ” преобразует истину в ложь, а ложь в истину:

НЕ true = false
НЕ false = true

У этой операции бывают разные другие названия: “логическое НЕ”, “отрицание”, “логическое отрицание”, “инверсия”, “логическая инверсия”. Для международных обозначений вместо “НЕ” пишут “NOT”.

В естественном языке этой операции соответствует добавление слов “неправда, что…” в начале высказывания. Например:

“Сурков должен мне денег”. (1)

Применение операции “НЕ” к высказыванию (1):

“Неправда, что Сурков должен мне денег”. (2)

Если высказывание (1) ложно, то высказывание (2) истинно. Если высказывание (2) ложно, то высказывание (1) истинно.

Нетрудно понять, что двойное применение “НЕ” возвращает нас к прежней истинности.

“Неправда, что неправда, что Сурков должен мне денег”. (3)

Истинность высказывания (3) всегда совпадает с истинностью высказывания (1).

“И”

Операция “И” применяется к двум высказываниям. Ее результат “истина”, только если оба высказывания истинны (а иначе “ложь”):

false И false = false
false И true = false
true И false = false
true И true = true

У этой операции бывают разные другие названия: “логическое И”, “конъюнкция”, “логическое умножение”. Для международных обозначений вместо “И” пишут “AND”.

В естественном языке этой операции соответствует вставка союза “и” между высказываниями. Например:

“Сурков должен мне денег”. (1)
“Петров должен мне денег”. (2)

Применение операции “И” к высказываниям (1) и (2):

“Сурков должен мне денег, и Петров должен мне денег”. (3)

Эту фразу можно сократить, сохранив прежний смысл:

“Сурков и Петров должны мне денег”. (3)

Высказывание (3) истинно только тогда, когда истинны оба высказывания: (1) и (2). Если хотя бы одно из них ложно, то результат тоже ложен. Если оба ложны – тоже.

То есть, если Петров мне денег не задолжал, а задолжал только Сурков, тогда высказывание (3) не будет “полуправдой” или “полуложью”, а будет просто ложью.

“ИЛИ”

Операция “ИЛИ” применяется к двум высказываниям. Ее результат “истина”, если хотя бы одно высказывание истинно (а иначе “ложь”):

false ИЛИ false = false
false ИЛИ true = true
true ИЛИ false = true
true ИЛИ true = true

У этой операции бывают разные другие названия: “логическое ИЛИ”, “включающее ИЛИ”, “дизъюнкция”, “логическое сложение”. Для международных обозначений вместо “ИЛИ” пишут “OR”.
В естественном языке этой операции соответствует вставка союза “или” между высказываниями, но… не всегда (см. ниже об операции “XOR”). Например:

“Я хочу попить”. (1)
“Я хочу поесть”. (2)

Применение операции “ИЛИ” к высказываниям (1) и (2):

“Я хочу попить, или я хочу поесть”. (3)

По-русски звучит правильно, но коряво, и эту фразу можно сократить, сохранив прежний смысл:

“Я хочу попить или поесть ”. (3)

Высказывание (3) истинно тогда, когда истинно хотя бы одно из высказываний (1) и (2), а можно оба. Если оба высказывания ложны, то результат тоже ложен.

То есть, если я хочу есть, но не пить, тогда высказывание (3) истинно. Если я не прочь и поесть, и попить, выказывание (3) тоже истинно. Ложно оно тогда, когдя я не хочу ни того, ни другого.

“XOR”

Операция “XOR” применяется к двум высказываниям. Ее результат “истина”, если ровно одно из высказываний истинно (а иначе “ложь”):

false XOR false = false
false XOR true = true
true XOR false = true
true XOR true = false

У этой операции бывают разные другие названия: “исключающее ИЛИ”, “сложение по модулю 2”, “логическое сложение по модулю 2”. “XOR” – это международное обозначение, общепринятого “русского” аналога нет.

В естественном языке этой операции соответствует вставка союза “или” между высказываниями – так же, как в случае с операцией “ИЛИ”. Например:

“Я собираюсь просить прибавки к зарплате”. (1)
“Я попытаюсь сэкономить ”. (2)

Применение операции “XOR” к высказываниям (1) и (2):

“Я собираюсь просить прибавки к зарплате или я попытаюсь сэкономить”. (3)

Сокращенно:

“Я собираюсь просить прибавки к зарплате или попытаюсь сэкономить”. (3)

Высказывание (3) истинно тогда, когда истинно ровно одно из высказываний (1) и (2). Если я не собираюсь ни просить прибавки, ни экономить, тогда фраза ложна. Также, я имел в виду, что не собираюсь делать и то, и другое одновременно.

Обратите внимание на разницу между операциями “ИЛИ” и “XOR”. Она заключается только в последнем правиле:

true ИЛИ true = true
true XOR true = false

В естественном языке обе операции изображаются одним и тем же союзом “или”. Это – пример неоднозначности естественного языка. Если помните, омонимы и многозначные слова могут иметь больше одного значения. Союз “или” именно такой: он имеет два возможных значения. Первое выражается логической операцией “ИЛИ”, второе – логической операцией “XOR”.

В английском языке существуют те же проблемы: союз “or” имеет те же два значения. А вот древним римлянам было проще, так как в латыни есть два разных слова: “vel” (операция “ИЛИ”) и “aut” (операция “XOR”).

Поскольку разница между операциями “ИЛИ” и “XOR” невелика (всего одно последнее правило), то иногда эта разница не имеет значения. Иногда о том, что имеется в виду, можно догадаться по интонации, или по контексту. Иногда определить точный смысл так и не удается.

5.7 – Логические операторы

Добавлено 8 мая 2021 в 18:37

Хотя операторы отношения (сравнения) могут использоваться для проверки того, является ли конкретное условие истинным или ложным, они могут проверять только одно условие за раз. Но часто нам нужно знать, выполняются ли одновременно несколько условий. Например, чтобы проверить, выиграли ли мы в лотерею, мы должны сравнить, все ли выбранные нами числа совпадают с выигрышными числами. В лотерее с 6 числами это будет включать 6 сравнений, и все они должны быть верными. В других случаях нам нужно знать, выполняется ли какое-либо из нескольких условий. Например, мы можем решить пропустить работу сегодня, если мы заболели, или если мы слишком устали, или если мы выиграли в лотерею в нашем предыдущем примере. Это потребует проверки того, верно ли какое-либо из трех сравнений.

Возможность тестирования несколько условий нам дают логические операторы.

В C++ есть 3 логических оператора:

Логические операторы
ОператорОбозначениеПример использованияОперация
Логическое НЕ (NOT)!!xtrue, если x равен false; или false, если x равен true
Логическое И (AND)&&x && ytrue, если и xy равны true; в противном случае – false
Логическое ИЛИ (OR)||x || ytrue, если x или y равен true; в противном случае – false

Логическое НЕ (NOT)

Вы уже сталкивались с унарным оператором логического НЕ в уроке «4. 9 – Логические (булевы) значения». Мы можем резюмировать эффекты логического НЕ следующим образом:

Логическое НЕ (оператор !)
ОперандРезультат
truefalse
falsetrue

Если операнд логического НЕ вычисляется как true, логическое НЕ вычисляется как false. Если операнд логического НЕ вычисляется как false, логическое НЕ вычисляется как true. Другими словами, логическое НЕ меняет логическое значение с true на false и наоборот.

Логическое НЕ часто используется в условных выражениях:

bool tooLarge { x > 100 }; // tooLarge равно true, если x > 100
if (!tooLarge)
    // делаем что-нибудь с x
else
    // выводим ошибку

Следует остерегаться того, что логическое НЕ имеет очень высокий уровень приоритета. Начинающие программисты часто делают следующую ошибку:

#include <iostream>
 
int main()
{
    int x{ 5 };
    int y{ 7 };
 
    if (!x > y)
        std::cout << x << " is not greater than " << y << '\n';
    else
        std::cout << x << " is greater than " << y << '\n';
 
    return 0;
}

Эта программа напечатает:

5 is greater than 7

Но x не больше y, так как же это возможно? Ответ заключается в том, что поскольку оператор логического НЕ имеет более высокий приоритет, чем оператор «больше чем», выражение !x > y фактически вычисляется как (!x) > y. Поскольку x равно 5, !x вычисляется как 0, а 0 > y равно false, поэтому выполняется инструкция else!

Правильный способ написать приведенный выше фрагмент:

#include <iostream>
 
int main()
{
    int x{ 5 };
    int y{ 7 };
 
    if (!(x > y))
        std::cout << x << " is not greater than " << y << '\n';
    else
        std::cout << x << " is greater than " << y << '\n';
 
    return 0;
}

Таким образом, сначала будет вычислено x > y, а затем логическое НЕ инвертирует логический результат.

Лучшая практика


Если логическое НЕ предназначено для работы с результатом других операторов, другие операторы и их операнды должны быть заключены в круглые скобки.

Простое использование логического НЕ, например if (!value), не требует скобок, потому что приоритет здесь не играет роли.

Логическое ИЛИ (OR)

Оператор логического ИЛИ используется для проверки того, выполняется ли одно из двух условий. Если значение левого операнда истинно, или значение правого операнда истинно, или оба значения истинны, то логический оператор ИЛИ возвращает true. В противном случае он вернет false.

Логическое ИЛИ (оператор ||)
Левый операндПравый операндРезультат
falsefalsefalse
falsetruetrue
truefalsetrue
truetruetrue

Например, рассмотрим следующую программу:

#include <iostream>
 
int main()
{
    std::cout << "Enter a number: ";
    int value {};
    std::cin >> value;
 
    if (value == 0 || value == 1)
        std::cout << "You picked 0 or 1\n";
    else
        std::cout << "You did not pick 0 or 1\n";
    return 0;
}

В этом случае мы используем логический оператор ИЛИ, чтобы проверить, истинно ли левое условие (value == 0) или правое условие (value == 1). Если одно из них (или оба) истинны, логический оператор ИЛИ принимает значение true, что означает выполнение инструкции if. Если ни одно из них не является истинным, результат логического оператора ИЛИ будет false, что означает выполнение инструкции else.

Вы можете связать вместе множество операторов логического ИЛИ

:

if (value == 0 || value == 1 || value == 2 || value == 3)
     std::cout << "You picked 0, 1, 2, or 3\n";

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

Логическое И (AND)

Логический оператор И используется для проверки истинности обоих операндов. Если оба операнда равны true, логическое И возвращает true.

В противном случае возвращается false.

Логическое И (оператор &&)
Левый операндПравый операндРезультат
falsefalsefalse
falsetruefalse
truefalsefalse
truetruetrue

Например, нам может потребоваться узнать, находится ли значение переменной x в диапазоне от 10 до 20. На самом деле это два условия: нам нужно знать, больше ли x, чем 10, а также меньше ли x, чем 20.

#include <iostream>
 
int main()
{
    std::cout << "Enter a number: ";
    int value {};
    std::cin >> value;
 
    if (value > 10 && value < 20)
        std::cout << "Your value is between 10 and 20\n";
    else
        std::cout << "Your value is not between 10 and 20\n";
    return 0;
}

В этом случае мы используем оператор

логическое И, чтобы проверить, истинны ли левое условие (value > 10) и правое условие (value < 20). Если оба условия истинны, оператор логическое И принимает значение true, и выполняется инструкция if. Если ни одно из условий или хотя бы одно из них не соответствует истине, оператор логическое И принимает значение false, и выполняется инструкция else.

Как и в случае с логическим ИЛИ, вы можете связать вместе множество операторов

логическое И:

if (value > 10 && value < 20 && value != 16)
    // делаем что-то
else
    // делаем что-то другое

Если все эти условия верны, будет выполнена инструкция if. Если какое-либо из этих условий ложно, будет выполняться инструкция else.

Вычисление по короткой схеме

Чтобы логическое И возвращало true, оба операнда должны иметь значение true. Если первый операнд вычисляется как false, логическое И знает, что оно должно возвращать false, независимо от того, вычисляется ли второй операнд как true или false.

В этом случае оператор логическое И немедленно вернет false, даже не вычисляя второй операнд! Это известно как вычисление по короткой схеме и выполняется в основном в целях оптимизации.

Точно так же, если первый операнд для логического ИЛИ равен true, тогда всё условие ИЛИ должно вычисляться как true, и второй операнд не вычисляется.

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

if (x == 1 && ++y == 2)
    // сделать что-то

Если x не равно 1, всё условие должно быть ложным, поэтому ++y никогда не вычисляется! Таким образом, y будет инкрементироваться только в том случае, если x равен 1, что, вероятно, не совсем то, что задумывал программист!

Предупреждение


Вычисление по короткой схеме может привести к тому, что логическое ИЛИ и логическое И не будут вычислять один операнд. Избегайте использования выражений с побочными эффектами в выражениях с этими операторами.

Как и в случае с логическим и побитовым ИЛИ, начинающие программисты иногда путают оператор логическое И (&&) с оператором побитовое И (&).

Смешивание И и ИЛИ

Смешивания операторов логическое И и логическое ИЛИ в одном выражении часто невозможно избежать, но это область, полная потенциальных опасностей.

Многие программисты предполагают, что логическое И и логическое ИЛИ имеют одинаковый приоритет (или забывают, что это не так), точно так же, как сложение/вычитание и умножение/деление. Однако логическое И имеет более высокий приоритет, чем логическое ИЛИ, поэтому операторы логическое И будут вычисляться перед операторами логическое ИЛИ (если они не заключены в скобки).

Начинающие программисты часто пишут такие выражения, как value1 || value2 && value3. Поскольку логическое И имеет более высокий приоритет, это выражение вычисляется как value1 || (value2 && value3), а не как (value1 || value2) && value3. Надеюсь, это то, чего хотел программист! Если программист предполагал вычисление слева направо (как это происходит со сложением/вычитанием или умножением/делением), он или она получит не тот результат, который не ожидался!

При смешивании логического И и логического ИЛИ в одном выражении рекомендуется явно заключать в скобки каждый оператор и его операнды. Это помогает предотвратить ошибки приоритета, упрощает чтение кода и четко определяет, как вы рассчитывали вычислять выражение. Например, вместо записи value1 && value2 || value3 && value4, лучше написать (value1 && value2) || (value3 && value4).

Лучшая практика


При смешивании логического И и логического ИЛИ в одном выражении явно заключите каждую операцию в скобки, чтобы убедиться, что они вычисляются так, как вы хотите.

Закон де Моргана

Многие программисты также ошибаются, полагая, что !(x && y) – это то же самое, что !x && !y. К сожалению, так нельзя «распределять» логическое НЕ.

Закон де Моргана говорит нам, как логическое НЕ должно распределяться в этих случаях:

!(x && y) эквивалентно !x || !y
!(x || y) эквивалентно !x && !y

Другими словами, когда вы распределяете логическое НЕ, вам также необходимо преобразовать логическое И в логическое ИЛИ, и наоборот!

Иногда это может быть полезно при попытке упростить чтение сложных выражений.

Где логический оператор исключающее ИЛИ (XOR)?

Логический оператор исключающее ИЛИ (XOR) – это логический оператор, представленный на некоторых языках, который используется для проверки истинности нечетного числа условий.

Логическое исключающее ИЛИ
Левый операндПравый операндРезультат
falsefalsefalse
falsetruetrue
truefalsetrue
truetruefalse

В C++ нет оператора логическое исключающее ИЛИ. В отличие от логического ИЛИ или логического И, логическое исключающее ИЛИ не может быть вычислено по короткой схеме. По этой причине создание оператора логическое исключающее ИЛИ из операторов логического ИЛИ и логического И является сложной задачей. Однако вы можете легко имитировать логическое исключающее ИЛИ (XOR), используя оператор неравенства (!=):

if (a != b) ... // a XOR b, предполагая, что a и b - логические значения

Это выражение можно расширить до нескольких операндов следующим образом:

if (a != b != c != d) ... // a XOR b XOR c XOR d, предполагая, что a, b, c и d 
                          // являются логическими значениями

Обратите внимание, что приведенные выше шаблоны логического исключающего ИЛИ работают только в том случае, если операнды являются логического типа (не целочисленными значениями). Если вам нужна форма логического исключающего ИЛИ, которая работает с не-логическими операндами, вы можете использовать static_cast для преобразования их в bool:

// a XOR b XOR c XOR d, для любого типа, который можно преобразовать в bool
if (static_cast<bool>(a) != static_cast<bool>(b) != static_cast<bool>(c) != static_cast<bool>(d)) . ..

Небольшой тест

Вопрос 1

Вычислите следующие выражения.

Примечание: в ответах мы «объясняем нашу работу», показывая вам шаги, предпринятые для получения окончательного ответа. Шаги разделены символом →. Выражения, которые были проигнорированы из-за правила вычисления по короткой схеме, помещены в квадратные скобки. Например,

(1 < 2 || 3 != 3) →
(true || [3 != 3]) →
(true) →
true

означает, что мы вычислили (1 <2 || 3 != 3), чтобы прийти к (true || [3 != 3]), и вычислили его, чтобы прийти к true. 3 != 3 никогда не выполнялся из-за вычисления по короткой схеме.

a) (true && true) || false

Ответ

(true && true) || false →
true || [false] →
true

b) (false && true) || true

Ответ

(false && [true]) || true →
false || true →
true

Вычисление по короткой схеме имеет место быть, если первый операнд || равен true.

c) (false && true) || false || true

Ответ

(false && [true]) || false || true →
false || false || true →
false || true →
true

d) (5 > 6 || 4 > 3) && (7 > 8)

Ответ

(5 > 6 || 4 > 3) && (7 > 8) →
(false || true) && false →
true && false →
false

e) !(7 > 6 || 3 > 4)

Ответ

!(7 > 6 || 3 > 4) →
!(true || [3 > 4]) →
!true →
false

Оригинал статьи:

  • 5.7 — Logical operators

Теги

C++ / CppLearnCppДля начинающихЛогические операторЛогические типы даныхЛогическое И (AND)Логическое ИЛИ (OR)Логическое исключающее ИЛИ (XOR)Логическое НЕ (NOT)ОбучениеОператор (программирование)Программирование

Назад

Оглавление

Вперед

Определение XOR | ПКМаг

(e X включительно ИЛИ ) Булева логическая операция, которая широко используется в криптографии, а также при генерации битов четности для проверки ошибок и отказоустойчивости. ). См. криптография, RAID и или.

XOR в криптографии В этом примере используется XOR и один и тот же «секретный ключ» для шифрования и дешифрования. Хотя можно использовать логику XOR, алгоритмы секретного ключа намного сложнее, чем это. См. алгоритм шифрования.

Реклама

Истории PCMag, которые вам понравятся

{X-html заменен}

Выбор редакции

ЭТО ОПРЕДЕЛЕНИЕ ПРЕДНАЗНАЧЕНО ТОЛЬКО ДЛЯ ЛИЧНОГО ИСПОЛЬЗОВАНИЯ. Любое другое воспроизведение требует разрешения.
Авторское право © 1981- 2023. Компьютерный язык(Открывается в новом окне) Co Inc. Все права защищены. Информационные бюллетени PCMag

Информационные бюллетени PCMag

Наши лучшие истории в вашем почтовом ящике

Следите за новостями PCMag

  • Фейсбук (Открывается в новом окне)
  • Твиттер (Открывается в новом окне)
  • Флипборд (Открывается в новом окне)
  • Гугл (откроется в новом окне)
  • Инстаграм (откроется в новом окне)
  • Pinterest (Открывается в новом окне)

PCMag. com является ведущим авторитетом в области технологий, предоставляющим независимые лабораторные обзоры новейших продуктов и услуг. Наш экспертный отраслевой анализ и практические решения помогут вам принимать более обоснованные решения о покупке и получать больше от технологий.

Как мы тестируем Редакционные принципы

  • (Открывается в новом окне) Логотип Зиффмедиа
  • (Открывается в новом окне) Логотип Аскмен
  • (Открывается в новом окне) Логотип Экстримтек
  • (Открывается в новом окне) Логотип ИНГ
  • (Открывается в новом окне) Лайфхакер Логотип
  • (Открывается в новом окне) Логотип Mashable
  • (Открывается в новом окне) Предлагает логотип
  • (Открывается в новом окне) Логотип RetailMeNot
  • (Открывается в новом окне) Логотип Speedtest
(Открывается в новом окне)

PCMag поддерживает Group Black и ее миссию по увеличению разнообразия голосов в СМИ и прав собственности на СМИ.

© 1996-2023 Ziff Davis, LLC., компания Ziff Davis. Все права защищены.

PCMag, PCMag.com и PC Magazine входят в число зарегистрированных на федеральном уровне товарных знаков Ziff Davis и не могут использоваться третьими лицами без явного разрешения. Отображение сторонних товарных знаков и торговых наименований на этом сайте не обязательно указывает на какую-либо принадлежность или поддержку PCMag. Если вы нажмете на партнерскую ссылку и купите продукт или услугу, этот продавец может заплатить нам комиссию.

  • О Ziff Davis(Открывается в новом окне)
  • Политика конфиденциальности(Открывается в новом окне)
  • Условия использования(Открывается в новом окне)
  • Реклама(Открывается в новом окне)
  • Специальные возможности(Открывается в новом окне)
  • Не продавать мою личную информацию (откроется в новом окне)
  • (Открывается в новом окне) доверительный логотип
  • (Открывается в новом окне)

эксклюзивная дизъюнкция в nLab

Пропустить навигационные ссылки | Домашняя страница | Все страницы | Последние версии | Обсудить эту страницу |

Эксклюзивная дизъюнкция
  • Идея
  • Определения
  • В качестве логического элемента
  • На естественном языке
  • Связанные понятия
  • Каталожные номера

Идея

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

Определения

исключительная дизъюнкция pp и qq, записанная p⊻qp ⊻ q (и множеством других способов) может быть определена в любой из следующих форм: 1. ¬(p⇔q)\neg(p \Leftrightarrow q), 2. (p∨q)∧(¬p∨¬q )(p \vee q) \wedge (\neg p \vee \neg q), 3. (p∧¬q)∨(¬p∧q)(p \wedge \neg{q}) \vee (\neg {p} \клин q).

Все они эквивалентны в классической логике. В интуиционистской логике (2,3) эквивалентны, но (1) слабее; (2,3) придают обычное значение в конструктивной математике.

Ложное утверждение является идентификатором для этой операции; это исключительная дизъюнкция отсутствия утверждений.

В классической логике (но не в интуиционистской логике) эта операция ассоциативна, но множественные применения не означают того, что вы думаете. Вместо этого (p⊻q)⊻r≡p⊻(q⊻r)(p ⊻ q) ⊻ г \ эквив р ⊻ (q ⊻ r) становится истинным, если все p,q,rp, q, r истинны; вообще,

(p1⊻(p2⊻⋯⊻pn)⋯) (p_1 ⊻ (p_2 ⊻ \cdots ⊻ p_n)\cdots)

истинно тогда и только тогда, когда нечетное количество утверждений pip_i верно. Но когда мы пишем множественное утверждение с помощью «xor», мы на самом деле имеем в виду, что ровно одно из утверждений является истинным. Таким образом, указом определите исключительную дизъюнктию

p1⊻p2⊻⋯⊻pn p_1 ⊻ р_2 ⊻ \cdots ⊻ p_n

(без скобок) означает, что ровно один из pip_i верен; это определение также используется в интуиционистской логике.

Поскольку индексированная версия обычной дизъюнкции есть квантификация существования ∃\exists, то индексированная версия исключающей дизъюнкции есть квантификация единственности ∃!\exists!; для этого требуется примитивное понятие равенства, чтобы сформулировать его в логике предикатов.

Аналогично, исключающее объединение двух множеств AA и BB, записанное A⊎BA \upplus B (и множеством других способов), может быть определено с помощью исключающей дизъюнкции:

A⊎B={x|x∈A⊻x∈B}. А \upplus B = \{ х \;|\; х \в А \;⊻\; х \в В\} .

Исключающее объединение семейства наборов (Ai)i:I(A_i)_{i\colon I} может быть определено с использованием количественной оценки уникальности:

⨄iAi={x|∃!i,x∈Ai }. \biguplus_i A_i = \{ х \;|\; \существует!{i},\; х \in A_i \} .

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

У нас также есть симметричная разность двух наборов, которая аналогична исключающему объединению. Но мы рассматриваем эту операцию как сложение в булевом кольце и, таким образом, интерпретируем ее обычным образом как ассоциативную операцию. Таким образом, симметричная разность nn множеств действительно состоит из тех точек, которые принадлежат нечетному числу множеств, и бесконечной симметричной разности нет.

В качестве логического элемента

Исключающая дизъюнкция в качестве логического элемента, обратимого элемента (CNOT) и квантового логического элемента:

В естественном языке

Широко распространено мнение, что «или» в английском языке может означать либо включающую, либо исключающую дизъюнктуру, в то время как в латыни есть два термина, соответственно «vel» и «aut», но это не совсем правильно. Правильнее, что «или» иногда может означать объединение , а иногда непересекающееся объединение (причем последнее иногда внешнее, а иногда внутреннее), но никогда симметричное различие.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *