Tipi di dati specifici del quantistico

Questo argomento descrive il Qubit tipo, insieme a due altri tipi che sono in qualche modo specifici per il dominio quantistico: Pauli e Result.

Qubit

Q# tratta 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 sono sempre definite sotto forma di operazioni, poiché la loro finalità consiste nel 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 le operazioni.

Le librerie Q# vengono compilate in base a un set standard di operazioni intrinseche, ovvero operazioni che non hanno alcuna definizione per l'implementazione all'interno del linguaggio. Dopo la destinazione, le implementazioni che le esprimono in termini di istruzioni native per la destinazione di esecuzione sono 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 gli algoritmi quantistici e ibridi quantistici classici, pur essendo molto generali per quanto riguarda la struttura di un computer di destinazione e la sua realizzazione dello stato quantistico.

All'interno di Q# stesso 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 necessità di tipi lineari. Di conseguenza, non si fa riferimento in modo esplicito allo stato all'interno Q#di , ma si descrive invece come lo stato viene trasformato dal programma, ad esempio tramite l'applicazione di operazioni X come e H. Analogamente al modo in cui un programma shader grafico accumula una descrizione delle trasformazioni a ogni vertice, un programma quantistico in Q# accumula trasformazioni negli stati quantistici, rappresentato come riferimenti completamente opachi alla struttura interna di una macchina di destinazione.

Un programma Q# non è in grado di analizzare lo stato di un qubit ed è quindi completamente indipendente da ciò che è uno stato quantistico o da 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 i 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 valore Result di Zero indica che è stato misurato l'autovalore +1 e un valore Result di One indica che è stato misurato l'autovalore -1. Ovvero, Q# rappresenta gli autovalori alla cui potenza viene elevato -1. Questa convenzione è più comune nella community degli algoritmi quantistici, in quanto corrisponde più da vicino ai bit classici.