環境構築から始める無償の量子コンピューティング@その2

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~3行目:こちらはMS製品でお馴染みのネームスペースの定義

operation Teleport

  • 5行目:関数の定義。operationがいわゆる function メソッドに相当し、Teleport が関数名となる。尚、Q#のoperationは同名の.NETクラスにコンパイルされ、RUNメソッドにシミュレータと引数を渡すことで実行できる。
  • 6行目:bodyに関数の内容を記述する。
  • 8行目:1キュービットの作成。この場合register[0]が生成される。
  • 11行目:Q#の特徴のひとつ、let で不変変数を定義。逆に可変変数を定義する場合はmutableを使用する。ここでは、先ほど生成した1キュービットを不変変数hereに割り当てる。
  • 14,15行目:ここからが本番。1キュービット上における量子現象でHゲート(重ね合わせ(superposition))。H(here)、CNOT(here、 there )と量子ビットに量子ゲートを作用させる。
  • 18,19行目:CNOT(msg、here)、 H(msg)と量子ビットに量子ゲートを作用させる。
  • 22行目:ここは普通に条件分岐。M(msg)でmsgの値を測定し、値がOne(1)だったら引数thereに対しZゲートを作用させ位相反転(-1をかける)させる。
  • 23行目:こちらも上に同じく条件分岐。不変変数hereを測定し、値がOneだったら引数thereに対しXゲートを作用させ値を反転させる。
  • 26行目:不変変数hereをリセット。ここまでがTeleport が関数となる。

operation TeleportClassicalMessage

  • 34行目:可変変数measurement を FALSEで初期化。
  • 36行目:2キュービットの作成。この場合register[0]とregister[1]が生成される。
  • 38,39行目:let で不変変数を定義
  • 42行目:条件分岐。引数messageの値がTRUEだったら不変変数msgに対してXゲートを作用させ値を反転させる。
  • 45行目:上記で作成した Teleport 関数の呼び出し、引数は上で初期化した不変変数msg,thereを指定
  • 48行目:不変変数thereを測定し、値がOneだったら変数measurement に対しsetでTRUEを代入。
  • 52行目:キュービットregisterを全てリセット。
  • 55行目:呼び出し元に、measurement (TRUE/FALSE)を返す。

次回予告

ロジック周りを記述したC#(Program.cs)を見て動作を検証してみる。