Share via


Kwantumspecifieke gegevenstypen

In dit onderwerp wordt het Qubit type beschreven, samen met twee andere typen die enigszins specifiek zijn voor het kwantumdomein: Pauli en Result.

Qubit

Q# behandelt qubits als ondoorzichtige items die kunnen worden doorgegeven aan zowel functies als bewerkingen, maar die alleen kunnen worden gebruikt door ze door te geven aan instructies die systeemeigen zijn voor de beoogde kwantumprocessor. Dergelijke instructies worden altijd gedefinieerd in de vorm van bewerkingen, omdat het de bedoeling is om de kwantumstatus te wijzigen. De beperking dat functies de kwantumstatus niet kunnen wijzigen, ondanks het feit dat qubits kunnen worden doorgegeven als invoerargumenten, wordt afgedwongen door de vereiste dat functies alleen andere functies kunnen aanroepen en geen bewerkingen kunnen aanroepen.

De Q# bibliotheken worden gecompileerd op basis van een standaardset van intrinsieke bewerkingen, dat wil zeggen bewerkingen die geen definitie hebben voor de implementatie ervan binnen de taal. Bij het targeten worden de implementaties die deze uitdrukken in termen van de instructies die systeemeigen zijn voor het uitvoeringsdoel gekoppeld door de compiler. Een Q# programma combineert deze bewerkingen zoals gedefinieerd door een doelcomputer om nieuwe bewerkingen op een hoger niveau te maken om kwantumberekeningen uit te drukken. Op deze manier Q# maakt het heel eenvoudig om de logica onderliggende kwantum- en hybride kwantum-klassieke algoritmen uit te drukken, terwijl het ook zeer algemeen is met betrekking tot de structuur van een doelmachine en de realisatie van de kwantumtoestand.

Binnen Q# zichzelf is er geen type of constructie in Q# die de kwantumstatus vertegenwoordigt. In plaats daarvan vertegenwoordigt een qubit de kleinste adresseerbare fysieke eenheid in een kwantumcomputer. Als zodanig is een qubit een item met een lange levensduur, dus Q# er zijn geen lineaire typen nodig. Daarom verwijzen we niet expliciet naar de status in Q#, maar beschrijven we eerder hoe de status wordt getransformeerd door het programma, bijvoorbeeld via de toepassing van bewerkingen zoals X en H. Vergelijkbaar met hoe een grafische arceringsprogramma een beschrijving van transformaties naar elk hoekpunt verzamelt, verzamelt een kwantumprogramma in Q# transformaties naar kwantumtoestanden, weergegeven als volledig ondoorzichtige verwijzingen naar de interne structuur van een doelcomputer.

Een Q# programma heeft geen mogelijkheid om in te gaan op de toestand van een qubit en is dus volledig agnostisch over wat een kwantumtoestand is of hoe deze wordt gerealiseerd. In plaats daarvan kan een programma bewerkingen aanroepen, zoals Measure informatie over de kwantumstatus van de berekening.

Pauli

Waarden van het type Pauli geven een Pauli-operator met één qubit op. De mogelijkheden zijn PauliI, PauliX, PauliYen PauliZ. Pauli waarden worden voornamelijk gebruikt om de basis voor een kwantummeting op te geven.

Resultaat

Het Result type geeft het resultaat van een kwantummeting aan. Q# spiegelt de meeste kwantumhardware door metingen te leveren in producten van Pauli-operators met één qubit; a Result van Zero geeft aan dat de eigenwaarde +1 is gemeten en een Result van One geeft aan dat de eigenwaarde -1 is gemeten. Dat wil gezegd, Q# vertegenwoordigt eigenwaarden door de macht waartoe -1 wordt verheven. Deze conventie komt vaker voor in de kwantumalgoritmen-community, omdat deze dichter bij klassieke bits wordt toegewezen.