Ex1: Convert Bit-Flip into Phase-Flip II

実行時間制限:3 秒

メモリ制限:512 MiB

配点:300点

Writer:Not_Leonian

解説

右端の量子ビットに順に XX ゲートと HH ゲートを作用させると、以下のようになります。

xn01Xxn11H12(xn01xn11)\begin{equation} \ket{x}_n\ket{0}_1 \xrightarrow{X} \ket{x}_n\ket{1}_1 \xrightarrow{H} \frac{1}{\sqrt{2}} (\ket{x}_n\ket{0}_1 - \ket{x}_n\ket{1}_1) \end{equation}

さらに、オラクル OO を作用させると、以下のようになります。

12(xn01xn11)O{12(xn11xn01)(f(x)=1)12(xn01xn11)(f(x)=0)\begin{equation} \frac{1}{\sqrt{2}} (\ket{x}_n\ket{0}_1 - \ket{x}_n\ket{1}_1) \xrightarrow{O} \begin{cases} \frac{1}{\sqrt{2}} (\ket{x}_n\ket{1}_1 - \ket{x}_n\ket{0}_1) & (f(x)=1) \\ \frac{1}{\sqrt{2}} (\ket{x}_n\ket{0}_1 - \ket{x}_n\ket{1}_1) & (f(x)=0) \end{cases} \end{equation}

12(xn11xn01)=12(xn01xn11)\frac{1}{\sqrt{2}} (\ket{x}_n\ket{1}_1 - \ket{x}_n\ket{0}_1) = - \frac{1}{\sqrt{2}} (\ket{x}_n\ket{0}_1 - \ket{x}_n\ket{1}_1) に注目して、右端の量子ビットに順に HH ゲートと XX ゲートを作用させると、以下のようになり、期待される操作が実装できたことになります。

{12(xn11xn01)(f(x)=1)12(xn01xn11)(f(x)=0)H{xn11(f(x)=1)xn11(f(x)=0)X{xn01(f(x)=1)xn01(f(x)=0)\begin{align} \begin{cases} \frac{1}{\sqrt{2}} (\ket{x}_n\ket{1}_1 - \ket{x}_n\ket{0}_1) & (f(x)=1) \\ \frac{1}{\sqrt{2}} (\ket{x}_n\ket{0}_1 - \ket{x}_n\ket{1}_1) & (f(x)=0) \end{cases} & \xrightarrow{H} \begin{cases} -\ket{x}_n\ket{1}_1 & (f(x)=1) \\ \ket{x}_n\ket{1}_1 & (f(x)=0) \end{cases} \\ & \xrightarrow{X} \begin{cases}-\ket{x}_n\ket{0}_1 & (f(x)=1) \\ \ket{x}_n\ket{0}_1 & (f(x)=0) \end{cases} \end{align}

n=3n = 3 の場合の回路図は、以下の通りです。

解答例

解答例は以下の通りです。

from qiskit import QuantumCircuit, QuantumRegister
 
 
def solve(n: int, o: QuantumCircuit) -> QuantumCircuit:
    x, y = QuantumRegister(n), QuantumRegister(1)
    qc = QuantumCircuit(x, y)
 
    qc.x(y)
    qc.h(y)
    qc.compose(o, inplace=True)
    qc.h(y)
    qc.x(y)
 
    return qc