Interpretare a propoziției -> ce reprezintă propoziția în viața reală / în problema pe care o reprezentăm P, Q, R (au o interpretare) P => Q și Q => R atunci P => R (indiferent de interpretarea pentru P, Q, R) (P => Q ^ Q => R) => (P => R) tautologie Implicație **fals implică orice** Dacă premisa este falsă, atunci implicația este falsă, indiferent de adevărul concluziei. pi premise c concluzie dacă c derivă din premisele pi echivalent cu p1 ^ p2 ^ ... ^ pn => c echivalent cu !p1 V !p2 V ..... V !pn V c echivalent cu !( p1 ^ p2 ^ ... ^ pn ^ !c ) reducere la absurd p1 ^ p2 => c <=> !(p1 ^ p2) V c <=> !p1 V !p2 V c <=> !(p1 ^ p2 ^ !c) (p => q) <=> (!q => p) <=> (!p V q) ! (p ^ q) <=> !p V !q LPOI ==== constante termeni variabile (pot fi argumente de predicate) aplicări de funcții nume + argumente (termeni) niveluri simple - atomi (aplicări de predicate pe argumente) propoziții compuse - propoziții simple + operatori logici În Prolog: X is 1 + 2 is este predicat de două argumente + este funcție p(q(x)) p este predicat q este funcție/structură/... -- termen Sora Ioanei are un prieten deștept. sora(X) -> întoarce acea persoană care este sora lui X deștept(Y) prieten(X, Y) ∃x. prieten(sora(ioana), X) ^ deștept(X) Interpretare LPOI ----------------- * domeniu concepte * ce înseamnă fiecare constantă * ce înseamnă fiecare funcție * ce înseamnă fiecare predicat -> valoarea de adevăr pentru fiecare predicat în funcție de argumente vrabie(x) visează-mălai(x) Vrabia mălai visează ∀x. vrabie(x) => visează-mălai(x) Unele vrăbii visează mălai ∃x. vrabie(x) ^ visează-mălai(x) De ce nu este: ∃x. vrabie(x) => visează-mălai(x) dacă x nu este vrabie atunci implicația este adevărată Este adevărat chiar dacă nicio vrabie nu visează mălai (în condițiile în care există indivizi care nu sunt vrăbii) “Nu toate vrăbiile visează mălai.” ∃x.vrabie(x) ^ !visează-mălai(x) echivalent cu !( ∀x. vrabie(x) => visează-mălai(x) ) “Numai vrăbiile visează mălai.” ∀x. !vrabie(x) => !visează-mălai(x) echivalent cu ∀x. visează-mălai(x) => vrabie(x) ∀ x. p(x) ^ q(x) echivalent cu ∀x.p(x) și ∀x.q(x) Forma normal conjunctivă (FNC) ============================== literal = atom sau negația unui atom clauză = o mulțime de literali (are valoare disjunctivă) ~ disjuncția literalilor FNC = o mulțime de clauze (cu valoare conjunctivă între clauze) ~ conjuncția clauzelor ~ o conjuncție de disjuncții de literali (p V q V !r) ^ (q V t V x) -- este în FNC clauză clauză literali: p q !r q t x clauza p V q V r V !t V !x V !y echivalentă cu (t ^ x ^ y) => (p V q V r) Clauze Horn: p1 ^ p2 ^ p3 => c p1 ^ p2 <=> p1 și p2 În Prolog c :- p1 ^ p2 ^ p3. c. Skolemizare ∃x.p(x) --skolemizare--> p(Acel-Cineva) ∀x.∃y.mama(x, y) ~ oricine are o mamă ∀x.mama(x, mama_lui(x)) -funcție Skolem “Cine rezolvă toate laboratoarele este apreciat de cineva.” ∀x.(∀lab.laborator(lab) => rezolva(x, lab)) => ∃cineva.apreciază(cineva, x) 1. Eliminare implicații p => q ~ !p V q ∀x. ! (∀lab. !laborator(lab) V rezolva(x, lab)) V ∃cineva.apreciază(cineva, x) 2. Împingem negațiile ! ∀x.p ~ ∃x. !p ! ∃x.p ~ ∀x. !p ! (p ^ q) ~ !p V !q ! (p V q) ~ !p ^ !q ∀x. (∃lab. !(!laborator(lab) V rezolva(x, lab))) V ∃cineva.apreciază(cineva, x) ∀x. (∃lab. (laborator(lab) ^ !rezolva(x, lab))) V ∃cineva.apreciază(cineva, x) 3. Redenumire variabile 4. Deplasare cunatificatori ∀x.∃lab.∃cineva. (laborator(lab) ^ !rezolva(x, lab)) V apreciază(cineva, x) 5. Eliminarea cuantificatorilor existențiali ∀x.(laborator(ce-lab-nu-a-rez(x)) ^ !rezolva(x, ce-lab-nu-a-rez(x))) V apreciază(cine_apreciază(x), x) 6. Eliminare cuantificatori universali (laborator(ce-lab-nu-a-rez(x)) ^ !rezolva(x, ce-lab-nu-a-rez(x))) V apreciază(cine_apreciază(x), x) 7. Distribuire disjuncție (laborator(ce-lab-nu-a-rez(x)) V apreciază(cine_apreciază(x), x)) ^ (!rezolva(x, ce-lab-nu-a-rez(x) V apreciază(cine_apreciază(x), x))) { {laborator(ce-lab-nu-a-rez(x)), apreciază(cine_apreciază(x), x)} {!rezolva(x, ce-lab-nu-a-rez(x), apreciază(cine_apreciază(x), x)} }