量子コンピュヌタヌのプログラミング蚀語



むオン量子コンピュヌタヌのコアのプロトタむプ。 サセックス倧孊むオン量子技術グルヌプ







時々量子コンピュヌタヌがメディアに入りたす。 ほずんどの堎合、量子コンピュヌティングの開発は奇劙で神秘的な芞術のたたですが、人がどのように䞀歩䞀歩創造に近づいおいるのかを聞きたす。







幞いなこずに、この問題を解決するために、幅広い芖聎者の泚目を集める優れたプロゞェクトが登堎したす。 たずえば、数幎前、IBMは誰でも5量子ビットコンピュヌタヌに接続できるようにしたした。 プロゞェクトは70,000人を登録しおいたす。







ただし、量子コンピュヌティング業界はただ初期段階にありたす。 倚くのプロトタむプがすでに䜜成されおいたすが、通垞のラップトップでは凊理できないこずはできたせん。 必芁なハヌドりェアはただ存圚しおいたせんが、孊ぶべきものがもう1぀ありたす。量子プログラミング蚀語です。







量子コンピュヌティングの䞖界ぞの旅は誰​​もがアクセスでき、通垞のプログラミングにおける通垞の蚀語の研究に䌌おいたす。







量子コンピュヌティング









量子コンピュヌティングの䞖界に没頭するために、量子コンピュヌタヌを家に眮いおおく必芁はありたせん。 実際の量子デバむスぞのアクセスを提䟛するプロゞェクトがありたすが、単玔な量子プログラムは通垞のラップトップで簡単にモデル化できたす。







プログラムを取り䞊げる前に、量子コンピュヌティングに関する基本的なこずを思い出したしょう。 そしお、ここで、Brian Hayesによる蚘事「 Programming Your Quantum Computer 」が圹立ちたす。







兞型的なコンピュヌタヌはビットに基づいおいたす。2぀の可胜な倀しか持たない倉数に぀いお話しおいたす。 ブヌル代数のコンテキストでは「True」および「False」ず呌ぶこずができたすが、倚くの堎合、それらを0および1ず呌びたす。







NOT、AND、ORなどのビットを䜿甚しお、単玔なブヌル挔算を実行できたす。 ビットよりも耇雑な倉数たずえば、intたたはfloatは、単に倚くのビットのコレクションです。







量子コンピュヌタヌは、量子ビットたたは量子ビットに基づいおいたす。 たた、2぀の可胜な意味があり、0および1ず呌ぶこずができたす。しかし、量子力孊の法則では、重ね合わせ状態ず呌ばれる他の意味も可胜です。







ある意味では、重ね合わせ状態は極倀0ず1の間に存圚する倀です。キュヌビットは、0ず1が反察の極にある球䜓ず考えるこずができたす。 重ね合わせ状態は、サヌフェス䞊の他のすべおの可胜な点です。







キュヌビットは、0.63などの䞭間倀を持぀こずができるわけではありたせん。 キュヌビットの状態が枬定されるず、結果は垞に0たたは1になりたす。ただし、蚈算䞭、キュヌビットは状態の混合であるかのように動䜜できたす。たずえば、63れロず37ナニットです。







量子ビットの振る舞いのもう1぀の重芁な偎面は、波物理孊でよく知られおいる珟象である干枉です。 2぀の波が重なり合うずき、それらは互いに増幅するこずができたすピヌクず波のような枛衰が䞀臎する堎合、たたはそれらは互いに氎平にするこずができたす波が䜍盞に察応しない堎合。 数孊的には、任意のポむントでの結合波の匷床は、個々の波の振幅の合蚈の2乗によっお決たりたす。 2぀の振幅の笊号が同じ堎合、干枉は建蚭的です。 䞀方の振幅が正で、もう䞀方の振幅が負の堎合、結果ずしお生じる砎壊的な干枉は、1぀の波の匷床よりも小さい匷床を䞎えたす。







波のように、キュヌビットの状態0および1には、正たたは負の振幅がありたす。 振幅の笊号に応じお、量子干枉は、キュヌビットの状態を枬定するずきに特定の状態が芳枬される確率を増加たたは枛少させる可胜性がありたす。







干枉は、量子コンピュヌタヌのすべおの興味深いアルゎリズム、぀たり、そのようなマシンが叀兞的なコンピュヌタヌを超えるこずを可胜にするアルゎリズムで圹割を果たしたす。 量子システムの進化を敎理する䞀般的な考え方は、誀った答えは砎壊的な干枉によっお抑制され、正しい答えは建蚭的な干枉によっお増幅されるずいうものです。 したがっお、アルゎリズムは、量子システムに固有の圢匏の䞊列凊理を䜿甚したす。







量子の奇劙さの最新の偎面の1぀は、゚ンタングルメントです。 クォンタムレゞスタ内の1぀のキュヌビットを倉曎しお、残りを倉曎するこずはできたせん。 たず、量子システムで蚈算される各関数は完党に可逆的でなければなりたせん。 マシンが入力Aを受け取っお結果Bを出力する堎合、BがあればAを埩元できるはずです。







各関数には、同じ数の入力ず出力が必芁です。 䞀気に、このルヌルはほずんどの算術挔算を犁止したす。 たずえば、通垞の加算アルゎリズムは元に戻せたせん。 3ず4を远加しお7を取埗できたすが、7を「切断」しお元の3ず4を埩元するこずはできたせん。







量子コンピュヌティングのもう1぀の犁止事項は、キュヌビットのコピヌですこの原則は、クロヌン犁止定理ず呌ばれたす。 たた、蚈算の途䞭で任意にキュヌビットをむンストヌルたたは再ロヌドするこずはできたせん。 これを詊みるず、量子の重ね合わせが砎壊されたす。







党䜓ずしお、量子ビット操䜜の制限は、すべおの量子プログラムが煙突アヌキテクチャを持たなければならないこずを意味したす。぀たり、情報は䞀端から他端ぞ盎接流れたす。 特に重芁なのは、プログラム構造内に、制埡が以前のポむントに戻されるサむクルがないこずです。







これらの困難に察する答えは、量子プログラミング蚀語にありたす。 実際、量子コンピュヌタヌはハむブリッドデバむスです。郚分的に量子コンピュヌタヌず郚分的に叀兞的なコンピュヌタヌです。 倖郚アプリケヌションず察話するために、入力および出力を凊理するには、埓来のコンピュヌタヌの芁玠を䜿甚する必芁がありたす。 したがっお、1぀のプログラムで、叀兞的なコヌドず量子コヌドを組み合わせるこずができたす。







オヌプン量子アセンブリ蚀語OpenQASM



OpenQASM゜ヌスコヌドは、 Quantum Experience量子コンピュヌティングプラットフォヌムで䜿甚するためのIBM Quantum Information Software Kit QISKitの䞀郚ずしおリリヌスされたした。 OpenQASMは、電子回路の構造ず動䜜を蚘述するために䜿甚される特殊なプログラミング蚀語Verilogなどずの類䌌点を共有しおいたす。







QASMプログラムは、実際には垞に同じ方法で開始したす。必芁なすべおのビットクォンタムずノヌマルの䞡方を定矩したす。 以䞋はOpenQASM゜ヌスコヌドの䟋です。 プログラムは2぀の4ビット数を远加したす。







OPENQASM 2.0; include "qelib1.inc"; gate majority a,b,c { cx c,b; cx c,a; ccx a,b,c; } gate unmaj a,b,c { ccx a,b,c; cx c,a; cx a,b; } qreg cin[1]; qreg a[4]; qreg b[4]; qreg cout[1]; creg ans[5]; //    xa[0]; // a = 0001 xb; // b = 1111 //  a  b,    b majority cin[0],b[0],a[0]; majority a[0],b[1],a[1]; majority a[1],b[2],a[2]; majority a[2],b[3],a[3]; cx a[3],cout[0]; unmaj a[2],b[3],a[3]; unmaj a[1],b[2],a[2]; unmaj a[0],b[1],a[1]; unmaj cin[0],b[0],a[0]; measure b[0] -> ans[0]; measure b[1] -> ans[1]; measure b[2] -> ans[2]; measure b[3] -> ans[3]; measure cout[0] -> ans[4];
      
      





Q #





高床なプログラミング蚀語Qにより、量子物理孊に関する深い知識が䞍芁になりたす。 蚀語の教科曞に興味がある人のために、ベクトルおよび行列数孊、キュヌビット、 ディラック蚘法 、 パりリの原理、および量子スキヌムをカバヌする、量子コンピュヌティングの基本抂念に関する情報を提䟛したす。







 operation Teleport(msg : Qubit, there : Qubit) : () { body { using (register = Qubit[1]) { let here = register[0]; H(here); CNOT(here, there); CNOT(msg, here); H(msg); if (M(msg) == One) { Z(there); } if (M(here) == One) { X(there); } } } }
      
      





QチュヌトリアルのTeleportation.qsスクリプト。 チュヌトリアルはこちらから入手できたす。







Qは他のほずんどのプログラミング蚀語のようには芋えず、Cずやや䌌おいたす。







Quantum Development Kitは、詳现なむンストヌル手順ず入門トレヌニングプログラムずずもに無料で提䟛されたす。 QVisual Studio量子シミュレヌタヌでコンパむルし、32量子ビット量子プロセッサヌをシミュレヌトしたす。 シミュレヌタヌは、最倧40キュビットをシミュレヌトできたす。







Microsoftのチュヌトリアルに埓うず、孊習プロセスは2぀のキュヌビットからのも぀れ状態の芳察から、量子テレポヌテヌションのモデリングに進みたす。







LIQUi蚀語統合量子操䜜



Microsoft ResearchのQuantum Architectures and Computation Groupチヌムによっお䜜成されたLIQUiプラットフォヌムには、プログラミング蚀語、最適化および蚈画アルゎリズム、およびいく぀かの量子シミュレヌタヌが含たれおいたす。 LIQUiを䜿甚しお、.NET FrameworkファミリのFで高レベルプログラムずしお蚘述された量子アルゎリズムを、量子コンピュヌタヌ甚の䜎レベルコマンドに倉換できたす。







LIQUiでは、32 GBのRAMを搭茉した1台のマシンで最倧30キュビットをシミュレヌトできたす。 このプラットフォヌムを䜿甚しお、さたざたなグラフィック圢匏で量子スキヌムを定矩、実行、衚瀺できたす。 LIQUiを䜿甚するず、単玔な量子テレポヌテヌション、ショア因子分解アルゎリズム、量子連想メモリ、および量子線圢代数をシミュレヌトできたす。







 operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { //   ,     . let msg = register[0]; let there = register[1]; //  ,    . if (message) { X(msg); } Teleport(msg, there); //  . if (M(there) == One) { set measurement = true; } ResetAll(register); } return measurement; } }
      
      





䞊蚘の䟋からわかるように、LIQUiはQず非垞によく䌌おいたす。







量子蚈算蚀語QCL



QCL、たたは量子蚈算蚀語は、1998幎にBernhard Omerによっお䜜成されたした。 蚀語の開発は珟圚も続けられおいたす。叀兞的なコンピュヌタヌで量子プログラムを実行できる゚ミュレヌタヌがありたす 。 もちろん、゚ミュレヌタヌは量子䞊列凊理の加速を提䟛できたせん。 䞀方、プログラマヌには、量子ビットの内郚状態をチェックするためのコマンド実際の量子機噚で行うのは非垞に困難ですなど、いく぀かの䟿利な機胜を提䟛したす。







QCLは、倉数の倀を蚭定およびリセットするために盎接コマンドに䟝存するため、「呜什型」蚀語ず呌ばれるこずのあるCおよびJavaの構文を借甚したす。 このようなコマンドは通垞、量子コンピュヌティングでは犁止されおいるため、QCLプログラムの䞻芁郚分は埓来の機噚でのみ機胜したす。 量子システムは、量子ビットの蚈算に適した圢匏で質問できる質問に答える「オラクル」ずしお機胜したす。 オラクルぞの各リク゚ストには、必芁なチムニヌアヌキテクチャが必芁ですが、倖郚の叀兞的なコンテキストのルヌプに埋め蟌むこずができたす。







QCL離散フヌリ゚倉換で䜜成されたコヌドの断片







 operator dft(qureg q) { const n=#q; int i; int j; for i=1 to n { for j=1 to i-1 { V(pi/2^(ij),q[ni] & q[nj]); } H(q[ni]); } flip(q); }
      
      





離散フヌリ゚倉換は、ショア分解アルゎリズムの重芁なステップです。 Shoreアルゎリズムでは、因数分解される数は、波のような呚期的な信号ず芋なされたす。 Nに係数uおよびvがある堎合、Nはvのu回の繰り返したたはuのv回の繰り返しで構成されたす。 Shoreアルゎリズムは、量子䞊列性を䜿甚しおこのような繰り返しの期間を怜玢したすが、プロセスは䞊蚘の䟋のように単玔で単玔ではありたせん。







キッパヌ



蚀語は、Peter Selingerが率いる著者チヌムによっお䜜成されたした 。 QuipperはQCLず同じプログラミングタスク甚に蚭蚈されおいたすが、構造ず倖芳が異なりたす。 この蚀語は、呜什的な衚珟ではなく機胜的な衚珟を䜿甚するHaskell拡匵ずしお実装されおいたす。







叀兞的な量子テレポヌテヌションを怜蚎しおください。 アリスずボブの2぀の偎面が含たれおいたす。 アリスの目暙は、qビットをボブにテレポヌトするこずです。 アリスずボブは、耇雑なペアa、bからのキュヌビットにアクセスする必芁がありたす。 2぀のキュヌビットqずaを導入する関数に関しお、アリスの圹割を考えるこずができたす。 関数の出力は、Aliceによっお䜜成された埓来のビットのペアになりたす。







 alice :: Qubit -> Qubit -> Circ (Bit,Bit) alice qa = do a <- qnot a 'controlled' qq <- hadamard q (x,y) <- measure (q,a) return (x,y)
      
      





詳现に぀いおは、「 Quipperでの量子プログラミングの抂芁 」 ずいうドキュメントを参照しおください。







そしお、組み蟌みの二乗手順でxを16床たで䞊げ、xずx ^ 16を掛けるこずで、17床たで䞊げる興味深い䟋がありたす。







 o4_POW17 :: QIntTF -> Circ (QIntTF,QIntTF) o4_POW17 = box "o4" $ \x -> do comment_with_label "ENTER: o4_POW17" x "x" (x, x17) <- with_computed_fun x (\x -> do (x,x2) <- square x (x2,x4) <- square x2 (x4,x8) <- square x4 (x8,x16) <- square x8 return (x,x2,x4,x8,x16)) (\(x,x2,x4,x8,x16) -> do (x,x16,x17) <- o8_MUL x x16 return ((x,x2,x4,x8,x16),x17)) comment_with_label "EXIT: o4_POW17" (x,x17) ("x","x17") return (x, x17)
      
      





Quipperシステムはコンパむラヌであり、むンタヌプリタヌではありたせん。 圌は䞀床に完党なプログラムを翻蚳し、次々ず指瀺に埓わない。 コンパむラの出力は、盞互接続された可逆論理ゲヌトのネットワヌクである量子回路で構成されおいたす。 回路は電気回路の圢をずるこずができたすが、適切な量子機噚たたはシミュレヌタを䜿甚しお実行する準備ができおいる䞀連の呜什も衚したす。







Quipperは、QCLず同様に、高レベルの゜ヌスセマンティックコンストラクトからスキヌマを自動的に生成したす。







その他のアプロヌチ





マルチカラヌの正方圢は、5぀のIBM量子ビットの凊理方法を瀺したす。 ドラッグアンドドロップするこずで、独自の量子コンピュヌティングを䜜成できたす







IBM Quantum Experienceプロゞェクトは、誰もが実際の量子コンピュヌタヌで実隓プログラムを実行する機䌚を提䟛したす。 IBMプログラミング蚀語での䜜業は、アプリケヌションを䜿甚しお音楜を曞くこずに䌌おいたす。 プログラマは、量子オブゞェクトを特定の領域にドラッグするだけでプログラムを䜜成できたす。







Quantum Computing PlaygroundはWebGL Chromeの実隓であり、ブラりザりィンドりで量子コンピュヌタヌの操䜜をシミュレヌトできたす。 デバッグおよび3D量子化芖芚化機胜を備えた独自のQscriptスクリプト蚀語がありたす。 量子コンピュヌティングプラットフォヌムは、最倧22量子ビットの量子レゞスタを効果的にシミュレヌトできたす。







Python QISKit SDKには、量子プログラミングの目暙を瀺すために IBM Q゚ンゞニアが提䟛したいく぀かのツヌルが含たれおいたす。 特に、SDKは、耇雑な実隓のためにいく぀かのタスクを完了する方法を瀺しおいたす。 名前が瀺すように、QISKitを䜿甚するず、開発者はPythonを䜿甚しお量子コンピュヌタヌを探玢できたす。







Qbsolvは、D-Wave量子プロセッサこの䌚瀟のコンピュヌタヌにのみ適しおいたすのキュヌビットを操䜜するためのオヌプン゜ヌスプロゞェクトです。







すでに数十の量子プログラミング蚀語およびシミュレヌタヌがありたすが、それらはすべお仮想マシンで動䜜したす。 おそらく、IBM Qは、実際の量子コンピュヌタヌぞのアクセスを提䟛する唯䞀のプロゞェクトです。 ただし、「量子プログラミング」に取り掛かるには、実際の高床なデバむスにアクセスする必芁はたったくありたせん。 すでに、有望な量子アルゎリズムの研究だけでなく、ゲヌムなどの実甚的なアプリケヌションを䜜成するこずもできたす。 しかし、これはたったく異なる話です。







゜ヌス







量子コンピュヌタヌの構築を支揎するこずさえできたす

Quipper量子コンピュヌタヌ向けの最初の高レベルでスケヌラブルなプログラミング蚀語

量子プログラミング蚀語

量子コンピュヌタヌのプログラミング方法

構造化量子プログラミング

QCL-量子コンピュヌタヌ甚のプログラミング蚀語








All Articles