B7: Reflection Operator III

実行時間制限:3 秒

メモリ制限:512 MiB

配点:300点

Writer:Not_Leonian

解説

ゼロ状態 0\ket{0} にB3の回路を作用させると ψ\ket{\psi} になることに注目します。

量子状態 ψ\ket{\psi}ψ=U0\ket{\psi}=U\ket{0} と表現するとき、

UU=I\begin{equation} UU^{\dagger} = I \end{equation}

が成立することと随伴行列の性質より

ψ=ψ=(U0)=0U=0U\begin{equation} \bra{\psi}=\ket{\psi}^{\dagger}=(U\ket{0})^{\dagger}=\ket{0}^{\dagger}U^{\dagger}=\bra{0}U^{\dagger} \end{equation}

が成立することから 2ψψI2\ket{\psi}\bra{\psi} - I は以下のように変形できます。

2ψψI=2U00UUU=U(200I)U\begin{equation} 2\ket{\psi}\bra{\psi} - I = 2 U \ket{0} \bra{0} U^{\dagger} - UU^{\dagger} = U (2\ket{0}\bra{0} - I) U^{\dagger} \end{equation}

よって、B3で実装した回路の逆回路を実装してから、B4の回路を実装し、B3の回路を実装することでこの問題を解くことができます。

n=3n = 3 の場合の回路図は、以下の通りです。回路図内のRotate_B3はB3の回路を、Rotate_B3_dgはB3の逆回路を、Reflect_B4はB4の回路を示しています。

解答例

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

from qiskit import QuantumCircuit
from qiskit.circuit.library import ZGate
 
 
def reflect(n: int) -> QuantumCircuit:
    qc = QuantumCircuit(n)
 
    qc.x(range(n))
    qc.append(ZGate().control(n - 1), range(n))
    qc.x(range(n))
 
    return qc
 
 
def rotate(n: int, T: list[float]) -> QuantumCircuit:
    qc = QuantumCircuit(n)
 
    for i in range(n):
        qc.ry(T[i] * 2, i)
 
    return qc
 
 
def solve(n: int, T: list[float]) -> QuantumCircuit:
    qc = QuantumCircuit(n)
 
    qc.compose(rotate(n, T).inverse(), inplace=True)
    qc.compose(reflect(n), inplace=True)
    qc.compose(rotate(n, T), inplace=True)
 
    return qc