Квантове програмування

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Квантове програмування є набором комп'ютерних мов програмування, які дозволяють запис квантового алгоритму[en] з використанням конструкцій високого рівня[1]. Завдання квантових мов не полягає у тому, щоб надати інструмент для програмістів, а в тому, щоб надати інструменти для дослідників, щоб зрозуміти краще, як працюють квантові обчислення і як формально доводити коректність квантових алгоритмів.

Можна виділити дві основні групи квантових мов програмування: імперативні квантові мови програмування і функціональні квантові мови програмування. Найбільш відомими представниками першої групи є QCL[2] і LanQ.[3] Ведеться робота з розробки функціональних мов програмування для квантових обчислень. Приклади включають QPL Селінджера,[4] і Haskell-подібну мову QML, розроблену Алтенкірчом і Ґретажем.[5][6] Квантові мови програмування високого рівня, засновані на лямбда-численні, були запропоновані ван Тондером,[7] Селінджером і Валіроном[8] Аріґі і Довеком[9].

Оглядова стаття Саймона Ґея[10] надає інформацію про стан досліджень і всеосяжну бібліографію ресурсів про квантове програмування станом на 2007 рік.

Імперативні квантові мови програмування[ред.ред. код]

Квантовий псевдокод[ред.ред. код]

Квантовий псевдокод, запропонований Е. Кнілом, є першою формалізованою мовою для опису квантових алгоритмів[en]. Він був введений, і, крім того, був тісно пов'язаний з моделлю квантової машини під назвою квантова машина з довільним доступом. Квантова машина з довільним доступом є віртуальною моделлю апаратних засобів для обчислень, і може виявитися корисною для інтерпретації квантових мов програмування. Моделі таких машин дозволяють вільно чергувати унітарне перетворення і вимірювання за допомогою квантового пристрою під керуванням класичного комп'ютера. Квантовий пристрій міститиме велике, але скінченне число індивідуально адресованих квантових бітів, так само, як класичний чип пам'яті RAM містить велику кількість бітів. Обчисленнями управлятиме класичний комп'ютер посилаючи послідовність команд, що мають форму "застосувати" унітарне перетворення U до кубітів I і J або "виміряти" кубіт I. Квантовий пристрій виконує ці інструкції і надає доступ до результатів вимірювань.

Квантова мова обчислень[ред.ред. код]

Квантова мова обчислень (англ. Quantum Computation Language) — одна з перших реалізованих квантових мов програмування.[11] Її синтаксис нагадує синтаксис мови програмуваня C, а її класичні типи даних схожі на примітивні типи даних в C. Можна поєднувати класичний код і квантовий код в тій же програмі.

Базовим вбудованим квантовим типом даних в QCL є квантовий регістр куреґ (англ. qureg). Його можна інтерпретувати як масив кубітів (квантових бітів).

   qureg x1[2]; // 2-кубітний квантовий регістр x1
   qureg x2[2]; // 2-кубітний квантовий регістр x2
   H(x1); // Операція Адамара на x1
   H(x2[1]); // HОперація Адамара на першому кубіті регістру x2

Оскільки інтерпретатор QCL використовує бібліотеку qlib для моделювання, за внутрішнім станом квантової машини під час виконання квантової програми можна спостерігати.

   qcl> dump
   : STATE: 4 / 32 кубіт зайнято, 28 / 32 qubits вільно
   0.35355 |0> + 0.35355 |1> + 0.35355 |2> + 0.35355 |3>
   + 0.35355 |8> + 0.35355 |9> + 0.35355 |10> + 0.35355 |11>

Операція дампу відрізняється від вимірювання, оскільки вона не впливає на стан квантової машини і може бути реалізована тільки за допомогою імітатора.

Стандартна бібліотека QCL надає стандартні квантові оператори, які використовуються в квантових алгоритмах, такі як:

  • Контрольоване "ні" з великою кількістю цільових кубітів,
  • Операція Адамара на багатьох кубітах,
  • Синтаксичний аналіз і контрольована фаза.

Найважливішою особливістю QCL є підтримка визначених користувачем операторів і функцій. Як і в сучасних мовах програмування, можна визначити нові операції, які можуть бути використані для маніпулювання квантовими даними. Наприклад:

   operator diffuse (qureg q) {
     H(q);                 // перетворення Адамара
     Not(q);               // інвертувати q
     CPhase(pi, q);        // Обертати якщо q=1111..
     !Not(q);              // скасувати інверсію
     !H(q);                // скасувати перетворення Адамара
   }

визначає оператор інверсії щодо середнього значення, що використовується в алгоритмі Гровера. Це дозволяє визначати алгоритми на вищому рівні абстракції і розширити бібліотеку функцій, доступних для програмістів.

Синтаксис[ред.ред. код]

  • Типи даних
    • Квантові - qureg, quvoid, Const, quscratch, qucond
    • Класичні - int (цілий), real (дійсний), complex (комплексний), boolean (логічний), string (рядковий), vector (масив-вектор), matrix (матриця), tensor (тензор)
  • Типи функцій
    • Куфункти - псевдо-класичні оператори. Можна тільки змінити перестановку базисних станів.
    • Оператори - загальні унітарні оператори. Можна змінити амплітуду.
    • Процедури - всередині цієї функції можна викликати вимірювання, вивід інформації та дамп (скидання). Процедури не є зворотними.
  • Вбудовані функції
    • Квантові
      • Куфункти - Fanout, Swap, Perm2, Perm4, Perm8, Not, CNot
      • Оператори - матриця 2х2, матриця 4x4, матриця 8x8, Rot, Mix, H, CPhase, SqrtNot, X, Y, Z, S, T
      • Процедури - вимірювання, дамп, скидання стану
    • Класичні
      • Арифметика - sin (синус), cos (косинус), tan (тангенс), log (логарифм), sqrt (корінь квадратний), ...
      • Комплексні - Re (взяття дійсної частини), Im (взяття уявної частини), conj (операція спряження).

Мова Q[ред.ред. код]

Мова Q [12] — це друга реалізована імперативна квантова мова програмування.

Мова Q була реалізована як розширення мови програмування C++. Вона надає класи для основних квантових операцій, таких як QHadamard, QFourier, QNot і QSwap, які є похідними від базового класу QOP. Нові оператори можуть бути визначені за допомогою класового механізму C++.

Квантова пам'ять представлена класом Qreg.

   Qreg x1; // однокубітний квантовий регістр з початковим значенням 0
   Qreg x2(2,0); // двокубітний квантовий регістр з початковим значенням 0

Процес обчислення виконується за допомогою вбудованого імітатора. Дисперсне середовище може бути змодельоване з використанням параметрів імітатора.

Квантова Мова Обачних Команд[ред.ред. код]

Квантова Мова Обачних Команд (qGCL, англ. Quantum Guarded Command Language) була означена П. Зуліані в його кандидатській дисертації. Вона базується на мові обачних команд[en], створеній Едсґером Дейкстрою.

Її можна охарактеризувати як "мову опису квантових програм".

Функціональні квантові мови програмування[ред.ред. код]

За останні кілька років було запропоновані багато квантових мов програмування на основі парадигми функціонального програмування. Функціональні мови програмування добре підходять для доведення коректності програм.

QFC і QPL[ред.ред. код]

QFC і QPL — дві тісно пов'язані квантові мови програмування означені Пітером Селінджером. Вони відрізняються лише в їхньому синтаксисі: QFC використовує синтаксис блок-схем, в той час як QPL використовує текстовий синтаксис. Ці мови мають класичну систему керування, але можуть працювати на квантових або класичних даних. Селінджер дає денотаційну семантику для цих мов у категорії супероператорів[en].

QML[ред.ред. код]

QML[13] — це Haskell-подібна квантова мова програмування, створена Алтенкірчом і Ґретажом.[5] На відміну від мови Селінджера QPL ця мова виконує дублювання, а не викидання, квантової інформації як примітивну операцію. Під дублюванням у даному контексті розуміється операція, яка перетворює у , і її не слід плутати з неможливою операцією клонування[en]; автори стверджують, що це схоже на те, як спільне використання моделюється в класичних мовах. QML також вводить як класичні, так і квантові оператори керування, тоді як більшість інших мов покладаються на класичне керування.

Операційна семантика для QML дається в термінах квантових кіл[en], тоді як денотаційна семантика представлена ​​в термінах супероператорів[en]. Доведено, що вони узгоджуються. Обидві операційні і денотаційні семантики були реалізовані (класично) на мові Haskell[14].

Квантові лямбда-числення[ред.ред. код]

Квантові лямбда-числення є доповненням до класичного лямбда-числення, введеним Алонзо Черчом і Кліні в 1930-х роках. Мета квантових лямбда-числень — розширення квантових мов програмування теорією функцій вищого порядку.

Перша спроба визначити квантове лямбда-числення була зроблена Філіпом Мейміном у 1996 році[15] Його лямбда-q-числення досить потужне, щоб виразити будь-які квантові обчислення. Проте, ця мова може ефективно розв'язувати NP-повні задачі, і, тому виглядає суворо строгішою, ніж стандартні квантові обчислювальні моделі (наприклад, квантова машина Тюрінґа або модель квантових кіл[en]). Тому лямбда-q-числення Мейміна, швидше за все, неможливо буде реалізувати на фізичному пристрої.

У 2003 році Андре ван Тондер означив розширення лямбда-числення, що підходить для доведення коректності квантових програм. Він також надав реалізацію на мові програмування Scheme.[16]


У 2004 році Селінджер і Валірон означили строго типізоване лямбда-числення для квантових обчислень із системою типів, заснованою на лінійній логіці[en].

Quipper[ред.ред. код]

Мова Quipper[17] була опублікована в 2013 році.[18] Її реалізовано у вигляді вбудованої мови, використовуючи Haskell як мову-господаря.[19] З цієї причини квантові програми, написані на Quipper, записуються в Haskell, використовуючи надані бібліотеки. Наприклад, наступний код реалізує підготовку суперпозиції

   import Quipper
   
   spos :: Bool -> Circ Qubit
   spos b = do
       q <- qinit b
       r <- hadamard q
       return r

Примітки[ред.ред. код]

  1. Jarosław Adam Miszczak. High-level Structures in Quantum Computing. Процитовано 12 December 2015. 
  2. Bernhard Omer. Мова програмування QCL. 
  3. Hynek Mlnařík. LanQ – квантова імперативна мова програмування. 
  4. Пітер Селінджер, "На шляху до квантової мови програмування", Mathematical Structures in Computer Science(Математичні структури в інформатиці) 14(4):527-586, 2004.
  5. а б Джонатан Ґретаж Дослідження QBL
  6. T. Altenkirch, V. Belavkin, J. Grattage, A. Green, A. Sabry, J. K. Vizzotto, QML: Функціональна мова програмування Quantum
  7. Андре ван Тондер, "Лямбда-числення для квантових обчислень", SIAM J. Comput., 33(5), 1109–1135. (27 стор.), 2004. Також доступна за посиланням arXiv:quant-ph/0307150
  8. Peter Selinger and Benoît Valiron, "A lambda calculus for quantum computation with classical control", Mathematical Structures in Computer Science 16(3):527-552, 2006.
  9. Pablo Arrighi, Gilles Dowek, "Лінійно-алгебраїчне лямбда-числення. високий порядок, кодування і збіжність", 2006
  10. Огляд квантових мов програмування
  11. QCL
  12. Мова Q
  13. QML
  14. Джонатан Ґретаж (англ. Jonathan Grattage), QML: Компілятор функціональної квантової мови програмування — англ. A Functional Quantum Programming Language (compiler), 2005–2008
  15. Філіп Меймін (англ. Philip Maymin), Розширення лямбда-числення для вираження рандомізованих і квантомізованих алгоритмів (англ. "Extending the Lambda Calculus to Express Randomized and Quantumized Algorithms"), 1996
  16. André van Tonder. A lambda calculus for quantum computation (website). 
  17. Quipper
  18. Alexander S. Green, Peter LeFanu Lumsdaine, Neil J. Ross, Peter Selinger, Benoît Valiron. The Quipper Language (website). 
  19. Alexander S. Green, Peter LeFanu Lumsdaine, Neil J. Ross, Peter Selinger, Benoît Valiron (2013). An Introduction to Quantum Programming in Quipper. 

Посилання[ред.ред. код]


Інформаційні технології Це незавершена стаття про інформаційні технології.
Ви можете допомогти проекту, виправивши або дописавши її.