Compartir a través de


Conjugaciones

Las conjugaciones son comunes en los cálculos cuánticos. En términos matemáticos, son patrones de la forma U†VU para dos transformaciones unitarias U y V. Ese patrón es relevante debido a las peculiaridades de la memoria cuántica: los cálculos crean correlaciones cuánticas o entrelazamiento, para usar los recursos únicos de quantum. Sin embargo, esto también significa que una vez que una subrutina ya no necesita sus cúbits, esos cúbits no se pueden restablecer y liberar fácilmente, ya que observar su estado afectaría al resto del sistema. Por ese motivo, el efecto de un cálculo anterior normalmente debe invertirse antes de liberar y reutilizar la memoria cuántica.

Q# por lo tanto, tiene una construcción dedicada para expresar cálculos que requieren dicha limpieza. Las expresiones constan de dos bloques de código, uno que contiene la implementación de U y otro que contiene la implementación de V. El de sin calcular (es decir, la aplicación de U†) se realiza automáticamente como parte de la expresión.

La expresión toma la forma

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

donde <statements> se reemplaza por cualquier número de instrucciones que definen la implementación de U y V respectivamente. Ambos bloques pueden contener cálculos clásicos arbitrarios, aparte de las restricciones habituales para generar automáticamente versiones adyacentes que se aplican al bloque within. Es posible que las variables enlazadas inmutablemente usadas como parte del bloque within no se vuelvan a asignar como parte del bloque apply.