解説
状態 ∣00⟩ と状態 ∣10⟩ の状態遷移を同時に扱うことで、この問題を解くことができます。
想定解法の操作を実装した回路図は以下の通りです。
はじめに、以下のような状態 ∣00⟩,∣10⟩ の重ね合わせ状態を考えます。ただし、a0,a1 は各状態の複素振幅です。
a0∣00⟩+a1∣10⟩=(a0∣0⟩+a1∣1⟩)∣0⟩
まず、この状態に回転ゲートの一つである Ry ゲートを作用させることで、問題文にある 1/3 という複素振幅を作り出します。
ただし、θ=2arctan(2) です。(回転ゲートの詳細ついては、QPC001 A5 問題 を参照して下さい。)
(a0∣0⟩+a1∣1⟩)∣0⟩Ry(θ,1)(a0∣0⟩+a1∣1⟩)(31∣0⟩+32∣1⟩)
次に、制御 H ゲートを作用させることで、1/3で括ることができる重ね合わせ状態を生成します。
(a0∣0⟩+a1∣1⟩)(31∣0⟩+32∣1⟩)CH(1,0)31(a0∣00⟩+a1∣10⟩+(a0+a1)∣01⟩+(a0−a1)∣11⟩)
そして、X ゲートと制御 X ゲートを作用させることで、状態 ∣00⟩ と状態 ∣10⟩ の複素振幅を入れ替えます。
(a0∣00⟩+a1∣10⟩+(a0+a1)∣01⟩+(a0−a1)∣11⟩)X(0)CX(0,1)X(0)31((a0+a1)∣00⟩+a1∣10⟩+a0∣01⟩+(a0−a1)∣11⟩)
最後に、制御 Z ゲートを作用させることで、状態 ∣11⟩ の複素振幅の正負を反転させます。
31((a0+a1)∣00⟩+a1∣10⟩+a0∣01⟩+(a0−a1)∣11⟩)CZ(1,0)31((a0+a1)∣00⟩+a1∣10⟩+a0∣01⟩−(a0−a1)∣11⟩)
以上の操作をまとめると、次のような状態遷移が成り立ちます。
a0∣00⟩+a1∣10⟩qc31((a0+a1)∣00⟩+a1∣10⟩+a0∣01⟩−(a0−a1)∣11⟩)
ここで、a0=1,a1=0 である時、次の状態遷移が成り立ちます。
∣00⟩qc31(∣00⟩+∣01⟩−∣11⟩)
また、a0=0,a1=1 である時、次の状態遷移が成り立ちます。
∣10⟩qc31(∣00⟩+∣10⟩+∣11⟩)
以上のことから、この操作によってこの問題を解くことができます。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
def solve() -> QuantumCircuit:
qc = QuantumCircuit(2)
theta = 2 * math.atan(math.sqrt(2))
qc.ry(theta, 1)
qc.ch(1, 0)
qc.x(0)
qc.cx(0, 1)
qc.x(0)
qc.cz(1, 0)
return qc