Udostępnij za pośrednictwem


Sprzężenia

Conjugations są typowe w obliczeniach kwantowych. W kategoriach matematycznych są to wzorce postaci U†VU dla dwóch unitarnych przekształceń U i V. Ten wzorzec jest istotny ze względu na specyfikę pamięci kwantowej: obliczenia tworzą korelacje kwantowe lub splątanie w celu wykorzystania 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# dlatego 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ę interfejsu U i jeden zawierający implementację programu V. Uncomputation (czyli aplikacja U†) jest wykonywana automatycznie w ramach wyrażenia.

Wyrażenie przyjmuje postać

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

gdzie <statements> jest zastępowany dowolną liczbą instrukcji definiujących implementację odpowiednio U iV . Oba bloki mogą zawierać dowolne obliczenia klasyczne, oprócz zwykłych ograniczeń dotyczących automatycznego generowania wersji przylegających, które mają zastosowanie do within bloku. Niezmiennie powiązane zmienne używane w ramach within bloku mogą nie zostać ponownie przydzielone w ramach apply bloku.