A3: Generate State 13(100+010+001)\frac{1}{\sqrt{3}}\lparen\ket{100}+\ket{010}+\ket{001}\rparen

実行時間制限:3 秒

メモリ制限:512 MiB

配点:300点

Writer:ST12

解説

生成したい状態は 同じ複素振幅を持った3つの計算基底状態 100, 010, 001\ket{100},\ \ket{010},\ \ket{001} の重ね合わせ状態です。

このような同じ複素振幅をもった複数の計算基底状態の重ね合わせ状態の生成には、yy 軸上の 回転ゲート である RyR_y ゲートを利用できます。 回転ゲートについては、QPC001 A5 問題 を参照して下さい。

はじめに、ゼロ状態 000\ket{000} に対して XX ゲートを作用させます。

000X(0)100\begin{equation} \ket{000} \xrightarrow{X(0)} \ket{100} \end{equation}

次に、この量子状態 100\ket{100} に対して、制御 RyR_y ゲートを作用させ、100\ket{100}110\ket{110} の重ね合わせ状態を生成します。 100\ket{100} の振幅を完成形の振幅 1/31/\sqrt{3} にすることを考えると、回転角 θ1\theta_1 は以下の連立方程式を解くことで求めることができます。

{cos(θ12)=13sin(θ12)=23\begin{equation} \left\{ \, \begin{aligned} & \cos\left(\frac{\theta_1}{2}\right) = \frac{1}{\sqrt{3}} \\ & \sin\left(\frac{\theta_1}{2}\right) = \sqrt{\frac{2}{3}} \end{aligned} \right. \end{equation}

この方程式を解くと、0θ12π0 \leq \theta_1 \leq 2\pi の範囲で次の解が得られます。

θ1=2arctan(2)\begin{equation} \theta_1 = 2 \arctan{(\sqrt{2})} \end{equation}

よって、量子状態 100\ket{100} に対して1ビット目を制御ビット、2ビット目を標的ビットとした回転角 θ1\theta_1 の制御 RyR_y ゲートを作用させます。

100CRy(θ1,0,1)13100+23110\begin{equation} \ket{100} \xrightarrow{CRy(\theta_1, 0, 1)} \frac{1}{\sqrt{3}} \ket{100} + \sqrt{\frac{2}{3}} \ket{110} \end{equation}

そして、1ビット目を標的ビット、2ビット目を制御ビットとして制御 XX ゲートを作用させ、計算基底状態 110\ket{110}010\ket{010} に変化させます。

13100+23110CX(0,1)13100+23010\begin{equation} \frac{1}{\sqrt{3}} \ket{100} + \sqrt{\frac{2}{3}} \ket{110} \xrightarrow{CX(0, 1)} \frac{1}{\sqrt{3}} \ket{100} + \sqrt{\frac{2}{3}}\ket{010} \end{equation}

このような制御 RyR_y ゲートと制御 XX ゲートを作用させる操作をもう一度繰り返し、23010\sqrt{\frac{2}{3}}\ket{010} から 13010+13001\frac{1}{\sqrt{3}} \ket{010} + \frac{1}{\sqrt{3}} \ket{001} を生成します。

このとき、必要な RyR_y ゲートは 23010\sqrt{\frac{2}{3}}\ket{010} の振幅を二分するため、回転角 θ2\theta_2 は以下の連立方程式を解くことで求めることができます。

{cos(θ22)=12sin(θ22)=12\begin{equation} \left\{ \, \begin{aligned} & \cos\left(\frac{\theta_2}{2}\right) = \frac{1}{\sqrt{2}} \\ & \sin\left(\frac{\theta_2}{2}\right) = \frac{1}{\sqrt{2}} \end{aligned} \right. \end{equation}

この方程式を解くと、0θ22π0 \leq \theta_2 \leq 2\pi の範囲で次の解が得られます。

θ2=2arctan(1)=π2\begin{equation} \theta_2 = 2 \arctan{(1)} = \frac{\pi}{2} \end{equation}

よって、2ビット目を制御ビット、3ビット目を標的ビットとして、この回転角 θ2\theta_2 を持った制御 RyR_y ゲートを作用させます。

13100+23010CRy(θ2,1,2)13(100+010+011)\begin{equation} \frac{1}{\sqrt{3}} \ket{100} + \sqrt{\frac{2}{3}}\ket{010} \xrightarrow{CRy(\theta_2,1, 2)} \frac{1}{\sqrt{3}} (\ket{100} + \ket{010} + \ket{011}) \end{equation}

最後に、3ビット目を標的ビット、2ビット目を制御ビットとして制御 XX ゲートを作用させることで、この問題を解くことができます。

13(100+010+011)CX(2,1)13(100+010+001)\begin{equation} \frac{1}{\sqrt{3}} (\ket{100} + \ket{010} + \ket{011}) \xrightarrow{CX(2, 1)} \frac{1}{\sqrt{3}} (\ket{100} + \ket{010} + \ket{001}) \end{equation}

以上の操作をまとめると、以下のように表されます。

000X(0)100CRy(θ1,0,1)13100+23110CX(1,0)13100+23010CRy(θ2,1,2)13(100+010+011)CX(2,1)13(100+010+001)\begin{align} \ket{000} &\xrightarrow{X(0)} \ket{100} \nonumber\\ &\xrightarrow{CRy(\theta_1, 0, 1)} \frac{1}{\sqrt{3}} \ket{100} + \sqrt{\frac{2}{3}} \ket{110} \nonumber\\ &\xrightarrow{CX(1, 0)} \frac{1}{\sqrt{3}} \ket{100} + \sqrt{\frac{2}{3}} \ket{010} \nonumber\\ &\xrightarrow{CRy(\theta_2, 1, 2)} \frac{1}{\sqrt{3}} (\ket{100} + \ket{010} + \ket{011}) \nonumber \\ &\xrightarrow{CX(2, 1)} \frac{1}{\sqrt{3}} (\ket{100} + \ket{010} + \ket{001}) \end{align}

対応する量子回路は以下の通りです。

解答例

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

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