Quais são os principais componentes de um programa Q#?
Antes de você 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 operação Main
Cada programa Q# deve conter pelo menos uma operação, que geralmente é a operação Main
. A operação Main
é o ponto de entrada do programa. Por padrão, o compilador Q# começa a executar um programa da operação Main()
. Opcionalmente, você pode usar o atributo @EntryPoint()
para especificar uma 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 atributo @EntryPoint()
renomeando a operação MeasureOneQubit()
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
, Bool
e String
. O Q# também fornece tipos específicos à computação quântica, como Qubit
e Result
.
Neste exemplo, a operação MeasureOneQubit
retorna um tipo Result
. Um tipo Result
é o resultado da medição de um qubit e pode ser 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 diretiva import
e especifica o namespace dessa biblioteca. Por exemplo, para usar a função Message
do namespace Microsoft.Quantum.Intrinsic
na biblioteca quântica Standard, 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!");
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!");
Alocação de qubits
Em Q#, para alocar um qubit, use a palavra-chave use
e o tipo Qubit
. Os qubits que você aloca com a palavra-chave use
começam no estado $\ket{0}$.
Você pode alocar um ou vários 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
Medindo qubits
Em Q#, a operação Measure
executa uma medida conjunta de um ou mais qubits nas bases Pauli especificadas, que podem ser PauliX
, PauliY
ou PauliZ
. A operação Measure
retorna um tipo de Result
que é One
ou Zero
.
Para implementar uma medida na base computacional $\lbrace\ket{0},\ket{1}\rbrace$, você também pode usar a operação M
, que executa uma medida na base de Pauli Z. Portanto, a operação M
é equivalente à aplicação de Measure([PauliZ], [qubit])
.
Redefinir os qubits
Em Q#, os qubits devem estar no estado $\ket{0}$ no momento em que forem liberados. Quando você terminar de usar um qubit, use a operação Reset
para redefinir o qubit para o $\ket{0}$.
// Reset the qubit so it can be safely released.
Reset(qubit);