A Prolog Expert System


A Prolog expert system (APES) supporting querying and extending the knowledge base from a command-line interface using a format oriented on natural language, with the aim of being maintainable by the domain expert (i.e. without requiring programming skills).

The system can be queried like this: "What is Object-01?" or "Is Object-A a bird?". The sytem will search the rules and facts in the knowledge base and request missing facts from the user. When a solution is found, the inference that lead to the conclusion (i.e. the used rules and facts) and additional solutions can be displayed.

In a similar manner the knowledge base can be extended from the command-line interface: "if animal has backbone and animal has cold-blood then animal is a reptile." adds a new rule using facts (indicated by "has") that will be searched for and asked from the user. The added rules can be used in rules again (using "is a"): "if animal is a reptile and animal has enormous-size and animal has hollywood-fame then animal is a godzilla.", now when the system is queryed "is Object-A a godzilla?" it will first try to satisfy the rule for reptile that was entered before.

The input format is defined as a Definite Clause Grammar (DCG), a grammar description language built into Prolog, and is therefore well-defined and extensible. The knowledge is represented in text files containing Prolog predicates with defined operators to make it a domain-specific language which is not too far from the actual input format, making it maintainable by the domain expert without requiring Prolog or general programming skills.

This leads to the core idea and goal: An expert system where the knowledge base can not only be queried by the domain expert, but can also be built and maintained without requiring programming skills, making this a non-domain-specific expert system that could be used to built expert systems for any domain by experts in that particular domain, not by programmers.


Valid CSS! Valid XHTML 1.1

This site was created on 2006-05-19 and last modified on 2009-02-22 by Fabian Steeg