はじめに

実践で学ぶ量子コンピュータプログラミング

複雑な数学なしで、量子コンピュータプログラミングを学びましょう。
Qni で実験しながら動きを確かめ、クイズで学んだことを定着させます。

量子コンピュータとは

1980 年代初頭に量子コンピュータのアイデアは生まれましたJohn Preskill, Quantum computing 40 years later (2021) 。そのきっかけの一つとなった、かの大物理学者ファインマンの「自然は古典的じゃないんだ、ちくしょう。自然をシミュレーションしたいなら、量子力学的に作ったほうがいい。」という言葉Richard P. Feynman, Simulating Physics with Computers, International Journal of Theoretical Physics 21, 467–488 (1982), p. 486。はあまりにも有名です。

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

従来のコンピュータと量子コンピュータのビットの比較図。左は従来のコンピュータのビットの実装例であるコンデンサで、電荷なしが 0、電荷ありが 1 を表す。右は量子コンピュータのビットである電子スピンで、磁場 B の中でスピンが上向きなら |0⟩、下向きなら |1⟩、そのどちらでもない向きなら重ね合わせ α|0⟩ + β|1⟩ を表す。

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

このアイデアをきっかけに、従来のさまざまな計算を高速化できる、量子コンピュータ向けのアルゴリズム探しが始まりました。そして 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 つが開発されました。

量子探索の威力を理解するために、100 万枚のカードの中から 1 枚を探すことを考えてみましょう。カードにはそれぞれ絵文字が書かれていて、その中から見つけたい絵文字のカードを探します。ふつうの探し方では 1 枚ずつ順に見ていくので、最悪の場合は 100 万枚すべてを見なければなりません。一方、量子探索アルゴリズムなら、1,000 回ほどの検索で見つかります。このように、量子探索アルゴリズムは巨大なリストの中から特定のアイテムを効率的に検索できます。

線形探索と量子探索の比較図。どちらも絵文字が書かれた 100 万枚のカードから、見つけたい星のカードを探す。左の線形探索では、カードを 1 列に並べ、1 枚目から 1 枚ずつ順に見る。星のカードは最後の 100 万枚目にあり、最悪 100 万枚すべてを見る。右の量子探索では、100 万枚のカードを 1 つの山に重ね、1,000 回ほどの検索で星のカードが山の中からひとりでに浮かび上がる。

量子因数分解アルゴリズムは、セキュリティに対して脅威をもたらすものです。というのも、インターネット・セキュリティの最も一般的な方式である公開鍵暗号は、特定の数学問題 (長さ数百桁の数の因数分解など) を事実上解くことが不可能であることに依存しているためです。量子アルゴリズムは、最もよく知られた古典的なアルゴリズムよりも桁違いに速くこのタスクを実行できるため、十分な規模の誤り耐性量子コンピュータが実現すれば、現在広く使われている公開鍵暗号は破られてしまいます。

量子因数分解の説明図。左は公開鍵暗号が頼る数百桁の数の因数分解で、300 桁の数を、まだ分からない 2 つの数 ? × ? に分ける。右は因数分解にかかる計算時間のグラフで、横軸は数の桁数、縦軸は計算時間。最もよく知られた古典的なアルゴリズムの曲線は数百桁に届く前に急に立ち上がり、事実上解けない。量子アルゴリズムの曲線は数百桁でも低いままである。

なぜ難しいと思われているか

有望なアルゴリズムがある一方、現在の量子コンピュータはまだ未熟で不安定です。すでに実用でスパコンを凌駕しているかのような報道や、「量子」の言葉を使った無関係なビジネスもあり、誤解が生まれています。

学び始める敷居の高さも課題です。クラウド越しに実機を使える現在でも初級コンテンツは少なく、専門の教科書や講義資料の高度な物理学・数学につまずくことがあります。

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

このチュートリアルの特長

複雑な数学なしで学べる

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

Qni で実験できる

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

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

クイズで定着する

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

クイズ

Show Answer で答えを表示し、思い出せたら Remembered、忘れていたら Forgotten を選びます。

Skip で次の問題へ進みます。

フィードバックを歓迎します

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

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

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