Skip to content

Instantly share code, notes, and snippets.

@7shi
Last active August 23, 2025 06:51
Show Gist options
  • Save 7shi/cf7fb4c165a9b0032242b2b0b5ec0c90 to your computer and use it in GitHub Desktop.
Save 7shi/cf7fb4c165a9b0032242b2b0b5ec0c90 to your computer and use it in GitHub Desktop.
Scalar Gravity Tensor

テンソル・ペアリング・アルゴリズム実装仕様

概要

この実装は、ファインマンのスカラー重力理論で必要となるテンソル量の組み合わせから、独立なスカラー量を生成するためのアルゴリズムです。

参照: https://x.com/7shi/status/1959100031790981364

物理的背景

問題設定

$h_{\mu\nu}$ を 2 階対称テンソルとし、添字の上げ下げはミンコフスキー計量 $\eta$ で行います。定義:

  • $h = {h^{\mu}}_{\mu}$(トレース)
  • $(\partial h) _ {\alpha} = \partial _ {\mu}{h^{\mu}} _ {\alpha}$(発散)

独立項の数

$h_{\mu\nu}$ について $n$ 次で、 $\partial _ {\lambda}h _ {\mu\nu}$ について 2 次のスカラー量で独立な項の数を $S_n$ とすると:

  • $S_1 = 16$(既知)
  • $S_2 = 43$
  • $S_3 = 93$
  • $S_4 = 187$
  • $S_5 = 344$
  • $S_6 = 607$

アルゴリズムの概要

このアルゴリズムは以下の手順で独立なスカラー量を生成します:

  1. テンソル組み合わせ生成: 与えられた $h$$\partial h$ の個数から、すべてのインデックスペアリングを生成
  2. 第1段階正規化: normalize2による標準化(インデックス付け替えとトレース処理)
  3. 対称性フィルタリング: filter_pairingsによる同一テンソル間の対称性を考慮した重複除去

主要クラス

Tensor クラス

テンソル量を表現するクラス:

class Tensor:
    def __init__(self, partial, index_abs, index_rel)

パラメータ:

  • partial: Boolean - 微分テンソル($\partial h$)かどうか
  • index_abs: int - 絶対的なテンソル番号
  • index_rel: int - 相対的なテンソル番号

インデックス構造:

  • 非微分テンソル($h$): [0, 0] (2つの対称インデックス)
  • 微分テンソル($\partial h$): [0, 1, 1] (1つの微分インデックス + 2つの対称インデックス)

Index クラス

個別のテンソルインデックスを表現:

class Index:
    def __init__(self, tensor, index)

主要アルゴリズム

1. ペアリング生成 (get_pairings1)

すべてのインデックス間のペアリング(縮約)を生成します。キャッシュ機能により、同一の部分構造の重複計算を避けます。

2. 第1段階正規化 (normalize2)

処理手順:

  1. トレース分離: 同一インデックスのペア ($h _ {\mu\mu}$) を分離
  2. インデックスソート: 非トレースペアを .index でソート
  3. 出現順マッピング: テンソル番号を出現順で付け直し
  4. 最終正規化: normalize1で標準形に変換

テンソル番号付け替えロジック:

  • H テンソル: hmap.setdefault(i, len(hmap))
  • P テンソル: pmap.setdefault(i, len(pmap) + hnum)

3. 対称性フィルタリング (filter_pairings)

対称性の考慮:

  • H-H対称性: 同種の非微分テンソル間の交換対称性
  • P-P対称性: 同種の微分テンソル間の交換対称性
  • トレースペア除外: トレースを持つテンソルは対称性操作から除外

アルゴリズム:

  1. filter_withで第1段階正規化を適用
  2. 各ペアリングについて:
    • トレースペアを除外してテンソル番号リストを作成
    • H同士、P同士の組み合わせ(combinations(hs, 2)等)を生成
    • すべての組み合わせの順列を試行
    • 重複チェックのためall_setに登録

性能特性

計算量

  • h=2,p=2: 78 → 48 → 43 (最終効果 1.8倍削減)
  • h=3,p=2: 322 → 155 → 93 (最終効果 3.5倍削減)
  • h=4,p=2: 1242 → 475 → 187 (最終効果 6.6倍削減)

メモリ効率化

  • レベル別キャッシュによる重複計算回避
  • Set-based重複検出による高速フィルタリング

入出力仕様

入力

  • h: 非微分テンソル($h_{\mu\nu}$)の個数
  • p: 微分テンソル($\partial_{\lambda}h_{\mu\nu}$)の個数

出力

  • 独立なスカラー量の個数 $S_n$ (n = h)

検証済み結果

h p 初期ペアリング filter_with filter_pairings 所要時間
2 0 2 2 2 一瞬
0 2 6 5 5 一瞬
1 2 19 16 16 一瞬
2 2 78 48 43 一瞬
3 2 322 155 93 1秒未満
4 2 1,242 475 187 6秒
5 2 4,468 1,399 344 22秒
6 2 15,098 3,924 607 32分

最終的な結果(filter_pairings)は理論予測と完全に一致しています。

対称性を考慮しない総当たりのペアリングは (h+3)! となります。初期ペアリングでは、数え上げの際にある程度の重複を排除しています。

Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment