Quantum LabQL-004
FOUNDATIONS / VERIFIED IDEAL SIMULATION

Correlation Is Not Entanglement

Bell states, coherence and a classical control

NumPy mathematicsQiskit StatevectorNo hardware claim
01 / The question

If the two qubits always give matching Z-basis outcomes, does that prove entanglement?

No. An entangled Bell state and a separable classical mixture can produce the same Z-basis outcomes. In this specific comparison, their X-basis distributions differ because the Bell state has coherence between |00⟩ and |11⟩.

02 / Mathematical prediction

State and transformation

Core relation
|Φ⁺⟩=|00⟩+|11⟩2
ρmix = ½|00⟩⟨00| + ½|11⟩⟨11|

Quantum circuit

q₁: |0⟩q₀: |0⟩HCX(q₀→q₁)

Circuit wire labels follow the Qiskit indexing convention; Statevector results are computed with an ideal simulator, not hardware.

03 / Prediction and simulation

Analytic predictions and simulator results

Swipe the results table horizontally to see all columns.

QuantityAnalytic predictionComputed value or classical sample
Bell · same outcome in Z100%100% · Qiskit
Bell · same outcome in X100%100% · Qiskit
Classical mixture · same in X50%50% · NumPy density matrix

Values are reported from the previously completed local experiments: exact ideal statevector probabilities (Qiskit), classical NumPy sampling where stated, and the specified NumPy density-matrix calculation. These are not observations from physical quantum hardware. Rounded values are shown for readability.

04 / Reproduce the principle

Minimal Qiskit example

This independently written teaching snippet illustrates the verified circuit principle without disclosing the private lab source. Run it with NumPy and Qiskit installed; this abbreviated public snippet has undergone source and syntax review, but not a separate Qiskit-enabled execution test.

Python · NumPy + QiskitIdeal statevector
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

circuit = QuantumCircuit(2)
circuit.h(0)
circuit.cx(0, 1)
bell = Statevector.from_instruction(circuit)

x_circuit = circuit.copy()
x_circuit.h(0)
x_circuit.h(1)
p_z = bell.probabilities()
p_x = Statevector.from_instruction(x_circuit).probabilities()

H = np.array([[1, 1], [1, -1]]) / np.sqrt(2)
U = np.kron(H, H)
rho_mix = np.diag([0.5, 0, 0, 0.5])
p_mix_x = np.diag(U @ rho_mix @ U.conj().T).real

print('Bell Z:', np.round(p_z, 6))
print('Bell X:', np.round(p_x, 6))
print('Mixture X:', np.round(p_mix_x, 6))
assert np.allclose(p_z, [0.5, 0, 0, 0.5])
assert np.allclose(p_x, [0.5, 0, 0, 0.5])
assert np.allclose(np.diag(rho_mix), [0.5, 0, 0, 0.5])
assert np.allclose(p_mix_x, [0.25] * 4)

The Bell pure state comes from H followed by CX. The comparison mixture is separable: it discards the off-diagonal coherence while retaining the same Z-basis frequencies. Its X-basis calculation uses a density matrix.

Computations are local ideal statevector calculations. Nothing here sends jobs to an IBM Quantum device or cloud backend.

05 / Interpretation and boundaries

What we can conclude

The constructed pure Bell state has Schmidt rank two, so it cannot factor into two one-qubit pure states. Matching Z-basis outcomes alone do not prove this for an unknown experimental state.

What this does not establish

The X-basis contrast distinguishes these two specified states; it is not a general entanglement witness for unknown noisy states. No physical QPU or device-noise simulation was used.