Тип 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.
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := 17..46;var Q := 22..57;
var setX:=|P.First,P.Last,Q.First,Q.Last,-999,999|
.SelectMany(x->|x-0.1,x,x+0.1|);
setX.Order.Combinations(2).Select(m->m[0]..m[1])
.Where(A->setX.All(x->
not(x in A)<=(((x in P)and(x in Q))<=(x in A))
)).Min(A->A.Size).Print;
end.
Ответ: 24