"""
量子ビット、量子回路の生成と視覚化まで
"""

#start>>

#Numpyをインポート
import numpy as np
#Qiskitからモジュールを全てインポート
from qiskit import *

#3量子ビットで構成される量子回路QuantumCircuitを作成。
circ = QuantumCircuit(3)

#GHZ(グリーンバーガー＝ホーン＝ツァイリンガー)状態を生成する。
#量子ビット|0>と|1>を重ね合わせた状態のこと。
#内部の計算は(|0>+|1>)/√2　で重ね合わせた状態を表現。

#まずは量子ビット|0>にHゲートを付与し、|0>と|1>の重ね合わせ状態を生成。(...(|0>+|1>)/√2...)
circ.h(0)

#制御量子ビット0(何の変化も受けずにそのままの状態で出力されるビット) と、
#ターゲット量子ビット1(制御ビットの内容によって行われる操作が違ってくる) に、
#CNOTゲートを追加する(CNOTゲート... .CX(制御ビット, ターゲットビット)...)
circ.CX(0,1)

#制御量子ビット0 と、
#ターゲット量子ビット2に、CNOTゲートを追加する。
circ.CX(0,2)

    #処理結果　>> <qiskit.circuit.instructionset.InstructionSet at 0x7fbec6ff9e80>

#量子回路の視覚化
circ.draw()

"""
q1--H---●----●--　　Hゲートを追加、q1とq2でCNOTゲート、q1とq3でCNOTゲートで接続
        |    |
q2------＋---|--　　q1とq2でCNOTゲートで接続
             |
q3-----------＋-　　q1とq3でCNOTゲートで接続
"""
#>>end

