Conjugaisons

Les conjugaisons sont courantes dans les calculs quantiques. Exprimées en termes mathématiques, il s’agit de modèles de la forme U†VU pour deux transformations unitaires U et V. Ce modèle est pertinent en raison des particularités de la mémoire quantique : les calculs accumulent des corrélations quantiques, ou une intrication, pour tirer parti des ressources quantiques uniques. Toutefois, cela signifie également qu’une fois que les qubits ne sont plus nécessaires dans une sous-routine, ils ne peuvent pas être facilement réinitialisés et libérés, car l’observation de leur état aurait un impact sur le reste du système. Pour cette raison, l’effet d’un calcul précédent doit généralement être inversé avant de libérer et de réutiliser la mémoire quantique.

Q# a donc une construction dédiée pour exprimer les calculs qui nécessitent un tel nettoyage. Les expressions se composent de deux blocs de code, l’un contenant l’implémentation de U et l’autre contenant l’implémentation de V. La non-calculation ( c’est-à-dire l’application de U†) est effectuée automatiquement dans le cadre de l’expression.

L’expression prend la forme

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

<statements> est remplacé par un nombre quelconque d’instructions définissant l’implémentation de U et V, respectivement. Les deux blocs peuvent contenir des calculs classiques arbitraires, à l’exception des restrictions habituelles pour la génération automatique des versions adjointes qui s’appliquent au bloc within. Les variables liées de manière mutable qui sont utilisées dans le cadre du bloc within peuvent ne pas être réattribuées dans le cadre du bloc apply.