論理プログラミングずは䜕か、なぜそれが必芁なのか


子䟛ずしおプロロヌグに曞いおいない人には心がなく、今日曞いおいる人には頭がありたせん。  オリゞナル 

あなたが垞に苊痛の疑いに苊しめられおいるなら、この論理プログラミングLPはどんな皮類のゎミであり、䞀般にそれが必芁なのですか 次に、この蚘事はあなたのためです。


たずえば、次のように、プログラミング蚀語をさたざたな方法でグルヌプに分けるこずができたす倚くの堎合、プログラミングパラダむムず呌ばれたす。



ここで、この間違いを修正したす。


この蚘事の最も重芁な論文


論理プログラミング=プロロヌグ。

䞀般に、埌者はおそらく必芁ありたせん。 しかし、最初はそうかもしれたせん。


蚘事の構造 



この蚘事はおそらくロシア語で初めお、珟代の論理プログラミングの䞻芁な偎面を、それらがなぜ必芁なのかを説明したす。 論理プログラミングLPは、博士号のテヌマに盎接関連しおいたす詳现に぀いおは、別の詳现な投皿がありたす。 その過皋で、ロシア語には実質的に資料がないこずに気付き、このギャップを埋めるこずに決めたしたロシアのりィキペディアには、曞く䟡倀のあるASPに関する蚘事すらありたせん。


蚘事の䞀郚は、SketchingやProblogなど、互いに盎接関連しおいない堎合がありたす。ある意味では、これは論理プログラミングの分野で最も興味深いトピックず開発の個人的な抂芁です。 ここでは、もちろん、薬物に関連するすべおのトピックをカバヌするこずはできたせんが、関心のある読者がトピックに飛び蟌むか、薬物がそのような動物であるず想像するための最初のステップであるず考えるこずができたす。


プロロヌグずは䜕で、なぜそれを必芁ずしないのか


PrologLogicのプログラミング、元はprogrammation en logiqueは、70幎代初頭にAlain Colmeroeによっおマルセむナで開発されたした。 この蚀語の基瀎は、ホヌンの論理匏぀たり、どれだけ正確にそれらを機械加工できるかのステヌトメントの手続き䞊の解釈です


a :- b, c, d,...,z. 

読み方は、「条件b、c、d、...、zが満たされおいる堎合、それから」である必芁がありたす。


そしお、簡単に蚀えばここではすべおの技術的な詳现を省略しおいたす、論理的なシヌケンスの圢匏で曞き盎すこずができたす。


b\くさびc\くさびd\くさび\ドット\くさびz\右矢印a。


実際、ボブ・コワルスキヌirは次のこずを思い぀きたした。「a」ずいう文は、その前提がすべお真実であるこずを蚌明すれば真実です。 ちなみに、優秀で元気な男はただ元気で、ゞョヌクや物語をふりかけおいたす.1幎前にロンドンのロむダルコミュニティでの䌚議で、圌はPrologず論理プログラミングの歎史に぀いお玠晎らしい玠晎らしい講挔をしたした。


塩ずは䜕ですか、コワルスキヌ 「a-b、c、d」ずいう衚珟を䜿甚するず、次のようになりたす。


「a」は、「b」を蚌明し、「c」を蚌明し、「d」を蚌明するこずができれば真実です。


それから、各プログラムはステヌトメントの掟生のための定理のセットであり、各衚珟は「蚌明」されたす泚意深い読者はここでカリヌ-ハワヌド同型に確かに気づくでしょう 。


ここで吊定を远加するず、タスクはもう少し楜しくなりたす。 Prologでは、倱敗ずしお吊定ず呌ばれ、ロゞックの叀兞的な吊定ずは異なりたす。 理論的には、次のように聞こえたす。「a」ずいうステヌトメントを蚌明できなかった堎合、それは間違っおいるこずを意味したす。 ロゞックでは、このような仮定は閉じた䞖界の仮定ず呌ばれ、時には非垞に意味がありたす。


倱敗ずしおの吊定ず閉じた䞖界の仮定


サマラ垂の11番目のルヌトのバスのスケゞュヌルを想像しおください、フラグメント



質問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完党


ここで説明するコヌドは、 クラスプで実行するのが最適ですアヌトワヌクずコメントを曞く前にテストしたした。


次のタスクに぀いお説明したす。



そしお、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 âˆ€n âˆƒc:solution(r,c)=n


, , (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:


LCM-k

, , "ASP solver", .. Answer Set Programming. , — . , , — . , , ASP .


, ( ), "?" :



ASP — algorithm implementation ( ASP ), .


, :



おわりに


() — . (tl;dr) :




Source: https://habr.com/ru/post/J322900/


All Articles