Esercizio Parte 1: Creare un generatore quantistico di bit casuali
Nell'unità precedente sono stati illustrati i blocchi predefiniti di base di un programma Q#. È ora possibile scrivere il primo programma quantistico: un programma quantistico per generare numeri realmente casuali.
Il generatore quantistico di numeri casuali viene creato in due fasi. In questa unità, si costruisce la prima fase, che consiste nel generare un singolo bit casuale.
Creare il programma Q#
- Aprire Visual Studio Code e selezionare File > Nuovo file di testo per creare un nuovo file.
- Salvare il file come
Main.qs
. Questo file conterrà il codice Q# per il programma.
Definire l'operazione Main
L'operazione Main
è il punto di ingresso del programma.
operation Main(): Result{
// Your code goes here
}
Allocare un qubit
Per iniziare, allocare un qubit con la parola chiave use
. In Q# ogni qubit allocato inizia nello stato $\ket{0}$ per impostazione predefinita.
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
Inserire il qubit in sovrapposizione
Il qubit si trova nello stato $\ket{0}$, che non è molto utile per generare numeri casuali. È necessario inserire il qubit in sovrapposizione. A tale scopo, si applica l'operazione Hadamard, H
, al qubit. L'operazione Hadamard modifica lo stato del qubit e lo inserisce in una sovrapposizione uguale di $\ket{0}$ e $\ket{1}$.
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket + \ket{0}{1}) $$
Poiché il qubit si trova in una sovrapposizione uguale, quando lo si misura, si ha una probabilità del 50% di ottenere 0 e un 50% di probabilità di ottenere 1.
operation Main(): Result{
use q = Qubit();
H(q);
}
Misurare il qubit
A questo punto, il qubit q
ha il 50% di probabilità di essere misurato nello stato |0〉e una probabilità del 50% di essere misurata nello stato |1〉. Pertanto, se si misura il qubit, si otterrà un bit casuale, sia 0 che 1, con una probabilità pari al 50%. Il valore di questo bit è veramente casuale, non c'è modo di sapere in anticipo il risultato della misurazione.
Per misurare il valore del qubit, usare l'operazione M
e archiviare il valore di misurazione nella variabile result
.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
Reimpostare il qubit
In Q# ogni qubit deve trovarsi nello stato $\ket{0}$ entro il momento in cui vengono rilasciati. Si usa Reset(q)
per reimpostare il qubit sullo stato zero.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
Restituisce il risultato della misurazione
Infine, si restituisce il risultato della misurazione con la parola chiave return
. Questo risultato è un bit casuale, 0 o 1, con la stessa probabilità.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
Programma finale
Il file Main.qs
avrà un aspetto simile al seguente. Il programma alloca un qubit, lo inserisce in sovrapposizione, misura il qubit, reimposta il qubit e restituisce il risultato della misurazione.
Nota
Il simbolo //
rappresenta i commenti facoltativi per spiegare ogni passaggio del programma.
operation Main() : Result {
// Allocate a qubit.
use q = Qubit();
// Set the qubit into superposition of 0 and 1 using the Hadamard
H(q);
// Measure the qubit and store the result.
let result = M(q);
// Reset qubit to the |0〉 state.
Reset(q);
// Return the result of the measurement.
return result;
}
Eseguire il programma
Per eseguire il programma nel simulatore predefinito, fare clic su Esegui sopra l'operazione Main
o premere CTRL+F5. L'output viene visualizzato nella console di debug del terminale.
Il risultato è One
o Zero
, che rappresenta un bit realmente casuale. È possibile eseguire di nuovo il programma per visualizzare un risultato diverso.
Nella prossima unità, verrà implementata la seconda fase del generatore quantistico di numeri casuali, ovvero la combinazione di più bit casuali per formare un numero più grande.