Delen 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 kunnen alleen worden gebruikt door ze door te geven aan instructies die systeemeigen zijn voor de doel kwantumprocessor. Dergelijke instructies worden altijd gedefinieerd in de vorm van bewerkingen, omdat hun bedoeling is om de kwantumstatus te wijzigen. De beperking die functies 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 intrinsieke bewerkingen, wat betekent dat bewerkingen die geen definitie hebben voor hun implementatie in de taal. Bij het doel worden de implementaties die deze uitdrukken in termen van de instructies die systeemeigen zijn voor het uitvoeringsdoel, door de compiler gekoppeld. Een Q# programma combineert deze bewerkingen dus zoals gedefinieerd door een doelcomputer om nieuwe bewerkingen op een hoger niveau te maken om kwantumberekeningen uit te drukken. Op deze manier maakt Q# het heel eenvoudig om de logische onderliggende kwantum- en hybride kwantum-klassieke algoritmen uit te drukken, terwijl het ook erg algemeen is met betrekking tot de structuur van een doelmachine en de realisatie van de kwantumstatus.

Binnen Q# zelf 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 langlevend item, dus Q# geen lineaire typen nodig heeft. Daarom verwijzen we niet expliciet naar de status binnen Q#, maar beschrijven we hoe de status wordt getransformeerd door het programma, bijvoorbeeld via de toepassing van bewerkingen zoals X en H. Net als bij de manier waarop een grafische shader-programma een beschrijving van transformaties voor elk hoekpunt verzamelt, verzamelt een kwantumprogramma in Q# transformaties naar kwantumstatussen, vertegenwoordigd als volledig ondoorzichtige verwijzingen naar de interne structuur van een doelmachine.

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

Pauli

Waarden van het type Pauli een pauli-operator met één qubit opgeven; 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# de meeste kwantumhardware spiegelt door metingen te leveren in producten van pauli-operators met één qubit; een Result van Zero geeft aan dat de +1 eigenwaarde is gemeten en een Result van One aangeeft dat de -1 eigenwaarde is gemeten. Dat wil gezegd, Q# eigenwaarden vertegenwoordigt door de macht waartoe -1 wordt verheven. Deze conventie komt vaker voor in de kwantumalgoritmencommunity, omdat deze dichter bij klassieke bits wordt toegewezen.