Upload
vantrungnguyen101
View
9
Download
0
Embed Size (px)
Citation preview
Tr Tu Nhn To
Nguyn Nht Quang
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