解説
すべての量子ビットに H ゲートを作用させると、ゼロ状態 ∣0⟩ は ∣ψ⟩ に遷移することに注目します。すなわち、∣ψ⟩は、
∣ψ⟩=H⊗n∣0⟩
と表現できます。
また、 H ゲートの性質から
H⊗n=(H⊗n)†, (H⊗n)2=I
が成立することと、随伴行列の性質から
⟨ψ∣=∣ψ⟩†=(H⊗n∣0⟩)†=∣0⟩†(H⊗n)†=⟨0∣H⊗n
が成立することを利用すると、2∣ψ⟩⟨ψ∣−I は以下のように変形できます。
2∣ψ⟩⟨ψ∣−I=2H⊗n∣0⟩⟨0∣H⊗n−(H⊗n)2=H⊗n(2∣0⟩⟨0∣−I)H⊗n
よって、全ての量子ビットに H ゲートを作用させてから、B4の回路を実装し、再度全ての量子ビットに H ゲートを作用させることでこの問題を解くことができます。
n=3 の場合の回路図は、以下の通りです。回路図内の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 solve(n: int) -> QuantumCircuit:
qc = QuantumCircuit(n)
qc.h(range(n))
qc.compose(reflect(n), inplace=True)
qc.h(range(n))
return qc