Logikprogrammering KŠnnetecken och fšrutsšttningar Prolog FšrtjŠnster BegrŠnsningar Praktiska tillšmpningar KŠnnetecken Hšg abstraktionsnivœ Deklarativt, ej proceduralt Specificerar šnskade resultat snarare Šn hur de ska produceras Bygger pœ formell logik, relationer 1 2 Relationer MŒnga-till-mŒnga relation Jfr avbildningar, mœnga-till-en Ð AlltsŒ ett všrde x i S till ett y i T Men relationer, x till flera y i T Exempel pœ relation S=[1,2,3], T=[4,5,6], rel=ó<ó 1<4, 1<5, 1<6 2<4, 2<5, 2<6 3<4, 3<5, 3<6 3 4 FšrfrŒgningar r R(a,b) sann? Fšr vilka y Šr R(a,y) sann? Fšr vilka x Šr R(x,b) sann? Fšr vilka x,y Šr R(x,y) sann? Varianter Unary (unšr) R(x) Binary (binšr) R(x,y) Ternary (ternšr) R(x,y,z) FlervŠrda 6
Exempel Logik och logikprogrammering unšr: mamma(lena) binšr: fšršlder(lena,victor) ternšr (trevšrd): tregenerationer(kjell,lena,victor) - MŒnga relationer som enkelt ÒrymsÓ inom logiken kan inte implementeras, logikprogrammering klarar inte att uttrycka den matematiska logiken i dess fulla kraft. - Horn-klausuler Šr lšsningen 9 Hornklausuler (forts.) A 0 if A 1 and... and A n Varje A i har formen R i (...) dšr R i Šr namnet pœ en relation Betyder att om A 1...A n Šr sann sœ Šr A 0 sann Om nœgon A i Šr falsk innebšr det ej att A 0 Šr falsk Specialfall nšr n = 0 A 0 Ð A 0 Šr ovillkorligen sann Logikprogram Ett logikprogram bestœr av en samling Hornklausuler BerŠkningen av ett program bestœr i att testa ett givet antagande/mœl (A) Ð Om vi kan hšrleda ur programmet att A Šr sann, sšger vi att A lyckas (succeeds), annars misslyckas vi (fail) Ð Om vi misslyckas innebšr det inte att A Šr falsk Hur hšrledningen gœr till exakt Šr ej definierat i generell logikprogrammering Resolution Resolution Šr ett sštt att hšrleda svar ur ett logikprogram (resolution=upplšsning; sšnderdelning) Hornklausuler och resolution Ð Gšr logikprogram implementerbara Ð TillŒter implementationen att bli tšmligen effektiv Resolution HŠrled A Det existerar en klausul A 0 som matchar A => A Šr sann Det existerar en klausul A 0 if A 1 and... and A n sœdan att A 0 matchar A => Ð fortsštter hšrleda A 1 till A n som separata delmœl Ð Om alla lyckas drar vi slutsatsen att A Šr sann Ð Om nœgot A i misslyckas mœste vi backa (backtrack), d v s ge upp den klausulen och testa nšsta Om inga klausuler matchar A har vi misslyckats
Exempel Man gšr en fšrfrœgan: kvinna(lena) I databasen hittar vi: mamma(lena) kvinna(x) ( mamma(x) Backtracking Relationer i logiksprœk har samma betydelse som funktioner och procedurer i andra sprœk Men det Šr backtracking som ger logiksprœk deras stora uttrycksfullhet och kraftfullhet Ð Men det kostar i tid och minneskrav Exempel TŠnk fšljande mœl: male(x) parent(x, lotta) Man hittar: male(mikael) och gœr vidare fšr att hitta parent(mikael, lotta) Om detta inte lyckas blir backtracking aktuellt, och ny matchning med l (X) sškes osv Prolog Prolog utvecklades gradvis under 70- talet och ett flertal dialekter uppstod Ð Numera Šr Edinburgh-dialekten accepterad som standard Ett Prologprogram bestœr av en samling Hornklausuler som definierar relationer VŠrden Prologs všrden Šr tal, atomer och strukturer Atomer Ð Atomer har inga andra egenskaper Šn att de gœr att skilja frœn varandra. Ex ršd, lisa, kroton... Strukturer Ð Strukturer Šr taggade tuppler, t ex data(2000,jan,1) Ð Taggen anvšnds fšr att skilja strukturer frœn varandra, som representerar olika data men har samma všrden, t ex point(2,3), rational(2,3). Listor och stršngar Listor Ð En delmšngd till strukturer dšr [] representerar tomma listan och '.' Šr strukturtaggen: [1,2,3,4] =.(1,.(2,.(3,.(4,[])))) [x xs] =.(x,xs) StrŠngar Ð Listor av heltal Ð Varje bokstav representeras av heltal, "Olof" = [79, 108, 111, 102]
Typer Prolog Šr otypat Tal, atomer och strukturer kan anvšndas om varandra De kan jšmfšras med varandra m h a Ò=Ò Ð ger ÒfalseÓ om de Šr inte Šr lika Endast aritmetiska operationer Šr typade Termer och variabler Term Ð En term Šr en variabel, en numerisk literal, en atom eller strukturaggregat Ð Termer Šr argument till relationerna R(T 1,...,T n ) dšr T 1... T n Šr termer Variabler Ð Prologs variabler betecknar ett fixt men okšnt všrde Ð Bšrjar alltid pœ stor bokstav fšr att skiljas frœn strukturer och atomer. Ð En variabel deklareras implicit genom att dess fšrekomst i klausuler och dess ršckvidd Šr just Klausuler och relationer Klausuler A 0 :- A 1, A 2,..., A n. Ð ":-" stœr fšr if och "," stœr fšr and Ð A 0 matchar ett pœstœende A om det existerar en substitution av termer fšr variabler sœdan att A 0 och A blir lika Ð age(p,y) matchar age("david",42) under {P = "David",Y = 42} age(p,y) matchar age("olof",a) under {P = "Olof", Y = A} RŠckvidden fšr varje relation Šr hela programmet Exempel Ð star(sun). star(sirius). star(betelgeuse).?- star(sun). Yes?- star(jupiter). False orbits(mercury,sun). orbits(venus,sun). Exempel (forts.)...?- orbits(venus,sun). Yes?- orbits(b,sun). B = mercury B = venus
Exempel (forts.) Exempel (forts.)... planet(b) :- orbit(b,sun).?- planet(venus). Yes?- planet(b). B = mercury B = venus... satellite(b) :- orbits(b,p),planet(p). solar(sun). solar(p) :- planet(p). solar(b) :- satellite(b). solar(sun). solar(moon). Exempel (forts.)... solar(b). B = sun, mercury, venus,...,moon... FrŒga: existerar det instanser sœ att frœgan blir sann Klausuler: A 0 Šr sant fšr alla variabler A 1...A n som Šr sanna Rekursiva klausuler: member(x,[x Ys]). member(x,[y Ys]) :- member(x,ys). ÓSluten všrldó-antagande Prolog utgœr frœn att alla relevanta fakta finns i programmet Ett pœstœende misslyckas om vi inte kan hšrleda att det Šr sant Det innebšr inte att det Šr falskt utan kan ocksœ innebšra att det Šr okšnt Detta innebšr att Prolog inte skiljer pœ falsk och okšnt Det medfšr att negationen av okšnt blir t Kontroll I princip ska den ordning i vilken resolutionen gšrs inte spela nœgon roll fšr resultatet, endast ordningen pœ resultaten I Prolog Šr ordningen fšr resolutionen av avgšrande betydelse dels fšr att šverhuvudtaget fœ resultat men Šven fšr effektiviteten
Exempel neighbor(a,b) :- neighbor(b,a). neighbor(a,b) :- planet(a),orbits(b,a). Om det icke rekursiva fallet anvšnds fšrst hela tiden uppstœr inga problem Om det rekursiva fallet anvšnds fšrst uppstœr ošndlig rekursion Ordningen fšr resolutionen Beteendet hos Prologprogram beror pœ ordningen fšr resolutionen I Prolog testas hšgerledet frœn všnster till hšger i klausulerna och om det finns flera klausuler fšr en relation testas de i ordning frœn fšrsta till sista Det gšr att Prologprogram Šr deterministiska, Šven ordningen fšr resultaten Šr bestšmd Ett sštt fšr programmeraren att styra ordningen Šr med cut (!) som skšr av mšjligheten till backtracking Det kan ge effektivare program, men ocksœ fšršndra betydelsen, anvšnds med fšrstœnd FšrtjŠnster BegrŠnsningar Hšg abstraktionsnivœ Logik - en bra grund fšr všlstrukturerade program, leder till fšrre fel i programmen och dšrmed mindre underhœllsbehov Ger stšd fšr parallellitet Kompakta program LŒngsamt Risk fšr ošndliga loopar Man kan inte vara sšker pœ att nœgot Šr falskt Negationsproblemet Praktiska tillšmpningar RDBMS (Relational Database Management Systems) Expertsystem Naturligt sprœk Utbildning