Упражнение, часть 1. Создание квантового случайного битового генератора

Завершено

В предыдущем уроке вы узнали об основных стандартных блоках программы Q#. Теперь вы готовы написать первую квантовую программу: квантовую программу для создания действительно случайных чисел.

Квантовый генератор случайных чисел создается в два этапа. В этом уроке вы создадите первый этап, который заключается в создании одного случайного бита.

Создание программы Q#

  1. Откройте Visual Studio Code и выберите "Создать > текстовый файл ", чтобы создать новый файл.
  2. Сохраните файл как 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, который представляет действительно случайный бит. Вы можете снова запустить программу, чтобы увидеть другой результат.

В следующем уроке вы реализуете второй этап генератора квантовых случайных чисел: объединение нескольких случайных битов для формирования большего числа.