Föreläsning 14 Logik med tillämpningar 97-12-09. Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.

Slides:



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

Visual Basic - Genomgång
X-mas algebra Är du redo? Klicka!!.
Andragradsfunktioner & Andragradsekvationer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
Funktioner och programorganisation
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:
Logikprogrammering Ons, 25/9
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.
Programmeringsteknik Föreläsning 4 Skolan för Datavetenskap och kommunikation.
2D1311 Programmeringsteknik med PBL
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Växjö 21 april -04Språk & logik: Kontextfria grammatiker1 DAB760: Språk och logik 21/4: Kontextfria 10-12grammatiker Leif Grönqvist
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 7: Cut och negation (kap. 10) Teori –Förklarar hur man kontrollerar Prologs backtracking-beteende.
Växjö 15 april -04Språk & logik: Reguljära uttryck1 DAB760: Språk och logik 15/4: Finita automater och 13-15reguljära uttryck Leif Grönqvist
© 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.
Java. Kortfattat om Java Syntaxen påminner i hög grad om C++ Stöd för objektorientering Kod kan köras i en virtuell maskin som finns tillgänglig för nästan.
Flödeskontroll Satser i ett program utförs en och en efter varandra. Detta kallas sekvensiell flödeskontroll. Ofta är det dock nödvändigt att modifiera.
Programmering B PHP Lektion 2
Vad är du för typ av person?
Musikens grundbegrepp och symboler
Logikprogrammering och Prolog
Programmering B PHP Lektion 3
Algebra och ekvationer
Kunskap 2 Egna upplevelser
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Semantik – introduktion
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Grundläggande programmering
Are idioms difficult to learn? After this program it will ’be a piece of cake’
DD1310/DD1314/DA3009 Programmeringsteknik Föreläsning 2 Skolan för Datavetenskap och kommunikation.
Namnrum, räckvidd och rekursion Linda Mannila
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Logikprogrammering 21/10 Binära träd
Kenneth Wilhelmsson 1 Logikprogrammering 10 P Onsdag 20 november 2002.
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Problemlösningsmetodik
Logik med tillämpningar
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
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 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Karl-Henrik Hagdahl, 11 november Repetition Logikprogrammering: måndag 11 november 2002.
Satslogik, forts. DAA701/716 Leif Grönqvist 5:e mars, 2003.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
Föreläsning 16 Logik med tillämpningar Innehåll u Information kring kursvärdering och tentagenomgång u Genomgång av övningstenta 2.
1 Semantik – introduktion Semantik = läran om mening Tvärvetenskapligt filosofi lingvistik psykologi AI Lingvistik motsägelser mångtydighet metaforer Filosofi.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 5: Syntaxanalys (parsning) Syntaxanalysens mål Tillvägagångssätt och komplexitet Syntaxanalys.
Pontus Johansson 1 grammatiker 21.1 G 1 (BBS 7)
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.
Föreläsning2 Operativsystem.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng while-loop do-loop continue, break PROJEKT Föreläsning 5.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
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)
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
KPP053, HT2015 MATLAB, Föreläsning 4
Presentationens avskrift:

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 loopar u Generate and test u 11, 12.1, , 14.1 i Sterling/Shapiro

merge([X|Xs],[Y|Ys],[X|Zs]) :- X<Y, merge(Xs,[Y|Ys],Zs). merge([X|Xs],[Y|Ys],[X,Y|Zs]) :- X=Y, merge(Xs,Ys,Zs). merge([X|Xs],[Y|Ys],[Y|Zs]) :- X>Y, merge([X|Xs],Ys,Zs). merge(Xs,[ ],Xs). merge([ ],Ys,Ys).

Cuts = beskärningar u En beskärning, ett cut, (betecknas !) kan användas för att uttrycka denna ömsesidiga uteslutning av klausuler. u Beskär sökträdet och förkortar därmed beräknings- tiden och minskar mängden minne som behövs. u Målet lyckas och ”binder” Prolog till alla val den gjort från det att föräldramålet unifierades med huvudet till klausulen som cutet finns i.

Operationellt gäller följande: u Ett cut beskär alla klausuler nedanför den aktuella klausulen. u Ett cut beskär alla alternativa lösningar till den konjunktion av mål som står till vänster om beskärningspunkten i klausulen. u Ett cut påverkar inte målen som står till höger om beskärningspunkten. Över dessa sker backtracking som vanligt.

merge([X|Xs],[Y|Ys],[X|Zs]) :- X<Y,!, merge(Xs,[Y|Ys],Zs). merge([X|Xs],[Y|Ys],[X,Y|Zs]) :- X=Y,!, merge(Xs,Ys,Zs). merge([X|Xs],[Y|Ys],[Y|Zs]) :- X>Y,!, merge([X|Xs],Ys,Zs). merge(Xs,[ ],Xs):- !. merge([ ],Ys,Ys):- !.

Exempel: Svara på frågan test(M,N) test(X, Y) :- p(X), koll(X,Y). test(X, Y) :- p(Z), Y is Z*3. koll(X, X) :- X >=2. p(1). p(2). test(X, Y) :- p(X), koll(X,Y). test(X, Y) :- p(Z), Y is Z*3. koll(X, X) :- X >=2. p(1):- !. p(2).

minimum(X,Y,X) :- X =< Y. minimum(X,Y,Y) :- X > Y. minimum(X,Y,X) :- X =< Y, !. minimum(X,Y,Y) :- X > Y. minimum(X,Y,X) :- X =< Y, !. minimum(X,Y,Y).

u Observera att den sista versionen inte har samma betydelse som de tidigare två. Den lyckas för målet minimum(2,5,5). u Inte logiskt korrekt! Ett cut som förändrar programmets mening kallas för rött.

Gröna vs röda cuts u Vi skiljer på två typer av cuts, gröna och röda. u Att addera eller ta bort gröna cuts från ett program påverkar inte programmets mening. Gröna cuts beskär endast vägar som inte leder till nya lösningar. Cuts som inte är gröna är röda. u Röda cuts används vanligen för att utelämna explicita villkor.

Vilka cut är gröna och vilka är röda? member(X, [X | Xs]) :- !. member(X, [Y | Ys]) :- member(X, Ys). max(X, Y, Y) :- X =< Y, !. max(X, Y, X) :- X > Y, !. likes(jan, glass) :- !. likes(pelle, vatten) :- !. likes(lena, te) :- !.

Några principer för cuts u Vanliga fel när man använder cuts: –Man antar att beräkningar beskärs som inte gör det –Man antar att vissa beräkningar inte beskärs trots att de gör det. u Gör cuts så lokala som möjligt. u Sätt ett cut så fort man vet att den korrekta klausulen har valts. u Lägg inte in cuts i ett program förrän det fungerar korrekt.

quicksort([X|Xs], Ys) :- partition(Xs, X, Littles, Bigs), quicksort(Littles, Ls), quicksort(Bigs, Bs), append(Ls, [X|Bs], Ys). quicksort([],[]). partition([X|Xs], Y, [X|Ls], Bs) :- X =< Y, partition(Xs, Y, Ls, Bs). partition([X|Xs], Y, Ls, [X|Bs]) :- X > Y, partition(Xs, Y, Ls, Bs). p artition([], Y, [], []).

Negation  not(X) :- X, !, fail. not(X).  Vad händer vid frågan not(G) ?  Om G lyckas så beskärs trädet och misslyckas på fail, och not(G) misslyckas. Om anropet till G däremot misslyckas så används den andra regeln, som lyckas. Alltså: not(G) misslyckas om G lyckas och lyckas om G misslyckas.

Extra-logiska predikat u Ligger utanför den logiska modellen. u Genererar en sidoeffekt. u Finns 3 typer: –Input/Output –Manipulationer av programmet –Interface mot underliggande operativsystem (tas inte upp här..)

Input/Output u read(X). % läser input (stdin)  write(X). % skriver output (stdout)  En Pascal-liknade writeln kan definieras så här: writeln([X|Xs]) :- write(X), writeln(Xs). writeln([]) :- nl. % nl är ett predikat som ger % en ny linje

Interaktiva program u Läs in ett fakta, processa faktat och läs in nytt fakta. u Ofta implementerat som while-loopar i andra programspråk. u Bygger på svans-rekursion i Prolog.

Grundläggande while-loop  echo :- read(X), echo(X). echo(X) :- last_input(X), !. echo(X) :- write(X),nl,read(Y),!,echo(Y).  last_input är ett predikat som kollar om X uppfyller avslutningsvillkoret för loopen. u Om villkoret ej är uppfyllt skrivs X ut och ett nytt värde läses in.

Failure-driven loop u Den misslyckandebaserade slingan är ett sätt att skapa upprepning med hjälp av återspårning istället för med rekursion. u Liknar repeat-loopar i andra språk. u Har ingen logisk motsvarighet utan kan bara förklaras operationellt.

Grundläggande repeat-loop u repeat. repeat :- repeat.  echo :- repeat, read(X), echo(X), !. echo(X) :- last_input(X), !. echo(X) :- write(X), nl, fail. u Cut i klausulen med repeat är viktigt annars skulle vi kunna få oändlig körning pga backtracking.

Generera och testa (generate and test) u Bygger på failure-driven loop. u Ett problemlösningsparadigm som man ofta använder sig av som Prologprogrammerare. u En process eller rutin genererar kandidater till lösningen på ett problem och en annan process (rutin) testar kandidaterna för att hitta alla lösningar. u find(X) :- generate(X), test(X).

u Låt oss skriva ett program som genererar alla prim- tal mellan M och N. Först behöver vi en procedur som avgör om ett tal är ett primtal: u prime(X) :- X > 1, Y is X - 1, prime(X,2,Y). prime(X,M,N) :- N < M. prime(X,M,N) :- not(0 is X mod M), M1 is M+1, prime(X,M1,N).

Effektivare: prime(X) :- 0 is X mod 2, X > 2, !, fail. prime(X) :- X > 1, Y is integer(sqrt(X)), prime(X,3,Y), !. prime(X,M,N) :- N < M. prime(X,M,N) :- not(0 is X mod M), M1 is M+2, prime(X, M1, N).

Generator av tal u Vi behöver en generator som genererar alla tal i intervallet [M..N]. Finns ofta inbyggd som genlist:  genlist(M,M,[M]) :- !. genlist(M,N,[M | Ls]) :- M1 is M+1, genlist(M1,N,Ls).

Vårt program blir då: u primes(M,N,X) :- genlist(M,N,Ls), member(X,Ls), prime(X).