Кубиты на языке квантового программирования Q#

любителям языков програмирования - немножко гуглтранса для ясности :)
http://www.quicklydone.com/2018/12/qubits-in-q.html

...




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

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

Квантовые состояния как линейные типы

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

Кубиты как непрозрачные ссылки

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

Квантовые вычисления по побочному эффекту

Представление, используемое в Q #, имеет интересную импликацию, что все фактические квантовые вычисления выполняются побочным эффектом. Невозможно напрямую взаимодействовать с квантовым состоянием компьютера; он вообще не имеет программного обеспечения. ... Фактически, квантовое состояние компьютера представляет собой непрозрачную глобальную переменную, которая недоступна, за исключением небольшого набора примитивов доступа (измерений) - и даже эти аксессоры имеют побочные эффекты в квантовом состоянии и, следовательно, действительно являются «мутаторами с результатами» чем истинные аксессоры.

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