31.08.2013 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!