Vytvoření kvantového propletení pomocí Q#
Teď vytvoříme několik kvantových propletení pomocí Q# Azure Quantum Development Kit.
Operace Controlled NOT (CNOT)
Pokud jsou dva qubity propletené, stav jednoho qubitu závisí na stavu druhého qubitu. Proto k propletení dvou qubitů potřebujete operaci, která funguje na obou qubitech současně. Tomu se říká vícequbitová operace nebo brána.
K vytvoření kvantového propletení potřebujete vícequbitovou CNOT
operaci, která je zkratkou controlled-NOT. Tato operace přebírá jako vstup dva qubity, jeden funguje jako řídicí qubit a druhý je target qubit. CNOT
Brána překlopí stav druhého qubitu target (qubitu), a pouze pokud je stav prvního qubitu (řídicí qubit) $|1\rangle$.
Vstup | Výstup |
---|---|
$\ket{00}$ | $\ket{00}$ |
$\ket{01}$ | $\ket{01}$ |
$\ket{10}$ | $\ket{11}$ |
$\ket{11}$ | $\ket{10}$ |
V Q#, CNOT
operace působí na pole dvou qubitů a překlopí druhý qubit, pokud je One
první qubit .
Propletení s operací CNOT
H
Použitím operace a CNOT
operace můžete transformovat dva qubity ve stavu $|00\rangle$ na stav $\ket{\phiZvonku ^+}=\frac1{\sqrt2}(|00\rangle+|11\rangle)$.
Jak to funguje:
Vezměte dva qubity ve stavu $|00\rangle$. Prvním qubitem je řídicí qubit a druhým qubitem target je qubit.
Vytvořte stav superpozice pouze v řídicím qubitu použitím $H$.
$$H |0_c\rangle={2}}\frac{1}{\sqrt{(|0_c\rangle+|1_c)\rangle$$
Poznámka:
Dolní indexy ${}_c$ a ${}_t$ určují ovládací prvek a target qubity.
Použití operátoru $CNOT$ na řídicí qubit, který je ve stavu superpozice, a target qubit, který je ve stavu $|0_t\rangle$.
$$CNOT \frac{1}{\sqrt{2}}(\ket{0_c+\ket{1_c})\ket{0}_t = CNOT \frac{1}{\sqrt2}(\ket{0_c 0_t+|\ket{1_c 0_t}})=\frac{={1}{\sqrt$$$$2}(CNOT \ket{0_c 0_t}} + CNOT \ket{1_c 0_t})$$\frac{1}{\sqrt$$==2}(\ket{0_c 0_t}+\ket{1_c 1_t)}$$
Vytvoření a měření stavů Zvonu pomocí Q#
- Otevřete Visual Studio Code.
- Vyberte Soubor > Nový textový soubor a uložte ho jako
Entanglement.qs
. - Vyberte Zobrazit –> Paleta příkazů a zadejteQ#: Nastavte profil Azure Quantum QIRtarget. Stiskněte klávesu Enter.
- Vyberte Q#: Bez omezení.
Vytvoření stavu $\ket{\phizvonku ^+}$
Začněme vytvořením stavu $\ket{\phizvonku ^+}=\frac1{\sqrt2}(|00\rangle+|11\rangle)$.
Zkopírujte a vložte do souboru následující Q# kód
Entanglement.qs
.namespace Entanglement { open Microsoft.Quantum.Diagnostics; @EntryPoint() operation EntangleQubits() : (Result, Result) { // Allocate the two qubits that will be entangled. use (q1, q2) = (Qubit(), Qubit()); // Set the first qubit in superposition by calling the `H` operation, // which applies a Hadamard transformation to the qubit. // Then, entangle the two qubits using the `CNOT` operation. H(q1); CNOT(q1, q2); // Show the entangled state using the `DumpMachine` function. DumpMachine(); // Measurements of entangled qubits are always correlated. let (m1, m2) = (M(q1), M(q2)); Reset(q1); Reset(q2); return (m1, m2); } }
Pokud chcete program spustit místně na integrovaném simulátoru, klikněte v seznamu níže uvedených příkazů na Spustit nebo stiskněte Kombinaci kláves Ctrl+F5.
@EntryPoint()
Výstup se zobrazí v konzole ladění.Výsledky měření korelují, takže na konci programu získáte výsledek
(Zero, Zero)
nebo(One, One)
se stejnou pravděpodobností.Diagram okruhu můžete vizualizovat kliknutím na Okruh ze seznamu příkazů níže
@EntryPoint()
. Diagram obvodu znázorňuje bránu Hadamard použitou na první qubit a bránu CNOT použitou na oba qubity.
Vytvoření stavu $\ket{\phizvonku ^-}$
Pokud chcete vytvořit další stavy Bell, musíte pro qubity použít další operace Pauli $X$ a $Z$ .
Pokud například chcete vytvořit stav $\ket{\phiZvonu ^-}=\frac1{\sqrt2}(|00-11|\rangle\rangle),$můžete po použití brány Hadamard použít operaci Pauli $Z$ na řídicí qubit. Operace $Z$ překlopí stav $\ket{+}$ na $\ket{-}$.
Poznámka:
Stavy $\frac{{1}{\sqrt{2}}(|0\rangle+|1\rangle)$ a $\frac{1}{\sqrt{{2}}(|0\rangle -|1\rangle)$ se také označují jako $\ket{+}$ a $\ket{{-}$v uvedeném pořadí.
Jak to funguje:
Vezměte dva qubity ve stavu $|00\rangle$.
Vytvořte stav superpozice pouze v řídicím qubitu použitím $H$.
$$H |0_c\frac{\rangle={1}{\sqrt{2}}(|0_c\rangle+|1_c\rangle) =\ket{+_c}$$
$Použití operace Z$ na řídicí qubit.
$$Z \frac{{1}{\sqrt{{2}}(|0_c\rangle+|1_c\rangle)=\frac{1}{\sqrt{{2}}(|0_c-1_c|\rangle\rangle)_c=\ket{{-}$$
Použití operátoru $CNOT$ na řídicí qubit a target qubit, který je ve stavu $|0_t\rangle$.
$$CNOT \frac{1}{\sqrt{2}}(\ket{0_c-1_c\ket{})\ket{0}_t = CNOT \frac{1}{\sqrt2}(\ket{0_c 0_t-1_c 0_t}}|\ket{){1}{\sqrt==\frac{$$$$2}(CNOT \ket{0_c 0_t}} - CNOT \ket{1_c 0_t})$$\frac{1}{\sqrt=$$=2}(\ket{0_c 0_t-1_c 1_t)}\ket{}$$
Q# Upravte kód tak, aby vytvořil stav $\ket{\phizvonku ^-}$. Spuštěním programu zobrazte propletený stav a diagram okruhu.
namespace Entanglement {
open Microsoft.Quantum.Diagnostics;
@EntryPoint()
operation EntangleQubits() : (Result, Result) {
// Allocate the two qubits that will be entangled.
use (q1, q2) = (Qubit(), Qubit());
// Set the first qubit in superposition by calling the `H` operation,
// which applies a Hadamard transformation to the qubit.
// Then, entangle the two qubits using the `CNOT` operation.
H(q1);
Z(q1); // Apply the Pauli Z operation to the control qubit
CNOT(q1, q2);
// Show the entangled state using the `DumpMachine` function.
DumpMachine();
// Measurements of entangled qubits are always correlated.
let (m1, m2) = (M(q1), M(q2));
Reset(q1);
Reset(q2);
return (m1, m2);
}
}
Cvičení navíc: Vytvoření stavů $\ket{\psizvonu ^+}$ a $\ket{\psi^-}$
Podobně lze bellové stavy $\ket{\psi^+}$ a $\ket{\psi^-}$ vytvořit použitím operací Pauli $X$ a $Z$ na qubity.
- Stav $\ket{\psizvonu ^+}=\frac1{\sqrt2}(|01\rangle+|10\rangle)$ lze vytvořit použitím operace Pauli $X$ na target qubit po použití brány Hadamard.
- Stav $\ket{\psiZvonu ^-}=\frac1{\sqrt2}(|01-10\rangle\rangle|)$ lze vytvořit použitím Pauli $Z$ na řídicí qubit a Pauli $X$ na target qubit po použití brány Hadamard.
Upravte program Entanglement.qs tak, aby se vytvořily stavy $\ket{\psizvonu ^+}$ a $\ket{\psi^-}$.