Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/ja/intro/describing-quantum-computers.ipynb
3855 views
Kernel: Python 3

量子コンピューターの記述

この章では、量子コンピューターを記述するために使用する様々な数学的オブジェクトと表記法を紹介します。記号や方程式、専門的な語彙を使うことで、非常に簡潔に数学と向き合い、コミュニケーションすることができます。しかし、記号の意味を知らないと理解するのが難しく、人を遠ざけることにもなりかねません。そこで、このテキストブックでは、数式をインタラクティブに表示します。記号の上にマウスを乗せると、その記号が何を意味しているかがわかります。また、数学や量子コンピューターの言葉を話せるようになるために、難解な単語を少しずつ散りばめ、これらの単語にマウスを乗せると、その単語の解説を見ることができるようになっています。

振幅

古典的な確率は0から1の間の実数で表されることが多いですが、振幅は方向も持っています。振幅を表現するための自然な候補は複素数です。複素数も大きさと方向の両方で完全に記述できますが、このコースでは、2方向(例えば左と右)を指す振幅だけを扱い、それ以外は気にしないことにしています。

振幅と確率を比較する画像

これにより、計算が非常にシンプルになります。つまり、振幅を-1から+1までの数字で表すことができ、その数字が正であれば振幅は前を向き、負であれば後ろを向いていることになるからです。しかし、これでも十分に面白いことができることがわかります。

クイッククイズ

このうち、有効な振幅ではあるが、有効な確率ではないものはどれか?

  1. 1-1

  1. 1/31/3

  1. 1.011.01

  1. 2\sqrt{-2}

状態ベクトル

前ページでは、計算の各段階における各結果の確率振幅を記録することで、量子系の振る舞いを予測することができることを紹介しました。また、n個の量子ビットに対して、2n2^n 個の可能な結果があり、これらの振幅を長さ 2n2^n のリストに格納することができることを確認しました。これらのベクトルは量子ビットの状態を表すので、私たちは「状態ベクトル」と呼んでいます。

ここでは、2つの量子ビットを持つ量子コンピューターの状態ベクトルの例を示します。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…

上の式のツールチップを読んでから、以下の質問に答えてください。

クイッククイズ

上の状態ベクトルにおいて、結果'01'の振幅は何か?

  1. 11

  1. 12\sqrt{\tfrac{1}{2}}

  1. 1/21/2

  1. 00


上の状態ベクトルがいくつかの量子ビットの状態を表しているとしたら、'00'を測定する確率はいくらか?

  1. 11

  1. 12\sqrt{\tfrac{1}{2}}

  1. 1/21/2

  1. 00

ベクトルの足し算と掛け算

数学の他の分野を勉強すると、多くのものがベクトルとみなされることがわかります。ベクトルを「数のリスト」として紹介したのは、このテキストブックでもQiskitでもこのように考えるからです。しかし、ベクトルをただの数字のリストと区別するのは、数学者が2つのベクトルの足し算や、ベクトルとスカラーの掛け算について、明確に定義した規則を決めたからです。

ベクトルにスカラーを掛ける

例えば、ここにスカラーを掛けたベクトルがあります。

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_number-three}…

ベクトルの各要素が3倍されていることがわかります。要素を NN 個持つベクトルのより一般的な規則は次の通りです。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{scalar}{s} \be…

そこで、上で定義した状態ベクトル x|x\rangle をもっときれいに書くと、次のようになります。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…

2つのベクトルを足し合わせる

2つ目の規則は、2つのベクトルを足し合わせることです。これは、2つのベクトルが同じ要素数を持つ場合にのみ定義され、同じ要素数を持つ新しいベクトルが得られます。以下は一般的なルールです。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 17: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_vec-el-0}{a_0…

つまり、ベクトルを足したり引いたりすることで、新しいベクトルを作ることができるのです。例えば、00|00\rangle01|01\rangle というベクトルをそのように定義すると、以下のようになります。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{def-00}{|00\ra…

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang… を以下の形で書くことができます。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{x-ket}{|x\rang…

このように量子状態を足し合わせることを「重ね合わせ」と呼び、「x|x\rangle は状態 00|00\rangle01|01\rangle の重ね合わせである。」と表現することができます。実際、量子コンピューターでは、そのように計算基底状態を定義するのが慣例になっています。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{def-00}{|00\ra…

そして、それぞれのベクトルに正しい数を掛けて足し合わせれば、どんな量子状態もこれらの状態ベクトルの重ね合わせとして書くことができるのです。

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_psi-ket}{|\ps…

任意のベクトルをこの4つのベクトルの組み合わせとして書くことができるので、この4つのベクトルが基底を形成していると言い、これを「計算基底」と呼ぶことにします。計算基底は唯一の基底ではありません。単一量子ビットの場合、よく使われる基底は ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{plus-ket}{|{+}…ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{minus-ket}{|{-… というベクトルで形成されます。

同じ平面上の|0>, |1>基底と|+>, |->基底の両方を示す画像

ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{plus-ket}{|{+}…ParseError: KaTeX parse error: Undefined control sequence: \class at position 1: \̲c̲l̲a̲s̲s̲{minus-ket}{|{-…

試してみよう

これらの式が成り立つような α\alpha, β\beta, γ\gamma, δ\delta の値を求めよ。

  • α++β=0\alpha|{+}\rangle + \beta|{-}\rangle = |0\rangle

  • γ++δ=1\gamma|{+}\rangle + \delta|{-}\rangle = |1\rangle

状態ベクトルは何種類あるのだろうか?

我々は、ベクトルを使って任意の量子状態を表現できることは知っていますが、どんなベクトルでも正しい量子状態なのでしょうか?違います。というのも、出力の発生確率は振幅を二乗して求まるので、振幅の二乗和が1にならないと整合しないのです。

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{sum}{\sum^{N-1…

クイッククイズ

この中で有効な量子状態はどれか?(振幅の2乗和を計算してみてください。)

  1. 13[1110]\sqrt{\tfrac{1}{3}}\begin{bmatrix} 1 \\ -1 \\ 1 \\ 0 \end{bmatrix}

  1. 12[1111]\sqrt{\tfrac{1}{2}}\begin{bmatrix} 1 \\ -1 \\ -1 \\ 1 \end{bmatrix}

  1. 12[11]\tfrac{1}{2}\begin{bmatrix} 1 \\ 1 \end{bmatrix}

もう1つの要因は、状態ベクトルの「グローバル位相」と呼ばれるものです。位相が生む干渉効果によってしか位相の存在を検知できないので、私達は位相のしか測定することが出来ません。もし、状態ベクトルのすべての振幅を同じだけ回転させたとしても、まったく同じ振る舞いが見られるでしょう。

異なる開始時の位相での干渉効果を示す画像

異なる開始時の位相での干渉効果を示す画像

例えば、この2つの状態を区別するような実験はできません。

a=12[1001]|a\rangle = \sqrt{\tfrac{1}{2}}\begin{bmatrix} 1 \\ 0 \\ 0 \\ 1 \end{bmatrix}
a=12[1001]-|a\rangle = \sqrt{\tfrac{1}{2}}\begin{bmatrix} -1 \\ 0 \\ 0 \\ -1 \end{bmatrix}

なぜなら、それぞれの振幅の差は同じだからです。この2つのベクトルは数学的には異なるが物理的には同じと言えるでしょう。

量子演算

さて、量子ビットがとり得る様々な状態がわかったところで、ある状態から別の状態に変換する操作をどのように表現するかを見てみましょう。

ある動作によってコインが表から裏へ変化する遷移確率があるように、量子ビットの始状態と終状態にはそれぞれ遷移振幅が存在するのです。この遷移振幅によって、任意の量子演算を記述することができます。

演算前後の2つの状態ベクトルを示す画像

では、どのような変換が可能なのでしょうか?例えば、始状態 a|a\rangle があって、それが新しい状態 b|b\rangle に変換されるとします。もし、私たちの表現がすべての可能な変換をカバーしたいのであれば、a|a\rangle の各振幅は b|b\rangle の各振幅への遷移振幅を持っている必要があります。

クイッククイズ

nn量子ビットの状態ベクトルは最大で 2n2^n個の振幅を含むことができます。nn量子ビットの量子演算を表現するために必要な遷移振幅の最大数値はいくつでしょう?

  1. 22n2\cdot 2^n

  1. (2n)2(2^n)^2

  1. 4n4^n

  1. 22n2^{2^n}

このように線を引くと、ちょっと面倒なので、代わりにこれらの数値をすべて行列に入れます。

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{u-gate}{U} = …

例えば、計算の原子で見たCNOT演算を表す行列は以下の通りです。

ParseError: KaTeX parse error: Undefined control sequence: \cssId at position 1: \̲c̲s̲s̲I̲d̲{_cnot-gate}{\t…

クイッククイズ

CNOT演算(上図)で状態 10|10\rangle01|01\rangle に変換するときの遷移振幅は何でしょう?

  1. 11

  1. 00

  1. [1000]\begin{bmatrix} 1 & 0 & 0 & 0\end{bmatrix}

  1. [0010]\begin{bmatrix} 0 \\\\ 0 \\\\ 1 \\\\ 0\end{bmatrix}

そして、前ページで見たHゲートの行列は以下になります。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 41: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

(行列とスカラーの掛け算は、ベクトルと同じルールを使います)。そして、ある操作がある量子ビットにどのような影響を与えるかを見たいときには、各遷移振幅を入力状態ベクトルの各状態の振幅に掛け、各状態の振幅を足して出力状態ベクトルとします。これは、確率(または振幅)木の各枝に沿って掛けて、最後に総確率(または振幅)を足し合わせるのと全く同じです。

数学者の方ならおわかりかと思いますが、これは通常の行列の掛け算です。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 50: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

Hゲートが状態|0>を状態|+>に変換する方法を示す画像

量子演算の規則

すべてのベクトルが有効な状態ベクトルでないのと同じように、すべての行列が有効な量子演算であるわけではありません。もし行列が本当の演算として意味を持つなら、出力状態の合計確率を1に保つ必要があります。したがって、例えばこれは本当の演算にはなりえません。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 17: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

なぜなら、もしそれが状態 0|0\rangle に作用するならば、次のようになるからです。

ParseError: KaTeX parse error: Undefined control sequence: \class at position 17: …begin{bmatrix} \̲c̲l̲a̲s̲s̲{_t_amp_0_0}{1}…

となり、確率の合計は2になってしまい、整合しません。また、状態 1|1\rangle に作用した場合、合計確率は0になり、これも整合しません。どのような場合でも確率の総和が変わらないようにするには、演算を可逆にする必要があります。つまり、量子ゲートを逆から実行して「元に戻す」ことができるのです(回転を反転させることを忘れずに)。このような性質を持つ行列を「ユニタリー行列」と呼びます。量子ゲートのことを「ユニタリー」または「ユニタリーゲート」と呼ぶのをよく見かけます。