Mi az a Q#?

Befejeződött

A Q# egy nyílt forráskódú, magas szintű programozási nyelv kvantum-algoritmusok fejlesztéséhez és futtatásához. Ez az Azure Quantum Development Kit (Modern QDK) része, és úgy lett kialakítva, hogy hardveres agnosztikus legyen, skálázható a kvantumalkalmazások teljes körére, és optimalizálja a végrehajtást.

Miért érdemes kvantumprogramozási nyelvet létrehozni?

A kvantumprogramozási nyelv felépítésének számos oka van, de a rövid válasz az lenne, hogy algoritmusokat szeretnénk írni, nem áramköröket.

Algoritmusok írásakor a nyelvre, a fordítóra és a futtatókörnyezetre vonatkozó alábbi követelményeknek kell megfelelnünk:

  • Az absztrakt qubitek A kvantum-algoritmusok olyan qubiteket használnak, amelyek nincsenek adott hardverhez vagy elrendezéshez kötve. A fordító és a futtatókörnyezet kezeli a program qubitjeiről a fizikai qubitekre való leképezést.
  • Kvantum- és klasszikus számítások. A klasszikus és kvantumszámítások végrehajtásának képessége alapvető fontosságú egy univerzális kvantumszámítógépen.
  • A fizika törvényei A kvantum-algoritmusok a kvantumfizika szabályait követik. Például nem tudnak közvetlenül qubit állapotot másolni vagy elérni.

A Q jellemzői#

A Q# kvantum-algoritmusok írására, klasszikus számítógépeken való szimulálására, majd tényleges kvantumszámítógépeken való futtatására használható. A Q# emellett beépített kvantumműveletek, például kvantumkapuk és mérések könyvtárát is biztosítja, amelyek qubitek manipulálására és kvantumszámítások végrehajtására szolgálnak.

@EntryPoint()
operation MeasureOneQubit() : Result {
    // The following using block creates a fresh qubit and initializes it
    // in the |0 state.
    use qubit = Qubit();
    // We apply a Hadamard operation to the state, thereby preparing the
    // state 1 / sqrt(2) (|0> + |1>).   
    H(qubit);
    // Now we measure the qubit in Z-basis.
    let result = M(qubit);
    // As the qubit is now in an eigenstate of the measurement operator,
    // we reset the qubit before releasing it.
    if result == One { X(qubit); }
    // Finally, we return the result of the measurement.
    return result;
}

A következő szakaszok a Q#néhány fő funkcióját ismertetik.

Tartományspecifikus kódtárak

A Q#-kódtárakkal összetett kvantumműveleteket futtathat anélkül, hogy alacsony szintű műveletsorozatokat kellene írnia.

  • A standard kódtár olyan alapvető függvényeket és műveleteket biztosít, amelyek kvantumprogramok Q#-ban való írásához használhatók.
  • A kvantum numerikus kódtár számos numerikus funkciót támogat.

Qubit-kezelés

A Q#-ban a qubitek olyan erőforrások, amelyeket szükség esetén a futtatókörnyezetből kérnek, és ha már nincs használatban, visszaadják. Ez a módszer hasonló ahhoz, ahogyan a klasszikus nyelvek kezelik a halommemóriát.

Agnosztikus qubit típusa

A Q#-nyelv nem határozza meg, hogy a program qubitjei logikai vagy fizikai jellegűek-e, vagy a qubit technológia típusa. A futtatókörnyezet dönti el, hogy egy program qubit változója egy tényleges logikai vagy fizikai qubitre van-e megfeleltetve. Ez a leképezés elhalasztható, amíg a topológia és a céleszköz egyéb adatai nem ismertek.

Fordító által generált szabályozott és szomszédos specializációk

A Q# automatikusan visszafordíthatóvá és szabályozhatóvá teheti a műveleteket. Ez a képesség megkönnyíti az algoritmusok írását, és lehetővé teszi a kvantumkód fordítóalapú optimalizálását.

Első osztályú műveletek

A Q# műveletei és függvényei átadhatók más műveleteknek, hozzárendelhetők változókhoz, és bármely más értékhez hasonlóan használhatók. Ez a képesség megkönnyíti az olyan protokollok kifejezését, mint az amplitúdóerősítés, a fázisbecslés és más.

Klasszikus vezérlési folyamat

A Q# támogatja az általános klasszikus vezérlési folyamatot egy algoritmus végrehajtása során. A valószínűségi algoritmusokhoz, például a Grover kereséséhez szükséges hurok például egyszerűen kifejezhető Q#-ban. Ilyen típusú folyamat esetén nem kell visszatérnie a klasszikus illesztőprogramhoz annak ellenőrzéséhez, hogy az eredmény megfelel-e az oracle-nek, majd újrafuttathatja, ha nem.

Vegyes klasszikus és kvantumszámítás

A Q# támogatja a gazdag klasszikus számításokat és kvantumműveleteket, lehetővé téve az adaptív algoritmusok, például a véletlenszerű sétafázis becslési műveletének tiszta kifejezését. Az ilyen algoritmusokat nehéz közvetlenül kifejezni a rögzített kvantumkapuk sorozatának áramköri modelljében.