A6: Zeta / Moebius Transform I

実行時間制限:3 秒

メモリ制限:512 MiB

配点:200点

Writer:fortoobye

解説

状態 00\ket{00} と状態 10\ket{10} の状態遷移を同時に扱うことで、この問題を解くことができます。

想定解法の操作を実装した回路図は以下の通りです。

はじめに、以下のような状態 00,10\ket{00}, \ket{10} の重ね合わせ状態を考えます。ただし、a0,a1a_0, a_1 は各状態の複素振幅です。

a000+a110=(a00+a11)0\begin{equation} a_0 \ket{00} + a_1 \ket{10} = (a_0 \ket{0} + a_1 \ket{1}) \ket{0} \end{equation}

まず、この状態に回転ゲートの一つである RyRy ゲートを作用させることで、問題文にある 1/31 / \sqrt{3} という複素振幅を作り出します。 ただし、θ=2arctan(2)\theta = 2 \arctan{(\sqrt{2})} です。(回転ゲートの詳細ついては、QPC001 A5 問題 を参照して下さい。)

(a00+a11)0Ry(θ,1)(a00+a11)(130+231)\begin{equation} (a_0 \ket{0} + a_1 \ket{1}) \ket{0} \xrightarrow{Ry(\theta, 1)} (a_0 \ket{0} + a_1 \ket{1}) \left( \frac{1}{\sqrt{3}} \ket{0} + \frac{\sqrt{2}}{\sqrt{3}} \ket{1}\right) \end{equation}

次に、制御 HH ゲートを作用させることで、1/31 / \sqrt{3}で括ることができる重ね合わせ状態を生成します。

(a00+a11)(130+231)CH(1,0)13(a000+a110+(a0+a1)01+(a0a1)11)\begin{equation} (a_0 \ket{0} + a_1 \ket{1}) \left( \frac{1}{\sqrt{3}} \ket{0} + \frac{\sqrt{2}}{\sqrt{3}} \ket{1}\right) \xrightarrow{CH(1, 0)} \frac{1}{\sqrt{3}} ( a_0 \ket{00} + a_1 \ket{10} + (a_0 + a_1) \ket{01} + (a_0 - a_1) \ket{11} ) \end{equation}

そして、XX ゲートと制御 XX ゲートを作用させることで、状態 00\ket{00} と状態 10\ket{10} の複素振幅を入れ替えます。

(a000+a110+(a0+a1)01+(a0a1)11)X(0)CX(0,1)X(0)13((a0+a1)00+a110+a001+(a0a1)11)\begin{align} &( a_0 \ket{00} + a_1 \ket{10} + (a_0 + a_1) \ket{01} + (a_0 - a_1) \ket{11} ) \nonumber \\ &\xrightarrow{X(0)} \xrightarrow{CX(0, 1)} \xrightarrow{X(0)} \frac{1}{\sqrt{3}} ( \underline{(a_0 + a_1)} \ket{00} + a_1 \ket{10} + \underline{a_0} \ket{01} + (a_0 - a_1) \ket{11} ) \end{align}

最後に、制御 ZZ ゲートを作用させることで、状態 11\ket{11} の複素振幅の正負を反転させます。

13((a0+a1)00+a110+a001+(a0a1)11)CZ(1,0)13((a0+a1)00+a110+a001(a0a1)11)\begin{align} &\frac{1}{\sqrt{3}} ( (a_0 + a_1) \ket{00} + a_1 \ket{10} + a_0 \ket{01} + (a_0 - a_1) \ket{11} ) \nonumber \\ &\xrightarrow{CZ(1, 0)} \frac{1}{\sqrt{3}} ( (a_0 + a_1) \ket{00} + a_1 \ket{10} + a_0 \ket{01} \underline{- (a_0 - a_1)} \ket{11} ) \end{align}

以上の操作をまとめると、次のような状態遷移が成り立ちます。

a000+a110qc13((a0+a1)00+a110+a001(a0a1)11)\begin{equation} a_0 \ket{00} + a_1 \ket{10} \xrightarrow{\mathrm{qc}} \frac{1}{\sqrt{3}} ( (a_0 + a_1) \ket{00} + a_1 \ket{10} + a_0 \ket{01} - (a_0 - a_1) \ket{11} ) \end{equation}

ここで、a0=1,a1=0a_0 = 1, a_1 = 0 である時、次の状態遷移が成り立ちます。

00qc13(00+0111)\begin{equation} \ket{00} \xrightarrow{\mathrm{qc}} \frac{1}{\sqrt{3}} ( \ket{00} + \ket{01} - \ket{11} ) \end{equation}

また、a0=0,a1=1a_0 = 0, a_1 = 1 である時、次の状態遷移が成り立ちます。

10qc13(00+10+11)\begin{equation} \ket{10} \xrightarrow{\mathrm{qc}} \frac{1}{\sqrt{3}} ( \ket{00} + \ket{10} + \ket{11} ) \end{equation}

以上のことから、この操作によってこの問題を解くことができます。

解答例

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

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