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

118 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TLA+ формальная верификация Proof of Time
**Статус:** 🟡 v0.1 — базовая модель безопасности готова, проверка через TLC + TLAPS остаётся.
## Что это
Формальная модель консенсуса Монтаны на языке TLA+ (Temporal Logic of Actions+, Lamport 2002).
Файлы:
- [`PoT.tla`](PoT.tla) — спецификация модели + 4 теоремы безопасности.
- [`PoT.cfg`](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 Криптография](../02%20Криптография/)).
- Сетевая сериализация (предполагается канонической).
- Тонкости 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` |
## Теоремы
```tla
THEOREM Safety == Spec => []NoDoubleSpendInWindow
THEOREM VDFCorrect == Spec => []VDFMonotone
THEOREM CommitProvenance == Spec => []OnlyWinnerCommits
THEOREM ChainProgress == Spec => []WindowMonotone
```
## Как проверить
### Установка TLC + TLAPS
```bash
brew install --cask tla-plus-toolbox # macOS
# или скачать TLA+ Toolbox с https://lamport.azurewebsites.net/tla/toolbox.html
```
### Запуск model checker
```bash
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):
```bash
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
- [x] Базовая модель безопасности (этот документ)
- [ ] Расширение до 7+ операторов с symmetry reduction
- [ ] TLAPS proof obligations для всех 4 теорем
- [ ] Модель сетевого partition + GST поведение
- [ ] Coq-формализация криптографических редукций (отдельная работа)
## Связанные документы
- [01 Консенсус](../01%20Консенсус/) — теоремы Safety/Liveness в неформальном виде.
- [07 Модель угроз](../07%20Модель%20Угроз/) — допущения, которые модель охватывает.
- [Mainnet Readiness](../Mainnet-Readiness.md) — гейт G2.
## Источники
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*.