Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Узнайте, как писать базовую Q# программу, демонстрирующую запутанность, ключевую концепцию квантовых вычислений.
Когда два или более кубитов запутаны, они делятся квантовой информацией, что означает, что то, что происходит с одним кубитом, также происходит с другим. В этом кратком руководстве вы создадите определенное запутанное состояние двух кубитов, называемое парой Белла. Если вы измеряете один кубит в состоянии $\ket{0}$, то знаете, что другой кубит также находится в состоянии $\ket{0}$ без измерения. Дополнительные сведения см. в статье Quantum entanglement.
В этом кратком руководстве вы:
- Создайте файл Q# .
- Выделите пару кубитов.
- Запутать кубиты.
Предварительные требования
- Последняя версия Visual Studio Code.
- Расширение Azure Quantum Development Kit (QDK). Дополнительные сведения об установке см. в разделе "Настройка пакета средств разработки Quantum".
Создайте файл Q# .
- Откройте Visual Studio Code.
- >новый текстовый файл.
- Сохраните файл как
Main.qs
. Расширение .qs обозначает программу Q#.
Напишите ваш Q# код
В файле Main.qs
выполните следующие действия, чтобы запутать и измерить пару кубитов.
Импорт квантовой библиотеки
QDK включает стандартную библиотеку Q# с предопределенными функциями и операциями для квантовых программ. Чтобы использовать их, необходимо сначала импортировать соответствующую библиотеку.
В программе используйте инструкцию import
для открытия библиотеки Microsoft.Quantum.Diagnostics
. Это дает доступ ко всем функциям и операциям, включая DumpMachine()
, используемые позже для отображения связанного состояния.
import Microsoft.Quantum.Diagnostics.*;
Определение операции
После импорта соответствующих библиотек определите квантовую операцию и ее входные и выходные значения. В этом кратком руководстве ваша операция — Main
. Здесь вы напишете оставшийся Q# код для выделения, управления и измерения двух кубитов.
Main
не принимает параметров и возвращает два Result
значения либо , Zero
One
которые представляют результаты измерений кубита:
operation Main() : (Result, Result) {
// Your entanglement code goes here.
}
Выделите два кубита
Операция Main
в настоящее время пуста, поэтому следующий шаг — выделить два кубита q1
и q2
. В Q# вы выделяете кубиты, используя ключевое слово use
.
// Allocate two qubits, q1 and q2, in the 0 state.
use (q1, q2) = (Qubit(), Qubit());
Примечание.
В Q#, кубиты всегда выделяются в $\ket{0}$ состоянии.
Поместите один кубит в суперпозицию
Кубиты q1
и q2
находятся в $\ket{0}$ состоянии. Чтобы подготовить кубит к перепутыванию, необходимо поместить один из них в равновероятную суперпозицию, где он имеет 50% вероятность быть измеренным как $\ket{0}$ или $\ket{1}$.
Вы помещаете кубит в суперпозицию, применяя операцию HadamardH
.
// Put q1 into an even superposition.
H(q1);
Результирующее состояние q1
равно$\frac{{1}{\sqrt{2}} (\ket{{0}+\ket{1}),$ которое является даже суперпозицией $\ket{0}$ и $\ket{{1}$.
Запутывание кубитов
Теперь вы готовы запутать кубиты с помощью управляемой операции NOT. CNOT
CNOT
— это операция управления, которая принимает два кубита, один выступает в качестве элемента управления, а другой — в качестве целевого объекта.
В этом кратком руководстве вы назначаете q1
в качестве управляющего кубита и q2
в качестве целевого кубита. Это означает, что CNOT
меняет состояние q2
, когда состояние q1
становится $\ket{1}$.
// Entangle q1 and q2, making q2 depend on q1.
CNOT(q1, q2);
Результирующее состояние обоих кубитов — $\frac{пара Белла{1}{\sqrt{2}}(\ket{00}+\ket{{11})$.
Совет
Если вы хотите узнать, как операции Hadamard и CNOT преобразуют состояние кубитов, см. статью "Создание запутанности с квантовыми операциями".
Отображение запутанного состояния
Прежде чем измерять кубиты, важно убедиться, что предыдущий код успешно запутывает их. Для вывода текущего состояния программы DumpMachine
можно использовать Microsoft.Quantum.Diagnostics
операцию, которая является частью Q# библиотеки:
// Show the entangled state of the qubits.
DumpMachine();
Измерение кубитов
Теперь, когда вы проверили, что кубиты запутаны, можно использовать M
операцию для их измерения. Измерение q1
и q2
сворачивает их квантовые состояния в одно из Zero
или One
с равной вероятностью.
В Q# используется ключевое слово let
для объявления новой переменной. Чтобы сохранить результаты q1
измерения и q2
объявите переменные m1
и m2
соответственно:
// Measure q1 and q2 and store the results in m1 and m2.
let (m1, m2) = (M(q1), M(q2));
Сброс кубитов
Перед тем как быть выпущенными в конце каждой Q# программы, кубиты должны находиться в состоянии $\ket{0}$. Это можно сделать с помощью Reset
операции:
// Reset q1 and q2 to the 0 state.
Reset(q1);
Reset(q2);
Возврат результатов измерения
Наконец, чтобы завершить операцию Main
и наблюдать за запутанным состоянием, верните результаты измерений m1
и m2
.
// Return the measurement results.
return (m1, m2);
Совет
Если вы хотите узнать больше о Q# функции или операции, наведите на него указатель мыши.
Выполните ваш Q# код
Поздравляем! Вы написали Q# программу, которая запутала два кубита и создала пару Белла.
Последняя Q# программа должна выглядеть следующим образом:
import Microsoft.Quantum.Diagnostics.*;
operation Main() : (Result, Result) {
// Allocate two qubits, q1 and q2, in the 0 state.
use (q1, q2) = (Qubit(), Qubit());
// Put q1 into an even superposition.
// It now has a 50% chance of being measured as 0 or 1.
H(q1);
// Entangle q1 and q2, making q2 depend on q1.
CNOT(q1, q2);
// Show the entangled state of the qubits.
DumpMachine();
// Measure q1 and q2 and store the results in m1 and m2.
let (m1, m2) = (M(q1), M(q2));
// Reset q1 and q2 to the 0 state.
Reset(q1);
Reset(q2);
// Return the measurement results.
return (m1, m2);
}
Чтобы запустить программу и просмотреть результат обоих кубитов, выберите Выполнить над операцией Main
или нажмите клавиши Ctrl+F5.
Вы можете запустить программу несколько раз, каждая из которых имеет другой результат в консоли отладки. Это демонстрирует вероятностный характер квантовых измерений и запутанность кубитов.
Например, если результатом является Zero
, консоль отладки должна выглядеть следующим образом:
DumpMachine:
Basis | Amplitude | Probability | Phase
-----------------------------------------------
|00⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
|11⟩ | 0.7071+0.0000𝑖 | 50.0000% | 0.0000
Result: "(Zero, Zero)"
Следующий шаг
Чтобы узнать больше о запутанности квантов с Q#, см. Руководство: изучение квантовой запутанности с Q#. Это руководство расширяет понятия, изложенные в этом кратком руководстве, и помогает вам создать более сложную программу запутанности.