На числовой прямой даны два отрезка: P = [15; 40] и Q = [21; 63]. Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
(x ∈ P) → (((x ∈ Q) ∧ ¬(x ∈ A)) → ¬(x ∈ P))
истинно (т. е. принимает значение 1) при любом значении переменной х.
Введем обозначения:
Тогда, применив преобразование импликации, получаем:
Данное выражение будет истинно на отрезках
В таком случае, для того, чтобы выражение было истинно при
Ответ: 19.
Приведём решение Сергея Корчажкина на языке Python.
p = list(range(15,41))
q = list(range(21,64))
mn = 100
for b in range(15,64):
for e in range(15, 64):
a = list(range(b,e+1))
if all([(x in p) <=(((x in q) and (x not in a)) <= (x not in p)) for x in range(1,100)]):
mn = min(mn,a[-1]-a[0])
print(mn)
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := 15..40;var Q := 21..63;
var setX := |P.First,P.Last,Q.First,Q.Last,-99999,99999|
.SelectMany(x -> |x - 0.1, x, x + 0.1|);
setX.Order.Combinations(2).Select(m -> m[0]..m[1])
.Where(A -> setX.All(x ->
(x in P)<=(((x in Q)and not(x in A))<=not(x in P))
)).Min(A -> A.Size).Round.Print;
end.

