Тип 15 № 14233 

Преобразование логических выражений. Числовые отрезки
i
На числовой прямой даны два отрезка: P = [17, 46] и Q = [22, 57]. Отрезок A таков, что приведённая ниже формула истинна при любом значении переменной х:
¬(x ∈ A) →(((x ∈ P) ⋀ (x ∈ Q)) → (x ∈ A))
Какова наименьшая возможная длина отрезка A?
Решение. Введем обозначения: (x ∈А) ≡ A; (x ∈ P) ≡ P; (x ∈ Q) ≡ Q.
Применив преобразование импликации, получаем:
A ∨ (¬(P · Q) ∨ A).
Применив закон де Моргана и правило упрощения, получаем:
¬P ∨ ¬Q ∨ A.
Логическое ИЛИ истинно, если истинно хоть какое-то из утверждений. Выражение ¬P истинно тогда, когда x∈(−∞,17)U(46,∞), а выражение ¬Q истинно тогда, когда x∈(–∞,22)U(57,∞). Следовательно, A должно быть истинно как минимум на отрезке [22; 46]. Длина отрезка равна 46 − 22 = 24.
Ответ: 24.
Приведём решение Константина Гайнуллина на языке Python.
a = []
for nach in range(100):
for kon in range(100):
fl = True
for x in range(100):
if not((not(nach<=x<=kon))<=(((17<=x<=46) and (22<=x<=57))<=(nach<=x<=kon))):
fl = False
break
if fl == True:
a += [kon-nach]
print(min(a))
Приведём решение Ивана Гладких на языке Python.
list = []
P = [i for i in range(17, 47)]
Q = [i for i in range(22, 58)]
for Amin in range(1, 100):
for Amax in range(Amin + 1, 100):
check = 1
A = [i for i in range(Amin, Amax)]
for x in range(-150, 100):
f = (not(x in A)) <= (((x in P) and (x in Q)) <= (x in A))
if not f:
check = 0
break
if check == 1:
m = Amax - Amin
list.append(m)
print(min(list)-1)
Приведём решение Ярослава Чипаренкова на языке Python.
P = list(range(17, 47))
Q = list(range(22, 58))
A = []
for x in range(0, 100):
if ((not (x in A)) <= (((x in P) and (x in Q)) <= (x in A))) == False:
A.append(x)
print(len(A)-1)
Примечание.
О длине отрезка написано в примечании к задаче 11119.
Ответ: 24