Каковы основные компоненты программы 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
, Double
Bool
и 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);