# 書誌情報
- **タイトル**: The Byzantine Generals Problem
- **著者**: {{author}}
- **出版年**: {{year}}
- **Abstract**:
{{abstract}
# 論文
- https://lamport.azurewebsites.net/pubs/byz.pdf
- 和訳: https://hazm.at/mox/distributed-system/algorithm/theorem/bft/the-byzantine-generals-problem/index.html
# 概要
- **ビザンチン将軍問題**: 司令官である将軍は $n-1$ 人の副官に次のような命令を送らなければならない
- すべての忠実な副官は同じ命令に従う(単一の値への合意)
- 司令官である将軍が忠実であれば、すべての忠実な副官らは彼の送る命令に従う([[Validity]]?)
- 不可能性: $m$人の裏切り者に対して$N < 3m+1$での解決法は存在しない
# Oral Messageを用いた解
- 合意値を得る関数$OM(m)$を提案する
- $m$が裏切り者の数
- $N \ge 3m+1$の場合に機能する
- Oral Message (ネットワークのモデル):
- 送信されたすべてのメッセージは正しく配信される
- メッセージの受信者は誰がメッセージを送信したかを知っている
- メッセージの欠落を検出することができる
- Tools:
- $majority(v_1, ..., v_n-1)$: 引数の値の過半数が$v$と等しければ、出力は$v$となる
- $OM(0)$
1. 司令官は各副官に彼の値を送信する
2. 各副官は司令官から受信した値を使用する。受け取らなかった場合はデフォルト値のRETREATとする
- $OM(m), m > 0$:
1. 司令官は各副官に彼の値を送信する
2. 各$i$について、副官$i$が司令官から受信する値を$v_i$とし、または値を受け取らない場合はデフォルト値の$RETREAT$とする。副官$i$はアルゴリズム$OM(m-1)$の司令官として値$v_i$を他の$n-2$の副官それぞれに送信する
3. 各$i$と$j \neq i$について、$v_j$を副管$i$がステップ2で副官$j$から受信した値とし、または値を受け取らない場合はRETREATとする。副官$i$は値$majority(v_1, ..., v_{n-1})$を使用する
(OMは再帰的に動作する)