Compartilhar via


Conjugações

As conjugações são comuns nas computações quânticas. Em termos matemáticos, elas são padrões da forma U†VU para duas transformações de unitários: U e V. Esse padrão é relevante devido às particularidades da memória quântica: as computações criam correlações quânticas ou entrelaçamentos para aproveitar os ativos exclusivos da computação quântica. No entanto, isso também significa que, quando os qubits não são mais necessários para uma sub-rotina específica, eles não podem ser redefinidos e liberados facilmente, pois a observação do estado deles afetaria o restante do sistema. Por esse motivo, o efeito de uma computação anterior geralmente precisa ser revertido antes da liberação e da 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 contendo a implementação de V. A descomputaçã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 definam a implementação de U e V, respectivamente. Ambos os blocos podem conter computações clássicas arbitrárias, além das restrições usuais para gerar automaticamente versões adjuntas que se apliquem ao bloco within. As variáveis associadas de modo mutável usadas no bloco within não podem ser reatribuídas como parte do bloco apply.