Упражнение, часть 1. Создание квантового случайного битового генератора
В предыдущем уроке вы узнали об основных стандартных блоках программы Q#. Теперь вы готовы написать первую квантовую программу: квантовую программу для создания действительно случайных чисел.
Квантовый генератор случайных чисел создается в два этапа. В этом уроке вы создадите первый этап, который заключается в создании одного случайного бита.
Создание программы Q#
- Откройте Visual Studio Code и выберите "Создать > текстовый файл ", чтобы создать новый файл.
- Сохраните файл как
Main.qs
. Этот файл будет содержать код Q# для программы.
Main
Определение операции
Операция Main
— это точка входа программы.
operation Main(): Result{
// Your code goes here
}
Выделение кубита
Начните с выделения одного кубита с ключевым словом use
. В Q#каждый кубит, который вы выделяете, начинается в состоянии $\ket{0}$ по умолчанию.
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
Поместите кубита в суперпозицию
Кубит находится в состоянии $\ket{0}$, который не очень полезен для создания случайных чисел. Необходимо поместить кубита в суперпозицию. Для этого необходимо применить операцию Hadamard к H
кубитам. Операция Hadamard изменяет состояние кубита и помещает его в равное суперпозицию $\ket{0}$ и $\ket{1}$.
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket + \ket{0}{1}) $$
Так как кубит находится в равной суперпозиции, когда вы измеряете его, у вас есть 50% шанс получить 0 и 50% шанс получить 1.
operation Main(): Result{
use q = Qubit();
H(q);
}
Измерение кубита
На этом этапе кубит q
имеет 50% шансов измерять в состоянии |0〉 и 50% вероятность измерения в состоянии |1〉. Таким образом, при измерении кубита вы получите случайный бит (0 или 1) с равной 50% вероятностью. Значение этого бита действительно случайно, нет способа заранее знать результат измерения.
Чтобы измерить значение кубита, используйте M
операцию и сохраните значение измерения в переменной result
.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
Сброс кубита
В Q#каждый кубит должен находиться в состоянии $\ket{0}$ к моменту их выпуска. Используется Reset(q)
для сброса кубита до нулевого состояния.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
Возврат результата измерения
Наконец, вы возвращаете результат измерения с ключевым словом return
. Этот результат представляет собой случайный бит (0 или 1) с равной вероятностью.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
Окончательная программа
Файл Main.qs
должен выглядеть следующим образом. Программа выделяет кубит, помещает его в суперпозицию, измеряет кубитов, сбрасывает кубит и возвращает результат измерения.
Примечание.
Символ //
представляет необязательные комментарии для объяснения каждого шага программы.
operation Main() : Result {
// Allocate a qubit.
use q = Qubit();
// Set the qubit into superposition of 0 and 1 using the Hadamard
H(q);
// Measure the qubit and store the result.
let result = M(q);
// Reset qubit to the |0〉 state.
Reset(q);
// Return the result of the measurement.
return result;
}
Запуск программы
Чтобы запустить программу на встроенном симуляторе, нажмите кнопку "Выполнить над Main
операцией" или нажмите клавиши CTRL+F5. Выходные данные отображаются в консоли отладки в терминале.
Результатом является либо One
, либо Zero
, который представляет действительно случайный бит. Вы можете снова запустить программу, чтобы увидеть другой результат.
В следующем уроке вы реализуете второй этап генератора квантовых случайных чисел: объединение нескольких случайных битов для формирования большего числа.