Формальная верификация — звучит как святой Грааль программирования. Доказано математически, что программа работает правильно — значит, она безошибочна, верно? Увы, реальность сложнее. В своей статье “Three ways formally verified code can go wrong in practice” исследователь Хиллел Уэйн показывает, почему даже “доказанный” код может падать, и не просто из-за плохих программистов, а из-за самой природы доказательств. Иногда «верифицированный» код оказывается ошибочным просто потому, что доказательство некорректно.
🧩 Бывает, что формальный инструмент — Coq, Lean, Isabelle — сам содержит баг. Редко, но случается.
⚙️ Чаще — программист добавляет в доказательство “заглушку”: admit или sorry, обещая доказать позже. Компилятор пропускает её, и код выходит с дырой.
📚 На бумаге всё красиво, но в бинарнике — бомба замедленного действия.
Это напоминает ситуацию, когда тестировщик пишет “TODO: добавить тест на границы” — и через год на продакшне ловит undefined behavior. Формальная верификация все