Поделиться через


Краткое руководство. Создание первой Q# программы

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

Когда два или более кубитов запутаны, они делятся квантовой информацией, что означает, что то, что происходит с одним кубитом, также происходит с другим. В этом кратком руководстве вы создадите определенное двухкубитное запутанное состояние, называемое парой Bell. Если вы измеряете один кубит в $\ket{0}$ состоянии, то знаете, что другой кубит также находится в $\ket{0}$ состоянии без измерения. Дополнительные сведения см. в статье Quantum entanglement.

В этом кратком руководстве вы:

  • Создайте файл Q# .
  • Выделите пару кубитов.
  • Запутать кубиты.

Необходимые компоненты

Создайте файл Q# .

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

Снимок экрана: сведения, отображаемые при наведении указателя мыши на операцию H в Visual Studio Code.

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.

Снимок экрана: файл в Visual Studio Code, показывающий Q# , где найти команду Run.

Вы можете запустить программу несколько раз, каждая из которых имеет другой результат в консоли отладки. Это демонстрирует вероятностный характер квантовых измерений и запутанность кубитов.

Например, если результатом является 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# В этом руководстве рассматриваются основные понятия, описанные в этом кратком руководстве, и вы можете создать более расширенную программу запутания.