量子コンピュータの頭の中
――計算しながら理解する量子アルゴリズムの世界

書籍の概要

この本の概要

量子コンピュータの説明では量子力学について言及されることが少なくありません。そこではしばしば,「量子とは粒でもあり波でもある」「結果は観測するまで確定しない」など,面白くも不可解な説明がなされます。しかし,量子コンピュータもアルゴリズムにもとづいて処理を行っています。量子アルゴリズムという「計算ルール」を理解できれば,量子コンピュータの理解にも近づけるのではないでしょうか?

本書では,行列と確率を中心とした数学を用いて,量子アルゴリズムを解説します。量子コンピュータのハードやビジネス活用に関する話はしていません。また,量子力学にも触れません。そのかわり,高校数学の知識さえあれば,その延長で量子アルゴリズムを理解できるよう,たっぷり解説します。解説は本書に出てくる計算のルールからはじめるので,難しそうと感じるかたでも,ぜひ読んでみてください。また,Qiskitを用いた量子プログラミングの初歩にも触れます。量子プログラミングに興味があるプログラマのかたにも役立ちます。この本を片手に手と頭を動かしながら,量子コンピュータの「頭の中」をのぞいてみましょう。

こんな方におすすめ

  • 量子コンピュータに興味があるプログラマ
  • 量子アルゴリズムについて知りたいかた

この書籍に関連する記事があります!

量子コンピュータは何がスゴイのか? 桁違いに速い?量子アルゴリズム
本書では、行列と確率を中心とした数学を用いて、一から量子アルゴリズムを解説します。

本書のサンプル

本書の一部ページを,PDFで確認することができます。

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

第1章 量子コンピュータへのいざない

1.1 量子コンピュータへの期待

1.2 量子コンピュータの歴史

1.3 古典コンピュータと量子コンピュータの違い

  • 1.3.1 なぜ量子コンピュータは速いのか
  • 1.3.2 古典ビットと量子ビット
  • 1.3.3 量子コンピュータの速さとユニタリ行列

1.4 量子コンピュータによくある誤解

    • 誤解1.量子コンピュータは,あらゆる計算が速くなる
    • 誤解2.量子コンピュータが実現すれば,スーパーコンピュータは不要
    • 誤解3.量子コンピュータは既に実用化している

コラム:量子力学が分からなくても量子コンピュータを理解するには

第2章 量子コンピュータ入門以前

2.1 量子コンピュータは「行列」の世界

2.2 行列の基本をおさらい

  • 2.2.1 行列とベクトルの定義
  • 2.2.2 行列の和・差・積
    • 行列の和・差
    • 行列とベクトルの積
    • 行列と行列の積
    • 行列の分配法則
  • 2.2.3 単位行列と逆行列

2.3 集合

  • 2.3.1 外延的記法と内包的記法
  • 2.3.2 要素
  • 2.3.3 よく使う集合の記号
  • 2.3.4 積集合

2.4 複素数

  • 2.4.1 虚数単位と複素数の演算
  • 2.4.2 絶対値
  • 2.4.3 複素共役

2.5 ゲートの正体である行列(ユニタリ行列)

  • 2.5.1 転置行列と随伴行列
  • 2.5.2 ユニタリ行列
  • 2.5.3 ブラケット記法
  • 2.5.4 行列に関連する記号についての補足

2.6 内積

  • 2.6.1 内積の定義
  • 2.6.2 ブラケットと内積の関係
  • 2.6.3 内積の性質
  • 2.6.4 内積の応用

2.7 複数ビットを支える行列(テンソル積)

2.8 論理式を実現する古典回路

第3章 量子コンピュータの基本ルール

3.1 この章で学ぶこと

3.2 量子コンピュータの基礎「量子ビット」

  • 3.2.1 「重ね合わせ状態」とは?

3.3 計算結果を得る「測定」

3.4 ビットの状態を変化させる「量子ゲート」

  • 3.4.1 量子状態をユニタリ発展させたものは,量子状態になる
  • 3.4.2 任意のユニタリ発展は,ハードウェアとして実装可能
  • 3.4.3 ユニタリ発展の可逆性

3.5 量子状態の区別がつくとき,つかないとき

  • 3.5.1 区別できる例
  • 3.5.2 区別できない例
  • 3.5.3 区別できない理由

コラム:どうして量子コンピュータの演算はユニタリ行列なのか

第4章 行列で読み解く量子回路の基本

4.1 この章で学ぶこと

4.2 量子ゲートと量子回路

4.3 重ね合わせ状態を作る「アダマールゲート」

4.4 NOTの役割を果たす「Xゲート」

4.5 位相反転させる「Zゲート」

    • パウリ行列とアダマール行列の関係

4.6 "ゲートがない"状態を作る

4.7 量子ゲートの性質

4.8 量子ビットを測定する

4.9 1量子ビットの量子回路を数学的に表す

    • 簡潔な計算方法

第5章 2量子ビットに拡張する

5.1 この章で学ぶこと

5.2 2量子ビットは「テンソル積」で表す

5.3 2量子ビットでの測定とユニタリ発展

  • 5.3.1 計算例
  • 5.3.2 2×2のユニタリ行列から4×4のユニタリ行列を作る

5.4 積状態と量子もつれ状態

5.5 量子複製不可能定理

第6章 2量子ビットの量子回路

6.1 この章で学ぶこと

6.2 ややこしい計算をやさしくする工夫

  • 6.2.1 1量子ビットのテンソル積で表す
  • 6.2.2 記法の工夫
    • 量子ビットの順番に関する注意

6.3 標的ビットを制御する「CNOTゲート」

  • 6.3.1 CNOTゲートと量子複製不可能定理の関係

6.4 量子ビットを入れ替える「SWAPゲート」

6.5 量子ビットを測定する

6.6 2量子ビットの量子回路を数学的に表す

    • 簡潔な計算方法

コラム:量子コンピュータの実行結果を検証する技術―量子状態トモグラフィ

第7章 量子プログラミング入門編

7.1 この章で学ぶこと

7.2 量子プログラミング言語・ライブラリ

7.3 Qiskitを利用する

  • 7.3.1 Qiskitの概要
  • 7.3.2 Qiskitの実行方法
  • 7.3.3 IBM Quantumのアカウント作成

7.4 量子回路に関する用語

7.5 基本的な量子プログラミング

  • 7.5.1 IBM Quantum Labの起動
  • 7.5.2 基本的なプログラミング方法
    • 量子回路の初期化
    • 量子回路の組み立て
    • 測定
    • 実行と結果取得
    • 測定値は確率的
  • 7.5.3 特定の量子レジスタのみを測定する方法
    • 量子回路の初期化
    • 量子回路の組み立て
    • 測定
  • 7.5.4 レジスタを直接利用した実装
    • 量子回路の初期化
    • 量子回路の組み立て
    • 測定

7.6 実行結果と量子回路の可視化

  • 7.6.1 実行結果の可視化
  • 7.6.2 量子回路の可視化
  • 7.6.3 量子回路の可視化をサポートする機能

7.7 ゲートと関数の対応

7.8 自分のPCで実行する方法

7.9 発展:人間が書いたプログラムを量子コンピュータ向けに変換する技術―量子コンパイラ

  • 7.9.1 量子コンパイラの機能
  • 7.9.2 ハードウェアのトポロジーを考慮した量子回路に変換
  • 7.9.3 ハードウェアで実行できるゲートを考慮した量子回路に変換
  • 7.9.4 短い量子回路に変換
  • 7.9.5 その他の機能

第8章 n量子ビットの世界

8.1 この章で学ぶこと

8.2 量子ビットを一般化する

8.3 測定(確率の世界)

8.4 ユニタリ発展(行列の世界)

8.5 一部の量子ビットの測定

  • 8.5.1 一部の量子ビットの測定(具体例1)
  • 8.5.2 一部の量子ビットの測定(一般的なルール)
  • 8.5.3 一部の量子ビットの測定(具体例2)

8.6 1量子ビットのテンソル積を用いた計算

  • 8.6.1 1量子ビットのテンソル積で表す
  • 8.6.2 記法の工夫

8.7 代表的なn量子ビットの量子ゲート

  • 8.7.1 トフォリゲート
  • 8.7.2 フレドキンゲート

8.8 重ね合わせ状態を利用した計算

8.9 排他的論理和とオラクル

8.10 発展:量子コンピュータを使って任意の2n次正方行列のかけ算を計算する

  • 8.10.1 パウリ行列で2次正方行列を表す
  • 8.10.2 テンソル積の和と量子状態の積
  • 8.10.3 パウリ行列で4次正方行列を表す
  • 8.10.4 パウリ行列で2n次正方行列を表す

第9章 量子テレポーテーション

9.1 この章で学ぶこと

9.2 量子テレポーテーションとは?

9.3 量子テレポーテーションの方法

  • 9.3.1 ステップ1:量子もつれ状態を共有する
  • 9.3.2 ステップ2:移動する量子ビットを準備する
  • 9.3.3 ステップ3:アリスが手元の量子ビットにCNOTとHを適用する
  • 9.3.4 ステップ4:アリスが手元の量子ビットを測定し,得た値を古典ビットとしてボブに通信する
  • 9.3.5 ステップ5:得た古典ビットにより,ボブが手元の量子状態を操作する
    • 古典ビット00を受け取った場合
    • 古典ビット01を受け取った場合
    • 古典ビット10を受け取った場合
    • 古典ビット11を受け取った場合
    • 添え字2の量子ビットに対する処理をまとめる
  • 9.3.6 ステップ1~ステップ5をまとめる

9.4 量子テレポーテーションのプログラミング

    • 結果表示用の文字列
    • 量子回路の初期化
    • ステップ1:量子もつれ状態を共有する
    • ステップ2:移動する量子ビットを準備する
    • ステップ3:アリスが手元の量子ビットにCNOTとHを適用する
    • ステップ4:アリスが手元の量子ビットを測定し,得た値を古典ビットとしてボブに通信する
    • ステップ5:得た古典ビットにより,ボブが手元の量子状態を変化させる
    • 実行と結果取得

9.5 発展:量子インターネット

第10章 量子誤り訂正入門

10.1 この章で学ぶこと

10.2 量子誤り訂正の必要性と制約

    • import文
    • ノイズモデルの設定
    • 量子回路の初期化
    • エラー発生
    • 測定
    • 実行と結果取得
    • ①量子状態を複製できない
    • ②アナログなエラーが発生する
    • ③測定すると量子状態が変化してしまう

10.3 ビット反転エラーの誤り訂正

  • 10.3.1 量子状態の反復
    • 量子回路の初期化
    • 量子状態を反復
    • エラー発生
    • 測定
  • 10.3.2 ビット反転エラーの誤り検出
    • 量子回路の初期化
    • 誤り検出
    • 測定
  • 10.3.3 ビット反転エラーの誤り訂正
    • 誤り訂正
  • 10.3.4 ビット反転エラーの誤り訂正(補助ビットなし)
    • 量子回路の初期化
    • 誤り検出・誤り訂正
    • 測定

10.4 位相反転エラーの誤り訂正

    • ノイズモデルの設定
    • 量子回路の初期化
    • 測定
    • 量子状態の反復とアダマール行列の適用
    • 誤り検出・誤り訂正

10.5 ショア符号

    • 量子状態を反復
    • 誤り検出・誤り訂正
    • ノイズモデルの設定
    • 量子回路の初期化
    • 量子状態の反復とアダマール行列の適用
    • 誤り検出・誤り訂正
    • ①量子状態を複製できない
    • ②アナログなエラーが発生する
    • ③測定すると量子状態が変化してしまう

10.6 発展:量子誤り訂正の重要性

第11章 ドイッチュのアルゴリズム

11.1 この章で学ぶこと

11.2 定数関数とバランス関数

11.3 ドイッチュのアルゴリズムが解く問題

11.4 古典コンピュータで解く場合

11.5 補助量子ビットによる拡張

11.6 ドイッチュのアルゴリズムの方法

  • 11.6.1 ステップ1:重ね合わせ状態を作成する
  • 11.6.2 ステップ2:重ね合わせ状態に対してUfを実行する
  • 11.6.3 ステップ3:関数Ufの性質を使って計算する
    • 関数Ufが定数関数の場合
    • 関数Ufがバランス関数の場合
  • 11.6.4 ステップ4:測定を行い,定数関数かバランス関数か判定する
  • 11.6.5 ステップ1~ステップ4をまとめる

11.7 ドイッチュのアルゴリズムのプログラミング

11.8 発展:ドイッチュ-ジョザのアルゴリズム

第12章 グローバーのアルゴリズム

12.1 この章で学ぶこと

12.2 グローバーのアルゴリズムとは?

12.3 グローバーのアルゴリズムの方法

  • 12.3.1 ステップ1:重ね合わせ状態を作成
  • 12.3.2 ステップ2:選択的回転
  • 12.3.3 ステップ3:拡散変換
  • 12.3.4 ステップ4:繰り返し実行

12.4 グローバーのアルゴリズムのプログラミング

12.5 発展:グローバーのアルゴリズムの応用

  • 12.5.1 解が複数ある場合
  • 12.5.2 グローバーのアルゴリズムを応用した計算
  • 12.5.3 グローバーのアルゴリズムの量子優位性

付録 量子プログラミング実機編

A.1 この章で学ぶこと

A.2 実機を使う準備

A.3 実機でプログラムを実行

  • A.3.1 量子回路の実装と実行
  • A.3.2 実行待ちの様子
  • A.3.3 実行完了の様子
  • A.3.4 実行結果の考察

A.4 APIから実機の情報を確認する方法

  • A.4.1 backendの確認方法
  • A.4.2 ジョブの確認方法

A.5 IBM Quantum以外の場所から実機を実行する方法

A.6 発展:量子エラー抑制

  • A.6.1 ノイズのない実行結果を推定する量子エラー抑制
  • A.6.2 測定エラー抑制
  • A.6.3 ステップ1:測定時のノイズに関する統計的な情報を取得する
  • A.6.4 ステップ2:目的の量子回路を実行する
  • A.6.5 ステップ3:ノイズのない値を推定する

著者プロフィール

束野仁政(つかのさとゆき)

大阪大学量子情報・量子生命研究センター特任研究員。修士(理学)。実用的な量子コンピュータを実現するため,ソフトウェアを開発している。国産量子コンピュータ初号機による量子計算クラウドサービスの研究開発に従事。量子コンピュータの面白さを多くの人に広めたいと思い,入門書・入門記事の執筆等の活動を行っている。

Twitter ID:@snuffkin

  • 1998年 埼玉大学理学部数学科卒業
  • 2000年 大阪大学大学院理学研究科数学専攻博士前期課程修了
  • 2000年 アクロクエストテクノロジー株式会社 プログラマ,システム・エンジニア
  • 2019年 東京大学先端科学技術研究センター 学術専門職員など
  • 2022年 大阪大学大学院基礎工学研究科 特任研究員
  • 同上 大阪大学量子情報・量子生命研究センター 特任研究員