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

118 lines
6.0 KiB
Markdown
Raw Normal View History

2026-05-04 06:37:25 +03:00
# 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*.