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

Concluído

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

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.

Criar o programa Q#

  1. Abra o Visual Studio Code e selecione File > New Text File para criar um novo arquivo.
  2. Guarde o ficheiro como Main.qs. Este ficheiro irá conter o código Q# para o seu programa.

Definir a Main operação

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

operation Main(): Result{

    // Your code goes here

}

Alocar um qubit

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

operation Main(): Result{

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

}

Coloque o qubit em superposição

O qubit está no estado $\ket{0}$, o que não é muito útil para gerar números aleatórios. Você precisa colocar o qubit em superposição. Para fazer isso, você aplica 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, quando você o mede, você tem 50% de chance de obter 0 e 50% de chance de obter 1.

operation Main(): Result{

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

Meça o qubit

Neste ponto, o qubit q tem 50% de chance de ser medido no estado |0〉 e 50% de chance de ser medido no estado |1〉. Assim, se você medir o qubit, obterá um bit aleatório, 0 ou 1, com igual probabilidade de 50%. O valor deste bit é verdadeiramente aleatório, não há como saber com antecedência o resultado da medição.

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

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 em que são lançados. Você usa Reset(q) para redefinir o qubit para o estado zero.

operation Main(): Result{

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

Devolver o resultado da medição

Finalmente, você retorna o resultado da medição com a return palavra-chave. Este 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 seu Main.qs ficheiro deve ter este aspeto. O programa aloca um qubit, coloca-o em superposição, mede o qubit, redefine o qubit e retorna o resultado da medição.

Nota

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

Execute o programa

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

O resultado é ou One , o Zeroque representa um bit verdadeiramente aleatório. Você pode executar 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.