Quais são os principais componentes de um programa Q#?
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
, Bool
e 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
, PauliY
ou 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);