Sprzężenia
Conjugations są wspólne w obliczeniach kwantowych. W kategoriach matematycznych są to wzorce formularzy U†VU dla dwóch przekształceń jednostkowych U i V. Ten wzorzec jest istotny ze względu na specyfikę pamięci kwantowej: obliczenia tworzą korelacje kwantowe lub splątanie, aby używać unikatowych zasobów kwantowych. Oznacza to jednak również, że gdy podroutyna nie potrzebuje już kubitów, te kubity nie mogą być łatwo resetowane i zwalniane, ponieważ obserwowanie ich stanu wpłynie na resztę systemu. Z tego powodu efekt poprzedniego obliczenia zwykle musi zostać odwrócony przed zwolnieniem i ponownym użyciem pamięci kwantowej.
Q# z tego względu ma dedykowaną konstrukcję do wyrażania obliczeń, które wymagają takiego czyszczenia. Wyrażenia składają się z dwóch bloków kodu, jeden zawierający implementację U i jeden zawierający implementację V . niekomputacyjne (czyli zastosowanie U†) jest wykonywane automatycznie w ramach wyrażenia.
Wyrażenie przyjmuje formularz
within {
<statements>
}
apply {
<statements>
}
gdzie <statements>
jest zastępowany dowolną liczbą instrukcji definiujących implementację U i V.
Oba bloki mogą zawierać dowolne klasyczne obliczenia, oprócz zwykłych ograniczeń dotyczących automatycznego generowania sąsiednich wersji, które mają zastosowanie do bloku within
. Zmienne powiązane zmutowane używane w ramach bloku within
mogą nie być ponownie przypisywane jako część bloku apply
.