CAP 定理は「定理」なのですか?つまり証明がある?
はい、一般に言われる「CAP 定理」は数学的に証明された定理です。ただし、巷で語られる“CAP”には (証明済みの)厳密な定理と、そこから派生した俗説・言い換えが混ざりやすいので注意が要ります。
元になった代表的な結果は次の系譜です。
さらに後続として、より現実の遅延モデルに焦点を当てた
証明されているのはざっくり言うと:
という“不可能性”です。
一方で、よくある誤解は例えば:
「C/A/P の3つから2つを選ぶ」
→ 厳密には雑です。Pは“選ぶ”というより、分散システムなら基本的に起きうる前提(あるいは「起きても耐える必要がある性質」)として扱われます。
分断が起きた瞬間に「CかAのどちらを優先する設計判断が必要」という理解がより正確です。
「ふだんはCA、障害時だけCP/AP」みたいな単純化
→ 実システムでは、操作の種類やタイムアウト、リトライ、クォーラム設定などで挙動が変わり、きれいに二択にならないことも多いです。
定理である以上、当然ですが前提(モデル)依存です。たとえば:
Gilbert & Lynch の定式化は、CAP を“定理”として扱える形に落とし込むために、これらを明確にしています。
必要なら、あなたが想定している文脈(DBのレプリケーション?マイクロサービス?Kubernetes上の分散ストレージ?)に合わせて、
「その場で言うCAPが厳密定理の主張とどう対応しているか」「どの定義(線形化可能性など)を採るべきか」も短く整理します。
定理とは何?数学的な証明を伴ったものだけが定理を名乗れる?
「定理(theorem)」という言葉は文脈で少し幅がありますが、芯はだいたい同じです。
一般に(数学・論理学・理論計算機科学で)定理とは:
を指します。
つまり「定理」は基本的に “証明済みの命題” です。
(証明がない段階なら通常は 予想(conjecture)、仮説(hypothesis) などと呼びます。)
厳密寄りに言うと:
逆に言うと、「経験的にいつも成り立つ」「実験で確認された」「実装してみたらそうだった」は、通常は定理ではなく 経験則・法則・原理・観察の類です(物理の“法則”はこの意味で数学の定理とは別物)。
分野や業界の会話だと、
みたいに、修辞的に「定理」と呼ばれることがあります。
これは学術的な意味の“theorem”とはズレることがあります。
CAPの場合、Gilbert & Lynch のように モデル・定義を明確化した上で不可能性を証明しているので、少なくともその範囲では「定理」と呼べます。
一方で、世間で流布する「C/A/Pから2つ選ぶ」みたいなスローガン部分は、厳密な定理そのものというより 解釈・要約が混ざりがちです。
必要なら、「数学の定理」と「自然科学の法則」と「工学の経験則」の違いを、例を挙げてもう少し整理します。どの文脈(数学寄り/CS寄り/工学寄り)での「定理」が気になっていますか?
CMC定理
[調動脈]の各要素は同時に全部は満たせない、という経験則のこと。
概要
コンディションを整えれば整えるほど
整えることに時間を使うがゆえに時間がなくなるため、コンテキストを知ることに費やせない
また調子が第一になるため熱量も削がれる(セーブされる)、つまりモチベーションが薄まる
そのタスクに対する動機が「調子を整えるという第一動機」に勝てなくなる
モチベーションが高ければ高いほど
没頭する
コンディションが削られていく(心身がおざなりになるため疲弊する)
コンテキストもおざなりになっていく(視野が狭くなり、自分のやりたいように突き進みがちになる)
コンテキストを知れば知るほど
「納得しない部分」「好きじゃない部分」「泥臭い部分」などが出てくる
モチベーションが削がれる
したがってCondition、Motivation、Contextを同時にすべて満たすことはできない
どれを満たしたいか(あるいはどれなら軽視してもいいか)を意識して選んでいくと良い
ネーミング
経験則にすぎないのに定理と名付けているのは、以下の元ネタに触発されたことによる
元ネタ
[CAP定理]
>分散コンピューターシステムのコンピューター間の情報複製に関する定理のこと。……「一貫性(Consistency)」「可用性(Availability)」「ネットワーク分断耐性(Partition-tolerance)」の頭文字を取って「CAP定理」という。……三つの保証のうち同時に満たせるのは二つまでであり、同時に全てを満たすことはできない。
[CAP定理|大塚商会 https://mypage.otsuka-shokai.co.jp/contents/business-oyakudachi/words/cap-theorem.html]
このような CMC 定理という概念を考えている。 これを定理と呼ぶのは望ましくない感じだね。比喩的に通じる可能性はあるけど。
CMC 原理の方がいいかな?
「CMC 定理」と呼ぶのが 絶対にダメ というより、誤解コスト(=“証明済みの一般法則なの?”と受け取られるリスク)がそこそこ高いので、外向きには避けた方が無難、という判断になります。CAP が「定理」として流通しているのは、(俗な言い回しは別として)形式化された定義のもとで不可能性が証明されている系譜があるからで、CMC は現状だとそこに寄せるのが難いです。
その前提で、命名のおすすめを整理します。
一般に「定理」は少なくとも次を含意しがちです。
CMC の記述はむしろ 自己管理・仕事の進め方の経験則として自然で、
「状況依存」「個人差」「タスク差」「期間差」「組織要因」が大きいので、“定理”の語感が強すぎる可能性が高いです。
「CMC 原理」はかなり良い落としどころです。理由は:
似た候補だとニュアンスはこうです。
外向き(他人に説明する、文章にする)なら
「CMC 原理」か「CMC トレードオフ」が一番事故りにくいです。
もし元ネタ(CAP)へのオマージュとして「定理」を残したいなら、名称を例えば
みたいにして、最初に“これは証明された定理ではなく経験則”と明記すると、比喩として通しやすいです。
いまの「同時にすべて満たすことはできない」は強いので、経験則として出すなら例えば:
みたいにすると、「反例が出たら終わり」の形を避けられます。
結論としては、狙いが「比喩として伝わる便利概念」なら CMC 原理(または CMC トレードオフ)が最も望ましいと思います。
用途が「自分用のメモ」なのか「社内に布教したい」のか「ブログ等で公開」なのかで、最適な語感をもう少し寄せられます。どれを想定していますか?