common.title

Docs
Quantum Circuit
TYTAN CLOUD

QUANTUM GAMING


autoQAOA
Desktop RAG

Overview
Terms of service

Privacy policy

Contact
Research

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