Aplikace funktoru

Funktory jsou továrny, které umožňují přístup ke konkrétním implementaci specializace volatelné. Q# v současné době podporuje dva funktory; a AdjointControlled, které lze použít pro operace, které poskytují potřebné specializace.

Funktory Controlled a Adjoint dojíždět; pokud ApplyUnitary je operace, která podporuje oba funktory, pak mezi a Adjoint Controlled ApplyUnitarynení žádný rozdíl.Controlled Adjoint ApplyUnitary Oba mají stejný typ a po vyvolání spustí implementaci definovanou controlled adjoint pro specializaci.

Adjoint functor

Pokud operace ApplyUnitary definuje jednotkovou transformaci U kvantového stavu, Adjoint ApplyUnitary přistupuje k implementaci U†. Functor Adjoint je vlastní inverzní, protože (U†)† = U podle definice. Například trasa Adjoint Adjoint ApplyUnitary je stejná jako ApplyUnitary.

Výraz Adjoint ApplyUnitary je operace stejného typu jako ApplyUnitary; má stejný argument a návratový typ a podporuje stejné funktory. Stejně jako u jakékoli jiné operace je možné ji vyvolat pomocí argumentu vhodného typu. Následující výraz použije vedlejší specializaciApplyUnitary pro argument arg:

Adjoint ApplyUnitary(arg) 

Řízený functor

Pro operaci ApplyUnitary , která definuje jednotkovou transformaci U kvantového stavu, přistupuje k implementaci, Controlled ApplyUnitary která aplikuje U podmíněně na všechny qubity v poli řídicích qubitů ve stavu |1⟩.

Výraz Controlled ApplyUnitary je operace se stejným návratovým typem a vlastnostmi operace jako ApplyUnitary, což znamená, že podporuje stejné funktory. Používá argument typu , kde <TIn> by měl být nahrazen typem argumentu ApplyUnitary, s ohledem na ekvivalenci řazené kolekce členů.(Qubit[], <TIn>)

Operace Typ argumentu Typ řízeného argumentu
× Qubit (Qubit[], Qubit)
SWAP (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

Konkrétně platí, že pokud cs obsahuje pole qubitů q1 a q2 jsou dva qubity a operace SWAP je definovaná tady, pak následující výraz vymění stav q1 a q2 pokud jsou všechny qubity v cs souboru ve stavu |1⟩:

Controlled SWAP(cs, (q1, q2))

Poznámka

Podmíněného použití operace založené na tom, že řídicí qubity jsou v jiném stavu, než je stav |1⟩, lze dosáhnout použitím odpovídající adjointable transformace na řídicí qubity před vyvoláním a použitím inverzních funkcí po. Podmínění transformace u všech qubitů ovládacích prvků ve stavu |0⟩ lze například dosáhnout použitím X operace před a po. To lze pohodlně vyjádřit pomocí konjugace. Nicméně podrobnost takového konstruktoru může v budoucnu zasluhot další podporu pro kompaktnější syntaxi.