横田さん × AI · 数学探索ノート · 2026 09 20

見えない内部は、
どこまで減らせる?

同じ熱の応答を、もっと小さな模型で再現したい。
そのとき「数式では3状態、物理的には4個必要」という差が現れる。

熱の動きを観察し、測定を行列へ変え、減らせない理由をたどる。図を操作しながら読める研究ノートです。

最初から読む 成果と新規性を先に見る
本文の目安:10〜15分 証明・文献61件・再現コードまで、この1ページに収録
01 / OBSERVE

温度を変えても、内部はすぐには追いつかない。

物体を小さな「熱を蓄える点」と、それらをつなぐ「熱の通り道」で表してみます。外側の温度を変えると、内側の温度は時間をかけて追いつきます。この遅れが、外から見た過去の影響=記憶を生みます。

ここでは、熱容量は正、伝導率は非負で、どちらの向きにも同じ伝導率を持つ線形模型に絞ります。

4つの境界と、4つの内部熱容量
熱回路の温度
境界:温度を外から指定内部:温度が自由に変わる細線:境界間の直接伝導 / 太線:内部との伝導

入力する境界を選び、時間を動かしてみてください。他の3境界は基準温度に保ちます。

合成回路の解析解。各内部容量4 J/K、内部から隣接境界への伝導率0.5 W/K。境界の直接伝導は隣接間0.75 W/K、対向間1 W/K。温度差1 Kを1秒で立ち上げます。表示している4個は境界を除いた内部の個数です。線の交差は接続点ではありません。

内部を表示から消しても、熱を蓄える働きまで消えるわけではありません。その働きを、より少ない状態で代役できるかが今回の問いです。
カオス理論とのつながりは?

出発点は、多数の変数を少数へ置き換える「粗視化」でした。内部を消すと記憶が残るという問題は、カオスやMori–Zwanzig理論ともつながります。ただし、このページで扱うのはカオスのない線形熱伝導。ここで得た下限を、非線形カオスの予測保証へそのまま広げることはできません。背景の式と文献

次へ:内部を開けずに、何を測る? →
02 / MEASURE

4回の実験で、外からの応答を集める。

毎回、全体を同じ初期平衡へ戻します。B1、B2、B3、B4を一つずつ同じ波形で加熱し、各境界で温度を保つために注入する熱流を測ります。1つの入力に4つの出力。合わせて16本の応答が得られます。

温度を指定B1〜B4のうち1か所
同じ物体内部は直接観測しない
熱流を測定4か所すべて

応答には、最後まで残る定常分と、次第に弱くなる過渡分が混ざります。内部の遅れを取り出すため、立上り完了後に、同じ長さの窓を二つ並べて積分します。

入力出力
第1窓の積分
第2窓の積分
差 Dᵢⱼ

同じ長さなので、定常分は引き算で消えます。一定のセンサーオフセットも相殺できます。時間とともに変わる誤差は残るので、後で誤差幅に含めます。

この表示は計算例で、実測データではありません。正負を含む熱流を、温度上昇幅で割っています。窓は1秒の立上り+0.1秒の待機の後に置きます。

次へ:16本の応答を、1枚の行列へ →
03 / TRANSLATE

二つの窓の差を並べると、内部の情報が残る。

「出力の境界」を行に、「入力の境界」を列にして、16個の差を並べます。これが4×4行列 D です。前の図で選んだ実験に対応するマスを枠で示しています。

二窓から得た D 単位 J/K

この合成例では、窓の取り方を変えると全体が同じ倍率 a で変わります。

D = a H₀

既知の倍率で割れば、後で何度も登場する H₀ になります。

H₀は対角が2、四角形の隣同士が1、向かい合う組が0。ここでaを知っているのは合成例だからです。実測の判定はD自体に適用でき、aの推定は不要です。
指定した測定条件の下では、内部が3状態以下なら、Dを3本以下の非負ベクトルから作れます。逆に、そのように作れないDが測れれば、3状態以下の模型を排除できます。
「非負ベクトルから作る」とは?

4つの境界への寄与を、4個の非負の数 f=(f₁,f₂,f₃,f₄) で表し、すべての組の積 fᵢfⱼ を並べます。これが外積 ffᵀ。その足し合わせが D=FᵀF、F≥0 です。Fの行が1本のベクトルに対応します。

理想ステップの後に置く二窓では、任意の内部状態数rについてcp-rank(D)≤r。一般の共通単調ランプでは、ここで必要なr≤3の主張を証明しています。数学的な因子を、実物の各部品に一意に対応づけて同定したという意味ではありません。測定からの因子分解の証明

次へ:なぜ「3」と「4」が分かれる? →
04 / COMPARE

引き算を許すと3本。非負だけなら4本。

H₀は、符号を自由に使えば3本のベクトルで作れます。でも、非負のベクトルだけを使うと4本必要です。切り替えて、各ベクトルの寄与を見比べてください。

4本の非負ベクトル
外積を全部足すと H₀

H₀のゼロは、B1とB3、B2とB4の組にあります。非負の積は足しても打ち消せないため、1本のベクトルが向かい合う2点を同時に受け持つことはできません。結果として、四角形の4辺にそれぞれ1本が必要になります。

通常ランクは3、完全正値ランクは4。後者は「非負の外積が最低何本必要か」を数える量です。量子論の完全正値写像やテンソルのCPランクとは別の概念です。

特定の単一緩和率を持つ熱回路では、この完全正値ランクが必要な内部熱容量の最少個数と一致します。抽象的な3状態で外部応答を計算することと、3個の熱容量・非負の伝導率で同じ応答を作ることは、異なる要求なのです。

熱回路へ結びつける正確な条件

正の対角内部容量、非負の相反熱伝導、指定した境界温度→境界熱流の応答を考えます。目標が Y(s)=K+sCB+sλH/(s+λ) のとき、Hが完全正値、かつ −Kᵢⱼ≥λHᵢⱼ(i≠j)が実現条件です。成立すると、最少内部容量数=cp-rank(H)。既知の境界容量CBは個数に数えません。

「数式の3状態」は既知の微分項sCBを除いた動的部分の次数です。負の温度差そのものが禁止なのではなく、混合座標を個別の熱容量へ戻す際の結合条件が問題になります。必要性と構成による十分性の証明

次へ:ゼロでなくても、4個が必要? →
05 / FIND THE LIMIT

ゼロを少し埋めても、壁は残る。

H₀の全ての成分に同じρを加えた行列 Hρ=H₀+ρJ を考えます。ゼロがなくなっても、すぐには3状態へ減りません。必要数が3になる境界はρ=1/2です。この族と境界は既知の研究に基づきます。[34] [56]

通常ランク3
最少内部熱容量4

異なるρでは目標応答も変わります。1つの物体が物理的な相転移を起こす図ではありません。ここでのρ∈[0,1]は、指定した回路構成が可能な範囲内です。

d:対角の最大値m:四辺の最小値z:向かい合う組の最大値

この3種類の値から、限界を1本の線にする。

今回の導出では、既知の幾何定理を使って、3状態以下に必ず成り立つ境界を求めました。

m ≤ M(d,z)
M(d,z) = min{ √[z(2d−z)], (d+z)/2 }d≥0、0≤z≤d、m≥0。z>dならdへ切り詰めます。

境界ぴったりの例を作って「鋭さ」を確かめる

対角上限をd=1にそろえ、zを選ぶと、境界を達成する3行以下の因子を構成できます。

境界より上なら3状態以下では不可能。境界以下ならこの三つの集約値では排除できない。「鋭い」とは、この三つの情報だけを使う範囲で限界まで詰めた、という意味です。

個々の測定値全てに一致する3状態模型がある、と判定する式ではありません。今回の明示式の学術的な初出は未確認です。境界の証明と文献照合

次へ:測定値に誤差があっても使える? →
06 / ALLOW ERROR

誤差を、3状態に有利な向きへ広げてみる。

現実の測定はぴったりの値ではありません。以下は、既知の倍率aで割ったH₀の無次元尺度での説明です。その各成分に、最大ηの誤差を認めます。四辺は小さめに、対角と向かい合う組は大きめに見積もり、それでも境界を越えるかを調べます。

四辺の下限 c1 − η
対向の上限 z0 + η
対角の上限 d2 + η
四辺の下限 c
3状態の限界 M

H₀の場合、この条件はとても短い計算になります。

3状態以下なら (1−η)² ≤ η(4+η)
したがって η ≥ 1/6
誤差が1/6未満なら、どんな3状態候補でも届きません。等号ではこの判定は保留です。1/6が実際の最小誤差だと決まったわけではありません。
自分の集約値を入れて判定する

4×4の対称化済み測定行列から、四辺の最小値m、対向する2組の最大値z、対角の最大値dを求めます。ηは、全成分を同時に覆う誤差幅です。全て同じ単位で入力してください。

簡易判定器 — 最良集約式 c² > Ξ(d,z)

最良集約式 c² > Ξ(d,z) による十分条件。初期値は熱回路の設計例。測定値の集約と誤差幅を変更できます。

標準偏差や相対誤差率を、そのままηに入れることはできません。統計的な信頼区間を使う場合も、全成分を同時に覆う保証が必要です。

次へ:この下限は、現実で何に役立つ? →
07 / USE IT

達成できない精度を、設計の前に見分ける。

少ない状態で実装したいとき、調整を続ければ目標精度へ届くとは限りません。この判定は、選んだ模型の種類と状態数で、目標精度が原理的に可能かを調べるために使えます。

合成熱回路での保証7.32 mW3状態以下では避けられない熱流誤差の下限

1 Kを1秒で線形に立ち上げ、0.1秒待ってから、各5.025725秒の二窓を測る例です。容量の尺度1 J/K、緩和率0.25 s⁻¹。4回の入力実験・4出力・観測区間のどこかで、この大きさ以上の誤差が必要になります。

行列の誤差下限を、波形の誤差へ戻すには、積分の長さを使います。熱流応答の最大誤差をEとすると、二窓差の誤差は高々2hE。したがって、この合成例では E≥a/(12h) です。前の窓幅スライダーと同じ解析式による換算です。

全ての出力に常時7.32 mWの誤差が出る、という意味ではありません。温度予測の誤差下限でもありません。合成回路での理論値で、実物・製品データによる検証は未実施です。

熱モデル

複数境界を持つ簡略化モデルで、内部状態をどこまで減らすかの判断に。ただし、ここでの入力は温度、出力は熱流です。

抵抗・コンデンサ回路

電圧と電流で同じ数式を実験できます。総立上り1 msの区分二次波形など、指定した電気的縮尺では約7.312 µAの対応下限が得られます。

実験へ移すときにそろえる条件
  • 各入力実験を同じ初期平衡から始める。
  • 境界ごとに同じ単調な立上り波形を使い、立上り後に二窓を置く。
  • 正の熱容量・非負の相反伝導という模型クラスを用いる。
  • 測定誤差、数値積分誤差、許容する模型誤差を合わせた幅で判定する。

模型の内部状態数は、実物の材料の層数や部品の個数そのものとは限りません。有限時間の検証では、候補模型の緩和率を目標に一致させる必要はありません。測定条件と適用範囲最新の単位換算

次へ:どこまで証明でき、新規性はどこに残る? →
08 / TAKE STOCK

分かったことと、まだ分からないこと。

到達点は、既知の幾何定理から、状態数を判定する鋭い数式を導き、誤差のある有限時間測定へつないだことです。証明の有無と、学術的に初めてかどうかは別に評価しています。

内容現在の位置づけ
H₀の「通常ランク3/CPランク4」、Hρの境界、基礎の幾何定理既知先行研究へ帰属。
三集約値の最良境界、誤差区間への適用、有限時間の熱流下限証明を記録今回導出・独立監査。同じ式の先取性は未確定。
ρ=0.4で既存SDPの一つは下界3に留まり、今回の式は3状態を排除厳密比較有理数の証明書を検算。既存手法全体より強いとは言わない。
最小近似誤差そのもの、実機での有効性、未読文献との重複未解決・未確認次の検証対象。

最小の誤差は、まだこの間にある。

H₀から3行以下の非負因子で作れる行列までの、最大成分誤差の最小値をD₃とします。

1/6 ≤ D₃ < 0.196676467057347

上側は具体的な近似行列の構成から、下側は今回の不等式から得ています。三集約値の境界を完全に求めても、元の行列の全成分を同時に近づける問題まで解けたわけではありません。

本ノートの局所探索では約0.196676467を得ており、追加査読でも同じ値が繰り返し得られたと報告されています。下界をこの値へ近づける方向が有望という数値的な手掛かりです。ただし、よりよい近似が存在しないことの証明ではありません。

文献照合では、松本の1981年原論文などの条件を確認しました。一方、Stein(1973)、Matsumoto(1982)、Kandić–Reljin(2009)の中心本文は未取得です。今回の結果の優先権を確定したとは扱いません。照合の詳細

役立つ問いは、「小さくできたか」だけでなく、「その制約と精度のままで、これ以上小さくできるのか」。このページは、その限界を確かめる方法と、検証可能な証拠をまとめたものです。
VERIFY / 詳細を検証する

証明、出典、再現コード。

ここからは専門的な記録です。本文の説明に対応する詳細を開けます。探索途中の数値と判断は、当時の記録として保持しています。現在の到達点は第8章と「最新の証明」を優先してください。

数値の変遷 — 現在の下限は1/6

以下は同じH₀に対する最大成分誤差の下限の推移です。上界0.196676467…は別の具体的な近似構成から得た値で、下限の更新と混同しません。

記録係数誤差の下限指定実験での熱流下限
初期の結果約0.049038この段階では同じ二窓実験の値を提示していない
追究2約0.097168約4.2687 mW
追究3約0.101021約4.4379 mW
追究4・現在1/6 ≈ 0.166667約7.3219 mW

熱流の3行は、容量尺度1 J/K、緩和率0.25 s⁻¹、1 Kを1秒の線形ランプで立上げ、0.1秒待機、各窓5.025725秒の同じ合成例。下限の保証が強まったのであって、模型の実際の誤差を減らした結果ではありません。数式と現在の判断は最新の証明を参照してください。

A. 最新の証明:鋭い集約式・誤差下限・既存SDPとの厳密比較
追究4 · 原論文の照合から、鋭い不等式へ証明を記録・式の先取性は未確定

三つの集約値から得られる、最良の状態数判定

今回の文献照合から、前回は予想として残した不等式を証明できた。既知のCPランク3の幾何学的判定定理を、測定量の三つの集約値だけで使える鋭い式へ変換した結果である。係数誤差の下限は約0.101から1/6へ改善し、特定の既存SDPでは判定できない行列も、この式で排除できると厳密に確認した。

1/63状態以下との係数誤差の下限。最小誤差そのものを決定したわけではない。
鋭い集約式対角上限・反対頂点間の上限・隣接成分の下限だけを使う範囲で最良。
厳密な比較例既存SDPは下界3に留まるが、強化式は4状態以上を認証する。

A. 何を測り、どの三つの数へまとめるか

前節からの対象は、正の熱容量と非負の相反熱伝導だけからなる線形模型である。4か所の境界温度を一つずつ同じ波形で変え、各境界の熱流を二つの等長窓で積分して差を取る。この4×4行列をXとする。所定の初期化・波形・観測条件の下で、内部状態3個以下ならX=FᵀF、F≥0、Fの行数≤3となる。実験条件の全体は追究2追究3に記す。

d:全対角成分の上限
z:X₁₃、X₂₄の上限(反対頂点の組)
m:X₁₂、X₂₃、X₃₄、X₄₁の下限(サイクルの四辺)

d≥0、0≤z≤d、m≥0として、これらの条件を満たすCPランク3以下の行列で、サイクル最小値をどこまで大きくできるかを考える。

M(d,z)=min{√[z(2d−z)], (d+z)/2}.

この上限は全てのd,zで達成できる。したがってm>M(d,z)なら3状態以下を排除でき、m≤M(d,z)なら、この三つの不等式を満たす3行以下の非負因子が実際に存在する。後者は、元の測定行列の全成分に一致する模型があるという意味ではない。z>dの場合はCauchy–Schwarzによりzをdへ切り詰められ、d=0の場合は零行列だけである。

「最良」の範囲:対角≤d、反対頂点間≤z、四辺≥mという集約した制約に対する最良性。個々の成分の上下限、時間情報、他の測定を全て使った最良判定や、物理模型の最小近似誤差の決定ではない。

B. 既知の幾何定理からの完全な証明

中心となる先行結果は、Brandts–Křížek(2016)のCorollary 3.6と式(6)。対ごとに一次独立な有限個の3次元ベクトルが非負八分空間へ等長に配置できるなら、2本が同じ座標を0に持つ、すなわち一つの座標平面上にある配置も選べる。比例する組や零ベクトルがある場合は、下の摂動と極限の段落で扱う。この既知定理を使い、「その2本が隣接するか、反対頂点か」を尽くす。[34]

補題:2次元なら m²≤dz

4本のベクトルが非負の2次元平面にあるとする。零ベクトルがあればm=0で自明。そうでなければ角度が最小のviを取り、そのサイクル上の隣接2本をvj,vkとする。両方が同じ角度側にあるので、det(vi,vj)、det(vi,vk)は非負。次の式は、Lagrange恒等式の2次元版である。

(vi·vj)(vi·vk)−∥vi∥²(vj·vk)
=−det(vi,vj)det(vi,vk)≤0.

j,kは反対頂点の組だから、m²≤XijXik≤XiiXjk≤dz。□

強い不等式 m²≤z(2d−z) の証明

まず3次元のGramベクトルが全て非零で、どの2本も比例しない、すなわち対ごとに一次独立な場合を考える。既知定理によって2本を一つの座標平面へ置ける。z=dならm≤dから自明なので、z<dとする。

反対頂点の組を平面へ置ける場合:例えばv₁,v₃とする。全ベクトルをその座標平面へ射影しても非負性は保たれ、全てのサイクル内積は変わらない。各サイクル辺が必ずv₁かv₃に接しているためである。対角成分と反対頂点間の内積は増えない。射影で落とす座標は各ベクトルで非負なので、内積から引かれるのは非負数どうしの積(対角ならその平方)だからである。2次元の補題からm²≤dz≤z(2d−z)。

隣接組を平面へ置ける場合:例えばv₁,v₂とし、a=X₁₁、b=X₂₂、r=X₁₂、u=X₁₃、x=X₂₄、v=X₁₄、w=X₂₃と置く。残る2本の射影内積はP=N/Δ、Δ=ab−r²>0で、

N=buv−r(ux+wv)+awx.

射影先が非負座標平面だからP≥0。ここでm²>z(2d−z)を仮定して矛盾を出す。d≥a,b、r≥m、u,x≤z、v,w≥mから

N≤d(uv+wx)−m(ux+wv)
≤dz(v+w)−m(z²+vw)
≤m[2dz−z²−m²]<0.

第2行へ進むときはu,xをzへ増やす。偏微分はdv−mx、dw−muで、ともにm(d−z)以上。最後はv,wをmへ下げる。偏微分dz−mw、dz−mvは、仮定からdz−m²<0。従って全ての不等式の向きが保証される。P≥0と矛盾する。

比例・零ベクトルや階数低下は、Fを任意に近い正の3行行列で一般位置に摂動し、その行列のd,z,mを取って極限を送ればよい。非負性を保つ近似を選べ、集約値は連続、z≤dはCauchy–Schwarzから常に成立する。実際の集約値から、与えられた上下限への拡張は単調性による。□

もう一つの上限と、両方の達成例

∥v₁−v₂+v₃−v₄∥²≥0より、四辺の和は2(d+z)以下。従ってm≤(d+z)/2。この部分は半正定値性だけで成立する。

0≤z≤d/5:a=√(z/2)、b=√(d−z/2)、c=√(d−2z)とし、Fの3行を次のように取る。

0ab2a
2aba0
c00c

全対角はd、反対頂点間はz、三辺が2ab=√[z(2d−z)]、残る一辺がd−2zとなる。(d−z)(d−5z)≥0から残る辺も2ab以上。平方根の上限を達成する。

d/5≤z<d:対角d、反対頂点間z、四辺(d+z)/2の対称巡回行列を取る。これはsHρ、s=(d−z)/2、ρ=2z/(d−z)≥1/2。既知定理から得たHρの判定、または§6の明示非負因子によりCPランク≤3である。z=dではdJが達成する。両上限の交点はz=d/5であり、全領域で表示した最小値が達成できた。□

C. 測定誤差と、実用単位への換算

実測D̂の全成分誤差がη以下なら、c=max(0,mincycleD̂−η)、z₊=max(0,maxoppositeD̂+η)、d₊=max(0,maxdiagD̂+η)を使う。上包絡はd,zに対して非減少なので、

u=min(z₊,d₊), Ξ(d₊,z₊)=min{u(2d₊−u),(d₊+u)²/4},
c>0、c²>Ξ(d₊,z₊) ⇒ 全ての3状態以下の候補を排除。

判定器をこの最良集約式へ更新した。測定と模型の許容誤差を合わせるなら、前と同じくη=ηmeas+2hE。区間に整合する模型の排除であって、雑音の分布や実物の材料層数を推定するものではない。

既知の四角形行列H₀(対角2、四辺1、反対頂点間0)からの最大成分誤差をε<1とすると、(1−ε)²≤ε(4+ε)、従ってε≥1/6。前回の代数的上界と合わせ、

1/6 ≤ D₃ < 0.196676467057347
D₃=infF∈ℝ₊3×4∥FᵀF−H₀∥max.

集約境界の達成行列は、H₀の全成分の誤差条件を満たすとは限らない。例えばε=1/6の最初の達成因子には、四辺の一つが11/6になるものがあり、許容上限7/6を超える。よってD₃=1/6を証明したわけではない。

同じ合成回路での設計値前回の保証今回の保証
係数誤差の下限0.1010205144…1/6≈0.1666667
1秒の線形ランプ、1 K加熱4.437948 mW7.321860 mW
1秒の区分二次ランプ、1 K加熱4.432179 mW7.312341 mW

s=1 J/K、λ=0.25 s⁻¹、待機0.1秒、各窓5.025725秒。4回の境界入力実験・4出力・観測区間のどこかで避けられない誤差の床である。実測や製品性能の値ではない。電気的縮尺s=1 µF、λ=250 s⁻¹、1 V入力なら、総立上り1 ms、待機0.1 ms、各窓5.025725 msへ時間も縮尺した区分二次ランプの対応値は約7.312 µA。

対角成分の尺度が大きく違う場合:既知の正規化を使う

Xの対角が正ならRij=Xij/√(XiiXjj)としてよい。正の対角合同はCPランクを保存する既知の操作である。[58] Rの対角は1だから、サイクル最小値と反対頂点間の最大値にM(1,z)を使える。

個別の区間Lij≤Xij≤Uijがあり、全てのLii>0なら、安全な集約値は次のとおり。

cR=mincycle max(0,Lij)/√(UiiUjj),
zR=min{1,maxopposite max(0,Uij)/√(LiiLjj)}.

cR>M(1,zR)ならCP3を排除できる。対角の下限が0以下のときはこの割り算を使わない。これは既知の正規化と今回の包絡の直接系で、全区間を使う最良の判定ではない。下の三数値の判定器は元の共通単位の式を使っており、この正規化を自動では行わない。

D. 特定の既存SDPを上回る、厳密な比較例

前回は、以前の簡易式よりFawzi–ParriloのSDPが強い範囲を示した。今回の強化式では比較結果が変わる。Fawzi–ParriloのarXiv:1404.3240v1の式(51)の最適値が厳密に3へ留まるのに、強化式はCPランク3以下を排除する例を得た。[41]

A=H2/5=(1/5)·circ(12,7,2,7),
τcpsos(A)=3、 m²−z(2d−z)=1/5>0.

ここでcircは最初の行を(12,7,2,7)として巡回させた4×4行列。t=3のSDP可行点を有理数で明示し、全36個の小行列式制約と16個の対角制約を検算した。半正定値制約は正の有理係数による外積和で証明し、浮動小数点ソルバーの成功表示に依存しない。通常ランク3による既知下界と合わせ、最適値が3と確定する。

有理数の可行点と半正定値性の証明

追究3の有理直交列Uを使い、g=28/5、A=U diag(g,2,2)Uᵀとする。9次元の列順座標でp=e₀₀、q₁=e₁₁、q₂=e₂₂、a=gp+2q₁+2q₂、v₁=e₀₁+e₁₀、v₂=e₀₂+e₂₀と置く。

Y=aaᵀ/3+(4/3)(q₁−q₂)(q₁−q₂)ᵀ+(2g/3)(v₁v₁ᵀ+v₂v₂ᵀ),
X=(U⊗U)Y(U⊗U)ᵀ、t=3.

Y−aaᵀ/3≥0は表示から分かる。D=diag(g,2,2)⊗diag(g,2,2)に対し、D−Yは次の外積和である。下式でw₁=e₀₁−e₁₀、w₂=e₀₂−e₂₀。

D−Y=[(gp−2q₁)(gp−2q₁)ᵀ+(gp−2q₂)(gp−2q₂)ᵀ]/3
+(g/3)(v₁v₁ᵀ+v₂v₂ᵀ)+g(w₁w₁ᵀ+w₂w₂ᵀ)
+4e₁₂e₁₂ᵀ+4e₂₁e₂₁ᵀ≥0.

残る対角制約の余裕Aij²−Xij,ijは1/25、148/75、8/75のいずれかで全て正。小行列式の36等式も全て厳密に一致する。下のコードで元の16×16変数へ戻して検算できる。□

この比較は既存の式(51)への単純な包含ではないことを示す。他の強いモーメント階層や既知の完全なCPランク3判定より優れる、という意味ではない。また、この集約式は通常ランク4の全行列を検出するわけでもなく、既存SDPを一般に置き換えるものではない。

Hρでの比較3状態以下を排除できる範囲・例
追究3の簡易式ρ<3−2√2≈0.171573
既存SDP・式(51)解析的に少なくともρ<0.309017を保証。ρ=0.4では最適値3で排除できない。
Melissen(1998)の球面配置定理からの直接判定ρ<(√3−1)/2≈0.366025 [57]
今回の強化した集約式ρ<1/2。既知の正確な境界まで到達する。

E. 古典的な回路合成論文は、どこまで照合できたか

文献今回読めた範囲具体的な比較結果
Matsumoto 1981大学公開原論文。定義・定理・証明・回路図を確認。[54]「接地」はポートの共通帰線。浮遊容量を許すため、全容量が対角という今回の条件と同一ではない。
Ali 1976大学公開学位論文、pp.6–7、式(2.1)–(2.5)。[55]正則な平方変換による境界応答の不変性。全ての物理的次数にわたる最小性は述べていない。
Kandić–Reljin 2008出版社PDFで欠けていた式(5.3)–(5.4)も確認。[48]他ポートを開放したスカラーimpedanceの合成。指定された多端子行列全体のCP最小実現とは一致しない。
Stein 1973、Matsumoto 1982、Kandić–Reljin 2009要旨・書誌を越える中心本文は依然未取得。[46] [33] [47]これらの結果との重複を確定したとは言えない。特に接地容量の個数・非最小実現は重要な未照合点。

Matsumoto(1981)の式(6b)では、容量行列は[[A+LᵀL,LᵀP],[PᵀL,PᵀP]]。回路図にも節点間の浮遊コンデンサがある。本文は十分構成条件を与え、失敗時には非最小実現を使う案も述べる。したがって「古典理論は非最小実現を考えていない」とも言えない。1981年と未読の1982年を同一の定理として扱わない。[54]

古典変換と今回のCP条件の、近さを数式で確認する

以下は原論文の主張の引用ではなく、今回の独立な比較である。単一極の目標をY(s)=D+sCB−λ²H/(s+λ)、D=K+λHと書き、H=RᵀR、n=rank Hとする。最小な抽象実現は内部行列−λI、入力λRで表せる。

Howitt変換のT=[[I,0],[L,P]]はPが正則な平方行列。容量を全て対角に制限するとPᵀL=0からL=0、PᵀPを正対角にするにはP=OS(O直交、S正対角)。境界と内部の伝導の符号条件はOᵀR≥0になる。これはrank H本で非負Gram分解できるかという既知の幾何問題と同じである。

さらにr>nへの拡大を許す非負因子の問題は、

cp-rank(H)=min{r : V∈ℝr×n, VᵀV=I, VR≥0}

と書ける。平方の座標変換と高次元への埋め込みを区別する必要がある。今回の星形構成には境界辺の非負条件も要る。これで古典枠との数学的な接続は明確になったが、未読論文が同じ最小性を既に扱うかは、この書き換えだけでは判定できない。

新しい取得候補としてRichard Adolph Steinの1968年UBC学位論文も見つかったが、本文は取得できていない。要旨が扱うimpedance・容量木の条件を、1973年のadmittance定理の代わりには使わない。[59]

F. 新規性について、今回確定したことと残ること

Hρの作り方自体も、Shaked-Monderer(2001)Example 2.1のA+ε(A1)(A1)ᵀと一致する。H₀1=4·1なのでρ=16εで同じ族になる。さらにMelissen(1998)の球面八分域への4点配置からも、最適化不要の定量的なCP3排除条件が得られる。「正成分の例」や「計算の軽い量的判定」という一般概念も独自性には数えない。[56] [57]

Melissen(1998)の既知の定量判定との対応

非負の単位球面上の4点について、最小相互距離を最大化した値は√(2−2/√3)。従ってCP3の4本の非零Gramベクトルには、正規化した内積が1/√3以上となる組がある。Hρでの最大内積は(1+ρ)/(2+ρ)なので、ρ<(√3−1)/2なら排除できる。H₀の全成分誤差箱ではε<(3√3−5)/2≈0.0980762が十分となる。これらの代入計算は今回行ったもので、原論文に同じ式が掲載されているという主張ではない。[57]

既知結果は全6組の最大相関を制約する。今回の式は四辺の最小値と反対頂点間の最大値を区別するため、同一の極値問題ではない。

現在の成果候補は、既知の認識定理から導いた鋭い三集約値の境界、その誤差区間への適用、既存SDPと分離する厳密例である。同じ明示式・同値な極値問題の先取性は未確定。既知定理への依存を明示した、有用な系として記録する。

追加査読では400初期値の局所探索で約0.196676467を再現し、それを下回る値は得られなかったと報告された。この追加計算は査読報告に基づくもので、ここで再実行した結果ではない。下界側を詰める手掛かりとして、既存の上界因子の零成分を参考に、3×4非負因子の支持パターンごとの必要条件を調べる方法が考えられる。ただし、最適因子が同じ支持を持つとは未証明であり、全成分が正の因子も含めて検討する必要がある。

次の数学的な問いは、全成分を使ったH₀からCP3までの最適距離、対角スケーリングも選びながら非一様な誤差区間を最良に判定する方法、そしてこの最良集約式に相当する既刊の幾何学的極値問題があるか。実用側は、RCアナログで校正誤差を含めても棄却余裕が残るかである。実機検証や未取得本文の照合を済ませたことにはしない。

追加査読から、Berman–Shaked-Monderer(2003)の単行本と、Bomze–Dickinson–Still(2015)を次の照合候補に加えた。前者は書誌、後者は書誌・要旨を確認した段階で、関連定理の本文照合は残る。2015年論文の主題はCPランクとCP-plusランクの位相構造などであり、今回の4×4の三集約境界と同じ明示式があると確認したわけではない。[60] [61]

証明は別担当が独立監査。SDP比較は有理演算で全制約を確認。達成因子の両枝・端点・尺度は33ケースで実装確認し、最大相対差4.45×10⁻¹⁶。数値検査は一般証明を置き換えない。文献台帳は61件で、本文確認と要旨のみを区別している。

最良集約式の達成因子・設計値の再現
"""Reproduce sharp aggregate bounds and the physical design constants.

Python standard library only. The general theorem is proved in the HTML;
these finite checks verify explicit attaining factors and implementation.
This script does not claim a global solution of the H0 approximation problem.
"""
from pathlib import Path
import json
import math


def envelope_squared(d, z):
    d = max(0.0, d)
    z = min(max(0.0, z), d)
    return min(z*(2*d-z), (d+z)**2/4)


def gram(f):
    return [[sum(row[i]*row[j] for row in f) for j in range(4)]
            for i in range(4)]


def attaining_factor(d, z):
    assert d > 0 and 0 <= z <= d
    if z <= d/5:
        a, b, c = math.sqrt(z/2), math.sqrt(d-z/2), math.sqrt(d-2*z)
        return [[0,a,b,2*a],[2*a,b,a,0],[c,0,0,c]]
    if z == d:
        return [[math.sqrt(d)]*4,[0]*4,[0]*4]
    # Scaled H_rho with rho=2z/(d-z), using the known octant rotation.
    s = (d-z)/2
    h = math.sqrt((d+z)/(d-z))
    q = math.sqrt(3/8)
    return [[math.sqrt(s)*v for v in row] for row in
            [[h/2-q,h/2+q,h/2+q,h/2-q],
             [q*h-1/4,q*h-3/4,q*h+1/4,q*h+3/4],
             [q*h+3/4,q*h+1/4,q*h-3/4,q*h-1/4]]]


def phi(x):
    return -math.expm1(-x)/x if x else 1.0


def main():
    cycles = [(0,1),(1,2),(2,3),(3,0)]
    worst = 0.0
    count = 0
    for d in [1e-6,1.0,1e6]:
        for ratio in [0,.001,.01,.05,.1,.199,.2,.201,.4,.75,1]:
            z = d*ratio
            f = attaining_factor(d,z)
            a = gram(f)
            assert min(min(row) for row in f) >= -1e-12*math.sqrt(d)
            m = min(a[i][j] for i,j in cycles)
            error = max(max(abs(a[i][i]-d) for i in range(4)),
                        abs(a[0][2]-z),abs(a[1][3]-z),
                        abs(m-math.sqrt(envelope_squared(d,z))))/d
            assert error < 5e-13
            worst = max(worst,error)
            count += 1
    lam,total_rise,tau = .25,1.,.1
    h = 1.2564312086261697/lam
    linear_a = math.exp(-lam*tau)*phi(lam*total_rise)*(-math.expm1(-lam*h))**2
    quadratic_a = math.exp(-lam*tau)*phi(lam*total_rise/2)**2*(-math.expm1(-lam*h))**2
    result = dict(
        theorem_source='Brandts-Krizek 2016 Corollary 3.6; quantitative specialization derived here',
        exact_noise_radius='1/6 (sufficient open max-entry ball; not the exact distance)',
        attaining_factor_cases=count,
        maximum_relative_factor_error=worst,
        full_matrix_distance_lower='1/6',
        full_matrix_distance_upper_strict='0.196676467057347',
        design=dict(s_J_per_K=1.,lambda_per_second=lam,total_rise_seconds=total_rise,
                    hold_seconds=tau,window_seconds=h,
                    linear_coefficient=linear_a,quadratic_coefficient=quadratic_a,
                    linear_heat_flow_floor_W_per_K=linear_a/(12*h),
                    quadratic_heat_flow_floor_W_per_K=quadratic_a/(12*h)),
        scope='Synthetic mathematical model; no laboratory measurement. Attainment concerns aggregate constraints, not all entries of the H0 error box.')
    (Path(__file__).resolve().parent/'round4-sharp-results.json').write_text(json.dumps(result,indent=2))
    print(json.dumps(result,indent=2))


if __name__ == '__main__':
    main()
既存SDPとの分離:全制約の厳密検算
"""Exact rational Eq51 primal certificate: tau_cp^sos(H_(2/5)) = 3.

No numerical optimization, no floating-point assertions. PSD constraints
are verified through explicit outer-product decompositions with positive
rational coefficients. All original 36 minor constraints are checked.
"""
from pathlib import Path
from fractions import Fraction as F
import json
import numpy as np

HERE=Path(__file__).resolve().parent
U=np.array([[1,1,1],[1,1,-1],[1,-1,-1],[1,-1,1]],dtype=object)*F(1,2)
W=np.kron(U,U)
g=F(28,5);t=F(3)
A=U@np.diag([g,F(2),F(2)])@U.T
def e(i):
    v=np.zeros((9,1),dtype=object);v[i,0]=1;return v
def outer(v):return v@v.T
p=e(0);q1=e(4);q2=e(8);a=g*p+2*q1+2*q2
Y=outer(a)/3+F(4,3)*outer(q1-q2)
for i,j in [(1,3),(2,6)]:Y+=F(2,3)*g*outer(e(i)+e(j))
X=W@Y@W.T
assert np.array_equal(A.reshape(16,1,order='F'),W@a)
schur=Y-outer(a)/3
schur_sum=F(4,3)*outer(q1-q2)
for i,j in [(1,3),(2,6)]:schur_sum+=F(2,3)*g*outer(e(i)+e(j))
assert all(z==0 for z in (schur-schur_sum).ravel())

# Congruence of a positive outer-product sum proves A tensor A - X PSD.
upper=np.diag(np.kron([g,F(2),F(2)],[g,F(2),F(2)]))
upper_sum=(outer(g*p-2*q1)+outer(g*p-2*q2))/3
for i,j in [(1,3),(2,6)]:
    upper_sum+=g/F(3)*outer(e(i)+e(j))+g*outer(e(i)-e(j))
upper_sum+=4*outer(e(5))+4*outer(e(7))
assert all(z==0 for z in (upper-Y-upper_sum).ravel())

slacks=[]
for i in range(4):
    for j in range(4):
        slack=A[i,j]**2-X[i+4*j,i+4*j]
        assert slack>=0
        slacks.append(slack)
for i in range(4):
    for k in range(i+1,4):
        for j in range(4):
            for l in range(j+1,4):
                assert X[i+4*j,k+4*l]==X[i+4*l,k+4*j]

m=F(7,5);d=F(12,5);z=F(2,5)
assert m*m>z*(2*d-z)
assert m*m<=4*z*(d-z) # Do not claim a counterexample for the old weak test.
result=dict(
    rho='2/5',t='3',A=[[str(x) for x in row] for row in A],
    U=[[str(x) for x in row] for row in U],
    Y=[[str(x) for x in row] for row in Y],
    X=[[str(x) for x in row] for row in X],
    block_psd_by_outer_product_sum=True,
    upper_psd_by_outer_product_sum=True,
    all_36_original_minor_equalities_exact=True,
    diagonal_slack_values=sorted(set(str(x) for x in slacks)),
    strong_certificate_margin=str(m*m-z*(2*d-z)),
    weak_certificate_margin=str(m*m-4*z*(d-z)),
    exact_tau='3: feasible t=3 plus Fawzi-Parrilo ordinary-rank lower bound',
    status='Exact counterexample to inclusion for the strengthened test only; old-test general inclusion remains unresolved.')
(HERE/'round4_sdp_primal_exact.json').write_text(json.dumps(result,indent=2))
print(json.dumps({k:v for k,v in result.items() if k not in ['A','U','Y','X']},indent=2))
実行結果:round4-sharp-results.json
{
  "theorem_source": "Brandts-Krizek 2016 Corollary 3.6; quantitative specialization derived here",
  "exact_noise_radius": "1/6 (sufficient open max-entry ball; not the exact distance)",
  "attaining_factor_cases": 33,
  "maximum_relative_factor_error": 4.440892098500626e-16,
  "full_matrix_distance_lower": "1/6",
  "full_matrix_distance_upper_strict": "0.196676467057347",
  "design": {
    "s_J_per_K": 1.0,
    "lambda_per_second": 0.25,
    "total_rise_seconds": 1.0,
    "hold_seconds": 0.1,
    "window_seconds": 5.025724834504679,
    "linear_coefficient": 0.44157182494271235,
    "quadratic_coefficient": 0.4409977585909775,
    "linear_heat_flow_floor_W_per_K": 0.007321859689953764,
    "quadratic_heat_flow_floor_W_per_K": 0.007312340891328713
  },
  "scope": "Synthetic mathematical model; no laboratory measurement. Attainment concerns aggregate constraints, not all entries of the H0 error box."
}
実行結果:round4_sdp_primal_exact.json
{
  "rho": "2/5",
  "t": "3",
  "A": [
    [
      "12/5",
      "7/5",
      "2/5",
      "7/5"
    ],
    [
      "7/5",
      "12/5",
      "7/5",
      "2/5"
    ],
    [
      "2/5",
      "7/5",
      "12/5",
      "7/5"
    ],
    [
      "7/5",
      "2/5",
      "7/5",
      "12/5"
    ]
  ],
  "U": [
    [
      "1/2",
      "1/2",
      "1/2"
    ],
    [
      "1/2",
      "1/2",
      "-1/2"
    ],
    [
      "1/2",
      "-1/2",
      "-1/2"
    ],
    [
      "1/2",
      "-1/2",
      "1/2"
    ]
  ],
  "Y": [
    [
      "784/75",
      "0",
      "0",
      "0",
      "56/15",
      "0",
      "0",
      "0",
      "56/15"
    ],
    [
      "0",
      "56/15",
      "0",
      "56/15",
      "0",
      "0",
      "0",
      "0",
      "0"
    ],
    [
      "0",
      "0",
      "56/15",
      "0",
      "0",
      "0",
      "56/15",
      "0",
      "0"
    ],
    [
      "0",
      "56/15",
      "0",
      "56/15",
      "0",
      "0",
      "0",
      "0",
      "0"
    ],
    [
      "56/15",
      "0",
      "0",
      "0",
      "8/3",
      "0",
      "0",
      "0",
      "0"
    ],
    [
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0"
    ],
    [
      "0",
      "0",
      "56/15",
      "0",
      "0",
      "0",
      "56/15",
      "0",
      "0"
    ],
    [
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0"
    ],
    [
      "56/15",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "0",
      "8/3"
    ]
  ],
  "X": [
    [
      "284/75",
      "154/75",
      "8/25",
      "154/75",
      "154/75",
      "48/25",
      "14/75",
      "8/25",
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "154/75",
      "8/25",
      "14/75",
      "48/25"
    ],
    [
      "154/75",
      "48/25",
      "14/75",
      "8/25",
      "48/25",
      "154/75",
      "8/25",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "8/25",
      "14/75",
      "4/75",
      "14/75"
    ],
    [
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25"
    ],
    [
      "154/75",
      "8/25",
      "14/75",
      "48/25",
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25",
      "48/25",
      "14/75",
      "8/25",
      "154/75"
    ],
    [
      "154/75",
      "48/25",
      "14/75",
      "8/25",
      "48/25",
      "154/75",
      "8/25",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "8/25",
      "14/75",
      "4/75",
      "14/75"
    ],
    [
      "48/25",
      "154/75",
      "8/25",
      "14/75",
      "154/75",
      "284/75",
      "154/75",
      "8/25",
      "8/25",
      "154/75",
      "48/25",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75"
    ],
    [
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "8/25",
      "154/75",
      "48/25",
      "14/75",
      "14/75",
      "48/25",
      "154/75",
      "8/25",
      "4/75",
      "14/75",
      "8/25",
      "14/75"
    ],
    [
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25"
    ],
    [
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25"
    ],
    [
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "8/25",
      "154/75",
      "48/25",
      "14/75",
      "14/75",
      "48/25",
      "154/75",
      "8/25",
      "4/75",
      "14/75",
      "8/25",
      "14/75"
    ],
    [
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "48/25",
      "154/75",
      "8/25",
      "8/25",
      "154/75",
      "284/75",
      "154/75",
      "14/75",
      "8/25",
      "154/75",
      "48/25"
    ],
    [
      "14/75",
      "4/75",
      "14/75",
      "8/25",
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "8/25",
      "154/75",
      "48/25",
      "8/25",
      "14/75",
      "48/25",
      "154/75"
    ],
    [
      "154/75",
      "8/25",
      "14/75",
      "48/25",
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25",
      "48/25",
      "14/75",
      "8/25",
      "154/75"
    ],
    [
      "8/25",
      "14/75",
      "4/75",
      "14/75",
      "14/75",
      "8/25",
      "14/75",
      "4/75",
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25"
    ],
    [
      "14/75",
      "4/75",
      "14/75",
      "8/25",
      "4/75",
      "14/75",
      "8/25",
      "14/75",
      "14/75",
      "8/25",
      "154/75",
      "48/25",
      "8/25",
      "14/75",
      "48/25",
      "154/75"
    ],
    [
      "48/25",
      "14/75",
      "8/25",
      "154/75",
      "14/75",
      "4/75",
      "14/75",
      "8/25",
      "8/25",
      "14/75",
      "48/25",
      "154/75",
      "154/75",
      "8/25",
      "154/75",
      "284/75"
    ]
  ],
  "block_psd_by_outer_product_sum": true,
  "upper_psd_by_outer_product_sum": true,
  "all_36_original_minor_equalities_exact": true,
  "diagonal_slack_values": [
    "1/25",
    "148/75",
    "8/75"
  ],
  "strong_certificate_margin": "1/5",
  "weak_certificate_margin": "-31/25",
  "exact_tau": "3: feasible t=3 plus Fawzi-Parrilo ordinary-rank lower bound",
  "status": "Exact counterexample to inclusion for the strengthened test only; old-test general inclusion remains unresolved."
}
B. 模型の定義と基礎の証明:熱回路、最少実現、3と4の例

3. 対象を、実際に作れる熱ネットワークへ絞る

固定した境界Bの温度uを外から指定し、その温度を保つために注入する熱流qを測る。内部Iの温度は自由に変化する。各部品は正の熱容量を持ち、部品間は非負の熱伝導率で結ぶ。

  • L:無向グラフのLaplacian。辺がなければ伝導率0。各内部連結成分は少なくとも一つの境界へつながるものとし、LIIは正定値とする。
  • CI:正の対角内部熱容量。CB:既知の対角境界熱容量。
  • 外への熱漏れはモデルに隠さない。温度浴を使うなら境界として数える。
  • 境界ラベルと温度/熱流の意味を固定。初期条件0の応答を比較する。
  • 減らす数は内部熱容量の個数。既知の境界容量はこの数に含めない。
q(s) = Y(s)u(s)
Y(s) = LBB + sCB − LBI(LII + sCI)−1LIB

sはLaplace変数。K=Y(0)は定常応答、H=Y′(0)−CBは、境界自身の熱容量を引いた低周波の記憶係数である。内部温度を境界の定常温度で表す行列Wを使うと、

W = −LII−1LIB ≥ 0, W1 = 1
H = Wᵀ CI W

となる。ここで≥0は各成分が非負という意味。M-matrixの逆行列とKron縮約は既知理論であり、この式の部品を新規と数えない。[24] [32]

完全正値ランク(cp-rank)
Hを「非負ベクトルfの外積 f fᵀ」の和に表すために必要な最少本数。H=Σ fafaᵀ, fa≥0。通常の行列ランクとは異なる。量子論の完全正値写像や、テンソルのCPランクとも別の概念である。

4. 候補命題:単一緩和極の、厳密な最少実現数

独立導出・証明点検済み既存回路理論との同値性未確定

Kを連結グラフのLaplacian、κij=−Kij(i≠j)、λ>0、CBを指定された非負対角行列とする。次の境界応答を考える。

Y(s) = K + sCB + [sλ / (s+λ)] H

このYを、上の物理クラスの熱ネットワークで厳密に実現できる必要十分条件は、

① H が完全正値  ② κij ≥ λHij (全ての i≠j)
実現可能なら、最少内部熱容量数 rmin = cp-rank(H)

λは、境界温度を指定した応答に現れる隠れ内部系の緩和率である。境界まで自由に動かした全物体の減衰率が、全てλになるという意味ではない。H=0ならrmin=0。

証明:必要性と、最少数を達成する構成

必要性

内部がr個なら H=WᵀCIW はr本の非負ベクトルの外積和。よってHは完全正値で、cp-rank(H)≤r。また、高周波極限より LBB=K+λH。LBBの非対角成分は非正なので、κij≥λHijが必要。

十分性

最少の完全正値分解 H=Σa=1r fafaᵀ をとる。零因子は除き、ta=1ᵀfa、wa=fa/ta、ca=ta²、da=λcaとする。

内部点aに容量caを置き、境界iとの伝導率をdawaiとする。内部点どうしは結ばない。境界どうしの直接伝導率はκij−λHijとする。仮定によって全て非負。

直接境界部分のLaplacianは Kdir=K−λ[diag(H1)−H]。内部点aを消去した応答は、

dadiag(wa) − [da²/(da+sca)] wawa
= da[diag(wa)−wawaᵀ] + [sλ/(s+λ)] fafa

である。総和とKdir、sCBを加えると指定Yに一致する。Kの各正辺は直接辺か内部星を通る経路として残るため、Kが連結なら構成全体も連結。r=cp-rank(H)で必要数を達成する。□

通常の線形系なら、Hの符号を制限しないGram分解を使い、有限極の動的部分をrank(H)状態で表せる。ここで数えるのは、既知の微分項sCBを除いた有限極部分の次数である。非properなY全体を無条件に「通常の3状態ODE」と呼ばない。

定常+一次低周波係数だけを合わせる場合

CBを固定すると、(K,H)の実現可能性は「Hが完全正値、かつKij=0ならHij=0」で特徴づけられ、最少数は同じcp-rank(H)。必要性は、同じ内部連結成分が二つの境界へつながると、その間に正のKron辺が生じることから従う。十分性はλを小さく選んで上の命題を適用する。

ただしλを小さくすれば記憶は遅くなる。二つの低周波係数の一致から、有限周波数帯や有限時間での精度保証は出ない。境界容量を自由に変更してよい場合も別問題となる。

5. 既知の行列を使った、物理的な「3と4」の差

次の行列の固有値は4,2,2,0。通常のランクは3、完全正値ランクは4。この行列例は、置換・定数倍を除いてBrandts–Křížek(2016)§1.2に既出である。[34]

H₀ =
2101
1210
0121
1012

4サイクルの各辺に対応する f=(1,1,0,0)ᵀ等の4本で分解できる。非負因子が二つの異なる辺を同時に担当すると、H₁₃またはH₂₄にも正の値が出てしまう。両成分は0なので、4本が必要になる。

K=4I−J(4境界間の単位伝導率完全グラフ)、λ=1/4、CB=Iとする。内部容量を各4、各内部点から対応する2境界への伝導率を各1/2、境界の直接伝導率をサイクル辺3/4・対角辺1とすれば、

Y(s) = K + sI + [s/(1+4s)] H₀

が厳密に実現される。この境界応答は数学的な3内部モードで表せるが、同じ応答を持つ非負伝導・対角容量の温度ネットワークには少なくとも4個の内部熱容量が必要。

B1B2B3B4 C=4C=4C=4C=4 内部容量は 4 個青:指定する境界温度緑:自由に変わる内部温度緑の辺の伝導率:1/2境界の外周辺:3/4境界の対角辺:1全て非負の伝導率・正の容量

Jは全成分1の行列。値は無次元化したモデル単位。3モードモデルを禁止する理由は「温度が負になるから」ではなく、任意の混合座標を、非負伝導率でつながる個別の温度節点へ戻せないからである。

2026-09-20T06:41:47.566126 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/

境界B1の温度をu₁(t)=t²e−tで変化させた数値例。緑線は4内部熱容量、丸は3つの抽象状態による境界熱流。同じYなので応答は一致する。これは3個の「物理的な熱容量」で実現できたことを意味しない。

6. ゼロ成分だけに頼らない、明示的な境界

Hρ=H₀+ρJ(ρ≥0)を考える。全てのρでrank(Hρ)=3。ρ>0では全成分が正になる。この族を独立に計算・証明したところ、

cp-rank(Hρ) = 4 (0 ≤ ρ < 1/2)
cp-rank(Hρ) = 3 (ρ ≥ 1/2)

という境界を得た。追究3の照合で、Brandts–Křížek(2016)のCorollary 3.6と式(6)から直接得られると確認した。新規結果には数えない。既知定理への代入を上に、独立に得た証明を下に記す。物理系の相転移を主張しているわけでもない。K=4I−J、λ=1/4を固定した熱回路の実現には、さらにρ≤3が必要である。

ρ = 0.25通常ランク:3最少内部熱容量:4

この操作は証明済みの式を表示するもの。最適化ソルバーでCP-rankを推定しているのではない。

閾値1/2の証明

h=√(1+ρ)とし、Rの列を(h,1,0), (h,0,1), (h,−1,0), (h,0,−1)とするとRᵀR=Hρ。3行の非負Gram因子が存在することは、ある3×3直交行列QでQR≥0となることと同値。

Qの第j行を(aj,bj,cj)と書くと、h aj≥max(|bj|,|cj|)。aj>0なので、uj=(bj,cj)/(h aj)は正方形[−1,1]²に入る。直交性より、異なるj,kでuj·uk=−1/(1+ρ)。

正方形の補題

[−1,1]²内の3点には、内積が−2/3以上の組が必ずある。全組が−2/3未満と仮定する。微小摂動で軸上の点を除き、正方形の対称性を用いてA=(−a,b), B=(−c,−d), C=(e,f)、各成分0〜1と書ける。同じ象限の二点は非負内積なので、三点は異なる象限にある。d,eを1へ増やすと、どの内積も増えない。

仮定からb−ac>2/3、a−bf>2/3、c+f>2/3。一方a,b>2/3であり、

c+f < (b−2/3)/a + (a−2/3)/b ≤ 2/3

となって矛盾する。最後の不等式は、3a²+3b²−2ab−2a−2b≤0と同値。この凸二次式は[2/3,1]²の頂点で最大を取り、頂点値は−8/9,−1/3,−1/3,0。

従って1/(1+ρ)≤2/3、すなわちρ≥1/2が必要。達成にはq=√(3/8)としてQの行を(1/2,−q,q), (q,−1/4,−3/4), (q,3/4,1/4)と取る。Qは直交行列で、ρ=1/2のときQRの行は(0,√(3/2),√(3/2),0), (1/2,0,1,3/2), (3/2,1,0,1/2)。全て非負。ρを増やしても全成分は減らない。

4行の非負因子は全ρで存在する。H₀の辺因子を行に並べた行列をF₀とし、α=(√(1+ρ)−1)/2とすれば、Fρ=F₀+αJに対してFρᵀFρ=Hρ。以上で最少数が決まる。□

C. 研究の履歴:カオスからの出発、旧下限、測定の証明と訂正

探索過程を残すための記録です。旧下限0.049、0.097、0.101などは、最新の1/6へ改善されています。各節の新規性判断も最新の照合を優先してください。節番号は元の研究記録に対応します。

1. カオス理論とは、どこでつながるか

粗視化は、多数の変数を少数へ置き換える操作。カオスは、決定論的な運動が初期値に敏感になる性質である。両者は接点があるが同じものではない。カオスのない線形熱伝導でも、内部を消せば記憶が残る。

ẋ = −Ax + Bz + f, ż = Bᵀx − Dz
⇒ ẋ(t) = −Ax(t) + ∫₀ᵗ B e−D(t−s)Bᵀ x(s) ds + B e−Dtz(0) + f(t)

x は残す変数、z は消す変数。消去は厳密でも、過去の x と初期の z の影響が残る。これを短い履歴・少数の補助状態・雑音などで近似するのが記憶を扱う粗視化である。Mori–Zwanzig は、この発想を非線形・確率系へ広げる枠組みの一つ。[1] [3]

保証したいもの意味別物として扱う理由
短時間の軌道温度・位置・速度が同じ時刻に近いカオスでは誤差が増幅しうる。
一時刻の分布・長時間平均平均、分散、滞在頻度など軌道が異なっても一致する場合がある。
二時刻相関・閾値到達記憶の長さ、過熱のタイミングなど一時刻分布が合うだけでは保証されない。

カオスから確率モデルへの極限や、乱流の記憶モデルには先行研究がある。今回は線形で証明を追える土台から始めた。以下の命題は、非線形カオス系の予測保証を証明したものではない。[5] [7] [8] [9]

2. 先行研究によって候補から外した一般論

当初の切り口既にあるもの残すなら必要な差分
指数和で記憶を短縮Gaussian求積・Prony・有理近似、正値性と収束 [10–13]特定の物理構造を保つ最小数や最適性。
有限時間の誤差保証MZ近似、時間制限付きBT、非零初期値 [3] [29] [39–40]既存の一般上界より鋭く、観測から計算できる条件。
受動性・物理性を保存受動RC、正実補題、グラフ集約 [12] [26–28]受動性と「対角熱容量+非負の辺」の区別。
FDTを守って雑音も変更FDT保持の実現法と、二つの核を変える一般SVE誤差 [10] [17–22]摩擦核だけから雑音因子と動的誤差まで結ぶ鋭い保証。
スカラーの上下界を行列へ作用素凸性、block求積、resolventの順序 [14–16]成分別順序・半正定値順序・時間域を区別した条件。

特に、Lang–LuはFDT整合雑音の変更を将来課題としているが、一般SVEの研究はドリフト核・雑音フィルタの同時近似を既に扱う。「ある論文が未解決と書いている」だけを、分野全体の空白と見なさなかった。[20] [22]

当初の文献台帳には主要59件を掲載した。追加査読の候補2件を加えた現在の台帳は61件である。「本文確認」は関連箇所を読んだことを指し、論文全体の全証明の独立検証を意味しない。要旨のみの文献を本文確認済みとして数えていない。

証明草案を収録・独立監査学術的新規性は未確定

測定から、これ以上小さくできない物理模型を見分ける

追究4を追加:原論文照合から強化式を証明。誤差下限1/6、最良集約境界、既存SDPと分離する有理数例。今回の調査結果へ

同じ外部応答を、何個の「本物の熱容量」で再現できるか。単なる数式の状態数と、正の熱容量・非負の熱伝導率だけで作る物理模型の状態数は一致しないことがある。この差を、特定の熱ネットワーク群について厳密に特徴づける命題を導いた。

最少数物理的な隠れ節点数を完全正値ランクで表す。
3 → 4数学的な3状態実現に、4個の内部熱容量が必要な例。
誤差の床3個以下では、指定した有限時間の熱流応答にも誤差の床が残る。

「新しい粗視化手法」だけでなく、どの簡略化が原理的に不可能かを明示する方向である。熱モデル・受動回路・物理シミュレーションの設計時に、達成できない次数を目標にして探索を続ける無駄を避ける用途が考えられる。

新規性の結論:既知の幾何学的判定定理から、三つの集約値に対して最良の不等式を導出し、測定誤差と物理的な応答誤差へ適用した。特定の既存SDPでは判定できない厳密例も得た。式そのものの先取性は未確定で、古典回路合成の重要な本文比較も残る。最新の証明と照合結果
追究3 · 文献照合と量的改善新規性を確定した定理は、まだない

既存理論との差を調べ、実測に使う不等式を磨く

この節は追究3の時点の記録。追究4で未証明の強化式を証明し、距離下限は1/6へ改善。以前の簡易式とSDPの比較はそのまま有効だが、新しい式は既存SDPを上回る例も持つ。以下の「未証明」「まだ未達成」は、その時点を示す。

今回の重点は、関連する論文の定理・仮定を照合し、既存の判定法と同じ行列で比較することだった。結論は、広い原理や正確な状態数の境界は既知理論に含まれる。残る候補は、計算の軽い誤差区間の判定式と具体的な測定手順である。同じ式の既刊での使用までは確定できず、「新発見」とは認定しない。

帰属を修正ρ=1/2の境界は2016年の既知定理から直接導ける。
0.1010…3状態以下との距離下限を改善。上界も有理演算で認証。
波形を設計有限の立上りで、全状態数について非負因子分解を保つ。

A. 新規性の判定を更新する

主張照合した先行研究現時点の判定
正の素子だけで作ると状態数が増える正値実現の古典理論・survey [35] [43]既知。一般現象を新規性に数えない。
誤差があっても低次数模型を排除するFawzi–Parriloの近似非負ランク下界、Theorem 3 [44]定量的な頑健性の原理も既知。
HρのCPランクがρ=1/2で変わるBrandts–Křížek、Corollary 3.6と式(6) [34]既知定理の直接系と確認。下記に代入を記す。
二窓の非負Gram分解正Hankel核を同じ非負フィルタで両側から積分 [35] [43]既存の構造からの直接的な導出。新しい基本原理とは呼ばない。
単一極の最少内部容量数接地容量を使う多端子RC合成:Stein 1973、Matsumoto 1982、Kandić–Reljin 2009 [46] [33] [47]自足的証明はあるが、重要な原論文本文が未読。独立の新定理とは認定できない。
下記の簡単な不等式・誤差区間への適用既存のCPランクSDPと直接比較 [41] [45]独立に導出・監査済み。式そのものの先取性、既存SDPから一般に導けるかは未確定。

特にStein(1973)の要旨は、全容量の一端を接地した多端子回路と容量個数の最小化を明示している。「抽象状態数より容量個数が多いから古典理論の対象外」という切り分けはできない。本文未読のため、その最小性の範囲や今回の単一極条件との同値性は未判断である。[46]

ρ=1/2を既知の判定定理に代入して得る

h²=1+ρとし、v₁=(h,1,0)、v₂=(h,0,1)、v₃=(h,−1,0)、v₄=(h,0,−1)と置く。Gram行列はHρ。Brandts–KřížekのCorollary 3.6は、この4ベクトルを非負の八分空間へ回転できるなら、その中の2本が一つの座標平面上にある配置を選べるとする。式(6)により、その平面の法線gは、成分ごとにVᵀV≥VᵀggᵀV≥0を満たす必要十分条件で判定できる。[34]

隣接する組v₁,v₂に対しg=(1,−h,−h)/√(1+2h²)。残りの組の射影内積は

v₃ᵀ(I−ggᵀ)v₄ = h²(2h²−3)/(1+2h²).

これが非負なのはρ≥1/2。他の隣接組も対称性により同じで、反対頂点の組を座標平面へ置く場合には残り二本のg方向成分の符号が逆になり、式(6)が失敗する。全6組を尽くすので、既知定理から正確な閾値が出る。§6の独立な正方形の証明も正しいが、この閾値を新規発見には数えない。

B. 改善した、最適化を解かない判定式

X=FᵀF、F≥0、Fの行数≤3とする。d=max対角成分、z=max(X₁₃,X₂₄)、m=min(X₁₂,X₂₃,X₃₄,X₄₁)と置く。次が必要である。

m² ≤ Ψ(d,z), Ψ(d,z)=4u(d−u), u=min(z,d/2).

z≤d/2ならm²≤4z(d−z)。前回の4zdより強い。z≥d/2ならΨ=d²となり、通常のCauchy–Schwarzの評価に接続する。これは3行非負因子の条件であり、一般の半正定値行列だけでは保証されない。

支持の選び方と対角成分の予算を使う証明

Fの各行を(a,b,c,d₀)と書く。{a,c}の大きい方と{b,d₀}の大きい方を選ぶとサイクルの一辺が定まる。3行以下なので選ばれない辺があり、添字を変えて12とする。全行でa≤cまたはb≤d₀。I={a≤c}、J=その補集合とすると、Jではb≤d₀である。

x=ΣIa²≤X₁₃≤z、y=ΣJb²≤X₂₄≤z。残りの対角予算とCauchy–Schwarzから

X₁₂ ≤ √[x(d−y)] + √[y(d−x)].

右辺はx+y≤dの範囲で各変数について非減少。実際、微分の符号は(d−x)(d−y)−xy=d(d−x−y)で決まり、境界は連続性で処理できる。z≤d/2ならx,yをzに上げて、X₁₂≤2√[z(d−z)]。m≤X₁₂で主張を得る。z≥d/2では全ての辺がd以下なのでm²≤d²。□

測定値D̂の全成分の誤差幅がηなら、c=max(0,mincycleij−η)、z₊=max(0,maxoppositeij+η)、d₊=max(0,maxdiagii+η)とする。Ψはd,zの双方について非減少なので、

c>0 かつ c²>Ψ(d₊,z₊) ⇒ 区間内の全ての3状態以下の模型を排除。

許容したい応答誤差Eも含めるには、η=ηmeas+2hEを使う。誤差込み判定器はこの改善式へ更新した。不成立は判定保留であり、3状態で十分とは言えない。

C. 近似できない距離を、上下から厳密に挟む

D₃ := infF∈ℝ₊3×4 ∥FᵀF−H₀∥max
5−2√6 ≈ 0.1010205144 ≤ D₃ ≤ e < 0.196676467057347.

下界は、誤差ε<1ならm≥1−ε、z≤ε、d≤2+εを上の式へ入れ、(1−ε)²≤8εを解けば得られる。ε≥1は自明。上界は単なる局所最適化の出力から進み、明示した非負因子を有理数の区間演算で認証した。最適距離の決定や、上界の大域最適性は未達成である。

代数的な上界:明示因子と全成分の検算

eをP(s)=2−11s+3s²−2s³+42s⁴−4s⁶の根で、0.196676467057346<e<0.196676467057347にあるものとする。両端での符号は整数演算で反転を確認し、0≤s≤1/5でP′(s)≤−1057/125<0だから根は一意。p=1−e、q=1+e、L=2−e、U=2+eとする。

x=(1−e)(1−2e²)/[2(1+e+e²)], y=e(1−2e²)/(1−4e).
√(L−x)00√(L−y)
√xp/√xe/√x0
0e/√yq/√y√y

この3×4行列をFとする。x,y,L−x,L−yは厳密区間で正。恒等式ep/x+eq/y=p、p²/x+e²/y=U、および(L−x)(L−y)−q²=P(e)/[(1+e+e²)(1−4e)]=0から、

FᵀF = [[L,p,e,q], [p,U,p,e], [e,p,d₃,q], [q,e,q,L]],
d₃=e²/x+q²/y ∈ (1.812198069900,1.812198069901).

L<d₃<Uも有理区間で確認できる。従って全成分の誤差はe以下で、最初の対角などはちょうどe。距離の上界が証明できた。下のコードは標準Pythonのみで符号・多項式恒等式・全区間を検算する。

この因子から§4の星形回路を構成できる。λ=1/4、Kの境界間辺重みを1にした例では、直接辺の必要条件も満たす。ただし、この係数近似の上界をそのまま全ての入出力ノルムの上界と呼ぶことはしない。

D. 既存の半正定値計画法と、同じ行列で比較する

Fawzi–ParriloのCPランク下界τcpsos(式51)を実装し、Hρ=H₀+ρJで比較した。ソルバーの浮動小数点出力だけに依存せず、その既存制約から今回、次の下界を導出した。[41]

τcpsos(Hρ) ≥ max{3, (4+4ρ+2ρ²)/(1+2ρ+2ρ²)}.
方法3状態以下を確実に排除できるρの範囲この比較から分かること
前回の簡易式 m²>4zd0≤ρ<0.154700538…最適化不要。今回改善。
今回の簡易式 m²>Ψ(d,z)0≤ρ<3−2√2≈0.171572875誤差区間へ直接適用できる。
既存SDPからの厳密下界少なくとも0≤ρ<(√5−1)/4≈0.309016994この族では簡易式より強い。
既知のCPランク3判定定理0≤ρ<1/2この行列族の正確な境界。

例えばρ=1/4では既存SDPの下界は41/13>3であり、今回の簡易式では排除できない。従って「新しい判定式のほうが強い」という一般主張はしない。用途の候補は、少数の集約値と誤差幅から、最適化を実行せずに結果を説明できる場面である。

既存SDPからの下界の証明と厳密な双対検算

A=Hρとし、vecは列順に並べる。既存SDPは、[[t,vec(A)ᵀ],[vec(A),X]]≥0、Xij,ij≤Aij²、X≤A⊗A、Xij,kl=Xil,kj(小行列式の線形化)を課す。ここで行列間の≥は半正定値順序。これは既存式であり、以下の行列族への評価が今回の導出である。

Uの列を(1,1,1,1)/2、(1,1,−1,−1)/2、(1,−1,−1,1)/2と置く。g=4+4ρならA=U diag(g,2,2)Uᵀ。0≤X≤A⊗AからX=(U⊗U)Y(U⊗U)ᵀ、Y≥0と書ける。

3×3の座標空間でp=e₀₀、q=e₁₁+e₂₂、sab=eba−eab(ab=01,02,12)と置く。Cauchy–Binetにより、小行列式の線形化は圧縮後のYにも成立する。これらを使うと次の恒等式を得る。

S := Σdirected cycleXij,ij + 2Σdirected oppositeXij,ij
= pᵀYp + qᵀYq + ΣabsabᵀYsab.

「directed」は12と21を両方数える意味で、cycleは8項、oppositeは4項。Y≥0と対角制約からpᵀYp+qᵀYq≤S≤8[(1+ρ)²+ρ²]=C。ブロック半正定値制約からg²≤t pᵀYp、16≤t qᵀYq。従ってg²+16≤tCとなり、表示した分数を得る。さらにXをA⊗Aへ増やしたブロックのSchur補完によりt≥vec(A)ᵀ(A⊗A)vec(A)=rank A=3。□

一般ρについて、この下界とSDP最適値との等号は未証明。数値計算したρ=0,0.10,0.16,0.20,0.25,0.30,0.31,0.49などでは一致したが、証明には数えない。ρ=1/4では双対行列を外積和で表し、全定常条件と目的値41/13をFractionで厳密に検算した。コードを下に収録する。

誤差区間に対する公平な比較と、残る課題

一点でのSDP下界は、誤差区間内の全行列の下界ではない。別途、|A−H₀|≤εの箱全体を保守的に緩和し、Xij,ij≤(H₀ij+ε)Aij、X≤H₀⊗A+A⊗H₀−H₀⊗H₀+16ε²Iへ置き換えた。後者はE=A−H₀についてE⊗E≤∥E∥op²I≤16ε²Iから従う。

この緩い拡張の数値下界はε=0.075で約3.0273、ε=0.10で約2.9269だった。改善簡易式はε<0.1010205を厳密に排除する。ただし、この一つの緩和より良いことは、既存SDPの最善の頑健化より良いことを意味しない。高次モーメント階層も既存研究があり、同じ誤差集合と計算費用で比較する余地が残る。[45]

Fawzi–Parriloの別の非負核ノルム下界は、無重みではH₀に対して(tr H₀)²/∥H₀∥F²=8/3に留まる。これはその特定の基準の限界であり、重み付き変種や他のSDP全体についての結論ではない。近似非負ランクへの拡張自体は同論文Theorem 3に既にある。[44]

E. 有限立上りを、全状態数へ拡張できる入力波形

前回は任意の共通単調波形について「3状態以下」を扱った。今回は入力波形を設計する。非負の確率測度νを[0,T]に取り、入力の微分をdg=ν∗νとする。立上りは時刻2Tまでに完了する。終了後τ>0から二窓を測ると、

Φ(Q)=∫₀Te−Q(T−v)ν(dv),
F=e−Qτ/2Φ(Q)AhB ≥0,
D=FᵀF、従って cp-rank(D)≤r は任意の内部状態数rで成立。
自己畳み込みを使う理由と、実装できる具体的波形

二窓差はBᵀe−Qτ[∫e−Q(2T−v)dg(v)]Ah²B。dg=ν∗νなら角括弧はΦ(Q)²になる。Qの関数は対称で可換なのでD=FᵀF。指数行列・Φ・Ah・Bは成分非負で、積Fも成分非負。□

νを[0,T]の一様分布とすれば、dgは三角形の密度になり、gは次の区分二次関数となる。

g(t)=t²/(2T²) (0≤t≤T),
g(t)=1−(2T−t)²/(2T²) (T≤t≤2T),
g(t)=1 (t≥2T).

gは連続微分可能で、開始時と終了時の傾きは0。Φ=AT/T。単一極の目標H=sH₀なら、

D*=s a H₀, a=e−λτ[(1−e−λT)/(λT)]²(1−e−λh)².

これは同じ非負フィルタでHankel核を両側から積分する既存構造の直接系である。この特定の温度波形・測定手順の既刊一致は未確認だが、新しい因子分解理論とは位置づけない。

合成回路の設計例(s=1 J/K、λ=0.25 s⁻¹、総立上り1秒、待機0.1秒、各窓5.025725秒)に改善定数を入れると、熱流誤差の床は線形ランプで4.437948 mW、上の区分二次ランプで4.432179 mWとなる。いずれも1 K加熱、4入力実験・4出力・観測区間のどこかで必要になる誤差である。区分二次化によるこの下界の低下は約0.13%。任意状態数の証明を維持できる点が設計上の意味を持つ。

既知のK₂,₃行列(CPランク6)にもこの入力設計を適用できるので、理想データで5状態以下を排除する議論へ進める。その6対5の雑音耐性を数値定数付きで示したわけではない。最初の実験候補は引き続き電圧指定・電流測定のRC回路。§追究2の電気的縮尺では、上の区分二次波形に対する床は約4.432 µAとなる。

熱入力→温度出力へ移すときの、状態数の数え方

Cθ̇=−Lθ+Ep、y=Eᵀθを考える。Cは正対角、Lは正定値Stieltjes、E≥0で入力と出力の重みを一致させる。Q=C−1/2LC−1/2、B=C−1/2Eなら、ステップ応答はR(t)=K−BᵀQ−1e−QtB。従って二窓を後の窓−前の窓に反転すると同じCP因子分解が成立する。

ただし、ここでのrは測定点を含む全ての動的状態数。Eが4つの異なる点を選ぶならr≥4は最初から必要で、「3状態を排除」するだけでは新しい情報にならない。また、この点入力ではBᵀBが対角であり、H₀/(s+λ)をそのまま物理的な温度応答とすることもできない。通常の半導体熱インピーダンス同定の隠れ状態数問題は、これでは解決していない。

重なりを持つ分布加熱と同じ重みの温度測定、少数ポートの時間ブロックHankel行列、ポート数を超える大きな下界が次の対象になる。Fukunaga–Funakiの実際の熱過渡同定は別の入出力・信号処理であり、今回の方法との実用性能の優劣は未評価。[50]

F. 何が、次の有意義な発見になりうるか

第一候補は「誤差を含む測定から、使える模型の最少状態数を保証する、短く説明可能な証明」である。目的は、不可能な精度・状態数の組を模型探索の前に外すこと。今の結果は、そのための小さな4境界例と検証可能な判定式まで到達している。

残る問い具体的な判定目標
簡易式は既存SDPのどこまでの系か一般の誤差箱での包含関係、保証の強さ、計算費用を比較する。単なる弱い書き換えなら、その位置づけを明記する。
3状態までの距離の正確な値0.1010205…と0.1966765…の間を詰める。支持を仮定した局所最適化を全体の証明にしない。
実測でも余裕が残るか4回の入力試験で初期化・波形一致・積分・校正の誤差を上限化し、c²−Ψが正か確認する。合成データでの成功だけでは足りない。
古典回路合成との厳密な同一性Stein 1973、Matsumoto 1982、Kandić–Reljin 2009の本文で、境界ラベル・接地容量・非最小実現・重複極・素子数の最小性を照合する。
追究3時点の予想:追究4で下界1/6を証明

CPランク≤3の4×4行列でm²≤z(2d−z)が成立するのではないか、という予想が残る。成立すればH₀との距離下界は1/6に改善する。追究3時点では一般証明がなかったが、追究4で既知幾何定理から証明した。以下は当時の部分結果を保存した記録。

z≥d/5の範囲は、∥v₁−v₂+v₃−v₄∥²≥0からm≤(d+z)/2、さらに(d−z)(d−5z)≤0により証明できる。z=0も支持の議論で成立。未解決は0<z<d/5。この範囲ではa=√(z/2)、b=√(d−z/2)、c=√(d−2z)を用いた行[0,a,b,2a]、[2a,b,a,0]、[c,0,0,c]が等号を達成する。これは達成例であって全行列の不等式の証明ではない。

この因子はH₀への距離1/6の上界も示さない。一辺の値が目標から大きく外れるためである。数値で反例が見つからなかったことも、証明には数えない。

G. 再現できる証拠と、今回の到達範囲

新しい上下界、SDP評価、全状態数の立上り設計は、導出担当とは別の担当が証明を監査した。代数的上界とρ=1/4のSDP双対は有理数演算で検算。任意状態数の波形については内部状態1〜12の48個の合成物理グラフで、直接積分とGram式を比較し、最大差2.92×10⁻¹⁶だった。これは実装確認であり、定理の証明や実機検証を置き換えるものではない。

文献台帳は53件。全件の全文を読んだわけではなく、確認範囲を各行に記録した。新しい探索では定量的な近似非負ランク、CPランクSDP・モーメント階層、有限入力での実現、熱過渡同定、1970年代以降の接地容量回路合成を重点的に追った。2026年の非負ランク下界の計算研究も確認した。[53] 新規性はこの調査範囲に対しても未確定である。

代数的上界の厳密検算 — 標準Pythonのみ
"""Exact rational certificate for a CP-rank <= 3 approximation of C4.

Python standard library only. No numerical optimizer or floating-point decision
is used. The decimal display is obtained by outward rational rounding.
"""
from dataclasses import dataclass
from fractions import Fraction as Q
import json
from pathlib import Path


@dataclass(frozen=True)
class Interval:
    lo: Q
    hi: Q

    def __init__(self, lo, hi=None):
        object.__setattr__(self, 'lo', Q(lo))
        object.__setattr__(self, 'hi', Q(lo if hi is None else hi))
        assert self.lo <= self.hi

    @staticmethod
    def cast(x):
        return x if isinstance(x, Interval) else Interval(x)

    def __add__(self, other):
        other = self.cast(other)
        return Interval(self.lo + other.lo, self.hi + other.hi)

    __radd__ = __add__

    def __neg__(self):
        return Interval(-self.hi, -self.lo)

    def __sub__(self, other):
        return self + -self.cast(other)

    def __rsub__(self, other):
        return self.cast(other) + -self

    def __mul__(self, other):
        other = self.cast(other)
        ends = [self.lo * other.lo, self.lo * other.hi,
                self.hi * other.lo, self.hi * other.hi]
        return Interval(min(ends), max(ends))

    __rmul__ = __mul__

    def reciprocal(self):
        assert self.lo > 0 or self.hi < 0, 'Division interval contains zero'
        return Interval(1 / self.hi, 1 / self.lo)

    def __truediv__(self, other):
        return self * self.cast(other).reciprocal()

    def __rtruediv__(self, other):
        return self.cast(other) / self

    def __pow__(self, n):
        assert isinstance(n, int) and n >= 0
        out = Interval(1)
        for _ in range(n):
            out = out * self
        return out

    def decimal_enclosure(self, digits=12):
        # Floor lower endpoint; ceil upper endpoint, using integer arithmetic.
        scale = 10 ** digits
        lower = (self.lo.numerator * scale) // self.lo.denominator
        upper = -((-self.hi.numerator * scale) // self.hi.denominator)
        def render(n):
            sign = '-' if n < 0 else ''
            whole, frac = divmod(abs(n), scale)
            return f'{sign}{whole}.{frac:0{digits}d}'
        return [render(lower), render(upper)]


def poly(x):
    return 2 - 11*x + 3*x*x - 2*x**3 + 42*x**4 - 4*x**6


def polynomial_product(a, b):
    out = [Q(0)] * (len(a) + len(b) - 1)
    for i, x in enumerate(a):
        for j, y in enumerate(b):
            out[i+j] += x*y
    return out


def polynomial_subtract(a, b):
    size = max(len(a), len(b))
    return [(a[i] if i < len(a) else 0) -
            (b[i] if i < len(b) else 0) for i in range(size)]


def main():
    # Root isolation: decimal endpoints have denominator 10^15.
    lo = Q(196676467057346, 10**15)
    hi = Q(196676467057347, 10**15)
    assert poly(lo) > 0 and poly(hi) < 0
    assert 0 < lo < hi < Q(1, 5)
    # P'(s) <= -11 + 6/5 + 168/125 = -1057/125 < 0
    # for 0 <= s <= 1/5, since the other derivative terms are nonpositive.
    derivative_upper = -11 + Q(6, 5) + Q(168, 125)
    assert derivative_upper == -Q(1057, 125)

    e = Interval(lo, hi)
    p, q, L, U = 1-e, 1+e, 2-e, 2+e
    x = p * (1-2*e**2) / (2*(1+e+e**2))
    y = e * (1-2*e**2) / (1-4*e)
    d = e**2/x + q**2/y
    quantities = {'e': e, 'p': p, 'q': q, 'L': L, 'U': U,
                  'x': x, 'y': y, 'L-x': L-x, 'L-y': L-y,
                  'd': d, 'd-L': d-L, 'U-d': U-d}
    for name in ['p', 'q', 'L', 'U', 'x', 'y', 'L-x', 'L-y', 'd-L', 'U-d']:
        assert quantities[name].lo > 0, name

    # Exact coefficient check of (L-x)(L-y)-q^2 = P(e)/denominator.
    # Numerator is 2P; denominator is 2(1+e+e^2)(1-4e).
    numerator = polynomial_subtract(
        polynomial_product([3, 3, 4, -4], [2, -10, 4, 2]),
        polynomial_product(polynomial_product([2, 2, 2], [1, -4]), [1, 2, 1]))
    assert numerator == [4, -22, 6, -4, 84, 0, -8]

    # Exact coefficient checks of off-diagonal and diagonal identities.
    # ep/x+eq/y = p follows after multiplying by (1-2e^2).
    # Check the simpler displayed identity:
    # 2e(1+e+e^2) + (1+e)(1-4e) = (1-e)(1-2e^2).
    assert polynomial_subtract(
        polynomial_subtract([0, 2, 2, 2],
                            [-v for v in polynomial_product([1, 1], [1, -4])]),
        polynomial_product([1, -1], [1, 0, -2])) == [0, 0, 0, 0]
    # p^2/x+e^2/y = U:
    # 2(1-e)(1+e+e^2)+e(1-4e) = (2+e)(1-2e^2).
    assert polynomial_subtract(
        polynomial_subtract(polynomial_product([2, -2], [1, 1, 1]), [0, -1, 4]),
        polynomial_product([2, 1], [1, 0, -2])) == [0, 0, 0, 0]

    result = {
        'status': 'All assertions passed using exact rational arithmetic.',
        'polynomial_ascending_coefficients': [2, -11, 3, -2, 42, 0, -4],
        'root_interval': [str(lo), str(hi)],
        'P_root_lower_sign': 1,
        'P_root_upper_sign': -1,
        'derivative_upper_on_zero_to_one_fifth': str(derivative_upper),
        'outward_decimal_enclosures': {k: v.decimal_enclosure() for k, v in quantities.items()},
    }
    output = Path(__file__).with_name('cp3-algebraic-certificate.json')
    output.write_text(json.dumps(result, indent=2) + '\n')
    print(json.dumps(result, indent=2))


if __name__ == '__main__':
    main()
既存SDPとの厳密比較 — FractionとNumPy
"""Exact rational checks for the Fawzi--Parrilo H_rho lower bound.

No SDP solver and no floating-point arithmetic in the assertions below.
The accompanying notes give the proof for all rho >= 0; this file checks
the coefficient identity, a rational dual certificate at rho=1/4, and a
separate explicit feasible CP3 upper comparator for distance to H0.
Requires only Python and numpy (arrays are dtype=object, Fraction entries).
"""
from fractions import Fraction as F
from pathlib import Path
import json
import numpy as np

HERE=Path(__file__).resolve().parent
U=np.array([[1,1,1],[1,1,-1],[1,-1,-1],[1,-1,1]],dtype=object)*F(1,2)
W=np.kron(U,U)
assert np.array_equal(U.T@U,np.eye(3,dtype=object))

def unit(i,n=9):
    e=np.zeros((n,1),dtype=object);e[i,0]=1;return e

def minor_matrix(n,i,k,j,l):
    """trace(E X) = X_(ij,kl) - X_(il,kj), column-major pairs."""
    E=np.zeros((n*n,n*n),dtype=object)
    for a,b,c in [(i+n*j,k+n*l,F(1,2)),(i+n*l,k+n*j,F(-1,2))]:
        E[a,b]+=c;E[b,a]+=c
    return E

# D0 weights directed cycle entries by 1 and directed opposite entries by 2.
D0=np.zeros((16,16),dtype=object)
for i in range(4):
    for j in range(4):
        D0[i+4*j,i+4*j]=0 if i==j else 2 if (i-j)%4==2 else 1
p=unit(0);q=unit(4)+unit(8)
skew=[unit(i)-unit(j) for i,j in [(1,3),(2,6),(5,7)]]
M0=p@p.T+q@q.T+sum((u@u.T for u in skew),np.zeros((9,9),dtype=object))
# The discrepancy consists of three compressed principal-minor equations.
identity=W.T@D0@W-M0+minor_matrix(3,0,1,0,1)+minor_matrix(3,0,2,0,2)+2*minor_matrix(3,1,2,1,2)
assert all(x==0 for x in identity.ravel())

# Explicit rational dual at rho=1/4. The upper-PSD multiplier is zero;
# that constraint is used first to justify exact facial reduction.
rho=F(1,4);g=4+4*rho;C=8*((1+rho)**2+rho**2)
v=(g*p+4*q)/C
k=(g*g+16)/(C*C)
M=k*M0
w=4*p-g*q
# Block dual [[1,-v^T],[-v,M]] is PSD from this explicit outer-product sum.
res=M-v@v.T-(w@w.T)/(C*C)-k*sum((u@u.T for u in skew),np.zeros((9,9),dtype=object))
assert all(x==0 for x in res.ravel())

# Multipliers for Eq51 minor equations, in exactly the loop order below.
mult=[3,1,-2,2,-1,1,1,2,1,1,0,-1,-2,1,3,-1,1,-2,
      2,1,-1,3,1,2,-1,0,1,1,2,1,1,-1,-2,2,1,3]
stationarity=W.T@(k*D0)@W-M
z=0
for i in range(4):
    for kk in range(i+1,4):
        for j in range(4):
            for l in range(j+1,4):
                stationarity+=(k*F(mult[z],4))*(W.T@minor_matrix(4,i,kk,j,l)@W)
                z+=1
assert all(x==0 for x in stationarity.ravel())
a=g*p+2*q
dual_value=2*(v.T@a)[0,0]-k*C
assert dual_value==F(41,13)>3

results=dict(
    coefficient_identity_exact=True,
    dual_stationarity_exact=True,
    dual_psd_by_explicit_outer_product_sum=True,
    rho=str(rho),
    proved_lower_bound=str(dual_value),
    general_proved_lower_bound='max(3,(4+4*rho+2*rho**2)/(1+2*rho+2*rho**2)) for rho>=0',
    general_equality_to_SDP_optimum_proven=False,
    original_minor_multipliers_in_units_k_over_4=mult)

# Existing local fit, rounded to an exact decimal nonnegative factor.
G=[['1.22610739','0','0','0.97599645'],
   ['0.54770813','1.46670004','0.35908992','0'],
   ['0','0.21323097','1.29740221','0.92236352']]
Gr=np.array([[F(x) for x in row] for row in G],dtype=object)
H0=np.array([[2,1,0,1],[1,2,1,0],[0,1,2,1],[1,0,1,2]],dtype=object)
error=max(abs(x) for x in (Gr.T@Gr-H0).ravel())
assert error==F(196676472519291,10**15)<F('0.19667648')
results['explicit_cp3_upper_factor_decimal']=G
results['explicit_cp3_upper_error_exact']=str(error)
results['explicit_cp3_upper_is_global_optimum']=False
(HERE/'round3_sdp_exact_certificate.json').write_text(json.dumps(results,indent=2))
print(json.dumps(results,indent=2))
全状態数の有限立上り — NumPyとSciPyによる実装確認
"""Verify self-convolution heating and the improved CP3 certificate.
No external datasets. NumPy + SciPy; fixed random seed. Numerical checks
support implementation only; exact proofs are in the accompanying HTML.
"""
from pathlib import Path
import json
import numpy as np
from numpy.polynomial.legendre import leggauss
from scipy.linalg import expm
from scipy.optimize import brentq

HERE=Path(__file__).resolve().parent
rng=np.random.default_rng(202609203)
gx,gw=leggauss(28)
def quad(a,b):return (a+b)/2+(b-a)*gx/2,(b-a)*gw/2
def mf(V,values):return (V*values)@V.T
def triangular_rate(t,T):return np.where(t<T,t,2*T-t)/T**2

err_ramp=err_power=err_gram=err_heatrows=0.; min_factor=1.
for r in range(1,13):
    for rep in range(4):
        n=5
        w=rng.uniform(0,.5,(r,r));w=(w+w.T)/2;np.fill_diagonal(w,0)
        B=rng.uniform(.05,.7,(r,n))
        Q=np.diag(w.sum(1)+B.sum(1))-w
        direct=rng.uniform(0,.5,(n,n));direct=(direct+direct.T)/2;np.fill_diagonal(direct,0)
        direct=np.diag(direct.sum(1))-direct
        Lbb=direct+np.diag(B.sum(0));K=Lbb-B.T@np.linalg.solve(Q,B)
        err_heatrows=max(err_heatrows,float(np.max(abs(K.sum(1)))))
        ev,V=np.linalg.eigh(Q)
        T=float(rng.uniform(.1,.7));h=float(rng.uniform(.1,.9));tau=float(rng.uniform(.05,.8))
        tm1,wm1=quad(0,T);tm2,wm2=quad(T,2*T)
        ts=np.r_[tm1,tm2];mu=np.r_[wm1,wm2]*triangular_rate(ts,T)
        win1,ww=quad(2*T+tau,2*T+tau+h)
        win2,_=quad(2*T+tau+h,2*T+tau+2*h)
        def residual(t):
            spectral=np.sum(mu[:,None]*np.exp(-(t-ts[:,None])*ev[None,:]),axis=0)/ev
            return B.T@mf(V,spectral)@B
        D=sum(weight*((K+residual(a))-(K+residual(b))) for weight,a,b in zip(ww,win1,win2))
        Ah=mf(V,-np.expm1(-ev*h)/ev);AT=mf(V,-np.expm1(-ev*T)/(ev*T))
        F=expm(-Q*tau/2)@AT@Ah@B
        target=B.T@mf(V,np.exp(-ev*tau)*(-np.expm1(-ev*T)/(ev*T))**2*(-np.expm1(-ev*h)/ev)**2)@B
        err_ramp=max(err_ramp,float(np.max(abs(D-target))))
        err_gram=max(err_gram,float(np.max(abs(F.T@F-target))))
        min_factor=min(min_factor,float(F.min()))
        # The same Q is a grounded conductance matrix for a power-driven system.
        # B is now an overlapping nonnegative spatial input, with matched B.T readout.
        Kp=B.T@np.linalg.solve(Q,B)
        Dp=sum(weight*((Kp-residual(b))-(Kp-residual(a))) for weight,a,b in zip(ww,win1,win2))
        err_power=max(err_power,float(np.max(abs(Dp-target))))

def bound(d,z):
    zz=min(z,d/2)
    return 4*zz*(d-zz)
violations=0;worst=-float('inf')
for _ in range(3000):
    F=rng.exponential(1,(3,4));F[rng.random((3,4))<.3]=0
    H=F.T@F;m=min(H[0,1],H[1,2],H[2,3],H[3,0]);z=max(H[0,2],H[1,3]);d=max(H.diagonal())
    margin=m*m-bound(d,z)
    worst=max(worst,float(margin))
    violations+=margin>1e-10
assert not violations
delta=5-2*np.sqrt(6)
lam=.25;total_rise=1.;T=total_rise/2;tau=.1
x=brentq(lambda x:np.exp(x)-2*x-1,.1,3);h=x/lam
linear_a=np.exp(-lam*tau)*(-np.expm1(-lam*total_rise)/(lam*total_rise))*(-np.expm1(-lam*h))**2
smooth_a=np.exp(-lam*tau)*(-np.expm1(-lam*T)/(lam*T))**2*(-np.expm1(-lam*h))**2
result=dict(seed=202609203,physical_graphs=48,hidden_counts=list(range(1,13)),
            max_triangular_ramp_window_error=err_ramp,max_gram_error=err_gram,
            min_factor_entry=min_factor,max_power_input_window_error=err_power,
            max_kron_rowsum_error=err_heatrows,cp3_factor_checks=3000,
            cp3_inequality_violations=int(violations),max_cp3_inequality_margin=worst,
            improved_delta=delta,uniform_rho_threshold=3-2*np.sqrt(2),
            design=dict(lam=lam,total_rise=total_rise,tau=tau,h=h,
                linear_ramp_coefficient=linear_a,linear_ramp_error_floor=delta*linear_a/(2*h),
                quadratic_ramp_coefficient=smooth_a,quadratic_ramp_error_floor=delta*smooth_a/(2*h)),
            scope='Synthetic numerical checks; no experimental measurement or optimality claim.')
assert max(err_ramp,err_gram,err_power,err_heatrows)<1e-10
(HERE/'round3-protocol-results.json').write_text(json.dumps(result,indent=2))
print(json.dumps(result,indent=2))
既存SDPの数値比較 — CVXPY、Clarabel、SCS
"""Numerical cp-rank lower-bound comparisons; no floating-point output is a proof.

Fawzi--Parrilo (2014), arXiv:1404.3240v1, section 4, equation (51).
Optional conservative robust entry-box relaxation is derived in accompanying notes.
Requires Python, numpy, cvxpy and Clarabel/SCS. Tested cvxpy 1.9.3.
"""
from pathlib import Path
import sys, json, math, time
HERE=Path(__file__).resolve().parent
try:
    import cvxpy as cp
except ModuleNotFoundError:
    sys.path.insert(0,str(HERE/'sdp_dependencies'))
    import cvxpy as cp
import numpy as np

F0=np.array([[1,1,0,0],[0,1,1,0],[0,0,1,1],[1,0,0,1]],float)
H0=F0.T@F0
n=4; nn=n*n

def minor_constraints(X):
    # Only i<k and j<l, exactly as in equation (51); no extra X>=0 constraint.
    return [X[i+n*j,k+n*l]==X[i+n*l,k+n*j]
            for i in range(n) for k in range(i+1,n)
            for j in range(n) for l in range(j+1,n)]

def solve_problem(problem, solver):
    started=time.time()
    if solver=='CLARABEL':
        value=problem.solve(solver=solver,tol_gap_abs=1e-9,tol_gap_rel=1e-9,
                            tol_feas=1e-9,max_iter=300)
    else:
        value=problem.solve(solver=solver,eps=2e-7,max_iters=200000)
    info=dict(value=float(value),status=problem.status,solver=solver,
              elapsed_seconds=time.time()-started,
              num_iters=problem.solver_stats.num_iters)
    extra=problem.solver_stats.extra_stats
    if isinstance(extra,dict) and 'info' in extra:
        info['solver_info']={k:float(extra['info'][k]) for k in
                             ['pobj','dobj','res_pri','res_dual','gap'] if k in extra['info']}
    return info

def tau_exact(A,solver='CLARABEL'):
    ev,U=np.linalg.eigh(A)
    assert ev.min()>-1e-9
    keep=ev>1e-9
    W=np.kron(U[:,keep],U[:,keep])
    # Facial reduction removes only the exact nullspace of A tensor A.
    Y=cp.Variable((W.shape[1],W.shape[1]),symmetric=True)
    X=W@Y@W.T
    t=cp.Variable()
    a=A.reshape(nn,1,order='F')
    ar=W.T@a
    upper=np.diag(np.kron(ev[keep],ev[keep]))
    block=cp.bmat([[cp.reshape(t,(1,1),order='F'),ar.T],[ar,Y]])
    equalities=minor_constraints(X)
    constraints=[block>>0,cp.diag(X)<=a.ravel()**2,upper-Y>>0]+equalities
    prob=cp.Problem(cp.Minimize(t),constraints)
    result=solve_problem(prob,solver)
    xv=np.asarray(X.value)
    result.update(rank=int(keep.sum()),matrix=A.tolist(),
                  primal_min_eigenvalue=float(np.linalg.eigvalsh(block.value).min()),
                  upper_slack_min_eigenvalue=float(np.linalg.eigvalsh(upper-Y.value).min()),
                  maximum_diagonal_violation=float(max(0,np.max(np.diag(xv)-a.ravel()**2))),
                  maximum_equality_residual=float(max(abs(eq.expr.value) for eq in equalities)),
                  X=xv.tolist())
    return result

def tau_robust_box(center,eps,solver='CLARABEL'):
    """Lower bound for inf{tau_sos(A): A CP, |A-center|<=eps}.

    Relaxations, all conservative for any PSD A in the box:
      diag(X)<= (center_ij+eps)*A_ij (instead of A_ij**2);
      X <= center tensor A + A tensor center - center tensor center
           + n*n*eps*eps*I (instead of A tensor A).
    The second follows since E tensor E <= ||E||op**2 I <= n*n*eps*eps I.
    Thus this is NOT an exact minimization of the pointwise Fawzi-Parrilo bound.
    """
    A=cp.Variable((n,n),symmetric=True)
    X=cp.Variable((nn,nn),symmetric=True)
    t=cp.Variable()
    a=cp.reshape(A,(nn,1),order='F')
    upper_entries=(center+eps).ravel(order='F')
    kron_upper=cp.kron(center,A)+cp.kron(A,center)-np.kron(center,center)+(n*eps)**2*np.eye(nn)
    block=cp.bmat([[cp.reshape(t,(1,1),order='F'),a.T],[a,X]])
    equalities=minor_constraints(X)
    constraints=[A>>0,A>=0,A>=center-eps,A<=center+eps,
                 block>>0,cp.diag(X)<=cp.multiply(upper_entries,cp.reshape(a,(nn,),order='F')),
                 kron_upper-X>>0]+equalities
    prob=cp.Problem(cp.Minimize(t),constraints)
    result=solve_problem(prob,solver)
    result.update(epsilon=eps,relaxation='conservative_affine_entry_box_envelope',
                  matrix_at_relaxed_optimum=A.value.tolist(),X=X.value.tolist(),
                  primal_min_eigenvalue=float(np.linalg.eigvalsh(block.value).min()),
                  upper_slack_min_eigenvalue=float(np.linalg.eigvalsh(kron_upper.value-X.value).min()),
                  maximum_equality_residual=float(max(abs(eq.expr.value) for eq in equalities)))
    return result

results=dict(source='https://arxiv.org/html/1404.3240v1#S4',equation='51',
             cvxpy_version=cp.__version__,solvers=cp.installed_solvers(),
             pointwise=[],robust_boxes=[],cross_checks=[],
             caveats=['All solver values are numerical, not certified proofs.',
                      'A pointwise bound does not certify an entire entrywise noise box.',
                      'Robust-box results use our conservative affine envelope of Eq.51, not exact FP box optimization.',
                      'For epsilon>0 the circulant epsilon family has ordinary rank four, so its cp-rank lower bound is already four.',
                      'No claim of optimality is made for saved nonconvex factor fits.'])
def save():
    (HERE/'round3_sdp_results.json').write_text(json.dumps(results,indent=2))

rho_grid=[0,.02,.05,.10,.15,.16,.20,.25,.30,.31,.35,.45,.49,.50,.75,1.]
for rho in rho_grid:
    res=tau_exact(H0+rho*np.ones((4,4)))
    res.update(family='H0+rho*J',rho=rho,
               cheap_m2_minus_4zd=(1+rho)**2-4*rho*(2+rho),
               improved_m2_minus_4z_dminusz=(1+rho)**2-8*rho)
    results['pointwise'].append(res);save()
    print(json.dumps({k:res[k] for k in ['family','rho','value','status','cheap_m2_minus_4zd']}),flush=True)

for eps in [.01,.05,.10,.19]:
    A=H0.copy()
    for i in range(4):
        for j in range(4): A[i,j]+= eps if i==j or (i-j)%4==2 else -eps
    res=tau_exact(A)
    res.update(family='circulant_epsilon',epsilon=eps,
               cheap_m2_minus_4zd=(1-eps)**2-4*eps*(2+eps),
               improved_m2_minus_4z_dminusz=(1-eps)**2-8*eps)
    results['pointwise'].append(res);save()
    print(json.dumps({k:res[k] for k in ['family','epsilon','rank','value','status']}),flush=True)

for eps in [.01,.025,.049038105676658,.075,.097167540709727,.10,.125,.15,.19]:
    res=tau_robust_box(H0,eps)
    res['cheap_m2_minus_4zd']=(1-eps)**2-4*eps*(2+eps)
    res['improved_m2_minus_4z_dminusz']=(1-eps)**2-8*eps
    results['robust_boxes'].append(res);save()
    print(json.dumps({k:res[k] for k in ['epsilon','value','status','cheap_m2_minus_4zd']}),flush=True)

# Cross solver checks resolve numerical doubts only, not strict certificates.
for rho in [0,.20,.49]:
    res=tau_exact(H0+rho*np.ones((4,4)),solver='SCS')
    res.update(family='H0+rho*J',rho=rho)
    results['cross_checks'].append(res);save()
    print(json.dumps({k:res[k] for k in ['family','rho','solver','value','status']}),flush=True)

finite_results=HERE/'finite-window-results.json'
if finite_results.exists():
    saved=json.loads(finite_results.read_text())['target']
    G=np.array(saved['local_search_best_factor'])
    # Round downward/upward neither matters: direct reconstruction gives a feasible CP3 matrix.
    # Use eight decimals and report its directly evaluated entrywise error as a numerical upper bound.
    Gr=np.round(G,8)
    results['explicit_cp3_upper_comparator']=dict(
        factor=Gr.tolist(),matrix=(Gr.T@Gr).tolist(),
        entrywise_error=float(np.max(abs(Gr.T@Gr-H0))),
        provenance='Existing 40-start local fit; no new nonconvex search.',
        is_global_optimum=False)
    # These finite decimals give an exact rational factor, hence a certified
    # feasible upper comparator independent of the nonconvex optimizer.
    from fractions import Fraction
    Gf=[[Fraction(str(round(x,8))) for x in row] for row in Gr.tolist()]
    GG=[[sum(Gf[k][i]*Gf[k][j] for k in range(3)) for j in range(4)] for i in range(4)]
    err=max(abs(GG[i][j]-int(H0[i,j])) for i in range(4) for j in range(4))
    results['explicit_cp3_upper_comparator'].update(
        entrywise_error_exact_rational=str(err),
        entrywise_error_exact_decimal=float(err),
        strict_upper_bound='0.19667648')
    assert err < Fraction('0.19667648')
results['analytic_thresholds']={
    'old_pointwise_rho':-1+2/math.sqrt(3),
    'improved_pointwise_rho':3-2*math.sqrt(2),
    'improved_uniform_box_epsilon':5-2*math.sqrt(6),
    'proved_SDP_lower_bound_crossing_rho':(math.sqrt(5)-1)/4,
    'proved_SDP_lower_bound_formula':'max(3,(4+4*rho+2*rho**2)/(1+2*rho+2*rho**2))',
    'equality_to_SDP_optimum_proven':False}
save()
実行結果:cp3-algebraic-certificate.json
{
  "status": "All assertions passed using exact rational arithmetic.",
  "polynomial_ascending_coefficients": [
    2,
    -11,
    3,
    -2,
    42,
    0,
    -4
  ],
  "root_interval": [
    "98338233528673/500000000000000",
    "196676467057347/1000000000000000"
  ],
  "P_root_lower_sign": 1,
  "P_root_upper_sign": -1,
  "derivative_upper_on_zero_to_one_fifth": "-1057/125",
  "outward_decimal_enclosures": {
    "e": [
      "0.196676467057",
      "0.196676467058"
    ],
    "p": [
      "0.803323532942",
      "0.803323532943"
    ],
    "q": [
      "1.196676467057",
      "1.196676467058"
    ],
    "L": [
      "1.803323532942",
      "1.803323532943"
    ],
    "U": [
      "2.196676467057",
      "2.196676467058"
    ],
    "x": [
      "0.299984191393",
      "0.299984191394"
    ],
    "y": [
      "0.850754457398",
      "0.850754457399"
    ],
    "L-x": [
      "1.503339341549",
      "1.503339341550"
    ],
    "L-y": [
      "0.952569075544",
      "0.952569075545"
    ],
    "d": [
      "1.812198069900",
      "1.812198069901"
    ],
    "d-L": [
      "0.008874536957",
      "0.008874536958"
    ],
    "U-d": [
      "0.384478397157",
      "0.384478397158"
    ]
  }
}
実行結果:round3_sdp_exact_certificate.json
{
  "coefficient_identity_exact": true,
  "dual_stationarity_exact": true,
  "dual_psd_by_explicit_outer_product_sum": true,
  "rho": "1/4",
  "proved_lower_bound": "41/13",
  "general_proved_lower_bound": "max(3,(4+4*rho+2*rho**2)/(1+2*rho+2*rho**2)) for rho>=0",
  "general_equality_to_SDP_optimum_proven": false,
  "original_minor_multipliers_in_units_k_over_4": [
    3,
    1,
    -2,
    2,
    -1,
    1,
    1,
    2,
    1,
    1,
    0,
    -1,
    -2,
    1,
    3,
    -1,
    1,
    -2,
    2,
    1,
    -1,
    3,
    1,
    2,
    -1,
    0,
    1,
    1,
    2,
    1,
    1,
    -1,
    -2,
    2,
    1,
    3
  ],
  "explicit_cp3_upper_factor_decimal": [
    [
      "1.22610739",
      "0",
      "0",
      "0.97599645"
    ],
    [
      "0.54770813",
      "1.46670004",
      "0.35908992",
      "0"
    ],
    [
      "0",
      "0.21323097",
      "1.29740221",
      "0.92236352"
    ]
  ],
  "explicit_cp3_upper_error_exact": "196676472519291/1000000000000000",
  "explicit_cp3_upper_is_global_optimum": false
}
実行結果:round3-protocol-results.json
{
  "seed": 202609203,
  "physical_graphs": 48,
  "hidden_counts": [
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11,
    12
  ],
  "max_triangular_ramp_window_error": 1.6653345369377348e-16,
  "max_gram_error": 2.914335439641036e-16,
  "min_factor_entry": 0.00964830007618927,
  "max_power_input_window_error": 1.1102230246251565e-16,
  "max_kron_rowsum_error": 2.220446049250313e-15,
  "cp3_factor_checks": 3000,
  "cp3_inequality_violations": 0,
  "max_cp3_inequality_margin": 0.0,
  "improved_delta": 0.10102051443364424,
  "uniform_rho_threshold": 0.1715728752538097,
  "design": {
    "lam": 0.25,
    "total_rise": 1.0,
    "tau": 0.1,
    "h": 5.025724834504678,
    "linear_ramp_coefficient": 0.44157182494271213,
    "linear_ramp_error_floor": 0.004437948194940551,
    "quadratic_ramp_coefficient": 0.44099775859097734,
    "quadratic_ramp_error_floor": 0.0044321786313371945
  },
  "scope": "Synthetic numerical checks; no experimental measurement or optimality claim."
}
SDP数値実行記録:残差・比較結果・ソルバー情報

浮動小数点による探索の完全な記録。厳密保証の根拠は上の証明と有理数検算。個々の実行時間はこの実行環境での参考値。

全32回の結果を収録。行列・残差・ソルバー状態を含む元のJSONは、圧縮してこのHTML内に保持しています。

記録の種類回数ソルバー等式残差の最大値
Hρの点ごとの比較20CLARABEL1.96e-12
成分誤差の区間緩和9CLARABEL2.4e-14
別ソルバーとの照合3SCS3.08e-13

残差は浮動小数点計算の診断値で、厳密な可行性や最適性の証明ではありません。元ログの optimal_inaccurate を含む状態情報も保持しています。

JSONは必要なときだけ展開します。

元JSONのSHA-256:c926e5e575dcd8a1c47dc225c99080b7677f94b597f7a6ad53147f446f05c01a

追究2 · 有限時間の測定へ独立導出・相互監査済みの証明草案

二つの時間窓から、「3状態では足りない」を証明する

この節は追究2の記録。下限0.09717と約4.27 mWは有効だが、追究3を経て追究4で1/6と約7.32 mWへ改善した。下の判定器は最新の最良集約式を使う。新規性についても追究4の判定を優先する。

前回の低周波係数の下限を、測定できる熱流の誤差下限へ進めた。温度を変えた後の熱流を、隣り合う同じ長さの区間で積分し、差を取る。この量には内部状態数の制約が残り、未知の定常応答は消える。

今回は、①定常応答を合わせなくてもよい有限時間の証明、②有限の立上り時間への拡張、③測定誤差を含めた簡単な棄却式まで到達した。誤差定数も、前回の約0.049から約0.097へ改善した。最良定数という主張ではない。

定常値が不要等長の二窓の差で定常項と一定の計測オフセットを消す。
有限立上り同じ単調な入力波形なら、3状態以下の棄却に使用できる。
誤差込み測定値の区間から c² > 4zd を調べるだけの十分条件。
新規性の見直し:Hankel行列の非負分解で正値実現の次数を下から押さえる発想、CPランクの下界、少ない因子では正の誤差が残るという存在論は既知。本ノートの候補は、二窓の実測量・明示的な量的下限・立上りと雑音の扱いを一つの判定法に結ぶ部分へ絞る。これも先取性は未確定。[35] [36] [41] [43]

A. 実験で何を測るか

4か所の境界を選び、1か所ずつ同じ温度上昇を与える。残りの境界温度は基準値へ固定する。毎回、内部を同じ初期平衡から始め、4か所の符号付き熱流を測る。温度上昇幅で割った応答を Rij(t) とする。第j回実験の第i境界熱流が行列の(i,j)成分になる。以下は温度差1単位あたりの式である。

Dh(t) = ∫tt+h R(u) du − ∫t+ht+2h R(u) du

Rの単位はW/K、Dの単位はJ/K。二窓の差なので、定常応答Kと時間に依存しないセンサーオフセットが相殺する。時間変化するドリフト、校正誤差、積分誤差は別途、後述の誤差幅へ含める。

B. 理想ステップの定理:全ての内部状態数に成立

§3の相反熱ネットワークを用いる。Q=CI−1/2LIICI−1/2、B=CI−1/2(−LIB)と置く。Qは正定値・非対角成分が非正、Bは成分ごとに非負。内部状態数をrとする。

R(t)=K+BᵀQ−1e−QtB (t>0)
Ah=∫₀he−Qvdv, F=e−Qt/2AhB
Dh(t)=FᵀF, F≥0, cp-rank(Dh(t))≤r.
二窓の因子分解の証明

−Qは非対角が非負なのでe−Qu≥0。例えば十分大きいaに対してaI−Q≥0とし、指数の冪級数で示せる。従ってAh≥0、F≥0。

二窓のKは消え、積分を実行するとD=BᵀQ−2e−Qt(I−e−Qh)²B。Qの関数同士は可換かつ対称で、Ah=Q−1(I−e−Qh)。従ってD=FᵀF。Fの行数はrなのでCPランクはr以下。□

同じ式はD=∫₀h∫₀hBᵀe−Q(t+u+v)B du dvとも書ける。対称なHankel核を両側から同じ窓で積分したGram行列であり、既存の正値実現理論との連続性は明確である。

境界容量CBはステップ瞬間のインパルスだけに寄与するため、窓はt>0に置く。候補模型のK、CB、極配置を目標と一致させる必要はない。CPランクは一般には必要状態数の下界であり、これだけで回路実現の十分条件は得られない。

C. 有限立上りでも「3状態以下」の棄却が成立

温度入力をg(t)とし、gは0から1へ単調増加して時刻Tで立上りを完了、その後は1を保つ。各境界で同じ波形を使用する。μ=dgは[0,T]上の非負測度で総量1。観測開始はt>Tとする。

Dg,h(t)=BᵀM B,
M=∫₀T e−Q(t−v)Ah² μ(dv).
r≤3 ⇒ cp-rank(Dg,h(t))≤3.
任意の共通単調ランプへの拡張の証明

線形性よりRg(t)=K+∫₀TBᵀQ−1e−Q(t−v)B μ(dv)。二窓差を取ると表示式になる。Mの各積分項は、非負行列の積なので成分非負。また同じ正定値Qの関数なので固有値は非負。従ってMは対称半正定値かつ成分非負(DNN)。

r≤3ではDNN行列はr行以下の非負因子を持つ。自足的には、3×3を対角で正規化して相関a,b,c∈[0,1]とし、残った相関cが最大になるようピボットを選べばc≥ab。Choleskyの非対角成分はa,b,(c−ab)/√(1−a²)で全て非負、最後の平方根は半正定値性が保証する。退化例は極限で処理できる。M=PᵀP、P≥0とすればD=(PB)ᵀ(PB)。□

この議論から一般rでCPランク≤rとは言わない。CP行列の平均で因子の最少本数が保たれるとは限らないためである。

この拡張により、理想的な瞬間加熱を前提とせずに3状態模型を検証できる。立上り途中の窓、境界ごとに違う波形、未知の初期状態には同じ証明を適用できない。後述の計算では前二者について実際に破綻例も確認した。

D. 改善した下限:0.049から0.097へ

§5の既知行列H₀に対し、3行以下の非負因子を持つ任意のH̃は次を満たす。

∥H̃−H₀∥max ≥ δ = (2√7−5)/3 ≈ 0.09716754
改善定数の証明と、データから直接使える形

非負因子の各行を(a,b,c,d)とする。{a,c}の大きい方と{b,d}の大きい方を一つずつ選ぶと、サイクル12・23・34・41のいずれか一辺が選ばれる。同値の場合も一つに決める。3行以下なら、少なくとも一辺は一度も選ばれない。

その辺を添字の付け替えで12とする。全ての行でa≤cまたはb≤dが成り立つ。I={a≤c}、J=その残り、と分割すると、Cauchy–Schwarzから

H̃₁₂ = Σ ab ≤ √[(ΣIac)(ΣIb²)] + √[(ΣJbd)(ΣJa²)]
≤ √(H̃₁₃H̃₂₂) + √(H̃₂₄H̃₁₁).

mを四つのサイクル成分の最小値、zを二つの反対頂点成分13・24の最大値、dを対角成分の最大値とすると、従ってm²≤4zdが必要。H₀からの成分誤差ε<1ならm≥1−ε、z≤ε、d≤2+εなので(1−ε)²≤4ε(2+ε)。3ε²+10ε−1≥0を解いてδを得る。ε≥1なら自明。□

これは因子の支持を使った初等的な下界。一般的なCPランクの計算可能な下界には既存の半正定値計画・SOS法があり、比較が必要である。[41]

E. 有限時間の熱流誤差へ変換する

目標の記憶係数をH=sH₀とする。s>0は容量の単位を持つ尺度。緩和率λの単一極応答へ、長さTの線形ランプを与える。立上り終了後τ>0だけ待ち、幅hの窓を二つ測ると、

D* = s a H₀,
a=e−λτ · (1−e−λT)/(λT) · (1−e−λh)².

同じ実験を、内部熱容量3個以下の任意の候補模型で行う。4×4応答の最大成分誤差の観測区間内上限をEとすれば、積分の三角不等式から∥D̃−D*max≤2hE。上のCP下界と合わせて、

E ≥ sδ e−λτ (1−e−λT)/(λT) · (1−e−λh)²/(2h).

候補の極をどこへ置いても成立する。4回の入力実験・4出力・指定時間区間のどこかで必要になる誤差の床である。全出力が常にこの誤差を持つ、温度予測に同じ下限が出る、あるいはH∞下界が得られた、という意味ではない。

別の測定方法:二時刻の差

r≤3ならRg(t)−Rg(t+h)も、内部DNN行列の合同変換なのでCPランク≤3。線形ランプ後の係数はsλe−λτ(1−e−λT)/(λT)(1−e−λh)。二時刻の最大誤差はそのδ/2倍以上となる。時間積分を使わない分、同一の誤差ノルムではより強い下界になりうるが、瞬間値の測定誤差を直接受ける。二窓法は時間積分データから証明を作る選択肢であり、あらゆる測定法の最適解とは言わない。

F. 単位を付けた設計例

これは合成した回路モデル上の設計計算であり、実測結果ではない。s=1 J/K、λ=0.25 s⁻¹、境界間の定常辺重み1 W/Kの§5回路を用いる。内部熱容量は各4 J/Kの4個。1 Kを1秒で線形に立ち上げ、0.1秒待つ。

意味
各窓の幅h5.025725秒この二窓下界を最大化する幅。λh≈1.256431。
観測時間約10.05145秒入力開始後1.1秒から11.15145秒まで。
二窓係数a0.441571825D*=0.441571825 H₀ J/K。
3状態とのDの距離下限0.042906448 J/K最大成分ノルム。最良距離とは限らない。
熱流誤差の床4.268683 mW温度上昇1 Kの場合。どこかの入力・出力・時刻でこの値以上。

最適な窓幅はeˣ=2x+1の正根x≈1.256431から求まる。これは今回の下界を最も大きくする選択であり、雑音分布や測定費用まで考えた実験計画の最適性ではない。

2026-09-20T07:20:03.532964 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 2 4 6 8 10 12 14 Time after ramp ends (s) 3.0 3.1 3.2 3.3 3.4 Boundary gain R11 (W/K) Two windows cancel the steady term Unknown steady term K11 First integral (+) Second integral (-) 0 2 4 6 8 10 12 14 Width of each window h (s) 0 1 2 3 4 5 Certified error floor (mW/K) h = 5.026 s 4.269 mW/K A guaranteed floor, not the optimum error
左:定常項を含む境界応答と二つの積分窓。右:幅hによる証明可能な誤差下限の変化。解析式から作成した図。

G. ノイズを含むデータの棄却式

測定した対称化済み行列D̂の成分誤差が全てη以下と保証されているとする。c=max(0, mincycleij−η)、z=max(0, D̂₁₃+η, D̂₂₄+η)、d=max(0, maxiii+η)を計算する。

c > 0 かつ c² > 4zd ⇒ 誤差区間と整合する3状態以下の熱模型は存在しない。

許容したい模型の熱流誤差をE、測定したDの誤差をηmeasとするなら、判定に使う幅をη=ηmeas+2hEへ広げればよい。それでも不等式が成立すれば、その精度Eを満たす3状態以下の模型も存在しない。

この条件に届かなければ判定保留であり、3状態で十分という結論ではない。真のモデルが想定した物理クラスに属するなら、棄却は内部状態が少なくとも4個必要だという意味になる。モデルクラス自体の不適合をこの式だけで診断するものではない。

最新の判定器は本文・第6章へ移動しました。

各窓の積分値にそれぞれ成分誤差εWがあれば、差の誤差はη≤2εW。各時刻の熱流誤差σと数値積分誤差εquadを使う保守的な換算はη≤2hσ+εquad。統計的な信頼区間を使うなら、16成分・全実験を同時に覆う保証が必要。ここでは未指定の雑音を独立・正規分布と仮定しない。

H. 現実につなぐ際の入口

最初の検証には、同じ数式を持つ抵抗・コンデンサの4端子回路が扱いやすい。電圧を指定して電流を測れるため、温度を4か所で制御する実験より本命題の入力条件を作りやすいと考える。熱モデルとRC回路の対応はメーカー資料にも明示されている。[42]

具体的な電気的縮尺の一例は、各内部容量4 µF、内部から隣接する二境界への抵抗をそれぞれ2 kΩ、境界のサイクル辺を4/3 kΩ、反対頂点間を1 kΩとする。これはs=1 µF、λ=250 s⁻¹、定常辺重み1 mSの模型。1 Vを1 msで立ち上げ、0.1 ms待ち、各5.025725 msの二窓を測る。対応する電流誤差下限は約4.269 µA。公称値の計算であり、部品誤差や測定器性能を実証したものではない。

熱の用途は、多境界の簡略化モデルの状態数選びや、これ以上減らせない精度の判定。モデルの内部状態数は、実物の材料層の数とは限らない。一般的な半導体の熱インピーダンス測定は熱流入力→温度出力であり、本ノートの温度入力→熱流出力の保証をそのまま移せない。[42]

I. 新規性の監査で撤回・限定したこと

確認した点現在の扱い
H₀はCPランク4だけでなく通常の非負ランクも4この例の次数差を相反性だけが生む独自現象とは呼ばない。
Hankelの非負因子分解と実現次数古典的な正値実現理論の系譜。2004解説と2022surveyに帰属。[35] [43]
CPランクが小さい行列集合の閉性と正の距離既知の半連続性。誤差が正という存在だけを新規主張にしない。[41]
δ≈0.09717、c²>4zd、二窓+単調立上り本調査で独立導出・監査済みの量的な候補。同一の既存命題との一致・非一致は未確定。
実用性能合成回路とランダム回路で検証。実機・実材料・製品データでの実証は未実施。
H₀の非負ランクも4であることの確認

列を二つ循環移動すると零成分が対角だけに並ぶ。非負ランク3以下なら、この非対角支持を三つの積集合で覆えて、対角を踏まない必要がある。各行の因子支持集合をSi⊆{1,2,3}とすると、全ての異なるi,jについてSi⊄Sjが必要。3要素集合の部分集合から相互非包含な集合は最大3個しか選べず、4行と矛盾する。従って非負ランクは4。今回の具体例の厳密な3状態排除には、一般正値実現の障壁も含まれる。

相反性の追加制約を分離する、次の既知例

完全二部グラフK₂,₃の符号なしラプラシアンH₂,₃=[[3I₂,J₂,₃],[J₃,₂,2I₃]]は通常ランク4、CPランク6。各辺に対応する非負因子が上界6を与え、同じ部の零成分のため各因子が高々一辺しか覆えず下界6。行列とそのCPランクは既知である。[41, §4.5]

一方、通常の非負分解は5×5行列なので5因子以下。単一極の正の緩和核は一般の正値状態空間表現なら5状態で実現できるが、§4の条件を満たす熱境界応答には6内部熱容量が必要になる。これで一般正値性と相反な熱回路の制約を区別できる。任意単調ランプのr≤3証明をr=5へそのまま拡張することはできないが、追究3の自己畳み込みの入力波形なら全rで因子分解が成立する。

J. 反例と独立数値検証

新たに内部点数1〜8の160個の物理グラフを生成し、応答の直接数値積分と因子分解を比較した。合成回路のため実測データではない。計算は証明の代わりではなく、式の実装と適用条件を確認する役割を持つ。

確認最大誤差・結果
ステップ二窓の直接積分と解析式6.67×10⁻¹⁶
非負Gram因子との一致3.89×10⁻¹⁶
共通単調ランプの二窓積分3.47×10⁻¹⁶
r≤3の内部DNN行列の非負因子1.39×10⁻¹⁷
立上り途中に窓を置く反例1状態でもD≈−0.0311234。CP性が壊れる。
境界ごとに違う立上りを使う反例保持後でもDが非対称。共通波形の仮定を外せない。

参考として、H₀に近い3行非負因子を40初期値から局所探索した最良値は約0.1966765だった。これは近似行列を構成して得た距離の数値的な上界であり、大域最小値や新たな下界ではない。これは追究2の時点の結果。追究3では下界を0.1010205へ改善し、この近似を代数化して有理演算で厳密な上界を得た。最適距離は引き続き未確定。

有限窓の再現用Pythonコード
"""Independent finite-window thermal response checks.

Numerical checks are not proofs of cp-rank lower bounds or global optimality.
Python 3 + NumPy + SciPy. Run from any working directory.
"""
from pathlib import Path
from itertools import permutations
import json
import math
import numpy as np
from scipy.special import beta as beta_function
from scipy.linalg import expm
from scipy.optimize import minimize
from numpy.polynomial.legendre import leggauss

SEED = 20260920 + 713
rng = np.random.default_rng(SEED)
gx, gw = leggauss(40)

def quad_nodes(a, b):
    return (a + b)/2 + (b-a)*gx/2, (b-a)*gw/2

def fun_matrix(evals, evecs, values):
    return (evecs * values) @ evecs.T

def step_response(time, ev, U, B, K):
    return K + B.T @ fun_matrix(ev,U,np.exp(-time*ev)/ev) @ B

def physical_graph(r, n=4):
    weights = rng.uniform(.05,1.2,(r,r))
    weights = (weights+weights.T)/2
    weights[rng.random((r,r)) < .25] = 0
    weights = np.minimum(weights,weights.T)
    np.fill_diagonal(weights,0)
    # Include positive boundary connections and grounding; this makes Q SPD.
    B = rng.uniform(0,1.2,(r,n))
    B[rng.random((r,n))<.25] = 0
    internal_ground = rng.uniform(.05,.6,r)
    Q = np.diag(weights.sum(axis=1)+B.sum(axis=1)+internal_ground)-weights
    Lbb = np.diag(B.sum(axis=0)+rng.uniform(.05,.6,n))
    K = Lbb-B.T @ np.linalg.solve(Q,B)
    full = np.block([[Lbb,-B.T],[-B,Q]])
    assert np.linalg.eigvalsh(full)[0]>0
    return Q,B,K

def cp_factor_small_dnn(M):
    """Construct a nonnegative <=3-row factor via permuted Cholesky.

    Existence for 3x3 DNN also follows from a normalized correlation argument.
    This function checks a numerical factor rather than inferring cp-rank from rank.
    """
    r=M.shape[0]
    for perm in permutations(range(r)):
        p=np.array(perm)
        L=np.linalg.cholesky(M[np.ix_(p,p)])
        if L.min()>=-2e-12:
            F=np.zeros_like(L)
            F[:,p]=L.T
            return F
    raise AssertionError('No nonnegative permuted Cholesky factor found')

step_error=gram_error=ramp_error=cp_small_error=0.
min_step_factor=1.
min_ramp_internal=1.
min_ramp_eigenvalue=1.
max_constant_cancellation=0.
cases=[]
for r in range(1,9):
    for trial in range(20):
        Q,B,K=physical_graph(r)
        ev,U=np.linalg.eigh(Q)
        t=float(rng.uniform(.2,2)); h=float(rng.uniform(.1,1.4))
        times1,ww=quad_nodes(t,t+h)
        times2,_=quad_nodes(t+h,t+2*h)
        # Independently integrate the complete response, including unknown K.
        numerical=sum(w*(step_response(x,ev,U,B,K)-step_response(y,ev,U,B,K))
                      for w,x,y in zip(ww,times1,times2))
        target=B.T@fun_matrix(ev,U,np.exp(-ev*t)*(-np.expm1(-ev*h))**2/ev**2)@B
        Ah=fun_matrix(ev,U,-np.expm1(-ev*h)/ev)
        F=expm(-Q*t/2)@Ah@B
        step_error=max(step_error,float(np.max(abs(numerical-target))))
        gram_error=max(gram_error,float(np.max(abs(F.T@F-target))))
        min_step_factor=min(min_step_factor,float(F.min()))
        altered_K=K+rng.normal(size=K.shape)
        altered=sum(w*(step_response(x,ev,U,B,altered_K)-step_response(y,ev,U,B,altered_K))
                    for w,x,y in zip(ww,times1,times2))
        max_constant_cancellation=max(max_constant_cancellation,float(np.max(abs(altered-numerical))))

        # Common monotone ramp: derivative is a positive mixture of beta densities.
        duration=float(rng.uniform(.1,1.3))
        s,ws=quad_nodes(0,duration)
        x=s/duration
        aa=rng.integers(1,6,3); bb=rng.integers(1,6,3)
        mix=rng.uniform(.1,1,3); mix/=mix.sum()
        density=sum(weight*x**(a-1)*(1-x)**(b-1)/beta_function(a,b)/duration
                    for weight,a,b in zip(mix,aa,bb))
        ws=ws*density
        assert abs(ws.sum()-1)<1e-12
        start=duration+t
        ts1,wt=quad_nodes(start,start+h)
        ts2,_=quad_nodes(start+h,start+2*h)
        # This integral is independent of the compact spectral formula below.
        ramp_numerical=np.zeros((4,4))
        for timeweight,time1,time2 in zip(wt,ts1,ts2):
            v1=sum(w*step_response(time1-shift,ev,U,B,K) for w,shift in zip(ws,s))
            v2=sum(w*step_response(time2-shift,ev,U,B,K) for w,shift in zip(ws,s))
            ramp_numerical+=timeweight*(v1-v2)
        ramp_scalar=sum(w*np.exp(-ev*(start-shift)) for w,shift in zip(ws,s))
        M=fun_matrix(ev,U,ramp_scalar*(-np.expm1(-ev*h))**2/ev**2)
        ramp_target=B.T@M@B
        ramp_error=max(ramp_error,float(np.max(abs(ramp_target-ramp_numerical))))
        min_ramp_internal=min(min_ramp_internal,float(M.min()))
        min_ramp_eigenvalue=min(min_ramp_eigenvalue,float(np.linalg.eigvalsh(M)[0]))
        if r<=3:
            R=cp_factor_small_dnn(M)
            Framp=R@B
            assert Framp.min()>=-1e-11
            cp_small_error=max(cp_small_error,float(np.max(abs(Framp.T@Framp-ramp_target))))
        cases.append(dict(r=r,trial=trial,post_hold_start=start,ramp_duration=duration,h=h))

# Four-cycle target and a local (not globally certified) three-row approximation search.
F0=np.array([[1,1,0,0],[0,1,1,0],[0,0,1,1],[1,0,0,1]],float)
H0=F0.T@F0
delta=(2*math.sqrt(7)-5)/3  # Improved four-cycle support/Cauchy certificate.
lam=.25; t=1.; h=2.
coefficient=math.exp(-lam*t)*(-math.expm1(-lam*h))**2
Dstar=coefficient*H0
assert np.linalg.matrix_rank(H0)==3
K=4*np.eye(4)-np.ones((4,4))
B=lam*F0; Q=lam*np.eye(4)
ev,U=np.linalg.eigh(Q)
tt1,ww=quad_nodes(t,t+h); tt2,_=quad_nodes(t+h,t+2*h)
window1=sum(w*step_response(time,ev,U,B,K) for time,w in zip(tt1,ww))
window2=sum(w*step_response(time,ev,U,B,K) for time,w in zip(tt2,ww))
assert np.max(abs(window1-window2-Dstar))<1e-12

def constraints(z):
    G=z[:12].reshape(3,4)
    E=(G.T@G-H0).ravel()
    return np.r_[z[12]-E,z[12]+E]

def jac(z):
    G=z[:12].reshape(3,4)
    J=np.zeros((16,12))
    for i in range(4):
        for j in range(4):
            for k in range(3):
                J[4*i+j,4*k+i]+=G[k,j]
                J[4*i+j,4*k+j]+=G[k,i]
    return np.vstack((np.column_stack((-J,np.ones(16))),np.column_stack((J,np.ones(16)))))

best=None; trials=[]
for restart in range(40):
    G=rng.uniform(.01,1.2,(3,4))
    e=float(np.max(abs(G.T@G-H0)))
    z0=np.r_[G.ravel(),e+.1]
    opt=minimize(lambda z:z[12],z0,jac=lambda z:np.r_[np.zeros(12),1.],
                 method='SLSQP',bounds=[(0,None)]*13,
                 constraints=[dict(type='ineq',fun=constraints,jac=jac)],
                 options=dict(maxiter=1500,ftol=1e-12))
    actual=float(np.max(abs(opt.x[:12].reshape(3,4).T@opt.x[:12].reshape(3,4)-H0)))
    trials.append(dict(success=bool(opt.success),objective=float(opt.fun),actual=actual))
    if best is None or actual<best[0]: best=(actual,opt.x[:12].reshape(3,4))
assert best[0]>=delta-1e-9

# Same finite linear ramp for the target. After hold, its only change is a positive scale.
ramp_duration=.8; ramp_start=1.2
ramp_gain=math.expm1(lam*ramp_duration)/(lam*ramp_duration)
ramp_coefficient=math.exp(-lam*ramp_start)*(-math.expm1(-lam*h))**2*ramp_gain

# Controls: removing the post-hold or common-waveform assumptions can break the claim.
# Scalar physical graph Q=2, B=1, K=.5; unit-duration linear ramp.
# During the ramp the output is .5*t + .25*(1-exp(-2*t)).
bad_t=.1; bad_h=.2
bt1,bw=quad_nodes(bad_t,bad_t+bad_h); bt2,_=quad_nodes(bad_t+bad_h,bad_t+2*bad_h)
pre_hold_D=sum(w*(.5*x+.25*(-math.expm1(-2*x))-.5*y-.25*(-math.expm1(-2*y)))
               for w,x,y in zip(bw,bt1,bt2))
assert pre_hold_D<0
# Two distinct positive linear ramps, both completed before measurement.
# A one-hidden-node, two-boundary-node physical graph with Q=1, B=(.3,.3).
durations=np.array([.2,1.]); different_gains=np.expm1(durations)/durations
unequal_D=np.outer(np.array([.3,.3]),np.array([.3,.3]))
unequal_D*=math.exp(-1.2)*(-math.expm1(-.5))**2*different_gains[None,:]
assert np.max(abs(unequal_D-unequal_D.T))>1e-4

results=dict(seed=SEED,random_cases=len(cases),hidden_node_counts=list(range(1,9)),
             max_step_window_integral_error=step_error,
             max_step_nonnegative_gram_error=gram_error,
             minimum_step_factor_entry=min_step_factor,
             max_unknown_constant_cancellation_error=max_constant_cancellation,
             max_common_monotone_ramp_integral_error=ramp_error,
             minimum_ramp_internal_matrix_entry=min_ramp_internal,
             minimum_ramp_internal_eigenvalue=min_ramp_eigenvalue,
             max_ramp_cp_factor_error_for_r_le_3=cp_small_error,
             target=dict(lam=lam,t=t,h=h,coefficient=coefficient,H0=H0.tolist(),
                         window1=window1.tolist(),window2=window2.tolist(),Dstar=Dstar.tolist(),
                         analytical_cp3_entrywise_lower_bound=delta,
                         finite_window_entrywise_lower_bound=coefficient*delta,
                         lower_bound_if_each_window_has_entrywise_error_eta=coefficient*delta/2,
                         local_search_restarts=len(trials),local_search_best_error=best[0],
                         local_search_best_factor=best[1].tolist(),
                         local_search_is_global_certificate=False),
             linear_ramp_target=dict(duration=ramp_duration,start=ramp_start,h=h,
                                     coefficient=ramp_coefficient,
                                     cp3_entrywise_lower_bound=ramp_coefficient*delta),
             assumption_counterexamples=dict(
                 during_linear_ramp_scalar_D=pre_hold_D,
                 unequal_port_ramps_D=unequal_D.tolist(),
                 unequal_port_ramps_asymmetry=float(np.max(abs(unequal_D-unequal_D.T)))),
             scope='Numerical identity checks and local searches only; cp-rank theorem not numerically proved.')
assert max(step_error,gram_error,ramp_error,cp_small_error)<1e-10
here=Path(__file__).resolve().parent
(here/'finite-window-results.json').write_text(json.dumps(results,indent=2))
print(json.dumps(results,indent=2))
検証結果のJSON
{
  "seed": 20261633,
  "random_cases": 160,
  "hidden_node_counts": [
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8
  ],
  "max_step_window_integral_error": 6.661338147750939e-16,
  "max_step_nonnegative_gram_error": 3.885780586188048e-16,
  "minimum_step_factor_entry": 0.0,
  "max_unknown_constant_cancellation_error": 1.942890293094024e-16,
  "max_common_monotone_ramp_integral_error": 3.469446951953614e-16,
  "minimum_ramp_internal_matrix_entry": -6.541715128823755e-18,
  "minimum_ramp_internal_eigenvalue": 1.13009856536003e-11,
  "max_ramp_cp_factor_error_for_r_le_3": 1.3877787807814457e-17,
  "target": {
    "lam": 0.25,
    "t": 1.0,
    "h": 2.0,
    "coefficient": 0.12057247444956556,
    "H0": [
      [
        2.0,
        1.0,
        0.0,
        1.0
      ],
      [
        1.0,
        2.0,
        1.0,
        0.0
      ],
      [
        0.0,
        1.0,
        2.0,
        1.0
      ],
      [
        1.0,
        0.0,
        1.0,
        2.0
      ]
    ],
    "window1": [
      [
        6.612868460660778,
        -1.69356576966961,
        -2.0,
        -1.69356576966961
      ],
      [
        -1.69356576966961,
        6.612868460660778,
        -1.69356576966961,
        -2.0
      ],
      [
        -2.0,
        -1.69356576966961,
        6.612868460660778,
        -1.69356576966961
      ],
      [
        -1.69356576966961,
        -2.0,
        -1.69356576966961,
        6.612868460660778
      ]
    ],
    "window2": [
      [
        6.3717235117616475,
        -1.8141382441191751,
        -2.0,
        -1.8141382441191751
      ],
      [
        -1.8141382441191751,
        6.3717235117616475,
        -1.8141382441191751,
        -2.0
      ],
      [
        -2.0,
        -1.8141382441191751,
        6.3717235117616475,
        -1.8141382441191751
      ],
      [
        -1.8141382441191751,
        -2.0,
        -1.8141382441191751,
        6.3717235117616475
      ]
    ],
    "Dstar": [
      [
        0.24114494889913113,
        0.12057247444956556,
        0.0,
        0.12057247444956556
      ],
      [
        0.12057247444956556,
        0.24114494889913113,
        0.12057247444956556,
        0.0
      ],
      [
        0.0,
        0.12057247444956556,
        0.24114494889913113,
        0.12057247444956556
      ],
      [
        0.12057247444956556,
        0.0,
        0.12057247444956556,
        0.24114494889913113
      ]
    ],
    "analytical_cp3_entrywise_lower_bound": 0.09716754070972715,
    "finite_window_entrywise_lower_bound": 0.011715730819550699,
    "lower_bound_if_each_window_has_entrywise_error_eta": 0.005857865409775349,
    "local_search_restarts": 40,
    "local_search_best_error": 0.19667646705734654,
    "local_search_best_factor": [
      [
        1.2261073939704767,
        1.5461229265087625e-16,
        2.775557561607473e-16,
        0.975996452628978
      ],
      [
        0.5477081260978146,
        1.4667000445401257,
        0.35908991976909604,
        4.1633363424112096e-17
      ],
      [
        0.0,
        0.21323096961590574,
        1.297402211891335,
        0.9223635169488787
      ]
    ],
    "local_search_is_global_certificate": false
  },
  "linear_ramp_target": {
    "duration": 0.8,
    "start": 1.2,
    "h": 2.0,
    "coefficient": 0.1269657203234949,
    "cp3_entrywise_lower_bound": 0.012336946798273022
  },
  "assumption_counterexamples": {
    "during_linear_ramp_scalar_D": -0.03112336525767142,
    "unequal_port_ramps_D": [
      [
        0.004645836873957905,
        0.007211163171446843
      ],
      [
        0.004645836873957905,
        0.007211163171446843
      ]
    ],
    "unequal_port_ramps_asymmetry": 0.0025653262974889386
  },
  "scope": "Numerical identity checks and local searches only; cp-rank theorem not numerically proved."
}
設計計算・図の再現用Pythonコード
"""Deterministic illustrative design calculation; no experimental data."""
import json
from pathlib import Path
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from scipy.optimize import brentq

HERE=Path(__file__).resolve().parent
lam,T,tau=.25,1.,.1
delta=(2*np.sqrt(7)-5)/3
x=brentq(lambda x:np.exp(x)-2*x-1,.1,3)
h=x/lam
phi=-np.expm1(-lam*T)/(lam*T)
A=np.exp(-lam*tau)*phi*(-np.expm1(-lam*h))**2
numbers=dict(lam=lam,ramp_duration=T,post_hold_delay=tau,window_width=h,
             coefficient=A,delta=delta,integrated_certificate_radius=delta*A,
             uniform_gain_error_lower_bound=delta*A/(2*h),optimal_lambda_h=x,
             total_end_time=T+tau+2*h)
(HERE/'finite-window-design.json').write_text(json.dumps(numbers,indent=2))
plt.rcParams.update({'font.family':'DejaVu Sans','font.size':10,'axes.spines.top':False,
                     'axes.spines.right':False,'svg.fonttype':'none'})
fig,ax=plt.subplots(1,2,figsize=(10.8,3.8),layout='constrained')
t=np.linspace(0,14,500)
response=3+2*lam*phi*np.exp(-lam*t)
ax[0].plot(t,response,color='#087f8c',lw=2)
ax[0].axhline(3,color='#718184',ls='--',lw=1,label='Unknown steady term K11')
ax[0].axvspan(tau,tau+h,color='#148b83',alpha=.15,label='First integral (+)')
ax[0].axvspan(tau+h,tau+2*h,color='#d79542',alpha=.18,label='Second integral (-)')
ax[0].set(xlabel='Time after ramp ends (s)',ylabel='Boundary gain R11 (W/K)',
          title='Two windows cancel the steady term',xlim=(0,14),ylim=(2.98,3.47))
ax[0].legend(fontsize=8,loc='upper right',frameon=False)
hs=np.linspace(.03,14,500)
bound=1e3*delta*np.exp(-lam*tau)*phi*(-np.expm1(-lam*hs))**2/(2*hs)
ax[1].plot(hs,bound,color='#087f8c',lw=2)
ax[1].scatter([h],[numbers['uniform_gain_error_lower_bound']*1e3],color='#bd7b29',zorder=5)
ax[1].annotate(f'h = {h:.3f} s\n{numbers["uniform_gain_error_lower_bound"]*1e3:.3f} mW/K',
               (h,numbers['uniform_gain_error_lower_bound']*1e3),xytext=(7.5,3.1),
               arrowprops={'arrowstyle':'->','color':'#596c6e'},fontsize=9)
ax[1].set(xlabel='Width of each window h (s)',ylabel='Certified error floor (mW/K)',
          title='A guaranteed floor, not the optimum error',ylim=(0,5),xlim=(0,14))
for a in ax:a.grid(alpha=.15)
fig.savefig(HERE/'finite-window.svg')
fig.savefig(HERE/'finite-window.png',dpi=140)
print(json.dumps(numbers,indent=2))

Python 3、NumPy、SciPy、図にはMatplotlibを使用。コードを同じフォルダへ保存して実行すると結果ファイルを作る。HTML内の判定器は十分条件のみを計算し、非凸CPランク問題を解くものではない。

7. 近似を許しても、3個以下には係数誤差の下限がある

境界容量CBを固定する。内部熱容量が3個以下の任意の模型から得た係数をH̃とすると、

maxi,j |H̃ij−H₀ij| ≥ (3√3−5)/4 ≈ 0.0490381

を示せる。これは無次元化した低周波記憶係数の最大成分誤差であり、温度の百分率誤差ではない。定数の最適性も主張しない。

鳩の巣原理による誤差下限の証明

最大成分誤差をε<1と仮定し、H̃を3本の非負因子の外積和に書く(不足分は零因子)。4つのサイクル成分は全て1−ε以上。各辺を、少なくとも(1−ε)/3を寄与する因子へ割り当てると、ある因子は二辺を担当する。

二辺が隣接する場合、例えば12と23では、その因子内で(f₁f₂)(f₂f₃)=(f₁f₃)f₂²≤H̃₁₃H̃₂₂≤ε(2+ε)。二辺が向かい合う場合も(f₁f₂)(f₃f₄)=(f₁f₃)(f₂f₄)≤ε²≤ε(2+ε)。従って((1−ε)/3)²≤ε(2+ε)。これを解けば8ε²+20ε−1≥0となり、表示の下限を得る。ε≥1なら自明。□

上記は初回に得た下限。追究2・3を経て追究4で1/6へ改善し、指定した二窓の熱流応答へ橋渡しした。係数誤差だけから一般の温度予測誤差やH∞誤差が出るわけではない。

8. 何が既知で、どこが候補か

対象数学的状態新規性の状態
Kron式・M-matrix・CP分解既存理論を使用既知。新規部分に含めない。
H₀のrank3 / cp-rank4既存論文と一致既知例への帰属を確定。[34]
正値制約による次数増大一般理論が存在既知。[35]
単一極の熱実現条件・最少数必要性・構成・最小性の証明草案1973・1982・2009年の近い回路合成論文との本文比較が未了。新規とは認定しない。
Hρの閾値ρ=1/2独立証明と既知定理への代入Brandts–KřížekのCorollary 3.6・式(6)の直接系と確認。
最大成分誤差≥1/6追究4で強化式・集約境界の最良性を証明既知幾何定理の量的な系。明示式の先取性は未確定。全成分の最適距離は未決定。
二窓・有限立上りでの熱流誤差下限追究3で特定波形について全rへ拡張因子分解は既知Hankel構造の直接系。具体的な量的結合の新規性は未確定。
一般の温度予測・帯域誤差未到達入出力を変えた保証は別の研究問題。

本ノートはAIによる導出、別担当による独立監査、数値・有理数計算を含む。人間の専門家による査読と証明支援系による形式検証は未実施。証明の状態と学術的な新規性の状態を分ける。

重要な未読資料

Matsumoto(1982)は、最小実現からの線形変換、M-matrix、特殊な直交行列を使うtransformerless grounded RC合成を扱う。今回の制約と極めて近いので、定理5の全文比較が必要。要旨だけから同一とも非同一とも判断しない。相互容量の可否、接地、非最小実現、重複極、対角容量の制限を比較する。さらにStein(1973)は接地容量の多端子回路と容量個数の最小化を要旨に明示し、Kandić–Reljin(2009)も非最小の共通接地RC実現を扱う。これらの本文が未読である点は重要な限界。RC-in RC-out(2001)の全文も確認先である。[46] [47][33] [37]

調査の範囲と弱点

検索語はMori–Zwanzig、GLE、memory kernel、positive realization、RC synthesis、transformerless、grounded capacitors、single-pole admittance、completely positive rank、moment matching、finite-time reduction、chaotic homogenizationなどを横断した。関連論文の参照文献も追った。ただし技術語の検索に無関係な結果が多く、古い論文の索引・本文取得にも限界がある。検索件数や「見つからなかったこと」を新規性の証明として扱わない。

9. 次に突き詰める問い

優先具体的な問い意味と打ち切り条件
1測定誤差から状態数を棄却する証明を実機で検証
二窓のc²>Ξ(d,z)をRCアナログで試し、初期化・立上り・積分誤差を校正する。
有限時間への橋渡しは達成。次は実測で棄却余裕が残るか。強化式は既存SDPより強い厳密例を持つと確認。高次階層との比較、非一様な誤差区間、実測での校正が残る。
2複数の記憶時間を共有する熱容量の最少数
Y=K+sCB+Σ sλ/(s+λ) Hを同時に実現する際の最少数を特徴づける。
各残差を独立に分解すれば十分な場合があるが、一般内部結合は符号付き残差も生む。単純にcp-rankの和と仮定しない。
3FDT整合の近似で、動的相関を保証
摩擦核の誤差から雑音因子と相関・経路の誤差まで、モード数に依存しない定数で抑える。
平衡一時刻分布は同じでも動きは違う。一般SVEの直接系に尽きるなら新規候補から外す。
4カオス系で、何を残せばよいか
残留記憶と閾値到達誤差を、保持変数の選択に結びつける。
軌道、分布、経路量を分ける。線形の最少実現理論との差分が出る小モデルから。

第一候補は1。数学側ではH₀からCPランク3以下までの距離をさらに挟む。現状は解析下界1/6、代数的に認証した上界約0.1966765。三つの集約制約の最良境界は決定できたが、全成分の距離は未決定。実用側では、4回の電圧固定・電流測定で二窓の棄却余裕を確認する。熱流入力→温度出力の因子分解も追究3で確認したが、数えるのはポートを含む全状態数。通常の点ポート模型の隠れ状態数を非自明に認証する課題は未解決。

今回得た命題が古い回路理論の系と判明しても、この方向の価値は失われない。既知の最小性を出発点にして、測定誤差や実時間予測へ使える量的な差分を探せる。

D. 基礎計算の再現コードと検証記録

最新の鋭い境界・SDP・有限窓のコードは、それぞれAとCの該当節に収録しています。コードは各節のボタンから取り出せます。

10. 再現計算と、その役割

seed=20260920。ランダムな非負因子から120個の熱ネットワークを構成し、各42点、合計5,040点の実・虚Laplace変数で境界応答を比較した。これは構成式の実装確認であり、最小性や新規性の証拠は上の証明・文献照合が担う。

確認結果
指定したYとの相対誤差の最大6.996e-16
H=WᵀCIWの相対誤差の最大4.073e-16
基礎行列の通常ランク有理数の掃き出し法で3
3抽象状態/4熱容量の応答差周波数点で最大 8.882e-16
滑らかな温度パルスの熱流差401時刻で最大 2.254e-10
因子数閾値・最少数数値最適化の成功失敗ではなく、収録した証明による。

文書検査(再編版・追加査読反映後):61件の文献ID、内部リンク、重複ID、埋め込みコードを確認。幅320・390・768・1100 pxのブラウザ表示と主要操作を検査した。圧縮ログのJSON復元は元ファイルとバイト単位で一致し、外部通信は発生しない。これらの文書・実装検査は数学的証明の代わりではない。

再現用Python(NumPy・SciPy、コード全文)

下のボタンでこのページに埋め込まれたコードを保存できる。実行すると同じフォルダーに検証JSONと応答データを出力する。

"""Reproduce finite numerical checks in thermal-memory research note.
Python 3 + NumPy + SciPy. Numerical checks do not establish minimality.
"""
import json
import math
from pathlib import Path
from fractions import Fraction
import numpy as np
from scipy.linalg import expm

SEED = 20260920
rng = np.random.default_rng(SEED)

def laplacian(weights):
    return np.diag(weights.sum(axis=1)) - weights

def build(F, lam, K, cb):
    # F has one nonnegative row per hidden heat-capacity node.
    H = F.T @ F
    z = F.sum(axis=1)
    assert np.all(z > 0)
    caps = z*z
    W = F / z[:, None]
    links = lam * caps[:, None] * W
    direct = K - lam*(np.diag(H.sum(axis=1))-H)
    Lbb = direct + np.diag(links.sum(axis=0))
    Lbi = -links.T
    Lii = np.diag(lam*caps)
    return Lbb, Lbi, Lii, caps, direct

def response(s, parts, cb):
    Lbb,Lbi,Lii,caps,_ = parts
    return Lbb+s*np.diag(cb)-Lbi@np.linalg.solve(Lii+s*np.diag(caps),Lbi.T)

def exact_rank(mat):
    a = [[Fraction(int(v)) for v in row] for row in mat]
    row = 0
    for col in range(len(a[0])):
        pivot = next((i for i in range(row,len(a)) if a[i][col]),None)
        if pivot is None: continue
        a[row],a[pivot]=a[pivot],a[row]
        v=a[row][col]; a[row]=[x/v for x in a[row]]
        for i in range(len(a)):
            if i != row:
                v=a[i][col]; a[i]=[x-v*y for x,y in zip(a[i],a[row])]
        row+=1
    return row

worst_response=worst_moment=worst_rowsum=0.
checks=0
ss = np.r_[np.logspace(-4,3,21), 1j*np.logspace(-4,3,21)]
for case in range(120):
    n=int(rng.integers(2,9)); r=int(rng.integers(1,9))
    F=rng.uniform(.1,2,(r,n))
    F[rng.random((r,n))<.3]=0
    for row in F:
        if row.sum()==0: row[int(rng.integers(n))]=1.
    H=F.T@F; lam=float(rng.uniform(.1,2))
    a=rng.uniform(.1,1,(n,n)); a=(a+a.T)/2
    weights=lam*H+a; np.fill_diagonal(weights,0)
    K=laplacian(weights); cb=rng.uniform(.1,2,n)
    parts=build(F,lam,K,cb)
    Lbb,Lbi,Lii,caps,direct=parts
    W=-np.linalg.solve(Lii,Lbi.T)
    moment=W.T@np.diag(caps)@W
    worst_moment=max(worst_moment,np.linalg.norm(moment-H)/max(1,np.linalg.norm(H)))
    L=np.block([[Lbb,Lbi],[Lbi.T,Lii]])
    worst_rowsum=max(worst_rowsum,np.max(np.abs(L.sum(axis=1))))
    off=L.copy(); np.fill_diagonal(off,0)
    assert off.max()<1e-10
    assert np.linalg.eigvalsh(L)[0]>-1e-10
    for s in ss:
        target=K+s*np.diag(cb)+s*lam/(s+lam)*H
        error=np.linalg.norm(response(s,parts,cb)-target)/max(1,np.linalg.norm(target))
        worst_response=max(worst_response,float(error)); checks+=1

F0=np.array([[1,1,0,0],[0,1,1,0],[0,0,1,1],[1,0,0,1]],float)
H0=F0.T@F0
K=laplacian(np.ones((4,4))-np.eye(4)); cb=np.ones(4); lam=.25
parts=build(F0,lam,K,cb)
# Exact algebraic rank and positive 4-factor identity.
assert exact_rank(H0.astype(int))==3
Q=np.array([[.5,-math.sqrt(3/8),math.sqrt(3/8)],
            [math.sqrt(3/8),-.25,-.75],
            [math.sqrt(3/8),.75,.25]])
worst_factor=0.
for rho in [0,.01,.05,.25,.49,.5,.75,1,2,10]:
    H=H0+rho*np.ones((4,4))
    alpha=(math.sqrt(1+rho)-1)/2
    F4=F0+alpha*np.ones((4,4))
    worst_factor=max(worst_factor,float(np.max(np.abs(F4.T@F4-H))))
    V=np.array([[math.sqrt(1+rho)]*4,[1,0,-1,0],[0,1,0,-1]],float)
    assert np.max(np.abs(V.T@V-H))<1e-12
    if rho>=.5:
        F3=Q@V
        assert F3.min()>-1e-12
        worst_factor=max(worst_factor,float(np.max(np.abs(F3.T@F3-H))))

# A signed 3-mode realization has precisely the same full transfer.
vals,vecs=np.linalg.eigh(H0); keep=vals>1e-10
G=np.sqrt(vals[keep])[:,None]*vecs[:,keep].T
assert G.shape==(3,4)
algebraic_error=0.
for s in ss:
    reduced=K+lam*H0+s*np.diag(cb)-lam**2/(s+lam)*(G.T@G)
    algebraic_error=max(algebraic_error,float(np.max(np.abs(reduced-response(s,parts,cb)))))

# Dynamic numerical check with a smooth boundary temperature pulse.
from scipy.integrate import solve_ivp
def u(t): return np.array([t*t*np.exp(-t),0.,0.,0.])
def du(t): return np.array([(2*t-t*t)*np.exp(-t),0.,0.,0.])
Lbb,Lbi,Lii,caps,_=parts
times=np.linspace(0,20,401)
physical=solve_ivp(lambda t,z:(-Lii@z-Lbi.T@u(t))/caps,[0,20],np.zeros(4),t_eval=times,rtol=1e-10,atol=1e-12)
abstract=solve_ivp(lambda t,z:-lam*z+lam*G@u(t),[0,20],np.zeros(3),t_eval=times,rtol=1e-10,atol=1e-12)
q4=np.array([Lbb@u(t)+Lbi@z+du(t) for t,z in zip(times,physical.y.T)])
q3=np.array([(K+lam*H0)@u(t)-lam*G.T@z+du(t) for t,z in zip(times,abstract.y.T)])

results=dict(seed=SEED,random_networks=120,frequency_checks=checks,
             max_relative_transfer_error=worst_response,max_relative_moment_error=worst_moment,
             max_laplacian_rowsum_residual=worst_rowsum,
             base_eigenvalues=np.linalg.eigvalsh(H0).tolist(),base_exact_rank=3,
             factor_identity_max_absolute_error=worst_factor,
             algebraic3_physical4_max_transfer_difference=algebraic_error,
             pulse_max_absolute_difference=float(np.max(np.abs(q3-q4))),
             approximate_moment_lower_bound=(3*math.sqrt(3)-5)/4)
assert worst_response<1e-10 and worst_moment<1e-10
assert np.max(np.abs(q3-q4))<1e-8
here=Path(__file__).resolve().parent
(here/'verification-results.json').write_text(json.dumps(results,indent=2))
np.savez(here/'pulse-data.npz',times=times,q3=q3,q4=q4)
print(json.dumps(results,indent=2))
E. 文献61件:確認した範囲と未取得資料

本文を確認した資料と、要旨・書誌のみの資料を区別しています。61件全てを全文精読したという意味ではありません。追加した2件は、上記の確認範囲を明記した照合候補です。

11. 主要文献61件と確認範囲

本文確認済み=関連する定理・設定・導出を点検。要旨のみ=その範囲を超えた同値性判断には使用しない。プレプリント年と刊行年が異なる場合は併記。解説論文はその旨を記載。

番号・年文献確認範囲今回への意味
[1]
1973
Zwanzig — Nonlinear generalized Langevin equations要旨非線形系からの厳密GLEという出発点は既知。
[2]
2009
Darve, Solomon & Kia — Computing generalized Langevin equations and generalized Fokker–Planck equations要旨射影と記憶項を計算する先行研究。
[3]
2018
Zhu, Dominy & Venturi — On the estimation of the Mori–Zwanzig memory integral本文・定理3.1–3.5短記憶・t-model・階層近似の誤差と収束条件。
[4]
2017
Gouasmi, Parish & Duraisamy — A priori estimation of memory effects要旨非線形系の記憶推定。近似直交力学と真の核を区別。
[5]
2017
Kelly & Melbourne — Deterministic homogenization for fast–slow systems with chaotic noise本文・定理1.1/2.3高速カオスから拡散極限。弱収束と同一軌道誤差は別。
[6]
2022
Chevyrev et al. — Deterministic homogenization under optimal moment assumptions, Part 2要旨モーメント条件と確率極限の精密化。
[7]
2021
Chandramoorthy & Wang — On the probability of finding nonphysical solutions through shadowing要旨近い真軌道の存在だけから物理統計の正しさは出ない。
[8]
2026
de Wit et al. — Data-driven Mori–Zwanzig modeling of Lagrangian particle dynamics in turbulent flows著者稿本文乱流粒子の短期精度と長期統計の実験的再現。
[9]
2026
Stauffer, Gorji & Lunati — Surrogate Trajectories Along Probability Flows本文・§5/7.2一時刻周辺分布の保存と経路統計の保存を区別。
[10]
2016/17
Ma, Li & Liu — The Derivation and Approximation of Coarse-grained Dynamics from Langevin Dynamics本文・定理1/2有理近似と補助雑音によるFDT保持。
[11]
2016
Lei, Baker & Li — Data-driven parameterization of the generalized Langevin equation本文・式3–18短時間モーメント・積分核・補助状態を合わせる方法。
[12]
2021
Bockius et al. — Model reduction techniques for extended Markov parameterizations for GLE本文・正実性と実現相関からProny/正実補題でモデル化。実現できないフィットも扱う。
[13]
2023
Koyama — Exponential sum approximations of finite completely monotonic functions本文・定理2.14等正測度の指数和近似と幾何収束。
[14]
2025
Zimmerling, Druskin & Simoncini — Monotonicity, Bounds and Acceleration of Block Gauss and Gauss–Radau Quadrature著者稿本文・定理実Laplace変数のresolvent順序。時間域の行列順序と区別。
[15]
2013
Fenu et al. — Block Gauss and anti-Gauss quadrature with application to networks本文・序論と方法条件付きの成分別行列関数評価。
[16]
2003
Hansen & Pedersen — Jensen’s Operator Inequality本文・特徴付け作用素凸性は通常の凸性より強い。
[17]
2024
Alfonsi & Kebaier — Approximation of stochastic Volterra equations with kernels of completely monotone type要旨・後続定理との照合核が異なるSVEのL2誤差。原定理全体は未精読。
[18]
2023
Bayer & Breneis — Markovian approximations of stochastic Volterra equations with the fractional kernel要旨Gaussian求積による多因子化と強収束。
[19]
2024–26
Lang & Lu — Learning Memory Kernels in Generalized Langevin Equations本文・§1–4相関推定誤差から重み付き核誤差への保証。
[20]
2025/26
Lang & Lu — Error Analysis of GLE with Approximated Memory Kernels本文・序論、比較定理、§3/6同期した加法白色雑音で核摂動を評価。FDT雑音の変更は対象外。
[21]
2026 07
Braun, Hanke & Wolf — On data-driven parameterizations of multidimensional generalized Langevin dynamics要旨のみ二次ポテンシャル・多次元のMarkov実現。本文取得未了。
[22]
2026 09
Corneille et al. — Convergence in Hölder norms for Markovian approximations of stochastic Volterra equations本文・設定、定理3.15周辺ドリフト核と雑音フィルタをともに変更する経路誤差。
[23]
2025
Giona, Procopio & Pezzotti — Dynamic fluctuation-dissipation theory for GLE著者稿本文・前半と結論安定性、Markov実現、確率実現を区別。
[24]
2013
Dörfler & Bullo — Kron Reduction of Graphs with Applications to Electrical Networks著者本文・主要定理Schur補完、符号保存、内部経路による境界辺生成。
[25]
2022/23
Singh et al. — Time-Domain Generalization of Kron Reduction本文・定理1不均一R/Lでも時間域の縮約。対象素子が熱/RCとは異なる。
[26]
2015
Oyaro & Triverio — TurboMOR本文・Appendix A多端子RCの受動性と高次モーメント保存。
[27]
2020
Cheng et al. — Reduced Order Modeling of Diffusively Coupled Network Systems本文・最適辺重みグラフ構造を保つ拡散系の縮約。
[28]
2022
Min & Mallada — Learning Coherent Clusters in Weakly-Connected Network Systems本文・集約条件クラスター化による低次元化。
[29]
2020
Redmann — An L2_T-error bound for time-limited balanced truncation本文・誤差定理有限時間のL2保証そのものは既知。
[30]
2020
Dorschky, Reis & Voigt — Balanced truncation for symmetric second order systems本文・受動性条件二階系・受動性を保つ縮約。
[31]
2026 07
Xu et al. — FlexRC要旨のみ多端子RCの多点モーメント整合。
[32]
2025
Yin et al. — SMP-RCR本文・§I–III疎RC、モーメント一致、負素子を避ける課題。
[33]
1982
Matsumoto — RC admittance matrix realization by linear transformation要旨・書誌のみ最重要未比較。transformerless grounded RC合成の定理5。
[34]
2016
Brandts & Křížek — Factorization of CP-rank-3 completely positive matrices本文・§1.2/3、Corollary 3.6・式(6)基礎例・閾値1/2は既知定理の系。追究4の鋭い集約境界も同定理から導出。刊行版pp959,965–967を追加照合。
[35]
2004
Benvenuti & Farina — A Tutorial on the Positive Realization Problem本文・錐と最少実現正値性による次数増大という一般現象は既知。解説論文。
[36]
2021/22
Grussler, Damm & Sepulchre — Balanced truncation of k-positive systems本文内部正値性・対称性と低次数化の関係。
[37]
2001
Ganesh & Chen — RC-in RC-out model order reduction accurate up to second order moments要旨・書誌のみRC素子へ戻しながら初期モーメントを合わせる方法。本文未読。
[38]
2024
Codecasa et al. — Fast Error-Bounded MOR-Based Approximation of Heat Conduction Problems in Electronics機関公開要旨熱伝導の実用的誤差保証。本文比較は未了。
[39]
2023
Liljegren-Sailer — A time domain a posteriori error bound for balancing-related model order reduction要旨有限時間・非零初期値も扱う。
[40]
2020
Schröder & Voigt — Balanced Truncation with A Priori Error Bounds for LTI Systems with Nonzero Initial Value要旨初期値を含めた先験誤差保証。
[41]
2014/16
Fawzi & Parrilo — Self-scaled bounds for atomic cone ranks: applications to nonnegative rank and cp-rankarXiv:1404.3240v1の本文・§1/4、特に§4.2の式(51)、§4.5刊行版:Math. Programming 158(1):417–465(2016)。本ノートの式(51)・節番号とコードはarXiv:1404.3240v1に対応。閉性・CPランクSDP・K₂,₃例を確認し、同版のSDPを実装して厳密比較。
[42]
2019
ROHM — What is a Thermal Model?メーカー資料本文・pp1–3熱とRC回路の対応、測定からのCauer模型、各素子と材料層は1対1とは限らない。
[43]
2022
Luca Benvenuti — Minimal positive realizations: A survey著者稿の冒頭pp1–5を分担確認。§7/9の追加取得は403、未精読。Automatica 143, 110422。非負Hankelランクによる次数下界と実験からの区画数推定。更新survey。
[44]
2012/15
Fawzi & Parrilo — Lower bounds on nonnegative rank via nonnegative nuclear norms本文・§2.1–2.3、Theorem 3Math. Programming 153(1):41–66。近似非負ランクの定量的下界。誤差に頑健な次数認証の一般論は既知。
[45]
2017/18稿
Gribling, de Laat & Laurent — Lower bounds on matrix factorization ranks via noncommutative polynomial optimization本文・§3、§3.5.1 Lemma 11既存SDPを強めるモーメント階層。収束先を整数CPランクそのものと取り違えない。
[46]
1973
Richard A. Stein — RC admittance realization by grounded-capacitor structures出版社要旨・参考文献のみIJCTA 1(2):119–126。接地容量の多端子回路と最少容量個数を明示。最小性の厳密な範囲は本文未読。
[47]
2009
D. B. Kandić & B. D. Reljin — On Synthesis of Immitance Matrices of Transformerless RLC Networks公開要旨・書誌のみECCTD:303–306、DOI 10.1109/ECCTD.2009.5274986。非最小の共通接地RC実現も扱う。本文比較未了。
[48]
2008
Kandić & Reljin — Explicit Solution of the Inverse Eigenvalue Problem of Real Symmetric Matrices and Its Application to Electrical Network Synthesis本文・主要定理と§5。追究4で出版社PDFの式(5.3)–(5.4)も確認対称行列・符号条件と回路合成。driving-pointの構成を固定多端子の最小性と同一視しない。
[49]
2008
de Callafon et al. — General Realization Algorithm for Modal Identification of Linear Dynamic Systems本文・ERA/GRA、weighted Hankelの節J. Engineering Mechanics 134(9):712–722。有限の任意入力を扱う実現は既存。通常次数と物理的次数を区別。
[50]
2020
Fukunaga & Funaki — Transient thermal network model identification for power module packages本文・§2–5NOLTA 11(2):157–169。熱入力→温度の実測、逆畳み込み、雑音処理。今回との入出力差を明示。
[51]
2007
Kaczorek — Positive partial realization problem for linear discrete-time systems本文・定理と結論有限Markov系列の正値実現と構成の十分条件。全低次数候補を排除する議論とは区別。
[52]
2010/11稿
Bocci, Carlini & Rapallo — Perturbation of matrices and non-negative rank with a view toward statistical models本文・Theorem 2非負ランクが減らない近傍の存在。定性的な距離の存在を新規性にしない。
[53]
2026
Baeckelant, Vandaele & Gillis — Computing Lower Bounds on the Nonnegative Rank via Non-Convex Optimization Solversv1本文・§2–4。v2の更新書誌も確認古典的な下界を非凸最適化で計算する比較研究。今回の式の先取性を保証する資料ではない。
[54]
1981
松本直樹 — 線形変換によるRC回路網の構成 / Synthesis of RC Networks through Use of Linear Transformation本文・式(6b)/(9)、§4–5、回路図と結語。主要頁は画像でも確認明治大学科学技術研究所紀要19、11-1–11-15。共通帰線は全容量接地を意味しない。1982の代用にはしない。
[55]
1976
Adel Ahmed Ali — Some new aspects of congruence transformation as applied to RC ladder networks大学公開博士論文・§2.2、pp6–7の式(2.1)–(2.5)を画像確認正則な平方のHowitt変換とSchur補の不変性。素子値の総和と素子個数の最小化も区別。
[56]
2001
Naomi Shaked-Monderer — Minimal CP Rank本文・序論、Theorem 1.6、Example 2.1 p143ELA8:140–157。正成分化A+ε(A1)(A1)ᵀはHρの構成と一致。正確な閾値は同例にはない。
[57]
1998
J. B. M. Melissen — How different can colours be? Maximum separation of points on a spherical octant原論文の公開全文転載・§1/5、pp1501–1504、式(5.1)を分担確認Proc. R. Soc. A454:1499–1508。4点の最適分離から既知の定量的CP3排除式。今回の三集約境界とは別の極値問題。
[58]
2017/18
I. M. Bomze — Building a completely positive factorization本文・§2、§3.1–3.2、Theorem 3.1、§6CEJOR26:287–305。正対角合同によるCPランク不変性と正規化は既知。非一様対角の利用自体は新規でない。
[59]
1968
Richard Adolph Stein — On the synthesis of two-element-kind multiport networks大学の書誌・原要旨の転載。本文は取得できずUBC学位論文の新たな取得候補。1973著者との同一性・本文定理の連続性は未確定。impedanceの要旨をadmittance定理の代用にしない。
[60]
2003
Abraham Berman & Naomi Shaked-Monderer — Completely Positive Matrices著者所属機関の書誌を確認。対象本文は未取得World Scientific、DOI 10.1142/5273。追加査読による照合候補。小サイズ行列・CPランクの関連節と、三集約境界との同値性は本文照合待ち。
[61]
2015
Bomze, Dickinson & Still — The structure of completely positive matrices according to their CP-rank and CP-plus-rank著者所属機関の書誌・要旨を確認。関連定理の本文は未照合Linear Algebra and its Applications 482:191–206、DOI 10.1016/j.laa.2015.05.021。CP/CP-plusランクの位相的性質・最小分解の多重性。4×4の明示式や今回の最良境界を確認した資料ではない。