Top.Mail.Ru

Понятия и законы математической логики (Задание №15)

11 класс

Поделиться статьей:

Informatics

В этой статье вспомним основные понятия и законы математической логики, а также научимся решать задание №15 из ЕГЭ по информатике с помощью программирования.

Термины, которые будем использовать: таблица истинности, логическая функция, логическая операция, логическая переменная, логическое отрицание, конъюнкция, дизъюнкция, импликация, эквивалентность.

Основные понятия

  • Единица в алгебре логики принимает значение «истина», а ноль — «ложь».
  • Логическая функция — это функция, принимающая в качестве аргументов только единицы или нули и возвращающая одно из этих двух значений.
  • Логическая операция — это простейшая логическая функция, которую используют для построения сложных выражений. Например, в математике арифметические знаки («+», «–», «*», «/») используют для составления сложных уравнений — такую же роль играют логические операции для функций.
  • Логическая переменная — это переменная, принимающая значение 1 или 0, которая является аргументом логической функции.
  • Таблица истинности — это таблица, заполненная 1 и 0, в каждой строке которой описана новая комбинация значений логических переменных и соответствующий ей результат логического выражения.

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

Каждая логическая функция или операция имеет свою таблицу истинности, давай рассмотрим самые популярные из них:

1. Отрицание (инверсия).

Чаще всего в ЕГЭ встречается следующее обозначение: ¬A, читается «не А», но также можно встретить А.

Отрицание возвращает противоположное значение исходному, но, так как значений всего два, то единица противоположна нулю, а ноль — единице.

Обрати внимание на таблицу истинности для этой логической операции:

А¬A
10
01

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

2. Логическое И (конъюнкция).

Чаще всего в ЕГЭ встречается следующее обозначение: A∩B, читается «А и Б».

Конъюнкция возвращает истину только в том случае, если обе логические переменные принимают значения единицы, в противном случае она вернёт ложь.

ABA∩B
000
010
100
111

Для двух переменных количество всевозможных комбинаций равняется четырём.

3. Логическое ИЛИ (дизъюнкция).

Чаще всего в ЕГЭ встречается следующее обозначение: A∪B, читается «А или Б».

Дизъюнкция возвращает ложь только в том случае, когда обе переменные принимают значения нуля, в остальных случаях она вернёт истину.

ABA∪B
000
011
101
111

Как отличить знаки конъюнкции и дизъюнкции. Над знаком ∩ (логическое И) можно поставить только одну букву И, а над знаком ∪ (логическое ИЛИ) можно разместить сразу обе.

4. Импликация (следование).

Чаще всего в ЕГЭ встречается следующее обозначение: A→B, читается «Из А следует Б» или «Если А, то Б».

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

ABA→B
001
011
100
111

Выражение A→B можно раскрыть как ¬A∪B, то есть вместо знака импликации перед первой переменной появляется отрицание, а между ними — логическое ИЛИ.

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

Давай убедимся в этом и составим таблицу истинности в два шага: сначала выполни операцию отрицания, потом раскрой логическое ИЛИ для каждой из четырёх комбинаций: 00, 01, 10, 11. Проверь себя:

АB¬AB¬A∪B
00101
01111
10000
11011

5. Эквивалентность (равносильность).

Чаще всего в ЕГЭ встречается следующее обозначение: A≡B, читается «А эквивалентно Б» или «А равносильно Б».

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

ABA≡B
001
010
100
111

Сопоставим логические операции в алгебре логики с их аналогами на языке Python.

Алгебра логикиPython
¬A или $\overline{A}$not A
and
or
<=
≡ или ~==
in
not in
&&
Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

Практикум: решение задач

Рассмотрим каждый тип задания №15, который встречался на реальном ЕГЭ:

Задание 1. Основная волна 2025

Для какого наибольшего целого неотрицательного числа А логическое выражение:

(x⋅y>А)∨(x>y)∨(11>x)

тождественно истинно (т. е. принимает значение 1) при любых целых неотрицательных x и y?

def f(x, y):

# просто переписываем нашу функцию

return (x ⋅ y > A) or (x > y) or (11 > x)

res = 0

# всегда внешний цикл перебирает А, потому что для каждого А нужно проверить множество x и y
for A in range(1000):

# если функция вернула истину для всех пар x и y — функция all вернёт истину (такое А подойдёт)

if all(f(x, y) for x in range(500) for y in range(500)):

# запоминаем наибольшее А

res = A

print(res)

Ответ: 120.

! Важно !

Если ты перебираешь до 1000, и твой ответ = 999, вероятно, есть число А ещё больше, либо где-то в коде ошибка.

Задание 2. Основная волна 2024

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Пусть на числовой прямой дан отрезок B = [70, 90]. Для какого наибольшего натурального числа А логическое выражение:

ДЕЛ(x, А) ∨ ((x ∈ B) → ¬ДЕЛ(x, 22))

истинно (т. е. принимает значение 1) при любом целом положительном значении переменной х?

def f(x):

B = 70 <= x <= 90

# просто переписываем нашу функцию, вместо отрицания ставим знак неравенства

return (x % A == 0) or (B <= (x % 22 != 0))

res = 0

# всегда внешний цикл перебирает А, потому что для каждого А нужно проверить множество x

for A in range(1, 1000):

# если функция вернула истину для всех x — функция all вернёт истину (такое А подойдёт)

if all(f(x) for x in range(1, 500)):

# запоминаем наибольшее А

res = A

print(res)

Ответ: 88.

Задание 3. Основная волна 2024

На числовой прямой даны два отрезка: P = [15;40] и Q = [21;63]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение:

(xP)→(((xQ)∧¬(xA))→¬(xP))

истинно (т. е. принимает значение 1) при любом значении переменной х.

def f(x):

# записываем в переменные значения правда/ложь в зависимости от того, попадает ли х в промежуток

P = 15 <= x <= 40

Q = 21 <= x <= 63

A = a1 <= x <= a2

return P <= ((Q and (not A)) <= (not P))

# формируем список точек для проверки (именно в них функция будет принимать новые значения)

# в первый кортеж записываем все известные границы диапазонов из условия

d = [y for x in (15, 40, 21, 63) for y in (x – 0.1, x, x + 0.1)]

res = []

# перебираем границы диапазона А

for a1 in d:

for a2 in d:

# проверяем, что правая граница больше левой и функция истина для всех х

if a2 > a1 and all(f(x) for x in range(–200, 500)):

# добавляем длину отрезка

res.append(round(a2 – a1))

print(min(res))

Ответ: 19.

Задание 4. Открытый вариант 2025

Обозначим через m & n поразрядную конъюнкцию неотрицательных целых чисел m и n. Так, например, 14 & 5 = 1110₂ & 0101₂ = 0100₂ = 4.

Для какого наименьшего неотрицательного целого числа А логическое выражение:

((x&52≠0)∧(x&48=0))→¬(x&А=0)

истинно (т. е. принимает значение 1) при любом неотрицательном целом значении переменной х?

def f(x):

# просто переписываем нашу функцию

return ((x & 52 != 0) and (x & 48 == 0)) <= (x & A != 0)

# всегда внешний цикл перебирает А, потому что для каждого А нужно проверить множество x

for A in range(1000):

# если функция вернула истину для всех x — функция all вернёт истину (такое А подойдёт)

if all(f(x) for x in range(500)):

print(A)

break

Ответ: 4.

Задание 5. Досрочная волна 2024

На числовой прямой даны два отрезка: B = [24;90] и C = [47;115]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение:

(x∈C)→((¬(x∈A)∧(x∈B))→¬(x∈C))

истинно (т. е. принимает значение 1) при любом значении переменной х.

def f(x):

# записываем в переменные значения правда/ложь в зависимости от того, попадает ли х в промежуток

B = 24 <= x <= 90

C = 47 <= x <= 115

A = a1 <= x <= a2

return C <= (((not A) and B) <= (not C))

# формируем список точек для проверки (именно в них функция будет принимать новые значения)

# в первый кортеж записываем все известные границы диапазонов из условия

d = [y for x in (24, 90, 47, 115) for y in (x – 0.1, x, x + 0.1)]

res = []

# перебираем границы диапазона А

for a1 in d:

for a2 in d:

# проверяем, что правая граница больше левой и функция истина для всех х

if a2 > a1 and all(f(x) for x in range(–200, 500)):

# добавляем длину отрезка

res.append(round(a2 – a1))

print(min(res))

Ответ: 43.

Заключение

Мы повторили основные понятия и законы математической логики, необходимые для решения задания №15 из ЕГЭ по информатике. Теперь ты знаешь, как подходить к таким заданиям системно. Главное — внимательно переписывать логическое выражение на язык программирования и правильно выбирать диапазон перебора. Успешной подготовки и высоких баллов на экзамене!

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

В 100б ты пробьёшь свой
максимум на экзаменах

наши лучшие курсы

Выбери подходящий курс и предмет, чтобы прокачаться и сдать ОГЭ на «5», а ЕГЭ на 80+ баллов

Выбрать курс

бесплатные материалы

Курсы, вебы, чек-листы — всё за 0 ₽

Забрать за 0 ₽

Интенсив по поступлению

Запишись на интенсив по поступлению, чтобы
взять из ЕГЭ максимум и попасть в вуз мечты

Записаться
В 100балльном репетиторе ты пробьёшь свой максимум на экзаменах

Преимущества подготовки
в 100балльном

10+
лет средний опыт наших преподавателей

18
выпускников сдали ЕГЭ
на 200 из 200 в 2024 году

300k+
учеников поступили в вуз мечты с нашей помощью 

14%
стобалльников России — наши выпускники

2 347
выпускника сдали ЕГЭ на 100 баллов

Преимущества подготовки в 100балльном

Запишись
на бесплатный
вводный урок

Познакомим с преподавателями и платформой

Расскажем про учёбу

Поможем поставить цель

  • 11 класс
  • 10 класс
  • 9 класс
  • 8 класс
  • 7 класс
Запись на вводный урок

Список всех тем