Uncertainty principle meets Buddhist emptiness

不確定性原理 vs 仏教の「空性」——万物に自性なし

シリーズ:量子力学と東洋哲学の出会い #04/12 | 読了時間:30〜35分 | Python (NumPy, Matplotlib, SciPy, NetworkX)

著者:Wina @ Code & Cogito


ヘルゴラント島の深夜

1927年2月、北海のヘルゴラント島(Helgoland)。

23歳のヴェルナー・ハイゼンベルク(Werner Heisenberg)は、断崖の縁に独り佇み、暗い海を見つめていた。

花粉症に悩まされていたミュンヘンを離れ、この辺鄙な島に逃げ込んだのだが、ここで彼は物理学史上最も深遠な発見のひとつを成し遂げることになる。

前夜、ついに行列力学の完全な定式化を導き出した。午前3時、水素原子のエネルギー準位を計算してみると——実験値と完全に一致した。

興奮して眠れず、島の岩山に登り、日の出を待った。

太陽が昇ったとき、ハイゼンベルクはある真理に打たれた:

粒子には、同時に確定した位置と運動量が存在しない。

「あるけれど測定できない」のではない。「本当に、ない」のだ。

この洞察に震撼した彼は、数ヶ月後にあの有名な不確定性原理を定式化する:

Δx · Δp ≥ ℏ/2

ここで:
– Δx = 位置の不確定性
– Δp = 運動量の不確定性
– ℏ = 換算プランク定数(1.055×10⁻³⁴ J·s)

たった5つの記号からなるこの式が、2000年にわたる「実在」への理解を根底から覆した。

日本の物理学者・湯川秀樹は後年、ハイゼンベルクとの対話のなかでこう述べている:

「不確定性原理は、西洋の哲学的伝統よりも、むしろ東洋的な世界観に近い。」

1976年、ハイゼンベルク自身も回顧録にこう記した:

「あの夜、私は初めて理解した——自然は、私たちの哲学よりもはるかに深遠である。」


不確定性原理:「測れない」のではなく「ない」

よくある誤解

多くの人が不確定性原理をこう理解している:

「測定機器の精度が足りないから、正確に測れないのだ。」

これは誤りである。

ハイゼンベルクが言ったのはこういうことだ:

「粒子そのものが、同時に確定した位置と運動量を持っていない。」

これは認識論(epistemology)の問題——「私たちが何を知り得るか」——ではない。
これは存在論(ontology)の問題——「世界がそもそも何であるか」——なのだ。

数学的導出:交換関係から不確定性へ

量子力学において、位置 x̂ と運動量 p̂ は演算子(operators)であり、普通の数ではない。

両者は次の交換関係を満たす:

[x̂, p̂] = x̂p̂ – p̂x̂ = iℏ

これが意味するのは、位置の測定と運動量の測定は、順序によって結果が変わるということだ。

もし x̂ と p̂ が可換([x̂, p̂] = 0)であれば、同時に確定値を持つことができる。

しかし非可換([x̂, p̂] = iℏ ≠ 0)であるため、同時に確定値を持つことは原理的に不可能である。

交換関係から厳密に導出される結果が:

Δx · Δp ≥ ℏ/2

これは数学の定理であって、実験上の誤差ではない。

物理的意味:波束

波動力学の視点では、粒子とは「波束」(wave packet)である。

波束の数学的表現:

ψ(x) = ∫ A(k) e^(ikx) dk

ここで k = 2π/λ は波数、運動量との関係は p = ℏk。

波束の空間的広がり Δx と波数の広がり Δk は次の関係を満たす:

Δx · Δk ≥ 1/2

運動量に変換すると:

Δx · Δp ≥ ℏ/2

物理的な描像はこうだ:
Δx が小さい(位置が確定) → 多くの異なる波長(Δk が大きい)を重ね合わせる必要がある → 運動量が不確定(Δp が大きい)
Δk が小さい(運動量が確定) → 波束が空間に広がる(Δx が大きい) → 位置が不確定

波束を「狭く」(位置確定)しながら同時に「純粋」(運動量確定)にすることは、不可能である。

これは技術的制約ではない。波動という数学構造そのものに内在する性質だ。

その他の不確定性関係

位置と運動量に限らず、非可換な任意の二つの物理量には不確定性関係がある:

  • エネルギー-時間: ΔE · Δt ≥ ℏ/2
  • 角運動量成分: Δ L_x · Δ L_y ≥ ℏ/2 |⟨L_z⟩|
  • スピン成分: Δ S_x · Δ S_y ≥ ℏ/2 |⟨S_z⟩|

一般形:

Δ A · Δ B ≥ (1/2) |⟨[Â, B̂]⟩|

二つの物理量が非可換であれば、同時に確定することはできない。


仏教の「空性」:万法に自性なし

紀元2世紀、インド。

龍樹(ナーガールジュナ、Nāgārjuna)菩薩は大乗仏教の中観派(Madhyamaka)を創始した。その核心思想は:

一切の法に自性なく、その性は空なり。

『中論』(Mūlamadhyamakakārikā)の偈頌:

「因縁所生の法、我これを説きて空となす。」
(衆因縁生法、我説即是空。)
(Whatever is dependently co-arisen, that is explained to be emptiness.)

日本では「空」の思想は、奈良時代の三論宗を通じて伝来し、その後、天台・華厳・禅とあらゆる宗派に深く浸透した。般若心経を日常的に読誦する日本人にとって、「空」は決して抽象的な概念ではなく、生活の根底に流れる思想の水脈である。

では、「空」(シューニヤター、Śūnyatā)とは正確にはどういう意味なのか。

よくある誤解

「空」と聞いて、多くの人はこう思う:

「一切は存在しない。世界は虚妄にすぎない。」

これは決定的な誤解である。

龍樹の言う「空」とは:

「一切の事物には、独立自存する本質(自性=svabhāva)がない。」

これは虚無主義(断見、ucchedavāda)——一切が存在しないという立場——ではない。
これは縁起論(pratītyasamutpāda)——一切が条件に依存して成り立つという洞察——である。

道元禅師は『正法眼蔵』で、この点をさらに鋭く掘り下げている:

「空は虚しきにあらず。空は空なるがゆえに空なり。」

空とは「からっぽ」ではなく、固定した実体がないという在り方そのものを指す。

「自性」(svabhāva)とは何か

自性 とは、次の三つの性質を満たすものをいう:
1. 独立性——他の事物に依存せず、それ自体で存在する
2. 不変性——条件によって変化しない
3. 自足性——関係を必要とせず、単独で定義できる

仏教の根本命題はこうだ:いかなる事物も自性を持たない(諸法無自性)。

「空」の三つの意味

1. 空は「無」ではない

『般若心経』にはこうある:

「色不異空、空不異色。
色即是空、空即是色。」

日本人にとって最もなじみ深い仏教の言葉のひとつだろう。読み下すと:

  • (しき、rūpa)= 物質現象、形あるもの
  • (くう、śūnyatā)= 空性

意味はこうだ:
– 物質現象は空性と別ではない(色不異空)
– 空性は物質現象と別ではない(空不異色)
– 物質現象はそのまま空性である(色即是空)
– 空性はそのまま物質現象である(空即是色)

空とは「何もない」ことではない。「事物に固定した本質がない」ということだ。

2. 空は「縁起」

龍樹はこう述べた:「空とはすなわち縁起であり、縁起とはすなわち空である。」

縁起(えんぎ、pratītyasamutpāda) とは、一切の事物は条件(縁)に依って生起し、条件によって変化するという法則である。

たとえば:
– 茶碗は、土・水・轆轤・陶工・窯・火に依存する
– 「茶碗」という概念は、人間の分類と用途に依存する
– 独立して存在する「茶碗の自性」などない

もし茶碗に「自性」があるなら:
– 土に依存しないはずだ(しかし依存している)
– 変化しないはずだ(しかし欠けもすれば割れもする)
– 条件を必要としないはずだ(しかし焼成されなければ存在しない)

したがって、茶碗は「空」である——自性がない。

3. 空は「執着」を破る

仏教は、苦(duḥkha)の根源は執着(upādāna、しゅうじゃく)であるとする。

私たちが執着するもの:
– 「我」に固定した本質がある → 我執(がしゅう)
– 事物に固定した本質がある → 法執(ほっしゅう)

「空性」の智慧はこれらの執着を打ち破る:
– 「我」は因縁和合であって、独立した「我」はない
– 万物は因縁所生であって、固定した「本質」はない

空を悟れば、執着を手放し、苦から離れることができる。禅宗ではこれを「放下著(ほうげじゃく)」——手放せ、と一言で表現する。


驚くべき対応:不確定性 vs 空性

並べて比較してみよう:

不確定性原理 仏教の空性
固定した属性がない 自性がない
粒子は同時に確定した位置と運動量を持たない 万物は独立自存の本質を持たない
「あるが測れない」のではない 「あるが見えない」のではない
「本当にない」のだ 「本当に空」なのだ
属性は測定に依存する 存在は条件に依存する
位置は測定方法に依存 本質は観察の角度に依存
測定方法が変われば属性が変わる 条件が変われば性質が変わる
交換関係 縁起
[x̂, p̂] = iℏ ≠ 0 此有るが故に彼有り
位置と運動量は互いに制約する 万物は互いに因縁となる
独立した実在がない 自性がない
粒子は「位置を持つ小球」ではない 事物は「本質を持つ実体」ではない

構造的対応であり、安易な類推ではない

改めて強調しておきたい:これは「量子力学が仏教の正しさを証明した」という主張ではない。

両者が指し示しているのは、固定した本質を超えたところにある、実在の構造である。

  • 量子力学は実験から発見した:属性は固有のものではなく、測定との相互作用から生まれる
  • 仏教は内省と観察から発見した:本質は固有のものではなく、因縁の和合から生まれる

両者がともに語っているのは:固定性・自性は、世界の根底にある性質ではない。

湯川秀樹は著書『創造的人間』で、この種の東西の知の共鳴に早くから注目していた。また、京都学派の哲学者・西田幾多郎の「絶対無」の概念は、量子力学の「不確定性」と仏教の「空」の間にある深い構造的類似を理解するための、もうひとつの重要な視座を提供している。


インドラの網(帝網、たいもう):一切は互いに因縁

『華厳経』は帝釈天の宮殿にかかる「帝釈天の網」(因陀羅網、インドラの網、Indra’s Net)をこう描写する:

天帝釈の宮殿は荘厳を極め、羅網これを覆う。一々の網目には、それぞれ明珠あり。一々の明珠は、一切の珠影を映現す。一々の珠影は、また一切の珠影を映す。かくのごとく重重無尽にして、不可思議なり。

日本の華厳宗は、東大寺の大仏建立(752年)とともに国家的規模で展開された。法蔵(ほうぞう)は、鏡と燭台を使ってインドラの網を実演し、武則天に華厳の世界観を説いたという逸話が残る。

その意味するところは:
– 天宮には無限に広がる珠の網がある
– 各交差点に一つの宝珠がある
– 各珠はすべての他の珠を映す
– 各映像にはまたすべての珠の映像が含まれる
– 無限に再帰し、互いに映し合う

哲学的含意:
– 独立した珠はない(各珠は網全体を含む)
– 一つの珠を変えれば、すべての珠が変わる
– 部分は全体を含み、全体は部分を含む
一即一切、一切即一

量子もつれ:現代のインドラの網

量子力学において、二つの粒子は「もつれ状態」(entangled state)をとり得る:

|ψ⟩ = (|↑↓⟩ – |↓↑⟩) / √2

もつれ状態の特性:
– 粒子Aと粒子Bは分離不可能
– Aを測定すると、瞬時にBに影響する(たとえ光年の距離を隔てていても)
– Aの状態を単独で定義することができない
– 全体は部分の和よりも大きい

これはインドラの網と驚くほど対応する:
– 各粒子が他の粒子の状態を「反映」している
– 一つの粒子を変えると、システム全体に影響する
– 独立した粒子状態は存在しない

ベルの不等式(1964年)とアスペの実験(1982年)が証明したのは:
量子もつれは実在であり、隠れた変数によるものではないということだ。

2022年のノーベル物理学賞は、まさにこの量子もつれの実験的検証に対して授与された。


Pythonモデル:「不確定」の湧現を見る

モデル1:不確定性原理インタラクティブ実験

まず、必要な科学計算ライブラリをインポートし、不確定性原理の核心となるクラスを構築する。ガウス波束は量子力学で最もよく用いられる波動関数の形であり、「位置の確定」と「運動量の確定」がいかにトレードオフの関係にあるかを直観的に示してくれる。

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq

# Japanese font configuration
plt.rcParams['font.sans-serif'] = ['Hiragino Sans', 'Yu Gothic', 'Meiryo', 'Arial']
plt.rcParams['axes.unicode_minus'] = False

class UncertaintyPrinciple:
    """
    Uncertainty principle interactive experiment.
    Demonstrates the trade-off between position and momentum uncertainty.
    """

    def __init__(self):
        self.hbar = 1.0  # reduced Planck constant (arbitrary units)

    def gaussian_wavepacket(self, x, x0, sigma_x, k0):
        """
        Gaussian wave packet.
        x0: center position
        sigma_x: position standard deviation (uncertainty)
        k0: central wavenumber (corresponding momentum p0 = hbar * k0)
        """
        return (1 / (2 * np.pi * sigma_x**2)**0.25) * \
               np.exp(-((x - x0)**2) / (4 * sigma_x**2)) * \
               np.exp(1j * k0 * x)

    def momentum_distribution(self, psi_x, dx):
        """
        Compute momentum-space wavefunction from position-space wavefunction
        via Fourier transform.
        """
        psi_k = fft(psi_x) * dx
        return psi_k

続いて、可視化の核心部分に入る。4組の異なる sigma_x 値でそれぞれ波束を生成し、フーリエ変換を通じて対応する運動量分布を求める。ここで重要なのは——波束が位置空間で狭い(Δx が小さい)ほど、運動量空間では広く(Δp が大きく)なり、その逆も然りだということだ。これは数値的な誤差ではなく、フーリエ変換の数学的必然である。

    def visualize_uncertainty(self, sigma_x_values=[0.5, 1.0, 2.0, 4.0]):
        """
        Visualize wave packets for different position uncertainties.
        """
        x = np.linspace(-20, 20, 2000)
        dx = x[1] - x[0]

        fig, axes = plt.subplots(2, len(sigma_x_values), figsize=(18, 10))

        for i, sigma_x in enumerate(sigma_x_values):
            # Generate wave packet
            psi_x = self.gaussian_wavepacket(x, x0=0, sigma_x=sigma_x, k0=5)

            # Position-space probability density
            prob_x = np.abs(psi_x)**2

            # Momentum space
            psi_k = self.momentum_distribution(psi_x, dx)
            k = fftfreq(len(x), dx) * 2 * np.pi
            prob_k = np.abs(psi_k)**2

            # Re-sort (fft output needs reordering)
            k_sorted_idx = np.argsort(k)
            k_sorted = k[k_sorted_idx]
            prob_k_sorted = prob_k[k_sorted_idx]

            # Compute uncertainties
            delta_x = sigma_x
            delta_k = 1 / (2 * sigma_x)
            delta_p = self.hbar * delta_k
            uncertainty_product = delta_x * delta_p

各波束について上下2枚のグラフを生成する。上段は位置空間の確率密度(青)、下段は運動量空間の確率密度(赤)。不確定性の積 Δx·Δp が常に ℏ/2 以上であることに注目してほしい——これこそがハイゼンベルクの不確定性原理の数学的表現である。

            # === Upper plot: position space ===
            ax = axes[0, i]
            ax.plot(x, prob_x, 'b-', linewidth=2)
            ax.fill_between(x, 0, prob_x, alpha=0.3, color='blue')
            ax.set_xlabel('位置 x', fontsize=11)
            ax.set_ylabel('|ψ(x)|²', fontsize=11)
            ax.set_title(f'位置の不確定性\nΔx = {delta_x:.2f}',
                        fontsize=12, fontweight='bold', color='blue')
            ax.grid(True, alpha=0.3)
            ax.set_xlim(-15, 15)
            ax.axvspan(-delta_x, delta_x, alpha=0.2, color='cyan',
                      label=f'Δx = {delta_x:.2f}')
            ax.legend(fontsize=9)

            # === Lower plot: momentum space ===
            ax = axes[1, i]
            center_idx = len(k_sorted) // 2
            plot_range = 500
            k_plot = k_sorted[center_idx-plot_range:center_idx+plot_range]
            prob_k_plot = prob_k_sorted[center_idx-plot_range:center_idx+plot_range]

            if np.max(prob_k_plot) > 0:
                prob_k_plot = prob_k_plot / np.max(prob_k_plot)

            ax.plot(k_plot, prob_k_plot, 'r-', linewidth=2)
            ax.fill_between(k_plot, 0, prob_k_plot, alpha=0.3, color='red')
            ax.set_xlabel('波数 k(運動量 p=ℏk)', fontsize=11)
            ax.set_ylabel('|ψ(k)|²', fontsize=11)
            ax.set_title(f'運動量の不確定性\nΔp = {delta_p:.2f}',
                        fontsize=12, fontweight='bold', color='red')
            ax.grid(True, alpha=0.3)

            color = 'green' if uncertainty_product >= self.hbar/2 else 'red'
            ax.text(0.5, 0.9,
                   f'Δx·Δp = {uncertainty_product:.3f}\n(ℏ/2 = {self.hbar/2:.3f})',
                   transform=ax.transAxes, ha='center', fontsize=10,
                   bbox=dict(boxstyle='round', facecolor=color, alpha=0.5))

        fig.text(0.5, 0.98, '不確定性原理:Δx が小さいほど → Δp は大きくなる',
                ha='center', fontsize=16, fontweight='bold')
        fig.text(0.5, 0.02,
                '核心的洞察:これは測定誤差ではなく、波動の数学的性質である!\n'
                '波束を「狭く(位置確定)」しながら「純粋(運動量確定)」にすることは不可能',
                ha='center', fontsize=11,
                bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.5))

        plt.tight_layout()
        plt.subplots_adjust(top=0.93, bottom=0.1)
        plt.savefig('uncertainty_principle_visualization.png', dpi=300, bbox_inches='tight')
        plt.show()

最後のパートは、インタラクティブな測定実験のテキスト出力である。「位置を先に測って運動量を後に測る」場合と「運動量を先に測って位置を後に測る」場合を模擬し、測定の順序が結果を根本的に変えてしまうことを示す——これは位置演算子と運動量演算子が非可換であることの帰結だ。ここで仏教との類比も導入される。万物に固定した「自性」はなく、属性は観察の仕方に応じて顕現する。

    def interactive_measurement(self):
        """
        Interactive measurement: observe the effect of measurement order.
        """
        print("\n" + "="*70)
        print("【不確定性原理インタラクティブ実験】")
        print("="*70)

        x = np.linspace(-10, 10, 1000)
        sigma_x = 1.0
        psi = self.gaussian_wavepacket(x, x0=0, sigma_x=sigma_x, k0=5)

        print("\n初期状態:")
        print(f"  位置の不確定性 Δx ≈ {sigma_x:.2f}")
        print(f"  運動量の不確定性 Δp ≈ {self.hbar/(2*sigma_x):.2f}")
        print(f"  不確定性の積 Δx·Δp ≈ {sigma_x * self.hbar/(2*sigma_x):.3f}")
        print(f"  ハイゼンベルクの下限 ℏ/2 = {self.hbar/2:.3f}")

        print("\n実験1:位置を先に測定し、次に運動量を測定")
        print("  → 位置測定後、波動関数は特定の位置に収縮する")
        print("  → このとき Δx → 0、したがって Δp → ∞")
        print("  → 運動量は完全に不確定!")

        print("\n実験2:運動量を先に測定し、次に位置を測定")
        print("  → 運動量測定後、波動関数は平面波になる")
        print("  → このとき Δp → 0、したがって Δx → ∞")
        print("  → 位置は完全に不確定!")

        print("\n結論:")
        print("  • 測定の順序が結果を変える(x̂ と p̂ は非可換)")
        print("  • ある量を測定すると、別の量が撹乱される")
        print("  • これは機器の問題ではなく、自然法則である")

        print("\n仏教的視点:")
        print("  • 万物に固定した「自性」はない")
        print("  • 属性は観察の仕方に依存する")
        print("  • 見る角度が変われば、見える相も変わる")
        print("  → 道元:「仏道を習ふといふは、自己を習ふなり」")
        print("="*70)

# Execute
experiment = UncertaintyPrinciple()
experiment.visualize_uncertainty(sigma_x_values=[0.5, 1.0, 2.0, 4.0])
experiment.interactive_measurement()

実行結果:
– 4組の比較図。異なる Δx に対応する Δp を表示
– Δx が小さいとき Δp は大きく、Δx が大きいとき Δp は小さいことが明確に見える
– 不確定性の積 Δx·Δp は常に ≥ ℏ/2

核心的洞察:

これは「測定精度の不足」ではない。これは波動の数学的性質である。
波束を狭くしたければ(位置を確定させたければ)、多くの波長を重ね合わせなければならず、運動量は不確定になる。


モデル2:「空性」の可視化——事物は条件に応じて顕れる

このモデルでは、日常の体験を通じて「空性」の概念を可視化する。ここでは茶碗を例にとる——上から見れば円形、横から見れば長方形。茶碗の「真の形」とは何か? 答えは、観察角度から独立した「固定の形」など存在しない、ということだ。

def visualize_emptiness():
    """
    Visualization of sunyata (emptiness).
    Demonstrates how properties of things depend on observation conditions.
    """

    fig = plt.figure(figsize=(16, 12))

    # === Example: the "emptiness" of a teacup ===

    # Subplot 1: different angles reveal different shapes
    ax1 = fig.add_subplot(2, 3, 1)
    circle = plt.Circle((0.5, 0.5), 0.3, fill=False, edgecolor='blue', linewidth=3)
    ax1.add_patch(circle)
    ax1.text(0.5, 0.1, '上から見ると:円形', ha='center', fontsize=12, fontweight='bold')
    ax1.set_xlim(0, 1)
    ax1.set_ylim(0, 1)
    ax1.set_aspect('equal')
    ax1.axis('off')

    # Subplot 2: side view: rectangle
    ax2 = fig.add_subplot(2, 3, 2)
    rect = plt.Rectangle((0.2, 0.2), 0.6, 0.6, fill=False, edgecolor='red', linewidth=3)
    ax2.add_patch(rect)
    ax2.text(0.5, 0.1, '横から見ると:長方形', ha='center', fontsize=12, fontweight='bold')
    ax2.set_xlim(0, 1)
    ax2.set_ylim(0, 1)
    ax2.set_aspect('equal')
    ax2.axis('off')

    # Subplot 3: the question
    ax3 = fig.add_subplot(2, 3, 3)
    ax3.text(0.5, 0.5, '問:茶碗の\n「真の形」は?\n\n答:「固定した形」は\n存在しない!\n\n形は観察角度に\n依存する',
            ha='center', va='center', fontsize=13,
            bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))
    ax3.set_xlim(0, 1)
    ax3.set_ylim(0, 1)
    ax3.axis('off')

下段の3枚は、同じ論理を量子の世界に拡張する。「位置」を測定すればある分布が得られ、「運動量」を測定すれば別の分布が得られる——粒子の「真の状態」もまた、測定方法から独立した固定の答えを持たない。これこそが空性と不確定性原理の構造的対応である。

    # === Quantum analogy: particle "position" ===

    # Subplot 4: position measurement
    ax4 = fig.add_subplot(2, 3, 4)
    x = np.linspace(-5, 5, 1000)
    psi_position = np.exp(-x**2)
    ax4.plot(x, psi_position, 'b-', linewidth=3)
    ax4.fill_between(x, 0, psi_position, alpha=0.3, color='blue')
    ax4.set_xlabel('位置', fontsize=11)
    ax4.set_ylabel('確率', fontsize=11)
    ax4.set_title('「位置」を測定\n→ 位置が確定', fontsize=12, fontweight='bold', color='blue')
    ax4.grid(True, alpha=0.3)

    # Subplot 5: momentum measurement
    ax5 = fig.add_subplot(2, 3, 5)
    k = np.linspace(-5, 5, 1000)
    psi_momentum = np.exp(-(k-2)**2/4)
    ax5.plot(k, psi_momentum, 'r-', linewidth=3)
    ax5.fill_between(k, 0, psi_momentum, alpha=0.3, color='red')
    ax5.set_xlabel('運動量', fontsize=11)
    ax5.set_ylabel('確率', fontsize=11)
    ax5.set_title('「運動量」を測定\n→ 運動量が確定', fontsize=12, fontweight='bold', color='red')
    ax5.grid(True, alpha=0.3)

    # Subplot 6: conclusion
    ax6 = fig.add_subplot(2, 3, 6)
    ax6.text(0.5, 0.5, '問:粒子の\n「真の状態」は?\n\n答:「固定した属性」は\n存在しない!\n\n属性は測定方法に\n依存する',
            ha='center', va='center', fontsize=13,
            bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
    ax6.set_xlim(0, 1)
    ax6.set_ylim(0, 1)
    ax6.axis('off')

最後にタイトルと説明文を加え、空性の三層の意味を対照表として出力する。このコードの出力で特に注目すべきは、仏教の「縁起」と量子力学の「測定依存性」が同一のフレームワークに置かれている点だ——世界は「固定した属性を持つ物体」からできているのではなく、「条件に応じて顕現する関係」からできている。

    # Overall title and correspondence notes
    fig.text(0.5, 0.98, '「空性」と「不確定性」の構造的対応',
            ha='center', fontsize=16, fontweight='bold')
    fig.text(0.5, 0.02,
            '仏教:事物に「自性」(固定した本質)はなく、属性は条件に応じて顕れる\n'
            '量子力学:粒子に「確定した属性」はなく、属性は測定によって決まる\n'
            '共通点:「固定性」は実在の本質ではない',
            ha='center', fontsize=11,
            bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))

    plt.tight_layout()
    plt.subplots_adjust(top=0.93, bottom=0.12)
    plt.savefig('emptiness_visualization.png', dpi=300, bbox_inches='tight')
    plt.show()

    # Text output
    print("\n" + "="*70)
    print("【空性の三つの意味】")
    print("="*70)

    print("\n1. 空は「無」ではない")
    print("   『般若心経』:「色即是空、空即是色」")
    print("   → 事物は存在するが、固定した本質を持たない")

    print("\n2. 空は「縁起」")
    print("   龍樹:「因縁所生の法、我これを空と説く」")
    print("   → 一切は条件に依存して存在する")

    print("\n3. 空は「執着」を破る")
    print("   → 固定した「我」はない")
    print("   → 固定した「物」はない")
    print("   → 空性を悟り、執着を手放す(放下著)")

    print("\n不確定性原理との対応:")
    print("   • 粒子に固定した「位置」や「運動量」はない")
    print("   • 属性は測定方法によって決まる")
    print("   • 観察から独立した「客観的属性」は存在しない")

    print("\n共通の洞察:")
    print("   世界は「固定した属性を持つ物体」からなるのではなく")
    print("   「条件に応じて顕れる関係」からなる")
    print("="*70)

# Execute
visualize_emptiness()

実行結果:
– 上段:茶碗を異なる角度から見ると異なる形が見える
– 下段:粒子の位置 vs 運動量の測定で異なる結果が得られる
– 「属性は観察に依存する」ことの可視化

哲学的洞察:

仏教:属性は「観察角度」に依存する
量子力学:属性は「測定方法」に依存する
共通点:観察から独立した固定の属性は存在しない


モデル3:インドラの網——量子もつれの可視化

このモデルでは、NetworkX を用いて二つの並列ネットワークを構築する。一つは華厳宗のインドラの網(2Dグリッド)、もう一つは量子もつれネットワーク(3Dランダム分布の粒子群)。赤くハイライトされたノードは「変化を受けた珠」を表す——インドラの網では一つの珠を変えれば網全体の映照が変わり、量子もつれでは一つの粒子を測定すればもつれたすべての粒子に瞬時に影響する。

import networkx as nx
from mpl_toolkits.mplot3d import Axes3D

def indras_net_quantum():
    """
    Indra's Net and quantum entanglement.
    Demonstrates: everything is interconnected; changing one affects all.
    """

    fig = plt.figure(figsize=(18, 12))

    # === Left: Indra's Net (2D network) ===
    ax1 = fig.add_subplot(2, 2, 1)

    n = 5
    G = nx.grid_2d_graph(n, n)
    pos = {(i, j): (i, j) for i, j in G.nodes()}

    nx.draw_networkx_nodes(G, pos, node_color='gold', node_size=800,
                          edgecolors='black', linewidths=2, ax=ax1)
    nx.draw_networkx_edges(G, pos, edge_color='gray', width=2, ax=ax1)

    highlight_node = (2, 2)
    nx.draw_networkx_nodes(G, pos, nodelist=[highlight_node],
                          node_color='red', node_size=1000,
                          edgecolors='black', linewidths=3, ax=ax1)

    ax1.set_title('インドラの網:各珠が一切を映す\n一つを変えれば、全てが変わる',
                 fontsize=13, fontweight='bold')
    ax1.axis('off')
    ax1.text(2, -0.5, '華厳宗:一即一切、一切即一',
            ha='center', fontsize=11,
            bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))

    # === Right: quantum entanglement network (3D) ===
    ax2 = fig.add_subplot(2, 2, 2, projection='3d')

    n_particles = 8
    positions = np.random.randn(n_particles, 3)

    ax2.scatter(positions[:, 0], positions[:, 1], positions[:, 2],
               c='cyan', s=300, edgecolors='black', linewidth=2, alpha=0.8)

    for i in range(n_particles):
        for j in range(i+1, n_particles):
            ax2.plot([positions[i, 0], positions[j, 0]],
                    [positions[i, 1], positions[j, 1]],
                    [positions[i, 2], positions[j, 2]],
                    'b-', alpha=0.2, linewidth=1)

    ax2.scatter([positions[0, 0]], [positions[0, 1]], [positions[0, 2]],
               c='red', s=500, edgecolors='black', linewidth=3, zorder=10)

    ax2.set_title('量子もつれ:粒子間の非局所的相関\n一つを測定すれば、全てに影響',
                 fontsize=13, fontweight='bold')
    ax2.set_xlabel('X')
    ax2.set_ylabel('Y')
    ax2.set_zlabel('Z')

下半分の二枚のサブプロットでは、テキストボックスを使ってもつれ状態の数学的構造と哲学的対応を示す。左下にはベル状態の公式とベルの不等式の実験的検証の歴史が、右下にはインドラの網と量子もつれの特徴を条ごとに対照する表が置かれている。両者の共通結論は、世界は「独立した個体の集合」ではなく「相互依存の関係の網」であるということだ。

    # === Lower left: entangled state mathematics ===
    ax3 = fig.add_subplot(2, 2, 3)
    ax3.axis('off')

    text = '''
    もつれ状態(ベル状態):

    |ψ⟩ = (|↑↓⟩ - |↓↑⟩) / √2

    特性:
    • 粒子AとBは分離不可能
    • Aを測定 → 即座にBが判明
    • Aの状態は単独で定義できない
    • 全体 ≠ 部分の和

    ベルの不等式(1964年):
    粒子が「局所実在性」を持つなら
    → ある不等式を満たすはず

    実験結果(1982-2022年):
    不等式は破れた!
    → 局所実在性はない
    → もつれは実在する
    '''

    ax3.text(0.1, 0.5, text, fontsize=11, va='center', family='monospace',
            bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))

    # === Lower right: Indra's Net vs entanglement ===
    ax4 = fig.add_subplot(2, 2, 4)
    ax4.axis('off')

    comparison = '''
    【インドラの網 vs 量子もつれ】

    インドラの網:
    • 各珠は網全体を含む
    • 一珠を変えれば、全網が動く
    • 部分が全体である
    • 一即一切

    量子もつれ:
    • 各粒子はシステム全体の情報を含む
    • 一粒子を測定すれば、全もつれ粒子に影響
    • 粒子の状態は単独で定義不可能
    • 全体は分割不可能

    共通点:
    → 「独立した」部分は存在しない
    → 一切は相互に依存する
    → 局部を変える=全体を変える
    '''

    ax4.text(0.1, 0.5, comparison, fontsize=11, va='center',
            bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))

    plt.tight_layout()
    plt.savefig('indras_net_entanglement.png', dpi=300, bbox_inches='tight')
    plt.show()

コードの最後のセクションでは、『華厳経』からアスペの実験まで、2022年のノーベル賞から仏教の縁起法まで、歴史軸と哲学的洞察を交差させた詳細なテキスト対照を出力する。

    # Data explanation
    print("\n" + "="*70)
    print("【インドラの網と量子もつれ】")
    print("="*70)

    print("\n『華厳経』のインドラの網(帝網):")
    print("  • 無限に広がる珠の網")
    print("  • 各珠がすべての珠を映す")
    print("  • 無限に再帰し、互いに映し合う")
    print("  → 一即一切、一切即一")

    print("\n量子もつれ(Entanglement):")
    print("  • 二つ以上の粒子がもつれ状態にある")
    print("  • |ψ⟩ = (|↑↓⟩ - |↓↑⟩) / √2")
    print("  • 一つの粒子を測定すると、瞬時に他の粒子に影響")
    print("  • たとえ光年の距離を隔てても、相関は保たれる")

    print("\n実験的証拠:")
    print("  • 1982年:アスペの実験がもつれを実証")
    print("  • 2015年:「抜け穴のない」ベル実験")
    print("  • 2022年:ノーベル物理学賞")

    print("\n哲学的含意:")
    print("  • 「独立した」粒子は存在しない")
    print("  • 宇宙は分割不可能な全体である")
    print("  • 「分離」は幻想にすぎない")

    print("\n仏教の「縁起」:")
    print("  • 此有るが故に彼有り、此生ずるが故に彼生ず")
    print("  • 一切の法は互いに因縁となる")
    print("  • 独立自存の「我」も「物」もない")

    print("\n共通の洞察:")
    print("  世界は「独立した個体の集合」ではなく")
    print("  「相互依存の関係の網」である")
    print("="*70)

# Execute
indras_net_quantum()

実行結果:
– 4枚の図でインドラの網と量子もつれの対応を表示
– 2Dネットワーク + 3Dもつれの可視化
– 数学的公式 + 比較表

深い洞察:

華厳宗が1500年前にインドラの網で描写した宇宙の構造と、量子もつれが明らかにした非局所的相関は、驚くほどの構造的対応を見せている。


モデル4:「我」の空性——自己はもつれ状態

このモデルでは、仏教の「無我」(anātman)の概念を二つの対比図で可視化する。左図は私たちが通常抱いている「古典的自我観」——赤い「我」が中心にあり、その周囲に家族・友人・仕事・身体・記憶・思考が並ぶ。あたかも「我」が独立した核として、これらを「所有」しているかのように。

def self_as_entanglement():
    """
    Emptiness of the "self".
    Demonstrates how the "self" is a dependent arising with no intrinsic nature.
    """

    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8))

    # === Left: classical concept of "self" ===
    circle_self = plt.Circle((0.5, 0.5), 0.15, color='red', alpha=0.7,
                            edgecolor='black', linewidth=3)
    ax1.add_patch(circle_self)
    ax1.text(0.5, 0.5, '我', ha='center', va='center', fontsize=20,
            fontweight='bold', color='white')

    external_things = [
        (0.2, 0.8, '家族'),
        (0.8, 0.8, '友人'),
        (0.1, 0.5, '仕事'),
        (0.9, 0.5, '身体'),
        (0.2, 0.2, '記憶'),
        (0.8, 0.2, '思考'),
    ]

    for x, y, label in external_things:
        circle = plt.Circle((x, y), 0.08, color='lightblue', alpha=0.5,
                           edgecolor='gray', linewidth=1.5)
        ax1.add_patch(circle)
        ax1.text(x, y, label, ha='center', va='center', fontsize=10)
        ax1.annotate('', xy=(x, y), xytext=(0.5, 0.5),
                    arrowprops=dict(arrowstyle='->', lw=1.5, color='black', alpha=0.5))

    ax1.set_xlim(0, 1)
    ax1.set_ylim(0, 1)
    ax1.set_aspect('equal')
    ax1.axis('off')
    ax1.set_title('古典的概念:独立した「我」\n「我」が身体・記憶・思考を所有する…',
                 fontsize=14, fontweight='bold')
    ax1.text(0.5, 0.05, '仮定:独立した「自我」の核心が存在する',
            ha='center', fontsize=11,
            bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))

右図は仏教の「五蘊」観を示す。中心は存在せず、色(しき)・受・想・行・識の五つの要素が互いに結びついているだけだ。「我」は独立した実体ではなく、五蘊が因縁によって和合した一時的なパターン——ちょうど粒子が独立した「小球」ではなく場の励起モードであるように。

    # === Right: Buddhist "non-self" (anātman) ===
    elements = [
        (0.3, 0.7, '色'),
        (0.7, 0.7, '受'),
        (0.5, 0.5, '想'),
        (0.3, 0.3, '行'),
        (0.7, 0.3, '識'),
    ]

    for x, y, label in elements:
        circle = plt.Circle((x, y), 0.1, color='lightgreen', alpha=0.6,
                           edgecolor='green', linewidth=2)
        ax2.add_patch(circle)
        ax2.text(x, y, label, ha='center', va='center', fontsize=12,
                fontweight='bold')

    for i, (x1, y1, _) in enumerate(elements):
        for x2, y2, _ in elements[i+1:]:
            ax2.plot([x1, x2], [y1, y2], 'g-', alpha=0.3, linewidth=2)

    ax2.set_xlim(0, 1)
    ax2.set_ylim(0, 1)
    ax2.set_aspect('equal')
    ax2.axis('off')
    ax2.set_title('仏教の概念:「五蘊」は無我\n独立した「我」はなく、因縁和合のみ',
                 fontsize=14, fontweight='bold')
    ax2.text(0.5, 0.05, '真実:「我」は五蘊(色・受・想・行・識)の一時的な和合',
            ha='center', fontsize=11,
            bbox=dict(boxstyle='round', facecolor='lightgreen', alpha=0.7))

    plt.tight_layout()
    plt.savefig('self_emptiness.png', dpi=300, bbox_inches='tight')
    plt.show()

テキスト出力の部分では、五蘊理論と量子状態の数学的表現を重ね合わせる。粒子の状態は異なる基底で展開できる(位置基底、運動量基底)が、どの基底が「本質的」というわけではない。同様に、「我」も身体・記憶・環境といった異なる側面から理解できるが、どの側面にも独立した「我の核心」は見出せない。

    # Quantum analogy
    print("\n" + "="*70)
    print("【「我」の空性:自己はもつれ状態】")
    print("="*70)

    print("\n仏教の「五蘊」(pañcaskandha)理論:")
    print("  1. 色蘊(rūpa):身体、物質")
    print("  2. 受蘊(vedanā):感受、感覚")
    print("  3. 想蘊(saṃjñā):表象、概念")
    print("  4. 行蘊(saṃskāra):意志、心の働き")
    print("  5. 識蘊(vijñāna):認識、意識")

    print("\n仏教の主張:")
    print("  • 独立した「我」(ātman)は存在しない")
    print("  • 「我」は五蘊の一時的な和合にすぎない")
    print("  • 五蘊が因縁によって和合 → 「我」という幻が生じる")
    print("  • 五蘊が散ずれば → 「我」は消える")

    print("\n量子力学との類比:")
    print("  • 粒子には独立した「状態」がない")
    print("  • 「状態」は測定基底への射影である")
    print("  • 系は異なる基底で展開できる:")
    print("    |ψ⟩ = Σ cᵢ|φᵢ⟩ (位置基底)")
    print("    |ψ⟩ = Σ dⱼ|χⱼ⟩ (運動量基底)")
    print("  • 「本質的な」状態はなく、基底に相対的な表現があるのみ")

    print("\n「我」がもつれ状態である理由:")
    print("  |我⟩ = α|身体⟩|記憶⟩|環境⟩... (簡略化した表現)")
    print("  ")
    print("  • 「我」は身体ともつれている(身体が変われば「我」が変わる)")
    print("  • 「我」は記憶ともつれている(記憶を失えば「我」が変わる)")
    print("  • 「我」は環境ともつれている(環境が変われば「我」も変わる)")
    print("  • これらから独立した「我の核心」は存在しない")

    print("\n実践的意義:")
    print("  • 「我」への執着が苦(duḥkha)の根源である")
    print("  • 「無我」を悟れば、執着から解放される")
    print("  • 「我が存在しない」のではなく「我に自性がない」のだ")
    print("  • 「我」は因縁に依って有り、因縁が変われば「我」も変わる")

    print("\n深い問い:")
    print("  もし「我」に自性がないなら、「誰が」この文章を読んでいるのか?")
    print("  答え:読むという営みが起きているが、独立した「読者」はいない。")
    print("  波動関数の収縮が起きるが、独立した「粒子」がいないのと同じだ。")
    print("  道元:「自己をならふといふは、自己をわするるなり。」")
    print("="*70)

# Execute
self_as_entanglement()

図:Emptiness Network
図:Emptiness Network
図:Uncertainty Tradeoff
図:Uncertainty Tradeoff
図:Wave Packet Uncertainty
図:Wave Packet Uncertainty

実行結果:
– 左図:古典的な「自我」の概念(独立した「我」)
– 右図:仏教の「五蘊」(独立した「我」はない)
– 量子力学との類比:「我」がいかにもつれ状態であるか

最も深い洞察:

「我」は独立した実体ではなく、身心環境の因縁和合による一時的なパターンである。
粒子が独立した「小球」ではなく場の励起モードであるのと同じように。


アインシュタイン最後の疑問

1955年4月18日、アインシュタインが世を去る数日前。

彼は友人に最後の手紙を書き、量子力学について論じた:

「神がサイコロを振るとは信じられない……おそらく私たちは、まだより深い理論を見つけていないだけだ。」

アインシュタインは最期まで量子力学の不確定性を受け入れなかった。

彼はこう信じていた:
– 「隠れた変数」(hidden variables)が必ず存在する
– 粒子は本当に確定した位置と運動量を持っている
– 私たちがそれを知らないだけだ

しかし、彼は間違っていた。

1964年、ジョン・ベルが「ベルの不等式」を導出した:
– 隠れた変数が存在するなら → 実験はある不等式を満たすはず
– 量子力学の予測 → この不等式に違反する

1982年から2022年にかけて、無数の実験が証明した:不等式は破れている。

結論:隠れた変数は存在しない。不確定性は本質的なものである。

アインシュタインの直覚——「実在は確定しているべきだ」——は実験によって覆された。

仏陀ならどう言うだろうか

もし仏陀が不確定性原理を知ったなら、おそらくこう語るだろう:

「これはまさに私が説いた『無自性』に他ならない。
粒子に固定した位置と運動量がないように、万物に固定した本質はない。
属性が条件に応じて顕れるように、一切の法は縁に依って起こる。
不確定性は欠陥ではない——実在の本質そのものである。」

あるいは、禅の言葉を借りるならこうだろうか:

「柳は緑、花は紅。」

そこにあるがままの世界には、「固定した本質」など、もとよりない。


思考題

  1. ハイゼンベルクは「粒子は同時に確定した位置と運動量を持たない」と述べた。これは私たちの日常経験と矛盾するだろうか? なぜだろうか?

  2. 不確定性が本質的なものであるなら、「確定性」はどこから来るのか? マクロの世界はなぜ確定しているように見えるのか?

  3. 仏教は「我に自性なし」と説く。では「誰が」その「無我」を悟るのか? これは論理的矛盾(パラドックス)なのか?

  4. 量子もつれは、一切が相互に依存していることを「証明」しているのか? それとも巧みな類推にすぎないのか?

  5. 「万物に自性なし」を本当に受け入れたとき、あなたの生き方はどう変わるだろうか?


結語

ハイゼンベルクがヘルゴラント島で日の出を待ったあの早朝、彼は自身を震撼させる真理に出会った——粒子には、固定した属性がない。

2500年前、龍樹菩薩はインドの大地で、同様に衝撃的な洞察を書き記した——万物には、固定した本質がない。

彼らの用いた言語は異なる。一方は数学、他方は哲学。方法も異なる。一方は実験、他方は瞑想。

しかし、両者が指し示した方向は同じだ:

「固定性」は、世界の本質ではない。

不確定性は欠陥ではなく、空性は虚無ではない。

両者はともに、実在のより深い構造を語っている:

一切は条件に依って存在し、関係に依って顕現する。

Pythonで波束の不確定性を模擬し、五蘊の無我構造を可視化するとき、私たちはただの学術的演習をしているのではない。

世界を見る新しい目を、手に入れつつある。

湯川秀樹はかつてこう記した:「素粒子の世界は、常識の世界ではない。しかし、それは東洋的直観にとっては、必ずしも違和感のないものである。」

おそらくこれは、ハイゼンベルク自身が述べたことと通底しているのだろう:「自然は、私たちの哲学よりもはるかに深遠である。」


類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です