open atlas
↑ К треку
Логика с нуля LOGIC · 02 · 01

Валидные аргументы: modus ponens, modus tollens и ловушки, которые обманывают отладчиков

Валидная форма аргумента гарантирует вывод, когда посылки истинны; корректность добавляет истинность посылок. Modus ponens и modus tollens — два надёжных хода; подтверждение консеквента и отрицание антецедента похожи на них — и именно так ошибаются гипотезы при отладке.

LOGIC Основы ◷ 16 min
Уровень
ОсновыJuniorMiddleSenior

Одиннадцать вечера, релизная ночь. Команда только что включила новый слой кеширования, кто-то открывает дашборд латентности: 40 миллисекунд, красота. «Если кеш работает, латентность низкая. Латентность низкая. Кеш работает — выкатываем». Все идут спать. В девять утра сайт плавится под утренним трафиком, а постмортем выясняет: кеш вообще не был подключён — фиче-флаг был выключен. Латентность в одиннадцать вечера была низкой по куда более скучной причине: сайтом почти никто не пользовался. Рассуждение казалось железным, но имело форму одной из старейших ошибок в логике — ошибки с двухтысячелетним именем. Совершенно безопасная версия того же вывода лежала рядом.

Цель

После этого урока ты можешь отдельно определить валидность и корректность, сформулировать modus ponens и modus tollens, назвать две ловушки, которые их имитируют, и объяснить, почему зелёный дашборд ничего не доказывает о причине.

1

Аргумент — посылки плюс вывод; валидность — свойство формы, а не содержания. В логике аргумент — это список посылок (то, что вы предполагаете или наблюдаете) и один вывод (то, что, по-вашему, из них следует). Аргумент в релизную ночь: посылки — «если кеш работает, латентность низкая» и «латентность низкая» — вывод — «кеш работает». Аргумент валиден, когда его форма делает невозможной ситуацию, где все посылки истинны, а вывод ложен. Валидность — свойство формы, а не темы: та же форма работает для любого предмета.

2

Корректность требует валидной формы И истинных посылок. Валидность ничего не говорит о том, истинны ли посылки на самом деле. Аргумент корректен (sound), когда он валиден и все посылки истинны. «Все пятничные деплои падают; сегодня пятница; значит, деплой упадёт» — совершенно валидно и совершенно бесполезно, потому что первая посылка ложна. Валидная форма плюс ложные посылки не доказывают о мире ничего.

3

Modus ponens и modus tollens — два надёжных хода вывода. Оба начинаются с условия P → Q:

  • Modus ponens («утверждающий модус»): из P → Q и истинного P заключаем Q. Кеш работает, латентность низкая; кеш работает (проверили) — значит, латентность низкая. Подтвердили часть «если» — часть «то» следует.
  • Modus tollens («отрицающий модус»): из P → Q и ложного Q заключаем ¬P. Кеш работает, латентность низкая; латентность высокая — значит, кеш не работает. Это скелет почти каждого реального шага отладки: если бы гипотеза была верна, я бы видел X; я не вижу X — гипотеза мертва.
4

Два самозванца имитируют надёжные формы, но ничего не доказывают. Оба используют те же три ингредиента — условие и два факта — только в неправильном порядке:

  • Подтверждение консеквента: из P → Q и истинного Q заключить P. Это и есть релизная ночь: «латентность низкая, значит кеш работает». Невалидно — Q может быть истинным при ложном P (низкий трафик, прогретая база).
  • Отрицание антецедента: из P → Q и ложного P заключить ¬Q. «Кеш сломан, значит латентность обязана быть высокой». Тоже невалидно: сломав одну причину низкой латентности, вы не запретили все остальные.

Условие P → Q даёт опору ровно в двух случаях: P подтверждено или Q опровергнуто. Два других наблюдения не дают ничего.

Разбор примера

Цепочка отладки с помощью modus tollens.

Гипотеза: баг в парсере. Правило: если баг в парсере, в логах будет битый входной запрос.

Проверка: в логах корректные запросы.

Применяем modus tollens: Q (битый запрос в логах) ложно, значит P (баг в парсере) ложно. Гипотеза о парсере мертва.

Новая гипотеза: баг в мидлваре аутентификации. Правило: если аутентификационный мидлвар сломан, все эндпоинты падают, а не один.

Проверка: падает только /checkout; остальные отвечают нормально.

Применяем modus tollens: Q (все эндпоинты падают) ложно, значит P (аутентификационный мидлвар сломан) ложно. Мидлвар вычеркнут.

Каждое несбывшееся предсказание валидно убирает подозреваемого. Хорошая отладка — дисциплинированное накопление ¬P за ¬P, пока не останется одна гипотеза.

Заметьте: когда предсказание сбывается — парсер-тест показал битый запрос, — вы лишь подтвердили консеквент. Гипотеза выжила, но не доказана. Проектируйте проверки, чей провал был бы информативен, а не только чей успех приятен.

Почему это работает

Почему такая одержимость формой, а не содержанием? Потому что форма — единственное, что можно проверить механически, не зная ничего про кеши или погоду. Валидная форма — это контракт: подайте на вход истинные посылки, и она гарантированно выдаст истинный вывод, о чём бы ни шла речь. Именно эта гарантия позволяет проверке типов в компиляторе, планировщику запросов в базе и вашей собственной голове в три часа ночи использовать один и тот же набор правил вывода. Содержание может вам соврать; валидная форма — никогда: ей можно лишь скормить ложь.

Практика 0 / 5

Назовите правило вывода: из (P → Q) и P заключаем Q.

Назовите правило вывода: из (P → Q) и НЕ Q заключаем НЕ P.

Валидно ли: из «если идёт дождь, улица мокрая» и «улица мокрая» заключить «идёт дождь»? Напишите да или нет.

Аргумент валиден, но посылка ложна. Корректен ли он? Напишите да или нет.

Тест показывает ожидаемый симптом. Доказывает ли это вашу гипотезу? Напишите да или нет.

Проверь себя
Викторина

Правило верно: если кеш работает, латентность низкая. Мониторинг показывает, что латентность НИЗКАЯ. Что можно валидно заключить о кеше?

Итог

Аргумент заслуживает слова «валидный», когда его форма запрещает единственную фатальную комбинацию — все посылки истинны, вывод ложен — независимо от темы; слова «корректный» он заслуживает, лишь когда форма валидна и посылки вдобавок действительно истинны. Условное правило P → Q поддерживает ровно два валидных хода: modus ponens (P подтверждено — заключаем Q) и modus tollens (Q опровергнуто — заключаем ¬P), и второй — скелет отладки: если бы гипотеза была верна, я бы видел X; я не вижу X — гипотеза вычеркнута. Два оставшихся наблюдения — ловушки с классическими именами: подтверждение консеквента (Q истинно, значит P — кешевая ошибка релизной ночи) и отрицание антецедента (P ложно, значит и Q провалится). Зелёный дашборд или прошедший тест означают лишь, что гипотеза выжила; проектируйте проверки, чей провал был бы информативен, накапливайте валидные опровержения и держите валидность и корректность раздельно на ревью — красивый вывод из ложной посылки не доказывает ровно ничего.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 5 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

Примени это

Примени этот урок в реальном проекте.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.