Академический и инженерный разбор
Формальная валидность задаёт жёсткий стандарт:
Не существует интерпретации, где все посылки истинны, а заключение ложно.
Поэтому главный инструмент — не название, а контрмодель. Одного возможного
случая с истинными посылками и ложным заключением достаточно, чтобы разрушить
претензию на дедуктивную необходимость.
flowchart LR
A["Аргумент"] --> B["Заменить содержание символами"]
B --> C{"Есть модель:
посылки истинны,
вывод ложен?"}
C -->|Да| D["Форма невалидна"]
C -->|Нет| E["Контрпример не найден"]
E --> F["Докажите валидность
правилом или семантикой"]
D --> G["Укажите минимальный
контрпример"]
Правило главы
Для опровержения невалидной формы достаточно одного контрпримера. Для
подтверждения валидности перебора примеров недостаточно — нужен общий
аргумент или исчерпывающая семантика.
1. Утверждение следствия
Пример:
Если истёк сертификат, TLS handshake падает.
Handshake падает.
Следовательно, сертификат истёк.
Контрмодель:
P = сертификат истёк false
Q = handshake падает true из-за несовместимого cipher suite
Посылки истинны, заключение ложно.
Ближайшая валидная форма
Диагностическое правило
Следствие редко уникально для одной причины. Ищите другие достаточные условия
для Q.
2. Отрицание основания
Пример:
Если запрос пришёл от администратора, он может читать отчёт.
Запрос не от администратора.
Следовательно, читать отчёт нельзя.
Возможно, право есть у аудитора.
Ближайшая валидная форма
P → Q
¬Q
∴ ¬P modus tollens
Источник ошибки
Достаточное условие принимают за необходимое.
3. Неверное обращение условного
Из:
делают:
Это та же логика, что утверждение следствия, но ошибка может возникнуть без
явной второй посылки:
Все критические сервисы имеют on-call, поэтому сервис с on-call является
критическим.
Корректная контрапозиция:
4. Неверная инверсия
Из:
делают:
Обращение и инверсия эквивалентны друг другу, но не исходной импликации.
5. Утверждение дизъюнкта
Для включающего ∨ форма невалидна: P и Q могут быть истинны вместе.
В инциденте есть ошибка конфигурации или ошибка кода.
Есть ошибка конфигурации.
Следовательно, ошибки кода нет.
Возможны обе.
Форма валидна для явно исключающего:
6. Ложная исчерпывающая дизъюнкция
Разделительный силлогизм может быть формально валиден относительно посылки,
но посылка не покрывает варианты:
Либо переписываем систему, либо прекращаем развитие.
Мы не прекращаем развитие.
Следовательно, переписываем.
Форма:
валидна. Ошибка — в ложной первой посылке: существуют постепенная модернизация,
изоляция, замена модулей, уменьшение scope. Это ошибка основания, а не
формы. Различие принципиально.
7. Несовместимые посылки
В классической логике из противоречия выводится любое утверждение:
Это принцип взрыва (ex falso quodlibet). Аргумент может быть валиден и
полностью бесполезен, если набор посылок несовместим.
Инженерный пример требований:
Система никогда не хранит персональные данные.
Система обязана показывать историю паспортных данных пользователя.
До вывода надо восстановить согласованную модель: возможно, первое утверждение
относится к клиенту, второе — к защищённому backend; возможно, требования
реально конфликтуют.
8. Ошибка подтверждения конъюнкции
Из подтверждения одной части делают вывод о всей:
Проверка типов прошла.
Следовательно, проверка типов и интеграционные тесты прошли.
Ослабление наоборот валидно
9. Ошибка отрицания конъюнкции
По де Моргану:
Не выполнены оба условия вместе — значит, не выполнено хотя бы одно, а не
обязательно оба.
10. Ошибка отрицания дизъюнкции
корректно раскрывается:
Но:
означает лишь, что не выполнены оба вместе.
В access policy разница между:
deny if !(admin || auditor)
и:
deny if !admin || !auditor
огромна: вторая требует обе роли одновременно.
11. Перестановка кванторов
∀x ∃y R(x, y)
∴ ∃y ∀x R(x, y)
Невалидно.
У каждого сервиса есть владелец.
Следовательно, существует один владелец всех сервисов.
Контрмодель: у каждого сервиса свой владелец.
Обратный переход валиден:
∃y ∀x R(x, y)
∴ ∀x ∃y R(x, y)
Если один общий владелец есть, то для каждого сервиса владелец найдётся.
12. Неверное распределение квантора
Все имеют P или Q
не означает:
У одних объектов P, у других Q.
Существует объект с P или Q
эквивалентно:
Все имеют P и Q
эквивалентно:
Правила распределения не симметричны; проверяйте семантикой, не визуальной
похожестью.
13. Экзистенциальная ошибка
∀x(Sx → Px)
∴ ∃x(Sx ∧ Px)
Невалидно без ∃x Sx.
Все сервисы с идеальной доступностью бесплатны.
Следовательно, существует бесплатный сервис с идеальной доступностью.
Универсальное утверждение не создаёт объект.
14. Ошибка области действия
Не каждый инженер одобрил RFC.
Обычно:
¬∀x Approve(x) ⟺ ∃x ¬Approve(x)
Но не:
Слова не, только, всегда, должен, может требуют скобок.
15. Модальные ошибки
Возможность в действительность
«Сервис может потерять сообщение» не означает, что потеря произошла.
Действительность в необходимость
«Сервис сейчас один» не означает, что архитектурно он обязан быть singleton.
Необходимость следствия
Из:
не следует:
Если правило необходимо, Q всё равно становится необходимым только при
соответствующей модальности P и правилах выбранной модальной логики.
Ошибка долженствования
Из описательного:
нельзя получить нормативное:
без ценностной или нормативной посылки. Текущее устройство процесса не
доказывает, что его надо сохранять.
16. Формализация может исказить аргумент
Формальная проверка надёжна только для верного перевода.
Фраза:
Сервис отвечает быстро, если кэш тёплый.
может означать:
а не:
Добавленная обратная импликация создаст ложные ошибки и ложные доказательства.
Всегда храните рядом:
исходная фраза
словарь атомов
формула
обоснование перевода
17. Контрмодель как универсальный инструмент
Для пропозициональной формы
Назначьте P/Q значения так, чтобы посылки были истинны, вывод ложен.
Для категорической формы
Нарисуйте классы или назовите конкретные объекты.
Для кванторов
Постройте маленький домен из 1–3 объектов и отношение.
Пример:
∀x ∃y Likes(x,y)
∴ ∃y ∀x Likes(x,y)
Домен {Аня, Борис}:
Аня любит Аню.
Борис любит Бориса.
Никого одного не любят оба.
Посылка истинна, вывод ложен.
18. Формальные ошибки в коде
Null check
if (user !== null || user.isActive) {
// ...
}
Нужно &&: обращение к полю допустимо, когда объект существует и активен.
Feature flag
const allowed = isEmployee || hasBetaAccess;
if (isEmployee) {
assert(!hasBetaAccess); // неверное утверждение дизъюнкта
}
Политика
Экспорт разрешён только с MFA:
Export → MFA
Тест, проверяющий MFA → Export, проверяет не то направление.
Наблюдаемость
Deploy → Marker
Marker
∴ Deploy
Маркер мог быть создан повторно или вручную.
19. Чек-лист
- Форма переведена в символы без усиления?
- Импликация не обращена и не инвертирована?
- Необходимое условие не принято за достаточное?
- «Или» включающее или исключающее?
- Дизъюнкция действительно исчерпывающая?
- Конъюнкция и дизъюнкция отрицаются по де Моргану?
- Посылки совместимы?
- Порядок
∀ и ∃ сохранён?
- Универсальная посылка не породила несуществующий объект?
- Область отрицания и модального оператора ясна?
- Действительное не выдано за необходимое?
- Есть маленькая контрмодель?
20. Задания
Для каждого аргумента:
- запишите форму;
- найдите оценку или модель;
- дайте ближайший корректный вывод.
A. Если cache hit, база не вызывается. База не вызвана. Значит, был cache hit.
B. Если пользователь owner, он может удалить проект. Он не owner. Значит,
удалить не может.
C. Ошибка в frontend или backend. Ошибка есть во frontend. Значит, backend
исправен.
D. Для каждого PR существует reviewer. Значит, есть reviewer для всех PR.
E. Все сервисы нового поколения имеют SBOM. Значит, некоторые сервисы имеют
SBOM.
F. Система может масштабироваться до N. Значит, сейчас она обрабатывает N.
Источники
Что дальше
Не каждый плохой аргумент ломается после замены слов переменными. Следующая
группа нарушает релевантность: атакует человека, искажает позицию, меняет тему
или предлагает авторитет вместо нужного основания.
Ошибки релевантности