10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

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

駒場祭で、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('')
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
10
Help us understand the problem. What are the problem?