Тип 15 № 89198 
Преобразование логических выражений. Числовые отрезки
i
На числовой прямой даны два отрезка:
P = [−19826; 22713]
и
Q = [−11089; 185111].
Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение
(x ∈ P) → (((x ∈ Q) ∧ ¬(x ∈ A)) → ¬(x ∈ P))
истинно (т. е. принимает значение 1) при любом значении переменной х.
Решение. Введем обозначения:
(x ∈А) ≡ A; (x ∈ P) ≡ P; (x ∈ Q) ≡ Q.
Преобразовав, получаем:
P → ((Q ∧ ¬A) → ¬P) = P → (¬(Q ∧ ¬A) ∨ ¬P) =¬P ∨ (¬Q ∨ A ∨ ¬P) = ¬P ∨ ¬Q ∨ A
Логическое ИЛИ истинно, если истинно хотя бы одно утверждение.
Условию ¬P= 1 удовлетворяют лучи (−∞; −19826) и ( 22713; +∞)
Условию ¬Q= 1 удовлетворяют лучи (−∞; −11089) и (185111; +∞)
Поскольку выражение (x ∈ P) → (((x ∈ Q) ∧ ¬(x ∈ A)) → ¬(x ∈ P)) должно быть тождественно истинным, выражение A должно быть истинно на отрезке (−11089; 22713) . Следовательно, наименьшая длина отрезка А равна 22713 − (−11089) = 33802.
Ответ: 33802.
Приведём решение Сергея Донец на PascalABC.NET:
begin
var P := -19826..22713;var Q := -11089..185111;
var setX:=|P.First,P.Last,Q.First,Q.Last,-9999999,9999999|
.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.
Ответ: 33802