FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

量子コンピュータ向けの Microsoft の新言語「Q#」を動かしてみる

量子コンピュータが話題ですね。量子アニーリングとか量子ゲートとか、全然わからないのですが、何となく文系の量子コンピューティングの本を読んで分かった気分になりました。

量子コンピュータが人工知能を加速する

量子コンピュータが人工知能を加速する

この本を手に取った一つの理由として、Microsoft の新言語 「Q#」を使ってみたかったから、というのがあります。 早速やってみよう。

Microsoft Visual Studio に Q#のSDKをインストール

以下のQiitaの記事の通りに進めると、簡単にインストールできる。おすすめ。

qiita.com

最近のGitHubは、Visual Studio向けにオープンすることもできるので非常に便利だ。

さっそく実行してみると、何となくうまく行った。成功だ。

f:id:msyksphinz:20180118234121p:plain

さて肝心の内部動作だが、やはりQiitaのページがめっちゃ分かりやすい。

[https://qiita.com/pandaman64/items/60dee22452684f6780ca:embed:cite]

qiita.com

ふーん、この ”teleportation" というサンプルプログラムは、ある量子ビットから別の量子ビットに転送を行うプログラムらしい。 量子コンピューティングはビットの転送だけでもこんなに必要なのか?

    operation Teleport(msg : Qubit, there : Qubit) : () {
        body {

            using (register = Qubit[1]) {
                // Ask for an auxillary qubit that we can use to prepare
                // for teleportation.
                let here = register[0];
            
                // Create some entanglement that we can use to send our message.
                H(here); 
                CNOT(here, there);
            
                // Move our message into the entangled pair.
                CNOT(msg, here); 
                H(msg);

                // Measure out the entanglement.
                if (M(msg) == One)  { Z(there); }
                if (M(here) == One) { X(there); }

                // Reset our "here" qubit before releasing it.
                Reset(here);
            }

なんで量子ビットの転送をするだけでこんなに必要なのかわからない。量子ビットの位相の概念(Z操作?)もさっぱりだ。 ちゃんとした資料を読んでしっかり勉強したほうが良さそうだ。

関連記事