Информатика · тема 2 из 13 · ОГЭ № 3 · ЕГЭ № 2, 15

Логика и таблицы истинности

Логические операции, таблицы истинности и формулы с параметром — от простого ОГЭ-3 до ЕГЭ-2 и ЕГЭ-15, которые удобно решать перебором на Python.

25 мин чтенияОГЭЕГЭ22 задания

Коротко

главное за 30 секунд
  1. Приоритет: НЕ (¬), И (∧), ИЛИ (∨), импликация (→), эквивалентность (≡)
  2. Импликация A → B ложна только при A = 1, B = 0; равносильна ¬A ∨ B
  3. Таблица истинности для n переменных содержит 2n строк
  4. НЕ (x < 5) — это x ≥ 5, а не x > 5
  5. ЕГЭ-2 и ЕГЭ-15 решаются перебором: itertools.product, permutations, цикл по A

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

Высказывание — утверждение, про которое можно сказать, истинно оно (1) или ложно (0). Из простых высказываний операции строят сложные.

ОперацияОбозначениеPythonИстинна, когда
Отрицание (НЕ)¬Anot AA ложно
Конъюнкция (И)A ∧ BA and Bоба истинны
Дизъюнкция (ИЛИ)A ∨ BA or Bхотя бы одно истинно
ИмпликацияA → BA <= Bвсегда, кроме 1 → 0
ЭквивалентностьA ≡ BA == Bзначения совпадают
Порядок действий: скобки → ¬ → ∧ → ∨ → → → ≡.
Импликация: A → B = ¬A ∨ B. Законы де Моргана: ¬(A ∧ B) = ¬A ∨ ¬B; ¬(A ∨ B) = ¬A ∧ ¬B.
Импликация — «обещание»: «если A, то B» нарушено только тогда, когда A выполнено, а B нет. Если A ложно, импликация истинна при любом B. В Python её пишут как A <= B (только для логических значений 0/1 и True/False!).
ABA ∧ B (И)ABA ∨ B (ИЛИ)
Рис. 1. Конъюнкция A ∧ B — пересечение (оба истинны); дизъюнкция A ∨ B — объединение (хотя бы одно)

Таблицы истинности

Таблица истинности перечисляет все наборы значений переменных. Для $n$ переменных наборов $2^n$: для двух — 4, для трёх — 8, для четырёх — 16.

Пример. Таблица для F = A → B:

ABF
001
011
100
111

Постройте таблицу для любой формулы в тренажёре:

Интерактив «Таблицы истинности» — открыть в тренажёре →

Проверь себя. Сколько строк в таблице истинности функции от 5 переменных?

Ответ: 32

ОГЭ-3: при каком x высказывание истинно

В задании 3 ОГЭ нужно найти наибольшее или наименьшее число (или имя, слово), при котором составное высказывание истинно или ложно.

Пример. Найдите наименьшее натуральное x, для которого истинно: НЕ (x < 5) И (x нечётное).

НЕ (x < 5) означает x ≥ 5. Наименьшее нечётное число, не меньшее 5, — это 5.

Отрицание «меньше» — это «больше или равно». Если написать x > 5, потеряете граничное значение и получите неверный ответ 7.
Если просят, чтобы высказывание было ложно, сначала поставьте НЕ перед всем выражением и раскройте по законам де Моргана: ¬(A ∨ B) = ¬A ∧ ¬B — оба условия должны нарушаться одновременно.

ЕГЭ-2: фрагмент таблицы истинности

Дана функция F от x, y, z, w и фрагмент её таблицы, где столбцы переменных перепутаны, а часть клеток пуста. Нужно понять, какой переменной соответствует каждый столбец.

Схема решения программой: перебрать все способы заполнить пустые клетки (product) и все перестановки имён столбцов (permutations); оставить те, где строки различны и F даёт нужные значения.
from itertools import product, permutations

def F(x, y, z, w):
    return (x or y) <= (z == w)

for a in product([0, 1], repeat=5):          # 5 пустых клеток
    t = [(1, a[0], 0, a[1]), (a[2], 1, a[3], 0), (1, 1, a[4], 1)]
    if len(set(t)) == len(t):                # строки должны быть различны
        for p in permutations('xyzw'):
            if all(F(**dict(zip(p, r))) == 0 for r in t):
                print(''.join(p))
Не забудьте проверку len(set(t)) == len(t): в условии сказано, что строки фрагмента различны. Без неё программа может выдать лишние варианты ответа.

ЕГЭ-15: ДЕЛ, отрезки и поразрядные операции

В задании 15 формула содержит параметр A, и нужно найти A, при котором формула тождественно истинна (истинна при любом x). Встречаются три вида:

  • ДЕЛ(n, m) — «n делится на m без остатка» — в Python n % m == 0;
  • отрезки на числовой прямой: x ∈ P — в Python P[0] <= x <= P[1];
  • поразрядная конъюнкция m & n — в Python тот же оператор &.

Пример. Для какого наименьшего натурального A формула (ДЕЛ(x, A) ∧ ДЕЛ(x, 36)) → ДЕЛ(x, 24) тождественно истинна?

def ok(A):
    for x in range(1, 10000):
        if not ((x % A == 0 and x % 36 == 0) <= (x % 24 == 0)):
            return False
    return True

print(min(A for A in range(1, 1000) if ok(A)))   # 8

Логика: число, кратное и A, и 36, должно делиться на 24 = 8·3. В 36 = 4·9 тройка есть, а двойка входит только во второй степени — недостающую восьмёрку должен дать A. Ответ 8.

Перебирайте x в достаточно большом диапазоне. Если диапазон мал, «подходящими» окажутся огромные A — просто потому, что до них перебор не дошёл.
Проверь себя. При каком наибольшем натуральном A формула ДЕЛ(x, 12) → ДЕЛ(x, A) тождественно истинна?

Ответ: 12

Практика

Закрепите тему: 22 задания для ОГЭ и ЕГЭ

От простых к сложным: базовый уровень — 7, повышенный — 9, высокий — 6. Мгновенная проверка, подсказки, подробные решения и тренажёр ошибок.

Решать задания по теме Флеш-карточки