Kvantummemória-kezelés
A programok mindig qubitek nélkül indulnak, ami azt jelenti, hogy a típusú Qubit
értékeket nem lehet belépésipont-argumentumként átadni. Ez a korlátozás szándékos, mivel a célja egy program teljes egészének kifejezése Q# és indoka.
Ehelyett egy program qubiteket vagy kvantummemóriát foglal le és szabadít fel.
Ebben a tekintetben Q# a kvantumszámítógépet qubit halommemóriaként modellezi.
Ahelyett, hogy külön lefoglalási és kiadási utasításokat támogat a kvantummemória számára, Q# támogatja a kvantummemória blokkutasítások formájában történő lefoglalását, ahol a memória csak a blokkutasítás hatókörén belül érhető el. Az utasításblokk implicit módon definiálható, amikor qubiteket oszt ki az aktuális hatókör időtartamára, a és borrow
az use
utasításokkal kapcsolatos szakaszokban részletesebben leírtak szerint. A lefoglalt qubitek elérésének megkísérlése a utasítás leállítása után futásidejű kivételt eredményez.
Q# két utasítással rendelkezik, use
és borrow
, amelyek qubitértékeket, qubittömböket vagy azok bármely kombinációját példányosítják. Ezeket az utasításokat csak műveletekben használhatja. Összegyűjtik a példányosított qubitértékeket, kötik őket az utasításban megadott változókhoz, majd futtatnak egy utasításblokkot.
A blokk végén a kötött változók kikerülnek a hatókörből, és már nincsenek definiálva.
Q# különbséget tesz a tiszta és a piszkos qubitek lefoglalása között. A tiszta qubiteket a rendszer nem használja, és a számítás egy másik része nem használja. A piszkos qubitek olyan qubitek, amelyek állapota ismeretlen, és a kvantumprocesszor memóriájának más részeivel is összefonódhatnak.
Használati utasítás
A tiszta qubiteket a use
utasítás foglalja le.
- Az utasítás a kulcsszóból
use
, majd egy kötésből és egy opcionális utasításblokkból áll. - Ha egy utasításblokk jelen van, a qubitek csak az adott blokkon belül érhetők el. Ellenkező esetben a qubitek az aktuális hatókör végéig érhetők el.
- A kötés ugyanazt a mintát követi, mint
let
az utasítások: egyetlen szimbólumot vagy egy rekord szimbólumot, majd egy egyenlőségjelet=
, és vagy egyetlen rekordot vagy az inicializálók megfelelő rekordját.
Az inicializálók egyetlen qubithez érhetők el , Qubit()
vagy qubitek tömbjéhez, Qubit[n]
ahol n
egy Int
kifejezés.
Példa:
use qubit = Qubit();
// ...
use (aux, register) = (Qubit(), Qubit[5]);
// ...
use qubit = Qubit() {
// ...
}
use (aux, register) = (Qubit(), Qubit[5]) {
// ...
}
A qubitek kiosztáskor garantáltan |0⟩ állapotban vannak. A hatókör végén jelennek meg, és a kiadáskor |0⟩ állapotban kell lenniük. Ez a követelmény nem fordítható ki, mivel ehhez szimbolikus értékelésre lenne szükség, amely gyorsan megfizethetetlenül költséges lesz. Szimulátorokon való futtatáskor a követelmény érvényesíthető a futtatókörnyezetben. A kvantumprocesszorok esetében a követelmény nem kényszeríthető ki futtatókörnyezetre; A nem mért qubitek alaphelyzetbe állíthatók |0⟩ unitáris átalakítással. Ennek elmulasztása helytelen viselkedést eredményez.
A use
utasítás leküldi a qubiteket a kvantumprocesszor szabad qubit-halommemóriajából, és legkésőbb annak a hatókörnek a végénél visszajuttatja őket a halomba, amelyben a qubitek meg vannak kötve.
Hitelfelvételi kimutatás
A borrow
utasítás hozzáférést biztosít azokhoz a qubitekhez, amelyek már ki vannak foglalva, de jelenleg nincsenek használatban. Ezek a qubitek tetszőleges állapotban lehetnek, és a hitelfelvételi kimutatás leállásakor újra ugyanabban az állapotban kell lenniük.
Egyes kvantumalgoritmusok anélkül használhatják a qubiteket, hogy a pontos állapotukra támaszkodnának, és nem követelik meg, hogy a rendszer többi részével is össze legyenek kapcsolva. Ez azt jelzi, hogy ideiglenesen további qubitekre van szükségük, de biztosíthatják, hogy ezek a qubitek pontosan az eredeti állapotukba kerülnek vissza, függetlenül attól, hogy melyik állapotban volt.
Ha vannak olyan qubitek, amelyek használatban vannak, de nem érintik az alrutin részeit, ezek a qubitek kölcsönkérhetők egy ilyen algoritmus általi használatra ahelyett, hogy további kvantummemóriát foglalnak le. A kiosztás helyett a kölcsönzés jelentősen csökkentheti az algoritmusok általános kvantummemóriára vonatkozó követelményeit, és egy tipikus téridő-kompromisszum kvantum példája.
Egy borrow
utasítás ugyanazt a mintát követi, amelyet korábban már leírt az use
utasításhoz, és ugyanazok az inicializálók érhetők el.
Példa:
borrow qubit = Qubit();
// ...
borrow (aux, register) = (Qubit(), Qubit[5]);
// ...
borrow qubit = Qubit() {
// ...
}
borrow (aux, register) = (Qubit(), Qubit[5]) {
// ...
}
A kölcsönzött qubitek ismeretlen állapotban vannak, és ki vannak lépve a hatókörből az utasításblokk végén. A hitelfelvevő kötelezettséget vállal arra, hogy a qubiteket ugyanabban az állapotban hagyja, mint a kölcsönzéskor; vagyis az állapotuk a utasításblokk elején és végén várhatóan megegyezik.
A borrow
utasítás olyan használatban lévő qubiteket kér le, amelyeket a program garantáltan nem használ a qubit kötésének időpontjától a qubit utolsó használatáig.
Ha nem áll rendelkezésre elegendő qubit a kölcsönzéshez, akkor a qubitek ki vannak foglalva a halomba, mint egy use
utasítás.
Megjegyzés
A piszkos qubitek ismert használati esetei közé tartoznak a több vezérlésű CNOT-kapuk implementációi, amelyek nagyon kevés qubitet igényelnek, és a növekményes rendszerek implementációi. Ez a qubitekkel történő faktorálásról szóló tanulmány egy olyan algoritmust mutat be, amely kölcsönzött qubiteket használ.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: