LoginSignup
22
10

More than 3 years have passed since last update.

100マス量子回路計算やってみよう〜初級編〜

Last updated at Posted at 2019-12-01

駒場祭で、100マス積分や100マスホモロジー計算を配布していたのを見て、ふと思いつきました。
みなさん、やってみましょう。

やり方

左列に書いてある量子回路に、上行に書いてある量子回路をつなげてできる状態をマス目に書いてください。
ただし、初級編では

\begin{eqnarray}
|0> &=& \begin{pmatrix} 1 \\ 0 \end{pmatrix}\\
|1> &=& \begin{pmatrix} 0 \\ 1 \end{pmatrix}\\
|+> &=& \frac{1}{\sqrt 2}\begin{pmatrix} 1 \\ 1 \end{pmatrix}\\
|-> &=& \frac{1}{\sqrt 2}\begin{pmatrix} 1 \\ -1 \end{pmatrix}\\
|i> &=& \frac{1}{\sqrt 2}\begin{pmatrix} 1 \\ i \end{pmatrix}\\
|-i> &=& \frac{1}{\sqrt 2}\begin{pmatrix} 1 \\ -i \end{pmatrix}\\
\end{eqnarray}

のいずれかを記入します。これらの定数倍($-|i>$や$i|->$など)になった場合は、定数は無視して記入します。
たったこれだけしかないので、「これ重複しとるやん」みたいなのが多数ありますが、気にせずやっていきましょう。

初級編

100マス量子計算超初級編.svg.png

キミはできたかな?

これを暗算できないと量子プログラミングできないかというと、全然そんなことないんですが。やっぱりできた方が便利です。
毎日練習して、量子回路暗算王を目指しましょう。

中級編、上級編?

初級編を作ってみたら、回路が場所を取って厳しい、ということが分かりました。
また、今以上に複雑な解だと、どうやって答えを記述するか、という問題も出てきます。

うまいこと作れたら、これからも出していきます。

答えがほしい

以下をコピペすれば、Blueqatで答えが求まります。

import numpy as np
from blueqat import Circuit

# 初級編
tate = [
    Circuit().i[0],
    Circuit().h[0],
    Circuit().x[0],
    Circuit().y[0],
    Circuit().z[0],
    Circuit().s[0],
    Circuit().h[0].x[0],
    Circuit().h[0].y[0],
    Circuit().h[0].z[0],
    Circuit().h[0].s[0],
    Circuit().x[0].s[0],
]

yoko = [
    Circuit().i[0],
    Circuit().s[0],
    Circuit().z[0],
    Circuit().y[0],
    Circuit().h[0],
    Circuit().x[0],
    Circuit().h[0].s[0],
    Circuit().h[0].z[0],
    Circuit().h[0].y[0],
    Circuit().h[0].x[0],
    Circuit().x[0].s[0],
]

states = [
    (np.array([1, 0], dtype=complex), '|0>'),
    (np.array([0, 1], dtype=complex), '|1>'),
    (np.array([1, 1], dtype=complex) / np.sqrt(2), '|+>'),
    (np.array([1, -1], dtype=complex) / np.sqrt(2), '|->'),
    (np.array([1, 1j], dtype=complex) / np.sqrt(2), '|i>'),
    (np.array([1, -1j], dtype=complex) / np.sqrt(2), '|-i>'),
]
def get_answer(c1, c2):
    state = (c1.copy() + c2).run(ignore_global=True)
    for ref, ans in states:
        if np.allclose(ref, state):
            return ans
    raise ValueError(f'Unexpected states. {state}')

for c1 in tate:
    for c2 in yoko:
        print('{:4}'.format(get_answer(c1, c2)), end=' ')
    print('')
22
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
10