
æœè±¡åã¯ãITã®äž»èŠãªææ³ã®1ã€ã§ãã ããã°ã©ãã³ã°èšèªãã¢ããªã³ã°èšèªãããã°ã©ãã³ã°ãã©ãã€ã ïŒæç¶ãåã颿°åãOOPãªã©ïŒã¯ãã©ã®ããã«ãäœããæœè±¡åããããšãã質åã«å¯ŸããçããæäŸããŸãã ããã«ãåã¢ãããŒãã®æ¯æè
ã¯ãããçš®ã®æœè±¡åãæäŸããŸãã
çã®æ®éçãªæœè±¡åãã芧ã«ãªãããå Žåã¯
ã...ã«åå ããŠãã ãã ãã«ããŽãªã®çè«ãç ç©¶ããŠ
ãã ãã ã åçãšJavaScriptã³ãŒããå«ãã»ããã®ã«ããŽãªã®äŸã§ã¯ãã«ããŽãªçè«ã®æãåºæ¬çãªæŠå¿µã§ããå¶éããŠãããŒãµã«ããããã£ã«ã€ããŠèª¬æããŠããŸãã ã«ããŽãªçè«ã®èšç®é¢ãèæ
®ãããŸãã
ãŸããJavaScriptã®ã¯ã©ã¹ãäžçŽç©ãããã³ãã¬ã³ãã«ã€ããŠãå°ã説æããŸãã
èšäºã®äŸã¯
ãã¡ãã«ãããŸã ã
ã¯ããã«
誰ããã«ããŽãªãŒçè«ã«ã€ããŠèããããšããããšæããŸãã ããã¯ã¯ãŒã«ãªéã®åŒŸäžžã®çè«ã§ãããéåžžã«ç°ãªããã®ãäžæ§ã«èšè¿°ããããšãã§ãããšèããŸããã 颿°åããã°ã©ãã³ã°èšèªã§ç©æ¥µçã«äœ¿çšãããŠãããšèããŸããã äž»ã«ã«ããŽãªãŒçè«ã«åºã¥ãã
ããã°ã©ãã³ã°èšèªã
ã³ã³ãã¥ãŒã¿ãŒä»£æ°ã·ã¹ãã ã«ã€ããŠèããããšããã人ããããããããŸããã
ãã®ãããã¯ã«é¢ããå€ãã®æžç±ãèšäºãã€ã³ã¿ãŒãããäžã«ãããŸãã ããããéåžžã¯ãæ°åŠè
ãç§åŠããHaskellãMLã®ãããªå¥åŠãªããšã«åŸäºããITå°éå®¶ã«çŠç¹ãåœãŠãŠããŸãïŒç®è-ã«ã«ãã«ãã€ãã¹ãå
¥ããå¿
èŠã¯ãããŸãããéåžžãSaint Haskellã«èšåããåŸã¯ç¡é§ã§ãïŒã
ãŸããJavaScriptã䜿çšããŠäžåãã®ãã³ãæ¯æ¥æã«å
¥ããåçŽãªå€åãªåŽåè
ã«ãšã£ãŠãã«ããŽãªãŒçè«ã®å©ç¹ã¯ã»ãšãã©çè§£ãããŠããŸããã ãã®äžé£ã®èšäºãèªãã åŸãæç¢ºã«ãªããšã¯çŽæããŸããã ãããããã¹ãŠãããŸãããã°ãå€å䟿å©ãªããšãããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã§ãããã
ç§ã¯ããã«ãæ°åŠæè²ã§ã¯ãªãå·¥åŠãæã£ãŠãããšèŠåããŸãã ãããã£ãŠãèšäºã§å³å¯ãªå®çŸ©ãå®çã®èšŒæãªã©ãèŠããããšäºæ³ããå Žåãããã¯è¡šç€ºãããŸããã ããã©ãããããã¹ãŠã¯ãæã§ã説æãããŸãã äžæ£ç¢ºãªç¹ãããã°ãæžããŠãã ãããç§ã¯ããã€ãã®ç¹ã§ééã£ãŠãããããããŸããã
ã«ããŽãªãšã¯äœã§ããïŒ
ã«ããŽãªã¯ã次ã®ãã®ã«å¯ŸããŠå®çŸ©ãããã®ã§ãã
- ãªããžã§ã¯ãã®ã¯ã©ã¹
- ãªããžã§ã¯ãéã®å°ã®ã¯ã©ã¹ïŒç¢å°ïŒïŒããã«ãåãªããžã§ã¯ãã«ã¯åäžã®å°ããããŸãïŒ
- å°åœ±åææŒç®ã
- çµåçã§ãïŒ
ïŒhâgïŒâf = hâïŒgâfïŒ - åäžã®å°ãäžç«çãªèŠçŽ ã§ããå ŽåïŒ
fâid A = id Bâf = f
èšå·âã¯æã
çç¥ãããŸãïŒïŒh gïŒf = hïŒg fïŒ
ãŸããåæã®ä»£ããã«ãå°ã®é£çµãæã
䜿çšãããã®ã§ãåŒã§ã¯ãããã¯å³ãšåãé åºã«ãªããŸãïŒïŒf; gïŒ; h = f; ïŒg; hïŒãããããã®ãããªèšé²ã¯èŠãç®ã»ã©äŸ¿å©ã§ã¯ãªãããããŸãã§ãã æ¬¡ã®èšäºã®èŠçŽ ãæ€èšãããšãããã衚瀺ãããŸãã
äœãã®ã«ããŽãªãæ§ç¯ããã«ã¯ããããå¿
èŠã§ã
- ãã®ã«ããŽãªã«å«ãŸãããªããžã§ã¯ããšå°ãã©ã®ãããªãã®ã«ãªãããèããŸãã
- åäžã®å°ãå¿ããªãã§ãã ããã
- å°ã®åæã®æäœãæ§æãããã®ãèãåºãã
- çµæç©ã«å¿
èŠãªç¹æ§ãããããšã蚌æãã
- ...
- å©çã
圢æ
çŽ ã«ã¯ã1ã€ã®ãœãŒã¹ãš1ã€ã®ã¿ãŒã²ãããªããžã§ã¯ããå¿
èŠã§ãã 3ã€ä»¥äžã®ãªããžã§ã¯ããæ¥ç¶ããããšãããå®ã«æµ®ãã¶ãããšãã§ããŸããã ïŒ
髿¬¡ã®ã«ããŽãªã¯èæ
®ããŸãããïŒ
åææäœã¯ãäºææ§ã®ããå°ã«ã®ã¿é©çšã§ããŸãã å°ïŒfâAâBãgïŒBâCãhïŒCâDããããŸããæ§ægâfïŒãŸãã¯f; gïŒã¯èš±å®¹ãããŸãã ãŸããæ¬¡ã®æ§æã¯èš±å¯ãããŠããŸããïŒhâfãfâfãfâgã
次ã«ãã«ããŽãªã®äŸãèããŠã¿ãŸãããã åºæ¬çãªãããæ³åããŠãã ãããããã¯ã«ããŽãªãŒã§ãã æç€ºãããå Žåããã®èšäºã§æ°ãããã®ãèŠã€ããããšã¯ã»ãšãã©ãããŸããã ããåºæ¬çãªãã®ãèªãæ¹ãè¯ãã
ã°ã©ãã«ãã£ãŠçæãããç¡æã®ã«ããŽãªã®äŸ
åŒãç¶ãèªã¿ç¶ããå Žåã¯ãããçè§£ããããã«ããŽãªãäœæããããšããŸãã VKontakteããŒãžãšãåéã賌èªè
ã賌èªããŠãã人ã®ããŒãžãæç€ºããŸãããããã¯ãã¹ãŠãçŽæ¥æ¥ç¶ããŠããŸãã ããã¯
ãªããžã§ã¯ãã®ã¯ã©ã¹ã«ãªããŸã ïŒ
ãã©ããŒããŠããå
šå¡ã«å¯ŸããŠãããŒãžãããã®äººã®ããŒãžã«ç¢å°ãæããŸãã ããªãããã©ããŒããŠãããã¹ãŠã®äººã«å¯ŸããŠãèªåã®ããŒãžããããªãã®ããŒãžã«ç¢å°ãæããŸãã ãããŠããã¹ãŠã®åéã®ããã«ãäž¡æ¹åã«ç¢å°ãæããŸãïŒ
次ã«ãæ®ãã®ããŒãžã«ã€ããŠãåãããšãè¡ããŸãã
ãã人ãå¥ã®äººããµãã¹ã¯ã©ã€ãããå Žåãæåã®äººã¯2çªç®ã®äººãç¥ã£ãŠãããšæ³å®ããŸãã 2人ãäºãã«ãµãã¹ã¯ã©ã€ãããŠããå ŽåïŒå人ïŒã¯ããäºããç¥ã£ãŠããŸãã ã€ãŸã ãã®ã«ããŽãªã®
å°ã¯ããç¥ã£ãŠããããšããé¢ä¿ã§ãã
誰ããèªåèªèº«ãç¥ã£ãŠããŠã
åäžã®å°ãæã
ãšä»®å®ããŸãïŒ
å°ã®åæã®æäœã次ã®ããã«å®çŸ©ããŸãã
fãAãBãç¥ã£ãŠããããšã瀺ãå°ã§ãããgãBãCãç¥ã£ãŠããããšã瀺ãå°ã§ãããšãããgâfã¯Aã鿥çã«Cãç¥ã£ãŠããããšãæå³ããå°
ãããã£ãŠããã®ã«ããŽãªã®å°ã®ã¯ã©ã¹ã«ã¯ããç¥ã£ãŠããããšããé¢ä¿ã ãã§ãªããã鿥çã«ç¥ã£ãŠããããšããé¢ä¿ãå«ãŸããŸããäœæ²ã®åäœã®é¢é£æ§ã¯æããã§ãã AãBãç¥ã£ãŠãããCãç¥ã£ãŠããŠãDãç¥ã£ãŠããå Žåãããã§å°ãã°ã«ãŒãåããªãæ¹æ³ã¯ããšã«ããAã¯éæ¥çã«Dãç¥ã£ãŠããŸãã
åäžã®å°ã
åæã®äžç«çãªèŠçŽ ã§ããããšãæããã§ãã AãBãç¥ã£ãŠããå Žåãèªåèªèº«ãç¥ã£ãŠããŠãäœãå€ãããŸããã
ã°ã©ãã«ãã£ãŠçæãããç¡æã®ã«ããŽãªãäœæããŸãã ã äžæ¹ã§ã¯ããã®äŸã¯ãã©ã®ããã«ã«ããŽãªãããæ§ç¯ããæ¹æ³ã瀺ããŠããŸãã äžæ¹ãç¹å®ã®ã«ãŒã«ã«åŸã£ãŠã«ããŽãªãæ§ç¯ãããããšã瀺ããŠããŸãã
å
è¡äºçŽã®äŸ
åã®äŸã§ã¯ããªããžã§ã¯ããšå°ã¯æ¯èŒçåçŽã§ãããå
éšæ§é ãæ¬ ããŠãããšèããŠããŸãã
ããã§ããã¹ãŠã®ããŒãžïŒããªããšããªããæ¥ç¶ããŠãã人ã
ïŒã1ã€ã®ãªããžã§ã¯ãã§ãããšæ³åããŠãã ããã ä»ã®äººã«é¢é£ããå€ãã®ããŒãžã¯ç°ãªããªããžã§ã¯ããªã©ã§ãã
ãã®ã«ããŽãªã«ã¯ã©ã®ãããªå°ããããŸããïŒ
ããšãã°ããªã¬ãŒã·ã§ã³ããµãã»ãããã ãã¹ãŠã®å人ãå å
¥è
ãªã© å人Aãå¥ã®å å
¥è
ãªã©ã§ãã 人Bãæ¬¡ã«AããBãžã®å°ãæããŸãããã®å Žåãã«ããŽãªã§ãã
preorderãååŸããŸãã
ãŸãã¯ãããšãã°ãå°ãšããŠãããŒãžãåŒæ°ãšããŠåãåãããããã®ããŒãžãè¿ã颿°ã䜿çšã§ããŸãã ãã®å Žåãã»ããã®ã«ããŽãªãååŸããŸãã ã»ããã®ã«ããŽãªã«ã¯ãVKontakteããŒãžã®ã»ããã ãã§ãªãããã¹ãŠã®ã»ãããå«ãŸããŠãããããããæ£ç¢ºã«ã¯ããã®ãµãã«ããŽãªã§ãã
坿å³
æ€èšããäŸã§ã¯ãã«ããŽãªãæã€å³ãç¹å®ããŸããã ããããäžè¬çã«ããããã¯2ã€ã®ç°ãªããã®ã§ãã å³å¯ã«èšãã°ã
ãã€ã¢ã°ã©ã ã¯ãã¡ã³ã¯ã¿ãŒã§ãã ãããŸã§ã®ãšããããã¡ã³ã¯ã¿ãŒãšã¯äœã§ãæ§ããŸããã
以åã®
èšäºã® 1ã€ã§ãã¢ãã«ãšãã®è¡šèšæ³ïŒå³ãããã¹ã衚èšããŸãã¯ãã®ä»ïŒã2ã€ã®ç°ãªããã®ã§ããããšãæ¢ã«èª¬æããŸããã åæ§ã«ã«ããŽãªã
ããã§ã¯ããã€ã¢ã°ã©ã ã¯ããªããžã§ã¯ããããŒããšããŠè¡šãããå°ãããŒãéã®ç¢å°ãšããŠè¡šãããã«ããŽãªãã©ã°ã¡ã³ãã®äžçš®ã®èŠèŠç衚çŸã§ãããšä»®å®ããŸãã ãã ãããã€ã¢ã°ã©ã ã§ã¯ããã®ãã©ã°ã¡ã³ãã ãã§ãªããã«ããŽãªå
šäœã衚ãããšãã§ããŸãã 1ã€ä»¥äžã®ãªããžã§ã¯ããšå°ã®ã¿ãå«ãã«ããŽãªããããŸãã
ãã£ãŒãã¯ã坿ãŸãã¯é坿ã®å ŽåããããŸãã
坿å³ãšã¯ãä»»æã®ãªããžã§ã¯ãã®ãã¢ã«ã€ããŠãå°ã®åæã®çµæããããã®ãªããžã§ã¯ãéã®æ¹åãã¹ã®éžæã«äŸåããªãå³ã§ãã
å人çã«ã¯ããã€ã¢ã°ã©ã ãã©ã®ããã«é坿ã«ãªãããããã«ã¯çè§£ããŸããã§ããã äžèšã®ã°ã©ããšäºåäºçŽã«ãã£ãŠçæãããç¡æã®ã«ããŽãªã®äŸãèŠãŠãã ããã 2ã€ã®ãªããžã§ã¯ãéã«è€æ°ã®ãã¹ãããå Žåãããããã¹ãŠã®ãã¹ã¯æããã«åçã§ãã1ã€ã®ãªããžã§ã¯ãã§å§ãŸãã1ã€ã®ãªããžã§ã¯ãã§çµãããŸãã ãããã®ãã¹ã¯ã©ã®ããã«çãããªãã®ã§ããããïŒ
å®éãäºçŽæ³šæã§ã¯ãæå€§ã§1ã€ã®å°ããªããžã§ã¯ãAãããªããžã§ã¯ãBã«ç§»åã§ããŸãã ç¡æã®ã«ããŽãªã§ã¯ãäžå¯Ÿã®ãªããžã§ã¯ãéã«è€æ°ã®å°ãååšããå¯èœæ§ããããŸãïŒã³ã¡ã³ãã®èª¬æãåç
§ïŒãããã®äŸã§ã¯ãããã®å°ãåçã§ããããšã¯çŽèгçã«æããã§ãïŒãããã¯åžžã«AãçŽæ¥çãŸãã¯éæ¥çã«Bãç¥ã£ãŠãããšããäºå®ãåæ ããŠããŸããããããããšãã°ããªããžã§ã¯ãã®åããã¢éã®ã»ããã®ã«ããŽãªã«ã¯ãããã€ãã®å®å
šã«ç°ãªãå°ããããŸãã äŸãšããŠã2ã€ã®ãªããžã§ã¯ããš2ã€ã®å¹³è¡å°ãæã€éåžžã«åçŽãªå³ãèããŠã¿ãŸãããã 坿ã§ããïŒ

çåŒf = gãæãç«ã€å Žåã«ã®ã¿ã坿ã§ãã äžè¬ã«ãã«ããŽãªãŒçè«ã§ã¯ã坿å³ã¯æ¹çšåŒç³»ãæžã代ããã«ãã°ãã°äœ¿çšãããŸãã ãæ¬¡ã®çåŒãæãç«ã€ããšæžããŠããªã¹ãããããšãã§ããŸãã ãŸãã¯ããæ¬¡ã®å³ã¯å¯æã§ããããšèšè¿°ããé£ç«æ¹çšåŒã«å¯Ÿå¿ããå³ãæãããšãã§ããŸãã
ãã®å³ã®å¯ææ§ã¯ãæç»ããããªããžã§ã¯ããšå°ã®èåŸã«ããã»ãããšé¢æ°ã«äŸåããŸãã ãªããžã§ã¯ãAãæ°å€ã®ã»ããããªããžã§ã¯ãBã幟äœåŠçå³åœ¢ã®ã»ãããå°åœ±fã¯ããæ°å€ã«å¯ŸããŠãã®æ°å€ã«çããååŸã®åãè¿ã颿°ãå°åœ±gã¯ç¹å®ã®æ°å€ã«çãã蟺ã®é·ãã®æ£æ¹åœ¢ãè¿ã颿°ãšããŸããã®çªå·ã«ã æããã«ããããã®2ã€ã®é¢æ°ã¯çãããããŸãããã€ãŸãããã€ã¢ã°ã©ã ã¯å¯æã§ã¯ãããŸããã
1ã€ã®ã«ããŽãªã«æ°åã®ã»ãããšæ°åã®ã»ãããæ··åšããŠããããšãæ··åããªãã§ãã ããã åãã«ããŽãªã«ã¯ãå€ãã®VKontakteããŒãžãå€ãã®ã»ãããã°ã©ããã·ãŒã«ãªã©ããããŸãããããã¯ãã¹ãŠãã»ããã®1ã€ã®ã«ããŽãªã§ãã ããè©³çŽ°ã«æ€èšããŸãããæåã«ãœãŒã¹ã³ãŒãã«é¢ããå°ãäžè¬çãªæ
å ±ãæ€èšããŸãã
ãœãŒã¹ã³ãŒãã®äžè¬æ
å ±
ãœãŒã¹ã³ãŒãã¯
ããã«ãããèšäºã®äŸã¯
ãã¡ãã«ãã
ãŸã ã
ç§ã¯ãES6ããŸã èšçœ®ãããŠããããæšæºã©ã€ãã©ãªã«éåžžã®ã³ã¬ã¯ã·ã§ã³ããªãã£ã3幎åã«ã»ãšãã©ã®ã³ãŒããæžããããšãããã«èŠåããŸãã ãã®åŸãã»ãããå®è£
ããå¿
èŠããããŸããã ãããŠãäžè¬çã«ãã³ãŒãã¯ããããæé©ã«ç·šæãããŠããŸããã æ£çŽãªãšãããç§ã¯ãã¹ãŠãã¢ãžã¥ãŒã«ã«åè§£ããŠ
èšäºãèªã¿ãã«ããŽãªçè«ããã®ãã¹ãŠã®é«ãããã¯ããã«ç°¡åã«èŠããããšã«æ°ä»ããŸããã
Helpers.jsãã¡ã€ã«ã§ã¯ãä»ã®ãã«ããŒé¢æ°ãšãšãã«ãæ¡åŒµããã³çµå颿°ãå®çŸ©ãããŠããŸãã extend颿°ã¯é·ãéçºæãããŠããŸãããããã«ãããããã¯ã©ã¹ãå¥ã®ã¯ã©ã¹ããç¶æ¿ããããšãã§ããŸãã詳现ã«ã€ããŠã¯ã
ããã§èª¬æã
ãŸã ã å¯äžã®ããšã¯ãç§ã®å®è£
ã§ã¯ã¯ã©ã¹ã«äžçŽç©ã远å ã§ããããšã§ãã
äžçŽç©ã«ã€ããŠã®ãã®
èšäºãèªãããšã匷ããå§ãããŸãã
äžçŽç©ã¯ãµãã¯ã©ã¹ã®å·¥å ŽãšèŠãªãããES6ã§ã³ã³ãã¯ãã«èšè¿°ããæ¹æ³ã«ã€ããŠèª¬æããŠããŸãã
äžè¬çã«ãã¹ãŒããŒã¯ã©ã¹ãäºåã«ç¥ãããŠããªããããäžè¬çãªç¶æ¿ã®ã±ãŒã¹ãšããŠã®äžçŽç©ã®ãã¥ãŒã¯éåžžã«è峿·±ãã§ããå人çã«ã¯ãBabelãªã©ã«ç
©ããããããªãã®ã§ããœãŒã¹ã³ãŒãã¯ES5ã§æžãããŠãããããã2ã€ã®æ©èœãå¿
èŠã§ããã äžçŽç©ã¯ãextendãæã€ã¯ã©ã¹ãšããŠç¶æ¿ããããšã¯ã§ããŸãããcombinedã¡ãœããã䜿çšããŠã®ã¿æ··åã§ããŸãã
Category.jsãã¡ã€ã«ã¯ãç¹å®ã®ã«ããŽãªãç¶æ¿ããæœè±¡ã¯ã©ã¹ãcategoryããå®çŸ©ããŸãã ãŸããäžçŽç©ãå®å
šã«ããŽãªããšãå
±éåã«ããŽãªãããã³ãããã®æ··åç©ã忥µåã«ããŽãªããå®çŸ©ããŸãã 以äžã§æ€èšããã»ããã®ã«ããŽãªã¯ãåã³å極åã«ããŽãªã§ãããä»»æã®å極åã«ããŽãªãããã¯ã¹ãã§äœ¿çšã§ããæ±çšã¢ã«ãŽãªãºã ã§ãã JavaScriptã¯å€éç¶æ¿ããµããŒãããªãããããããã¯ç¹ã«äžçŽç©ãšããŠå®è£
ãããŸãã ããã«ãããããã¹ãŠã«ã€ããŠè©³ãã説æããŸãã
Set.jsãã¡ã€ã«ã¯ã1ïŒã»ããã®ã«ããŽãªã2ïŒã»ããèªäœã3ïŒé¢æ°ãããã³4ïŒã»ããã®ã«ããŽãªã®å¶éãå®çŸ©ããŸãã çè«çã«ã¯ãSetã¯ã©ã¹ã¯ES6ã®Setã«çœ®ãæããããšãã§ããŸãã 颿°ã¯ããããã
ã°ã©ãã®åœ¢åŒã§å®è£
ãã
ãŸã ã ãããã¯æç€ºçã«ä¿åããŸãïŒ
- å
¥åèŠçŽ ã®èš±å®¹ã»ãã-ãã¡ã€ã³ïŒå®çŸ©ã®ãã¡ã€ã³ïŒ;
- çµæã®èŠçŽ ã®èš±å®¹ã»ãã-ã³ãŒãåïŒå€ã®ç¯å²ïŒ;
- å€ãã®ãã¢ïŒå
¥åèŠçŽ ãšããã«å¯Ÿå¿ããçµæã®èŠçŽ ã
ãã¡ã€ã³ãšã³ãŒãã£ã³ã°ãã¡ã€ã³ã¯æç€ºçã«ä¿åãããããã2ã€ã®é¢æ°ã®æ§æãæå¹ãã©ããã確èªã§ããŸãã 1çªç®ã®é¢æ°ã®ãã¡ã€ã³ã2çªç®ã®é¢æ°ã®ã³ãŒãããŒã ãšäžèŽããå Žåã«ã®ã¿æå¹ã§ãã ãŸãããã¡ã€ã³ã¯ã颿°ãæ¬åœã«å®å
šã§ãããã
éšåçã«å®çŸ©ããã颿°ã§ãããã確èªããããã«äœ¿çš
ãããŸã ã ã³ãŒããèŠããšãåæ§ã®ãã§ãã¯ïŒã¢ãµãŒãåŒã³åºãïŒããããããããŸãã
颿°ãã°ã©ãã§ã¯ãªã颿°ã®åœ¢åŒã§æ£ç¢ºã«æ ŒçŽããããšã¯ããããå¯èœã§ãããããã¯ãŸã äžå¯æ¬ ã§ã¯ãããŸããã
SetCategoryView.jsãã¡ã€ã«ã§ãd3ã«åºã¥ãã»ããã®ã«ããŽãªã®ã°ã©ãæç»ã èšäºã®ã»ãšãã©ãã¹ãŠã®å³ã¯ããã®å©ããåããŠæãããŠããŸãã ãšããã§ãd3ã®4çªç®ã®ããŒãžã§ã³ã§ã¯ãForce Layoutãæ¹åãããããã§ä»»æã®åãåå¥ã«æ±ºå®ã§ããããã«ãªããŸããã ééã£ãŠããªãå Žåã¯ãsvgã®ã¿ã§æ©èœããåã«ãã©ãã°ã¢ã³ããããããæ¹åããŸãããçŸåšãcanvasã§ç°¡åã«ãµããŒããããŠããŸãã ãã®å³ã§ã¯ãçè«çã«è峿·±ããã®ãèŠã€ããããšãã§ããŸãããå®å
šãªãªãã¡ã¯ã¿ãªã³ã°ãå¿
èŠã§ãã
Set.htmlãã¡ã€ã«ã«ã¯ããã®èšäºã®ãã¹ãŠã®äŸãå«ãŸããŠããŸãã
ã«ããŽãªã®å®è£
ãèšå®ãã
次ã«ãã»ããã®ã«ããŽãªããã®ããŸããŸãªæ§æãšãããããã³ãŒãã§ã©ã®ããã«å®è£
ããããã説æããŸãã ããèªäœã¯ã次ã®ãã¡ã¯ããªãšããŠå®è£
ãããŸãã
function SetCategory() { } extend(SetCategory, Category, BicompleteCategory); SetCategory.prototype.object = function (elements) { return new Set(elements); }; SetCategory.prototype.morphism = function (A, B, mapping) { return new TotalFunction(A, B, mapping); }; SetCategory.prototype.id = function (A) { return this.morphism(A, A).initId(); }; SetCategory.prototype.compose = function (g, f) { return g.compose(f); };
ã»ããã®ã«ããŽãªã¯æœè±¡ã«ããŽãªããç¶æ¿ããã忥µåã«ããŽãªã®åäœã¯ãããšæ··åãããŸãã
ãã®ãã¡ã¯ããªã§ã¯ãäœæããããšãã§ããŸã
- ãªããžã§ã¯ãïŒã»ããïŒ;
- ã¢ãŒãã£ãºã ïŒã»ããAã®èŠçŽ ãã»ããBã®èŠçŽ ã«ãããã³ã°ãã颿°ïŒ;
- åäžã®å°ïŒããã€ãã®ã»ããAã®ããèªäœãžã®åäžã®ãããã³ã°ã§ãïŒ;
- 2ã€ã®å°ã®åæã
æ£çŽãªãšãããã«ããŽãªãå·¥å Žã«ãã¹ãçç±ãããã«ã¯çè§£ããŠããŸããã§ããã èšããã»ããããªã¹ããã¹ã¿ãã¯ãããªãŒãã°ã©ããããã³ãã®ä»ã®æ§é ã¯éåžžããããã®ãã¹ãŠã®èŠçŽ ãæç€ºçã«ä¿åããŸãã ã«ããŽãªã¯åæ§ã®æ°åŠçæ§é ã«äŒŒãŠããŸããããªãå®è£
ãç°ãªãã®ã§ããïŒ ã«ããŽãªããã®ãªããžã§ã¯ããšã¢ãŒãã£ãºã ã®ãªããžããªãšããŠå®è£
ããããšãäžå¯èœãªã®ã¯ãªãã§ããïŒ äžè¬çãªå Žåãã«ããŽãªã«ã¯ç¡éã®æ°ã®ãªããžã§ã¯ããšå°ãå«ãŸããŠããããã§ãã ããã«ããããã®ãã¡ãå¿
èŠãªãã®ã¯ãããã§ãã ãããŠããããã¯ããããã«åºã¥ããŠæ°ãããªããžã§ã¯ããšã¢ãŒãã£ãºã ãæ§ç¯ããããã«ä¿åããå¿
èŠã¯ãããŸããã
ããã€ãã®ãªããžã§ã¯ããšå°ãäœæããŸãããïŒ
var setCat = new SetCategory(); var obj123 = setCat.object([1,2,3]); var objAB = setCat.object(['a','b']); var objABCD = setCat.object(['a','b','c','d']); var f = setCat.morphism(obj123, objABCD, {1: 'c', 2: 'c', 3: 'd'}); var g = setCat.morphism(objABCD, objAB, {'a': 'a', 'b': 'b'}); var h = setCat.morphism(objAB, obj123, {'a': 1, 'b': 1}); showSetCategoryView('diagram1', setCat, {'A': obj123, 'B': objABCD, 'C': objAB}, {'f': {dom: 'A', codom: 'B', morphism: f}, 'g': {dom: 'B', codom: 'C', morphism: g}, 'h': {dom: 'C', codom: 'A', morphism: h}});
å®è¡å¯èœãªJavaScriptã³ãŒããèšäºã«æ¿å
¥ã§ããªãã®ã¯æ®å¿µã§ãã ãããã£ãŠãåçãæ¿å
¥ããå¿
èŠããããŸããã
ããã§ãã¹ãŠãç§»åã§ããããšãç¹°ãè¿ã
ãŸã ã
ãšãã¢ã«ãã£ãºã ãååãåå
ããŠããªããžã§ã¯ããã¢ãŒãã£ãºã ãäœæããããããçŸããæãããšãã§ããŸãã æ¬¡ã¯ïŒ
ãªããžã§ã¯ããšå°ã¯ããŸããŸãªããããã£ãæã€ããšãã§ããã«ããŽãªçè«ã®éèŠãªéšåã¯ãããã®ããããã£ã®èª¬æãšç ç©¶ã«å°å¿µããŠããŸãã ã«ããŽãªçè«ã®å®è£
ã§ã¯ããããã®ããããã£ãæ€èšŒã§ããç¹å®ã®ããããã£ãæã€ãªããžã§ã¯ããšã¢ãŒãã£ãºã ãæ§ç¯ã§ããå¿
èŠããããŸãã æãåçŽãªããããã£ããå§ããŸãããã
ã»ããã®ã«ããŽãªå
ã®å°ã¯é¢æ°ã§ãããšããããšãæãåºãããŠãã ããã åŠæ ¡ãããããªãã¯ãããããæ©èœãå°åœ±ã泚å°ãå
šåå°ã§ããããšãèŠããŠããŸãã å³å¯ãªå®çŸ©ã¯ãªãããã¹ãŠãæã§èª¬æããããšãçŽæããŸããã
Surjectionã¯ãå€ã®ç¯å²ãããã¹ãŠã®å€ãååŸãã颿°ã§ãã æŽæ°ã®ã»ããã§å®çŸ©ããã2ä¹é¢æ°ã¯ã2ã3ã5ã...ã®å€ããšããªããããå°åœ±ã§ã¯ãããŸããã
ã€ã³ãžã§ã¯ã·ã§ã³ã¯ãå
ã®ã»ããã®ããŸããŸãªèŠçŽ ãçµæã»ããã®ããŸããŸãªèŠçŽ ã«ãããã³ã°ãã颿°ã§ãã ããã«ã颿°ã®å€ã®ç¯å²ã«ã¯ãå®çŸ©é åã«ãããã¿ã€ããæããªã远å ã®èŠçŽ ãå«ãŸããå ŽåããããŸãã
å
šåå°ã¯1察1ã®ãããã³ã°ã§ãã 颿°ã¯ãå
šå°ãšå°åºã®äž¡æ¹ã§ããå Žåã«ã®ã¿ãå
šåå°ã§ãã
ä»ã®æ°åŠçãªããžã§ã¯ãïŒã°ã©ããªã©ïŒã«ã¯ãå°åœ±ãå°åœ±ãå
šå°ã®é¡äŒŒç©ãããã€ããããŸãã ãããã£ãŠãã«ããŽãªã®çè«ã§ã¯ããã®çè«ã¯ãã¹ãŠã«é¢ãããã®ã§ããããããããã®æŠå¿µãäžè¬åããããšã決å®ãããããããšãã¢ãŒãã£ãºã ãã¢ãã¢ãŒãã£ãºã ãããã³ã¢ã€ãœã¢ãŒãã£ãºã ãå°å
¥ããŸããã
ãã®äžè¬åãšã¯äœã§ããïŒ ã«ããŽãªãŒçè«ã§ã¯ããªããžã§ã¯ããšå°ã®å
éšæ§é ããå®å
šã«æœè±¡åãããŠãããšããäºå®ã äžèšã®å³ã§è¡ãããŠããããã«ããããã®ã¿ã€ãã®å°ãåãšç¢å°ã§å®çŸ©ãã代ããã«ãä»ã®å°ãšã®é¢ä¿ã§å®çŸ©ãããŸãããšãã¢ã«ãã£ãºã ã¯ãeâAâBã§ãããçåŒfâe = gâeã¯f = gãæå³ããŸãïŒèšãæãããšãå³åŽã®eã«ççž®ã§ããŸãïŒã
屿©ã«whatããŠãããã®ãæç¢ºã«ããããã«ãNOTãšãã¢ãŒãã£ãºã ã®äŸã瀺ããŸãã
äžã®å³ã¯å¯æã§ãïŒfâh = gâhïŒã ããã確å®ã«ããããã«ãã»ããAã®åèŠçŽ ããç¢å°ããã©ãããšãã§ããéžæããããã¹ã«é¢ä¿ãªããåžžã«ã»ããCã®åãèŠçŽ ã«å°éããŸãã åãåŒæ°ã«å¯Ÿãã颿°fâhããã³gâhã¯ãåãçµæãè¿ããŸãã ãããïŒïŒïŒé¢æ°fãšgã®ç䟡æ§ã¯ããããã¯ç¶ããŸããã èŠçŽ ã1ãã®å Žåãç°ãªãå€ãaããšãbããè¿ããŸãã ãããã颿°hããšãã¢ã«ãã£ãºã ã§ããå Žåãfãšgã®çåŒã¯å³ã®å¯ææ§ããåŸãããŸãã
ããã«ããåãéãç¢å°ã«ããé·ç§»ããªã©ã®è©³çްã¯èª¬æããŸããããã»ããã®ã«ããŽãªã§å¯æå³ã«ã€ããŠè©±ããŠãããšãã¯ããã®å¯ææ§ãåžžã«ãã®æ¹æ³ã§ãã§ãã¯ã§ããããšã«æ³šæããŠãã ããã
ç¹°ãè¿ããŸãããåå°é¢æ°ã¯ä»ã®é¢æ°ãšã®é¢ä¿ãéããŠã®ã¿èšè¿°ããããããã®å
éšæ§é ã®è©³çްããå®å
šã«æœè±¡åãããŠããããšã«æ³šæããŠãã ããã ãããã«ããŽãªãŒçè«ã®æ¬è³ªã§ããåçžæ§ã¯ãm = AâBã®ãããªmâf = mâgã§ãããããf = gã«åŸãïŒã€ãŸããå·ŠåŽã®mã§çç¥ã§ããïŒå°åã§ãã
ååãšã¯ãéãååšããåfïŒAâBã§ãã å°gïŒBâAãååšããfâg = id
Bããã³gâf = id
Aã§ããããã§ãã¡ãã£ãšããé©ãããããŸãã ãã¹ãŠã®ã«ããŽãªã§ã¯ãããŸããããå°ããšãã¢ã«ãã£ãºã ã§ãããåçžã§ãããšããäºå®ã¯ãååã§ããããšãæå³ããŸãã ããã¯ãã»ããã®ã«ããŽãªã¯ç¢ºãã«ããã€ãã®æŠå¿µãèŠèŠåããã®ã«é©ããŠããŸããã誀ã£ã顿šã«ã€ãªããå¯èœæ§ãããããšã瀺ããŠããŸãã
çµäºãéå§ãããã³ãã«ãªããžã§ã¯ã
æåŸã®ãªããžã§ã¯ãã¯ãªããžã§ã¯ãTã§ãããä»»æã®ãªããžã§ã¯ãXã«å¯ŸããŠäžæã®å°uïŒXâTãååšããŸãã
ã»ããã®ã«ããŽãªã§ã¯ãæçµãªããžã§ã¯ãã¯ã·ã³ã°ã«ãã³ã§ãããäžæã®ã¢ã«ãã£ãºã ã¯ãå
ã®ã»ããã®èŠçŽ ãã·ã³ã°ã«ãã³ã®åäžèŠçŽ ã«ãããã³ã°ãã颿°ã§ãã ã»ããã®ã«ããŽãªã«ã¯ç¡éã®æ°ã®çµç«¯ãªããžã§ã¯ãããããŸããããããã¯ãã¹ãŠäºãã«ååã§ãã ããã¯ãã«ããŽãªçè«ã®èгç¹ããã¯ãã©ã®ã·ã³ã°ã«ãã³ãåé¡ã§ãããã¯éèŠã§ã¯ãªããååã«è³ããŸã§ã®1ã€ã«åœãŠã¯ãŸããã¹ãŠãä»ã®ã·ã³ã°ã«ãã³ã«ãåœãŠã¯ãŸãããšãæå³ããŸãã
åæãªããžã§ã¯ãã¯ãªããžã§ã¯ãIã§ãããä»»æã®ãªããžã§ã¯ãXã«å¯ŸããŠäžæã®å°uïŒIâXããããŸãã
ã»ããã®ã«ããŽãªã§ã¯ãåæãªããžã§ã¯ãã¯ç©ºã®ã»ããã§ããã空ã®ã»ããã§å®çŸ©ãããäžæã®ã¢ã«ãã¶ã€ã ã¯ç©ºã®é¢æ°ã§ãã ããã«ãã»ããã®ã«ããŽãªã«ã¯ããããåäžã®ç©ºã®ã»ããããããåäžã®åæãªããžã§ã¯ãããããŸãã
nullãªããžã§ã¯ãã¯ãéå§ãªããžã§ã¯ããšçµäºãªããžã§ã¯ãã®äž¡æ¹ã§ãããªããžã§ã¯ãã§ãã
ã»ããã®ã«ããŽãªã«ãŒããªããžã§ã¯ãã¯ãããŸããã ã»ãããåæã«ç©ºã«ããŠã·ã³ã°ã«ãã³ã«ããããšã¯ã§ããŸããã
ããã€ãã®éèŠãªç¹ã«æ³šæããŠãã ããã
åæãªããžã§ã¯ããšæçµãªããžã§ã¯ãã¯äºéã®æŠå¿µã§ããããããã¯å°ã®æ¹åã®å転ãŸã§åçã§ãã æåã®ãªããžã§ã¯ãã¯ããã¥ã¢ã«ã«ããŽãªã®æåŸã®ãªããžã§ã¯ãã«ãªããŸãïŒåããªããžã§ã¯ããšåææäœãæã€ã«ããŽãªã§ãããå°ã¯å察æ¹åã«åããããŸãïŒã å察æ§ãŸãã¯å察æ§ã®æŠå¿µã¯ãã«ããŽãªãŒçè«ã«ãããŠéåžžã«éèŠã§ãã 以äžã«ããã¥ã¢ã«ã³ã³ã»ããã®äŸãããã€ã瀺ããŸããã¡ãªã¿ã«ãæéãªããžã§ã¯ãã¯conachãåæãªããžã§ã¯ã-konechnyãšåŒã°ããŸãããããã§ã¯ã1ã€ã®
æ ¹æ¬çã«æ°ããããã°ã©ãã³ã°èšèªã®åéã«ãã§ã«åé¡ãããŠããŸãã æŠå¿µã«æ¥é èŸãco-ãã远å ãŸãã¯åé€ãããšãäºéã®æŠå¿µãåŸãããŸãã ã«ããŽãªçè«ã®å°éå®¶ã¯ãåæã®ãªããžã§ã¯ãã«ã€ããŠè©±ããŠããããšãçè§£ããå¿
èŠããããŸãããç§ã¯kokonechnyeãªããžã§ã¯ãã«äŒããŸããã§ããã
äžèšã®å®çŸ©ã¯ãæçµãªããžã§ã¯ãããå°ãããå°ã«ã€ããŠã¯äœãèšã£ãŠããŸããã ãããŠãããã¯ååšããŸãã ããšãã°ãã¢ã«ãã£ãºã fïŒ{1}â{1,2,3,4}ãšã°ã©ã{ïŒ1,1ïŒ}ããŸãã¯ã¢ã«ãã£ãºã gãšåãã·ã°ããã£ã§ã°ã©ã{ïŒ1,2ïŒ}ã ã€ãŸã ãããã¯ååšããã ãã§ãªãããŠããŒã¯ã§ããªããããå°æ¥ãèŠæ®ããŠããªãéèŠãªåœ¹å²ãæãããŸãã ãããã£ãŠãå°ããããã«ã®ã¿åããããŠãããªããžã§ã¯ããšããŠã®æéãªããžã§ã¯ãã®æŠå¿µã¯çå®ã§ã¯ãããŸããã

æåã®ãªããžã§ã¯ãã«åããããå°ã«ã€ããŠã¯ãäœãèšããŸããã ã»ããã®ã«ããŽãªã§ã¯ããããã¯ååšããªããã空ã®äžæã®é¢æ°ã§ãããšæ³å®ããŠããŸãã ååãšããŠããªã1ã€ã§ã¯ãããŸããã ãããããã®åŸãåã»ããã¯ç©ºã®ã»ãããšååã«ãªããŸãã 誰ãããã®ç¹ãæç¢ºã«ã§ããã°ãããã¯çŽ æŽãããããšã§ãã
ãŠãããŒãµã«ããããã£ãšæãéèŠãªãã€ã³ã
äžèšã®å®çŸ©ã®ã...å°ã¯1ã€ã ãã§ã...ããšãããã¬ãŒãºã«æ³šæããŠãã ããã ããã¯äžè¬çã«ã«ããŽãªãŒçè«ã®ç ç©¶ã§èŠãããŸãã ããã¯ã
ãŠãããŒãµã«ãããã㣠ããšåŒã°ã
ãŸã ã
ãŠãããŒãµã«ããããã£ã䜿çšãããšã詳现ããæœè±¡åããŠæŠå¿µãå®çŸ©ã§ããŸãã éå§ãªããžã§ã¯ããšçµäºãªããžã§ã¯ãã¯ã空ã®ã»ãããã·ã³ã°ã«ãã³ãã¯ããããã³äžè¬çã«ã¯ãã¹ãŠã®æ§é ã«èšåããã«å®çŸ©ãããŠããããšãããããŸãã ããŠãããã¯æ¬åœã®æœè±¡åã§ãïŒ éçºè
åãã®ã«ããŽãªãŒçè«ã®ã¬ã€ãã§ã¯ã
ãã«ã«ãã®éããã«ããŽãªãŒã
ã¢ããã§ã¯ãªããäž»ã«ãã®ãããªããšã«ã€ããŠè©±ãå¿
èŠããããšæããŸãã
èšãæããã°ãã«ããŽãªãŒçè«ã§ã¯ããªããžã§ã¯ããå
éšå®è£
ã®èª¬æã§ã¯ãªããå€éšåäœã®èª¬æãä»ã®ãªããžã§ã¯ããšã©ã®ããã«ãçžäºäœçšãããããšãã§ããããã«çŠç¹ãåœãŠãŠãªããžã§ã¯ããå®çŸ©ããŸãã 確ãã«ãããã°ã©ãã³ã°èšèªã§éåžžè¡ãããŠããããšãšã¯å°ãç°ãªããŸããããã®ã«ããŽãªã®çè«ã¯è峿·±ããã®ã§ãã
詳现ããã®æœè±¡åã«ããããŠãããŒãµã«ããããã£ã¯ååãŸã§ã®ãªããžã§ã¯ããå®çŸ©ããŸãã ã»ããã®ã«ããŽãªã§ã¯ããã¹ãŠã®æéãªããžã§ã¯ãïŒã·ã³ã°ã«ãã³ïŒãååã§ããããšãæ¢ã«è¿°ã¹ãŸããã ããããããã¯ããŠãããŒãµã«ããããã£ãä»ããŠå®çŸ©ããããªããžã§ã¯ãã«ã¯åœãŠã¯ãŸããŸãã ååãšããŠãããã¯éåžžã«è«ççã§ãã2ã€ã®ãªããžã§ã¯ããå€éšã§åãããã«ãæ¯ãèããå ŽåïŒãããã¯åãæ®éçãªç¹æ§ãæã£ãŠããŸãïŒããããã¯ååã§ãã
ãããŠãããããããã®äžé£ã®èšäºå
šäœã®æãéèŠãªãã€ã³ãã§ãã éåžžããŠãããŒãµã«ããããã£ã«ã¯æé©åã¿ã¹ã¯ããããŸããããã¯ãããæå³ã§æé©ãªãªããžã§ã¯ããŸãã¯å°ãèŠã€ããããšã§ãã ã€ã³ã©ã€ã¶ãŒã®ã»ã¯ã·ã§ã³ã§ããã«æ»ããŸããæçµãªããžã§ã¯ããšåæãªããžã§ã¯ãã®å®è£
çè«ãå€ãããã®ã§ãæéãªããžã§ã¯ããšåæãªããžã§ã¯ããã©ã®ããã«ã³ãŒãã«å®è£
ãããŠããããèŠãŠã¿ãŸãããã SetCategory.prototype.terminal = function () { return new SetTerminalObject(this).calculate(); }; function SetTerminalObject(cat) { this.cat = function () { return cat; }; } SetTerminalObject.prototype.calculate = function () { this.obj = new Set([1]); return this; } SetTerminalObject.prototype.univ = function (A) { var mapping = {}; A.forEach(function (el) { mapping[el] = 1; }); return this.cat().morphism(A, this.obj, mapping); } SetCategory.prototype.initial = function () { return new SetInitialObject(this).calculate(); }; function SetInitialObject(cat) { this.cat = function () { return cat; }; } SetInitialObject.prototype.calculate = function () { this.obj = new Set(); return this; } SetInitialObject.prototype.univ = function (A) { return this.cat().morphism(this.obj, A, {}); }
ããªãã¯è³ªåããããããããŸããïŒãªãã·ã³ã°ã«ãã³ãšEMPTYã»ãããå®è£
ããã®ã«ãããªã«å€ãã®ã³ãŒããããã®ã§ããïŒ
æçµãªããžã§ã¯ããšåæãªããžã§ã¯ãã¯ãåãªãã»ããã§ã¯ãããŸããã æ®éçãªç¹æ§ã¯ããããã®ããã«ãŸã æºããããªããã°ãªããŸãããããã¯ãããããã®çè«çç¹æ§ãæã¡ãŸããããèšç®ã§ç©æ¥µçã«äœ¿çšãããŸãã ããšãã°ãã³ãŒãã«ãŒãã®æ£æ¹åœ¢ã®è£æ°ãèšç®ããå Žåããªããžã§ã¯ãã®åèšã®æ®éå°ãèšç®ãããŸãã ããã«ã€ããŠã¯åŸã§èª¬æããŸãã
å®è£
ã§ã¯ããŠãããŒãµã«ããããã£ãæã€æ§é äœã«ã¡ãœããããããŸãã
- èšç®-ãŠãããŒãµã«æ§é ãäœæããããä»ã®æ§é ããçµã¿ç«ãŠãŸãã
- è£å®-ããŸãäžè¬çã§ã¯ãªãã³ã³ããŒãã³ããããŠãããŒãµã«ãã¶ã€ã³ãäœæãã
- univ-äžããããæ§é ã®æ®éå°ãèšç®ããŸãã
ä»äº
æã®å³å¯ã§ãªãå®çŸ©ãç¶ç¶ããå°ãè€éãªãªããžã§ã¯ããæ€èšããŸãã
ãªããžã§ã¯ãX
jã®ç©ã¯ãªããžã§ã¯ãXãšå°åœ±ÏjïŒæ£æºå°åœ±ãšåŒã°ããXâX
jã§ãããä»»æã®ãªããžã§ã¯ãYãšå°åœ±f
j ïŒYâX
jã«å¯ŸããŠäžæã®å°åœ±uïŒYâXãååšããÏj âu = f
j ã
ã«ããŽãªçè«ã§ã¯ãÏjâu = f
jã®åœ¢åŒã®çåŒãæžã代ããã«ãåæ§ã®å³ãæããããã坿ã§ãããšèšãããšãã§ããŸãïŒ2ã€ã®ãªããžã§ã¯ãã®äŸã§ãããäžè¬çãªå Žåã¯ãã£ãšãããŸãïŒïŒ
ã»ããã®ã«ããŽãªã§ã¯ããªããžã§ã¯ãã®ç©ã¯ã»ããã®ãã«ã«ãç©ã§ãã
å³ã§ã¯ã補åã¯AxBãšããŠç€ºããããã®èŠçŽ ã¯å
ã®ã»ããã®èŠçŽ ã®ãã¢ãšããŠç€ºãããŠããŸãã ããããããã¯æç¢ºã«ããããã«è¡ããã絶察ã«å¿
èŠã§ã¯ãããŸããïŒ äœåã¯äœã§ãåŒã¶ããšãã§ããŸããããã®èŠçŽ ã¯
- 1ã2ã3ã...
- æ£æ¹åœ¢ãåãäžè§åœ¢ã...
- ãŸãã¯äœã§ãã
ç©ã¯ãå€ã®ãã¢ã®ã»ãããšããŠã§ã¯ãªããå°ã®é¢ä¿ãéããŠå®çŸ©ãããŸãã éåã®ãã«ã«ãç©ãšã«ããŽãªãŒçè«ã®ãªããžã§ã¯ãã®ç©ã®å®çŸ©ãæ¯èŒããŸãâå
±éç¹ã¯ãããŸããã ã«ããŽãªçè«ã®è©³çްããæœè±¡åããäŸãåã³è¡šç€ºãããŸããã³ãŒãã§ã¯ãäœæ¥ã¯æ¬¡ã®ããã«å®è£
ãããŸãã SetCategory.prototype.product = function (A, B) { return new SetProduct(this).calculate(A, B); }; function SetProduct(cat) { this.cat = function () { return cat; }; } SetProduct.prototype.calculate = function (A, B) { var obj = new Set(); var mapping1 = {}; var mapping2 = {}; A.forEach(function (x) { B.forEach(function (y) { var z = [x, y].toString(); obj.add(z); mapping1[z] = x; mapping2[z] = y; }); }); this.obj = obj; this.f = this.cat().morphism(this.obj, A, mapping1); this.g = this.cat().morphism(this.obj, B, mapping2); return this; }; SetProduct.prototype.univ = function(m, n) { assertEqualDom(m, n); assertEqualCodom(this.f, m); assertEqualCodom(this.g, n); var obj = m.dom(); var mapping = {}; obj.forEach(function (x) { var s1 = this.f.preimage(m.image(x)); var s2 = this.g.preimage(n.image(x)); mapping[x] = s1.intersection(s2).representative(); }.bind(this)); var u = this.cat().morphism(obj, this.obj, mapping); assertCommutes(this.f.compose(u), m); assertCommutes(this.g.compose(u), n); return u; };
èšç®é¢æ°ã¯ãéåã®ãã«ã«ãç©ã ãã§ãªãã2ã€ã®å°ïŒå
ã®ãªããžã§ã¯ãäžã®ç©ã®æ£æºæåœ±ïŒãèšç®ããããšã«æ³šæããŠãã ããã ã»ãšãã©ã®èšç®ã§ã¯ãäž»ãªåœ¹å²ãæããã®ã¯åœŒãã§ããã倧ãŸãã«èšãã°ã圌ãã¯å€ãã®äººãããã¯ããã«éèŠã§ãã
univ颿°ã¯ãäžéšã®ãªããžã§ã¯ããšäžå¯Ÿã®å°ã«ã€ããŠãæ®éå°ïŒäžå³ã®u-ïŒãèšç®ããŸãã äœåã®æ®éçãªåœ¢æ
ãã©ã®ããã«åœ¹ç«ã€ããèŠãŠã¿ãŸãããã
次ã®å³ã§ã¯ããªããžã§ã¯ãAãšBããããã®ç©AxBãããã³ã¢ã«ãã£ãºã f
1ãšf
2ãæã€ä»»æã®ãªããžã§ã¯ãCã衚瀺ãããŠããŸãã
ã»ããCã®èŠçŽ ã1ããã»ããAã®èŠçŽ ã1ããšã»ããBã®èŠçŽ ãaãã«ãããã³ã°ãããŠããããšãããããŸããã»ããAxBã®èŠçŽ ã1ããšåæ§ã§ãã æ®éå°ã®èšç®ã§ã¯ããã®äºå®ã確ç«ããéåCã®èŠçŽ ã1ããéåAxBã®èŠçŽ ã1ãaãã«ãããã³ã°ããããã«ãæ®éå°ãæ§ç¯ããŸãã
éåCã®èŠçŽ ã4ããšã5ãã¯ãå°f
1ãšf
2ã«ãã£ãŠåãèŠçŽ ã«ãããã³ã°ãããŸãã ãããã£ãŠãæ®éå°ã¯ãããããéåAxBã®ã2ãbãã®1ã€ã®èŠçŽ ã«ãããã³ã°ããŸãã
æç¢ºã«ããããã«ãCãããããã®ç¿ã ãšæ³åããŠãã ããã f
1åç¿ã¯ãçŸãããŸãã¯beautifulãã«ããŽãªã®ããããã«å±ããf
2-ã¹ããŒããŸãã¯æããªã«ããŽãªã®ããããã«å±ããŸãã æ¬¡ã«ãæ®éçãªå°åœ±uã¯ãåç¿ã4ã€ã®ã«ããŽãªã®ããããã«å²ãåœãŠãŸãïŒçŸãããšã¹ããŒããçŸãããšæããstããšã¹ããŒãããšæãã
å®éã補åã®æ®éå°ã¯å°ã®çæç©ã§ãã
ããŸããŸãªåœ¢åŒã®äœæ¥ã¯ãããŸããŸãªããã°ã©ãã³ã°èšèªã§å®è£
ãããŠããŸãã ãããã¯ãæ§é ãã¿ãã«ãããã³SQLãLINQãªã©ã®ããããçš®é¡ã®çµåã§ãã
types-worksã«ã€ããŠèªãã§ãã ããã
JavaScriptã§ã¯ãäœåã®æšæºçãªæåœ±ã¯ãã¹ãã©ã¯ã¿ãŸãã¯ã¢ã¯ã»ãµãšèŠãªãããšãã§ããŸãã
monkeyKind.a monkeyKind.b
ã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠã®æ®éå°ïŒ
function u(x) { return { a : isBeautiful(x), b : isSmart(x) }; }
ã«ããŽãªçè«ã§ã¯ãã¢ã¯ã»ããµã¯ãã¹ãã©ã¯ã¿ãšåŒã°ããããšããããããŸããããã¯ãè€éãªãªããžã§ã¯ããæ§æèŠçŽ ã«è§£æã§ããããããã¶ã€ããšéè€ããŠããŸãã ãã®ãããªãã¹ãã©ã¯ã¿ãåŒã³åºãå Žåããªããžã§ã¯ãããŸã£ããç Žæ£ããå¿
èŠã¯ãããŸããã
éé¡
ãªããžã§ã¯ãX
jã®åèšã¯ããªããžã§ã¯ãXãšå°åœ±i
j ïŒX
j âXã§ãããæ£æºåã蟌ã¿ãšåŒã°ããä»»æã®ãªããžã§ã¯ãYãšå°åœ±f
j ïŒX
j âYã«å¯ŸããŠãu X X i
j = f
j ã
2ã€ã®ãªããžã§ã¯ãã®å¯æå³ã®äŸïŒ
ã»ããã®ã«ããŽãªã§ã¯ããªããžã§ã¯ãã®åèšã¯ã»ããã®éžèšççµåã§ãã ã€ãŸã çµåãããã»ããã«äžèŽãããªããžã§ã¯ããããå Žåããããã®ãªããžã§ã¯ãã¯ããŒãžãããŸãããã倧ãŸãã«èšãã°ãåãªããžã§ã¯ããã©ã®ã»ããããã®ãã®ã§ããããçè§£ã§ããããã«ãäœããã®æ¹æ³ã§ããŒã¯ãããŸãã
éåè«ã§ã¯ãéžèšçåéåã®èŠçŽ ã¯éåžžãããšãã°1
A ã2
A ã3
A ãa
B ãb
Bãªã©ãããã€ãã®ã¿ã°ãŸãã¯ã€ã³ããã¯ã¹ã§ããŒã¯ãããŸã
ã ãããããã®äŸã§ã¯ãåèšã®èŠçŽ ã¯1ã5ã®åçŽãªæ°åã§ãããå°åœ±fãšgã«ãã£ãŠå
ã®ã»ããã®èŠçŽ ã«é¢é£ä»ããããŠããŸãã ãããŠãåã®èŠçŽ ããã©ãã«ä»ããããã®ã¯ãŸãã«ãããã®å°ã§ããã äœåã«é¢ããŠã¯ãå°ã®ãªãéåèªäœã¯ç¹å¥ãªåœ¹å²ãæãããŸããã
æããã«ãç©ãšåèšã¯äºéã®æŠå¿µã§ãã ãããã¯ãå°ã®å転ãŸã§åæ§ã«å®åŒåãããŸãã
ããããäžè¬åã¯ããã§çµãããŸããã 補åãšéã¯ãããããæçµãªããžã§ã¯ããšåæãªããžã§ã¯ãã«éåžžã«äŒŒãŠããŸãã äœåããã³æéãªããžã§ã¯ãã®å Žåãç¹å®ã®æ¡ä»¶ãæºããã«ããŽãªã®
åãªããžã§ã¯ã
ããæ®éå
ãäœæããããšãã§ããŸã-ãã®ãããªæ§æã¯
å¶éãšåŒã°ã
ãŸã ã åãªããžã§ã¯ããšåæãªããžã§ã¯ãã®å Žåãç¹å®ã®æ¡ä»¶ãæºããã«ããŽãªã®
åãªããžã§ã¯ã
ã«å¯ŸããŠæ®éå°
ãæ§ç¯ããããšãã§ããŸã-ãã®ãããªæ§é ã¯
colimitsãšåŒã°ã
ãŸã ã ããã«ãå¶éãšå
±åå¶éã®äŸãããã«è¡šç€ºãããŸãã
äžè¬çãªå ŽåãïŒcoïŒå¶éã¯ãããå³ã«å¯ŸããŠå®çŸ©ãããïŒcoïŒã³ãŒã³ã§ãã ç§ãèšã£ãããã«ããã£ãŒãã¯ãããã€ã³ããã¯ã¹ã«ããŽãªããçŸåšã®ã«ããŽãªãžã®ãã¡ã³ã¯ã¿ãŒã§ãã ãããŸããªå Žåã¯ãã€ã³ããã¯ã¹ã«ããŽãªã«ãã£ãŠãã€ã¢ã°ã©ã ã®ããã©ãŒã ãããå€èгããæ±ºå®ãããæçµçã«ååŸããïŒå
±åïŒå¶éïŒæçµãªããžã§ã¯ãã補åãªã©ïŒã決å®ãããŸãã ãã®ã¢ã€ãã¢ãããã«çºå±ããããšãã«ã³ãã¢ã³ãåŒãèµ·ãããªã¹ã¯ãçããŸãã

èŠããã«ãã¢ã€ãã¢ã¯ãäžèšã§æ€èšãããããªäžè¬çãªæŠå¿µã§ãããããã«åŒ·åã«äžè¬åã§ãããšããããšã§ãã
, , , () «» . .
(). SetCategory.prototype.coproduct = function (A, B) { return new SetCoproduct(this).calculate(A, B); }; function SetCoproduct(cat) { this.cat = function () { return cat; }; } SetCoproduct.prototype.calculate = function (A, B) { this.obj = new Set(); var elementCount = 1; function createInjection(set, obj) { var mapping = {}; set.forEach(function (x) { obj.add(elementCount); mapping[x] = elementCount; elementCount++; }); return mapping; } this.f = this.cat().morphism(A, this.obj, createInjection(A, this.obj)); this.g = this.cat().morphism(B, this.obj, createInjection(B, this.obj)); return this; }; SetCoproduct.prototype.univ = function(m, n) { assertEqualCodom(m, n); assertEqualDom(this.f, m); assertEqualDom(this.g, n); var obj = m.codom(); var mapping = {}; function addMappings(f, h) { h.dom().forEach(function (x) { mapping[f.image(x)] = h.image(x); }); } addMappings(this.f, m); addMappings(this.g, n); var u = this.cat().morphism(this.obj, obj, mapping); assertCommutes(u.compose(this.f), m); assertCommutes(u.compose(this.g), n); return u; };
, .
, , â . â .
, , â .
- . . ,
. JavaScript , .
â â :
function Chimpanzee() { } function Gorilla() { }
p, â q, â C. , C â : , , . p , , q :
function u(x) { if (x instanceof Chimpanzee) { return p(x); } else if (x instanceof Gorilla) { return q(x); } }
( )
- , - . , , ? , , coproduct complement. . , , .
A+B, A i
1 . i
1 , A, â A+B. i
2 , :
. SetCategory.prototype.coproductComplement = function (f) { return new SetCoproduct(this).complement(f); }; SetCoproduct.prototype.complement = function (f) { this.obj = f.codom(); this.f = f; this.g = this.cat().morphism(f.codom().diff(f.image()), this.obj).initId(); return this; };
N-, . . .
() ( ) ( ). () , .. .
f, g : X â Y â E eq : E â X, f â eq = g â eq O m : O â X f â m = g â m, u : O â E, eq â u = m, .. .
⊠. - . . -, , , . , , . , . -, , . - . .
f â eq = g â eq. X eq , f g .
f g «1» X «a» Y. , eq «1» E «1» X, f(eq(1)) = g(eq(1)) = a. , , «1» E, Y.
f «2» «a», g «2» «b». , eq, «2» X . ã€ãŸã f(eq(?)) = a g(eq(?)) = b, «a» «b».
X Y E eq. «1» «3» f g .
, E eq - f g. O m u? , E eq, , . O m, f â m = g â m.
, m f g , eq. eq m? . , E eq , O m , , . , , , , . - , , ., ? . E O h, m â h = eq, {(1,1),(3,3)} {(1,2),(3,3)}. , , O m , .
, , E eq - . O m u = {(1,1),(2,1),(3,3)}. O m, f â m = g â m, , .
O m E eq? ? , .
, , JavaScript! , , , ().
(), . SetCategory.prototype.equalizer = function (f, g) { return new SetEqualizer(this).calculate(f, g); }; function SetEqualizer(cat) { this.cat = function () { return cat; }; } SetEqualizer.prototype.calculate = function (f, g) { assertParallel(f, g); this.f = function () { return f }; this.g = function () { return g }; var dom = new Set(); var codom = f.dom(); this.q = this.cat().morphism(dom, codom); f.dom().forEach(function (x) { if (f.image(x) == g.image(x)) { dom.add(x); this.q.push(x, x); } }.bind(this)); this.obj = this.q.dom(); assertCommutes(f.compose(this.q), g.compose(this.q)); return this; } SetEqualizer.prototype.univ = function (m) { assertEqualCodom(this.q, m); assertCommutes(this.f().compose(m), this.g().compose(m)); var mapping = {}; m.forEach(function (x, y) { mapping[x] = this.q.preimage(y).representative(); }.bind(this)); var u = this.cat().morphism(m.dom(), this.obj, mapping); assertCommutes(this.q.compose(u), m); return u; };
. , â . , f â eq = g â eq f â m = g â m ⊠. , , ? .
f = g. , , , f g. , , , . , . f g , eq ( ).
, ? . O E . , , â ( ), , .
? , «» , (, ) . , , .
f, g : X â Y â Q q : Y â Q, q â f = q â g O m : Y â O m â f = m â g, u : Q â O, u â q = m, .. .
, , . , , , , .
.
f g, , «1» X «a» Y. q(f(1)) = q(g(1)), , q «a» «a» Q.
f «2» «b», g «2» «c». q(f(2)) = q(g(2)), q «b» «c» «b» Q. , «b» «c» «b».
f «3» «c», g «3» «d». , , «c» «d» . «c» «b», , «d» «b».
«e» «e» «f». Q q.
, , O m, m â f = m â g. , O m , Q q.
O m , , , Q q. , , «a» «b», «1».
, . â . , () ., . SetCategory.prototype.coequalizer = function (f, g) { return new SetCoequalizer(this).calculate(f, g); }; function SetCoequalizer(cat) { this.cat = function () { return cat; }; } SetCoequalizer.prototype.calculate = function (f, g) { assertParallel(f, g); this.f = function () { return f }; this.g = function () { return g }; var dom = f.codom(); var codom = new Set(); var eq = {}; f.dom().forEach(function (x) { var fx = f.image(x); var gx = g.image(x); eq[fx] = eq[gx] = has(eq, fx) ? eq[fx] : has(eq, gx) ? eq[gx] : fx; }); this.q = this.cat().morphism(dom, codom); dom.forEach(function (s) { var t = eq[s] || s; codom.add(t); this.q.push(s, t); }.bind(this)); this.obj = this.q.codom(); assertCommutes(this.q.compose(f), this.q.compose(g)); return this; } SetCoequalizer.prototype.univ = function (m) { assertEqualDom(this.q, m); assertCommutes(m.compose(this.f()), m.compose(this.g())); var mapping = {}; m.dom().forEach(function (x) { mapping[this.q.image(x)] = m.image(x); }.bind(this)); var u = this.cat().morphism(this.q.codom(), m.codom(), mapping); assertCommutes(u.compose(this.q), m); return u; };
â . : , , . . .( )
. , , ? â .
f : X â Z g : Y â Z â P p : P â X q : P â Y, f â p = g â q Q m : Q â X n : Q â Y, f â m = g â n, u : Q â P, p â u = m q â u = n, .. .
, - :
, P X Y, , , , f g Z.
, , , .
. CompleteCategory.prototype.pullback = function (f, g) { return new Pullback(this).calculate(f, g); }; function Pullback(cat) { this.cat = function () { return cat; }; } Pullback.prototype.calculate = function (f, g) { assertEqualCodom(f, g); this.f = f; this.g = g; var prod = this.cat().product(f.dom(), g.dom()); this.product = function () { return prod; }; var eq = this.cat().equalizer(f.compose(prod.f), g.compose(prod.g)); this.equalizer = function () { return eq; }; this.p = prod.f.compose(eq.q); this.q = prod.g.compose(eq.q); this.obj = eq.obj; assertCommutes(this.f.compose(this.p), this.g.compose(this.q)); return this; } Pullback.prototype.univ = function (m, n) { assertEqualDom(m, n); assertEqualCodom(m, this.p); assertEqualCodom(n, this.q); var u = this.equalizer().univ(this.product().univ(m, n)); assertCommutes(this.p.compose(u), m); assertCommutes(this.q.compose(u), n); return u; };
. X Y, f â Ï
1 g â Ï
2 . â P . p Ï
1 â eq, q â Ï
2 â eq. .
, : , , .. , , , . , . , , .( )
f : Z â X g : Z â Y â P p : X â P q : Y â P, p â f = q â g Q m : X â Q n : Y â Q, m â f = n â g, u : P â Q, u â p = m u â q = n, .. .
i
1 â f i
2 â g, i
1 i
2 â X Y. p q h â i
1 h â i
2 , h â :
, P â X Y, , Z, :
. , «a» «b» X Y P «1» «2» . «c» X «d» Y. «c» Y .
. g q. f p, X P , Y. . .
, (, , ) , :
. CocompleteCategory.prototype.pushout = function (f, g) { return new Pushout(this).calculate(f, g); }; function Pushout(cat, f, g) { this.cat = function () { return cat; }; } Pushout.prototype.calculate = function (f, g) { assertEqualDom(f, g); this.f = f; this.g = g; var cp = this.cat().coproduct(f.codom(), g.codom()); this.coproduct = function () { return cp; }; var ceq = this.cat().coequalizer(cp.f.compose(f), cp.g.compose(g)); this.coequalizer = function () { return ceq; }; this.p = ceq.q.compose(cp.f); this.q = ceq.q.compose(cp.g); this.obj = ceq.obj; assertCommutes(this.p.compose(this.f), this.q.compose(this.g)); return this; } Pushout.prototype.univ = function (m, n) { assertEqualCodom(m, n); assertEqualDom(m, this.p); assertEqualDom(n, this.q); var u = this.coequalizer().univ(this.coproduct().univ(m, n)); assertCommutes(u.compose(this.p), m); assertCommutes(u.compose(this.q), n); return u; };
, , , JavaScript ML:
»
DE Rydeheard, RM Burstall. Computational Category Theory, 1988, :
»
Hans JÃŒrgen Schneider. Graph Transformations. An Introduction to the Categorical Approach, 2011, , , , , :
»
Peter Smith, Category Theory. A Gentle Introduction, 2016, :
»
Maarten M. Fokkinga. A Gentle Introduction to Category Theory â the calculational approach, 1994, :
»
Andrea Asperti, Giuseppe Longo. Categories, Types and Structures. Category Theory for the working computer scientist, 1991»
Michael Barr, Charles Wells. Category Theory for Computing Science, 1998,
« » (
â Bartosz Milewski ), , , , . , .
. , , . , . â . , , . , , , 1- :
»
Michael Barr, Charles Wells. Toposes, Triples and Theories, 1985, ,
David I. Spivak . , .
:
»
Michael J. Healy. Category Theory Applied to Neural Modeling and Graphical Representations, 2000ãããã«
. , ,
, .
, ., .
. , Haskell Hask. . , , . .
. - .
. , , , .
. , , , .
,
â , , .
.
-, , . , calcCartesianProduct(), - multiplyFunctions(). , , â . ã€ãŸã .
-, , , .
-, , . , ( assert ). , - , !
, , . , , , , . , . «», .
, - JavaScript.
. , .
»
.