Bell States

Bell state is constructed with application of \(\textbf{Hadamard} \) and \(\textbf{CNOT}\) gates in two qubit system.

%matplotlib inline
import numpy as np
import IPython
import matplotlib.pyplot as plt
from qiskit import QuantumCircuit
from qiskit.tools.jupyter import *
from qiskit.visualization import *
import seaborn as sns
sns.set()
from helper import *

Bell State Circuit

\( \beta_{00} \)

def circuit_00():
    qc = QuantumCircuit(2,2)
    qc.h(0)
    qc.barrier()
    qc.cx(0, 1)
    return qc
  • Circuit Diagram
bell_00 = circuit_00()
drawCircuit(bell_00)

png

  • Two qubit system (state vector)

    • Initial state = |00>
    • After application of Hadamard Gate: \( \frac{1}{\sqrt{2}}|00\rangle + \frac{1}{\sqrt{2}}|01\rangle \)
    • After application of CNOT Gate: \( \frac{1}{\sqrt{2}}|00 \rangle + \frac{1}{\sqrt{2}}|11 \rangle \)

def getPhaseSeq():
    phaseDic = []
    qc0 = QuantumCircuit(2,2)
    qc1 = QuantumCircuit(2,2)
    qc1.h(0)
    qc2 = QuantumCircuit(2,2)
    qc2.h(0)
    qc2.cx(0, 1)
    for iqc in [qc0,qc1,qc2]:
        phaseDic.append(getPhase(iqc))
    return phaseDic    
drawPhase(getPhaseSeq())

png

bell_00 = circuit_00()
simCircuit(bell_00)

png

  • Single qubit states (tensor product)

\(\textbf{Question:}\) Can you write Bell state as a tensor product of single qubit state?

\( \textbf{Answer} \): No, it is not possible. It is hard to realise.

$$\left( \begin{array}{cc} p \\ q \end{array} \right) \otimes \left( \begin{array}{cc} r \\ s \end{array} \right)= c \left( \begin{array}{cc} m \\ 0 \\ 0 \\ n \end{array} \right) $$

  • Matrix element (tensor product)

\( \textbf{Question:}\) Can we write matrix represented by the Bell circuit as a tensor product of fundamental gate matrices?

bell_00 = circuit_00()
drawCircuit(bell_00)

png

Based on above Bell circuit, lets construct the matrix representation of the circuit using fundamental gates matrices involved in the circuit.

$$H = \frac{1}{\sqrt{2}} \left( \begin{array}{cc} 1 & 1 \\ 1 & -1 \end{array} \right); I = \frac{1}{\sqrt{2}} \left( \begin{array}{cc} 1 & 0 \\ 0 & 1 \end{array} \right); \text{CNOT} = \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ \end{array} \right)$$

  • Before first barrier

$$ I \otimes H = \left( \begin{array}{cc} H & 0 \\ 0 & H \end{array} \right) $$

  • After first barrier

\( \text{CNOT} \)

  • Net operation before measurement

\( U = \text{CNOT} \times (I \otimes H) \)

Lets express U matrix using numpy library.

I = np.eye(2,2)
H = 1/np.sqrt(2)*np.array([[1,1],[1,-1]])
CNOT = np.array([[1,0,0,0],[0,0,0,1],[0,0,1,0],[0,1,0,0]])
I_kron_H = np.kron(I,H)
U = np.dot(CNOT,I_kron_H)
print(U)
[[ 0.70710678  0.70710678  0.          0.        ]
 [ 0.          0.          0.70710678 -0.70710678]
 [ 0.          0.          0.70710678  0.70710678]
 [ 0.70710678 -0.70710678  0.          0.        ]]

We can also observe final ket vector by multiplying it with U matrix.

ket_00 = np.array([1,0,0,0])
np.dot(U,ket_00)
array([0.70710678, 0.        , 0.        , 0.70710678])

Infact we can check our matrix from our circuit shown below by implementing Q is kit's "unitary_simulator".

bell_00 = circuit_00()
plotMatrix(bell_00)

png