LoginSignup
1
1

More than 3 years have passed since last update.

[超基礎]量子コンピュータのための量子論その2 嵐を呼ぶユニタリー演算子

Last updated at Posted at 2019-06-18

こんな人に役に立つと思いまして

  • 量子コンピュータやりたい
  • なんか勉強してるとユニタリー演算子とか出てくるけどユニタリー演算子ってそもそも何?
  • きもいのはわかっているが量子コンピュータが好きで好きでたまらない

自分の中のまとめも兼ねているため悪しからず。また、今回ゲート式の量子コンピュータに限って話をします。(最近話題の光量子コンピュータものぞく)

こちらと一緒に読むとわかりやすいと思います。
[超基礎]量子コンピュータのための量子論

量子コンピュータでの演算子の役割とは?

まずはここから。量子コンピュータは量子ビットを用いて計算します。量子コンピュータにとって「ビットに演算子を作用させる」とは計算におけるビットの操作を行うことです。

具体的に言いましょう。量子コンピュータは状態を表すとき|x>|y>という謎の記号を慣例的に使用します。例えば1ビット目が0で、2ビット目が1の状態は|0>|1>という感じです。

では操作をした結果、例えばどのような状態になるでしょう。|0>|0>のような、別のビットの状態でも良いですし、1/√2(|0>|1>+|0>|0>)のような量子固有の「状態の和」でも良いです。このようにビットの状態を変えるのが量子コンピュータでの演算子の役割です。演算子を複数回作用させて特定の計算を行います。

量子コンピュータで計算に用いる演算子は全て共通の特徴を持っています。全ての演算子はユニタリー演算子と呼ばれるものです。ユニタリー演算子とはなんなのか?以下ご覧ください。

確率とユニタリー演算子

係数ととりうる確率について

状態1/√2(|0>|1>+|0>|0>)の場合、なぜ係数が1/√2なのでしょうか。1/2ではダメでしょうか?実はコレ、係数の2乗がその状態をとる確率になるのです。つまり、1/√2(|0>|1>+|0>|0>)という状態のビットを測定した時に、1ビット目が0で2ビット目が1を得られる確率は1/2、同じく1ビット目が0で2ビット目が0を得られる確率は1/2となるのです。

確率は全て足して1になることはご存知の通り。先ほどの例で、仮に係数が1/2だった場合、1ビット目が0で2ビット目が1を得られる確率は1/4、同じく1ビット目が0で2ビット目が0を得られる確率は1/4となります。全て足して1/2、残り1/2はどうなるの?という話です。

演算子を作用させる前も後も当然係数を2乗して全て足すと1にならなければなりません。そのような性質を持った演算子でなければなりません。よって量子コンピュータの操作(演算子)には次のような制約が課せられます。

演算した結果、係数の2乗の和を取ると変わらず1になる

ユニタリー演算子について

ユニタリー演算子は上記制約に基づく性質を持っている演算子の総称です。以下でもう少し詳細を議論します。

2ビットの場合、状態は以下4パターン存在します。これをベクトルに対応させましょう。

AB2CDC32-5AEF-4BE7-BC4C-E3F74F5B7F3B.jpeg
E81AC021-A126-4B7B-BAEC-8AB028C9BB98.jpeg
074B1CEB-6626-4E16-B39A-33EC9755E545.jpeg
A27D2CEB-24E9-42E0-9093-BF856514DA52.jpeg

実は、それぞれのベクトルは直交しますが、それを説明するとまた一苦労なので、本当に直交するかはいつか書くであろうエルミート演算子の記事を参考にしたください。何書いてあるかよくわからないWikipediaを参考にのせておきます。Wikipedia エルミート演算子この4つのベクトルは4次元空間を張ることになります。4次元=ドラえもんのポケットではなく、つまり、2ビットのいかなる状態の和も、上の4通りのベクトルの和で表せるということです。4つの元が必要な空間という意味で、4次元空間になります。

この4次元空間の状態の「内積」という値を考えます。高校の時に習ったあれです。

3A13C2C7-89E3-487C-83B0-B80CF55C80FF.jpeg
42277943-2210-4AB3-A69B-B343D95AF012.jpeg

係数の2乗の和になっています。係数の2乗は確率であり、その和は1でした。ベクトルの内積の値が1であることと同じなのです。

さて内積の値は、同時にベクトルの長さの二乗でもあります。最初状態ベクトルの長さが1で、そこに状態を操作する演算子を作用させます。こうしてできた新しい状態ベクトルも長さが1ということは、演算子は長さを変えない演算子である必要があります。これを長さの単位を変えない、単位的(ユニット的)という思いをこめて、ユニタリー演算子と言います。量子コンピュータでビット操作をした結果、係数の2乗の和は必ず1でなければなりません。結果、演算子は総じてユニタリー演算子であるべきなのです。

もっとユニタリー演算子を知ろう

みんな嫌いな数学記号で表しましょう。状態|v>にユニタリー演算子Uを作用させましょう。状態|v>は一般的な状態です。ユニタリー演算子を作用させた後の状態の内積が何か、議論したいです。

64F1D76B-A71A-43D1-9AB2-77A414F11D5D.jpeg

ここで少し難しい話をします。そしてここを乗り越えなければユニタリー演算子を数学的に理解することができません。数学嫌いな人はスキップしてね。今、演算子を状態に作用させたもの「同士」の内積を求めようとしました。でもここでは、実は演算子を作用させて(U)そのあとさらにもう一つの演算子を作用させた(U^+)状態と元の状態の内積を考えましょう。演算子を作用させた(U)もの同士の内積と、この値が同じになる場合、演算子U^+が存在すると言えます。この演算子U^+Uの「共役な演算子」と呼び、この+はダガーと呼びます。

A6E270F1-E188-4B8C-B7AE-36C5A64B0954.jpeg

さらにこの値は、元の状態|v>の内積から値は変化しないという条件を演算子に課します。

CAFB2724-BD1E-4235-A969-353C8255F54E.jpeg
CA51B859-9987-4BB9-A224-22566D5C0707.jpeg
2FCD3FB3-86C1-4D94-8914-4C1A3B8CB82A.jpeg

これが、ユニタリー演算子の数学的な定義です。共役な演算子と逆演算子が一致する場合、それはユニタリー演算子です。ちなみにU^-1は逆演算子で、状態変化Uを元に戻す演算子のことです。

証明は省略しますが、状態をフリップさせる演算子や、位相反転させる演算子、cNOT演算子など全てユニタリー演算子です。

直感的には、状態ベクトルの長さが変わらなければ、良いわけです。

まとめ

  • 量子コンピュータのビット操作は全てユニタリー演算子に相当している。
  • ユニタリー演算子は、状態ベクトルの長さを変えない。
  • 状態ベクトルの長さとは、自身との内積のこと。
  • 共役な演算子と逆演算子が等しい場合、それはユニタリー演算子

こちらも一緒にお読みください。
量子コンピュータで最初のアルゴリズム、ドイチュの問題

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1