Programmausführung
Das folgende Beispiel gibt einen ersten Einblick in die Implementierung eines Q# Programms:
/// # Sample
/// Bell States
///
/// # Description
/// Bell states or EPR pairs are specific quantum states of two qubits
/// that represent the simplest (and maximal) examples of quantum entanglement.
///
/// This Q# program implements the four different Bell states.
import Std.Diagnostics.*;
import Std.Measurement.*;
operation Main() : (Result, Result)[] {
// Allocate the two qubits that will be used to create a Bell state.
use register = Qubit[2];
// This array contains a label and a preparation operation for each one
// of the four Bell states.
let bellStateTuples = [
("|Φ+〉", PreparePhiPlus),
("|Φ-〉", PreparePhiMinus),
("|Ψ+〉", PreparePsiPlus),
("|Ψ-〉", PreparePsiMinus)
];
// Prepare all Bell states, show them using the `DumpMachine` operation
// and measure the Bell state qubits.
mutable measurements = [];
for (label, prepare) in bellStateTuples {
prepare(register);
Message($"Bell state {label}:");
DumpMachine();
measurements += [(MResetZ(register[0]), MResetZ(register[1]))];
}
return measurements;
}
operation PreparePhiPlus(register : Qubit[]) : Unit {
ResetAll(register); // |00〉
H(register[0]); // |+0〉
CNOT(register[0], register[1]); // 1/sqrt(2)(|00〉 + |11〉)
}
operation PreparePhiMinus(register : Qubit[]) : Unit {
ResetAll(register); // |00〉
H(register[0]); // |+0〉
Z(register[0]); // |-0〉
CNOT(register[0], register[1]); // 1/sqrt(2)(|00〉 - |11〉)
}
operation PreparePsiPlus(register : Qubit[]) : Unit {
ResetAll(register); // |00〉
H(register[0]); // |+0〉
X(register[1]); // |+1〉
CNOT(register[0], register[1]); // 1/sqrt(2)(|01〉 + |10〉)
}
operation PreparePsiMinus(register : Qubit[]) : Unit {
ResetAll(register); // |00〉
H(register[0]); // |+0〉
Z(register[0]); // |-0〉
X(register[1]); // |-1〉
CNOT(register[0], register[1]); // 1/sqrt(2)(|01〉 - |10〉)
}
Dieses Programm implementiert die vier grundlegenden Bell-Zustände der Quantenverschränkung und ist eines der Beispielprogramme, die die Azure Quantum Visual Code-Erweiterung enthalten.
Sie können das Programm über den integrierten Simulator in der VS Code QDK-Erweiterung ausführen und die Standardausgabe abrufen.
Message: Bell state |Φ+〉:
DumpMachine:
Basis | Amplitude | Probability | Phase
-----------------------------------------------
|00⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
|11⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
Message: Bell state |Φ-〉:
DumpMachine:
Basis | Amplitude | Probability | Phase
-----------------------------------------------
|00⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
|11⟩ | −0.7071+0.0000𝑖 | 50.0000% | -3.1416
Message: Bell state |Ψ+〉:
DumpMachine:
Basis | Amplitude | Probability | Phase
-----------------------------------------------
|01⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
|10⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
Message: Bell state |Ψ-〉:
DumpMachine:
Basis | Amplitude | Probability | Phase
-----------------------------------------------
|01⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
|10⟩ | −0.7071+0.0000𝑖 | 50.0000% | -3.1416
Result: "[(One, One), (Zero, Zero), (One, Zero), (Zero, One)]"
Finished shot 1 of 1
Q# simulation completed.
Oder führen Sie den Simulator mit einer Histogrammausgabe aus.
Um das Programm auf Quantenhardware auszuführen, muss das Programm zuerst kompiliert und an Azure Quantum übermittelt werden, was alles in VS Code erfolgen kann. Den vollständigen End-to-End-Prozess finden Sie unter Erste Schritte mit Q# Programmen und Visual Studio Code.