ЕГЭ · Информатика · Алгебра логики
Логические операции и таблицы истинности
Выучить пять операций и уметь строить их таблицы истинности.
🎯 ЕГЭ информатика: задания 2, 15. №2 — алгебра логики: таблицы истинности; №15 — алгебра логики: тождественная истинность.
- ⚠Не учитывают порядок операций: ¬ → ∧ → ∨ → → → ≡
- ⚠Забывают, что импликация A→B ложна только при A=1, B=0
Зачем нужна алгебра логики
С чего начинается тема
Представьте, что вам нужно объяснить машине правило: «дверь открывается, если приложена карта сотрудника и сейчас рабочее время, или если нажата кнопка охраны». Машина не понимает слов «и», «или», «если». Она умеет одно: пропускать или не пропускать ток.
Вопрос, на который отвечает эта тема, звучит так: как превратить рассуждение в устройство? Как записать правило формулой, проверить, что формула верна во всех случаях, сократить её до минимума и собрать из проводов.
Ответ нашли в два приёма и с разрывом почти в столетие. Сначала математик придумал алгебру для рассуждений, не имея в виду никаких машин. Потом инженер увидел, что его телефонные реле подчиняются ровно этой алгебре. С этого совпадения началась цифровая техника.
В ЕГЭ тема отвечает за задания 2 и 15, а по сути за гораздо большее: без неё не понять ни условия в программе, ни устройства процессора, ни того, почему if a and b выполняется быстрее, чем кажется.
Откуда взялась алгебра логики и почему она в информатике
Может показаться странным, что в курсе информатики изучают раздел математики, придуманный за сто лет до первой ЭВМ. История объясняет всё.
В 1854 году английский математик Джордж Буль (1815–1864) опубликовал работу «Исследование законов мышления». Он предложил записывать рассуждения так же, как записывают арифметику: высказывания обозначать буквами, а связки «и», «или», «не» — операциями. В этой алгебре всего два значения, 0 и 1, и потому её называют двузначной, или булевой.
Почти сто лет идея оставалась математической игрушкой. В 1937 году американский инженер Клод Шеннон (1916–2001) в своей магистерской работе показал: контакты реле ведут себя точно так же, как переменные булевой алгебры. Замкнут — 1, разомкнут — 0; последовательное соединение контактов даёт «И», параллельное — «ИЛИ». А значит, любую логическую формулу можно превратить в электрическую схему, и наоборот — любую схему упростить алгебраически.
Именно с этой работы началось проектирование цифровых устройств как инженерной задачи, решаемой формулами. Все процессоры, память, сумматоры собраны из элементов, выполняющих ровно те операции, которые вы учите в этом уроке.
Полезно помнить и то, что в алгебре логики важны не сами высказывания, а только их истинность. «Волга впадает в Каспийское море» и «2 + 2 = 4» для этой алгебры — одно и то же: два высказывания со значением 1. Поэтому формула работает одинаково и для суждений о мире, и для сигналов в микросхеме.

Сын сапожника, который решил считать мысли
Про автора этой алгебры стоит знать чуть больше, чем даты жизни, — потому что его судьба объясняет, почему идея вышла такой странной для своего времени.
Джордж Буль родился в 1815 году в Линкольне, в семье сапожника. Отец, Джон Буль, чинил обувь без особого усердия, зато увлечённо шлифовал линзы, собирал телескопы и состоял в местном научном обществе. Систематического образования сын не получил: латынь он выучил сам, греческий — сам, математику — тоже сам, по книгам, которые доставал где мог. В шестнадцать лет он пошёл работать помощником учителя, потому что семья разорилась, а в девятнадцать открыл собственную школу.
Человек без диплома, зарабатывающий преподаванием арифметики, начал печатать статьи в математических журналах — и в 1844 году получил за них золотую медаль Лондонского королевского общества. В 1849-м его без учёной степени взяли первым профессором математики в новый колледж в ирландском Корке.
Умер он в 1864 году, сорока девяти лет: прошёл под дождём три мили до колледжа и отчитал лекцию в мокрой одежде; началось воспаление лёгких. Он так и не узнал, что через семьдесят лет его алгебра станет основанием всей вычислительной техники.
Одна деталь для памяти: младшая дочь Буля, Этель Лилиан Войнич, написала роман «Овод» — книгу, которую в Советском Союзе издавали миллионными тиражами. Фамилия Буль в России была известна по роману задолго до того, как стала известна по алгебре.

Почему значений ровно два, а не десять
Вопрос, который редко задают вслух: почему машина считает в двух значениях? Десятичная арифметика привычнее, и первые счётные машины — от арифмометра до Марк I — были именно десятичными.
Причина не в математике, а в физике сигнала. Любой электрический сигнал зашумлён: напряжение плавает от нагрева, от помех, от старения деталей. Если вы условились кодировать десять цифр десятью уровнями напряжения от 0 до 5 вольт, то на каждую цифру приходится половина вольта, и помеха в четверть вольта уже превращает «семь» в «восемь». Схема будет ошибаться постоянно.
Если же значений два, то весь диапазон делится пополам: ниже определённого порога — ноль, выше — единица. Между ними остаётся широкая зона запаса: чтобы ноль прочитался как единица, помеха должна быть размером почти во всё питание. Такого не бывает.
Отсюда и вся конструкция: два значения выбраны не потому, что так красивее, а потому, что двухуровневый сигнал восстанавливается после каждой ступени и ошибка не накапливается. Сигнал проходит через миллион вентилей и на выходе остаётся таким же чётким, каким был на входе.
А как только значений стало два, готовая математика для них уже существовала — булева алгебра, лежавшая без дела восемьдесят лет.
Пять базовых операций
Определение
Логическая переменная — величина, принимающая всего два значения: 0 (ложь) и 1 (истина). Операции над ними задаются таблицами истинности.
Высказывание, переменная, формула
Высказывание — повествовательное предложение, о котором можно определённо сказать, истинно оно или ложно.
Проверка на экзамене простая:
- • — «Москва — столица России» — высказывание, истинно;
- • — «5 больше 7» — высказывание, ложно;
- • — «Который час?» — не высказывание: вопрос;
- • — «Закройте дверь» — не высказывание: побуждение;
- • — «x больше 3» — не высказывание, а высказывательная форма (предикат): истинность зависит от значения x. Это важно для задания 15, где как раз работают с предикатами вида ДЕЛ(n, m).
Логическая переменная обозначает высказывание и принимает значения 0 или 1. Логическая функция (формула) строится из переменных с помощью операций.
Число различных наборов значений для n переменных равно 2n. Отсюда размер таблицы истинности: для двух переменных 4 строки, для трёх — 8, для четырёх — 16. Это нужно знать не ради формулы, а чтобы оценивать объём перебора: для пяти переменных строк уже 32, и таблицу целиком в задании 2 никто не строит — работают с фрагментом.
Наборы в таблице принято выписывать в порядке возрастания двоичного числа: 000, 001, 010, 011, 100, 101, 110, 111. Такой порядок гарантирует, что ни один набор не потерян и не повторён.
| Отрицание ¬A (НЕ) | меняет значение на противоположное: ¬0=1, ¬1=0 |
|---|---|
| Конъюнкция A∧B (И) | 1 только когда ОБА равны 1 (логическое умножение) |
| Дизъюнкция A∨B (ИЛИ) | 0 только когда ОБА равны 0 (логическое сложение) |
| Импликация A→B | ложна только при A=1, B=0; во всех остальных случаях 1 |
| Тождество A≡B | 1, когда значения совпадают (эквивалентность) |
Разбор всех пяти операций с объяснением, а не только с таблицей
Отрицание ¬A (инверсия, НЕ). Меняет значение на противоположное. В речи — «неверно, что A».
Конъюнкция A∧B (логическое умножение, И). Истинна только когда истинны оба операнда. Легко запомнить через умножение: 1·1=1, всё остальное даёт 0. В речи — «A и B», «как A, так и B».
Дизъюнкция A∨B (логическое сложение, ИЛИ). Ложна только когда ложны оба. В речи — «A или B», причём это неисключающее «или»: если верны оба, дизъюнкция истинна.
Импликация A→B (следование). Ложна в единственном случае: A истинно, B ложно. Это место вызывает больше всего вопросов, поэтому разберём его на бытовом примере.
Обещание: «Если сдам экзамен, куплю торт». Когда обещание нарушено? Только в одном случае: экзамен сдан (A=1), а торта нет (B=0). Если экзамен не сдан, обещание не нарушено независимо от того, куплен торт или нет, — поэтому 0→0 и 0→1 дают 1. Логика не спрашивает, «связаны ли» A и B по смыслу: она смотрит только на значения.
Тождество, которым импликацию заменяют при упрощении: A→B = ¬A∨B. Проверьте по таблице — совпадает во всех четырёх строках.
Эквивалентность A≡B (тождество). Истинна, когда значения совпадают. Тождество: A≡B = (A→B)∧(B→A), а также A≡B = (A∧B)∨(¬A∧¬B).
Приоритет операций (от старшего к младшему): ¬, ∧, ∨, →, ≡. Скобки, как в арифметике, старше всего. Поэтому запись ¬A∧B∨C читается как ((¬A)∧B)∨C, а A∨B→C — как (A∨B)→C.
Самая частая ошибка в задании 2 — посчитать импликацию раньше дизъюнкции. Помните: импликация почти самая слабая операция, слабее неё только эквивалентность.
Приоритет операций (от старшего к младшему): ¬, ∧, ∨, →, ≡. Поэтому ¬A∧B∨C читается как ((¬A)∧B)∨C. Скобки и отрицание считаются раньше всего.
Импликация: почему «из лжи следует что угодно»
На импликации спотыкаются все, и спотыкаются в одном и том же месте: почему 0 → 1 = 1 и 0 → 0 = 1? Разберём это не заклинанием, а по сути, потому что в задании 15 импликация стоит почти в каждой формуле.
Импликация не утверждает, что A является причиной B. Она утверждает только одно: не бывает так, чтобы A было истинно, а B ложно. Это запрет на одну-единственную комбинацию, и больше ничего.
Возьмём правило: «Если число делится на 4, то оно делится на 2». Проверим его на числах.
Число 8: делится на 4 (A = 1) и делится на 2 (B = 1). Правило соблюдено, 1 → 1 = 1. Число 6: на 4 не делится (A = 0), на 2 делится (B = 1). Нарушено ли правило? Нет: правило ничего не обещало про числа, не делящиеся на 4. 0 → 1 = 1. Число 7: не делится ни на 4, ни на 2. Правило снова не нарушено — оно про такие числа молчит. 0 → 0 = 1. Число, которое делится на 4, но не делится на 2, не существует, и именно поэтому правило верно. Если бы такое число нашлось, комбинация 1 → 0 дала бы 0 и опровергла бы правило целиком.
Отсюда рабочая формулировка для экзамена: импликация ищет контрпример. Она равна нулю ровно там, где посылка сработала, а следствие подвело.
И отсюда же главный приём: A → B = ¬A ∨ B. «Либо A не выполнилось, либо B выполнилось» — третьего не дано. Этой заменой начинается решение почти каждого задания 15.
Ловушка: импликацию удобно помнить как равносильность A→B = ¬A∨B. Ложна она в единственном случае «из истины следует ложь» (1→0).
Таблица истинности
Как строить таблицу истинности и не сбиться
Таблица истинности перечисляет все возможные наборы значений переменных и значение формулы на каждом наборе. Для n переменных наборов ровно 2ⁿ: две переменные — четыре строки, три — восемь, четыре — шестнадцать.
Порядок строк. Наборы записывают в порядке возрастания двоичного числа: 000, 001, 010, 011, 100, 101, 110, 111. Это не прихоть: такой порядок гарантирует, что вы ничего не пропустите и не повторите. Практический приём: в первом столбце половина нулей, потом половина единиц; во втором — четверти; в третьем — чередование через один. Получается «лесенка», которую невозможно сбить.
Промежуточные столбцы. Не пытайтесь вычислить всю формулу в уме. Разбейте её на части и заведите столбец на каждую. Для (A ∧ ¬B) ∨ (B → C) столбцы будут такие: A, B, C, ¬B, A ∧ ¬B, B → C, и только потом результат.
Проверка. Сосчитайте, сколько единиц получилось в итоговом столбце, и подумайте, правдоподобно ли это. У дизъюнкции двух переменных единиц три из четырёх, у конъюнкции — одна. У импликации — три. Если у вас в формуле снаружи стоит импликация, а нулей получилось больше, чем единиц, это повод перепроверить.
Тождественно истинная формула (тавтология) — та, у которой в итоговом столбце все единицы. Тождественно ложная — все нули. Эти понятия прямо нужны в задании 15, где спрашивают, при каких значениях параметра выражение истинно при любых значениях переменных.
Логика внутри машины
Что происходит внутри машины
Логическая операция — не абстракция: в процессоре ей соответствует физическая схема из транзисторов.
Транзистор в цифровой схеме работает как управляемый выключатель: есть напряжение на управляющем входе — ток проходит, нет — не проходит. Два состояния, ноль и единица.
Вентиль НЕ (инвертор) собирается из двух транзисторов: когда на входе единица, выход притягивается к нулю, и наоборот.
Вентиль И в простейшем виде — два выключателя последовательно: ток дойдёт до конца, только если замкнуты оба.
Вентиль ИЛИ — два выключателя параллельно: достаточно одного.
Именно это и увидел Шеннон в 1937 году в релейных схемах телефонной станции.
Сколько их в процессоре. В современном процессоре несколько миллиардов транзисторов, то есть сотни миллионов вентилей. Сложение двух 64-битных чисел — это работа схемы из нескольких тысяч вентилей, срабатывающих за доли наносекунды.
Зачем упрощать формулы. Каждый лишний оператор в булевом выражении — это лишние транзисторы, лишняя площадь кристалла, лишнее тепло и лишние наносекунды. Поэтому законы алгебры логики (следующий урок) — не математическое упражнение, а способ сделать процессор меньше и быстрее. Когда вы в задании 15 сворачиваете A ∨ (A ∧ B) в A, вы делаете ровно то, что делает инженер, убирающий из схемы половину деталей.

Те же операции в Python: and, or, not
На экзамене программу пишут на Python, и логические операции там выглядят словами: and, or, not. Но ведут они себя чуть хитрее, чем в учебнике алгебры логики, и это надо знать.
Тип bool наследуется от int. В Python True — это единица, False — ноль, и с ними можно считать: True + True даёт 2, sum([True, False, True]) даёт 2. Приём рабочий: чтобы посчитать, сколько элементов списка удовлетворяют условию, достаточно сложить результаты проверок.
Вычисление сокращённое (ленивое). Выражение a and b вычисляет a, и если оно ложно, к b даже не обращается: результат уже ясен. Так же a or b не смотрит на b, если a истинно. Отсюда безопасная запись x != 0 and 10 / x > 1 — деления на ноль не произойдёт, потому что до него дело не дойдёт.
Возвращается не True/False, а операнд. 2 and 3 даёт 3, 0 or 5 даёт 5. Операция возвращает то значение, на котором остановилась. В условии if это незаметно, но при печати результата удивляет.
Поразрядные операции — другие. Знаки &, |, ^, ~ работают с каждым битом числа отдельно: 12 & 10 даёт 8, потому что 1100 и 1010 совпадают единицами только в старшем разряде. В задачах на логику нужны and/or/not, в задачах на двоичное кодирование — &/|. Перепутать их легко, и ошибка тихая: программа отработает и выдаст неверный ответ.
Как построить таблицу истинности программой
Руками таблицу на шестнадцать строк строить долго и легко ошибиться. На экзамене разрешён компьютер, и таблицу проще напечатать.
``` from itertools import product
for w, x, y, z in product([0, 1], repeat=4):
F = (not (w == y)) or (x <= z)
if F == 0:
print(w, x, y, z)```
Разберём, что здесь написано.
product([0, 1], repeat=4) выдаёт все шестнадцать наборов из нулей и единиц, причём в том же порядке, в каком их пишут в таблице истинности: 0000, 0001, 0010 и так далее. Перебор гарантированно полный.
Эквивалентность y ≡ w записывается как w == y, импликация x → z — как x <= z. Второе неочевидно, но проверяется по таблице: x <= z ложно только при x = 1, z = 0 — ровно там же, где ложна импликация. Это самая удобная запись импликации в Python.
if F == 0 печатает только строки, где функция ложна, — а именно такой фрагмент и дают в задании 2.
Что важно понять про машину. Программа не «понимает» формулу: она честно перебирает все 2ⁿ наборов и для каждого вычисляет выражение. Для четырёх переменных это 16 шагов — мгновение. Для тридцати переменных было бы больше миллиарда наборов, и та же программа считала бы минуты. Рост 2ⁿ — та самая причина, по которой в следующем уроке мы учимся упрощать формулу вместо перебора.
Разбор примера
Строим таблицу истинности по всем восьми наборам
Построить таблицу истинности функции F = (A ∨ B) ∧ ¬C и выписать наборы, на которых F = 1.
Показать решение по шагам
- 1. Шаг 1. Считаем строки. Переменных три, значит наборов 2³ = 8. Выписываем их в порядке возрастания двоичного числа: 000, 001, 010, 011, 100, 101, 110, 111. Такой порядок гарантирует, что ни один набор не потерян и не повторён.
- 2. Шаг 2. Разбираем формулу на части. Сначала считается ¬C (отрицание старше всех), потом A ∨ B, и только потом конъюнкция этих двух кусков. Заведём для них отдельные столбцы — так ошибиться труднее.
- 3. Строка 000: A ∨ B = 0, ¬C = 1, конъюнкция 0 ∧ 1 = 0.
- 4. Строка 001: A ∨ B = 0, ¬C = 0, итог 0.
- 5. Строка 010 (A=0, B=1, C=0): A ∨ B = 1, ¬C = 1, итог 1.
- 6. Строка 011: A ∨ B = 1, но ¬C = 0, итог 0.
- 7. Строка 100: A ∨ B = 1, ¬C = 1, итог 1.
- 8. Строка 101: A ∨ B = 1, ¬C = 0, итог 0.
- 9. Строка 110: A ∨ B = 1, ¬C = 1, итог 1.
- 10. Строка 111: A ∨ B = 1, ¬C = 0, итог 0.
- 11. Шаг 3. Собираем ответ: единица получается ровно на трёх наборах — 010, 100, 110. Во всех трёх C = 0, и это видно из формулы сразу: множитель ¬C обнуляет всё, как только C = 1.
- 12. Шаг 4. Проверка здравым смыслом. Конъюнкция истинна, только когда истинны оба множителя. Второй множитель ¬C истинен на четырёх наборах из восьми (там, где C = 0). Из этих четырёх первый множитель A ∨ B ложен только на 000. Значит, единиц ровно 4 − 1 = 3 ✔ Такая прикидка занимает пять секунд и ловит ошибку в любой строке.
Ответ: F = 1 на наборах 010, 100 и 110
Разбор примера
Та же таблица программой — и проверка тождества
Построить таблицу истинности программой и заодно проверить, что A → B действительно равносильно ¬A ∨ B.
Показать решение по шагам
- 1.
from itertools import product
print('A B C | F') for A, B, C in product([0, 1], repeat=3): F = (A or B) and not C print(A, B, C, '|', int(F)) - 2. Шаг 1.
product([0, 1], repeat=3)выдаёт все восемь наборов в том же порядке, в каком их принято выписывать в таблице: 000, 001, 010, 011, 100, 101, 110, 111. Отдельно упорядочивать ничего не нужно. - 3. Шаг 2. Логические операции в Python пишутся словами:
and— конъюнкция,or— дизъюнкция,not— отрицание. Результат получается типаTrue/False, поэтомуint(F)превращает его в привычные 0 и 1. - 4. Шаг 3. Импликации и эквивалентности в Python нет, но их легко выразить. A → B записывается как
(not A) or B, а короче — какA <= B: для нулей и единиц это то же самое, потому что единственный ложный случай A = 1, B = 0 — это единственный случай, когда A больше B. A ≡ B записывается какA == B. - 5.
Шаг 4. Проверяем тождество A → B = ¬A ∨ B перебором всех наборов:
for A, B in product([0, 1], repeat=2): levo = (not A) or B pravo = A <= B print(A, B, int(levo), int(pravo)) - 6. Шаг 5. Программа печатает четыре строки: «0 0 1 1», «0 1 1 1», «1 0 0 0», «1 1 1 1». Левая и правая колонки совпали на всех четырёх наборах — значит, формулы равносильны.
- 7. Шаг 6. Это и есть машинный способ доказывать тождества: если две формулы совпали на всех наборах, они равносильны. Для трёх переменных это 8 проверок, для четырёх 16, для пяти 32 — компьютер справится мгновенно, а вы избежите ошибки в ручной таблице.
- 8. Шаг 7. Проверка отдельной формулы на тождественную истинность пишется одной строкой:
all((not A) or B == ... for A, B in product([0,1], repeat=2)). ЕслиallвернулTrue, формула истинна при любых значениях переменных — ровно то, что спрашивают в задании 15.
Ответ: Таблица совпала с ручной; тождество A → B = ¬A ∨ B подтверждено
Разбор примера
Вычисление по приоритету операций
Найти значение выражения (¬A ∨ B ∧ C) → A ≡ C при A = 0, B = 1, C = 1.
Показать решение по шагам
- 1. Шаг 0. Порядок операций от старшей к младшей: ¬, ∧, ∨, →, ≡. Скобки его перебивают. В нашем выражении скобка охватывает «¬A ∨ B ∧ C», а импликация и эквивалентность идут после неё.
- 2. Шаг 1. Внутри скобки первым считается отрицание: ¬A = ¬0 = 1.
- 3. Шаг 2. Затем конъюнкция, она старше дизъюнкции: B ∧ C = 1 ∧ 1 = 1. Обратите внимание: без знания приоритета легко прочитать скобку как (¬A ∨ B) ∧ C, и это дало бы другое дерево вычислений.
- 4. Шаг 3. Теперь дизъюнкция: 1 ∨ 1 = 1. Значение скобки равно 1.
- 5. Шаг 4. Импликация: 1 → A = 1 → 0. Это единственный случай, когда импликация ложна, значит результат 0.
- 6. Шаг 5. Эквивалентность (самая младшая): 0 ≡ C = 0 ≡ 1. Значения не совпадают, значит 0.
- 7. Шаг 6. Ответ: 0.
- 8. Шаг 7. Проверка программой:
print(int((((not A) or (B and C)) <= A) == C))при A = 0, B = 1, C = 1 печатает 0 ✔ Обратите внимание, как приоритет превратился в скобки: в Pythonandтоже старшеor, но импликацию через<=приходится обособлять скобками явно, иначе сравнения выстроятся цепочкой.
Ответ: 0
Разбор примера
Сколько наборов обращают формулу в единицу
Сколько существует различных наборов значений переменных x, y, z, w, при которых формула (x → y) ∧ (y → z) ∧ (z → w) истинна?
Показать решение по шагам
- 1. Шаг 1. Наборов всего 2⁴ = 16, и перебрать их можно руками, но у этой формулы есть структура, которая даёт ответ быстрее.
- 2. Шаг 2. Конъюнкция истинна, только когда истинны все три импликации. Импликация p → q ложна ровно при p = 1, q = 0, то есть требование «p → q истинна» означает p не больше q.
- 3. Шаг 3. Три условия вместе дают x ≤ y ≤ z ≤ w: цепочка не убывает. А неубывающая цепочка из нулей и единиц устроена просто — сначала идут нули, потом единицы, и всё определяется местом переключения.
- 4. Шаг 4. Переключиться можно в пяти местах: ни одной единицы (0000), одна (0001), две (0011), три (0111), четыре (1111). Значит, подходящих наборов 5.
- 5.
Шаг 5. Проверка программой:
from itertools import product
kolichestvo = 0 for x, y, z, w in product([0, 1], repeat=4): if (x <= y) and (y <= z) and (z <= w): kolichestvo += 1 print(x, y, z, w) print(kolichestvo) - 6. Шаг 6. Программа печатает те же пять наборов — 0000, 0001, 0011, 0111, 1111 — и число 5 ✔
- 7. Шаг 7. Зачем нужен приём с цепочкой, если есть программа. Во-первых, он мгновенно масштабируется: для цепочки из десяти переменных ответ 11, а перебор 1024 наборов пришлось бы писать. Во-вторых, именно это рассуждение — «импликация означает „не больше“» — и есть основной инструмент задания 15, где вместо переменных стоят множества и отрезки.
Ответ: 5 наборов
Вопрос на проверку
В каком единственном случае импликация A→B ложна?
Ответить и проверить себя — после бесплатной регистрации.
Задание №2 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №15 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №2 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.
Задание №15 в формате экзамена
Ответить и проверить себя — после бесплатной регистрации.