Sdílet prostřednictvím


Konjugace

Konjugace jsou v kvantových výpočtech běžné. Matematicky se jedná o vzory ve tvaru U†VU pro dvě unitární transformace U a V. Tento model je relevantní vzhledem ke specifikám kvantové paměti: výpočty vytvářejí kvantové korelace neboli propletení, aby využívaly jedinečné prostředky kvantových prostředků. To ale také znamená, že jakmile podprogram přestane své qubity potřebovat, nepůjde tyto qubity snadno resetovat a uvolnit, protože sledování jejich stavu by mělo vliv na zbytek systému. Z tohoto důvodu je před uvolněním a opětovným využitím kvantové paměti obvykle potřeba efekt předchozího výpočtu vrátit zpět.

Q# proto má vyhrazený konstruktor pro vyjádření výpočtů, které vyžadují takové vyčištění. Výrazy se skládají ze dvou bloků kódu, jednoho obsahujícího implementaci U a jednoho obsahujícího implementaci jazyka V. Nekomputace (tj. použití U†) se provádí automaticky jako součást výrazu.

Výraz má tvar

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

kde <statements> se nahradí libovolným počtem příkazů definujících implementaci U a V v uvedeném pořadí. Oba bloky mohou obsahovat libovolné klasické výpočty, kromě obvyklých omezení pro automatické generování sousedících verzí, které platí within pro blok. Proměnlivě vázané proměnné použité jako součást within bloku nesmí být znovu přiřazeny jako součást apply bloku.