らんだむな記憶

blogというものを体験してみようか!的なー

<QT> Digression: Measuring in Different Bases

いまいち何を書いてあるのかはよく分からないので、処理をそのまま追いかけてみよう。

$$
\begin{align*}
\ket{q} = a \ket{0} + b \ket{1} = a^\prime \ket{+} + b^\prime \ket{-}
\end{align*}
$$

というように量子状態は複数の正規直交基底で測定できる。例えば、X-基底 $\ket{+}$ と $\ket{-}$ で $\ket{q}$ を測定する場合、$p(\ket{+}) = |a^\prime|^2 = |\braket{+|q}|^2$ となる。

$$
\begin{align*}
H \ket{-} = \frac{1}{\sqrt{2}} (H \ket{0} - H \ket{1}) = \frac{1}{\sqrt{2}} (\ket{+} - \ket{-}) = \ket{1}
\end{align*}
$$

の他、$H \ket{+} = \ket{0}$, $H \ket{0} = \ket{+}$, $H \ket{1} = \ket{-}$ であり、アダマールゲートは X-基底と Z-基底を相互にうつす。

Qiskit は Z-基底での測定しかできないため、量子状態を$\ket{q} = a^\prime \ket{+} + b^\prime \ket{-}$ をX-基底で測定したい場合、アダマールゲートを作用させ量子振幅を変えずに X-基底にうつし、$H \ket{q} = a^\prime \ket{0} + b^\prime \ket{1}$ を Z-基底で測定して確率振幅 $a^\prime$ と $b^\prime$ を特定すれば良い。

textbook では $\ket{q} = 1 \cdot \ket{-}$ に対して $p(\ket{-})$ を特定するためにアダマールゲートを作用させて、$\ket{q} = 1 \cdot \ket{1}$ とし、Z-基底で測定して $p(\ket{-}) = 1$ を特定している。

ちょっとごちゃごちゃした書き方をしているがこれだけのことだと思う。
一応問題も解いておこう。

1. If we initialize our qubit in the state $\ket{+}$, what is the probability of measuring it in state $\ket{-}$?

直交基底なので 0

2. Use Qiskit to display the probability of measuring a $\ket{0}$ qubit in the states $\ket{+}$ and $\ket{-}$.

def x_measurement(qc, qubit, cbit):
    qc.h(qubit)
    qc.measure(qubit, cbit)
    return qc

sim = Aer.get_backend('aer_simulator')
initial_state = [1, 0] # |0> = a |+> + b |-> and mesure it by x_measurement
qc = QuantumCircuit(1,1)
qc.initialize(initial_state, 0)
x_measurement(qc, 0, 0)
qobj = assemble(qc)
counts = sim.run(qobj).result().get_counts()
plot_histogram(counts)

より、確率 1/2 と 1/2 で観測される。

Try to create a function that measures in the Y-basis.

Y-基底を Z-基底にうつすゲートを用意すれば良い。X 軸に関して回転させれば良いので、$Rx(\frac{\pi}{2}) = \frac{1}{\sqrt{2}} \begin{bmatrix} 1 & -i \\ -i & 1 \end{bmatrix}$ に注目したい。

$$
\begin{align*}
Rx(\frac{\pi}{2}) \ket{R} &= Rx(\frac{\pi}{2}) \frac{\ket{0} + i \ket{1}}{\sqrt{2}} = \ket{0} \\
Rx(\frac{\pi}{2}) \ket{L} &= Rx(\frac{\pi}{2}) \frac{\ket{0} - i \ket{1}}{\sqrt{2}} = -i \ket{1}
\end{align*}
$$

である。よって、

def y_measurement(qc, qubit, cbit):
    qc.rx(np.pi/2, qubit)
    qc.measure(qubit, cbit)
    return qc

が 1 つの回答になる。これを使って試しに測定すると

sim = Aer.get_backend('aer_simulator')
initial_state = [1/np.sqrt(2), -1.j/np.sqrt(2)] # |L>
qc = QuantumCircuit(1,1)
qc.initialize(initial_state, 0)
y_measurement(qc, 0, 0)
qobj = assemble(qc)
counts = sim.run(qobj).result().get_counts()
plot_histogram(counts)

によって、$\ket{q} = \ket{L}$ を確率振幅 1 で観測できる。