Seperti apa program kuantum yang sangat sederhana?

76

Mengingat pengumuman chip fotonik kuantum pertama yang dapat diprogram di dunia , saya bertanya-tanya seperti apa perangkat lunak untuk komputer yang menggunakan keterikatan kuantum nantinya. Salah satu program pertama yang pernah saya tulis adalah sesuatu seperti

for i = 1 to 10
  print i
next i

Adakah yang bisa memberikan contoh kode kesederhanaan yang sebanding yang akan menggunakan chip kuantum fotonik (atau perangkat keras serupa), dalam pseudocode atau bahasa tingkat tinggi? Saya mengalami kesulitan membuat lompatan konseptual dari pemrograman tradisional ke keterikatan, dll.

xpda
sumber
tautan Anda rusak
Suresh Venkat
1
+1 dan untuk pertanyaan ini. Saya sangat ingin tahu tentang bahasa pemrograman di bawah paradigma yang berbeda dari Turing Machines, namun sejauh ini kita mungkin benar-benar mengeksekusi kode dalam komputer kuantum.
Janoma

Jawaban:

60

Caveat Emptor: berikut ini sangat bias pada penelitian saya sendiri dan pandangan di bidang QC. Ini bukan merupakan konsensus umum lapangan dan bahkan mungkin mengandung beberapa promosi diri.

Masalah menunjukkan 'halo dunia' komputasi kuantum adalah bahwa kita pada dasarnya masih jauh dari komputer kuantum seperti Leibnitz atau Babbage dari komputer Anda saat ini. Sementara kita tahu bagaimana mereka harus beroperasi secara teoritis, tidak ada cara standar untuk benar-benar membangun komputer kuantum fisik. Efek sampingnya adalah tidak ada model pemrograman komputasi kuantum tunggal. Buku teks seperti Nielsen et al. akan menampilkan diagram 'sirkuit kuantum', tetapi itu jauh dari bahasa pemrograman formal: mereka mendapatkan sedikit 'lambaian tangan' pada detail seperti kontrol klasik atau berurusan dengan input / output / hasil pengukuran.

Apa yang paling cocok bagi saya dalam penelitian saya sebagai ilmuwan komputer bahasa pemrograman, dan untuk mendapatkan inti QC kepada ilmuwan komputer lain, adalah menggunakan model QC paling sederhana yang pernah saya temui yang melakukan segalanya.

Program komputasi kuantum paling sederhana yang saya lihat yang mengandung semua elemen penting adalah program tiga instruksi kecil dalam model pemrograman kuantum paling sederhana yang pernah saya temui. Saya menggunakannya seperti yang Anda lakukan 'halo dunia' untuk mendapatkan dasar-dasar.

Izinkan saya untuk memberikan ringkasan singkat yang disederhanakan dari Kalkulus Pengukuran oleh Danos et al. 1 yang didasarkan pada didasarkan pada komputer kuantum satu arah 2 : qubit dihancurkan saat diukur, tetapi mengukurnya mempengaruhi semua qubit lain yang terjerat dengannya. Ini memiliki beberapa manfaat teoritis dan praktis atas komputer kuantum 'berbasis sirkuit' seperti yang direalisasikan oleh chip fotonik, tetapi itu adalah diskusi yang berbeda.

Pertimbangkan komputer kuantum yang hanya memiliki lima instruksi: N, E, M, X, dan Z. "Bahasa assembly" -nya mirip dengan komputer biasa Anda, setelah menjalankan satu instruksi, ia melanjutkan ke instruksi berikutnya dalam urutan. Setiap instruksi mengambil pengidentifikasi qubit target, kami hanya menggunakan angka di sini, dan argumen lainnya.

N 2          # create a new quantum bit and identify it as '2'
E 1 2        # entangle qubits '1' and '2', qubit 1 already exists and is considered input
M 1 0        # measure qubit '1' with an angle of zero  (angle can be anything in [0,2pi]
             # qubit '1' is destroyed and the result is either True or False
             # operations beyond this point can be dependent on the signal of '1'
X 2 1        # if the signal of qubit '1' is True, execute the Pauli-X operation on qubit '2'

Program di atas dengan demikian menciptakan ancilla, menjeratnya dengan input qubit, mengukur input dan tergantung pada hasil pengukuran melakukan operasi pada ancilla. Hasilnya adalah qubit 2 sekarang berisi status qubit 1 setelah operasi Hadamard .

Di atas secara alami pada tingkat rendah sehingga Anda tidak ingin kode tangan itu. Manfaat kalkulus pengukuran adalah ia memperkenalkan 'pola', semacam makro komposer yang memungkinkan Anda untuk menyusun algoritma yang lebih besar seperti yang Anda lakukan dengan subrutin. Anda mulai dengan pola 1-instruksi dan menumbuhkan pola yang lebih besar dari sana.

Alih-alih urutan instruksi assembler-like, juga umum untuk menuliskan program sebagai grafik:

 input                .........
    \--> ( E ) ---> (M:0)     v
(N) ---> (   ) ------------> (X) ---> output

di mana panah penuh adalah dependensi qubit dan panah putus-putus adalah ketergantungan 'sinyal'.

Berikut ini adalah contoh Hadamard yang sama diungkapkan dalam alat pemrograman kecil seperti yang saya bayangkan seorang 'programmer kuantum' akan digunakan.

Alat Pengukuran Kalkulus

sunting: (menambahkan hubungan dengan komputer 'klasik') Komputer klasik masih benar-benar efisien dalam apa yang mereka lakukan yang terbaik, dan dengan demikian visinya adalah bahwa komputer kuantum akan digunakan untuk memuat algoritma tertentu, analog dengan bagaimana komputer saat ini memuat grafik ke sebuah GPU. Seperti yang Anda lihat di atas, CPU akan mengontrol komputer kuantum dengan mengirimkannya aliran instruksi dan membaca kembali hasil pengukuran dari 'sinyal' boolean. Dengan cara ini Anda memiliki pemisahan ketat kontrol klasik oleh CPU dan status kuantum dan efek pada komputer kuantum.

Sebagai contoh, saya akan menggunakan co-prosesor kuantum saya untuk menghitung boolean atau cointoss acak. Komputer klasik bersifat deterministik, sehingga buruk dalam mengembalikan angka acak yang baik. Komputer kuantum secara inheren probabilistik, yang harus saya lakukan untuk mendapatkan 0 atau 1 acak adalah mengukur qubit yang seimbang. Komunikasi antara CPU dan 'QPU' akan terlihat seperti ini:

 qrand()       N 1; M 1 0;
 ==>  | CPU | ------------> | QPU |  ==> { q1 } ,  []
                 start()
      |     | ------------> |     |  ==> { } , [q1: 0]
                 read(q1)         
      |     | ------------> |     |
                  q1: 0 
 0    |     | <-----------  |     |
 <==

Di mana { ... }memori kuantum QPU berisi qubit dan [...]merupakan memori klasik (sinyal) yang berisi boolean.


  1. Danos et al. Kalkulus Pengukuran. arXiv (2007) vol. quant-ph
  2. Raussendorf dan Briegel. Komputer kuantum satu arah. Physical Review Letters (2001) vol. 86 (22) hlm. 5188-5191
Daging sapi
sumber
Diskusi yang bagus tentang topik ini, terima kasih, Daging Sapi. Btw, OP berbicara tentang "Saya mengalami kesulitan membuat lompatan konseptual dari pemrograman tradisional ke keterjeratan, dll." Jadi, sesuatu yang membantu dalam transisi itu harus diterima.
Kris
Anda benar, saya tampaknya benar-benar telah melewatkan bagian itu, karena malu: / Menambahkan paragraf
.≈
"Pertimbangkan komputer kuantum yang hanya memiliki lima instruksi: N, E, M, X dan Z." tidak ada penjelasan tentang instruksi Z :(
Fernando Gonzalez Sanchez
Z sangat mirip dengan X;) en.wikipedia.org/wiki/Pauli_matrices Operasi X mengubah vektor [ab] menjadi [ba], operasi Z mengubahnya menjadi [a -b].
Daging sapi
21

Saya berasumsi bahwa libquantum C , kuantum monad Haskell atau Perl's Quantum :: Keterikatan semua mewakili perhitungan kuantum dengan setia. Anda mungkin melihat contoh mereka.

Secara umum, Anda menggambarkan algoritma kuantum sebagai algoritma klasik yang menerapkan serangkaian operator linier ke posisi super yang mewakili keadaan sistem kuantum Anda. Artikel jurnal sering menggambarkan rangkaian dengan garis untuk bit / register kuantum dan kotak untuk operator linier.

Tentu saja, bagian yang sulit tidak menggambarkan algoritma tetapi memahami mengapa itu bekerja, seperti halnya algoritma probabilistik. Saya selalu menganggap algoritma Grover cukup mudah dipahami. Anda juga bisa membaca tentang transformasi Quantum Fourier yang digunakan oleh Algoritma Shor .

Jeff Burdges
sumber
11

Ini terlihat seperti ini: masukkan deskripsi gambar di sini

Anda juga dapat memiliki akses ke prosesor kuantum nyata. Buka di sini dan daftar: http://www.research.ibm.com/quantum/

Ini juga termasuk simulator sehingga Anda dapat menguji tanpa menggunakan perangkat keras yang sebenarnya, atau menggunakan kredit (gratis) untuk berjalan pada perangkat keras yang sebenarnya.

Robert Lisiecki
sumber
3

Saya pikir jawabannya adalah "Sangat mirip dengan program klasik sederhana."

Jika kita menganggap kalkulus lambda yang diketik sederhana (dengan produk) sebagai jantung dari pemrograman klasik, maka kita dapat mengeksploitasi bahwa itu adalah teori tipe internal dari kategori kartesius tertutup, yang memberi kita sebuah pointer.

nk

Jadi, jika STLC adalah untuk kategori tertutup kartesius, apa yang dimaksud dengan kategori monoidal simetris tertutup? Kita tahu bahwa logika internal kategori monoid simetris adalah MILL . Jadi yang kita butuhkan adalah teori tipe yang sesuai dengan MILL - teori tipe linear.

Melangkah menjauh dari omong kosong abstrak, apa yang kita dapatkan dengan teori tipe linear? Linearitas. Kami mendapatkan linearitas sumber daya. Dan inilah yang kita inginkan. Anda tidak diizinkan untuk mengkloning bit kuantum. Anda tidak diizinkan mengukur secara implisit. Dan linearitas berarti Anda tidak dapat melakukan keduanya selama reduksi.

Ada beberapa pekerjaan pada teori tipe linear, tetapi tidak banyak. Saya mendapatkan beberapa ide dalam posting ini dari makalah ini: Fisika, Topologi, Logika dan Komputasi: A Rosetta Stone oleh Mike Stay dan John Baez, yang jauh lebih detail daripada handwaving saya.

Darius Jahandarie
sumber
0

Saya mungkin akan pergi dengan implementasi counter "divide by small n" sederhana.

Sebagai contoh: diberi sumber 10GHz, hasilkan output 5GHz (tetapi angka-angka ini arbitrer dan hanya dimaksudkan untuk menggambarkan konsep).

Ini memungkinkan kita mengabaikan masalah seperti penyimpanan dan arsitektur Von Neumann, dan memungkinkan kita fokus pada apakah komponen benar-benar melakukan sesuatu yang dapat dimengerti.

Maka, tujuan berikutnya adalah untuk membangun repertoar kecil "n kecil" (tapi saya juga akan mendengarkan pushback dari peneliti saya - jika mereka merasa tujuan kecil lainnya akan lebih cepat berbuah, saya pasti ingin memahami apa yang mereka katakan padaku.)

Tujuan jangka panjang akan mencakup mekanisme untuk memompa informasi masuk dan keluar dari sistem, dan memegang informasi itu cukup lama untuk menggunakannya.

(Mungkin perlu diingat bahwa program komputer awal semuanya "bawaan". Hanya setelah pengalaman yang luas dengan sistem-sistem itulah kami dapat menerapkan program yang tersimpan.)

rdm
sumber
-6

Saya pikir pemrograman komputer kuantum harus dilihat dari sudut pandang yang berbeda dari pemrograman berorientasi objek normal.

QC memiliki kemampuan otak yang sama untuk berpikir dan memutuskan. Kemampuan untuk berpikir berarti memiliki kekuatan penambangan data sumber data yang akan menjadi pilihan yang mungkin, dan memutuskan mana yang akan dipilih dari semua keadaan yang mungkin.

Suatu perangkat lunak pada titik ini perlu dirancang sedemikian rupa sehingga qubit mewakili sumber data yang dapat ditambang data dan dilibatkan dengan kelompok data lainnya.

QC harus memiliki penambang data yang memproses pembacaan data, menghubungkan opsi yang berbeda bersama-sama kelompok sumber data yang berbeda yang menyajikan informasi, membaca semua keadaan yang mungkin dan memilih yang mana untuk melanjutkan.

Itulah cara otak kita bekerja. QC dapat memahami dan bertindak sesuai dengan hukum Mekanika Kuantum, yang berarti Anda memberikan masalah dan QC menunjukkan semua solusi yang mungkin untuk menyelesaikannya.

itu seberapa kuat bisa menjadi QC, apakah Anda setuju?

https://www.cs.rutgers.edu/~mlittman/papers/openhouse11.pdf ini adalah titik untuk memulai, kemudian membuat dataminer untuk membangun perangkat kuantum dengan gerbang dll, pembaca yang terhubung ke dataminer, untuk membaca dan berikan umpan balik. data host komponen Datasource quantum dan ruang lingkup pengetahuan tempat dataminer bertindak.

alex
sumber