Yao 입문 1 (GHZ 상태 작성)

목적



Julia의 양자 계산 시뮬레이션 패키지에서 "Yao.jl"이라는 것을 찾았으므로 조금 놀아 보자.
이번에는 GHZ 상태를 작성하면서 기본적인 조작 보법을 배운다.

도구를 모으다


   using Yao
   using BitBasis
   using Plots
   gr()

양자 회로 작성


   circuit = chain( # {ではない}
    4,                            #4-qubit
    # 以降の操作の順番は量子回路の入力から出力への順番に対応している。
    put(1=>X),                    #1番目のqubitにPauli-X 
    repeat(H,2:4),                #2~4番目のqubitにHadamard
    control(2, 1=>X),       #2から1に向けてcontrol-X    
    control(4, 3=>X),
    control(3, 1=>X),             
    control(4, 3=>X),
    repeat(H, 1:4),
)

초기 상태 만들기



양자 상태를 나타내는 것으로 ArrayReg가 준비되어 있습니다. 상태 $\left|0000\right>$를 만드는 방법에는 두 가지가 있습니다.
   zero_state(4)
   ArrayReg(bit"0000")

초기 상태에 회로를 작용


   apply!(zero_state(4), circuit)

관측하다



관측하려면 지금까지
- 초기 상태 생성
- 회로 작용
- 관측
를 계속해서 해야 하지만 이것에는 파이프 |> 를 사용할 수 있다
관측을 1000회 실시하면
   results = zero_state(4) |> circuit |> r->measure(r, nshots=1000)

이것을 마지막으로 히스토그램으로 보고 싶지만, results는 BitStr형으로 되어 있어 이것을 정수로 되돌릴 필요가 있다. 이것에는 BitBasis의 함수로서 bint가 준비되어 있으므로 이것을 작용시키면 좋다.
    num_result=bint.(results) #整数値に変換
    histogram(num_result)

그렇다면



된다. 예상했던 것처럼
$$\left|GHZ\right>=\frac{1}{\sqrt{2}}\left|0000\right>+\frac{1}{\sqrt{2}}\left|1111\right>$ $
된다.

다음 번



다음 번에서는 초학자에게는 상상하기 어려운 Order finding의 출력 상태를 살펴본다.

참고문헌



Yao.jl 공식 문서

좋은 웹페이지 즐겨찾기