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 bitsbit .

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 oracleuniter , output dari fungsi ini adalah operasi yang melakukan langkah-langkah berikut:

  • X menerapkan operasi ke setiap kubit register kontrol yang sesuai dengan false elemen bits;
  • berlaku Controlled oracle untuk kontrol dan register target;
  • terapkan X operasi ke setiap qubit register kontrol yang sesuai dengan false elemen dari bits lagi untuk mengembalikan register kontrol ke status asli.

Output dari Controlled funktor adalah kasus ControlledOnBitString khusus di mana bits sama dengan [true, ..., true].