Compartilhar via


Conjugações

Conjugações são comuns em cálculos quânticos. Em termos matemáticos, eles são padrões do formulário U†VU para duas transformações unitárias U e V. Esse padrão é relevante devido às particularidades da memória quântica: os cálculos acumulam correlações quânticas ou de emaranhamento, para usar os ativos exclusivos do quantum. No entanto, isso também significa que uma vez que uma sub-rotina não precisa mais de seus qubits, esses qubits não podem ser facilmente redefinidos e liberados, pois observar seu estado afetaria o restante do sistema. Por esse motivo, o efeito de uma computação anterior geralmente precisa ser revertido antes de liberar e reutilização da memória quântica.

Q#, portanto, tem um constructo dedicado para expressar cálculos que exigem essa limpeza. As expressões consistem em dois blocos de código, um contendo a implementação de U e outro que contém a implementação de V. O de de descomputação (ou seja, a aplicação do U†) é feito 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 respectivamente. Ambos os blocos podem conter cálculos clássicos arbitrários, além das restrições usuais para gerar automaticamente versões adjacentes que se aplicam ao bloco within. Variáveis associadas mutavelmente usadas como parte do bloco within podem não ser reatribuídas como parte do bloco apply.