- •Уважаемый читатель!
- •1. Мотивация
- •2. Практические языки программирования
- •2.1. Язык qcl (Омер)
- •2.2. Язык q (Беттелли, Каларко, Серафини)
- •3. Формальные языки программирования
- •3.1. Императивные и функциональные языки
- •3.2. Языки для параллельных процессов
- •3.3. Физическая модель
- •3.4. Расширение классических языков
- •3.5. Полезные особенности и вызовы
- •3.6. Предлагаемые языки
- •4. Заключение
- •Список источников
3.5. Полезные особенности и вызовы
В этом разделе мы представим несколько возможных особенностей квантовых языков программирования. Некоторые из них уже могут быть найдены в определённых языках, описанных в литературе (см. раздел 3.6), в то время как иные всё ещё остаются вызовами.
Квантовое ветвление. Под квантовым ветвлением понимается то, что значение заданного кубита обуславливает выполнение некоторого куска кода. Если кубит находится в состоянии суперпозиции, то выполнение или невыполнение зависящего от него куска кода также находится в суперпозиции. В этом отношении квантовое ветвление отличается от классического, поскольку во время классического происходит измерение условия, из-за чего разрушается суперпозиция. Самым простым примером квантового ветвления является гейт CNOT, которые обращает один кубит, если другой находится в состоянии 1.
Две программы, которые отличаются только глобальной фазой, имеют одинаковое наблюдаемое поведение. Однако, если говорить об условном исполнении, такие две программы могут внезапно начать вести себя по-разному (например, если представить себе условное изменение фазы, которое не является тождественным). Далее, измерения и удаления вряд ли имеют естественное значение при рассмотрении квантовых условий. Эти два пункта делают более сложным проектирование семантики программы, которая одновременно использует необратимые операции (измерения, удаления) и квантовое ветвление.
Язык программирования QCL [Ome03b] (см. также раздел 2.1) реализует механизм квантового ветвления. В особенных случаях в этом языке даже есть возможность использования присваивания классическим переменным и выполнения измерения внутри условного кода. Более того, поддерживаются квантовые циклы, если есть классически известная верхняя граница количества выполнений.
Непрерывный классический вывод. Большинство алгоритмов получают на вход данные, производят вычисления и возвращают выходное значение. Однако в некоторых случаях программы непрерывно возвращают классическую информацию, например. информацию о своём продвижении в вычислениях. Эта выходная информация может быть изучена до прекращения программы, и более того, даже программа, которая не останавливается, может иметь такой выход. Дальнейшее развитие непрерывного вывода может привести к появлению наблюдаемого извне поведения процесса (то есть, его следов), например, в криптографическом обмене информацией требуемые свойства безопасности могут быть сформулированы в терминах наблюдаемого извне поведения процесса (например, в квантовой модели безопасности [Unr04c] этот подход выбран вслед за классической моделью [BPW04]).
При следовании гибридному подходу, описанному в разделе 3.4, достаточно лишь добавить в используемый классический язык программирования возможность вывода. В соответствии с имеющейся последней информацией это ещё формально нигде не сделано. В случае использования подхода, основанного на операторах плотности, проблема изучена в [Unr04a].
Параллельные процессы. Для криптографических задач очень важно иметь возможность описывать семантику взаимодействия параллельных процессов. Пока ещё сложно специфицировать поведение шагов планирования, см. раздел 3.2. Примерами языков программирования с параллельными процессами являются QPAlg [LJ04] и CQP [GN04] (см. раздел 3.2). Насколько известно автору, задача недетерминированной приоретизации, обозначенная в разделе 3.2, всё ещё остаётся нерешённой.
Бесконечные типы данные. Большинство квантовых языков программирования, которые разработаны к настоящему времени, оперируют конечномерными гильбертовыми пространствами. Многие крайне простые типы данных, такие как целые числа или строки, не могут быть представлены в рамках этой модели (конечно, в реальных (классических) компьютерах целые числа также представлены конечным типом данных; однако при разработке алгоритма может потребоваться использование неограниченных целых чисел с последующим органичением их во время исполнения). Однако, поскольку математика на счётных размерностях гильбертового пространства очень похожа на математику на конечномерных гильбертовых пространствах, в большинстве случаев языки программирования с конечными квантовыми типами данных могут быть легко адаптированы для работы со случаем счётных размерностей. Только случай несчётных размерностей (например, действительные числа) представляет собой определённый вызов.
Насколько известно автору, в литературе до сих пор не описаны примеры реализации бесконечных квантовых типов данных.
Типы данных высших порядков. В то время как сегодня квантовые алгоритмы и протоколы могут быть объяснены в терминах кубитов в качестве типов данных, использование более сложных типов данных может ещё сильнее облегчить представление. Например, высокоуровневое представление алгоритма Шора для задачи поиска дискретного логарифма в произвольных группах [Sho94] оперирует элементами группы, и только когда время доходит до актуальной реализации алгоритма, осуществляется конкретное преобразование элементов группы в последовательности кубитов. Дальнейшее развитие квантовых алгоритмов может потребовать квантовые типы данных со всё возрастающей сложностью, например, кортежи, списки, записи и т. д. Попытки реализовать такие типы данных приводят к определённым вызовам: предположим, что программа содержит список a в одном квантовом регистре и индекс i в другом квантовом регистре. Теперь программа желает получить элемент списка по индексу. Поскольку суперпозиция не должна разрушаться (до тех пор пока не осуществляется явное измерение), нет возможности проверить, есть ли в списке a элемент на позиции i, что приводит к ошибке. Поэтому семантика, работающая с такими высокоуровневыми типами данных, должна определять поведение в случае возникновения подобных ошибок суперпозиции.
Насколько известно автору, только в языке программирования QPL (см. раздел 3.6) определена семантика для работы с высокоуровневыми типами данных [Sel04]. Однако эти типы данных не являются квантовыми, поскольку представляют собой классические кортежи и списки, в которых содержатся кубиты, то есть в случае списка его длина является классически наблюдаемым свойством. Из-за такого ограничения ранее упомянутая ошибка не возникает.
Можные рассуждения о программах. Недостаточно просто иметь математическое определение семантики языка программирования. Для доказательства свойств алгоритма (вручную или автоматически) язык должен иметь набор правил. Они должны быть достаточно мощными, чтобы не надо было погружаться в специфические для языка детали, но можно было бы сконцентрироваться на главной идее алгоритма. Вероятно, что будущий опыт работы с квантовыми языками программирования покажет, какие подходя к этой проблеме являются наиболее плодотворными.
