Halo, Habr! Saya mempersembahkan kepada Anda terjemahan artikel "Gambaran Umum dan Perbandingan Platform Level Quantum Software Gate" oleh Ryan LaRose.
Komputer kuantum tersedia untuk digunakan dalam infrastruktur cloud, tetapi pada saat yang sama, booming baru-baru ini di platform perangkat lunak kuantum dapat sangat besar bagi mereka yang memutuskan apa yang akan digunakan. Artikel ini menawarkan gambaran terkini tentang lanskap komputasi kuantum yang berkembang pesat dengan membandingkan empat platform perangkat lunak - Hutan (pyQuil), QISKit, ProjectQ, dan Kit Pengembangan Kuantum - yang memungkinkan para peneliti untuk menggunakan perangkat kuantum yang nyata dan disimulasikan. Analisis ini mencakup persyaratan dan instalasi, sintaksis bahasa pada contoh program, dukungan di tingkat pustaka dan kemungkinan simulator kuantum untuk setiap platform. Untuk platform yang mendukung komputer kuantum, kami membandingkan perangkat keras, bahasa assembler kuantum, dan kompiler kuantum. Sebagai kesimpulan, kami akan mempertimbangkan fitur masing-masing dan secara singkat menyebutkan paket perangkat lunak lain untuk komputasi kuantum.
Isi
I. Pendahuluan
II Platform perangkat lunak
A. pyQuil
B. QISKit
C. ProjectQ
D. Kit Pengembangan Quatum
III. Perbandingan
A. Dukungan Perpustakaan
B. Perangkat Keras Kuantum
C. Compiler Quantum
D. Kinerja Simulator
E. Fitur
IV. Diskusi dan kesimpulan
Referensi
Lampiran A. Platform perangkat lunak lain
Lampiran B. Menguji Kinerja Simulator
Lampiran C. Contoh Program: Skema Teleportasi
I. Pendahuluan
Bahasa pemrograman kuantum dianggap setidaknya dua dekade lalu [1-3], tetapi sebagian besar bersifat teoritis dan tanpa peralatan yang ada. Komputer kuantum sekarang menjadi kenyataan, dan ada bahasa pemrograman kuantum yang akan memungkinkan siapa pun yang memiliki akses ke Internet untuk menggunakannya. Sejumlah peneliti, baik di industri maupun di dunia akademis, telah menciptakan perangkat kuantum kecil yang bekerja pada model sirkuit komputasi kuantum. Komputer ini kecil, berisik, dan tidak sekuat komputer klasik modern. Tetapi mereka muncul, terus tumbuh dan meramalkan masa depan kekuatan komputasi besar yang tak terbayangkan untuk tugas-tugas kimia [4, 5], pembelajaran mesin [6, 7], optimisasi [8], sektor keuangan [9] dan banyak lagi [10]. Perangkat ini adalah bangku tes untuk melatih generasi berikutnya para insinyur perangkat lunak kuantum untuk menyelesaikan tugas-tugas kompleks teknologi komputer yang saat ini sudah ada. Memang, komputasi awan kuantum telah digunakan untuk menghitung energi pengikat deuteron [11] dan uji rutinitas dalam algoritma pembelajaran mesin [12, 13].
Baru-baru ini, telah ada pertumbuhan pesat dalam perangkat lunak komputasi kuantum pada berbagai bahasa komputer klasik. Daftar proyek sumber terbuka dengan lebih dari lima puluh tersedia di [14], dan daftar simulasi komputer kuantum tersedia di [15]. Sejumlah besar program yang secara positif mencerminkan pertumbuhan di lapangan membuat sulit bagi siswa dan peneliti untuk memutuskan paket perangkat lunak mana yang akan digunakan, agar tidak tersesat dalam dokumentasi atau dikejutkan oleh pengetahuan awal yang diperlukan.
Artikel ini diharapkan dapat memberikan tinjauan singkat dan perbandingan platform perangkat lunak utama untuk komputasi kuantum serba guna di tingkat gerbang. Empat dipilih dari daftar panjang: tiga, memberikan pengguna kemampuan untuk terhubung ke perangkat kuantum nyata - pyQuil dari Rigetti [16], QISKit dari IBM [17] dan ProjectQ dari ETH Zurich [18, 19], dan satu dengan fungsi serupa, tetapi tanpa kemampuan saat ini untuk terhubung ke komputer kuantum - Quantum Development Kit dari Microsoft [20]. Mendukung memilih platform ini telah menjadi kemampuan untuk terhubung ke perangkat kuantum nyata. Karena hal ini, dan demi singkatnya, sejumlah program terhormat sengaja dihilangkan. Beberapa dari mereka disebutkan dalam Lampiran A.
Saat ini, tujuan utama adalah untuk menyajikan gambaran lanskap komputasi kuantum yang disebabkan oleh keempat platform ini. Pada bagian II, kita akan melihat setiap platform secara bergantian, membahas persyaratan dan pemasangan, dokumentasi dan tutorial, sintaksis bahasa, dan peralatan kuantum. Bagian III memberikan perbandingan detail platform. Ini termasuk: dukungan di tingkat perpustakaan algoritma kuantum di III A , dukungan perangkat keras kuantum di III B , kompilator sirkuit kuantum di III C dan simulator komputer kuantum III D. Bagian IV membahas beberapa komentar subjektif tentang setiap platform. Lampiran A berisi informasi tentang perangkat lunak kuantum lainnya, Lampiran B berisi informasi terperinci tentang pengujian simulator rangkaian kuantum, dan Lampiran C menunjukkan kode untuk skema teleportasi kuantum di masing-masing dari empat bahasa untuk perbandingan berdampingan.
Gambar 1 menunjukkan berbagai komputer kuantum dan perangkat lunak yang digunakan untuk menghubungkan ke perangkat. Saat ini, empat platform perangkat lunak memungkinkan Anda terhubung ke empat komputer kuantum yang berbeda - satu dari Rigetti, komputer kuantum 8-qubit, yang dapat Anda sambungkan menggunakan pyQuil [41]; dan tiga dari IBM, dengan 16 qubit tertinggi yang tersedia, yang dapat dihubungkan menggunakan QISKit atau ProjectQ. Selain itu, IBM menawarkan komputer kuantum 20-qubit keempat, tetapi perangkat ini hanya tersedia untuk anggota Jaringan Q IBM [42]: sekelompok perusahaan, universitas, dan laboratorium nasional yang tertarik dan berinvestasi dalam komputasi kuantum. Gambar 1 juga menunjukkan komputer kuantum perusahaan seperti Google, IBM, dan Intel yang telah diumumkan tetapi saat ini tidak tersedia untuk pengguna biasa.

Gambar 1. Diagram skematik yang menunjukkan bagaimana menghubungkan komputer pribadi ke komputer kuantum yang digunakan di tingkat gerbang. Mulai dari komputer pribadi (tengah bawah), simpul hijau menunjukkan perangkat lunak yang dapat diinstal pada komputer pribadi pengguna. Node abu-abu menunjukkan bahwa simulator dijalankan secara lokal (yaitu, pada komputer pengguna). Garis putus-putus menunjukkan koneksi API / cloud ke sumber daya perusahaan yang ditunjukkan dalam "awan" kuning. Simulator kuantum dan komputer kuantum bekas yang disediakan oleh sumber daya cloud ini masing-masing ditampilkan dalam warna biru dan emas. Bingkai merah menunjukkan persyaratan untuk metode yang dipilih. Misalnya, untuk terhubung ke Rigetti Forest dan menggunakan komputer kuantum Agave 8 qubit, Anda perlu mengunduh dan menginstal pyQuil (tersedia di MacOS, Windows, dan Linux), mendaftar di situs web Rigetti untuk mendapatkan kunci API, dan kemudian meminta akses ke perangkat melalui online bentuk. Catatan: (i) Mesin virtual kuantum Rigetti memerlukan peningkatan hak untuk lebih dari 30 qubit, (ii) simulator lokal bergantung pada komputer pengguna, oleh karena itu angka yang diberikan adalah perkiraan, dan (iii) komputer kuantum yang diumumkan tetapi saat ini tidak tersedia untuk pengguna biasa.Teknologi peralatan kuantum berubah dengan cepat. Sangat mungkin bahwa komputer baru akan muncul pada akhir tahun, dan dalam dua atau tiga tahun daftar ini mungkin benar-benar ketinggalan zaman. Namun, yang tersisa adalah perangkat lunak yang digunakan untuk terhubung ke teknologi ini. Akan sangat sederhana untuk menggunakan komputer kuantum baru, mengubah hanya beberapa baris kode, tanpa benar-benar mengubah sintaks yang digunakan untuk menghasilkan atau menjalankan sirkuit kuantum. Misalnya, di QISKit, Anda hanya perlu mengubah nama perangkat backend saat menjalankan skema:
execute(quantum_circuit, backend="name", ...)
Daftar 1. String "nama" menunjukkan perangkat backend untuk menjalankan program kuantum menggunakan QISKit. Ketika komputer kuantum masa depan dilepaskan, menjalankan perangkat keras baru akan sesederhana mengubah nama.
Meskipun perangkat lunak juga berubah dengan rilis versi baru [43], ini adalah, sebagian besar, perubahan sintaksis yang relatif kecil yang tidak secara signifikan mengubah fungsi perangkat lunak.
Pada bagian ini, kita akan melihat masing-masing dari empat platform, membahas persyaratan dan instalasi, dokumentasi dan manual, sintaksis bahasa, bahasa kuantum, peralatan kuantum, dan kemampuan simulator. Ulasan ini tidak dimaksudkan untuk sepenuhnya mengajarkan bahasa, tetapi memberi pembaca pemahaman tentang setiap platform sebelum terjun ke satu (atau lebih) dari platform yang dipilih. Analisis saat ini mencakup informasi yang cukup untuk menjalankan algoritma pada komputer kuantum. Namun demikian, pembaca, ketika ia telah memilih platform tertentu, dikirim ke dokumentasi khusus untuk informasi lengkap. Tautan ke sumber dokumentasi dan tutorial untuk setiap paket perangkat lunak ditambahkan. Juga diasumsikan bahwa ada pengetahuan dasar tentang komputasi kuantum, yang sekarang ada banyak referensi bagus [21, 22].
Semua fragmen kode dan program yang termasuk dalam dokumen ini diuji dan dijalankan pada laptop Edisi Pengembang Dell XPS 13 yang menjalankan Linux Ubuntu 16.04 LTS, spesifikasi lengkapnya tercantum dalam [23]. Meskipun semua paket perangkat lunak bekerja di ketiga sistem operasi utama, jauh lebih mudah bagi penulis untuk menginstal dan menggunakan perangkat lunak pada platform di mana ia dikembangkan. Di Linux Ubuntu, tidak ada kesulitan atau pesan kesalahan yang tidak biasa ketika menginstal paket perangkat lunak ini.
| pyQuil | QISKit | Projectq | QDK |
---|
Institusi | Rigetti | Ibm | Et zurich | Microsoft |
Rilis pertama | v0.0.2 pada 15 Jan 2017 | 0,1 pada 7 Maret 2017 | v0.1.0 pada 3 Jan 2017 | 0.1.1712.901 pada 4 Jan 2018 (pra-rilis) |
Versi saat ini | v1.9.0 pada 6 Juni 2018 | 0.5.4 pada 11 Juni 2018 | v0.3.6 pada 6 Februari 2018 | 0.2.1802.2202 pada 26 Februari 2018 (pra-rilis) |
Sumber terbuka | ✅ | ✅ | ✅ | ✅ |
Lisensi | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT |
Beranda | Rumah | Rumah | Rumah | Rumah |
Github | Git | Git | Git | Git |
Dokumentasi | Documents , Tutorial ( Grove ) | Docs , Tutorial Notebooks , Hardware | Dokumen , Program Contoh , Kertas | Documents |
OS | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux |
Persyaratan | Python 3, Anaconda (disarankan) | Python 3.5+, Notebook Jupyter (untuk tutorial), Anaconda 3 (disarankan) | Python 2 atau 3 | Visual Studio Code (sangat disarankan) |
Bahasa klasik | Python | Python | Python | Q # |
Bahasa kuantum | Quil | Openqasm | tidak ada / hybrid | Q # |
Perangkat keras kuantum | 8 qubit | IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits), QS1_1 (20 qubits) | tidak ada perangkat keras khusus, dapat terhubung ke backend IBM | tidak ada |
Simulator | ∼20 qubit secara lokal, 26 qubit dengan sebagian besar kunci API ke QVM, 30+ w / akses pribadi | ∼25 qubit secara lokal, 30 melalui cloud | ∼28 qubit secara lokal | 30 qubit secara lokal, 40 melalui Azure cloud |
Fitur | Hasilkan kode Quil, contoh algoritma di Grove, kompiler khusus topologi, kemampuan noise dalam simulator, saluran komunitas Slack | Hasilkan kode QASM, kompiler topologi khusus, saluran Slack komunitas, laci sirkuit, pustaka ACQUA | Gambar sirkuit, sambungkan ke backend IBM, beberapa plug-in perpustakaan | Algoritma bawaan, contoh algoritma |
pyQuilA. pyQuil
pyQuil adalah pustaka Python open source yang dikembangkan oleh Rigetti untuk membuat, menganalisis, dan menjalankan program kuantum. Ini dibangun berdasarkan bahasa Quil - bahasa terbuka instruksi kuantum (atau hanya bahasa kuantum ), yang dirancang khusus untuk komputer kuantum terdekat yang menjanjikan dan didasarkan pada model memori klasik / kuantum yang umum [24] (ini berarti bahwa kedua qubit dan bit klasik). pyQuil adalah salah satu perpustakaan inti yang dikembangkan di Forest, yang merupakan platform utama untuk semua perangkat lunak Rigetti. Hutan juga mencakup Grove dan Reference QVM, yang akan diuraikan nanti.
a. Persyaratan dan Instalasi
Menginstal dan menggunakan pyQuil membutuhkan versi Python 2 atau 3, meskipun Python 3 sangat dianjurkan, karena fungsi pengembangan di masa depan hanya akan mendukung Python 3. Selain itu, distribusi Python Anaconda direkomendasikan untuk berbagai dependensi modul Python, walaupun ini tidak diperlukan.
Cara termudah untuk menginstal pyQuil adalah dengan menggunakan perintah manajer paket Python. Pada prompt perintah Ubuntu Linux, masukkan
pip install pyquil
untuk pemasangan perangkat lunak yang berhasil. Atau, jika Anaconda diinstal, pyQuil dapat diinstal dengan mengetik
conda install −c rigetti pyquil
di baris perintah. Alternatif lain adalah mengunduh kode sumber dari repositori git dan menginstal perangkat lunak. Untuk melakukan ini, masukkan perintah berikut:
git clone https://github.com/rigetticomputing/pyquil cd pyquil pip install −e
Metode terakhir ini direkomendasikan untuk semua pengguna yang dapat berkontribusi pada pyQuil. Lihat panduan setoran GitHub untuk informasi lebih lanjut.
b. Dokumentasi dan Tutorial
pyQuil memiliki dokumentasi yang sangat baik yang diposting di Internet, dengan pengantar komputasi kuantum, instruksi instalasi, program dasar dan operasi gerbang, simulator yang dikenal sebagai mesin virtual kuantum (QVM), komputer kuantum nyata, dan bahasa Quil dengan kompiler. Dengan mengunduh kode sumber pyQuil dari GitHub, Anda juga akan mendapatkan folder dengan contoh di notebook Jupyter, contoh Python reguler dan program $ inline $ \ textf {run_quil.py} $ inline $ , yang dapat menjalankan dokumen teks yang ditulis dalam Quil menggunakan mesin virtual kuantum. Terakhir, sebut Grove , satu set algoritma kuantum yang dibangun menggunakan pyQuil dan lingkungan Rigetti Forest.
c. Sintaks
Sintaks pyQuil sangat sederhana dan praktis. Elemen utama untuk merekam sirkuit kuantum adalah program dan dapat diimpor dari smsfpyquil.quil . Operasi gerbang dapat ditemukan di smsfpyquil.gates . Modul smsfapi memungkinkan Anda untuk menjalankan sirkuit kuantum di mesin virtual. Salah satu fitur bagus dari pyQuil adalah bahwa register qubit dan register klasik tidak harus didefinisikan apriori dan dapat dialokasikan secara dinamis dalam memori. Qubit dalam register qubit dirujuk oleh indeks (0, 1, 2, ...) dan juga untuk bit dalam register klasik. Dengan demikian, rangkaian generator acak dapat ditulis sebagai berikut:
Daftar 2. Kode PyQuil untuk generator angka acak.
Tiga baris pertama mengimpor minimum yang diperlukan untuk mendeklarasikan skema / program kuantum (baris 2), untuk melakukan operasi gerbang pada qubit (baris 3) [44] dan untuk mengeksekusi skema (baris 4). Di baris 6, program kuantum dibuat, dan di baris 7-8, daftar instruksi dikirimkan ke sana: pertama, bertindak di gerbang Hadamard H di atas qubit di indeks 0, maka kita mengukur qubit yang sama menjadi bit klasik di bawah indeks 0. Baris 10 membuat koneksi dengan QVM, dan pada 11 hasil rangkaian kami diluncurkan dan ditampilkan. Program ini mencetak output standar pyQuil sebagai daftar daftar bilangan bulat: dalam kasus kami - smsf[[[0]] atau smsf[[[1]] . Secara umum, jumlah item dalam daftar eksternal adalah jumlah tes yang dilakukan. Angka integer dalam daftar internal adalah dimensi terakhir dalam register klasik. Karena kami hanya melakukan satu tes (ini ditunjukkan sebagai argumen dalam smsfapi.QVMConnection.run , yang diatur ke kesatuan secara default), kami hanya mendapatkan satu daftar internal. Karena dalam register klasik kami hanya memiliki satu bit, kami hanya mendapatkan satu integer.
d. Bahasa kuantum
Quil adalah bahasa instruksi kuantum, atau hanya bahasa kuantum yang mengirimkan perintah ke komputer kuantum. Ini mirip dengan assembler di komputer klasik. Inti dari sintaks Quil adalah smsfGATEindex dimana smsfGATE adalah gerbang kuantum yang berlaku untuk qubit yang diindeks textfindex (0, 1, 2, ...). pyQuil memiliki fungsi untuk menghasilkan kode Quil dari program yang diberikan. Misalnya, dalam penghasil bilangan acak kuantum yang disebutkan di atas, kita dapat menambahkan baris:
print(qprog)
di akhir untuk mendapatkan kode diagram Quil, yang ditunjukkan di bawah ini:
H 0 MEASURE 0 [0]
Daftar 3. Kode quil untuk generator angka acak.
Mungkin jika seseorang mulai memahami Quil, tulis sirkuit kuantum dalam editor teks di Quil, dan kemudian jalankan sirkuit di QVM menggunakan program $ inline $ \ textf {run_quil.py} $ inline $ . Anda juga dapat memodifikasi $ inline $ \ textf {run_quil.py} $ inline $ untuk menjalankan sirkuit pada QPU. Perhatikan bahwa kompiler pyQuil (juga disebut kompilator Quil dalam dokumentasi) mengubah sirkuit yang diberikan menjadi kode Quil yang dapat dipahami oleh komputer kuantum nyata. Kami akan membahas ini secara lebih rinci di bagian III C.
f. Perangkat keras kuantum
Rigetti memiliki prosesor kuantum yang dapat digunakan oleh mereka yang meminta akses. Untuk meminta akses, Anda harus mengunjungi situs web Rigetti dan memberikan nama lengkap, alamat email, nama organisasi, dan deskripsi alasan untuk mengakses QPU. Setelah ini selesai, perwakilan perusahaan akan menghubungi Anda melalui email untuk menjadwalkan waktu untuk memberikan pengguna akses ke QPU. Keuntungan dari proses perencanaan ini berbeda dengan sistem antrian QISKit, yang akan dibahas kemudian, adalah bahwa banyak tugas dapat dilakukan dalam interval waktu terdistribusi dengan waktu eksekusi deterministik, yang merupakan kunci untuk algoritma variasional dan hybrid. Jenis-jenis algoritma ini mengirim data bolak-balik antara komputer klasik dan kuantum - kebutuhan untuk mengantri membuat proses ini lebih lama. Kerugian (mungkin) adalah bahwa tugas tidak dapat dilakukan kapan saja ketika QPU tersedia dan perlu untuk menunjukkan dan menyetujui waktu tertentu.
Menurut pengalaman penulis, karyawan siap membantu, dan prosesnya biasanya berhasil. Perangkat aktual, topologi yang ditunjukkan pada Gambar 2, terdiri dari 8 qubit dengan konektivitas tetangga terdekat. Kita akan melihat komputer ini secara lebih rinci di Bagian III B.
g. Simulator
Mesin Virtual Kuantum (QVM) adalah utilitas utama yang digunakan untuk menjalankan sirkuit kuantum. Program ini, ditulis untuk dijalankan pada prosesor klasik, menerima kode Quil dan mensimulasikan pengembangan suatu proses pada komputer kuantum nyata. Untuk terhubung ke QVM, Anda perlu mendaftarkan kunci API secara gratis di https://www.rigetti.com/forest dengan nama dan alamat email. Kemudian Anda akan menerima email yang berisi kunci API dan ID pengguna yang harus dikonfigurasi saat startup:
pyquil−config−setup
pada baris perintah (setelah menginstal pyQuil, tentu saja). Maka Anda akan diminta memasukkan kunci dari email.
Menurut dokumentasi, sebagian besar kunci API menyediakan akses ke QVM hingga 30 qubit, dan Anda dapat meminta akses ke lebih banyak qubit. Kunci API penulis memberikan akses ke 26 qubit (tidak ada pembaruan yang diminta).
Selain itu, perpustakaan Hutan berisi simulator lokal yang ditulis dalam Python dan open source, disebut sebagai Referensi QVM . Ini tidak seproduktif QVM, tetapi pengguna dapat menjalankan sirkuit dengan jumlah qubit yang dibatasi oleh jumlah memori pada mesin lokal. Biasanya, sirkuit dengan kurang dari 20 qubit dapat dijalankan pada berbagai peralatan. Referensi QVM harus diinstal secara terpisah, yang dapat dilakukan dengan textfpip :
pip install referenceqvm
Untuk menggunakan Referensi QVM alih-alih QVM, cukup impor smsfapi dari smsfreferenceqvm bukannya pyQuil:
import referenceapi.api as api

Gambar 2. Diagram skematis yang menunjukkan topologi (konektivitas) dari 8-qubit Agave QPU Rigetti. Qubit ditandai dengan bilangan bulat 0, 1, ..., 7, dan garis yang menghubungkan qubit menunjukkan bahwa dua operasi qubit dapat dilakukan antara qubit ini. Sebagai contoh, kita dapat menjalankan Controlled- Z lebih dari qubit 0 dan 1, tetapi tidak antara 0 dan 2. Untuk mencapai yang terakhir, kompilator Quil mengonversi Controlled- Z (0, 2) dalam operasi yang dapat dilakukan QPU. Diagram ini diambil dari dokumentasi pyQuil.QISKitB. QISKit
Quantum Information Software Kit, atau QISKit, adalah perangkat pengembangan perangkat lunak sumber terbuka (SDK) untuk bekerja dengan bahasa kuantum OpenQASM dan prosesor kuantum dalam platform IBM Q. Ini tersedia untuk bahasa Python, JavaScript, dan Swift, tetapi di sini kami hanya membahas Versi python.
a. Persyaratan dan Instalasi
QISKit tersedia di MacOS, Windows, dan Linux. Instalasi QISKit membutuhkan Python 3.5+. Komponen tambahan yang bermanfaat, tetapi tidak diperlukan adalah Notebook Jupyter untuk tutorial dan distribusi Python Anaconda 3, yang berisi semua dependensi yang diperlukan.
Cara termudah untuk menginstal QISKit adalah dengan menggunakan manajer paket pip untuk Python. Pada prompt perintah, untuk menginstal perangkat lunak, masukkan:
pip install qiskit
Harap perhatikan itu textfpip secara otomatis memproses semua dependensi dan akan selalu menginstal versi terbaru. Pengguna yang mungkin tertarik berkontribusi pada QISKit dapat menginstal kode sumber dengan memasukkan yang berikut ini pada prompt perintah, diasumsikan bahwa git diinstal:
git clone https://github.com/QISKit/qiskit−core cd qiskit−core python −m pip install −e
Untuk informasi tentang setoran, lihat dokumentasi online panduan setoran di GitHub.
b. Bahan dokumentasi dan pelatihan
Dokumentasi QISKit dapat ditemukan di Internet di https://qiskit.org/documentation/ . Berisi instruksi instalasi dan konfigurasi, program sampel dan koneksi ke perangkat kuantum nyata, organisasi proyek, tinjauan QISKit, dan dokumentasi pengembang. Informasi dasar tentang komputasi kuantum juga dapat ditemukan untuk pengguna yang baru di bidang ini. Sumber yang sangat bagus adalah tautan ke SDK, tempat pengguna dapat menemukan informasi tentang dokumentasi kode sumber.
QISKit juga berisi sejumlah besar tutorial dalam repositori GitHub yang terpisah (mirip dengan pyQuil dan Grove). Ini termasuk negara yang terjerat; algoritma standar seperti Deutsch Jozh, algoritma Grover, estimasi fase dan transformasi kuantum Fourier; juga algoritma yang lebih kompleks, seperti memecahkan masalah nilai eigen variabel kuantum dan menerapkannya pada fermion Hamiltonians; dan bahkan beberapa permainan menyenangkan, seperti "pertempuran laut" kuantum. Selain itu, perpustakaan ACQUA (Algoritma dan Sirkuit untuk Aplikasi Quantum) berisi algoritma multidisiplin untuk kimia dan kecerdasan buatan dengan banyak contoh.
Ada juga dokumentasi yang sangat terperinci untuk masing-masing dari empat backend kuantum yang berisi informasi tentang konektivitas, waktu koherensi, dan waktu penggunaan gerbang. Terakhir, sebutkan situs web pengalaman pengguna dan panduan pengguna IBM Q. Situs web ini berisi antarmuka grafis untuk sirkuit kuantum di mana pengguna dapat menyeret gerbang ke sirkuit, yang berguna untuk menjelajahi sirkuit kuantum. Panduan pengguna berisi lebih banyak instruksi tentang komputasi kuantum dan bahasa QISKit.
c. Sintaks
Sintaksis QISKit dapat dilihat dalam program sampel berikut. Di sini, tidak seperti pyQuil, Anda harus secara eksplisit membedakan antara register kuantum dan klasik. Di bawah ini adalah program untuk skema nomor acak QISKit:
Daftar 4. Kode QISKit untuk generator angka acak.
Baris 2 mengimpor alat untuk membuat register kuantum dan klasik, sirkuit kuantum, dan fungsi untuk mengeksekusi sirkuit ini. Kemudian kita membuat register kuantum dengan satu qubit (baris 4), register klasik dengan satu bit (baris 5) dan sirkuit kuantum dengan kedua register ini (baris 6). Sekarang setelah sirkuit dibuat, kita mulai memberikan instruksi: pada baris 8 kita menerapkan gerbang Hadamard ke nol qubit dalam register kuantum kita (yang merupakan satu-satunya qubit dalam register kuantum); pada baris 9, kami mengukur qubit ini menjadi bit klasik yang diindeks oleh nol dalam register klasik kami (yang merupakan satu-satunya dalam register klasik) [45]. Sekarang setelah sirkuit kuantum dibangun, jalankan di jalur 11 dan cetak hasilnya di jalur 12. Dengan cara keluaran $ inline $ \ textf {result.get_counts ()} $ inline $ kita mendapatkan "perhitungan" sirkuit, yaitu kamus data output dan berapa kali setiap hasil diterima. Untuk kasus kami, output yang mungkin hanya 0 atau 1, dan contoh dari output dari program di atas adalah smsf′0′:532,′1′:492 , yang menunjukkan bahwa kami mendapat 532 instance dari 0 dan 492 instance dari 1. (Secara default, jumlah siklus untuk memulai rangkaian disebut textfshots dalam QISKit, adalah 1024.)
d. Bahasa kuantum
OpenQASM (bahasa assembler kuantum terbuka [25], yang bisa kita sebut QASM) adalah bahasa kuantum yang menyediakan instruksi untuk perangkat kuantum nyata yang mirip dengan assembler pada komputer klasik. Dasar dari sintaks QASM adalah smsfgatequbit dimana smsfgate mengatur operasi gerbang kuantum, dan smsfqubit - qubit. QISKit memiliki fungsi untuk menghasilkan kode QASM dari suatu skema. Dalam skema angka acak di atas, kita bisa menambahkan garis.
print(qcircuit.qasm())
di akhir untuk mendapatkan kode QASM untuk rangkaian yang ditunjukkan di bawah ini:
OPENQASM 2.0; include ”qelib1.inc”; qreg q0[1]; creg c0[1]; h q0[0]; measure q0[0] −> c0[0];
Daftar 5. Kode OpenQASM untuk generator angka acak.
Dua baris pertama termasuk dalam setiap file QASM. Baris 3 (4) membuat register kuantum (klasik), dan baris 5 dan 6 memberikan instruksi untuk sirkuit. Di OpenQASM, Anda dapat menulis sirkuit kecil seperti ini, tetapi untuk sirkuit yang lebih besar, lebih baik menggunakan alat di QISKit untuk pemrograman komputer kuantum yang gratis dan efisien.
e. Perangkat keras kuantum
Ada sejumlah besar dokumentasi untuk backend kuantum yang didukung oleh QISKit. Perangkat ini termasuk IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits) dan QS1_1 (20 qubits, hanya tersedia untuk anggota Jaringan Q IBM). Dokumentasi untuk semua orang tersedia di GitHub. Kami akan melihat lebih dekat pada IBMQX5 di Bagian III B, topologi yang ditunjukkan pada Gambar 3.
f. Simulator
IBM , . , 12 , , 25 . , III D.

Gambar 3. Topologi skematis IBMQX5, diambil dari [30]. Panah terarah menunjukkan peluang keterjeratan. Misalnya, kita bisa melakukan operasi (dalam QASM) cx Q1, Q2 , tetapi bukan operasi cx Q2, Q1 . Untuk melakukan yang terakhir, kompiler menerjemahkan instruksi menjadi gerbang yang setara yang berjalan di topologi dan kumpulan gerbang.ProjectqC. ProjectQ
ProjectQ — IBM, . ProjectQ Thomas Häner Damien S. Steiger Matthias Troyer ETH Zurich, .
a.
ProjectQ Python (2.7 3.4+). . pip :
python −m pip install −−user projectq
( ). :
git clone https://github.com/ProjectQ−Framework/ProjectQ cd projectq python −m pip install −−user
, , . ProjectQ GitHub.
b.
ProjectQ . , . - ( , ). — / , . [18, 19] , , - .
c.
ProjectQ , . ProjectQ ( ProjectQ), — / . , :
6. ProjectQ .
2 , 3 . 5 (engine) MainEngine , 6 . 8 9 : 0, . « » . — operation | qubit , H|0> , . , /. pyQuil QISKit, ProjectQ . , qbits[0] 9, , int , 12.
d.
, ProjectQ . ProjectQ IBM, OpenQASM: IBM.
e.
ProjectQ . , IBM ProjectQ.
f.
ProjectQ , C++, , , Python. , ProjectQ ClassicalSimulator (stabilizer circuits), . . , , , CNOT [26]. , , , , . , C++ Simulator .
C++ Simulator ProjectQ . [23]() (, ), 26 5 , 28 20 — . [III D]() 6.
ProjectQ , , . , pyQuil ProjectQ [27], Microsoft QDK Thomas Häner Damian Steiger ETH Zurich [28], . ( , , QDK ProjectQ C++, .)
Kit pengembangan kuantumD. Quantum Development Kit
Rigetti IBM, Microsoft . [29] , , , . , Microsoft , Quantum Development Kit (QDK), , . , QDK «-» Q#, Visual Studio Visual Studio Code 30 . 2018 , -, MacOS, Windows Linux.
a.
, Visual Studio Code , . ( VS Code, Visual Studio . - - , , VS Code.) , QDK , Bash:
dotnet new −i "Microsoft.Quantum.ProjectTemplates::0.2 −*"
QDK GitHub ( , QDK), :
git clone https://github.com/Microsoft/Quantum.git cd Quantum code
b.
— Q#, - , , , Q# . ; , .
c.
Q# . C#: , Python, , C#. , :
// random number generator circuit in QDK operation random (count: Int, initial: Result) : (Int, Int) { body { mutable numOnes = 0; using ( qubits = Qubit[1]) { for (test in 1..count) { Set(initial, qubits[0]); H(qubits[0]); let res = M(qubits[0]); // count the number of ones if (res == One) { set numOnes = numOnes + 1; } } Set(Zero, qubits[0]); } // return statistics return (count − numOnes, numOnes); } }
7. Q# .
, , /, , . . , , , . — .qs Q#, Driver.cs .qs , .csproj , . , 65 . -, , «Quickstart» .
, QDK , . , — (a+b) , . QDK , , ( C , , , , .
d. /
, QDK . Q# / .
e.
QDK , 30 . , QDK ProjectQ, , ProjectQ. ( III D.) Azure , 40 . QDK , .
, QDK (trace simulator), , , , . , . , . , , - , . . . - QDK.
III. Perbandingan
Kemudian di bagian ini, ketika dasar-dasar setiap platform dipertimbangkan, kami akan membandingkan masing-masing karakteristik tambahan, termasuk dukungan di perpustakaan, peralatan kuantum, dan level kompilator kuantum. Kami juga akan mencantumkan beberapa fitur yang patut diperhatikan dan bermanfaat dari setiap platform.
A. Dukungan Perpustakaan
« » ( ) (, language.DoQuantumFourierTransform (...) ) . , , 4.
, , , . , , , .
, pyQuil, QISKit QDK . ProjectQ FermiLib, FermiLib, OpenFermion, . , , , ProjectQ. Microsoft QDK , , . , QDK , , QDK, . QISKit .
B.
pyQuil QISKit, . , — — « ». ( ), , / . , , --. IBMQX5 Agave, . - .
a. IBMQX5
IBMQX5 — 16- ( 3). (T2) 31±5 0- , — 89±17 15- . 80 10 . CNOT - , 170- cx q[6], q[7] 348 cx q[3], q[14] . 99,5% ( = 1 — ). - 94,9% . 12,4% 6%. [30].
, , IBM , , . Agave Rigetti, -, , . , .
b. Agave
Agave 8 (transmon) , 2. (T2) 9,2 1- , 15,52 2- . Controlled- Z 118 195 . 96,2% ( , = 1 — ) 93,2%. - 87% - . . - pyQuil.
Algorithm | pyQuil | QISKit | ProjectQ | QDK |
---|
Random Number Generator | (T) | (T) | (T) | (T) |
Teleportation | (T) | (T) | (T) | (T) |
Swap Test | (T) | | | |
Deutsch-Jozsa | (T) | (T) | | (T) |
Grover's Algorithm | (T) | (T) | (T) | (B) |
Quantum Fourier Transform | (T) | (T) | (B) | (B) |
Shor's Algorithm | | | (T) | (D) |
Bernstein Vazirani | (T) | (T) | | (T) |
Phase Estimation | (T) | (T) | | (B) |
Optimization/QAOA | (T) | (T) | | |
Simon's Algorithm | (T) | (T) | | |
Variational Quantum Eigensolver | (T) | (T) | (P) | |
Amplitude Amplification | (T) | | | (B) |
Quantum Walk | | (T) | | |
Ising Solver | (T) | | | (T) |
Quantum Gradient Descent | (T) | | | |
Five Qubit Code | | | | (B) |
Repetition Code | | (T) | | |
Steane Code | | | | (B) |
Draper Adder | | | (T) | (D) |
Beauregard Adder | | | (T) | (D) |
Arithmetic | | | (B) | (D) |
Fermion Transforms | (T) | (T) | (P) | |
Trotter Simulation | | | | (D) |
Electronic Structure (FCI, MP2, HF, etc.) | | | (P) | |
Process Tomography | (T) | (T) | | (D) |
Meyer-Penny Game | (D) | | | |
Vaidman Detection Test | | (T) | | |
Battleships Game | | (T) | | |
Emoji Game | | (T) | | |
Counterfeit Coin Game | | (T) | | |
4. , . « » (T), (D), (B) (P).C.
, , , . / . — , , . QISKit Rigetti, .
IBMQX5 u1 , u2 , u3 dan CNOT dimana

, u1 Rz(θ) , u2 dan u3 — Rx(π/2)

, .

dimana X dan Z — . IBM Rz(θ) « », , . , z , z () , .
IBMQX5 3. , CNOT , CNOT

, CNOT QISKit, , , QISKit CNOT, . QISKit , , .
8- Agave Rigetti Rx(kπ/2) k∈Z , Rz(θ) Controlled- Z . , , Controlled- Z ( CZ )

Agave 2. QISKit, pyQuil ( ).
, , 5. , pyQuil, Agave, QISKit — IBMQX5. , QISKit (. . ), pyQuil. , - . , IBMQX5 , , pyQuil, . , ( ) - - (, , [32]), . [46], .

5. ( ), pyQuil 8- Agave Rigetti ( ) , QISKit IBM IBMQX5 16- . , Agave, 0, 1 2 ( 2), , IBMQX5, 0, 1 2. , H , Rx Rz . CNOT IBMQX5, Agave — pyQuil CNOT Controlled- Z . ProjectQ.D.
, . , , (. . ) . , , , , , . . QISKit , C++, ProjectQ , B . QVM pyQuil.
a. pyQuil
Rigetti, Quantum Virtual Machine (QVM), , . , API. API 30- , . 16- 10 2,61 . 23 10 56,33 , , QVM API. - - , QVM , QVM , ProjectQ QISKit.
QVM . , . , , . Noise and Quantum Computation pyQuil.
b. QISKit
QISKit , : , , , dan . . () . , / . [33], [34-36] . ClassicalSimulator ProjectQ, (stabilizer circuits), .
, 10 10 23,55 . — 239,97 , 12 1000 ( 17 ). , n 2n×2n .
C . 25 . 20 . 6 7.
s ProjectQ
ProjectQ C++, . , , 28 , (569,71 ) 20-. [18]. 6 7.

6. QISKit () ProjectQ C++ (), ( ) ( ). , ( ). **B**.
7. , ProjectQ C++ QISKit, . , √X , CNOT, . , . ProjectQ.E.
pyQuil Grove, GitHub, pyQuil. Rigetti , Slack Rigetti Forest. Quil ( ). , pyQuil OpenFermion [37], Python , .
QISKit JavaScript Swift. Python - . Grove, QISKit . , ACQUA QISKit . . IBM , . 3 , QISKit, 80000 , 60 , IBM [31]. QISKit Slack , , . , QISKit .
, ProjectQ . , TikZ TEX . ProjectQ. ProjectQ , . ProjectQ , IBM. , ProjectQ , OpenFermion, .
QDK Windows , 2018 macOS Linux. QDK, . , Q# , , . QDK , , , , , . .
IV.
, , , (-) (-) . — , . / .
, , :
- , , QISKit ( ProjectQ) pyQuil — .
- , , QISKit, pyQuil QDK — .
- , , Python — .
- , C/C#, QDK — .
- , , , ProjectQ — .
- , - , pyQuil — .
- , , Strawberry Fields .
, , . . , , .
- Bernhard Ömer, A procedural formalism for quantum computing , Master's thesis, Department of Theoretical Physics, Technical University of Vienna, 1998.
- S. Bettelli, L. Serafini, T. Calarco, Toward an architecture for quantum programming , Eur. Phys. J. D, Vol. 25, No. 2, pp. 181-200 (2003).
- Peter Selinger (2004), A brief survey of quantum programming languages , in: Kameyama Y., Stuckey PJ (eds) Functional and Logic Programming. FLOPS 2004. Lecture Notes in Computer Science, vol 2998. Springer, Berlin, Heidelberg.
- Benjamin P. Lanyon, James D. Whitfield, Geoff G. Gillet, Michael E. Goggin, Marcelo P. Almeida, Ivan Kassal, Jacob D. Biamonte, Masoud Mohseni, Ben J. Powell, Marco Barbieri, Alaґn Aspuru-Guzik, Andrew G. White, Towards quantum chemistry on a quantum computer , Nature Chemistry 2 , pages 106-111 (2010), doi:10.1038/nchem.483.
- Jonathan Olson, Yudong Cao, Jonathan Romero, Peter Johnson, Pierre-Luc Dallaire-Demers, Nicolas Sawaya, Prineha Narang, Ian Kivlichan, Michael Wasielewski, Alaґn Aspuru-Guzik, Quantum information and computation for chemistry , NSF Workshop Report, 2017.
- Jacob Biamonte, Peter Wittek, Nicola Pancotti, Patrick Rebentrost, Nathan Wiebe, Seth Lloyd, Quantum machine learning , Nature volume 549 , pages 195-202 (14 September 2017).
- Seth Lloyd, Masoud Mohseni, Patrick Rebentrost, Quantum principal component analysis , Nature Physics volume 10 , pages 631-633 (2014).
- Vadim N. Smelyanskiy, Davide Venturelli, Alejandro Perdomo-Ortiz, Sergey Knysh, and Mark I. Dykman, Quantum annealing via environment-mediated quantum diffusion , Phys. Rev. Lett. 118 , 066802, 2017.
- Patrick Rebentrost, Brajesh Gupt, Thomas R. Bromley, Quantum computational finance: Monte Carlo pricing of financial derivatives , arXiv preprint (arXiv:1805.00109v1), 2018.
- IM Georgescu, S. Ashhab, Franco Nori, Quantum simulation , Rev. Mod. Phys. 86, 154 (2014), DOI: 10.1103/RevModPhys.86.153.
- EF Dumitrescu, AJ McCaskey, G. Hagen, GR Jansen, TD Morris, T. Papenbrock, RC Pooser, DJ Dean, P. Lougovski, Cloud quantum computing of an atomic nucleus , Phys. Rev. Lett. 120 , 210501 (2018), DOI: 10.1103/PhysRevLett.120.210501.
- Lukasz Cincio, Yigit Subasi, Andrew T. Sornborger, and Patrick J. Coles, Learning the quantum algorithm for state overlap , arXiv preprint (arXiv:1803.04114v1), 2018
- Patrick J. Coles, Stephan Eidenbenz, Scott Pakin, et al., Quantum algorithm implementations for beginners , arXiv preprint (arXiv:1804.03719v1), 2018.
- Mark Fingerhuth, Open-Source Quantum Software Projects , accessed May 12, 2018.
- Quantiki: List of QC Simulators , accessed May 12, 2018
- R. Smith, MJ Curtis and WJ Zeng, A practical quantum instruction set architecture , 2016.
- QISKit, originally authored by Luciano Bello, Jim Challenger, Andrew Cross, Ismael Faro, Jay Gambetta, Juan Gomez, Ali Javadi-Abhari, Paco Martin, Diego Moreda, Jesus Perez, Erick Winston, and Chris Wood, https://github.com/QISKit/qiskit-sdk-py .
- Damian S. Steiger, Thomas Häner, and Matthias Troyer ProjectQ: An open source software framework for quantum computing , 2016.
- Thomas Häner, Damian S. Steiger, Krysta M. Svore, and Matthias Troyer A software methodology for compiling quantum programs , 2016.
- The Quantum Development Kit by Microsoft, homepage: https://www.microsoft.com/en — us/quantum/development-kit, github: https://github.com/Microsoft/Quantum .
- Michael A. Nielsen and Isaac L. Chuang, Quantum Computation and Quantum Information 10th Anniversary Edition, Cambridge University Press, 2011.
- Doug Finke, Education , Quantum Computing Report, https://quantumcomputingreport.com/resources/education/ , accessed May 26, 2018.
- All code in this paper was run and tested on a Dell XPS 13 Developer Edition laptop running 64 bit Ubuntu 16.04 LTS with 8 GB RAM and an Intel Core i7-8550U CPU at 1.80 GHz. Programs were run primarily from the command line but the Python developer environment Spyder was also used for Python programs and Visual Studio Code was used for C# (Q#) programs.
- Forest: An API for quantum computing in the cloud, https://www.rigetti.com/index.php/forest , accessed May 14, 2018.
- Andrew W. Cross, Lev S. Bishop, John A. Smolin, Jay M. Gambetta, Open quantum assembly language , 2017.
- Scott Aaronson, Daniel Gottesman, Improved Simulation of Stabilizer Circuits , Phys. Rev. A 70 , 052328, 2004.
- pyQuil Lisence, github.com/rigetticomputing/pyquil/blob/master/LICENSE#L204 , accessed June 7, 2018.
- Microsoft Quantum Development Kit License, marketplace.visualstudio.com/items/quantum.DevKit/license , accessed June 7, 2018.
- Hao Zhang, Chun-Xiao Liu, Sasa Gazibegovic, et al. Quantized Majorana conductance , Nature 556 , 74-79 (05 April 2018).
- 16-qubit backend: IBM QX team, “ibmqx5 backend specification V1.1.0,” (2018). Retrieved from https://ibm.biz/qiskit-ibmqx5 and https://quantumexperience.ng.bluemix.net/qx/devices on May 23, 2018.
- Talia Gershon, Celebrating the IBM Q Experience Community and Their Research , March 8, 2018.
- M. Reck, A. Zeilinger, HJ Bernstein, and P. Bertani, Experimental realization of any discrete unitary operator , Physical Review Letters, 73, p. 58, 1994.
- Ryan LaRose, Distributed memory techniques for classical simulation of quantum circuits , arXiv preprint (arXiv:1801.01037v1), 2018.
- Thomas Haner, Damian S. Steiger, 0.5 petabyte simulation of a 45-qubit quantum circuit , arXiv preprint (arXiv:1704.01127v2), September 18, 2017.
- Jianxin Chen, Fang Zhang, Cupjin Huang, Michael Newman, Yaoyun Shi, Classical simulation of intermediate-size quantum circuits , arXiv preprint (arXiv:1805.01450v2), 2018.
- Alwin Zulehner, Robert Wille, Advanced simulation of quantum computations , arXiv preprint ( arXiv:1707.00865v2 ), November 7, 2017.
- Jarrod R. McClean, Ian D. Kivlichan, Kevin J. Sung, et al., OpenFermion: The electronic structure package for quantum computers , arXiv:1710.07629, 2017.
- Nathan Killoran, Josh Izaac, Nicols Quesada, Ville Bergholm, Matthew Amy, Christian Weedbrook, Strawberry Fields: A Software Platform for Photonic Quantum Computing , arXiv preprint (arXiv:1804.03159v1), 2018.
- IonQ website, https://ionq.co/ , accessed June 15, 2018.
- D-Wave: The quantum computing company, https://www.dwavesys.com/home , accessed June 20, 2018.
- 4 2018 Rigetti 20- , . , 8- «- ». , 20- (, , ).
- IBMQ Network , 2017 — JP Morgan Chase , Daimler , Samsung , Honda , Oak Ridge National Lab , — , 2018 — Zapata Computing , Strangeworks , QxBranch , Quantum Benchmark , QC Ware , Q-CTRL , Cambridge Quantum Computing (CQC) , 1QBit . North Carolina State University , IBM Q Hub, University of Oxford University of Melbourne . https://www.research.ibm.com/ibmq/network/ .
- , - - . QISKit, ACQUA , pyQuil.
- pyQuil : , from pyquil.gates import H, MEASURE . pyquil.gates , , , .
- , () . , () , , .
- IBM, 31 2018 , « » Python Cython, .
A, . Players Quantum Computing Report [22]. , , . / — .
a. Strawberry Fields
Xanadu , , Strawberry Fields Python , [38]. Xanadu «qumodes» ( ), , , . Strawberry Fields Numpy TensorFlow, Blackbird. GitHub, , , , . , Xanadu https://www.xanadu.ai/ , .
b. IonQ
IonQ — -, College Park , . IonQ , . 171 Yb , IonQ T2 () 15- , T2 1 . , T1 ( ) 20 000 , 10−4 . , -- - , «» . , .
IonQ , IonQ . . , - [39].
c. D-Wave Systems
D-Wave [40], , . D-Wave, 1999 , , , ,
D-Wave , — 2048 , Matlab, C/C++ Python . /, D-Wave . D-Wave .
BB.
ProjectQ C++. Dell XPS 13 Developer Edition 64- Ubuntu 16.04 LTS 8 Intel Core i7-8550U 1,80 .
, , 7. , QISKit — .
CC. :
. , QDK , , . — , — — . . , , , — , .
, , . , QISKit.

8. , circuit_drawer , QISKit v0.5.4.pyQuil
QISKit
ProjectQ
Quantum Developer Kit
// ============================================================================= // teleport.qs // // Teleportation circuit in QDK. // ============================================================================= operation Teleport(msg : Qubit, there : Qubit) : () { body { using (register = Qubit[1]) { // get auxiliary qubit to prepare for teleportation let here = register[0]; // main circuit H(here); CNOT(here, there); CNOT(msg, here); H(msg); // conditional operations if (M(msg) == One) { Z(there); } if (M(here) == One) { X(there); } // reset the "here" qubit Reset(here); } } } operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { // two qubits let msg = register[0]; let there = register[1]; // encode message to send if (message) { X(msg); } // do the teleportation Teleport(msg, there); // check what message was sent if (M(there) == One) { set measurement = true; } // reset all qubits ResetAll(register); } return measurement; } }