数学探索 / 02
数学探索プロジェクト · 第二弾

循環を止める境界。
選択肢が効き始める境界。

同じ目的に向かう人たちが、なぜ行き来を繰り返すのか。
監査の予定を増やしても、なぜ守りが強くならないのか。
小さなゲームから、保証の限界を正確に求める。

2026 09 10横田さん × AI の共同探索図解・証明・検証記録
読み方

まず図を操作して直感をつかみ、次に式と短い証明へ。完全な証明・再現コードは後半に折り畳んであります。数式・図・操作はすべてこの1ファイルに収録しています。

01 同じ目的でも、判断のずれが循環を生む

複数の人が共通の目的を良くしようとしていても、見えている評価が少しずつ違えば、「自分には改善」に見える変更を交互に繰り返し、元の状態へ戻ることがあります。そこで、小さすぎる改善は採用しないというルールを考えます。その幅は、どこまで小さくできるでしょうか。

誤差は共通。反応の仕方が違う。

各人の有限で空でない行動集合の直積を S=iSiS=\prod_i S_i とします。状態を ss、共通の目的を Φ(s)\Phi(s)、共通の誤差を h(s)h(s) として、プレイヤー ii の評価を

Ui(s)=Φ(s)+ai,h(s),h(s)ε U_i(s)=\Phi(s)+\langle a_i,h(s)\rangle, \qquad \|h(s)\|\le\varepsilon

と置きます。aia_i は、誤差の各成分にどれだけ反応するかを表す感度です。1次元なら単に Ui=Φ+aihU_i=\Phi+a_i h です。

Φ共有する目的

全員が同じ状態を基準に評価する、共通部分。

h共有する誤差

状態ごとに固定された誤差。大きさは ε 以下。

aᵢ各人の感度

同じ誤差を、異なる強さ・方向で評価へ反映する。

実験:4つの状態を一周できるか

下の図は、2人がそれぞれ0か1を選ぶ反例です。各矢印では1人だけが選択を変えます。見かけの改善が閾値 γ\gamma厳密に超えるときだけ、矢印を進めます。

操作する図 1

変更の閾値と、循環する4状態

全ゲームに対する最小保証閾値 γ*0.0500ε × 感度の開き

図では aᵢ = 1、aⱼ = 1 + 開き。各設定に合わせて反例の目的 Φ も構成し直します。

各変更の利益は0.0500、閾値は0.0400。4つの変更を繰り返せる。i : +0.0500j+0.0500i : +0.0500j+0.050000h = +0.10Φ = 010h = −0.10Φ = 0.250011h = +0.10Φ = 001h = −0.10Φ = 0.2500aᵢ = 1  aⱼ = 1.50

循環する反例を構成可能:各手の利益 0.0500 > γ = 0.0400。自分にとっての改善を4回続けると、元の状態に戻ります。

実線は受理できる変更、破線は閾値に届かない変更です。青い枠が現在の状態。境界より下なら、このような循環する例を作れます。境界以上では、すべての許容された固定目的・固定誤差について循環を防げます。

結果:必要なのは、感度の「直径」

各人に共通の閾値を使うとき、その最小保証値は

γ*=εmaxi,jIaiaj* \boxed{\gamma_* = \varepsilon\max_{i,j\in I}\|a_i-a_j\|_*}

です。II は2つ以上の行動を持つプレイヤーの集合。*\|\cdot\|_* は元のノルムに対応する双対ノルムで、誤差が評価差をどれだけ大きくできるかを測ります。ユークリッドノルムでは通常の距離です。II が空なら変更不能なので、閾値0で十分です。

1次元なら γ*=ε(maxiIaiminiIai)\gamma_* = \varepsilon(\max_{i\in I}a_i-\min_{i\in I}a_i)。たとえば ε=0.1\varepsilon=0.1、感度が 1,1.2,1.51,1.2,1.5 なら、0.050.05 を超える変更だけ採用すれば循環しません。感度が全員同じなら、共通誤差が大きくても閾値は0です。全員に同じ評価が見えていれば、その評価が一手ごとに上がるからです。

個人別の閾値も、正確に決まる

プレイヤーごとに γi0\gamma_i\ge0 を変える場合は、次が必要十分です。

γi+γj2εaiaj*(i,jI) \boxed{\gamma_i+\gamma_j\ge2\varepsilon\|a_i-a_j\|_* \quad(i,j\in I)}

十分性の核は短く書けます。全員の評価に共通して挟まれる関数

W(s)=maxiI(Ui(s)γi2) W(s)=\max_{i\in I}\left(U_i(s)-\frac{\gamma_i}{2}\right)

を作ると、ペア条件から Uiγi/2WUi+γi/2U_i-\gamma_i/2\le W\le U_i+\gamma_i/2。そのため、受理された変更では

W(t)W(s)Ui(t)Ui(s)γi>0. W(t)-W(s)\ge U_i(t)-U_i(s)-\gamma_i>0.

WW が必ず増えるので、同じ状態には戻れません。受理された変更は高々 |S|1|S|-1 回です。これは変更列の有限性であり、共通目的 Φ\Phi の大域最適化や、待機時間込みの終了時間を保証するものではありません。

必要性の4状態構成・ベクトル版・最小費用校正の証明へ →

02 1ビット漏れるだけで、監査の設計が変わる

今度は監査側と攻撃側のゲームです。5対象のうち、毎回3対象を監査するとします。攻撃者は予定の確率分布を知っていますが、実際に選ばれた予定は知りません。ただし、1対象について「今回は監査されるか」を観察してから、攻撃先を1つ選べます。

1予定を抽選監査側が、3対象の組を選ぶ。
21対象を観察攻撃者が得るのは監査あり/なしの1ビット。
3攻撃先を決める観察した対象自身への攻撃も可能。

監査中の対象へ攻撃すれば必ず検出されます。対象ごとの利得差はありません。以下の検出率は、攻撃者が最善に行動しても確保できる最悪の場合の確率保証です。

なぜ、2対象の同時監査率が出てくるのか

攻撃者が対象 ii を観察し、「監査なしなら ii、監査ありなら jj」と攻撃すれば、検出されるのは両方が監査されていた場合だけです。未監査と分かった対象があるのに、他へ攻撃して検出される危険を負う必要はありません。このため、最悪の攻撃に対する値は

V(w)=minijqij,qij=Pr(i,j がともに監査される) V(w)=\min_{i\ne j}q_{ij},\qquad q_{ij}=\Pr(i,j\text{ がともに監査される})

になります。この還元は既存の情報漏洩付きセキュリティゲームの研究に対応します。2対象を同時に攻撃するモデルではありません。

4つの予定で、25%を保証できる

監査対象を 123,145,245,345123,145,245,345 の4通りから、それぞれ確率 1/41/4 で選びます。下の表で攻撃者の観察対象と、監査ありのときの攻撃先を変えてみてください。

操作する図 2

攻撃の分岐と、実際の検出

対象 1 を観察 → 監査なしなら 1 を攻撃 / 監査ありなら 2 を攻撃

4つの予定は、それぞれ確率25%
監査する対象 観察結果 攻撃先 検出
12345
あり対象 2● 検出
12345
あり対象 2− 回避
12345
なし対象 1− 回避
12345
なし対象 1− 回避
選んだ攻撃の検出率25%4予定中1予定で検出

すべての攻撃ペアを比較

i / j12345
1
2
3
4
5

行が i、列が j。マスを押して攻撃を切り替えられます。最小値は25%です。

個別の監査率は対象1〜3が50%、対象4・5が75%。各対象を均等に監査するという条件は置いていません。

予定を増やしても、しばらく改善しない

使える監査パターン数の上限mm とすると、このゲームの全範囲が解けます。

操作する図 3

利用できるパターン数と、最適検出率

5対象・3監査の厳密な最適値。1〜3種類は0%、4〜9種類は25%、10種類は30%。0%10%20%30%最適検出率10%234525%678930%10パターン数の上限 m

4種類までなら最適値は25%。4種類の構成で達成でき、全10種類のうち1つでも欠けると25%が上界です。

1–3種類 0%4–9種類 25%全10種類 30%

4種類あれば、先ほどの構成で25%を達成できます。一方、9種類以下なら、全10予定のどれか1つは必ず欠けています。次節の定理によって、1つ欠けるだけで25%を超えられないことが分かります。5〜9の各点でも、4種類だけ使えば上限を達成できます。

全10種類を一様に選ぶと、どの対象ペアも10予定中3予定で監査されるため、検出率は30%です。「8〜9種類なら 2/72/7 まで上がるかもしれない」という探索中の予想は、計算と一般証明で否定されました。

少数パターンの完全分類と、停滞の証明へ →

03 1つの予定を減らすコストを、式にする

5対象の例を一般化します。n5n\ge5 対象から毎回 n2n-2 対象を監査するなら、予定は「監査から外す2対象」で表せます。予定の総数は N=(n2)N=\binom n2 です。

指定した1予定の使用確率を ρ\rho 以下に抑えます。ρ=0\rho=0 はその予定を使わないこと、ρ=1/N\rho=1/N は一様分布で使う確率まで許すことです。他の予定の確率は自由です。

Tn(ρ)=(n3)(n4+2ρ)n23n2(0ρ1N) \boxed{T_n(\rho)=\frac{(n-3)(n-4+2\rho)}{n^2-3n-2}} \qquad\left(0\le\rho\le\frac1N\right)

これが、確率制約の下での正確な最適検出率です。単なる評価式ではなく、どんな戦略も超えられない上界と、その値を実現する戦略が一致しています。

操作する図 4

予定の使用制限と、保証できる検出率

5対象のうち 3 対象を監査 / 全 10 予定 / 指定予定の上限 ρ = 0.000%(一様分布では 10.000%)

5対象の監査。確率上限の割合が0%のとき、最適値25.00%、個別監査率均一なら20.00%。0%10%20%30%40%最適検出率0%25%50%75%100%指定予定の上限 / 一様分布での確率
個別監査率を自由にする25.00%
個別監査率を均一にする20.00%

制約なしの最適値 30.00%。個別監査率を自由にする改善幅は 5.00 ポイント。

個別監査率は自由個別監査率を均一にする横軸:一様分布の使用確率に対する割合

最適値を達成する確率の置き方

指定する未監査ペアを {1,2}、残りの対象を R とします。

指定ペア {1,2}1予定 × 各 0.000%
0.00%
{1,2} と R の間6予定 × 各 12.500%
75.00%
R 内部のペア3予定 × 各 8.333%
25.00%

図の確率を全10ペアについて直接集計:総確率 100.00%、最小同時監査率 25.00%。理論値 25.00% と一致。

均一な個別監査率を追加で要求する場合の最適値も、Tnuniform(ρ)=14/n+ρT_n^{\mathrm{uniform}}(\rho)=1-4/n+\rho と求まります。グラフの差は、このモデルで均一性を要求することによる性能差です。

証明の形:最も弱い2種類のペアを釣り合わせる

指定した未監査ペアを abab、その確率を xx、残りの r=n2r=n-2 対象の内部に置く未監査ペアの総確率を AA とします。対象ペア abab の同時監査率は AARR 内の2対象からなるペアの平均同時監査率は

q¯R=r2r2(r2)r(r1)A+2xr. \overline q_R=\frac{r-2}{r} -\frac{2(r-2)}{r(r-1)}A+\frac{2x}{r}.

最悪値は min(A,q¯R)\min(A,\overline q_R) 以下です。AA を増やすと一方が上がり、他方が下がります。その交点を求めると Tn(x)T_n(x) になります。さらに、ペアを3種類に分類して確率を置けば、その上界を達成できます。上界の証明では、確率分布が対称であるとは仮定していません。

ほぼ最適にしたいなら、すべての予定が必要になる

制約なしの最適値は α=(n2)(n3)/[n(n1)]\alpha=(n-2)(n-3)/[n(n-1)]。1予定が欠けたときの正確な損失は

Δn=4(n3)n(n1)(n23n2). \boxed{\Delta_n=\frac{4(n-3)}{n(n-1)(n^2-3n-2)}}.

さらに V(w)αδV(w)\ge\alpha-\delta を満たすには、どの予定 ee の重みも

wemax{0,1N(n23n2)δ2(n3)} w_e\ge\max\left\{0,\frac1N-\frac{(n^2-3n-2)\delta}{2(n-3)}\right\}

でなければなりません。δ<Δn\delta<\Delta_n という精度を要求すると、1予定も削れません。5対象・3監査では、25%を少しでも上回る保証に全10予定が必要です。この式は1予定への制限を扱い、複数制限の損失を単純に足すことはできません。

上界・達成戦略・攻撃側の証明書を読む →

04 監査の問題が、グラフの問題になる

「2対象の組」を1つの頂点にし、互いに交わらない組同士を線で結ぶと、監査の式に別の姿が見えます。5対象なら頂点は10個。これは Petersen グラフとして知られる KG(5,2)KG(5,2) です。

攻撃ペア ijij が同時に監査されるのは、未監査ペアが ijij と交わらないとき。したがって、検出率はグラフ上でその頂点に隣接する頂点の重みの合計になります。

操作する図 5

1頂点の確率を0にして、近傍の重みを読む

未監査ペア12を使用しない最適分布。隣接頂点は各1/12、その他は各1/8。12341523453525241413

図の頂点を押すと、使用しない予定を切り替えられます。

指定ペア 12
使用確率 0

隣接する3頂点
各 1/12 ≈ 8.33%

非隣接の6頂点
各 1/8 = 12.5%

全攻撃ペア中の最小検出率25%指定頂点とその隣接頂点で達成

指定頂点の重みを0にしても、その頂点に対応する攻撃側の制約は残ります。

各頂点のラベルは、監査から外す2対象です。同じ頂点集合を、攻撃側の対象ペアのラベルにも使っています。辺に沿うのは状態遷移ではなく、検出率に加算する重みの関係です。

一般の強正則グラフでも解ける

頂点数 vv、各頂点の次数 rr、隣接する2頂点の共通隣接点数 λ\lambda、隣接しない2頂点の共通隣接点数 μ\mu がそれぞれ一定とします。0<r<v10<r<v-1μ>0\mu>0μλ\mu\ge\lambda の下で、指定頂点の重みだけを woρw_o\le\rho0ρ1/v0\le\rho\le1/v に制限した最適値は

TG(ρ)=μ+(rμ)ρr+μλ. \boxed{T_G(\rho)=\frac{\mu+(r-\mu)\rho}{r+\mu-\lambda}}.

この一般形に KG(n,2)KG(n,2) のパラメータを代入すると、前節の監査の公式が得られます。グラフ全体を自由に入れ替えられるような強い対称性は要求せず、共通隣接点数だけを使います。μ=r\mu=r の境界では値が一定になり、1頂点の確率を制限しても損失が出ない場合があります。

グラフ版の一般証明と、監査への対応を見る →

05 どこが既知で、どこを候補として残すか

証明の正しさと学術的新規性は、別の問いです。以下は 2026 09 10 の研究ノートに記録した予備照合の整理です。このHTML化の際に新たな網羅的文献調査は行っていません。

成果 既知の土台 候補として残した差分
G04 共有誤差の閾値 近接ポテンシャル、十分大きい改善による単調性 共有ベクトル誤差・個人別閾値の一様な必要十分条件と一致する反例
G05 1予定の確率制約 情報漏洩ゲーム、ペア率への還元、線形計画 正確な損失曲線、達成戦略と攻撃側の証明書、近似最適な各重みの下限
G06 グラフ版 制約付き行列ゲーム、分数全支配 強正則グラフの1頂点への確率上限を含む閉形式
G07 少数パターン 被覆デザイン、正の値が可能になる境界 任意重みを許す完全最適値と、パターン追加が無益な領域

今回確認した範囲では、候補の正確な命題に一致する先行結果は確認できていません。別の用語で知られた結果や、既知理論の簡潔な系である可能性は残ります。特に G06 の関連2論文は要旨を中心とする予備照合で、全文精読による排除ではありません。

照合した一次資料

  1. Candogan–Ozdaglar–Parrilo, Dynamics in Near-Potential Games — §2–4。G04の十分性の仕組みと近い既知の理論。
  2. Xu ら, Security Games with Information Leakage — 1対象の情報漏洩と、監査の相関を扱うモデル。
  3. Held–Korte–Rautenbach–Vygen, Combinatorial Optimization in VLSI Design — 固定閉路の最適化との既知対応。
  4. Gordon–Kuperberg–Patashnik, New constructions for covering designsHorsley, Generalising Fisher’s inequality to coverings and packings — 正の検出率が可能になるパターン数は被覆数に対応。
  5. Cornet–Torres, k-tuple domination on Kneser graphsBonomo-Braberman–Tilli, Fractional hypergraph isomorphism and fractional invariants — G06の関連分野。今回は要旨を中心に照合。

06 証明と検証を、読み直せる形で残す

下に研究ノートの証明・構成・再現コードを収録します。検証は証明の補助であり、有限検査が一般定理を証明したとは扱いません。グラフ・監査の図は導出した式を可視化したもので、ブラウザ内で一般の最適化を解いているわけではありません。

150共有誤差ゲーム受理辺 6,497 本を点検
200有理数の循環反例全変更が閾値を超過
104監査の達成構成全LP 24 条件とも一致
13強正則グラフ有理数・全LP 52 条件

ほかに、スカラーの費用最小化100件、4パターン問題9組の整数最適化を照合。独立したAI担当によるレビューを実施。形式証明・人間の専門家による査読は未実施です。

2026 09 10 / 第1版

前ノート『game-theory-exploration-02.md』の続編。今回は評価誤差に対する「改善を採用する最低幅」、および均一な個別監査率を仮定しない監査設計へ進めた。途中で、監査の結果が強正則グラフ上の確率制限付きゲームの特殊例になることも導いた。

数学的状態:一般の証明と達成構成を収録し、独立したAI担当による監査と計算照合を実施した。形式証明・人間の専門家による査読は未実施。学術的新規性は未確定。

HTML版の編集補足:原ノートの内容を収録し、G04の最大値・最小値・校正費用の添字を有効プレイヤー集合 I に明示的に限定した。有効プレイヤーがいない場合の扱いを補い、再現コードに必要な4パターン監査の関数を追加した。これらは成立条件と再現手順を明確にする編集である。

1. 今回残す成果
ID 結果 証明の状態 新規性の暫定評価
G04 共有されたベクトル誤差に対する、個人別の改善閾値の必要十分条件 明示的ポテンシャルと反例構成を証明 同一の一様な必要十分条件は今回未確認。主要候補
G04-C スカラー感度での最小費用校正、ベクトル版の線形計画 証明 重み付き中央値・LP双対は既知。G04の応用として扱う
G05 毎回2対象を外す監査で、1パターンの確率を減らしたときの正確な最適値 上界と達成戦略を証明 具体的な確率不足曲線は同一結果未確認。主要候補
G05-C 均一監査率を要求した場合との厳密な比較 証明 G05と比較するための系
G06 確率上限を持つ1頂点を含む、強正則グラフ上のゲームの厳密解 一般の証明・独立監査・13グラフで検証 G05を含む一般化。分数全支配・制約付き行列ゲームとの追加照合が必要
G07 4パターン以下の監査の完全分類、追加1パターンが無益な領域 証明と構成 正の値が可能になる境界は既知の被覆数に含まれる。重み付きの完全最適値は同一結果未確認
2. G04:誤差感度の差に合わせた、最小限の変更閾値

2.1 モデルと重要な量化

有限人数のプレイヤーについて、有限で空でない行動集合の直積を S=iSiS=\prod_i S_i とする。全員に共通する真の目的を任意の実数値関数 Φ:S\Phi:S\to\mathbb R とする。各人が使う固定の評価は

Ui(s)=Φ(s)+ai,h(s). U_i(s)=\Phi(s)+\langle a_i,h(s)\rangle.

h:Sdh:S\to\mathbb R^d は全員が共有する固定の誤差ベクトルで、誤差振幅の上限 ε0\varepsilon\ge0 と任意の固定ノルムについて h(s)ε\|h(s)\|\le\varepsilon とする。aida_i\in\mathbb R^d は誤差への感度、*\|\cdot\|_* は双対ノルムである。

変更は一人ずつ行い、プレイヤー ii は見かけの利益が γi0\gamma_i\ge0厳密に超える場合だけ変更する。つまり Ui(t)Ui(s)>γiU_i(t)-U_i(s)>\gamma_i

以下の必要十分性は、すべての Φ\Phi、すべての許された固定 hh に対して保証する命題である。既に決まっている特定の Φ\Phi だけを考えるなら、もっと小さな閾値でも止まる場合がある。少なくとも2行動を持つ人を「有効なプレイヤー」とし、その集合を I={i:|Si|2}I=\{i:|S_i|\ge2\} とする。条件は II 内の人たちの間だけに課す。以下でプレイヤーを添字とする最大値・最小値と校正費用の和も、すべて II 上で取る。行動を変えられない人には閾値0を設定できる。

I=I=\varnothing の場合は変更そのものが不可能なので、停止性は自明で共通閾値0とする。以下の WW と最大値・最小値を使う式は II\ne\varnothing の場合に述べる。有効なプレイヤーが1人の場合も含み、その場合の共通閾値は0になる。

2.2 鋭い必要十分条件

定理 G04。 上のクラスのすべてのゲームで、受理される変更列が必ず有限になる必要十分条件は

γi+γj2εaiaj*(全有効ペア). \boxed{\gamma_i+\gamma_j\ge 2\varepsilon\|a_i-a_j\|_*\quad\text{(全有効ペア)}.}

条件が等号でも保証は成立する。これは変更条件が >γi>\gamma_i であるためで、γi\ge\gamma_i に置き換えた命題ではない。

十分性の証明。 同じ状態での評価差は

|Ui(s)Uj(s)|εaiaj*γi+γj2. |U_i(s)-U_j(s)|\le\varepsilon\|a_i-a_j\|_* \le\frac{\gamma_i+\gamma_j}{2}.

次の明示的な関数を置く。

W(s)=maxiI{Ui(s)γi/2}. \boxed{W(s)=\max_{i\in I}\{U_i(s)-\gamma_i/2\}.}

各有効プレイヤー iIi\in I について、最大値の ii 項から下界、ペア条件から上界を得るので、

Ui(s)γi/2W(s)Ui(s)+γi/2. U_i(s)-\gamma_i/2\le W(s)\le U_i(s)+\gamma_i/2.

従って、ii の受理される変更では

W(t)W(s)Ui(t)Ui(s)γi>0. W(t)-W(s)\ge U_i(t)-U_i(s)-\gamma_i>0.

WW が厳密に増えるため同じ状態を再訪できず、実際に受理される変更は高々 |S|1|S|-1 回である。□

この十分性の証明は、共通誤差の線形モデルに限らず、上の点ごとの評価差条件を満たす任意の固定評価表に対して働く。

必要性の構成的証明。 あるペアで条件が破れるとする。ajaia_j-a_i の双対ノルムを達成するノルム1のベクトル vv を選び、

A=ai,v,B=aj,v,BA=ajai* A=\langle a_i,v\rangle,\quad B=\langle a_j,v\rangle, \quad B-A=\|a_j-a_i\|_*

とする。有限次元なので達成ベクトルが存在する。

L=γi+2εA,R=2εBγj,q=(L+R)/2 L=\gamma_i+2\varepsilon A, \quad R=2\varepsilon B-\gamma_j, \quad q=(L+R)/2

と置く。条件の違反から L<RL<R。2人の2択部分ゲームで、

状態 hh Φ\Phi
00、11 +εv+\varepsilon v 0
10、01 εv-\varepsilon v qq

と設定する。00i10j11i01j0000\xrightarrow{i}10\xrightarrow{j}11\xrightarrow{i}01\xrightarrow{j}00 の一周で、ii の2変更の利益は q2εA>γiq-2\varepsilon A>\gamma_ijj の2変更の利益は q+2εB>γj-q+2\varepsilon B>\gamma_j。全変更が受理される循環となる。他の状態では Φ,h\Phi,h を任意に延長すればよい。□

2.3 共通閾値と、誤差の共通成分

全員に同じ閾値を使う場合、最小の一様保証値は

γuniversal=εmaxi,jIaiaj*. \boxed{\gamma_{\mathrm{universal}} =\varepsilon\max_{i,j\in I}\|a_i-a_j\|_*.}

スカラー感度では ε(maxiIaiminiIai)\varepsilon(\max_{i\in I} a_i-\min_{i\in I} a_i)。したがって、効くのは感度の絶対的大きさでなく、感度間の開きである。全感度に同じベクトルを加えた部分は共通目的へ吸収できる。

例えば誤差振幅上限が0.1、スカラー感度が1、1.2、1.5なら、共通閾値0.05を超える変更だけを受理すれば、このモデルのすべての固定目的・固定誤差について循環しない。これより小さい共通閾値では、ある目的と誤差を選んで循環を作れる。

2.4 なぜベクトル版が役に立つか

WW

W(s)=Φ(s)+maxiI{ai,h(s)γi/2} W(s)=\Phi(s)+\max_{i\in I}\{\langle a_i,h(s)\rangle-\gamma_i/2\}

と書ける。誤差に対して区分線形の関数であり、単一の係数 α\alpha による Φ+α,h\Phi+\langle\alpha,h\rangle に限定する必要がない。

例として、ユークリッド平面の感度ベクトルが一辺1の正三角形の頂点で、ε=1\varepsilon=1 とする。G04は共通閾値1で保証する。一方、各人の誤差を同じ線形係数へ寄せ、2aiα2\|a_i-\alpha\| で評価する方式では、最小包含円の半径 1/31/\sqrt3 により 2/31.15472/\sqrt3\approx1.1547 が必要になる。

これはその線形な証明方式が保守的になる例である。特定の Φ,h\Phi,h に対して、あらゆる線形ポテンシャルが使えないという一般主張ではない。

2.5 個人別の閾値を最小費用で決める

ここでも II\ne\varnothing とする。スカラー感度、ε>0\varepsilon>0、費用重み wi>0w_i>0 とする。ペア条件は区間

Ii=[aiγi/(2ε),ai+γi/(2ε)] I_i=[a_i-\gamma_i/(2\varepsilon),\ a_i+\gamma_i/(2\varepsilon)]

がすべて共通部分を持つことと同値である。区間では、ペアごとに交わることと全体で交わることが同値だからである。

従って、iIwiγi\sum_{i\in I} w_i\gamma_i の最小化は

minα2εiIwi|aiα| \boxed{\min_\alpha 2\varepsilon\sum_{i\in I}w_i|a_i-\alpha|}

に帰着し、重み付き中央値 α\alphaγi=2ε|aiα|\gamma_i=2\varepsilon|a_i-\alpha| で最適化できる。重み付き中央値自体は古典的な最適化結果であり、新規性を主張しない。

ベクトル感度では、正確な校正費用は線形計画

minγ0iIwiγi,γi+γj2εaiaj* \min_{\gamma\ge0}\sum_{i\in I} w_i\gamma_i, \qquad \gamma_i+\gamma_j\ge2\varepsilon\|a_i-a_j\|_*

となる。双対は

maxyij02εi<j,i,jIaiaj*yij,jI,jiyijwi. \max_{y_{ij}\ge0}2\varepsilon\sum_{i<j,\ i,j\in I}\|a_i-a_j\|_*y_{ij}, \qquad\sum_{j\in I,\ j\ne i}y_{ij}\le w_i.

これは既知のLP双対で、近似的な幾何学的中央値への置き換えは不要である。ε=0\varepsilon=0 なら全閾値0で足りる。

2.6 停止性の意味と限界

保証するのは「受理された一人変更の列が有限」という性質。外部の実行器が永遠に何もしない場合の時間的な終了や、真の目的の大域最適性は保証しない。極大な変更列の終点では、各人の見かけの改善余地が γi\gamma_i 以下となる。

状態を再訪したときに誤差表が変わる場合、同時変更、基準目的の変更は対象外である。また、この必要性は任意の実数値目的に対する一様保証。前ノートの固定目的 Φ=xy\Phi=xy の正の誤差境界とは量化が違い、矛盾しない。

3. G05:監査予定を一つ減らすコストを正確に求める

3.1 ゲームと既知の還元

n5n\ge5 対象のうち、毎回 k=n2k=n-2 対象を監査する。攻撃側は、実現した予定を知らずに1対象を選び、その対象の監査有無を正確に観察してから攻撃対象を選ぶ。観察した対象自身への攻撃も許す。監査対象への攻撃は確実に検出され、利得は対象によらず同じである。

監査予定の確率と、個別対象の監査率は自由。均等にする仮定はない。既知の1対象漏洩モデルから、監査側の値は

V(w)=minijPr(i,jがともに監査される) V(w)=\min_{i\ne j}\Pr(i,j\text{がともに監査される})

となる。この還元自体はXuらの研究に属する。

各予定を「監査から外す2対象」のペア ee で表す。可能な予定は N=(n2)N=\binom n2 個。攻撃対象のペアと未監査ペアが交わらないときに検出されるので、ペア ijij の同時監査率は、ijij と交わらない未監査ペアの確率和である。

3.2 使用確率に上限を置いた場合の厳密解

指定した1予定 abab の確率を wabρw_{ab}\le\rho に制限する。ただし 0ρ1/N0\le\rho\le1/N。他の予定に制約は置かない。

定理 G05。 この制約下での最適検出率は

Tn(ρ)=(n3)(n4+2ρ)n23n2. \boxed{T_n(\rho)= \frac{(n-3)(n-4+2\rho)}{n^2-3n-2}.}

以下では r=n2r=n-2D=r2+r4=n23n2D=r^2+r-4=n^2-3n-2R=[n]\{a,b}R=[n]\setminus\{a,b\} と置く。

任意の監査戦略に対する上界証明。 x=wabx=w_{ab}AARR 内部の未監査ペアに置く総確率とする。まず qab=Aq_{ab}=A。一方、RR 内部の攻撃ペアについて同時監査率を平均すると

q¯R=r2r2(r2)r(r1)A+2xr. \overline q_R= \frac{r-2}{r} -\frac{2(r-2)}{r(r-1)}A +\frac{2x}{r}.

この式は、実現した未監査ペアが ababRR 内部、または交差ペアのいずれかにあるかで数えれば得られる。重みの対称性は仮定していない。

従って V(w)min(A,q¯R)V(w)\le\min(A,\overline q_R)。一方は AA に関して増加し、他方は減少するので、その交点が最も高い上界となる。交点は

A=(r1)(r2+2x)D=Tn(x)Tn(ρ). A=\frac{(r-1)(r-2+2x)}D=T_n(x)\le T_n(\rho).

達成戦略。 x=ρx=\rhoA=Tn(ρ)A=T_n(\rho) として次の確率を使う。

未監査ペアの種類 個数 各ペアの確率
指定ペア abab 1 ρ\rho
{a,b}\{a,b\}RR の間 2r2r (1ρA)/(2r)(1-\rho-A)/(2r)
RR 内部 (r2)\binom r2 2A/[r(r1)]2A/[r(r-1)]

確率は非負で総和1。この戦略の qabq_{ab} と全 RR 内部のペア率は AA に等しい。交差する攻撃ペアの値と AA の差は

(r1)(1Nρ)rD0. \frac{(r-1)(1-N\rho)}{rD}\ge0.

よって最小値は A=Tn(ρ)A=T_n(\rho) であり、上界を達成する。□

達成戦略は、ρ=0\rho=0 の戦略と全予定の一様分布を、重み 1Nρ1-N\rhoNρN\rho で混ぜたものでもある。

3.3 攻撃側の短い証明書

上界には、次の固定されたランダム攻撃を使う別証明もある。確率 θ=2(r2)/D\theta=2(r-2)/D でペア abab を使い、残りで RR 内部のペアを一様に選ぶ。ペアを使うとは、一方を観察し、未監査なら自身、監査されていればもう一方を攻撃することを意味する。

この方策の検出率は、未監査ペアが abab 以外なら常に Tn(0)T_n(0)abab なら 1θ1-\theta。従って監査側がどんな分布を使っても検出率は

Tn(0)+2(r1)DwabTn(ρ) T_n(0)+\frac{2(r-1)}D w_{ab}\le T_n(\rho)

になる。これは、監査側の達成戦略と対になる上界証明書である。

3.4 欠落損失と、ほぼ最適な分布の必要条件

予定を制限しない最適値は

α=(n2)(n3)n(n1)=Tn(1/N). \alpha=\frac{(n-2)(n-3)}{n(n-1)}=T_n(1/N).

1予定でも欠ければ、値は高々 Tn(0)T_n(0) になる。従って最適値からの損失は少なくとも

Δn=4(n3)n(n1)(n23n2). \boxed{\Delta_n=\frac{4(n-3)}{n(n-1)(n^2-3n-2)}.}

これは N1N-1 個の予定で達成できる正確な損失である。

さらに、最適値からの損失が δ\delta 以下の分布では、すべての予定について

wemax(0,1N(n23n2)δ2(n3)) \boxed{w_e\ge \max\left(0,\frac1N-\frac{(n^2-3n-2)\delta}{2(n-3)}\right)}

が必要である。各予定の重みが 1/N1/N 以下ならG05を適用し、それより大きければ不等式は自動的に成立する。

従って δ<Δn\delta<\Delta_n という精度を要求するなら、どの予定も削れない。これは厳密最適だけでなく、近似最適についての定量的な必要条件である。

3.5 G05-C:均一監査率を要求した場合との比較

各対象を監査から外す確率を 2/n2/n に揃える条件を追加すると、

qab=14n+wab q_{ab}=1-\frac4n+w_{ab}

なので、最適値は高々 14/n+ρ1-4/n+\rho。この値も達成でき、

Tnuniform(ρ)=14n+ρ. \boxed{T_n^{\mathrm{uniform}}(\rho)=1-\frac4n+\rho.}

ρ=0\rho=0 の達成分布は、交差未監査ペアに各 2/[n(n2)]2/[n(n-2)]、内部ペアに各 2(n4)/[n(n2)(n3)]2(n-4)/[n(n-2)(n-3)] を置く。どの対象も確率 2/n2/n で外される。この分布を全予定一様分布と NρN\rho の割合で混ぜれば、一般の ρ\rho を達成する。全未監査ペアの重みが ρ\rho 以上なので、他のペア率も指定ペア率以上となる。

均一性を外すことによる改善幅は正確に

Tn(ρ)Tnuniform(ρ)=2(n4)n(n23n2)(1Nρ). \boxed{T_n(\rho)-T_n^{\mathrm{uniform}}(\rho) =\frac{2(n-4)}{n(n^2-3n-2)}(1-N\rho).}

例:5対象・3監査で1予定が欠けるとき、均一監査率では最適値20%、均一性を外すと25%である。これはこのモデル内の性能比較であり、現実の公平性の価値を否定する主張ではない。

4. G06:強正則グラフ上のゲームへの一般化

4.1 対称な自己同型を仮定しない一般形

単純無向グラフ GG の頂点数を vv、各頂点の次数を rr とする。隣接する2頂点の共通隣接頂点数を λ\lambda、隣接しない2頂点の共通隣接頂点数を μ\mu とし、どのペアでもそれぞれ一定と仮定する。これがここで使う強正則性である。

0<r<v1,μ>0,μλ 0<r<v-1,\qquad \mu>0,\qquad\mu\ge\lambda

を仮定する。防御側は頂点上の確率分布 ww を選び、攻撃側は頂点 xx を選ぶ。検出率を xx の開近傍の確率和 yxwy\sum_{y\sim x}w_y とする。指定頂点 oo の確率だけを woρ1/vw_o\le\rho\le1/v に制限する。

定理 G06。 最適値は

TG(ρ)=μ+(rμ)ρr+μλ. \boxed{T_G(\rho)= \frac{\mu+(r-\mu)\rho}{r+\mu-\lambda}.}

頂点推移性や、隣接・非隣接クラス内の自己同型の存在は仮定しない。

4.2 証明

x=wox=w_oA=yowyA=\sum_{y\sim o}w_yq=vr1q=v-r-1 と置く。指定頂点の検出率は AAoo の隣接頂点を攻撃した場合の検出率の平均は、共通隣接点数を数えると

B(A,x)=μ+(rμ)x+(λμ)Ar. B(A,x)=\frac{\mu+(r-\mu)x+(\lambda-\mu)A}{r}.

従って値は min(A,B(A,x))\min(A,B(A,x)) 以下。μ>λ\mu>\lambda なら2直線の交点、μ=λ\mu=\lambda なら一定の BB が上界を与え、いずれも TG(x)TG(ρ)T_G(x)\le T_G(\rho) を得る。

達成戦略は、指定頂点に ρ\rho、その各隣接頂点に TG(ρ)/rT_G(\rho)/r、それ以外の各頂点に

1ρTG(ρ)vr1 \frac{1-\rho-T_G(\rho)}{v-r-1}

を置くもの。強正則性の恒等式

r(rλ1)=(vr1)μ r(r-\lambda-1)=(v-r-1)\mu

より TG(1/v)=r/vT_G(1/v)=r/v。また rμr\ge\mu なので TGT_G は非減少で、ρ1/v\rho\le1/v では TG(ρ)r/vT_G(\rho)\le r/v。ゆえに確率は非負である。

指定頂点とその全隣接頂点の検出率は TG(ρ)T_G(\rho) になる。残りの頂点では共通の値 CC となり、全行の値の和が次数 rr であることから

(r+1)TG(ρ)+(vr1)C=r. (r+1)T_G(\rho)+(v-r-1)C=r.

従って CTG(ρ)=[rvTG(ρ)]/(vr1)0C-T_G(\rho)=[r-vT_G(\rho)]/(v-r-1)\ge0。上界を達成する。□

μ=r\mu=r なら式は一定になる。この場合、指定頂点の重みを0にしても最適値を保てる場合があり、確率上限が常に性能を下げるとは主張しない。μ<λ\mu<\lambda の場合は今回の定理に含めない。

4.3 監査との対応と新規性の照合先

nn 対象の2要素部分集合を頂点とし、互いに交わらないペア同士を隣接させると KG(n,2)KG(n,2) となる。そのグラフのパラメータは、n5n\ge5

v=(n2),r=(n22),λ=(n42),μ=(n32) v=\binom n2,\quad r=\binom{n-2}2, \quad\lambda=\binom{n-4}2, \quad\mu=\binom{n-3}2

である。G06に代入すればG05を得る。

グラフゲームの値の逆数は、対応する分数全支配問題の最小総重みに対応する。ρ=0\rho=0 では「指定した頂点には重みを置けないが、その頂点の近傍制約も満たす」問題となる。これは、その頂点の行と列を両方削除する通常の頂点削除問題とは異なる。

Kneserグラフの支配に関するCornet–Torresの研究、分数パラメータと分割の関係に関するBonomo-Braberman–Tilliの研究を予備照合した。今回は両者の要旨を中心に確認し、上記の指定頂点の確率上限付き公式を確認するには至っていない。これらが公式を含まないという断定でもない。

5. G07:少数の監査パターンの完全分類

ここでは n3,2k<nn\ge3,2\le k<nd=nkd=n-k とし、使用できる監査パターン数を高々 mm とする。確率と個別監査率は自由で、観察は前節と同じ完全な1対象観察とする。最適値を Fm(n,k)F_m(n,k) と書く。

5.1 未監査集合と重みの統合

実際に使う bb 個のパターンの未監査集合を DsD_s、正の重みを wsw_s とする。各対象 ii の「外されるパターン集合」を Ai={s:iDs}A_i=\{s:i\in D_s\} とすれば

qij=1sAiAjws. q_{ij}=1-\sum_{s\in A_i\cup A_j}w_s.

最も重い2パターンからそれぞれ未監査対象を選べば、V1w1w212/bV\le1-w_1-w_2\le1-2/b。同じ対象を選んでしまう場合も、その対象と別の対象のペアにすれば和集合に必要な2パターンを含められる。

b3b\ge3 で等号が成立するのは、全重みが 1/b1/b で、DsD_s が互いに交わらない場合に限る。重なりがあれば1対象が2パターンで外され、第三のパターンで外される対象と組み合わせることで少なくとも3パターンを避けるペアが生じる。

より一般に、ある対象が rr 個のパターンで外されるとき、その rr 個の重みを1つの仮想重みにまとめられる。残りと合わせた br+1b-r+1 個の仮想重みの、どの2つにも対応する未監査ペアを作れるため、r<br<b なら

V12br+1. V\le1-\frac2{b-r+1}.

r=br=b なら値は0。したがって m4m\ge4

(m1)dn<mdFm(n,k)=Fm1(n,k)=12m1. \boxed{(m-1)d\le n<md \quad\Longrightarrow\quad F_m(n,k)=F_{m-1}(n,k)=1-\frac2{m-1}.}

上界は、mm パターンなら未監査集合が重なること、m1m-1 以下なら元の支持数上界から得る。達成には m1m-1 個の互いに交わらない未監査集合を均等に選べばよい。この領域では、1パターン追加しても最良の保証は全く改善しない。

5.2 3・4パターンの完全な値

3パターンでは

F3(n,k)={1/3,3dn,0,3d>n. F_3(n,k)=\begin{cases}1/3,&3d\le n,\\0,&3d>n.\end{cases}

正の値には、どの対象も高々1パターンでしか外されないことが必要。2パターンで外される対象があると、残りのパターンで外される対象とのペアがすべての予定で検出を避けられる。従って3つの未監査集合が互いに素であることが必要十分となる。

4パターンでは次が完全な分類である。

パラメータ条件 同値な監査率の条件 F4(n,k)F_4(n,k)
2n<5d2n<5d k/n<3/5k/n<3/5 0
5d2n<6d5d\le2n<6d 3/5k/n<2/33/5\le k/n<2/3 1/41/4
3dn<4d3d\le n<4d 2/3k/n<3/42/3\le k/n<3/4 1/31/3
4dn4d\le n 3/4k/n<13/4\le k/n<1 1/21/2

証明。 正の値を持つ4パターンでは、各対象の未監査署名 AiA_i は大きさ2以下。大きさ3なら残りのパターンで外れる対象と合わせて全パターンを覆い、値が0になる。

大きさ2の署名を4パターンのラベル上の辺と見なす。互いに交わらない辺があっても値0になるので、どの2辺も交わる。このような単純グラフは星または三角形に含まれる。実際、ab,acab,ac があり、aa を含まない辺があれば、それは bcbc しかなく、他の辺もこの三角形に限られる。

二重に外れる対象数を重複込みで tt とする。未監査対象の延べ数は 4d4d なので、必要な異なる対象数は 4dt4d-t。星の場合は中心の未監査容量から tdt\le d、従って n3dn\ge3d。三角形の場合は3ラベルの容量から 2t3d2t\le3d、従って n5d/2n\ge\lceil5d/2\rceil。これで正値が不可能な領域が決まる。

5d/2n<3d\lceil5d/2\rceil\le n<3d では三角形の全3辺が必要。署名を12、13、23とする。第四のパターンで外れる対象は署名4に限られ、この対象と三角形署名とのペア、三角形署名同士のペアを使うと、各パターンの重みがそれぞれ検出率の上界となる。従って Vminsws1/4V\le\min_s w_s\le1/4

達成構成は、d=2td=2t なら署名12、13、23の対象をそれぞれ tt 個、署名4を dd 個置く。d=2t+1d=2t+1 なら12を t+1t+1 個、13と23を各 tt 個、署名3を1個、署名4を dd 個置く。必要対象数は 5d/2\lceil5d/2\rceil で、残りの対象は常に監査する。4予定を均等に使えば値 1/41/4 を達成する。

3dn<4d3d\le n<4d では前節の追加1パターンが無益な領域の定理から値 1/31/34dn4d\le n では互いに素な4未監査集合から値 1/21/2 を得る。□

5.3 5対象・3監査の全パターン数曲線

G05とG07を組み合わせると、この小さなゲームは使用可能パターン数全域で解ける。

使用できる最大パターン数 最適検出率
1〜3 0
4〜9 1/41/4
10以上 3/103/10

4パターンの具体的な監査対象は、123,145,245,345123,145,245,345 を各 1/41/4 で選べばよい。どの対象ペアも少なくとも1パターンに含まれ、最悪検出率は 1/41/4。9パターン以下なら必ず何か1予定が欠けるので、G05により 1/41/4 を超えられない。全10パターン一様で 3/103/10 を達成する。

探索中に「8〜9パターンで 2/72/7 まで上がるかもしれない」という仮説を試したが、LP探索とその後の一般証明により否定された。4から9までの長い停滞が正しい結果だった。

6. 新規性をどう評価するか

6.1 既知の結果として明確に帰属する部分

Candogan–Ozdaglar–Parrilo, Dynamics in Near-Potential Games の§2〜4を確認した。近いポテンシャルとの逸脱利得差、閉路和、近似均衡集合への到達を扱う。G04の「十分大きい改善は近似ポテンシャルを増やす」という十分性の仕組みは、この既知の数学に近い。

前ノートの固定閉路に関する半径・最大改善幅の最適化は、別分野ではさらに直接の既知対応が見つかった。Held–Korte–Rautenbach–Vygen, Combinatorial Optimization in VLSI Design の§4.1〜4.2に、頂点ポテンシャルの差と正の辺重みを使ったスラック最適化がある。π=h\pi=hce=ΔΦ/aic_e=-\Delta\Phi/a_iwe=1/aiw_e=1/a_i とすれば対応し、振幅制限は固定基準への辺で表せる。固定閉路の最適化自体は新規性の主張から下げる。

Xuらの漏洩セキュリティゲームは、1対象の観察とペア監査率への還元の出典である。

Gordon–Kuperberg–Patashnik, New constructions for covering designsHorsley, Generalising Fisher’s inequality to coverings and packingsを照合した。V>0V>0 を実現できる最少パターン数は古典的な被覆数 C(n,k,2)C(n,k,2)。4パターンで正値が可能になる境界は、少数ブロック被覆の既知研究の範囲に入る。Horsleyが参照するMills(1979)等の原著全文は今回未取得であり、重み付き最適値の完全分類まで既出かは未確定である。

6.2 今回の候補として残す部分

  • G04の、ベクトル共有誤差・個人別閾値・任意目的に対する鋭い必要十分条件と、対応する2人2択の反例。
  • G05の、1予定の確率不足に対する線形の厳密性能曲線、一致する監査戦略と攻撃側の証明書、近似最適に必要な各予定の重み。
  • G06の、強正則グラフの指定頂点に確率上限を置く一般の閉形式。頂点の確率を禁止しても、その頂点の行制約は残る点を含めて照合する。
  • G07の、任意重みを許す少数パターンの最適値・停滞領域。ただし正値可能性だけは既知の被覆問題として帰属する。

今回の検索語には、shared/common payoff perturbation、finite improvement、heterogeneous thresholds、approximate potential、small-block covering、fractional covering、fractional total domination、Kneser、forbidden vertex、strongly regular matrix game 等を含めた。同一命題は確認できなかったが、検索の不発や要旨のみの確認は新規性の証拠として弱い。

現時点の表記は「証明を収録した命題候補、同一結果未確認」である。「新しい定理を学術的に発見したと確定」ではない。 基礎技法が初等的なため、専門家には既知理論の簡潔な系と見える可能性もある。それでも、境界・達成構成・失敗例が揃った検証可能な成果として残す。

7. 検証記録

seedは20260910。一般の証明と独立した方法で次を実施した。

対象 検証内容 結果
G04十分性 2〜6人、各2択、3次元誤差。LPで個人別閾値を求め、全状態の WW の挟み込みと受理辺を点検 150ゲーム、受理辺6,497本で違反なし
G04必要性 双対ノルムを1ノルムとする有理数の2人2択反例 200件で全変更が閾値を厳密に超える
スカラー校正 LPと重み付き中央値による値を比較 100件一致
G05構成 n=5n=5〜30、ρ{0,1/(3N),2/(3N),1/N}\rho\in\{0,1/(3N),2/(3N),1/N\}、確率とペア値を有理数計算 104構成一致。n12n\le12 は全ペア、以降は3分類の代表を検査
G05全LP n=5n=5〜10、同じ4上限値、すべての予定・すべての攻撃ペアを含むLP 24件一致
G06 構成から隣接行列を生成し強正則パラメータ自体も検査。Paley、Rook、Kneser、完全多部の13グラフ 有理数構成と全LPの52条件で一致
G07 独立担当による4パターンのMILP、9組の (n,k)(n,k) 全件最適終了・分類と一致

独立した担当が、G04の量化と反例、G05の各ペア率と上界、G06の μ=λ\mu=\lambdaμ=r\mu=r の境界、G07の星・三角形分類を再点検した。誤りは今回の主要証明では見つからなかった。

形式証明は行っていない。浮動小数点LPは許容差を持つ計算検証であり、有理数による構成点検とも区別する。有限検査が一般定理を証明したとは解釈しない。

8. 次に進むなら

G04は、共有誤差が再訪時に少し変わる場合の有限総変動・停止回数の評価へ進められる。固定誤差の証明をそのまま時間変動誤差に流用しない。

G05・G06は、指定パターン・頂点を2つ以上制限した場合に進められる。2制限の位置関係による分類が生じるため、一つの制限の式を単に足すことはできない。特にグラフの隣接・非隣接に応じた制限コストが次の具体的な問いとなる。

ただし次の拡張の前に、G04の必要十分条件とG06の確率制限付き公式を、近似共通利益ゲーム・制約付き行列ゲーム・分数全支配の専門文献へ照合する価値がある。

9. 再現コード

以下は今回実行したコード。Python・NumPy・SciPyを使用する。結果JSONは実行ディレクトリに保存する。これはLeanコードではない。 ### verify_deep.py

"""Reproducible checks for sharp shared-error margins and capped audit schedules."""
from itertools import combinations,product
from fractions import Fraction as F
from pathlib import Path
import json
import numpy as np
from scipy.optimize import linprog

rng=np.random.default_rng(20260910)

def margin_lp(a,weights,eps=1):
    n=len(a);rows=[];rhs=[]
    for i,j in combinations(range(n),2):
        r=np.zeros(n);r[i]=r[j]=-1;rows.append(r);rhs.append(-2*eps*np.sum(np.abs(a[i]-a[j])))
    res=linprog(weights,A_ub=rows,b_ub=rhs,bounds=[(0,None)]*n,method='highs')
    assert res.success
    return res.x,res.fun

margin_edges=0;games=0;scalar_medians=0;witnesses=0
for n in range(2,7):
    states=list(product([0,1],repeat=n));S=len(states);index={s:i for i,s in enumerate(states)}
    for case in range(30):
        a=rng.integers(-5,6,size=(n,3)).astype(float);eps=float(rng.uniform(.05,1))
        gamma,_=margin_lp(a,rng.uniform(.1,3,size=n),eps)
        h=rng.uniform(-eps,eps,size=(S,3));phi=rng.normal(size=S)*10
        U=phi[:,None]+h@a.T;W=np.max(U-gamma/2,axis=1)
        assert np.all(W[:,None]>=U-gamma/2-1e-8)
        assert np.all(W[:,None]<=U+gamma/2+1e-8)
        for s_idx,s in enumerate(states):
            for i in range(n):
                t=list(s);t[i]=1-t[i];t_idx=index[tuple(t)]
                if U[t_idx,i]-U[s_idx,i]>gamma[i]+1e-8:
                    assert W[t_idx]>W[s_idx]-1e-8; margin_edges+=1
        games+=1
for n in range(2,12):
    for case in range(10):
        a=rng.integers(-10,11,size=(n,1));weights=rng.integers(1,8,size=n)
        _,val=margin_lp(a,weights)
        candidates=[2*sum(int(w)*abs(int(x)-int(alpha)) for w,x in zip(weights,a[:,0])) for alpha in a[:,0]]
        assert abs(val-min(candidates))<1e-7;scalar_medians+=1
# Exact rational square witnesses, norm is infinity and dual norm is 1.
for _ in range(200):
    ai=[int(x) for x in rng.integers(-4,5,size=3)];aj=[int(x) for x in rng.integers(-4,5,size=3)]
    distance=sum(abs(y-x) for x,y in zip(ai,aj))
    if not distance:continue
    eps=F(1,3);gi=gj=eps*distance/F(2)
    v=[(y>x)-(y<x) for x,y in zip(ai,aj)]
    aa=sum(x*y for x,y in zip(ai,v));bb=sum(x*y for x,y in zip(aj,v))
    q=(gi+2*eps*aa+2*eps*bb-gj)/2
    gains=[q-2*eps*aa,-q+2*eps*bb,q-2*eps*aa,-q+2*eps*bb]
    assert gains[0]>gi and gains[1]>gj and gains[2]>gi and gains[3]>gj;witnesses+=1

audit_exact=0;audit_lp_cases=0
for n in range(5,31):
    edges=list(combinations(range(n),2));N=len(edges);r=n-2;D=n*n-3*n-2
    for fraction in [F(0),F(1,3),F(2,3),F(1)]:
        rho=fraction/N;target=F((n-3)*(n-4),D)+F(2*(n-3),D)*rho
        weights=[]
        for e in edges:
            if e==(0,1):w=rho
            elif 0 in e or 1 in e:w=(1-rho-target)/(2*r)
            else:w=2*target/(r*(r-1))
            weights.append(w)
        assert min(weights)>=0 and sum(weights)==1
        # Three symmetry classes checked exactly; for n<=12 enumerate all rows.
        q_values=[]
        testpairs=edges if n<=12 else [(0,1),(0,2),(2,3)]
        for e in testpairs:q_values.append(sum(w for f,w in zip(edges,weights) if set(e).isdisjoint(f)))
        assert min(q_values)==target;audit_exact+=1
        if n<=10:
            M=np.array([[int(set(e).isdisjoint(f)) for f in edges] for e in edges],float)
            obj=np.zeros(N+1);obj[-1]=-1
            bounds=[(0,float(rho))]+[(0,1)]*(N-1)+[(0,1)]
            res=linprog(obj,A_ub=np.column_stack([-M,np.ones(N)]),b_ub=np.zeros(N),A_eq=[list(np.ones(N))+[0]],b_eq=[1],bounds=bounds,method='highs')
            assert res.success and abs(-res.fun-float(target))<1e-9;audit_lp_cases+=1

def graph_case(name,M):
    v=len(M);degrees=M.sum(axis=1);assert np.all(degrees==degrees[0]);d=int(degrees[0])
    common=M@M;ls={int(common[i,j]) for i,j in combinations(range(v),2) if M[i,j]};mus={int(common[i,j]) for i,j in combinations(range(v),2) if not M[i,j]}
    assert len(ls)==len(mus)==1
    la=ls.pop();mu=mus.pop();assert mu>=la and mu>0
    for f in [F(0),F(1,3),F(2,3),F(1)]:
        rho=f/v;T=(F(mu)+(d-mu)*rho)/(d+mu-la)
        w=[rho]+[T/d if M[0,i] else (1-rho-T)/(v-d-1) for i in range(1,v)]
        assert min(w)>=0 and sum(w)==1
        q=[sum(w[j] for j in range(v) if M[i,j]) for i in range(v)]
        assert min(q)==T
        obj=np.zeros(v+1);obj[-1]=-1
        res=linprog(obj,A_ub=np.column_stack([-M,np.ones(v)]),b_ub=np.zeros(v),A_eq=[list(np.ones(v))+[0]],b_eq=[1],bounds=[(0,float(rho))]+[(0,1)]*v,method='highs')
        assert res.success and abs(-res.fun-float(T))<1e-9
    return {'name':name,'v':v,'d':d,'lambda':la,'mu':mu,'cases':4}

graphs=[]
for q in [5,13,17]:
    residues={(x*x)%q for x in range(1,q)}
    M=np.array([[int(i!=j and (j-i)%q in residues) for j in range(q)] for i in range(q)],int)
    graphs.append(graph_case('Paley'+str(q),M))
for q in [3,4]:
    pts=list(product(range(q),repeat=2));M=np.array([[int(x!=y and (x[0]==y[0] or x[1]==y[1])) for y in pts] for x in pts],int)
    graphs.append(graph_case('Rook'+str(q),M))
for n in range(5,10):
    E=list(combinations(range(n),2));M=np.array([[int(set(e).isdisjoint(f)) for f in E] for e in E],int)
    graphs.append(graph_case('KG('+str(n)+',2)',M))
for parts,size in [(2,3),(3,3),(4,2)]:
    pts=list(product(range(parts),range(size)));M=np.array([[int(x[0]!=y[0]) for y in pts] for x in pts],int)
    graphs.append(graph_case('Multipartite'+str((parts,size)),M))
out={'seed':20260910,'vector_games':games,'accepted_edges_checked':margin_edges,'scalar_weighted_medians':scalar_medians,'rational_cycle_witnesses':witnesses,'audit_exact_constructions':audit_exact,'audit_full_LP_cases':audit_lp_cases,'strongly_regular_graphs':graphs,'srg_LP_cases':sum(g['cases'] for g in graphs)}
Path('deep_verification_results.json').write_text(json.dumps(out,indent=2))
print(json.dumps(out))

検証サマリーJSON

{
  "seed": 20260910,
  "vector_games": 150,
  "accepted_edges_checked": 6497,
  "scalar_weighted_medians": 100,
  "rational_cycle_witnesses": 200,
  "audit_exact_constructions": 104,
  "audit_full_LP_cases": 24,
  "strongly_regular_graphs": [
    {
      "name": "Paley5",
      "v": 5,
      "d": 2,
      "lambda": 0,
      "mu": 1,
      "cases": 4
    },
    {
      "name": "Paley13",
      "v": 13,
      "d": 6,
      "lambda": 2,
      "mu": 3,
      "cases": 4
    },
    {
      "name": "Paley17",
      "v": 17,
      "d": 8,
      "lambda": 3,
      "mu": 4,
      "cases": 4
    },
    {
      "name": "Rook3",
      "v": 9,
      "d": 4,
      "lambda": 1,
      "mu": 2,
      "cases": 4
    },
    {
      "name": "Rook4",
      "v": 16,
      "d": 6,
      "lambda": 2,
      "mu": 2,
      "cases": 4
    },
    {
      "name": "KG(5,2)",
      "v": 10,
      "d": 3,
      "lambda": 0,
      "mu": 1,
      "cases": 4
    },
    {
      "name": "KG(6,2)",
      "v": 15,
      "d": 6,
      "lambda": 1,
      "mu": 3,
      "cases": 4
    },
    {
      "name": "KG(7,2)",
      "v": 21,
      "d": 10,
      "lambda": 3,
      "mu": 6,
      "cases": 4
    },
    {
      "name": "KG(8,2)",
      "v": 28,
      "d": 15,
      "lambda": 6,
      "mu": 10,
      "cases": 4
    },
    {
      "name": "KG(9,2)",
      "v": 36,
      "d": 21,
      "lambda": 10,
      "mu": 15,
      "cases": 4
    },
    {
      "name": "Multipartite(2, 3)",
      "v": 6,
      "d": 3,
      "lambda": 0,
      "mu": 3,
      "cases": 4
    },
    {
      "name": "Multipartite(3, 3)",
      "v": 9,
      "d": 6,
      "lambda": 3,
      "mu": 6,
      "cases": 4
    },
    {
      "name": "Multipartite(4, 2)",
      "v": 8,
      "d": 6,
      "lambda": 4,
      "mu": 6,
      "cases": 4
    }
  ],
  "srg_LP_cases": 52
}

4パターン問題の再現:自足する check_audit.py

前ノートの solve(n,k,m) と必要な import をこのページ内に収録した。次のコードを check_audit.py として保存すれば、他の研究ファイルへの依存なしに、9組について m=4 を検証できる。Python・NumPy・SciPy は必要である。整数最適化により確率とパターン選択を同時に最適化し、結果は標準出力へ表示する。

計算時間には実行環境の差がある。8秒の制限で最適終了しなかった場合は、time_limit を増やして再実行する。status=0 の最適終了と、それ以外の途中解を区別する。

from itertools import combinations
import json
import numpy as np
from scipy.optimize import milp, Bounds, LinearConstraint

def solve(n,k,m):
    blocks=list(combinations(range(n),k)); pairs=list(combinations(range(n),2)); b=len(blocks)
    rows=[]; lo=[]; hi=[]
    r=np.zeros(2*b+1);r[:b]=1;rows.append(r);lo.append(1);hi.append(1)
    r=np.zeros(2*b+1);r[b:2*b]=1;rows.append(r);lo.append(-np.inf);hi.append(m)
    for z in range(b):
        r=np.zeros(2*b+1);r[z]=1;r[b+z]=-1;rows.append(r);lo.append(-np.inf);hi.append(0)
    for i,j in pairs:
        r=np.zeros(2*b+1);r[-1]=1
        for z,S in enumerate(blocks):
            if i in S and j in S:r[z]=-1
        rows.append(r);lo.append(-np.inf);hi.append(0)
    obj=np.zeros(2*b+1);obj[-1]=-1
    ints=np.zeros(2*b+1);ints[b:2*b]=1
    res=milp(obj,integrality=ints,bounds=Bounds(np.zeros(2*b+1),np.ones(2*b+1)),constraints=LinearConstraint(np.array(rows),lo,hi),options={'time_limit':8,'mip_rel_gap':1e-9})
    return {'n':n,'k':k,'m':m,'status':int(res.status),'value':None if res.x is None else float(res.x[-1]),'dual_bound':None if getattr(res,'mip_dual_bound',None) is None else -float(res.mip_dual_bound),'schedule':[] if res.x is None else [(list(S),float(w)) for S,w in zip(blocks,res.x[:b]) if w>1e-7]}

if __name__ == '__main__':
    cases = [(4,2),(5,3),(6,4),(7,4),(7,5),(8,5),(8,6),(9,6),(10,7)]
    for n, k in cases:
        result = solve(n, k, 4)
        print(json.dumps(result, ensure_ascii=False), flush=True)
        if result['status'] != 0:
            raise RuntimeError('MILP did not finish optimally; increase time_limit and rerun.')