解説
生成したい状態は 同じ複素振幅を持った3つの計算基底状態 ∣100⟩, ∣010⟩, ∣001⟩ の重ね合わせ状態です。
このような同じ複素振幅をもった複数の計算基底状態の重ね合わせ状態の生成には、y 軸上の 回転ゲート である Ry ゲートを利用できます。
回転ゲートについては、QPC001 A5 問題 を参照して下さい。
はじめに、ゼロ状態 ∣000⟩ に対して X ゲートを作用させます。
∣000⟩X(0)∣100⟩
次に、この量子状態 ∣100⟩ に対して、制御 Ry ゲートを作用させ、∣100⟩ と ∣110⟩ の重ね合わせ状態を生成します。
∣100⟩ の振幅を完成形の振幅 1/3 にすることを考えると、回転角 θ1 は以下の連立方程式を解くことで求めることができます。
⎩⎨⎧cos(2θ1)=31sin(2θ1)=32
この方程式を解くと、0≤θ1≤2π の範囲で次の解が得られます。
θ1=2arctan(2)
よって、量子状態 ∣100⟩ に対して1ビット目を制御ビット、2ビット目を標的ビットとした回転角 θ1 の制御 Ry ゲートを作用させます。
∣100⟩CRy(θ1,0,1)31∣100⟩+32∣110⟩
そして、1ビット目を標的ビット、2ビット目を制御ビットとして制御 X ゲートを作用させ、計算基底状態 ∣110⟩ を ∣010⟩ に変化させます。
31∣100⟩+32∣110⟩CX(0,1)31∣100⟩+32∣010⟩
このような制御 Ry ゲートと制御 X ゲートを作用させる操作をもう一度繰り返し、32∣010⟩ から 31∣010⟩+31∣001⟩ を生成します。
このとき、必要な Ry ゲートは 32∣010⟩ の振幅を二分するため、回転角 θ2 は以下の連立方程式を解くことで求めることができます。
⎩⎨⎧cos(2θ2)=21sin(2θ2)=21
この方程式を解くと、0≤θ2≤2π の範囲で次の解が得られます。
θ2=2arctan(1)=2π
よって、2ビット目を制御ビット、3ビット目を標的ビットとして、この回転角 θ2 を持った制御 Ry ゲートを作用させます。
31∣100⟩+32∣010⟩CRy(θ2,1,2)31(∣100⟩+∣010⟩+∣011⟩)
最後に、3ビット目を標的ビット、2ビット目を制御ビットとして制御 X ゲートを作用させることで、この問題を解くことができます。
31(∣100⟩+∣010⟩+∣011⟩)CX(2,1)31(∣100⟩+∣010⟩+∣001⟩)
以上の操作をまとめると、以下のように表されます。
∣000⟩X(0)∣100⟩CRy(θ1,0,1)31∣100⟩+32∣110⟩CX(1,0)31∣100⟩+32∣010⟩CRy(θ2,1,2)31(∣100⟩+∣010⟩+∣011⟩)CX(2,1)31(∣100⟩+∣010⟩+∣001⟩)
対応する量子回路は以下の通りです。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
def solve() -> QuantumCircuit:
qc = QuantumCircuit(3)
theta1 = 2 * math.atan(math.sqrt(2))
theta2 = 2 * math.atan(1)
qc.x(0)
qc.cry(theta1, 0, 1)
qc.cx(1, 0)
qc.cry(theta2, 1, 2)
qc.cx(2, 1)
return qc