IBM Quantum Experience http://www.research.ibm.com/quantum/ でとりあえず量子テレポーテーション的な例を試してみる。

量子テレポーテーションは、Aが持っているxというqubitを、Bに転送するために、
(1) もつれ状態にあるqubit(EPR対) a, b を生成し、aをAに、bをBに送る
(2) A は x と a をもつれさせて観測し、古典状態を2bit得て、それをBに送る
(3) Bは得られた2bitを使って b に変換を加えると、 b がもとの x になる
というもので、AからBには古典情報しか送っていないにも関わらず、量子情報が転送できるというのがポイント。

このプログラムでは x に相当するのは Q0 に一番左で Id を適用したもの。 ここでは単に |0〉でしかないので面白くないけれど、Idを他のゲートで置き換えて他の値にしても良い。

その右の処理のEPR対の生成。 使えるゲートが限られているので、Controlled-ZをCNOTと他のゲートで表現するのってどうやるんだっけ、と思い出すのに苦労した。

その右のCNOTとHからなるブロックがAの側での観察のつもりなのだけれど、この環境では観測は処理の最後でしかできないため、Q0とQ1の一番右にまで実際の観測は遅延させている。 (Deferred Measurement Principle があるので結果には影響しない)

その右のブロックが、古典2bit(ここではqubitを受け取ってることになっているけれど、実際は古典bitで問題ない)を受けとったBの側でのbへの処理の適用と、全体の観測。

シミュレーションしてみた結果がその次の画像で、結果の分布を見ると、000,010,100,110が等確率になっていることが分かる。 上位2qubitはQ0とQ1なのでランダムな結果になっているのに対し、再下位qubitのQ2はちゃんと元のxである|0〉が再現されて常に0になっていることが分かる。

その下の Quantum Score file というのがプログラムの表現だろうけれど、この形式のファイルをアップロードしたりとかはできないっぽい。 それができるなら、QML等の言語から Quantum Score file へのコンパイラを書いたりすることで楽をできるようになりそうだけれど。

これは Idealized Quantum Processor で試した結果で、 Real Quantum Processor の方でも試してみたいのだけれど、こっちはトポロジーに制約があり、このままだと動かせない。

参考: ヒビルテ [quantum]
http://msakai.jp/d/?category=quantum