量子コンピューティングのためのハードウェアは、あと数年で現実の使用事例が見られる段階にまで開発が進んでいる(Volkswagenリリース)。それにともない、当然のことながら量子コンピューターの力を最大限に活かせるプログラム方法の研究も着実に増えている。その分野の研究のひとつにSilq(シルク)がある。スイス連邦工科大学(ETH)チューリッヒ校の量子コンピューティング用高水準プログラミング言語だ。
ここで重視すべきは、「高水準プログラミング言語」であるという点だ。この言語の開発に携わる研究者たちによれば、現在、量子コンピューターのプログラマーたちは、まだ抽象度の低い低水準言語で必要以上に苦労しているという。
「このプロジェクトの歴史は、量子コンピューターの中核的な問題を解決したいというところから始まっています」とETHコンピューター科学准教授であるMartin Vechev(マーティン・ベシェフ)氏は私に話してくれた。「しかし量子コンピューティングの中核的問題を解決するためには、例えば量子プログラムの解析や推論をするには、それらの問題が記述されている言語が必要です。それは既存の言語です。私たちは量子コンピューティングのさまざまな問題を見てきましたが、基本的にはその言語を見て、問題がどのように記述されているかを確認するという作業が主体になります。しかしお察しのとおり、これは理想的とはいえず、最適な方法でありません」。
そこで彼らは、実際に使われている別の言語も調べてみることにした。Microsoft(マイクロソフト)のQ#や、IBMのQiskitなどのSDKだ。
「当初は、新しい言語を開発する必要性などまったく感じていませんでした」とベシェフ氏の博士課程大学院生であるBenjamin Bichsel(ベンジャミン・ビクセル)氏は話す。「そこをそもそものスタート地点として検討するなど、考えてもみませんでした。量子コンピューターで、もっと高度な問題を解決したいと思ったときに、よしそれじゃあ適当に言語をひとつ選んで、それでやろうというのが私たちの考え方でした。しかし気がついたのです。私たちが推論したいと関心を持つような高度なプロパティーには、既存の言語はまったく不適格でした」
今週のPLDI 2020で発表を予定しているSilqの論文を
共著した1人は、あまりにも面倒なので既存の言語は一切使わなかったとさえ話している。この論文の執筆には、ビクセル氏とベシェフ氏の他、Timon Gehr(ティモン・ゲール)氏とMaximilian Baader(マクシミリアン・バーダー)氏も参加している。
では、既存の言語のどこが悪いのだろうか?「それを理解するための入口として最適なのが、従来の言語には存在しなかった量子コンピューティングならではの基本的な難題、つまり『非計算』に注目することです」とベシェフ氏は話す。実際、非計算はSilqの中核的なアプローチであり、ネイティブに組み込まれている。非計算には古典対応があるものの、だからといってその概念が直感的にわかるというものではない。
「古典的な言語で『AまたはBまたはC』を計算させようとすると、先に『AまたはB』を計算してから、『(その結果)またはC』が計算されますが、その間に計算された一時変数は忘れ去られてしまいます」とビクセル氏。「これを量子で行うと、予期せぬ副作用が発生します【略】結論として、こうなると予測されたことが、ここでは起こりません。そのためなんとかこれに対処しなければならないのです。これが意味するものは、現在あるすべての量子言語では、本質的に抽象度が大変に低いところでの作業を強いられるということです。そこでは、すべての一時変数を考慮しなければなりません。基本的にこれが、高水準な思考を妨げているのです」。
つまり、整数を可算するなど比較的些細なことをしようと思っても、量子コンピューターでは、処理の過程で発生したあらゆる一時変数を考慮して、明示的に扱わなければならないということだ。
「量子コンピューティングでは、廃棄すべき一時変数などのガーベッジに常に対処しなければならないため、常に対応が強いられます。それが、これらの言語を使う上で大変な手間になるのです」とビクセル氏。現在の量子言語はその回避を試みているが、その方法はやや難解だ。それに対してSilqは、安全な自動非計算が最初から使えるようになっている。
ベシェフ氏はまた、低水準プログラムの記述ではエラーが発生しやすく、アルゴリズムが実際に何をしているのかを理解しづらいと話している。それに対してSilqの型チェッカーには、プログラマーが犯しやすい一般的なミスを低減してくれる機能がある。また研究チームは、古典的な言語の最新の技術(オーナーシップタイプやリニアタイプのシステム)に注目し、量子コンピューシングのコンテキストに実装しているが、これもSilqが初めてだ。
ここまで知れば、Silqで書かれたプログラムは、Q#やQuipperなどと比べてずっと短く、量子プリミティブの数もずっと少なくなる(Silqリリース)ことを研究チームが発見したと聞いても、ビックリはしないだろう。
しばらくの間、Silqはまだ研究プロジェクトの段階であり、既存のいずれの量子ハードウェアプラットフォームでも走らせる予定はない。だが彼らは、独自で量子エミュレーターを作成して前提の検証を行っている。「我々の場合、大変に高水準な言語のため、コンパイルは2段階処理で行うことを考えています。まずは高水準な目的を表現する。するとそれを受けてコンパイラーが使用されるアーキテクチャーを特定し、それに対してどのように最適化するかを判断します」とビクセル氏。
Silqの詳細を深く知りたいという方は、こちらで論文が読める。
画像クレジット:ALFRED PASIEKA / SCIENCE PHOTO LIBRARY / Getty Images
[原文へ]
(翻訳:金井哲夫)