B3: Right Action in Another Fourier Basis

実行時間制限:3 秒

メモリ制限:512 MiB

配点:600点

Writer:PSL

解説

前問とほとんど同じ方法で解くことができます。

E(m,k)E(m, k) を末尾の n1n - 1 量子ビットが 0n1\ket{0}_{n - 1} となる状態と、そうでない状態に分けて考えると見通しが良くなるので、以下のように分解します。

E(m,k)=12n+1F(m,k)+12nG(m,k)\begin{equation} E(m, k) = \frac{1}{\sqrt{2^{n + 1}}} F(m, k) + \frac{1}{\sqrt{2^n}} G(m, k) \end{equation}

ここで、

F(m,k)=0a<20b<2(1)am+bkab0n1\begin{equation} F(m, k) = \sum_{0 \leq a < 2} \sum_{0 \leq b < 2} (-1)^{am + bk} \ket{a} \ket{b} \ket{0}_{n-1} \end{equation} G(m,k)=1c<2n1(XmRckI1In1)(00+11)cn1\begin{equation} G(m, k) = \sum_{1 \leq c < 2^{n-1}} \left( X^m R^{ck} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \end{equation}

とします。

まず、ヒントの式を用いることによって、F(m,k)F(m', k')mright,kright,m,km_{\text{right}}, k_{\text{right}}, m, k で表します。

F(m,k)=0a<20b<2(1)am+bkab0n1=0a<20b<2(1)a(m+mright)+b((1)mkrightk+kright)ab0n1=0a<20b<2(1)a(m+mright)+b(k+kright)ab0n1=0a<20b<2(1)amright+bkright(1)am+bkab0n1\begin{align} F(m', k') &= \sum_{0 \leq a < 2} \sum_{0 \leq b < 2} (-1)^{am' + bk'} \ket{a} \ket{b} \ket{0}_{n-1} \\ &= \sum_{0 \leq a < 2} \sum_{0 \leq b < 2} (-1)^{a (m + m_{\text{right}}) + b ((-1)^m k_{\text{right}}k + k_{\text{right}})} \ket{a} \ket{b} \ket{0}_{n-1} \\ &= \sum_{0 \leq a < 2} \sum_{0 \leq b < 2} (-1)^{a (m + m_{\text{right}}) + b (k + k_{\text{right}})} \ket{a} \ket{b} \ket{0}_{n-1} \\ &= \sum_{0 \leq a < 2} \sum_{0 \leq b < 2} (-1)^{am_{\text{right}} + b k_{\text{right}}} (-1)^{am + bk} \ket{a} \ket{b} \ket{0}_{n-1} \end{align}

よって、末尾の n1n - 1 量子ビットが 00 のときに必要となる操作は以下の二つになります。

  • mright1 (mod 2)m_{\text{right}} \equiv 1 \ (\text{mod} \ 2) なら、a\ket{a}ZZ ゲートを作用させる。
  • kright1 (mod 2)k_{\text{right}} \equiv 1 \ (\text{mod} \ 2) なら、b\ket{b}ZZ ゲートを作用させる。

同様にして、ヒントの式を用いることによって、G(m,k)G(m', k')mright,kright,m,km_{\text{right}}, k_{\text{right}}, m, k で表します。

G(m,k)=1c<2n1(XmRckI1In1)(00+11)cn1=1c<2n1(Xm+mrightRc((1)mrightk+kright)I1In1)(00+11)cn1=1c<2n1(Xm+mrightR(1)mrightck+ckrightI1In1)(00+11)cn1=1c<2n1(XmRckXmrightRckrightI1In1)(00+11)cn1\begin{align} G(m', k') &= \sum_{1 \leq c < 2^{n-1}} \left( X^{m'} R^{ck'} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \\ &= \sum_{1 \leq c < 2^{n-1}} \left( X^{m + m_{\text{right}}} R^{c((-1)^{m_{\text{right}}} k + k_{\text{right}})} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \\ &= \sum_{1 \leq c < 2^{n-1}} \left( X^{m + m_{\text{right}}} R^{(-1)^{m_{\text{right}}} ck + ck_{\text{right}}} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \\ &= \sum_{1 \leq c < 2^{n-1}} \left( X^{m} R^{ck} X^{m_{\text{right}}} R^{ck_{\text{right}}} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \end{align}

さて、前問では XmleftX^{m_{\text{left}}} RckleftR^{c k_{\text{left}}} が左から作用されていましたが、本問では XmrightX^{m_{\text{right}}} RckrightR^{c k_{\text{right}}} が右から作用されています。 これが、この問題の核心となります。では、この XmrightX^{m_{\text{right}}} RckrightR^{c k_{\text{right}}} をどう扱えば良いでしょうか。

実は任意の行列 U,VU, V に対して、次の等式が成り立ちます。

(UVI1)(00+11)=(UVT)(00+11)\begin{equation} (UV \otimes I_{1}) (\ket{0}\ket{0} + \ket{1}\ket{1}) = (U \otimes V^{\text{T}}) (\ket{0}\ket{0} + \ket{1}\ket{1}) \end{equation}

このことから、X=XT,R=RTX = X^{\text{T}}, R = R^{\text{T}} という性質を用いることで、次の式変形が成り立ちます。

式 (11)=1c<2n1(XmRck(XmrightRckright)TIn1)(00+11)cn1=1c<2n1(I1(XmrightRckright)TIn1)(XmRckI1In1)(00+11)cn1=1c<2n1(I1RckrightXmrightIn1)(XmRckI1In1)(00+11)cn1\begin{align} \text{式 (11)} &= \sum_{1 \leq c < 2^{n-1}} \left( X^{m} R^{ck} \otimes \left( X^{m_{\text{right}}} R^{ck_{\text{right}}} \right)^\text{T} \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \\ &= \sum_{1 \leq c < 2^{n-1}} \left( I_1 \otimes \left( X^{m_{\text{right}}} R^{ck_{\text{right}}} \right)^\text{T} \otimes I_{n-1} \right) \left( X^{m} R^{ck} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \\ &= \sum_{1 \leq c < 2^{n-1}} \left( I_1 \otimes R^{ck_{\text{right}}} X^{m_{\text{right}}} \otimes I_{n-1} \right) \left( X^{m} R^{ck} \otimes I_1 \otimes I_{n-1} \right)(\ket{0} \ket{0} + \ket{1} \ket{1}) \ket{c}_{n-1} \\ \end{align}

そして、cc をビット毎に展開すると、RckrightXmrightR^{ck_{\text{right}}} X^{m_{\text{right}}} は以下のようになります。

RckrightXmright=Rc0krightRc1(2kright)... Rcn2(2n2kright)Xmright\begin{equation} R^{ck_{\text{right}}} X^{m_{\text{right}}} = R^{c_0 k_{\text{right}}} R^{c_1 (2 k_{\text{right}})} ... \ R^{c_{n-2} (2^{n-2} k_{\text{right}})} X^{m_{\text{right}}} \end{equation}

よって、末尾の n1n - 1 量子ビットに 11 が含まれるときに必要となる操作は以下の二つになります。

  • mright1 (mod 2)m_{\text{right}} \equiv 1 \ (\text{mod} \ 2) なら、b\ket{b}XX を作用させる。(これは、問題 A3の回路を利用して実装できます。)
  • 任意の j{0,1,,n2}j \in \lbrace0, 1, \dots, n-2\rbrace に対して cj=1c_{j} = 1なら、b\ket{b}R2jkrightR^{2^j k_{\text{right}}} を作用させる。(これは、回転ゲート RzRz を利用して実装できます。)

以上の操作を順に行うことで、目的の量子状態を得ることができます。

n=4,mright=1,kright=2n = 4, m_{\text{right}} = 1, k_{\text{right}} = 2 の場合の量子回路は次のように表されます。

回路の深さは O(n)O(n) です。

解答例

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

import math
 
from qiskit import QuantumCircuit, QuantumRegister
from qiskit.circuit.library import XGate, ZGate, RZGate
 
 
def A3(n: int) -> QuantumCircuit:
    m, k = QuantumRegister(1), QuantumRegister(n)
    qc = QuantumCircuit(m, k)
 
    qc.x(m[0])
 
    qc.x(k)
 
    qc.compose(XGate().control(len(k)), [*k, m[0]], inplace=True)
 
    qc.x(k)
 
    return qc
 
 
def solve(n: int, m_right: int, k_right: int) -> QuantumCircuit:
    a, b, c = QuantumRegister(1), QuantumRegister(1), QuantumRegister(n - 1)
    qc = QuantumCircuit(a, b, c)
 
    qc.x(c)
 
    if m_right:
        qc.compose(ZGate().control(len(c)), [*c, a[0]], inplace=True)
    if k_right % 2:
        qc.compose(ZGate().control(len(c)), [*c, b[0]], inplace=True)
 
    qc.x(c)
 
    if m_right:
        qc.compose(A3(n - 1), [b[0], *c], inplace=True)
 
    theta = 2 * math.pi / 2 ** (n - 1)
    for i in range(n - 1):
        angle = theta * k_right * (2 ** i)
        qc.compose(RZGate(angle).control(1),
                   [c[i], b[0]], inplace=True)
 
    return qc