Functor-toepassing
Functors zijn factory's waarmee u toegang krijgt tot bepaalde specialisatie-implementaties van een aanroepbaar. Q# ondersteunt momenteel twee functors; de Adjoint
en de Controlled
, die beide kunnen worden toegepast op bewerkingen die de nodige specialisaties bieden.
De Controlled
functors en Adjoint
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 adjoint
specialisatie.
Aangrenzende functor
Als de bewerking ApplyUnitary
een eenheidstransformatie-U van de kwantumstatus definieert, Adjoint ApplyUnitary
wordt toegang tot de implementatie van U†. De Adjoint
functor is een eigen inverse, aangezien (U†)† = U per definitie. is bijvoorbeeld Adjoint Adjoint ApplyUnitary
hetzelfde als ApplyUnitary
.
De expressie Adjoint ApplyUnitary
is een bewerking van hetzelfde type als ApplyUnitary
; deze heeft hetzelfde argument en hetzelfde retourtype en ondersteunt dezelfde functors. Net als elke bewerking kan deze worden aangeroepen met een argument van het juiste type. Met de volgende expressie wordt de aangrenzende specialisatie van ApplyUnitary
toegepast op een argument arg
:
Adjoint ApplyUnitary(arg)
Gecontroleerde functor
Voor een bewerking ApplyUnitary
die een eenheidstransformatie-U van de kwantumstatus definieert, Controlled ApplyUnitary
krijgt u toegang tot de implementatie die U toepast, afhankelijk van alle qubits in een matrix met controle-qubits in de status |1⟩.
De expressie Controlled ApplyUnitary
is een bewerking met hetzelfde retourtype en dezelfde 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 van ApplyUnitary
, rekening houdend met de equivalentie van singleton tuple .
Bewerking | Argumenttype | Gecontroleerd argumenttype |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
SWAP | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
cs
Als dit een matrix van qubits q1
bevat en q2
twee qubits zijn en de bewerking SWAP
hier is gedefinieerd, wisselt de volgende expressie 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 zich in een andere toestand dan de toestand |1⟩ bevinden, kan worden bereikt door de juiste aangrenzende transformatie toe te passen op de controle-qubits vóór de aanroep en de inverses daarna toe te passen. Het conditioneren van de transformatie op alle controle-qubits die zich in de toestand |0⟩ bevinden, kan bijvoorbeeld worden bereikt door de X
bewerking voor en na toe te passen. Dit kan gemakkelijk worden uitgedrukt met behulp van een vervoeging. Niettemin kan de uitgebreidheid van een dergelijke constructie in de toekomst extra steun verdienen voor een compactere syntaxis.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor