目次
第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:ノイズのない値を推定する