
Разбор · Опубликовали 08.10.2026
Формальная верификация может доказать свойство кода агента только в пределах заданной модели
Перед приёмкой дорогого расчёта или перехода состояния согласуйте свойство, условия и связь проверки с боевым кодом.
Текст собран машиной агентов под надзором инженера, который ведёт vibecoding.ru · факты проверены 8 октября 2026
Формальная верификация программ даёт гарантию о конкретном свойстве при заданных условиях. Для CTO это способ проверить дорогой расчёт или переход состояния. Покупать такую работу стоит с вопроса: что именно доказывают и при каких предпосылках?
Код агента подчиняется тем же ограничениям. Можно строго доказать, что результат неотрицателен, и получить функцию, которая всегда возвращает ноль. Разберём, как принять доказательство нужного свойства и сохранить проверки за его границами.
Не хотите разбираться сами? Внедряем ИИ в ваш бизнес: задачи без лимита, одна цена в месяц, отмена в любой момент.
1. Доказательство начинается со свойства, а не с автора кода.
«В коде нет ошибок» не годится как задание на проверку. Ошибка определяется требованием. Для расчёта можно задать правило округления и предел суммы, для оплаты: повтор одного события не создаёт второй доступ. Это разные проверяемые свойства.
Поэтому задачу для агента сначала переводят в точное условие. Указывают допустимые входы, ожидаемый результат, состояние до и после операции. Кто написал реализацию, человек или агент, не меняет смысл гарантии.
Тест показывает поведение на выбранном примере. Формальное доказательство устанавливает свойство в принятой математической модели. В неё входят и правила языка, и представление чисел, и ограничения входа. Модель бывает описанием алгоритма или семантикой самого проверяемого кода.
Способ проверки определяет границу вывода.
Документация Dafny, TLC и TLAPS; проверено 08.10.2026. Сопоставление редакционное. Для TLC имеется в виду завершённый исчерпывающий прогон.
2. Верное доказательство может подтвердить слабое требование.
Вернёмся к функции, которая всегда возвращает ноль. В официальном учебнике Dafny функция модуля числа сначала обязана выдавать неотрицательный результат. Постоянный ноль этому условию удовлетворяет, хотя модуль положительного числа должен равняться самому числу.
Проверяющий инструмент выполнил свою работу. Недостаточно было требования. Для бизнеса это разница между «скидка не отрицательная» и «скидка рассчитана по утверждённому тарифу». Первое условие допускает и нулевую скидку для любого заказа.
Предусловия тоже нужно утверждать. Если доказательство действует только для неотрицательных сумм, вход с отрицательной суммой обязан отклоняться до расчёта. Предпосылку нельзя молча распространить на данные, которые ей не соответствуют.
Контрпример помогает усилить требование до проверки.
Первая строка по учебнику Dafny, проверено 08.10.2026; скидка учебная, не выполненное нами доказательство. Последняя строка опирается на нашу поломку 09.09.2026.
3. Проверенная модель не подтверждает боевой код автоматически.
Модель платёжного процесса может описывать события и смену состояний, не содержать код обработчика. В TLC выбирают конечную конфигурацию и свойства для перебора. Успешный полный прогон относится к ней; прерванный поиск такой гарантии не даёт.
Инженеры AWS в статье от 29 сентября 2014 года отдельно разбирают разрыв между проверенным дизайном и исполняемой реализацией. Они также описывают пропущенную ошибку живости в менеджере блокировок: это свойство не проверяли. Проверка дизайна полезна, но её предмет надо назвать.
Для оплаты «доступ не создаётся повторно» относится к безопасности: запрещённое событие не случится. «Оплативший в итоге получит ссылку» относится к живости: нужное событие случится. Последнее требует условий о повторах, очереди и восстановлении почтового сервиса.
Условия среды определяют смысл гарантии.
Различие безопасности и живости по статье инженеров AWS; вопросы о платеже редакционные, по нашей поломке 09.09.2026. Первоисточник сверён 08.10.2026.
4. Наши поломки показывают границы тестов и ревью.
В vibecoding.ru инженер ведёт машину нашего проекта. Мы удерживаем правила тестами, проверками типов и ревью. Формальной верификации нашего кода и клиентского кейса у нас нет. Зелёный набор проверок не называем доказательством корректности продукта.
Платёжное событие имело верную подпись, но могло относиться к другому товару. Доступ не дублировался, но после сбоя письма его ссылка могла не дойти. Оба случая показывают, как техническая проверка расходится с результатом, ради которого бизнес принимает оплату.
Ответственность за ошибки требует и решения о выпуске, и правил реакции на сбой. Здесь полезен более узкий урок: из каждой поломки выделить свойство, которое потеряли. Потом выбрать проверку именно этого свойства, а не добавить ещё один общий статус «всё зелёное».
Поломка становится правилом для следующей правки.
31.07
Поле новости терялось на части путей сохранения. Правило: общий перенос полей и проверка его использования.
09.09
Подпись оплаты принималась за покупку нужного товара. Правило: проверка товара до выдачи доступа.
09.09
Повтор оплаты не повторял неудачную отправку ссылки. Правило: повтор по журналу отправки, без повторного создания доступа.
Оригинальные журналы разработки нашего сайта за 31.07 и 09.09.2026, сверены 08.10.2026. Записи подтверждают поломки и исправления, а не отсутствие других ошибок.
5. Проверять сначала стоит критичное ядро с ясными границами.
Для первой оценки выбирайте узел, у которого дорогое последствие и точное правило: расчёт суммы, ограничение риска, допустимый переход состояния. Такой предмет проще описать, чем обещание «проверить весь продукт». Это редакционный критерий выбора, не оценка срока или стоимости.
Узкая функция всё равно требует условий вокруг неё. Расчёт может быть верен для целых копеек, а вызывающий код передавать дробные числа с другим округлением. Модель переходов может быть верна, а реализация выполнять операции в ином порядке.
Глубина доказательства тоже различается. У seL4 есть доказательства до уровня кода и для отдельных конфигураций до бинарного представления, но опубликованы и предпосылки об аппаратуре и загрузке. Для вашего проекта решение о выпуске должно учитывать такую же явно названную границу.
Выбранный объект должен отвечать на конкретный риск.
Учебные варианты редакции, не наши выполненные доказательства. Граница глубокой верификации сверена по официальным страницам seL4 08.10.2026.
6. Принимать нужно воспроизводимую проверку вместе с её условиями.
Согласуйте правила для агентов и отдельное задание проверяющему. Агент может подготовить модель и доказательство. Его уверенное объяснение не заменяет принятого результата инструмента и ревью спецификации: слабое требование останется слабым независимо от автора.
Просите исходники спецификации и проверяемого объекта, версии инструментов и команду воспроизведения. В отчёте должны быть статус завершения, допущения и исключения. Если проверяли только абстрактный дизайн, отдельно назовите способ проверки соответствия реализации.
Тайм-аут не равен найденной ошибке, а сообщение «контрпримеров пока нет» не равно завершённой проверке. Уточняйте, закончился ли выбранный режим успешно, какая конфигурация была проверена и воспроизводится ли этот результат после агентной правки.
Приёмка фиксирует гарантию, которую можно повторить.
Редакционный список приёмки по документации Dafny, TLC, TLAPS, seL4 и статье инженеров AWS; проверено 08.10.2026. Это предлагаемое задание, не описание проданной услуги.
Сохраните проверку рядом с изменением. Следующая правка должна повторить её или явно пересмотреть свойство и предпосылки. Если случилась поломка вне модели, зафиксируйте исключённое условие и решите, надо ли расширить модель. Так результат кормит следующий цикл разработки.
Чтобы обсудить следующую задачу, переходите на страницу услуг. Начните с критичной функции и последствия её ошибки. Применимость формальной проверки, выполнение и способ проверки согласуются по этой задаче.
Подписка на агентную разработку «Один проект» стоит 250 000 ₽/мес по состоянию на 8 октября 2026. Это разработка одного продукта в одном потоке задач. Услугу математического доказательства мы не заявляем; применимость проверки критичной функции нужно оценить отдельно.
Что и как мы проверяли
| Факт | Что известно | Проверено |
|---|---|---|
| Границы методов | Открыли официальную документацию Dafny, TLC, TLAPS и страницы доказательств seL4. Это чтение источников, не выполненная нами формальная проверка. | 2026-10-08 |
| Опыт AWS | Открыли первичную статью инженеров от 29 сентября 2014. Различие проверенного дизайна и реализации, пропущенная проверка живости. Чужой результат не переносим на наш проект. | 2026-10-08 |
| Наши поломки | Сверили оригинальные записи разработки за 31 июля и 9 сентября 2026. Это исправления после тестов и ревью. Формальной верификации нашего кода и клиентского кейса у нас нет. | 2026-10-08 |
| Подписка | Живая /services: «Один проект», 250 000 ₽/мес. Услуга математического доказательства не заявлена. Применимость, выполнение и способ проверки критичной функции согласуются по задаче. | 2026-10-08 |
7. Частые вопросы
Чем формальная верификация отличается от тестирования?+
Тест запускает выбранный сценарий и сравнивает результат. Формальное доказательство устанавливает сформулированное свойство при предпосылках принятой модели. Исчерпывающая проверка конечной модели относится к указанной конфигурации, а не ко всем возможным размерам системы.
Можно ли после доказательства отказаться от тестов?+
Проверки интеграции, входных данных и непокрытых частей остаются нужны. Доказательство одного расчёта ничего само по себе не говорит о доступности сервиса или доставке уведомления.
Что значит «верификатор не смог доказать»?+
Причиной бывает ошибка кода, неверная спецификация, недостаток вспомогательных утверждений или предел ресурсов. Нужно различать предъявленный контрпример, тайм-аут и успешное завершение выбранного режима.
Можно ли поручить доказательство тому же ИИ-агенту?+
Подготовку можно поручить агенту. Результат должен проверяться инструментом, а спецификация и её соответствие задаче проходить отдельное ревью. Убедительное объяснение в чате само по себе не является таким результатом.
Доказательство модели проверяет реализацию автоматически?+
Нет. Если модель написана отдельно, соответствие кода модели требует дополнительной работы. Перевод функции на другой язык для проверки тоже не доказывает эквивалентность исходной реализации автоматически.
Подходит ли формальная верификация любой агентной правке?+
Необходимость оценивают по последствию ошибки и возможности точно описать объект. Для правки текста интерфейса обычно хватает других проверок; для дорогого расчёта или протокола стоит отдельно оценить формальный метод.
Источники
- Dafny, учебник: предусловия и постусловия (проверено 8 октября 2026) — официальная документация
- TLC, конечные модели и проверка состояний (проверено 8 октября 2026) — официальная документация
- TLA+ Proof System (проверено 8 октября 2026) — официальная документация
- Use of Formal Methods at Amazon Web Services (29 сентября 2014; сверено 8 октября 2026) — инженеры AWS
- seL4, предпосылки доказательств (проверено 8 октября 2026) — официальная документация
- seL4, состав доказательств (проверено 8 октября 2026) — официальная документация
- Наш проект на /open. Внутренние записи поломок 31 июля и 9 сентября 2026 сверены 8 октября; формального доказательства нет — наш опыт, оригинальные журналы
- «Один проект», живая цена подписки (8 октября 2026) — наш оффер
Запомнить
1. Выберите дорогое последствие и запишите точное свойство, которое его исключает.
2. Утвердите допустимые входы, среду и предпосылки до запуска проверки.
3. Назовите объект: модель, исходный код или бинарное представление. Обоснуйте связь с тем, что выпускаете.
4. Принимайте исходники и воспроизводимый завершённый результат для конкретной версии.
5. Сохраните проверки за границей доказательства и возвращайте новые поломки в требования.