Blok juridische informatietechnologie

Keuzeblok 4.3

2001/2002

Computeropdracht Prolog

Algemene informatie
Leerstof
Vindplaatsen
Computeropdrachten
- Prolog
Rooster
Toetsvorm


De derde computeropdracht is een kennismaking met de logische programmeertaal Prolog, een taal die speciaal geschikt is voor het bouwen van kennissystemen.

Voor je deze opdracht gaat maken moet je hoofdstuk 1 van het volgende boek (p. 3-27; paragraaf 1.3 over recursieve regels mag je overslaan) bestudeerd hebben (dus vóór de bijeenkomst van dinsdag 19 maart):

Bratko, I. (1990). Prolog. Programming for artificial intelligence. Second edition. Harlow: Addison-Wesley.

Karakteristiek voor Prologprogramma's is dat ze niet gewoon uitgevoerd worden (zoals 'normale' programma's in een procedurele taal) maar dat ze gebruikt worden om vragen te beantwoorden. Het programma bevat als het ware de kennis op grond waarvan de vragen worden beantwoord. Een Prologsessie gaat daarom als volgt:

- Je start een Prologimplementatie. De Prologversie die wij gebruiken is Amzi! Prolog, om precies te zijn: Amzi! Prolog + Logic Server voor Windows, versie 5.0.31. Zie www.amzi.com. De implementatie is daar gratis op te halen (http://www.amzi.com/download/freedist.htm). In het voor ons gereserveerde deel van de computerruimte is Prolog te starten via Start - Programs - Amzi! 5.0 - Amzi! IDE.

- In de Prologimplementatie maak of open je een Prologprogramma. Dit is niets anders dan een tekstbestand geschreven in de Prologtaal. Hoe die taal er uit ziet kun je lezen in de tekst van Bratko. In Amzi! Prolog gaan het maken en openen van een Prologprogramma via de menu's File - New File en File - Open File. (We maken geen gebruik van de projecten van Amzi! Prolog.)

- Je opent een zogenaamde listener. Dit doe je via het menu Listener - Start. In een listener vindt de interactie met een Prologprogramma plaats.

- Het programma wordt in het geheugen 'geladen'. Dit heet bij Prolog consulteren. Dit doe je via het menu Listener - Consult. (NB Als je een programma verandert moet je het opnieuw consulteren via het menu Listener - Reconsult. Als je gewoon consulteert, wordt de nieuwe versie van het programma toegevoegd aan het geheugen en blijft de oude versie van het programma ook gewoon in het geheugen zitten. Dit is een bron van onverwacht gedrag.)

- Hierna ga je vragen stellen. Dit doe je door in de listener achter de tekens

    ?- 
een query te tikken (vergeet niet met een punt te eindigen!), bijvoorbeeld
    ?- moord(geval1).
en vervolgens op Enter te drukken. Voor de vorm van queries: zie Bratko.

- Het systeem geeft nu een antwoord, bijvoorbeeld yes, no of X = marie. De basisbeginselen van de manier waarop Prolog vragen beantwoordt kun je in de tekst van Bratko lezen. Als er meer dan één antwoord is (bijvoorbeeld X = marie, X = jan, ...) krijg je die door na elk antwoord op de spatiebalk te drukken. Als je geen extra antwoorden meer wilt (soms zijn er oneindig veel), druk je op Enter.

De opdracht bestaat er uit om de kennis die jullie ook bij het webkennissysteem hebben gebruikt, in de taal van Prolog om te zetten. Het programma moet dus de basiskennis over schadevergoedingsplicht op grond van onrechtmatige daad representeren. Ook de vier testcasus moeten gerepresenteerd worden. Tot slot moeten jullie laten zien dat Prolog de hoofdvraag (namelijk of er sprake is van schadevergoedingsplicht) bij de testcasus goed beantwoordt.

Het kennisbestand moet opgebouwd zijn zoals het volgende eenvoudige voorbeeld over de kwalificatie moord:

% DOEL VAN HET KENNISBESTAND   
% 
% Op grond van per casus gespecificeerde feiten kan  
% worden bepaald of het feit in de casus kwalificeerbaar  
% is als moord in de zin van art. 289 Sr.
% 
% BETEKENIS VAN DE PREDICATEN
% 
% moord(Casus)
%   Het feit in de casus Casus is kwalificeerbaar 
%   als moord in de zin van art. 289 Sr 
%    
% een_ander_van_het_leven_beroofd(Casus)
%   De vermeende dader in de casus Casus heeft  
%   *een ander van het leven beroofd*
%    
% opzet(Casus)
%   De vermeende dader in de casus Casus heeft een  
%   ander *opzettelijk* van het leven beroofd
%    
% met_voorbedachten_rade(Casus)
%   De vermeende dader in de casus Casus heeft een  
%   ander *met voorbedachten rade* van het leven beroofd
%    
% FUNCTIE VAN DE PREDICATEN
%    
% Predicaat voor het consulteren van het kennisbestand:
%   moord(Casus)
% Predicaten voor het specificeren van de casus:
%   een_ander_van_het_leven_beroofd(Casus)  
%   opzet(Casus)
%   met_voorbedachten_rade(Casus)

% KENNIS

moord(Casus):-
  een_ander_van_het_leven_beroofd(Casus),
  opzet(Casus),
  met_voorbedachten_rade(Casus).

% VOORBEELDCASUS

een_ander_van_het_leven_beroofd(geval1).
opzet(geval1).
met_voorbedachten_rade(geval1).

een_ander_van_het_leven_beroofd(geval2).
met_voorbedachten_rade(geval2).

een_ander_van_het_leven_beroofd(geval3).
opzet(geval3).

Dit Prologprogramma bestaat uit 3 delen:

- Deel 1 bevat de documentatie bij het kennisbestand. Het beschrijft het doel van het kennisbestand, de betekenis van de predicaten en de functie van de predicaten. (NB De documentatie bestaat uit regels die beginnen met het teken %. Zo wordt het als commentaar behandeld en dus genegeerd bij het consulteren van het programma.)
- Deel 2 is de eigenlijke kennis. In het voorbeeld bestaat die kennis uit één eenvoudige regel.
- Deel 3 bevat enkele voorbeeldcasus. Alleen in geval 1 is aan de drie voorwaarden voor de kwalificatie moord voldaan. De volgende Prologsessie laat zien dat op grond van het kennisbestand inderdaad alleen in geval 1 de kwalificatie moord volgt:

Amzi! Prolog  Listener
Amzi Prolog Listener 5.0.18h Windows
Aug 21 2000 20:19:21
Copyright (c) 1987-2000 Amzi! inc.  

?- consult('C:\\Windows\\Desktop\\moord.pro')
yes
?- moord(geval1).

yes
?- moord(geval2).
no
?- moord(geval3).
no
?- 

Jullie moeten twee bestanden inleveren. Het ene is het kennisbestand over schadevergoedingsplicht op grond van onrechtmatige daad, opgebouwd zoals het moordvoorbeeld. (Vergeet de documentatie dus niet.) De 4 testcasus die jullie ook bij het webkennissysteem hebben gebruikt, moeten in het kennisbestand gerepresenteerd worden. Het tweede bestand dat jullie moeten inleveren is een voorbeeldsessie waaruit blijkt dat het programma de voorbeeldcasus goed oplost (zoals het bovenstaande voorbeeld voor moord).

NB Als Prolog het gewenste antwoord (yes of no) geeft, betekent dat nog niet dat het antwoord op de goede manier gevonden is. Een fout kennisbestand kan 'per ongeluk' toch de goede antwoorden geven. Verstandig testen van het kennisbestand (door bijvoorbeeld niet alleen te testen op de centrale rechtsvraag maar ook op de relevante deelvragen) is dan ook belangrijk. Het misstaat niet als je die tests ook in je ingeleverde voorbeeldsessie laat zien.

Succes!