CLIPS
# CLIPS

CLIPS (Abkürzung von englisch C Language Integrated Production System, also „C-Sprache-integriertes Produktionssystem“) ist eine Software zur Erstellung von Expertensystemen. Bekannt geworden ist CLIPS als datengetriebenes (also vorwärtsverkettendes) Produktionssystem, mit dem Expertensysteme (XPS) erstellt werden können. Es beinhaltet eine in C geschriebene Entwicklungsumgebung mit einer Lisp-ähnlichen Anmutung und die multiparadigme Programmiersprache COOL, welche sowohl die regelbasierte, die objektorientierte, die funktionale als auch die prozedurale Programmierung unterstützt. Damit vereint es die Paradigmata, die häufig nur einzeln von Sprachen implementiert werden, wie Prolog (regelbasiert), Smalltalk (OO), Lisp (funktional) und C (prozedural).

## Historisches

In den 1970er und 1980er Jahren, der Hochzeit der KI-Forschung, arbeitete auch die US-amerikanische Raumfahrtbehörde NASA an Expertensystemen. Als Programmiersprache für die KI-Forschung und regelbasierte Systeme wurde in den 1970ern überwiegend Lisp („List Processing“), häufig auf teurer spezieller Hardware, eingesetzt. Die NASA setzte ab 1984 auf solchen Lispmaschinen das Produkt ART*Inference (oder kurz ART, Automated Reasoning Tool), eine Spezialsoftware der Inference Corporation, die in Lisp geschrieben war und deren Regeldefinitionssprache auf OPS5 zurückging, ein.

Unzufrieden mit der Entwicklung, der mangelnden Portabilität der Software und den hohen Kosten, entschloss sich die NASA kurzfristig, selbst eine geeignete Sprache zu entwickeln, die auf preisgünstiger Intel-Hardware lauffähig war. Der Projektname dieser Sprache war zunächst NAIL (NASA Artificial Intelligence Language), und sie wurde zum Zweck größerer Plattformunabhängigkeit ab 1985 in ISO-C statt in Lisp geschrieben. Um den Bestand an vorhandener ART-Software weiterführen zu können, sollte sie lexikalisch, semantisch und funktional eine 1:1-Kopie des vorher von der NASA genutzten kommerziellen Produkts ART sein (ohne Nutzung und Kenntnis von deren Sourcen). Auch die Anwenderumgebung wurde der von Lisp bekannten nachempfunden. Jedoch musste der Sprachumfang von CLIPS gegenüber dem originalen ART*Inference aufgrund der schwächeren Intel-Plattform (die absolute Grenze für adressierbaren Arbeitsspeicher lag damals bei nur 640 kB) abgespeckt werden. 1985 entstand der erste Prototyp, zum Jahreswechsel wurde Version 1.0 erreicht. Im Sommer 1986 wurde CLIPS als Version 3.0 von der NASA öffentlich verfügbar gemacht (public domain, später auch die Quellen).

## Weiterentwicklung

Bis 1988 folgten dann in hoher Folge neue Versionen und Unterversionen mit erweiterten Funktionalitäten und CLIPS erlangte allmählich größere Verbreitung in Unternehmen und im universitären Bereich. Völlig neu geschrieben und modularisiert wurde CLIPS dann zwischen Version 4.1 (1986) und 4.2 (1988). Mit dieser Version wurde auch erstmals ein detailliertes Handbuch zur CLIPS-Architektur veröffentlicht, zudem wurde Funktionalität zur Validierung und Verifizierung der Regeln hinzugefügt. Neue Funktionalität kam dann 1989 mit der Version 4.3. Bis dahin war CLIPS eine rein „logische“ Sprache mit Deduktionen auf Basis des Rete-Algorithmus. Mit CLIPS 5.0 wurden 1991 jedoch weitere Programmparadigmen eingeführt: das prozedural-imperative und das der Objektorientierung. Damit zusammen hing die Einführung der OOP-Sprache COOL (Clips Object-Oriented Language, d. i. objektorientierte CLIPS-Sprache). Mit CLIPS 5.1 gab es 1991 Erweiterungen für das X Window System, MS-DOS und Macintosh-Schnittstellen. CLIPS 6.1 unterstützte dann ab 1998 auch C++-Compiler. CLIPS 6.2 brachte schließlich eine weitere Ausweitung der unterstützten Schnittstellen für die Betriebssysteme MS Windows 95, 98, Windows NT und macOS.

2008 erreichte CLIPS die Version 6.30. Sie zeichnet sich vor allem durch eine verbesserte Integration in C++, in das .Net-Framework und Java aus.

Für die Version 6.4 ist laut FAQ der CLIPS-Webseite die Unterstützung von Unicode vorgesehen, die auch für die Sprachinteroperabilität relevant ist, da alle aktuellen Betriebssysteme, auf denen CLIPS lauffähig ist, sowie einige der für die Softwareintegration vorgesehenen Programmiersprachen und Ablaufumgebungen (Java und .NET) Unicode bereits seit etlichen Jahren unterstützen.

## Technisches

Mit CLIPS können Expertensysteme im klassischen Sinn erstellt werden. Vor dem Ausführen muss der Source Code mit einem gängigen ANSI-C-Compiler für die jeweilige Plattform kompiliert werden. Solche Compiler liegen für alle gängigen Plattformen vor.

CLIPS kann aber auch durch Laufzeit-Programme in andere Programme eingebettet werden, die in verbreiteten Sprachen geschrieben sind. Dies waren zunächst C, C++, Ada, später kamen weitere Sprachen dazu, etwa Delphi und Java. Diese mögliche Einbettung in anderen Sprachen ist ein bewusst angestrebtes Merkmal von CLIPS/COOL gegenüber anderen logischen oder KI-Sprachen wie Prolog, Planner oder Lisp (das in den 1970er und 1980er Jahren die KI-Szene dominierte), weil dadurch Interoperationalität mit bestehenden Softwareumgebungen, Weiternutzung bestehenden Codes sowie der Wissenstransfer gefördert werden und zudem der Aufwand, sich in CLIPS einzuarbeiten, vermindert wird.

## Funktionsweise an einem Fallbeispiel

CLIPS arbeitet für logische Deduktionen wie üblich mit Fakten (log. Prämissen) und Regeln (log. Schlussfiguren). Die bereits in der antiken Logik geläufige Schlussfigur des Modus ponens (bzw. genauer differenziert hier: der Modus darii) wird häufig durch folgendes Beispiel wiedergegeben:

* Alle Menschen sind sterblich.
* Sokrates ist ein Mensch.
* Daraus folgt: Sokrates ist sterblich.

Gezeigt werden soll, wie CLIPS aus den Fakten (Zeilen 1 und 2) die Schlussfolgerung (Aussage, Zeile 3) produziert. Zunächst wird die Wissensbasis um die zwei relevanten Eingaben erweitert:

* Menschen sind sterblich.
* Sokrates ist ein Mensch.

Nun ergänzen wir ein weiteres Faktum:

* Hunde sind sterblich.

In CLIPS-Sprache lauten diese so:

Man beachte die Lisp-artige Notation von CLIPS mit runden Klammern und der Reihenfolge (Operator Argument Argument).

Die anzuwendende Schlussregel (der Modus ponens) lautet so:

* wenn gilt: a impliziert b und b impliziert c, folgt auch: a impliziert c,

was in CLIPS-Sprache lautet:

Vor der ersten Ausführung dieser Regel sieht unsere Wissensbasis bei einer Abfrage noch so aus:

Nun wenden wir die oben formulierte Regel einmal auf die eingestellten Fakten an. CLIPS gibt danach Folgendes aus:

Das System hält an, wenn alle Regeln auf alle Fakten angewandt wurden. Die Schlussfolgerung wird einfach als neuer Fakt der Wissensbasis hinzugefügt. Wir finden daher jetzt eine neue Aussage in der Wissensbasis vor, in CLIPS-Sprache (ist Sokrates sterblich) oder rückübersetzt in die Syntax der Alltagssprache: Sokrates ist sterblich. Und wie wir ebenfalls bemerken, hat das System aus (ist Hund sterblich) nicht den Schluss gezogen (ist Sokrates Hund), ist also nicht auf den berühmten Sophismus hereingefallen, der bereits in der Antike ein bekannter Fehlschluss war.

## Folgeprojekte

Aus CLIPS leiteten die Unternehmen Inference und dessen Nachfolger eine Reihe von Produkten ab, die immer wieder umbenannt wurden oder neue Folgeprojekte initiierten. So gab es die Softwareprodukte (in dieser zeitlichen Folge) ART-IM (später ARTEnterprise genannt), Eclipse (nicht zu verwechseln mit der gleichnamigen Entwicklungsumgebung), dessen Nachfolger HaleyRules sowie CLIPS/R2 (von der Fa. Production Systems Technology).

Eine funktional zunächst vereinfachte Version von CLIPS ist seit 1995 unter dem Namen JESS (Java Expert System Shell) für die Betriebssystemplattformen Unix und MS Windows verfügbar, die ab Version 7 die Regeldefinitionssprache JessML beinhaltet. JESS wurde an den Sandia National Laboratories in Livermore, USA, völlig neu in Java geschrieben und für die Benutzung zusammen mit bzw. als Erweiterung von Java entwickelt. Es ist gegenüber CLIPS im Funktionsumfang etwas reduziert, so bietet es weniger Auswahl an Regelanwendungsstrategien, verzichtet auf Module und bietet die meisten Funktionen von COOL nicht an, da Java diese fehlenden Funktionen selbst bietet. JESS kann jedoch auch völlig ohne Java benutzt werden. Im Gegensatz zu CLIPS ist JESS nicht quelloffen. Kommerzielle Anwender benötigen zudem eine entsprechende Nutzungserlaubnis. Im Oktober 2013 erschien Version 8.0 mit erstmaligem Support für das Mobilbetriebssystem Android.

Eine um unscharfe Logik erweiterte Variante von CLIPS ist FuzzyCLIPS (Fuzzy Extension to the CLIPS Expert System Shell). Das System nutzt zwei zusätzliche Konzepte: Unschärfe („Fuzziness“) und Unsicherheit. FuzzyCLIPS erlaubt das freie Mischen unscharfer und gewöhnlicher Ausdrücke für die Regeln und Fakten eines Expertsystems. Es wurde am Institut für Informationstechnik der staatlichen Behörde Kanadas für wissenschaftliche und industrielle Forschung entwickelt und fand auch Eingang in die integrierte Softwareentwicklungsumgebung Eclipse. Aufgrund des hohen Anpassungsaufwandes an neue CLIPS-Versionen wurde das Projekt ab 2010 nicht mehr weiterentwickelt.

EHSIS (Erabaki Hartzea SIstemen Sortzailea) ist eine kommerzielle, in C geschriebene spanischsprachige integrierte Entwicklungsumgebung zur Erzeugung von Expertensystemen auf Basis von CLIPS und FuzzyCLIPS. Sie unterstützt eine Vielzahl von Kommunikationsprotokollen, Datenbankkonnektoren und Multimedia-Schnittstellen, läuft jedoch nur unter MS Windows. EHSIS wurde bisher vor allem im medizinischen Sektor und an Hochschulen in Lateinamerika eingesetzt.

Seit 2004 steht das Python-Modul PyCLIPS 1.0 zur Verfügung, ein Erweiterungsmodul für die Programmiersprache Python, das in Python die komplette CLIPS-Funktionalität zur Verfügung stellt.

2001 begann David Young ein von CLIPS und JESS inspiriertes System unter dem Namen LISA (Lisp-based Intelligent Software Agents) zu entwickeln, das mit dem Common Lisp Object System des ANSI Common Lisp geschrieben ist. Die Ziele von Young sind vollkommen freie Verfügbarkeit und größtmögliche Plattformunabhängigkeit (Portabilität) der Quellen sowie Interoperabilität mit möglichst vielen gängigen Lisp-Varianten. Das erste produktive Release erschien als Version 1.0 am 31. August 2001, Version 3.0 erschien am 8. September 2007. Es läuft mit LispWorks, ACL, CLISP, CMUCL, SBCL und OpenMCL.

