Exercício – Criar um gerador quântico de bits aleatórios

Concluído

Os computadores clássicos não produzem números aleatórios, mas sim números pseudoaleatórios . Um gerador de números pseudoaleatórios gera uma sequência determinística de números com base em algum valor inicial (chamado de semente). Para melhor aproximar os valores aleatórios, este seed é muitas vezes a hora atual do relógio da CPU.

Os computadores quânticos, por outro lado, podem gerar números verdadeiramente aleatórios. Isso ocorre porque a medição de um qubit em superposição é um processo probabilístico. O resultado da medição é aleatório e não há como prever o resultado. Este é o princípio básico dos geradores quânticos de números aleatórios.

Definir o problema QRNG

Você começa tomando um qubit em um estado base, como zero. O primeiro passo do QRNG é usar uma H operação para colocar o qubit em uma superposição igual. A medição deste estado resulta em um zero ou um com 50% de probabilidade de cada resultado. O valor deste bit é realmente aleatório, não há como saber o que você receberá após a medição. Mas como você pode usar esse comportamento para gerar números aleatórios maiores?

Digamos que repete o processo quatro vezes e gera esta sequência de dígitos binários:

$${0, 1, 1, 0}$$

Se concatenar, ou combinar, estes bits numa cadeia de bits, pode formar um número maior. Neste exemplo, a sequência de bits ${0110}$ é equivalente a seis em decimal.

$${0110_{\ binary} \equiv 6_{\ decimal}}$$

Se você repetir esse processo muitas vezes, poderá combinar vários bits para formar qualquer número grande.

Você constrói seu gerador de números aleatórios quânticos em duas fases. Nesta unidade, você constrói a primeira fase, que é gerar um único bit aleatório.

Para tal, terá de:

  1. Aloque um qubit.
  2. Aplique a H operação para colocar um qubit em superposição.
  3. Meça o qubit para obter um bit aleatório.
  4. Redefina o qubit para o estado zero.

Criar um programa Q#

  1. Abra o Visual Studio Code e selecione File > New Text File para criar um novo arquivo.

  2. Guarde o ficheiro como RandomNumberGenerator.qs. Este ficheiro irá conter o código Q# para o seu programa.

  3. Copie o código a seguir para o RandomNumberGenerator.qs arquivo.

    namespace QuantumRandomNumberGenerator {
    
        @EntryPoint()
        operation GenerateRandomBit() : Result {
            // Allocate a qubit.
            use q = Qubit();
    
            // Set the qubit into superposition of 0 and 1 using the Hadamard 
            H(q);
    
            // At this point the qubit `q` has 50% chance of being measured in the
            // |0〉 state and 50% chance of being measured in the |1〉 state.
            // Measure the qubit value using the `M` operation, and store the
            // measurement value in the `result` variable.
            let result = M(q);
    
            // Reset qubit to the |0〉 state.
            // Qubits must be in the |0〉 state by the time they are released.
            Reset(q);
    
            // Return the result of the measurement.
            return result;
        }
    }
    

Gorjeta

O QDK inclui um conjunto de amostras Q# integradas que você pode usar para aprender mais sobre Q# e computação quântica. Para exibir os exemplos, abra um novo arquivo Q# e digite samplee, em seguida, selecione o exemplo que deseja exibir na lista de opções. Você pode encontrar o código Q# nesta unidade em "Amostra de bit aleatório".

Explore o código Q#

  1. Passe o cursor sobre a H operação para ver um breve resumo da definição.
  2. Coloque o cursor na frente da operação, clique com o botão direito do H mouse e selecione Ir para definição. Isso abre uma exibição somente leitura do código de biblioteca padrão para a função.

Execute o programa localmente

  1. Abra um novo terminal selecionando Terminal > New Terminal.
  2. Para testar a execução do programa localmente no simulador integrado, clique em Executar na lista de comandos abaixo @EntryPoint()ou pressione Ctrl+F5. Sua saída aparecerá no console de depuração.
  3. Execute o programa novamente para ver um resultado diferente.

Na próxima unidade, você implementará a segunda fase do seu gerador quântico de números aleatórios: combinando vários bits aleatórios para formar um número maior.