物理とか

Index

スタビライザーによる量子状態の記述


1. 量子状態の記述方法

普通 \(n\) 量子ビットの純粋状態を書き表すには、状態ベクトル \(\ket{\psi}\) を \(\ket{00\cdots 0}\) から \(\ket{11\cdots 1}\) までの \(2^n\) 個の基底に展開し、\(2^n\) 個の複素数 \(a_k\) を使って、 \begin{align} \ket{\psi} = \sum_{k=1}^{2^n} a_k \ket{k} \end{align} のようにする。\(\ket{k}\) は整数 \(k\) を2進表示したものを表す。例えば \(\ket{2} = \ket{00\cdots010}\)。

しかし、純粋状態を一つ書き出す方法は、何もこの方法だけではない。例えば、密度行列 \(\rho = \ket{\psi}\bra{\psi}\) を使えば、 \begin{align} \rho = \sum_{i,j=1}^{2^n} \rho_{ij} \ket{i}\bra{j} \end{align} のように書くことができる。このときは、だいたい \(4^n\) 個の複素数 \(\rho_{ij}\) を使って量子状態を記述している。

この 2 つはまったく同じ量子状態を表現することができ、数学的に等価な表現方法だが、古典計算機で扱うときの効率について考えてみると、ベクトル表記を使うほうが断然効率が良い。なぜなら、密度行列で表現すると \(4^n\) 個の複素数が必要なところを、ベクトル表記では \(2^n\) 個にまで少なくできるからだ。

しかしなぜこのようなことが起きるのだろうか?

上の例においてその理由は、量子状態を純粋状態に限定していたからだ。一般に、量子状態を表現するのに必要なリソースの量は、表現したい空間を制限すればするほど小さくなる。もし一般の混合状態を扱おうと思えば、密度行列を使って表現してやるのが標準的である。他にも、量子状態の限定によって簡単な記述が得られる例として、状態ベクトルが必ずテンソル積の形になっている場合が考えられる。つまり、量子状態が \begin{align} \ket{\psi} = \left(a_1 \ket{0} + b_1\ket{1}\right)\left(a_2 \ket{0} + b_2\ket{1}\right) \cdots \left(a_n \ket{0} + b_n\ket{1}\right) \end{align} の形で書けるような場合である。\(2n\) 個の複素数があれば、この量子状態を完璧に表現できる。

このページでは、このように効率的な記述法を持つ量子状態である、スタビライザー状態 と呼ばれるものについて説明してみたい。

2. 演算子の固有状態として状態を指定する

上では、量子状態を基底に展開し、そのときの展開係数によって量子状態を記述したが、一風変わったアイデアとして、適当な演算子 \(O\) のある固有値 \(\lambda\) に対応する固有状態として \(\ket{\psi}\) を指定するというものがある。

ここからは、パウリ行列を \begin{align} X&= \left(\begin{array}{cc}0&1\\1&0\end{array}\right),& Y&= \left(\begin{array}{cc}0&-i\\i&0\end{array}\right),& Z&= \left(\begin{array}{cc}1&0\\0&-1\end{array}\right) \end{align} と書く。

演算子と固有値によって状態を指定する方法の例を 1 qubit でみてみよう。例えばパウリ行列 \(X\) とその固有値 \(1\) を指定すれば、 \begin{align} \ket{+} &= \frac{1}{\sqrt{2}}\left(\ket{0}+\ket{1}\right) \end{align} という状態が一意に定まる。また \(Y\) と固有値 \(-1\) を指定すれば \begin{align} \ket{-_y} &= \frac{1}{\sqrt{2}}\left(\ket{0}-i\ket{1}\right) \end{align} が指定できる。

この調子で 2 qubit に拡張してみる。1 qubit 目に作用するパウリ行列 \(Z_1\) と、2 qubit 目に作用するパウリ行列 \(X_2\) を使って、\(O=Z_1+X_2\) と定義する。\(O\) の固有値 \(2\) に対応するベクトルは \begin{align} \ket{0}\ket{+} = \frac{1}{\sqrt{2}}\ket{0}\left(\ket{0}+\ket{1}\right) \end{align} と指定される。2 qubit だともっと変な例もつくることができる。\(O=Z_1Z_2+X_1X_2\) としてみよう。この \(O\) の固有値 \(2\) に対応する状態は \begin{align} \frac{1}{\sqrt{2}}\left(\ket{00}+\ket{11}\right) \end{align} である。

しかしたまには状態をうまく指定できない演算子も存在する。例えば 2 qubit の例で \(O=Z_1 + Z_2\) として、その固有値が 0 になる状態を考えると \(\ket{01}, \ket{10}\) の 2 つがある。このようなときには、状態を一意に指定できないため、この演算子とその固有値によって状態を指定する方法は破綻してしまう。こういうことは回避したい。

また、原理的には適当なパウリ演算子の足し合わせで作ったハミルトニアンを持ってきて、その基底状態として状態を指定することも可能だが、できれば基底状態の素性がよく分かる状況のほうがよいだろう。例えば、「適当な結合係数を持つイジングモデルのハミルトニアンの基底状態」として状態を定義されても、イジングモデルの基底状態を求めるのは一般に非常に困難なので、それはもはや私達に情報を与えていないのと同じである。

さらに、この方法では何通りもの演算子と固有値の組み合わせで、同じ状態を表現することができる。例えば、\(Z_1+Z_2+Z_1Z_2\) の固有値が 3 である状態と、\(Z_1 + Z_2\) の固有値が 2 である状態は、どちらも同じ \(\ket{00}\) である。同じ状態を表現できるのであれば、できればなるべく簡単な演算子によって表現できたほうが、リソースが少なくなるから嬉しいはずだ。

スタビライザー方式は、演算子とその固有値によって状態を指定する方法の中で、このあたりの願望をうまく叶えてくれる方式である。

3. パウリ演算子による空間の分割

さて、上の願望にもあげたように、なるべく簡単な演算子で \(n\) qubit の状態を指定したい。 演算子で状態を指定するモデルで一番簡単なのは、すべての qubit の \(Z\) 演算子を足したもの、\(Z_1+\cdots+Z_n\) の固有値が \(n\) になるとして指定する状態だろう。これは \(\ket{00\cdots 0}\) という状態を一意に指定する。

これを元に色々考えてみよう。

\(\ket{00\cdots 0}\) という状態を一意に指定する演算子と固有値の組には、\(Z_1+\cdots+Z_n\)以外にも、様々な物がある。例えば、 \begin{align} \sum_{i=1}^n Z_i + \sum_{i>j}^n Z_iZ_j \end{align} という演算子の最大固有値状態も \(\ket{00\cdots 0}\) だし、 \begin{align} \sum_{i=1}^n Z_i + \sum_{i>j}^n Z_iZ_j + \sum_{i>j>k}^n Z_i Z_j Z_k \end{align} の最大固有値状態も \(\ket{00\cdots 0}\) である。しかしこれらはすべて \(\sum_{i=1}^n Z_i\) よりもいくらか複雑な演算子になっている。逆に \(\sum_i Z_i\) よりも簡単 (項数が少ない) 演算子で、\(\ket{00\cdots 0}\) を指定できるようなものはあるだろうか?

例えば \(\sum_{i=1}^n Z_i\) のから一つ \(Z\) 演算子を減らした \(\sum_{i=1}^{n-1} Z_i\) を考えてみよう。この演算子は \(\ket{00\cdots 0}\) を指定することはできない。なぜなら、固有値が \(n\) 番目の qubit の状態によらず決まってしまうからだ。他にいろいろ考えてみても、おそらく \(\sum_{i=1}^{n} Z_i\) よりも簡単な演算子で \(\ket{00\cdots 0}\) を指定することはできないだろう。そうすると、\(Z\) を \(n\) 個足した \(\sum_{i=1}^{n} Z_i\) という演算子は、\(\ket{00\cdots 0}\) を一意に指定する演算子の中で、一番簡単なものなのかもしれない。

これはなぜだろうか?

\(Z_1\) から順に足していき、その状態指定の「精度」を調べていくことによってその理由を探ってみよう。演算子として \(Z_1\) を選ぶとき、その固有値 \(1\) に対応する状態は、1 qubit 目だけが \(\ket{0}\) であるような状態で、その他の \(n-1\) qubit に関しては何も指定しない。このとき、指定された空間の次元は、元の \(2^n\) 次元と比べると \(2^{n-1}\) となっていて、元の空間の半分を切り捨てた空間を指定していることがわかるだろう。もう一つ \(Z\) を足して \(Z_1+Z_2\) という演算子の固有値 \(2\) の状態を考えてみると、同様の考え方から、この演算子によって指定される空間の次元は \(2^{n-2}\) となる。これを \(n\) 回続ければ、最後には \(2^{n-n} = 1\) となって、1 次元の空間だけがのこる。そして最後に量子状態の規格化条件と位相の任意性を要請すれば、状態が一意に指定されるわけだ。

つまり、このように \(Z\) を一つ足すごとに空間が二分割されていくことが、\(\sum_{i=1}^n Z_i\) という演算子が \(n\) qubit の状態を指定するのに最適である理由といえる。 同様のことは \(X\) を足したものでも言えるし、\(Y\) を足したものでも言えるだろう。

この考え方はさらに一般化できる。上記のように空間を二分割していくことができたのは、\(X,Y,Z\) といったパウリ行列が、 2 つの固有値を持ち、その固有値に対応する固有ベクトルの数がちょうど等しかったからである。一般に、2 つの固有値 \(\lambda_1, \lambda_2\) を持ち、それぞれの固有値に対応する固有ベクトルの数が等しいようなエルミート演算子 \(O\) が与えられたとき、1 つの固有値に対応する固有ベクトルが張る空間は、元の空間の半分である。また、演算子を一つ足すときにはそれまでの演算子と同じ固有状態を持っていることが望ましい。なぜならそうしておかないと、足された後には全然違う状態を指定してしまう、という状況になってしまうからだ。

このような条件下で選びだした演算子たちを足し上げ、固有値をうまく選べば (\(Z\) の例では最大固有値)、ある一つの状態を指定できる。

4. 可換なパウリ演算子による状態の指定

上で一般化した条件のうち、「 2 つの固有値を持ち、それぞれに対応する固有ベクトルの数が等しい」を満たすものとして簡単なものに、パウリ演算子がある。一般に \(n\) qubit のパウリ演算子 \begin{align} \mathcal{P} = \left\{\pm 1, \pm i\right\}\times\left\{I, X, Y, Z\right\}^{\otimes n} \end{align} は、どれも固有値 \(\pm 1\) を持ち、それぞれに対応する固有ベクトルの数は等しい。(\(\pm 1, \pm i\)をくっつけたのは、積をとったときにこの集合の中で閉じるようにするため。)

さらに、「演算子同士が、同じ固有状態を持つ」 という条件は、演算子の一般論から、「演算子同士が可換である」ということに言い換えられる。

したがって、上で見た例を一般化し、以下のことがいえるだろう。
可換なパウリ演算子を \(n\) 個選び出し、これらを \(S_i \in \mathcal{P}\) とおく。それらの和によって演算子 \(O=\sum_{i=1}^n S_i\) を作ったとき、この演算子の最大の固有値 (=\(n\)) に対応する固有状態は、一意に定まる。したがって、\(n\) 個の可換なパウリ演算子 \(\{S_i\}\) を、ある量子状態の (効率的な) 記述とみなすことができる。
また、\(O=\sum_{i=1}^n S_i\) の固有値 \(n\) に対応する固有状態は、それぞれの \(S_i\) について固有値 \(+1\) を持つ状態と言い換えても同じことである。よって、実はこの形式による量子状態の指定には、\(O=\sum_{i=1}^n S_i\) という演算子を構成する必要はない。そこで、以下のように言い換えよう。
可換なパウリ演算子を \(n\) 個選び出し、これらを \(S_i\) とおく。このとき、\(S_i\) の全てについて固有値 \(+1\) を持つ状態は一意に定まる。したがって、\(n\) 個の可換なパウリ演算子 \(\{S_i\}\) を、ある量子状態の (効率的な) 記述とみなすことができる。
このように量子状態を指定する方式は

スタビライザー形式

、この形式で指定可能な量子状態は

スタビライザー状態

と呼ばれている。

実はスタビライザー状態には、n qubit の全域に渡ってエンタングルしているような状態、例えば \begin{align} \frac{1}{\sqrt{2}} \left(\ket{00\cdots 0} + \ket{11 \cdots 1}\right) \end{align} も含まれる。このような状態をも含む \(n\) qubit の量子状態の指定を、スタビライザー形式では \(n\) 個のパウリ演算子を選び出すだけで効率的に行える。量子状態が \(\ket{00\cdots 0}\) から \(\ket{11\cdots 1}\) のどれかである、と約束されていても、\(n\) bit の古典リソースが必要となることを考えると、かなりうまい指定方法である。

補足. なぜスタビライザーと呼ばれるか

この形式がスタビライザー形式と呼ばれるのは、群論における "stabilizer" という言葉を拝借しているためである。群論において "stabilizer subgroup" とは、群作用の文脈で使われる言葉で、日本語では 安定化部分群という。

群がどういうものかは既知として、まず群作用について説明しよう。群作用とは、群 \(G\) の構造を壊さずに、\(G\) のそれぞれの元 \(g\) をある集合 \(A\) の元 \(a\) に作用させる (\(ga\)と書く) ような演算規則・構造のことである。\(g,h\in G\) のとき、\(g(ha) = (gh)a\) となっていれば、その演算規則は群作用と呼べる。

さて、安定化部分群は、以下で定義される。
ある \(a\in A\) について、\(a\) を不変に保つような群 \(G\) の元の集合を、安定化部分群と呼ぶ。これを \(\mathcal{S}_{G}(a)\) と書くと \begin{align} \mathcal{S}_{G}(a) = \{g\in G |ga = a\} \end{align}
スタビライザー形式では、パウリ演算子の集合 \(\mathcal{P}\) の中で \(n\) 個の可換な元 \(S_i\) を取り出し、そのそれぞれについて固有値が \(+1\) となる固有状態として、量子状態を指定した。つまり、指定される状態を \(\ket{\psi_{\{S_i\}}}\) とすれば、\(S_i\ket{\psi_{\{S_i\}}} = \ket{\psi_{\{S_i\}}}\) となる。これは安定化部分群の定義と全く同じように見えるだろう。 したがって、\(\mathcal{P}\) が安定化部分群の定義における \(G\) に対応する。(パウリ演算子の集合は通常の行列の積によって群をなし、パウリ群とも呼ばれる。) また、\(A\) は \(n\) qubit のすべての量子状態の集合、\(a\) は \(\ket{\psi_{\{S_i\}}}\) に対応する。

そうすると \(\{S_i\}_{i=1}^n\) が \(\mathcal{S}_G(a)\) に対応していてほしいと思うわけだが、実はそうはなっていない。\(\{S_i\}_{i=1}^n\) が群をなしていないことが原因である。例えば、\(S_i = Z_i\) と選んだときを考えてみれば \begin{align} S_i S_j = Z_i Z_j \not\in \{S_i\}_{i=1}^n \end{align} となって群にならないことは明らかである。しかしながら実は、\(\{S_i\}_{i=1}^n\) は \(\mathcal{S}_G(a)\) を生成する集合となっている。(らしい。証明はぱっと思いつかなかったので詳しい人教えてください。)