Komputasi klasik di komputer kuantum
Sekarang kita akan beralih ke implementasi algoritma klasik di komputer kuantum. Kita akan lihat bahwa komputasi apa pun yang bisa dilakukan dengan sirkuit Boolean klasik juga bisa dilakukan oleh sirkuit kuantum dengan biaya komputasi asimtotik yang serupa. Selain itu, ini bisa dilakukan dengan cara yang "bersih" seperti yang akan dijelaskan segera, yang merupakan syarat penting agar komputasi ini bisa digunakan sebagai subrutin dalam komputasi kuantum yang lebih besar.
Mensimulasikan sirkuit Boolean dengan sirkuit kuantumβ
Sirkuit Boolean terdiri dari gate AND, OR, NOT, dan FANOUT. Untuk mensimulasikan sirkuit Boolean dengan sirkuit kuantum, kita mulai dengan menunjukkan cara setiap dari keempat gate ini bisa disimulasikan oleh gate kuantum. Setelah itu selesai, mengonversi sirkuit Boolean tertentu ke sirkuit kuantum tinggal mensimulasikan satu gate dalam satu waktu. Kita hanya perlu gate NOT, gate controlled-NOT, dan gate Toffoli untuk melakukan ini, yang semuanya adalah operasi deterministik sekaligus operasi uniter.
Gate Toffoliβ
Gate Toffoli bisa juga dideskripsikan sebagai gate controlled-controlled-NOT, yang aksinya pada status basis standar ditunjukkan pada gambar berikut.
Mengingat bahwa kita menggunakan konvensi pengurutan Qiskit, di mana qubit diurutkan dengan signifikansi yang meningkat dari atas ke bawah, representasi matriks gate ini adalah sebagai berikut.
Cara lain untuk memikirkan gate Toffoli adalah bahwa gate ini pada dasarnya merupakan query gate untuk fungsi AND, dalam arti bahwa gate ini mengikuti pola yang kita lihat di pelajaran sebelumnya untuk implementasi query gate uniter dari fungsi sembarang yang memiliki input dan output berupa string biner.
Gate Toffoli tidak termasuk dalam set gate default yang dibahas sebelumnya di pelajaran ini, tetapi memungkinkan untuk membangun gate Toffoli dari gate dan CNOT sebagai berikut.
Mensimulasikan gate Boolean dengan gate Toffoli, controlled-NOT, dan NOTβ
Satu gate Toffoli, yang digunakan bersama dengan beberapa gate NOT, bisa mengimplementasikan gate AND dan OR, dan gate FANOUT bisa dengan mudah diimplementasikan menggunakan gate controlled-NOT, seperti yang disarankan oleh diagram berikut.
Dalam ketiga kasus tersebut, qubit tempat gate AND, OR, dan FANOUT bekerja masuk dari kiri sebagai input, dan kita juga memerlukan satu qubit workspace yang diinisialisasi ke status nol untuk masing-masing gate. Qubit workspace ini muncul di dalam kotak yang mewakili implementasi gate untuk menunjukkan bahwa qubit ini baru, dan oleh karena itu merupakan bagian dari biaya implementasi ini.
Untuk gate AND dan OR, kita juga memiliki dua qubit yang tersisa, selain qubit output. Misalnya, di dalam kotak dalam diagram yang mewakili simulasi gate AND, dua qubit teratas dibiarkan dalam status dan Qubit ini diilustrasikan sebagai tetap berada di dalam kotak karena tidak lagi dibutuhkan dan bukan bagian dari output. Qubit ini bisa diabaikan untuk sementara, meskipun kita akan memperhatikannya kembali sebentar lagi.
Gate Boolean yang tersisa, gate NOT, sudah termasuk dalam set gate kuantum default kita, jadi kita tidak memerlukan simulasi untuk yang satu ini.
Simulasi gate demi gate dari sirkuit Booleanβ
Sekarang misalkan kita memiliki sirkuit Boolean biasa bernama yang terdiri dari gate AND, OR, NOT, dan FANOUT, dan memiliki bit input dan bit output. Misalkan adalah jumlah gate dalam dan kita beri nama pada fungsi yang dihitung oleh yang berbentuk
untuk
Sekarang pertimbangkan apa yang terjadi ketika kita melewati gate AND, OR, dan FANOUT dari satu per satu, mengganti masing-masing dengan simulasi yang sesuai yang dijelaskan di atas, termasuk penambahan qubit workspace yang diperlukan. Kita beri nama sirkuit yang dihasilkan dan kita urutkan qubit dari sehingga bit input dari bersesuaian dengan qubit teratas dari dan qubit workspace ada di bawah.
Di sini, adalah jumlah qubit workspace yang diperlukan β satu untuk setiap gate AND, OR, dan FANOUT dari β dan adalah fungsi berbentuk yang mendeskripsikan status qubit sisa yang dibuat oleh simulasi gate setelah dijalankan. Dalam gambar, qubit yang bersesuaian dengan output ada di atas dan qubit sisa yang tersimpan ada di bawah. Kita bisa memaksanya terjadi seperti ini jika mau dengan mengatur ulang qubit menggunakan gate SWAP, yang bisa diimplementasikan dengan tiga gate controlled-NOT seperti ini:
Seperti yang akan kita lihat di bagian berikutnya, sebenarnya tidak terlalu penting untuk mengatur ulang qubit output seperti ini, tetapi cukup mudah dilakukan jika kita mau.
Fungsi yang mendeskripsikan status klasik qubit sisa ditentukan oleh sirkuit tetapi kita sebenarnya tidak perlu terlalu khawatir tentangnya; kita tidak peduli secara spesifik tentang status qubit ini saat komputasi selesai. Huruf datang setelah jadi ini adalah nama yang masuk akal untuk fungsi ini karena alasan itu, tetapi ada alasan yang lebih baik untuk memilih nama β singkatan dari garbage (sampah).
Membersihkan sampahβ
Jika satu-satunya minat kita adalah mengevaluasi fungsi yang dihitung oleh sirkuit Boolean tertentu dengan sirkuit kuantum, kita tidak perlu melanjutkan lebih jauh dari simulasi gate demi gate yang baru saja dijelaskan. Ini berarti bahwa, selain output fungsi, kita akan memiliki banyak sampah yang tersisa.
Namun, ini tidak cukup baik jika kita ingin melakukan komputasi klasik sebagai subrutin dalam komputasi kuantum yang lebih besar, karena qubit sampah tersebut akan menimbulkan masalah. Fenomena interferensi sangat penting bagi algoritma kuantum, dan qubit sampah bisa merusak pola interferensi yang dibutuhkan agar algoritma kuantum bekerja.
Untungnya, membersihkan sampah tidak sulit. Kuncinya adalah memanfaatkan fakta bahwa karena adalah sirkuit kuantum, kita bisa menjalankannya secara terbalik, cukup dengan mengganti setiap gate dengan inversnya dan menerapkannya dalam urutan terbalik, sehingga mendapatkan sirkuit kuantum untuk operasi Gate Toffoli, gate CNOT, dan gate NOT sebenarnya merupakan invers dari dirinya sendiri, sehingga menjalankan secara terbalik sebenarnya hanya soal menerapkan gate dalam urutan terbalik β tetapi secara lebih umum sirkuit kuantum mana pun bisa dibalik seperti yang baru saja dijelaskan.
Secara khusus, yang bisa kita lakukan adalah menambahkan qubit lagi (mengingat bahwa fungsi memiliki bit output), menggunakan gate CNOT untuk menyalin output dari ke qubit ini, dan membalik untuk membersihkan sampah. Gambar berikut mengilustrasikan sirkuit yang dihasilkan dan mendeskripsikan aksinya pada status basis standar.
Jika kita menaruh kotak di seluruh sirkuit dan menyebutnya tampilannya seperti ini:
Mengingat bahwa memiliki gate, sirkuit akan memiliki gate.
Jika kita mengabaikan qubit workspace tambahan, yang kita miliki adalah sirkuit yang berfungsi persis seperti query gate untuk fungsi Jika kita hanya ingin menghitung fungsi pada string tertentu, kita bisa mengatur dan nilai yang dihasilkan akan muncul pada qubit terbawah β atau kita bisa memasukkan status yang berbeda ke qubit terbawah jika mau (mungkin untuk memanfaatkan phase kickback, seperti dalam algoritma Deutsch atau Deutsch-Jozsa).
Ini berarti bahwa untuk algoritma query mana pun, jika kita memiliki sirkuit Boolean yang menghitung fungsi input, kita bisa mengganti setiap query gate dengan implementasi sirkuitnya, dan algoritma query akan berfungsi dengan benar.
Perlu dicatat bahwa qubit workspace diperlukan untuk membuat proses ini berjalan, tetapi qubit tersebut dikembalikan ke status awalnya setelah sirkuit gabungan dieksekusi. Ini memungkinkan qubit ini digunakan kembali sebagai qubit workspace untuk tujuan lain. Ada juga strategi yang diketahui untuk mengurangi jumlah qubit workspace yang diperlukan (yang memerlukan biaya membuat sirkuit lebih besar), tetapi kita tidak akan membahas strategi tersebut di sini.
Mengimplementasikan fungsi invertibelβ
Konstruksi yang baru saja dijelaskan memungkinkan kita mensimulasikan sirkuit Boolean mana pun dengan sirkuit kuantum secara bebas sampah. Jika adalah sirkuit Boolean yang mengimplementasikan fungsi maka kita mendapatkan sirkuit kuantum yang beroperasi sebagai berikut pada status basis standar.
Angka menunjukkan berapa banyak qubit workspace yang diperlukan secara total. Ini cukup untuk tujuan kursus ini, tetapi memungkinkan untuk mengambil metodologi ini satu langkah lebih jauh ketika fungsi itu sendiri invertibel.
Lebih tepatnya, misalkan fungsi berbentuk dan juga misalkan ada fungsi sedemikian sehingga untuk setiap (yang pasti unik ketika ada). Ini berarti bahwa operasi yang mentransformasi menjadi untuk setiap adalah uniter, jadi kita mungkin berharap bisa membangun sirkuit kuantum yang mengimplementasikan operasi uniter yang didefinisikan oleh
untuk setiap
Untuk memperjelas, fakta bahwa ini adalah operasi uniter bergantung pada yang invertibel β ini bukan uniter ketika tidak invertibel. Mengabaikan qubit workspace, berbeda dari operasi yang diimplementasikan sirkuit karena kita tidak menyimpan salinan input dan meng-XOR-nya ke string sembarang, kita mengganti dengan
Pertanyaannya adalah: ketika invertibel, bisakah kita melakukan ini?
Jawabannya ya, asalkan kita diizinkan menggunakan qubit workspace dan, selain memiliki sirkuit Boolean yang menghitung kita juga memiliki satu yang menghitung Jadi, ini bukan jalan pintas untuk menginversi fungsi secara komputasional ketika kita belum tahu cara melakukannya! Diagram berikut mengilustrasikan cara melakukannya dengan menggabungkan dua sirkuit kuantum, dan yang diperoleh secara individual untuk fungsi dan melalui metode yang dijelaskan di atas, bersama dengan gate swap, dengan mengambil sebagai maksimum dari jumlah qubit workspace yang diperlukan oleh dan