На числовой прямой даны два отрезка: P = [5, 17] и Q = [13, 23]. Найдите наибольшую возможную длину отрезка A, при котором формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной x.
Решение руками
Первым шагом раскроем импликацию:
Инвертируем известную часть, чтобы понять при каких выражение ложно:
Это выражение истино (а исходное соответственно ложно), когда не принадлежит отрезку
, и не принадлежит отрезку
одновременно. Это будут
. Чтобы исходное выражение было истино при любом
необходимо «перекрыть» областью
как минимум эту область. Тогда отрезок
будет
или меньне, но в этих границах. Так как в задании просят найти максимальную длину, то
, а его длина
.
Решение программой 1:
p = {i for i in range(5, 18)}
q = {i for i in range(13, 24)}
ans = []
for a1 in range(1, 50):
for a2 in range(a1 + 1, 51):
f = 0
for x in range(1, 51):
if (((a1 <= x <= a2) <= (x in p)) or (x in q)) == False:
f=1
break
if f == 0:
ans += [a2 - a1]
print(max(ans))
Решение программой 2:
# функция, которая проверяет, принадлежит ли x отрезку
def F(start, end, x):
if start <= x <= end:
return True
else:
return False
lens = []
# левая граница искомого отрезка
for a in range(1, 500+1):
# правая граница искомого отрезка
for b in range(a, 500+1):
f = 0
for x in range(1, 1000):
if ((F(a, b, x) <= F(5, 17, x)) or F(13, 23, x)) == False:
f = 1
break
if f == 0:
# добавляем длину отрезка в массив
lens.append(b-a)
print(max(lens))