# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# + [markdown] colab_type="text" id="A46fkXZnkD6Z"
# ## 1-4. 回路図の基礎
# -

# この章では、量子ビットと演算をどのように表現するかを学んできた。最後に量子操作を記述する量子回路図についてまとめておこう。論理回路や電気回路の図にも一定のルールや記号があるように、量子回路についてもある程度標準化されている記法が存在する。
#
# 量子回路図は一般に以下のような形をしている。
#
# ![図1-4-回路図](figs/1/1-4_example.png)
#
# 主な構成要素は
#
# - 量子ビット: 回路図の１つ１つの横線が、それぞれ１つの量子ビットに対応している。左端の$|0\rangle$は、それぞれの量子ビットが$|0\rangle$に初期化されていることを表す。
# - 量子ゲート：回路図にある箱や縦線が、量子ゲートを表す。一般に、$n$量子ビットゲートは作用する$n$個の量子ビット(横線)にまたがる箱で表される。それ以外に、特殊な書き方で表すゲートがいくつかあり、例えば制御NOTゲート、SWAPゲート、制御$U$演算 $\Lambda(U) = |0\rangle \langle 0| \otimes I + |1\rangle \langle 1| \otimes U$は以下のように表される。
#
#     ![図1-4-特殊回](figs/1/1-4_specialcircuit.png)
#
# - 測定：右端にあるメーターのような記号で、量子ビットに対する測定を行うことを表す。
#
# 回路図の読み方において最も重要なのは、回路図は**左から右に読む**ということである。つまり、楽譜のように左から順に量子ゲートや測定操作を行うことで計算が進んでいく。よって冒頭の回路は、
#
# $$
#  \Lambda(X)_{1,2} H(1) |00\rangle
# $$
#
# という状態を作った後、１番目の量子ビットを測定する操作を表す。
#
# (詳細はNielsen-Chuang冒頭`Nomenclature and notation`の`Frequently used quantum gates and circuit symbols`参照)

StarcoderdataJupyterScriptsDedupFiltered