Типы данных, относящиеся к квантовым вычислениям

В этом разделе описывается тип Qubit, а также два других типа, которые могут использоваться в квантовых вычислениях: Pauli и Result.

Кубит

Q# обрабатывает кубиты как непрозрачные элементы, которые можно передать в функции и операции, но с которыми можно взаимодействовать, только передав их в нативные для целевого квантового процессора инструкции. Такие инструкции всегда определяются в виде операций, так как их намерение фактически заключается в изменении квантового состояния. Функции не могут изменять квантовое состояние, хотя кубиты можно передавать в качестве входных аргументов. Такое ограничение реализуется в том, что функции могут вызывать только другие функции и не могут вызывать операции.

Библиотеки Q# компилируются по стандартному набору внутренних операций (то есть операций без определения реализации в пределах языка). При определении целевой платформы реализации, которые выражают их в виде нативных инструкций для целевого объекта выполнения, связываются компилятором. Следовательно, программа Q# объединяет эти операции в соответствии с особенностями целевого компьютера для создания новых операций более высокого уровня для выражения квантовых вычислений. Таким образом, Q# значительно упрощает выражение логики базового и гибридного квантового вычисления — классических алгоритмов, — одновременно являясь очень универсальным средством для структуры целевого компьютера и его реализации квантового состояния.

Что касается собственно Q#, в Q# нет типа или конструкции, представляющей квантовое состояние. Кубит представляет наименьшую физическую единицу, к которой можно обратиться, на квантовом компьютере. Кубит как таковой — элемент с длительным временем существования, поэтому для Q# не требуются линейные типы. Поэтому не нужно явно ссылаться на состояние в Q#. Вместо этого следует описать способ преобразования состояния программой, например путем применения таких операций, как X и H. Аналогично тому, как программа графического шейдера накапливает описание преобразований каждой вершины, квантовая программа в Q# накапливает преобразования квантовых состояний, представленных в виде полностью непрозрачных ссылок на внутреннюю структуру целевого компьютера.

Программа Q# не может выполнять интроспективный анализ кубита, поэтому она полностью независима от квантового состояния и способа его реализации. Вместо этого программа может вызывать такие операции, как Measure, чтобы получить сведения о квантовом состоянии вычисления.

Значения Паули

Значения типа Pauli указывают оператор Паули с одним кубитом. Возможные варианты: PauliI, PauliX, PauliY и PauliZ. Значения Pauli используются в основном для указания базиса для квантового измерения.

Результат

Тип Result задает результат квантового измерения. Q# отражает большую часть квантового оборудования, предоставляя измерения в виде операторов Паули с одним кубитом. ResultZero указывает, что измерено собственное значение +1, а ResultOne указывает, что измерено собственное значение -1. Это означает, что Q# представляет собственные значения по степени, в которую возводится значение-1. Это соглашение является наиболее распространенным в сообществе квантовых алгоритмов, так как оно более приближено к классическим битам.