解説
問題 A6 の発想を利用することで、この問題を解くことができます。
以下の n=2 の例をみてみましょう。
この図のように、1 番目と 3 番目の量子ビットを1つの組、2 番目と 4 番目の量子ビットをもう1つの組として扱うことが重要です。
各組には同じ種類の量子ゲートが作用されています。
ここから、各量子ゲートによってどのような状態遷移が起きているかを具体的に確認してみます。
はじめに、以下のような状態 ∣0000⟩,∣1000⟩,∣0100⟩,∣1100⟩ の重ね合わせ状態を考えます。ただし、a0,a1,a2,a3 は各状態の複素振幅です。
a0∣0000⟩+a1∣1000⟩+a2∣0100⟩+a3∣1100⟩=(a0∣00⟩+a1∣10⟩+a2∣01⟩+a3∣11⟩)∣00⟩
まず、この状態にθ=2arctan(2) として Ry ゲートを作用させます。
(a0∣00⟩+a1∣10⟩+a2∣01⟩+a3∣11⟩)∣00⟩Ry(θ,2)Ry(θ,3)(a0∣00⟩+a1∣10⟩+a2∣01⟩+a3∣11⟩)(31∣0⟩+32∣1⟩)(31∣0⟩+32∣1⟩)
次に、制御 H ゲートを作用させることで、1/3 で括ることができる重ね合わせ状態を生成します。
(a0∣00⟩+a1∣10⟩+a2∣01⟩+a3∣11⟩)(31∣0⟩+32∣1⟩)(31∣0⟩+32∣1⟩)CH(2,0)CH(3,1)31(a0∣0000⟩+a1∣1000⟩+a2∣0100⟩+a3∣1100⟩+(a0+a1)∣0010⟩+(a0−a1)∣1010⟩+(a2+a3)∣0110⟩+(a2−a3)∣1110⟩+(a1+a3)∣1001⟩+(a1−a3)∣1101⟩+(a0+a2)∣0001⟩+(a0−a2)∣0101⟩+(a0+a1+a2+a3)∣0011⟩+(a0−a1+a2−a3)∣1011⟩+(a0+a1−a2−a3)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)
そして、X ゲートと制御 X ゲートを作用させることで、複素振幅を適切に入れ替えます。
31(a0∣0000⟩+a1∣1000⟩+a2∣0100⟩+a3∣1100⟩+(a0+a1)∣0010⟩+(a0−a1)∣1010⟩+(a2+a3)∣0110⟩+(a2−a3)∣1110⟩+(a1+a3)∣1001⟩+(a1−a3)∣1101⟩+(a0+a2)∣0001⟩+(a0−a2)∣0101⟩+(a0+a1+a2+a3)∣0011⟩+(a0−a1+a2−a3)∣1011⟩+(a0+a1−a2−a3)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)X(0)CX(0,2)X(0)X(1)CX(1,3)X(1)31((a0+a1+a2+a3)∣0000⟩+(a1+a3)∣1000⟩+(a2+a3)∣0100⟩+a3∣1100⟩+(a0+a2)∣0010⟩+(a0−a1+a2−a3)∣1010⟩+a2∣0110⟩+(a2−a3)∣1110⟩+(a0+a1)∣0001⟩+(a0+a1−a2−a3)∣0101⟩+a1∣1001⟩+(a1−a3)∣1101⟩+a0∣0011⟩+(a0−a1)∣1011⟩+(a0−a2)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)
最後に、制御 Z ゲートを作用させることで、「1番目と3番目の量子ビットが両方とも 1」もしくは「2番目と4番目の量子ビットが両方とも 1」となる状態の複素振幅の正負を反転させます。
31((a0+a1+a2+a3)∣0000⟩+(a1+a3)∣1000⟩+(a2+a3)∣0100⟩+a3∣1100⟩+(a0+a2)∣0010⟩+(a0−a1+a2−a3)∣1010⟩+a2∣0110⟩+(a2−a3)∣1110⟩+(a0+a1)∣0001⟩+(a0+a1−a2−a3)∣0101⟩+a1∣1001⟩+(a1−a3)∣1101⟩+a0∣0011⟩+(a0−a1)∣1011⟩+(a0−a2)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)CZ(2,0)CZ(3,1)31((a0+a1+a2+a3)∣0000⟩+(a1+a3)∣1000⟩+(a2+a3)∣0100⟩+a3∣1100⟩+(a0+a2)∣0010⟩−(a0−a1+a2−a3)∣1010⟩+a2∣0110⟩−(a2−a3)∣1110⟩+(a0+a1)∣0001⟩−(a0+a1−a2−a3)∣0101⟩+a1∣1001⟩−(a1−a3)∣1101⟩+a0∣0011⟩−(a0−a1)∣1011⟩−(a0−a2)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)
以上の操作をまとめると、次のような状態遷移が成り立ちます。
ただし、3番目と4番目の量子ビットが両方とも 0、あるいは両方とも 1 である場合以外の状態については、その複素振幅を考慮しないため、ここではそれらの状態を省略します。
a0∣0000⟩+a1∣1000⟩+a2∣0100⟩+a3∣1100⟩qc31((a0+a1+a2+a3)∣0000⟩+(a1+a3)∣1000⟩+(a2+a3)∣0100⟩+a3∣1100⟩+a0∣0011⟩−(a0−a1)∣1011⟩−(a0−a2)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)
ここで n=2 の場合、問題文に示されている式は
3n1S⊆T⊆[n]∑aT∣S⟩n∣0⟩n+3n1T⊆S⊆[n]∑(−1)(∣S∣−∣T∣)aT∣S⟩n∣2n−1⟩n=31((a0+a1+a2+a3)∣0000⟩+(a1+a3)∣1000⟩+(a2+a3)∣0100⟩+a3∣1100⟩+a0∣0011⟩−(a0−a1)∣1011⟩−(a0−a2)∣0111⟩+(a0−a1−a2+a3)∣1111⟩)
であるので、(6) 式と (7) 式を比較すると、それらが一致していることが分かります。
以上のことから、ここで行なっている操作によって、目的の量子状態が正しく生成されていることを確認できます。
この操作を一般の n について行うことで、この問題を解くことができます。
参考
この問題の問題名にあるように、
3n1S⊆T⊆[n]∑aT∣S⟩n∣0⟩n
の各状態の複素振幅がゼータ変換に対応して、
3n1T⊆S⊆[n]∑(−1)(∣S∣−∣T∣)aT∣S⟩n∣2n−1⟩n
の各状態の複素振幅がメビウス変換に対応しています。
解答例
解答例は以下の通りです。
import math
from qiskit import QuantumCircuit
def solve(n: int) -> QuantumCircuit:
qc = QuantumCircuit(2 * n)
theta = 2 * math.atan(math.sqrt(2))
for i in range(n):
qc.ry(theta, i + n)
qc.ch(n + i, i)
qc.x(i)
qc.cx(i, n + i)
qc.x(i)
qc.cz(n + i, i)
return qc