🎲

足し算から始めよう

2020/09/29に公開

前回の記事では、キュービットを導入した。この記事ではキュービットでの足し算を考えてみよう。
足し算といっても、ここでは2進数の繰り上がりのない計算を考える。
(mod2 の足し算とよんでも良い)
その演算を\oplusと書くことにすると、演算のルールは

0 \oplus 0 = 0,\\ 1 \oplus 0 = 1,\\ 0 \oplus 1 = 1,\\ 1 \oplus 1 = 0

となる。最後の部分だけ普通の足し算と異なるが、これは繰り上がりした部分を無視して
下の桁だけ見たと思えば良い。

古典回路

まずこれを古典回路で作るにはどうすればいいだろうか?
上の演算ルールは、xor= exclusive or= 排他的論理和 と呼ばれるものと同じになっている。
排他的論理和とは2つの入力が同じ時に0、異なるときに1を返す論理演算である。

そのため、
2つのビットの入力に対して1つの演算素子で実現できる (もちろん等価な回路はNANDから構成できる)。

Wikipedia から図を借りると、

とかける。ここでQ = A\oplus Bである。

量子回路

さて、これに対応する量子回路は、少し考えなければならない。
なぜなら前の記事でも触れたとおり、量子状態を操作できるのは、測定を別にすると
基本的にユニタリー変換だけであるからだ。
ユニタリー変換はベクトルの回転のようなものであり、状態を変化させたあと、もとに戻すことも可能である。つまり、結果から入力がいつでも追跡できる。

一方で上の古典回路は、入力が2つ、出力が1つなので、出力をみても入力が何だったかを知ることはできない (エントロピーが増大している)。

量子回路では、足し算もユニタリーにするために、補助ビットをつけて情報の喪失を防ぐ。
つまり、2つのキュービットを入力して2つのキュービットを出力、片方のキュービットに結果が格納されるようにする。図的には、

という感じである。ここでabは0か1で、真ん中の
黒い箱はブラックボックスで今から考える。

このような動作をするものは、制御Not (controled not = CNOT)とよばれ、

の様に図示される。これは、以下のように動作する。

  • a=0のとき、何もせず、入力がそのまま出力になる
  • a=1のとき、bのビットが反転する。すなわち、b=0なら1、b=1なら0

つまり、a側がコントローラーでb側がターゲットになっている(ちょうど
的(まと)のような記号になってる。exlusive or の記号とも言う)。
このときに、下側に結果が格納される。

4パターンすべて確かめてみよう。

  1. a=0b=0のとき。このときには、何もしない約束だったので出力は、上から順に00である。上で見た繰り上がりのない足し算の結果も0なので合っている。
  2. a=0b=1のとき。このときには、何もしない約束だったので出力は、上から順に01である。上で見た繰り上がりのない足し算の結果も1なので合っている。
  3. a=1b=0のとき。このときには、bのビットを反転するので出力は、上から順に11である。上で見た繰り上がりのない足し算の結果も1なので合っている。
  4. a=1b=1のとき。このときには、bのビットを反転するので出力は、上から順に10である。上で見た繰り上がりのない足し算の結果も0なので合っている。

以上により、

と書いても良いことになる。

この様に古典回路でできることは、量子回路でも同様のことができるが、一方で基本的にユニタリー演算しかできないために、制約があることに注意しなければならない。

Discussion