Exercício Parte 1 - Crie um gerador de bits aleatórios quânticos

Concluído

Na unidade anterior, você aprendeu sobre os blocos de construção básicos de um programa Q#. Agora, é hora de você criar seu primeiro programa quântico para gerar números verdadeiramente aleatórios.

Você criará o gerador quântico de números aleatórios em duas fases. Nesta unidade, você cria a primeira fase, que é gerar um bit aleatório.

Criar o programa de Q#

  1. Abra o Visual Studio Code e selecione Arquivo > Novo Arquivo de Texto para criar um arquivo.
  2. Salve o arquivo como Main.qs. Esse arquivo conterá o código Q# do programa.

Definir a operação Main

A operação Main é o ponto de entrada do programa.

operation Main(): Result{

    // Your code goes here

}

Alocar um qubit

Você começa alocando um qubit com a palavra-chave use. Em Q#, cada qubit alocado começa no estado $\ket{0}$ por padrão.

operation Main(): Result{

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

}

Colocar o qubit em superposição

O qubit está no estado $\ket{0}$, que não é muito útil para a geração de números aleatórios. Você precisa colocar o qubit em superposição. Para realizar o processo, aplique a operação Hadamard, H, ao qubit. A operação Hadamard altera o estado do qubit e o coloca em uma superposição igual de $\ket{0}$ e $\ket{1}$.

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

Como o qubit está em uma superposição igual, você terá 50% de chance de obter 0 e 50% de chance de obter 1 ao realizar a medição.

operation Main(): Result{

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

Medir o qubit

Aqui, o qubit q tem 50% de chance de ser medido no estado |0〉 e 50% de chance de ser medido no estado |1〉. Ao medir o qubit, você obterá um bit aleatório, 0 ou 1, com igual probabilidade de 50%. O valor desse bit é verdadeiramente aleatório e não há como prever o resultado da medição.

Para medir o valor do qubit, use a operação M e armazene o valor da medição na variável result.

operation Main(): Result{

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

Redefinir o qubit

Em Q#, cada qubit deve estar no estado $\ket{0}$ no momento da liberação. Use Reset(q) para redefinir o qubit para o estado zero.

operation Main(): Result{

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

Retornar o resultado da medição

Por fim, você retorna o resultado da medição com a palavra-chave return. Esse resultado é um bit aleatório, 0 ou 1, com igual probabilidade.

operation Main(): Result{

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

Programa final

O arquivo Main.qs deve ter esta aparência. O programa faz a alocação, a superposição, a medição e a redefinição de um qubit e retorna o resultado dessa medição.

Observação

O símbolo // representa comentários opcionais para explicar cada etapa do 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;
}

Executar o programa

Para executar o programa no simulador interno, selecione Executar acima da operação Main ou pressione Ctrl+F5. Sua saída aparece no console de depuração no terminal.

O resultado é One ou Zero, e representa um bit verdadeiramente aleatório. Execute o programa novamente para ver um resultado diferente.

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