Logisch Programmeren/Prolog

Vergelijkbare documenten
Logica voor Informatica

Modelleren en Programmeren: Prolog

Logisch Programmeren/Prolog

Logica voor Informatica. Logica Toepassingen. PROLOG: Logische Programmeertaal. Mehdi Dastani

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Logic for Computer Science

Modelleren en Programmeren: Prolog

Modelleren en Programmeren: Prolog

Opmerking. TI1300 Redeneren en Logica. Met voorbeelden kun je niks bewijzen. Directe en indirecte bewijzen

Modelleren en Programmeren

(b) Formuleer het verband tussen f en U(P, f), en tussen f en L(P, f). Bewijs de eerste. (c) Geef de definitie van Riemann integreerbaarheid van f.

Logica voor Informatica

Logica voor Informatica. predikatenlogica. Syntax van predikatenlogica. Mehdi Dastani Intelligent Systems Utrecht University

Logica voor Informatica. predikatenlogica. Syntax van predikatenlogica. Mehdi Dastani Intelligent Systems Utrecht University

Natuurlijke-taalverwerking 1. Daniël de Kok

Geavanceerde Programmeertechnologie. Prof. dr. Kris Luyten Jo Vermeulen

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

TW2020 Optimalisering

Ringen en Galoistheorie, 1e deel, 19 april 2012

Non satis scire WP 4 Pilot opzet peer feedback. Aanleiding

Arduino Cursus, Deel 2 Programmeren. Simon Pauw, ZB45, Amsterdam

Wanneer zijn veelvouden van proniks proniks?

Caleidoscoop: Logica

Algoritmiek. 8 uur college, zelfwerkzaamheid. Doel. Hoe te realiseren

Examen Datastructuren en Algoritmen II

Modulewijzer InfPbs00DT

2. Syntaxis en semantiek

Overzicht. Tekstmanipulatie. Doel van de cursus. Doel van de cursus. Tekstmanipulatie: tekst automatisch bewerken en onderzoeken. Waarom Linux?

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Syntax- (compile), runtime- en logische fouten Binaire operatoren

De keuzestructuur. Versie DD

1. (a) Formuleer het Cauchy criterium voor de convergentie van een reeks

Betekenis 2: lambda-abstractie

Programmeren in Access met VBA

Small Basic Programmeren Text Console 2

Optimalisering en Complexiteit, College 1. Han Hoogeveen, Utrecht University

Combinatoriek groep 2

Programmeren in Access 2016 met VBA

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Divide & Conquer: Verdeel en Heers vervolg. Algoritmiek

Combinatoriek groep 1

AXIOMATIEK VAN GETALLEN, vergezichten vanuit mijn ivoren toren

Combinatoriek groep 1 & 2: Recursie

Mededelingen. TI1300: Redeneren en Logica. Waarheidstafels. Waarheidsfunctionele Connectieven

opgaven formele structuren deterministische eindige automaten

Basis Actuariaat I. Tentamen 1 Juli schrijf je antwoorden op het bijgeleverde tentamenpapier;

VERZAMELINGEN EN AFBEELDINGEN

College 4: Gegeneraliseerde Kwantoren

PSD. Reeksen van logische procedures om problemen op te lossen in een eindig aantal stappen.

Hoorcollege 1 datavisualisatie

Vijfde college complexiteit. 21 februari Selectie Toernooimethode Adversary argument

Modeluitwerking Tentamen Computationele Intelligentie Universiteit Leiden Informatica Vrijdag 11 Januari 2013

Morley s vijf-cirkelsstelling

1 Delers 1. 3 Grootste gemene deler en kleinste gemene veelvoud 12

Kortste Paden. Algoritmiek

Semantiek 1 college 10. Jan Koster

Vandaag. Uur 1: Differentiaalvergelijkingen Uur 2: Modellen

Col egejaar ITV Hogeschool voor Tolken en Vertalen September Col egedagen HC1 HC1 HC1 HC1+C1 HC1+C1 HC1+C1 HC1+C1 HC1+C1

Gaap, ja, nog een keer. In één variabele hebben we deze formule nu al een paar keer gezien:

Logica voor Informatica. Propositielogica. Bewijssystemen voor propositielogica. Mehdi Dastani

Rekenen aan wortels Werkblad =

Collegejaar ITV Hogeschool voor Tolken en Vertalen September Collegedagen HC1 HC1 HC1 HC1+C1 HC1+C1 HC1+C1 HC1+C1 HC1+C1

Automaten. Informatica, UvA. Yde Venema

Collegejaar ITV Hogeschool voor Tolken en Vertalen September Collegedagen HC1 HC1 HC1 HC1+C1 HC1+C1 HC1+C1 HC1+C1 HC1+C1

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Lineaire dv van orde 2 met constante coefficienten

III.2 De ordening op R en ongelijkheden

Elke groep van 3 leerlingen heeft een 9 setje speelkaarten nodig: 2 t/m 10, bijvoorbeeld alle schoppen, of alle harten kaarten.

STUDIEWIJZER WEB PENTESTING BACHELOR IN DE TOEGEPASTE INFORM ATICA SEMESTER 2 ACADEMIEJAAR LECTOR PARCIFAL AERTSSEN

Gödels theorem An Incomplete Guide to Its Use and Abuse, Hoofdstuk 3

Afdeling Wiskunde. Onderwijs. Onderzoek

Javascript oefenblad 1

oefening JavaScript - antwoorden

FLIPIT 5. (a i,j + a j,i )d i d j = d j + 0 = e d. i<j

Logisch en Functioneel Programmeren voor Wiskunde D

Tentamen WISN101 Wiskundige Technieken 1 Ma 7 nov :30 16:30

Relationele Databases 2002/2003

3. Structuren in de taal

Uitwerking tentamen Analyse van Algoritmen, 29 januari

2009/2010. Rooster Medische Informatiekunde. Derde Jaar. Deel 1: module 13, 14, 15

DE EINSTEINCODE Luc Gheysens

Wiskundige functies. x is het argument of de (onafhankelijke) variabele

Taaltechnologie. Januari/februari Inhoud

Discrete Wiskunde, College 5. Han Hoogeveen, Utrecht University

Trampoline Draak 1a. Stap 1 de voorbereiding. fantasie, de dragon. Kies ook een nieuwe achtergrond uit de folder buiten, atom playground

Matlab-Introductie (les 1)

Transcriptie:

Logisch Programmeren/Prolog 2007-8 Jori Mur Rijksuniversiteit Groningen j.mur@rug.nl

1 Overzicht Huishoudelijk Logisch programmeren Prolog als kennisbank Prolog syntax Matching Zoeken Praktisch: laden/listen/tracen

2 Logisch Programmeren/Prolog (5 ECTS) Docenten: Jori Mur (HC), Mendel van t Riet (Pract). Wanneer/waar: 2e helft 1e semester. Hoorcollege ma 9-11 H13.309. Practicum do 13-17, Unixzaal letteren (Hagen-account nodig). Boek: Learn Prolog Now! Blackburn, Bos & Striegnitz. Eisen: 5x/6 huiswerk inleveren, eindopdracht, tentamen. Homepage: www.let.rug.nl/ mur/prolog0708

3 Prolog Prolog werd ontwikkeld begin jaren 70 in Marseille. De syntaxis en semantiek van Prolog is sterk gebaseerd op de predikatenlogica. P if Q and R Om P op te lossen, los Q en R op. Procedureel/imperatief: programma is lijst instructies. Uitvoeren is het volgen van de instructies, één voor één. Declaratief: programma is een beschrijving van een stand van zaken. In Prolog is het uitvoeren van een programma het proberen af te leiden van feiten uit deze beschrijving.

4 Kennisbank Simpel Prolog-programma bevat alleen eenvoudige feiten: taal(nederlands). taal(duits). Deze kennisbank laat zich bevragen in een interactive Prolog-sessie, m.b.v. queries. De query?- p. betekent: kan je bewijzen dat p het geval is??- taal(nederlands). yes

5?- taal(engels). no Dus: we kunnen uit de huidige kennisbank bewijzen dat Nederlands een taal is, maar niet dat Engels een taal is.

6 Kennisbank II Een regel p :- q zegt: p is het geval als ik q kan bewijzen. taal(nederlands):- germaanse_taal(nederlands). taal(duits):- germaanse_taal(duits). germaanse_taal(nederlands) :- west_germaanse_taal(nederlands). germaanse_taal(duits) :- west_germaanse_taal(duits). west_germaanse_taal(nederlands). west_germaanse_taal(duits).

7 Variabelen We kunnen een argument in een Prolog term vullen met een variabele. Bijv. in een query:?- taal(x). X = nederlands? Prolog geeft nu niet alleen aan of het afgeleid kan worden, maar ook wat de instantiaties van evt. variabelen zijn.

8 Variabelen II Bovendien kan je Prolog naar meer antwoorden laten zoeken. D.w.z. je vraagt: is er nog een manier om dit te bewijzen??- taal(x). X = nederlands? ; X = duits yes

9 Variabelen III In regels/feiten kan je natuurlijk ook variabelen hebben, die daarmee opgaan voor alles wat je maar voor die variabele in kan vullen. taal(x):- germaanse_taal(x). germaanse_taal(y) :- west_germaanse_taal(y). west_germaanse_taal(nederlands). west_germaanse_taal(duits).

10 Nog een voorbeeld Zowel queries als de rechterkant van regels kunnen uit meer dan een term bestaan. Prolog moet ze dan allemaal bewijzen: levende_taal(x) :- taal(x), heeft_sprekers(x). taal(latijn). taal(nederlands). heeft_sprekers(nederlands).

11 Volgorde... Zolang we kijken naar Prolog als Logisch Programmeren, maakt volgorde van clauses in de kennisbank, of van goals in een clause niet uit. Immers: clauses zijn manieren om iets te bewijzen/dingen die we kunnen bewijzen. Als we A kunnen bewijzen en B, dan kunnen we ook B en A bewijzen. Net zo: een lijst goals moeten allemaal bewezen worden. Bewijs A,B betekent dus bewijs A B. Dat is hetzelfde als B A

12 Prolog Syntax en meer atom: begint met een kleine letter en is een aaneengesloten reeks letters, cijfers en. Of staat tussen.... Of is een reeks speciale characters zoals + :- etc. complexe term: van de vorm functor(argument 1... argument n ), waarbij functor een atom is, en de argumenten zijn terms. term: een atom, een getal, een variabele of een complexe term. variabele: begint met een hoofdletter of een. De scope van een variabele is de clause: twee variabelen in dezelfde clause met dezelfde naam zijn dezelfde variabele, m.u.v..

13 clause: een term met als functor :-/2. Het eerste argument noemen we de head het tweede argument goal(s). De goals zijn de heads van andere clauses. Heads/Goals mogen geen clauses zijn. programma: een verzameling clauses.

14 Meer Prolog syntax Er zijn 3 verschillende clauses, die we allemaal al gezien hebben: feiten: clauses met head en zonder goal (om de head te bewijzen hoeven we niets meer te doen). regels: clauses met head en goal (om head te bewijzen moeten we goal bewijzen). en eigenlijk ook: queries: clauses zonder head, maar met goal (we moeten hoedanook de goals bewijzen).

15 Matching 1. als term1 en term2 constanten zijn matchen ze als en alleen als het dezelfde constanten zijn. 2. als een van de twee een variabele is, matchen de termen altijd. De variabele krijgt de waarde van de andere term. 3. complexe termen term1 en term2 matchen als en alleen als: (a) ze dezelfde functor en hetzelfde aantal argumenten hebben (b) het n-de argument uit term1 matched met het n-de uit term2. 4. anders is er geen sprake van matching.

16 Matching voorbeelden?- bla = blo.?- bla(blo) = X.?- bla(blo,x) = bla(x,y).?- X = Y.?- bla(x) = X.

17 Zoekbomen Prolog gebruikt matching om te iets proberen te bewijzen. Het executiemodel is grofweg als volgt:

18 Als we niks (meer) te bewijzen hebben, zeg yes. Als we p1..pn te bewijzen hebben, probeer dan p1 te matchen met het head van een clause in de kennisbank. Lukt? Pak de eerste clause waarbij dat lukt en vervang p1 door de goals. Begin bovenaan. Lukt niet? Ga naar het laatste punt waar je een goal met een head gematched hebt en waar er andere match-mogelijkheden waren. Lukt? Pak de eerste van deze mogelijkheden. Vervang het oude goal door de nieuwe. Begin bovenaan. Lukt niet? Zeg no.

19 Zoekbomen, voorbeeld levende_taal(x) :- taal(x), heeft_sprekers(x). taal(latijn). taal(nederlands). heeft_sprekers(nederlands).

20 Volgorde... Vanwege het executiemodel: depth-first, links-naar-rechts/boven-naar-onder maakt de volgorde wel uit. De oplossing wordt bijvoorbeeld eerder gevonden als je de goals in levende taal/1 omdraait: levende_taal(x) :- heeft_sprekers(x), taal(x). taal(latijn). taal(nederlands). heeft_sprekers(nederlands).

21 Praktisch In de directory programma.pl: sicstus laden: [programma]. listing: listing. paniekknop: Ctrl-C platte zoekboom : trace. notrace. halt.