Fungsi ControlledOnBitString
Peringatan
Dokumentasi ini mengacu pada QDK Klasik, yang telah digantikan oleh Modern QDK.
Silakan lihat https://aka.ms/qdk.api dokumentasi API untuk QDK Modern.
Namespace: Microsoft.Quantum.Canon
Paket: Microsoft.Quantum.Standard
Mengembalikan operasi uniter yang menerapkan oracle pada register target jika status register kontrol sesuai dengan masker bit tertentu.
function ControlledOnBitString<'T> (bits : Bool[], oracle : ('T => Unit is Adj + Ctl)) : ((Qubit[], 'T) => Unit is Adj + Ctl)
Deskripsi
Output dari fungsi ini adalah operasi yang dapat diwakili oleh transformasi uniter $U$ sehingga \begin{align} U \ket{b_0 b_1 \cdots b_{n - 1}} \ket{\psi} = \ket{b_0 b_1 \cdots b_{n-1}} \otimes \begin{cases} V \ket{\psi} & \textrm{if} (b_0 b_1 \cdots b_{n - 1}) = \texttt{bits} \\ \ket{\psi} & \textrm{otherwise} \end{cases}, \end{align} di mana $V$ adalah transformasi uniter yang mewakili tindakan oracle
operasi.
Input
bit : Bool[]
String bit untuk mengontrol operasi uniter yang diberikan.
oracle : 'T =>Unit adalah Adj + Ctl
Operasi uniter yang akan diterapkan pada register target.
Output : (Qubit[],'T) =>Unit adalah Adj + Ctl
Operasi uniter yang berlaku oracle
pada register target jika status register kontrol sesuai dengan masker bits
bit .
Jenis parameter
'T
Contoh
Cuplikan kode berikut setara:
(ControlledOnBitString(bits, oracle))(controlRegister, targetRegister);
dan
within {
ApplyPauliFromBitString(PauliX, false, bits, controlRegister);
} apply {
Controlled oracle(controlRegister, targetRegister);
}
Kode berikut menyiapkan status $\frac{1}{2}(\ket{00} - \ket{01} + \ket{10} + \ket{11})$:
using (register = Qubit[2]) {
ApplyToEach(H, register);
(ControlledOnBitString([false], Z))(register[0..0], register[1]);
}
Keterangan
Pola yang diberikan oleh bits
mungkin lebih pendek dari controlRegister
, dalam hal ini qubit kontrol tambahan diabaikan (yaitu, tidak dikontrol pada $\ket{0}$ atau $\ket{1}$).
Jika bits
lebih panjang dari controlRegister
, kesalahan akan muncul.
Mengingat array bits
Boolean dan operasi oracle
uniter , output dari fungsi ini adalah operasi yang melakukan langkah-langkah berikut:
X
menerapkan operasi ke setiap kubit register kontrol yang sesuai denganfalse
elemenbits
;- berlaku
Controlled oracle
untuk kontrol dan register target; - terapkan
X
operasi ke setiap qubit register kontrol yang sesuai denganfalse
elemen daribits
lagi untuk mengembalikan register kontrol ke status asli.
Output dari Controlled
funktor adalah kasus ControlledOnBitString
khusus di mana bits
sama dengan [true, ..., true]
.