Esercizio Parte 1: Creare un generatore quantistico di bit casuali

Completato

Nell'unità precedente sono stati illustrati i blocchi predefiniti di base di un programma Q#. A questo momento, è possibile scrivere il primo programma quantistico. In questa unità si scrive un programma quantistico che genera un bit realmente casuale.

Il generatore di numeri casuali quantistici viene compilato in due passaggi. Questa unità è il primo passaggio, che consiste nel generare un singolo bit casuale. Per generare un bit casuale, allocare un qubit nello stato $\ket{0}$, inserire tale qubit in uno stato di sovrapposizione e quindi misurare il qubit per produrre un valore di bit casuale pari a 0 o 1.

Creare il file di programma Q#

  1. Apri Visual Studio Code.
  2. Aprire il menu File e quindi scegliere Nuovo file di testo per creare un nuovo file.
  3. Salvare il file come Main.qs.

Scrivere il codice Q# per il generatore di bit casuali nel Main.qs file.

Definire l'operazione Main

L'operazione Main è il punto di ingresso del programma. Copiare il codice seguente nel Main.qs file:

operation Main(): Result{

    // Your code goes here

}

Allocare un qubit

Per iniziare, allocare un qubit con l'istruzione use . In Q#, ogni qubit allocato con use inizia nello stato $\ket{0}$ per impostazione predefinita. Per allocare un singolo qubit, copiare il codice seguente nel programma:

operation Main(): Result{

    // Allocate a qubit
    use q = Qubit();
}

Inserire il qubit in uno stato di sovrapposizione

A questo punto, non è possibile generare un bit casuale dal qubit perché il qubit si trova nello stato $\ket{0}$. Se si misura lo stato di questo qubit, la misurazione restituirà un valore di bit pari a 0 ogni volta.

Per generare un bit casuale dalla misurazione del qubit, è prima necessario inserire il qubit in una sovrapposizione dello stato $\ket{0}$ e dello stato $\ket{1}$. Per inserire il qubit in uno stato di sovrapposizione, applicare un'operazione Hadamard al qubit. L'operazione Hadamard trasforma il qubit dallo stato $\ket{0}$ a una sovrapposizione uguale degli stati $\ket{0}$ e $\ket{1}$.

$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket + \ket{0}{1}) $$

Per applicare un'operazione Hadamard al qubit in Q#, usare l'operazione H :

operation Main(): Result{

    use q = Qubit();
    H(q);
}

Nota

Quando si applica un'operazione quantistica a un qubit in Q#, l'operazione non restituisce un valore. Le operazioni influiscono invece sullo stato del qubit.

Misurare il qubit

Poiché il qubit è ora in uno stato di sovrapposizione uguale, quando si misura il qubit si ha una probabilità di 50% che la misurazione restituisca 0 e 50% probabilità che la misurazione restituisca un valore 1.

Per misurare il valore del qubit in Q#, usare l'operazione M e archiviare il valore di misurazione nella result variabile :

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
}

Reimpostare il qubit

In Q# un qubit deve trovarsi nello stato $\ket{0}$ prima di poter rilasciare il qubit. Usare l'operazione Reset per reimpostare il qubit sullo stato $\ket{0}$.

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
}

Restituisce il risultato della misurazione

Infine, restituire il risultato della misurazione con l'istruzione return . Questo risultato è un bit casuale, 0 o 1 con la stessa probabilità. Copiare il codice seguente nel Main.qs file:

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
    return result;
}

Esegui il programma generatore di bit casuali

È stato creato un programma Q# denominato Main.qs che alloca un qubit, inserisce il qubit in uno stato di sovrapposizione uguale, misura il qubit, reimposta il qubit e quindi restituisce il risultato della misurazione. Ecco un riepilogo del codice Q#:

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;
}

Nota

Il // simbolo rappresenta commenti facoltativi che spiegano ogni passaggio del programma. I commenti vengono ignorati dal compilatore.

Per eseguire il programma nel simulatore predefinito, scegliere la lente di codice Esegui sopra l'operazione Main oppure pressione Ctrl+F5. L'output viene visualizzato nella console di debug nel terminale.

Il risultato è Zero o One, ognuno con una probabilità di 50%. Il valore di misurazione di questo bit in un computer quantistico è veramente casuale. Eseguire il programma più volte per verificare se stessi come cambia il risultato.

Nell'unità successiva si combinano più bit casuali per implementare la seconda parte del generatore di numeri casuali quantistici.