Задание 15
Законы математической логики
Как найти A, при котором формула истинна при любом x: отрезки и множества, точки на плоскости, делимость и биты — вручную и программой.
6 подтем · 40 задач + 5 дополнительных · повышенный · ≈ 3 мин
Подтема 1 из 6
Формула с параметром A
Что спрашивают в задании 15, как вычислить формулу при конкретном x и как найти A — вручную и программой.
Как устроена тема
В задании 15 дана логическая формула с неизвестным числом A. Нужно найти A, при котором формула истинна при любом x. Вот задача, которую мы будем решать всю тему:
«Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула ДЕЛ(x, A) ∨ ((x ∈ [50; 70]) → ¬ДЕЛ(x, 15)) тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной x)?»
Перебирать все x вручную не нужно: почти при любом x формула истинна и без A. Достаточно найти те немногие x, при которых всё решает A. Сначала разберём, что сказано в условии:
| В условии | Что это значит |
|---|---|
| ДЕЛ(x, A) | x делится на A без остатка |
| x ∈ [50; 70] | x лежит на отрезке от 50 до 70, концы тоже входят |
| ¬, ∨, → | логические НЕ, ИЛИ и «если …, то» — разберём ниже |
| тождественно истинна | истинна при каждом натуральном x: 1, 2, 3, … |
| наибольшее натуральное A | из всех подходящих A — самое большое |
Тема состоит из шести подтем — у каждой своя страница. Идём по ним по порядку:
- Формула с параметром A — ты сейчас здесь. Здесь же решим задачу темы: ответ 60.
- Отрезки и множества — A не число, а отрезок или набор чисел.
- Координатная плоскость — две переменные x и y; самый частый вид задачи.
- Делимость — ДЕЛ и общие кратные, как в задаче темы.
- Поразрядная конъюнкция — операция & над двоичными записями.
- Треугольник, MAX и условия с A — дополнительный урок для редких задач.
Почти любую задачу можно решить и вручную, и программой. На экзамене подойдёт любой способ, а второй пригодится для проверки.
Логические операции
Как узнать, истинна ли формула при конкретном x?
При конкретном x каждое условие либо истинно, либо ложно. Истину записывают 1, ложь — 0, а логические операции соединяют эти 0 и 1 в значение всей формулы. Возьмём x = 55: условие x ∈ [50; 70] истинно — 1, а ДЕЛ(55, 15) ложно — 0, ведь 55 на 15 не делится.
| Запись | Истинна, когда | При x = 55 |
|---|---|---|
| ¬p — «не p» | p ложно | ¬ДЕЛ(x, 15) = ¬0 = 1 |
| p ∧ q — «p и q» | истинны обе части | (x ∈ [50; 70]) ∧ ДЕЛ(x, 15) = 1 ∧ 0 = 0 |
| p ∨ q — «p или q» | истинна хотя бы одна часть | (x ∈ [50; 70]) ∨ ДЕЛ(x, 15) = 1 ∨ 0 = 1 |
| p → q — «если p, то q» | всегда, кроме случая 1 → 0 | (x ∈ [50; 70]) → ДЕЛ(x, 15) = 1 → 0 = 0 |
| p ≡ q — «p равносильно q» | значения частей одинаковы | (x ∈ [50; 70]) ≡ ДЕЛ(x, 15) = 1 ≡ 0 = 0 |
С ¬, ∧ и ∨ всё как в обычной речи. На стрелке → ошибаются чаще всего — разберём её отдельно.
Тонкости:порядок действий
Без скобок сначала выполняют ¬, затем ∧, затем ∨, и только потом → и ≡. Скобки меняют порядок, как в арифметике. В условиях ЕГЭ скобки обычно расставлены полностью — следуй им.
Импликация
Когда ложна формула «если p, то q»?
Импликация p → q ложна только в одном случае: p истинно, а q ложно. Во всех остальных случаях она истинна. Это как обещание «если сдашь экзамен, получишь подарок». Оно нарушено, только если экзамен сдан, а подарка нет. Если экзамен не сдан, обещание не нарушено — будет подарок или нет.
| p | q | p → q |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 0 — единственная ложь |
| 1 | 1 | 1 |
Отсюда удобная замена: p → q — то же самое, что ¬p ∨ q. Обе формулы ложны только при p = 1 и q = 0. Заменим так стрелку в задаче темы:
(x ∈ [50; 70]) → ¬ДЕЛ(x, 15) = ¬(x ∈ [50; 70]) ∨ ¬ДЕЛ(x, 15).
Теперь вся формула задачи — три части, соединённые через ИЛИ: ДЕЛ(x, A) ∨ ¬(x ∈ [50; 70]) ∨ ¬ДЕЛ(x, 15).
Тонкости:отрицание скобки
Отрицание скобки меняет ∧ на ∨ и наоборот — это законы де Моргана: ¬(p ∧ q) = ¬p ∨ ¬q и ¬(p ∨ q) = ¬p ∧ ¬q. Например, «неверно, что x на отрезке и делится на 15» — это «x вне отрезка или не делится на 15». А два отрицания подряд снимают друг друга: ¬¬p = p.
Когда всё решает A
Как найти A, не проверяя все x подряд?
Формула из частей через ИЛИ истинна, если истинна хоть одна часть. Поэтому A влияет на ответ только при тех x, где все части без A ложны: там часть с A обязана быть истинной.
В задаче темы части без A — ¬(x ∈ [50; 70]) и ¬ДЕЛ(x, 15). Обе ложны, когда x лежит на отрезке и делится на 15. Такое x одно — 60: соседние кратные 45 и 75 лежат вне отрезка.
| x | Части без A | Что нужно от A |
|---|---|---|
| 7 | ¬(7 ∈ [50; 70]) = 1 | ничего: формула уже истинна |
| 55 | ¬ДЕЛ(55, 15) = 1 | ничего |
| 75 | ¬(75 ∈ [50; 70]) = 1 | ничего |
| 60 | обе равны 0 | ДЕЛ(60, A) = 1: 60 делится на A |
Значит, A должно быть делителем 60. Самый большой делитель 60 — само 60. Ответ задачи темы — 60.
Проверим. При A = 60 формула истинна при x = 60, а при всех остальных x её делают истинной части без A. А любое A больше 60 не делит 60 — при x = 60 формула ложна.
Задача темы программой
Как получить тот же ответ программой?
Программа делает то, что написано в условии: для каждого кандидата A проверяет формулу при всех x из большого диапазона и запоминает подходящие A. Сначала формулу переводят на Python — каждому знаку соответствует своя запись:
| В условии | На Python |
|---|---|
| ДЕЛ(x, A) | x % A == 0 |
| ¬ДЕЛ(x, 15) | x % 15 != 0 |
| x ∈ [50; 70] | 50 <= x <= 70 |
| ¬p | not p |
| p ∧ q | p and q |
| p ∨ q | p or q |
| p → q | imp(p, q) |
| p ≡ q | p == q |
Для стрелки готового знака нет, поэтому заведём imp(p, q) — она возвращает ¬p ∨ q. Формулу задачи запишем функцией f(x, A):
def imp(p, q): return (not p) or q def f(x, A): return x % A == 0 or imp(50 <= x <= 70, x % 15 != 0)Теперь переберём кандидатов A и для каждого проверим все x:
answer = 0for A in range(1, 1000): if all(f(x, A) for x in range(1, 1000)): answer = Aprint(answer) истинно, только если f(x, A) истинна при каждом x от 1 до 999. Кандидаты A идут по возрастанию, поэтому последнее запомненное A — наибольшее.
Почему x до 999 хватает? Вне отрезка [50; 70] формула истинна сама — все x, где решает A, лежат внутри диапазона. Диапазон берут с запасом, чтобы он накрыл все числа условия.
Тонкости:наименьшее A и запись через <=
Если спрашивают наименьшее A, печатают первое подходящее и останавливают цикл:
for A in range(1, 1000): if all(f(x, A) for x in range(1, 1000)): print(A) breakВ разборах стрелку часто пишут как p <= q: для True и False это совпадает с импликацией. Но сравнение выполняется раньше not, and и or, и без лишних скобок легко ошибиться — функция imp надёжнее.
Итого
- Формула при xкаждое условие — 1 или 0
- p → qложна только при 1 → 0; это ¬p ∨ q
- Части через ИЛИистинна, если истинна хоть одна часть
- Когда решает Aвсе части без A ложны — часть с A обязана быть 1
- Задача темырешает только x = 60 → A делит 60 → 60
- Python
imp,f(x, A),all(...)по всем x
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Импликация 0 → 0
Чему равно значение импликации p → q при p = 0 и q = 0?
Введите число.
Подсказка
Импликация ложна только в одном случае: слева 1, справа 0.
Решение
Левая часть ложна, поэтому импликация ничего не нарушает: 0 → 0 = 1. Ложной она бывает только при p = 1 и q = 0.
Ответ: 1
Наименьшее A: x < 12
Для какого наименьшего целого числа A формула (x < 12) → (x ≤ A) тождественно истинна, то есть принимает значение 1 при любом неотрицательном целом x?
Введите число.
Подсказка
Всё решает A там, где левая часть истинна: при x от 0 до 11.
Решение
При x ≥ 12 левая часть ложна, и формула истинна сама. При x от 0 до 11 нужно x ≤ A — значит, A не меньше самого большого из этих x, то есть 11. При A = 10 формула ложна при x = 11.
def imp(p, q): return (not p) or q def f(x, A): return imp(x < 12, x <= A) for A in range(-100, 1000): if all(f(x, A) for x in range(0, 1000)): print(A) breakОтвет: 11
Наибольшее A: x ≥ 5
Для какого наибольшего целого числа A формула (x ≥ 5) → (x > A) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Всё решает A при x ≥ 5; самый трудный из них — самый маленький.
Решение
При x от 1 до 4 левая часть ложна, формула истинна сама. При x ≥ 5 нужно x > A, и труднее всего при x = 5: 5 > A, то есть A ≤ 4. Наибольшее A — 4.
def imp(p, q): return (not p) or q def f(x, A): return imp(x >= 5, x > A) answer = Nonefor A in range(-100, 1000): if all(f(x, A) for x in range(1, 1000)): answer = Aprint(answer)Ответ: 4
Наименьшее A: 3x < A
Для какого наименьшего целого числа A формула (x ≤ 8) → (3x < A) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Найди самое большое значение 3x при x от 1 до 8.
Решение
Всё решает A при x от 1 до 8: там нужно 3x < A. Самое большое 3x на них — 24 при x = 8. Нужно 24 < A, наименьшее целое A = 25.
def imp(p, q): return (not p) or q def f(x, A): return imp(x <= 8, 3 * x < A) for A in range(-100, 1000): if all(f(x, A) for x in range(1, 1000)): print(A) breakОтвет: 25
Наименьшее A: x² ≤ A
Для какого наименьшего целого числа A формула (x < 5) → (x · x ≤ A) тождественно истинна при любом неотрицательном целом x?
Введите число.
Подсказка
Всё решает A при x от 0 до 4.
Решение
При x ≥ 5 левая часть ложна. При x от 0 до 4 нужно x · x ≤ A, а самое большое x · x среди них — 16 при x = 4. Знак нестрогий, поэтому A = 16 подходит, а 15 — уже нет.
def imp(p, q): return (not p) or q def f(x, A): return imp(x < 5, x * x <= A) for A in range(-100, 1000): if all(f(x, A) for x in range(0, 1000)): print(A) breakОтвет: 16
Наибольшее A: отрезок [40; 50]
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула ДЕЛ(x, A) ∨ ((x ∈ [40; 50]) → ¬ДЕЛ(x, 12)) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Как в задаче темы: найди кратные 12 на отрезке [40; 50].
Решение
Стрелку заменяем: ДЕЛ(x, A) ∨ ¬(x ∈ [40; 50]) ∨ ¬ДЕЛ(x, 12). Части без A ложны, когда x на отрезке и кратно 12 — это только 48 (36 и 60 вне отрезка). Значит, 48 должно делиться на A. Наибольший делитель 48 — оно само.
def imp(p, q): return (not p) or q def f(x, A): return x % A == 0 or imp(40 <= x <= 50, x % 12 != 0) answer = Nonefor A in range(1, 1000): if all(f(x, A) for x in range(1, 1000)): answer = Aprint(answer)Ответ: 48