Implementasi Qiskit
Di pelajaran ini, kita mengimplementasikan beberapa ide dari pelajaran tentang entanglement in action, menggunakan Qiskit.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer
from qiskit import __version__
print(__version__)
2.1.1
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram, array_to_latex
from qiskit.result import marginal_distribution
from qiskit.circuit.library import UGate
from numpy import pi, random
Berikut ini adalah implementasi Circuit kuantum dari protokol teleportasi.
qubit = QuantumRegister(1, "Q")
ebit0 = QuantumRegister(1, "A")
ebit1 = QuantumRegister(1, "B")
a = ClassicalRegister(1, "a")
b = ClassicalRegister(1, "b")
protocol = QuantumCircuit(qubit, ebit0, ebit1, a, b)
# Prepare ebit used for teleportation
protocol.h(ebit0)
protocol.cx(ebit0, ebit1)
protocol.barrier()
# Alice's operations
protocol.cx(qubit, ebit0)
protocol.h(qubit)
protocol.barrier()
# Alice measures and sends classical bits to Bob
protocol.measure(ebit0, a)
protocol.measure(qubit, b)
protocol.barrier()
# Bob uses the classical bits to conditionally apply gates
with protocol.if_test((a, 1)):
protocol.x(ebit1)
with protocol.if_test((b, 1)):
protocol.z(ebit1)
display(protocol.draw(output="mpl"))

Circuit ini menggunakan beberapa fitur Qiskit yang belum kita lihat di pelajaran sebelumnya, termasuk fungsi barrier dan if_test.
Fungsi barrier membuat pemisah visual yang membuat diagram Circuit lebih mudah dibaca, dan juga mencegah Qiskit melakukan berbagai penyederhanaan dan optimasi di seberang barrier saat kompilasi ketika Circuit dijalankan di hardware nyata.
Fungsi if_test menerapkan operasi secara kondisional tergantung pada bit atau register klasik.
Circuit ini pertama-tama menginisialisasi agar berada dalam keadaan (yang bukan bagian dari protokol itu sendiri), diikuti oleh operasi Alice, lalu pengukurannya, dan akhirnya operasi Bob. Untuk menguji bahwa protokol bekerja dengan benar, kita akan menerapkan Gate single-qubit yang dibuat secara acak ke keadaan yang diinisialisasi dari untuk mendapatkan vektor keadaan kuantum acak yang akan diteleportasi. Dengan menerapkan invers (yakni, conjugate transpose) dari Gate tersebut ke setelah protokol dijalankan, kita bisa memverifikasi bahwa keadaan telah diteleportasi dengan mengukur untuk melihat bahwa ia telah kembali ke keadaan .
Pertama kita akan memilih Gate Qubit uniter secara acak.
random_gate = UGate(
theta=random.random() * 2 * pi,
phi=random.random() * 2 * pi,
lam=random.random() * 2 * pi,
)
display(array_to_latex(random_gate.to_matrix()))
Sekarang kita akan membuat Circuit pengujian baru yang pertama menerapkan Gate acak kita ke lalu menjalankan Circuit teleportasi, dan akhirnya menerapkan invers dari Gate acak kita ke Qubit dan mengukur. Hasilnya seharusnya dengan kepastian.
# Create a new circuit including the same bits and qubits used in the
# teleportation protocol.
test = QuantumCircuit(qubit, ebit0, ebit1, a, b)
# Start with the randomly selected gate on Q
test.append(random_gate, qubit)
test.barrier()
# Append the entire teleportation protocol from above.
test = test.compose(protocol)
test.barrier()
# Finally, apply the inverse of the random unitary to B and measure.
test.append(random_gate.inverse(), ebit1)
result = ClassicalRegister(1, "Result")
test.add_register(result)
test.measure(ebit1, result)
display(test.draw(output="mpl"))

Terakhir, mari kita jalankan simulator Aer pada Circuit ini dan plot histogram dari outputnya. Kita akan melihat statistik untuk ketiga bit klasik: bit paling bawah/paling kiri seharusnya selalu menunjukkan bahwa Qubit berhasil diteleportasi ke sementara dua bit lainnya seharusnya kira-kira seragam.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))
Kita juga bisa memfilter statistik untuk fokus hanya pada Qubit hasil pengujian jika kita mau, seperti ini:
filtered_statistics = marginal_distribution(statistics, [2])
display(plot_histogram(filtered_statistics))
Superdense coding
Superdense coding adalah protokol yang, dalam arti tertentu, mencapai tujuan yang komplementer dengan teleportasi. Daripada memungkinkan transmisi satu Qubit menggunakan dua bit komunikasi klasik (dengan biaya satu e-bit dari entanglement), ia memungkinkan transmisi dua bit klasik menggunakan satu Qubit komunikasi kuantum (sekali lagi, dengan biaya satu e-bit dari entanglement).
Lebih rincinya, kita punya pengirim (Alice) dan penerima (Bob) yang berbagi satu e-bit entanglement. Sesuai konvensi yang berlaku untuk pelajaran ini, ini berarti Alice memegang Qubit Bob memegang Qubit dan bersama-sama pasangan berada dalam keadaan Alice ingin mengirimkan dua bit klasik ke Bob, yang akan kita sebut dan dan dia akan melakukan ini dengan mengirimkan satu Qubit kepadanya.
Adalah wajar untuk memandang pencapaian ini sebagai kurang menarik dibanding yang dilakukan teleportasi. Mengirimkan Qubit kemungkinan akan jauh lebih sulit daripada mengirimkan bit klasik untuk waktu yang bisa kita perkirakan sehingga menukar satu Qubit komunikasi kuantum dengan dua bit komunikasi klasik, dengan biaya satu e-bit pula, hampir tidak tampak sepadan. Namun, ini tidak berarti bahwa superdense coding tidak menarik, karena tentu saja ia sangat menarik.
Sesuai tema pelajaran ini, salah satu alasan mengapa superdense coding menarik adalah bahwa ia mendemonstrasikan penggunaan entanglement yang konkret dan (dalam konteks teori informasi) cukup mencolok. Sebuah teorema terkenal dalam teori informasi kuantum, yang dikenal sebagai Teorema Holevo, menyiratkan bahwa tanpa menggunakan keadaan terbelit bersama, adalah mustahil untuk mengkomunikasikan lebih dari satu bit informasi klasik dengan mengirimkan satu Qubit. (Teorema Holevo lebih umum dari ini. Pernyataan pastinya bersifat teknis dan memerlukan penjelasan, tetapi ini adalah salah satu konsekuensinya.) Jadi, melalui superdense coding, entanglement bersama secara efektif memungkinkan penggandaan kapasitas pembawa informasi klasik dari pengiriman Qubit.
Protokol
Diagram Circuit kuantum berikut menggambarkan protokol superdense coding:

Dalam kata-kata, inilah yang Alice lakukan:
-
Jika Alice melakukan Gate pada Qubitnya (dan jika dia tidak melakukannya).
-
Jika Alice melakukan Gate pada Qubitnya (dan jika dia tidak melakukannya).
Alice kemudian mengirimkan Qubitnya kepada Bob.
Yang Bob lakukan ketika menerima Qubit adalah pertama-tama melakukan Gate controlled-NOT, dengan sebagai kontrol dan sebagai target, dan kemudian dia menerapkan Gate Hadamard ke Dia kemudian mengukur untuk mendapatkan dan untuk mendapatkan dengan pengukuran basis standar di kedua kasus.
Analisis
Ide di balik protokol ini sederhana: Alice secara efektif memilih keadaan Bell mana yang ingin dia bagikan dengan Bob, dia mengirimkan Qubitnya kepada Bob, dan Bob mengukur untuk menentukan keadaan Bell mana yang Alice pilih.
Artinya, awalnya mereka berbagi dan tergantung pada bit dan Alice baik membiarkan keadaan ini apa adanya atau menggesernya ke salah satu keadaan Bell lainnya dengan menerapkan atau pada Qubitnya
Aksi Bob memiliki efek berikut pada keempat keadaan Bell:
Ini bisa diperiksa secara langsung, dengan menghitung hasil operasi Bob pada keadaan-keadaan ini satu per satu.
Jadi, ketika Bob melakukan pengukurannya, dia dapat menentukan keadaan Bell mana yang Alice pilih. Untuk memverifikasi bahwa protokol bekerja dengan benar adalah masalah memeriksa setiap kasus:
-
Jika maka keadaan saat Bob menerima adalah Dia mengubah keadaan ini menjadi dan memperoleh
-
Jika maka keadaan saat Bob menerima adalah Dia mengubah keadaan ini menjadi dan memperoleh
-
Jika maka keadaan saat Bob menerima adalah Dia mengubah keadaan ini menjadi dan memperoleh
-
Jika maka keadaan saat Bob menerima adalah Dia mengubah keadaan ini menjadi dan memperoleh (Faktor fase negatif-satu tidak berpengaruh di sini.)
Implementasi superdense coding
Berikut ini adalah implementasi sederhana dari superdense coding di mana kita menentukan Circuit itu sendiri tergantung pada bit yang akan dikirim. Pertama kita akan memilih dua bit yang akan dikirim. (Nanti kita akan memilihnya secara acak, tapi untuk sekarang kita hanya membuat pilihan sembarang.)
c = "1"
d = "0"
Sekarang kita akan membangun Circuit sesuai dengan itu. Di sini kita akan membiarkan Qiskit menggunakan nama default untuk Qubit: untuk Qubit atas dan untuk yang bawah.
protocol = QuantumCircuit(2)
# Prepare ebit used for superdense coding
protocol.h(0)
protocol.cx(0, 1)
protocol.barrier()
# Alice's operations
if d == "1":
protocol.z(0)
if c == "1":
protocol.x(0)
protocol.barrier()
# Bob's actions
protocol.cx(0, 1)
protocol.h(0)
protocol.measure_all()
display(protocol.draw(output="mpl"))

Tidak banyak yang baru di sini, kecuali fungsi measure_all, yang mengukur semua Qubit dan menempatkan hasilnya ke dalam satu register klasik (dan oleh karena itu memiliki dua bit dalam kasus ini).
Menjalankan simulator Aer menghasilkan output yang diharapkan.
result = AerSimulator().run(protocol).result()
statistics = result.get_counts()
for outcome, frequency in statistics.items():
print(f"Measured {outcome} with frequency {frequency}")
display(plot_histogram(statistics))
Measured 10 with frequency 1024
Sekarang mari kita gunakan Qubit tambahan sebagai generator bit acak — pada dasarnya untuk melempar koin yang adil. Kita akan menggunakannya untuk memilih dan secara acak, lalu menjalankan protokol superdense coding.
rbg = QuantumRegister(1, "coin")
ebit0 = QuantumRegister(1, "A")
ebit1 = QuantumRegister(1, "B")
Alice_c = ClassicalRegister(1, "Alice c")
Alice_d = ClassicalRegister(1, "Alice d")
test = QuantumCircuit(rbg, ebit0, ebit1, Alice_d, Alice_c)
# Initialize the ebit
test.h(ebit0)
test.cx(ebit0, ebit1)
test.barrier()
# Use the 'coin' qubit twice to generate Alice's bits c and d.
test.h(rbg)
test.measure(rbg, Alice_c)
test.h(rbg)
test.measure(rbg, Alice_d)
test.barrier()
# Now the protocol runs, starting with Alice's actions, which depend
# on her bits.
with test.if_test((Alice_d, 1), label="Z"):
test.z(ebit0)
with test.if_test((Alice_c, 1), label="X"):
test.x(ebit0)
test.barrier()
# Bob's actions
test.cx(ebit0, ebit1)
test.h(ebit0)
test.barrier()
Bob_c = ClassicalRegister(1, "Bob c")
Bob_d = ClassicalRegister(1, "Bob d")
test.add_register(Bob_d)
test.add_register(Bob_c)
test.measure(ebit0, Bob_d)
test.measure(ebit1, Bob_c)
display(test.draw(output="mpl"))

Menjalankan simulator Aer menunjukkan hasilnya: bit klasik Alice dan Bob selalu sama.
result = AerSimulator().run(test).result()
statistics = result.get_counts()
display(plot_histogram(statistics))

The CHSH game
Contoh terakhir yang akan dibahas dalam pelajaran ini bukan sebuah protokol, melainkan sebuah permainan yang dikenal sebagai permainan CHSH.
Ketika kita berbicara tentang permainan dalam konteks ini, kita tidak sedang membicarakan sesuatu yang dimainkan untuk bersenang-senang atau olahraga, melainkan sebuah abstraksi matematis dalam pengertian teori permainan. Abstraksi matematis dari permainan dipelajari dalam ilmu ekonomi dan ilmu komputer, misalnya, dan keduanya sangat menarik sekaligus berguna.
Huruf CHSH merujuk pada para penulisnya — John Clauser, Michael Horne, Abner Shimony, dan Richard Holt — dari sebuah makalah tahun 1969 di mana contoh ini pertama kali dijelaskan. Mereka tidak menggambarkan contoh ini sebagai permainan, melainkan sebagai eksperimen. Namun deskripsinya sebagai permainan bersifat alami dan intuitif.
Permainan CHSH termasuk dalam kelas permainan yang dikenal sebagai permainan nonlokal. Permainan nonlokal sangat menarik dan memiliki hubungan mendalam dengan fisika, ilmu komputer, dan matematika — menyimpan misteri yang hingga kini masih belum terpecahkan. Kita akan mulai bagian ini dengan menjelaskan apa itu permainan nonlokal, kemudian akan fokus pada permainan CHSH dan apa yang membuatnya menarik.
Permainan nonlokal
Permainan nonlokal adalah permainan kooperatif di mana dua pemain, Alice dan Bob, bekerja sama untuk mencapai hasil tertentu. Permainan ini dijalankan oleh seorang wasit, yang bertindak sesuai pedoman ketat yang diketahui oleh Alice dan Bob.
Alice dan Bob bisa mempersiapkan diri sesuka mereka, tetapi setelah permainan dimulai mereka dilarang berkomunikasi. Kita bisa membayangkan permainan ini berlangsung di sebuah fasilitas keamanan — seolah wasit berperan sebagai detektif dan Alice serta Bob adalah tersangka yang diinterogasi di ruangan berbeda. Tapi cara lain untuk memikirkan situasinya adalah bahwa Alice dan Bob terpisah oleh jarak yang sangat jauh, dan komunikasi dilarang karena kecepatan cahaya tidak memungkinkan dalam waktu berjalannya permainan. Artinya, jika Alice mencoba mengirim pesan ke Bob, permainan sudah selesai sebelum dia menerimanya, begitu pula sebaliknya.
Cara kerja permainan nonlokal adalah wasit pertama-tama mengajukan satu pertanyaan masing-masing kepada Alice dan Bob. Kita akan menggunakan huruf untuk merujuk pada pertanyaan Alice dan untuk pertanyaan Bob. Di sini kita menganggap dan sebagai keadaan klasik, dan dalam permainan CHSH dan adalah bit.
Wasit menggunakan keacakan untuk memilih pertanyaan-pertanyaan ini. Lebih tepatnya, ada probabilitas yang terkait dengan setiap pasangan pertanyaan yang mungkin, dan wasit telah berjanji untuk memilih pertanyaan secara acak, pada saat permainan berlangsung, dengan cara ini. Semua orang, termasuk Alice dan Bob, mengetahui probabilitas-probabilitas ini — tetapi tidak ada yang tahu secara spesifik pasangan mana yang akan dipilih sampai permainan dimulai.
Setelah Alice dan Bob menerima pertanyaan mereka, mereka harus memberikan jawaban: jawaban Alice adalah dan jawaban Bob adalah Sekali lagi, ini adalah keadaan klasik secara umum, dan bit dalam permainan CHSH.
Pada titik ini wasit membuat keputusan: Alice dan Bob menang atau kalah tergantung apakah pasangan jawaban dianggap benar untuk pasangan pertanyaan sesuai dengan seperangkat aturan yang telah ditetapkan. Aturan yang berbeda berarti permainan yang berbeda, dan aturan untuk permainan CHSH secara khusus dijelaskan pada bagian berikutnya. Seperti yang sudah disebutkan, aturan diketahui oleh semua orang.
Diagram berikut memberikan representasi grafis dari interaksi tersebut.

Ketidakpastian tentang pertanyaan mana yang akan diajukan, dan khususnya fakta bahwa setiap pemain tidak mengetahui pertanyaan pemain lain, membuat permainan nonlokal menjadi tantangan bagi Alice dan Bob — sama seperti tersangka yang berkolusi di ruangan berbeda yang mencoba menjaga cerita mereka tetap konsisten.
Deskripsi yang tepat tentang wasit mendefinisikan sebuah instansi permainan nonlokal. Ini mencakup spesifikasi probabilitas untuk setiap pasangan pertanyaan beserta aturan yang menentukan apakah setiap pasangan jawaban menang atau kalah untuk setiap pasangan pertanyaan yang mungkin.
Kita akan melihat permainan CHSH sebentar lagi, tetapi sebelum itu mari kita akui secara singkat bahwa sangat menarik untuk mempertimbangkan permainan nonlokal lainnya. Faktanya, ini sangat menarik; ada beberapa permainan nonlokal yang cukup sederhana di mana saat ini belum diketahui seberapa baik Alice dan Bob bisa bermain menggunakan keterikatan. Pengaturannya sederhana, tetapi ada kompleksitas yang bekerja — dan untuk beberapa permainan bisa sangat sulit untuk menghitung strategi terbaik atau mendekati terbaik bagi Alice dan Bob. Inilah sifat yang mengejutkan dan tidak intuitif dari model permainan nonlokal.
Deskripsi permainan CHSH
Berikut adalah deskripsi tepat dari permainan CHSH, di mana (seperti di atas) adalah pertanyaan Alice, adalah pertanyaan Bob, adalah jawaban Alice, dan adalah jawaban Bob:
-
Pertanyaan dan jawabannya semuanya adalah bit:
-
Wasit memilih pertanyaan secara seragam secara acak. Artinya, masing-masing dari empat kemungkinan, dan dipilih dengan probabilitas
-
Jawaban menang untuk pertanyaan jika dan kalah sebaliknya. Tabel berikut mengungkapkan aturan ini dengan mencantumkan kondisi menang dan kalah pada jawaban untuk setiap pasangan pertanyaan
Keterbatasan strategi klasik
Sekarang mari kita pertimbangkan strategi untuk Alice dan Bob dalam permainan CHSH, dimulai dengan strategi klasik.
Strategi deterministik
Kita akan mulai dengan strategi deterministik, di mana jawaban Alice adalah fungsi dari pertanyaan yang diterimanya, dan begitu pula jawaban Bob adalah fungsi dari pertanyaan yang diterimanya. Jadi, misalnya, kita bisa menulis untuk mewakili jawaban Alice ketika pertanyaannya adalah dan untuk mewakili jawaban Alice ketika pertanyaannya adalah
Tidak ada strategi deterministik yang bisa memenangkan permainan CHSH setiap saat. Salah satu cara untuk memahami ini adalah dengan memeriksa satu per satu semua strategi deterministik yang mungkin dan memverifikasi bahwa setiap strategi kalah untuk setidaknya satu dari empat pasangan pertanyaan yang mungkin. Alice dan Bob masing-masing bisa memilih dari empat fungsi yang mungkin dari satu bit ke satu bit — yang kita temui dalam pelajaran tentang Single systems — sehingga ada strategi deterministik yang berbeda untuk diperiksa.
Kita juga bisa mereasonkan ini secara analitik. Jika strategi Alice dan Bob menang ketika maka harus ada jika strategi mereka menang ketika maka dan serupa, jika strategi menang untuk maka Jadi, jika strategi mereka menang untuk ketiga kemungkinan tersebut, maka
Ini berarti strategi tersebut kalah dalam kasus terakhir dan di sini menang membutuhkan bahwa Jadi, tidak ada strategi deterministik yang bisa menang setiap saat.
Di sisi lain, mudah untuk menemukan strategi deterministik yang menang dalam tiga dari empat kasus, seperti Dari sini kita menyimpulkan bahwa probabilitas maksimum bagi Alice dan Bob untuk menang menggunakan strategi deterministik adalah
Strategi probabilistik
Seperti yang baru saja kita simpulkan, Alice dan Bob tidak bisa lebih baik dari memenangkan permainan CHSH 75% dari waktu menggunakan strategi deterministik. Tapi bagaimana dengan strategi probabilistik? Apakah bisa membantu Alice dan Bob menggunakan keacakan — termasuk kemungkinan keacakan bersama, di mana pilihan acak mereka berkorelasi?
Ternyata strategi probabilistik sama sekali tidak membantu untuk meningkatkan probabilitas Alice dan Bob menang. Ini karena setiap strategi probabilistik dapat secara alternatif dipandang sebagai pemilihan acak dari strategi deterministik, seperti halnya (seperti yang disebutkan dalam pelajaran Single systems) operasi probabilistik dapat dipandang sebagai pemilihan acak dari operasi deterministik. Rata-rata tidak pernah lebih besar dari maksimum, sehingga strategi probabilistik tidak menawarkan keuntungan apa pun dalam hal probabilitas menang secara keseluruhan.
Jadi, menang dengan probabilitas adalah yang terbaik yang bisa dilakukan Alice dan Bob menggunakan strategi klasik apa pun, baik deterministik maupun probabilistik.
Strategi permainan CHSH
Pertanyaan alami yang perlu ditanyakan saat ini adalah apakah Alice dan Bob bisa berbuat lebih baik menggunakan strategi kuantum. Secara khusus, jika mereka berbagi keadaan kuantum yang terikat seperti yang disarankan gambar berikut, yang bisa mereka persiapkan sebelum memainkan permainan, apakah mereka bisa meningkatkan probabilitas menang mereka?

Jawabannya adalah ya, dan inilah poin utama dari contoh ini dan mengapa ini begitu menarik. Jadi mari kita lihat secara tepat bagaimana Alice dan Bob bisa berbuat lebih baik dalam permainan ini menggunakan keterikatan.
Vektor dan matriks yang diperlukan
Hal pertama yang perlu kita lakukan adalah mendefinisikan vektor keadaan Qubit untuk setiap bilangan real (yang akan kita anggap sebagai sudut yang diukur dalam radian) sebagai berikut.
Berikut beberapa contoh sederhana:
Kita juga memiliki contoh-contoh berikut, yang muncul dalam analisis di bawah ini:
Melihat bentuk umumnya, kita melihat bahwa hasil kali dalam antara dua vektor ini memiliki rumus berikut:
Secara rinci, hanya ada entri bilangan real dalam vektor-vektor ini, sehingga tidak ada konjugat kompleks yang perlu dikhawatirkan: hasil kali dalam adalah hasil kali dari cosinus-cosinus ditambah hasil kali dari sinus-sinus. Menggunakan salah satu rumus penambahan sudut dari trigonometri menghasilkan penyederhanaan di atas. Rumus ini mengungkapkan interpretasi geometris dari hasil kali dalam antara vektor satuan real sebagai cosinus dari sudut di antara keduanya.
Jika kita menghitung hasil kali dalam dari hasil kali tensor dari dua vektor ini dengan keadaan kita mendapatkan ekspresi serupa, kecuali bahwa ada di penyebutnya:
Ketertarikan kita pada hasil kali dalam khusus ini akan menjadi jelas segera, tetapi untuk saat ini kita hanya mengamati ini sebagai sebuah rumus.
Selanjutnya, definisikan matriks uniter untuk setiap sudut sebagai berikut.
Secara intuitif, matriks ini mengubah menjadi dan menjadi Untuk memeriksa bahwa ini adalah matriks uniter, pengamatan kunci adalah bahwa vektor dan ortogonal untuk setiap sudut :
Dengan demikian, kita menemukan bahwa
Kita juga bisa menulis matriks ini secara eksplisit sebagai
Ini adalah contoh dari matriks rotasi, dan secara khusus memutar vektor dua dimensi dengan entri bilangan real sebesar sudut terhadap titik asal. Jika kita mengikuti konvensi standar untuk penamaan dan parameterisasi rotasi dari berbagai bentuk, kita memiliki di mana
Deskripsi strategi
Sekarang kita bisa mendeskripsikan strategi kuantum.
-
Persiapan: Alice dan Bob memulai permainan dengan berbagi e-bit: Alice memegang Qubit Bob memegang Qubit dan bersama-sama dua Qubit berada dalam keadaan .
-
Tindakan Alice:
- Jika Alice menerima pertanyaan dia menerapkan pada Qubitnya
- Jika Alice menerima pertanyaan dia menerapkan pada Qubitnya
Operasi yang Alice lakukan pada bisa juga dideskripsikan seperti ini: