Delen via


Functor-toepassing

Functors zijn factory's waarmee u toegang krijgt tot bepaalde specialisatie-implementaties van een aanroepbare implementatie. Q#ondersteunt momenteel twee functors; Controlledde Adjoint en de , beide kunnen worden toegepast op bewerkingen die de nodige specialisaties bieden.

De Controlled en Adjoint functors pendelen; als ApplyUnitary het 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 aanroep 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 toegangscontrolet u de implementatie van U†. De Adjoint functor is een eigen inverse, omdat (U†)† = U per definitie. Is bijvoorbeeld Adjoint Adjoint ApplyUnitary 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. Met de volgende expressie wordt de aangrenzende specialisatie van ApplyUnitary een argument argtoegepast:

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 op alle qubits in een matrix met controle-qubits die de status |1⟩ hebben.

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 ApplyUnitary, waarbij rekening moet worden gehouden met de gelijkwaardigheid van singleton tuple.

Operation Argumenttype Type beheerd argument
X Qubit (Qubit[], Qubit)
SWAP (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

Concreet: als cs dit een matrix van qubits bevat en q2 twee qubits q1 zijn en de bewerking SWAP hier is gedefinieerd, wordt met de volgende expressie de status q1 van en q2 als alle qubits cs zich in de toestand |1⟩ bevinden:

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 van alle controle-qubits die zich in de toestand |0⟩ bevinden, kan bijvoorbeeld worden bereikt door de bewerking vóór en na toe X 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.