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

Завершено

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

Вы создаете генератор квантовых случайных чисел двумя шагами. Этот блок является первым шагом для генерации одного случайного бита. Чтобы создать случайный бит, вы выделяете кубит в состоянии $\ket{0}$, поместите этот куб в состояние суперпозиции, а затем измеряете кубит, чтобы получить случайное битовое значение либо 0, либо 1.

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

  1. Откройте Visual Studio Code.
  2. Откройте меню "Файл " и выберите "Создать текстовый файл ", чтобы создать новый файл.
  3. Сохраните файл как Main.qs.

Напишите код Q# для случайного генератора битов Main.qs в файле.

Main Определение операции

Операция Main — это точка входа программы. Скопируйте следующий код в Main.qs файл:

operation Main(): Result{

    // Your code goes here

}

Выделение кубита

Чтобы начать, используйте инструкцию use для выделения одного кубита. В Q# каждый кубит, выделенный с use, по умолчанию начинается в состоянии $\ket{0}$. Чтобы выделить один кубит, скопируйте следующий код в программу:

operation Main(): Result{

    // Allocate a qubit
    use q = Qubit();
}

Поместите кубит в состояние суперпозиции

На этом этапе невозможно создать случайный бит из кубита, так как кубит находится в состоянии $\ket{0}$. Если измерять состояние этого кубита, измерение будет возвращать битовое значение 0 каждый раз.

Чтобы создать случайный бит из измерения кубита, сначала необходимо поместить кубит в суперпозицию состояния $\ket{0}$ и состояния $\ket{1}$. Чтобы поместить кубита в состояние суперпозиции, примените операцию Hadamard к кубите. Операция Hadamard преобразует кубит из состояния $\ket{0}$ в равное суперпозицию состояний $\ket{0}$ и $\ket{1}$.

$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket + \ket{0}{1}) $$

Чтобы применить операцию Адамара к вашему кубиту в Q#, используйте операцию H.

operation Main(): Result{

    use q = Qubit();
    H(q);
}

Примечание.

При применении квантовой операции к кубиту в Q#операция не возвращает значение. Вместо этого операции влияют на состояние кубита.

Измерение кубита

Так как кубит теперь находится в равном состоянии суперпозиции, при измерении кубита у вас есть 50% вероятность того, что измерение возвращает 0 и 50% вероятность того, что измерение возвращает 1.

Чтобы измерить значение кубита в Q#, используйте M операцию и сохраните значение измерения в переменной result :

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
}

Сброс кубита

В Q#кубит должен находиться в состоянии $\ket{0}$ перед выпуском кубита. Используйте операцию Reset для сброса кубита в состояние $\ket{0}$.

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
}

Возврат результата измерения

Наконец, верните результат измерения, используя оператор return. Этот результат является случайным битом либо 0, либо 1 с равной вероятностью. Скопируйте следующий код в Main.qs файле:

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
    return result;
}

Запуск программы генератора случайных битов

Вы создали программу Main.qs Q#, которая выделяет кубитов, помещает кубитов в равное состояние суперпозиции, измеряет кубит, сбрасывает кубит, а затем возвращает результат измерения. Ниже приведен пример кода Q#:

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. Выходные данные отображаются в консоли отладки в терминале.

Результат либо Zero, либо One, каждый с 50% шансами. Значение измерения этого бита на квантовом компьютере действительно случайно. Запустите программу несколько раз, чтобы узнать, как изменяется результат.

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