Uživatelská Q# příručka pro kvantový programovací jazyk
KvantovýQ# programovací jazyk je součástí microsoftu Quantum Development Kit, který poskytuje bohatou podporu integrovaného vývojového prostředí a nástroje pro vizualizaci a analýzu programů. Pomocí Q# sady a Quantum Development Kit (QDK) můžete psát kvantové programy a spouštět je na skutečném kvantovém hardwaru pomocí Azure Quantum.
Další informace najdete v tématu Konfigurace prostředí pro vývoj kvantových aplikací a odesílání Q# úloh do Azure Quantum.
Uživatelská Q# příručka obsahuje:
Způsoby spuštění Q# programu: Program Q# lze spustit jako samostatnou aplikaci nebo s dalším hostitelským programem napsaným v Pythonu nebo v jazyce .NET.
Testování a ladění Q# programů: Stejně jako u klasického programování je důležité mít možnost zkontrolovat, jestli kvantové programy fungují podle očekávání, a umět diagnostikovat nesprávné chování. Pro Quantum Development Kit testování a ladění kvantových programů.
Průvodce Q# jazykem: Q# je samostatný jazyk, který nabízí vysokou úroveň abstrakce. Neexistuje žádná představa kvantového stavu nebo okruhu; Q# místo toho implementuje programy z hlediska příkazů a výrazů, podobně jako klasické programovací jazyky. Průvodce Q# jazykem poskytuje úplnou specifikaci a dokumentaci k kvantovému programovacímu Q# jazyku.
Dokumentace ke kvantovým simulátorům: Kvantové simulátory jsou softwarové programy, které běží na klasických počítačích a fungují jako target počítač pro Q# program, což umožňuje spouštět a testovat kvantové programy na klasických počítačích.
Q# Dokumentace ke knihovně: Poskytuje Quantum Development Kit další funkce specifické pro doménu prostřednictvím balíčků NuGet, které lze přidat do vašich Q# projektů. Dokumentace obsahuje operace, funkce, uživatelem definované typy, příklady a koncepty, které tvoří standardní Q# knihovnu, a také kvantovou chemii, kvantové strojové učení a knihovny kvantových čísel.
Co je v Q# programu?
Pojďme se podívat na obecné části, které se vejdou do Q# programu. Zvažte následující Q# program:
namespace HelloQuantum {
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
@EntryPoint()
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
}
EntryPoint
řekne kompilátoru Q# , kde má spustit program. Program vypíše tuto zprávu:
Hello quantum world!
Obory názvů
Každý Q# soubor obvykle začíná oborem názvů. Tady je příklad:
namespace HelloQuantum {
// Your code goes here.
}
Obory názvů pomáhají uspořádat související funkce. Jejich použití je důležité, když používáte Q# knihovny ve svých programech a když píšete vlastní knihovny.
Knihovny
Q# ve velké míře využívá knihovny. Knihovna je balíček, který obsahuje funkce a operace, které můžete použít v kvantových programech.
Například knihovna Microsoft.Quantum.Chemistry pomáhá provádět kvantové výpočty související s chemií. Existuje několik standardních knihoven, které obsahují velké množství základních operací.
Při volání funkce nebo operace z knihovny zadáte obor názvů knihovny. Tady je příklad, který volá Message
funkci z knihovny Microsoft.Quantum.Intrinsic pro tisk zprávy do konzoly:
namespace HelloQuantum {
@EntryPoint()
operation SayHelloQ() : Unit {
Microsoft.Quantum.Intrinsic.Message("Hello quantum world!");
}
}
Častěji se používá direktiva open
, aby byl kód výstižnější a čitelnější.
Tento příklad provede totéž jako ten předchozí, ale použije direktivu open
k přenosu oboru názvů Microsoft.Quantum.Intrinsic
do programu:
namespace HelloQuantum {
open Microsoft.Quantum.Intrinsic;
@EntryPoint()
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
}
Zde můžete jednoduše zadat Message
a kompilátor pochopí, do kterého oboru názvů patří.
Q# Dokumentace poskytuje úplnou referenční dokumentaci pro každou integrovanou knihovnu. Další informace najdete v dokumentaci ke Q# knihovnám.
Typy
Q#poskytuje mnoho předdefinovaných typů, které už znáte, včetně Int
, Double
Bool
, a , a String
také typů, které jsou specifické pro kvantové výpočty. Typ například Result
představuje výsledek měření qubitu a může mít jednu ze dvou možných hodnot: One
a Zero
. Q# poskytuje také typy, které definují oblasti, pole a řazené kolekce členů. Můžete dokonce definovat vlastní typy.
Q# Systém typů je celkem minimalistický v tom smyslu, že neexistuje explicitní pojem tříd nebo rozhraní, jak by se dalo použít z klasických jazyků, jako je C# nebo Java.
Přidělování qubitů
V Q#systému se qubity přidělují prostřednictvím klíčového use
slova. Najednou můžete přidělit jeden nebo více qubitů.
Tady je příklad, který přiděluje jeden qubit:
// Allocate a qubit.
use q = Qubit();
// Do something with q here.
Ve výchozím nastavení začíná každý qubit, který přidělíte pomocí klíčového use
slova, v nulovém stavu.
Kvantové operace
Po přidělení lze qubit předat operacím a funkcím, které se označují také jako volatelné. V určitém smyslu je to vše Q# , co program může dělat s qubitem. Operace jsou základní stavební bloky Q# programu. Operace Q# je kvantový podprogram. To znamená, že jde o volatelnou rutinu, která obsahuje operace upravující stav registru qubitu.
Pokud chcete definovat Q# operaci, zadejte název operace spolu s jejími vstupy a výstupem. Tady je jednoduchý příklad:
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
SayHelloQ
zde představuje název operace. Přebírá jako svůj vstup nula argumentů a vrací typ Unit
, což znamená, že operace nevrátí žádné informace.
KnihovnyQ# také poskytují operace, které můžete použít ve svých programech, například Hadamard nebo H
operace. Vzhledem k tomu, že je qubit v základu H
Z, operace převede qubit do rovnoměrné superpozice. Jakmile je qubit v superpozici, má 50% pravděpodobnost, že se změří jako nula nebo jedna.
Všechny přímé akce na stav qubitu jsou definovány vnitřními volatelnými možnostmi, jako X
jsou a H
– to znamená volatables, jejichž implementace nejsou definovány v rámci Q# , ale jsou definovány target počítačem. To, co tyto operace ve skutečnosti dělají , je provedeno pouze strojem target , který se rozhodnete spustit konkrétní Q# program. Další informace najdete v tématu Q# Implementace programu.
Pokud například spustíte program na simulátoru úplného stavu, simulátor provede odpovídající matematické operace se simulovaným kvantovým systémem. Ale když se podíváme do budoucnosti, když se jedná o target skutečný kvantový počítač, zavolání takových operací nasměruje Q# kvantový počítač k provedení odpovídajících reálných operací na skutečném kvantovém hardwaru. Například v kvantovém počítači s zachycenými ionty jsou kvantové operace realizovány přesně načasovanými laserovými impulsy.
Program Q# překombinuje tyto operace tak, jak jsou definovány target počítačem, a vytvoří tak nové operace vyšší úrovně pro vyjádření kvantového výpočtu. Tímto způsobem usnadňuje vyjádření logiky, Q# která je základem kvantového a hybridního kvantového a klasického algoritmu, a zároveň je obecná s ohledem na strukturu počítače nebo simulátoru target .
Měření qubitů
Existuje mnoho druhů kvantových měření, ale Q# zaměřuje se na projektivní měření na jednotlivých qubitech, označovaných také jako Pauliho měření. Při měření v daném základu (například výpočetní báze $\ket{0},\ket{1}$) se stav qubitu promítá na libovolný základní stav, který byl změřen, a tím se zničí jakákoli superpozice mezi těmito dvěma hodnotami.
V Q#nástroji se pauliho měření provádí použitím Measure
operace, která provádí společné měření jednoho nebo více qubitů v zadaných Pauliho bázích. Measure
operace vrátí Result
typ.
Poznámka
Pokud jsou základní pole a qubitové pole různě dlouhé, Measure
operace selže.
Pokud chcete implementovat měření ve výpočetní bázi $\ket{0},\ket{1}$, můžete použít M
také operaci, která provede měření jednoho qubitu v základu Pauliho Z. Proto M
je operace ekvivalentní použití Measure([PauliZ], [qubit])
.
Jednoduchým příkladem je následující program, který přidělí jeden qubit ve stavu $\ket{0}$, pak na něj použije hadamardovou operaci H
a změruje výsledek v základu PauliZ
.
@EntryPoint()
operation MeasureOneQubit() : Result {
// Allocate a qubit, by default it is in zero state
use q = Qubit();
// We apply a Hadamard operation H to the state
// It now has a 50% chance of being measured 0 or 1
H(q);
// Now we measure the qubit in Z-basis.
let result = M(qubit);
// We reset the qubit before releasing it.
if result == One { X(qubit); }
// Finally, we return the result of the measurement.
return result;
}
Pro provádění měření nad rámec jednoho společného měření Microsoft.Quantum.Measurement
zahrnuje obor názvů konkrétnější operace. Operace například MultiM
vezme pole qubitů a vrátí pole výsledků měření na výpočetní bázi.