Ejercicio parte 1: Creación de un generador de bits aleatorios cuántico

Completado

En la unidad anterior, ha aprendido sobre los bloques de creación básicos de un programa de Q#. Ahora, está listo para escribir su primer programa cuántico: un programa cuántico para generar números verdaderamente aleatorios.

El generador de números aleatorios cuánticos se crea en dos fases. En esta unidad, creará la primera fase, que consiste en generar un solo bit aleatorio.

Creación del programa de Q#

  1. Abra Visual Studio Code y seleccione Archivo > Nuevo archivo de texto para crear un nuevo archivo.
  2. Guarde el archivo como Main.qs. Este archivo contendrá el código Q# del programa.

Definición de la operación Main

La operación Main es el punto de entrada del programa.

operation Main(): Result{

    // Your code goes here

}

Asignación de un cúbit

Para empezar, asigne un cúbit con la palabra clave use. En Q#, cada cúbit que asigne se inicia en el estado $\ket{0}$ de forma predeterminada.

operation Main(): Result{

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

}

Colocar el cúbit en superposición

El cúbit está en el estado $\ket{0}$, que no es muy útil para generar números aleatorios. Debe colocar el cúbit en superposición. Para ello, aplique la operación Hadamard, H, al cúbit. La operación Hadamard cambia el estado del cúbit y lo coloca en una superposición igual de $\ket{0}$ y $\ket{1}$.

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

Dado que el cúbit está en una superposición igual, al medirlo, tiene una probabilidad del 50 % de obtener 0 y un 50 % de probabilidad de obtener 1.

operation Main(): Result{

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

Medición del cúbit

En este momento, el q de cúbit tiene una probabilidad del 50 % de medirse en el estado |0〉 y 50 % de probabilidad de medirse en el estado |1〉. Por lo tanto, si mide el cúbit, obtendrá un bit aleatorio, ya sea 0 o 1, con una probabilidad igual al 50 %. El valor de este bit es verdaderamente aleatorio, no hay forma de saber con antelación el resultado de la medida.

Para medir el valor del cúbit, use la operación M y almacene el valor de medida en la variable result.

operation Main(): Result{

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

Restablecer el cúbit

En Q#, cada cúbit debe estar en el estado $\ket{0}$ en el momento en que se liberan. Use Reset(q) para restablecer el cúbit al estado cero.

operation Main(): Result{

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

Devolver el resultado de la medida

Por último, se devuelve el resultado de la medida con la palabra clave return. Este resultado es un bit aleatorio, 0 o 1, con la misma probabilidad.

operation Main(): Result{

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

Programa final

El archivo Main.qs debe tener este aspecto. El programa asigna un cúbit, lo coloca en superposición, mide el cúbit, restablece el cúbit y devuelve el resultado de la medida.

Nota:

El símbolo // representa comentarios opcionales para explicar cada paso del programa.


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

Ejecución del programa

Para ejecutar el programa en el simulador integrado, haga clic en Ejecutar encima de la operación de Main o presione Ctrl+F5. La salida aparece en la consola de depuración en el terminal.

El resultado es One o Zero, que representa un bit realmente aleatorio. Puede volver a ejecutar el programa para ver un resultado diferente.

En la unidad siguiente, implementará la segunda fase del generador de números aleatorios cuánticos: combinando varios bits aleatorios para formar un número mayor.