Quais são os principais componentes de um programa Q#?

Concluído

Antes de começar a escrever programas quânticos, é importante entender a estrutura e os componentes de um programa Q#.

Nesta unidade, você analisará os principais componentes de um programa Q#.

A Main operação

Cada programa Q# deve conter pelo menos uma operação, que geralmente é a Main operação. A Main operação é o ponto de entrada do seu programa. Por padrão, o compilador Q# começa a executar um programa a partir da Main() operação. Opcionalmente, você pode usar o @EntryPoint() atributo para especificar qualquer operação no programa como o ponto de execução.

Por exemplo, o código a seguir define uma operação de ponto de entrada, MeasureOneQubit:

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...
}

No entanto, você também pode escrever esse código sem o @EntryPoint() atributo renomeando a MeasureOneQubit() operação para Main():

// The Q# compiler automatically detects the Main() operation as the entry point. 
operation Main() : Result {
    ...
}

Tipos

O Q# fornece muitos tipos internos com os quais você já pode estar familiarizado, incluindo Int, Double, Boole String. Q# também fornece tipos específicos para a computação quântica, como Qubit e Result.

Neste exemplo, a MeasureOneQubit operação retorna um Result tipo. Um Result tipo é o resultado da medição de um qubit e pode ser um One ou Zero.

operation MeasureOneQubit() : Result {
    ...
}

Bibliotecas quânticas

As bibliotecas Q# contêm funções e operações que você pode usar em programas quânticos. Ao chamar uma função ou operação de uma biblioteca, você usa a import diretiva e especifica o namespace da biblioteca. Por exemplo, para usar a Message Microsoft.Quantum.Intrinsic função do namespace na biblioteca quântica padrão, faça o seguinte:

// imports all functions and operations from Microsoft.Quantum.Intrinsic 
import Microsoft.Quantum.Intrinsic.*;
    Message("Hello quantum world!");


// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
    Message("Hello quantum world!");

Os namespaces na biblioteca Standard podem ser importados usando Std em vez de Microsoft.Quantum. Por exemplo:

// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
    Message("Hello quantum world!");

Atribuição de qubits

Em Q#, para alocar um qubit, você usa a use palavra-chave e o Qubit tipo. Cada qubit alocado com a use palavra-chave começa no estado $\ket{0}$.

Pode atribuir um ou muitos qubits de cada vez. Aqui está um exemplo que aloca um e cinco qubits:

use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

Medição de qubits

Em Q#, a Measure operação executa uma medição conjunta de um ou mais qubits nas bases Pauli especificadas, que podem ser PauliX, PauliYou PauliZ. A Measure operação retorna um Result tipo que é ou One Zero.

Para implementar uma medição na base computacional $\lbrace\ket{0},\ket\rbrace{1}$ você também pode usar a M operação, que executa uma medição na base Z de Pauli. Assim, a M operação equivale a aplicar Measure([PauliZ], [qubit]).

Redefinindo qubits

Em Q#, os qubits devem estar no estado $\ket{0}$ no momento em que são lançados. Quando terminar de usar um qubit, use a Reset operação para redefinir o qubit para $\ket{0}$.

    // Reset the qubit so it can be safely released.
    Reset(qubit);