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 Adjoint
Controlled
, 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 ApplyUnitary
není žá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.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro