量子回路:1ビットと2ビットの量子素子
テレポートなどというファンキーな、文字どおり「少し往っちゃってる」話になりましたが、ここからは話をぐっと現実的にして、量子状態を使って計算機をつくるということを考えましょう。
通常計算機を作るには計算素子があって、それを組み合わせていく訳ですが、この場合計算素子としてどのようなものをとってくれば任意の計算ができるのか、というのが問題になる訳です。じつはご存知かもしれませんが、足し算、引き算、かけ算、割り算ができればそれを組み合わせて何でもできます。いま数字を二進数表示してやれば .not. と .xor. と .and. の三つの操作に帰着されます。
量子矢印を使って同じような基本素子の組を作れるでしょうか?
ここからは暗号ではないので、「上下方向コーディング」にきめて二つのキュービット|0>=|↑>、|1>=|↓>を考えます。このキュービットにできる操作として、すぐに思いつくものをいくつか書くと
|
I : |0>→|0> 、|1>→|1>
|
|
|
X : |0>→|1> 、|1>→|0> |
 |
|
Z : |0>→|0> 、|1>→ー|1> |
 |
|
最初の I は恒等変換です。 つぎの X は他でもないキュビット上の .not. です。Z は状態は変えず相対的符号(さしあたり意味は不明)を付けます。
つぎに2つのキュビットに作用する素子を考えたいのですが、量子的操作には「時間反転」「確率保存」といった自然法則の根本が反映された「ユニタリ性」と呼ばれる制限があるので、何でも出来るという訳ではありません。詳しくは後ほどと戻ってきますが、まずは「ある操作があるとその逆の操作も無いといけない」というのが外せない条件です。当然2キュビット入力したら2キュビット出力されないとだめです。次の例は特に有用です
CN:
|
|0 0>→|0 0> 、|0 1>→|0 1>、
|1 0>→|1 1> 、|1 1>→|1 0>
|
 |
これだと上位ビット はそのまますり抜け、一方下位ビット の方は上が 0 のときはそのままで 1 のときに .not. の作用をうけます 。少し考えると
CN :|x y>→|x' y'> ; x' = x、 y' = x .xor. y
という形式的な表記ができます。この変換は通常「制御否定 Control-Not」と呼ばれます。当然ながらCNの出力の下位ビットのみを取り出せばは.xor.になっているので、これで量子的な .not. と .xor. をキュビット上に作れた事になります。あと .and.ができればめでたしなのですが、実は2キュビットだけの演算ではどうしてもできません。実際絶対にできない事が簡単に証明できます。 |