Quipper
- Quipperとは
- An introduction to Quantum Programming in Quipperを読んでみる
- Quipperはハスケルを下敷きに作られている
- QuipperはExtended Circuit Modelを量子計算の基礎原理として使っている
- Circuit Modelとは3つの実行フェーズからなり、そのほかに Circuit runtimeという測定のフェーズがある(らしい)
- 実行フェーズ
- Compile time
- Circuit generation time
- Circuit execution time
- Circuit runtime
- 実行フェーズ
- Circuit Modelの実装にあたってQuipperでは次のことを区別する
- Circuit generation timeにて知られている入力値はparametersと呼び
- Circuit execution timeにて知られている入力値はinputsと呼ぶ
- 2つの入力値を区別するためにQuipperではdata typesを定義する
- bits と称するデータタイプの一群 と それに対応する qubits と称するデータタイプの一群とである
- 測定はCircuit runtimeにのみ可能で、bit 系統で得られる
- どうやら、Quipperの量子計算は、既知確定入力値と観察確定出力値を扱い、その途中に確定しない状態(おそらくは確率密度分布が指定されたデータ型)を保有させておく、という仕組みを使うのだろう
- いくつかの例が挙げられており、その中でQuipperによる量子プログラミングの勘所のような表現が出てくるようなので、それを拾ってみる
- qubitは一度コード内で使われたら、もう、それは同じものではないので、違うvariableを与えることになる
- Hadmardゲートのように、ある特定の量子の状態から、「どちらもあり」な状態への変換関数を持つ
- ひとたび、量子計算を定義して、最終のデータタイプがqubitになっていれば(モナド囲みしてあるもの)、それをとって(副作用的な)何かを取り出すことができる
- 量子絡み合いを定義できる
- 量子絡み合いは量子のペアだが、ハスケルが持つ、タプル構造、リスト構造によって(絡みに絡んだ)多数の量子の状態が表現できる
- 観測ができる(measure)。観測すると絡み合っている量子たちが一斉に観測される
- ハスケルベースなので、量子リストに作用して、量子計算結果のリストを返す関数も書ける
- また、量子計算の仕組みはCircuitとして作られるが、関数型プログラミングなので、このCircuitを対象とする、より高階の関数も作れる