Высказывания, логические операции и таблицы истинности

Язык, на котором рассуждают и компьютеры, и математики: от «истина/ложь» к таблицам истинности.

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

Зачем это нужно

Каждое условие в программе (if x > 0 and y < 10), каждый поисковый запрос («Python И не Java»), каждая логическая схема внутри процессора — это математическая логика. Она же — целый блок заданий ЕГЭ. Освоив её, вы перестанете гадать, когда сложное условие истинно, и научитесь упрощать запутанные проверки. А главное — увидите, что мышление компьютера строится на нескольких простых операциях.

Математическая логика появилась задолго до компьютеров. В середине XIX века английский математик Джордж Буль предложил описывать рассуждения алгеброй, где переменные принимают всего два значения — «истина» и «ложь», а связки «и», «или», «не» становятся операциями. Почти столетие это считалось красивой абстракцией без практической пользы. Всё изменилось в 1930-х, когда Клод Шеннон заметил: булева алгебра идеально описывает работу электрических переключателей — замкнут контакт или разомкнут. Так логика Буля стала фундаментом цифровой техники. Поэтому, изучая таблицы истинности, вы не просто готовитесь к экзамену — вы осваиваете тот самый язык, на котором спроектирован каждый процессор в мире.

Что считается высказыванием

«Москва — столица России» — высказывание (истинно). «2 + 2 = 5» — тоже высказывание (ложно). А вот «Который час?» или «Реши уравнение» высказываниями не являются: им нельзя приписать истину или ложь. В логике значения обозначают 1 (истина) и 0 (ложь) — и это снова возвращает нас к двоичной системе.

Пять базовых операций

Из простых высказываний строят сложные с помощью логических операций. Вот они в порядке приоритета (от высшего к низшему):

ОперацияОбозначениеЧитаетсяИстинна, когда
отрицание¬A, НЕ A«не A»A ложно
конъюнкцияA ∧ B, A И B«A и B»оба истинны
дизъюнкцияA ∨ B, A ИЛИ B«A или B»хотя бы один истинен
импликацияA → B«если A, то B»ложна только при A=1, B=0
эквивалентностьA ↔ B«A равносильно B»значения совпадают

Самая коварная — импликация. «Если пойдёт дождь, я возьму зонт» — это обещание нарушено только в одном случае: дождь пошёл (A=1), а зонт не взят (B=0). Во всех остальных случаях обещание считается выполненным, в том числе когда дождя не было. Отсюда правило: импликация ложна лишь когда из истины следует ложь.

Таблица истинности своими руками

Таблица истинности перечисляет все комбинации значений переменных и результат выражения для каждой. Для n переменных строк ровно 2ⁿ. Построим таблицу для всех пяти операций сразу. В Python отрицание — not, конъюнкция — and, дизъюнкция — or; импликацию и эквивалентность выразим формулами:

def impl(a, b):     # импликация A → B  равна  (not A) or B
    return (not a) or b

def equ(a, b):      # эквивалентность A ↔ B
    return a == b

print("A B | not-A  A-and-B  A-or-B  A-impl-B  A-equ-B")
print("-" * 46)
for a in (0, 1):
    for b in (0, 1):
        row = (
            int(not a), int(a and b), int(a or b),
            int(impl(a, b)), int(equ(a, b)),
        )
        print(f"{a} {b} |   {row[0]}      {row[1]}        {row[2]}       {row[3]}        {row[4]}")

Вывод:

A B | not-A  A-and-B  A-or-B  A-impl-B  A-equ-B
----------------------------------------------
0 0 |   1      0        0       1        1
0 1 |   1      0        1       1        0
1 0 |   0      0        1       0        0
1 1 |   0      1        1       1        1

Вглядитесь в столбец импликации: единственный 0 стоит в строке A=1, B=0 — ровно как мы рассуждали про зонт.

Вычисление сложного выражения

Когда операций несколько, важен приоритет: сначала ¬, затем ∧, затем ∨, потом → и ↔. Скобки, как в арифметике, меняют порядок. Посчитаем выражение (A ∨ B) ∧ ¬C для всех восьми комбинаций трёх переменных — и пусть Python проверит нас:

print("A B C | (A or B) and not C")
print("-" * 30)
for a in (0, 1):
    for b in (0, 1):
        for c in (0, 1):
            value = (a or b) and (not c)
            print(f"{a} {b} {c} |        {int(value)}")

Вывод:

A B C | (A or B) and not C
------------------------------
0 0 0 |        0
0 0 1 |        0
0 1 0 |        1
0 1 1 |        0
1 0 0 |        1
1 0 1 |        0
1 1 0 |        1
1 1 1 |        0

Выражение истинно там, где хотя бы одна из A, B истинна И при этом C ложна. Таблица — надёжный способ не ошибиться в сложном условии.

Попробуй сам

Сравним два выражения по их таблицам истинности. Если все строки совпали — выражения равносильны. Проверим, правда ли, что ¬(A ∧ B) равно ¬A ∨ ¬B (один из законов де Моргана, к которым вернёмся в следующем уроке):

def left(a, b):
    return not (a and b)

def right(a, b):
    return (not a) or (not b)

same = True
for a in (0, 1):
    for b in (0, 1):
        l, r = left(a, b), right(a, b)
        print(f"A={a} B={b}: {int(l)} vs {int(r)}")
        if l != r:
            same = False
print("Выражения равносильны?", same)

Вывод:

A=0 B=0: 1 vs 1
A=0 B=1: 1 vs 1
A=1 B=0: 1 vs 1
A=1 B=1: 0 vs 0
Выражения равносильны? True

Частые ошибки

  • Считают импликацию «симметричной». A → B и B → A — разные выражения; путаница с этим стоит баллов на ЕГЭ.
  • Забывают приоритет. Без скобок A ∨ B ∧ C читается как A ∨ (B ∧ C), потому что ∧ старше ∨.
  • Думают, что «или» исключающее. Логическое ИЛИ (дизъюнкция) истинно и когда оба истинны; «либо-либо» — это уже XOR.
  • Путают «истинно всегда» и «истинно при данных значениях». Тождественно истинное выражение (тавтология) истинно при любых значениях переменных.

Итоги

  • Высказывание — это утверждение, которому можно приписать 1 (истина) или 0 (ложь).
  • Базовых операций пять: ¬, ∧, ∨, →, ↔; приоритет именно в этом порядке.
  • Импликация A → B ложна только при A=1, B=0 и равна ¬A ∨ B.
  • Таблица истинности перечисляет все 2ⁿ комбинаций — это безотказный инструмент проверки.
Проверьте себя
1. В каком единственном случае импликация A → B ложна?
AA = 0, B = 0
BA = 1, B = 1
CA = 1, B = 0
DA = 0, B = 1
2. Сколько строк в таблице истинности выражения с 4 переменными?
A8
B16
C4
D32
3. Чему равносильна импликация A → B?
AA ∧ B
B¬A ∨ B
CA ∨ ¬B
D¬A ∧ B
Поддержать проект