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, PauliYe 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.