Logisk programmeringsparadigm

January 9, 2018 | Author: Anonymous | Category: Math, Advanced Math, Logic
Share Embed Donate


Short Description

Download Logisk programmeringsparadigm...

Description

Logikprogrammering och Prolog • Logikprogrammeringsparadigmen • Logikprogrammering – Relationer – Resolution

• Prolog – – – –

Variabler och termer Klausuler och relationer Kontroll ”Slutna-världen” antagandet

Logikprogrammeringsparadigmen • Den logiska paradigmen ser ett program som en relation mellan invärde och utvärde (”functor”). Den funktionella bygger på program som avbildningar. Båda är (mer eller mindre) deklarativa! • Eftersom relationer är mer generella än avbildningar skulle man kunna säga att logikprogrammering är på en högre abstraktionsnivå än funktionell och imperativ programmering. • Relationer i logikspråk har liknande betydelse som funktioner och procedurer i andra språk.

Relation vs avbildning Relation

Indata

Avbildning

Utdata

Många till många

Indata

Utdata

Många till en

Relationer och avbildning • Låt S och T vara mängder. • R är en relation mellan S och T om för varje x S och y  T så är R(x,y) antingen sann eller falsk. T ex: större än (>) för heltal. • m är en avbildning mellan S och T om för varje x S existerar det ett m(x)  T T ex: sin(x)

Användning • Avbildning – Givet a bestäm m(a)

• Relation : – – – –

Givet a och b, bestäm om R(a,b) är sann. Givet a, finn alla y sådana att R(a,y) är sann. Givet b, finn alla x sådana att R(x,b) är sann. Finn alla x och y sådana att R(x,y) är sann

Predikatlogik • Logiken som logikprogrammering bygger på är första ordningens predikatlogik • Det är ett sätt att beskriva logiska utsagor, relationer. natural(0) n, natural(n) natural(successor(n))

• Tillsammans med inferensregler (resolution) – Ett sätt att härleda eller bevisa nya utsagor. A  B och B  C AC

A och A  C C

Logikprogrammeringsspråk • Ett notationssystem för att skriva logiska utsagor tillsammans med specificerade algoritmer för att implementera inferensreglerna. • De utsagor som man utgår ifrån (axiom) kan ses som själva logikprogrammet. • De utsagor som man vill härleda är ”input” eller som det oftas kallas frågor (”queries”) eller mål (”goal”)

Horn-klausuler • Vid automatisk härledning är det svårt att hantera hela första ordningens predikat logik. • De flesta system är begränsade till en delmängd kallad Horn-klausuler. A1 and A2 and … and An B natural(0). natural(x)  natural(successor(x)).

Horn klausuler i logik språk • A0 if A1 and ... and An – Där Ai har formen Ri(...) där Ri är namnet på en relation. – Betyder att om A1...An är sann så är A0 sann. – Specialfall när n = 0. A0. är sann.

• Procedurell tolkning – För att bevisa A0 måste A1 till An först bevisas. – A0 är ett procedurhuvud och A1 till An dess kropp

Logikprogram • Ett logikprogram består av en samling Horn klausuler. – Begränsningen till Horn klausuler gör att logikprogram är implementerbara och tillåter implementationen att bli tämligen effektiv.

• Beräkningen av ett program består av att testa ett givet antagande/mål (A). – Om vi kan härleda ur programmet att A är sann så säger vi att A lyckas (succeeds) annars misslyckas vi (fail).

• Om vi misslyckas innebär det inte att A är falsk.

Resolution • Testningen implementeras genom resolution. • Om programmet innehåller en klausul A0. som matchar A lyckas det. • Om programmet innehåller en klausul A0 if A1 and ... and An. sådan att A0 matchar A fortsätter vi att testa A1 till An separat som delmål. • Om alla lyckas drar vi slutsatsen att A är sann.

Flera alternativa vägar • Om något Ai misslyckas måste vi se om det finns någon annan klausul som matchar Ai. • När ingen fler klausul matchar A har vi misslyckats. • Detta ger upphov till en sökgraf. • I logikprogrammering definieras inte hur sökningen ska gå till • I ett logikprogrammeringsspråk (Prolog) måste det definieras för att vara implementerbart

Prolog • Prolog utvecklades gradvis under 70-talet och ett flertal dialekter uppstod. • Numera är Edinburgh-dialekten accepterad som standard. • Japan: Fifth Generation Computing System (80-talet) • Ett Prolog program består av en samling Horn klausuler som definierar relationer. • En strikt definition av hur inferensen ska ske.

Grundläggande element • Prologs ”byggstenar” är konstanter (tal, atomer), variabler och strukturer. Listor är en speciell struktur (och strängar är en speciell sorts listor). • Atomer – Atomer har inga andra egenskaper än att de går att skilja från varandra. E x red, blue, green....

• Variabler; deklareras ej, kan vara instantierad eller oinstantierad • Strukturer – Strukturer är ”taggade tupler”. T ex data(2000, jan, 1)

Typer • Prolog är otypat. • Tal, atomer och strukturer kan användas om varandra, ingen kontroll sker • Alla värden kan jämföras med varandra (m h a =)

Strukturer • I grunden en relation (ett predikat) • Kan användas för att representera data - ses som tupler/records, eller ses som ”funktionsanrop” • ”Taggen” används för att skilja på strukturer som representerar olika data men har samma värden. (jfr konstruerare). T ex point(2,3), rational(2,3). • Strukturer kan vara nästade.

Listor • Listor är en delmängd av alla strukturer där – [] representerar tomma listan och – '.' är strukturtaggen. .(1,.(2,.(3,.(4,[]))))

• Förkortade skrivformer [1,2,3,4] [x|xs] = .(x,xs)

Variabler • Prolog variabler betecknar ett fixt men okänt värde (ej uppdaterbart). • Börjar alltid på stor bokstav för att skiljas från strukturer och atomer. • Variabler deklareras implicit genom sin förekomst i klausuler och dess räckvidd är just den klausulen.

Termer • En term kan vara en: – – – –

variabel numerisk literal atom struktur (innehåller termer).

• Termer är argument till relationerna. – R(t1,...,tn) där t1 ... tn är termer.

Klausuler och relationer • A0 :- A1, A2, ..., An. – ":-" står för if och "," står för and

• A0 matchar ett påstående A om det existerar en substitution av termer för variabler sådan att A0 och A blir lika. A och A0 kan unifieras. • age(P,Y) matchar age(david,42) under {P = david,Y = 42} • age(P,33) matchar age(olof,A) under {P = olof, A = 33}

• Räckvidden för varje relation är hela programmet.

Exempel star(sun). star(sirius). star(betelegeus). ?- star(sun). Yes ?- star(jupiter). False

Exemple orbits(mercury,sun). orbits(venus,sun) … ?- orbits(venus,sun). Yes ?- orbits(B,sun). B = mercury B = venus …

Exempel planet(B) :- orbits(B,sun). ?- planet(venus). Yes ?- planet(B). B = mercury B = venus …

Frågor • Fråga: existerar det instanser så att frågan blir sann. • Klausuler: A0 är sant för alla värden på variablerna sådana att A1...An är sanna. • Rekursiva klausuler: element(X,[X|Ys]). element(X,[Y|Ys]) :- X \== Y, element(X,Ys).

Exempel append([],Xs,Xs). append([X|Xs],Ys,[X|Zs]) :append(Xs,Ys,Zs). ?- append([1,2],[3,4],Zs). Zs = [1,2,3,4] ?- append([1,2],Ys,[1,2,3,4]). Ys = [3,4] ?- append(Xs,Ys,[1,2,3]). Xs = [] Ys = [1,2,3] Xs = [1] Ys = [2,3]



Exempel • Sortering sort(Xs,Ys) :permutation(Xs,Ys),sorted(Ys).

• Största gemensamma delare gcd(X,0,X). gcd(X,Y,W) :Y \= 0,Z is X mod Y, gcd(Y,Z,W).

Kontroll • Beteendet hos prolog program är beror på ordningen för resolutionen. 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, men om det rekursiva fallet används först uppstår oändlig rekursion.

Kontroll, forts. • Resolution botten-upp (forward chaining) eller top-down (backward chaining)? • Sökning djupet-först eller bredden-först? • (Obegränsad) bakåtspårning?

Kontroll i Prolog • Backward chaining • Högerledet testas 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. • Djupet-först sökning • Bakåtspårning kan avbrytas mha ”cut”, ”!” Ex: a,b,!,c,d

Den slutna världen • 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. • Prolog utgår från att alla relevant fakta finns i programmet, d v s allt som är sant går att härleda ur programmet. • Det kallas för den slutna-världen antagandet.

Negation • Den slutna världen innebär att Prolog inte skiljer på falsk och okänt • Negationen av något okänt blir sant star(sun). star(betelegeus). ?- not(star(sirius)). yes

Negation • Misslyckande medför att bundna variabler släpps fria. • Efter ett misslyckande kan en variabel tappa ett relevant värde. ?- star(X). X = sun ?- not(not(star(X)). X = _34 ?- X = 0, not(X = 1). X=0 ?- not(X = 1), X = 0. no

Logikspråk vs funktionella språk • L:relationer, F:funktioner. Relationer kan användas på flera sätt. L potentiellt ickedeterministiska. Unifiering kraftfullare än mönstermatchning • F: ofta högre ordningens funktioner • F: ofta starkt typade. L: ofta otypade • F: enklare att implementera, enklare att förstå

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF