GMOアドマーケティング(株)のK.Aです。
前回までのおさらい
Visual Studio communityをダウンロードしインストール&セットアップ
次に無料公開されたQuantum Development Kitをダウンロード
Gitリポジトリからローカルリポジトリにサンプルコードをコピー
サンプルコードの動作確認
詳しい内容は、下記にリンクされている記事を参照して下さい。
https://techblog.gmo-ap.jp/2018/01/11/%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%8B%E3%82%89%E5%A7%8B%E3%82%81%E3%82%8B%E7%84%A1%E5%84%9F%E3%81%AE%E9%87%8F%E5%AD%90%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3/
では、今回はサンプルコードを元に、その内容を検証したい。
サンプルコードを見る
ダウンロードしたサンプルでは、Q#(TeleportationSample.qs)で記述した量子プログラムをシミュレーションし、量子ビットにテレポートするようになっている。
まずはQ#(TeleportationSample.qs)を見てみることにする。
TeleportationSample.qs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
namespace Microsoft.Quantum.Examples.Teleportation { open Microsoft.Quantum.Primitive; open Microsoft.Quantum.Canon; 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); } } } operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { // Ask for some qubits that we can use to teleport. let msg = register[0]; let there = register[1]; // Encode the message we want to send. if (message) { X(msg); } // Use the operation we defined above. Teleport(msg, there); // Check what message was sent. if (M(there) == One) { set measurement = true; } // Reset all of the qubits that we used before releasing // them. ResetAll(register); } return measurement; } } } |
次回予告
ロジック周りを記述したC#(Program.cs)を見て動作を検証してみる。