▲ 俯瞰

パラメータ化正当性

有界 TLC を「∀ 木形・全スレッド」へ持ち上げる — 構造カットオフ + σ-飽和 + ∀N 活性

TLC は与えた有限インスタンス(固定スレッド数 T、固定木 高さ H・幅 N、固定 MaxCommits)に対してのみ exhaustive。 インスタンスを大きくし続けても「∀T・∀木」には到達しない(無限後退)。 本デッキは、有限 TLC 結果を無限族の主張へ持ち上げる議論をまとめる (出典: doc/parameterized_cutoff.md)。

3 つの軸 — 正直なスコープ

到達点機構
木(高さ・幅)∀ 木形の定理構造カットオフ(catamorphism 簡約): H=3, N=2 へ簡約 → TLC で網羅放電
スレッド TT強根拠つき予想(定理にしない)恒等フリー safety + contention bound まで網羅 + σ-飽和の測定
活性 (livelock-free)Nranking 論証oldest-tag ランキング関数(スレッドカットオフ不要)+ 残存 1 補題

読み方: 「∀ 木形・全スレッド数」は 「木については証明済み/スレッドについては強根拠つき予想」と読む。 パラメータ化検証は一般に決定不能(Apt–Kozen 1986)なので、機械化していない ∀T 定理は主張しない。

Lemma 1 — catamorphism(構造的局所性)

すべての bundle / unbundle 遷移は木上の畳み込み (catamorphism)である。

(* bundle は部分木を ↓ 下向きに畳む *)
bundle(n) = collect( linkage[n], { bundle(c) : c ∈ children(n) } )

(* unbundle は祖先鎖を ↑ 上向きに畳む(priority root が base case)*)
unbundle(n) = extract( linkage[n], unbundle(parent(n)) )
各ノードのステップが読み書きするのは {linkage[n]} と、直接の畳み込み近傍 (bundle なら子、unbundle なら親)の畳み込み結果のみ。結合関数は木の高さ・子の個数に依存しない。 子は対称集約([c ↦ linkage[c]], ∀ c …)と単調な「全子完了」閾値を通じてのみ現れる。

要点: 「アクションが2レベルしか触らない」ではない(SnapshotForUnbundle は 祖先鎖全体を一度に読む;inner bundle は孫に届く)。要点は、その層越えアクセスが 高さ一様な局所ステップを持つ畳み込みであること。だから下の深さ帰納がアルゴリズム再構成なしで通る。

footprint 放電(§8.1、全12アクション)

アクションlinkage footprint役割
BundlePhase1 (collect)self + 各直接子(孫は非葉子の再帰 inner-bundle 経由のみ)bundle↓
BundlePhase3 (per-child CAS)self + 直接子(1アクション1子)bundle↓
UnbundleWalk / UnbundleCASLoop / UnbundleCASChildself + 直接親 / 1祖先 + root anchor / self + 直接親unbundle↑
BundlePhase2/4, CommitTryCAS, CommitGrandself のみ(root anchor 読みを含む)local

全アクションの footprint ⊆ {self} ∪ {直接畳み込み近傍} ∪ {root anchor}。obligation #1 放電済。

構造カットオフ定理(木軸)

Lemma 2 — 子対称性と幅閾値

仕様は子の置換に対して不変;異なる子の per-child CAS は可換(footprint 互いに素); 親の集約述語(is_bundle_root ⇔ 全子 bundled)は子集合上の単調閾値。 ゆえに N ≥ 2 子の任意挙動は、子 3..N を子 2 に潰すことで 2 子挙動でシミュレートできる。

2 子で幅依存の 3 パターンが既に出る: 一方完了/他方保留・同一子で 2 スレッド競合・別々の子で 2 スレッド。3 子目は反復のみ。

定理(構造カットオフ)

safety 不変条件(SnapshotConsistency, BundleChainValid, NoPriorityLoss, GrandAlwaysPriority, MissingPropagation, TerminalPayloadCheck, …)は、 任意の高さ H・任意の幅 N の木で成立 ⇔ H=3(root + 内部 1 + 葉)かつ N=2 のインスタンスで成立。

帰結: H=3, N=2, superfine の網羅 TLC 実行は、木軸については 無限木族に対する safety 不変条件の完全な証明を構成する(単に検査した個別インスタンスではなく、 カットオフの base case として Lemma 1–2 が全 H, N へ持ち上げる)。

スレッド軸 (1) — なぜ ∀T 定理にしないか + 恒等フリー safety

T 定理は主張しない(意図的スコープ)。 パラメータ化検証は一般に決定不能(Apt–Kozen 1986)。 機械化した ∀T 証明(guided TLAPS の Spec(T) ⊑ Spec(3) simulation、または別途検証したスレッドフリー抽象 CAS モデル)は将来課題。 代わりに 3 つの機械検査可能な要素で 強根拠つき予想として支える: ① 恒等フリー safety(本スライド)、② contention bound まで網羅、③ σ-飽和の測定(次スライド)。

① 恒等フリー safety(Facts A–C)— 安全状態になぜスレッド恒等が乗らないか

A構造述語. 全 safety 不変条件(SnapshotConsistency, NoPriorityLoss, BundleChainValid, BundledByCorrect, GrandAlwaysPriority, MissingPropagation, TerminalPayloadCheck)は bundle-tree linkagehasPriority/bundledBy/sub[·]/missing)と payload count 上の述語。priorityTagserial も読まない=スレッドに言及しない。
Bper-node CAS 直列化. linkage[n]成功 CAS でのみ変化 → 任意 T で各ノードの履歴は単一の直列値列。gate は どのスレッドが CAS を試みるかを制限するだけ(priorityTag を書く、linkage は書かない)→ 安全違反を作り出せない。
C恒等は uniquifier のみ. スレッド恒等は Lamport serial = counter·Base + tid の低位 uniquifier としてのみ状態に現れる。GenSerialcounter が因果順を支配、tid は因果的に並行なイベントの tie-break のみ(順序依存データ独立性, Lazić 1999)。

⇒ スレッド対称性は意味論的に成立(安全状態は恒等の任意置換で不変)。 ただし TLC SYMMETRY 縮約としては適用不可: TagOlder の tid-<(Lamport tie-break)は Threads順序付き自然数に強制するが、 TLC SYMMETRYmodel-value 集合を要求し、両者は排他(TLC は SYMMETRY Permutations(Threads) を拒否)。 ゆえに下の実行はすべて symmetry 縮約なしの raw。なお対称性は置換のみでスレッド数を減らさない(symmetry ≠ cutoff)。

スレッド軸 (2) — 網羅 + σ-飽和(測定は 2-level・all-root

測定スコープを明示: 下の飽和測定はすべて 2-level tree(Parent → {Child1, Child2})・MaxCommits=1・symmetry なし(raw 到達集合)。 headline は all-root ワークロード(コミット対象 = root、bundle 側の構造を露出)。 葉コミットを含む both-roles多段 unbundle 側の構造を別途露出する。

② contention bound まで網羅 + ③ σ-飽和(superfine = 最忠実モデル)

TreeAtomicityWorkloadTRaw distinct states構造 σSafety
2-levelsuperfineall-root2124,2446Pass
2-levelsuperfineall-root3137,333,3486 — T=2 と set-identicaldiff 空, 全 137M で σ=6 一定)Pass (ohtaka 5h08m + 736GB dump)
2-levelcoarseall-root4136,366,732—(未 dump、larger-T 違反チェック)Pass (28min)
2-levelcoarseall-root2 / 31,093 / 339,7444 / 4(set-identical)Pass
2-levelcoarseboth-roles2350,2816(4 bundle + 2 partial-unbundle)Pass

飽和の意味: 各到達状態を恒等フリー bundle 構造へ射影(ノードごと ⟨hasPriority, bundledBy, missing, どの sub スロットが埋まるか⟩、serial・payload 値は捨てる=構造不変条件が読むフィールドそのもの)。 最忠実 superfine all-root の構造集合は 6 要素で T=2 で飽和し、完全な T=3 網羅(137,333,348 状態)を dump→射影して T=2 ≡ T=3 が set-identical。 superfine の 6 = coarse の 4(bundle 構造)+ Phase-3 within-operation 中間 2(片方の子だけ bundled-ref に張り替わった瞬間 — まさに並行ハザードが隠れうる箇所)。 both-roles の 6 = 4 bundle + 2 partial-unbundle(unbundle 側構造)。 3 スレッド目は新しい safety 関連構造に到達しない。一方 raw 状態数は爆発(~10⁵ → 1.37×10⁸)— スレッドが増えても構造は増えない。

3-level は外挿(正直なスコープ): 3-level superfine の σ-飽和の直接 dump は不能(intractable; superfine T=4 / 3-level superfine の dump は手に負えない)。 3-level へは commit-role 構造の tree-independence(Facts A–C)による外挿で到達する — 直接測定ではない。 (3-level coarse T=2 は既に ≥9 構造に達し、その exhaustion は未完了。) 派生する局所構造不変条件(SubNeverMissing / BundledHasCopy / StaleParentExcluded / SubPresenceUniform)は 3-level superfine T=3 all-root + T=2 both-roles(両畳み込み経路の最忠実モデル)まで無違反検証済。

活性 (livelock-free) — oldest-tag ランキング (∀N)

safety は活性をパラメータ化しない。EventuallyAllDone (<>AllDone) を well-founded ランキング関数で証明。論証は §§木軸 ともスレッド数 N とも独立

進行機構(spec facts)

ランキング関数

R(s) = ( M(s), d(s) )   -- 辞書式、well-founded
  M(s) : Active スレッドの MyTag 多重集合(Dershowitz–Manna 多重集合拡張)
  d(s) : 大域最古 t★ = argmin MyTag の pc[t★]→"done" 残距離(有限・非循環 CFG)
定理(livelock-free, ∀N): WF_vars(NextStep)Privilege=TRUE の下、 EventuallyAllDone任意の有限 Threads で、|Threads| に依らず成立。 ランクが大域最古を量化し、それは任意有限 Active に存在する ⇒ 活性にスレッドカットオフ不要

残存 obligation(§7.5、唯一の open lemma): 補題(progress) は特権 t★無限 retry なしで完了すると仮定。ピアは t★ の競合ノードから gate されるが、 別ノード(鎖上の祖先/子)で動くピアが bundle 鎖越しに DISTURBED/COLLIDED を起こしうる。 これら構造的擾乱が有界であること(各擾乱は若い要素を M から除くピアコミットに起因 → 無限反復不可)の一般証明が残る。 有界 EventuallyAllDone 実行(2-thread all-roles superfine・3-thread confC 両レベル・413M dynamic-release)がカットオフで放電済。

スコープ + provenance + まとめ

スコープ境界(静的・単一親木)

カットオフ(木軸)・飽和(スレッド軸)・§7 活性ランキング・派生する局所構造不変条件 (SubNeverMissing / BundledHasCopy / StaleParentExcluded / SubPresenceUniform、 3-level superfine T=3 all-root + T=2 both-roles まで無違反検証)は 固定・単一親の rooted tree 前提(Next にノード挿入/削除なし、ParentOf 単一値)。 以下 2 領域は別途検証(本論証の拡張ではない):

領域担当
動的トポロジ(online insert/release)*_dynamic_* 仕様(413M dynamic-release 等)+ transaction_dynamic_node_testSubPresenceUniform は挿入時に一時破れる
hard-link / DAG(子が ≥2 親)§5 BundleUnbundle_hardlink_* + Phase-3 fix。the 親を名指す conjunct は多値 ParentOf で ill-formed

raw 状態数は spec-version 依存

distinct-state 数は (.tla, cfg) の決定的関数(TLC BFS は固定モデルで到達集合を厳密再現;seed/worker は発見順のみ)。 ゆえにspec 版を跨いで比較不可: 同一 confC superfine T=3 構成は開発を通じて 514M → 1.155G → 640M → 540M と推移(cfg 定数は不変、Next の protocol fix 反映)。 版非依存量は σ-射影(飽和構造集合)であって raw 数ではない。

一行サマリ

Safety/木軸: ∀ 木形を構造カットオフ定理で(catamorphism ⇒ depth-3/width-2 カットオフ、TLC 網羅放電)。 Safety/スレッド軸:T 定理は主張 — 対称性は意味論的だが TLC 適用不可かつ置換のみ。 contention bound まで網羅(superfine T=3=137M, coarse T=4=136M)+ σ-飽和測定(T=2 ≡ T=3、6 構造)→ 強根拠つき予想Liveness:N を oldest-tag ranking で(スレッドカットオフ不要、小 T で網羅検証)。gate は純活性デバイスで safety と素。

出典: doc/parameterized_cutoff.md(§1–§9)/ VERIFICATION.md Thread-axis saturation §。関連: LL-free 仕様 / 全体カバレッジ俯瞰