Download as pdf or txt
Download as pdf or txt
You are on page 1of 46

Tr Tu Nhn To

Nguyn Nht Quang


quangnn-fit@mail.hut.edu.vn
Vin Cng ngh Thng tin v Truyn thng
Trng 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

Lp trnh logic Prolog


(Da trn bi ging
csc.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

Hc my

Lp k
hoch
Tr tu nhn to

Lp
p trnh logic
g

Mt chng trnh logic biu din mt c s tri thc (mt


tp cc mnh logic)

Cc mnh logic phi dng chun Horn


p1 p2 pn q1 q2 qm

Nu n=0, m=1, th q1 l mt s kin (fact)


Nu n1, m
m=1,
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)

Tr tu nhn to

Ngn
g ng
g lp
p trnh logic
g Prologg

Prolog = Programming Logic

Mt
t ngn
g ng
g lp
p ttrnh logic
og c c s d
dng
g rt
t p
ph
b
bin

Trong ngn ng Prolog

Cc lut v cc s kin l cc tin (axioms)


C hi,
Cu
hi c

a
ra bi ngi
i dng,
d
l nh
h l cn
chng
h minh
i h

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),
P(t) thay th tt=a
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
Tr tu nhn to

Phn mm SWI-Prologg

SWI-Prolog l mt cng c lp trnh Prolog c s


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

Bn quyn s dng phn mm SWI


SWI-Prolog
Prolog l min ph
cho mc ch hc tp v nghin cu

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


SWI-Prolog
http://www.swiprolog.org/

Tr tu nhn to

V d v chngg trnh Prologg (1)

Suy din logic

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

Mi sinh vin ca HUT u hc mn Ton ri rc

Tun c hc mn Ton ri rc khng?

Chng trnh Prolog

studentHUT(tuan)
studentHUT(tuan).

studDiscretMath(X) :- studentHUT(X).

?- studDiscretMath(tuan).
(
)

Tr tu nhn to

V d v chngg trnh Prologg (2)

S kin: Tun l mt sinh vin ca HUT

Lut: Mi sinh vin ca HUT u hc mn Ton ri rc

studDiscretMath(X) :: studentHUT(X).
studentHUT(X)

Cu hi (ca ngi dng): Tun c hc mn Ton ri


rc khng?

studentHUT(tuan).
t d tHUT(t
)

?- studDiscretMath(tuan).

Cc cu hi c cng dng nh cc s kin

Tr tu nhn to

Chy chngg trnh Prologg (1)

S dng mt chng trnh son tho (vd: Notepad)


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).

Tr tu nhn to

Chy chngg trnh Prologg (2)

chy chng trnh Prolog:

(Vi h iu
i hnh
h h Windows),
Wi d
) kch
k h p
ln
l tp
t tin
ti chng
h
t h
trnh,
hoc
Chy phn mm SWI-Prolog, v tham vn (consult) ti tp tin
chng
h
t h
trnh
?- consult('C:\\PrologPrograms\\myPrologProg.pl').

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

Prolog
o og a ra
a cu ttr
li

Yes

Tr tu nhn to

Prologg Chngg minh nh l

Prolog tr v gi tr Yes c ngha l chng minh c

Prolog
P
l tr
t v
gi
i tr
t No
N c
ngha
h l khng
kh th chng
h
minh
? stud_DiscretMath(hai).
?stud DiscretMath(hai)
No

Closed world assumption: Chng trnh Prolog bit tt


c
v
nhng
h g n
cn
bit

Prolog cung cp cc gi tr cho cc bin khi cn, c


th hon chnh mt chng minh
?- stud_DiscretMath(X).
X = tuan
Tr tu nhn to

10

C p
php:
p Cc cu trc

Mt cu trc (structure) gm mt tn (name) v khng,


mt hoc nhiu tham s (arguments)
mt,

B i cp du ngoc (), nu nh khng c tham s

Cc v d ca cu trc

sunshine

man(socrates)

path(garden, south, sundial)

Tr tu nhn to

11

C p
php:
p Cc mnh c s

Mt cu trc chnh l mt mnh c s (base clause)

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

Cc v d ca mnh c s

j hn
john.

mary

bill

loves(john, mary).

loves(mary, bill).

Tr tu nhn to

12

C p
php:
p Biu din lut

Mt lut c biu din bao gm

Mt cu
trc
t (biu
(bi din
di mnh
h kt lun
l ca
lut
l t mnh
h
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

mortal(X) :- man(X).

happy(X)
ppy( ) :- healthy(X),
y( ) wealthy(X),
y( ) wise(X).
( )

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

Tr tu nhn to

13

C p
php:
p Cc v t logic
g

Mt v t (predicate) l mt tp hp cc mnh vi
cng tn v mt s (>
(>=1)
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).

Tr tu nhn to

14

C p
php:
p Chngg trnh

Mt chng trnh (program) l mt tp hp cc mnh

Cc mnh trong chng trnh c th c sp xp


theo 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

Tr tu nhn to

15

C p
php:
p Cc bin v hngg

Cc bin bt u bng ch ci in hoa hoc k t c bit


Vd X,
Vd:
X Socrates,
S
t
_result
lt

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


c
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
t nhy
nh n,
n th phi s dng:
d ng '' hoc \
\'

Tr tu nhn to

16

C php: Ch thch

c t trong cp du: /**/

H c
Hoc

t sau du
d %

V d

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

Tr tu nhn to

17

C p
php:
p Cc li hay ggp
p

Phn bit gia ch hoa v ch thng l rt quan trng

Khng c
Kh

c
khong
kh trng
t (space
(
characters)
h
t ) gia
i
tn v danh sch tham s ca mt cu trc

Biu din hp
p l:
man(socrates).
(
)

Biu din khng hp l: man (socrates).

Kt thc ca mi mnh phi c du chm (.)

C th t du chm dng k tip

Tr tu nhn to

18

Suy din li trongg Prologg

Gi s chng ta c c s tri thc (chng trnh Prolog):


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

Gi s ngi dng t cu hi
loves(chuck, X)

Qu trnh suy din li (Back chaining) ca Prolog:

female(X) = female(jane)
female(jane), X = jane.
jane
rich(jane).
: tht bi (khng th chng minh c!)
female(X) = female(mary), X = mary.
rich(mary)
rich(mary).
: thnh cng (chng minh c!)
Tr tu nhn to

19

Cc li gi
g

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


bi:
call

exit
redo

fail

Mi cu trc (trong chng trnh Prolog) c bn cng


(ports):
(p
) call,, exit,, redo,, fail

Cng exit kt ni vi cng call

Cng
g fail kt ni vi cng
g redo

Tr tu nhn to

20

Cc li ggi lngg nhau (nested calls)

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

loves(chuck X)
loves(chuck,
call
fail

female(X)

Tr tu nhn to

rich(X)

exit
redo

21

Cc cu tr li b sungg

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

female(X)

?- female(X).
X = jane
j
X = mary
X = susan
Yes
Tr tu nhn to

female(jane)
female(mary)
female(susan)

22

Cc cch c

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


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

Cch c theo kiu th tc xp x: tm c mt i


tng X m Chuck yu, th trc tin phi tm c mt
ph n X, sau kim tra xem X c giu hay khng

C h c
Cch
theo
th kiu
ki khai
kh i bo
b thng
th c

a thch
th h hn
h

Tr tu nhn to

23

Logic
g n iu

Logic n iu (monotonic logic): Mt khi chng


minh
i h
c mt
t iu
i g l ng,

th i
iu s
mi
i
mi 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
-t
t
Nhng, iu g xy ra nu ci v c ly ra khi xe -t?

Tr tu nhn to

24

Logic
g khngg n iu

Prolog s dng logic khng n iu (nonmonotonic logic)

Trong Prolog,
Prolog cc s kin v cc lut c th c thay i
mt thi im no

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

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(...)
thc
assert v retract c gi l cc v t ngoi logic (extralogical
predicates)
Tr tu nhn to

25

Cc v d v assert v retract

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

Lu l i vi cc lut, phi s dng 2 cp


ngoc n (())

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

Tr tu nhn to

26

S dngg Prologg trongg bi ton thc t

Trong cc bi ton (ng dng) thc t, mi th c


th thay i (mt iu chng minh l ng,
ng th c
th s khng cn ng vo mt thi im sau )

Prolog rt ph hp cho vic biu din cc thay i


trong cc bi ton thc t

Cc ng
g dng
g tr chi l mt v d in hnh v cc
bi ton m trong cc s vic c th
thay i

Prolog l ngn ng rt ph hp xy dng cc


chng
h
trnh
t h tr
t chi
h i mo him
hi

Tr tu nhn to

27

V d minh ha chngg trnh tr chi

Chy ng dng SWI-Prolog

Welcome to SWI-Prolog (Multi-threaded, 32 bits,


Version 5.6.59)
py g (c)
( ) 1990-2008 University
y of Amsterdam.
Copyright
SWI-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
true.
true
Tr tu nhn to

28

Cc lnh ca tr chi

?- start.
E t commands
Enter
d using
i standard
t d dP
Prolog
l syntax.
t
Available commands are:
start.
-- to start the game.
n. s. e. w.
-- to
t go in
i th
thatt direction.
di
ti
take(Object).
-- to pick up an object.
drop(Object).
-- to put down an object.
use(Object).
(Obj t)
-- to
t use an object.
bj t
attack.
-- to attack an enemy.
look.
-- to look around you again.
i
instructions.
i
-- to see this
hi message again.
i
halt.
-- to end the game and quit.

Tr tu nhn to

29

Bt u chngg trnh

You are in a meadow. To the north is the dark


mouth
th of
f a cave; to
t the
th south
th is
i a small
ll building.
b ildi
Your assignment, should you decide to accept it, is
to recover the famed Bar-Abzad ruby
y and return
it to this meadow.
true.
true

Tr tu nhn to

30

i v hngg nam

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

Tr tu nhn to

31

Ly vt, Ca b kha

?- take(flashlight).
OK.
OK
true.

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

Tr tu nhn to

32

M kha ca, Quan st

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

?- look.
Y are in
You
i a big,
bi d
dark
k cave. Th
The air
i is
i fetid.
f tid
There is a chest here.
true.

Tr tu nhn to

33

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,
at(flashlight building)
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,
i am at/1 at/2,
at/2 holding/1.
holding/1

Tr tu nhn to

34

u vo v u ra

u vo (input) l cc lnh (cc cu hi) trc tip i vi


Prolog
take(flashlight).
vo
u
((output):
t t) s
d
dng write(...)
it ( )
a ra cc
hi
hin
th
S dng
g n
nl kt thc dng
g hin th (( bt u vit
dng hin th mi)
V d:
describe(closet) :write('You
it ('Y are in
i an old
ld storage
t
closet.'),
l
t ') nl.
l

Tr tu nhn to

35

Bn ca tr chi
N
W

E
S

cave_entrance

cave

meadow

b ildi
building

Tr tu nhn to

closet
l
t

36

Biu din bn

path(cave, w, cave_entrance).
path(cave_entrance,
th(
t
e, cave).
)
p
path(meadow,
(
s, building).
g)
path(building, n, meadow).
Hoc c th biu din nh sau:
path(cave, w, cave_entrance).
path(X, e, Y) :- path(Y, w, X).

Tr tu nhn to

37

Lit k

Lit k cc mnh ca mt v t l mt cch


ki tra
kim
t trng
t
thi hi
hin ti
t i ca
chng
h
t h (c
trnh
( s
tri
ti
thc)
C php:
h listing(predicate)
li ti (
di t )
?- listing(at).
at(key,
(k
cave_entrance).
)
at(flashlight, building).
at(sword, closet).
true.

Tr tu nhn to

38

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).
( )

Tr tu nhn to

39

V t go
g

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.').

Tr tu nhn to

40

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),
write('You\'re
it ('Y \' already
l
d h
holding
ldi it!')
it!'), nl.
l
take(X) :write('I
it ('I don\'t
d \'t see it here.'),
h
') nl.
l
Tr tu nhn to

41

S dngg t kha fail

Mt v t tht bi (fail) nu n khng thnh cng


(khng th chng minh c)
C th pht biu r rng mt mnh l tht bi,
bng cch s dng fail
call
fail

fail

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


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

Tr tu nhn to

42

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

Tr tu nhn to

exit

43

S dngg kt hp
p ct-tht bi

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
Theo sau !,
! fail
f l s khng c bt
k mnh
no
ca v t c xem xt na, v v vt ton b v t
s tht bi

Tr tu nhn to

44

V d v !, fail

Biu din ca ca phng kho b kha


path(building, e, closet) :locked(closet),
write('The
(
door appears
pp
to be locked.'),
), nl,,
!, 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
Nu ca ca phng kho khng b kha, th !, fail s
ngn cn Prolog khng xt n mnh th hai
Tr tu nhn to

45

Th cc vt
drop(A) :h ldi (A)
holding(A),
i_am_at(B),
retract(holding(A)),
retract(holding(A))
assert(at(A, B)),
write('OK.'),
( K ), nl.
drop(A) :write('You
write(
You aren\
aren\'tt holding it!
it!')), nl
nl.

Tr tu nhn to

46

You might also like