
åäŸãšããŠããããŒã°ã«æžããŠããªã人ã«ã¯å¿ããªããä»æ¥æžããŠãã人ã«ã¯é ããããŸããã ïŒ ãªãªãžãã« ïŒ
ããªããåžžã«èŠçã®çãã«èŠãããããŠãããªãããã®è«çããã°ã©ãã³ã°ïŒLPïŒã¯ã©ããªçš®é¡ã®ãŽãã§ãããäžè¬ã«ãããå¿
èŠãªã®ã§ããïŒ æ¬¡ã«ããã®èšäºã¯ããªãã®ããã§ãã
ããšãã°ã次ã®ããã«ãããã°ã©ãã³ã°èšèªãããŸããŸãªæ¹æ³ã§ã°ã«ãŒãã«åããããšãã§ããŸãïŒå€ãã®å Žåãããã°ã©ãã³ã°ãã©ãã€ã ãšåŒã°ããŸãïŒã
- æ§é ïŒããã°ã©ã ã¯ãããã¯ã«åå²ãããŸã-ãµãããã°ã©ã ïŒäºãã«åé¢ïŒãããã³äž»ãªå¶åŸ¡èŠçŽ ã¯äžé£ã®ã³ãã³ããåå²ãããã³ã«ãŒãã§ãã
- ãªããžã§ã¯ãæå ïŒã¿ã¹ã¯ã¯ãçžäºã«ã¡ãã»ãŒãžãéä¿¡ãããªããžã§ã¯ããšããŠã¢ãã«åãããŸãã ãªããžã§ã¯ãã«ã¯ããããã£ãšã¡ãœããããããŸãã æœè±¡åã ã«ãã»ã«åã å€åã ãŸããäžè¬çã«ã誰ããç¥ã£ãŠããŸãã
- functional ïŒåºæ¬èŠçŽ ã¯é¢æ°ã§ãããã¿ã¹ã¯èªäœã¯é¢æ°ãšããŠã¢ãã«åãããŸãããããã¯ãfïŒãïŒãšgïŒãïŒãé¢æ°ã§ããå ŽåãfïŒgïŒãïŒïŒæ§æã
- è«çç ïŒããã§ã¯ãååãšããŠãèŽ
æ²¢ãå§ãŸããŸã-æåã®3ã€ã«ã€ããŠäœçŸãã®èšäºãæžç±ãã¬ãã¥ãŒããã¬ãŒã³ããŒã·ã§ã³ãããã³æç§æžãæžãããŠããå Žåãããã§ããããããããŒã°ãšãã³ã¯ããã€ããšããã³ã«ãã«ã æ代ã®çºå±ã«ã€ããŠèŠãŸãïŒå°ãªããšãã圌ãã¯ãã®ãšãé³æ¥œã§å¹žéã ã£ãïŒããããç©èªã®çµããã§ãã
ããã§ããã®ééããä¿®æ£ããŸãã
ãã®èšäºã®æãéèŠãªè«æïŒ
è«çããã°ã©ãã³ã°ïŒ=ããããŒã°ã
äžè¬ã«ãåŸè
ã¯ããããå¿
èŠãããŸããã ããããæåã¯ãããããããŸããã
èšäºã®æ§é ïŒ
- ããããŒã°ãšã¯äœã§ããªããããå¿
èŠãšããªãã®ã
- ãªãå¿
èŠãªã®ããåçã»ããããã°ã©ãã³ã°ã®ç°¡åãªçŽ¹ä»
- ASPã§ã¿ã¹ã¯ã解決ããŸã
- çµã¿åããæé©å
- 確ççLPïŒProbLog
- ã¯ã©ã·ãã¯ããžãã¯FOäžã®LPïŒãïŒããã³IDP
- ã¹ã±ããåçã»ããã®ããã°ã©ãã³ã°
- å®éšåæ
- ããã°ã©ã ã®ãã¹ããšæ£ç¢ºã
- ãããã«
ãã®èšäºã¯ïŒããããïŒãã·ã¢èªã§åããŠãçŸä»£ã®è«çããã°ã©ãã³ã°ã®äž»èŠãªåŽé¢ãããããããªãå¿
èŠãªã®ãã説æããŸãã è«çããã°ã©ãã³ã°ïŒLPïŒã¯ãå士å·ã®ããŒãã«çŽæ¥é¢é£ããŠããŸãïŒè©³çŽ°ã«ã€ããŠã¯ãå¥ã®è©³çŽ°ãªæçš¿ããããŸãïŒã ãã®éçšã§ããã·ã¢èªã«ã¯å®è³ªçã«è³æããªãããšã«æ°ä»ãããã®ã®ã£ãããåããããšã«æ±ºããŸããïŒãã·ã¢ã®ãŠã£ãããã£ã¢ã«ã¯ãæžã䟡å€ã®ããASPã«é¢ããèšäºãããããŸããïŒã
èšäºã®äžéšã¯ãSketchingãProblogãªã©ãäºãã«çŽæ¥é¢é£ããŠããªãå ŽåããããŸããããæå³ã§ã¯ãããã¯è«çããã°ã©ãã³ã°ã®åéã§æãèå³æ·±ããããã¯ãšéçºã®å人çãªæŠèŠã§ãã ããã§ã¯ããã¡ãããè¬ç©ã«é¢é£ãããã¹ãŠã®ãããã¯ãã«ããŒããããšã¯ã§ããŸããããé¢å¿ã®ããèªè
ããããã¯ã«é£ã³èŸŒãããè¬ç©ããã®ãããªåç©ã§ãããšæ³åããããã®æåã®ã¹ãããã§ãããšèããããšãã§ããŸãã
ããããŒã°ãšã¯äœã§ããªããããå¿
èŠãšããªãã®ã
PrologïŒLogicã®ããã°ã©ãã³ã°ãå
ã¯programmation en logiqueïŒã¯ã70幎代åé ã«Alain Colmeroeã«ãã£ãŠãã«ã»ã€ãŠã§éçºãããŸããã ãã®èšèªã®åºç€ã¯ãããŒã³ã®è«çåŒïŒã€ãŸããã©ãã ãæ£ç¢ºã«ããããæ©æ¢°å å·¥ã§ãããïŒã®ã¹ããŒãã¡ã³ãã®æç¶ãäžã®è§£éã§ãïŒ
a :- b, c, d,...,z.
èªã¿æ¹ã¯ããæ¡ä»¶bãcãdã...ãzãæºããããŠããå Žåããããããã§ããå¿
èŠããããŸãã
ãããŠãç°¡åã«èšãã°ïŒããã§ã¯ãã¹ãŠã®æè¡çãªè©³çŽ°ãçç¥ããŠããŸãïŒãè«ççãªã·ãŒã±ã³ã¹ã®åœ¢åŒã§æžãçŽãããšãã§ããŸãã
å®éãããã»ã³ã¯ã«ã¹ããŒirã¯æ¬¡ã®ããšãæãã€ããŸããããaããšããæã¯ããã®åæããã¹ãŠçå®ã§ããããšã蚌æããã°çå®ã§ãã ïŒã¡ãªã¿ã«ãåªç§ã§å
æ°ãªç·ã¯ãŸã å
æ°ã§ããžã§ãŒã¯ãç©èªããµããããŠããŸã.1幎åã«ãã³ãã³ã®ãã€ã€ã«ã³ãã¥ããã£ã§ã®äŒè°ã§ã圌ã¯Prologãšè«çããã°ã©ãã³ã°ã®æŽå²ã«ã€ããŠçŽ æŽãããçŽ æŽãããè¬æŒãããŸãããïŒ
å¡©ãšã¯äœã§ãããã³ã¯ã«ã¹ããŒïŒ ãaïŒ-bãcãdããšããè¡šçŸã䜿çšãããšã次ã®ããã«ãªããŸãã
ãaãã¯ããbãã蚌æãããcãã蚌æãããdãã蚌æããããšãã§ããã°çå®ã§ãã
ãããããåããã°ã©ã ã¯ã¹ããŒãã¡ã³ãã®æŽŸçã®ããã®å®çã®ã»ããã§ãããåè¡šçŸã¯ã蚌æããããŸãïŒæ³šææ·±ãèªè
ã¯ããã§ã«ãªãŒ-ãã¯ãŒãååã«ç¢ºãã«æ°ã¥ãã§ããã ïŒã
ããã§åŠå®ãè¿œå ãããšãã¿ã¹ã¯ã¯ããå°ã楜ãããªããŸãã Prologã§ã¯ã倱æãšããŠåŠå®ãšåŒã°ããããžãã¯ã®å€å
žçãªåŠå®ãšã¯ç°ãªããŸãã çè«çã«ã¯ã次ã®ããã«èãããŸãããaããšããã¹ããŒãã¡ã³ãã蚌æã§ããªãã£ãå Žåãããã¯ééã£ãŠããããšãæå³ããŸãã ããžãã¯ã§ã¯ããã®ãããªä»®å®ã¯éããäžçã®ä»®å®ãšåŒã°ããæã«ã¯éåžžã«æå³ããããŸãã
倱æãšããŠã®åŠå®ãšéããäžçã®ä»®å®
ãµãã©åžã®11çªç®ã®ã«ãŒãã®ãã¹ã®ã¹ã±ãžã¥ãŒã«ãæ³åããŠãã ããããã©ã°ã¡ã³ãïŒ
- 15:15
- 15:45
- 16:15
- 16:45
- 17:15
質åïŒ16:00ã«ãã¹ã¯ãããŸããïŒ åœŒã¯ããã§ã¯ãããŸããããªããªãã圌ãã¹ã±ãžã¥ãŒã«ã«åŸã£ãŠããããšã蚌æã§ããªãããã§ãã ã¹ã±ãžã¥ãŒã«ã«ã¯ããµãã©åžã®11çªç®ã®ã«ãŒããæ©ãäžçã®å
šäœåããããŸãã ãããã£ãŠããéããäžçã®ä»®å®ããšããåå-æ¡ä»¶ä»ãã®äžçå
šäœããã®ããã°ã©ã ã«ãã£ãŠèšè¿°ããããšããä»®å®-å€éšã¯ãã¹ãŠåœã§ãã ååãšããŠãããã¯ããŒã¿ããŒã¹ã§ã䜿çšãããŸã-ãšããã§ãç§ã¯ãããã«ã€ããŠããã«æžããŸãã ã
å®å
šãªããã°ã©ãã³ã°èšèªã§ãããã¥ãŒãªã³ã°ãšããŠã®ããããŒã°
Prologã®ããã€ãã®èå³æ·±ãæŒç®åïŒã«ãããªã©ïŒãšäžç·ã«ãªããŸã-å®å
šãªèšèªã®ãã¥ãŒãªã³ã°-èŠããã«-ããããŒã°Pã®ããã°ã©ã ãé¢æ°fïŒxïŒãèšç®ãããšãfïŒxïŒãèšç®ããä»ã®ãã¥ãŒãªã³ã°å®å
šèšèªã®ããã°ã©ã MããããŸãïŒ ãããã£ãŠãPrologã§ããã°ã©ã ã解決ã§ããå Žåãä»ã®èšèªïŒPythonãJavaãCãHaskellãªã©ïŒã§ãœãªã¥ãŒã·ã§ã³ãäœæã§ããããšãæå³ããŸãã ããã«ã¯ãã£ã¯ã©ã¯éããŠããŸããã
äžè¬ã«ãPrologã®åé¡ã®è§£æ±ºçã¯ãBob Kowalskiã«åŸã£ãŠã¹ããŒã ã«å解ãããŸãã
ã¢ã«ãŽãªãºã =ããžãã¯+ã³ã³ãããŒã«
ããããŒã°ã§é©åã«å®åŒåãã解決ãããã¿ã¹ã¯ã®è¯ãäŸã¯ãç¹å®ã®æ¡ä»¶ãæºãããããã©ããã«å¿ããäžé£ã®ã«ãŒã«ã§ãã ãã ãã解決çãèŠã€ããããã®ã¢ã«ãŽãªãºã ãèšå®ããå¿
èŠããããŸãã蚱容å€ã®ã¹ããŒã¹ã¯ã©ã®ããããããã€ãã¹ãããé åºãªã©ã§ãã æ¬è³ªçã«ãæšè«ã«ãŒã«ã®åœ¢åŒã§ã¿ã¹ã¯ãã¢ãã«åããæšè«ã«ãŒã«ã䜿çšããŠããœãªã¥ãŒã·ã§ã³ïŒã«ãŒã«ã®é åºãã«ããããªã¹ãã®å€ããã«ãŒã«ã®æ¬äœããããããžã®ç§»è¡ãªã©ïŒããã³èš±å®¹ããããœãªã¥ãŒã·ã§ã³ã¹ããŒã¹ãèŠã€ããæé ãæå®ããŸãã
ç§ã®ã³ã¡ã³ããThe Art Of Prologã®ã³ãŒãïŒèªçºçãªæ¬²æ±ãããå ŽåïŒ ã©ãããèªã ããããŒã°ãå匷ããã«ã¯ããã®æ¬ããå§ãããŸãïŒ
quicksort([X|Xs],Ys) :- % head: X -- pivot element, Xs -- the rest, Ys -- sorted array partition(Xs,X,Littles,Bigs), % X divides Xs into Littles = [x < X for x in Xs], and Bigs quicksort(Littles,Ls), % The smaller ones are sorted into Ls quicksort(Bigs,Bs), % Same for biggies append(Ls,[X|Bs],Ys). % Then Ys -- output is literally Ls + [X] + Bs quicksort([],[]). % empty array is always sorted partition([X|Xs],Y,[X|Ls],Bs) :- X =< Y, partition(Xs,Y,Ls,Bs). % If X an element of the given array is above Y, it goes into biggies partition([X|Xs],Y,Ls,[X|Bs]) :- X > Y, partition(Xs,Y,Ls,Bs). % else into littles partition([],Y,[],[]). % empty one is always partitioned
ã¯ã€ãã¯ãœãŒãã®è¿°èªã¯ã空ã®ãªã¹ããšç©ºã§ãªããªã¹ãã®2ã€ã®å Žåã«å®çŸ©ãããŠããããšãããããŸãã 空ã§ã¯ãªãã±ãŒã¹ã«èå³ããããŸãïŒãªã¹ã[X | Xs]ãå«ãŸããŸããããã§ãXã¯ãªã¹ãã®å
é ãã€ãŸãæåã®èŠçŽ ïŒcarã¯ãã®ããã°ã©ã ã«æ¬åŒ§ãã»ãšãã©ãªããšæã人åãïŒãXsã¯æ«å°ŸïŒtailã cdrïŒã¯ãBigsãšLittlesã®2ã€ã®ãªã¹ãã«åå²ãããŸã-倧ãããã®ãšå°ãããã®Xã§ãããããã®ãªã¹ãã¯äž¡æ¹ãšãååž°çã«ãœãŒããããæçµåºåãªã¹ãYsã«ããŒãžãããŸãã äžè¬ã«èŠãããããã«ãæšè«èŠåãèšå®ããŠã¢ã«ãŽãªãºã å
šäœãæ©èœãããŸãã
è¯ãããããŒã°ãšã¯äœã§ããïŒ åœŒã¯æ£åŒãªã»ãã³ãã£ã¯ã¹ã«åªããŠããŸã-ã€ãŸã ããããã£ãæ£åŒã«è¡šç€ºããããšãå¯èœã§ãïŒããšãã°ãäžèšã®ããã°ã©ã ãå®éã«æ°å€ããœãŒãããããšã蚌æããããïŒã確çè«çãªã±ãŒã¹ïŒProbLogã»ã¯ã·ã§ã³ãåç
§ïŒã«ãŸã§æ¡åŒµããäžè¬ã«ãæ°åŠçãªäœæ¥ãã¡ã¿èšèªã«é©ããè«ççãªåé¡ã®ã¢ããªã³ã°ã«äŸ¿å©ãªèšèªæäœãªã©ã
èŠããã«ãããªããããã°ã©ã ã®æ¯ãèãã®ç¹æ§ãæ£åŒã«ç€ºãå¿
èŠãããç§åŠè«æãæžããŠããªããªããããããPrologã¯æ¬åœã«å¿
èŠãªãã§ãããã ããããããããè«çããã°ã©ãã³ã°ãå¿
èŠã§ããïŒ
ãªãå¿
èŠãªã®ãããŸãã¯Answer Set ProgrammingïŒASPïŒã®ç°¡åãªçŽ¹ä»
ASPã®ç°¡åãªèª¬æïŒ
SATãã¢ã»ã³ãã©ãŒã§ããå Žåãææ°ã®ASPã¯C ++ã§ãã
ããã§ã¯ã宣èšåããã°ã©ãã³ã°ããžã§ã³ããã«ãŒã·ãŒïŒLISPãçºæããã¢ã«ãŽã«ã«åœ±é¿ãäžããäžè¬ã«ã人工ç¥èœããšããçšèªãææ¡ããïŒã®ç²Ÿç·»å蚱容ååãªã©ããå§ãã䟡å€ããããŸãã
宣èšçã¢ãããŒããšã¯äœã§ããïŒ ã€ãŸããåé¡ãšãã®ç¹æ§ã«ã€ããŠèª¬æãããã®ã§ããã解決æ¹æ³ã«ã€ããŠã¯èª¬æããŸããã ãã®å Žåãã¿ã¹ã¯ã¯ã»ãšãã©ã®å Žå次ã®åœ¢åŒã§è¡šç€ºãããŸãã
åé¡=ã¢ãã«+æ€çŽ¢
ãã®ã¢ãããŒãã¯ã©ãã§å®æçã«äŒããŸããïŒ ããšãã°ãããŒã¿ããŒã¹ã§ã¯ãSQLã¯å®£èšåã¯ãšãªèšèªã§ãããDBMSã¯ãã®ã¯ãšãªã«å¯ŸããçããèŠã€ãã責任ããããŸãã DBMSã®å¹æçãªæäœã®ããã«æ°åã®å¹æçãªã¢ã«ãŽãªãºã ãçºæãããããŒã¿ã¯æé©åããã圢åŒã§æ ŒçŽãããã€ã³ããã¯ã¹ã¯ã©ãã«ã§ããããã¯ãšãªæé©åæ¹æ³ãªã©ããããŸãã
ããããæãéèŠãªããšã¯ããŠãŒã¶ãŒãæ°·å±±ã®äžè§ã§ããSQLèšèªãèŠãããšã§ãã ãŸããDBMSã«ã€ããŠããçšåºŠç解ããŠããããããŠãŒã¶ãŒã¯å¹æçãªã¯ãšãªãäœæã§ããŸãã æåã«ãå€åã«å¯Ÿããæµæã®åçãç°¡åãªäŸã§èª¬æããŸãããã äŒç€Ÿã®éšéããšã®å¹³å絊äžãèšç®ããç°¡åãªã¯ãšãªQãäœæãããšããŸãã ãã°ããããŠãèŠæ±ãå°ãå€æŽããããã«æ±ããããŸãã-ããšãã°ãèšç®ã§ç®¡çãç¡èŠããããã«-ç§ãã¡ã¯æè¡å°é家ã®å¹³å絊äžã«èå³ãæã¡å§ããŸããã ãã®å Žåãæ¡ä»¶ "roleïŒ= 'Manager'"ãQã¯ãšãªã«è¿œå ããã ãã§ãã
ãããã£ãŠãæ°ããQ_updatedãªã¯ãšã¹ãã¯ãåºæ¬ãªã¯ãšã¹ã+è¿œå æ¡ä»¶ãšããŠè¡šãããŸãã ããå°ãäžè¬çã«èšãã°ã
åé¡ã®ããªãšãŒã·ã§ã³=åºæ¬ã¢ãã«+è¿œå æ¡ä»¶
ããã¯ãåé¡ã®æ¡ä»¶ãè¿œå ã®æ¡ä»¶Xã«ãããã«å€æŽããå Žåãã¢ãã«ïŒSQLãªã©ã®æ£åŒãªèšèªã§å
ã®ã¿ã¹ã¯ãã¢ãã«åããïŒãå€æŽããè¿œå ã®æ¡ä»¶C_Xãè¿œå ããå¿
èŠãããããšãæå³ããŸãã
ãããŠãASPãšè«çããã°ã©ãã³ã°ã¯ã©ãã§ããïŒ
åç
§ïŒ
PrologãšASPã®åºæ¬çãªéãã¯äœã§ããïŒ å®éãASPã¯å¶éã®å®£èšåèšèªã§ããã€ãŸããéžæèŠåãšåŒã°ããç¹å¥ãªå¶éã®åœ¢åŒã§æ€çŽ¢ã¹ããŒã¹ãå®çŸ©ããŸãã次ã«äŸã瀺ããŸãã
1 { color(X,C) : colors(C) } 1 :- node(X).
ãã®ãããªã«ãŒã«ã¯åæ空éãå®çŸ©ããŸã-æåéã次ã®ããã«èªã¿ãŸãïŒè¿°èªã®åXïŒããã§èªã-ã»ããã§ïŒããŒããã€ãŸãåé ç¹X-äžã€ã¯çã§ãªããã°ãªããŸãã-ã{ãã®å·Šã«1ã€-å³ã«1ã€ã}ãã¢ãã ã¯è²ïŒXãCïŒã§ãããCã¯è²ã®ã»ããïŒåé
è¿°èªè²/ 1ïŒããç§ãã¡ã®ãšããã«æ¥ãŸããã
ASPã®äž»ãªæ©èœã®1ã€ã¯ãå¶çŽããœãªã¥ãŒã·ã§ã³ã§ã¯ãªããã®ãå®çŸ©ããããšã§ããããšãã°ã次ã®ã«ãŒã«ãèæ
®ããŠãã ããã
:- edge(X,Y), color(X,Cx), color(Y,Cy), Cx = Cy.
å¶çŽïŒçšèªïŒ æŽåæ§å¶çŽã¯è±èªã®ç§åŠæç®ã§äœ¿çšãããŸã ïŒ-å®éãã«ãŒã«ã¯èšäºã®æåããã®ãã®ã§ã-ãããã¯ã空ã®é ãã空ã®é ã®ã¿ãæã¡ãŸããå®éãããã¯æ¬¡ã®åœ¢åŒã®ã«ãŒã«ã®ç¥èªã§ãïŒ
false :- a_1, a_2, ⊠a_n
ã€ãŸã a_1ã... a_nãå®è¡ããããšããfalseããåºåãããããã¯ã¢ãã«ã§ã¯ãããŸããã
ïŒããæ£ç¢ºã«ã¯ïŒfalseã¯bã®æ§æã§ãïŒ-bã§ã¯ãªãa_1ã.... a_n-bã¯falseã§ãããšããä»®å®ã®äžã§åºåãããŸã-ããã¯ççŸã§ãïŒã
ããã¯çè«äžã®äœè«ãçµããããã«ãŒã«ã詳ããèŠãŠãããŸã-XãšYã®éã«åŒ§ããããè²XãCxã§ãè²YãCyã§Cx == Cyã§ããå Žåãããã¯è§£ã§ã¯ãããŸããã
ã¡ãªã¿ã«ãASPã«ç²ŸéããŠãã人ã¯ãã®ã«ãŒã«ã次ã®ããã«æžãã§ãããã
:- edge(X,Y), color(X,C), color(Y,C).
åãã«ãŒã«å
ã§åãååã®å€æ°ã¯çãããšèŠãªãããŸãïŒãããŠãããã¯åºæ¬çãªæ®µéã§åœ¹ç«ã€å¯èœæ§ãé«ãã§ãããããã¯å¥ã®è©±ã§ãïŒã
ç§ãã¡ã¯ãå
šäœãšããŠã®ïŒãããŠããã«ããã€ãã®ïŒåé¡å
šäœã®èª¬æã«ç®ãåããŸãã
äžè¬çãªçµã¿åããã®åé¡ãããã€ãåæããŸãïŒNPå®å
š
ããã§èª¬æããã³ãŒãã¯ã ã¯ã©ã¹ãã§å®è¡ããã®ãæé©ã§ãïŒã¢ãŒãã¯ãŒã¯ãšã³ã¡ã³ããæžãåã«ãã¹ãããŸããïŒã
次ã®ã¿ã¹ã¯ã«ã€ããŠèª¬æããŸãã
- ã°ã©ãã®è²ä»ã ïŒ ã°ã©ããæå®ãããŠããå Žåã2ã€ã®é ç¹ãåãè²ã§ãã€ã³ããããªãããã«ã3è²ã§è²ä»ãã§ãããã©ãããå€æããå¿
èŠããããŸãã
- é»ãšçœã®å¥³ç ïŒããŒãäžã§nããnãŸã§ãkåã®é»ãšçœã®å¥³çãé
眮ããŸãããããã£ãŠãç°ãªãè²ã®2人ã®å¥³çãäºãã«åã€ããšã¯ãããŸããã
ãããŠãASPã䜿çšããŠãããã®ããããã解決ããåæã«äž»èŠãªã¢ããªã³ã°ææ³ãåæããŸãã
ã«ãŠã³ãã«ã©ãŒãªã³ã°
ãã³ã«ãŠã³ãïŒ

2ã€ã®é£æ¥ããé ç¹ãåãè²ã«ãªããªãããã«ããŸãã¯ãããäžå¯èœã§ãããšèšãããã«ãé ç¹ã3è²ïŒèµ€éç·ïŒã§çè²ããå¿
èŠããããŸãã
åºåïŒ

ïŒ ããããæ®åœ±ããåçïŒ
ASPã³ãŒãã®äž»ãªæ§æã«ã€ããŠã¯æ¢ã«æ€èšããŸãã-æ®ãã®èŠçŽ ãèŠãŠãããŸãïŒnode / 1ïŒnodeïŒaïŒãNodeïŒbïŒ...ïŒ-ã°ã©ãã®å€ãã®é ç¹ã宣èšããŸããé åºã¯éèŠã§ã¯ãããŸãããedge/ 2-匧ã宣èšããŸãã ASPïŒããã³è«çããã°ã©ãã³ã°ïŒã®ãã®ãããªã¢ãã ã¯-äºå®ãå®éã«ã¯ãaïŒ-trueãã®ç¥èªã§ããããããåžžã«çã§ããã¹ããŒãã¡ã³ãããå°ãåºãããŸããã€ãŸããã¢ãã ã¯ããã°ã©ã ããŒã¿ãæå®ããŸãã
% -- , "%" % node(a). node(b). node(c). node(d). % edge(a,b). edge(a,d). edge(b,c). edge(b,d). edge(c,d). % , X Y, , Y X -- edge(Y,X) :- edge(X,Y). % colors(red). colors(green). colors(blue). % , , colors(.) 1 { color(X,C) : colors(C) } 1 :- node(X). % X, Y (- ) , Cx = Cy, :- edge(X,Y), color(X,C), color(Y,C). % #show color/2.
é»ãšçœã®å¥³ç
ã¯ã€ãŒã³ã®é
眮ã«ã€ããŠïŒãã®ããªãšãŒã·ã§ã³ãå«ããŸãïŒã ããã§è©³çŽ°ã«èª¬æããŸãã ã

ïŒããã§ã¯ã¯ã€ãŒã³ã®æ倧æ°ããããŠååæ¶ã®ä»£ããã«çœããé»ç¹ã®ä»£ããã«çœ®ãããšãã§ããŸã-åæã«äž¡æ¹ã§ã¯ãããŸãã; èšäºããåãããŸããïŒ
ããã§äžããããã³ãŒãã¯ãã¯ã€ãŒã³ã®é
åã®åçŽãªå€é
åŒããŒãžã§ã³ãšNPãã«ããŒãžã§ã³ã®äž¡æ¹ã解決ããŸãïŒã¯ã€ãŒã³ã«é¢ããHabraã®èšäºãåç
§ããŠãã ãããããã§ã¯ãå€å
žããŒãžã§ã³ã®è€éãã®çµæããã®ããªãšãŒã·ã§ã³ã«é©çšããããšä»®å®ããŸãïŒã
é»ãšçœã®å¥³çã®ãã¹ãŠã®ASPã³ãŒã % "k" "m" #const k=2. #const m=4. % color(b). color(w). col(1..m). row(1..m). % k , k { queen(C,Row,Col) : col(Col), row(Row) } k :- color(C). % Rw -- row white, Cb -- column black, etc % :- queen(w,Rw,Cw), queen(b,Rb,Cb), Rw = Rb. % :- queen(w,Rw,Cw), queen(b,Rb,Cb), Cw = Cb. % :- queen(w,Rw,Cw), queen(b,Rb,Cb), | Rw - Rb | = | Cw - Cb |.
ã³ãŒãããã詳现ã«åæããŠã¿ãŸãããã次ã®ã«ãŒã«ã¯ããŒããã©ã¡ãŒã¿ãèšå®ããŸããå®éãã¯ã€ãŒã³ã®å€ãã®è²ã§åé¡ã解決ã§ããŸããããã§ã®è²ã¯è¿°èªå€color/1
圢åŒã§èšè¿°ãããŸãã
% "k" "m" #const k=2. #const m=4. % color(b). color(w). col(1..m). row(1..m).
次ã«ããµãŒãã¹ããŒã¹ã宣èšããå¿
èŠããããŸãã
% k , k { queen(C,Row,Col) : col(Col), row(Row) } k :- color(C).
å®éããã®ã«ãŒã«ã¯æ¬¡ã®ããã«èªã¿åãããŸããåè²Cã«å¯ŸããŠãè²Cã® kåãšæ£ç¢ºã«kåã®ã¯ã€ãŒã³ãå¿
èŠã§ããã Rowããã³Colã®å€ã¯è¿°èªcol/1
ããã³row/1
ã®ã»ããããã®ãã®ã§ãªããã°ãªããŸããã ç°¡åã«èšãã°ãåè²ã«ã€ããŠãæ£ããïŒããŒãäžã®ïŒã¯ã€ãŒã³ã®æ°ãkã«èšå®ããŸãã
次ã«ã解決çã§ã¯ãªããã®ã«ã€ããŠèª¬æããŸããåãè¡ãåããŸãã¯å¯Ÿè§ç·äžã«ç°ãªãè²ãããå ŽåïŒ
% :- queen(w,Rw,Cw), queen(b,Rb,Cb), Rw = Rb. % :- queen(w,Rw,Cw), queen(b,Rb,Cb), Cw = Cb. % :- queen(w,Rw,Cw), queen(b,Rb,Cb), | Rw - Rb | = | Cw - Cb |.
å®éãã³ãŒãã¯2ã€ã®éšåã«ããŸãå解ãããŠããããšãããããŸããæ€çŽ¢ã¹ããŒã¹ïŒæšæž¬ïŒ+åçã®æ€èšŒïŒãã§ãã¯ïŒ-ASPã§ã¯ãããã¯æšæž¬ãšãã§ãã¯ã®ãã©ãã€ã ãšåŒã°ãããã¹ãŠã®ã³ãŒãã¯æ¹çšåŒProblem = Data + Model -SATãšã¯ç°ãªããããŒã¿ãå€æŽããŠããæ°ããã¯ã€ãŒã³ãè¿œå ããŠããå¶éèªäœïŒã¢ãã«ã«ãŒã«ïŒã¯å€ãããŸããã äžè¬ã«ããããã®ã«ãŒã«ãæžãæããŠãè²ããã©ã¡ãŒã¿ãšããŠåãå
¥ããããšãã§ããŸãã
çµã¿åããæé©åã«ã€ããŠç°¡åã«
äžçªäžã®è¡ã¯åçŽã§ãïŒ ããã«ãã³ãµã€ã¯ã« ïŒNPå®å
šåé¡ïŒãèŠã€ãããªã©ã®çµã¿åããã¿ã¹ã¯ããããŸãããè¿œå ã®æ¡ä»¶ããããŸãïŒæå°åããå¿
èŠããããã®-ããšãã°ããã¹ã®éã¿ïŒã°ã©ããçè²ããè²ã®æ°ã女çã®æ°ãŸãã¯å¥³çã®è²ãæ倧åãããªã©ïŒã ïŒååãšããŠãããã«ããã¿ã¹ã¯ã®è€éããæ¥å¢ããæ€çŽ¢ãããªãè€éã«ãªããŸãã ASPã«ã¯ãçµã¿åããæé©ååé¡ã解決ããããã®æšæºã¡ã«ããºã ããããŸãã
ãã¹ã®éã¿ãæé©åããŠããã«ãã³ãµã€ã¯ã«ãèŠã€ããåé¡ãåæããŸãããïŒAnswer Set Solving in Practiceã®ã³ãŒããMartinGebser et alã;ç§ã®ã³ã¡ã³ãïŒ
% === GUESS === % -- 1 { cycle(X,Y) : edge(X,Y) } 1 :- node(X). % 1 { cycle(X,Y) : edge(X,Y) } 1 :- node(Y). % 1 % === AUXILIARY INFERENCE === reached(Y) :- cycle(1,Y). % reached(Y) :- cycle(X,Y), reached(X). % === CHECK === % - -- :- node(Y), not reached(Y). % === MINIMIZE === % -- , #minimize [ cycle(X,Y) = C : cost(X,Y,C) ].
, ASP :
Problem Model = Guess + Check + Minimize
(auxiliary inference), . , ASP.
Prolog â ProbLog
Prolog , â , â ProbLog ( , â , ) â Probabilistic Prolog.
A Statistical Learning Method for Logic Programs with Distribution Semantics by Taisuke Sato
(, , â ILP 2015 â )
( - tutorial, )
, , , , , , , 0.5, 0.6 â , ?
% Probabilistic facs: 0.6::heads(C) :- coin(C). % Background information: coin(c1). coin(c2). coin(c3). coin(c4). % Rules: someHeads :- heads(_). % Queries: query(someHeads).
â , ( â ), â someHeads â , â . â : .
ProbLog â , ( ) .
FO(.) IDP
FO(.) IDP â Answer Set Programming: FO(.) â First Order (.) â , . IDP â , FO(.). ( â FO(.) IDP PhD , - ).
, . IDP .
FO(.) /********************************* A Sudoku solver in IDP *********************************/ vocabulary V { type row isa int // The rows of the grid (1 to 9) type column isa int // The columns of the grid (1 to 9) type number isa int // The numbers of the grid (1 to 9) type block isa int // The 9 blocks of 3x3 where the numbers need to be entered liesInBlock(row, column, block) //This declares which cells belongs to which blocks. //This means that liesInBlock(r, k, b) is true if and only if // the cell on row r and column c lies in block b. solution(row, column) : number //The solution: every cell has a number //A cell is represented by its row and column. //For example: solution(4,5) = 9 means that the cell on row 4 and column 5 contains a 9. } theory T : V { //On every row every number is present. ! r : ! n : ? c : solution(r,c) = n. //In every column every number is present. ! c : ! n : ? r : solution(r,c) = n. //In every block every number is present. ! b : ! n : ? rc : liesInBlock(r,c,b) & solution(r,c) = n. //Define which cells lie in which block { liesInBlock(r,k,b) <- b = (((r - 1) - (r - 1)%3) / 3) * 3 + (((k - 1)-(k - 1)%3) / 3) + 1. } }
ïŒã³ãŒããåçŽåããliesInBlockãããŒãã³ãŒãããŸã-ãšãã£ã¿ãŒã®äŸã®ã³ãŒã
, . : . â solution(row, column) -> {1,...,9}, :
, , (r, c) n . .
â
â
Sketched Answer Set Programming
â ( , , ). , (logic programming) (machine learning), Inductive Logic Programming . , ASP.
Sketched Answer Set Programming by Sergey Paramonov, Christian Bessiere, Anton Dries, Luc De Raedt
, ASP â Constraint Programming Essense .
-- ASP, :
:- queen(w,Rw,Cw), queen(b,Rb,Cb), Rw != Rb. :- queen(w,Rw,Cw), queen(b,Rb,Cb), Cw != Cb. :- queen(w,Rw,Cw), queen(b,Rb,Cb), |Rw - Rb| != |Cw - Cb|.
Unsatisfiable . sketching , " , " , â " , "
[Sketch] :- queen(w,Rw,Cw), queen(b,Rb,Cb), Rw ?= Rb. :- queen(w,Rw,Cw), queen(b,Rb,Cb), Cw ?= Cb. :- queen(w,Rw,Cw), queen(b,Rb,Cb), Rw ?+ Rb ?= Cw ?+ Cb. [Examples] positive: queen(w,1,1). queen(w,2,2). queen(b,3,4). queen(b,4,3). negative: queen(w,1,1). queen(w,2,2). queen(b,3,4). queen(b,4,4).
, , , , , . ( ).
sketching â .
ASP â , , â NP- N-queens â .

, , .
vs
Relational Data Factorization (Paramonov, Sergey; van Leeuwen, Matthijs; De Raedt, Luc: Relational data factorization, Machine Learning, volume 106) , :
â ( + ~= ) â â , ASP â .
: + , :
= + ASP
, structured frequent pattern mining (. Paramonov, Sergey; Stepanova, Daria; Miettinen, Pauli: Hybrid ASP-based Approach to Pattern Mining, Theory and Practice of Logic Programming, 2018 ):
( ; â -, )

, ( )
, , .
, , , . :
, , , , LCM-k:
, , "ASP solver", .. Answer Set Programming. , â . , , â . , , ASP .
, ( ), "?" :
ASP â algorithm implementation ( ASP ), .
, :
ãããã«
() â . (tl;dr) :
- != ;
- ASP ;
- : + ;
- ASP : " - ?", " ?", etc;
- , , ASP .