量子重ね合わせ vs 老荘の「道」——存在と非存在のあいだで
シリーズ:量子力学と東洋哲学の出会い #03/12 | 読了時間:30分 | Python (NumPy, Matplotlib)
著者:Wina @ Code & Cogito
シュレーディンガーの悔恨
1935年、ベルリン。
エルヴィン・シュレーディンガー(Erwin Schrödinger)は書斎の机に向かい、書き上げたばかりの論文を見つめていました。タイトルは『量子力学の現状』(Die gegenwärtige Situation in der Quantenmechanik)。
彼はその中で、コペンハーゲン解釈の不合理さを皮肉るための思考実験を記しました。
密閉された箱の中に一匹の猫がいるとしよう。箱の中には放射性原子、ガイガーカウンター、ハンマー、毒薬の瓶がある。
原子が崩壊すればカウンターが反応し、ハンマーが毒薬瓶を割り、猫は死ぬ。
原子が崩壊しなければ何も起こらず、猫は生きている。量子力学はこう言う——観測するまで、原子は「崩壊した」と「崩壊していない」の重ね合わせ状態にある。
では…猫は?
コペンハーゲン解釈に従えば、猫もまた「死んでいる」と「生きている」の重ね合わせ状態にある——死んでもいて生きてもいる。誰かが箱を開けるまで。
シュレーディンガーはペンを置き、ため息をつきました。
この不条理な例が、コペンハーゲン解釈のどこかが間違っていることを人々に気づかせることを、彼は願っていたのです。量子の法則は原子には適用できても、猫には適用できるはずがないと。
数年後、アインシュタインへの手紙の中で、彼はこう書いています。
「あの忌々しい量子跳躍…私がかつてそれに関わったことを深く後悔している。」
しかし歴史は残酷な冗談を演じました。
シュレーディンガーの猫はコペンハーゲン解釈を覆すどころか、量子力学で最も有名なシンボルとなったのです。
そして90年後の今日、物理学者たちは認めざるを得ません。
猫は確かに死んでもいて生きてもいられる。ただし、とてつもなく小さな猫である必要がある。
重ね合わせ状態:量子世界の「であって、でない」
数学的表現:極めてシンプルなのに極めて奇妙
量子重ね合わせの数学は驚くほど単純です。
|ψ⟩ = α|0⟩ + β|1⟩
ここで:
– |0⟩ と |1⟩ は二つの基本状態(例えば「死」と「生」)
– α と β は複素数で、「確率振幅」と呼ばれる
– |α|² は観測後に |0⟩ を得る確率
– |β|² は観測後に |1⟩ を得る確率
– |α|² + |β|² = 1(確率の保存)
一見シンプルですね。「50%の確率で死、50%の確率で生」のように見えますか?
違います!
重ね合わせは「知らない」のではなく「本当に両方である」
古典的な思考はこう考えます。
猫は死んでいるか生きているかのどちらかだ。どちらかわからないだけだから「50%死、50%生」と言う。サイコロと同じで、転がっている間もすでにどこかの面が出ているのだが、我々が知らないだけだ。
これは「無知解釈」(ignorance interpretation)と呼ばれます——確率は単に我々の知識の不完全さを反映しているにすぎない、という考え方です。
しかし量子力学は言います:それは間違いだ!
量子重ね合わせとは:
– 「猫は死か生のどちらかだが我々は知らない」のではない
– 「猫は本当に同時に死んでもいて生きてもいる」のだ
– 「原子は崩壊したか崩壊していないかのどちらかだ」のではない
– 「原子は本当に崩壊と非崩壊が混ざった状態にある」のだ
観測の前に、猫には確定した生死の状態がないのです。
なぜ「無知」ではなく「真の重ね合わせ」とわかるのか?
答えは干渉実験です。
重ね合わせが単なる「無知」であれば、二つの可能性は単純に加算されるはずです。
P(合計) = P(可能性1) + P(可能性2)
しかし量子力学では、確率振幅がまず加算され、その後に絶対値の二乗を取ります。
P(合計) = |α₁ + α₂|²
展開すると:
P(合計) = |α₁|² + |α₂|² + 2Re(α₁*α₂*)
最後の項 2Re(α₁α₂) が「干渉項」です。
- 「無知」であれば、この項は現れない
- 「真の重ね合わせ」であれば、この項が必ず現れる
二重スリット実験の干渉縞こそが、この干渉項の証拠です。
結論:重ね合わせは認識論的な不確定性ではなく、存在論的な不確定性である——粒子は本当に同時に二つの場所にいるのです。
老子の「道」:名づけの前に
紀元前4世紀、中国。
李耳と呼ばれる老人が青牛に乗り、函谷関へと向かいました。関守の尹喜に智慧を残すよう請われ、『道徳経』が生まれました。
冒頭の第一章:
道可道、非常道。
名可名、非常名。
無名天地之始、
有名万物之母。
日本の漢文訓読では「道の道とすべきは、常の道に非ず」——語ることのできる「道」は、永遠の「道」ではないのです。
「道可道、非常道」——語られた道はもはや真の道ではない
老子はこう言いました。真の「道」は言語では記述できない。
なぜか?
言語が現れた瞬間、分別が生まれるからです。
- 「これは机だ」と言えば、「机」と「机でないもの」の区別が生まれる
- 「これは美しい」と言えば、「美」と「醜」の対立が生まれる
- 「これは存在する」と言えば、「存在」と「非存在」の二項対立が成立する
老子の考えでは、言語・概念・名づけの前に、世界は無分別の原初状態にあります。この状態こそが「道」です。
禅の世界では、これは「不立文字」(ふりゅうもんじ)の精神と通底します。達磨大師が伝えた「教外別伝、不立文字」——文字や言語を超えたところにこそ真理がある。老子の「道可道、非常道」と禅の「不立文字」は、驚くほど同じことを語っているのです。
「無名天地之始、有名万物之母」
「無名」(名づけることのできない状態)が宇宙の始まり。
「有名」(名づけた後)が万物の母。
換言すれば:
1. 宇宙の始まりは「無名」——区別もなく、対立もなく、確定性もない
2. 名づけが行われることで、万物は「無名」から生まれ出る
これは抽象的に聞こえるかもしれませんが、量子力学との対応は驚くほど精密です。
- 観測前(無名):粒子は重ね合わせ状態にあり、確定した状態を持たない
- 観測後(有名):粒子は確定状態に収縮し、「位置」という概念が初めて生まれる
「有無相生」——有と無は互いに生じる
『道徳経』第二章:
有無相生、
難易相成、
長短相形、
高下相傾。
その意味は:
– 「有」と「無」は互いに依存し合う
– 「難」と「易」は互いに成り立たせる
– 「長」と「短」は互いに比較して現れる
– 「高」と「下」は互いに傾き合う
「有」がなければ「無」もなく、「無」がなければ「有」もない。
これは量子重ね合わせの構造とまったく同じです。
|ψ⟩ = α|有⟩ + β|無⟩
「有」と「無」は対立する二つの選択肢ではなく、同一の重ね合わせ状態を構成する二つの成分なのです。
驚くべき対応:重ね合わせ vs 「道」
並べて比較してみましょう。
| 量子重ね合わせ | 老子の「道」 |
|---|---|
| 観測前に確定状態がない | 名づけ前に分別相がない |
| 粒子は「AかBのどちらかだが不明」ではない | 道は「有か無のどちらかだが不明」ではない |
| 「本当に同時にAでもBでもある」 | 「本当に有無の二元を超越している」 |
| 観測が確定性を生む | 名づけが万物を生む |
| 観測前:|ψ⟩ = α|0⟩ + β|1⟩ | 名づけ前:無名天地之始 |
| 観測後:|0⟩ か |1⟩ に確定 | 名づけ後:有名万物之母 |
| 重ね合わせが本体 | 道が本源 |
| 重ね合わせは「過渡状態」ではない | 道は「空虚」ではない |
| 最も基本的な存在の在り方 | 最も根本的な実在 |
| 対立の統一 | 有無相生 |
| |ψ⟩ の中で「有」と「無」が共存 | 「有無相生」、分割不可能 |
構造的対応であり、表面的なアナロジーではない
重要なのは、「量子力学が老子の正しさを証明した」とか「老子が量子力学を予見した」ということではありません。
そうではなく、両者はともに、二項対立を超越した実在の構造を指し示しているのです。
- 量子力学は実験室から発見した:観測の前に、世界は確定していない
- 老子は深い瞑想から悟った:名づけの前に、道は分別されていない
両者が共通して語っていること:確定性や分別相は世界の本質ではなく、観察や名づけの産物である。
日本の哲学者・西田幾多郎もまた、「絶対矛盾的自己同一」という概念で、対立するものが根源においては一つであることを論じました。量子力学の重ね合わせ——|0⟩と|1⟩が同時に存在する——は、まさに西田の言う「矛盾するものの自己同一」を自然界が体現していると言えるかもしれません。
荘子の胡蝶の夢:観測者は誰か?
紀元前369年、荘子(荘周)が夢を見ました。
目覚めた後、彼は哲学史上最も不可思議な問いを記しました。
昔者荘周夢為胡蝶、栩栩然胡蝶也。
自喻適志与、不知周也。
俄然覚、則蘧蘧然周也。
不知周之夢為胡蝶与、胡蝶之夢為周与。
周与胡蝶、則必有分矣。此之謂物化。
現代語に訳せば:
かつて荘周は夢の中で蝶になっていた。ひらひらと舞う、まさしく蝶そのものだった。自分が荘周であることなど、すっかり忘れていた。
ふと目が覚めると、自分は確かに荘周だった。
しかし——荘周が夢で蝶になったのか? それとも蝶が夢で荘周になっているのか?
荘周と蝶には必ず区別があるはずだ。これを「物化」(万物の変化)と言う。
この「胡蝶の夢」は、日本文化にも深く根づいています。能の『胡蝶』、芥川龍之介から村上春樹に至る文学作品、さらには現代のアニメや漫画にまで、荘子のこの問いかけは繰り返し登場します。夢と現実の境界を疑うことは、日本の美意識——「幽玄」の感覚とも響き合います。
量子力学的解釈:重ね合わせ状態の観測者
量子の言語で表現し直すと:
「観測」(目覚め)の前、系は重ね合わせ状態にあります。
|ψ⟩ = α|荘周⟩ + β|蝶⟩
問題は:誰が観測するのか?
- 「荘周」が観測すれば、系は「荘周が実在、蝶は夢」に収縮する
- 「蝶」が観測すれば、系は「蝶が実在、荘周は夢」に収縮する
しかし収縮の前には、客観的な「真」も「偽」もないのです。
荘周と蝶は等しく実在であり、あるいは等しく夢なのです。
「物化」——万物の変化は重ね合わせの収縮
荘子は言いました:「周と胡蝶とは、則ち必ず分有り。此れを之れ物化と謂う。」
「物化」とは、万物の変化・変換・流転を意味します。
量子の言語で言えば、物化とは量子状態が異なる基底間で変換されることです。
- 「荘周-蝶」基底では:|ψ⟩ = α|荘周⟩ + β|蝶⟩
- 「真-偽」基底では:|ψ⟩ = γ|真⟩ + δ|偽⟩
どちらの記述も同等に有効であり、異なる観察の角度(測定基底)を選んだにすぎません。
「絶対的に真実な」状態は存在せず、特定の観測に対して相対的な確定状態があるだけです。
道元禅師の『正法眼蔵』における「現成公案」もまた、これと通じる洞察を含んでいます。「自己をはこびて万法を修証するを迷いとす、万法すすみて自己を修証するはさとりなり」——観測者と被観測対象の関係を問い直すこの思想は、まさに量子力学の観測問題そのものです。
Pythonモデル:「であって、でない」を可視化する
モデル1:シュレーディンガーの猫シミュレーター
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# Configure Japanese fonts
plt.rcParams['font.sans-serif'] = ['Hiragino Sans', 'Yu Gothic', 'Meiryo', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
class SchrodingerCat:
"""
Full simulation of Schrodinger's cat.
Includes: atom state, cat state, time evolution, measurement.
"""
def __init__(self, half_life=1.0):
self.half_life = half_life
self.lambda_decay = np.log(2) / half_life # Decay constant
def atom_state(self, t):
"""Quantum state of atom at time t: |psi> = alpha|undecayed> + beta|decayed>"""
alpha = np.sqrt(np.exp(-self.lambda_decay * t))
beta = np.sqrt(1 - np.exp(-self.lambda_decay * t))
return alpha, beta
def cat_state(self, t):
"""Cat state evolving with time: |cat> = alpha|alive> + beta|dead>"""
alpha, beta = self.atom_state(t)
prob_alive = np.abs(alpha)**2
prob_dead = np.abs(beta)**2
return prob_alive, prob_dead
def measure(self, t):
"""Open the box and measure the cat's state — wave function collapse"""
prob_alive, prob_dead = self.cat_state(t)
outcome = np.random.choice(['alive', 'dead'],
p=[prob_alive, prob_dead])
return outcome
このクラスの核心は atom_state メソッドです。指数減衰の公式を用いて、任意の時刻における原子の量子状態の確率振幅を計算します。猫の運命は原子と完全にエンタングルしているため、cat_state は原子の確率分布をそのまま継承します。そして measure メソッドが再現するのは、箱を開けるまさにその瞬間——波動関数の収縮、猫の運命が「死んでもいて生きてもいる」から確定した結果へと変わる瞬間です。
次に、この量子猫に可視化の機能を加えましょう。ブロッホ球を用いて、量子状態が「生」から「死」へと連続的に遷移する軌跡を描きます。
def visualize_evolution(self, max_time=3.0):
"""Visualize the time evolution of the cat's quantum state"""
times = np.linspace(0, max_time, 100)
probs_alive = []
probs_dead = []
for t in times:
p_alive, p_dead = self.cat_state(t)
probs_alive.append(p_alive)
probs_dead.append(p_dead)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))
# === Upper panel: probability evolution ===
ax1.fill_between(times, 0, probs_alive, alpha=0.6, color='green', label='P(猫が生存)')
ax1.fill_between(times, 0, probs_dead, alpha=0.6, color='red', label='P(猫が死亡)')
ax1.plot(times, probs_alive, 'g-', linewidth=2)
ax1.plot(times, probs_dead, 'r-', linewidth=2)
ax1.set_xlabel('時間(時間)', fontsize=13)
ax1.set_ylabel('確率', fontsize=13)
ax1.set_title('シュレーディンガーの猫:重ね合わせ状態の時間発展\n(箱を開ける前)',
fontsize=15, fontweight='bold')
ax1.legend(fontsize=12, loc='center right')
ax1.grid(True, alpha=0.3)
ax1.set_ylim(0, 1.1)
# Mark the half-life
ax1.axvline(self.half_life, color='black', linestyle='--', linewidth=2,
label=f'半減期 = {self.half_life}時間')
ax1.text(self.half_life + 0.1, 0.9,
f'半減期\nこの時点でP(生)=P(死)=50%',
fontsize=10, bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))
ax1.text(max_time * 0.5, 0.3,
'重要:「猫は死か生のどちらか」ではない!\n'
'「猫は同時に死んでもいて生きてもいる」!\n'
'量子状態 |猫⟩ = α|生⟩ + β|死⟩',
fontsize=11, ha='center',
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.8))
上半分は確率の時間発展を描いたグラフです。緑の領域が「猫が生存」の確率、赤が「猫が死亡」の確率——両者は反比例し、半減期の交差点で完璧な50/50に達します。このグラフの要点は確率そのものではなく、箱を開ける前の猫は「死んでいるか生きているかわからない」のではなく「本当に両方の状態に同時にある」ということです。
下半分ではブロッホ球を用いて、この抽象的な概念を視覚化します。量子状態が北極(生)から南極(死)へと移動する軌跡が一目でわかります。
# === Lower panel: Bloch sphere representation ===
ax2 = fig.add_subplot(212, projection='3d')
u = np.linspace(0, 2 * np.pi, 50)
v = np.linspace(0, np.pi, 50)
x_sphere = np.outer(np.cos(u), np.sin(v))
y_sphere = np.outer(np.sin(u), np.sin(v))
z_sphere = np.outer(np.ones(np.size(u)), np.cos(v))
ax2.plot_surface(x_sphere, y_sphere, z_sphere, alpha=0.1, color='gray')
for i, t in enumerate(times[::5]):
alpha, beta = self.atom_state(t)
theta = 2 * np.arctan2(np.abs(beta), np.abs(alpha))
phi = 0
x = np.sin(theta) * np.cos(phi)
y = np.sin(theta) * np.sin(phi)
z = np.cos(theta)
color = plt.cm.RdYlGn(1 - t/max_time)
ax2.scatter([x], [y], [z], c=[color], s=50, alpha=0.8)
ax2.scatter([0], [0], [1], c='green', s=300, marker='o',
edgecolors='black', linewidth=2, label='t=0: |生⟩')
ax2.scatter([0], [0], [-1], c='red', s=300, marker='o',
edgecolors='black', linewidth=2, label=f't={max_time}: |死⟩に接近')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('ブロッホ球:猫の量子状態の軌跡', fontsize=14, fontweight='bold')
ax2.legend(fontsize=10)
plt.tight_layout()
plt.savefig('schrodinger_cat_evolution.png', dpi=300, bbox_inches='tight')
plt.show()
最後に、実験シミュレーション機能を追加します。run_experiments を呼び出すたびに「箱を100回開ける」のと同じことを行い、統計結果と理論予測を照合します——量子力学の確率解釈の検証です。
def run_experiments(self, t, n_trials=100):
"""Run multiple experiments and collect statistics"""
print("\n" + "="*70)
print(f"【シュレーディンガーの猫実験】時刻 t = {t} 時間")
print("="*70)
prob_alive, prob_dead = self.cat_state(t)
print(f"\n理論予測:")
print(f" P(猫が生存) = {prob_alive:.2%}")
print(f" P(猫が死亡) = {prob_dead:.2%}")
results = [self.measure(t) for _ in range(n_trials)]
count_alive = results.count('alive')
count_dead = results.count('dead')
print(f"\n実験結果({n_trials}回の観測):")
print(f" 猫が生存と観測:{count_alive}回 ({count_alive/n_trials:.2%})")
print(f" 猫が死亡と観測:{count_dead}回 ({count_dead/n_trials:.2%})")
print(f"\n重要な洞察:")
print(f" ・箱を開ける前、猫は毎回重ね合わせ状態にある")
print(f" ・箱を開ける(観測する)ことで波動関数が収縮する")
print(f" ・各実験で異なる結果が出るが、統計的には理論に一致する")
print("="*70)
# Create a cat
cat = SchrodingerCat(half_life=1.0)
# Visualize evolution
cat.visualize_evolution(max_time=3.0)
# Run experiments
cat.run_experiments(t=0.5, n_trials=100)
cat.run_experiments(t=1.0, n_trials=100)
cat.run_experiments(t=2.0, n_trials=100)
実行結果:
– 上図:確率の時間変化(緑の線が下降、赤の線が上昇)
– 下図:ブロッホ球上の量子状態の軌跡(北極から南極へ)
– 統計出力:100回の実験結果の分布
重要な洞察:
t=1時間(半減期)の時点で、猫は50%生存・50%死亡。
しかしこれは「わからない」のではなく、本当に死んでもいて生きてもいる重ね合わせ状態にあるのです。
モデル2:老子「有無相生」の動的可視化
def dao_you_wu_animation():
"""
Visualization of 'You-Wu Xiang Sheng' (Being and Non-being mutually arise).
Demonstrates how existence and non-existence generate each other.
"""
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7))
theta = np.linspace(0, 2*np.pi, 1000)
n_frames = 60
def update(frame):
ax1.clear()
ax2.clear()
rotation = 2 * np.pi * frame / n_frames
# Taijitu (rotating)
r_yin = 1 + 0.5 * np.sin(theta + rotation)
r_yang = 1 - 0.5 * np.sin(theta + rotation)
ax1.fill(r_yin * np.cos(theta), r_yin * np.sin(theta),
color='black', alpha=0.8, label='無')
ax1.fill(r_yang * np.cos(theta + np.pi), r_yang * np.sin(theta + np.pi),
color='white', edgecolor='black', linewidth=2, label='有')
# Fish eyes
eye_x_yang = 0.5 * np.cos(rotation)
eye_y_yang = 0.5 * np.sin(rotation)
eye_x_yin = -0.5 * np.cos(rotation)
eye_y_yin = -0.5 * np.sin(rotation)
ax1.add_patch(plt.Circle((eye_x_yang, eye_y_yang), 0.15,
color='white', ec='black', linewidth=1.5))
ax1.add_patch(plt.Circle((eye_x_yin, eye_y_yin), 0.15,
color='black', ec='black', linewidth=1.5))
ax1.add_patch(plt.Circle((0, 0), 1.5, fill=False,
edgecolor='black', linewidth=3))
ax1.set_xlim(-2, 2)
ax1.set_ylim(-2, 2)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.set_title('太極図:有無相生\n「有」の中に「無」が生じ、「無」の中に「有」が生じる',
fontsize=14, fontweight='bold')
アニメーションの左半分は回転する太極図です。陰(無)と陽(有)の境界が角度とともに流動し、魚眼も回転に追従します。老子の「有無相生」の動的な本質を視覚化しています。「有」の極みに「無」が孕まれ、「無」の深みから「有」が萌芽する。
右半分はブロッホ球上の量子状態の回転を同期して表示し、量子重ね合わせにおける |有⟩ と |無⟩ の関係が、太極図における陰陽の相互作用と構造的に同型であることを直感的に感じ取れるようにしています。
# === Right panel: quantum superposition (synchronized rotation) ===
u = np.linspace(0, 2 * np.pi, 30)
v = np.linspace(0, np.pi, 30)
x_sphere = np.outer(np.cos(u), np.sin(v))
y_sphere = np.outer(np.sin(u), np.sin(v))
z_sphere = np.outer(np.ones(np.size(u)), np.cos(v))
ax2.plot_surface(x_sphere, y_sphere, z_sphere, alpha=0.1, color='gray')
theta_q = np.pi/3
phi_q = rotation
x_state = np.sin(theta_q) * np.cos(phi_q)
y_state = np.sin(theta_q) * np.sin(phi_q)
z_state = np.cos(theta_q)
ax2.quiver(0, 0, 0, x_state, y_state, z_state,
arrow_length_ratio=0.3, color='red', linewidth=3)
ax2.scatter([0], [0], [1], c='blue', s=200, label='|0⟩ (有)')
ax2.scatter([0], [0], [-1], c='green', s=200, label='|1⟩ (無)')
ax2.plot([0, x_state], [0, y_state], [0, 0], 'r--', alpha=0.5, linewidth=1)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('量子重ね合わせ:|ψ⟩ = α|有⟩ + β|無⟩\n時間発展',
fontsize=14, fontweight='bold')
ax2.legend(fontsize=10)
ax2.set_xlim([-1.5, 1.5])
ax2.set_ylim([-1.5, 1.5])
ax2.set_zlim([-1.5, 1.5])
anim = FuncAnimation(fig, update, frames=n_frames,
interval=100, repeat=True)
plt.tight_layout()
plt.show()
アニメーション版は時間発展の動的過程を示しました。続く静的バージョンは記事の挿図により適しています。左側は太極図、右側はブロッホ球上の4つの典型的な量子状態——純粋な「有」、純粋な「無」、そして二つの異なる位相を持つ等重み重ね合わせ状態。
ブロッホ球の赤道上の赤い点 (|0⟩+|1⟩)/√2 に注目してください。この位置は北極(有)にも南極(無)にも偏らず、両者の間に完璧に位置しています。これこそ老子が語った「有無相生」の量子版と言えるでしょう。
# Static version (for article)
fig_static, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7))
theta = np.linspace(0, 2*np.pi, 1000)
r_yin = 1 + 0.5 * np.sin(theta)
r_yang = 1 - 0.5 * np.sin(theta)
ax1.fill(r_yin * np.cos(theta), r_yin * np.sin(theta), color='black', alpha=0.8)
ax1.fill(r_yang * np.cos(theta + np.pi), r_yang * np.sin(theta + np.pi),
color='white', edgecolor='black', linewidth=2)
ax1.add_patch(plt.Circle((0, 0.5), 0.15, color='white', ec='black', lw=1.5))
ax1.add_patch(plt.Circle((0, -0.5), 0.15, color='black', ec='black', lw=1.5))
ax1.add_patch(plt.Circle((0, 0), 1.5, fill=False, ec='black', lw=3))
ax1.set_xlim(-2, 2)
ax1.set_ylim(-2, 2)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.set_title('老子:有無相生\n「無」の中に「有」あり、「有」の中に「無」あり',
fontsize=14, fontweight='bold')
ax1.text(0, -2.5, '対立するものは矛盾ではなく、同一の全体の二つの側面である',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
ax2 = fig_static.add_subplot(122, projection='3d')
u = np.linspace(0, 2 * np.pi, 30)
v = np.linspace(0, np.pi, 30)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax2.plot_surface(x, y, z, alpha=0.1, color='gray')
states = [
(0, 0, 1, 'blue', '|0⟩ (純粋な有)'),
(0, 0, -1, 'green', '|1⟩ (純粋な無)'),
(1, 0, 0, 'red', '(|0⟩+|1⟩)/√2'),
(0, 1, 0, 'purple', '(|0⟩+i|1⟩)/√2'),
]
for x, y, z, color, label in states:
ax2.scatter([x], [y], [z], c=color, s=200, label=label)
if x != 0 or y != 0 or z != 1:
ax2.quiver(0, 0, 0, x, y, z, arrow_length_ratio=0.2,
color=color, alpha=0.5, linewidth=2)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('量子力学:重ね合わせ状態\n|ψ⟩ = α|有⟩ + β|無⟩',
fontsize=14, fontweight='bold')
ax2.legend(fontsize=9, loc='upper left')
plt.tight_layout()
plt.savefig('dao_you_wu_superposition.png', dpi=300, bbox_inches='tight')
plt.show()
print("\n" + "="*70)
print("【有無相生 vs 量子重ね合わせ】")
print("="*70)
print("\n老子『道徳経』:")
print(" 「有無相生、難易相成。」")
print(" → 有と無は互いに依存し、分割できない")
print("\n量子力学:")
print(" |ψ⟩ = α|0⟩ + β|1⟩")
print(" → |0⟩ と |1⟩ は重ね合わせ状態の中に同時に存在する")
print("\n共通点:")
print(" ・対立するものは二者択一ではなく、同時に共存する")
print(" ・全体は部分の総和を超える")
print(" ・分別は観察/名づけの産物であり、本質ではない")
print("="*70)
# Execute
dao_you_wu_animation()
実行結果:
– 左図:太極図(有無相生)
– 右図:ブロッホ球上の重ね合わせ状態
– アニメーション版:両者が同期して回転
哲学的洞察:
老子の「有無相生」と量子重ね合わせの数学的構造は驚くほど類似しています。両者はともに二項対立を超越した全体なのです。
モデル3:荘周の胡蝶の夢——量子力学的解釈
def zhuangzi_butterfly_dream():
"""
Quantum mechanical interpretation of Zhuangzi's butterfly dream.
Demonstrates: entanglement between observer and observed.
"""
fig = plt.figure(figsize=(16, 10))
# === Upper left: superposition probability bar chart ===
ax1 = fig.add_subplot(221)
scenarios = {
'夢の前\n(重ね合わせ)': [0.5, 0.5],
'夢の中\n(依然重ね合わせ)': [0.5, 0.5],
'覚醒後の観測1\n(荘周に収縮)': [1.0, 0.0],
'覚醒後の観測2\n(蝶に収縮)': [0.0, 1.0],
}
x = np.arange(len(scenarios))
width = 0.35
values_state1 = [v[0] for v in scenarios.values()]
values_state2 = [v[1] for v in scenarios.values()]
ax1.bar(x - width/2, values_state1, width, label='|荘周⟩', color='blue', alpha=0.7)
ax1.bar(x + width/2, values_state2, width, label='|蝶⟩', color='orange', alpha=0.7)
ax1.set_ylabel('確率', fontsize=13)
ax1.set_title('荘周の胡蝶の夢:量子重ね合わせ解釈', fontsize=14, fontweight='bold')
ax1.set_xticks(x)
ax1.set_xticklabels(scenarios.keys(), fontsize=10)
ax1.legend(fontsize=12)
ax1.set_ylim(0, 1.2)
ax1.grid(True, alpha=0.3, axis='y')
ax1.text(1.5, 0.8, '要点:観測前は\n荘周と蝶の両方が\n「等しく実在」!',
fontsize=11, ha='center',
bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))
左上の棒グラフは、胡蝶の夢の量子的構造を明確に示しています。「夢の前」と「夢の中」の段階では、|荘周⟩ と |蝶⟩ の確率はそれぞれ50%——これは「どちらかわからない」のではなく、両者が同時に存在しているのです。「覚醒後の観測」の瞬間に初めて、波動関数がどちらか一方の確定状態に収縮します。
下方の二つのパネルは、「荘周が観測した場合」と「蝶が観測した場合」の二つの収縮結果をそれぞれ示しており、観測結果が観測者によって決まることを直感的に理解できるようになっています。
# === Lower left: Zhuangzi's perspective ===
ax2 = fig.add_subplot(223)
ax2.text(0.5, 0.7, '荘周が観測した場合...', ha='center', fontsize=14,
fontweight='bold', transform=ax2.transAxes)
ax2.text(0.5, 0.5,
'波動関数の収縮:\n|ψ⟩ → |荘周⟩\n\n'
'結論:\n「私は荘周だ。\nさっき蝶の夢を見た。」',
ha='center', va='center', fontsize=12,
transform=ax2.transAxes,
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
ax2.axis('off')
# === Lower right: butterfly's perspective ===
ax3 = fig.add_subplot(224)
ax3.text(0.5, 0.7, '蝶が観測した場合...', ha='center', fontsize=14,
fontweight='bold', transform=ax3.transAxes)
ax3.text(0.5, 0.5,
'波動関数の収縮:\n|ψ⟩ → |蝶⟩\n\n'
'結論:\n「私は蝶だ。\nさっき荘周の夢を見た。」',
ha='center', va='center', fontsize=12,
transform=ax3.transAxes,
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
ax3.axis('off')
右上のブロッホ球は、思考実験全体を一つの幾何学的イメージに凝縮しています。北極が |荘周⟩、南極が |蝶⟩、そして赤道上の紫の点こそが「荘周でもあり蝶でもある」重ね合わせ状態です。矢印が赤道を指しているのは、観測前にはシステムがどちらにも偏っていないことを意味しています。
# === Upper right: 3D quantum state space ===
ax4 = fig.add_subplot(222, projection='3d')
u = np.linspace(0, 2 * np.pi, 30)
v = np.linspace(0, np.pi, 30)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax4.plot_surface(x, y, z, alpha=0.1, color='gray')
ax4.scatter([0], [0], [1], c='blue', s=300, label='|荘周⟩',
edgecolors='black', linewidth=2)
ax4.scatter([0], [0], [-1], c='orange', s=300, label='|蝶⟩',
edgecolors='black', linewidth=2)
ax4.scatter([1], [0], [0], c='purple', s=300,
label='重ね合わせ\n(|荘周⟩+|蝶⟩)/√2',
edgecolors='black', linewidth=2)
ax4.quiver(0, 0, 0, 1, 0, 0, arrow_length_ratio=0.3,
color='purple', linewidth=3, alpha=0.7)
ax4.set_xlabel('X')
ax4.set_ylabel('Y')
ax4.set_zlabel('Z')
ax4.set_title('量子状態空間\n観測前:重ね合わせ状態', fontsize=13, fontweight='bold')
ax4.legend(fontsize=9, loc='upper left')
plt.tight_layout()
plt.savefig('zhuangzi_butterfly_quantum.png', dpi=300, bbox_inches='tight')
plt.show()
# Text explanation
print("\n" + "="*70)
print("【荘周の胡蝶の夢——量子力学的解釈】")
print("="*70)
print("\n古典的な問い(荘子):")
print(" 「周の夢に胡蝶と為れるか、胡蝶の夢に周と為れるかを知らず。」")
print("\n量子力学的な答え:")
print(" 観測前、系は重ね合わせ状態にある:")
print(" |ψ⟩ = (|荘周⟩ + |蝶⟩) / √2")
print(" 「絶対的に真実な」答えは存在しない!")
print("\n深層的意味:")
print(" ・観測者から独立した「客観的実在」は存在しない")
print(" ・「真」と「偽」は絶対的ではなく、相対的である")
print(" ・観測者と被観測対象は分離不可能である")
print("="*70)
# Execute
zhuangzi_butterfly_dream()
実行結果:
– 4つのサブプロットが胡蝶の夢の量子力学的解釈を表示
– 可視化:観測前(重ね合わせ)から観測後(収縮)へ
– 二つの可能な観測結果
哲学的衝撃:
荘子は2300年前に気づいていました。「真」と「偽」は絶対的なものではなく、観測者の視点に依存するのだと。
これは量子力学の「観測依存性」と完全に一致しています!
モデル4:デコヒーレンス——なぜ猫は死んでもいて生きてもいられないのか?
def decoherence_simulation():
"""
Decoherence simulation.
Explains why macroscopic objects (like cats) do not exhibit quantum superposition.
"""
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
times = np.linspace(0, 10, 1000)
# === (0,0) Microscopic particle: long coherence time ===
ax = axes[0, 0]
tau_coherence_micro = 10.0
coherence_micro = np.exp(-times / tau_coherence_micro)
ax.plot(times, coherence_micro, 'b-', linewidth=3, label='コヒーレンス')
ax.fill_between(times, 0, coherence_micro, alpha=0.3, color='blue')
ax.axhline(0.5, color='red', linestyle='--', label='50%コヒーレンス')
ax.set_xlabel('時間(任意単位)', fontsize=12)
ax.set_ylabel('コヒーレンス', fontsize=12)
ax.set_title('ミクロ粒子(例:電子)\nコヒーレンス時間が長い → 重ね合わせ維持可能',
fontsize=13, fontweight='bold', color='blue')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 1.1)
ax.text(5, 0.8, f'コヒーレンス時間 τ = {tau_coherence_micro}\n量子効果を観測可能',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
# === (0,1) Macroscopic object: extremely short coherence time ===
ax = axes[0, 1]
tau_coherence_macro = 0.001
coherence_macro = np.exp(-times / tau_coherence_macro)
ax.plot(times, coherence_macro, 'r-', linewidth=3, label='コヒーレンス')
ax.fill_between(times, 0, coherence_macro, alpha=0.3, color='red')
ax.set_xlabel('時間(任意単位)', fontsize=12)
ax.set_ylabel('コヒーレンス', fontsize=12)
ax.set_title('マクロ物体(例:猫)\nコヒーレンス時間が極短 → 瞬時に収縮',
fontsize=13, fontweight='bold', color='red')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 1.1)
ax.text(5, 0.8, f'コヒーレンス時間 τ ≈ {tau_coherence_macro}\nほぼ瞬時にデコヒーレンス',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))
上の二つのグラフは鮮明なコントラストを成しています。ミクロ粒子(左)のコヒーレンスは緩やかに減衰し、青い領域が時間軸のほぼ全体を覆っています。電子は長時間にわたって重ね合わせ状態を維持できるのです。一方、マクロ物体(右)の赤い領域は瞬時にゼロに帰します。猫の重ね合わせ状態は10⁻⁴⁰秒以内に消失し、いかなる実験装置の時間分解能よりもはるかに短いのです。
これがデコヒーレンスの核心的メカニズムです。量子力学が猫に「適用されない」のではなく、猫と環境の相互作用があまりに頻繁であり、一回一回の衝突がミクロな「観測」に相当するのです。
# === (1,0) Number of environmental particles vs decoherence rate ===
ax = axes[1, 0]
n_particles = np.logspace(0, 10, 100)
decoherence_rate = n_particles / 1e9
ax.loglog(n_particles, decoherence_rate, 'g-', linewidth=3)
ax.fill_between(n_particles, 1e-10, decoherence_rate, alpha=0.3, color='green')
ax.scatter([1], [1e-9], s=200, c='blue', label='単一原子', zorder=5)
ax.scatter([1e6], [1e-3], s=200, c='purple', label='ウイルス', zorder=5)
ax.scatter([1e18], [1e9], s=200, c='red', label='猫', zorder=5)
ax.set_xlabel('環境粒子数(対数スケール)', fontsize=12)
ax.set_ylabel('デコヒーレンス速度(対数スケール)', fontsize=12)
ax.set_title('デコヒーレンス速度 ∝ 環境粒子数\n物体が大きいほどデコヒーレンスが速い',
fontsize=13, fontweight='bold')
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3, which='both')
左下の対数グラフは残酷な現実を明かしています。デコヒーレンス速度は環境粒子数に比例します。単一原子(青点)からウイルス(紫点)、さらに猫(赤点)へと、デコヒーレンス速度は27桁もの開きがあります。この緑の直線が示しているのは、量子世界と古典世界の間に明確な境界はなく、あるのは漸進的な遷移だけだということです。
# === (1,1) Superposition maintenance time ===
ax = axes[1, 1]
objects = ['電子', '分子', 'ウイルス', '塵', '細菌', '猫']
coherence_times = [1e10, 1e5, 1e-3, 1e-10, 1e-15, 1e-40]
colors = ['blue', 'cyan', 'green', 'yellow', 'orange', 'red']
y_pos = np.arange(len(objects))
ax.barh(y_pos, np.log10(coherence_times), color=colors, alpha=0.7)
ax.set_yticks(y_pos)
ax.set_yticklabels(objects, fontsize=12)
ax.set_xlabel('コヒーレンス時間(log₁₀秒)', fontsize=12)
ax.set_title('異なるスケールの物体のコヒーレンス時間\nなぜ「死んでもいて生きてもいる猫」を見られないのか?',
fontsize=13, fontweight='bold')
ax.grid(True, alpha=0.3, axis='x')
ax.text(-20, 5.5,
f'猫のコヒーレンス時間 ≈ 10⁻⁴⁰秒\n(宇宙の年齢より10³⁰倍短い!)\n→ 重ね合わせの観測は不可能',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))
ax.text(8, 0.5,
f'電子のコヒーレンス時間 ≈ 10¹⁰秒\n(約300年)\n→ 量子効果の観測が容易',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
plt.tight_layout()
plt.savefig('decoherence_explanation.png', dpi=300, bbox_inches='tight')
plt.show()
右下の水平棒グラフは、デコヒーレンスの物語全体のまとめです。電子のコヒーレンス時間は約300年(青い長いバーが右に伸びている)に対し、猫のコヒーレンス時間は10⁻⁴⁰秒(赤い短いバーが左のグラフ端を超えて伸びている)。50桁もの差が、なぜ私たちの日常世界が「古典的に見える」のかを説明しています。
最後に、テキスト出力でまとめを行い、デコヒーレンスと老子の「道可道、非常道」との精妙なつながりを描きます。
print("\n" + "="*70)
print("【デコヒーレンス:シュレーディンガーの猫はなぜ現実的でないのか?】")
print("="*70)
print("\n問い:")
print(" 量子重ね合わせが真実なら、なぜ「死んでもいて生きてもいる猫」を見たことがないのか?")
print("\n答え:デコヒーレンス(量子干渉性の喪失)")
print(" ・マクロ物体は環境と無数の相互作用を持つ")
print(" ・各相互作用が一回の「観測」に相当する")
print(" ・重ね合わせ状態は極めて速く収縮する")
print("\n数学:")
print(" コヒーレンス時間 τ ∝ 1 / (環境粒子数)")
print(" 電子: τ ≈ 10¹⁰ 秒 (観測可能)")
print(" ウイルス:τ ≈ 10⁻³ 秒")
print(" 塵: τ ≈ 10⁻¹⁰ 秒")
print(" 猫: τ ≈ 10⁻⁴⁰ 秒 (観測不可能)")
print("\n重要な洞察:")
print(" 1. 量子重ね合わせは真実である")
print(" 2. しかしマクロ物体のデコヒーレンスが速すぎて観測できない")
print(" 3. 「量子力学がマクロに適用されない」のではなく")
print(" 「マクロ物体を環境から隔離するのが困難すぎる」のだ")
print("\n老子の視点:")
print(" 「道可道、非常道。」")
print(" → 観察・名づけをした瞬間、「道」は「常の道に非ず」となる")
print(" → デコヒーレンスは自然界による「観察」である")
print("="*70)
# Execute
decoherence_simulation()



実行結果:
– 4つのグラフでデコヒーレンスのメカニズムを解説
– 定量的な説明:なぜ猫は重ね合わせ状態を維持できないのか
– 対数スケールで異なる物体のコヒーレンス時間を表示
核心的な答え:
「量子力学は猫に適用されない」のではなく、「猫と環境の相互作用が多すぎて、重ね合わせ状態が瞬時に収縮してしまう」のです。
猫を完全に隔離できれば(理論上は)、死んでもいて生きてもいられるでしょう。しかし実際には不可能です。
「道」の不可道性:なぜ量子状態は直接観測できないのか?
老子の核心命題に立ち返りましょう。「道可道、非常道。」
量子の言語に翻訳すれば:
「観測できる量子状態は、もはや元の量子状態ではない。」
なぜでしょうか?
観測が状態を変える
量子力学では:
– 観測前:|ψ⟩ = α|0⟩ + β|1⟩ (重ね合わせ状態)
– 観測後:|0⟩ か |1⟩ (確定状態)
重ね合わせ状態そのものを「見る」ことは永遠にできません。
観察しようとした瞬間、重ね合わせは収縮するのです。
これは老子が語ったこととまったく同じです:
– 名づけの前:「道」は無分別である
– 名づけの後:「道」は「有」と「無」に分かれる
無分別の道を「直接体験」することは永遠にできません。
記述しようとした瞬間、分別が生まれるのです。
禅の伝統では、これを「指月の譬え」で表現します——月を指す指は月そのものではない。言葉で「道」を語ることは、指で月を指すようなものです。物理学者が波動関数を記述することもまた、重ね合わせ状態を「指差す」行為にすぎず、重ね合わせ状態そのものを見せることはできないのです。
「無名天地之始」——重ね合わせが本源
老子は言いました:「無名天地之始。」
量子力学は言います:重ね合わせ状態こそ最も基本的な状態である。
- 「|0⟩ か |1⟩ が基本で、重ね合わせが特殊」なのではない
- 「重ね合わせが基本で、確定状態は観測の産物」なのだ
同様に:
– 「有と無が基本で、道は抽象的」なのではない
– 「道が基本で、有無は名づけの産物」なのだ
「有名万物之母」——観測が確定性を創る
老子は言いました:「有名万物之母。」
量子力学は言います:観測が確定性を創り出す。
観測とは粒子がどこにいるかを「発見する」ことではなく、粒子をある場所に「存在させる」ことです。
同様に:
名づけとは事物が何であるかを「発見する」ことではなく、事物に分別を「生じさせる」ことです。
重ね合わせ的思考の現代的反響
量子コンピュータ:「であって、でない」を計算力に変える
量子コンピュータの核心は重ね合わせです。
古典コンピュータのビットは0か1。量子ビット(qubit)は α|0⟩ + β|1⟩。
一つの量子ビットが同時に二つの可能性を代表し、二つの量子ビットが同時に四つの可能性を、n個の量子ビットが同時に2ⁿの可能性を代表します。
老子は「道は一を生じ、一は二を生じ、二は三を生じ、三は万物を生ず」と語りました。量子コンピューティングは、この哲学的命題を工学的現実へと変えたのです。
日本の理化学研究所(RIKEN)や、NTT、富士通などが量子コンピューティング研究の最前線にあることは、この東洋哲学的直観と最先端テクノロジーの交差を象徴しているようにも思えます。
認知科学:人間の意思決定における「重ね合わせ」
心理学者たちは発見しました。人が決定を下す前、好みはしばしば確定していないのだと。
あなたは「AかBのどちらかが好きだけれど自分でもわからない」のではなく、「問われる前には、好み自体が本当に存在していない」のです。
これを量子認知(Quantum Cognition)と呼びます——量子力学の数学的構造を用いて人間の意思決定を記述するアプローチです。
老子は既に知っていました:「道可道、非常道」——好みを表明する前に、好みは不確定なのです。
禅の公案:不二法門
禅宗の「不二法門」は量子重ね合わせと異曲同工の教えです。
「風動くに非ず、幡動くに非ず、仁者の心動くなり。」——六祖慧能
風と幡の運動は独立した事実ではなく、観測者の解釈に依存しています。
日本の禅の伝統では、この種の公案がさらに徹底的に追求されました。臨済宗の「隻手の声」(片手の拍手の音は何か?)は、二項対立の枠組みそのものを破壊しようとする試みです。重ね合わせ状態がまさに「両方であって、どちらでもない」ように、公案の答えは論理的思考の枠組みの「外」にあるのです。
湯川秀樹は、日本人最初のノーベル物理学賞受賞者として知られていますが、彼は荘子を深く愛読し、『創造への道』の中で、物理学的直観と東洋哲学的思考の親和性について語っています。量子力学の奇妙さを受け入れる素地として、禅的な「矛盾を矛盾のまま受け入れる」態度が役立つのではないか——これは今日でも示唆に富む問いかけです。
観測が現実を創る。名づけが万物を生む。
深遠な哲学的問い
問い1:観測/名づけの前に、世界は「存在する」のか?
量子力学の答え:
– 粒子は観測前に確定した位置を持たない
– しかし何らかの意味で「存在する」(波動関数がある)
– この「存在」は「ここにいる」か「あそこにいる」という分類を超えている
老子の答え:
– 万物は名づけの前に分別相を持たない
– しかし何らかの意味で「道」は「存在する」
– この「存在」は「有」と「無」の分類を超えている
問い2:観察/名づけは何を創り出すのか?
量子力学:
観測は粒子を創り出さないが、確定性を創り出す。
老子:
名づけは事物を創り出さないが、分別相を創り出す。
問い3:我々は「真相」を知り得るのか?
量子力学:
観測結果を知ることはできるが、観測前の重ね合わせ状態を「見る」ことは永遠にできない。
老子:
言語で「道」を記述することはできるが、その記述された「道」はもはや元の「道」ではない。
共通の結論:
真相は「知り得る」ことの範疇を超えています。それは我々の知性が不十分だからではなく、「知る」という行為そのものが真相を変えてしまうからです。
結語:確定と不確定のあいだで
シュレーディンガーは一匹の猫で量子力学の不合理さを証明しようとしました。その結果、彼の猫は量子力学で最も偉大なスポークスパーソンとなったのです。
老子は五千字で『道徳経』を著し、冒頭にこう記しました。「道可道、非常道。」彼は知っていたのです。言語の限界は欠陥ではなく、より深い真実を明かすものだと。
荘子は蝶の夢を見て、目覚めた後に問いました。どちらが本物か? 2300年後、量子力学が教えてくれます——観測の前には、その問いに答えはないのだと。
三つの伝統、三つの言語、しかし一つの洞察:
確定性は世界の本質ではない。
それは観察の産物であり、名づけの結果であり、観測の帰結である。
箱を開ける前、猫は死んでもいて生きてもいる。
名前が現れる前、道は有無を超えている。
目覚める前、荘周と蝶は等しく実在する。
そしてこれこそが、おそらく最も真実に近い真相なのです。
