Краткое руководство. Создание первой Q# программы
Узнайте, как писать базовую Q# программу, демонстрирующую запутанность, ключевую концепцию квантовых вычислений.
Когда два или более кубитов запутаны, они делятся квантовой информацией, что означает, что то, что происходит с одним кубитом, также происходит с другим. В этом кратком руководстве вы создадите определенное двухкубитное запутанное состояние, называемое парой Bell. Если вы измеряете один кубит в $\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}$.
Вы помещаете кубитов в суперпозицию, применяя Hadamard, H
операцию:
// Put q1 into an even superposition.
H(q1);
Результирующее состояние q1
равно{1}{\sqrt{2}}$\frac{ ({0}\ket{+\ket{1}),$ которое является даже суперпозицией $\ket{0}$ и $\ket{{1}$.
Запутать кубиты
Теперь вы готовы запутать кубиты с помощью управляемой операции NOT. CNOT
CNOT
— это операция управления, которая принимает два кубита, один выступает в качестве элемента управления, а другой — в качестве целевого объекта.
В этом кратком руководстве показано q1
, как кубит элемента управления и q2
в качестве целевого кубита. Это означает, что CNOT
перевернуто состояниеq2
, в которое находится $\ket{1}$состояниеq1
.
// Entangle q1 and q2, making q2 depend on q1.
CNOT(q1, q2);
Результирующее состояние обоих кубитов — пара $\frac{Колокола (\ket{00}+\ket{{11}).${1}{\sqrt{2}}
Совет
Если вы хотите узнать, как операции Hadamard и CNOT преобразуют состояние кубитов, см. статью "Создание запутанности с квантовыми операциями".
Отображение запутанного состояния
Прежде чем измерять кубиты, важно убедиться, что предыдущий код успешно запутывает их. Для вывода текущего состояния программы Q# можно использовать DumpMachine
операцию, которая является частью Microsoft.Quantum.Diagnostics
библиотеки:
// 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# В этом руководстве рассматриваются основные понятия, описанные в этом кратком руководстве, и вы можете создать более расширенную программу запутания.