Типы данных, относящиеся к квантовым вычислениям
В этом разделе описывается тип Qubit
, а также два других типа, которые могут использоваться в квантовых вычислениях: Pauli
и Result
.
Кубит
Q# обрабатывает кубиты как непрозрачные элементы, которые можно передать в функции и операции, но с которыми можно взаимодействовать, только передав их в нативные для целевого квантового процессора инструкции. Такие инструкции всегда определяются в виде операций, так как их намерение фактически заключается в изменении квантового состояния. Функции не могут изменять квантовое состояние, хотя кубиты можно передавать в качестве входных аргументов. Такое ограничение реализуется в том, что функции могут вызывать только другие функции и не могут вызывать операции.
Библиотеки Q# компилируются по стандартному набору внутренних операций (то есть операций без определения реализации в пределах языка). При определении целевой платформы реализации, которые выражают их в виде нативных инструкций для целевого объекта выполнения, связываются компилятором. Следовательно, программа Q# объединяет эти операции в соответствии с особенностями целевого компьютера для создания новых операций более высокого уровня для выражения квантовых вычислений. Таким образом, Q# значительно упрощает выражение логики базового и гибридного квантового вычисления — классических алгоритмов, — одновременно являясь очень универсальным средством для структуры целевого компьютера и его реализации квантового состояния.
Что касается собственно Q#, в Q# нет типа или конструкции, представляющей квантовое состояние.
Кубит представляет наименьшую физическую единицу, к которой можно обратиться, на квантовом компьютере.
Кубит как таковой — элемент с длительным временем существования, поэтому для Q# не требуются линейные типы.
Поэтому не нужно явно ссылаться на состояние в Q#. Вместо этого следует описать способ преобразования состояния программой, например путем применения таких операций, как X
и H
.
Аналогично тому, как программа графического шейдера накапливает описание преобразований каждой вершины, квантовая программа в Q# накапливает преобразования квантовых состояний, представленных в виде полностью непрозрачных ссылок на внутреннюю структуру целевого компьютера.
Программа Q# не может выполнять интроспективный анализ кубита, поэтому она полностью независима от квантового состояния и способа его реализации.
Вместо этого программа может вызывать такие операции, как Measure
, чтобы получить сведения о квантовом состоянии вычисления.
Значения Паули
Значения типа Pauli
указывают оператор Паули с одним кубитом. Возможные варианты: PauliI
, PauliX
, PauliY
и PauliZ
. Значения Pauli
используются в основном для указания базиса для квантового измерения.
Результат
Тип Result
задает результат квантового измерения.
Q# отражает большую часть квантового оборудования, предоставляя измерения в виде операторов Паули с одним кубитом. Result
Zero
указывает, что измерено собственное значение +1, а Result
One
указывает, что измерено собственное значение -1. Это означает, что Q# представляет собственные значения по степени, в которую возводится значение-1.
Это соглашение является наиболее распространенным в сообществе квантовых алгоритмов, так как оно более приближено к классическим битам.