Tipos de dados específicos da computação quântica
Este tópico descreve o tipo Qubit
, juntamente com dois outros tipos que são um pouco específicos do domínio quântico: Pauli
e Result
.
O Qubit
O Q# trata os qubits como itens opacos que podem ser passados a funções e operações, mas só é possível interagir com eles passando-os a instruções nativas do processador quântico de destino. Essas instruções são sempre definidas na forma de operações, pois a intenção deles é modificar o estado quântico. A restrição de que essas funções não podem modificar o estado quântico, apesar de que os qubits podem ser passados como argumentos de entrada, é imposta pelo requisito de que as funções só podem chamar outras funções e não podem chamar operações.
As bibliotecas Q# são compiladas em um conjunto padrão de operações intrínsecas, o que significa operações que não têm nenhuma definição para sua implementação dentro da linguagem. Após o direcionamento, as implementações que as expressam em termos das instruções nativas do destino de execução são vinculadas pelo compilador. Um programa Q# recombina essas operações conforme definido por um computador de destino para criar operações de nível mais alto para expressar a computação quântica. Dessa forma, o Q# facilita a expressão dos algoritmos quânticos subjacentes lógicos e híbridos quânticos-clássicos, além de ser geral em relação à estrutura de um computador de destino ou sua realização do estado quântico.
Em Q#, não há nenhum tipo ou constructo em Q# que representa o estado quântico.
Em vez disso, um qubit representa a menor unidade física que pode ser abordada em um computador quântico.
Assim, um qubit é um item de longa duração, portanto, Q# não tem necessidade de tipos lineares.
Portanto, em Q# não nos referimos explicitamente ao estado, mas descrevemos como o estado é transformado pelo programa, por exemplo, por meio da aplicação de operações como X
e H
.
Semelhante ao modo que um programa de sombreador gráfico acumula uma descrição de transformações para cada vértice, um programa quântico em Q# acumula transformações em estados quânticos, representadas como referências totalmente opacas à estrutura interna de um computador de destino.
Um programa Q# não tem capacidade de fazer análise no estado de um qubit e, portanto, não sabe o que é um estado quântico ou sobre como ele é percebido.
Em vez disso, um programa pode chamar operações como Measure
para saber mais sobre o estado quântico da computação.
Pauli
Os valores do tipo Pauli
especificam um operador Pauli de qubit único. As possibilidades são PauliI
, PauliX
, PauliY
e PauliZ
. Os valores Pauli
são usados principalmente para especificar a base de uma medida quântica.
Result
O tipo Result
especifica o resultado de uma medida quântica.
Q# espelha a maioria dos hardwares quânticos fornecendo medidas em produtos de operadores Pauli de qubit único. Um Result
de Zero
indica que um autovalor +1 foi medido, e um Result
de One
indica que um autovalor -1 foi medido. Ou seja, Q# representa autovalores pela potência para a qual -1 é elevado.
Essa convenção é mais comum na comunidade de algoritmos quânticos, pois ela mapeia mais de perto os bits clássicos.