Sunteți pe pagina 1din 35

Seminar 1 1) Exemple de tautologii: a) p (q p ) este o tautologie. Demonstraia o vom face construind un tabel al valorilor de adevr.

r. q p p (q p) p q 0 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 ltima coloan arat c valoare propo!iiei este 1 indiferent de valorile propo!iiilor elementare. b) ( p q ) ( p q ) p este o tautologie. "ntr#adevr$ urmrind tabelul vedem c valorile acestei propo!iii sunt 1 indiferent de valorile variabilelor. p q 0 0 1 1 0 1 0 1 p 1 1 0 0 q 1 0 1 0 pq 1 1 0 1 pq 1 1 1 0 ( p q) ( p q ) p 1 1 1 1

%) Demonstrati urmatoarele tautologii (legile de ba!a): 1. p q q p pq q p %. p (q r ) ( p q) r p (q r ) ( p q) r &. p (q p) p '. p (q r ) ( p q) ( p r ) p (q r ) ( p q) ( p r ) (. p q p q ). p p 1. p*+*p p q p q 0 0 0 0 1 0 1 0 0 1 1 1

q p 0 0 0 1

pqqp 1 1 1 1

p 0 0 1 1 q 0 1 0 1

p q 0 1 1 1

q p 0 1 1 1

pqqp 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

%. p(*r)+(p*) r p q r qr 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 p (*r)+(p*) r p q r qr 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 &. p(*p)+p p q 0 0 1 1 0 1 0 1 0 1 1 1 q p

p(qr) 0 0 0 0 0 0 0 1

pq 0 0 0 0 0 0 1 1

(pq) r 0 0 0 0 0 0 0 1

p (qr) 0 1 1 1 1 1 1 1

pq 0 0 1 1 1 1 1 1

(pq)r 0 1 1 1 1 1 1 1

p (q p) 0 0 1 1

p (q p) p 1 1 1 1

'. p(*r)+(p*) (pr) p 0 0 0 0 1 1 1 1 q 0 0 1 1 0 0 1 1 r 0 1 0 1 0 1 0 1 qr 0 1 1 1 0 1 1 1 p (qr) 0 0 0 0 0 1 1 1 pq 0 0 0 0 0 0 1 1 pr 0 0 0 0 0 1 0 1 (pq)( pr) 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1

p(*r)+(p*)(pr) p 0 0 0 0 1 1 1 1 q 0 0 1 1 0 0 1 1 r 0 1 0 1 0 1 0 1 qr 0 0 0 1 0 0 0 1 p(qr) 0 0 0 1 1 1 1 1 pq 0 0 1 1 1 1 1 1 pr 0 1 0 1 1 1 1 1 (pq)(pr) 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1

(. p q p q p 0 0 1 1 ).
p

q 0 1 0 1 +p p 1 0

p 1 1 0 0

q 1 0 1 0

pq 1 0 0 0

pq 1 0 0 0

pq pq 1 1 1 1

p 0 1

p 1 1

0 1

&

&) Demonstraia principiului terului exclus p p ,i respectiv p p : p p p p p p 0 1 1 0 1 1 1 1

') S se scrie formulele de structur pentru sc-emele de mai .os si sa se stabileasca conductibilitatea dipolului.

/roblema 1.

/roblema %.

/roblema &.

'

/roblema ' Soluia problemei 1: (a b) W A b W b 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0

/roblema (

(a b) 0 0 0 0 1 1 0 0

(a b)W 0 0 0 0 0 1 0 0

Soluia problemei %: (a b) b W A b W b 0 0 0 1 0 0 1 1 0 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 0 1 1 1 0 Soluia problemei &: (a b) W A 0 0 0 0 1 1 1 1 b 0 0 1 1 0 0 1 1 W 0 1 0 1 0 1 0 1 (a b) 0 0 1 1 1 1 1 1 (ab) 1 1 0 1 1 1 1 1 (ab) b 0 0 0 1 0 0 1 1 (a b) b W 0 0 0 1 0 0 0 1

(a b) W 0 0 0 1 0 1 0 1

Soluia problemei ': (a b c ) (a b c) (c a b) W Soluia problemei (: 0(a (c d ) b) b (c d ) a 1 W

Seminar % 1. 2duceti in forma normala urmatoarele expresii: a. (p3*)3r b. 0(p3*) (*3r)1 3(p3r) c. p (* p) d. ( p 3*)3 r 4e!olvare: a. ( p q) r p q r ( p q) r ( p q ) r ( p q ) r Expresie adus la forma normal dis.unctiv. b. 0( p q ) ( q r )1 ( p r ) 0( p q ) ( q r )1 ( p r ) 0( p q ) ( q r )1 ( p r ) ( p q) (q r ) ( p r ) ( p q) (q r ) ( p r ) ( p q) (q r ) ( p r ) ltima expresie este 5n forma normal dis.unctiv c. p (q p ) p (q p ) p ( q p ) p (q p) p q p 6orma normal con.unctiv obinut ne permite s susinem c expresia este o contradicie. d.
( p q ) r p q r p q r ( p q ) r

Expresie adus la forma normal dis.unctiv. %. S se aduc la forma normal a. con.unctiv perfect expresia a (b c)( a b) b. dis.unctiv perfect expresia ab ab c 4e!olvare:

a.
a (b c )(a b) 0 a bb cc 10(b c) a a 10a b cc 1 0(a b)(a b) cc1(b c a )(b c a )( a b c )(a b c) 0 a b c c10a b c c1(a b c)(a b c )(a b c)(a b c ) ( a b c)(a b c )(a b c)(a b c)(a b c )( a b c)(a b c )(a b c) ( a b c)(a b c )(a b c)(a b c)(a b c )( a b c)(a b c )

b. ab ab c ab(c c) ab(c c ) c (a a ) (b b) abc abc abc abc abc abc abc abc abc abc abc abc abc abc 6orma este normal dis.unctiv perfect. &. S se gseasc expresia pentru care valorile sunt date mai .os$ s se scrie forma normal dis.unctiv perfect$ s se simplifice ,i s se repre!inte sc-ema care reali!ea! funcionarea dorit: a. (1$ 0$ 0) = (1$1$ 0) = (0$1$ 0) = (0$1$1) = 1 (0$ 0$ 0) = (1$1$1) = (1$ 0$1) = (0$ 0$1) = 0 b.
(0$0$1) = (0$1$1) = (0$0$0) = (0$1$0) = (1$0$0) =1 (1$1$1) = (1$1$0) = (1$0$1) = 0

4e!olvare. a. rmrind valorile variabilelor pentru care funcia este 1 putem scrie urmtoarea funcie = abc abc abc abc 2ceasta este o form normal dis.unctiv. /entru a o simplifica procedm astfel: = ac(b b) ab(c c) = ac ab /utem deci repre!enta sc-ema a crei funcionare este dat de funcia . Sc-ema este cea din figura de mai .os

Sinte!a dipolului b.89abc Importanta logicii predicatelor (cateva observatii) # este una dintre cele mai puternice teorii logice$ in cadrul careia se pot formali!a re!ultate stiintifice ale fi!icii si matematicii (v: ideea lui :uine # logica de ordinul intii
reprezinta limbajul stiintei; rezultatele lui Peano pentru teoria multimilor, incercarile logicistilor etc.);

# ofera o procedura de deci!ie pentru determinarea validitatii unui mare numar de rationamente; # poate fi folosita pentru de!ambigui!area unor formulari din limba.ul natural (v: incercarile lui 4ussell din 1<0( initia!a aceasta intrebuintare a logicii predicatelor #= interesele filosofice etc.); 4. O modalitate alternativa de familiarizare cu logica predicatelor incercarile de traducere; S se rescrie urmtoarele propoziii folosind predicate i cuantificatori. Pentru fiecare propoziie s se indice predicatul folosit (sau predicatele folosite) i universul discursului:

a) nele pisici nu sunt independente. (Ex)(/(x) > ?@(x)) b) Aici un ciine nu este vegetarian. ( )(!( ) "# $%( )) c) Exista pisici salbatice. (Ex)(/(x) > S(x)) d) /isicile sunt patrupede. (x)(/(x) #= B(x)) e) Boti ciinii latra si toate pisicile miauna. ((x)(C(x) #= D(x)) > (E)(/(E) #= F(E)) f) nii ciini latra$ dar altii nu. (Ex)(C(x) > D(x)) > (EE)(C(E) > ?D(E)) var: (x)(C(x) #= (D(x) G ?D(x))) (de ce nu e bunaH) (Ex)(C(x) > (D(x) G ?D(x))) (de ce nu e bunaH) 0discutie1 Exercitii:

1) Ciinii si pisicile sunt animale domestice. %) Daca unele pisici sunt salbatice$ atunci unele sunt domestice. &) Daca nici un ciine nu este pisica$ atunci nici o pisica nu este ciine. 4e!olvare: 1) Ciinii si pisicile sunt animale domestice. (x)(E)((C(x) #= D(x)) > (/(E) #= D(E))) %) Daca unele pisici sunt salbatice$ atunci unele sunt domestice. (Ex)(/(x) > S(x)) #= (EE)(/(E) > D(E)) &) Daca nici un ciine nu este pisica$ atunci nici o pisica nu este ciine. (x)((C(x) #= ?/(x)) #= (/(x) #= ?C(x))) 4elatii 1) Jricine iubeste pe cineva. (x)(EE)D(x$E) %) Jricine se iubeste pe sine insusi. (x)D(x$x) &) Jrice om iubeste florile. (x)(E)((J(x) > 6(E)) #= D(x$E)) ') Exista oameni care nu iubesc unele flori. (Ex)(EE)(J(x) > (6(E) > ?D(x$E)) Scoaterea cuantorilor in fata parante!ei (forme prenexe) (.....(x)..x..) se poate transforma in (x)(........) (..x..(x)..x..) nu se poate transforma in (x)(.....)$ dar se poate transforma (prin reliterare) in (E)(..x.. ..E..) la fel si (Ex) K(x)(EE)6(x$E) nu coincide cu (EE)(x)6(x$E) Ec-ivalentele cuantorilor 1) (x)6x L#= ?(Ex)?6x %) (Ex)6x L#= ?(x)?6x &) ?(x)6x L#= (Ex)?6x ') ?(Ex)6x L#= (x)?6x acestea deriva din definitia cuantorilor: (x)6x 9def. 6c1 > 6c% >...> 6cn (Ex)6x 9def. 6c1 G 6c% G...G 6cn K relatii intre formule cuantificate diferit: 1) (x)6x #= 6c %) 6c #= (Ex)6x &) (x)6x #= (Ex)6x
Exercitii &) ' ista pisici. (' )P( ) (ec(ivalente ale cuantorilor) )) *nele pisici sint mai destepte decit orice ciine.

<

(' )P( )+(,)(!(,) "# -( ,,)) (forma prene a) .) /u tot ce mininca orice ciine poate minca si o pisica. (varianta mai lunga) $( )(0( ) "# (,)((!, "# 1(,, )) "# ('z)(P(z) + 1(z, )))) (varianta mai scurta) (' )(,)((!, "# 1(,, )) + $(('z)(P(z) + 1(z, )))) (forma prene a) (' )(,)('z)(((!, "# 1(,, )) + $(P(z) + 1(z, ))) (problema: ordinea cuantorilor " de discutat) Exercitiu:

Sa se formali!e!e$ si apoi sa se treaca in forme prenexe$ urmatoarele propo!itii: 1)Daca orice ciine este un animal domestic$ atunci oricine -raneste un ciine -raneste un animal domestic. %)Exista pisici care seamana cu un ciine si exista ciini care seamana cu un miel$ dar nu exista miei care sa semene cu o pisica.
2ezolvare:

1) (x)(C(x) #= D(x)) #= (E)((C(x) > M(E$x)) #= (D(x) > M(E$x))) forma prenexa: (x)(E)((C(x) #= D(x)) #= ((C(x) > M(E$x)) #= (D(x) > M(E$x)))) in logica propo!itionala ii corespunde: (p #= *) #= ((p > r) #= (* > r)) %) (Ex)(EE)(/(x) > C(E) > S(x$ E)) > (EE)(E!)(C(E) > F(!) > S(E$!)) > (!)(x) (F(!) > /(x) > ?S(!$x)) ultima parte: ?(E!)?(Ex)(F(!) > /(x) > S(!$x)) (!)(x)?(F(!) > /(x) > S(!$x)) ve!i: (asociativitatea con.unctiei) (p > * > r) L#= ((p > *) > r) L#= (p > (* > r)) s.a.m.d. (De Forgan) ?(p > *) L#= (?p G ?*) (!)(x)?((F(!) > /(x)) > S(!$x)) (!)(x)(?(F(!) > /(x)) G ?S(!$x)) (!)(x)((?F(!) G ?/(x)) G ?S(!$x)) sau (v: interdefinibilitatea operatorilor) (!)(x)((F(!) > /(x)) #= ?S(!$x)) reliterind$ obtinem: (Ex)(EE)(E!)(v)(N)(/(x) > C(E) > S(x$ E)) > (C(E) > F(!) > S(E$!)) > (?F(v) G ?/(N) G ?S(v$N)) formule propo!itionale: (p > * > r) > (* > s > r) > ((t > u) #= ?v) dar ve!i ca: t #= s

10

u #= p ).Probleme ale traducerii din limbajul natural " standardizarea


&) 3m vazut o floare carnivora (e ista o floare si ea e carnivora). 4 musca a intrat in ea. (e ista o floare carnivora si e ista o musca, iar musca a intrat in floare). 5loarea a mincat"o. (e ista o floare carnivora si o musca iar floarea a mincat musca) 3m inteles atunci ca florile carnivore mininca insecte (oricare obiect daca e floare si e carnivora atunci pentru oricare alt obiect, daca e insecta, primul il mininca pe al doilea). (' )((5( ) + !( )) + (',)(1(,) + 0( , ,))) + (z)((5(z) + !(z)) "# ('6)(7(6) + 0(z,6)) )) -aca -umnezeu e ista, atunci nu pot e ista necredinciosi. (daca -. e ista atunci nu poate e ista un om care nu crede in -umnezeu " de e plicitat mai departe) (' )-( ) "# (,)(z)((-(z) + 4(,)) "# !(,,z)) ' ercitii: &) 4rice partitura poate fi cintata. )) 1uzicienii de profesie cinta dupa partituri. .) /u e mare lucru sa fii ecologist. /u trebuie decit sa ai grija de natura. 8) -aca prin bine intelegem placere si absenta durerii, atunci orice om care urmareste binele va face tot ce"i sta in putinta sa ocoleasca durerile. 2ezolvare: &) 4rice partitura poate fi cintata. ( )(P( ) "# (',)(1(,) + !(,, ))) )) 1uzicienii de profesie cinta dupa partituri. ( )(1( ) "# (',)(P(,) + !( ,,))) .) /u e mare lucru sa fii ecologist. /u trebuie decit sa ai grija de natura. ( )('( ) "# (',)(/(,) + 9( ,,))) varianta: ( )(,)((4( ) + /(,)) "# ('( ) :"# 9( ,,))) 8) -aca prin bine intelegem placere si absenta durerii, atunci orice om care urmareste binele va face tot ce"i sta in putinta sa ocoleasca durerile. ( )((;( ) "# (P( ) + $-( )) "# (,)(*(,, ) "# (z)(-(z) "# $*(,,z))))

Exercitii: Sa se standardi!e!e si sa se treaca in lb.. formal urmatoarele propo!itii: Declaratia univ. a drepturilor omului 2rt.&: OJrice fiinta umana are dreptul la viata$ la libertate si la securitatea persoanei sale.O (problema: Oa avea dreptul laOPOa avea dreptul saO) varianta simpla: (x)(J(x) #= (G(x) > D(x) > S(x))) 11

2rt.7: OBoti oamenii sint egali in fata legii.O (Oa fi egal in fata legiiO ? Oa avea aceleasi drepturi si obligatii legale ca oricare altulO ? Opentru orice lege$ daca i se aplica lui E oarecare$ atunci i se aplica si lui xO etc.) varianta simpla: (x)(E)((J(x) > J(E)) #= D(x$E)) 2rt.%0: OAimeni nu poate fi silit sa faca parte dintr#o asociatie.O varianta: (x)(E)(!)((J(x) > J(E) > 2(!)) #= ?S(x$E$!))

1%

Seminar & 1. Gom demonstra cQteva proprieti ale mulimii prilor: Proprietatea 1. Dac A B A B = B Demonstraie a) @ntr#adevr$ fie x A B . Cum A B x A$ x B $ ca urmare x B . Deci A B B. b) @nvers$ dac x B re!ulta x A B . Deci B A B . Proprietatea 2. Dac A B A B = A . Demonstraie. a) Din A B x A$ x B re!ult c x A B .Ca urmare$ A A B b) Dac x A B $ x A x B $ ca urmare x A $ deci A B A . "n conclu!ie A B = A . c.c.t.d. Proprietatea 3. A B C A C B . Demostraie. 1) Din A B x A $ x B . Dac C A y C $ y B $ adic C B . %) @nvers$ y C y A $ atunci y B . Ca urmare$ A B . Proprietatea 4. Dac A B B A . "ntr#adevr$ A B x A$ x B . S considerm y B $ atunci y A $ deci B A . %. Sa se demonstre!e proprietile diferenei mulimilor: a. ( A B ) C = ( A C ) ( B C ) b. ( A B ) C = ( A C ) ( B C ) c. A ( B C ) = ( A B ) ( A C ) d. A ( B C ) = ( A B) ( A C ) e. A A = f. ( A B) C = A ( B C ) Demonstraie a. b. c. d. e. f. 1) 2rtm c ( A B) C A ( B C ) . 6ie x ( A B ) C . 2tunci x A $ x B $ x C x B C . Ca urmare$ x A $ x B C x A ( B C ) . %) 2rtm c A ( B C ) ( A B) C . 6ie x A ( B C ) $ re!ult c x A x B x C $ adic x ( A B ) C . &. Sa se demonstre!e proprietile diferenei simetrice: a. AB = ( A B) ( A B) b. AB = ( A B ) ( A B ) c. AA = d. A = A 1&

'. Sa se demonstre!e proprietile funciei lui S-effer: a. A B = A B b. A A = A c. ( A B ) ( A B ) = A B d. ( A A) ( B B ) = A B A I = A e. A = I f. A A = I .

1'

Seminar '

Curs practic 1
Sa nu va lasati 5nselati de faptul ca descrierile din cursul practic sunt mult mai scurte decQt textul pe care tocmai l#ati citit R partea practica a cursului este 5n mod sigur cea mai importanta. Brebuie sa cititi textul si sa efectuati exercitiile$ dar acest lucru nu este de a.uns pentru a a.unge un programator 5n /rolog. /entru a stapQni limba.ul trebuie sa te ase!i 5n fata computerului si sa exerse!i mult acest program. Scopul primului curs practic este sa va familiari!ati cu elementele de ba!a 5n legatura cu modul de a crea si de a opera cu un astfel de program. 2cum$ pentru ca sunt foarte multe implementari si foarte multe sisteme de operare$ nu putem fi foarte precisi aici. Fai curQnd$ ceea ce vom face este sa descriem 5n termeni foarte generali ceea ce implica operarea cu acest program$ sa enumeram abilitatile necesare$ si sa oferim unele sugestii. Cel mai simplu mod de a opera un program /rolog este urmatorul. 2i un fisier cu un program /rolog ( de exemplu$ poti avea fisierul Sb%.pl care contine ba!a de date TU%)."ncepi operarea. /rologul va pre!enta replica$ ceva de genul :
<"

ceea ce indica faptul ca este gata sa accepte ipote!a. "n acest stadiu$ /rologul nu stie absolut nimic despre TU%. /entru a vedea acest lucru$ scrie comanda VlistingW (enumerare)$ urmata de punct. Scrie :
<"listing

si apasa pe revenire (Vreturn SeEW) Comanda Vlisting V este un predicat special construit 5n interiorul prologului care 5l instruieste sa expuna continuturile actualei ba!e de date. Dar 5nca nu am spus nimic /rologului despre ba!e de date$ asa ca va raspunde doar VXesW. 2cesta este un raspuns corect: cum /rologul nu stie 5nca nimic$ asa ca /rologul raspunde VXesW (nu are 5nca nimic de pre!entat). De fapt$ cu implementari mai sofisticatePevaluate ati putea obtine ceva mai mult ( de exemplu numele bibliotecilor care au fost 5nregistrate ) dar$ oricum$ veti obtine un raspuns asemanator cu :
= /u stiu nimic >n legatura cu nici o baza de date ? @

2sadar sa informam /rologul despre TU%. /resupunQnd ca ati pastrat TU% 5n fisierul Sb%.pl si ca acest fisier este 5n acelasi registru spre care este condus programul$ tot ceea ce trebuie sa scrii este :
<" ABb)C.

2ceasta spune /rologului sa consulte fisierul Sb%.pl si sa 5nregistre!e continuturile ca noua ba!a de date. /resupunQnd ca Sb%.pl nu contine greseli de tipografie$ /rologul va citi 5n fisier$ poate va tipari un mesa. prin care va comunica faptul ca consulta fisierul Sb%.pl si apoi va raspunde
: =Des@.

Este o situatie obisnuita sa pastram codul 5n fisiere cu un sufix .pl. Este o indicatie folositoare 5n privinta continutului fisierului si 5n multe implementari nu este nevoie sa scrieti sufixul .pl cQnd consultati fisierul. 2sadar /rologul ar trebui sa stie acum totul despre predicatele din TU% si putem verifica daca e asa folosind comanda VlistingW (enumerati) din nou:
<"listing

Daca faceti asta$/rologul va lista urmatoarele pe monitor:

ascultamuzica(mia). fericita(,olanda). cEntalac(itara(mia):"ascultamuzica(mia).

1(

cEntalac(itara(,olanda):"ascultamuzica(,olanda). ascultamuzica(,olanda):"fericita(,olanda). Des

Ga lista faptele si regulile care alcatuiesc TU% si atunci va spune Xes. Din nou$s#ar putea sa primiti mai mult decQt atQt$ ca de exemplu locatiile diferitelor biblioteci care au fost 5nregistrate. De exemplu scriind:
<"listing(cEntalac(itara).

programul pre!inta toata informatia din ba!a de date despre predicatul cQntalac-itara. 2sadar 5n acest ca! /rologul va expune:
cEntalac(itara(mia):" ascultamuzica(mia). cEntalac(itara(,olanda):" ascultamuzica(,olanda). Des

2cum esti gata sa opere!i. TU% este 5ncarcata si programul functionea!a$ asa ca poti (si ar trebui) sa 5ncepi sa faci exact genul de cercetari despre care am discutat. Dar sa revenim la cele discutate anterior si sa re!umam cQteva dintre abilitatile pe care va trebui sa le stapQnesti ca sa a.ungi pQna aici (atQt de departe): Ga trebui sa stii cQteva fapte de ba!a despre sistemul de operare pe care#l folosesti. /Qna la urma va trebui sa stii cum sa salve!i unde vrei fisierele care contin programe. Ga trebui sa stii cum sa utili!e!i un anumit gen de text editor asa 5ncQt sa scrii si sa modifici programe. S#ar putea sa vrei sa iei ca exemplu programe /rolog de pe internet. 2sa ca asigura#te ca stii cum sa folosesti un broNser pentru a gasi ceea ce vrei si sa pastre!i codul unde vrei. 2sigura#te ca stii cum sa active!i programul /rolog$ si consulta fisierele din el. Cu cQt 5nveti mai repede aceste lucruri$ cu atQt mai bine. Jdata aceste obstacole 5nlaturate (ceea ce n#ar trebui sa dure!e mult) poti 5ncepe sa te concentre!i asupra stapQnirii /rologului (ceea ce va dura mult mai mult). Dar presupunQnd ca ai deprins toate aceste lucruri$ ce urmea!aH Destul de simplu$ sa te .oci cu acest programY Consulta diferitele ba!e de date despre care am vorbit asta!i si verifica daca ipote!ele amintite intr#adevar functionea!a 5n felul 5n care am spus. Cercetea!a TU( si asigura#te ca 5ntelegi de ce obtii acele relatii Vgelo!ieW. "ncearca formulQnd noi ipote!e. Experimentea!a cu predicatul VlistingW ( este o metoda folositoare ). Scrie ba!a de date utili!ata 5n exercitiul ( si verifica daca raspunsurile tale sunt corecte. Cel mai bine gQndeste#te la un domeniu care te interesea!a si creea!a o noua marca de ba!e de date din sc-ema. 1.Exercitii: a. Care dintre urmatoarele secvente de caractere sunt atomi$ care sunt variabile si care nu sunt nici una nici alta: 1. v7/!'/F %. 5ootmassage &. variable). '. %ariable)GGG (. bigHBa(unaHburger ). Ibig Ba(una burgerI 7. big Ba(una burger I. IJulesI <. HJules 10. IHJulesI 1)

raspuns : atomi: 1$&$($)$I$10 variabile:%$'$<

nimic:7

b.!are dintre urmatoarele secvente de caractere sunt atomi, care sunt


variabile, care sunt termi complecsi si care nu sunt termi deloc< -ati functorul si aritatea pentru fiecare term comple : 1. loves(%incent,mia) %. Iloves(%incent,mia)I &. ;utc((bo er) '. bo er(;utc() (. and(big(burger),Ba(una(burger)) ). and(big(K),Ba(una(K)) 7. Hand(big(K),Ba(una(K)) I. (;utc( Bills %incent) <. Bills(;utc( %incent) 10. Bills(;utc(,%incent

raspuns : atomi: ) 1: loves % ': boxer 1 (: and % ): and %

termi complecsi: &,8,L,M

nimic:.,N,O,P,&G

c.!ate fapte, reguli, propozitii si predicate sunt in urmatoarea baza de


cunostinte< !are sunt capurile regulilor si care sunt obiectivele pe care le contin< woman(vincent). woman(mia). man(jules). person(X) :-man(X); woman(X). loves(X,Y) :- knows(Y,X). father(Y,Z) :- man(Y), son(Z,Y). father(Y,Z) :- man(Y), dau hter(Z,Y).

raspuns: fapte: & $ reguli: ' propo!itii: 7 predicate: O 1. capul este person(Z) si obiectivele man(Z) sau Noman(Z) %. capul este loves(Z$X) si obiectivul SnoNs(X$Z) &. capul este fat-er(X$[) si obiectivele man(X) si son([$X) '. capul este fat-er(X$[) si obiectivele man(X) si daug-ter([$X) d. 4epre!entati urmatoarele in /rolog: 1. Uutc- is a Siller. %. Fia and Farcellus are married. &. [ed is dead. '. Farcellus Sills everEone N-o gives Fia a footmassage. (. Fia loves everEone N-o is a good dancer. ). \ules eats anEt-ing t-at is nutritious or tastE.

17

4aspuns : 1. Siller(butc-). %. married(mia$marcellus). &. dead(!ed). '. Sill(marcellus$Z):#givefootmassage(Z$mia). (. love(mia$Z):#dancer(Z). ). eat(.ules$Z):#nutritious(Z);tastE(Z). e./resupunand ca se lucrea!a cu urmatoarea ba!a de cunostinte (e.pl):
wi!ard(ron). has"and(harr#). $uidditch%la#er(harr#). wi!ard(X) :- has&room(X),has"and(X). has&room(X) :- $uidditch%la#er(X).

cum raspunde prolog la urmatoarele interogariH 1. 6izard(ron). %. 6itc((ron). &. 6izard((ermione). '. 6itc(((ermione). (. 6izard((arr,). ). 6izard(D). 7. 6itc((D). raspuns: 1. Ees %. undefined procedure: Nitc-P1 &. no '. undefined procedure: Nitc-P1 (. Ees ). X9ron; X9-arrE. 7. undefined procedure: Nitc-P1

Curs practic
Fai 5ntQi de toate$ 5ncepem interpreterul /rolog. Se afi,ea! ceva de genul:
'-

De exemplu pentru a testa dac food(bread,K) ,i food(D,sausage) se unifica$ se tastea!a:


food((read,X) ) food(Y,sausa e).

si se apasa Enter. 2r trebui$ de asemenea sa ne uitam la ceea ce se 5ntQmpl atunci cQnd /rolog ramane blocat 5ntr#o 5ncercare de a potrivi termeni care nu pot fi potriviti$ deoarece nu se poate efectua o verificare. De exemplu$ sa vedem ce se 5ntQmpl cQnd se da interogarea:
(X,Y) ) Y.

2cesta este momentul perfect pentru a v asigura c ,titi cum s abandonati un program care se execut slbaticY

1I

Exist un alt predicat important in /rolog care rspunde 5ntrebrilor despre potrivire$ ,i anume QRS) . 2proximativ vorbind$ acest lucru lucrea! 5n sens invers predicatului RS): el reu,e,te$ atunci cQnd cele dou argumente nu se unifica. De exemplu$ termenii a si b nu se unifica$ ceea ce explic urmtorul dialog:
a *) ( #es

2sigurai#v c ai 5neles cum lucrea!a QRS) 5ncearc#l pe (cel puin) urmtoarele exemple. Dar faceti acest lucru activ$ nu pasiv. Dup ce ati tastat un exemplu$ 5ncercai s vedeti ce va rspunde /rolog. Aumai apoi dati Enter pentru a vedea dac aveti dreptate. 1. a QR a (no) %. IaI QR a (no) &. 3 QR a (no) '. f(a) QR a (true) (. f(a) QR 3 (no) ). f(3) QR f(a) (no) 7. g(a,;,c) QR g(3,b,!) (no) I. g(a,b,c) QR g(3,!) (Ees) <. f(K) QR K (no) 2stfel$ predicatul QRS) este (5n esen) negarea predicatului RS): o interogare care implic unul dintre aceste predicate va fi satisfcuta 5n ca!ul 5n care interogarea corespun!atoare care il implic pe celalalt nu este$ ,i vice versa (aceasta este primul exemplu de manipulare a negaie). Dar reinei cuvQntul O5n esenO. E timpul s se introduc una dintre cele mai utile instrumente 5n /rolog: trace 2cesta este un predicat /rolog built#in$ care sc-imb modul 5n care se execut /rolog: fortea!a /rolog sa evalue!e interogarile pas cu pas$ indicQnd ce se face la fiecare pas. /rolog a,teapt Enter pentru a trece la pasul urmtor$ astfel poate vedea exact ce se 5ntQmpl. 2 fost de fapt proiectat pentru a fi utili!at ca un instrument de depanare$ dar este de asemenea foarte util la 5nvarea lui /rolog: parcurgerea programelor utili!Qnd trace este o metod excelent de a vedea cum face /rolog cutarea. S vedem un exemplu. "n curs$ am va!ut cutarea$ atunci cQnd am facut interogarea B(K) asupra urmtoarei ba!e de cuno,tine:
f(a). f((). (a). ((). h((). k(X) :- f(X), (X),h(X).

Sa presupunem ca aceast ba! de cuno,tine este 5ntr#un fi,ier proof.pl Fai 5ntQi 5l consultm:
+ '- ,proof-. . proof compiled /.// sec, +,012 (#tes

1<

#es

2poi$ se tastea!a trace:


1 '- trace. Yes

/rolog este acum 5n mod trace$ ,i va evalua toate interogrile pas cu pas. De exemplu$ dac vom pune interogarea B(K) ,i apoi dam Enter$ de fiecare dat /rolog intoarce un < , vom obine (ceva de genul) urmtoarele:
,trace- 1 '- k(X). 3all: (4) k(56784) ' creep 3all: (9) f(56784) ' creep :;it: (9) f(a) ' creep 3all: (9) (a) ' creep :;it: (9) (a) ' creep 3all: (9) h(a) ' creep <ail: (9) h(a) ' creep =edo: (9) f(56784) ' creep :;it: (9) f(() ' creep 3all: (9) (() ' creep :;it: (9) (() ' creep 3all: (9) h(() ' creep :;it: (9) h(() ' creep :;it: (4) k(() ' creep X ) (. Yes

Studiati cu atenie. 2sta este$ 5ncercai s faceti singuri. /entru a porni$ vom remarca faptul c cea de#a treia linie este locul 5n care este initiali!ata variabila din interogare (5n mod eronat) cu a ,i c linia marcat cu redo este locul in care /rolog isi da seama ca a urmat o cale gre,it$ ,i se intoarce inapoi pentru a initiali!a variabila cu b . 2- da: ai nevoie$ de asemenea$ s ,tie cum s revi din trace. /ur ,i simplu se tastea!a Onotrace.O ,i se da Enter:
notrace.

%.Exercitii: a.Care dintre urmtoarele perec-i de termeni se potrivescH 1. bread R bread %. I;readI R bread &. IbreadI R bread '. ;read R bread (. bread R sausage ). food(bread) R bread 7. food(bread) R K I. food(K) R food(bread) <. food(bread,K) R food(D,sausage) 10. food(bread,K,beer) R food(D,sausage,K) 11. food(bread,K,beer) R food(D,Ba(unaHburger) 1%. food(K) R K %0

1&. meal(food(bread),drinB(beer)) R meal(K,D) 1'. meal(food(bread),K) R meal(K,drinB(beer)) raspuns: 1$&$'$7$I$<$1% b.Ducram cu urmtoarea ba! de cuno,tine:
house5elf(do((#). witch(hermione). witch(>?c6ona all>). witch(rita5skeeter). wi!ard(harr#). ma ic(X):-house5elf(X). ma ic(X):-wi!ard(X). ma ic(X):-witch(X).

Care dintre urmtoarele 5nterogari sunt satisfcuteH 1. %. &. '. (.


<" <" <" <" <" magic((ouseHelf). 6izard((arr,). magic(6izard). magic(I1c9onagallI). magic(0ermione).

Desenati arborele pentru a cincea interogare magic(0ermione). 4aspuns: %$'$(.

magic(Mermione ) Mermione9]1(I Mermione9]1(I -ouse]elf(]1(I) ]1(I9dobbE Mermione9]1(I Nitc-(]1(I) ]1(I9-ermione ]1(I9^Fc_onagal ]1(I9rita]sSeeter

Ni!ard(]1(I) ]1(I9-arrE

l^

Gom introduce doua predicate NriteP1 si readP1$ nlP0$ tabP1. Nrite afisea!a pe intrarea standard termul transmis$ iar read citeste de la intrarea standard. Exemplu: n program care ne saluta.(sal.pl)

%1

c. 2vem un mic vocabular ,i o mini gramatic cu o singur regul care define,te o propo!itie compusa din cinci cuvinte: un articol$ un substantiv$ un verb$ ,i$ din nou$ un articol ,i un substantiv.
word(article,a). word(article,ever#). word(noun,criminal). word(noun,>(i kahuna (ur er>). word(ver(,eats). word(ver(,likes). sentence("ord+,"ord1,"ord7,"ord2,"ord0) :word(article,"ord+), word(noun,"ord1), word(ver(,"ord7), word(article,"ord2), word(noun,"ord0).

Ce interogare trebuie pusa pentru a obtine propo!iiile pe care gramatica le poate generaH Distati toate propo!itiile pe care aceast gramatic le poate genera$ 5n ordinea in care /rolog le generea!a. 4aspuns: sentence(Z$X$[$B$`). d. 2vem ,ase cuvinte in engle!: abalone, abandon, anagram, connect, elegant, enhance. 2cestea urmea! s fie dispuse 5ntr#o grila de cuvinte 5ncruci,ate ca mai .os.

rmtoarea ba!a de cuno,tine repre!int un lexicon care conine aceste cuvinte.


word(a(alone,a,(,a,l,o,n,e). word(a(andon,a,(,a,n,d,o,n). word(enhance,e,n,h,a,n,c,e). word(ana ram,a,n,a, ,r,a,m). word(connect,c,o,n,n,e,c,t). word(ele ant,e,l,e, ,a,n,t).

Scriei un predicat cross6dSM care ne spune cum s se complete!e grila$ adic primele trei argumente ar trebui s fie cuvintele pe vertical de la stQnga la dreapta$ iar urmtoarele trei argumente ar trebui s fie cuvintele pe ori!ontal de sus 5n .os.

%%

4aspuns: crossNd(G1$G%$G&$M1$M%$M&):#Nord(G1$Z1$X1$[1$`1$B1$41$:1)$ Nord(G%$Z%$X%$[%$`%$B%$4%$:%)$ Nord(G&$Z&$X&$[&$`&$B&$4&$:&)$ Nord(M1$Z'$X1$['$X%$B'$X&$:')$ Nord(M%$Z($`1$[($`%$B($`&$:()$ Nord(M&$Z)$41$[)$4%$B)$4&$:)). H#crossNd(Z$X$[$B$`$4). Z 9 abalone$ X 9 anagram$ [ 9 connect$ B 9 abandon$ ` 9 elegant$ 4 9 en-ance ; Z 9 abandon$ X 9 elegant$ [ 9 en-ance$ B 9 abalone$ ` 9 anagram$ 4 9 connect ; false. e. Gerifica daca trei numere sunt laturile unui triung-i (triung-i.pl)

%&

Seminar ( Curs practic & Cum programele recursive sunt fundamental pentru /rolog$ este important s avei o idee clara a ceea ce implic acestea. "n special$ este important s 5nelegei procesul de initiali!are a variabilelor cQnd sunt folosite definiiile recursive$ ,i c ai 5neles de ce atat ordinea propo!itiilor 5ntr#o definiie recursiva$ precum ,i ordinea obiectivelor 5n reguli$ pot face diferena dintre o ba!a de cuno,tine care este utila ,i una care nu funcionea!a deloc. Deci: 1. "ncrcai descend&.pl, activati trace ,i puneti interogarea descend(mart(a,laura). 2ceasta este interogarea care a fost discutata 5n curs. rmariti pas cu pas ce se intampla si relationati ceea ce vedeti pe ecran cu discuia din text. %. Cu trace pornit$ puneti interogarea descend(mart(a,rose) ,i numrati cQi pa,i are nevoie /rolog pentru da rspunsul (adica$ de cQte ori dati Enter). 2cum opriti trace ,i puneti interogarea descend(K,D) CQt de multe rspunsuri obtinetiH (raspuns : 10) &. "ncrcai descend).pl. 2mintii#v ca este varianta de descend&.pl 5n care ordinea de ambelor propo!itii este inversata$ ,i$ 5n plus$ ordinea celor dou obiective din obiectivul recursiv este de asemenea inversata. Din acest motiv$ c-iar ,i pentru o 5ntrebare simpl ca descend(mart(a,laura) /rolog nu va termina. Dati un exemplu$ utili!Qnd trace pentru a confirma acest lucru. '. Dar statiY Exist inca dou variante pentru descend&.pl pe care nu le#am considerat. /entru 5nceput$ am fi putut fi scris propo!itia recursiv$ dup cum urmea!:
descend(X,Y) :- child(X,Y). descend(X,Y) :- descend(Z,Y),child(X,Z). S numim aceast variant descend..pl.

ai mai rmQne o posibilitate: am fi putut fi scris definiie recursiva$ dup cum urmea!:
descend(X,Y) :- child(X,Z),descend(Z,Y). descend(X,Y) :- child(X,Y). S numim aceast variant descend8.pl . Creai fisierele descend..pl ,i descend8.pl. Cum se pot compara cu descend&.pl ,i descend).pl. /ot ele sa se ocupe de interogarea descend(mart(a,rose). /ot ele s re!olve 5ntrebari care implic variabileH CQt

de muli pa,i au nevoie pentru a gsi un rspunsH Sunt ele mai incete sau mai rapide decQt descend&.pl. (. "n cele din urm$ 5ncrcai fi,ierul numeral&.pl. /orniti trace ,i asigurai#v c ai 5neles cum se ocup /rolog de ambele cereri specifice (cum ar fi numeral(succ(succ(G))) ,i interogri care implic variabile (cum ar fi
numeral(K)).

Ceea ce s#a invatat pana acum este ba!a acestui limba. de programare. /entru a#l putea invata trebuie exersat mult$ trebuie facute multe programe$ si daca e ca!ul corectate. Deci$ aici sunt cQteva exerciii pentru a 5ncerca. 1. @maginai#v c urmtoarea ba!a de cuno,tine descrie un labirint. 6aptele determina punctele care sunt legate$ de exemplu$ punctul de la care putei a.unge %'

la alt punct 5ntr#un singur pas. Fai mult$ imaginati#va c toate drumurile sunt str!i cu sens unic$ astfel 5ncQt putei merge numai 5ntr#o singur direcie. Deci$ putei merge de la punctul 1 la punctul %$ dar nu ,i invers.
connected(+,1). connected(7,2). connected(0,@). connected(4,9). connected(8,+/). connected(+1,+7). connected(+7,+2). connected(+0,+@). connected(+4,+9). connected(+8,1/). connected(2,+). connected(@,7). connected(2,4). connected(@,++). connected(+2,8). connected(++,+0). connected(+@,+1). connected(+2,+4). connected(+@,+8).

Scriei un predicat pat(S) care v spune de la care punct din labirint$ putei a.unge la alt punct 5n ca!ul 5n care 5nlnuirea conexiuni de mai sus figurea! 5n ba!a de cuno,tine. Se poate a.unge de la punctul ( la punctul 10H @n ce punct se poate a.unge cQnd se porneste de la punctul 1H @n ce puncte ce poate a.unge daca se porneste de la punctul 1&H %. Se da urmtoarea ba! de cuno,tine cu informaii de cltorie:
(#3ar(auckland,hamilton). (#3ar(hamilton,ra lan). (#3ar(valmont,saar(ruecken). (#3ar(valmont,met!). (#Arain(met!,frankfurt). (#Arain(saar(ruecken,frankfurt). (#Arain(met!,paris). (#Arain(saar(ruecken,paris). (#%lane(frankfurt,(an kok). (#%lane(frankfurt,sin apore). (#%lane(paris,losBn eles). (#%lane((an kok,auckland). (#%lane(losBn eles,auckland). Scriei un predicat travelS) care

stabile,te dac este posibil s se deplase!e de la un loc la altul prin b5nlnuirea 5mpreunc a mi.loacelor de transport masina$ trenul$ avionul. De exemplu$ programul ar trebui s rspund OdaO la interogarea
travel(valmont,raglan).

Aema : Deci$ prin utili!area travelS) cu o interogare asupra ba!ei de date de mai sus$ putei afla c este posibil s se plece de la Gamont la 4aglan. "n ca!ul 5n care se planifica o cltorie$ este de.a o informaie foarte bun$ dar ceea %(

ce am vrea sa stim exact este cum putem a.unge de la Galmont la 4aglan. Scriei un predicat travelS. care v spune cum s se deplase!e de la un loc la altul. /rogramul ar trebui$ de exemplu$ sa rspunda OdaO la interogare travel(valmont,paris,go(valmont,metz,go(metz,paris))) ,i K R go(valmont,metz,go(metz,paris,go(paris,los3ngeles))) la interogarea travel(valmont,los3ngeles,K). Extindeti predicatul travelS. astfel 5ncQt nu numai sa spuna ora,ele prin care trebuie mers ci si cum se poate a.unge de exemplu cu masina$ trenul sau avionul.

1.Exercitii: a. Stii aceste papusi rusesti din lemn$ cele mai mici sunt cuprinse 5n cele mai mariH 2ici este imaginea sc-ematic a unor astfel de papusi.

Scrieti o ba! de cuno,tine cu a.utorul predicatului directl,7nS) care codific care ppu, este direct coninuta 5n alta ppu,. 2poi$ definiti un predicat (recursiv) inS) care ne spune care ppu, (direct sau indirect) este coninuta 5n alta ppu,. De exemplu$ interogarea in(Batarina,natas(a) ar trebui s raspunda VdaW$ iar interogarea in(olga, Batarina) ar trebui s raspunda VnuW. b.Definiti un predicat greaterHt(anS) care ia dou cifre 5n notaia pe care am introdus#o 5n acest curs (adic 0$ succ (0)$ succ (succ (0)) ...)$ ca argumente ,i decide dac primul este mai mare decQt cel de#al doilea. De exemplu:
'- reater5than(succ(succ(succ(/))),succ(/)). #es '- reater5than(succ(succ(/)),succ(succ(succ(/)))). no

c. 2rborii binari sunt arbori 5n care toate nodurile interne au exact doi copii. Cei mai mici arbori Uinari sunt compusi din doar o frun! nod.Gom repre!enta nodurile frun!a ca leaf(Tabel). De exemplu$ leaf(.) ,i leaf(N) sunt noduri frun!a $ ,i$ prin urmare$ mici arbori binari. 2vQnd doi arbori binari ;& ,i ;) putem sa#i combinam 5ntr#un arbore %)

binar cu a.utorul predicatului tree: tree(;&,;)). Deci$ de la frun!ele leaf(&) ,i leaf()) putem construi arborele binar tree(leaf(&), leaf())). ai din arborele binar tree(leaf(&), leaf())) ,i frun!a leaf(8) putem construi arborele binar
tree(tree(leaf(&), leaf())), leaf(8)). 2cum$ definiti un predicat s6apS) care produce

o imagine oglind a arborelui binar$ care

este primul sau argument. De exemplu:


'- swap(tree(tree(leaf(+), leaf(1)), leaf(2)),A). A ) tree(leaf(2), tree(leaf(1), leaf(+))). #es

d."n curs$ am v!ut predicatul:


descend(X,Y) :- child(X,Y). descend(X,Y) :- child(X,Z),descend(Z,Y).

/uteam formula predicatul dup cum urmea!H


descend(X,Y) :- child(X,Y). descend(X,Y) :- descend(X,Z), descend(Z,Y).

Comparai sensurile declarative ,i procedurale ale acestui predicat. Sugestie: Ce se 5ntQmpl cQnd punem interogarea descend(rose,mart(a). e.2vem urmtoarea ba! de cuno,tine:
directArain(for(ach,saar(ruecken). directArain(fre#min ,for(ach). directArain(fahl$uemont,stBvold). directArain(stBvold,for(ach). directArain(saar(ruecken,dudweiler). directArain(met!,fahl$uemont). directArain(nanc#,met!).

2ceast ba! de cuno,tine deine fapte despre orasele intre care este posibil s se deplase!e prin luarea unui tren direct. Dar$ bine5neles$ putem cltori si prin O5nlnuirea 5mpreunO a mai multor trenuri. Scriei un predicat recursiv travel;et6eenS) care ne spune cQnd putem cltori cu trenul 5ntre dou ora,e. De exemplu$ atunci cQnd punem interogarea: travel&etween(nanc#,saar(ruecken). acesta ar trebui s rspunda OdaO. Este$ de asemenea$ plau!ibil s presupunem c$ ori de cQte ori este posibil s se ia un tren direct de la 2 la U$ de asemenea$ este posibil s se ia un tren direct de la U la 2. /utei codifica asta 5n /rologH De exemplu$ programul ar trebui s rspund OdaO la urmtoarea 5ntrebare:
travel&etween(saar(ruecken,nanc#).

%7

Curs practic ' "n primul rQnd$ vom efectua o serie de pasi pe a)bS) pentru a ne asigura c am 5neles pe deplin cum funcionea!. "n special: 1. rmarim cu trace cQteva exemple$ care nu implic variabile$ care reu,esc. De exemplu$ urmariti interogarea a)b(Aa,a,a,aC,Ab,b,b,bC) ,i anali!ati ceea ce vedeti cu discuia din text. %. Sa urmarim unele exemple care nu reu,esc. "ncercam exemple de liste de lungimi diferite (cum ar fi a)b(Aa,a,a,aC,Ab,b,bC)) ,i exemple care implica simboluri$ altele decQt a si b (cum ar fi a)b(Aa,c,a,aC,Ab,b,L,8C)). &. Sa vedem cQteva exemple care implic variabile. De exemplu$ sa 5ncercam s urmrim a)b(Aa,a,a,aC,K) ,i a)b(K,Ab,b,b,bC). '. Sa ne asiguram c am 5neles ce se 5ntQmpl atunci cQnd ambele argumente din interogare sunt variabile. De exemplu$ s urmarim interogarea a)b(K,D). (. Sa efectuam o serie de urmari similare care implic member. S efectuam urmariri care implic interogari simple care reusesc (cum ar fi member(a,A&,),a,bC)) interogari simple care raspund nu (cum ar fi member(z,A&,),a,bC)) si care implic ,i variabile (cum ar fi member(K,A&,),a,bC)). "n toate ca!urile$ asigurai#v c ai 5neles de ce se opreste recursivitatea. 2vQnd fcut acest lucru$ 5ncercai urmtoarele: 1. Scrieti un predicat combine& care ia trei liste ca argumente ,i combin elemente din primele dou liste 5n cea de#a treia$ dup cum urmea!:
'- com(ine+(,a,(,c-,,+,1,7-,X). X ) ,a,+,(,1,c,7'- com(ine+(,foo,(ar,#ip,#up-,, lu(, la(, li(, lo(-,=esult). =esult ) ,foo, lu(,(ar, la(,#ip, li(,#up, lo(%. 2cum scrieti un predicat combine) care ia trei '- com(ine1(,a,(,c-,,+,1,7-,X). X ) ,,a,+-,,(,1-,,c,7-'- com(ine1(,foo,(ar,#ip,#up-,, lu(, la(, li(, lo(-,=esult). =esult ) ,,foo, lu(-,,(ar, la(-,,#ip, li(-,,#up, lo(--

liste ca argumente ,i combin elementele din primele dou liste 5n cea de#a treia$ dup cum urmea!:

&. "n cele din urm$ scrieti un predicat combine. care ia trei liste ca argumente ,i combin elementele din primele dou liste 5n cea de#a treia$ dup cum urmea!:
'- com(ine7(,a,(,c-,,+,1,7-,X). X ) ,join(a,+),join((,1),join(c,7)'- com(ine7(,foo,(ar,#ip,#up-,, lu(, la(, li(, lo(-,=). = ) ,join(foo, lu(),join((ar, la(),join(#ip, li(),join(#up, lo()-

Boate cele trei programe sunt cam la fel ca a)bS) (de,i$ desigur$ ele manipulea!a trei liste$ nu dou). 2sta este$ toate cele trei pot fi scrise folosind recursivitate pe liste$ se face

%I

ceva 5n cap$ ,i apoi recursiv se face acela,i lucru la co!i. "ntr#adevr$ odat ce ai scris combine& trebuie doar s sc-imbati Oceva#ulO care se face la cap pentru a obine combine) ,i combine.. @ncercati sa re!olvati urmatoarele doua probleme. Sugestie: /utei folosi predicatele pe care le#am definit mai devreme$ ca de exemplu$ memberS) in definiia predicatelor voastre. 1. Scriei un predicat mEsubset P %$ care are dou liste (de constante) ca argumente ,i verifica dac prima list este o submultime a celei de#a doua. %. Scriei un predicat mEsuperset P %$ care are dou liste ca argumente ,i verifica dac prima list este o supramultime a celei de#a doua. %.Exercitii: a.Cum va rspunde /rolog la urmtoarele 5ntrebariH 1. Aa,b,c,dC R Aa,Ab,c,dCC. (false) %. Aa,b,c,dC R AaUAb,c,dCC. (true) &. Aa,b,c,dC R Aa,b,Ac,dCC. (false) '. Aa,b,c,dC R Aa,bUAc,dCC. (true) (. Aa,b,c,dC R Aa,b,c,AdCC. (false) ). Aa,b,c,dC R Aa,b,cUAdCC. (true) 7. Aa,b,c,dC R Aa,b,c,d,ACC. (false) I. Aa,b,c,dC R Aa,b,c,dUACC. (true) <. AC R H. (true) 10. AC R AHC. (false) 11. AC R AHUACC. (false) b.Sa presupunem ca avem ba!a de cuno,tine$ cu urmtoarele fapte:
tran(eins,one). tran(!wei,two). tran(drei,three). tran(vier,four). tran(fuenf,five). tran(sechs,si;). tran(sie(en,seven). tran(acht,ei ht). tran(neun,nine).

Scriei un predicat listtran(9,') care traduce o list de cuvinte din german 5n lista corespondenta in engle!. De exemplu:
listtran(,eins,neun,!wei-,X).

trebuie s ofere:
X ) ,one,nine,two-.

%<

De asemenea$ programul ar trebui s lucre!e si 5n cealalt direcie. De exemplu$ dac avem interogarea:
listtran(X,,one,seven,si;,two-).

acesta ar trebui s 5ntoarca:


X ) ,eins,sie(en,sechs,!wei-.

Sugestie: pentru a rspunde la aceast 5ntrebare$ 5n primul rQnd 5ntrebai#v OCum pot traduce o lista vida de cuvinteHO. 2sta e ca!ul de ba!. /entru liste nevide$ 5n primul rQnd traduceti capul listei$ apoi utili!ai recursivitatea pentru a traduce coada. c.Scriei un predicat t6ice(7n,4ut) a crui argument stQng este o list$ iar argumentul drept este o list care consta din fiecare element al listei din stQnga scris de dou ori. De exemplu$ interogarea:
twice(,a,2,(u le-,X).

ar trebui sa raspunda
X ) ,a,a,2,2,(u le,(u le-).

ai interogarea:
twice(,+,1,+,+-,X).

ar trebui sa raspunda:
X ) ,+,+,1,1,+,+,+,+-.

Sugestie: pentru a rspunde la aceast 5ntrebare$ 5n primul rQnd intrebati#va OCe ar trebui s se 5ntQmple 5n momentul 5n care primul argument este o lista vidaHO. 2sta e ca!ul de ba!. /entru listele nevide$ gQndii#v ce ar trebui s faceti cu capul$ ,i folositi recursivitatea pentru coada. d.Desenati arborii de cutare pentru urmtoarele trei 5ntrebri:
'- mem(er(a,,c,(,a,#-). '- mem(er(;,,a,(,c-). '- mem(er(X,,a,(,c-).

&0

Seminar ) Curs practic ( Scopul acestui curs practic este de a v a.uta s va familiari!ai cu capacitile aritmetice ale lui /rolog$ precum ,i de a v oferi mai multa practica 5n manipularea listelor. G sugerm urmtoarele exerciii de programare: 1. "n curs am discutat despre predicatul acc1a care returnea!a maximul unei liste de numere 5ntregi. /rin sc-imbarea codului$ transformati#l pe acesta in predicatul acc1in care returnea!a minimul unei liste de numere 5ntregi. %. "n matematic$ un vector n#dimensional este o list de numere de lungime n. De exemplu$ A),L,&)C este un vector &#dimensional$ ,i A8L,)N,.,"8,MC este un vector (#dimensional. na dintre operaiile de ba! pe vectori este multiplicarea scalara. "n aceast operaie$ fiecare element al vectorului este 5nmulit cu un anumit numr. De exemplu$ dac am multiplica scalar vectorul &# dimensional A),N,8C cu . re!ultatul ar fi vectorul &#dimensional AM,)&,&)C. Scrieti un predicat scalar1ult al crui prim argument este un numr 5ntreg$ cel de#al doilea argument este o lista de numere 5ntregi$ ,i cel de#al treilea argument este re!ultatul multiplicarii scalare a celui de#al doilea argument cu primul. De exemplu$ interogarea
scalar?ult(7,,1,4,2-,=esult).

ar trebui s produca
=esult ) ,@,1+,+1-

&. J alt operaie fundamentala pe vectori este produsul punctual. 2ceast operaie combin doi vectori de aceea,i dimensiune ,i returnea!a ca re!ultat un intreg. Jperaia se efectuea! dup cum urmea!: elementele corespun!toare din cei doi vectori se 5nmulesc$ iar re!ultatele sunt adunate. De exemplu$ produsul punctual dintre A),L,MC ,i A.,8,&C este MV)GVM care este$ .). Scrieti predicat dot al crui prim argument este o lista de numere 5ntregi$ cel de#al doilea argument este o lista de numere 5ntregi de aceea,i lungime ca ,i primul$ ,i cel de# al treilea argument este produsul punctual dintre primul argument si cel de#al doilea. De exemplu$ interogarea
dot(,1,0,@-,,7,2,+-,=esult).

ar trebui s produca
=esult ) 71

1. Exercitii: a.Cum rspunde /rolog la urmtoarele 5ntrebariH 1. K R .W8. (Z 9 &d'.) %. K is .W8. (Z 9 1%.) &. 8 is K. (error) '. K R D. (Z9X) (. . is &V). (true) ). . is V(&,)). (true) 7. . is KV). (error) I. K is &V). (Z9&.) <. &V) is &V). (false) &1

10. is(K,V(&,))). (Z9&.) 11. .V) R V(.,)). (true) 1%. W(N,L) R NWL. (true) 1&. W(N,V(.,))) R NW(.V)). (true) 1'. W(N,(.V))) R NW(.V)). (true) 1(. W(N,(.V))) R NW(V(.,))). (true) b. 1. Definii un predicat increment care are success numai daca cel de#al doilea argument este un 5ntreg cu un numr mai mare decQt primul su argument. De exemplu$ increment(8,L) ar trebui s aiba succes$ dar increment(8,M) ar trebui s esue!e. %. Definii un predicat sum care are succes numai 5n ca!ul 5n care cel de#al treilea argument este suma primelor dou argumente. De exemplu$ sum(8,L,P) ar trebui s aib succes$ dar sum(8,M,&)) nu ar trebui. c.Scriei un predicat addone % P al crui prim argument este o lista de numere 5ntregi$ ,i al doilea argument este lista de numere 5ntregi obinuta prin adugarea lui 1 la fiecare 5ntreg din prima list. De exemplu$ interogarea
addone(,+,1,4,1-,X).

ar trebui s produca
X ) ,1,7,9,7-.

Curs practic ) Scopul cursului practic ) este de a v a.uta s obinei mai mult experien in manipularea listelor. Fai 5ntQi sugeram niste urmariri cu trace$ ,i apoi cQteva exerciii de programare. rmtoarele urmariri va vor a.uta sa intelegeti predicatele discutate 5n curs: 1. Efectuati urmariri asupra lui append cu primele dou argumente initiali!ate$ ,i cel de#al treilea argument neinitiali!at. De exemplu$ append (Aa,b,cC,AAC, A),.C,bC,K). 2sigurai#v c acest model de ba! este clar. %. 2poi$ efectuati urmariri asupra lui append cand este folosit pentru a 5mpri o list$ adica$ cu primele dou argumente date ca variabile$ ,i ultimul argument initiali!at. De exemplu$ append(T,2,Afoo,6ee,blupC). &. Efectuati unele urmariri asupra lui prefi ,i suffi De ce prefi gseste mai intai listele scurte ,i suffi listele mai lungiH '. Efectuati unele urmariri asupra lui sublist. 2,a cum am spus in curs$ prin bacStracSing acest predicat generea! toate sublistele posibile$ dar dup cum vei vedea$ generea!a anumite subliste de mai multe ori. 2ti 5neles de ceH (. Efectuati urmariri pe ambele naiverev ,i rev si comparati comportamentul lor. 2cum$ cateva programe pentru lucru: 1. Este posibil s se scrie o definiie cu o linie a predicatului member utili!and append. 6aceti acest lucru. Cum se compara aceast nou versiune a lui member 5n eficiena cea standardH

&%

%. Scriei un predicat set(7nTist,4utTist) care ia ca intrare o lista arbitrara$ ,i returnea! o list 5n care fiecare element din lista de intrare apare doar o singur dat. De exemplu$ interogarea
set(,1,1,foo,+,foo, ,-,,--,X).

ar trebui s produca re!ultatul


X ) ,1,foo,+,,--.

Sugestie: folositi predicatul member pentru a testa repetitiile de elemente pe care le#ai gsit de.a. &. Waplati!amW o list prin scoaterea tuturor parante!elor drepte din .urul oricarei liste pe care o conine ca element ,i din .urul oricarei liste care conine liste ca elemente$ ,i a,a mai departe pentru toate listele imbricate. De exemplu$ cQnd am aplati!a lista
,a,(,,c,d-,,,+,1--,foo-

am avea lista
,a,(,c,d,+,1,foo-

,i cQnd am aplati!a lista


,a,(,,,,,,,,c,d-------,,,+,1--,foo,,--

de asemenea$ am avea
,a,(,c,d,+,1,foo-.

Scriei un predicat flatten(Tist,5lat) care are succes atunci cand primul argument Tist se aplati!ea!a la cel de#al doilea argument 5lat. 2cest exerciiu poate fi reali!at fr a se utili!a append. %.Exercitii: a.Mai s numim o list dublata 5n ca!ul 5n care este compusa din doua blocuri consecutive de elemente care sunt exact acelea,i. De exemplu$ Aa,b,c,a,b,cC este dublata (e format din Aa,b,cC urmat de Aa,b,cC) ,i asa este si Afoo,gubble,foo,gubbleC. /e de alt parte$ Afoo,gubble,fooC nu este dublata. Scriei un predicat doubled(Tist) care reu,e,te$ atunci cQnd Tist este o list dublata. b. n palindrom este un cuvQnt sau o fra! care se scrie la fel si intr#un sens si in celalalt. De exemplu$ OrotatorO$ OeveO$ ,i Onurses runO sunt toate palindroame. Scriei un predicat palindrome(Tist) care verific dac Tist este un palindrom. De exemplu$ la interogrile
'- palindrome(,r,o,t,a,t,o,r-).

,i
'- palindrome(,n,u,r,s,e,s,r,u,n-).

/rolog ar trebui s rspund OdaO$ dar la interogarea


'- palindrome(,n,o,t,h,i,s-).

/rolog ar trebui s rspund OnuO. c.

&&

1. Scriei un predicat second(K,Tist) care verific dac K este cel de#al doilea element al lui Tist. %. Scriei un predicat s6ap&)(Tist&,Tist)) care verific dac Tist& este identica cu Tist) cu excepia faptului c$ primele dou elemente sunt intersc-imbate. &. Scriei un predicat final(K,Tist) care verific dac K este ultimul element al lui
Tist.

'. Scriei un predicat toptail(7nTist,4utlist) care spune OnuO dac inlist este o list care conine mai puin de % elemente$ ,i care sterge primul ,i ultimul element din 7nlist ,i returnea! re!ultatul ca 4utlist, atunci cQnd 7nlist este o list care conine cel puin % elemente. De exemplu:
toptail(,a-,A). no toptail(,a,(-,A). A),toptail(,a,(,c-,A). A),(Sugestie: aici append

devine util.

(. Scriei un predicat s6apfl(Tist&,Tist)) care verific dac Tist& este identica cu Tist) cu excepia faptului c$ primul ,i ultimul element sunt intersc-imbate. Sugestie: aici append devine din nou util. d.2ici este un exerciiu pentru cei care iubesc pu!!le#urile logice. Este o strad cu trei case vecine toate cu o culoare diferit. Ele sunt de culoare ro,ie$ albastr ,i verde. Jameni de diferite naionaliti locuiesc 5n case diferite ,i toti au un alt animal de casa. @at cQteva fapte noi despre ei: Engle!ul locuie,te 5n casa ro,ie. \aguarul este animalul de casa al familiei spaniol. \apone!ii locuiesc in dreapta deintorilor melcului. Deintorul melcului locuieste in stQnga casei albastre. Cine are !ebrH Definiti un predicat zebraS& care v spune naionalitatea proprietarului !ebrei. Sugestie: _Qnditi#va la o repre!entare pentru case si pentru strada. Codificati cele patru constrQngeri 5n /rolog. member ,i sublist ar putea fi niste predicate utile.

&'

Seminar 7 Examen practic

&(