Kvantspecifika datatyper
I det Qubit
här avsnittet beskrivs typen, tillsammans med två andra typer som är något specifika för kvantdomänen: Pauli
och Result
.
Qubit
Q# behandlar kvantbitar som ogenomskinliga objekt som kan skickas till både funktioner och åtgärder, men som bara kan interageras med genom att skicka dem till instruktioner som är inbyggda i den riktade kvantprocessorn. Sådana instruktioner definieras alltid i form av åtgärder, eftersom deras avsikt är att ändra kvanttillståndet. Begränsningen som funktioner inte kan ändra kvanttillståndet, trots att kvantbitar kan skickas som indataargument, framtvingas av kravet att funktioner bara kan anropa andra funktioner och inte kan anropa åtgärder.
Biblioteken Q# kompileras mot en standarduppsättning inbyggda åtgärder, vilket innebär att åtgärder som inte har någon definition för implementeringen inom språket. Vid målinriktning länkas de implementeringar som uttrycker dem i de instruktioner som är inbyggda i körningsmålet i av kompilatorn. Ett Q# program kombinerar därmed dessa åtgärder enligt definitionen av en måldator för att skapa nya åtgärder på högre nivå för att uttrycka kvantberäkning. På så sätt Q# är det mycket enkelt att uttrycka logiken bakom kvant- och hybrid quantum-klassiska algoritmer, samtidigt som den är mycket allmän när det gäller strukturen för en måldator och dess förverkligande av kvanttillstånd.
I Q# sig finns det ingen typ eller konstruktion i Q# som representerar kvanttillståndet.
I stället representerar en kvantbit den minsta adresserbara fysiska enheten i en kvantdator.
Därför är en qubit ett långlivade objekt, så Q# det finns inget behov av linjära typer.
Därför refererar vi inte uttryckligen till tillståndet i Q#, utan beskriver snarare hur tillståndet transformeras av programmet, till exempel via tillämpning av åtgärder som X
och H
.
På samma sätt som ett program för grafikskuggning ackumulerar en beskrivning av transformeringar till varje hörn, ackumulerar ett kvantprogram Q# transformeringar till kvanttillstånd, som representeras som helt ogenomskinliga referenser till den interna strukturen för en måldator.
Ett Q# program har ingen förmåga att introspektera tillståndet för en kvantbit och är därför helt oberoende av vad ett kvanttillstånd är eller hur det realiseras.
I stället kan ett program anropa åtgärder som Measure
för att lära sig information om kvanttillståndet för beräkningen.
Pauli
Värden av typen Pauli
anger en Pauli-operator med en enda qubit. Möjligheterna är PauliI
, PauliX
, PauliY
och PauliZ
.
Pauli
-värden används främst för att ange grunden för en kvantmätning.
Resultat
Typen Result
anger resultatet av en kvantmätning.
Q# speglar den mesta kvantmaskinvaran genom att tillhandahålla mätningar i produkter av Pauli-operatorer med en enda qubit; en Result
av Zero
anger att eigenvärdet +1 mättes och ett Result
av One
anger att -1-eigenvärdet mättes. Det är, Q# representerar eigenvalues av den makt som -1 är upphöjt.
Den här konventionen är vanligare i communityn för kvantalgoritmer, eftersom den mappar närmare till klassiska bitar.