Открыть сервис

Вердио — язык программирования для верификации

Вердио (англ. Verdi) — язык и среда формальной верификации, предназначенные для математического доказательства корректности программ и цифровых схем. Разработан в рамках проекта Verdi в Университете Вашингтона (США) в середине 2010-х годов под руководством Стива Здянцека и Брэндона Мура. Вердио представляет собой фреймворк, встроенный в ассистент доказательств Coq, и применяется для верификации распределённых систем и сетевых протоколов.

Общее описание

Вердио не является самостоятельным языком программирования в привычном смысле: это библиотека и набор инструментов внутри системы интерактивного доказательства теорем Coq. Название происходит от фамилии композитора Джузеппе Верди — это отсылка к традиции называть системы верификации именами музыкантов (например, Coq — «петух», а также проект «Verdi» в связке с «Coq»).

Основная задача Вердио — позволить разработчику описать систему, её поведение и требования к ней, а затем доказать, что система этим требованиям удовлетворяет. Доказательства проверяются машинно, что исключает ошибки человеческого рассуждения.

История

Проект Verdi был запущен в 2013–2014 годах в Вашингтонском университете. Первая публикация, представившая фреймворк, вышла в 2015 году на конференции по верификации. Изначально Вердио создавался для верификации распределённых систем — класса программ, которые особенно сложно тестировать традиционными методами из-за недетерминизма и сетевых сбоев.

В 2017 году вышла работа, описывающая верификацию протокола Raft — одного из ключевых алгоритмов консенсуса в распределённых системах. Это стало одной из наиболее известных демонстраций возможностей Вердио.

Архитектура и принципы

Вердио строится на нескольких ключевых идеях:

  • Разделение системы и её окружения. Система описывается как набор узлов, обменивающихся сообщениями. Сеть моделируется абстрактно, что позволяет доказывать свойства независимо от конкретной реализации.
  • Аксиоматизация сбоев. Вердио позволяет явно указывать, какие сбои допускаются (потеря сообщений, переупорядочивание, отказ узлов), и доказывать корректность в этих условиях.
  • Композициональность. Доказанные компоненты можно переиспользовать при верификации более крупных систем.
  • Извлечение кода. Из верифицированной модели можно извлечь исполняемый код на языке OCaml или Haskell.

Применение

Основные области применения Вердио:

  1. Распределённые системы. Верификация алгоритмов консенсуса, репликации, реплицированных журналов.
  2. Сетевые протоколы. Доказательство корректности протоколов маршрутизации и передачи данных.
  3. Системы хранения. Проверка свойств согласованности распределённых баз данных.

Наиболее известные верифицированные системы, созданные с помощью Вердио, включают:

СистемаНазначениеГод
Verdi RaftАлгоритм консенсуса Raft2017
VerdiKVРаспределённое хранилище ключ-значение2018
Verdi ShardingШардирование данных2019

Отличия от других подходов

Вердио отличается от классических систем верификации (таких как модель-чекеры SPIN или TLA+) тем, что использует интерактивное доказательство в Coq. Это даёт большую выразительность и позволяет работать с бесконечными пространствами состояний, но требует больше усилий от разработчика. В отличие от автоматических верификаторов, Вердио не ограничен конечными моделями и не страдает от проблемы комбинаторного взрыва.

Ограничения

К недостаткам Вердио относят:

  • Высокий порог входа. Требуется знание Coq и навыки формального доказательства.
  • Трудоёмкость. Верификация даже небольшой системы может занимать недели и месяцы.
  • Ограниченная автоматизация. Многие доказательства приходится строить вручную.

Значение

Вердио стал одним из наиболее успешных примеров применения интерактивной верификации к реальным распределённым системам. Проект показал, что формальные методы применимы не только к академическим задачам, но и к промышленно значимым алгоритмам. Идеи Вердио повлияли на развитие других фреймворков верификации, в том числе IronFleet и Disel.

IRONLIVE — база данных и аналитика по компаниям России.

На главную IRONLIVE →