montana/Формальная Документация/10 Формальная Верификация/README-TLA.md

6.0 KiB
Raw Blame History

TLA+ формальная верификация Proof of Time

Статус: 🟡 v0.1 — базовая модель безопасности готова, проверка через TLC + TLAPS остаётся.

Что это

Формальная модель консенсуса Монтаны на языке TLA+ (Temporal Logic of Actions+, Lamport 2002).

Файлы:

  • PoT.tla — спецификация модели + 4 теоремы безопасности.
  • PoT.cfg — конфигурация для TLC model checker (4 оператора, 3 аккаунта, 10 окон).

Что моделируется

Уровень абстракции: Safety + Liveness при византийском противнике f<n/3 в частично синхронной сети.

Сущность TLA+ переменная Абстракция
VDF-цепь vdf_chain Монотонная функция от окна (детали SHA-256 не моделируются)
Текущее окно window Натуральное число, монотонно растёт
Зафиксированные операции committed window → SUBSET <<account, op>>
Предложения операторов proposed <<operator, window, op>>
Локальная цепь оператора operator_chain operator → Seq(window)
Победитель лотереи selection_winner window → operator

Что НЕ моделируется (вне scope)

  • Конкретные SHA-256 байты — VDF аппроксимирован монотонной функцией.
  • Криптография подписей (предполагается EUF-CMA-стойкость, см. 02 Криптография).
  • Сетевая сериализация (предполагается канонической).
  • Тонкости gossip-распространения (предполагается eventual delivery после GST).

Доказываемые свойства

Инварианты (Safety)

ID Свойство TLA+ имя
S1 Невозможность двойной траты в окне NoDoubleSpendInWindow
S2 VDF монотонна (каждое окно даёт новый выход) VDFMonotone
S3 Только победитель лотереи коммитит OnlyWinnerCommits
S4 Окно монотонно растёт WindowMonotone

Темпоральные свойства (Liveness)

ID Свойство TLA+ имя
L1 После GST честная операция в конце концов коммитится EventuallyCommitted
L2 Окно бесконечно продвигается при ≥1 честном операторе WindowProgresses

Теоремы

THEOREM Safety == Spec => []NoDoubleSpendInWindow
THEOREM VDFCorrect == Spec => []VDFMonotone
THEOREM CommitProvenance == Spec => []OnlyWinnerCommits
THEOREM ChainProgress == Spec => []WindowMonotone

Как проверить

Установка TLC + TLAPS

brew install --cask tla-plus-toolbox  # macOS
# или скачать TLA+ Toolbox с https://lamport.azurewebsites.net/tla/toolbox.html

Запуск model checker

cd "Формальная Документация/10 Формальная Верификация/"
tlc -config PoT.cfg PoT.tla

Ожидание:

  • 4 оператора × 3 аккаунта × 10 окон → state space ≈ 10^6 состояний
  • Проверка занимает ~1-5 минут на современном CPU
  • Все 4 инварианта должны быть satisfied
  • Property WindowProgresses должна быть satisfied

Запуск TLAPS proof checker (опц.)

Для формального доказательства теорем (а не только model check):

tlapm PoT.tla

Это требует доразвития proof obligations внутри спеки — открытый вопрос для следующей итерации.

Ограничения текущей модели

  1. Модель малая. 4 оператора, 3 аккаунта, 10 окон — model check на полной формальной полной структуре.
  2. VDF абстрактна. Не моделируется, что D итераций SHA-256 несжимаемы — это допущение из криптографии.
  3. Сеть упрощена. Нет явного моделирования gossip, latency, partition.
  4. Liveness частична. L1 формализована, но не везде проверена через TLC.

Roadmap

  • Базовая модель безопасности (этот документ)
  • Расширение до 7+ операторов с symmetry reduction
  • TLAPS proof obligations для всех 4 теорем
  • Модель сетевого partition + GST поведение
  • Coq-формализация криптографических редукций (отдельная работа)

Связанные документы

Источники

  1. Lamport, L. (2002). Specifying Systems: The TLA+ Language and Tools.
  2. Buchman, E., Kwon, J., Milosevic, Z. (2018). The latest gossip on BFT consensus (Tendermint TLA+).
  3. Hawblitzel, C., et al. (2015). IronFleet: Proving Practical Distributed Systems Correct.