Virtual Storyteller overzicht Java Theorem Prover (JTP)

Vergelijkbare documenten
TW2020 Optimalisering

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Verkenning adoptie W3C rdf/owl technologie voor IMxx/NEN modellen

Enterprise Connectivity. Marnix van Bo. TU Delft Elek Software Architect 20 jaar ervarin ontwikkeling

4 ASP.NET MVC. 4.1 Controllers

NHibernate als ORM oplossing

MS-Office documenten integratie via SAP PI

Organiseer uw verschillende SOAP services in één scenario

In deze les. Eerste orde logica. Elementen van EOL. Waarom eerste orde logica? Combinatie met logica. Variabelen en Kwantoren

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011

SYNTRA-WEST. Initiatiecursus JAVA. Deel

Logic for Computer Science

Kleine cursus PHP5. Auteur: Raymond Moesker

Een gelinkte lijst in C#

11 Selecties. Selectie versus snelselectie Planon FacilityOffice SE kent naast selecties ook nog snelselecties. Wat is nu het verschil?

Les 15 : updaten van gegevens in de database (deel2).

Artificiële intelligentie: les van 21 november 2002

INFITT01 Internettechnologie WEEK 2

Sparse columns in SQL server 2008

icafe Project Joeri Verdeyen Stefaan De Spiegeleer Ben Naim Tanfous

Software Design Document

Vakgroep CW KAHO Sint-Lieven

Technical Note. API Beschrijving Aangetekend Mailen

BRP-BZM Use Case Realisations Guidelines

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Technisch Ontwerp W e b s i t e W O S I

HOE TEKEN IK EEN OMGEVINGSMODEL

1 Inleiding in Functioneel Programmeren

Practicumopgave 3: SAT-solver

NP-volledigheid. Algoritmiek

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Aanpassingen versie 6.0

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Variabelen en statements in ActionScript

case: ocl-expressies

Leaflet Web Maps with qgis2leaf

return an ; } private I L i s t l i j s t ;

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

SQL datadefinitietaal

Programmeren in Java 3

Een inleiding in de Unified Modeling Language 67

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Handleiding. MED PLUS software

De API s van Floricode. Platforms on stage SIERTEELT(digi)TAAL 2018

Modeluitwerking Tentamen Computationele Intelligentie Universiteit Leiden Informatica Vrijdag 11 Januari 2013

Technisch Ontwerp. Integratie Tekst-Plot. Versie 1.0. Datum 02 december 2010

Lekker snel XML met SQL (.nl)

Beschrijving JabberPoint met inwerkopdracht (versie 1.6)

SQL Plan Management in Oracle11g Harald van Breederode

Javascript oefenblad 1

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

ManageWare Pro Postbus AN Zeist Tel.: Fax: Documentenbeheer

Automating Complex Workflows using Processing Modeler

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst

Externe pagina s integreren in InSite en OutSite

Etiketten printen met OpenOffice

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at

Project Software Engineering XML parser: Parsen van een xml CD catalogus

Automatische Installatie op IIS server

Een website maken met databasetoegang.

Modelleren en Programmeren

Naam project Lost And Found Animals Lokaal gehost Percentage van het totaal geleverde werk 1 Cindy Jansen 50% 2 Eline Steyvers 50%

Demo applicatie. Functionele Beschrijving SPITS

Artificiële Intelligentie 1. Kennissystemen. 22 oktober 2002

Orbis Software. Debman4U. Release Notes2.10. Dit document bevat de Release Notes van Debman4U V2.10

Mailmerge Auteur : Reint Endendijk Versie : 1.0 Datum : 25 juni 2010

2BA Deeplink Gebruiksbeschrijving

Handleiding Magento - Asperion

IBAN API. Simpel & krachtig. Documentatie : IBAN REST API Versie : 1.0 DE BETAALFABRIEK

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Modelleren en Programmeren

APPLICATION MANAGER. Gebruikershandleiding. Dit document beschrijft hoe Brain Force Application Manager gebruikt kan worden.

Dynamische webapplicaties in Java

Software-Ontwikkeling I Academiejaar

MWW orders feed. Algemene orders feed in XML format

Importeren van grids uit de WADI database

Selenium IDE Webdriver. Introductie

Gebruikers handleiding. Lizard Configuration Manager ToolTip. Installatie. Instellen. Initieel instellen

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

WEBSECURITY INFORMATICA STUDENTENWERKING. Gemaakt door Bryan De Houwer en Yuri Moens

OEFENINGEN PYTHON REEKS 1

CAK Installatiehandleiding

icafe Een digitaal bestelsysteem voor de horeca Joeri Verdeyen Stefaan De Spiegeleer Naim Ben Tanfous

1 Inleiding probleembeschrijving

Implementatie #-operator

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Kennismaken Greenfoot

Handleiding. CRAB Read. Bevragingen op Lite CRAB. Agentschap voor Geografische Informatie Vlaanderen

Samenvoeging document syntax

Les 10 : Aanmaken van een database (deel2).

Programmeren in Java 3

CCHR: De snelste CHR implementatie

Datastructuren: stapels, rijen en binaire bomen

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

FRESNEL FORMS. Een Protégé plugin voor het genereren van datasysteeminterfaces van datamodellen op het Semantic Web ABI TEAM 30

Transcriptie:

Virtual Storyteller overzicht Java Theorem Prover (JTP) JTP is een object-geörienteerd redeneer systeem, geïmplementeerd in Java. In dit document wordt het opzetten van een simpel redeneersysteem in JTP behandeld. De onderdelen van het systeem worden een voor een behandeld. Verder wordt een aantal problemen die voor zouden kunnen komen op een rijtje gezet. Een beknopte javadocbeschrijving bij de klassen kan gevonden worden via de JTP website: http://www.ksl.stanford.edu/software/jtp/api/ De basisklasse voor een redeneersysteem is de Reasoning Context. Elke Reasoning Context in JTP stamt af van de basisklasse jtp.context.basicreasoningcontext. Representatie van kennis Kennis wordt gerepresenteerd in de Conjunctieve Normaal Vorm (Conjunctive Normal Form, CNF). Een stukje kennis in CNF bestaat uit een aantal clausules (Clauses), die allemaal waar zijn. Een clausule wordt intern gerepresenteerd als een verzameling van Literals en de logische operatoren NOT en OR. Kennis wordt geïmplementeerd in KIFzinnen (KIF: Knowledge Interchange Format). De kennis (A => B), (B => C) bestaat dus uit twee clausules, (A => B) en (B => C). De clausule A => B wordt in JTP gerepresenteerd als (NOT(B) OR (A)). A en B zijn beide een Literal. Een Literal bestaat uit een relatie en de argumenten waartussen die relatie geldt. Neem bijvoorbeeld de Literal (ancestor Mary Sue). ancestor is hier de relatie. De argumenten zijn Mary en Sue. Argumenten van een Literal kunnen ook variabelen zijn. Een variabele begint met een vraagteken (? ), met daar op volgend een aantal karakters. Op deze manier kan bijvoorbeeld transitiviteit worden uitgedrukt: (=> ((ancestor?x?y) (ancestor?y?z)) (ancestor?x?z) ) Kennisrepresentatie concreet in Java klassen: CNFSentence is een rijtje conjuncte Clauses, dus impliciet gecombineerd met een AND. Dus de CNFSentence met Clause A, B en C heeft een KIF-representatie (and (A) (B) (C)) Clause is een rijtje disjuncte Literals, dus impliciet gecombineerd met een OR. Dus de Clause met Literals A en B heeft een KIF-representatie (or (A) (B)) Literal is een simpele Clause die bestaat uit een relatie en argumenten waartussen de relatie geldt, in de vorm van Symbols. Bijvoorbeeld (father Jan Piet) definieert de

father relatie tussen Jan en Piet. Een Literal heeft ook een polariteit; is de polariteit van een Literal L false, dan is NOT(L) waar. Symbol is een (symbool-)element, met een package (die ook leeg kan zijn) en een name. owl:inverseof kan gerepresenteerd worden als een Symbol met package owl (of eigenlijk http://www.w3.org/.../owl#) en name inverseof. Variable is een variabele, bijvoorbeeld?loc. Reasoning Context In JTP zijn verschillende omgevingen om te redeneren geimplementeerd. Elk van deze omgevingen biedt de mogelijkheid om kennis op te slaan (telling) en op te vragen (asking). Deze kennis wordt ingegeven d.m.v. KIF-zinnen, en worden door de reasoning context omgezet naar CNF. Intern worden deze CNF-feiten gebruikt om andere feiten af te leiden. Een Reasoning Context bestaat uit Reasoners en Dispatchers. Dispatchers ontvangen een query of een assertion en spelen die door naar een geschikte Reasoner. Telling reasoners verwerken kennis op een forward-chaining manier; ze verwerken consequenties van aangenomen kennis. Asking reasoners op hun beurt, verwerken kennis via backwardchaining; er worden steeds bewijzen gezocht bij queries. De meest simpele Reasoning Context is geimplementeerd in de klasse jtp.context.basicreasoningcontext. Deze context biedt mogelijkheden om assertions en queries te verwerken: - Assertions worden door een jtp.modelim.breadthfirstforwardreasoner reasoner uitbesteed aan een jtp.disp.sequentialdispatcher. - Queries worden door een jtp.context.iterativedeepening reasoner uitbesteed aan een jtp.disp.sequentialdispatcher. Om kennis op te kunnen slaan moet aan een BasicReasoningContext een jtp.gmp.clauseorientationkb worden toegevoegd. De feitelijke opslag van kennis gebeurt in deze klasse in de private-velden pos en neg. Gespecialiseerde contexten Binnen JTP bestaan er 2 uitbreidingen op de door de BasicReasoningContext geleverde basis context: De klassen jtp.frame.fc.context en jtp.frame.listen.context. Beide klassen bieden ondersteuning voor forward-chaining rules door middel van speciale reasoners, maar de manier waarop rules worden ondersteund verschilt in beide klassen. Een overzicht van de reasoners die worden gebruikt door jtp.frame.listen.context: - Telling reasoners: o jtp.frame.linkasserter o jtp.frame.listen.vclistenercreator o jtp.frame.slotvaluetellingreasoner (gekoppeld aan een FrameKB)

- Asking reasoners: o jtp.frame.slotvalueaskingreasoner (gekoppeld aan een FrameKB) De klasse jtp.frame.listen.context vormt de basis voor de klasse jtp.context.rdf.rdfcontext. Een RDFContext voegt de volgende reasoners toe aan de reeds over geërfde reasoners: o Asking reasoners: o jtp.frame.holdsreasoner o jtp.frame.enumeratingreasoner o jtp.func.inequal De klasse jtp.context.owl.owlcontext vormt een verdere specialisatie van de RDFContext. Een OWLContext voegt de volgende reasoners toe: o Telling reasoners: o jtp.frame.listen.dl.intersectiontypereasoner o jtp.classifier.classifiertellingreasoner

RDF/OWL functionaliteit zoals beschreven in http://www.ksl.stanford.edu/software/jtp/doc/owl-reasoning.html wordt door JTP bereikt door de volgende bestanden te laden tijdens het opzetten van een RDF of OWL reasoning context: %JTP%/src/jtp/context/owl/owl-assumptions.kif %JTP%/src/jtp/context/owl/owl-rules.xml %JTP%/src/jtp/context/rdf/rdf-assumptions.kif %JTP%/src/jtp/context/rdf/rdf-rules.xml In de xml-bestanden zijn de zogenaamde forward-chaining regels gedefinieerd, de kifbestanden bevatten KIF-definities van OWL en RDF zoals: (rdfs:domain rdf:type rdfs:resource) (rdfs:range rdf:type rdfs:class) (rdf:type owl:thing owl:class) (owl:complementof owl:thing owl:nothing) Toevoegen van kennis Het toevoegen van kennis aan een reasoning context gebeurt middels het aannemen (assert-en) van feiten. Aangenomen feiten kunnen ervoor zorgen dat er forward-chaining regels worden geactiveerd, daarom zijn er twee manieren om kennis aan te nemen: de ene levert een ReasoningStepIterator als resultaat, de andere een integer. De Iterator kan gebruikt worden om handmatig door de forward-chained informatie te lopen, de integer geeft simpelweg het aantal nieuw geïmpliceerde feiten. Verder kan het feit dat aangenomen dient te worden op 2 manieren worden aangegeven: middels een codering als tekst, of als object-representatie. Dit leidt tot de volgende 4 methodes om een feit aan te nemen: int BasicReasoningContext.tell( Object assertion ) ReasoningStepIterator BasicReasoningContext.getAssertionResults( DirectAssertion assertion ) int BasicReasoningContext.tellString( String assertion, URL url ) ReasoningStepIterator BasicReasoningContext.getStringAssertionResults( String assertion ) Het verschil tussen het meegeven van een Object of String is dat wanneer een Stringrepresentatie wordt meegegeven, deze door de reasoning context eerst zal worden vertaald naar een DirectAssertion-object. Het verschil tussen de get... -methodes en de andere methodes, is het wel of niet doorgeven van de kennis aan de undo-manager. De methodes die een ReasoningStepIterator retourneren slaan het aangenomen feit niet op in de undo-manager. Een consequentie hiervan is dat feiten die via de get -methodes zijn toegevoegd aan de KB op een later tijdstip niet meer op te sommen zijn.

Opvragen van kennis Het opvragen van kennis gaat via het doen van een query aan de kennisbank. De context BasicReasoningContext biedt hiervoor de methode ask( String query ). De query wordt intern vertaald door de FirstOrderLogicTranslator van de context, die weer gebruik maakt van de parser die op dat moment in de context (zie setparser()) is ingesteld. JTP wijzigt soms intern de gebruikte parser (bijvoorbeeld wanneer een KB wordt geladen via loadrdfkb(), die een RDFParser instelt), vandaar dat het aan te raden is om ofwel direct de AskingReasoner van de context aan te roepen: getaskingreasoner().process(translator.translate( query )) Queries die uit een simpele Literal bestaan (bijvoorbeeld (fatherof?x?y)), worden afgehandeld door de model elimination theorem prover, die geimplementeerd is in de klasse jtp.modelim.modeleliminationreasoner. Wanneer een query echter meer complex vormgegeven is, komt deze via de AskingDispatcher terecht bij de jtp.modelim.askingqueryreasoner. Deze reasoner gaat op een bijzonder wijze om met de query: Er wordt een tijdelijke Literal aangemaakt die bestaat uit een hulp-naam $aux, en waarvan de variabelen de verzameling is van ongebonden variabelen uit de oorspronkelijke query. Er wordt een hulpregel toegevoegd aan de kennisbank. Deze hulpregel ziet eruit als: (query => $aux). Vervolgens wordt ($aux) als query aan de kennisbank gegeven. Op deze manier kan toch weer de model elimination theorem prover worden gebruikt. Een voorbeeld: stel, de query is (a?x => b?y). De vrije variabelen in deze query zijn?x en?y. Er wordt dus een hulp-literal aangemaakt: ($aux?x?y). Verder wordt deze regel toegevoegd aan de KB: ((a?x => b?y) => $aux?x?y). Intern wordt nu de query ($aux?x?y) doorgegeven aan de ModelEliminationReasoner. Een bijkomstigheid van het gebruik van de AskingQueryProcessor is dat de hulp-regels die toegevoegd worden aan de KB niet worden verwijderd. Wanneer hier geen rekening mee wordt gehouden, zal een groot aantal complexe queries dus leiden tot een steeds hogen geheugen-gebruik. Het is daarom raadzaam om vóór het stellen van een query een snapshot te maken via de UndoManager (zie hieronder). Antwoord op een query Het resultaat van een query is een ReasoningStepIterator, wat een belangrijke klasse is binnen JTP. Een instantie van de klasse jtp.reasoningstep is in wezen een bewijs van de query. Een ReasoningStep bestaat uit de volgende attributen: goal: de te bewijzen Literal. subgoals: wanneer de query geen literal is, maar een conjunctie van literals, vormt elke literal in de conjunctie een subgoal. subproofs: elke subgoal wordt bewezen in een eigen bewijs.

bindings: de vrije variabelen die in de stap voorkomen plus de waarden waarvoor ze gesubstitueerd zijn bij het vormen van het bewijs. Itereren van de kennisbank De kennis in een JTP reasoning context wordt opgeslagen in private velden in de klasse ClauseOrientationKB, en is dus niet direct opvraagbaar. In plaats daarvan kan kennis worden geïtereerd via de UndoManager klasse. Kennis die is aangenomen via de tell- methoden wordt door de undo-manager bijgehouden, zodat feiten later weer via untell kunnen worden ingetrokken. Deze functionaliteit is geëncapsuleerd in de klasse jtp.undo.snapshotundomanager. Het via deze klasse ophalen van aangenomen kennis gaat als volgt: 1. Via BasicReasoningContext.getUndoManager() wordt de undo-manager opgehaald. 2. Er wordt een snapshot shot gemaakt via SnapshotUndoManager.getSnapshot() 3. Kennis die sinds het maken van de snapshot via tell-methoden is aangenomen kan worden opgevraagd met de methode SnapshotUndoManager.getObjectsToldSinceSnapshot(). Packages De verschillende packages binnen JTP: jtp.cache voor cachen van een Knowledge Store (wordt niet gebruikt in JTP) jtp.classifier voor classificatie algoritmes (OWL) ( x heeft 4 muren en een dak dus x is een gebouw ) jtp.context Reasoning contexts (daml, rdf, owl) jtp.demod Lijkt iets te zijn met het kunnen transformeren van kennis (bv vervangen van literals en variabelen) jtp.disp Dispatchers (besteden queries uit naar reasoners) jtp.fol First order logic: de klassen waar kennis uit bestaat zoals CNFSentences, Clauses, Literals, Variables etc. Bevat ook parsers voor deze kennis (van String naar Java objecten) jtp.frame Alles voor frame-based reasoning -- jtp.frame.vocab Vocabulaire voor RDF, OWL etc. -- jtp.frame.fc Voor forward chaining (rules) -- jtp.frame.listen luistert naar binnenkomende kennis om gevolgen te trekken -- jtp.frame.vc Value collection, voor het zoeken erin en werken ermee jtp.func Functional reasoners -- jtp.func.math Mathematical reasoners jtp.gmp Modus Ponens reasoners jtp.iw InferenceWeb reasoners jtp.modelim Model elimination reasoners jtp.proof Afhandelen van bewijzen: goals, subgoals, en redeneer-regels zoals and-introduction jtp.rs ReasoningSteps

jtp.time jtp.ui jtp.undo jtp.util jtp Time reasoners User interface voor JTP Voor het retracten van knowledge Verschillende hulpklassen Basis-interfaces van veel klassen die in de subpackages uitgeweid worden JTP Gebruiken Bij het schrijven van een java-applicatie die gebruik maakt van JTP dienen de volgende files worden meegenomen in de classpath-parameter van java en javac: Antlr.jar Base64.jar http.jar icu4j.jar iiop.jar jade.jar jadetools.jar jakarta-oro-2.0.5.jar jdom.jar jena.jar jtp.jar log4j.jar xercesimpl.jar xmlparserapis.jar