Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Functors zijn factory's waarmee u toegang krijgt tot bepaalde specialisatie-implementaties van een aanroepbare implementatie.
Q# ondersteunt momenteel twee functors; de Adjoint en de Controlled, beide kunnen worden toegepast op bewerkingen die de nodige specialisaties bieden.
De Controlled en Adjoint functors pendelen; als ApplyUnitary een bewerking is die beide functors ondersteunt, is er geen verschil tussen Controlled Adjoint ApplyUnitary en Adjoint Controlled ApplyUnitary.
Beide hebben hetzelfde type en voeren bij aanroepen de implementatie uit die is gedefinieerd voor de controlled adjointspecialisatie.
Aangrenzende functor
Als de bewerking ApplyUnitary een eenheidstransformatie U- van de kwantumstatus definieert, heeft Adjoint ApplyUnitary toegang tot de implementatie van U†. De Adjoint functor is een eigen inverse, omdat (U†)† = U per definitie.
Adjoint Adjoint ApplyUnitary is bijvoorbeeld hetzelfde als ApplyUnitary.
De expressie Adjoint ApplyUnitary is een bewerking van hetzelfde type als ApplyUnitary; het heeft hetzelfde argument en retourtype en ondersteunt dezelfde functors. Net als elke bewerking kan deze worden aangeroepen met een argument van geschikt type. De volgende expressie past de aangrenzende specialisatie toe van ApplyUnitary op een argument arg:
Adjoint ApplyUnitary(arg)
Gecontroleerde functor
Voor een bewerking ApplyUnitary die een eenheidstransformatie definieert U- van de kwantumstatus, heeft Controlled ApplyUnitary toegang tot de implementatie die U afhankelijk is van alle qubits in een matrix van controle-qubits die de status |1⟩ hebben.
De expressie Controlled ApplyUnitary is een bewerking met hetzelfde retourtype en bewerkingskenmerken als ApplyUnitary, wat betekent dat deze dezelfde functors ondersteunt.
Hierbij wordt een argument van het type (Qubit[], <TIn>)gebruikt, waarbij <TIn> moet worden vervangen door het argumenttype ApplyUnitary, waarbij rekening wordt gehouden met equivalentie van singleton tuple.
| Operatie | Argumenttype | Type beheerd argument |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| RUILEN | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Als cs een matrix met qubits bevat, zijn q1 en q2 twee qubits. De bewerking SWAP is gedefinieerd hier, en de volgende expressie wisselt de status van q1 en q2 uit als alle qubits in cs de status |1⟩ hebben:
Controlled SWAP(cs, (q1, q2))
Notitie
Voorwaardelijk een bewerking toepassen op basis van de controle-qubits die een andere status hebben dan de status |1⟩ kan worden bereikt door de juiste aangrenzende transformatie toe te passen op de controle-qubits vóór aanroepen en de inverses erna toe te passen. De transformatie op alle controle-qubits die de status |0⟩ hebben, kan bijvoorbeeld worden bereikt door de X bewerking vóór en na toe te passen. Dit kan gemakkelijk worden uitgedrukt met behulp van een conjugatie. Niettemin kan de uitgebreidheid van een dergelijke constructie in de toekomst extra ondersteuning bieden voor een compactere syntaxis.