Тема 15. Алгебра логики – преобразование логических выражений

15.05 Отрезки

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгебра логики – преобразование логических выражений
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#87943

На числовой прямой даны два отрезка: P = [15,44]  и Q = [20,46]  . Отрезок A таков, что формула

(x ∈ P) −→ ((¬(x ∈ Q )∧ ¬(x ∈ A)) → ¬(x ∈ P ))

тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.

Показать ответ и решение

Руками:

Заменим импликацию на отрицание первого или второе:

¬(x ∈ P )∨ (((x ∈ Q )∨ (x ∈ A))∨ ¬(x ∈ P ))

Избавимся от скобок и от повторяющейся ¬(x ∈ P )  :

¬ (x ∈ P)∨ (x ∈ Q )∨ (x ∈ A)

Найдем случаи, когда известная часть равна 0 и тогда мы узнаем какой должен быть отрезок А для того чтобы выражение было тождественно истинным. Для этого запишем её отрицание:

(x ∈ P )∧ (x ∕∈ Q)

Оно равно 1 если x находится в P и при этом не находится в Q. Это отрезок [15;19]. Его длина равна 4.

Ответ: 4

Прогой:

Для нахождения наименьшей длины отрезка A  , при котором выражение

(x ∈ P) −→ ((¬(x ∈ Q )∧ ¬(x ∈ A)) → ¬(x ∈ P ))

тождественно истинно для всех натуральных x  , используем программный перебор. Идея заключается в том, чтобы перебрать все возможные отрезки A = [a1,a2]  с 1 ≤ a1 < a2 ≤ 500  . Для каждого отрезка создаём список всех целых чисел x  внутри A  . Далее проверяем истинность формулы для всех x  от 1 до 499. Если хотя бы для одного x  формула ложна, текущий отрезок A  отбрасываем. Если выражение истинно для всех x  , вычисляем длину A  и обновляем минимальное найденное значение. В конце цикла минимальное значение длины отрезка A  будет ответом.

p = [i for i in range(15, 45)]  # список всех целых чисел в отрезке P
q = [i for i in range(20, 47)]  # список всех целых чисел в отрезке Q
mn = 10**10  # переменная для хранения минимальной длины A
# перебор всех возможных левых концов отрезка A
for a1 in range(1, 500):
    # перебор всех возможных правых концов отрезка A, строго больше a1
    for a2 in range(a1+1, 501):
        c = 0  # флаг: 0 - выражение истинно для всех x, 1 - найдена ложь
        a = [i for i in range(a1, a2)]  # список всех чисел в текущем отрезке A
        # проверка формулы для всех x от 1 до 499
        for x in range(1, 500):
            if ((x in p) <= ((not(x in q) and not(x in a)) <= (not(x in p)))) == False:
                c = 1
                break  # если ложь, прекращаем проверку текущего A
        # если выражение истинно для всех x, обновляем минимальную длину
        if c == 0:
            mn = min(len(a)-1, mn)
print(mn)  # выводим наименьшую длину подходящего отрезка A

Ответ: 4

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!