Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash...

28
2008-09-18 Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary version) Introduction to PROLOG PROgramming in LOGic z Prolog-program are declarative and it f ti l ti d l consist of properties, relations and rules. z Lisp and Prolog are the most common programming languages for symbolic AI. z Good to ”explore” and ”prototype programming". z Prolog are based on Horn-clauses, a subset of first order predicate logic.

Transcript of Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash...

Page 1: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 1

Crash Course in PrologPeter Funk

Slides mostly in Swedish, lecture in English(preliminary version)

Introduction to PROLOGPROgramming in LOGic

Prolog-program are declarative and i t f ti l ti d lconsist of properties, relations and rules.

Lisp and Prolog are the most common programming languages for symbolic AI.Good to ”explore” and ”prototype programming".Prolog are based on Horn-clauses, a subset of first order predicate logic.

Page 2: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 2

Important to know about Prolog

Basics in Prolog:facts, lists [], meta-logical predicates, accumulator, tail-recursion, (DCG), generate-and-test, search.Connection to other areas: Relational data-baser, Expert systems, Formal and automata-theory (Natural languageautomata-theory, (Natural language processing).To think declarative.

Traditional Programming

Imperative programming:A b t ti f th T i hi (An abstraction of the Turing machine (a program is instructions to a Turing machine). Have an ”operational semantic” in terms of what the Turing machine has toof what the Turing machine has to perform. Is context dependent (what operations have been made before).

Page 3: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 3

Logic programs

A description in a suitable logical notationA description in a suitable logical notation describing a part of a world or a fictive world.

Description of al needed to solve a task:->relations between objects in a world

(people, numbers, lists, trees, …).

Logic and Programming

A logic has 4 parts· syntax (describing logical formulas)syntax (describing logical formulas)· semantic (exact meaning)· a number of axioms (e.g. Tautologies: [a] = [a|[]] }· inference rules (e.g. modus ponens, “if a so b”)

Logics: First order logic (satslogik), predicate logic, typed logic, temporal logic (events, intervals, …), modal logic (probability, maybe, true in all worlds,…)

Page 4: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 4

Prolog & Logic today:Prolog is used for prototypesSome larger commercial systems (links to .exe and users often not aware that system is in Prolog).y g)Compilation and Interpretation systems (Erlang used at Ericsson is initially written in Prolog).Graphic packets, fast execution, good interfaces to other programming languages (calls to/from e.g. C++/Java).Used in natural language processing, interpretation,Used in natural language processing, interpretation, translation etc.Good interfaces to web applications, web pages can use prolog (exv. LPA-Prolog – html – php - mySQL).

Status today for Logic and Logic programming:

formal verification of safety critical systems (landnings wheels in air plains, train ( g psignals, medical hardware, etc).

Hårdvarudesign (TTL-logikkretsar, sant=1=5 volt, falskt=0=0 volt), predikatlogik, temporallogik, modallogik, fuzzy logicfuzzy logic.

Page 5: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 5

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):Constraint Logic Programming (CLP):parallel-exekveringAgentprogrammeringwebb programmering

Deklarativ beskrivning ~ ImperativExempel på deklarativ beskrivning

Hitta alla barnbarn till en viss person X.Deklarativ beskrivning

Ett barnbarn till X är ett barn till ett av Xs barn.Imperativ beskrivningImperativ beskrivning

För att hitta ett barnbarn till X, hitta först ett barn till X. Hitta därefter ett barn till barnet.

Imperativ beskrivning IIFör att hitta ett barnbarn till X, hitta först en förälder till ett barn och kolla därefter om föräldern är ett barn till X.

•Logik:∀ X ∀ Y (∃ Z

read(person);for i := 1 to maxbarn do

if b [i 1] th ∀ X ∀ Y (∃ Z(barn(X, Z) and barn(Z, Y))

→ barnbarn(X, Y)).

Prolog:

barnbarn(X,Y) :- barn(X,Z), barn(Z,Y).

if barn[i,1] = person thenfor j := 1 to maxbarn do

if barn[j,1] = barn[i,2] thenwriteln(barn[j,2]);

fiod

fiod

Page 6: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 6

Deklarativa och imperativa språkImperativa språk Deklarativa språk

Filosofi Användaren talar om hur problemet ska lösas

Användaren talar om vad problemet ärp p

Program En sekvens av kommandon

En mängd påståenden

Exempel Basic, C, C++, Ada, Java, Perl, Phyton, …

Prolog, ML, Scheme, Gödel, mercury, Oz, y(SQL), …

Fördelar Snabba och specialiserade program

Generella, läsbara och möjlighet till korrekta program

Olika språk paradigmerimperativa språk är tvingande, dvs en given exekveringsordning. ”högnivåinstruktioner g g gtill en processor”.

Ett deklarativt program:inget om hur det ska exekveras (sant i ”pure Prolog”).beskriver endas problemet och kunskapenbeskriver endas problemet och kunskapen om problemet.Ursprung i logik och hur människan resonerar ”logiskt”.

Page 7: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 7

Logikens Historik400 fK De första grunderna läggs av Aristoteles (axiom, premisser,

slutsatser “Alla valar är däggdjur" osv).1930 Området stabiliseras [Gödel, Church, Russel, m.fl.]. (Predikatlogik

helt kartlagt Church-Turing-satsen => predikatlogik == beräkningsbara funktionerna)beräkningsbara funktionerna)

1960 Automatic Theorem Proving & AI.1965 Resolution och unifiering [Robinson]. Resolution: en effektiv

slutsatsdragning men regler måste skrivas på en speciell form.1972 Den första Prolog-implementationen [Colmerauer].1974 Logikprogrammering (SLD-resolution) [Kowalski] (Algoritm = logik +

kontroll, låt datorn bestämma hur problemet löses, dvs exekveringsordning).

1977 Negation (SLDNF-resolution) [Clark]. (SLDNF klarar negativa1977 Negation (SLDNF resolution) [Clark]. (SLDNF klarar negativa påståenden "En pingvin kan inte flyga").

1978 Edinburgh Prolog [Warren] (vanligaste syntaxen idag).1981 Japanerna annonserar sitt 5:e-generationsprojekt: robotik, AI, etc,

med logikprogrammering (”huvudresultat”: ökad användning av datorer i Japan med Kanji, romaji).

1995 – Constraint Logic Programming (CLP), Agent Programmering (logiska bubblor), …

Några viktiga beteckningar (Logik)

Predikatnamn är ett samlingsnamn förPredikatnamn är ett samlingsnamn föregenskaps- och relationsnamn.Predikatnamnet åtföljs av argumenten. Ställighet (=aritet) anger antal argument predikatet har.

Ställighet = 0: satslogik (inga argument)Ställighet = 1: egenskapStällighet = 1: egenskapStällighet = 2: relation

Argumenten kallas för termer. En term kanvara konstant, variabel eller en struktur(sammansatt term).

Page 8: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 8

Del 2: Testa PrologGratis Prolog för utbildningGratis 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 variablerProlog har inga globala variabler.Inga tilldelningssatserInga iterativa konstruktioner (e. g. loopar)Inga ”if … then” satserRekursion är central i PrologRekursion är central i Prolog

Page 9: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 9

Begrepp i PrologSant eller falskt, ett Prolog uttryck kan bara

åanta två värden, sant eller falsktTvå argument kan vara lika eller olika. Likhet kan fås genom att fria variabler binds.Sökning, Prolog bygger på sökning, Prolog försöker hitta en lösning och testar olikafö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(kalle). man(lasse). woman(lisa). woman(eva).

RELATIONER skrivs:parent(adam,peter). % adam är förälder till peter

% Avsluta alltid raden med en punkt!

parent(eva,kalle). parent(eva,lisa). parent(lisa,lasse). parent(kalle, knut). Resterande text efter %

är kommentar

Page 10: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 10

Definition av ReglerVarje regel har ett huvud (head) – namet som

definierar relationen.Varje regel har en kropp (body) – självaj g pp ( y) j

definitionen av relationen. Definition av moroch far följer nedan:

”OM M är en kvinna och M är förälder till C så är M mortill 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 logiskt ”och”, både man och parent måste vara sant för att father skall vara sant.

”:-” betyder logisk implikation, ←men då det inte finns å tangentbordet har prolog valt :-

Prolog InterpretatornFakta och regler skrivs i fil som har slutar på .plSläpp filen på prolog ikonen eller ladda in (se manual).

Fråga Prolog om det finns någon kvinna.

| ?- woman(X).

X = lisa ? ;Prolog Prompt: Prolog skriver alltid ut ”? ” Efter prompten ställer;

X = eva ? ;no| ?- ”;” frågar efter fler

lösningar (ger alternativ lösning om det finns).

alltid ut ?- . Efter prompten ställer du din fråga.

Page 11: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 11

Vi vill bara veta om det finns någon kvinna.

| ?- woman(_).yesyes

| ?- child(_).no

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).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 ? ;

no| ?-

W instantieras (binds till) bowmore.

Page 12: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 12

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,A = 12,W = bowmore ? ;

no| ?-

Strukturer3 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!

Page 13: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 13

smak(oban, 10, smak(torv(me), roekig(me), fyllig(me))).

| ?- smak(W, _, S).

S = smak(torv(me), roekig(me), fyllig(me)),W = oban ? ;

nono| ?-

smak(oban, 10, smak(torv(me), roekig(me), fyllig(me))).

| ?- smak(W, _, smak(torv(T), _,_)).

T = me,W = oban ? ;

nono| ?-

Page 14: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 14

Mer REGLERwhisky(bowmore).region(bowmore, islay).aalder(bowmore 12)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% För alla män M och whisky W gäller det

att…% M gillar W.gillar(M, W) :- man(M), whisky(W).

V d ill P t ?

whisky(whisky(bowmorebowmore). region(). region(bowmorebowmore, , islayislay).).aalderaalder((bowmorebowmore, 12). smak(bowmore,12, smak(torv(, 12). smak(bowmore,12, smak(torv(meme), ), roekigroekig((meme), ), fyllig(fyllig(meme)).)).man(man(peterpeter).).gillar(M, W) :gillar(M, W) :-- man(M), whisky(W).man(M), whisky(W).

Vad gillar Peter?| ?- gillar(peter, X).X = bowmore ? ;no| ?- \+ gillar(peter,bowmore).| ? \+ gillar(peter,bowmore).no

Negation, ”det är inte sant”, skrivs ”\+”

Page 15: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 15

Uppgiftman(adam). man(kalle). man(lasse). woman(lisa). woman(eva). woman(mia).parent(adam,lasse). % adam är förälder till lasse parent(eva,kalle). parent(eva,lisa). parent(lisa,lasse).

1) Lägg till fakta om att kalle har en dotter mia. 2) Skriv en regel som definierar relationen kusin

p ( , ) p ( , ) p ( , )parent(kalle,knut).

father(F,C):- man(F), parent(F,C). mother(M,C):- woman(M), parent(M,C).

2) Skriv en regel som definierar relationen kusin, exempelvis tar reda på vem mia är kusin med.

Överkurs: 3a) skriv en regel som definierar mormor. 3b) Använd den för att visa att eva är lasses mormor. Använd gärna relationen mother med två argumen (för att visa ställigheten för ett predikat brukar man skriva mother/2).

Uppgift lösningsidé (finns många lösningar)

kusin(K1, K2):- Test i PrologTest i Prolog( , )parent(P1, K1),parent(P2, K2),syskon(P1,P2).

syskon(S1,S2):-parent(X,S1),parent(X S2)

Test i PrologTest i Prolog??-- kusin(X,Y).kusin(X,Y).X = lasseX = lasseY = knut ;Y = knut ;nono

parent(X,S2),S1 \== S2. % S1 och S2 får inte vara samma person,

% man kan ju inte vara syskon med sig själv ☺

Page 16: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 16

Listor[ ] : en tom lista[1 2 bb ] li t i håll 3[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...).

ListorHuvud på listan, svansen på listan, jämför

CAR och CDR i LISPDessa t å listor är identiska!Dessa två listor är identiska!?- [a,b,c] = [a|[b,c]]. Yes

?- [a,b,c] = [Huvud|Svans].

Ger huvud och svans[ , , ] [ | ]

Huvud=aSvans=[b,c]| ?-

Page 17: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 17

Några enkla predikat: member% Predikatet medlem% X är medlem i listan om den står först i listanmedlem(X, [X|Rest]).

% Annars är X i resten av listan.medlem(X, [F|Rest]) :- medlem(X, Rest).----| ? dl (1 [ bb 1 3])| ?- medlem(1, [abba, 1, 3]).yes

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.

medlemmedlem(X,L) :- L = [X|Rest].medlem(X L) : L = [F|Rest] medlem(X Rest)medlem(X,L) :- L = [F|Rest], medlem(X, Rest).

| ?- medlem(X, [abba, 1, 3]).

X = abba ? ;X = 1 ? ;;X = 3 ? ;

no| ?-

Page 18: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 18

medlem| ?- medlem(1, [A, B]).

A = 1 ? ;B = 1 ? ;

no

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 varano

| ?-andra elementet i listan kan även vara ”1”.

first, second, tail% Det första elementet i listan. fi t(X [X| ])

| ?- first(X, [kalle,lisa,mats]).

X = kalle? ;first(X, [X|_]).

% Det andra elementet i listan.second(X, [ _,X|_ ]).

% Resten av listan

X kalle? ;

no| ?-

| ?- second(X, [kalle,lisa,mats]).

X = lisa? ;

no| ?-% Resten av listan.

tail(R, [ _|R]). | ?- tail(X, [kalle,lisa,mats]).

X = [lisa,mats]? ;

no| ?-

Page 19: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 19

Aritmetik och annatVilkor som är sanna eller falska: <, >, >=,

\ ( d hö h=<, =:=, =\= (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.yes| ?- 2+2 =:= 4.yes| ?- 2+2 =:= 5.nono| ?- 2+2 =\= sin(0), 0 + 0 =:= sin(0).yes

Page 20: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 20

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) ?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>yes| ? - 4 is 4.yes| ? i 2

•För att högertsidan om ”is” ska kunna beräknas får det

inte finnas obundna variabler| ? – X is 2 + M.ERROR

| ? – M = 2, X is 2 + M.X = 4

inte finnas obundna variabler

Page 21: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 21

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% man skulle kunna instantiera V = 1 och Q till 2 om man vill

no| ?- V = 5, Q = 5, V == Q. % nu är båda strikt lika

(båda=5).

yes| ?- 1+2 == 2+1. % strukturen 1+2 är inte strikt lik 2

+ 1+ 1no| ?- 1+2 == 1+2. yes

Unifiering ’=’Två predikat kan unifieras omm

d hde har samma namnde har lika många termertermerna kan unifieras

två termer kan unifieras ommden ena är en variabelbåde är samma konstantbåde är strukturer...

Page 22: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 22

Unifiering ”=” fortsätter

två strukturer kan unifieras ommde har samma konstruktor (namn)de har samma ställighetargumenten kan unifieras

Exampel på unifiering-1| ?- xx(left, 123, X) = xx(A,B,B).A = left,B = 123,X 123 ?X = 123 ? ;

| ?- cbc = X.X = cbc ?

| ?- +(5,5) = 5 + 5yes

Misslyckade exempel:

| ?- X = 5 + 5, X = 10.no

Page 23: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 23

Exampel på unifiering-2| ?- 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)).| p(p(p(p( )))) p(p( ))X = p(p(0)) ? ;no| ?-

Exampel på unifiering-3a

% predikatet lenght1length1(0, [ ]). length1(N, [ F|R]) :- length1(N2, R),

N = N2+1.| ?- length1(X, [a,b,c]).X = 1+(1+(1+0)) ? ;no| ?-

Page 24: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 24

Exampel på unifiering-3b

% predikatet lenght1length1(0, [ ]). length1(N, [ F|R]) :- length1(N2, R),

N is N2+1.| ?- length1(X, [a,b,c]).X = 3;no| ?-

SyntaxPredikat: mamma, mMM, no_1_.

blVariabler: W, W12, _12Konstanter: stefan, sTEFAN, ’Stefan’Strukturer: node(node(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

Page 25: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 25

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 as Failure:NF: Det som Prologprogrammet inte kan härleda i

ändlig tid är falskt.

Negation i Prolog

”Negation by failure” skrivs i prolog ”\+”Negation by failure skrivs i prolog \+

Exempel:

?- X = z, \+ member(X,[a,b,c]).yes?- X = c, \+ member(X,[a,b,c]).no

Page 26: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 26

Hur hittar Prolog alla lösningarDjupet-först sökning med s k backtracking:backtracking: När en lövnod 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]).

Program: medlem(X, [X|_]).medlem(X, [_|T]) :- medlem(X, T).

medlem(X [ b ])← medlem(X, [a, b, c]).

← ← medlem(X, [b, c]).X/a

← ← medlem(X, [c]).X/bX/b

← ← medlem(X, []).X/c

Page 27: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 27

Sökning i prolog

dörr(s,a).dörr(a,b).dö (b )

d e fdörr(b,c).dörr(c,d).dörr(d,e).dörr(e,f).

gå(A,B):-dörr(A,B). %Finns det en dörr mellan A och B så har vi lyckats nå Bgå(A,B):-dörr(A,X), gå(X,B).

%Finns det en dörr mellan A och X och

abcs

%Finns det en dörr mellan A och X och% man kan gå från X till B så har man lyckats nå B

?- gå(s,f).Yes

Sökning, ny dörr e-bdörr(s,a).dörr(a,b).dörr(b,c).dörr(c,d).dörr(d,e).dörr(e,b). %nu kan det loopadörr(e,f).gå(A B):-dörr(A B)

d e fgå(A,B): dörr(A,B).gå(A,C):-dörr(A,X), gå(X,C).?- gå(s,f).Stack overflow

abcs

gå(A,B, _):-dörr(A,B). gå(A,B,V):-dörr(A,X), \+ medlem(X, V), gå(X,B, [X|V]).?- gå(s,f).? gå(s,f).Yes

gå2(A,B,V,P):-dörr(A,B), V = P.gå2(A,B,V,P):-dörr(A,X), \+ medlem(X, V), gå2(X,B, [X|V], P).?- gå2(s,f, [], P).P = [a,b,c,d,e,f]

Page 28: Crash Course in Prolog - MDH Introduction to Artificial Intelligence, Prolog (c) Peter Funk 1 Crash Course in Prolog Peter Funk Slides mostly in Swedish, lecture in English (preliminary

2008-09-18

Introduction to Artificial Intelligence, Prolog(c) Peter Funk 28

Metalogiska predikatProlog innehåller en uppsättning predikat som inte är

strikt predikatlogiska. Man kan även skriva program som ändrar sin egen kod (viktig egenskap inom AI).

? write(”hello world ”) writeln(5)?- write( hello world ), writeln(5).hello world 5

var(X) - misslyckas om X är instansierad. Exempel:

?− X = Y, var(X). yes?- Z = hej var(Z)? Z hej, var(Z).no?− var(sol). no

• integer( X) - om X är bunden till ett heltal.• atomic(X) - om X är bunden till en konstant.

Detta är vad som behövs för att skriva Prolog program.

R t ä tt h tå tt tä kResten är svett och tårar, att tänka deklarativt och att gymnastisera sig ur att tänka imperativ programmering :)

Läs några Prolog tutorials på webben!Läs några Prolog tutorials på webben!

TT

SLUSLU