Tipi di dati specifici del quantum
Questo argomento descrive il tipo di Qubit
, insieme a due altri tipi che sono in qualche modo specifici per il dominio quantistico: Pauli
e Result
.
Qubit
Q# considera i qubit come elementi opachi che possono essere passati a funzioni e operazioni, ma possono essere interagiti solo passandoli alle istruzioni native del processore quantistico di destinazione. Tali istruzioni vengono sempre definite sotto forma di operazioni, poiché la loro finalità è modificare lo stato quantistico. La restrizione che le funzioni non possono modificare lo stato quantistico, nonostante il fatto che i qubit possono essere passati come argomenti di input, viene applicato dalla richiesta che le funzioni possano chiamare solo altre funzioni e non possono chiamare operazioni.
Le librerie Q# vengono compilate in base a un set standard di operazioni intrinseche, ovvero le operazioni che non hanno definizione per l'implementazione all'interno del linguaggio. In caso di destinazione, le implementazioni che le esprimono in termini di istruzioni native della destinazione di esecuzione vengono collegate dal compilatore. Un programma Q# combina quindi queste operazioni come definito da un computer di destinazione per creare nuove operazioni di livello superiore per esprimere il calcolo quantistico. In questo modo, Q# rende molto semplice esprimere la logica sottostante algoritmi quantistici e ibridi quantistici classici, essendo anche molto generale rispetto alla struttura di una macchina di destinazione e alla sua realizzazione dello stato quantistico.
All'interno di Q#, non esiste alcun tipo o costrutto in Q# che rappresenta lo stato quantistico.
Un qubit rappresenta invece l'unità fisica indirizzabile più piccola in un computer quantistico.
Di conseguenza, un qubit è un elemento di lunga durata, quindi Q# non ha bisogno di tipi lineari.
Di conseguenza, non si fa riferimento in modo esplicito allo stato all'interno di Q#, ma si descrive invece come lo stato viene trasformato dal programma, ad esempio tramite l'applicazione di operazioni quali X
e H
.
Analogamente al modo in cui un programma di shader di grafica accumula una descrizione delle trasformazioni in ogni vertice, un programma quantistico in Q# accumula trasformazioni in stati quantistici, rappresentati come riferimenti completamente opachi alla struttura interna di un computer di destinazione.
Un programma Q# non ha la capacità di introspersi nello stato di un qubit e quindi è completamente indipendente da ciò che uno stato quantistico è o su come viene realizzato.
Un programma può invece chiamare operazioni come Measure
per ottenere informazioni sullo stato quantistico del calcolo.
Pauli
I valori di tipo Pauli
specificano un operatore Pauli a qubit singolo; le possibilità sono PauliI
, PauliX
, PauliY
e PauliZ
.
Pauli
valori vengono usati principalmente per specificare la base per una misurazione quantistica.
Risultato
Il tipo Result
specifica il risultato di una misurazione quantistica.
Q# rispecchia la maggior parte dell'hardware quantistico fornendo misurazioni nei prodotti degli operatori Pauli a qubit singolo; un Result
di Zero
indica che è stato misurato il +1 eigenvalue e un Result
di One
indica che è stato misurato il -1 eigenvalue. Ciò significa che Q# rappresenta valori eigeni in base alla potenza a cui viene generato -1.
Questa convenzione è più comune nella community degli algoritmi quantistici, perché esegue il mapping più strettamente ai bit classici.