上一個筆記本中提供的程式碼只能修正 𝑋翻轉錯誤。現在,我們提供一個程式碼,能修正 𝑍翻轉錯誤。
Alice 想要傳送一個單量子位元狀態 |𝜓⟩ 給鮑勃,但透過通訊傳輸管道有機率p會發生Z翻轉錯誤 。如果發生錯誤,則狀態會扭曲為:
|⟩ = 𝑍| 𝜓⟩ = 𝑍( 𝛼| 0⟩+𝛽| 1⟩)=𝛼| 0⟩−𝛽|1⟩
Bob 無法判斷是否發生了錯誤,因此有機率 𝑝 他會收到錯誤的訊息。
因此,Alice和Bob使用糾錯程序。
為了防止此類錯誤,我們將使用重複程式碼,但基礎不同。現在,
|0⟩→|⟩=|+++⟩,
|1⟩→|⟩=|−−−⟩.
對於此程式碼基礎,狀態中的量子位 |𝜓⟩ 被編碼為
| 𝜓⟩ | 00 ⟩ = ( 𝛼| 0⟩+𝛽|1⟩)|00⟩→|⟩ = 𝛼| +++⟩+𝛽|−−−⟩.
這是透過以下電路完成的。
import stac
enc_circ = stac.Circuit.simple(3)
enc_circ.append('CX', 0, 1)
enc_circ.append('CX', 0, 2)
for i in range(3):
enc_circ.append('H', i)
enc_circ.draw()
錯誤檢測策略與之前相同。Bob使用了一個電路來比較兩對量子位元的值,但以正/負為基礎。這是使用以下電路來完成的。
synd_circ_expanded = stac.Circuit.simple(5)
synd_circ_expanded.append('H', 0)
synd_circ_expanded.append('CX', 0, 3)
synd_circ_expanded.append('H', 0)
synd_circ_expanded.append('TICK')
synd_circ_expanded.append('H', 1)
synd_circ_expanded.append('CX', 1, 3)
synd_circ_expanded.append('H', 1)
synd_circ_expanded.append('TICK')
synd_circ_expanded.append('H', 1)
synd_circ_expanded.append('CX', 1, 4)
synd_circ_expanded.append('H', 1)
synd_circ_expanded.append('TICK')
synd_circ_expanded.append('H', 2)
synd_circ_expanded.append('CX', 2, 4)
synd_circ_expanded.append('H', 2)
synd_circ_expanded.append('TICK')
synd_circ_expanded.append('M', 3)
synd_circ_expanded.append('M', 4)
synd_circ_expanded.draw()
在每個區塊中,首先我們使用 Hadamard 閘切換到運算基礎,然後使用以下方法將量子位元的值傳輸到輔助量子位元: 𝐶𝑋 門。最後,我們使用Hadamard門轉換回正/負基。我們可以如下簡化該電路,並利用以下事實: = 𝐼
synd_circ = stac.Circuit.simple(5)
for i in range(3):
synd_circ.append('H', i)
synd_circ.append('TICK')
synd_circ.append('CX', 0, 3)
synd_circ.append('CX', 1, 3)
synd_circ.append('CX', 1, 4)
synd_circ.append('CX', 2, 4)
synd_circ.append('TICK')
for i in range(3):
synd_circ.append('H', i)
synd_circ.append('TICK')
synd_circ.append('M', 3)
synd_circ.append('M', 4)
synd_circ.draw()
為了確定syndrome,我們可以執行以下操作
circ = stac.Circuit.simple(5)
# encode the 0 state
#circ.append('X',0)
circ += enc_circ
# # add an error
circ.append('TICK')
circ.append('Z', 2)
circ.append('TICK')
# # do a syndrome measurement
circ += synd_circ
# draw to make sure you we understand what is happening
circ.draw()
# sample the output 10 times
circ.sample(10)
因此可以推斷出以下表格
Syndrome | Inferred error |
---|---|
00 | I |
01 | |
10 | |
11 |
因此可以透過synfrome回推損壞的區域並修復
參考資料:https://github.com/abdullahkhalids/qecft