A4: Generate State 12(02n1)\frac{1}{\sqrt{2}}\lparen\ket{0}-\ket{2^{n}-1}\rparen II

実行時間制限:3 秒

メモリ制限:512 MiB

配点:100点

Writer:ST12

解説

問題 A3 の想定解法では量子回路の深さが n+1n+1 となり、この問題を解くことができません。 では、どのような量子回路を設計すれば良いのでしょうか?

まず、量子回路の深さを小さくするためには、なるべく連続して同じ量子ビットに対して量子ゲートを作用させるのを避ける必要があります。

以下の 44 量子ビットの例をみてみましょう。

問題 A3 解説の回路との違いは、最も右側の制御 XX ゲートの制御ビットが 1番目 から 2番目 に変わっていることです。

このとき、最も右側の制御ゲートは2番目と4番目の量子ビットに対する操作であり、1つ左側の制御ゲートは1番目と3番目の量子ビットに対する操作であるため、この2つの操作は同時に行うことができ、回路の深さを1つ縮めることができます。

量子状態の遷移をみていきます。 2つ目の制御 XX ゲートを作用させるまでは、問題 A3 の想定解法と同じです。

0000H(0)CX(0,1)CX(0,2)12(0000+1110)\begin{equation} \ket{0000} \xrightarrow{H(0)} \xrightarrow{CX(0,1)}\xrightarrow{CX(0,2)} \frac{1}{\sqrt{2}} \lparen \ket{0000} + \ket{1110} \rparen \end{equation}

次に、2番目の量子ビットを制御ビット、4番目の量子ビットを標的ビットとして制御 XX ゲートを作用させます。

12(0000+1110)CX(1,3)12(0000+1111)\begin{equation} \frac{1}{\sqrt{2}} \lparen \ket{0000} + \ket{1110} \rparen \xrightarrow{CX(1,3)} \frac{1}{\sqrt{2}} \lparen \ket{0000} + \ket{1111} \rparen \end{equation}

最後に ZZ ゲートを作用させることで 1111\ket{11 \cdots 11} の位相を反転させます。

12(0...0+1...1)Z(0)12(0...01...1)\begin{equation} \frac{1}{\sqrt{2}} \lparen \ket{0...0} + \ket{1...1} \rparen \xrightarrow{Z(0)} \frac{1}{\sqrt{2}} \lparen \ket{0...0} - \ket{1...1} \rparen \end{equation}

この発想を一般の nn 量子ビットの量子回路に対して一般化すると、以下の操作を繰り返すことになります。

  • 1番目の量子ビットを制御ビット、2i2i 番目の量子ビットを標的ビットとして制御 XX ゲートを作用させる
  • 2番目の量子ビットを制御ビット、2i+12i + 1 番目の量子ビットを標的ビットとして制御 XX ゲートを作用させる

例えば、n=7n = 7 の場合は以下のような回路が構成できます。

以上の操作によって量子回路の深さは n/2+3\lfloor n/2 \rfloor + 3 以下になり、この問題を解くことができます。

解答例

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

from qiskit import QuantumCircuit
 
 
def solve(n: int) -> QuantumCircuit:
    qc = QuantumCircuit(n)
 
    qc.h(0)
    qc.cx(0, 1)
 
    for i in range(2, n - 1, 2):
        qc.cx(0, i)
        qc.cx(1, i + 1)
 
    if n % 2 != 0:
        qc.cx(0, n - 1)
 
    qc.z(0)
 
    return qc