é«åºŠãªåã·ã¹ãã ã«ããéåããã°ã©ãã³ã°ã®æå ç«¯ãæ¢æ±ãèšèªèšèšãšåå®å šããããŸããŸãªãã©ãããã©ãŒã ãšã¢ããªã±ãŒã·ã§ã³ã§ä¿¡é Œæ§ã®é«ãéåãœãããŠã§ã¢ãæ§ç¯ããããã«ããã«éèŠããåŠã³ãŸãã
é«åºŠãªåéåããã°ã©ãã³ã°ïŒèšèªèšèšãšåå®å š
éåã³ã³ãã¥ãŒãã£ã³ã°ã¯ãå»åŠãææç§åŠã人工ç¥èœãªã©ã®åéã«é©åœãèµ·ããå¯èœæ§ãç§ããŠããŸããããããä¿¡é Œæ§ãé«ãã¹ã±ãŒã©ãã«ãªéåãœãããŠã§ã¢ã®éçºã¯ãé倧ãªèª²é¡ãæç€ºããŸããåŸæ¥ã®ããã°ã©ãã³ã°ãã©ãã€ã ã¯ãéãåããããšã³ã¿ã³ã°ã«ã¡ã³ããªã©ã®éåã·ã¹ãã ã®ç¬èªã®ç¹åŸŽã«å¯ŸåŠããã«ã¯äžååãªããšããããããŸããããã«ãããéåèšç®ã®è€éãã广çã«ç®¡çã§ããæ°ããããã°ã©ãã³ã°èšèªã𿹿³è«ã®æ¢æ±ãå¿ èŠã«ãªããŸãã
å ç¢ãªéåãœãããŠã§ã¢ãæ§ç¯ããäžã§éèŠãªåŽé¢ã®1ã€ã¯ãåå®å šã§ããåã·ã¹ãã ã¯ãå€ãåé¡ããæäœãé©åãªããŒã¿ã«é©çšãããããã«ããããã®æ£åŒãªãã¬ãŒã ã¯ãŒã¯ãæäŸããŸããéåããã°ã©ãã³ã°ã®ã³ã³ããã¹ãã§ã¯ãåã·ã¹ãã ã¯ãéåãããã®èª€çšã枬å®ã®äžæŽåãããã³ãšã³ã¿ã³ã°ã«ã¡ã³ãéåã«é¢é£ãããšã©ãŒãé²ãäžã§éèŠãªåœ¹å²ãæããããšãã§ããŸããç·åœ¢åãäŸååãªã©ã®é«åºŠãªåã·ã¹ãã ãæŽ»çšããããšã§ãéåããã°ã©ã ã«ããã«å³æ Œãªå¶çŽã課ãããã®ä¿¡é Œæ§ãåäžãããããšãã§ããŸãã
éåããã°ã©ãã³ã°ã«ãããåã·ã¹ãã ã®éèŠæ§
å€å žçãªããã°ã©ãã³ã°èšèªã¯ãããã°ã©ã ã®åäœã«é¢ããéçãªä¿èšŒãæäŸããåã·ã¹ãã ããé·ãéæ©æµãåããŠããŸãããåãã§ãã¯ã¯ãéçºãµã€ã¯ã«ã®æ©ã段éã§ãšã©ãŒãæ€åºããã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ãæžããã®ã«åœ¹ç«ã¡ãŸããéåããã°ã©ãã³ã°ã§ã¯ããªã¹ã¯ã¯ããã«é«ããªããŸããéåèšç®ã¯æ¬è³ªçã«ç¢ºççã§ããããã€ãºã«ææã§ãããšã©ãŒã¯ç°¡åã«äŒæãã誀ã£ãçµæã«ã€ãªããå¯èœæ§ããããŸãããããã£ãŠãåã·ã¹ãã ã¯ãäžè¬çãªããã°ã©ãã³ã°ãã¹ã«å¯ŸããéèŠãªä¿è·å±€ãæäŸããŸãã
éåããã°ã©ãã³ã°ã«ãããåã·ã¹ãã ã®å ·äœçãªå©ç¹ïŒ
- éåããã管çïŒã¡ã¢ãªãªãŒã¯ãäºæããªãçžäºäœçšãåé¿ããããã«ãéåããããé©åã«åæåã䜿çšãããã³è§£æŸãããããã«ããŸãã
- 枬å®ã®äžè²«æ§ïŒæž¬å®ãæå¹ãªåºåºã§å®è¡ãããçµæãæ£ããè§£éãããããšãä¿èšŒããŸãã
- ãšã³ã¿ã³ã°ã«ã¡ã³ãè¿œè·¡ïŒæå³ããªãçžé¢é¢ä¿ããã³ããŒã¬ã³ã¹ã®åœ±é¿ãé²ãããã«ãéåãããéã®ãšã³ã¿ã³ã°ã«ã¡ã³ãé¢ä¿ãç£èŠããŸãã
- No-Cloningå®çã®é©çšïŒéåååŠã®æ³åã§çŠæ¢ãããŠããéåç¶æ ã®äžæ£ãªè€è£œãé²ããŸãã
- ãŠãã¿ãªå€æã®æ€èšŒïŒéåã²ãŒããšåè·¯ãéåç¶æ ã®ãã«ã ãä¿æããããããæå¹ãªãŠãã¿ãªå€æã衚ãããšãä¿èšŒããããšã確èªããŸãã
éåãªãœãŒã¹ç®¡çã®ããã®ç·åœ¢å
ç·åœ¢åã¯ãããã°ã©ãã³ã°èšèªã§ãªãœãŒã¹ã管çããããã®åŒ·åãªããŒã«ã§ããç·åœ¢åã·ã¹ãã ã§ã¯ãåãªãœãŒã¹ïŒéåããããªã©ïŒã¯æ£ç¢ºã«1å䜿çšããå¿ èŠããããŸãããã®ããããã£ã¯ãéåããããåžå°ã§è²ŽéãªãªãœãŒã¹ã§ããéåããã°ã©ãã³ã°ã§ç¹ã«åœ¹ç«ã¡ãŸããç·åœ¢äœ¿çšã匷å¶ããããšã«ãããåã·ã¹ãã ã¯éåãããã®å¶çºçãªåå©çšãŸãã¯ç Žæ£ãé²ããèšç®å šäœã§æ£ããåŠçãããããã«ããããšãã§ããŸãã
ããšãã°ãéåããããåæåããã¢ãããŒã«ã²ãŒããé©çšããŠãããéåããããæž¬å®ããéååè·¯ãèããŠã¿ãŸããããç·åœ¢åãæã€èšèªã§ã¯ãåã·ã¹ãã ã¯åæäœãééããéã®éåãããã®æææš©ã远跡ããŸããããã°ã©ã ãæž¬å®ãããåã«éåããããåå©çšããããšãããšãåãã§ãã«ãŒã¯ãšã©ãŒãçºè¡ããŸããããã¯ãåãéåãããã2åæž¬å®ããããšãããªã©ã®äžè¬çãªééããé²ãã®ã«åœ¹ç«ã¡ã誀ã£ãçµæã«ã€ãªããå¯èœæ§ããããŸãã
äŸïŒç·åœ¢åã·ã¹ãã ã§ã®éåãããã®å²ãåœãŠãšæž¬å®
ç·åœ¢åãæã€éåããã°ã©ãã³ã°èšèªã®ç°¡ç¥åãããæ§æãæ³åããŠã¿ãŸãããã
// ç·åœ¢åQubitã§éåããããå²ãåœãŠãŸã
let q: Qubit = allocate_qubit();
// ã¢ãããŒã«ã²ãŒããéåãããã«é©çšããŸã
let q' : Qubit = hadamard(q);
// éåããããæž¬å®ããå€å
žçãªçµæïŒIntïŒãååŸããŸã
let result: Int = measure(q');
// éåããããq''ãã¯æž¬å®æäœã«ãã£ãŠæ¶è²»ãããŸãã
// ãã®æç¹ä»¥éã«ãq''ãã䜿çšããããšãããšãåãšã©ãŒãçºçããŸãã
print(result);
ãã®äŸã§ã¯ã`allocate_qubit`颿°ã¯ç·åœ¢å`Qubit`ãæã€éåããããè¿ããŸãã`hadamard`颿°ã¯ãå ¥åãšããŠ`Qubit`ãåãåããã¢ãããŒã«ã²ãŒããé©çšããåŸã§æ°ãã`Qubit`ãè¿ããŸããåæ§ã«ã`measure`颿°ã¯`Qubit`ãåãåããæž¬å®çµæã衚ãå€å žçãª`Int`ãè¿ããŸããéèŠãªç¹ã¯ãå颿°ãå ¥å`Qubit`ãæ¶è²»ããæ°ãã`Qubit`ãçæããïŒãŸãã¯`measure`ã®å Žåã®ããã«å®å šã«æ¶è²»ããïŒããšã§ããããã«ãããéåããããç·åœ¢ã«äœ¿çšãããæå³ããªãåå©çšãç Žæ£ãé²ããŸãã
éååè·¯æ€èšŒã®ããã®äŸåå
äŸååã¯ãç·åœ¢åãããããã«è¡šçŸåããããŸããåãå€ã«äŸåããããšãèš±å¯ããããŒã¿ãšèšç®ã®éã®è€éãªé¢ä¿ã®ãšã³ã³ãŒããå¯èœã«ããŸããéåããã°ã©ãã³ã°ã§ã¯ãäŸååã䜿çšããŠãéååè·¯ãšã¢ã«ãŽãªãºã ã®æ£åœæ§ãæ€èšŒã§ããŸããããšãã°ãäŸååã䜿çšããŠãéååè·¯ãç¹å®ã®ãŠãã¿ãªå€æãå®è£ ããŠããããšããŸãã¯éåã¢ã«ãŽãªãºã ãç¹å®ã®ããã©ãŒãã³ã¹ä¿èšŒãæºãããŠããããšã確èªã§ããŸãã
éåããŒãªãšå€æïŒQFTïŒãå®è£ ããéååè·¯ãèããŠã¿ãŸããããQFTã¯ãéåã³ã³ãã¥ãŒãã£ã³ã°ã«ãããåºæ¬çãªã¢ã«ãŽãªãºã ã§ããã倿°ã®ã¢ããªã±ãŒã·ã§ã³ããããŸããäŸååã䜿çšãããšãQFTåè·¯ãå®è£ ããå¿ èŠã®ããæ£ç¢ºãªãŠãã¿ãªå€æãæå®ã§ããŸããæ¬¡ã«ãåãã§ãã«ãŒã¯ãã®ä»æ§ãæºãããŠããããšã確èªã§ããããããã®æ£åœæ§ã«å¯Ÿããä¿¡é ŒåºŠãé«ããªããŸãã
äŸïŒäŸååã䜿çšããéåããŒãªãšå€æïŒQFTïŒåè·¯ã®æ€èšŒ
*n*éåãããã®QFTåè·¯ãæ£ããå®è£ ãããŠããããšã確èªãããã·ããªãªãèããŠã¿ãŸããããQFTã®æåŸ ããããŠãã¿ãªå€æããã£ããã£ããäŸååãå®çŸ©ã§ããŸãã
// néåãããã®ãŠãã¿ãªå€æã衚ãå
type UnitaryTransformation(n: Int) = Matrix[Complex, 2^n, 2^n];
// QFTãŠãã¿ãªå€æã衚ãäŸåå
type QFTUnitary(n: Int) = UnitaryTransformation(n) where UnitaryTransformation(n) == QFTMatrix(n);
// néåãããã®QFTãŠãã¿ãªè¡åãæ§ç¯ãã颿°
function QFTMatrix(n: Int): Matrix[Complex, 2^n, 2^n] {
// å®è£
ã®è©³çް...
}
// néåãããã®QFTåè·¯ãå®è£
ãã颿°
function qft_circuit(n: Int, qubits: Qubit[n]): Qubit[n] {
// åè·¯ã®å®è£
...
}
// æ€èšŒïŒåè·¯ã¯QFTãŠãã¿ãªãçæããå¿
èŠããããŸã
assert qft_circuit(n, qubits) : QFTUnitary(n);
ãã®äŸã§ã¯ã`UnitaryTransformation(n)`ã¯*n*éåãããã®ãŠãã¿ãªå€æã®åã衚ããŸãã`QFTUnitary(n)`ã¯ããŠãã¿ãªå€æã*n*éåãããã®QFTè¡åãšçãããªããã°ãªããªãããšãæå®ããäŸååã§ããããã¯ã`QFTMatrix(n)`颿°ã«ãã£ãŠèšç®ãããŸãã`qft_circuit(n, qubits)`颿°ã¯ãQFTåè·¯ãå®è£ ããŸãã`assert`ã¹ããŒãã¡ã³ãã¯ãäŸåå`QFTUnitary(n)`ã䜿çšããŠãåè·¯ãæ£ãããŠãã¿ãªå€æãçæããããšãæ€èšŒããŸããåãã§ãã«ãŒã¯ãåè·¯ããã®å¶çŽãæºãããŠããããšã蚌æããããã«ãã·ã³ããªãã¯å®è¡ãŸãã¯ãã®ä»ã®é«åºŠãªææ³ãå®è¡ããå¿ èŠããããŸãã
éåããã°ã©ãã³ã°èšèªãšåã·ã¹ãã
ããã€ãã®éåããã°ã©ãã³ã°èšèªãåºçŸããŠããããããããåã·ã¹ãã ãšèšèªèšèšã«å¯Ÿããç¬èªã®ã¢ãããŒããæã£ãŠããŸããæ³šç®ãã¹ãäŸãšããŠã¯ã次ã®ãã®ããããŸãã
- Q# (Microsoft): Q#ã¯ãQuantum Development KitïŒQDKïŒã®äžéšãšããŠMicrosoftãéçºããéåããã°ã©ãã³ã°çšã®ãã¡ã€ã³åºæèšèªã§ããäžè¬çãªããã°ã©ãã³ã°ãšã©ãŒãé²ãã®ã«åœ¹ç«ã€åŒ·åãªéçåã·ã¹ãã ãåããŠããŸããQ#ã¯ãè€éãªéåã¢ã«ãŽãªãºã ã®æ§ç¯ã«äžå¯æ¬ ãªéåãããã®ãšã€ãªã¢ã·ã³ã°ãå¶åŸ¡ãããæäœãªã©ã®æ©èœããµããŒãããŠããŸãã
- Quipper (University of Oxford): Quipperã¯ãåè·¯ã®çæãšæäœãéèŠãã颿°åéåããã°ã©ãã³ã°èšèªã§ããé«é颿°ãšã©ã ãåŒããµããŒãããŠãããããè€éãªéååè·¯ã®èšè¿°ã«é©ããŠããŸããQuipperã¯ãéåãããã®æ¥ç¶ã远跡ããåã·ã¹ãã ã䜿çšããŠãããåè·¯ãæŽåœ¢åŒã§ããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã
- Silq (ETH Zurich): Silqã¯ãå®å šã§è¡šçŸåè±ãã«èšèšããã髿°Žæºã®éåããã°ã©ãã³ã°èšèªã§ããç·åœ¢æ§ã匷å¶ããéåãããã®è€è£œãé²ãåã·ã¹ãã ãåããŠããŸããSilqã¯ãéåããã°ã©ãã³ã°ã®ããã®ããçŽæçã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããããšãç®æããŠãããéåã¢ã«ãŽãªãºã ã®éçºãšãããã°ã容æã«ããŸãã
- PyZX (Oxford): å®å šãªããã°ã©ãã³ã°èšèªã§ã¯ãããŸããããPyZXã¯ãZXèšç®ã䜿çšããŠéååè·¯ãã°ã©ãã£ã«ã«ã«æäœã§ããPythonã©ã€ãã©ãªã§ããZXèšç®ã¯ãéååè·¯ãç°¡çŽ åããã³æé©åããããã®åŒ·åãªããŒã«ã§ããPyZXã¯ãåºæ¬çãªåãã§ãã¯ã«Pythonã®åã·ã¹ãã ãæé»çã«äœ¿çšããŸãããäž»ãªçŠç¹ã¯éååè·¯ã«é¢ããå³çãªæšè«ã«ãããŸãã
- PennyLane (Xanadu): PennyLaneã¯ãéåæ©æ¢°åŠç¿ãéåååŠãããã³éåã³ã³ãã¥ãŒãã£ã³ã°çšã®ã¯ãã¹ãã©ãããã©ãŒã ã®Pythonã©ã€ãã©ãªã§ãããŠãŒã¶ãŒã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ãšåãæ¹æ³ã§éåã³ã³ãã¥ãŒã¿ãŒãããã°ã©ãã³ã°ã§ããŸããPennyLaneã¯Pythonã®åä»ãã«å€§ããäŸåããŠããŸãããæŽ»çºãªç ç©¶åéã§ãã
- Cirq (Google): Cirqã¯ãéååè·¯ãäœæãæäœãæé©åããéåã³ã³ãã¥ãŒã¿ãŒãšéåã·ãã¥ã¬ãŒã¿ãŒã§å®è¡ããããã®Pythonã©ã€ãã©ãªã§ããCirqãPythonã®åä»ãã«äŸåããŠãããç·åœ¢æ§ã匷å¶ããŸããã
課é¡ãšä»åŸã®æ¹åæ§
é«åºŠãªåã·ã¹ãã ã¯éåããã°ã©ãã³ã°ã«å€§ããªå©ç¹ããããããŸããã察åŠããå¿ èŠã®ããããã€ãã®èª²é¡ããããŸãã1ã€ã®èª²é¡ã¯ãéåååŠã®ãã¥ã¢ã³ã¹ã广çã«æããããšãã§ããåã·ã¹ãã ã®èšèšãšå®è£ ã®è€éãã§ããéåèšç®ã«ã¯ãå€ãã®å Žåãè€éãªæ°åŒæŒç®ãšç¢ºççåäœãå«ãŸããåã·ã¹ãã ã§è¡šçŸããã®ãé£ããå ŽåããããŸãã
ãã1ã€ã®èª²é¡ã¯ãåãã§ãã¯ã«é¢é£ããããã©ãŒãã³ã¹ã®ãªãŒããŒãããã§ããåãã§ãã¯ã¯ãéåããã°ã©ã ã®ã³ã³ãã€ã«ãšå®è¡ã«å€§ããªãªãŒããŒãããã远å ããå¯èœæ§ããããŸãã衚çŸåè±ãã§å¹ççãªåã·ã¹ãã ãéçºããããã©ãŒãã³ã¹ãžã®åœ±é¿ãæå°éã«æããããšãéèŠã§ããåæšè«ãã¹ããŒãžã³ã°ãããèšç®ãªã©ã®é«åºŠãªææ³ã¯ãåãã§ãã¯ã®ãªãŒããŒããããåæžããã®ã«åœ¹ç«ã¡ãŸãã
ãã®åéã®ä»åŸã®ç ç©¶æ¹åã«ã¯ã次ã®ãã®ããããŸãã
- ãã衚çŸåè±ããªåã·ã¹ãã ã®éçºïŒãšã³ã¿ã³ã°ã«ã¡ã³ããšã³ããããŒãéåççžé¢é¢ä¿ãªã©ãããè€éãªéåçç¹æ§ãæããããšãã§ããæ°ããåã·ã¹ãã ã®æ©èœã調æ»ããŸãã
- åæšè«ã¢ã«ãŽãªãºã ã®æ¹åïŒéåããã°ã©ã ã§åãæšè«ããããã®ããå¹ççãªã¢ã«ãŽãªãºã ãéçºããæç€ºçãªå泚éã®å¿ èŠæ§ãæžãããŸãã
- åã·ã¹ãã ãšéåã³ã³ãã€ã©ã®çµ±åïŒåãã§ãã¯ãšéåã³ã³ãã€ã«æè¡ãçµã¿åãããŠãéååè·¯ãæé©åããããã©ãŒãã³ã¹ãåäžãããŸãã
- ãŠãŒã¶ãŒãã¬ã³ããªãŒãªéåããã°ã©ãã³ã°èšèªã®äœæïŒåŒ·åã§äœ¿ããããéåããã°ã©ãã³ã°èšèªãèšèšããããå€ãã®èŽè¡ãéåããã°ã©ãã³ã°ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸãã
çµè«
é«åºŠãªåã·ã¹ãã ã¯ãä¿¡é Œæ§ãé«ãã¹ã±ãŒã©ãã«ãªéåãœãããŠã§ã¢ãæ§ç¯ããããã®éèŠãªã³ã³ããŒãã³ãã§ããåã·ã¹ãã ã¯ãéåããã°ã©ã ã«ããã«å³æ Œãªå¶çŽã課ãããšã«ãããäžè¬çãªããã°ã©ãã³ã°ãšã©ãŒãé²ããéåã³ãŒãå šäœã®å質ãåäžãããã®ã«åœ¹ç«ã¡ãŸããéåã³ã³ãã¥ãŒãã£ã³ã°ã鲿©ãç¶ããã«ã€ããŠãæŽç·Žãããåã·ã¹ãã ã®éçºã¯ãè€éã§å ç¢ãªéåã¢ããªã±ãŒã·ã§ã³ã®äœæãå¯èœã«ããäžã§ãŸããŸãéèŠãªåœ¹å²ãæããã§ããããç·åœ¢åã«ããéåãããã®èª€çšã®é²æ¢ãããäŸååã«ããéååè·¯ã®æ£åœæ§ã®æ€èšŒãŸã§ãåå®å šã¯éåãœãããŠã§ã¢ã®ä¿¡é Œæ§ãžã®éèŠãªéçãæäŸããŸããçè«çãªç ç©¶ããããŸããŸãªããã°ã©ãã³ã°èšèªãéåãã©ãããã©ãŒã ã§ã®å®çšåãžã®éã®ãã¯ç¶ããŠãããéåããã°ã©ãã³ã°ã匷åã§æ¬è³ªçã«ä¿¡é Œã§ããæªæ¥ãç®æããŠããŸãã