量子プログラミング言語
(Quantum programming から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/09/22 00:14 UTC 版)
量子プログラミング言語(りょうしプログラミングげんご、英: Quantum programming language)とは量子アルゴリズムの表現を実現するプログラミング言語の総称である[1]。量子プログラミング言語は、プログラマーがプログラミングのツールとして使うことを意図したものではなく、研究者の量子コンピュータの振舞いの理解を促進し、研究者が量子アルゴリズムを形式的に論ずるツールとして用いることを意図したものである。
量子プログラミング言語は2つの主要なグループに分けることができる。すなわち、命令型量子プログラミング言語(imperative quantum programming languages)と関数型量子プログラミング言語(functional quantum programming languages)の2つである。
命令型量子プログラミング言語のうち、もっとも有名なものはQCLおよびLanQである[2][3]。
関数型量子プログラミング言語は開発が進められているところであり、例えばSelinger's QPL[4] や、AltenkirchとGrattageによって開発された、Haskellに似た言語であるQML[5][6]が挙げられる。
ラムダ計算を基にした高階量子プログラミング言語(Higher-order quantum programming languages)が、van Tonder[7]、SelingerとValiron[8]、ArrighiとDowek[9]によって提案されている。
サイモン・ゲイ(Simon Gay)のQuantum Programming Languages Survey[※ 1]は量子プログラミング言語の研究に関する情報や2007年時点の量子プログラミングに関する包括的な書物の目録を提供している。
命令型量子プログラミング言語
量子擬似コード
E. Knillによって考案された量子擬似コード(Quantum pseudocode)は最初に形作られた言語であり、量子アルゴリズムを説明するためのものだった。量子擬似コードは、導入後にQuantum Random Access Machine (QRAM)と呼ばれる量子マシンと強く結び付けられた。
Quantum computing language
QCL(Quantum Computation Language)[※ 2]は最初に実装された量子プログラミング言語である。Quantum Computation Languageの構文はC言語の構文に似たものであり、Quantum computing languageの「classical data type」はC言語のプリミティブデータ型と似ていた。ひとつの同じプログラムのなかで古典的(量子プログラミング以前の)コードと量子プログラミングのコードを組み合わせることが可能である。
Quantum computing languageで用意された量子データ型はqureg (quantum register)と呼ばれるものである。これはキュービット(qubit, quantum bit, 量子ビット)の配列として解釈することができる。
qureg x1[2]; // 2-qubit quantum register x1 qureg x2[2]; // 2-qubit quantum register x2 H(x1); // Hadamard operation on x1 H(x2[1]); // Hadamard operation on the first qubit of the register x2
Quantum computing languageのインタプリタはqlib simulation libraryを採用しているため、量子プログラムの実行中に量子マシンの内部状態を観察することが可能である。
qcl> dump : STATE: 4 / 32 qubits allocated, 28 / 32 qubits free 0.35355 |0> + 0.35355 |1> + 0.35355 |2> + 0.35355 |3> + 0.35355 |8> + 0.35355 |9> + 0.35355 |10> + 0.35355 |11>
dump operationはmeasurementとは異なることに注意。これはdump operationが量子マシンの状態に影響せず、simulatorを使うことによってのみ実現されるからである。
Quantum computing languageの標準ライブラリは量子アルゴリズムで用いられる量子オペレータを提供している。例えば次のようなものがある。
- controlled-not with many target qubits,
- en:Hadamard operation on many qubits,
- parse and controlled phase.
Quantum computing languageのもっとも重要な特徴はユーザー定義オペレータやユーザー定義関数をサポートしていることである。近代のプログラム言語と同様に、量子データを操作する新たなオペレーションを定義することができる。例えば次のようなものである。
operator diffuse (qureg q) { H(q); // Hadamard Transform Not(q); // Invert q CPhase(pi, q); // Rotate if q=1111.. !Not(q); // undo inversion !H(q); // undo Hadamard Transform }
これはグローバーのアルゴリズムで用いられるmean operatorの逆を定義するものである。これによって、より抽象的な水準でアルゴリズムを定義することが可能になり、関数ライブラリをプログラマーが用いることができるように拡張することができる。
構文
- データ型
- 量子(Quantum) - qureg, quvoid, quconst, quscratch, qucond
- 古典(Classical) - int, real, complex, boolean, string, vector, matrix, tensor
- 関数型
- qufunct - Pseudo-classic operators. Can only change the permutation of basic states.
- operator - General unitary operators. Can change the amplitude.
- procedure - Can call measure, print, and dump inside this function. This function is non-invertible.
- 組込み関数(Built-in functions)
- 量子(Quantum)
- qufunct - Fanout, Swap, Perm2, Perm4, Perm8, Not, CNot
- operator - Matrix2x2, Matrix4x4, Matrix8x8, Rot, Mix, H, CPhase, SqrtNot, X, Y, Z, S, T
- procedure - measure, dump, reset
- 古典(Classical)
- Arithmetic - sin, cos, tan, log, sqrt, ...
- Complex - Re, Im, conj
- 量子(Quantum)
Q言語
Q言語[※ 3]とは2番目に実装された命令型量子プログラミング言語である。Q言語はC++の拡張として実装された。Q言語は基礎クラスQopから派生したQHadamard、QFourier、QNot、QSwapのような基本的な量子オペレーションのためのクラスを提供する。新たなオペレータはC++のクラスメカニズムを用いて定義される。
量子メモリはQregクラスを用いて表現される。
Qreg x1; // 初期値0の1キュービット quantum register。 Qreg x2(2,0); // 初期値0の2キュービット quantum register。
qGCL
Quantum Guarded Command Language (qGCL)はP. Zulianiによって、彼の博士論文において定義された。これはエドガー・ダイクストラによって作られたGuarded Command Languageを基にしている。
qGCLは量子プログラムの言語仕様として評されている。
Q#
Q#は、2017年にマイクロソフトによって実装された。Quantum Development Kitに含まれており、Visual Studioを開発環境として利用できる。 [10]
関数型量子プログラミング言語
近年、関数プログラミングに基づく様々な量子プログラミング言語が提案されている。関数プログラミング言語はプログラムのreasoningと相性が良い。
QFCおよびQPL
QFCとQPLは互いに関連性の強い量子プログラミング言語であり、Peter Selingerによって定義された。QFCとQPLの違いは単に構文の違いによるものである。QFCはflow chart構文を用いているが、QPLはtextual構文を用いている。QFCとQPLは古典的な制御フローを用いているが、量子データと古典的データの双方を扱うことができる。Selingerはen:superoperatorの分野においてQFCとQPLに表示的意味(denotational semantic)を与えている。
QML
QML[※ 4]はAltenkirchとGrattageによって開発されたHaskelによく似た量子プログラミング言語である[5]。SelingerのQPLとは違い、QMLは量子情報を廃棄する(discarding)のではなく、primitive operationとして複製(duplication)をする。この文脈でいう「複製」とは カテゴリ
- 量子プログラミング言語のページへのリンク