Traditionell Programmering



Relevanta dokument
Ett Logikprogram. Logik och Programmering. Introduktion till PROLOG, dvs. PROgramming in LOGic. Viktiga begrepp/områden i Prolog. Framtiden?

DD1361 Programmeringsparadigm HT15

DD1361 Programmeringsparadigm HT17

K3 Om andra ordningens predikatlogik

DD1361 Programmeringsparadigm HT16

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska ni kunna?

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Föreläsning 6: Introduktion av listor

Grundläggande logik och modellteori (5DV102)

Innehåll. Föreläsning 7. Satslogiken är för grov. Samma sak i predikatlogik: Första ordningens predikatlogik. Logik med tillämpningar

Avslutning. Vad? Hur? Anmärkningar inför tentan 2. Vad ska kunnas?

7, Diskreta strukturer

TAIU07 Matematiska beräkningar med Matlab

Semantik och pragmatik (Serie 4)

Sanningsvärdet av ett sammansatt påstående (sats, utsaga) beror av bindeord och sanningsvärden för ingående påståenden.

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Semantik och pragmatik

Imperativ programmering

Föreläsning 9 i programmeringsparadigm. Unifiering (Brna Chapter 4.1).

Dugga Datastrukturer (DAT036)

Programmeringsteknik med C och Matlab

SMD 134 Objektorienterad programmering

Prova på-laboration i Prolog

Tentamen i. TDDA 69 Data och programstrukturer

Tentamen OOP

Semantik och pragmatik

FTEA12:2 Filosofisk metod. Att värdera argumentation I

Objektorienterad programmering i Java

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll

Dagens föreläsning Programmering i Lisp Fö 5

Grundläggande logik och modellteori

Föreläsning 9 i programmeringsparadigm. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.

DD1361 Programmeringsparadigm. Carina Edlund

En introduktion till predikatlogik

Tommy Färnqvist, IDA, Linköpings universitet. 2 Strukturer Domäner Tolkningar... 3

Grunderna i stegkodsprogrammering

Flera kvantifierare Bevis Direkt bevis Motsägelse bevis Kontrapositivt bevis Fall bevis Induktionsprincipen. x y (x > 0) (y > 0) xy > 0 Domän D = R

Grundläggande programmering med C# 7,5 högskolepoäng

a), c), e) och g) är olikheter. Av dem har c) och g) sanningsvärdet 1.

Deklarativt programmeringsparadigm

Programmerbar logik. Kapitel 4

Logikprogrammering. Undervisningsmaterialet NYTT för 2013: Learn Prolog Now! SWI Prolog-tolk, startas under tuxedo/ pingvinerna med swipl!

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Filosofisk Logik (FTEA21:4) föreläsningsanteckningar/kompendium. v. 2.0, den 29/ III. Metalogik 17-19

Digitalt lärande och programmering i klassrummet

FUZZY LOGIC. Christopher Palm chrpa087

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Exempel på typer av datorspråk EXCEL

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Björn Abelli Programmeringens grunder med exempel i C#

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Tommy Färnqvist, IDA, Linköpings universitet. 1 Kursadministration 1. 2 Introduktion Varför logik? Satslogik... 2

Institutionen för datavetenskap 2014/15

Föreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Sats. Om t är en rätvinklig triangel så är summan av kvadraterna på kateterna i t lika med kvadraten på hypotenusan.

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Grundläggande logik och modellteori (5DV102)

Sätt att skriva ut binärträd

Föreläsning 2. Operativsystem och programmering

Introduktion till arv

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

DD1361 Programmeringsparadigm HT15

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

INDUKTION OCH DEDUKTION

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

8-4 Ekvationer. Namn:..

FÖRELÄSNING 3 ANDERS MÄRAK LEFFLER IDA/HCS

Tentamen: Programutveckling ht 2015

Föreläsning 4: Poster

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Introduk+on +ll programmering i JavaScript

Tentamen Grundläggande programmering

Varför är logik viktig för datavetare?

DD1350 Logik för dataloger. Fö 2 Satslogik och Naturlig deduktion

8. Naturlig härledning och predikatlogik

Tentamen i. TDDC67 Funktionell programmering och Lisp

INSTUTITIONEN FÖR FILOSOFI, LINGVISTIK OCH VETENSKAPSTEORI ETIK VT-15 METAETIK EMOTIVISM OCH ERROR-TEORI

MATEMATIKENS SPRÅK. Syftet med denna övning är att med hjälp av logik lära oss att uttrycka matematik mer exakt,

Deklarativ programmering

VHDL och laborationer i digitalteknik

IT för personligt arbete F6

Tentamen TEN1 HI

Vad är det? Översikt. Innehåll. Vi behöver modeller!!! Kontinuerlig/diskret. Varför modeller??? Exempel. Statiska system

DD1350 Logik för dataloger

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

LULEÅ TEKNISKA UNIVERSITET Ämneskod S0006M Institutionen för matematik Datum Skrivtid

Vad är semantik? LITE OM SEMANTIK I DATORLINGVISTIKEN. Språkteknologi semantik. Frågesbesvarande

Objektorienterad programmering D2

Transkript:

Crash Course in Prolog Baran Çürüklü Introduktion till PROLOG, dvs. PROgramming in LOGic Prolog-programmen är deklarativa och består av egenskaper, relationer och regler. Lisp and Prolog är de vanligaste programmeringsspråken för symbolisk AI. Mycket bra för utforskning" och "prototyp programmering". Prolog bygger på Horn-satser, delmängd till första ordningens predikatlogiken. Viktiga begrepp/områden i Prolog Baskunskaper i Prolog: databaser, listor, metalogiska predikat, ackumulatorer, svansrekursion, (DCG), generateand-test, sökning. Anknytning till andra områden: Relationsdatabaser, Expertsystem, Formella språk och automata-teori, (Naturlig språkhantering). Att tänka deklarativt. Traditionell Programmering Imperativa programmeringsspråk: är i stort en abstraktion av turingmaskin (ett program är instruktioner till en turingmaskin). har en operationell semantik i termer av vad turingmaskinen ska utföra. är kontextberoende (vilka operationer som gjorts innan). Ett Logikprogram Logik och Programmering En beskrivning i en vald logik av en verklig eller tänkt värld. Beskrivning av allt relevant för att lösa uppgiften: ->relationer mellan objekten i världen (personer, tal, listor, träd, ). En logik har 4 delar syntax (för logiska formler) semantik (exakt betydelse) uppsättning axiom (tex. tautologier) inferensregler (exv modus ponens) Logiker: Satslogik, predikatlogik, typad logik, temporallogik (händelser, intervaller, ), modallogik (sanlikheter, kanske, sant i alla världar, ) 1

Dagsläge för Prolog & Logik : Prolog används för prototyper Större kommersiella system (länkas till.exe och användaren vet ej att systemet är implementerat i Prolog). Kompilatorer/Interpretatorer (Erlang interpretatorn utvecklades i Prolog). Grafiska paket, snabb exekvering, bra gränssnitt till andra programmeringsspråk (anropbart och kan anropa exv C/Java rutiner). Används im naturligt språk, tolkning, översättning etc. Gränssnitt till webben (exv. LPA-Prolog). Dagsläge för Logik och Logikprogrammering: formell verifiering av säkerhetskritiska system (landningsställ, ställverk/signalering för rälssystem, hårdvara, mm). Hårdvarudesign (TTL-logikkretsar, sant=1=5 volt, falskt=0=0 volt), predikatlogik, temporallogik, modallogik, fuzzy logic. Framtiden för Prolog? Kunskapsrepresentation (SDL, XML, Relationsdatabaser -> Kunskapsbaser, naturligt språk), temporallogik. Säkerhetskritiska system kräver i framtiden bevis för att de är korrekta. flyg, transport, telecom, medicin, mm (program i C är mycket svåra att testa!). Prolog utvecklas: Constraint Logic Programming (CLP): parallell-exekvering Agentprogrammering webb programmering Deklarativa och imperativa språk Filosofi Program Exempel Fördelar Imperativa språk Användaren talar om hur problemet ska lösas En sekvens av kommandon Basic, C, C++, Ada, Java, Perl, Phyton, Snabba och specialiserade program Deklarativa språk Användaren talar om vad problemet är En mängd påståenden Prolog, ML, Scheme, Gödel, mercury, Oz, (SQL), Generella, läsbara och möjlighet till korrekta program Olika språkparadigmer imperativa språk är tvingande, dvs en given exekveringsordning. högnivåinstruktioner till en processor. Ett deklarativt program: inget om hur det ska exekveras (sant i pure Prolog ). beskriver endast problemet och kunskapen om problemet. Ursprung i logik och hur människan resonerar logiskt. Några viktiga beteckningar (Logik) Predikatnamnär ett samlingsnamn för egenskaps- och relationsnamn. Predikatnamnet åtföljs av argumenten. Ställighet (=aritet) anger antal argument predikatet har. Ställighet = 0: satslogik (inga argument) Ställighet = 1: egenskap Ställighet = 2: relation Argumenten kallas för termer. En term kan vara konstant, variabel eller en struktur (sammansatt term). 2

Del 2: Testa Prolog Gratis Prolog för utbildning (Linux/Mac/Windows): http://www.swi-prolog.org/ Tar lite plats (ca 4 Meg). Många Prolog introduktioner på webben, sök med www.google.com efter Prolog tutorial introduction Prolog skiljer sig Prolog har inga globala variabler Inga tilldelningssatser Inga iterativa konstruktioner (t.ex. loopar) Inga if then satser Rekursion är central i Prolog Begrepp i Prolog Sant eller falskt, ett Prolog uttryck kan bara anta två värden, sant eller falskt Två argument kan vara lika eller olika. Likhet kan fås gem att fria variabler binds. Sökning, Prolog bygger på sökning, Prolog försöker hitta en lösning och testar olika vägar. Backtracking, om sökningen misslyckas, backar Prolog tillbaks och provar alternativa vägar. EGENSKAPER skrivs: man(adam). man(kalle). man(lasse). woman(lisa). woman(eva). RELATIONER skrivs: parent(adam,peter). % adam är förälder till peter parent(eva,kalle). parent(eva,lisa). parent(lisa,lasse). parent(kalle, knut). % Avsluta alltid raden med en punkt! Resterande text efter % är kommentar Definition av Regler Varje regel har ett huvud (head) namnet som definierar relationen. Varje regel har en kropp (body) själva definitionen av relationen. Definition av mor och far följer nedan: OM M är en kvinna och M är förälder till C så är M mor till C : mother(m,c):- woman(m), parent(m,c). OM F är en man och F är förälder till C så är F far till C : father(f,c):- man(f), parent(f,c). :- betyder (logisk implikation), betyder logiskt OCH, både man och parent måste vara sant för att father skall vara sant. Prolog Interpretatorn Fakta och regler skrivs i fil som har slutar på.pl Släpp filen på prolog ikonen eller ladda in (se manual). Fråga Prolog om det finns någon kvinna. woman(x). X = lisa? ; X = eva? ; Prolog Prompt: Prolog skriver alltid ut?-. Efter prompten ställer du din fråga. ; frågar efter fler lösningar (ger alternativ lösning om det finns). 3

Vi vill bara veta om det finns någon kvinna. woman(_). child(_). Prolog bygger på negation as failure, allt som man inte vet, är falskt (lite mer om det senare). Skriv in i en textfil som slutar med.pl ; whisky(bowmore). whisky(glenlivet). region(bowmore, islay). region(glenlivet, highland). age(bowmore, 12). Har vi whisky från Islay och i så fall hur gammal? region(w, islay), age(w, A). A = 12, W = bowmore? ; W instantieras (binds till) bowmore. whisky(bowmore). region(bowmore, islay). age(bowmore, 12). Har vi en whisky som är mer än 8 år gammal? whisky(w), age(w, A), A>8. A = 12, W = bowmore? ; Strukturer 3 sätt att skiva samma sak: smak(oban, 16, smak, torv, medel, roekig, medel, fyllig, medel). smak(oban, 12, [torv, me], [roekig, me], [fyllig, me]). smak(oban, 10, smak(torv(me), roekig(me), fyllig(me))). Varning, lätt att missförstå strukturer, det finns inga funktioner i Prolog! smak(oban, 10, smak(torv(me), roekig(me), fyllig(me))). smak(w, _, S). S = smak(torv(me), roekig(me), fyllig(me)), W = oban? ; smak(oban, 10, smak(torv(me), roekig(me), fyllig(me))). smak(w, _, smak(torv(t), _,_)). T = me, W = oban? ; 4

Mer REGLER whisky(bowmore). region(bowmore, islay). aalder(bowmore, 12). smak(bowmore,12, smak(torv(me), roekig(me), fyllig(me)). man(peter). % För alla män M och whisky W gäller det att % M gillar W. gillar(m, W) :- man(m), whisky(w). whisky(bowmore). region(bowmore, islay). aalder(bowmore, 12). smak(bowmore,12, smak(torv(me), roekig(me), fyllig(me)). man(peter). gillar(m, W) :- man(m), whisky(w). Vad gillar Peter? gillar(peter, X). X = bowmore? ; \+ gillar(peter,bowmore). Negation, det är inte sant, skrivs \+ Listor [ ] : en tom lista [1, 2, abba] : en lista som innehåller 3 element [[11, 12, 13], [21, 22, 23], [31, 32, 33]] : En 3x3 matris (en lista som innehåller 3 listor som...). Listor Huvud på listan, svansen på listan, jämför CAR och CDR i LISP Dessa två listor är identiska!?- [a,b,c] = [a [b,c]]. Yes Ger huvud och svans?- [a,b,c] = [Huvud Svans]. Huvud=a Svans=[b,c] Några enkla predikat: member % Predikatet medlem % X är medlem i listan om den står först i listan medlem(x, [X Rest]). % Annars är X i resten av listan. medlem(x, [F Rest]) :- medlem(x, Rest). ---- medlem(1, [abba, 1, 3]). Kallas svansrekursion om det sista en regel gör är att anropa sig själv. Detta blir lika effektivt som en loop skriven i C om man skulle vara intresserad av exekveringstid. medlem medlem(x, [X Rest]). medlem(x, [F Rest]) :- medlem(x, Rest). medlem(x, [abba, 1, 3]). X = abba? ; X = 1? ; X = 3? ; 5

medlem first, second, tail medlem(1, [A, B]). A = 1? ; B = 1? ; Luring, A och B är ju variabler och kan i detta exempel vara vad som helst, exempelvis 1. Därmed kan första elementet i listan vara 1 och andra elementet i listan kan även vara 1. % Det första elementet i listan. first(x, [X _]). % Det andra elementet i listan. second(x, [ _,X _ ]). % Resten av listan. tail(r, [ _ R]). Aritmetik och annat Villkor som är sanna eller falska: <, >, >=, =<, =:=, =\= (reducerar höger och vänsterleden). is (exempel?- X is 4 + 3) ==, \== (strikt likhet, olikhet) = (unifiering, det vill säga att Prolog försöker binda alla obundna variabler så långt det går. Lyckas det så lyckas unifieringen). +, -, *, /, sin, cos, tan 2 =< 4. 2+2 =:= 4. 2+2 =:= 5. 2+2 =\= sin(0), 0 + 0 =:= sin(0). Trace? - trace, X is sin(4/5), X>2. 1 1 Call: _59 is sin(4/5)? <ENTER> 1 1 Exit: 0.71735609 is sin(4/5)? <ENTER> 2 1 Call: 0.71735609 > 2? <ENTER> 2 1 Fail: 0.71735609 > 2? <ENTER> 1 1 Redo: 0.71735609 is sin(4/5)? <ENTER> 1 1 Fail: _59 is sin(4/5)? <ENTER> Redo betyder att Prolog interpretatorn backtrackar (backar ett eller flera steg för att försöker hitta alternativ lösning). A is B. Uttrycket B beräknas och unifieras med variabeln (eller konstanten) A.? - Area is 3.14 * 5 * 5. Area = 78.5? <ENTER>? - 4 is 4.? X is 2 + M. ERROR? M = 2, X is 2 + M. X = 4 För att högertsidan om is ska kunna beräknas får det inte finnas obundna variabler 6

Strikt likhet == V == Q. %variabel V är inte strikt samma som Q % man skulle kunna instantiera V = 1 och Q till 2 om man vill V = 5, Q = 5, V == Q. % nu är båda strikt lika (båda=5). 1+2 == 2+1. % strukturen 1+2 är inte strikt lik 2 + 1 1+2 == 1+2. Unifiering = Två predikat kan unifieras omm de har samma namn de har lika många termer termerna kan unifieras två termer kan unifieras omm den ena är en variabel både är samma konstant både är strukturer... Unifiering = fortsätter två strukturer kan unifieras omm de har samma konstruktor (namn) de har samma ställighet argumenten kan unifieras Exampel på unifiering-1 xx(left, 123, X) = xx(a,b,b). A = left, B = 123, X = 123? ; cbc = X. X = cbc? +(5,5) = 5 + 5 Misslyckade exempel: X = 5 + 5, X = 10. Exampel på unifiering-2 Exampel på unifiering-3a E = 1+2. E = 1+2? <ENTER> Yes (E har tilldelats strukturen 1+2 vilket är samma sak som +(1,2) p(p(p(p(0)))) = p(p(x)). X = p(p(0))? ; % predikatet lenght1 length1(0, [ ]). length1(n, [ F R]) :- length1(n2, R), N = N2+1. length1(x, [a,b,c]). X = 1+(1+(1+0))? ; 7

Exampel på unifiering-3b % predikatet lenght1 length1(0, [ ]). length1(n, [ F R]) :- length1(n2, R), N is N2+1. length1(x, [a,b,c]). X = 3; Syntax Predikat: mamma, mmm, _1_. Variabler: W, W12, _12 Konstanter: stefan, stefan, Stefan Strukturer: de(de(x,10,nil),12,nil). Listor: [], [1,2, [44, 55], 3], [a,n(1,2,3)] Aritmetik & annat: +, -, *, /, sin, cos, tan, <, >, >=, =<, =:=, =\=, ==, =, is Siffror och tal: 0,, 9, 123.31, 55.2e-3 Closed world assumption (CWA) Exempel: SJ uppger att det dagligen går ett tåg från Linköping till Stockholm kl. 9:22. Dock säger man inte explicit att det inte går ett tåg kl. 9:56 eller 10:24. Eftersom det inte är angivet ett tåg kl. 9:56 går det förmodligen inget tåg då. CWA: Det som inte kan visas är inte sant. Negation by Failure: NF: Det som Prologprogrammet inte kan härleda i ändlig tid är falskt. Negation i Prolog Negation by failure skrivs i prolog \+ Exempel:?- X = z, \+ member(x,[a,b,c]).?- X = c, \+ member(x,[a,b,c]). Hur hittar Prolog alla lösningar Djupet-först sökning med s k backtracking: När en lövd påträffas backar interpretatorn tillbaks till föregående förgrening och provar nästa alternativ. Problem: oändliga subträd oändlig loop. SLD-träd för medlem(x, [a, b, c]). X/a X/b Program: medlem(x, [X _]). medlem(x, [_ T]) :- medlem(x, T). medlem(x, [a, b, c]). medlem(x, [b, c]). medlem(x, [c]). medlem(x, []). X/c 8

Metalogiska predikat Prolog innehåller en uppsättning predikat som inte är strikt predikatlogiska. Man kan även skriva program som ändrar sin egen kod (viktig egenskap im AI).?- write( hello world ), writeln(5). hello world 5 var(x) - misslyckas om X är instansierad. Exempel:? X = Y, var(x).?- Z = hej, var(z).? var(sol). SLU T integer( X) -om X är bunden till ett heltal. atomic(x) -om X är bunden till en konstant. 9