Skip to main content

tanh(x/xi)ベースの擬連続論理ゲート・比較演算子ライブラリ

Project description

kappalogic (v0.40)

v0.38で、6ゲート(AND, OR, NAND, NOR, XOR, XNOR)全部について (a,b)平面全体の完全な閉形式が出揃った(命題20、下の節参照)。 命題5・11〜15・19・20を通じて、v0.24からのシリーズが完成した。

v0.37で、TODOに残っていた「各ゲートの(a,b)平面全体の完全な閉形式」 という課題に、XORについて具体的な答えを出せた(命題19、下の節参照)。 torch_backend.py(v0.18)を使った高速な地図探索から見つかった、 新しい対数スケールの境界公式。

v0.30で、命題11・13・15を1つの一般理論(「NOT合成塔」)に統合できた (命題16)。ユーザーが当初から目指していた「統一理論」に、現時点で 一番近い成果だと思う。

v0.23で、v0.13から続いていたTODOの本丸(OR_nのnaive fold-vs-fuse 一致条件)に、閉じた形の十分条件と定量的な誤差上界を与えることが できた(命題10、下の節参照)。

PyPIに公開済み: pip install kappalogic(パッケージング・公開作業は ユーザー側で管理。このリポジトリ側は変更不要)。

kappa(x/ξ)(デフォルトはtanherf/algebraicにも切り替え可能)を 基本ブロックにして、離散的な論理演算・比較演算・場合分けを「実数上の 滑らかな式」として書き直すためのライブラリ。

v0.13からkappa(x/xi)k(x)と書けるようになった(sgnの完全な別名。 from kappalogic import k でそのまま使える)。v0.14では、TODO.mdの 「ゲージ理論的発想」(ξの局所/大域変換)に着手し、並進・ディレーション がアフィン群Aff(1,R)("ax+b group")のリー環をなし、かつ(x,ξ)半平面上の 双曲計量のキリングベクトル場に一致する、という構造を発見・検証した (gauge.py)。v0.15では、その構造とAND/OR系の命題4(勾配の非対称性) を橋渡しする命題5をtheory.pyに追加した。v0.16では、AND_n融合の 安全条件(命題3)に実は反例があることを発見・修正し、定量的な誤差上界 n*4*exp(-2C)を導出・検証した(下の節参照)。

開発の経緯・迷った点・見つけたことの詳しい記録は dev_notes.md を参照 (こちらは要約と現状の参照用)。今後の研究方向は TODO.md にまとめてある。

pip install -e .

構成

モジュール 内容
core.py sgn/reg/AND/OR/XOR/比較演算子など基本ゲート、n項融合版AND_n/OR_n
funcs.py int/par(整数・奇偶判定)、max/min/clamp、mod演算子・ディラックのデルタ函数近似(v0.21新規)
kernels.py tanh/erf/algebraicカーネルの切り替え
applications.py クロネッカーのデルタ、コラッツ漸化式、板チョコのPoisson源項
heat.py ξと拡散時間tの対応、熱核によるソフトな一致度報酬
search.py 勾配ベース探索専用の"softモード"とアニーリング解法(anneal_solve, l2_penalty, find_dont_care_variables)
quantum_well.py 有限区間の熱核・無限井戸型ポテンシャルの量子プロパゲータ(鏡像法)
field_theory.py φ^4理論のキンクソリトン(sgnが厳密解であることの証明付き)
stat_mech.py 熱核による分配関数、SUSY QMのWitten指数(McKean-Singer型)
info_theory.py de Bruijnの恒等式(熱拡散のエントロピー変化率とフィッシャー情報量)、フィッシャー情報幾何とgauge.pyの双曲計量の一致(v0.36新規)
topology.py モース理論によるオイラー標数の計算
spacetime.py 光円錐の指示関数
bridge.py Σ(離散和)と∫(連続積分)の橋渡し、階乗とΓ関数、離散積Πの橋渡し(v0.35新規)
electronic_structure.py フェルミ・ディラック占有数=sgn(x,2kT)、DFTの電子スメアリング
theory.py reg/AND/OR系の勾配構造の厳密な命題群(証明付き。命題1〜6、v0.16でAND側のバグ修正、v0.17でOR側の対数スケール則を追加)
identities.py k(x)=tanh(x/xi)が満たす加法定理・n倍角公式・連分数・部分分数展開・無限積・Gudermannian函数(kernel="tanh"限定、v0.13新規)、積分形(v0.22新規)
gauge.py ξの大域/局所変換の生成子・交換子・アフィン群構造・(x,ξ)半平面のキリングベクトル場・測地線の保存量・局所ゲージ接続(v0.14新規)
dynamics.py 強引に埋め込んだ不動点でのKoenigs座標・アベル関数・連続反復(分数反復)の構成
torch_backend.py PyTorchによるautograd版のk/reg/AND/OR等(オプション依存、pip install kappalogic[torch]。v0.18新規)
examples/ 実行できるデモ4本

使用例

from kappalogic import gt, AND, par, collatz_sequence, choc_bar_source
from kappalogic import xi_of_time, heat_step_profile, anneal_solve, soft_gt, l2_penalty
from kappalogic import kink_profile, kink_energy_exact, fermi_occupation
from kappalogic import sgn, k, rapidity, addition, or_gradient_closed_form

gt(5, 3)                          # 1.0
kink_energy_exact(xi=1.0)         # 4/3 (ソリトンの厳密な質量)
fermi_occupation(eps=0.3, mu=0.5, kT=0.1)  # フェルミ・ディラック分布と機械精度で一致

k(5) == sgn(5)                    # True (kはsgnの別名。kernel="tanh"限定の恒等式群はkを前提にする)
rapidity(1.0, xi=0.5)             # (1+k(x))/(1-k(x)) = exp(2x/xi)

検証済みの主な結果

v0.1で見つかった原案のバグ3件(修正済み、回帰テストあり)

  • (A>B),(A<B): reg()が符号を2乗で消すため、実際には(A≠B)と同じ値になっていた
  • par(x): 偶数で-1を返していた(int(x)-int(x/2)に修正)
  • コラッツ漸化式: 「ステップ番号の偶奇」でなく「値自体の偶奇」で分岐するよう修正

v0.16で見つかった命題3のバグ(修正済み、回帰テストあり)

  • 当初(v0.7)の命題3・fusion_is_safeは「畳み込みの部分積s_kが 全部Cxiを超えれば安全」と主張していたが、これは誤りだった。 反例: values=[100,100,0.01,50](xi=1,C=3)は部分積が全部 Cxiを超えるため「安全」と判定されるが、実際は naive_fold≈2.5e-5, AND_n(融合版)=1.0とほぼ正反対の値になる (乱数2万試行では、旧条件が「安全」と判定したケースの約12%で 実際には不一致が起きていた。Cを3→5→8と大きくしても改善しない 構造的なバグだった)。正しい条件は「個々の値a_1,...,anが 全部C*xiを超える」ことであり、この修正版では乱数検証で不一致が 1件も見つからなかった。加えて |naive_fold-AND_n| <= n*4*exp(-2C) という定量的な誤差上界も導出・検証した(fusion_error_bound)。 経緯はdev_notes.md v0.16参照。

検証済みの技術的な発見

  • kernel="erf"が階段状初期条件の熱拡散の厳密解と一致(有限差分と誤差5.7e-5)
  • 有限区間の熱核・無限井戸型ポテンシャルの量子プロパゲータが鏡像法+εプリスクリプションで固有関数展開と機械精度(diff~1e-13)で一致
  • SUSY QMのWitten指数がβ=0.01〜10で厳密に1.000000(McKean-Singer型)
  • de Bruijnの恒等式(熱拡散のエントロピー変化率=フィッシャー情報量)が誤差1e-10で一致
  • モース理論によるオイラー標数がトーラス(0)・球面(2)で教科書通り
  • フェルミ・ディラック分布がsgn(x,2kT)と機械精度で一致(DFTの電子スメアリングと同一構造)
  • Σ_{n=0}^N n! と∫_0^{N+1}(floor(x))!dxが相対誤差6e-5で一致
  • キンクソリトンtanh(x/ξ)がφ^4理論のEOMを厳密に(sympyの記号微分で)満たし、厳密エネルギーE=4/(3ξ)を導出
  • AND_n融合とnaive foldの不一致は「個々の値がξと同スケールになったとき」に起きることを確認し、|naive_fold-AND_n| <= n*4*exp(-2C)という誤差上界を導出・検証した(fusion_is_safe, fusion_error_bound、v0.16で条件を修正)
  • OR(a,b;ξ)は、a,bが両方とも非ゼロなのに広い範囲で誤って0(偽)を返してしまうことを発見し、その誤分類境界がu+v=(1/2)ln(1/ξ)+K(u=a/ξ,v=b/ξ)という対数閾値の直線に収束することを閉形式で導出・検証した(v0.19、or_misclassification_boundary_sum)
  • L2正則化で0に張り付く"don't care"変数を、符号反転に対する充足度の不変性で検出できる(find_dont_care_variables、誤検出なしを確認)
  • 自然には不動点を持たない場所にgaussian_matchで不動点を強引に埋め込み、Koenigsの関数方程式・アベルの関数方程式を相対誤差1e-6〜1e-11で構成(force_fixed_point, abel_function)
  • アベル関数から連続反復(分数反復)g^t(x)を構成し、半反復を2回合成すると元の写像に一致(diff~1e-9)、分数反復の加法性も確認(fractional_iterate)

v0.13: k(x)=tanh(x/ξ)の恒等式集(identities.py)

「既存の激ムズ離散問題を、同値性・保存量を保ったままkappalogicで 連続化し、用意した公式で簡略化・高速化して、あとは解析学の 既存手法に丸投げする」という方針(コラッツ予想やP対NP問題のような 難問を、運が良ければ1つでも解ければ勝ち、という位置づけ)のための "道具箱"として、tanhが双曲線関数であることから出てくる古典的な 恒等式を整理・数値検証した。すべてkernel="tanh"のときにしか 成り立たない(erf/algebraicカーネルには一般には拡張されない。 テストのtest_identities_are_specific_to_tanh_kernelで明示的に 反例を確認済み)。

恒等式 検証結果
ラピディティ(Cayley)恒等式 (1+k(x))/(1-k(x)) = exp(2x/ξ) 相対誤差 ~1e-13(機械精度)
加法定理 k(x+y) = (k(x)+k(y))/(1+k(x)k(y)) 絶対誤差 ~1e-13
n倍角公式 k(nx) = ((1+k)^n-(1-k)^n)/((1+k)^n+(1-k)^n) n=2,3,5,7,11で機械精度
Lambertの連分数(1768年) 四則演算のみでk(x)を再構成 depth=10で誤差<2e-9
Mittag-Leffler展開(極の和) tanhの極(松原振動数と同型)を全部足す N=1e5項で誤差~1e-5(収束は遅い)
Weierstrass無限積 同じ零点・極を掛け合わせる双対表現 N=1000項で誤差~1e-6
Gudermannian函数 k(x) = sin(gd(x/ξ)) 誤差0(完全一致)

誠実な評価: これらはいずれも数学的に既知(tanhが三角関数の 双曲線版であることの帰結、Lambertの連分数は1768年のπの無理数性の 証明そのもの)。新発見ではない。ここでの作業は「kappalogicの k(x)という書き方に翻訳し、実際に手を動かして数値検証し、 ライブラリの他の部分(フェルミ・ディラック分布=松原振動数の構造、 "algebraic"カーネル=連分数の設計思想との類似)との接続点を整理した こと」に限られる。加法定理・n倍角公式をAND_n/OR_nの融合処理に 直接転用できるかは未検証(今後の課題、TODO.md参照)。

v0.13: OR系の証明の空白地帯(theory.py命題4)

theory.pyの命題1〜3はいずれもAND系だけを扱っており、OR系には 対応する命題が存在しなかった。実際にAND/ORの勾配地形を比較すると、 質的に違う挙動が観測された(gradient_landscape_statsで再現可能。 ξ=1e-3、a,bをξの±8倍の範囲でサンプリング、5万〜20万件):

指標 AND OR
勾配がほぼ0(<1e-3)になる割合 ~6% ~53%
観測された最大勾配 ~1.0 ~1000超

導出した閉形式(or_gradient_closed_form、数値微分との中央値相対誤差 ~2.6e-6で一致):

p := (1-reg(a))(1-reg(b))
d/da OR(a,b) = reg'(a) * (1-reg(b)) * reg'(p)

命題1の「reg'(x)はx=x*≈0.658ξ付近でしか大きくならない鋭いバンプ 関数」という性質が、この式には**"a"と"p(a,bの合成量)"という2つの 独立な引数に掛け算の形で登場する。つまりOR(a,b)の勾配が有効に 効くには「aがx付近」かつ「pもx付近」という2つの共鳴条件を同時に 満たす**必要がある(ANDの勾配b*reg'(ab)は共鳴条件が1つだけ)。 この「共鳴条件が1個 vs 2個」という違いが、上の表の非対称性の 構造的な理由になっている。

さらに、この違いはfold/fuseの不一致の"質"にも表れる。AND_nの 不一致(命題3)は基本的に「ぼやけ」だが、OR_nの不一致は勾配地形が 「ほぼ平坦、局所的に激烈」という二値的な構造をしているせいで、 naive foldとOR_n(融合版)が0/1のように正反対に割れることがある (or_fusion_disagreement_rate、7項・乱数2万試行でOR側は0.2%前後の 頻度で発生、AND側は同条件で発生ゼロ)。

正直な限界: 閉形式そのものは数値検証込みで確信を持って正しいと 言えるが、命題3のような「n項版の安全条件(単純な閾値1つで判定できる 指標)」にはまだ落とし込めていない。ORの条件は「aとp」という異なる スケールにまたがるため、命題3の"部分積"のような単純な指標には 収まらない可能性が高い。文献調査はしていないので新規性の断定は 避けるが、少なくとも本ライブラリのソース上にはこれまで記載されて いなかった具体的な観察と、それを説明する検証済みの式である。

v0.14: ξの局所/大域変換とゲージ理論的構造(gauge.py)

TODO.mdのA項「局所的なξ変換」「大域的なξ変換」「交換子」「リー群」 「保存量」「キリングベクトル場」を、実際に手を動かして(sympyで 記号的に、scipyで数値的に)全部検証した。結論から言うと、 「並進」と「ξのディレーション」という2つの操作は、 アフィン群Aff(1,R)="ax+b group"のリー環をなし、これは(x,ξ)を 座標とする半平面上の双曲計量のキリングベクトル場と厳密に一致する

1. 大域的ξ変換の正体

k(x; λξ) = k(x/λ; ξ) が厳密に成り立つ(機械精度で確認)。つまり 「ξをλ倍する」ことと「xを1/λ倍する」ことは同一の操作である。 無限小生成子で見ると、ξ→e^θξの生成子(d/dθ|_0)は、xのディレーション 生成子 X=x·d/dx のちょうどマイナスに一致する(数値微分で確認、 誤差~1e-6)。

2. 交換子とリー環

並進 T=d/dx とディレーション D=x·d/dx の交換子は

[D, T] = -T

これはまさにアフィン群Aff(1,R) = {x → a·x+b : a>0}(通称 "ax+b group")のリー環 aff(1) の定義関係そのもの(sympyで記号的に 確認、厳密に-1)。この群は2次元・非可換・可解で、実は連続ウェーブレット 変換の対称性としても知られる標準的な群(ウェーブレット変換は 「位置(並進)・スケール(ディレーション)」で母関数を動かして作るが、 これはkappalogicのk((x-x0)/ξ)という(位置x0、スケールξ)の パラメータ化と全く同じ構造)。

3. キリングベクトル場と保存量

(x, ξ)を座標とする上半平面(ξ>0)に、双曲計量

ds^2 = (dx^2 + dξ^2) / ξ^2

を入れると、並進V1=d/dxとディレーションV2=x·d/dx+ξ·d/dξは どちらもこの計量のキリングベクトル場(リー微分L_Vg=0)になる ことをsympyで確認した(零行列に厳密一致)。さらにこの半平面上の 測地線を数値積分すると、キリングベクトル場に対応する「運動量」 p1=g(V1,γ'), p2=g(V2,γ')が、標準的なネーターの定理どおり測地線に 沿って厳密に保存することを確認した(標準偏差~1e-15、機械精度)。

この双曲計量+アフィン群という組み合わせは、実は物理でよく知られた 構造そのもの:上半平面のアフィン部分群(Aff(1,R)_+)はPSL(2,R)の 「ボレル部分群」であり、AdS2/CFT1のようなホログラフィックな 繰り込み群(RG)フローの言語(境界座標=x、RGスケール=ξ)とも 自然に対応する。これはTODO.md C項「ξの意味論を統一する」への 一つの答えの候補になる: ξ = RGスケール、x = 境界(理論の)座標、 という解釈。

4. 局所ξ変換とゲージ接続

ξを場ξ(x)にする(位置ごとに変える)と、φ(x):=x/ξ(x)の微分は

φ'(x) = (1/ξ(x)) * (1 - x·A(x)),   A(x) := (log ξ(x))'(x)

と書ける。ゲージ変換ξ(x)→λ(x)ξ(x)の下でA(x)は

A(x) → A(x) + (log λ(x))'(x)

と、通常のU(1)ゲージ場(電磁場のA_μ→A_μ+∂_μα)と全く同じ 「完全微分だけずれる」変換則に従う(sympyで確認)。つまり 「ξを局所化すると、微分を辻褄合わせするための接続場A(x)が自然に 必要になる」という、ゲージ理論の基本発想がそのまま成り立つ。

正直な評価

上記の構造(アフィン群、双曲計量とそのキリングベクトル場、 局所化で現れる接続場)はすべて数学的には古典的である (双曲幾何の教科書、ウェーブレット変換の表現論、Weyl変換/dilaton 場の物理でそれぞれ独立に知られている)。ここでの新規性は、 kappalogicの「位置x・スケールξ」というパラメータ化が、これら 3つの古典的構造の具体例になっていることを実際に手を動かして 確認し、TODO.mdの疑問(交換子は?リー群をなすか?保存量は? キリングベクトル場は?)に全部具体的な答えを与えたことに限られる。 「新しい定理」と呼べるレベルの主張はまだできていない ——測地線の保存量が、AND/OR/勾配消失といったkappalogic自身の "論理ゲート"の挙動と具体的にどう結びつくかは、今回はまだ 繋げられていない(次にやるとしたら、ここが本丸)。

v0.15: gauge.pyとtheory.pyの橋渡し(命題5)

v0.14のgauge.pyで見つけた「大域的ディレーション不変性」 k(x;λξ)=k(x/λ;ξ)が、命題4(ORの二重共鳴)をもう一段深く説明する。

AND(a,b;ξ) = reg(a*b;ξ) = tanh(a*b/ξ)^2a*b/ξという 単一の比だけの関数である。したがって

AND(λ*a, b; λ*ξ) = AND(a, b; ξ)

が全てのλ>0で厳密に成り立つ(sympyで確認)。一方 OR(a,b;ξ) = NOT(NOT(a;ξ)*NOT(b;ξ);ξ) は、aとbをそれぞれ別々に tanhへ通してから合成する構造のため、単一の比には還元できず、 OR(λ*a,b;λ*ξ) ≠ OR(a,b;ξ) が一般に成り立つ(具体例: a=1.3,b=-0.8,ξ=0.37,λ=2.7でOR(a,b;ξ)=0.99999976 → OR(λa,b;λξ)=0.99999608と値が変わる)。

つまり命題4の「AND=共鳴条件1個、OR=共鳴条件2個」という 非対称性は、「ANDは1変数(a*b/ξ)に還元できるが、ORは2変数 (a/ξ, b/ξ)を本質的に必要とする」というより根本的な事実の帰結、 と理解できる。これ自体は定義から追える事実の言い換えに過ぎず 新しい定理ではないが、v0.14で「gauge.pyの構造とtheory.pyの命題4の 橋渡しがまだない」と明記していた穴に、部分的な橋を架けられた。

v0.16: 命題3(AND_n融合の安全条件)の反例と修正

v0.7時点の命題3は誤りだった。 当初の主張は「畳み込みの "部分積" s_k=a1*...ak が全部Cξを超えれば、naive foldと AND_n(融合版)が一致する」というものだったが、次の反例が見つかった:

values = [100, 100, 0.01, 50]   (ξ=1, C=3)
部分積 s_k = [100, 10000, 100, 5000]   ← 全部 C*ξ=3 を超える → 「安全」と誤判定
naive_fold ≈ 2.5e-5
AND_n(融合版) = 1.0             ← ほぼ正反対の値

乱数2万試行で検証したところ、旧条件が「安全」と判定したケースの **約12%**で実際には不一致(gap>0.1)が起きていた。しかもこの12% という失敗率はC=3,5,8のどれでも変わらない——Cを大きくしても 直らない構造的な誤りだった。

原因: naive foldはacc_k = reg(acc_{k-1}*a_k)という漸化式。 acc_{k-1}が一度reg()を通ると値域は[0,1)に飽和し、それ以前の 部分積の大きさの情報は失われる。次段の結果は実質的に reg(a_k)程度で決まるので、「部分積が大きいか」ではなく **「直近の個々の値a_kが大きいか」**が本質だった。

修正後の正しい条件: 個々の値 a_1,...,a_nすべて |a_k| > C*ξ を満たすこと(部分積ではなく個別の値についての条件)。 この修正条件下では乱数検証(n=3〜100、C=3,5,8,10)で不一致が 1件も見つからなかった。さらに定量的な誤差上界も導出・検証した:

|naive_fold - AND_n(融合版)| <= n * 4*exp(-2C)

(導出: 1-reg(x) <= 4*exp(-2*x/ξ) (x>0側、命題1のreg'の話と同根の 指数飽和)。各段でこの未飽和度が高々4exp(-2C)ずつ新たに混入すると 考えるとn段でn*4exp(-2C)という上界になる。乱数検証では実際の gapは常にこの上界の1/3以下に収まっていた。fusion_error_bound参照)。

この修正は、外部のAI相談者からの「経験則(99.95%)を、厳密な 不等式の証明に格上げできないか」という指摘がきっかけになった。 実際に手を動かして確認したところ、格上げする前に土台の条件式 自体に反例があることが先に見つかった形になる。指摘は正しかったが、 想定と違う場所に穴があった。

v0.17: ORの"第二共鳴"は対数補正つきでスケールする(命題6)

命題4で、OR(a,b)の勾配が効くには (i) aがx*=ξ·u付近、 (ii) p=(1-reg(a))(1-reg(b))もx付近、という2条件が同時に要る ことを見た。ここでaをc·ξ(c=a/ξは固定した定数)に固定したとき、 「(ii)を満たすために必要なbの位置」がξとともにどうスケールするか を調べた。

素朴には「x*=ξ·uと同じくbもO(ξ)だろう」と予想したくなるが、 実際にはbはO(ξ)ではなく、O(ξ·log(1/ξ))というよりゆっくり 減衰する形になる。d/db[NOT(b)·reg'(p)]=0を解くと、 b=v*·ξ(v*=b*/ξ)は、ξ→0の漸近極限で

v* = -(1/2)·ln(ξ) - (1/2)·ln(w0 / (4·(1-tanh(c)²)))

という閉形式に厳密に収束する。ここでw0は tanh(w) + w·(1-3·tanh(w)²) = 0 の(u*より大きい側の)唯一解 w0 ≈ 1.0095565499という普遍定数(cによらない)。

対数係数「-1/2·ln(ξ)」の部分はcの値に依らず常に厳密に1/2 であること(c=0.3, u*, 1.0, 2.0の4通りで確認)、そして定数項は 上の式でcに依存して決まることを、数値的に確認した(ξ=1e-4〜1e-8で 実際の最適点をグリッド探索し、閉形式との差が1e-5〜1e-9のオーダーで ξ→0とともに縮むことを確認、or_second_resonance_locationor_second_resonance_numeric_argmax参照)。

つまりAND側の唯一の共鳴点x*=ξ·u*が正確にξに比例するのに対し、 OR側の"第二の"共鳴点はξ·log(1/ξ)という対数補正つきでしかスケール しない——これは命題4の非対称性に、これまで知られていなかった 定量的な次元をもう一つ加える発見。

正直な限界: この閉形式はξ→0の漸近極限で導出したもので、有限のξ では(数値検証の通り)小さいがゼロでない誤差がある。cを固定した ときの話であり、a自体を動かした場合の(a,b)平面全体の"危険領域"の 形はまだ描けていない。

v0.18: PyTorchによる高速化(torch_backend.py、オプション依存)

ユーザーから「計算をラクにするため、トークンを消費しないために PyTorchとか統合する?」という提案があり、TODO.md H項(PyTorch対応) を兼ねてtorch_backend.pyを追加した。torchはオプション依存 (pip install kappalogic[torch])で、torchが無くてもkappalogic 本体は問題なく動く(kappalogic/__init__.pyはtorch_backendを インポートしない)。

これまでの探索(命題4・6など)は、numpyの有限差分(中心差分、 誤差はhの選び方次第)や、数十万点のグリッド探索で最適点(共鳴点)を 探す、という力技に頼っていた。torch.autogradを使うと:

  • 閉形式の検証が、有限差分の打ち切り誤差なしにできる (or_gradient_closed_formとの比較で、誤差ではなく完全に ビット単位で一致することを確認: abs diff: 0.0)
  • 最適点(argmax)を、グリッド探索ではなくAdamでの勾配上昇法で 数百ステップで見つけられる(find_argmax_1d)
  • (a,b)平面のような2次元の"危険領域"の地図を、バッチでまとめて 計算できる(or_danger_landscape: 300×300点の勾配地図が 0.013秒。同じものをnumpyの二重forループ+有限差分で計算すると 0.58秒——約45倍速い)

この高速化を使って、命題6(aを固定した1次元の断面)の先にある、 **(a,b)平面全体でのORの"危険地図"**を実際に描いてみた。すると、 命題6の元になった近似曲線

(1-reg(a))·(1-reg(b)) = ξ·u*

が、危険地図の"尾根"(|∇OR|が最大になる曲線)を数%〜十数%程度の 相対誤差でおおむね近似できていることを確認した(exact_danger_curve_residualor_danger_landscape参照。境界付近では誤差が大きくなる)。

正直な限界: この曲線は命題6と同じく近似であり、真の尾根には 命題6のw0のような補正項があるはずだが、2次元版のその補正項は 今回導出できていない。それでも、(a,b)平面全体の危険領域を 「ひとつの陰関数曲線」で近似できる、という具体的な見取り図が 得られたのは収穫で、次にこの曲線を精密化するのが自然な一手。

v0.19: ORが"非ゼロの入力なのに誤って偽を返す"領域(命題8)

命題6・v0.18の危険地図を追いかけていて、勾配ではなくOR(a,b)の 値そのものが、a,bが両方とも非ゼロなのに誤って0(偽)に近い値を 返してしまう領域が、実はとても広いことに気づいた。

具体例(ξ=1e-3、u=a/ξ, v=b/ξとして):

u,vがどちらも0.5〜2.0程度の"そこそこ非ゼロ"な組み合わせでは、
OR(a,b)はほぼ厳密に0.0を返す(例: u=v=2.0でもOR=0.000185)。
u=v=2.5になって初めてOR=0.63程度まで持ち直す。

つまり、a、bという2つの入力が両方とも「明らかに0ではない」のに、 OR(a,b;ξ)は「両方とも偽」と誤判定してしまう——直感に反する、 かなり広い誤分類領域が存在する。

閉形式(v0.19): OR(a,b;ξ)=0.5となる境界を u=a/ξ, v=b/ξ の 言葉で調べると、ξ→0の漸近極限で

u + v = (1/2)·ln(1/ξ) + K,   K = (1/2)·ln(16/arctanh(1/√2)) ≈ 1.4494

という直線(u,vそれぞれではなく、その"和"だけで決まる)に 厳密に収束することを導出・検証した。u/v比を0.2〜5の範囲で 振っても、境界でのu+vの値は1%以内でほぼ一定(直線であることの 確認)。ξ=1e-4〜1e-12まで検証したところ、実際の境界と閉形式の 差は、ξを10倍小さくするたびにちょうど10分の1に縮んでいく (O(ξ)の収束を確認、ξ=1e-12で差~4.7e-7)。比が極端(0.01倍や 100倍)になると近似の精度は数%程度に落ちる(軸に近い領域は 今回の導出の前提=「両方とも大きいu,v」から外れるため)。

この命題の意味: AND(a,b)=reg(a·b;ξ)は、a,bが非ゼロで 固定されている限り、ξ→0とともに必ず正しく1に収束する (a,bがどれだけ小さくても、ξがそれよりさらに小さくなればいずれ 検出される——線形の閾値)。しかしOR(a,b;ξ)は、a,bを固定した ままξ→0すると、u=a/ξ, v=b/ξはどんどん大きくなる一方、 「両方の非ゼロ性を検出するのに必要なu+vの閾値」自体も log(1/ξ)で際限なく大きくなっていく。この2つの発散のスピードの 兼ね合い次第では、"ξを小さくすればいずれ正しく判定できる"という (このライブラリの他の多くの命題が暗黙に仮定している)直感が、 OR側では必ずしも成り立たない、という点を具体的に示せたのが収穫。

正直な限界: 境界の"形"(u+v=const、直線であること)は数値的な 観察であり、命題6のw0のような厳密な変分法での再導出はまだ 行っていない。対数の係数1/2と定数Kは、sech^2の漸近展開から 閉形式で導出し、桁ごとの収束を確認済みなのでこれ自体は確信を 持って正しいと言えるが、n項版(命題3・命題4の残課題と同じ形)への 一般化はまだ手を付けていない。

v0.20: 命題8のn項一般化(命題9)——融合版OR_nの誤分類境界

命題8(2引数)がn引数にきれいに一般化できるか調べた。融合版 OR_n(a_1,...,a_n;ξ) = 1 - reg(Π_k NOT(a_k); ξ) の"=0.5となる境界"を u_k := a_k/ξ の言葉で調べると、命題8の「u+v=直線」が、そのまま 「総和Σu_kが一定」という形に一般化されることを見つけた:

Σ_k u_k = (1/2)·ln(1/ξ) + K(n),   K(n) = (1/2)·ln(4ⁿ/A)

(A=arctanh(1/√2)。K(2)は命題8のK と厳密に一致する。)

数値検証: 全項が同じ大きさの対称なケースでn=2,3,5,8,12について、 ξを1e-10, 1e-30, 1e-60(多倍長精度で計算)まで小さくすると、 実際の境界と予測値の差が着実に縮むことを確認した(n=12, ξ=1e-60で 差~3e-5)。重みの配分(u_kの内訳)を変えても、総和Σu_kが同じ 境界にほぼ収まることも確認した(配分に依らず"総和"だけが本質的な 量であることの傍証)。

重要な但し書き: これは"融合版"OR_n自体が正しい値を返すか どうかの境界であり、命題3・命題4が扱っていた「naive fold(逐次 計算)と融合版が一致するか」という、TODO.mdの本丸だった問題とは 別物である。実際に調べたところ、「Σu_kが命題9の閾値を十分超えて いる」という条件だけでは、naive foldと融合版の一致は保証されない (乱数実験で、条件を満たしていてもnaive foldが0(偽)に壊滅的に 張り付いてしまうケースが約半数見つかった。おそらく畳み込みの 途中で"程よく非ゼロ"な値同士が連続して出会うタイミングに依存する ため)。**したがって、「naive foldとOR_n融合版が一致するための n項条件」は依然として未解決のまま残る。**命題9は、それとは 独立した(しかし関連の深い)「融合版OR_n自体がいつ正しいか」という 問いに答えたもの。

v0.21: 細かいTODO消化(MOD演算子、ディラックのデルタ函数、ドキュメント整備)

TODO.md B・H項の「簡単に終わりそうな」項目をまとめて片付けた回。

MOD演算子とディラックのデルタ函数(funcs.py)

  • modf(x, n): x mod npar(x)(奇数判定)を一般化する形で 作った——「x ≡ r (mod n)」の検出はintf((x-r)/n)で書けるので、 sum_{r=0}^{n-1} r * intf((x-r)/n)とすればx mod nの値そのものが 得られる。整数xについてPythonのx % nと完全一致することを確認済み (負の数にも対応)。
  • delta_approx(x, xi): ディラックのデルタ函数δ(x)の近似。 sgn(x;xi)をシグモイド形(sgn+1)/2に直した導関数を取ると NOT(x;xi)/(2*xi)という、既存のプリミティブだけで書ける形になる。 正規化(∫δ_xi(x)dx=1、誤差<1e-12)とふるい分け性質 (∫δ_xi(x)f(x)dx→f(0))を数値積分で確認済み。

differentiable programmingとの接続点

kappalogicのAND/OR/regは、ニューロシンボリックAI分野の 微分可能論理(differentiable/fuzzy logic)の研究、特に Logic Tensor Networks(Badreddine et al. 2022, "single-passing"の 概念の出典)やvan Krieken et al. (2022, t-normの勾配解析の手法)と 同じ問題意識(離散論理を勾配降下で最適化したい)を共有している。

大きな違いは、標準的なt-norm/t-conorm(積t-norm、Łukasiewicz t-norm等)が[0,1]上の"真偽の度合い"を表す値に作用するのに対し、 kappalogicのreg(x)=tanh(x/ξ)²は実数直線全体を受け取り「ゼロか 非ゼロか」を判定する非単調な検出器であること(README冒頭・ theory.pyの背景を参照)。この違いのため、命題1〜9で見たような (t-norm文献にはない)"共鳴"や"対数閾値の誤分類領域"のような現象が 起きる。difflogic(Petersen et al.、論理ゲートを直接学習する ニューラルネットワーク)のような、シグモイドベースの緩和を使う 既存手法と比べたときの得失(勾配消失パターンの違いなど)は、 今回具体的な数値・閉形式で比較できる形にまとめた(命題4・6・8・9)。

誤差のオーダー早見表

このライブラリの各命題・恒等式が、どのオーダーの誤差で成り立つかを 一覧にしておく(詳細は各モジュールのdocstring参照)。

対象 誤差のオーダー 該当箇所
単一ゲートの飽和誤差 1-reg(x) (|x|>Cξ) O(exp(-2C))(具体的に4*exp(-2C)以下) theory.py(命題1・3の基礎)
AND_n融合とnaive foldの誤差(個々の値が全部C·ξ超) O(n*exp(-2C)) fusion_error_bound (命題3, v0.16)
OR(a,b)の勾配の閉形式と数値微分の一致 有限差分由来の誤差(torch使用時は0、機械精度で厳密一致) or_gradient_closed_form, torch_backend.py
ORの第二共鳴点の閉形式 O(ξ)(ξ→0で線形に縮小、命題6) or_second_resonance_location
ORの誤分類境界(2引数・n引数) O(ξ)(ξ→0で線形に縮小、命題8・9) or_misclassification_boundary_sum, or_n_misclassification_boundary_sum
Lambertの連分数(k(x)の近似) depth=10で<2e-9、depth=20で機械精度 identities.py
Mittag-Leffler展開・Weierstrass積 収束が遅い(N=1e5項で~1e-5N=1000項で~1e-6) identities.py
双曲計量の測地線の保存量 機械精度(~1e-15) gauge.py

v0.22: 積分形(identities.py、TODO.md A項)

微分形(命題1〜9)の先に手つかずで残っていた「積分形」に着手した。 tanhの原始関数が古典的に知られていることを使い、以下を導出・検証した (すべて数値微分との差<1e-10で確認):

∫k(x)dx    = ξ·ln(cosh(x/ξ))          (k(x)=tanh(x/ξ))
∫reg(x)dx  = x - ξ·k(x)                (reg(x)=tanh(x/ξ)²)
∫NOT(x)dx  = ξ·k(x)                    (NOT(x)=1-reg(x))
∫AND(a,b)da = a - (ξ/b)·k(a·b)         (bは固定、b≠0)
∫sech(x/ξ)dx = ξ·gd(x/ξ)               (gdはGudermannian函数)

reg+NOT=1なので、積分もintegral_of_reg+integral_of_NOT=xと厳密に 整合する(交差検証済み)。TODO.mdで「Gudermannian函数がヒントに なりそう」と書いていた点は、想定と少し違う形で当たっていた: gd(u)自身がk(x)の原始関数なのではなく、sech(x/ξ)(=NOTの平方根に 相当する量)の原始関数がgd(x/ξ)である、という関係だった。

物理対応(stat_mech.pyとの接続): ∫k(x)dx = ξ·ln(cosh(x/ξ))は、 1スピン・外部磁場hのIsing模型の分配関数Z=2cosh(h)の対数 ln Z = ln2 + ln cosh(h)そのものである。統計力学の標準的な関係 「磁化(=期待値)を積分すると対数分配関数になる」 (d(ln Z)/dh = tanh(h))の言い換えになっており、x/ξが 「場/温度」という、このライブラリで繰り返し出てくる対応の もう一つの実例になっている。

正直な限界: これらの積分公式自体は微積分の基本(tanhの原始関数を 求めるだけ)であり、新しい数学ではない。新規性は、これらを kappalogicの枠組みに翻訳し、stat_mech.pyの分配関数との対応を 明示できたことに限られる。OR側の積分形(NOT/積/NOTの入れ子構造)は 今回まだ手を付けていない。

v0.23: ついに本丸——naive foldとOR_n融合版が一致するn項条件(命題10)

v0.13の命題4の直後からTODO.mdの本丸として残っていた課題 (「naive fold(逐次計算)とOR_n融合版が一致するn項条件を、 命題3(AND版)のような閉じた形で書けないか」)に、ついに答えが出た。

鍵となる観察

naive foldの漸化式acc_k = OR(acc_{k-1}, a_k)を、 m_k := NOT(acc_k)(「どれだけ偽か」を表す量、(0,1]の範囲)の 言葉で書き直すと、m_k = phi(phi(m_{k-1}*s_k))という二重NOTの 形になる(phi:=NOT、s_k:=NOT(a_k))。このphi(phi(w))という合成を 調べると、wがξより十分小さい(w≪ξ)ときにだけ極端に小さい値 (「真」)に収束し、そうでなければ1(「偽」)にほぼ張り付くという、 鋭い閾値挙動をすることが分かった。

m_{k-1}<=1は常に成り立つので、m_{k-1}*s_k <= s_k。つまり s_k(=次の値a_kの"偽らしさ")自体がξより十分小さければ、 それまでの畳み込みがどれだけ怪しい状態だったか(m_{k-1}の値)に 関係なく、必ず正しく「真」に転じる

定理(命題10)

s_kがξより十分小さくなる条件をu_k:=|a_k|/ξで解くと、 命題6・8・9と同じ「log(1/ξ)」型の閾値が出てくる:

C*(ξ) := (1/2)·ln(4/ξ)

n個の値のうち少なくとも1つが |a_k| > ξ·(C*(ξ) + M) を満たす (Mは好きに選べる安全マージン)とき、naive foldとOR_n融合版の誤差は

|naive_fold − OR_n(融合版)| ≲ exp(−4M)

程度に収まる。

数値検証: ξ=1e-2〜1e-8、n=2〜50、M=0.5〜4の組み合わせで検証した ところ、M≧2で(実測誤差)/(exp(-4M))の比が1.000にほぼ完全に収束 することを確認した。特にM=4のときは、ξやn、他の値の分布に関係なく 誤差がexp(-16)≈1.1e-7にぴったり一致する、という驚くほど綺麗な 普遍性を示した(or_n_fusion_is_safe, or_n_fold_error_bound参照)。

AND側(命題3)との対比

AND_n(命題3、v0.16で修正済み)は「全部の値が大きい」ことを 要求したが、OR_n(命題10)は(ORの"どれか一つ真なら真"という性質に 素直に対応する形で)「どれか一つの値が大きい」ことだけで足りる。 ただしその"大きい"の基準は、ANDが単純な定数閾値C·ξだったのに 対し、ORは命題6・8・9と同じlog(1/ξ)補正のかかった閾値 ξ·((1/2)ln(4/ξ)+M)になる、という違いがある。

AND_n(命題3) OR_n(命題10)
安全条件 全部の値が>C·ξ どれか1つの値が>ξ·((1/2)ln(4/ξ)+M)
閾値の形 定数倍(O(ξ)) 対数補正(O(ξ·log(1/ξ)))
誤差上界 n·4·exp(-2C) exp(-4M)(nに依存しない)

正直な評価

これで「naive foldとOR_n融合版が一致するためのn項条件」という TODOの本丸に、閉じた形の十分条件と定量的な誤差上界を与える ことができた。ただし(1)これは十分条件であり、必要十分条件 (もっと緩い条件でも安全な場合があるかもしれない)までは詰めて いない、(2)導出の途中(phi(phi(w))の閾値挙動)は漸近的な議論で あり、機械的に厳密な不等式の証明までは行っていない——数値検証 (複数のξ・n・マージンで比が1.000に収束することを確認)による 裏付けにとどまる。文献調査もしていないので、微分可能論理ゲート 分野で本当に新規かどうかは断定しない。それでも、v0.13から続いて いた具体的な空白を、閉じた形の式で埋められたことは、今回の 一番の収穫だと思う。

v0.24: 6ゲートの分類——AND型かOR型か(命題11)

TODO.mdで積み残していた「XOR/NAND/NORなど他ゲートが、AND型 (命題5のa*b/ξという1変数に還元できる)かOR型(できない)か」を 調べた。core.pyの6ゲート全部について、命題5の部分ディレーション 不変性(gate(λa,b;λξ)==gate(a,b;ξ))をsympyと数値の両方で チェックした:

AND                        : 満たす(AND型)
NAND, OR, NOR, XOR, XNOR   : いずれも満たさない

NAND=NOT(AND)のように、AND型のゲートに外側からNOTを1回被せる だけで、この綺麗な不変性は壊れてしまう(NOT自身がξに依存する "もう一段のreg"だから)。

ただし満たさない5つの中でもNANDだけは性質が違った。実際に a,bを動かして誤分類領域を調べたところ:

  • OR, NOR, XOR, XNOR: 命題8と同じ「a,bが両方ともそこそこ非ゼロ なのに広い範囲で誤判定する」領域を持つ(NORはORの誤分類領域を そのまま裏返しただけ、XORは内部でOR型の合成を使うため同じ 問題を引き継ぐ——例えばXOR(a,a)は常に0のはずが、a=1〜2ξ程度 の範囲で誤って1になる)。
  • NAND: 単一の鋭い閾値を持ち、広い誤分類領域は持たない (AND型と同様に振る舞う)。ただしその閾値はAND自身の共鳴点 (命題1、O(ξ))とは異なる、新しいスケールになっている:
a·b ≈ sqrt(arctanh(1/√2)) · ξ^(3/2)

これは、AND(O(ξ))・OR(O(ξ·log(1/ξ)))に続く3つ目の独立した スケーリング則(ξ^1.5)である。ξ=1e-2〜1e-10で、実測境界と 予測の比が1.00000に収束することを数値検証済み。

正直な評価: 「単一の比に還元できるか」という命題5の判定基準 だけでは、NANDのような"AND型の親戚だが閾値のスケールは違う" ケースを見落としてしまうことがわかった。分類自体(部分ディレー ション不変性の有無)は厳密(sympyで確認)だが、NORやXOR/XNORの 誤分類領域の精密な閉形式(命題8のような)は今回導出していない (定性的な確認にとどまる)。NANDのξ^1.5則は導出・数値検証ともに 確信を持てる。

v0.25: NORの誤分類境界を閉形式化(命題12)

命題11で「NORはOR型(命題8のような広い誤分類領域を持つ)」と 定性的な確認にとどめていたが、命題8と同じ手法をそのまま適用する ことで、閉じた形の境界を導出できた。

u + v = (1/2)·ln(1/ξ) + K_NOR(ξ)
K_NOR(ξ) = (1/2)·ln(32/ln(4/(ξ·A))),   A := arctanh(1/√2)

命題8のOR境界と同じ「u+v=一定」という直線の形だが、定数項 K_NORにξのlogのlogという珍しい二重対数補正がつく (NOR=NOT(OR)という一段の入れ子越しに命題8の式を適用したため)。

数値検証: ξ=1e-2〜1e-12で実測境界との差が着実に縮小(ξ=1e-12で 差~1.8e-6)。u/v比を0.2〜5で振ってもu+vはほぼ一定(9.40〜9.45、 ξ=1e-8)であることも確認した。

これはNOR=NOT(OR)なので、命題8のORの誤分類領域を単に"裏返した" ものに過ぎず、数学的に新しい現象ではない。それでも命題11で "定性的な確認にとどまる"と書いていた課題に、閉じた形の答えを 出せたのは収穫。XOR/XNORは対角線a=b上で単純な"0.5交差"という 形にならず(対称性のため別の構造を持つ)、今回は同じ手法を そのまま適用できなかった——引き続き未解決のまま残す。

v0.26: (a,b)平面の"真の危険地図"は、実は命題6がすでに解いていた

v0.18で「近似曲線(1-reg(a))(1-reg(b))=ξu*は、(a,b)平面上の |∇OR|の"尾根"を数%〜十数%の誤差でしか近似できない」と書き、 「真の尾根の精密な閉形式(命題6のw0に相当する2次元版の補正項)は まだ導出できていない」と積み残していた。

改めて確認したところ、これは誤解だった。命題6は当初「aを c·ξに固定したときの、d/da OR(a,b)の一部h(v)=NOT(b)·reg'(p)を 最大化するv」を求めていたが、これをcの連続関数として使うと、 そのまま**|∇OR|=√((∂OR/∂a)²+(∂OR/∂b)²)という結合された勾配の 大きさそのものの"真の尾根"**になっていることが分かった (or_full_gradient_magnitude_argmaxで|∇OR|²を直接 scipy.optimizeで最大化し、or_second_resonance_locationの 予測と比較したところ、ξ=1e-4で差0.016、ξ=1e-10で差1e-6という、 ξ→0で着実に縮小する精度で一致することを確認)。

つまり命題6は、当初思っていたより強い結果だった——「aを固定した 1次元の断面」の話ではなく、(a,b)平面全体の危険地図の形を (cを動かすことで)最初からすでに与えていた、ということになる。 v0.18の近似曲線が数%〜十数%の誤差を持っていたのは、その曲線が 命題6の閉形式を経由せず、より粗い近似(p=ξu*を直接解くだけ)を 使っていたため。

正直な評価: これは新しい数式を導出したわけではなく、既存の 命題6の適用範囲を正しく認識し直しただけ。それでも、v0.18から 明示的に「未解決」として残していた課題を、追加の理論なしに 閉じられたのは収穫だった。

v0.27: XORの断面(b=0)に4つ目のスケーリング則(命題13)

命題12(NOR)の対角線a=bの手法は、XORには使えなかった (XOR(a,a)は常に0のはずの対称な量なので、"0.5交差"という設定が そのままでは成立しない)。そこで別の断面——b=0固定——を試した。

b=0のとき、XOR(a,0;ξ) = NOT(NOT(reg(a;ξ);ξ);ξ) という"二重NOT"の 構造になる(NAND=NOT(AND)の"一重NOT"よりもう一段深い)。この境界を u=a/ξで解くと:

u ≈ sqrt( (1/2)·ξ·ln(4/(ξ·A)) ),   A := arctanh(1/√2)

という、AND(O(ξ))・OR(O(ξ·log(1/ξ)))・NAND(O(ξ^1.5))に続く 4つ目の独立したスケーリング則が出てきた。ξ=1e-2〜1e-10で、 実測境界との比が1.00000に収束することを確認した。

面白いのは、この閾値がAND自身の共鳴点(命題1、O(ξ)、a=ξ·u*) よりもさらに小さいaで切り替わることである。これは"二重NOT"が AND単体よりも感度を上げる方向に働く(NAND・NORで見た"もう一段 NOTを重ねると閾値がシフトする"という現象の、また違う現れ方) ことを示している。

正直な限界: これはb=0に固定した特別な断面での結果であり、a,b 両方が非ゼロな一般の場合のXORの誤分類領域(命題8のような閉じた 2変数の式)はまだ導出できていない。XNORについても同様の手法が 使えるはずだが、今回は時間の都合で手を付けていない。

v0.28: XOR(a,a)の誤分類"帯"とLambert W函数の初登場(命題14)

命題13(b=0断面)の直後、対角線a=b自体も実は攻略できることに 気づいた。XOR(a,a;ξ)は定義上つねに0(偽)であるべき対称な量だが、 実際にはuがある帯の中にあるときだけ誤って1(真)に張り付く ことが分かった:

u_lower ≈ sqrt( ξ · (1/2) · ln(4/√(ξ·A)) )              (下側境界)
u_upper ≈ -W₋₁(-2·R(ξ)) / 2,
    R(ξ) := (√ξ/4) · sqrt( (1/2)·ln(4/√(ξ·A)) )          (上側境界)

(A := arctanh(1/√2)、W₋₁はLambert W函数の下側分岐)

u<u_lowerとu>u_upperでは正しく0、その間の帯の中でだけ誤って1に なる。導出はXOR(a,a;ξ)=OR(x,x;ξ)(x:=AND(a,NOT(a);ξ))という単純化 から始まり、「uが小さい極限」と「uが大きい極限」のどちらを使うかで それぞれ違う閉形式が出る。上側境界の方程式u·e^(-2u)=R(ξ)は、 w:=-2uと置換するとw·e^w=-2R(ξ)というLambert W函数の定義式 そのものになった——このライブラリで初めてLambert W函数が登場 した。

数値検証: ξ=1e-3〜1e-10で、両方の境界とも実測値との比が1.00000に 収束することを確認した。

正直な評価: 対角線a=b上でのXORの挙動は(下側・上側とも)きれいに 閉じた形で説明できた。ただし一般の(a≠b、両方とも自由に動く)場合の 誤分類領域の全体像はまだ描けていない——命題13・14を包含する、 より大きな2変数の問題として残る。

v0.29: XNORの断面解析で、6ゲート全部の断面解析が完了(命題15)

XNOR(a,0;ξ)=NOT(XOR(a,0;ξ);ξ)を、命題13(XORのb=0断面)にもう一段 NOTを重ねた三重NOTとして解析した。命題8以降で繰り返し使って きた「NOT(z;ξ)=ξ·A(A:=arctanh(1/√2))という小さい目標値を逆算する」 という同じ操作を3回入れ子にするだけで、閉形式が出た:

y := NOT(reg(a;ξ);ξ)の目標値 ≈ ξ·(1/2)·ln(4/(ξ·A))
z := reg(a;ξ)の目標値        ≈ ξ·(1/2)·ln(4/y)
u = a/ξ                      ≈ √z

ξ=1e-2〜1e-12で、実測境界との比が1.000000に収束することを確認した。

これで、6ゲート(AND, OR, NAND, NOR, XOR, XNOR)すべてについて、 少なくとも1つの具体的な断面で誤分類境界の閉形式を与えられた:

ゲート 断面 スケーリング則
AND (単一変数) O(ξ)(命題1)
OR u+v O(ξ·log(1/ξ))(命題8)
NAND a·b(対角線) O(ξ^1.5)(命題11)
NOR u+v O(ξ·log(1/ξ))、二重対数補正(命題12)
XOR b=0 O(√(ξ·log(1/ξ)))(命題13)
XOR 対角線 帯構造、上側境界にLambert W函数(命題14)
XNOR b=0 三重入れ子のlog(命題15)

正直な評価: これらはすべて特定の断面(対角線かb=0)での結果であり、 各ゲートの(a,b)平面全体の誤分類領域の完全な閉形式は、OR側の命題8 (v0.26でその2次元的な完全性を確認済み)を除いて、まだ描けていない。 それでも「NOTを重ねるたびに閾値のスケールが系統的にシフトして いく」という現象を、6ゲート全部について具体的な数式で確認できた のは、このシリーズ(命題5、11〜15)の一番の到達点だと思う。

v0.30: NOT合成塔の統一理論——命題11・13・15を1つに統合(命題16)

命題11(NAND)・13(XORのb=0断面)・15(XNORのb=0断面)を並べて見比べて いて、これらが実はたった1つの一般理論の特殊ケースだったことに 気づいた。共通しているのは「reg(x;ξ)にNOTをn回繰り返し適用した 合成Ψ_n(x;ξ)が0.5になる閾値」という構造(n=1がNAND、n=2がXORの b=0断面、n=3がXNORのb=0断面に対応する)。

これを一般のnについて解くと、次の"対数の塔"(log tower)が閉じた 形で現れる:

T_0(ξ)  := ξ·A                          (A := arctanh(1/√2))
T_k(ξ)  := ξ·(1/2)·ln(4/T_{k-1}(ξ))     for k=1,...,n-1
x*_n(ξ) := ξ·√(T_{n-1}(ξ))                (n≥1)

この一般公式は、n=1,2,3で命題11・13・15をそのまま(誤差ゼロで) 再現する。さらにn=4,5という、名前の付いた標準ゲートには対応 しない"より深いNOTの入れ子"についても、この一般公式がそのまま 正しく機能することを数値検証で確認した——これは新しいゲートを 設計する際の閾値予測に、そのまま使える一般理論になっている。

数値検証: n=1,3,5について、ξ=1e-2〜1e-6(float64)で実測値との比が 1に収束することを確認。開発中はmpmathの50〜60桁精度でξ=1e-40まで 検証し、比が1.00000000(小数点以下8桁まで完全に1)に収束することも 確認した(float64での検証はξ<1e-6あたりでNOTの繰り返し適用による 丸め誤差が蓄積し精度が落ちるため)。

正直な評価: これは「新しい現象の発見」というより「既に見つけていた 3つの結果(命題11・13・15)が、実は1つの一般理論の特殊ケースに 過ぎなかったと気づき、それをnについて閉じた形で解いた」という **統合(unification)**である。とはいえ、当初から目指していた 「統一理論」という言葉にもっとも近い成果になったと思う。n≥4の 場合の解釈(対応する具体的な論理ゲートがあるのか)は考えていない ——あくまで数式としての一般化にとどまる。

v0.31: NOT写像の自然な放物型不動点(命題17)

命題16(NOT合成塔)のnを連続化できないか(dynamics.pyfractional_iterateがそのまま使えるか)を調べていて、 NOT(z;ξ):=1-reg(z;ξ)という写像自体が、人工的なパッチを 当てなくても自然な不動点を持つことに気づいた (z=0NOT(0;ξ)=1>0z→∞NOT(z;ξ)→0<zなので、中間値の 定理により(0,1)の中に必ず不動点がある)。

ただし、この不動点での乗数(微分係数)は常に負(period-2的な 性質)であることが分かった——素朴に「実数tについて連続的に反復する」 という発想(命題16のnを連続化する)は、乗数が負だと非整数乗が 複素数になってしまうため、そのままでは実現できない。

その代わり、乗数がちょうど-1になる自然な放物型不動点を 見つけた。z0=NOT(z0;ξ)とNOT'(z0;ξ)=-1の連立方程式を解くと、 s:=√(1-z0)について

2·s·arctanh(s) = 1

という1変数の超越方程式に帰着し、これを解くと

z0_c = 1 - s²,   ξ_c = 2·s·(1-s²) = 2·s·z0_c

(数値: s≈0.647918229、z0_c≈0.580201968、ξ_c≈0.751846864)。 not_map_multiplier(ξ_c)が厳密に-1(誤差<1e-10)になることを 直接確認した。ξ_cより小さいξでは不動点が反発的(|λ|>1)、大きい ξでは吸引的(|λ|<1)になる、という分岐点になっている。

この"自然な放物型不動点"は、dev_notes.md v0.12で行き詰まった 「人工的に埋め込んだ不動点の放物型収束」の問題とは別に、NOT写像 そのものが固有に持つ構造として見つかったもの。外部アドバイザーが 指摘していた「放物型繰り込み」(Inou-Shishikura理論)との関係を 調べる際の、具体的な足がかりになりうる。

正直な評価: 「連続的なn」という当初の目的は(負の乗数という 数学的な障害のため)達成できなかったが、副産物として見つかった この放物型不動点は、それ自体が具体的で検証済みの新しい事実である。 放物型繰り込み理論との接続はまだ何も調べていない——今後の課題。

v0.32: 放物型繰り込みへの接続——縮退した3次接触の不動点(命題18)

命題17(NOT写像の自然な放物型不動点、乗数-1)を、標準的な放物型 繰り込み理論(乗数+1を前提にすることが多い)に繋げるため、 F := NOT∘NOT(NOTを2回)という合成写像を考えた。F'(z0)=(-1)²=+1 で標準的な意味での放物型になるが、実際に調べたところ**F''(z0)が 恒等的に0**になり、通常の(2次で接する)放物型よりも縮退した "3次で接する"放物型不動点になっていた。

これはNOT写像固有の偶然ではなく、一般的な事実であることを sympyで確認した:「乗数-1を持つ任意の写像φ(φ(z0+ε)=z0-ε+cε²+dε³+...) に対し、F:=φ∘φF(z0+ε)-z0 = ε - 2(c²+d)ε³+O(ε⁴)となり、 ε²の係数は常に厳密に0になる」。つまり「乗数-1を持つ写像を 自分自身と合成すると、必ず(少なくとも)3次接触の放物型不動点に なる」という一般法則。

力学的な帰結として、標準の放物型不動点の1/n減衰ではなく 1/√n減衰という、質的に遅い収束をすることも数値的に確認した (ξ_cで100万回反復し、指数を最小二乗フィットして-0.495——理論値 -0.5と良く一致)。

正直な評価: 「縮退した3次接触の放物型不動点」自体は複素力学系 理論では知られた現象(通常の2次接触より高次の接触点、または "parabolic implosion"の文脈で研究される)であり、新しい数学では ない。新規性は、kappalogicのNOT写像が(乗数-1という性質のおかげで) この現象の具体例を自然に提供することを見つけ、確認したことに 限られる。Fatou座標の具体的な構成(標準理論の道具)や、外部 アドバイザーが指摘していたInou-Shishikura理論との詳細な対応は、 まだ何も手を付けていない——今後の課題として残す。

v0.33: 局所的なFatou座標は作れたが、大域的にはまだ未完成(命題18続き)

命題18(縮退した3次接触の放物型不動点)の続きとして、実際に Fatou座標(アベル座標)を構成してみた。3次接触の場合の素朴な 漸近形

φ(z) := -1 / (2b(z-z0)²)

(w:=z-z0についてdw/dn≈bw³という連続近似から、d(w⁻²)/dn≈-2bを 積分するだけで出る)を試したところ、局所的な性質 φ(F(z))-φ(z)→1(z→z0のとき)は数値的に確認できた (z0+1e-4φ(F(z))-φ(z)≈1.00002)。

しかし、これを使ってF^n(z)を10万回以上反復し、φ(F^n(z))-nが 一定値に収束するかを確認しようとしたところ、収束しなかった (nが大きくなるにつれて系統的にずれていく)。つまりこの閉形式は 1ステップの局所的な振る舞いは正しく捉えているが、多数回反復した "大域的な"Fatou座標としてはまだ不完全だった。

正直な評価: 標準的な放物型不動点の理論では、Fatou座標の正確な 漸近形には対数補正項がつくことが知られている (φ(z) = -1/(a(z-z0)) + β·ln(...)/a + O(1))。今回の3次接触の 場合も同様の補正項が必要なはずだが、今回はまだ導出できていない ——正直に「局所的には確認できたが、大域的な構成は道半ば」という 状態で記録しておく。

v0.34: 命題10は十分条件だが必要条件ではないことを確認

命題10(v0.23、naive foldとOR_n融合版が一致するn項の十分条件)に ついて、「これは必要条件でもあるか」を調べた。全部の値を命題10の 閾値未満に強制して乱数生成しても、実際には高い確率(実測で7〜9割 程度)でnaive foldとOR_n融合版が一致してしまう(gapが小さい) ことを確認した——つまり命題10の条件は十分条件だが必要条件では ないことがはっきりした。

命題9(融合版OR_nの正しさの"総和"条件)のmarginとの相関も調べたが、 「良い一致」グループと「悪い不一致」グループでmarginの分布が 大きく重なっており、単純な閾値では両者をきれいに分離できない ことも確認した。

正直な評価: 「naive foldとOR_n融合版が一致するための必要十分条件」 は、個々の値の最大値や総和のような単純な集計量だけでは決まらず、 畳み込みの順序や個々の値の並び方に依存する、より複雑な条件である 可能性が高い、ということが今回の調査で明確になった。完全な解決には 至っていないが、「どこまでが分かっていて、どこからが分かって いないか」の境界をはっきりさせられたのは収穫。

v0.35: 離散積Π↔連続積分の橋渡し(TODO.md C項)

bridge.pyには既に「離散和Σ↔連続積分∫」の橋渡し(sum_via_integral、 n!とΓ関数の一致で検証済み)があったが、「離散積Πについても同様の 橋渡しができないか」というTODOが残っていた。

答えは簡単で、log(Π f(n)) = Σ log(f(n))という恒等式を使えば、 既存のsum_via_integralをそのまま(f(n)をlog(f(n))に差し替えるだけ) 再利用できる——新しい理論は不要だった:

Π_{n=0}^{N} f(n) = exp( ∫_0^{N+1} log(f(floor(x))) dx )

f(n)=nとしてN=3,5,7でこのproduct_via_integral関数を試したところ、 N!(階乗)と相対誤差~1e-3で一致した。さらに既存の gamma_via_riemann_sum(オイラー積分によるN!)とも独立に一致する ことを確認し、「離散積Π→(log/exp経由の)連続積分→Gamma関数」という 3通りの経路が相互に整合することを確かめた。

正直な評価: これは既存の橋渡し(Σ↔∫)の直接の応用であり、新しい 数学ではない。TODOに残っていた具体的な問い(離散積の橋渡しはできるか) に、既存の道具を組み合わせるだけで答えられたのは良い収穫。

v0.36: フィッシャー情報幾何がgauge.pyの双曲計量と一致する(TODO C・G項)

TODO.mdのG項「情報幾何への拡張」とC項「ξの意味論を統一する」を、 同時に前進させる発見があった。

ガウス分布族N(μ,σ²)(μ,σ)というパラメータで見た統計多様体に、 フィッシャー情報計量(Fisher-Rao計量)を入れると

ds² = dμ²/σ² + 2dσ²/σ²

という計量になる(数値積分で確認済み)。これはμ' := μ/√2という 単純な再スケールで、gauge.py(v0.14、命題7)で見つけた (x,ξ)半平面の双曲計量ds²=(dx²+dξ²)/ξ²と、定数倍(2倍)を除いて 厳密に一致する(sympyで確認、差は厳密に0)。ガウス曲率も Riemannテンソルから直接計算し、K=-1/2(標準双曲平面のK=-1の ちょうど半分)であることを確認した。

これは「ξの意味論を統一する」の候補をもう一つ増やす: ξを、ある 検出対象の分布の"標準偏差"(Fisher-Rao幾何での尺度座標)とみなせる、 という解釈。gauge.pyのアフィン群(並進+ディレーション)が、まさに この統計多様体の等長変換群と同一視できることになる——「xの並進+ξの ディレーション」という対称性が、「位置母数の並進+尺度母数の スケール変換」という統計学の自然な対称性と、数式のレベルで 同じものだったことになる。

正直な評価: 「Fisher-Rao幾何のガウス族が定数曲率の双曲平面になる」 こと自体は情報幾何学で古典的によく知られた事実であり、新しい数学 ではない。新規性は、kappalogic自身のgauge.pyの発見(命題7)と 厳密に同じ計量が出てくることを確認し、ξの意味論統一というTODOの 文脈に位置づけたことに限られる。

v0.37: XORの2変数(a,b)全体での誤分類境界——ついに完成(命題19)

TODO.mdに残っていた「各ゲートの(a,b)平面全体(a≠b、両方自由に 動く場合)の誤分類領域の完全な閉形式」に、XORについて具体的な 答えを出せた。

命題13(b=0断面)・14(対角線a=b)は、XORの誤分類境界のうち特定の 断面だけを解いたものだった。torch_backend.py(v0.18)を使って (a,b)平面全体の危険地図を高速に走査したところ(300×300点超の バッチ計算)、u=a/ξ, v=b/ξの言葉で、片方が十分大きいとき、 もう片方の境界がlog(u)(またはlog(v))でスケールするという、 命題8(u+vの和)とも命題12(NORの二重対数)とも違う、新しい形の 境界が見つかった:

v_boundary(u) ≈ (1/2)·ln(4u / u2(ξ))     (uが大きい極限)
u_boundary(v) ≈ (1/2)·ln(4v / u2(ξ))     (対称、vが大きい極限)

(u2(ξ) := xor_zero_cross_section_threshold(ξ)、命題13の閾値)

導出: uが大きいとき、NOT(a;ξ)≈4e^(-2u)は極端に小さくなるので、 Q:=AND(NOT(a),b;ξ)はほぼ0になり無視できる。すると XOR(a,b)=OR(P,Q)≈OR(P,0)=NOT(NOT(P);ξ)という、命題13と同じ "二重NOT"の構造に帰着する。ここでP:=AND(a,NOT(b);ξ)=tanh(u·sech²(v))² であり、命題13の閾値u2(ξ)に対応させるとu·sech²(v)≈u2(ξ)という 条件になる。vが大きい極限でsech²(v)≈4e^(-2v)を使うと、 4u·e^(-2v)≈u2(ξ)を解いて上の式が出る。

数値検証: ξ=1e-6〜1e-10、u=10〜10000の広い範囲で、実測境界と 予測の差が0.0001以下(小数点以下4桁まで一致)という、非常に 高い精度で確認できた。対称性(uとvを入れ替えても同じ形になること) も確認済み。

これで命題11〜15・19を合わせて、6ゲート全部について、少なくとも 1つの完全な2次元的境界(NAND・OR・NORは実質2次元完成、XORは今回 v0.37で2次元完成)が得られたことになる。XNORについても同様の 手法が使えるはずだが、今回はまだ試していない。

正直な評価: この閉形式は「片方の変数が十分大きい」という漸近極限 でのみ厳密に成り立つ(u,vが同程度でどちらも大きくない"中間領域" では、命題14の対角線の結果のようにまた別の振る舞いになる)。 それでも、TODO.mdで積み残していた課題に、XORについては具体的な 答えを出せた。

v0.38: 6ゲート全部の(a,b)平面が完成(命題20)

命題19(XORの2次元境界)と全く同じ手法をXNORに適用した。 XNOR=NOT(XOR;ξ)なので、uが大きい極限でXOR(a,b)が P:=tanh(u·sech²(v))²の"二重NOT"に帰着する(命題19)ことを 踏まえると、XNORはPの三重NOTになる——これは命題15(XNORの b=0断面)と全く同じ構造だったので、命題15の閾値 u3(ξ):=xnor_zero_cross_section_threshold(ξ)をそのまま使って

v_boundary(u) ≈ (1/2)·ln(4u / u3(ξ))     (uが大きい極限)

という、命題19と同じ形の閉形式が(定数をu2からu3に変えるだけで) そのまま成り立つことを確認した。ξ=1e-4〜1e-10、u=10〜10000の 範囲で、実測境界との差が0.0001以下という、命題19と同等の高精度で 一致した。

これで6ゲート(AND, OR, NAND, NOR, XOR, XNOR)全部について、 (a,b)平面全体の完全な閉形式(NAND・OR・NORは単一変数への還元や u+vの対称性から、XOR・XNORは"片方が大きい極限"の解析から)が 出揃った。TODO.mdで積み残していた課題が、命題5・11〜15・19・20を 通じて完全に解決した形になる。

正直な評価: 命題19の手法がXNORにもそのまま(定数を1つ変えるだけで) 通用したのは、XOR→XNORが単純に"もう1回NOTを重ねるだけ"という 構造だったから。目新しい導出はなく、命題19の直接の系に近い。 それでも、6ゲート全部の2次元的な理解が完成した、というシリーズ 全体の到達点として記録しておく。

先行研究との関係(誠実な位置づけ)

要素技術のほとんどは既存研究の再発明である:

このライブラリの要素 対応する既存研究
tanhベースの滑らかな指示関数 相分離理論(Allen-Cahn方程式、拡散界面法、1979年〜)
reg/ANDの勾配消失 van Krieken et al. (2022, Artificial Intelligence)が命題として証明済み
論理ゲート×連続緩和×アニーリング Petersen et al. (2022, NeurIPS)、実装ライブラリdifflogicも既存
ξ(t)=2√(Dt)のアニーリングスケジュール 拡散モデルの"Variance Exploding SDE"と数学的に同一
Dirac delta/Heaviside の微分可能な近似 Smoothing methods for AD、mollifier理論、SPHカーネルとして既に成熟
フェルミ・ディラック占有数=sgn(x,2kT) DFT計算の電子スメアリング手法(実務で広く使われる既存技法)
k(x)=tanh(x/ξ)の加法定理・連分数・部分分数展開・無限積 双曲線関数論の古典的結果(Lambertの連分数は1768年)
並進・ディレーションのアフィン群構造/双曲計量のキリングベクトル場 双曲幾何・連続ウェーブレット変換の表現論の古典的結果(ax+b group)

見つけた本物の区別: 標準的なt-norm(van Krieken論文の分析対象)は 真偽度[0,1]の範囲で単調だが、reg(x)=tanh(x/xi)^2は任意の実数を 受け取り「0か非0か」を判定する非単調な"検出器"であり、t-normの 枠組みには存在しない。むしろmollifier/AD平滑化の系譜に近い。この 2つの研究コミュニティを明示的に繋いだ文献は検索した範囲では見当たらなかった。 新規性を主張できるとすれば、この細い糸のみ(詳細はdev_notes.md)。

v0.39: 先行研究の再調査(命題群は未踏か?)

ユーザーから「先行研究を調べて、未踏なのかどうか調べてほしい」との 依頼を受け、命題1〜20・gauge.py・info_theory.py・dynamics.pyの 主な発見について、改めてweb検索で先行研究を確認した。

確認できたこと(古典的・既知、新しい数学ではない):

このライブラリの要素 対応する既存研究(具体的な出典)
フィッシャー情報幾何(ガウス族)=双曲平面、曲率-1/2 Rao(1945)以来の古典的結果。Costa, Santos & Strapasson (2015) Discrete Applied Math(mu,sigma)->(mu/sqrt(2),sigma)という、命題(v0.36)と全く同じ再スケール式を明示。Amari (1985)の情報幾何、Nielsenの教科書系資料にも掲載
アフィン群/ウェーブレット変換 表現論の教科書的内容(既にREADMEに記載済み)
放物型不動点(乗数-1)=周期倍分岐 ロジスティック写像などで教科書的に知られる「周期倍分岐」そのもの(乗数がちょうど-1を通過する点)。「自乗すると3次接触になる」という具体的な補題(命題18)は、検索した範囲では明示的に書かれた文献を見つけられなかった(教科書は一般に2次接触の場合を中心に扱う)
微分可能論理ゲート/fuzzy論理演算子の勾配消失分析 van Krieken et al. (2022, Artificial Intelligence)が既に類似の"閉形式で勾配消失の割合を求める"命題群を、Yager/Łukasiewicz/Zadeh等のt-normについて証明済み。Petersen et al.(2022 NeurIPS, 2024 CVPR)のdifflogicと、2025〜2026年の後続研究(reparametrization、negation-asymmetric initialization等)が、同じ問題意識(深いネットワークでの勾配消失、ゲート初期化)を現在進行形で研究している

確認できなかったこと(=命題群の核はおそらく未踏): 検索した範囲では、kappa(x/xi)=tanh(x/xi)という単一の検出器 プリミティブからAND/OR/NAND/NOR/XOR/XNOR全部を合成する、という kappalogic独自の構成そのものを分析した文献は見つからなかった。 標準的な微分可能論理ゲート研究(van Krieken, Petersen等)は、 積t-norm(A*B)やŁukasiewicz t-norm(max(A+B-1,0))のような [0,1]上で単調な演算子を対象にしており、kappalogicの reg(x)=tanh(x/xi)^2(実数全体を受け取る非単調な"検出器")とは 異なる系統である。この違いのため、以下の具体的な結果は、検索した 範囲では先行研究に見当たらなかった:

  • log(1/xi)スケールの誤分類境界の族(命題6・8・9・12・13・15・19・20)
  • NOT合成塔の統一理論とその閉形式(命題16)
  • OR_nのnaive fold-vs-fuse安全条件(命題10、「AND_nは全部大きい 必要、OR_nはどれか1つで足りる」という非対称な定理)
  • NANDのxi^1.5則、XORのLambert W函数の登場(命題11・14)

落胆する必要はない、という結論: 個々の道具(tanhの飽和、 双曲幾何、周期倍分岐)は全部既知だが、「これらの道具を、 tanh(x/xi)という1つの検出器の合成として体系的に組み立て、 6ゲート全部の誤分類境界を閉じた形で統一的に説明する」という 構成そのものは、少なくとも今回の検索範囲では他に例を 見つけられなかった。

先行研究をどう利用するか(次の一手として):

  1. 文献に位置づけ直す: 命題10(OR_nの安全条件)とNAND/OR/NOR/ XOR/XNORの誤分類境界は、van Krieken (2022)やPetersen (2022, 2024)と同じ研究課題(微分可能論理ゲートの勾配消失・安全な 初期化)に対する、別の演算子族での対応する結果として 位置づけられる。実際にdifflogicの現行issue(negation-asymmetric initialization、2025年10月のLight DLGN論文)は、まさに kappalogicが命題11・12で見つけた「NANDやNORがANDやORと 非対称な振る舞いをする」という現象と問題意識が重なっている。
  2. 実験で橋渡しする: difflogic(github.com/Felix-Petersen/ difflogic)は実際に動くPyTorch実装が公開されている。 kappalogicのkappa検出器をdifflogicの16ゲート相当の代替 演算子として実装し、命題10で導出した安全な初期化条件 (xi*(C*(xi)+M))を実際のネットワーク初期化に使って、 標準のdifflogicと比べて深いネットワークでの勾配消失が 改善するかを試す、という具体的な実験ができる(TODO.md I項 「実タスクで性能を出す」の具体化)。
  3. 正式な引用を追加する: 上記の文献(van Krieken 2022、 Petersen 2022/2024、Costa-Santos-Strapasson 2015)を、 README冒頭や各命題のdocstringに正式な参考文献として 明記しておくと、将来もし公開・共有する際に誠実な位置づけに なる。

v0.40: 「学習可能なξ」は既にtorch_backend.pyで実現していた(TODO E項)

TODO.md E項の当初の構想は「ξを二重数(dual number, ξ²=0)として 導入し、自動微分と絡める」というものだった。実際に検討したところ、 v0.18のtorch_backend.py(autogradベースの実装)だけで、この 要求はすでに満たされていたことが分かった。ξを普通のPyTorch テンソルとしてrequires_grad=Trueにするだけで、ξに関する勾配が そのまま得られる(有限差分との比較で厳密に一致することを確認)。 二重数を別途実装する必要はなかった。

具体例として、gate_fn(a,b;ξ)が目標値に一致するようなξを勾配降下 で学習するlearn_xi関数を追加した。a=0.05, b=0.08でAND(a,b;ξ)が 0.5になるようなξを、ξ0=1.0から対数空間での最適化(Adam)で 探したところ、ξ≈0.004538という値に機械精度で収束した(理論値 0.004/arctanh(1/√2)≈0.004538と一致)。

正直な評価: これは新しいアイデアではなく、既に持っていた道具 (torch_backend.py)を、TODOの当初の要求に照らして見直しただけ。 二重数(dual number)という当初の構想そのものは試していない (が、autogradで同じ目的が既に達成できているので、追加の実装は 不要と判断した)。

率直な限界(誇張しないための注記)

  • hardモード(reg/AND/OR)は離散的な場合分けをif文なしで解析式に埋め込む 用途には向くが、それ自体を勾配降下の目的関数にしてNP完全問題を 解くのには向かない(勾配消失のため)。
  • softモード+アニーリングは「うまくいく場合がある局所探索の補助」で あって、P=NPを覆すようなものではない。
  • 個々の要素技術はほぼ全て先行研究があり(一部はより厳密な形で)、 「大発見」と呼べる新定理・新予想は今のところ出ていない。

テスト・サンプル実行

pytest tests/ -v   # 281 tests (torchが無い環境ではtest_v18/v40_torch_backend.pyは自動でskip)

python examples/heat_equation_demo.py
python examples/karnaugh_fusion_benchmark.py
python examples/sat_3var_demo.py
python examples/infinite_well_demo.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kappalogic-0.40.0.tar.gz (180.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kappalogic-0.40.0-py3-none-any.whl (110.6 kB view details)

Uploaded Python 3

File details

Details for the file kappalogic-0.40.0.tar.gz.

File metadata

  • Download URL: kappalogic-0.40.0.tar.gz
  • Upload date:
  • Size: 180.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for kappalogic-0.40.0.tar.gz
Algorithm Hash digest
SHA256 a262bee5ef1664066148937c270483a50cd9b7c81aa21d329d032fd07fbe9cf3
MD5 32e8d7291d53ce80b29a5ffebc087233
BLAKE2b-256 d704bc9ad8bf9afcc60277595ca5a9623741515f93c0903d88df531d8a77fa16

See more details on using hashes here.

Provenance

The following attestation bundles were made for kappalogic-0.40.0.tar.gz:

Publisher: pypi.yml on Geppetto-s-Puppet/kappalogic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kappalogic-0.40.0-py3-none-any.whl.

File metadata

  • Download URL: kappalogic-0.40.0-py3-none-any.whl
  • Upload date:
  • Size: 110.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for kappalogic-0.40.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f9a3b94ace3e0b3a8f3d25d65a3d146ca01885481b4c3cfc51ed7359a964d9c2
MD5 d11b15334384294ababcf340c2824568
BLAKE2b-256 d503c3e375b0b02ac26d41d04a1874149d0d21bb024b3d9cff22058769b16f19

See more details on using hashes here.

Provenance

The following attestation bundles were made for kappalogic-0.40.0-py3-none-any.whl:

Publisher: pypi.yml on Geppetto-s-Puppet/kappalogic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page