Dela via


Funktorprogram

Functors är fabriker som gör att du kan komma åt specifika specialiseringsimplementeringar av en anropsbar. Q# stöder för närvarande två kultorer; och Adjoint Controlled, som båda kan tillämpas på åtgärder som tillhandahåller nödvändiga specialiseringar.

Och Controlled Adjoint functors pendlar; om ApplyUnitary är en operation som stöder båda functors, så finns det ingen skillnad mellan Controlled Adjoint ApplyUnitary och Adjoint Controlled ApplyUnitary. Båda har samma typ och kör vid anrop den implementering som definierats för controlled adjoint specialiseringen.

Adjoint-kultor

Om åtgärden ApplyUnitary definierar en enhetstransformering U av kvanttillståndet kommer Adjoint ApplyUnitary du åt implementeringen av U†. Functoren Adjoint är dess egna inverse, sedan (U†)† = U per definition. Är till exempel Adjoint Adjoint ApplyUnitary samma som ApplyUnitary.

Uttrycket Adjoint ApplyUnitary är en åtgärd av samma typ som ApplyUnitary. Det har samma argument och returtyp och stöder samma functors. Precis som alla åtgärder kan den anropas med ett argument av lämplig typ. Följande uttryck tillämpar den angränsande specialiseringen av ApplyUnitary på ett argument arg:

Adjoint ApplyUnitary(arg) 

Kontrollerad kultor

För en åtgärd ApplyUnitary som definierar en enhetstransformering U av kvanttillståndet kommer Controlled ApplyUnitary du åt implementeringen som tillämpar U villkorat av att alla kvantbitar i en matris med kontrollkvabitar är i tillståndet |1⟩.

Uttrycket Controlled ApplyUnitary är en åtgärd med samma returtyp och åtgärdsegenskaper som ApplyUnitary, vilket innebär att det stöder samma functors. Det tar ett argument av typen (Qubit[], <TIn>), där <TIn> bör ersättas med argumenttypen ApplyUnitary, med hänsyn till singleton tuppel ekvivalens .

Åtgärd Argumenttyp Kontrollerad argumenttyp
X Qubit (Qubit[], Qubit)
SWAP (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

cs Om innehåller en matris med kvantbitar q1 och q2 är två kvantbitar, och åtgärden SWAP är som definierad här, byter följande uttryck ut tillståndet q1 för och q2 om alla kvantbitar i cs är i tillståndet |1⟩:

Controlled SWAP(cs, (q1, q2))

Kommentar

Villkorsstyrd tillämpning av en åtgärd som baseras på att kontrollkvabitarna är i ett annat tillstånd än tillståndet |1⟩ kan uppnås genom att lämplig angränsande transformering tillämpas på kontrollkvabitarna före anropet och tillämpa inverserna efter. Du kan till exempel utföra omvandlingen på alla kontrollkvämbitar som är i tillståndet |0⟩ genom att tillämpa X åtgärden före och efter. Detta kan enkelt uttryckas med hjälp av en konjugation. En sådan konstruktions verbositet kan dock behöva ytterligare stöd för en mer kompakt syntax i framtiden.