マウスだけ！で作る超高密度符号化実験

# この記事について
[マウスだけ！で作る量子テレポーテーション](https://qiita.com/shnchr/items/841e8ec7e7b6b39c572c)で扱った量子テレポーテーションは、古典ビットを使って量子状態を転送しました。
この逆操作である、超高密度符号化実験（Superdense coding）について扱っていきたいと思います。
上記記事と同様に、

* 前半は、量子シミュレータをマウスで操作することで、量子回路を構成し
* 後半は、数式を用いて超高密度符号化実験の操作を追っていきます

一応、前半のマウス操作だけで理解できる構成にした(つもり)ですが、興味が湧いた方は、
後半の数式も参照頂ければと思います。

なお、他の量子コンピュータ関係の他の記事は、下記で紹介しています。

https://qiita.com/shnchr/items/41fa7fd1284d74007a7c


また、実際にAmazon Braketを利用し動きを見たい方は、下記を参照ください。

* https://qiita.com/doiken_/items/112f628e2fd9ce07c7a2

```math
\newcommand{\bra}[1]{\left\langle #1 \right|}
\newcommand{\ket}[1]{\left| #1 \right\rangle}
\newcommand{\bracket}[2]{\left\langle #1 \middle| #2 \right\rangle}
\newcommand{\tate}[2]{\begin{bmatrix} #1 \\ #2 \end{bmatrix}}
\newcommand{\yoko}[2]{\begin{bmatrix} #1 & #2 \end{bmatrix}}
\newcommand{\mtrx}[4]{\begin{bmatrix} #1 & #2 \\ #3 & #4 \end{bmatrix}}
```

# 量子テレポーテーションとの比較
超高密度符号化実験と量子テレポーテーションを下記に比較します。
下記のように、「送信したいもの」と「利用する道具」が逆転していることがわかります。

| |送信したいもの|利用する道具|
|:--:|:--:|:--:|
|量子テレポーテーション|１量子状態|古典２ビット|
|超高密度符号化実験|古典２ビット|１量子状態|

# 超高密度符号化実験の回路
非常にシンプルです。下記のリンクをクリックすることで、Quirkで回路を開くことができます。

* [Quirkで、超高密度符号化実験を開く](https://algassert.com/quirk#circuit={%22cols%22:[[%22H%22],[%22%E2%80%A2%22,%22X%22],[%22X%22],[%22%E2%80%A2%22,%22X%22],[%22H%22],[%22Measure%22,%22Measure%22]]})

<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/831aebce-a45f-4278-2eac-40a02204be5c.png>

では、回路を詳細に見ていきましょう。

|#|回路|説明|
|:-:|:-:|:--|
|1|<img width=100 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/171a0e78-d46f-6bc7-78dd-f70fca0dd08d.png>|[量子テレポーテーション](https://qiita.com/shnchr/items/841e8ec7e7b6b39c572c#%E7%AC%AC3%E8%80%85%E3%81%8C%E3%82%82%E3%81%A4%E3%82%8C%E3%81%82%E3%81%84%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)の記事で見たとおり、2量子のもつれあい（相互作用）を発生するBell回路で、H＋CNOTで構成されます。|
|2|<img width=50 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/85cbbec0-4c31-244b-61c9-fc4f2fffc030.png>|送信者が、操作することができる量子ゲートです。<br/>図はXゲート（NOT）ですが、量子テレポーテーションと同様に送信したいメッセージ（古典２ビット）に対応して、利用するゲートを選択します。<br>ゲートをどう選択するか？は後述します|
|3|<img width=100 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/33ed8bde-66e1-27e7-7599-9806033d147b.png>|[量子テレポーテーション](https://qiita.com/shnchr/items/841e8ec7e7b6b39c572c#%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E9%87%8F%E5%AD%90-%E3%81%A8-%E3%82%82%E3%81%A4%E3%82%8C%E3%81%82%E3%81%84%E3%81%AE%E4%B8%80%E6%96%B9-%E3%82%92%E3%81%82%E3%82%8F%E3%81%9B%E3%81%A6%E6%B8%AC%E5%AE%9A)の記事で見たとおり、2量子のもつれあい（相互作用）を解消し、Bell測定を行うための逆Bell回路です。Bell回路と逆の構造をしています。|

# 送信者のゲートの選択
送信者は、送信したいメッセージの古典２ビット(00/01/10/11)に応じ、ゲートを選択し適用することで、量子１ビットに対する操作で、古典２ビットのメッセージを送信します。
ゲートの選択は下記の通りです。

|#|送信<br/>MSG|適用<br/>ゲート|結果|
|:-:|:-:|:-:|:-:|
|1|$00$|※なし|<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/c3abc50b-f0ed-0ab7-3628-6d619a0b0de7.png>|
|2|$01$|$X$|<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/61607eb3-d073-d06d-41bc-4a725b1efb36.png>|
|3|$10$|$Z$|<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/08e2f8b1-04ad-0b07-b247-a1e89936b0e2.png>|
|4|$11$|$XZ$|<img width=400 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/8937e7ba-ca8e-8c34-9eb7-7885cc8b7574.png>|

実際に、Quirk上で送信者が操作するゲートを入れ替えていただけるとわかりやすいと思います

<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/f1cd22fe-377c-330b-6ffd-583b400a1ae7.gif>

# ちょっとおしゃれにする（余談）
送信に利用するゲート選択を、時々刻々と変化させるようにするとこんな感じになります。
送信者の送信メッセージが、受信者に同じビットパターン（00,01,10,11）で伝わるのがわかりやすいかと思います。

* [ちょっとおしゃれにした量子回路を開く@Quirk](https://algassert.com/quirk#circuit={%22cols%22:[[%22Counting2%22],[%22Measure%22,%22Measure%22],[%22Chance2%22,1,%22H%22],[1,1,%22%E2%80%A2%22,%22X%22],[1,1,%22%E2%80%A6%22],[1,%22%E2%80%A2%22,%22X%22],[%22%E2%80%A2%22,1,%22Z%22],[1,1,%22%E2%80%A6%22],[1,1,%22%E2%80%A2%22,%22X%22],[1,1,%22H%22],[1,1,%22Measure%22,%22Measure%22],[1,1,%22Chance2%22]]})

<img width=800 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/fb7f1021-2efd-fb75-5f75-72b26cae2caf.gif>


# ここまでのまとめ
[量子テレポーテーション](https://qiita.com/shnchr/items/841e8ec7e7b6b39c572c)の逆操作である、超高密度符号化実験（Superdense coding）について扱いました。このアルゴリズム（操作）が何ができる？というわけではないのですが、両者ともに共通して言えるのは、

* Bell回路にて発生させた量子のもつれあいが重要な要素である
* もつれあいを利用することで「量子１ビット→古典２ビット、古典２ビット→量子１ビット」を行き来することができる。

という面白い特性を持ちます。
実用的なアルゴリズムをこれから勉強する際に、量子の「重ね合わせ」や「もつれあい」に慣れ親しむ意味でも、これらに触れることは良い経験であると考えています。 

# 最後に数式で確認
上記で概要は把握頂けたかと思いますが一応最後に、数式で確認していきたいと思います
なお、量子ゲートの$braket$での演算に慣れていない方は先に、下記を参照ください。

* [パウリゲート（XZY）を細かく見てみる](https://qiita.com/shnchr/items/d0702c441cec472096f4)
* [ブロッホ球と各種ゲートの関係](https://qiita.com/shnchr/items/15a42eaf971932230a50)







## 00）ゲート操作無し
<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/c3abc50b-f0ed-0ab7-3628-6d619a0b0de7.png>

まずは、Bell回路で「もつれあい」を作ります

```math
\displaylines{
\ket{00} 
\xrightarrow[]{H_{1}}
\frac{1}{\sqrt{2}}(\ket{0}+\ket{1}) \otimes\ket{0} 
\\
=\frac{1}{\sqrt{2}}(\ket{00}+\ket{10})
\ 
\xrightarrow[]{CX_{12}}
\ 
\frac{1}{\sqrt{2}}(\ket{00}+\ket{1\color{redk}{1}})
}
```

そしてゲート適用をせずに、逆Bell回路に掛けます


```math
\displaylines{
\frac{1}{\sqrt{2}}(\ket{00}+\ket{11}
\xrightarrow[]{CX_{12}}
\frac{1}{\sqrt{2}}(\ket{00}+\ket{1\color{red}{0}})
\\
\xrightarrow[]{H_{1}}
\frac{1}{\sqrt{2}}\left(\frac{1}{\sqrt{2}}(\ket{0}+\ket{1})\otimes\ket{0}+\frac{1}{\sqrt{2}}(\ket{0}-\ket{1})\otimes\ket{0}\right)
\\
=\frac{1}{2}\left(\color{blue}{\ket{00} + \ket{10} }\color{blue}{+ \ket{00}} \color{red}{- \ket{10}}\right)
}
```

ここで、赤と青の項に注目すると、

* $\ket{00}$は両方とも$\color{blue}{+}$であり、相互に強め合う関係
* $\ket{10}$は一方が$\color{blue}{+}$、一方が$\color{red}{-}$であり、弱め合う関係

波の干渉を思い出していただくとわかるのですが、波が強めあい、弱め合う、干渉により波動の状態が収縮します。

そして、

```math
\frac{1}{2}\left(\color{blue}{\ket{00} + \ket{10} }\color{blue}{+ \ket{00}} \color{red}{- \ket{10}}\right) = \frac{1}{2}(2 \times \ket{00}) = \ket{00}
```

となります。$\ket{00} = \ket{0} \otimes \ket{0}$であり、係数は$1^2=1$ということで、両ビットとも100%で0が観測できます。つまり、受信者は古典2ビット(00)を得ます。

では、残りも見ていきましょう。


## 01）Xゲート適用
<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/61607eb3-d073-d06d-41bc-4a725b1efb36.png>

Bell回路でもつれあいを作るところまでは一緒で、${X_1}$ゲートを適用します。

```math
\ket{00} 
\xrightarrow[]{H_{1} CX_{12}}
\frac{1}{\sqrt{2}}(\ket{00}+\ket{11})
\xrightarrow[]{X_1}
\frac{1}{\sqrt{2}}(\ket{\color{red}{1}0}+\ket{\color{red}{0}1})
```

これの状態に逆Bell回路を適用すると

```math
\displaylines{
\frac{1}{\sqrt{2}}(\ket{10}+\ket{01})
\xrightarrow[]{CX_{12}}
\frac{1}{\sqrt{2}}(\ket{1\color{red}{1}}+\ket{01})
\\
\xrightarrow[]{H_{1}}
\frac{1}{\sqrt{2}}\frac{1}{\sqrt{2}}(\ket{01}-\ket{11}+\ket{01}+\ket{11})
\\
=\frac{1}{\sqrt{2}}(2 \times \ket{01}) = \ket{01}
}
```

上述と同様に、干渉による強めあい、弱めあいで、$\ket{01}$が残ります

## 10）Zゲート適用
<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/08e2f8b1-04ad-0b07-b247-a1e89936b0e2.png>

Bell回路でもつれあいを作るところまでは一緒で、${Z_1}$ゲートを適用します。

```math
\ket{00} 
\xrightarrow[]{H_{1} CX_{12}}
\frac{1}{\sqrt{2}}(\ket{00}+\ket{11})
\xrightarrow[]{Z_1}
\frac{1}{\sqrt{2}}(\ket{00}\color{red}{-}\ket{\color{red}{1}1})
```

これの状態に逆Bell回路を適用すると

```math
\displaylines{
\frac{1}{\sqrt{2}}(\ket{00}-\ket{11})
\xrightarrow[]{CX_{12}}
\frac{1}{\sqrt{2}}(\ket{00}-\ket{1\color{red}{0}})
\\
\xrightarrow[]{H_{1}}
\frac{1}{\sqrt{2}}\frac{1}{\sqrt{2}}(\ket{00}+\ket{10}-\ket{00}+\ket{10})
\\
=\frac{1}{\sqrt{2}}(2 \times \ket{10}) = \ket{10}
}
```

同様に波動の干渉で、$\ket{10}$が残ります。


## 11）XZゲート適用

<img width=600 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183826/8937e7ba-ca8e-8c34-9eb7-7885cc8b7574.png>

最後です。Bell回路でもつれあいを作るところまでは一緒で、$X_1Z_1$ゲートを適用します。

```math
\displaylines{
\ket{00} 
\xrightarrow[]{H_{1} CX_{12}}
\frac{1}{\sqrt{2}}(\ket{00}+\ket{11})
\\
\xrightarrow[]{X_1}
\frac{1}{\sqrt{2}}(\ket{\color{red}{1}0}+\ket{\color{red}{0}1})
\xrightarrow[]{Z_1}
\frac{1}{\sqrt{2}}(\color{red}{-}\ket{\color{red}{1}0}+\ket{01}) 
\\
=\frac{1}{\sqrt{2}}(\ket{01}-\ket{10})
}
```

これの状態に逆Bell回路を適用すると

```math
\displaylines{
\frac{1}{\sqrt{2}}(\ket{01}-\ket{10})
\xrightarrow[]{CX_{12}}
\frac{1}{\sqrt{2}}(\ket{01}-\ket{1\color{red}{1}})
\\
\xrightarrow[]{H_{1}}
\frac{1}{\sqrt{2}}\frac{1}{\sqrt{2}}(\ket{01}+\ket{11}-\ket{01}+\ket{11})
\\
=\frac{1}{\sqrt{2}}(2 \times \ket{11}) = \ket{11}
}
```

同様に波動の干渉で、$\ket{11}$が残ります。

# まとめ
数式の方は若干冗長だったかもしれませんが、、
このように$braket$形式で数式を追うことで、逆Bell回路（Bell測定）により、
**もつれ合ったBell状態から、基底状態に波動が収縮する状況**が、
数式（数理モデル）上でも読み取れる点が、興味深いと考えます。
ちょっと長めの記事となり恐縮です。

最後に、本稿でイメージを掴んで頂き、実際の量子デバイスやシミュレータで動きを確認してみたい方は、ぜひ、[AmazonBraketで学ぶ量子コンピュータ⑤](https://qiita.com/doiken_/items/112f628e2fd9ce07c7a2)を参照ください。