Coniugazioni

Le coniugazioni sono comuni nei calcoli quantistici. In termini matematici, si tratta di modelli del formato U†VU per due trasformazioni unitari U e V. Questo modello è rilevante a causa delle peculiarità della memoria quantistica: i calcoli creano correlazioni quantistiche o entanglement, per sfruttare gli asset univoci del quantum. Tuttavia, ciò significa anche che una volta che una subroutine non ha più bisogno dei relativi qubit, tali qubit non possono essere facilmente reimpostati e rilasciati poiché l'osservazione dello stato influirà sul resto del sistema. Per questo motivo, l'effetto di un calcolo precedente deve in genere essere invertito prima di rilasciare e riutilizzare la memoria quantistica.

Q# ha quindi un costrutto dedicato per esprimere calcoli che richiedono una pulizia di questo tipo. Le espressioni sono costituite da due blocchi di codice, uno contenente l'implementazione di U e uno contenente l'implementazione di V. L'annullamento del calcolo , ovvero l'applicazione di U†, viene eseguita automaticamente come parte dell'espressione.

L'espressione assume il formato

within {
    <statements>
}
apply {
    <statements>
}

dove <statements> viene sostituito con un numero qualsiasi di istruzioni che definiscono rispettivamente l'implementazione di U e V . Entrambi i blocchi possono contenere calcoli classici arbitrari, a parte le normali restrizioni per la generazione automatica di versioni adiacenti applicabili al within blocco. Le variabili associate mutably usate come parte del within blocco potrebbero non essere riassegnate come parte del apply blocco.