Fungsi klasik satu-bit mana adalah input bit dan adalah output bit dapat ditulis sebagai perhitungan yang dapat dibalik,
(Perhatikan bahwa setiap fungsi output dapat ditulis hanya sebagai fungsi 1-bit terpisah.)x ∈ { 0 , 1 } n n y ∈ { 0 , 1 } n f r : ( x , y ) ↦ ( x , y ⊕ f ( x ) ) m mf:x↦yx∈{0,1}nny∈{0,1}n
fr: ( x , y) ↦ ( x , y⊕ f( x ) )
mm
Gerbang kuantum yang mengimplementasikan ini pada dasarnya hanyalah gerbang kuantum yang terkait dengan evaluasi fungsi yang dapat dibalik. Jika Anda cukup menuliskan tabel kebenaran fungsi, setiap baris berhubungan dengan satu baris matriks kesatuan, dan hasilnya memberitahu Anda entri kolom mana yang berisi 1 (semua entri lainnya berisi 0).
Dalam kasus XNOR, kita memiliki tabel kebenaran standar, dan tabel kebenaran fungsi yang dapat dibalik
Dengan demikian, matriks kesatuan adalah
U=( 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
x00011011f( x )1001( x , y)000001010011100101110111( x , y⊕ f( x ) )001000010011100101111110
U= ⎛⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜0100000010000000001000000001000000001000000001000000000100000010⎞⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟.
Ini dapat dengan mudah didekomposisi dalam beberapa gerbang yang dikontrol-bukan dan sedikit atau dua flip.
Metode yang baru saja saya uraikan memberi Anda cara yang sangat aman untuk membuat konstruksi yang bekerja untuk , tetapi tidak dengan sempurna merekonstruksi korespondensi antara XOR dan dikontrol-tidak. Untuk itu, kita perlu mengasumsikan sedikit lebih banyak tentang sifat-sifat fungsi f ( x ) .f( x )f( x )
Asumsikan bahwa kita dapat mendekomposisi input menjadi sedemikian sehingga dan sedemikian rupa sehingga untuk semua nilai , nilai berbeda untuk setiap . Dalam hal ini, kita dapat mendefinisikan evaluasi fungsi yang dapat dibalik sebagaiIni berarti bahwa kami menggunakan 1 bit lebih sedikit daripada konstruksi sebelumnya, tetapi dari sini tekniknya dapat diulang.xa , ba ∈ { 0 , 1 }n - 1b ∈ { 0 , 1 }Sebuahf( a , b )b
f: ( a , b ) ↦ ( a , f( a , b ) ) .
Jadi, mari kita kembali ke tabel kebenaran untuk XNOR.
Kita dapat melihat itu, misalnya, ketika kita memperbaiki , dua output adalah , karenanya berbeda. Demikian pula untuk memperbaiki . Dengan demikian, kita dapat melanjutkan dengan konstruksi fungsi reversibel
dan ini memberi kita kesatuan
a b00011011f( a , b )1001
a = 01 , 0a = 1a b00011011a f( a , b )01001011
U= ⎛⎝⎜⎜⎜0100100000100001⎞⎠⎟⎟⎟
cNOT ⋅ ( 1 ⊗ X)