Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I funtori sono factory che consentono di accedere a specifiche implementazioni di specializzazione di un chiamabile.
Q# attualmente supporta due funtori; il Adjoint e il Controlled, entrambi i quali possono essere applicati alle operazioni che forniscono le specializzazioni necessarie.
I funtori Controlled e Adjoint pendolari; se ApplyUnitary è un'operazione che supporta entrambi i funtori, non esiste alcuna differenza tra Controlled Adjoint ApplyUnitary e Adjoint Controlled ApplyUnitary.
Entrambi hanno lo stesso tipo e, al momento della chiamata, eseguire l'implementazione definita per la specializzazione controlled adjoint.
Funtore adiacente
Se l'operazione ApplyUnitary definisce una trasformazione unitaria U dello stato quantistico, Adjoint ApplyUnitary accede all'implementazione di U†. Il funtore Adjoint è il proprio inverso, poiché (U†)† = U per definizione. Ad esempio, Adjoint Adjoint ApplyUnitary è uguale a ApplyUnitary.
L'espressione Adjoint ApplyUnitary è un'operazione dello stesso tipo di ApplyUnitary; ha lo stesso argomento e il tipo restituito e supporta gli stessi funtori. Come qualsiasi operazione, può essere richiamata con un argomento di tipo appropriato. L'espressione seguente applica la specializzazione adiacente di ApplyUnitary a un argomento arg:
Adjoint ApplyUnitary(arg)
Funtore controllato
Per un'operazione ApplyUnitary che definisce una trasformazione unitaria U dello stato quantistico, Controlled ApplyUnitary accede all'implementazione che applica U condizionale su tutti i qubit in una matrice di qubit di controllo nello stato |1⟩.
L'espressione Controlled ApplyUnitary è un'operazione con lo stesso tipo restituito e caratteristiche dell'operazioneApplyUnitary, ovvero supporta gli stessi functor.
Accetta un argomento di tipo (Qubit[], <TIn>), dove <TIn> deve essere sostituito con il tipo di argomento di ApplyUnitary, prendendo in considerazione di equivalenza della tupla singleton.
| Operazione | Tipo di argomento | Tipo di argomento controllato |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| BARATTARE | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
In concreto, se cs contiene una matrice di qubit, q1 e q2 sono due qubit e l'operazione SWAP è definita qui, l'espressione seguente scambia lo stato di q1 e q2 se tutti i qubit in cs si trovano nello stato |1⟩:
Controlled SWAP(cs, (q1, q2))
Nota
L'applicazione condizionale di un'operazione basata sui qubit di controllo in uno stato diverso da |1⟩ può essere ottenuta applicando la trasformazione adiacente appropriata ai qubit di controllo prima della chiamata e applicando gli inverse dopo. È possibile impostare la trasformazione su tutti i qubit di controllo nello stato |0⟩, ad esempio, applicando l'operazione di X prima e dopo. Questa operazione può essere espressa in modo pratico usando un coniugazione. Tuttavia, il dettaglio di tale costrutto può meritare ulteriore supporto per una sintassi più compatta in futuro.