Каковы основные компоненты программы Q#?

Завершено

Прежде чем приступить к написанию квантовых программ, важно понимать структуру и компоненты программы Q#.

В этом уроке вы просмотрите основные компоненты программы Q#.

Операция Main

Каждая программа Q# должна содержать по крайней мере одну операцию, которая обычно является операцией Main . Операция Main — это точка входа программы. По умолчанию компилятор Q# запускает выполнение программы из Main() операции. При необходимости атрибут можно использовать @EntryPoint() для указания любой операции в программе в качестве точки выполнения.

Например, следующий код определяет операцию точки входа: MeasureOneQubit

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...
}

Однако можно также написать этот код без атрибута @EntryPoint() , переименовав операцию в MeasureOneQubit() Main():

// The Q# compiler automatically detects the Main() operation as the entry point. 
operation Main() : Result {
    ...
}

Типы

Q# предоставляет множество встроенных типов, с которыми вы уже знакомы, включая Int, DoubleBoolи String. Q# также предоставляет типы, относящиеся к квантовым вычислениям, таким как Qubit и Result.

В этом примере MeasureOneQubit операция возвращает Result тип. Result Тип является результатом измерения кубита и может быть либоOne.Zero

operation MeasureOneQubit() : Result {
    ...
}

Библиотеки квантовых вычислений

Библиотеки Q# содержат функции и операции, которые можно использовать в квантовых программах. При вызове функции или операции из библиотеки используйте import директиву и укажите пространство имен библиотеки. Например, чтобы использовать функцию Message из Microsoft.Quantum.Intrinsic пространства имен в стандартной квантовой библиотеке, выполните следующие действия:

// imports all functions and operations from Microsoft.Quantum.Intrinsic 
import Microsoft.Quantum.Intrinsic.*;
    Message("Hello quantum world!");


// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
    Message("Hello quantum world!");

Пространства имен в стандартной библиотеке можно импортировать вместо Std Microsoft.Quantum. Например:

// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
    Message("Hello quantum world!");

Выделение кубитов

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

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

use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

Измерение кубитов

В Q# Measure операция выполняет совместное измерение одного или нескольких кубитов в указанных базах Паули, которые могут быть PauliX, PauliYили PauliZ. Операция Measure возвращает тип, который является либо One Zero.Result

Для реализации измерения в вычислительной базе $\lbrace\ket,\ket{0}{1}\rbrace$ можно также использовать M операцию, которая выполняет измерение на основе Паули Z. Таким образом, M операция эквивалентна применению Measure([PauliZ], [qubit]).

Сброс кубитов

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

    // Reset the qubit so it can be safely released.
    Reset(qubit);