common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


Overview
Contact
Event
Project
Research

Terms of service (Web service)

Terms of service (Quantum and ML Cloud service)

Privacy policy


Sign in
Sign up
common.title

ZゲートとCZゲートで操作する状態ベクトル

Yuichiro Minato

2020/12/20 11:47

#量子ゲート

はじめに

量子コンピュータでは状態ベクトルというベクトルを操作することで、ビット本体ではなく、組み合わせを操作することができます(????)

その際の操作方法としてZゲートやCZゲートを使うことで簡単に操作ができます。みてみます。ちょっとみにくいですが、[]は行列のかっこを表してるとします。

状態ベクトル

状態ベクトルは量子ビットの数に対応して、その組み合わせを状態として表記したものです。

例えば、2量子ビットは

[a] >>00
[b] >>01
[c] >>10
[d] >>11

のように、縦ベクトルの要素それぞれが、00,01,10,11のように組み合わせの数が対応します。

3量子ビットになると、

[a] >>000
[b] >>001
[c] >>010
[d] >>011
[e] >>100
[f] >>101
[g] >>110
[h] >>111

このように組み合わせの数は8通りとなり、状態ベクトルは量子ビットが1増えるごとに2倍の大きさになっていきます。その際に、この状態ベクトル自体を任意で操作できるのが量子コンピュータとなり、このような性質を使って認識回路を作ったりしてます。

状態ベクトルの準備

量子ビットは初期状態では全ての量子ビットの値は0です。表現される状態ベクトルは、

[1]
[0]
[0]
[0]

のように、特定のビットの組み合わせの要素が1になります。ちなみに状態ベクトルの要素の絶対値の2乗が対応するビットの組み合わせの出現確率に対応します。

上記は2量子ビットの初期状態のテンソル積となり、00が100%で出現すると読めます。

Hゲートを適用

アダマールゲートHを全ての量子ビットに適用することで、状態ベクトルを揃えることができます。

[1]
[1]
[1]
[1]

すべての状態ベクトルの要素を1にできます。これで準備完了です。

2量子ビットの際の状況見てみる

今回やりたいのは、ビットそのものの操作ではなく、ビットの組み合わせをビットと見立てて、それを操作するです。

それによって、2量子ビットだけで、4つの状態を作ることができて、さらにそれぞれの状態を操作することで、16パターンを作り出すことができました。

0000から1111は、状態ベクトルの、

[-1]
[-1]
[-1]
[-1]

から、

[1]
[1]
[1]
[1]

までの16パターンに対応します。0を-1に読み替えて、1と-1を任意で切り替えられればパターンが作り出せます。

Zゲート、CZゲートを使う。

ZゲートとCZゲートを使います。Zゲートは2*2のゲートです。

Z = [1 0]
[0 -1]

CZゲートは4*4のゲートです。コントロールビットとターゲットビットがあり、多少形が変わります。

CZ = [1 0 0 0]
[0 1 0 0]
[0 0 1 0]
[0 0 0 -1]

早速順番にパターンを

簡単なものから順番にやってみます。

1111 bin(15)

1111は簡単です。初期状態の00の量子ビットの両方にHゲートをかけます。これは今回の初期状態に近いので、一番基本的な形です。10進数で15に対応します。

[1]
[1]
[1]
[1]

量子回路はこれだけ。

|0> --H--

|0> --H--

1110 bin(14)

これを作るには最後の量子ビットだけを-1にします。(0を-1に読み替え流必要があります)。これは簡単です。CZゲートそのものです。

[1 0 0 0] [1] = [ 1]
[0 1 0 0] [1] [ 1]
[0 0 1 0] [1] [ 1]
[0 0 0 -1] [1] [-1]

量子回路は、

|0> --H--*--
|
|0> --H--*--

どんどんいきます

1100 bin(12)

Zゲートを1番目の量子ビットにかけます。まずテンソル積というもので、Zゲートと単位行列Iを計算ののち、、、

[1 0]⊗[1 0] = [1 ]
[0 -1] [0 1] [ 1 ]
[ -1 ]
[ -1]

量子回路は、

|0> --H--Z--

|0> --H-----

1010 bin(10)

これはZゲートを2番目の量子ビットにかけます。こちらは、まずテンソル積というもので、単位行列IとZゲートを計算ののち、、、

[1 0]⊗[1 0] = [1 ]
[0 1] [0 -1] [ -1 ]
[ 1 ]
[ -1]

量子回路は、

|0> --H-----

|0> --H--Z--

1001 bin(9)

両方にZゲートかけます。

[1 0]⊗[1 0] = [1 ]
[0 -1] [0 -1] [ -1 ]
[ -1 ]
[ 1]

量子回路は、

|0> --H--Z--

|0> --H--Z--

1101 bin(13)

これは1100のパターンにCZかければいけそう

[1 ][ 1] = [ 1]
[ 1 ][ 1] [ 1]
[ 1 ][-1] [-1]
[ -1][-1] [ 1]

量子回路は、

|0> --H--Z--*--
|
|0> --H-----*--

1011 bin(11)

これは、1010にCZでいけそう。

[1 ][ 1] = [ 1]
[ 1 ][-1] [-1]
[ 1 ][ 1] [ 1]
[ -1][-1] [ 1]

量子回路は、

|0> --H-----*--
|
|0> --H--Z--*--

1000 bin(8)

これは1001にCZでいけそう

両方にZゲートかけます。

[1 ][ 1]
[ 1 ][-1]
[ 1 ][-1]
[ -1][ 1]

量子回路は、

|0> --H--Z--*--
|
|0> --H--Z--*--

0100 bin(4)

1000のパターンの最初の2つの状態ベクトルを入れ替えればいけそうです。2番目の量子ビットにXをかけます。

[1 0]⊗[0 1] = [0 1 ]
[0 1] [1 0] [1 0 ]
[ 0 1]
[ 1 0]

こちらを準備すれば、

[0 1 ][ 1]
[1 0 ][-1]
[ 0 1][-1]
[ 1 0][-1]

量子回路は、

|0> --H--Z--*-----|
|0> --H--Z--*--X--

0101 bin(5)

1010からいけそうです。1と0を入れ替えればOK

[0 1 ][ 1]
[1 0 ][-1]
[ 0 1][ 1]
[ 1 0][-1]

量子回路は、

|0> --H--------

|0> --H--Z--X--

0011 bin(3)

1100で、1と0を入れ替えればいけそう。

[0 1]⊗[1 0] = [ 1 0]
[1 0] [0 1] [ 0 1]
[1 0 ]
[0 1 ]

から、

[ 1 0][ 1]
[ 0 1][ 1]
[1 0 ][-1]
[0 1 ][-1]

量子回路は、

|0> --H--Z--X--

|0> --H--------

0111 bin(7)

1101をいれかえれば。。。

[ 1 0][ 1]
[ 0 1][ 1]
[1 0 ][-1]
[0 1 ][ 1]

量子回路は、

|0> --H--Z--*--X--
|
|0> --H-----*-----

0110 bin(6)

1001をいれかえれば、、、

[ 1 0][ 1]
[ 0 1][-1]
[1 0 ][-1]
[0 1 ][ 1]

量子回路は、

|0> --H--Z--X--

|0> --H--Z-----

0010 bin(2)

1000を並びかえれば、

[ 1 0][ 1]
[ 0 1][-1]
[1 0 ][-1]
[0 1 ][-1]
|0> --H--Z--*--X--
|
|0> --H--Z--*-----

0001 bin(1)

これも1000を並び替えれば、両方にXをかけると、

[0 1]⊗[0 1] = [ 0 1]
[1 0] [1 0] [ 1 0]
[0 1 ]
[1 0 ]

これより、

[ 0 1][ 1]
[ 1 0][-1]
[0 1 ][-1]
[1 0 ][-1]

回路は、

|0> --H--Z--*--X--
|
|0> --H--Z--*--X--

0000 bin(0)

多分0001にCZかければ、

[1 ][-1]
[ 1 ][-1]
[ 1 ][-1]
[ -1][ 1]

回路は、

|0> --H--Z--*--X--*--
| |
|0> --H--Z--*--X--*--

一通りできた

とりあえずできました。より効率的な形もあると思うので、探してみてください。パズルみたいで面白かったです。

© 2025, blueqat Inc. All rights reserved