Квантове програмування: відмінності між версіями

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Patlatus (обговорення | внесок)
Patlatus (обговорення | внесок)
Рядок 93: Рядок 93:


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


=== QML ===
=== QML ===
[http://sneezy.cs.nott.ac.uk/QML/ QML] — це [[Haskell (мова програмування)|Haskell]]-подібна квантова мова програмування створена Алтенкірчом і Ґретажем.<ref name="qml1"/> На відміну від мови Селінджера QPL, ця мову виконує дублювання, а не викидання, квантової інформації в якості примітивної операції. Під дублюванням в даному контексті розуміється операція, яка перетворює <math>|\phi\rangle</math> у <math>|\phi\rangle\otimes|\phi\rangle</math>, і її не варто плутати з неможливою операції {{нп|Теорема про заборону клонування|клонування||No-cloning theorem}}; автори стверджують, що це схоже на те, як спільне використання моделюється на класичних мовах. QML також вводить як класичні, так і квантові оператори керування, в той час як більшість інших мов покладаються на класичне керування.
[http://sneezy.cs.nott.ac.uk/QML/ QML] — це [[Haskell (мова програмування)|Haskell]]-подібна квантова мова програмування створена Алтенкірчом і Ґретажем.<ref name="qml1"/> На відміну від мови Селінджера QPL, ця мову виконує дублювання, а не викидання, квантової інформації в якості примітивної операції. Під дублюванням в даному контексті розуміється операція, яка перетворює <math>|\phi\rangle</math> у <math>|\phi\rangle\otimes|\phi\rangle</math>, і її не варто плутати з неможливою операції {{нп|Теорема про заборону клонування|клонування||No-cloning theorem}}; автори стверджують, що це схоже на те, як спільне використання моделюється на класичних мовах. QML також вводить як класичні, так і квантові оператори керування, в той час як більшість інших мов покладаються на класичне керування.


[[Операційна семантика]] для QML дається в термінах [[квантовий ланцюг|квантових ланцюгів]], в той час як [[денотаційна семантика]] представлена ​​в термінах [[супероператор]]ів, і доведено, що вони узгоджуються. Обидві операційні і денотаційні семантики були реалізовані (класично) на мові Haskell <ref>Джонатан Ґретаж ({{lang-en|Jonathan Grattage}}), [http://sneezy.cs.nott.ac.uk/qml/compiler QML: Компілятор функціональної квантової мови програмування — {{lang-en|A Functional Quantum Programming Language (compiler)}}], 2005–2008</ref>
[[Операційна семантика]] для QML дається в термінах {{нп|квантовий ланцюг|квантових ланцюгів||Quantum circuit}}, в той час як [[денотаційна семантика]] представлена ​​в термінах {{нп|супероператор|супероператорів||Superoperator}}, і доведено, що вони узгоджуються. Обидві операційні і денотаційні семантики були реалізовані (класично) на мові Haskell <ref>Джонатан Ґретаж ({{lang-en|Jonathan Grattage}}), [http://sneezy.cs.nott.ac.uk/qml/compiler QML: Компілятор функціональної квантової мови програмування — {{lang-en|A Functional Quantum Programming Language (compiler)}}], 2005–2008</ref>


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

Перша спроба визначити квантове лямбда-числення булf зробленf Філіпом Мейміном в 1996 році <ref>Філіп Меймін ({{lang-en|Philip Maymin}}), [http://arxiv.org/abs/quant-ph/9612052 Розширення лямбда-числення для вираження рандомізованих і квантомізованих алгоритмів ({{lang-en|"Extending the Lambda Calculus to Express Randomized and Quantumized Algorithms"}})], 1996</ref>
Його лямбда-q-числення досить потужне, щоб виразити будь-які квантові обчислення. Проте, ця мова може ефективно вирішити [[NP-повні]] задачі, і, тому виглядає суворо строгішою, ніж стандартні квантові обчислювальні моделі (наприклад, [[квантова машина Т’юрінґа]] або модель {{нп|квантовий ланцюг|квантових ланцюгів||Quantum circuit}}). Тому лямбда-q-числення Мейміна, швидше за все, не можливо бути реалізувати на фізичному пристрої.

У 2003 році Андре ван Тондер означив розширення [[лямбда-числення]], що підходить для доведення коректності квантових програм. Він також надав реалізацію на мові програмування [[Scheme]].<ref>{{cite web |author=André van Tonder |title=A lambda calculus for quantum computation (website) |url=http://www.het.brown.edu/people/andre/qlambda}}</ref>


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




=== Quipper ===
=== Quipper ===

[http://www.mathstat.dal.ca/~selinger/quipper/ Quipper] був опублікований в [[2013]] році.<ref>{{cite web |author=Alexander S. Green, Peter LeFanu Lumsdaine, Neil J. Ross, Peter Selinger, Benoît Valiron |title=The Quipper Language (website) |url=http://www.mathstat.dal.ca/~selinger/quipper/}}</ref> Він реалізований у вигляді вбудованої мови, використовуючи [[Haskell (мова програмування)|Haskell]] в якості мови-хазяїна.<ref>{{cite web |author=Alexander S. Green, Peter LeFanu Lumsdaine, Neil J. Ross, Peter Selinger, Benoît Valiron |title=An Introduction to Quantum Programming in Quipper |url=http://arxiv.org/abs/1304.5485 |year=2013}}</ref> З цієї причини квантові програми, написані в Quipper записуються в [[Haskell (мова програмування)|Haskell]] використовуючи надані бібліотеки. Наприклад, наступний код реалізує підготовку суперпозиції

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

== Примітки ==
== Примітки ==
<references />
<references />

Версія за 15:21, 16 квітня 2016


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

Можна виділити дві основні групи квантових мов програмування: імперативні квантові мови програмування і функціональні квантові мови програмування.

Найбільш відомими представниками першої групи є QCL[2] і LanQ.[3]

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

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

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

Квантовий псевдокод

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

Квантова мова обчислень

Квантова мова обчислень QCL (англ. Quantum Computation Language) — одна з перших реалізованих квантових мов програмування. Його синтаксис нагадує синтаксис мова програмування 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 — це друга реалізована імперативна квантова мова програмування.

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

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

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

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

Квантова Мова Обачних Команд

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

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

Функціональні квантові мови програмування

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

QFC і QPL

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

QML

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

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

Квантові лямбда-числення

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

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

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


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


Quipper

Quipper був опублікований в 2013 році.[13] Він реалізований у вигляді вбудованої мови, використовуючи Haskell в якості мови-хазяїна.[14] З цієї причини квантові програми, написані в 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. Джонатан Ґретаж (англ. Jonathan Grattage), QML: Компілятор функціональної квантової мови програмування — англ. A Functional Quantum Programming Language (compiler), 2005–2008
  11. Філіп Меймін (англ. Philip Maymin), Розширення лямбда-числення для вираження рандомізованих і квантомізованих алгоритмів (англ. "Extending the Lambda Calculus to Express Randomized and Quantumized Algorithms"), 1996
  12. André van Tonder. A lambda calculus for quantum computation (website).
  13. Alexander S. Green, Peter LeFanu Lumsdaine, Neil J. Ross, Peter Selinger, Benoît Valiron. The Quipper Language (website).
  14. Alexander S. Green, Peter LeFanu Lumsdaine, Neil J. Ross, Peter Selinger, Benoît Valiron (2013). An Introduction to Quantum Programming in Quipper.

Посилання