/* Reasoning about time. Kennissystemen 2007 * 0440949 Andreas van Cranenburgh * 0518808 Joris de Groot */ In plaats van een trace hebben we besloten een beschrijving te geven van de algemene werking van het programma, we zijn van mening dat dit nuttiger is dan een onoverzichtelijke trace. Het programma begint zoals gevraagd met het typen van go. Hierna komt men in het algemene menu waarin een keuze gemaakt kan worden tussen verschillende taken. Ook verschijnt er een venster waarin een schematische tekening van de timeline gemaakt kan worden. De gebruiker kan nu een keuze maken uit de 7 verschillende mogelijkheden, dit zijn alle taken die gevraagd werden plus een keuze om het programma af te sluiten. Hieronder volgt een overzicht van wat er gebeurt bij de verschillende keuzes: 1: Add witness report Hier kan er een nieuw witness report aan de knowledgebase worden toegevoegd. De gebruiker wordt gevraagd alle benodige informatie die in een nieuw witness report in te typen gevolgd door een enter, waarna het nieuwe report dynamisch aan de knowledgebase wordt toegevoegd. Er kan hier bij het toevoegen van een report ook verwezen worden naar een eerder event als de gebruiker het goede ID van dit report intypt. 2: Find conflicting witness reports Bij deze keuze wordt in de knowledgebase gezocht naar conflicten in de data. Dit gebeurt door alle event ids die meer dan eenmaal voorkomen te vergelijken en te controleren of er geen conflicten zijn in een van de variabelen in de events. 3: List witness reports Ook een vrij eenvoudige keuze die simpelweg alle witness report uit data.pl in een lijst op het scherm schrijft. Ook hier gebeurt er weer vrij weinig speciaals. 4: Show all events Een vrij eenvoudig commando wat al het bewijs uit de knowledgebase uit data.pl afdrukt op het scherm. Hier gebeurt verder niet echt iets speciaals. 5: Get witness reports for event Hier wordt een genummerde lijst naar het scherm geschreven van alle events door middel van een simpele findall. Vervolgens kan een gebruiker door het intypen van een nummer alle witness reports krijgen die dit event ondersteunen. 6: Generate possible timeline (Topological sort) Dit is het meest interessante wat dit programma kan, het redeneert over al het bewijs en probeert hier een timeline uit te maken. De aanpak is dat er eerst een gerichte graaf wordt gemaakt van alle events. Dat wil zeggen dat bij elk event een set van andere events wordt gezocht, die volgens de data na of tegelijk met dit event zijn gebeurd. Om deze events te vinden is er een predicaat, dat of direct opeenvolgende events matched, of recursief opzoekt of een serie events er tussen naar ze verwijzen. Als dit gebeurd is volgt een `topologische sortering.' Deze was al in de standaard library beschikbaar, alleen die versie kon niet backtracken over verschillende mogelijkheden. Na wat puzzelen hebben we een kleine aanpassing kunnen maken en alsnog dit predicaat kunnen gebruiken. Hier volgt een voorbeeld: ?- timeline. The events graph: 1-arrestatie-[] 2-grijzemercedes-[arrestatie] 3-honduitlaten-[arrestatie, grijzemercedes, pistoolschot, wegrijden] 4-jolienophalen-[arrestatie, grijzemercedes, honduitlaten, pistoolschot, ruzie, wegrijden] 5-neergeschoten-[wegrijden] 6-oudereman-[honduitlaten] 7-pistoolschot-[arrestatie, grijzemercedes, neergeschoten, ruzie, wegrijden] 8-politiebellen-[] 9-ruzie-[] 10-wegrijden-[arrestatie, grijzemercedes, politiebellen] 11-wegvluchten-[arrestatie, wegrijden] A topological sort yields the following possible timeline: 1-jolienophalen 2-oudereman 2-honduitlaten 3-pistoolschot 3-ruzie 4-neergeschoten 5-wegvluchten 5-wegrijden 6-politiebellen 7-grijzemercedes 8-arrestatie Total number of alternative timelines: 228