Funktoralkalmazás
A funktorok olyan gyárak, amelyek lehetővé teszik a hívhatóak speciális specializációs implementációinak elérését. Q#jelenleg két funktort támogat; Controlled
mindkettő Adjoint
alkalmazható a szükséges specializációkat biztosító műveletekre.
A Controlled
funktorok ingáznak Adjoint
; ha ApplyUnitary
olyan művelet, amely mindkét funktort támogatja, akkor nincs különbség Controlled Adjoint ApplyUnitary
az és Adjoint Controlled ApplyUnitary
a .
Mindkettő ugyanazzal a típussal rendelkezik, és meghíváskor végrehajtja a controlled adjoint
specializációhoz meghatározott implementációt.
Mellékjeles funktor
Ha a művelet ApplyUnitary
a kvantumállapot egy egységes transzformációs U-ját határozza meg, Adjoint ApplyUnitary
hozzáfér az U† implementációhoz. A Adjoint
funktor saját inverze, mivel (U†)† = U definíció szerint. Például ugyanaz, Adjoint Adjoint ApplyUnitary
mint ApplyUnitary
a .
A kifejezés Adjoint ApplyUnitary
ugyanolyan típusú művelet, mint ApplyUnitary
az ; ugyanazzal az argumentumsal és visszatérési típussal rendelkezik, és ugyanazokat a funktorokat támogatja. Mint minden műveletet, ez is meghívható egy megfelelő típusú argumentummal. Az alábbi kifejezés az argumentum arg
szomszédos specializációját ApplyUnitary
alkalmazza:
Adjoint ApplyUnitary(arg)
Szabályozott funktor
A kvantumállapot Controlled ApplyUnitary
egységes transzformációs U-ját meghatározó művelet ApplyUnitary
esetében a(z) |1⟩ állapotú vezérlő qubitek tömbjének U feltételesen alkalmazandó implementációja érhető el.
A kifejezés Controlled ApplyUnitary
olyan művelet, amelynek visszatérési típusa és műveleti jellemzői megegyeznekApplyUnitary
, ami azt jelenti, hogy ugyanazokat a funktorokat támogatja.
Egy típusú (Qubit[], <TIn>)
argumentumot vesz fel , ahol <TIn>
az argumentumtípust ApplyUnitary
kell lecserélni, figyelembe véve az egyenrangú egyenértékűséget .
Művelet | Argumentum típusa | Szabályozott argumentumtípus |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
cs
Ha egy qubittömböt tartalmaz, q1
és q2
két qubitet tartalmaz, és a művelet SWAP
itt van definiálva, akkor az alábbi kifejezés a(z) |1⟩ állapotban cs
lévő összes qubit állapotát q1
q2
cseréli le:
Controlled SWAP(cs, (q1, q2))
Feljegyzés
A művelet feltételes alkalmazása a(z) |1⟩ állapottól eltérő állapotban lévő vezérlő qubitek alapján úgy érhető el, hogy a megfelelő szomszédos átalakítást alkalmazza a vezérlő qubitekre a meghívás előtt, majd alkalmazza az inverzeket. A(z) |0⟩ állapotú összes vezérlő qubit átalakításának konfigurálása például a X
művelet előtt és után történő alkalmazásával érhető el. Ez kényelmesen kifejezhető egy konjugációval. Ennek ellenére az ilyen szerkezet részletessége további támogatást érdemelhet egy kompaktabb szintaxishoz a jövőben.