Chuong 7 - Prolog

Embed Size (px)

Citation preview

  • Tr Tu Nhn To

    Nguyn Nht Quang

    [email protected]

    Vin Cng ngh Thng tin v Truyn thngTrng i hc Bch Khoa H Ni

    Nm hc 2009-2010

  • Ni dung mn hc: Gii thiu v Tr tu nhn to

    Tc t

    Gii quyt vn : Tm kim, Tha mn rng buc

    Logic v suy din Logic v suy din Lp trnh logic Prolog

    (Da trn bi gingcsc.villanova.edu/~dmatusze/8310summer2001/index.html/prolog1.ppt)csc.villanova.edu/ dmatusze/8310summer2001/index.html/prolog1.ppt)

    Biu din tri thc

    Suy din vi tri thc khng chc chn Suy din vi tri thc khng chc chn

    Hc my

    Lp k hoch

    2Tr tu nhn to

  • Lp trnh logicp g Mt chng trnh logic biu din mt c s tri thc (mt

    tp cc mnh logic)tp cc mnh logic) Cc mnh logic phi dng chun Horn

    p1 p2 p q1 q2 qp1 p2 pn q1 q2 qm Nu n=0, m=1, th q1 l mt s kin (fact) Nu n1, m=1, th (p1 p2 pn q1) l mt lut Nu n1, m 1, th (p1 p2 pn q1) l mt lut

    (rule) Nu n1, m>1, th tng ng vi lut (p1 p2

    )pn q1 q2 qm-1 qm)

    3Tr tu nhn to

  • Ngn ng lp trnh logic Prologg g p g g Prolog = Programming Logic Mt ngn ng lp trnh logic c s dng rt ph bint g g p t og c c s d g t p b Trong ngn ng Prolog

    Cc lut v cc s kin l cc tin (axioms)C hi bi i d l h l h i h Cu hi, c a ra bi ngi dng, l nh l cn chng minh

    Prolog p dng phng php suy din quay lui (Back Chaining) chng minh

    chng minh P(a) Tm s kin P(t) hoc lut (Q1 Q2 Qn P(t)) Nu tm c s kin P(t) thay th t=a nh l c chng minh Nu tm c s kin P(t), thay th t a, nh l c chng minh Nu tm c lut (Q1 Q2 Qn P(t)), th cn tip tc chng

    minh cc gi thit Nu c cc bin, tm cch thay th cc bin ny bng cc gi tr, sao cho

    ch chng minh c tha mn

    4Tr tu nhn to

  • Phn mm SWI-Prologg SWI-Prolog l mt cng c lp trnh Prolog c s

    dng rt ph bin c cc phin bn chy trn cc hdng rt ph bin, c cc phin bn chy trn cc hiu hnh Windows, MacOS, v Linux

    Bn quyn s dng phn mm SWI-Prolog l min ph Bn quyn s dng phn mm SWI Prolog l min phcho mc ch hc tp v nghin cu

    SWI-Prolog c th ti v t a ch: http://www.swi- SWI Prolog c th ti v t a ch: http://www.swiprolog.org/

    5Tr tu nhn to

  • V d v chng trnh Prolog (1)g g Suy din logic

    T l t i h i HUT Tun l mt sinh vin ca HUT

    Mi sinh vin ca HUT u hc mn Ton ri rc

    Tun c hc mn Ton ri rc khng? Tun c hc mn Ton ri rc khng?

    Chng trnh Prolog studentHUT(tuan) studentHUT(tuan). studDiscretMath(X) :- studentHUT(X). ?- studDiscretMath(tuan).( )

    6Tr tu nhn to

  • V d v chng trnh Prolog (2)g g S kin: Tun l mt sinh vin ca HUT

    t d tHUT(t ) studentHUT(tuan).

    Lut: Mi sinh vin ca HUT u hc mn Ton ri rc studDiscretMath(X) : studentHUT(X) studDiscretMath(X) :- studentHUT(X).

    Cu hi (ca ngi dng): Tun c hc mn Ton rirc khng? ?- studDiscretMath(tuan).

    Cc cu hi c cng dng nh cc s kin

    7Tr tu nhn to

  • Chy chng trnh Prolog (1)g g S dng mt chng trnh son tho (vd: Notepad)

    to ra chng trnh (c s tri thc)to ra chng trnh (c s tri thc) Ghi li chng trnh trong mt tp tin nh dng vn bn

    (text only) s dng ui ca tp tin l .pl V d mt chng trnh Prolog:

    studentHUT(tuan).studDiscretMath(X) :- studentHUT(X).

    8Tr tu nhn to

  • Chy chng trnh Prolog (2)g g chy chng trnh Prolog:

    (Vi h i h h Wi d ) k h l t ti h t h (Vi h iu hnh Windows), kch p ln tp tin chng trnh, hoc

    Chy phn mm SWI-Prolog, v tham vn (consult) ti tp tin h t hchng trnh

    ?- consult('C:\\PrologPrograms\\myPrologProg.pl').

    Sau a ra cu hi mong mun Sau , a ra cu hi mong mun?- studDiscretMath(tuan).

    Prolog a ra cu tr lio og a a cu t Yes

    9Tr tu nhn to

  • Prolog Chng minh nh lg g Prolog tr v gi tr Yes c ngha l chng minh c

    P l t i t N h l kh th h Prolog tr v gi tr No c ngha l khng th chngminh

    ?- stud DiscretMath(hai)? stud_DiscretMath(hai).No

    Closed world assumption: Chng trnh Prolog bit tt h bitc v nhng g n cn bit

    Prolog cung cp cc gi tr cho cc bin khi cn, cth hon chnh mt chng minhth hon chnh mt chng minh

    ?- stud_DiscretMath(X).X = tuan

    10Tr tu nhn to

  • C php: Cc cu trcp p Mt cu trc (structure) gm mt tn (name) v khng,

    mt hoc nhiu tham s (arguments)mt, hoc nhiu tham s (arguments) B i cp du ngoc (), nu nh khng c tham s Cc v d ca cu trc Cc v d ca cu trc

    sunshine man(socrates) path(garden, south, sundial)

    11Tr tu nhn to

  • C php: Cc mnh c sp p Mt cu trc chnh l mt mnh c s (base clause)

    Mt h bi di t ki (f t) Mt mnh c s biu din mt s kin (fact) Cc v d ca mnh c s

    j hn john. mary bill bill loves(john, mary). loves(mary, bill).

    12Tr tu nhn to

  • C php: Biu din lutp p Mt lut c biu din bao gm

    Mt t (bi di h kt l l t h Mt cu trc (biu din mnh kt lun ca lut mnh THEN)

    K hiu :- Mt danh sch cc cu trc (biu din mnh gi thit ca lut

    mnh IF), ngn cch nhau bi du ,

    Cc v d ca lut Cc v d ca lut mortal(X) :- man(X). happy(X) :- healthy(X), wealthy(X), wise(X).ppy( ) y( ) y( ) ( )

    Du , gia cc cu trc c ngha nh ton t logic AND

    13Tr tu nhn to

  • C php: Cc v t logicp p g Mt v t (predicate) l mt tp hp cc mnh vi

    cng tn v mt s (>=1) cc tham scng tn v mt s (> 1) cc tham s V d: Cc mnh biu din v t loves

    loves(john mary)loves(john, mary).loves(mary, bill).loves(chuck, X) :- female(X), rich(X).loves(chuck, X) female(X), rich(X).

    14Tr tu nhn to

  • C php: Chng trnhp p g Mt chng trnh (program) l mt tp hp cc mnh

    Cc mnh trong chng trnh c th c sp xptheo bt k trt t (th t) no

    Cc mnh ca mt v t c s dng (c xt n) theo ng trt t ca chng trong chng trnh

    15Tr tu nhn to

  • C php: Cc bin v hngp p g Cc bin bt u bng ch ci in hoa hoc k t c bit

    Vd X S t ltVd: X, Socrates, _result

    Cc hng khng bt u bng ch ci in hoa hoc k tc bit

    Vd: x, socrates

    Cc hng cha cc k t c bit, hoc bt u vi ch ''ci in hoa, th phi t vo trong cp k t nhy n ''

    Vd: 'C:\\My Documents\\examples.pl'

    hin th k t nh n th phi s d ng '' hoc \' hin th k t nhy n, th phi s dng: hoc \

    16Tr tu nhn to

  • C php: Ch thch c t trong cp du: /**/

    H t d % Hoc c t sau du % V d

    t(x ) % s ki m t x l h m parent(x,y). % s kin m t x l cha m ca y

    17Tr tu nhn to

  • C php: Cc li hay gpp p g p Phn bit gia ch hoa v ch thng l rt quan trng

    Kh kh t ( h t ) i Khng c c khong trng (space characters) giatn v danh sch tham s ca mt cu trc Biu din hp l: man(socrates).p ( ) Biu din khng hp l: man (socrates).

    Kt thc ca mi mnh phi c du chm (.) C th t du chm dng k tip

    18Tr tu nhn to

  • Suy din li trong Prologg g Gi s chng ta c c s tri thc (chng trnh Prolog):

    loves(chuck X) :- female(X) rich(X)loves(chuck, X) : female(X), rich(X).female(jane).female(mary).rich(mary).

    Gi s ngi dng t cu hiloves(chuck, X)

    Qu trnh suy din li (Back chaining) ca Prolog: female(X) = female(jane) X = jane female(X) = female(jane), X = jane.

    rich(jane). : tht bi (khng th chng minh c!) female(X) = female(mary), X = mary.

    rich(mary) : thnh cng (chng minh c!)rich(mary). : thnh cng (chng minh c!)

    19Tr tu nhn to

  • Cc li gig Mi li gi (call) trong chng trnh Prolog c th hin

    bi:bi:

    callfail

    exitredo

    Mi cu trc (trong chng trnh Prolog) c bn cng(ports): call, exit, redo, fail

    fail redo

    (p ) , , , Cng exit kt ni vi cng call Cng fail kt ni vi cng redog g

    20Tr tu nhn to

  • Cc li gi lng nhau (nested calls)g g

    loves(chuck, X) :- female(X), rich(X).( ) ( ) ( )

    loves(chuck X)loves(chuck, X)

    female(X) rich(X)callfail

    exitredofail redo

    21Tr tu nhn to

  • Cc cu tr li b sungg

    f l (j ) female(jane).female(mary).female(susan)

    female(X)female(susan).

    ?- female(X).X j

    female(jane)

    X = janeX = maryX

    female(mary)

    X = susanYes female(susan)

    22Tr tu nhn to

  • Cc cch c loves(chuck, X) :- female(X), rich(X).

    C h th ki kh i b Ch k X X l h Cch c theo kiu khai bo: Chuck yu X nu X l phn v giu c

    Cch c theo kiu th tc xp x: tm c mt i Cch c theo kiu th tc xp x: tm c mt itng X m Chuck yu, th trc tin phi tm c mtph n X, sau kim tra xem X c giu hay khngC h th ki kh i b th th h h Cch c theo kiu khai bo thng c a thch hn

    23Tr tu nhn to

  • Logic n iug

    Logic n iu (monotonic logic): Mt khi chng i h t i l th i iminh c mt iu g l ng, th iu s mi

    mi ng Logic n iu khng ph hp vi cc bi ton (ng Logic n iu khng ph hp vi cc bi ton (ng

    dng) thc t Nu ci v trong ti xch tay v ti xch tay trong xe -t,

    th chng ta c th kt lun l ci v trong xe tth chng ta c th kt lun l ci v trong xe -t Nhng, iu g xy ra nu ci v c ly ra khi xe -t?

    24Tr tu nhn to

  • Logic khng n iug g Prolog s dng logic khng n iu (nonmonotonic logic)

    Mt mnh c chng minh l ng mt thi im trc c Mt mnh c chng minh l ng mt thi im trc c th khng cn (khng th c chng minh) l ng mt thi im sau

    Trong Prolog cc s kin v cc lut c th c thay i Trong Prolog, cc s kin v cc lut c th c thay i mt thi im no Nhng s kin v lut nh vy c gi l ng (khng c nh)

    assert(...) : b sung mt s kin hoc mt lut vo c s tri thc

    retract( ) : loi b mt s kin hoc mt lut khi c s tri retract(...) : loi b mt s kin hoc mt lut khi c s tri thc

    assert v retract c gi l cc v t ngoi logic (extralogical predicates)

    25Tr tu nhn to

  • Cc v d v assert v retract assert(man(plato)).

    t((l ( h k X) f l (X) i h(X))) assert((loves(chuck,X) :- female(X), rich(X))). retract(man(plato)). retract((loves(chuck X) :- female(X) rich(X))) retract((loves(chuck,X) :- female(X), rich(X))).

    Lu l i vi cc lut, phi s dng 2 cp ngoc n (()) trnh xy ra li c php

    Gi it ss t(f : b b ) Gi s nu vit: assert(foo :- bar, baz). S c bao nhiu tham s i vi assert?

    26Tr tu nhn to

  • S dng Prolog trong bi ton thc tg g g

    Trong cc bi ton (ng dng) thc t, mi th c th thay i (mt iu chng minh l ng th cth thay i (mt iu chng minh l ng, th c th s khng cn ng vo mt thi im sau )

    Prolog rt ph hp cho vic biu din cc thay i Prolog rt ph hp cho vic biu din cc thay i trong cc bi ton thc t

    Cc ng dng tr chi l mt v d in hnh v cc

    g gbi ton m trong cc s vic c th thay i

    Prolog l ngn ng rt ph hp xy dng cc h t h t h i hichng trnh tr chi mo him

    27Tr tu nhn to

  • V d minh ha chng trnh tr chig Chy ng dng SWI-Prolog

    Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.59)

    Copyright (c) 1990-2008 University of Amsterdam.py g ( ) ySWI-Prolog comes with ABSOLUTELY NO WARRANTY.

    This is free software, and you are welcome to redistribute it under certain conditions.

    Please visit http://www.swi-prolog.org for details.For help, use ?- help(Topic). or ?- apropos(Word)

    1 ?- consult('C:\\prolog\\dragon.pl').% C:\prolog\dragon.pl compiled 0.00 sec, 12,468 bytes

    truetrue.

    28Tr tu nhn to

  • Cc lnh ca tr chi

    ?- start.E t d i t d d P l tEnter commands using standard Prolog syntax.Available commands are:start. -- to start the game.

    t i th t di tin. s. e. w. -- to go in that direction.take(Object). -- to pick up an object.drop(Object). -- to put down an object.

    (Obj t) t bj tuse(Object). -- to use an object.attack. -- to attack an enemy.look. -- to look around you again.i i hi iinstructions. -- to see this message again.halt. -- to end the game and quit.

    29Tr tu nhn to

  • Bt u chng trnhg

    You are in a meadow. To the north is the dark th f t th th i ll b ildi mouth of a cave; to the south is a small building.

    Your assignment, should you decide to accept it, is to recover the famed Bar-Abzad ruby and return yit to this meadow.

    truetrue.

    30Tr tu nhn to

  • i v hng namg

    ?- s.You are in a small building. The exit is to the north. The room is devoid of furniture, and the only feature seems to be a small door to the east.y

    There is a flashlight here.

    true.

    31Tr tu nhn to

  • Ly vt, Ca b kha

    ?- take(flashlight).OKOK.

    true.

    ?- e.The door appears to be locked.ppYou can't go that way.

    true.

    32Tr tu nhn to

  • M kha ca, Quan st

    ?- use(key).The closet is no longer locked.

    true.

    ?- look.Y i bi d k Th i i f tidYou are in a big, dark cave. The air is fetid.

    There is a chest here.

    true.

    33Tr tu nhn to

  • Biu din cc s kin V tr (ni) hin ti ca ti: i am at(meadow) i_am_at(meadow).

    V tr ca cc vt: at(flashlight building) at(flashlight, building).

    Ti ang gi (nm) vt g: holding(key) holding(key).

    Nhng s kin no c th c thay i: :- dynamic i am at/1 at/2 holding/1 : dynamic i_am_at/1, at/2, holding/1.

    34Tr tu nhn to

  • u vo v u ra

    u vo (input) l cc lnh (cc cu hi) trc tip i vi Prolog take(flashlight). ( t t) d it ( ) hi u vo (output): s dng write(...) a ra cc hin th

    S dng nl kt thc dng hin th ( bt u vit g n g (dng hin th mi)

    V d: describe(closet) :-it ('Y i ld t l t ') lwrite('You are in an old storage closet.'), nl.

    35Tr tu nhn to

  • Bn ca tr chi

    N

    cave_entrance cave

    W ES

    meadow

    b ildi l tbuilding closet

    36Tr tu nhn to

  • Biu din bn

    path(cave, w, cave_entrance).th( t )path(cave_entrance, e, cave).

    path(meadow, s, building).p ( g)path(building, n, meadow).

    Hoc c th biu din nh sau: Hoc c th biu din nh sau: path(cave, w, cave_entrance).

    path(X, e, Y) :- path(Y, w, X).

    37Tr tu nhn to

  • Lit k

    Lit k cc mnh ca mt v t l mt cch ki t t thi hi t i h t h ( t ikim tra trng thi hin ti ca chng trnh (c s tri thc)

    C h li ti ( di t ) C php: listing(predicate)

    ?- listing(at).(k ) at(key, cave_entrance).

    at(flashlight, building).at(sword, closet).

    true.

    38Tr tu nhn to

  • Di chuyn theo cc hngg

    Biu din vic di chuyn theo 4 hng tng ng vi 4 lnh n, s, e, w, s dng v t go

    n :- go(n).g ( )

    s :- go(s).

    e :- go(e).

    ( )w :- go(w).

    39Tr tu nhn to

  • V t gog

    go(Direction) :-i_am_at(Here),path(Here, Direction, There),retract(i am at(Here)),retract(i_am_at(Here)),assert(i_am_at(There)),look.

    go(_) :-write('You can''t go that way.').

    40Tr tu nhn to

  • V t take take(X) :-

    i am at(Place)i_am_at(Place),at(X, Place),retract(at(X, Place)),assert(holding(X))assert(holding(X)),write('OK.'),nl.

    take(X) :-holding(X),

    it ('Y \' l d h ldi it!') lwrite('You\'re already holding it!'), nl.

    take(X) :-it ('I d \'t it h ') lwrite('I don\'t see it here.'), nl.

    41Tr tu nhn to

  • S dng t kha failg Mt v t tht bi (fail) nu n khng thnh cng

    (khng th chng minh c)(khng th chng minh c) C th pht biu r rng mt mnh l tht bi,

    bng cch s dng fail

    failcallfail

    S dng fail ch m bo l mnh hin ti ca v

    fail

    t l tht bi; ch khng bt buc ton b v t ltht bi

    42Tr tu nhn to

  • Ct

    S dng ct, c k hiu l ! , nh l mt im kt thc Kt thc vic nh gi mnh hin ti v tr ct

    ngha ca ct: Khng xem xt (thm na) bt k mnh no khc

    !call exit

    43Tr tu nhn to

  • S dng kt hp ct-tht big p

    S dng kt hp ct-tht bi, k hiu l !, fail , s c ngha ch nh rng ton b v t l tht bi (khng th chng minh c)

    !, fail kt thc mnh hin thi, v ch nh v t tht bi

    ! f l Theo sau !, fail s khng c bt k mnh no ca v t c xem xt na, v v vt ton b v t s tht bi

    44Tr tu nhn to

  • V d v !, fail Biu din ca ca phng kho b kha

    path(building, e, closet) :-locked(closet),write('The door appears to be locked.'), nl,( pp ), ,!, fail.

    path(building, e, closet).

    Nu ca ca phng kho khng b kha, th mnh th nht s tht bi mt cch bnh thng, v mnh th hai s c xt n th hai s c xt n

    Nu ca ca phng kho khng b kha, th !, fail sngn cn Prolog khng xt n mnh th haingn cn Prolog khng xt n mnh th hai

    45Tr tu nhn to

  • Th cc vtdrop(A) :-

    h ldi (A)holding(A),i_am_at(B),retract(holding(A))retract(holding(A)),assert(at(A, B)),write('OK.'), nl.( K ),

    drop(A) :-write('You aren\'t holding it!') nlwrite( You aren\ t holding it! ), nl.

    46Tr tu nhn to