イントロダクション

はじめに

実践による量子コンピュータプログラミング

1980 年代初頭に量子コンピュータのアイディアは生まれましたJohn Preskill, Quantum computing 40 years later (2021) 。 そのきっかけの一つとなった、かの大物理学者ファインマンの「自然をシミュレーションしたければ、量子力学の原理でコンピュータを作らなくてはならない」という言葉はあまりにも有名です。

量子力学の原理でコンピュータを作るとはどういうことでしょうか? 量子コンピュータと従来のコンピュータの大きな違いは、情報の単位であるビットの実装方式にあります。 ノートパソコンやスマホから最新のゲーム機、世界最速のスパコンといった従来のコンピュータの内部構造は、古典物理学、より正確には電磁気学で説明できます。 これは、ビットが電磁気学に基いた基本素子である、コンデンサとして実装されているからです。 一方で量子コンピュータは原子や電子、光子といった量子をビットとして使います。

量子をビットとして使う目的は、計算の高速化です。 量子の不思議な振舞いを利用することで、ミクロな "自然" のシミュレーション (原子や分子といった量子系のシミュレーション) に必要な膨大な計算を高速化できるのでは? というのが、ファインマンのもともとのアイデアです。

このアイデアをきっかけに、従来のさまざまな計算を高速化できる、量子コンピュータ向けのアルゴリズム探しが始まりました。 そして 1990 年代には、量子探索開発者であるコンピュータ科学者、ロブ・グローバーの名前にちなんで、グローバーのアルゴリズムとしても知られています。Lov K. Grover, A fast quantum mechanical algorithm for database search (1996)と量子因数分解開発者である数学者、ピーター・ショアの名前にちなんで、ショアのアルゴリズムとしても知られています。Peter W. Shor, Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer (1995)という最も有望で代表的な量子コンピュータアルゴリズムの 2 つが開発されました。

量子探索の威力を理解するために、昔ながらの電話帳で特定の電話番号に一致する名前を検索することを考えてみましょう。電話帳の登録件数が 1 万件だとすると、平均してその半分の 5,000 件には目を通さなければ目的の名前にはたどり着きません。 一方、量子探索アルゴリズムでは、たった 100 回の検索で十分です。 もし量子コンピュータが量子探索で 5,000 回の推測をしたならば、実に 2,500 万件の電話帳を検索できます。 このように、量子探索アルゴリズムは巨大なリストの中から特定のアイテムを効率的に検索できます。

量子因数分解アルゴリズムは、セキュリティに対して脅威 (株価の下落を含む) をもたらすものです。というのも、インターネット・セキュリティの最も一般的な方式である公開鍵暗号は、特定の数学問題(長さ数百桁の数の因数分解など)を事実上解くことが不可能であることに依存しているためです。 量子アルゴリズムは、最もよく知られた古典的なアルゴリズムよりも指数関数的に速くこのタスクを実行できるため、現代の暗号のいくつかの形式は、暗号解読者を阻止できません。

このように 1990 年代から有望なアルゴリズムがあるにもかかわらず、量子コンピュータ自体については、まだまだ誤解されて伝わっているのが現状です。 これは、量子アルゴリズムの並外れた強力さと、「量子」という言葉が持つ神秘性によるものかもしれません。 現在の量子コンピュータはまだまだ未熟で不安定であるにもかかわらず、スパコンを凌駕する実用的な量子コンピュータがすでに稼動しているかのように誤解させるネットニュースも少なくありません。 極端な例としては、「量子重ね合わせ」「量子もつれ」といったキャッチーなキーワードを濫用した、量子とは無関係な怪しいビジネスすら存在します。

量子コンピュータの正しい知識が広まらない原因の 1 つは、その敷居が高すぎることです。 クラウド越しに本物の量子コンピュータを使える現在でさえ、量子コンピュータの初級コンテンツは不足しています。 好奇心旺盛なプログラマが量子コンピュータを勉強しようと、うっかり専門の教科書や大学の講義スライドに手を出してしまい、そこにぎっしり詰まった高度な物理学や数学を前に挫折してしまった例も多いはずです。

Python や JavaScript などのプログラミング解説書には、高度な数式はひとつも出てきません。 ならば、量子コンピュータプログラミングにも、もっとそんな従来的スタイルのガイドブックやチュートリアルがあってもいいのではないのでしょうか?

実際に、量子コンピュータプログラミングを学ぶのに複雑な数学を理解する必要はありません。 今までやってきたプログラミングと同様に、量子コンピュータの命令やアルゴリズムがどのように動作するかの感覚をつかむだけでよいのです。 基本的な命令とアルゴリズムを理解したら、必要に応じて、次のレベルに進むための数学を少しずつ学んでいきましょう。 このことを念頭に置いて、本チュートリアルでは、必要な場合以外は数学的な専門用語を避け、実用的な観点から量子コンピュータプログラミングを紹介します。

このチュートリアルは、量子コンピュータプログラミングの実践的入門です。特長として、我々が開発するオープンソースな量子コンピュータシミューレータ Qni (キューニ) Qni は量子プログラミング環境を提供する Web サービスです。https://qniapp.net で誰でも無料で利用できます。 をそこかしこで使っています。 以下のようにチュートリアル中に埋め込まれた Qni で、学んだことをすぐ実験できるようになっています。

Qni を使えば、シミュレータ上であれこれ実験を重ねることで、量子コンピュータプログラミングの直感的感覚を養うことができます。 操作結果はリアルタイムに表示されるので、実機を使った演習よりもずっと効率的であり、教育的でもあります。 より高度な量子アルゴリズムや量子情報といった専門分野を勉強する際にも、Qni は電卓がわりとしてちょっとした計算にも役立ちます。

チュートリアルのもう一つの特長は、チュートリアル中に確認クイズAndy Matuschak 氏によるオープンソースの無料学習ツール Orbit を利用しています。クイズ機能を利用する場合は Orbit の利用規約及びプライバシー・ポリシーを確認してください。が埋め込まれていることです。 クイズでは、それぞれの記事のポイントを 1 問 1 答形式で出題します。 一度解いたクイズは、忘却曲線に沿った適切なタイミング (数時間から数日、数ヶ月、時には数年後!) で復習クイズとして再び出題されます。 これによって、読者は比較的少ない労力で学んだことを深く内面化できる仕組みになっています。 もちろん、クイズに答えずにこのチュートリアルを読み進めることもできますが、ぜひ試してみてください。

このチュートリアルは Qni と同様に GitHub でオープンに開発GitHub の Qni プロジェクトページ: https://github.com/qniapp/しており、読者からのフィードバックを歓迎しています。

  • 質問する ─ 読んでも分からなかったことは、お気軽に GitHub まで
  • 問題を報告する ─ typo やレイアウト崩れ等の問題はお知らせください
  • 著者に加わる ─ 新しい記事の追加などは Pull Request をお願いします

本チュートリアルでは、読者からのフィードバックを元にアップデートを続けていくことで、最新のトピックにも対応しつつ、初心者にも優しい内容を充実させていく予定です。