Quantum superposition and Taoist philosophy of Dao

量子疊加態 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⟩ 確定 命名後:有名萬物之母
疊加是本體 道是本源
疊加態不是「過渡狀態」 道不是「空無」
而是最基本的存在方式 而是最根本的實在
對立統一 有無相生
|ψ⟩ 中「有」和「無」共存 「有無相生」,不可分割

結構性對應,不是表面類比

重要的是:這不是說「量子力學證明了老子對」或「老子預見了量子力學」。

而是說:兩者都指向了超越二元對立的實在結構。

  • 量子力學從實驗室發現:測量之前,世界不是確定的
  • 老子從沉思中體悟:命名之前,道不是分別的

兩者都在說:確定性/分別相不是世界的本質,而是觀察/命名的產物。


莊子的蝴蝶夢:誰是觀察者?

公元前369年,莊子(莊周)做了一個夢。

醒來後,他寫下了哲學史上最詭異的問題:

昔者莊周夢為蝴蝶,栩栩然蝴蝶也。
自喻適志與!不知周也。
俄然覺,則蘧蘧然周也。
不知周之夢為蝴蝶與?蝴蝶之夢為周與?
周與蝴蝶,則必有分矣。此之謂物化。

白話翻譯:

從前,莊周夢見自己變成蝴蝶,翩翩飛舞,感覺自己就是蝴蝶。完全忘記了自己是莊周。
突然醒來,發現自己確實是莊周。
但是:不知道是莊周夢見自己變成蝴蝶?還是蝴蝶夢見自己變成莊周?
莊周和蝴蝶,一定有分別。這就是「物化」(萬物的變化)。

量子詮釋:疊加態的觀察者

用量子語言重新表達:

在「測量」(醒來)之前,系統處於疊加態:

|ψ⟩ = α|莊周⟩ + β|蝴蝶⟩

問題是:誰來測量?

  • 如果「莊周」測量,系統坍縮到「莊周是真的,蝴蝶是夢」
  • 如果「蝴蝶」測量,系統坍縮到「蝴蝶是真的,莊周是夢」

但在坍縮之前,沒有客觀的「真」和「假」

莊周和蝴蝶都同樣真實,或者說,都同樣是夢

「物化」——萬物的變化是疊加態的坍縮

莊子說:「周與蝴蝶,則必有分矣。此之謂物化。」

「物化」的意思是:萬物的變化、轉換、流動。

用量子語言:物化就是量子態在不同基底之間的變換。

  • 在「莊周-蝴蝶」基底下:|ψ⟩ = α|莊周⟩ + β|蝴蝶⟩
  • 在「真-假」基底下:|ψ⟩ = γ|真⟩ + δ|假⟩

兩種描述同樣有效,只是選擇了不同的觀察角度(測量基底)。

沒有「絕對真實」的狀態,只有相對於特定測量的確定態。


Python模型:看見「既是又不是」

模型1:薛丁格的貓完整模擬器

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# 設定中文字體
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'Arial']
plt.rcParams['axes.unicode_minus'] = False

class SchrodingerCat:
    """
    薛丁格的貓完整模擬
    包含:原子狀態、貓狀態、時間演化、測量
    """

    def __init__(self, half_life=1.0):
        self.half_life = half_life
        self.lambda_decay = np.log(2) / half_life  # 衰變常數

    def atom_state(self, t):
        """原子在時間t的量子態:|ψ⟩ = α|未衰變⟩ + β|已衰變⟩"""
        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):
        """貓的狀態隨時間演化:|貓⟩ = α|活⟩ + β|死⟩"""
        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):
        """打開盒子,測量貓的狀態——波函數坍縮"""
        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 方法模擬的正是打開盒子那一刻——波函數坍縮,貓的命運從「既死又活」變成確定的結果。

接下來,我們為這隻量子貓加上視覺化能力,用 Bloch 球呈現量子態從「活」到「死」的連續軌跡。

    def visualize_evolution(self, max_time=3.0):
        """視覺化貓的量子態隨時間演化"""
        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))

        # === 上圖:機率演化 ===
        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)

        # 標註半衰期
        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。這張圖的重點不在於機率本身,而在於提醒我們:在盒子打開之前,貓不是「不知道死活」,而是「真的同時處於兩種狀態」。

下半部分用 Bloch 球將這個抽象概念具象化,量子態從北極(活)向南極(死)移動的軌跡一目了然。

        # === 下圖:Bloch球表示 ===
        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('Bloch球:貓的量子態軌跡', 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):
        """運行多次實驗,統計結果"""
        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)

# 創建貓
cat = SchrodingerCat(half_life=1.0)

# 視覺化演化
cat.visualize_evolution(max_time=3.0)

# 運行實驗
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)

執行結果:
– 上圖:機率隨時間變化(綠線下降,紅線上升)
– 下圖:Bloch球上的量子態軌跡(從北極到南極)
– 統計輸出:100次實驗的結果分佈

關鍵洞見:

在t=1小時(半衰期)時,貓50%活、50%死。
但這不是「不知道」,而是真的處於既死又活的疊加態


模型2:老子「有無相生」的動態視覺化

def dao_you_wu_animation():
    """
    「有無相生」的動態視覺化
    展示:有和無如何互相產生、互相依存
    """

    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

        # 太極圖(旋轉)
        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='有')

        # 魚眼
        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')

動畫的左半邊是旋轉的太極圖。陰(無)和陽(有)的邊界隨角度流動,魚眼也跟著旋轉——視覺化了老子「有無相生」的動態本質。「有」的極致處孕育著「無」,「無」的深處又萌生「有」。

右半邊則同步呈現 Bloch 球上的量子態旋轉,讓讀者直觀感受:量子疊加態中 |有⟩ 和 |無⟩ 的關係,與太極圖中陰陽的互動結構完全同構。

        # === 右圖:量子疊加態(同步旋轉)===
        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()

動畫版展示了時間演化的動態過程。接下來的靜態版本則更適合文章配圖——左邊是太極圖,右邊是 Bloch 球上的四種典型量子態:純有、純無、以及兩種不同相位的等權疊加態。

注意 Bloch 球赤道上的紅點 (|0⟩+|1⟩)/√2:這個位置既不偏向北極(有),也不偏向南極(無),而是完美地處於兩者之間。這正是老子所說的「有無相生」的量子版本。

    # 靜態版本(用於文章)
    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)

# 執行
dao_you_wu_animation()

執行結果:
– 左圖:太極圖(有無相生)
– 右圖:Bloch球上的疊加態
– 動畫版本:兩者同步旋轉

哲學洞見:
老子的「有無相生」與量子疊加態的數學結構驚人相似——兩者都是超越二元對立的整體


模型3:莊周夢蝶的量子詮釋

def zhuangzi_butterfly_dream():
    """
    莊周夢蝶的量子力學詮釋
    展示:觀察者與被觀察物的糾纏
    """

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

    # === 左上:疊加態機率柱狀圖 ===
    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%——這不是「不知道是誰」,而是兩者同時存在。只有在「醒後測量」的那一刻,波函數才坍縮到其中一種確定狀態。

下方兩個面板分別呈現「莊周測量」和「蝴蝶測量」兩種坍縮結果,讓讀者直觀理解:測量結果取決於誰來測量。

    # === 左下:莊周的視角 ===
    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')

    # === 右下:蝴蝶的視角 ===
    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')

右上角的 Bloch 球將整個思想實驗濃縮為一個幾何圖像:北極是 |莊周⟩,南極是 |蝴蝶⟩,而赤道上的紫色點就是那個「既是莊周又是蝴蝶」的疊加態。箭頭指向赤道,意味著系統在測量前不偏向任何一方。

    # === 右上:3D量子態空間 ===
    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()

    # 文字說明
    print("\n" + "="*70)
    print("【莊周夢蝶的量子詮釋】")
    print("="*70)
    print("\n經典問題(莊子):")
    print("  「不知周之夢為蝴蝶與?蝴蝶之夢為周與?」")
    print("\n量子答案:")
    print("  測量前,系統處於疊加態:")
    print("    |ψ⟩ = (|莊周⟩ + |蝴蝶⟩) / √2")
    print("  沒有「絕對真實」的答案!")
    print("\n深層意義:")
    print("  • 沒有獨立於觀察者的「客觀實在」")
    print("  • 「真」和「假」是相對的,不是絕對的")
    print("  • 觀察者與被觀察物不可分離")
    print("="*70)

# 執行
zhuangzi_butterfly_dream()

執行結果:
– 四個子圖展示莊周夢蝶的量子詮釋
– 視覺化:測量前(疊加)到測量後(坍縮)
– 兩種可能的測量結果

哲學震撼:
莊子在2300年前就意識到:「真」和「假」不是絕對的,而是依賴於觀察者的視角。

這與量子力學的「測量依賴性」完全一致!


模型4:退相干——為什麼貓不能既死又活?

def decoherence_simulation():
    """
    退相干模擬
    解釋:為什麼宏觀物體(如貓)不顯示量子疊加態
    """

    fig, axes = plt.subplots(2, 2, figsize=(16, 12))
    times = np.linspace(0, 10, 1000)

    # === (0,0) 微觀粒子:長相干時間 ===
    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) 宏觀物體:極短相干時間 ===
    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) 環境粒子數 vs 退相干速率 ===
    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) 疊加態保持時間 ===
    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答案:退相干(Decoherence)")
    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)

# 執行
decoherence_simulation()

圖:Butterfly Dream Basic
圖:Butterfly Dream Basic
圖:Schrodinger Cat Basic
圖:Schrodinger Cat Basic
圖:Taiji You Wu Basic
圖:Taiji You Wu Basic

執行結果:
– 四張圖解釋退相干機制
– 量化說明:為什麼貓不能保持疊加態
– 對數尺度展示不同物體的相干時間

關鍵答案:

不是「量子力學不適用於貓」,而是「貓與環境的相互作用太多,疊加態瞬間坍縮」。

如果你能把貓完全隔離(理論上),它也能既死又活。但這在實踐中不可能。


「道」的不可道性:為什麼量子態無法直接觀察?

回到老子的核心命題:「道可道,非常道。」

用量子語言翻譯:

「可以測量的量子態,就不是原本的量子態。」

為什麼?

測量改變狀態

在量子力學中:
– 測量前:|ψ⟩ = α|0⟩ + β|1⟩ (疊加態)
– 測量後:|0⟩ 或 |1⟩ (確定態)

你永遠無法「看到」疊加態本身。

一旦你試圖觀察,疊加態就坍縮了。

這就像老子說的:
– 命名前:「道」是無分別的
– 命名後:「道」變成了「有」和「無」

你永遠無法「直接體驗」無分別的道。

一旦你試圖描述,分別就產生了。

「無名天地之始」——疊加態是本源

老子說:「無名天地之始。」

量子力學說:疊加態是最基本的狀態。

  • 不是「|0⟩ 或 |1⟩ 是基本的,疊加態是特殊的」
  • 而是「疊加態是基本的,確定態是測量的產物」

類似地:
– 不是「有和無是基本的,道是抽象的」
– 而是「道是基本的,有無是命名的產物」

「有名萬物之母」——測量創造確定性

老子說:「有名萬物之母。」

量子力學說:測量創造了確定性。

測量不是「發現」粒子在哪裡,而是「使得」粒子在某處。

類似地:
命名不是「發現」事物是什麼,而是「使得」事物有分別。


疊加態思維的現代迴響

量子計算:把「既是又不是」變成算力

量子電腦的核心就是疊加態。

經典電腦的位元是0或1。量子位元(qubit)是 α|0⟩ + β|1⟩。

一個量子位元同時代表兩種可能。兩個量子位元同時代表四種可能。n個量子位元同時代表2ⁿ種可能。

老子說「道生一,一生二,二生三,三生萬物」。量子計算把這個哲學命題變成了工程現實。

認知科學:人類決策中的「疊加態」

心理學家發現:人在做決策之前,偏好往往不是確定的。

你不是「喜歡A或B但不知道自己喜歡哪個」,而是「在被問到之前,偏好真的不存在」。

這叫做量子認知(Quantum Cognition)——用量子力學的數學結構來描述人類決策。

老子早就知道:「道可道,非常道」——在你表達偏好之前,偏好是不確定的。

禪宗公案:不二法門

禪宗的「不二法門」與量子疊加態異曲同工:

「不是風動,不是幡動,是仁者心動。」——六祖惠能

風和幡的運動不是獨立事實,而是依賴觀察者的詮釋。

測量創造現實。觀察創造世界。命名創造萬物。


深刻的哲學問題

問題1:在測量/命名之前,世界「存在」嗎?

量子力學的答案:
– 粒子在測量前沒有確定位置
– 但它「存在」於某種意義上(有波函數)
– 這種「存在」超越了「在這裡」或「在那裡」的分類

老子的答案:
– 萬物在命名前沒有分別相
– 但「道」「存在」於某種意義上
– 這種「存在」超越了「有」和「無」的分類

問題2:觀察/命名創造了什麼?

量子力學:
測量不創造粒子,但創造了確定性

老子:
命名不創造事物,但創造了分別相

問題3:我們能「知道」真相嗎?

量子力學:
你可以知道測量結果,但永遠無法「看到」測量前的疊加態。

老子:
你可以用語言描述「道」,但那個被描述的「道」已經不是原本的「道」。

共同結論:
真相超越了「可知」的範疇。不是因為我們不夠聰明,而是因為「知道」本身就改變了真相


結語:在確定與不確定之間

薛丁格想用一隻貓來證明量子力學的荒謬。結果,他的貓成為了量子力學最偉大的代言人。

老子用五千字寫下了《道德經》,開篇就說:「道可道,非常道。」他知道,語言的限制不是缺陷,而是揭示了一個更深層的真相。

莊子夢見蝴蝶,醒來後問:誰是真的?2300年後,量子力學告訴我們:在測量之前,這個問題沒有答案。

三種傳統,三種語言,同一個洞見:

確定性不是世界的本質。

它是觀察的產物、命名的結果、測量的後果。

在盒子打開之前,貓既死又活。
在名字出現之前,道超越有無。
在醒來之前,莊周和蝴蝶同樣真實。

而這,或許才是最真實的真相。


Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *