Partilhar via


Conjugações

As conjugações são comuns em cálculos quânticos. Em termos matemáticos, são padrões da forma U†VU para duas transformações unitárias U e V. Este padrão é relevante devido às particularidades da memória quântica: os cálculos acumulam correlações quânticas, ou entrelaçamento, para tirar partido dos recursos exclusivos do quantum. No entanto, isso também significa que, uma vez que uma subrreplicação já não precisa dos seus qubits, esses qubits não podem ser facilmente repostos e libertados, uma vez que observar o seu estado afetaria o resto do sistema. Por esse motivo, o efeito de um cálculo anterior geralmente tem de ser invertido antes de libertar e reutilizar a memória quântica.

Q# portanto, tem uma construção dedicada para expressar cálculos que requerem tal limpeza. As expressões consistem em dois blocos de código, um que contém a implementação de U e outro que contém a implementação de V. A não conclusão (ou seja, a aplicação de U†) é feita automaticamente como parte da expressão.

A expressão assume o formulário

within {
    <statements>
}
apply {
    <statements>
}

em que <statements> é substituído por qualquer número de instruções que definem a implementação de U e V , respetivamente. Ambos os blocos podem conter cálculos clássicos arbitrários, para além das restrições habituais para gerar automaticamente versões adjacentes que se aplicam ao within bloco. As variáveis vinculadas de forma silenciosa utilizadas como parte do within bloco podem não ser reatribuídas como parte do apply bloco.