Effizientes Model-Checking für CTL - Institut für Theoretische ...
Effizientes Model-Checking für CTL - Institut für Theoretische ...
Effizientes Model-Checking für CTL - Institut für Theoretische ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
4 Design und Implementierung<br />
Die einfachste Form einer <strong>CTL</strong>-Formel ist eine atomare Aussage. Solche Formel wird<br />
als eine Liste mit einem Element, einer Instanz der Klasse Proposition, erzeugt. Alle<br />
Attribute werden in diesem Fall mit ” falsch“ initialisiert. Formeln dieser Art können mit<br />
Hilfe der Methode isProposition() identifiziert werden.<br />
Jede Formula<strong>CTL</strong>pos- oder Formula<strong>CTL</strong>-Formel besteht folglich entweder aus<br />
einem Objekt der Klasse Proposition oder aus einer Liste mit einem oder zwei Objekten<br />
der Klasse Formula<strong>CTL</strong>pos bzw. Formula<strong>CTL</strong>.<br />
Durch die Klasse Formula<strong>CTL</strong>pos können <strong>CTL</strong>pos-Formeln erzeugt werden, in denen<br />
<strong>CTL</strong>-Operatoren nicht negiert werden dürfen. Außerdem ist die Menge der <strong>CTL</strong>-<br />
Operatoren auf die Menge {EX, EG, EU, ER} eingeschränkt, da nur diese <strong>für</strong> den Algorithmus<br />
3 benötigt werden. Die Klasse Formula<strong>CTL</strong> enthält sowohl die von<br />
Formula<strong>CTL</strong>pos geerbten Attribute als auch weitere Attribute, die es zusammen<br />
ermöglichen, beliebige <strong>CTL</strong>-Formeln zu bilden. Die Formeln können über eine Benutzerschnittstelle<br />
in textueller Form in der Infix- oder Präfix-Notation eingegeben werden.<br />
Das Erstellen der Formeln aus dem Eingabetext geschieht mittels der Methoden<br />
StringToFormula(String) und StringInPrefixToFormula(String). Dies erfolgt, indem die<br />
Eingabe analysiert wird und ein Operator der Formel mittels der<br />
getIndexOfMainOperator(String) und getToken(String) gefunden wird. Folglich werden<br />
die Teilformeln der Formel ermittelt, die weiterhin analog in ” die Tiefe“ geparst werden.<br />
Die Konvertierung in die andere Richtung passiert mittels FormulaToString() bzw.<br />
FormulaToStringInPrefix().<br />
Die Methode modifyAccordingDeMorgan() bringt eine <strong>CTL</strong>pos -Formel nach den De<br />
Morganschen Gesetzen in so eine Form, dass die Negationen nur direkt von den atomaren<br />
Aussagen stehen. Diese Umwandlung vereinfacht die Auswertung der Formel in<br />
Algorithmus 3: K, w0 ⊧ ¬p, wenn p ∈ AP und p ∉ η(w0). Dies ermöglicht die Methode<br />
evaluatePropositionalFormula(Formula<strong>CTL</strong>pos) in der Klasse State.<br />
Die Methode convert() in der Klasse Formula<strong>CTL</strong> wandelt eine <strong>CTL</strong>-Formel in eine<br />
äquivalente um, die aus atomaren Aussagen und den Operatoren ¬, ∨, EX, EU und<br />
EG besteht. Diese Methode ist <strong>für</strong> <strong>CTL</strong>-MC(ALL) von großer Bedeutung, da diese Operatoren<br />
eine minimale Menge der Operatoren bilden, um alle möglichen <strong>CTL</strong>-Formeln<br />
konstruieren zu können. Die Konvertierung erfolgt mittels der in der Tabelle 2.3 aufgeführten<br />
Regeln.<br />
Algorithmen<br />
Die Klassen <strong>Model</strong><strong>Checking</strong><strong>CTL</strong>pos und <strong>Model</strong><strong>Checking</strong><strong>CTL</strong> bilden den Kern des<br />
Programms. Sie enthalten nämlich die <strong>Model</strong>-<strong>Checking</strong>-Algorithmen <strong>CTL</strong>pos -MC(EX,<br />
EG, EU, ER) bzw. <strong>CTL</strong>-MC(ALL).<br />
Um den <strong>CTL</strong>pos-Algorithmus ausführen zu können, müssen eine Kripke-Struktur, ein<br />
Zustand in der Kripke-Struktur und eine zu prüfende <strong>CTL</strong>pos-Formel bekannt sein. Diese<br />
Argumente werden in den entsprechenden Instanzvariablen gespeichert. Die Methoden<br />
model<strong>Checking</strong><strong>CTL</strong>posArrayList(Kripke, Formula<strong>CTL</strong>pos, State) und model<strong>Checking</strong>-<br />
<strong>CTL</strong>posTree(Kripke, Formula<strong>CTL</strong>pos, State) stellen die zwei oben vorgestellten Implementierungsmöglichkeiten<br />
des Algorithmus 3 dar. Die Ergebnisse des <strong>Model</strong>-<strong>Checking</strong>s<br />
26