Codeforces Microsoft Q# Coding Contest - Summer 2018 - Warmup: A. Generate plus state or minus state
注意
これはこの解説のための自分用の補助資料で、理解した気になるのに必要な知識をメモしておくものです。
量子コン、とりあえずA問題だけ記事出しました(ウォームアップコンテストは解法を共有してもよいコンテストであり、かつA,D,Gの3問についてはすでに公式から解説が出ているため)https://t.co/efqGgkddZu
— 竹雄 (@takeo1116) 2018年7月2日
なお通すだけなら雰囲気で通せると思います。実際ぐぐりながらでDまでは通せた。
Q# 環境構築
難しい。私は諦めました。
構文はC系統なので qs-language-quick-reference.pdf を見ながら雰囲気でなんとかなる。 複雑な例としては公式のrepoのsamplesを。 syntax checkはonline compiler https://tio.run/#qs-coreでやればよいが、所与の形式だとentry pointの問題で動かない。
予備知識
\(\def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}\) qubitについて。 単一の独立したqubitは次のふたつの基底状態 $\ket{0}, \ket{1}$ の重ね合わせ$\alpha \ket{0} + \beta \ket{0}$ (ただし $\alpha^2 + \beta^2 = 1$)で表される。 特に基底状態を \(\ket{0} = \begin{pmatrix} 1 \\ 0 \end{pmatrix}, \ket{1} = \begin{pmatrix} 0 \\ 1 \end{pmatrix}\) のように書いてできるような$\mathbb{C}$上の縦ベクトルとして見ることができる。
この$\ket{\phi}$はket ベクトルと呼ばれる。 bra ベクトル $\bra{\psi}$もある。 それぞれ縦ベクトルと横ベクトルに対応するので \(\bra{0} = \begin{pmatrix} 1 & 0 \end{pmatrix}, \bra{1} = \begin{pmatrix} 0 & 1 \end{pmatrix}\) と書ける。なお(ベクトルとして)基底なので$i, j \in \{ 0, 1 \}$に対し$\bra{i} \cdot \ket{j} = 1 \iff i = j$が確認できる。 一般には関係$\ket{\psi}^{\dagger} = \bra{\psi}$ (ただし$\dagger$は随伴行列、つまり各点複素共役して転置) が成り立つ。 なので$\braket{\psi}{\phi} = \bra{\psi} \cdot \ket{\phi}$は内積$\beta^{\top}\alpha$と同じことを書いている。
同様にHadamard gate $H$などの種々のgatesは行列として見ることができる。