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


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

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

Когда два или более кубитов запутаны, они делятся квантовой информацией, что означает, что то, что происходит с одним кубитом, также происходит с другим. В этом кратком руководстве вы создадите определенное запутанное состояние двух кубитов, называемое парой Белла. Если вы измеряете один кубит в состоянии $\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 значения либо , ZeroOneкоторые представляют результаты измерений кубита:

    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}$.

Вы помещаете кубит в суперпозицию, применяя операцию HadamardH.

        // Put q1 into an even superposition.
        H(q1);

Результирующее состояние q1 равно$\frac{{1}{\sqrt{2}} (\ket{{0}+\ket{1}),$ которое является даже суперпозицией $\ket{0}$ и $\ket{{1}$.

Запутывание кубитов

Теперь вы готовы запутать кубиты с помощью управляемой операции NOT. CNOT CNOT — это операция управления, которая принимает два кубита, один выступает в качестве элемента управления, а другой — в качестве целевого объекта.

В этом кратком руководстве вы назначаете q1 в качестве управляющего кубита и q2 в качестве целевого кубита. Это означает, что CNOT меняет состояние q2, когда состояние q1 становится $\ket{1}$.

        // Entangle q1 and q2, making q2 depend on q1.
        CNOT(q1, q2);

Результирующее состояние обоих кубитов — $\frac{пара Белла{1}{\sqrt{2}}(\ket{00}+\ket{{11})$.

Совет

Если вы хотите узнать, как операции Hadamard и CNOT преобразуют состояние кубитов, см. статью "Создание запутанности с квантовыми операциями".

Отображение запутанного состояния

Прежде чем измерять кубиты, важно убедиться, что предыдущий код успешно запутывает их. Для вывода текущего состояния программы DumpMachine можно использовать Microsoft.Quantum.Diagnostics операцию, которая является частью Q# библиотеки:

        // 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, показывающий, где найти команду

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

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