Quantum superposition and Taoist philosophy of Dao

Quantum Superposition vs the Dao of Laozi and Zhuangzi — Between Being and Not-Being

Series: Quantum Mechanics Meets Eastern Philosophy #03/12 | Reading time: 30 min | Python (NumPy, Matplotlib)

Author: Wina @ Code & Cogito


Schrödinger’s Confession

1935, Berlin.

Erwin Schrödinger sat at his desk, staring at a paper he had just finished writing. The title: Die gegenwärtige Situation in der Quantenmechanik — “The Present Situation in Quantum Mechanics.”

He had devised a thought experiment to expose what he saw as the absurdity of the Copenhagen interpretation.

Imagine a cat sealed inside a box. Inside the box: a radioactive atom, a Geiger counter, a hammer, and a vial of poison.

If the atom decays, the counter triggers, the hammer smashes the vial, and the cat dies.
If the atom does not decay, nothing happens, and the cat lives.

Quantum mechanics says: before we measure, the atom exists in a superposition of “decayed” and “not decayed.”

So… what about the cat?

According to the Copenhagen interpretation, the cat should also be in a superposition of “dead” and “alive” — both dead and alive, until someone opens the box.

Schrödinger set down his pen and sighed.

He hoped this absurd scenario would make people realize the Copenhagen interpretation had to be wrong. Quantum rules might apply to atoms, but surely not to cats.

Years later, in a letter to Einstein, he wrote:

“I don’t like it, and I’m sorry I ever had anything to do with it.”

But history played a cruel joke.

Schrödinger’s cat didn’t topple the Copenhagen interpretation. It became quantum mechanics’ most iconic symbol.

And ninety years later, physicists have been forced to concede:

The cat really can be both dead and alive. You just need a very, very, very small cat.


Superposition: The Quantum World’s “Both-And”

The Mathematics: Simple Yet Profoundly Strange

The mathematics of quantum superposition is deceptively simple:

|ψ⟩ = α|0⟩ + β|1⟩

Where:
– |0⟩ and |1⟩ are two basis states (say, “dead” and “alive”)
– α and β are complex numbers called “probability amplitudes”
– |α|² is the probability of measuring |0⟩
– |β|² is the probability of measuring |1⟩
– |α|² + |β|² = 1 (probabilities must sum to one)

Seems straightforward, right? Like saying “50% chance dead, 50% chance alive”?

Wrong!

Superposition Is Not Ignorance — It Is Genuine “Both-ness”

Classical thinking leads us to reason like this:

The cat is either dead or alive. We just don’t know which. So we say “50% dead, 50% alive.” It’s like a flipped coin — it has already landed on one side; we just haven’t looked yet.

This is called the ignorance interpretation — probability merely reflects our incomplete knowledge.

But quantum mechanics says: absolutely not!

Quantum superposition means:
– Not “the cat is either dead or alive, but we don’t know which”
– But rather “the cat genuinely is both dead and alive simultaneously”
– Not “the atom has either decayed or not, but we’re uncertain”
– But rather “the atom truly exists in a blend of decayed and undecayed”

Before measurement, the cat has no definite state of life or death.

How Do We Know This Isn’t Just Ignorance?

The answer: interference experiments.

If superposition were mere ignorance, the two possibilities would simply add:

P(total) = P(possibility 1) + P(possibility 2)

But in quantum mechanics, probability amplitudes add first, then we square the result:

P(total) = |α₁ + α₂|²

Expanding:

P(total) = |α₁|² + |α₂|² + 2Re(α₁*α₂*)

That last term, 2Re(α₁α₂), is called the interference term.

  • If it’s mere ignorance, this term doesn’t exist
  • If it’s genuine superposition, this term must appear

The interference fringes in the double-slit experiment are direct evidence of this term.

Conclusion: Superposition is not epistemic uncertainty — it is ontological indeterminacy. The particle really is in two places at once.


Laozi’s “Dao”: Before the Name

Around the 4th century BCE, China.

According to legend, an elderly sage named Li Er (later known as Laozi, or “Old Master”) was riding a water buffalo toward the western border pass of Hangu. The gatekeeper, Yin Xi, asked him to record his wisdom before departing. The result was the Dao De Jing (sometimes spelled Tao Te Ching) — one of the most influential philosophical texts in human history, comprising just 5,000 characters.

The opening chapter:

The Dao that can be spoken is not the eternal Dao;
The name that can be named is not the eternal name.
The nameless is the origin of heaven and earth;
The named is the mother of all things.

What does this mean?

“The Dao That Can Be Spoken Is Not the Eternal Dao”

Laozi is saying: the true Dao cannot be captured in language.

Why?

Because the moment language appears, distinction is born.

  • Say “this is a table,” and the distinction between “table” and “not-table” arises
  • Say “this is beautiful,” and the opposition of “beautiful” and “ugly” is created
  • Say “this exists,” and the duality of “existence” and “non-existence” is established

Laozi believed that before language, concepts, and naming, the world exists in an undifferentiated primordial state. This state is called Dao — often translated as “the Way,” though no English word fully captures it.

Once you name it (“the Dao that can be spoken”), it ceases to be that eternal, undifferentiated Dao (“not the eternal Dao”).

Think of it this way: the Dao is like trying to describe the taste of water. The moment you reach for words — “crisp,” “clean,” “neutral” — you’ve already imposed categories that distort the experience itself.

“The Nameless Is the Origin of Heaven and Earth”

“The nameless” (the state before naming) is the origin of the universe.
“The named” (the state after naming) is the mother of all things.

In other words:
1. The universe originally was “nameless” — without distinctions, without oppositions, without determinacy
2. Once naming occurs, all things emerge from the nameless

This may sound mystical, but it maps onto quantum mechanics with striking precision:
Before measurement (nameless): a particle exists in superposition — no definite state
After measurement (named): the particle collapses into a definite state — “position” as a concept is born

“Being and Non-Being Give Rise to Each Other”

Chapter 2 of the Dao De Jing:

Being and non-being give rise to each other,
Difficult and easy complete each other,
Long and short shape each other,
High and low lean on each other.

This means:
– “Being” and “non-being” are mutually dependent
– “Difficult” and “easy” mutually define each other
– “Long” and “short” only exist in relation to one another
– “High” and “low” lean on each other for meaning

Without “being,” there is no “non-being”; without “non-being,” there is no “being.”

This mirrors the structure of quantum superposition exactly:

|ψ⟩ = α|being⟩ + β|non-being⟩

“Being” and “non-being” are not opposing choices but two components of a single superposed whole.


A Striking Correspondence: Superposition vs the Dao

Let us compare them side by side:

Quantum Superposition Laozi’s Dao
No definite state before measurement No distinctions before naming
The particle is not “at A or B but we don’t know” The Dao is not “being or non-being but we don’t know”
Rather, it “genuinely is at both A and B” Rather, it “genuinely transcends the being/non-being duality”
Measurement creates determinacy Naming creates the myriad things
Before measurement: |ψ⟩ = α|0⟩ + β|1⟩ Before naming: the nameless is the origin of heaven and earth
After measurement: |0⟩ or |1⟩ is determined After naming: the named is the mother of all things
Superposition is fundamental The Dao is the source
Superposition is not a “transitional state” The Dao is not “emptiness”
It is the most basic mode of existence It is the most fundamental reality
Unity of opposites Being and non-being give rise to each other
In |ψ⟩, “being” and “non-being” coexist Being and non-being are inseparable

A Structural Parallel, Not a Superficial Analogy

An important caveat: this is not to say “quantum mechanics proves Laozi was right” or “Laozi predicted quantum mechanics.”

Rather, both point toward a reality that transcends binary opposition.

  • Quantum mechanics discovered through the laboratory: before measurement, the world is not determinate
  • Laozi discovered through contemplation: before naming, the Dao knows no distinctions

Both are saying: determinacy and distinction are not inherent features of reality — they are products of observation and naming.


Zhuangzi’s Butterfly Dream: Who Is the Observer?

In 369 BCE, the philosopher Zhuangzi (also known as Zhuang Zhou, sometimes romanized as Chuang Tzu) had a dream.

After waking, he wrote down one of the most provocative questions in the history of philosophy:

Once upon a time, Zhuang Zhou dreamed he was a butterfly — a butterfly flitting and fluttering about, happy with itself. It did not know it was Zhuang Zhou.
Suddenly he awoke, and there he was, unmistakably Zhuang Zhou.
But he did not know: was it Zhuang Zhou who had dreamed he was a butterfly? Or was it a butterfly dreaming it was Zhuang Zhou?
Between Zhuang Zhou and the butterfly, there must be some distinction. This is called the “transformation of things.”

If you’ve seen The Matrix or Inception, you’ve encountered modern versions of this same puzzle. But Zhuangzi posed it 2,300 years earlier — and his framing is, arguably, more radical. Neo at least knows the “real world” exists outside the Matrix. Zhuangzi refuses to grant either reality that privilege.

A Quantum Reading: The Observer in Superposition

Recast in quantum language:

Before “measurement” (waking up), the system is in superposition:

|ψ⟩ = α|Zhuang Zhou⟩ + β|butterfly⟩

The question is: who performs the measurement?

  • If “Zhuang Zhou” measures, the system collapses to “Zhuang Zhou is real; the butterfly was a dream”
  • If “the butterfly” measures, the system collapses to “the butterfly is real; Zhuang Zhou was a dream”

But before collapse, there is no objective “real” or “dream.”

Zhuang Zhou and the butterfly are equally real — or, equally, both are dreams.

“The Transformation of Things” as Wavefunction Collapse

Zhuangzi writes: “Between Zhuang Zhou and the butterfly, there must be some distinction. This is called the transformation of things.”

The Chinese term wu hua (物化, “transformation of things”) refers to the ceaseless flux and metamorphosis of all phenomena.

In quantum language: the “transformation of things” is the transformation of a quantum state between different measurement bases.

  • In the “Zhuang Zhou–butterfly” basis: |ψ⟩ = α|Zhuang Zhou⟩ + β|butterfly⟩
  • In the “real–dream” basis: |ψ⟩ = γ|real⟩ + δ|dream⟩

Both descriptions are equally valid — they simply correspond to different measurement perspectives (different bases).

There is no “absolutely real” state — only states that are definite relative to a particular measurement.


Python Models: Seeing “Both-And” in Action

Model 1: The Complete Schrödinger’s Cat Simulator

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

# Font configuration
plt.rcParams['font.sans-serif'] = ['Arial', 'Helvetica']
plt.rcParams['axes.unicode_minus'] = False

class SchrodingerCat:
    """
    Complete Schrödinger's Cat simulation.
    Includes: atom state, cat state, time evolution, and 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 the 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 over 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 — wavefunction collapse"""
        prob_alive, prob_dead = self.cat_state(t)
        outcome = np.random.choice(['alive', 'dead'],
                                  p=[prob_alive, prob_dead])
        return outcome

The heart of this class is the atom_state method: it uses exponential decay to compute the probability amplitudes of the atom’s quantum state at any moment. Because the cat’s fate is fully entangled with the atom, cat_state inherits the atom’s probability distribution directly. The measure method simulates the moment we open the box — wavefunction collapse — transforming the cat’s fate from “both dead and alive” into a definite outcome.

Next, we give our quantum cat visualization capabilities, using a Bloch sphere to trace the quantum state’s continuous trajectory from “alive” to “dead.”

    def visualize_evolution(self, max_time=3.0):
        """Visualize the cat's quantum state evolution over time"""
        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))

        # === Top panel: Probability evolution ===
        ax1.fill_between(times, 0, probs_alive, alpha=0.6, color='green', label='P(cat alive)')
        ax1.fill_between(times, 0, probs_dead, alpha=0.6, color='red', label='P(cat dead)')
        ax1.plot(times, probs_alive, 'g-', linewidth=2)
        ax1.plot(times, probs_dead, 'r-', linewidth=2)

        ax1.set_xlabel('Time (hours)', fontsize=13)
        ax1.set_ylabel('Probability', fontsize=13)
        ax1.set_title("Schrödinger's Cat: Superposition Evolving Over Time\n(Before opening the box)",
                     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'Half-life = {self.half_life} hr')
        ax1.text(self.half_life + 0.1, 0.9,
                f'Half-life\nP(alive)=P(dead)=50%',
                fontsize=10, bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))

        ax1.text(max_time * 0.5, 0.3,
                'Key point: this is NOT "either dead or alive"!\n'
                'It is "genuinely both dead AND alive"!\n'
                'Quantum state |cat⟩ = α|alive⟩ + β|dead⟩',
                fontsize=11, ha='center',
                bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.8))

The top panel plots probability evolution over time. The green region represents the probability that the cat is alive; the red represents death — the two trade off, crossing at the half-life where a perfect 50/50 balance is reached. The crucial point of this plot is not the probabilities themselves, but the reminder that before the box is opened, the cat is not “in an unknown state” — it is “genuinely in both states simultaneously.”

The bottom panel uses a Bloch sphere to make this abstract concept tangible, showing the quantum state’s trajectory from the north pole (alive) toward the south pole (dead).

        # === Bottom 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: |alive⟩')
        ax2.scatter([0], [0], [-1], c='red', s=300, marker='o',
                   edgecolors='black', linewidth=2, label=f't={max_time}: approaching |dead⟩')

        ax2.set_xlabel('X')
        ax2.set_ylabel('Y')
        ax2.set_zlabel('Z')
        ax2.set_title("Bloch Sphere: The Cat's Quantum State Trajectory", fontsize=14, fontweight='bold')
        ax2.legend(fontsize=10)

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

Finally, we add an experiment simulation. Each call to run_experiments is like “opening the box 100 times,” letting us compare the statistical results against theoretical predictions — a verification of quantum mechanics’ probabilistic interpretation.

    def run_experiments(self, t, n_trials=100):
        """Run multiple experiments and collect statistics"""
        print("\n" + "="*70)
        print(f"[Schrödinger's Cat Experiment] Time t = {t} hours")
        print("="*70)

        prob_alive, prob_dead = self.cat_state(t)
        print(f"\nTheoretical prediction:")
        print(f"  P(cat alive) = {prob_alive:.2%}")
        print(f"  P(cat dead)  = {prob_dead:.2%}")

        results = [self.measure(t) for _ in range(n_trials)]
        count_alive = results.count('alive')
        count_dead = results.count('dead')

        print(f"\nExperimental results ({n_trials} measurements):")
        print(f"  Observed alive: {count_alive} times ({count_alive/n_trials:.2%})")
        print(f"  Observed dead:  {count_dead} times ({count_dead/n_trials:.2%})")

        print(f"\nKey insights:")
        print(f"  • Before each box opening, the cat is in superposition")
        print(f"  • Opening the box (measurement) causes wavefunction collapse")
        print(f"  • Different trials yield different results, but statistics match theory")
        print("="*70)

# Create the 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)

Output:
– Top panel: probability changing over time (green line descending, red line rising)
– Bottom panel: quantum state trajectory on the Bloch sphere (north pole to south pole)
– Statistical output: distribution of results across 100 experiments

Key insight:

At t = 1 hour (the half-life), the cat is 50% alive and 50% dead.
But this is not ignorance — it is a genuine superposition of dead and alive.


Model 2: Laozi’s “Being and Non-Being Give Rise to Each Other” — A Dynamic Visualization

def dao_you_wu_animation():
    """
    Dynamic visualization of "being and non-being give rise to each other."
    Demonstrates how being and non-being mutually generate and depend on 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 (yin-yang symbol), 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='Non-being')
        ax1.fill(r_yang * np.cos(theta + np.pi), r_yang * np.sin(theta + np.pi),
                color='white', edgecolor='black', linewidth=2, label='Being')

        # Eyes of the fish
        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('Taijitu: Being and Non-Being Give Rise to Each Other\n'
                      'Within "being" arises "non-being"; within "non-being" arises "being"',
                     fontsize=14, fontweight='bold')

The left half of the animation is a rotating taijitu — the yin-yang symbol. The boundary between yin (non-being) and yang (being) flows with the angle, and the “fish eyes” rotate in tandem — visualizing the dynamic nature of Laozi’s “being and non-being give rise to each other.” At the extreme of “being,” the seed of “non-being” appears; in the depths of “non-being,” “being” is already germinating.

The right half simultaneously presents a rotating quantum state on the Bloch sphere, allowing readers to intuitively feel how the relationship between |being⟩ and |non-being⟩ in quantum superposition is structurally isomorphic to the interplay of yin and yang in the taijitu.

        # === Right panel: Quantum superposition state (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⟩ (being)')
        ax2.scatter([0], [0], [-1], c='green', s=200, label='|1⟩ (non-being)')
        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('Quantum Superposition: |ψ⟩ = α|being⟩ + β|non-being⟩\nEvolving over time',
                     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()

The animated version shows the dynamic process of time evolution. The static version below is better suited for article illustrations — on the left, the taijitu; on the right, the Bloch sphere displaying four representative quantum states: pure being, pure non-being, and two equal-weight superpositions with different phases.

Notice the red dot on the Bloch sphere’s equator at (|0⟩+|1⟩)/√2: this point leans neither toward the north pole (being) nor the south pole (non-being), but sits perfectly between them. This is the quantum version of Laozi’s “being and non-being give rise to each other.”

    # Static version (for article illustrations)
    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('Laozi: Being and Non-Being Give Rise to Each Other\n'
                  'Within "non-being" lies "being"; within "being" lies "non-being"',
                 fontsize=14, fontweight='bold')
    ax1.text(0, -2.5, 'Opposites are not contradictions — they are two faces of the same whole',
            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⟩ (pure being)'),
        (0, 0, -1, 'green', '|1⟩ (pure non-being)'),
        (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('Quantum Mechanics: Superposition\n|ψ⟩ = α|being⟩ + β|non-being⟩',
                 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("[Being and Non-Being vs Quantum Superposition]")
    print("="*70)
    print("\nLaozi, Dao De Jing:")
    print('  "Being and non-being give rise to each other;')
    print('   difficult and easy complete each other."')
    print("  -> Being and non-being are mutually dependent, inseparable")
    print("\nQuantum mechanics:")
    print("  |ψ⟩ = α|0⟩ + β|1⟩")
    print("  -> |0⟩ and |1⟩ coexist within the superposition")
    print("\nCommon ground:")
    print("  • Opposites are not either/or — they coexist simultaneously")
    print("  • The whole is greater than the sum of its parts")
    print("  • Distinctions are products of observation/naming, not of essence")
    print("="*70)

# Run
dao_you_wu_animation()

Output:
– Left panel: taijitu (being and non-being give rise to each other)
– Right panel: superposition states on the Bloch sphere
– Animated version: both rotating in synchrony

Philosophical insight:
Laozi’s “being and non-being give rise to each other” is strikingly similar to the mathematical structure of quantum superposition — both are wholes that transcend binary opposition.


Model 3: Zhuangzi’s Butterfly Dream — A Quantum Interpretation

def zhuangzi_butterfly_dream():
    """
    Quantum interpretation of Zhuangzi's Butterfly Dream.
    Demonstrates: the entanglement between observer and observed.
    """

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

    # === Top left: Superposition probability bar chart ===
    ax1 = fig.add_subplot(221)

    scenarios = {
        'Before dream\n(superposition)': [0.5, 0.5],
        'During dream\n(still superposed)': [0.5, 0.5],
        'After waking,\nmeasurement 1\n(collapse to Zhuangzi)': [1.0, 0.0],
        'After waking,\nmeasurement 2\n(collapse to butterfly)': [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='|Zhuangzi⟩', color='blue', alpha=0.7)
    ax1.bar(x + width/2, values_state2, width, label='|butterfly⟩', color='orange', alpha=0.7)

    ax1.set_ylabel('Probability', fontsize=13)
    ax1.set_title("Zhuangzi's Butterfly Dream: A Quantum Superposition Reading",
                  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, 'Key: before measurement,\nZhuangzi and the butterfly\nare "equally real"!',
            fontsize=11, ha='center',
            bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))

The top-left bar chart clearly shows the quantum structure of Zhuangzi’s butterfly dream: in the “before dream” and “during dream” stages, |Zhuangzi⟩ and |butterfly⟩ each have a 50% probability — this is not “not knowing which one he is,” but rather both existing simultaneously. Only at the moment of “waking measurement” does the wavefunction collapse into one definite state.

The two lower panels show “Zhuangzi measures” and “butterfly measures” as two possible collapse outcomes, letting readers intuitively grasp that the result depends on who performs the measurement.

    # === Bottom left: Zhuangzi's perspective ===
    ax2 = fig.add_subplot(223)
    ax2.text(0.5, 0.7, 'If Zhuangzi measures...', ha='center', fontsize=14,
            fontweight='bold', transform=ax2.transAxes)
    ax2.text(0.5, 0.5,
            'Wavefunction collapse:\n|ψ⟩ → |Zhuangzi⟩\n\n'
            'Conclusion:\n"I am Zhuangzi.\nI was just dreaming\nI was a butterfly."',
            ha='center', va='center', fontsize=12,
            transform=ax2.transAxes,
            bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
    ax2.axis('off')

    # === Bottom right: Butterfly's perspective ===
    ax3 = fig.add_subplot(224)
    ax3.text(0.5, 0.7, 'If the butterfly measures...', ha='center', fontsize=14,
            fontweight='bold', transform=ax3.transAxes)
    ax3.text(0.5, 0.5,
            'Wavefunction collapse:\n|ψ⟩ → |butterfly⟩\n\n'
            'Conclusion:\n"I am a butterfly.\nI was just dreaming\nI was Zhuangzi."',
            ha='center', va='center', fontsize=12,
            transform=ax3.transAxes,
            bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
    ax3.axis('off')

The top-right Bloch sphere condenses the entire thought experiment into a single geometric image: the north pole is |Zhuangzi⟩, the south pole is |butterfly⟩, and the purple dot on the equator represents the superposition state — “both Zhuangzi and butterfly at once.” The arrow pointing to the equator means the system, before measurement, favors neither identity.

    # === Top 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='|Zhuangzi⟩',
               edgecolors='black', linewidth=2)
    ax4.scatter([0], [0], [-1], c='orange', s=300, label='|butterfly⟩',
               edgecolors='black', linewidth=2)
    ax4.scatter([1], [0], [0], c='purple', s=300,
               label='Superposition\n(|Zhuangzi⟩+|butterfly⟩)/√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('Quantum State Space\nBefore measurement: superposition', 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 summary
    print("\n" + "="*70)
    print("[Quantum Interpretation of Zhuangzi's Butterfly Dream]")
    print("="*70)
    print("\nThe classical question (Zhuangzi):")
    print('  "Was it Zhuang Zhou dreaming he was a butterfly?')
    print('   Or a butterfly dreaming it was Zhuang Zhou?"')
    print("\nThe quantum answer:")
    print("  Before measurement, the system is in superposition:")
    print("    |ψ⟩ = (|Zhuangzi⟩ + |butterfly⟩) / √2")
    print('  There is no "absolutely real" answer!')
    print("\nDeeper significance:")
    print('  • There is no "objective reality" independent of the observer')
    print('  • "Real" and "dream" are relative, not absolute')
    print("  • Observer and observed cannot be separated")
    print("="*70)

# Run
zhuangzi_butterfly_dream()

Output:
– Four subplots presenting the quantum interpretation of Zhuangzi’s butterfly dream
– Visualization: from pre-measurement (superposition) to post-measurement (collapse)
– Two possible measurement outcomes

A philosophical bombshell:
Zhuangzi realized 2,300 years ago that “real” and “dream” are not absolute categories — they depend on the observer’s perspective.

This aligns perfectly with quantum mechanics’ “measurement dependence”!


Model 4: Decoherence — Why Can’t the Cat Be Both Dead and Alive?

def decoherence_simulation():
    """
    Decoherence simulation.
    Explains: why macroscopic objects (like cats) don't 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='Coherence')
    ax.fill_between(times, 0, coherence_micro, alpha=0.3, color='blue')
    ax.axhline(0.5, color='red', linestyle='--', label='50% coherence')
    ax.set_xlabel('Time (arbitrary units)', fontsize=12)
    ax.set_ylabel('Coherence', fontsize=12)
    ax.set_title('Microscopic Particle (e.g., electron)\nLong coherence time → can maintain superposition',
                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'Coherence time τ = {tau_coherence_micro}\nQuantum effects observable',
           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='Coherence')
    ax.fill_between(times, 0, coherence_macro, alpha=0.3, color='red')
    ax.set_xlabel('Time (arbitrary units)', fontsize=12)
    ax.set_ylabel('Coherence', fontsize=12)
    ax.set_title('Macroscopic Object (e.g., cat)\nExtremely short coherence time → instant collapse',
                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'Coherence time τ ≈ {tau_coherence_macro}\nDecoheres almost instantly',
           fontsize=10, bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))

The top two panels form a stark contrast: the microscopic particle (left) shows coherence decaying slowly — the blue region fills nearly the entire time axis, meaning an electron can maintain superposition for extended periods. The macroscopic object (right) shows its red region vanishing almost instantly — a cat’s superposition disappears within 10⁻⁴⁰ seconds, far shorter than any experimental instrument could ever resolve.

This is the core mechanism of decoherence: it’s not that quantum mechanics “doesn’t apply” to cats, but that a cat’s interactions with its environment are so incessant that each collision effectively acts as a miniature “measurement.”

    # === (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='Single atom', zorder=5)
    ax.scatter([1e6], [1e-3], s=200, c='purple', label='Virus', zorder=5)
    ax.scatter([1e18], [1e9], s=200, c='red', label='Cat', zorder=5)

    ax.set_xlabel('Number of environmental particles (log scale)', fontsize=12)
    ax.set_ylabel('Decoherence rate (log scale)', fontsize=12)
    ax.set_title('Decoherence rate ∝ number of environmental particles\nLarger objects decohere faster',
                fontsize=13, fontweight='bold')
    ax.legend(fontsize=11)
    ax.grid(True, alpha=0.3, which='both')

The bottom-left log-log plot reveals a sobering reality: the decoherence rate is proportional to the number of environmental particles. From a single atom (blue dot) to a virus (purple dot) to a cat (red dot), the decoherence rate spans 27 orders of magnitude. This green line tells us that there is no sharp boundary between the quantum and classical worlds — only a gradual transition.

    # === (1,1) Superposition survival time ===
    ax = axes[1, 1]

    objects = ['Electron', 'Molecule', 'Virus', 'Dust grain', 'Bacterium', 'Cat']
    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('Coherence time (log₁₀ seconds)', fontsize=12)
    ax.set_title('Coherence Time Across Scales\nWhy don\'t we see "both dead and alive" cats?',
                fontsize=13, fontweight='bold')
    ax.grid(True, alpha=0.3, axis='x')

    ax.text(-20, 5.5,
           f"Cat's coherence time ≈ 10⁻⁴⁰ s\n(10³⁰ times shorter than\nthe age of the universe!)\n→ Superposition unobservable",
           fontsize=10, bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))
    ax.text(8, 0.5,
           f"Electron's coherence time ≈ 10¹⁰ s\n(~300 years)\n→ Quantum effects easily observed",
           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()

The bottom-right horizontal bar chart is the punch line of the entire decoherence story. An electron’s coherence time is about 300 years (the blue bar extending far to the right), while a cat’s coherence time is 10⁻⁴⁰ seconds (the red bar extending far to the left, off the chart entirely). A gap of 50 orders of magnitude explains why our everyday world “appears” classical.

Finally, the code outputs a text summary and draws an elegant connection between decoherence and Laozi’s “the Dao that can be spoken is not the eternal Dao.”

    print("\n" + "="*70)
    print("[Decoherence: Why Schrödinger's Cat Doesn't Work in Practice]")
    print("="*70)
    print("\nThe question:")
    print('  If quantum superposition is real, why have we never seen')
    print('  a cat that is "both dead and alive"?')
    print("\nThe answer: Decoherence")
    print("  • Macroscopic objects interact with their environment countless times")
    print('  • Each interaction is effectively a "measurement"')
    print("  • Superposition collapses extremely rapidly")
    print("\nThe math:")
    print("  Coherence time τ ∝ 1 / (number of environmental particles)")
    print("  Electron:   τ ≈ 10¹⁰ seconds (observable)")
    print("  Virus:      τ ≈ 10⁻³ seconds")
    print("  Dust grain: τ ≈ 10⁻¹⁰ seconds")
    print("  Cat:        τ ≈ 10⁻⁴⁰ seconds (completely unobservable)")
    print("\nKey insights:")
    print("  1. Quantum superposition is real")
    print("  2. But macroscopic objects decohere too fast for us to see it")
    print('  3. It is not that "quantum mechanics doesn\'t apply to the macro world"')
    print('     but that "macroscopic objects are too difficult to isolate"')
    print("\nLaozi's perspective:")
    print('  "The Dao that can be spoken is not the eternal Dao."')
    print('  → Once observed/named, the "Dao" becomes "not the eternal Dao"')
    print('  → Decoherence is nature\'s own act of "observation"')
    print("="*70)

# Run
decoherence_simulation()

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

Output:
– Four panels explaining the decoherence mechanism
– Quantitative explanation: why cats can’t maintain superposition
– Log-scale comparison of coherence times for different objects

The key answer:

It’s not that “quantum mechanics doesn’t apply to cats.” It’s that “the cat interacts with its environment so intensely that superposition collapses almost instantaneously.”

If you could completely isolate the cat (theoretically), it could indeed be both dead and alive. But in practice, that’s impossible.


The Unspeakable Dao: Why Can’t We Directly Observe a Quantum State?

Let’s return to Laozi’s central thesis: “The Dao that can be spoken is not the eternal Dao.”

Translated into quantum language:

“A quantum state that can be measured is no longer the original quantum state.”

Why?

Measurement Changes the State

In quantum mechanics:
– Before measurement: |ψ⟩ = α|0⟩ + β|1⟩ (superposition)
– After measurement: |0⟩ or |1⟩ (definite state)

You can never “see” the superposition itself.

The moment you try to observe it, the superposition collapses.

This echoes Laozi:
– Before naming: the “Dao” is undifferentiated
– After naming: the “Dao” splits into “being” and “non-being”

You can never “directly experience” the undifferentiated Dao.

The moment you try to describe it, distinction is born.

“The Nameless Is the Origin of Heaven and Earth” — Superposition as Foundation

Laozi said: “The nameless is the origin of heaven and earth.”

Quantum mechanics says: superposition is the most fundamental state.

  • It is not that “|0⟩ or |1⟩ is basic, and superposition is exotic”
  • Rather, “superposition is basic, and definite states are products of measurement”

Similarly:
– It is not that “being and non-being are basic, and the Dao is abstract”
– Rather, “the Dao is basic, and being/non-being are products of naming”

“The Named Is the Mother of All Things” — Measurement Creates Determinacy

Laozi said: “The named is the mother of all things.”

Quantum mechanics says: measurement creates determinacy.

Measurement does not “discover” where the particle is — it “causes” the particle to be somewhere.

Similarly:
Naming does not “discover” what things are — it “causes” things to have distinctions.


Superposition Thinking in the Modern World

Quantum Computing: Turning “Both-And” into Processing Power

Quantum computing is built on superposition.

A classical bit is either 0 or 1. A quantum bit (qubit) is α|0⟩ + β|1⟩.

One qubit simultaneously represents two possibilities. Two qubits simultaneously represent four. n qubits simultaneously represent 2ⁿ possibilities.

Laozi wrote: “The Dao produces one, one produces two, two produces three, three produces the ten thousand things.” Quantum computing is turning this philosophical vision into engineering reality.

Cognitive Science: “Superposition” in Human Decision-Making

Psychologists have found that before making a decision, people’s preferences are often not determinate.

You are not “preferring A or B but unaware which” — you are “genuinely without a preference until the moment you’re asked.”

This is called Quantum Cognition — using the mathematical framework of quantum mechanics to model human decision-making.

Laozi knew it all along: “The Dao that can be spoken is not the eternal Dao” — before you articulate a preference, the preference is indeterminate.

Zen Koans: The Gateless Gate

The Zen Buddhist concept of non-duality resonates deeply with quantum superposition.

There is a famous Zen story: two monks were arguing about a flag fluttering in the wind. One said, “The flag is moving.” The other said, “The wind is moving.” The Sixth Patriarch Huineng overheard and said:

“Neither the flag nor the wind is moving. It is your mind that moves.”

The motion of the flag and the wind are not independent facts — they depend on the observer’s interpretation.

For Western readers, this might recall the philosophical debate between realism and idealism — but Zen, like quantum mechanics, refuses to land on either side. The point is not that reality is “all in your head,” but that the act of observation is inseparable from what is observed.

Measurement creates reality. Observation creates the world. Naming creates all things.


Three Deep Philosophical Questions

Question 1: Before Measurement/Naming, Does the World “Exist”?

Quantum mechanics’ answer:
– A particle has no definite position before measurement
– But it “exists” in some sense (it has a wavefunction)
– This mode of “existence” transcends the categories of “here” or “there”

Laozi’s answer:
– All things have no distinctions before naming
– But the “Dao” exists in some sense
– This mode of “existence” transcends the categories of “being” and “non-being”

Question 2: What Does Observation/Naming Create?

Quantum mechanics:
Measurement does not create the particle, but it creates determinacy.

Laozi:
Naming does not create things, but it creates distinction.

Question 3: Can We Ever “Know” the Truth?

Quantum mechanics:
You can know the measurement result, but you can never “see” the pre-measurement superposition.

Laozi:
You can describe the “Dao” in words, but the described “Dao” is already not the original Dao.

Shared conclusion:
Truth transcends the realm of the “knowable.” Not because we lack intelligence, but because the very act of knowing changes the truth.


Conclusion: Between the Determined and the Undetermined

Schrödinger designed a cat to prove quantum mechanics was absurd. Instead, his cat became quantum mechanics’ greatest ambassador.

Laozi wrote the Dao De Jing in 5,000 characters, opening with: “The Dao that can be spoken is not the eternal Dao.” He understood that the limits of language are not a deficiency — they reveal a deeper truth.

Zhuangzi dreamed he was a butterfly, then woke and asked: which is real? Twenty-three centuries later, quantum mechanics tells us: before measurement, the question has no answer.

Three traditions, three languages, one insight:

Determinacy is not a fundamental feature of the world.

It is a product of observation, a consequence of naming, a result of measurement.

Before the box is opened, the cat is both dead and alive.
Before names appear, the Dao transcends being and non-being.
Before waking, Zhuangzi and the butterfly are equally real.

And this, perhaps, is the most authentic truth of all.


Next in the Series

Episode 4: The Uncertainty Principle vs Buddhist “Emptiness” (Sunyata)

In 1927, Heisenberg discovered:

Δx · Δp ≥ ℏ/2

The more precisely you know position, the less precisely you can know momentum.

This is not a limitation of measuring instruments — it is a law of nature.

In the 2nd century CE, the Buddhist philosopher Nagarjuna wrote:

“Whatever arises through dependent origination, I declare to be emptiness.”

Nothing possesses an independent, self-existing essence. Everything exists in dependence on conditions.

In the next episode, we will explore:
– The deep meaning of the uncertainty principle
– What Buddhist “emptiness” (sunyata) truly means
– Why “a particle cannot have simultaneously definite position and momentum”
– Why “nothing has an independent, intrinsic nature”
– Using Python to simulate how “uncertainty” emerges from the mathematics


References

  1. Schrödinger, E. (1935). “Die gegenwärtige Situation in der Quantenmechanik”. Naturwissenschaften, 23, 807-812.
  2. Laozi (c. 4th century BCE). Dao De Jing.
  3. Zhuangzi (c. 4th century BCE). Zhuangzi, “Discussion on Making All Things Equal” (Qi Wu Lun).
  4. Zurek, W. H. (2003). “Decoherence, einselection, and the quantum origins of the classical”. Reviews of Modern Physics, 75(3), 715.
  5. Joos, E., et al. (2003). Decoherence and the Appearance of a Classical World in Quantum Theory. Springer.
  6. Arndt, M., et al. (1999). “Wave-particle duality of C60 molecules”. Nature, 401, 680-682.
  7. Busemeyer, J. R. & Bruza, P. D. (2012). Quantum Models of Cognition and Decision. Cambridge University Press.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *