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⟩.
State and transformation
Quantum circuit
Circuit wire labels follow the Qiskit indexing convention; Statevector results are computed with an ideal simulator, not hardware.
Analytic predictions and simulator results
Swipe the results table horizontally to see all columns.
| Quantity | Analytic prediction | Computed value or classical sample |
|---|---|---|
| Bell · same outcome in Z | 100% | 100% · Qiskit |
| Bell · same outcome in X | 100% | 100% · Qiskit |
| Classical mixture · same in X | 50% | 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.
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.
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.
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.
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.