Föreläsning 13 Logik med tillämpningar 97-12-05. Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Talföljder formler och summor
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
2D1311 Programmeringsteknik med PBL
Prolog, Mån 16/9 Rebecca Jonson.
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
1 STENHUS Kontrastiv valensanalys Lennart Lönngren.
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
Dcg-notation 21.2 G 2.3 M (BBS 8). dagens föreläsning extra argument i dcg-notation prolog-anrop i dcg-notation avslutande kommentarer om dcg.
Operatorer.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Komplexa tal inför Laborationerna
Algoritmer och datastrukturer
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Föreläsning 5 Python: argument från kommando-tolken
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
Text och bild från wikipedia
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz Föreläsning 3: rekursion Teori –Introducera rekursiva definitioner i Prolog –Fyra exempel –Visa att.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Programmering B PHP Lektion 2
Programmering B PHP Lektion 3
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
Pekare och speciell programstruktur i inbyggda system
Detection of similarity between documents Axel Bengtsson Ola Olsson
Logikprogrammering och Prolog
Felkalkyl Ofta mäter man inte direkt den storhet som är den intressanta, utan en grundläggande variabel som sedan används för att beräkna det som man är.
Grundläggande programmering
ARITMETIK – OM TAL.
Utveckling med ramverket .net
Bråk Text och bild från wikipedia. Vad är bråk 1/3 5/8 1/27 3 _
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
En mycket vanlig frågeställning gäller om två storheter har ett samband eller inte, många gånger är det helt klart: y x För en mätserie som denna är det.
Fysikexperiment 5p Föreläsning Korrelationer Ett effektivt sätt att beskriva sambandet mellan två variabler (ett observationspar) är i.
Logikprogrammering 21/10 Binära träd
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Logik med tillämpningar
Logikprogrammering 16/ : operatorer Staffan Larsson.
Labgrupper: 2 pers/grupp fr o m lab 2 schema ENKÄT.
Föreläsning 7 Fysikexperiment 5p Poissonfördelningen Poissonfördelningen är en sannolikhetsfördelning för diskreta variabler som är mycket.
Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45 Adderare Addition av två tal innebär att samma förfarande upprepas för varje position i talet. För varje.
Ackumulatorer CM 3.7 AOP 8.3 (BBS 5.3, 6.2.2). dagens föreläsning rekursion iteration ackumulatorer för effektivitet exempel.
Föreläsning 11 Logik med tillämpningar Innehåll u Generell resolution u Kapitel i Ben-Ari.
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 9 Logik med tillämpningar Innehåll u Semantiska tablåer i predikatlogiken u Klausulform u Herbrandmodeller u Kapitel 3.5,
Föreläsning 15 Logik med tillämpningar Innehåll u Programmeringsstil i Prolog u Expertsystem u Att kunna inför tentan u Kapitel 13 och 14.3.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Logikprogrammering 23/10 Binära träd In- och uthantering David Hjelm.
Negativa tal – några exempel
Föreläsning 16 Logik med tillämpningar Innehåll u Information kring kursvärdering och tentagenomgång u Genomgång av övningstenta 2.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Logikprogrammering ons 4/9 Rebecca Jonson.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 13: Resolution Resolution i satslogiken Resolution i predikatlogiken.
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Kajsa Bråting  H. Sollervall: Tal och de fyra räknesätten, Studentlitteratur.
KPP053, HT2015 MATLAB, Föreläsning 4
Filosofisk logik Kapitel 15
Kapitel 2, mattespananrna
Föreläsning 11: Rekursion
Presentationens avskrift:

Föreläsning 13 Logik med tillämpningar

Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat u Shapiro, 8-10

Aritmetik  Aritmetik hanteras annorlunda i Prolog än i logikprog- rammering av effektivitetsskäl. Definitionen av plus: plus(0,X,X)  nat_num(X). plus(s(X),Y,s(Z))  plus(X,Y,Z). tar tid proportionellt mot storleken på sitt första argument! u I Prolog har man istället ett gränssnitt mot CPU:ns aritmetiska funktioner. u Priset för detta:Vissa aritmetiska funktioner inte är lika generella som sina logiska ekvivalenter.

Evaluering  Systempredikatet is(Value, Expression) skrivs oftast Value is Expression.  Tolkas genom att Expression evalueras som ett aritmetiskt uttryck och unifieras med Value och lyckas eller misslyckas i enlighet med resultatet. u X is 3 + 5? 8 is 3 + 5? is 3 + 5? yes yes no X=8. u X is 3 + x? X is 3 + Y? no yes/error

Rekursiva vs iterativa program u Finns inga iterativa konstruktioner i Prolog men man kan skriva rekursivt program som motsvarar ett iterativt. u Ett rekursivt program kräver mer minne (linjärt proportionellt mot antalet iterationer (n).) u Ett iterativt program kräver lika mycket minne oavsett hur stort antal iterationer som krävs.

Fakultetsfunktionen  Rekursivt: fac(N,F) :- N > 0, N1 := N -1, fac(N1,F1), F := N * F1. fac(0,1).  Iterativt: fac(N,F) :- fac(N,1,F). fac(N,T,F) :- N > 0, T1 := T*N, N1 := N - 1, fac(N1,T1,F). fac(0,F,F).

Summera en lista av heltal u Rekursivt sumlist([I | Is],S) :- sumlist(Is,S2), S := I + S2. sumlist([ ],0). u Iterativt: sumlist(Is,S) :- sumlist(Is,0,S). sumlist([I | Is],T,S):- T2 := T + I, sumlist(Is,T2,S). sumlist([ ], S, S).

Symboliska uttryck i Prolog u Vi har använt Prolog för att manipulera naturliga tal, listor och binära träd tidigare. u Vi kan hantera symboliska uttryck också. u Vi ska bygga en deriverare i Prolog. u Svårighet med kedjeregeln:

Typpredikat

Vad behöver man typpredikat till?  Antag att vi har en lista av listor och element, tex [a, [a, c], c, [a, b, [c, d], [e]], f] som vi vill ”platta ihop” till en lista [a, a, c, c, a, b, c, d, e, f]. u Vi måste veta om ett element i listan är en lista eller inte. u Vi använder typpredikatet list för detta ändamål.

Sammansatta termer u Att kunna känna igen och arbeta på bestånds- delarna av en sammansatt term är ganska viktigt i Prolog.  Följande predikat är bra hjälpmedel: functor(Term,F,Arity). arg(N,Term,Arg). Term=.. List.

Kan vi uttnyttja det för vårt problem med kedjeregeln?  Ja! Om vi använder =.. så kan vi få fram argumenten. Om vi har f(g(x)) =.. [F, G_X] så blir F = f och G_X = g(x)  Dessutom får vi en gratis koll av att f är en funktion med aritet 1 på samma gång!

Metalogiska predikat u En användbar extension av logikprogram är de så kallade metalogiska predikaten. Dessa går utanpå första ordningens predikatlogik och tillåter oss till exempel att tolka variabler (snarare än de objekt de representerar) som språkelement. u var(Term) u nonvar(Term)

Metalogiska predikat återställer en del av flexibiliteten i Prolog: u Predikatet plus kan i logikprogrammering utöver för addition användas för både subtraktion och uppdelning av ett tal i två mindre tal.  Motsvarande uttryck i Prolog X := Y + Z. kan bara användas för addition.

 Metalogiska predikat kan också användas för att uppnå bästa val av målordning i ett program. Minns vår tidigare diskussion om predikatet farfar farfar(X,Z) :- far(X,Y), far(Y,Z). farfar(X,Z) :- far(Y,Z), far(X,Y). u Den första definitionen var bättre om vi sökte efter ett barnbarn till X, den andra om vi sökte en farfar till Z. u Denna distinktion kan vi nu uppnå med hjälp av våra metalogiska predikat.

Jämförelse av termer u I vissa fall måste vi undersöka om två variabler är identiska (och inte bara unifierbara, som ju alla par av variabler är). Detta är en metalogisk test. u För detta ändamål har Prolog ett systempredikat ==/2.

u Målet(X == Y)? lyckas om X och Y är identiska konstanter, identiska variabler, eller om bägge är strukturer vars funktorer har samma namn och aritet och om (Xi == Yi)? för alla matchande argument Xi och Yi för X respektive Y. Annars misslyckas det. u X==5 misslyckas alltså, till skillnad mot X=5. u Vi har också ett predikat \== som har det precis motsatta beteendet. X \== Y lyckas utom när X och Y är identiska termer.

Olika jämförelsepredikat  X is Evaluerar det högra argumentet (aritmetiskt uttryck) och jämför med det vänstra.  3 =:= Evaluerar båda argumenten (aritmetiska uttryck) och jämför sedan.  X = Y Kollar om man kan unifiera X och Y.  X == Y Kollar om termerna X och Y är identiska.