Change log. v0.1 24th August 2006. Initial alpha release. Initial version. Grounded and Preferred Credulous semantics implemented. Logging for Argument generation and Reasoning implemented AIFXML and simple Graphviz proof writers implemented v0.2 4th September 2006. Unification improvements, Bug fixes and refactoring. JAS16 Bug: Selecting Grounded Semantics in the engine executes Preferred Credulous semantics and vice versa. JAS18 Feature: Add ElementList.containsModuloVariables(Constant) method (for Decision) JAS19 Feature: Add Engine.Query(Constant) method (for Decision) JAS2 Bug: Move namedRules into knowledgeBase. Big refactor, but necessary because at the moment two different KnowledgeBases's rules can interfere with eachother in the proof JAS3 Bug: Auto rule name conflicts possible - not anymore. A conflict is resolved if possible and if not, an exception is thrown. JAS2 and JAS3 combined nicely. JAS13 Bug: Raise warning or error if the same rule or fact being added twice - throws runtime exception JAS4 Bug: Variable name conflicts possible This was a big fix, with two parts. See the TestKnowledge.testVariableUniqueName. A new uniqueName field was added to Variable and then the unification methods were changed to add the unique name to the substitution (not the public name). A new abstract getVariables method was added to Element and implemented and then used (in Term.consolidateVariables()) to ensure that variables with the same name in the same fact or rule had the same uniqueName. Substitution was heavily refactored to prevent the same variable uniqueName be substituted for more than one element, and use an attempt to do this to indicate failed unification (inconsistancy). (later) change unique names to be X_1, X_2 etc instead of _1 so that it's easier for a human to inspect the connection between the variable name they entered in and it's internal name. (later) change "uniqueName" to be "internalName" - because it's not necessarily unique (two different variable objects can have the same internalName - but they should be in the same Term). JAS1 Bug: Move ruleTag method from Element to Constant. Only a Constant and a Term can have a ruleTag. JAS12 Refactor: Change Argument.Status to IN and OUT, restrict Argument.status to these values (or null) and delete Reasoner based status enums. JAS18 Bug: Proof writers: undercuts should point at inference scheme application nodes, not rule. Also changed rule text content not to show dob (it's shown elsewhere) and fixed a problem where only rulenames were being shown in the AIFXML writer. v0.2.1 5th September 2006. Minor release for Henrik. JAS22 Refactor: Provide a default constructor on Rule. Took the opportunity to take out the four local variables that confused things and added default constructor to Constant. v0.3 28th September 2006. Arithmetic operators and ungrounded queries. JAS5 Feature: Arithmetic operators required "is", "nonvar", "+", "-", "*" and "/", ">", "<", ">=", "=<", "=:=", "=/=" implemented. JAS7 Feature: Allow ungrounded queries Needed for Arithmetic operators, fell out on a fix to Substitution as part of JAS5. JAS8 Feature: Allow ExpressionList Queries JAS11 Bug: Change the nomenclature in Argument class to be closer to theoretical background JAS19 Bug: More documentation for Rule.argumentIterator and Constant.argumentIterator. JAS23 Refactor: Finish what was started in JAS22 - replace all public fields with getters and setters and provide default constructors were possible. JAS31 Bug: change IN/OUT to DEFEATED/UNDEFEATED JAS30 Bug: comments break the parser silently (so in EngineTester you are apparently taken into an infinite loop). JAS35 Refactor: update Substitution interface with more specific method names and signatures. Currently it rather vaguely inherits from List. JAS36 Bug: cannot query empty knowledge base. If you try to run a query with an empty kb in the Engine Tester then an error is raised. JAS27 Feature: user documentation. v0.3.1 6th October 2006. Minor release for Decision Engine 0.1 (which needed JAS39) JAS39 Bug: Argument.subArgIterator only returning shallow sub arguments. Fixed with test: TestReasoner.testSubArgIterator(). JAS40 Feature: Add SimpleGraphvizWriter that shows main arguments and their interactions. JAS17 Feature: Add .clone to engine for decision engine (new tests: TestEngine.testEngineClone and TestKnowledgeBase.testKnowledgeBaseClone) v0.4 25th October 2006. Feature complete with new Jung graphing capabilities. JAS41 Bug: Graphviz writers failed to write any claims with >= or =< in them. JAS28 Feature: Allow ungrounded rule names. Implemented with a different notation: [name] con <- ant belief. Previously "[name]" was "name:". NOT BACKWARDS COMPATIBLE Example provided in etc/treatment.arg. Some (3 or 4) unit tests changed to adopt new notation. New syntax test added to PrologSyntax test. Possible that a rule writer still has old syntax somewhere. New acceptance test added (pollockredlight). JAS43 Feature: Add native java graphing support Implemented with JUNG. Highly experimental. Consists of three different ReasonerWriters (SimpleJungGraphWriter, JungGraphWriter and TreeJungGraphWriter) that are shown in teh new EngineTester's Graph1, Graph2 and Graph3 tabs. JAS6 Feature: Rebutting/Transposition/Valuation options need implementing JAS32 Refactor: Lock down public classes and methods that could be package protected. v0.4.1 15th November 2006 - maintenance release JAS58 Bug: Since adding ungrounded rule names, unbound term matching has stopped working. (e.g. the query outcome(X,Y) returns no matches yet the query outcome(patient1, X) returns 5 matches). JAS44 Bug: Parsing errors are not being properly caught and presented in the Editor. e.g. If I enter the same rule name in twice or use an old rulename. JAS54 Bug: JungGraphWriters - fix the size of the vertices with a fixed width font. JAS57 Bug: Missing Validation - it should be checked that rule names only include variables from the named rule. If a rule name includes novel variables then an error should be raised on adding it to the knowledge base. JAS59 Feature: implement KnowledgeBase.getAllPredicates() and getPredicateArities(String). JAS60 Feature: Allow hibernate to persist knowledge base. v0.4.2 8th December 2006 - maintenance release JAS65 Bug: KnowledgeBase.getPredicates() shouldnt show built-in predicates. JAS66 Bug: PrologSyntaxWriter not showing correct syntax (since 0.4 release). v0.4.3 20th December 2006 - maintenance release JAS37 Bug: An error should be thrown if a Rule's name matches it's consequent. If this were to happen, then you'd get infinite recursion during reasoning. Runtime error is thrown in KnowledgeBase.addRule if this is the case. JAS66 Feature: Add in IsolateTermOrBuiltIn production rule to the parser so that a Knowledge Editor can parse individual terms. JAS68 Bug: The fact "a(b)" can be used to build an atomic argument for "a". This is wrong. v0.4.4 9th February 2006 - maintenance release. JAS25 Bug: Nice if the logging info didnt show the time, date and location of logging statement - this is only relevant to developers (i.e. DEBUG level debugging). Implemented in CLI. JAS56 Bug: When a query consists of more than one term, only the status of the argument for the last term is set. E.g. a knowledgebase of three facts (a.b.c.) and query ("a,b,c.") yields the the three arguments but only c. is marked as undefeated. JAS69 Bug: If a degree of belief is set using Rule.setDob then it shows up in Rule.getPredicates(). JAS71 Bug: It should not be possible for strict Arguments to be attacked - either by rebut or undercut. Currently they can. JAS72 Feature: Add in a GML writer, for use with the yEd graph editor from http://www.yworks.com. JAS73 Bug: Increase the default logging levels so that logging messages arent generated by default. JAS76 Feature: Allow strings with spaces to be added as constants. Implemented with single quotes as delimiter. To escape a single quote, use ''. Certain punctuation characters dont work, e.g * & ^ % ( ), but spaces . , : ; are all ok. JAS77 Bug: Inspection of binary operator expressions should not return infix notation expressions, as these havent yet been implemented. v0.4.5 5th March 2007 - minor release for improved demos. JAS78 Bug: increase font size in EngineTest graphs. JAS79 Bug: Show rules over multiple lines in EngineTest graphs. v0.4.6 23rd March 2007 - quick release for Zeus and Martin JAS55 Bug: JungGraphWriters - Intermittent error drawing the jung graphs - vertices sometimes 'lost' JAS80 Refactor: expose the isUnifiable, unify and apply methods - they have been needed for the argument scheme repository and the aif editor JAS81 Bug: People dislike the springy graphs. Change them so that they are less springy. Now defaults to FRLayout but you can use whatever layout you like by setting the layout as is shown in the EngineTester. JAS82 Bug: The proof for the query "change(5, 10)" in zeus.arg yields some nasty arithmetic, e.g. "product(400, 1.1, 440.0000000006)". JAS83 Bug: The rules in the graphs, although now better looking as they are broken over several lines, are invalid because they are missing commas. v0.4.7 18th May 2007 - bug fixes, some new predicates, compatibility with java 6. JAS85 Bug: Passing in KnowledgeBase to engine - Engine should inherit KnowledgeBases' properties. JAS86 Bug: Logging in EngineTester isnt working. i.e. when you switch logging on in the options, you dont see any logging. JAS87 Feature: Add in negation as failure "\+" built in. JAS89 Feature: Add in ability to load knowledge from file in the command line - fp switch allows loading from filepath. JAS93 Feature: Add in "equals" and "not equals" operators. Change name of existing arithmetic equals/not equals operator classes to ArithmeticEqualTo etc. JAS94 Bug: The standard built in arithmetic "not equals" predicate has the wrong functor. it is "=/=". it should be "=\=". JAS95 Refactor: Some tests were updated - some previously strict facts/rules were made defeasible and a stylesheet was added to make it easier to look at them. JAS96 Bug: Graphs dont work in Java 6. Need to upgrade to Jung 1.7.6. JAS97 Feature: Update graphs so that if a rule has a caption then the caption is shown instead of the logical structure. NB this is untested. v0.4.8 19th June 2007 - very small release for Zeus demo. JAS98 Feature: Allow Queries to be serialized using java.io.Serializable interface. v0.4.9 3rd August 2007 - release for dialogue 0.1 JAS99 Refactor: Rule.inspect() now adds a "." to the end of the rule (previously this was done by the knowledgeBase writer), but if you are passing rules around then this doesnt make sense. JAS101 Feature: Add in second caption expression to rules, so that the claim of a fired rule can have a caption JAS103 Change: functors with spaces are wrapped in single quotes on creation now, not on inspection. JAS104 Feature: Allows variables to expressed as "_" or "_123" in the knowledge syntax. JAS105 Feature: test for JAS97 (org.aspic.inference.writers.TestGraphs) v0.4.10 12th September 2007 - release for dialogue 0.2 JAS106 Feature: Add a writer that shows an argument + it's backing. Used in dialogue and Carrel repository. org.aspic.dialogue.writers.EditableContentWriter.java. JAS109 Feature: Adapt knowledge syntax so that captions and claimCaptions can be associated with a fact/rule. Done using $ delimited strings. See tweety.arg for an example. v0.5 - Result.proof added with appropriate change in TestEditor and bug-fixes. Known Issues JAS10 Feature: Engine.addKnowledge(String) method and knowledgeBaseChange events and listeners JAS14 Feature: Capture order that rules are entered so that they can be shown back to the user in the same order JAS15 Feature: Implement Argument caching as is shown in Ruby version (per query, not per knowledgebase) JAS20 Refactor?: remove .inspect? (to toString()). JAS21 Feature: change the RawKnowledgeWriter to show variable internal names, not public names. JAS24 Add in more standard prolog operators and any new ones needed for an argumentation engine, e.g. float, integer, number, compound, atomic, sqrt, etc etc etc. JAS26 Feature: technical documentation. JAS29 Feature: Add occurscheck. JAS33 Feature: Allow infix notation in parser. JAS34 Refactor: optimise some of the collections by using implementations other than ArrayList and HashMap. Also consider using a ListIterator in place of an iterator in some places. JAS38 Bug?: Cannot run query "is(T, 4), is(X, +(T, 3)).". This approach works for other operators (e.g. <), why not this one?. Work around is to use the sum predicate that is shown in zeus example (and the user documentation). JAS42 Bug?: Ignore empty queries? At the moment the engine returns a parser error. JAS45 Bug?: Adding a comment to the end of the last line without a new line breaks lexer. JAS46 Feature: Make Engine conform to API 1: Query Arguments conform to Argument/SchemApplication design JAS47 Feature: Make Engine conform to API 2: Implement EngineModule JAS48 Feature: Make Engine conform to API 3: Implement cancellable query interface JAS49 Bug: JungGraphWriters - No s-nodes drawn JAS50 Bug: EngineTester - Zoom starts off too close for all graphs JAS51 Feature: JungGraphWriters - need to generate images easily for export JAS52 Feature: Change Query/Proof relationship so that each result has it's own proof. JAS53 Feature: (Follow on from JAS52) EngineTester Graph2 - Split big diagram into smaller diagrams (i.e. one per query.result) JAS61 Refactor: simplify the argumentIterator methods - do they really need owner, level and d_top parameters? JAS62 Feature: Add syntax highlighting to TestEditor. JAS63 Feature: Add automatic syntax checking to TestEditor. JAS64 Refactor: Take out number field in ConstantNumber by re-typing Constant.functor to be Object. Also ensure that longs are used instead of ints - at the moment there is a confusing mixture of floats/doubles and ints in the arithmetic becuase I've used a different byte length to describe floats and ints. JAS65 Feature: Add in changePredicate() method to KnowledgeBase to allow a global find/replace. JAS67 Feature: Add in a zoom control to the Jung graph controls, in case the user doesnt have a middle wheel on their mouse. JAS70 Bug?: Transposition could potentially create a rule that already exists, generating an error. JAS74 Feature: Implement an isConsistant() test method on the KnowledgeBase class. Ideally provide an interface that could then be hooked into a progress monitor. JAS75 Refactor: Review logging statements for optimization purposes. Implement parameter strings to improve efficiency, i.e. the message: Arg.getName() + " defeated" can be changed to: "{0} defeated", Arg.getName(), see http://www.oracle.com/technology/pub/articles/hunter_logging.html JAS84 Bug: Substitutions for a comparison operator just return null, i.e. in the query "is(X, 10), <(X, 20).", the second argument has a null substitution. JAS88 Feature: Add in list semantics. i.e. equate "[a, b]" with ".(a, .(b, .()))" and [H|T] with ".(H, T)". JAS90 Bug: If a loop is encoutered during reasoning, you get a stack overflow. It would be better to present a reasoning error, with the message that the likely culprit is a loop in reasoning. Ideally it would be good to show the loop as well, but this is a difficult problem ;-). JAS91 Refactor: Change Result.isUndefeated to Result.isJustified. isUndefeated is confusing because it's positive when it's negative and vice versa. isJustified is much easier to use. JAS92 Refactor: Update graphical representation of interactions. Instead of using the combination of rebut + defeat use two different schemes, rebut (dashed) and defeating rebut (continuous). Similarly for undercuts. JAS100 Bug: "[r1(X)] a(X) <- b(X)" equals "[r1(X)] a(X) <- b(Y)". The two expressions should not be equal. JAS102 Feature: Add in ability for the default knowledge syntax to capture a rule's caption and head caption. JAS107 Feature: Add ability to change font in EngineTester editor. JAS108 Bug: Unification problem. "father(john, pete). father(pete, sam). father(sam, sarah). ancestor(A, P) <- father(A, P). ancestor(A, P) <- father(A, I), ancestor(I, P)." ?- ancestor(X, sarah) yields: ancestor(sam, sarah). yes, ancestor(A, sarah). yes, ancestor(pete, sarah). yes. 2nd result should be grounded.