2ã€ã®ããŒã«é¢æ°ããããŸã
åŒæ°ã1ã€ã¯å®æ°ããã1ã€ã¯ãã©ã³ã¹ãåããŠããŸãã ã©ã¡ãã«åº§ããã©ã®ããã³ããšã³ãã«æ€ããŸããïŒ ãã ããé¢æ°ã¯äžæã§ãããäžåºŠã ãåŒã³åºãããšãèš±å¯ãããŠããŸãã
ãã®åé¡ã解決ããæ¹æ³ãããããªãå Žåã¯ãcatã«ããããã ããã§ãéåã¢ã«ãŽãªãºã ã«ã€ããŠè©±ããæãäžè¬çãªèšèªã§ããPythonã§ãããããšãã¥ã¬ãŒãããæ¹æ³ã瀺ããŸãã
ç§ã¯ãŸãããªããšè©±ãã«æ¥ãŸãã
2ã€ã®é¢æ°ã®åé¡ãããå°ãæ£åŒã«èšå®ããŠã¿ãŸãããã ããŒã«é¢æ°ãäžããŠã¿ãŸããã
ãããŠãããã¯å®æ°ã§ããããšãå
éšçã«ç¥ãããŠããŸããã€ãŸãããã®åŒæ°ã®ãããã«å¯ŸããŠãåžžã«0ãŸãã¯1ãè¿ããããã©ã³ã¹ãåããŠããŸããã€ãŸããåŒæ°ã®ã¡ããã©ååã0ãè¿ããæ£ç¢ºã«åå1ãè¿ããŸãããŸãã¯ãã©ã³ã¹ã ããã«ãé¢æ°ãåŒã³åºãããæéã¯ä»ã®æäœãããèšãç¥ããªãã»ã©é·ããšèããããŠãããããã¢ã«ãŽãªãºã ã®è€éãã¯é¢æ°åŒã³åºãã®æ°ã«ãã£ãŠæ±ºãŸããŸãã
äŸïŒ- ãã©ã³ã¹ã®åããïŒ
- å®æ°ïŒ
- ãã©ã³ã¹ãäžå®ããªãïŒ
ãã¡ããããã®ã¿ã¹ã¯ã¯äººçºçãªãã®ã§ãããå®éã«èª°ããå®éã«äŒãããšã¯ãŸããããŸããããããã¯éåã³ã³ãã¥ãŒãã£ã³ã°ã®åæ¢ãªæ°ããäžçãžã®å€å
žçãªã¬ã€ãã§ãããç§ã¯ãããŠäŒçµ±ãç ŽããŸããã
å€å
žçãªæ±ºå®è«çãœãªã¥ãŒã·ã§ã³
æåã«ãå€å
žçãªèšç®ã¢ãã«ã®åé¡ã解決ããŸãããã ãããè¡ãã«ã¯ãææªã®å Žåã次ã®é¢æ°ãåŒã³åºãå¿
èŠããããŸãã
åŒæ°ïŒã¡ããã©ååãšãã1ã€ã ãã¹ãŠã®èšç®å€ãåãå Žåãé¢æ°ã¯æããã«äžå®ã§ãã å°ãªããšã2ã€ã®ç°ãªãçµæãååšããå Žåãæ©èœã®ãã©ã³ã¹ãåããŠããŸãã 決å®è«çã¢ã«ãŽãªãºã ã®è€éãã¯ææ°é¢æ°çã§ããã
ã
Pythonã¢ã«ãŽãªãºã ïŒ
from itertools import product, starmap, tee def pairwise(xs): a, b = tee(xs) next(b, None) return zip(a, b) def is_constant(f, n): m = 2 ** (n - 1) for i, (x, y) in enumerate(pairwise(starmap(f, product({0, 1}, repeat=n)))): if i > m: break if x != y: return False return True
å€å
žçãªç¢ºççãœãªã¥ãŒã·ã§ã³
ããããåŒæ°ã®ååã§ã¯ãªããããå°ããæ°ããã§ãã¯ããŠå€å®ã«éããå Žåã¯ã©ãã§ããããïŒ æ£ç¢ºãªçãã¯ãããããŸããããã©ã®ãããªç¢ºçã§ééã£ãŠããŸããïŒ é¢æ°ãèšç®ãããšããŸã
åŒæ°ã é¢æ°ã®å€ã®äžã«2ã€ã®ç°ãªãå€ãããå Žåããã¹ãŠãåçŽã§ã-é¢æ°ã®ãã©ã³ã¹ãåããŠããŸãã ããã§ãªããã°ã確çã§å®æ°ã宣èšããŸã
ã ç§ãã¡ãééã£ãŠããŠãæ©èœãå®éã«ãã©ã³ã¹ãåããŠãããšä»®å®ããŸãã ãšã©ãŒã®ç¢ºçãèšç®ããŸã
ã åŒæ°ãäžæ§ã«éžæããå Žåãé¢æ°ã®2ã€ã®é£ç¶ããå€ãåãã§ãã確çã¯
ããããäŒã確ç
åãé£ç¶å€ã¯
ã ãã®ããã«ïŒ
éé¢æ°ïŒ
åºå®ã§
å€å
žçãªç¢ºççã¢ã«ãŽãªãºã ã®è€éãã¯äžå®ã§ãããçãã
99.99ïŒ
ã®å¿çã確èªããã«ã¯ãé¢æ°ã14åã ãåŒã³åºãå¿
èŠããããŸãã
Pythonã¢ã«ãŽãªãºã ïŒ
import random from itertools import product, starmap, tee def pairwise(xs): a, b = tee(xs) next(b, None) return zip(a, b) def is_constant(f, n, k=14): xs = list(product({0, 1}, repeat=n)) random.shuffle(xs) xs = xs[:k] for x, y in pairwise(starmap(f, xs)): if x != y: return False return True
ãããŠãè€éãã䌎ãäžå®ã®æ±ºå®è«ç解決çãããããšãäŒããå Žå
é¢æ°ãäžåºŠã ãåŒã³åºãããšãã§ããŸããïŒ
確ãã«ããããæ€èšããåã«ã泚æããããå¿
èŠããããŸã...
ãã£ãšå¿ã³å¯ãããžã§ã³
ç¥è©±
éå§ããåã«ãéåã³ã³ãã¥ãŒãã£ã³ã°ã«é¢é£ããããã€ãã®äžè¬çãªç¥è©±ã«ã€ããŠèª¬æããŸãã
- éåã¢ã«ãŽãªãºã ã¯è€éã§ãã
ã¯ãããããã¯æ°åŠçæ³ååãšæŽå¯åãå¿
èŠãšãããããåæããã®ã¯å°é£ã§ãã ããããå®éã®éåã³ã³ãã¥ãŒã¿ãŒã«å®è£
ããããšã¯å°é£ã§ãããã®ããã«ã¯ãç©çââåŠã«é¢ããåªããç¥èãæã¡ãåŠç§ã®ç 究宀ã§æ¯æ¥é
ããŸã§èµ·ããŠããå¿
èŠããããŸãã ããããééããªãç¹å¥ãªç¥èãšä¿¡ããããªãã»ã©ã®å€åãå¿
èŠãšããªãã®ã¯åœŒãã®ç解ã§ãã ç§ã¯èª°ããéåã¢ã«ãŽãªãºã ãç解ã§ããããšã確èªããŸã ã圌ãã¯ãæ°å
¥çãå©çšã§ãã極ããŠåçŽãªæ°åŠã«é Œã£ãŠããŸãã ããªãã«å¿
èŠãªã®ã¯ãã»ãã®å°ãå匷ããæéã§ãã
- D-Waveã«ã¯ãã§ã«æ°åã®éåãããéåã³ã³ãã¥ãŒã¿ãŒããããŸã
ãããããããã¯å®éã®éåã³ã³ãã¥ãŒã¿ãŒã§ã¯ãããŸããã
- å®éã®éåã³ã³ãã¥ãŒã¿ãŒã¯ãããŸããã
ããããååšããŸãã å®éšå®€ã®æ¡ä»¶ã§ã¯ãæ°ããããããããŸããã
- éåã³ã³ãã¥ãŒã¿ãŒã¯ã以åã¯å©çšã§ããªãã£ãåé¡ã解決ããŸã
ããããå€å
žã¢ãã«ãšéåã¢ãã«ã§èšç®å¯èœãªåé¡ã®å€ãã¯äžèŽããŠããŸãã éåã³ã³ãã¥ãŒãã£ã³ã°ã¯ããããã®ã¿ã¹ã¯ã®å°ããªãµãã»ããã®è€éããæžããããšããã§ããŸããã
- éåã³ã³ãã¥ãŒã¿ãŒã§ã¯ãCrysisã¯æé«é床ã§é£è¡ããŸã
éåèšç®ã¢ãã«ãå éã§ããã¿ã¹ã¯ã®ãµãã»ãããé€ããæ®ãã¯å€å
žçãªã³ã³ãã¥ãŒã¿ãŒããšãã¥ã¬ãŒãããããšã«ãã£ãŠã®ã¿è§£æ±ºã§ããŸãã ãåç¥ã®ããã«ãããã¯éåžžã«é
ãã§ãã ã¯ã©ã€ã·ã¹ã¯é
ããå¯èœæ§ããããŸãã
- éåã³ã³ãã¥ãŒã¿ãŒã¯ãå
¥åãšåºåãåãããã©ãã¯ããã¯ã¹ã§ããããã¹ãŠãç Žå£ããããšãã§ããŸã
ããªãã12æ³ã§ããã°ããã®ã¢ãããžãŒã¯ããã§ãããã ãã以å€ã®å Žåãããã¯ã¹ããã³ãã«ãŒããããã³ãæ¥ç¶ããããé»åã®ã¹ããªã³ã°ãšã®ä»ã®ãã¹ãŠã®é¡æšã®ããã«ããã¹ãŠã®äžè¬çãªç§åŠãœãŒã¹ã§ç©æ¥µçã«ä¿é²ãããæ··ä¹±ããã ãã§ã誀解ã®é¯èŠãäœæããæçšãããæ害ã§ãã ãããã®ã¢ãããžãŒãæŸæ£ããŸãã
ãªãã§ïŒ
ãªãå¿çšæ°åŠè
ïŒããã°ã©ããŒïŒã¯å¿çšã¬ãã«ã§éåã¢ã«ãŽãªãºã ãç解ã§ããã®ã§ããããïŒ ããã§ã¯ãã¹ãŠãç°¡åã§ãã次ã®2ã€ã®çç±ã説æããŸãã
- èªå·±åçºã®ããã ã©ãããŠïŒ
- 圌ãã¯ãã§ã«æ¥ãŠããŸãã ãããã¯éåã³ã³ãã¥ãŒã¿ãŒã§ãã 圌ãã¯ãã§ã«è¿ãã«ããŸãã ãµãŒããŒäŒç€Ÿã«ã«ããã«ãçŸããæ°å¹ŽåŸã«ã¯ã©ãããããã®ã³ããã»ããµãŒãšããŠç¹æ»
ããæéã¯ãããŸããã ãããŠãå®è¡ããå Žæã¯ãããŸããã éåã³ã«ãŒãã³ãåŒã³åºãããã«ãããã°ã©ã ãäœæããå¿
èŠããããŸãã ãããŠãç解ããããšãªããããè¡ãã®ã¯é£ãããåæããã
å¯ãŠããéã«çš®ãæ®ãã
éåã³ã³ãã¥ãŒãã£ã³ã°ã®æãåºæ¬çãªã³ã³ããŒãã³ãã¯ãéåã·ã¹ãã ã§ãã
éåã·ã¹ãã ã¯ç©çã·ã¹ãã ã§ããããã®åäœã¯ãã¹ãŠãã©ã³ã¯å®æ°ã«å¹æµããŸãã ãã®å®çŸ©ãšãéåã·ã¹ãã ã
è¡åååŠã®æ³åã«åŸããšããäºå®-ç§ãã¡ãç©çåŠããå¿
èŠãšãããã¹ãŠã®ç¥èã 次ã¯æ°åŠã®ã¿ã§ãã
ä»ã®ç©çã·ã¹ãã ãšåæ§ã«ãéåã·ã¹ãã ã¯ç¹å®ã®ç¶æ
ã«ãªããŸãã éåã·ã¹ãã ã®ãã¹ãŠã®å¯èœãªç¶æ
ã¯
ãã«ãã«ã空éã圢æã
ãŸã è€çŽ æ°ã®ãã£ãŒã«ãäžã èªè
ãè€çŽ æ°ã®æŠå¿µã«ç²ŸéããŠããããšãé¡ã£ãŠããŸã-å°æ¥ãã©ãã§ããããã®ç解ãå¿
èŠã§ãã ããã§ãªãå Žåã¯ããäŒãããŠæ»ã£ãŠããããšããå§ãããŸãã ãã«ãã«ã空éã¯ããã«ã ãæã€å®å
šãªãã«ã èšéç·åœ¢ç©ºéã§ã
ã©ãã§
-ã¹ã«ã©ãŒç©ã æåŸããé ã«ïŒ
- ç·åœ¢ïŒãã¯ãã«ïŒã¹ããŒã¹ -å€ãã®èŠçŽ å°å
¥ãããèŠçŽ ãè¿œå ããæäœ ãšä¹ç® ãã£ãŒã«ãèŠçŽ ããš ïŒãã®äŸã§ã¯ãè€çŽ æ°ã®ãã£ãŒã«ãïŒã ãããã®æäœã¯éããå¿
èŠããããŸãïŒçµæã¯ã»ããã«å±ããŠããå¿
èŠããããŸãïŒ ïŒããã³8ã€ã®å
¬çãæºããããªããã°ãªããŸããã å®å
šãªãªã¹ããåç
§ããããšãããã³ããã§ç·åœ¢ç©ºéã«ã€ããŠè©³ããç¥ãããšããå§ãããŸã ã
- ã¡ãŒãã«ç©ºé㧠ããããèŠçŽ ã«å¯Ÿã㊠決å®ãããè·é¢ èŠä»¶ãæºãããŠããïŒã¡ããªãã¯ã®å

ã¹ããŒã¹ïŒïŒ
- ãªãã å Žåã«ã®ã¿ ãã㊠äžèŽ;
- ;
- -äžè§åœ¢ã®äžçåŒã
- æ£èŠåããã空é㧠ã©ããªã¢ã€ãã ã§ã å®æ°ããããŸã ããã®èŠç¯ãšåŒã°ããåã³æºè¶³ã®ãã3ã€ã®å
¬çïŒ
- ãã ãããã -ãŒãèŠçŽ ã
- ;
- ã
çµæ空éã«ã¹ã«ã©ãŒç©ã®éåžžã®èŠä»¶ãæºããã¹ã«ã©ãŒç©ãå°å
¥ããäžèšã®ããã«ãã«ã ãå°å
¥ãããã«ãã«ã空éãååŸããŸãã
ãŸãã
å
±åœ¹ç©ºéã®æŠå¿µã«ã€ããŠã説æã
ãŸã ã ã«å
±åœ¹ãªç©ºé
åŒã°ãã空é
äžã®ç·åœ¢æŒç®å
ã ç·åœ¢æŒç®åãšã¯äœã§ããïŒ ç·åœ¢é¢æ°ã®äžè¬åãšèããããšãã§ããŸãïŒç·åœ¢æŒç®åã®å Žå
å®è¡ããå¿
èŠããããŸãïŒ
ã©ãã§
ã
ã ïŒå®éããã®æšæºã¯åäžã®è¶
çã«éå®ãããã¹ãã§ãããããå€ãã®é¢åãªå®çŸ©ãé¿ããããã«ããã®ãããªçŽæçãªã¢ã€ãã¢ã«èªåèªèº«ãå¶éããŸããïŒ
æŽå²çæ
å ±åŠã§ã¯ãæŽå²çãªçç±ããããã£ã©ãã¯ã®è¡šèšæ³ã䜿çšãããŸãã ãããã¯äžåçã«é¢åã§æ°åããªãããã«èŠãããããããŸããããéµå®ãã䟡å€ã®ããæšæºã§ãã ãã®è¡šèšã§ã¯ãã·ã¹ãã ã®ç¶æ
ãèšè¿°ãããã«ãã«ã空éã®èŠçŽ ã¯
ketãã¯ãã«ãšåŒã°ãã
ãã©ãã¯ãã«ã¯å
±åœ¹ç©ºéã®èŠçŽ ã§ã
ãã®ãããª
ã€ãŸããç·åœ¢æŒç®åã§ããããã®ç¶æ
ãã¯ãã«ãžã®é©çšã¯ããå
ã®ããã«ãã«ã空éã®å¯Ÿå¿ããèŠçŽ ã«ããã¹ã«ã©ãŒç©ã«äŒŒãŠããŸãã èšé²ãç°¡åã«ããããã«ãbraãã¯ãã«ãketãã¯ãã«ã«é©çšããå Žåãäžã®åŒã«ç€ºãããã«ã2æ¬ã®åçŽç·ã1æ¬ã«ããŒãžãããŸãã
ãŒã以å€ã®å®æ°ã«ããä¹ç®ã®ã¿ãç°ãªããã¯ãã«ãåãç©çç¶æ
ã«å¯Ÿå¿ããããšãéèŠã§ãããããã£ãŠãå€ãã®å Žåããã¹ãŠã®å¯èœãªç¶æ
ãèæ
®ãããã®ã§ã¯ãªããæ£èŠåãããç¶æ
ãã€ãŸããã®ãããªãµãã»ããã®ã¿ãèæ
®ãããŸã
ãã
-åèŠçŽ ã®ãã«ã ã¯1ã«çããã ãã®ãããªãã¯ãã«ã¯ãã¹ãŠãåäžã®è¶
çé¢äžã«ååšããŸãã
ãã«ãã«ãç¶æ
空éã§äœããã®æ ¹æ ãéžæããå Žå
ãããããè€çŽ æ°ã®ãã¯ãã«ã®åœ¢ã§ä»»æã®ket-vectorãæžãããšãã§ããŸã-ãã®åºåºã«æ²¿ã£ãå±éã®ä¿æ°ïŒ
ãããªãã¯ã¹ååŠã¯ãèšåŒµä¿æ°ã®ã¢ãžã¥ã©ã¹ã®å¹³æ¹
ãã®åºæºã§æž¬å®ããããšãã察å¿ããåºæ¬ç¶æ
ã§éåã·ã¹ãã ãèŠã€ãã確çãç©ççã«æå³ã
ãŸã ã
ããã«ãããŸã-
éåã·ã¹ãã ã®
æåã®äž»èŠãªç¹æ§ã§ãã ã人æ°ã®ããèšäºã§é »ç¹ã«å
延ã°ãã«ãããŠããŸãïŒã·ã¹ãã ãäœããã®åºæºã§æž¬å®ãããšãåºæ¬ç¶æ
ã®ããããã«ãªããæ
å ±ã倱ããæ»ãããšãã§ããŸããã èªãã ãšãã«åããŠããã¹ãŠãå¶ç¶ã«çµ¶å¯Ÿã«èµ·ãããšããæèŠãåŸãããããã«åœ±é¿ãäžããããšã¯ã§ããŸããããå®éã«ã¯ãé·ç§»ç¢ºçã¯äºåã«ç¥ãããŠãããããã«æž¬å®åºæºã«äŸåããŠããŸãã ãã¹ãŠãç§ãã¡ãæ³åããã»ã©ã©ã³ãã ã§ããã°ã決å®è«çéåã¢ã«ãŽãªãºã ã¯äžå¯èœã§ãããã
ããåºå®åºåºã®ãã¯ãã«ã§ãã«ãã«ã空éã®èŠçŽ ãè¡šçŸã§ããå Žåããã®ç©ºéäžã®ç·åœ¢æŒç®åãè¡åã§è¡šçŸã§ããŸãã
確ãã«
åçã«
ã©ãã§
æŒç®åã亀äºã«é©çšããŠåŸããã
åºæ¬çãªèŠçŽ ã«
çµæã®èŠçŽ ãè¡ã«æžã蟌ã¿ããããŠ
-å解
åãåºæºã§ã
æŒç®åãããŸããã
è¡åã§è¡šããã
è¡åã®èŠçŽ ã¯è€çŽ æ°ã§ãã åèŠçŽ ãåãããããè€çŽ å
±åœ¹ïŒè€çŽ å
±åœ¹
çªå·ãšåŒã°ãã
ïŒåæã«ããããªãã¯ã¹å
šäœã転眮ããŸãã
ãã®ãããªè¡å
ãšã«ããŒãå
±åœ¹ãšåŒã°ãã
ã ãã
ã©ãã§
ïŒæçè¡åãæã€ïŒæçæŒç®åã§ããå Žåã察å¿ããæŒç®åã¯
unitaryãšåŒã°ããŸãã
ãããªãã¯ã¹ååŠãæ瀺ãã2çªç®ã®ã«ãŒã« ïŒåäžã®æŒç®åã®ã¿ãéåã·ã¹ãã ã«äœçšã§ããŸãã ãªãã§ïŒ ãã®ãããªå€æã¯æéçã«å¯éã§ãããæ
å ±ã倱ããªãããã§ãã 確ãã«ã
ãã®åŸãéå€æãé©çšã§ããŸã
ã·ã¹ãã ã®åæç¶æ
ãååŸããŸãã
æåŸã«ãæãéèŠãªããšïŒ
ãã³ãœã«ç© ã 2ã€ã®ãã«ãã«ã空éã®ãã³ãœã«ç©
ãããŠ
ãã«ãã«ã空éãšåŒã°ãã
ã ç§ã¯æ£åŒãªå®çŸ©ãäžããŸãããç§ãã¡ã«ãšã£ãŠéèŠãªããããã£ã«ã®ã¿æ³šæããŸãã
- çµæã®ã¹ããŒã¹ã®æ¬¡å
ã¯ããœãŒã¹ã¹ããŒã¹ã®æ¬¡å
ã®ç©ã«çãããªããŸãã
;
- ãã -åºç€ ããã㊠-åºç€ ãããã -çæããŒã¹ ã
æŒç®åã®ãã³ãœã«ç© ãã
ãããŠ
ãã
ïŒãªãã¬ãŒã¿ãŒ
äžèšã®è¡åã§è¡šãããŸãïŒã¯æŒç®åãšåŒã°ããŸã
ãã
ãããªãã¯ã¹ãã
ãã®ãããªç©ã¯ã¯ãããã«ãŒç©ãšãåŒã°ããŸãã2çªç®ã®è¡åã«æåã®è¡åã®åèŠçŽ ãä¹ç®ããçµæã®ãããã¯ãããããã¯è¡åãæ§æããŸãã 次å
Aãçããå Žå
ã次å
Bã¯
ããã®åŸããã³ãœã«ç©ã®éçšã§åŸãããè¡åã®æ¬¡å
ã¯
ã
äŸïŒéåã·ã¹ãã ã®3çªç®ã®éèŠãªç¹æ§ ïŒ2ã€ã®éåã·ã¹ãã ã¯
éãåããç¶æ
ã«ãªããŸãããæ°ããç¶æ
空éã¯å
ã®ç©ºéã®ãã³ãœã«ç©ã§ãããæ°ããã·ã¹ãã ã®ç¶æ
ã¯å
ã®ã·ã¹ãã ã®ç¶æ
ã®ãã³ãœã«ç©ã«ãªããŸãã ã ãããç¶æ
ã®ã·ã¹ãã ã®éãåãã
ãããŠ
æ°ããã·ã¹ãã ã¯å¯èœã«ãªããŸãã
ãã«ãã«ã空éã«ãã£ãŠèšè¿°ããã
ã
ãããŠãç§ã®è³ã«æ€ãä»ããããããžã§ã³
ãããç§ãã¡ãå¿
èŠãšãããã¹ãŠã®æ°åŠã§ãã 念ã®ãããèŠçŽãããšïŒ
- åºå®åºåºã®å Žåãéåã·ã¹ãã ã¯è€çŽ ãã¯ãã«ã§èšè¿°ã§ãããã®ã·ã¹ãã ã®é²åã¯ãŠãã¿ãªè€çŽ è¡åã§èšè¿°ã§ããŸãã
- éåã·ã¹ãã ã¯ä»»æã®åºåºã§æž¬å®ã§ããäºåå®çŸ©ããã確çã«åŸã£ãŠåºåºç¶æ
ã®ããããã«ãªããŸãã
å€å
žçãªã³ã³ãã¥ãŒã¿ãŒã§éåã¢ã«ãŽãªãºã ãèšè¿°ãç 究ãç解ããšãã¥ã¬ãŒãããã«ã¯ãè¡åã«ãã¯ãã«ãæããã ãã§åå
ã§ã ãããã¯
ãã¥ãŒã©ã«ãããã¯ãŒã¯ãããç°¡åã§ã ãéç·åœ¢æ§ã¯ãããŸããïŒ
ãã¥ãŒããã
äºæ¬¡å
ãã«ãã«ã空éã§èšè¿°ãããéåã·ã¹ãã ãèŠãŠã¿ãŸããã
ãããŠããã®
äžã§ãã¯ãã«ã
ãããŠ
ã æ¬åŒ§å
ã«ã¯ã2é²æ°ã·ã¹ãã ã®åºæ¬ãã¯ãã«ã®ã€ã³ããã¯ã¹ãæžã蟌ãŸããè¿œå ã®æåãªãã§ãŒãããå§ãŸããŸãã ãã®ãããªæå®ã¯éåžžã«äŸ¿å©ã§ãã ãã®ããã«
ããã³ä»»æã®ãã¯ãã«
次ã®ããã«è¡šçŸã§ããŸãã
ã©ãã§
ãããŠ
ãã®ãããªããã€ãã®è€çŽ æ°ã¯
ïŒåã®æ®µèœã®å±éä¿æ°ãšæ£èŠåæ¡ä»¶ã®è§£éãæãåºããŠãã ããïŒã ãã®ããããã®ãããªåçŽãªéåã·ã¹ãã ã¯
ãã¥ãŒããã ïŒ
quanti bit ã
qbit ïŒãšåŒã°ããŸãã éåãããã¯ãéåã³ã³ãã¥ãŒãã£ã³ã°ã¢ãã«ã®å€å
žçãªãããã«é¡äŒŒããŠããŸãã 1ã€ã®éåãããã®ããŸããŸãªç¶æ
ã®ç©ºéã
ããããçãšåŒã°ããäžæ¬¡å
çã§ãããã§
äžã®æ¥µã«å¯Ÿå¿ãã
-ããããžã
ç»é²ãã
1ãããã¯1ãããã®ããã«éå±ãããã®ã§ãããã«è€æ°ã®ãã¥ãŒãããã®éãåãããæ€èšããŠãã ããã ãã®ãããªéãåããã¯ã
éåã¬ãžã¹ã¿ãŒ ïŒ
qregister ïŒãšåŒã°ããŸãã
éåãããã ããšãã°ã2éåãããã®éåã¬ãžã¹ã¿ã¯ç©ºéã§èšè¿°ãããŸã
4ã€ã®åºæ¬çãªç¶æ
ããããŸãã
ãããã£ãŠããã®ãããªã¬ãžã¹ã¿ã®ç¶æ
ãšããŠè¡šãããšãã§ããŸã
ã©ãã§
ã è¡šèšã§ã¯ãåäœããªã³ã®åºåºãã¯ãã«
-thäœã¯æ°åã§ç€ºãããŸã
ãã€ããªåœ¢åŒã§æžãããŠããŸãã
ããã«åæ§ã ããã®éåã¬ãžã¹ã¿
éåãããã«ã€ããŠèª¬æããŸã
次å
ãã«ãã«ã空é
æã£ãŠãã
åæ§ã®æ¹æ³ã§åœ¢æãããåºåºç¶æ
ã é·æéé
延ããããšãªããéåã¬ãžã¹ã¿ããšãã¥ã¬ãŒãããæ¹æ³ãåŠç¿ããŸãã
import numpy as np class QRegister: def __init__(self, n_qbits, init): self._n = n_qbits assert len(init) == self._n self._data = np.zeros((2 ** self._n), dtype=np.complex64) self._data[int('0b' + init, 2)] = 1
éåã¬ãžã¹ã¿ãäœæããããã®3è¡ã®ã³ãŒã-ãŸã£ããé£ãããããŸãããåæããŸãã 次ã®ããã«äœ¿çšã§ããŸãã
a = QRegister(1, '0')
éåã¢ã«ãŽãªãºã ã«ã¯ä»¥äžãå«ãŸããŸãã
- éåã¬ãžã¹ã¿ãŒã®åæåã
- ãã®äžã®ãŠãã¿ãªå€æã®ã»ããã
- çµæã®æž¬å®ã
èšæž¬
æåã®ãã€ã³ããèŠã€ããŠãããããšãã¥ã¬ãŒãããæ¹æ³ãåŠã³ãŸãããæåŸã®ãã€ã³ãã§ãã枬å®ããšãã¥ã¬ãŒãããæ¹æ³ãåŠã³ãŸãããã èŠããŠããããã«ãç¶æ
ãã¯ãã«ã®ä¿æ°ã®2ä¹ã¯ããã®ç¶æ
ãžã®é·ç§»ã®ç¢ºçãç©ççã«æå³ããŸãã ããã«åŸã£ãŠãQRegisterã¯ã©ã¹ã«æ°ããã¡ãœãããå®è£
ããŸãã
def measure(self): probs = np.real(self._data) ** 2 + np.imag(self._data) ** 2 states = np.arange(2 ** self._n) mstate = np.random.choice(states, size=1, p=probs)[0] return f'{mstate:>0{self._n}b}'
次ã®ãããããéžæãã確çã®ç¢ºçãçæããŸã
ç¶æ
ãç¶æ
åãã
np.random.choice
ã䜿çšããŠã©ã³ãã ã«éžæããŸãã æ®ã£ãŠããã®ã¯ã察å¿ããããã£ã³ã°ãŒãã®æ°ãæã€ãã€ããªæååãè¿ãããšã ãã§ãã æããã«ãåºæ¬çãªç¶æ
ã®å Žåãçãã¯åžžã«ãã®ç¶æ
èªäœãšåãã§çãããªããŸãã ãã§ãã¯ïŒ
>>> QRegister(1, '0').measure() '0' >>> QRegister(2, '10').measure() '10' >>> QRegister(8, '01001101').measure() '01001101'
ã»ãšãã©ãã¹ãŠãåé¡ã解決ããæºåãã§ããŠããŸãïŒ éåã¬ãžã¹ã¿ã«åœ±é¿ãäžããæ¹æ³ãåŠã¶ããšã ããæ®ã£ãŠããŸãã ãŠãã¿ãªå€æã«ãã£ãŠãããã§ããããšã¯ãã§ã«ããã£ãŠããŸãã éåæ
å ±åŠã§ã¯ããŠãã¿ãªå€æã¯
ã²ãŒããšåŒã°ããŸãïŒ
éåã²ãŒã ã
qgate ã
ã²ãŒã ïŒã
ã²ã€ã
ãã®èšäºã§ã¯ãç§ãã¡ã«ãšã£ãŠæçšãªæãåºæ¬çãªã²ãŒãã®ããäžéšãæ€èšããŸããå®éããã£ãšãããããããŸããã·ã³ã°ã«
æ€èšããã®ãæãç°¡åãªã®ã¯ãåäžã®ã²ãŒãã§ãããã®è¡åã¯æ¬¡ã®ãšããã§ãã圱é¿ãããã¥ãŒãããã¯å€æŽããŸãããããããããã¯åœ¹ã«ç«ããªããšèããªãã§ãã ãã-ç§ãã¡ã¯ãããå¿
èŠãšããŸãããããŠè€æ°åãã²ãŒãã¢ãããŒã«
ãããªãã¯ã¹ããŠãã¿ãªã§ããããšã確èªããããšã¯é£ãããããŸãããåºæ¬çãªãã¥ãŒãããã«å¯Ÿããã¢ãããŒã«ã²ãŒãã®åäœãèããŸãããŸãã¯ãäžè¬çãªåœ¢åŒ[1]ïŒã芧ã®ããã«ãã¢ãããŒã«ã²ãŒãã¯åºæ¬çãªç¶æ
ãåçã®ç¢ºçã«å€æããŸããçãã確çã§æž¬å®ãããšãä»»æã®çµæãåŸãããšãã§ããŸããã²ã€ãããŠãª
Wolfgang Pauliã«ãã£ãŠå°å
¥ãããè¡åã察å¿ãã3ã€ã®éèŠãªã²ãŒãïŒã²ãŒãã¯NOT ã²ãŒããšãåŒã°ããŸãã幟äœåŠçã«ãã®é©çšã¯ã軞ãäžå¿ã«ã©ãžã¢ã³ã§ããããçããªã³ã«ããããšãšåçã§ã ã
ã²ã€ã ãããŠ
ã²ãŒãã«äŒŒãŠããŸããã察å¿ãã軞ãäžå¿ã«å転ããç¹ãç°ãªããŸããã²ãŒãã䜿çšããå®çããããŸã ã
ã
ãããŠ
ä»»æã®åäžãã¥ãŒãããã²ãŒããè¡šçŸã§ããŸãã äŸïŒ
ã¢ãããŒã«ã²ãŒãã¯å¹ŸäœåŠçã«è»žãäžå¿ãšããã©ãžã¢ã³ã«ããå転ãæå³ããããšãããããŸã ã
èæ
®ããããã¹ãŠã®ã²ãŒããPythonã«å®è£
ããŸãããããè¡ãã«ã¯ãå¥ã®ã¯ã©ã¹ãäœæããŸãã class QGate: def __init__(self, matrix): self._data = np.array(matrix, dtype=np.complex64) assert len(self._data.shape) == 2 assert self._data.shape[0] == self._data.shape[1] self._n = np.log2(self._data.shape[0]) assert self._n.is_integer() self._n = int(self._n)
ãããŠãã¯ã©ã¹QRegister
ã«ã²ãŒããé©çšããæäœãè¿œå ããŸãã def apply(self, gate): assert isinstance(gate, QGate) assert self._n == gate._n self._data = gate._data @ self._data
ãããŠããã§ã«ããã£ãŠããã²ãŒããäœæããŸãã I = QGate([[1, 0], [0, 1]]) H = QGate(np.array([[1, 1], [1, -1]]) / np.sqrt(2)) X = QGate([[0, 1], [1, 0]]) Y = QGate([[0, -1j], [1j, 0]]) Z = QGate([[1, 0], [0, -1]])
ã€ãŒã°ã«ãŸãã¯å°ŸïŒ
ç°¡åãªéåã¢ã«ãŽãªãºã ã®äŸãèŠãŠã¿ãŸããããã©ã³ãã ããããçæããŸã-ãŒããŸãã¯1ãã¯ã·ããŸãã¯å°Ÿãããã¯å®å®ã§æãæ£çŽãªã³ã€ã³ã«ãªããŸã-çµæã¯æž¬å®ãããå Žåã«ã®ã¿ç¥ãããå¶ç¶ã®æ§è³ªã¯å®å®ã®ãŸããããã®åºç€ã«çž«ã蟌ãŸãããããªãæ¹æ³ã§ãããã«åœ±é¿ãäžããããšã¯äžå¯èœã§ããã¢ã«ãŽãªãºã ã«ã¯ã1ã€ã®ãã¥ãŒãããã®ã¿ãå¿
èŠã§ããæåã®ç¬éã®ç¶æ
ã«ãã ïŒ
ã¢ãããŒã«ã²ãŒããé©çšããŠç¶æ
ãååŸããŸãçµæã®ã·ã¹ãã ã枬å®ããå Žåãç¶æ
ã«ããå¯èœæ§ãé«ããç¶æ
ã«ãã確çã¯ãŸã£ããåãã§ã ã
çµæãèšé²ããããã ãã«æ®ããŸããå€å
žçãªã³ã³ãã¥ãŒã¿ãŒã§ãšãã¥ã¬ãŒãããã¢ã«ãŽãªãºã ã確èªããŸãããã from quantum import QRegister, H def quantum_randbit(): a = QRegister(1, '0') a.apply(H) return a.measure() for i in range(32): print(quantum_randbit(), end='') print()
çµæïŒ
â python example-randbit.py 11110011101010111010011100000111 â python example-randbit.py 01110000111100011000101010100011 â python example-randbit.py 11111110011000001101010000100000
äžèšã®ã¢ã«ãŽãªãºã å
šäœã¯ã1çµã®åŒã§èšè¿°ã§ããŸãããã ãããã®ãããªã¬ã³ãŒããæ±ãã®ã¯ããŸã䟿å©ã§ã¯ãããŸããããªã¹ãæ§é ïŒå€å
žçãªã¢ã«ãŽãªãºã ã«é©ããäžé£ã®ã¢ã¯ã·ã§ã³ïŒã¯ãéåã®å Žåã«ã¯é©çšã§ããŸãããããã§ã¯ããµã€ã¯ã«ãæ¡ä»¶ããªãã ããããã£ãŠãéååè·¯ã¯ãéåã³ã³ãã¥ãŒã¿ãŒç§åŠã®ã¢ã«ãŽãªãºã ãèšè¿°ããããã«åºã䜿çšãããŠããŸããäžèšã®ã¢ã«ãŽãªãºã ã®å³ã¯æ¬¡ã®ãšããã§ããå·ŠåŽã«ã¯ãã·ã¹ãã ã®åæç¶æ
ãåžžã«è¡šç€ºãããŸããé·æ¹åœ¢ã¯ããã®ç¶æ
ã§å®è¡ããããŠãã¿ãªå€æã瀺ããæåŸã«ã枬å®ããã€ã¹ã®ã¢ã€ã³ã³ïŒæž¬å®æäœïŒããã¹ãŠãŸãã¯ããã€ãã®ãã¥ãŒãããã«ãããŸãããããããã©ã³ããåã®åœ¢ã®ããã€ãã®ãã«ããã¥ãŒãããå€æã«ã¯ãæ§æç³ãããããŸããããã ãã§ãã
æ£æ¹åœ¢ãäžè§åœ¢ãåãšåºå¥ã§ããã°ãéåã¢ã«ãŽãªãºã ã®ã¹ããŒã ãç°¡åã«ç解ã§ããŸããéåãããã®ç¥ãžã®ããå€ãã®éåããã
ãããã1ã€ã®ãã¥ãŒãããã§ã¯ãªããã¬ãžã¹ã¿å
šäœã§äœæ¥ãããšã©ããªããŸããïŒãããŠã1ã€ã®ãã¥ãŒãããã®ã¿ã«ã²ãŒããé©çšãããšããŸããïŒãã³ãœã«è£œåã®ç¹æ§ãå©ãã«ãªããŸããæŒç®åã®ãã³ãœã«ç©ã®å®çŸ©ã«ãã ãããŠ
ïŒ
ã©ãã§
ã
ã 次ã«ïŒ
ã€ãŸããã²ãŒãã1ã€ã®ãã¥ãŒãããã«é©çšããããã2ã€ç®ã®ãã¥ãŒãããã«æ¥ç¶ããŠéåã¬ãžã¹ã¿ãååŸããããæŒç®åãã¬ãžã¹ã¿å
šäœã«é©çšãããã¯åé¡ã§ã¯ãããŸããã ã
åæ§ã«ã2çªç®ã®ãã¥ãŒãããã«ã®ã¿æŒç®åãé©çšããå Žåã¯ãã¬ãžã¹ã¿å
šäœã«æŒç®åãé©çšã§ããŸã ã
ããã¯ããã®ãããªã¹ããŒã ã次ã®ããšãæå³ããŸããããã«å®å
šã«äŒŒãŠããŸãïŒäŸ¿å®äžãåäžã®ã²ãŒãã®ã¿ãçç¥ãããŠããŸãããããŠãéã«ãäžåºŠã«è€æ°ã®ãã¥ãŒãããã«ã²ãŒããé©çšãããå Žåã¯ã©ãã§ããããïŒç¹°ãè¿ãã«ãªããŸããããã³ãœã«ç©ã®å®çŸ©ããããã®ããã«ãã®ã²ãŒããé©çšããããšãã§ããŸããå¿
èŠãªåæ°ã ããã³ãœã«ãä¹ç®ããŸãã ãã³ãœã«ã¹ãä¹ãæå³ããŸãã ã¡ãªã¿ã«
ç°¡æœã«ããããã«ã ã ãã®ããã«
æå³ïŒãŒãéåãããã®éåã¬ãžã¹ã¿ã®åéåãããã«ã¢ãããŒã«å€æãé©çšããŸããã«ãã³ãœã«ç©ãšã¹ãä¹ãè¿œå ããŸãQGate
ã def __matmul__(self, other): return QGate(np.kron(self._data, other._data)) def __pow__(self, n, modulo=None): x = self._data.copy() for _ in range(n - 1): x = np.kron(x, self._data) return QGate(x)
éåç¥èš
åãã€ããªé¢æ°ã¯ãå¯äžmnogokubitnyã²ãŒã寞æ³å¯Ÿå¿ã§ç€ºããããããŠåŒã°ããéåãªã©ã¯ã«ãã®æ©èœã®ããã«ãé¢æ°ã«é¢ãããã¹ãŠã®æ
å ±ãå«ãŸããŠããããã¹ãŠã®å¯èœãªåŒæ°ã§åæã«åŒã³åºãããšãã§ããŸãããªããã®æ¬¡å
ïŒ
åé¡ã¯ãéåã³ã³ãã¥ãŒãã£ã³ã°ã®å¥ã®åºæ¬çãªç¹æ§ã«ããã°ãæ
å ±ã¯å€±ããããæéçã«å¯éã§ãããšããããšã§ããå€å
žçãªèšç®ã¢ãã«ã§é¢æ°ãåŒã³åºããŠçµæãååŸããå Žåããã®é¢æ°ãã©ã®åŒæ°ã§åŒã³åºãããããå€æã§ããªããããæéå
ã«èšç®ãå
ã«æ»ãããšã¯ã§ããŸããããããåé¿ãã1ã€ã®æ¹æ³ã¯ãé¢æ°ãåŒã³åºãããåŒæ°ãèšæ¶ããããšã§ããã³ã³ãã¥ãŒãã£ã³ã°ã®éåã¢ãã«ã§ãåãããšãèµ·ãããŸãããããããŸãã«ãã®æ§è³ªã«çµã¿èŸŒãŸããŠããã ãã§ããå®å
šãªæ
å ±ãä¿åããã«ãåäžã®å€æãæ§ç¯ããããšã¯äžå¯èœã§ããéåãªã©ã¯ã«ã¯ãç¶æ
ãç¶æ
ã«ç§»è¡ããåäžå€æãšããŠå®çŸ©ãããŸã ã©ãã§
ããŒã¯ãããéåãããã¯ãé¢æ°ã®åŒæ°ã«é¢ããæ
å ±ãä¿æããå€æŽãããªããŸãŸã§ãå¯äžã®éåãããã¯ãã®çµæã§ãã2ãæ³ãšããå ç®ã瀺ããŸããäŸãèŠãŠã¿ãŸãããã1ã€ã®åŒæ°ã®é¢æ°ã«å¯ŸããŠOracleãæ§ç¯ããããšããŸããã ã
ãããã£ãŠã察å¿ããæŒç®åã¯2ãã¥ãŒãããã§ããã次å
ã®æ£æ¹è¡åã§èšè¿°ã§ããŸã ã
äžèšã®èŠåã«åŸã£ãŠãå¯èœãªãã¹ãŠã®åºæ¬çãªã¬ãžã¹ã¿ãŒã®ç¶æ
ãã©ã®ç¶æ
ã«ãªããã調ã¹ãŸãããŠãããè¡åæŒç®åã¯ãiçªç®ã®è¡ã§è¡åãä¹ç®ãããšãã«ããã¯ãã«ã®içªç®ã®ã³ã³ããŒãã³ããååŸããŠåãå Žæã«é
眮ãããããç¶æ
ãããèªäœã«åã蟌ã¿ãŸããiçªç®ã®è¡ã®è¡åã§ãiçªç®ä»¥å€ã®ãã¹ãŠã®èŠçŽ ããŒãã§1ã§ããå Žåãçµæã®ãã¯ãã«ã®ä»£ããã«ãå
ã®ãã¯ãã«ã®thçªç®ã«ãã£ãèŠçŽ ã眮ããŸããäžèšã®äŸã§ã¯ããã®ãŸãŸã«ããå¿
èŠããããŸã ãããŠ
ç¶æ
ãã¯ãã«èŠçŽ ãšã¹ã¯ãã ãããŠ
èŠçŽ ã ãããã
次ã®ããã«ãªããŸãããã§ãã¯ïŒåæ§ã«ãä»ã®é¢æ°ã®å Žåãä»»æã®æ°ã®åŒæ°ãå®è£
ããŸãïŒ def U(f, n): m = n + 1 U = np.zeros((2**m, 2**m), dtype=np.complex64) def bin2int(xs): r = 0 for i, x in enumerate(reversed(xs)): r += x * 2 ** i return r for xs in product({0, 1}, repeat=m): x = xs[:~0] y = xs[~0] z = y ^ f(*x) instate = bin2int(xs) outstate = bin2int(list(x) + [z]) U[instate, outstate] = 1 return QGate(U)
ãŸã æ®ã£ãŠãã
ããŠãåé¡ã解決ããããã«å¿
èŠãªãã¹ãŠã®åºç€ã調ã¹ããã®ãœãªã¥ãŒã·ã§ã³ã®æ€èšŒã«åœ¹ç«ã€å°ããªpythonãã¬ãŒã ã¯ãŒã¯ãäœæããããšããã§ããŸããã1ã€ã®é¢æ°åŒã³åºãã§é¢æ°ãå®æ°ã平衡ããå€æã§ããã¢ã«ãŽãªãºã ã¯ãDeutsch-Jojiã¢ã«ãŽãªãºã ãšåŒã°ããŸãã1ã€ã®å€æ°ã®é¢æ°ã®ã¢ã«ãŽãªãºã ã®ããŒãžã§ã³ã¯ã1985幎ã«David Deutschã«ãã£ãŠéçºããã1992幎ã«Richard Yogiã®å©ããåããŠããã€ãã®å€æ°ã®ã±ãŒã¹ã«äžè¬åãããŸããããã®ã¢ã«ãŽãªãºã ã®å³ã¯æ¬¡ã®ãšããã§ãã枬å®çµæã0ã®å Žåãé¢æ°ã¯äžå®ã§ãããã以å€ã®å Žåã¯ãã©ã³ã¹ããšããŠããŸããã¢ã«ãŽãªãºã ãããã«å®è£
ããŸãã from quantum import QRegister, H, I, U def is_constant(f, n): q = QRegister(n + 1, '0' * n + '1') q.apply(H ** (n + 1)) q.apply(U(f, n)) q.apply(H ** n @ I) if q.measure()[:~0] == '0' * n: return True else: return False
ãããŠãã§ãã¯ïŒ def f1(x): return x def f2(x): return 1 def f3(x, y): return x ^ y def f4(x, y, z): return 0 print('f(x) = x is {}'.format('constant' if is_constant(f1, 1) else 'balansed')) print('f(x) = 1 is {}'.format('constant' if is_constant(f2, 1) else 'balansed')) print('f(x, y) = x ^ y is {}'.format('constant' if is_constant(f3, 2) else 'balansed')) print('f(x, y, z) = 0 is {}'.format('constant' if is_constant(f4, 3) else 'balansed'))
çµæïŒ
f(x) = x is balansed f(x) = 1 is constant f(x, y) = x ^ y is balansed f(x, y, z) = 0 is constant
åäœããŸãã ããã
ãªãæ©èœããã®ã§ããïŒã¢ã«ãŽãªãºã ã®æ£ããã蚌æãããšåæã«ããã®åäœåçãèŠãŠã¿ãŸããããä»»æã®åºæ¬ç¶æ
ã®éåã¬ãžã¹ã¿ãŒã«å¯Ÿããã²ãŒãã®åäœãèããŠã¿ãŸããã[1]ïŒïŒãã³ãœã«ç©ã®ç¹æ§ã«ããïŒïŒåã
ã®ãã¥ãŒãããã«é©çšå¯èœïŒïŒãã³ãœã«ç©ã®ç¬Šå·ãšããŠ-1ãåããŸãïŒïŒã³ã³ãã¯ãåã®ããã«åå²ãåœãŠïŒã©ãã§
-2ãæ³ãšããå ç®ãããã³2ãæ³ãšããã¹ã«ã©ãŒç©ãæåã®æç¹ã§ãã·ã¹ãã ã¯ç¶æ
ã«ãããã¢ãããŒã«å€æã®åœ±é¿äžã§ç¶æ
ã«ãªããŸãããªã©ã¯ã«
ã·ã¹ãã ãç¶æ
ã«ããŸãåºå®åŒæ°ã®å Žå æ©èœ
å€0ããšããšãåã®ä¿æ°ã¯å€åããŸãããããã§ãªããã°ã笊å·ãå€åããŸãããã®èŠ³å¯ã«åºã¥ããŠãçŸåšã®ç¶æ
ã次ã®ããã«æžãæããããšãã§ããŸãããã®æ®µéã§ãæªäœ¿çšã®æåŸã®ãã¥ãŒããããç Žæ£ããæåã®ãã¥ãŒãããã«ã¢ãããŒã«å€æãé©çšããŠç¶æ
ãååŸããŸããããŠãçµæã芳å¯ãã確çã¯ä»¥äžã§ãã
éåã³ã³ãã¥ãŒãã£ã³ã°ã®ããªãåçŽåãããã¢ãã«ã調ã¹ãå€å
žçãªã³ã³ãã¥ãŒã¿ãŒã§ãšãã¥ã¬ãŒãããããã®Pythonãããã¬ãŒã ã¯ãŒã¯ãäœæããæãåçŽãªãå®éã®ãéåã¢ã«ãŽãªãºã ã®1ã€ã§ããDeutsch-Jojiã¢ã«ãŽãªãºã ãåæããŸãããæ ãè
ã§ã¯ãªã人ã®ããã®ç«ã§ããèšäºãèªãã§ãããã¯ãç解ããŸãããâã³ãŒãã¯GitHubã§å
¥æã§ããŸãèªãã§ãããŠããããšãïŒ
ããšãã°ããããã¡ã€ã«ã賌èªããã³ã¡ã³ããæ®ããæçšãªããšãè¡ããŸããè¿œå ã¯å€§æè¿ã§ããæåŠ
- [1] M. Vyalyiããéåã¢ã«ãŽãªãºã ïŒå¯èœæ§ãš
å¶éã
- [2] A. S.ãã¬ãããæ
å ±ã®éåçè«ã®çŽ¹ä»ã
- [3] MAããŒã«ã»ã³ãéåæ
å ±çè«
PSïŒhabrã®ãã©ãŒãã¥ã©-åžããŸãããããã§ãããŒãParpalakãµãŒãã¹upmath.meã¯ãéåžžã«å€ãã®æ°åŒãæã€ãã¹ããªãã«ã¯äžå¯èœã ã£ãã§ãããã