Ja, schönen guten Morgen. Ich begrüße Sie herzlich
zur Ende der vierten Woche, unserer Vorlesung.
Wir hatten ja in der letzten Stunde mit dem Thema CTL
abgeschlossen und waren dann jetzt zu einigen Überlegungen und Bemerkungen zum Thema Fairness übergegangen,
was ich jetzt nochmal kurz wiederholen will.
Wir hatten gesehen, dass intuitiv Fairness bedeutet,
dass von zwei Alternativen oder mehr Alternativen immer eine oder jeder
immer mal wieder gewählt werden muss, sodass einer nicht permanent vernachlässigt werden kann.
Oder dass eine Aktion immer mal wieder stattfinden muss und nicht
permanent ausfallen kann, was natürlich ein Sonderfall ist.
Das unsere ist ein Sonderfall vom oberen Fall,
wenn man die beiden Alternativen gestört oder nicht gestört betrachtet.
Nicht und dass dies eben in Cell zählt in LTL-Ausdrückbar ist,
aber nicht so sehr, nicht so gut in CTL.
Und deswegen gab es den Begriff der fairen Kripke-Struktur.
Vorher nochmal etwas Allgemeines zum Affairness. Und zwar hatten wir dort die starke Fairness kennengelernt,
die sagt, wenn eine Aktion nicht,
und dafür gibt es dann extra das Prätäkat enabled,
wenn eine Aktion permanent möglich ist,
dann soll sie auch irgendwann mal ausgeführt werden
Ja, das war jetzt gerade falsch. Das war bei
der schwachen Fairness. Bei der starken Fairness ist es so,
wenn eine Aktion unendlich oft immer wieder ausführbar ist,
dann soll sie auch mindestens einmal ausgeführt werden,
was durch die Iteration dieses Arguments dazu führt,
dass sie unendlich oft ausgeführt werden soll.
Ja, das ist ein Begriff, den wir,
den sie dann im nachfolgenden Thema Petri-Netze nochmal kennenlernen, werden.
Dort haben wir auch Transitionen. Und enabled aktiviert einer Transition
oder bereit sein, heißt dort eben,
die Transition kann schalten oder ist aktiviert
Sie wird dann eben ausgeführt. Nicht und als Beispiel hatten wir hier dieses Petrinetz,
was noch aussieht wie ein Transaktionssystem,
wo wir diese beiden Alternativen jetzt im Zustand S1 haben und
nur die obere Option wird ständig gewählt,
dass wir ein Beispiel, wo diese starke Fairness verletzt wird.
Nicht die schwache Affairness,
die geht von der schwächeren Voraussetzung aus oder stärkeren,
das ist Auffassungssache,
dass eine Aktion permanent ab einem Zeitpunkt aktiviert sein muss und
dann soll die
auch mal ausgeführt werden
Nicht das, und hebt ab auf folgende Situationen,
wo wir einen Prozess haben,
der permanent seine Aktion ausführen kann, aber nicht tut,
weil wir, weil beispielsweise der Betriebssystem-Scadular diesen Prozess keine Ausführungszeit zuteilt.
Nicht, dass wir technisch argumentiert in unserer Kribbri-Struktur würde sich das so ausäußern,
dass wir andauernd in unserem Pfad alle möglichen anderen Pfahle wählen,
aber nicht einen Pfad, der dann gerade diese Aktion hier berücksichtigt.
Und in dem Zusammenhang kann man auch noch dann die unbedingte Fairness nennen,
die also mit dem unendlich oft hier zusammenfällt,
was wir bei dem Alternierpaid-Protokoll so formuliert hatten
Ja, nicht? Und der Ausweg in TTL wird sein,
dass wir faire Kripke-Strukturen betrachten, die also ähnlich wie Büchi-Automaten,
und zwar verallgemeinerte Büchi-Automaten funktionieren,
wo wir eine oder mehrere Mengen von Endzuständen haben,
die eben immer wieder besucht werden müssen.
Wir haben ja also hier dieses Infinite von P,
was bedeutet, die Menge der unendlich oft in diesem,
in dieser unendlichen Zustandsfolge vorkommten Zustände muss einen nicht leeren Durchschnitt
mit jedem der Endzustände
eben haben
Ja, und dieser übertragen auf die Semantik,
haben wir dann Folgebezeichnung hier mit dem Index F,
dass wir dann nur noch die Fährenpfade berücksichtigen und die dann dem Modelchecker vorlegen.
Nicht auf diese Art und Weise haben wir sozusagen indirekt durch ein Workaround,
die so fairness wieder eingeführt,
indem wir dem Modelchecker gar nicht die vorher unfairen Abläufe
zur Auswahl vorlegen
Ja, das ist ja auch das Thema,
wo wir heute also abschließend LTL und CTL Model-Checking nochmal betrachten,
mich bei die Ausgangssituation war ja,
dass ein Systemverhalten überprüft werden soll, ob es eine Spezifikation erfüllt.
Ich hatte dann nochmal die Analogie zwischen Searing-Boofing und Model-Checking projiziert,
die also darin besteht,
dass wir beim Theoring-Brufen einen logischen Ansatz haben,
der syntaktisch geklärt werden kann,
während der Model-Checking-Ansatz ein typisch semantischer ist,
wo wir den Zustandsraum,
also das Modell überprüfen
Ja, und die LTL-Model-Checking-Aufgabe besteht eben darin für eine gegebene LTL-Formel,
die Menge aller Zustände zu berechnen, die diese Formel erfüllen.
Und hinterher schaut man danach, ob das auch für die
Anfangszustände gilt. Hier haben wir wieder die klassische Aufgabe.
Wir hatten früher schon mal gesehen,
dass wir diese Implikation oder diese Teilmengebeziehungen durch die Durchschnittskonstruktion betrachten
und dem Folgenden nochmal diskutiert,
warum das so ist
Das liegt also an den verschiedenen Komplexitäten, die wir betrachtet hatten. Und ich hatte nochmal wiederholt,
wie wir genau das Phänomen schon mal am Anfang bei den Transitionssystemen betrachtet hatten,
was damals vielleicht ein bisschen speziell ausgesehen hat,
aber jetzt im Kontext des Model-Checking ist das also einschlägig.
Nicht, dass wir also hier das Transitionssystem für die Spezifikation haben,
ein Transaktionssystem für das System und dass wir um diese Inklusion zu überprüfen,
dann diese Durchschnittaufgabe erlösen,
indem wir also hier erst das Kompliment bilden,
dann den Durchschnittautomat und sehen,
dass wir hier dass der Durchschnitt der Akzeptierten Folgen eben nicht leer ist.
Hier sind wir bei den endlichen Folgen noch gewesen und hatten
dadurch auch ein Gegenbeispiel konstruiert.
Nicht im vorliegenden Fall werden wir jetzt,
also diese Spezifikation hier durch eine LTL-Formel ersetzen und die endlichen Folgen durch unendliche Folgen.
Und die Formel könnte beispielsweise so aussehen. Ja,
das wird also auch nochmal auf dieser Folie ausgedrückt,
wo wir jetzt zu den unendlichen Folgen übergegangen sind und hier
die entsprechende entsprechende Prozedur mit dieser Konstruktion.
Das heißt also mit der Komplimentkonstruktion
Die ist aber, wie gesagt, ineffizient, wenn wir eine nicht-deterministische Büschi-Automaten vorliegen haben.
Und nicht, und deswegen ist es günstiger,
bei der Spezifikation als Formel von deren Negation auszugehen,
weil uns das, diese Komplimentbildung eben erübrigt.
Nicht den Büschi-Automaten zu konstruieren zu der Spezifikation müssen wir sowieso.
Und das können wir dann auch nach der Negierung machen.
Nicht und der Algorithmus sieht dann eben so aus,
dass an dieser Stelle dann das Transitionssystem oder der Büschi-Automat Für die negierde Spezifikation aussieht. Ja,
und als Vorgehensschema für solche Modelshaker haben wir dann dieses Bild hier,
wo wir zunächst mal aus dem System ein mehr oder weniger
formales Modell konstruieren und für die Eigenschaft dann auch eine LTL-Formel,
dass wir daraus die jeweiligen Büchi-Automaten konstruieren und dann den Produktautomaten und für den dann das Lehrheitsproblem lösen,
was dann im Neinfall dann auch eben dieses Gegenbeispiel ergibt.
Ja, hier nochmal als Prozedur ausgedrückt
Hatten wir uns über die Komplexität des Verfahrens Gedanken gemacht,
wo also herauskam,
dass diese Komplexität im Wesentlichen dann durch die Konstruktion des Büchi-Automaten dominiert wird,
der, nein, im Wesentlichen durch die Formel,
die Größe der Formel dominiert wird,
also die Größe des Büchi-Automaten für die Formel.
Und dass aber natürlich auch die Größe des Transaktionssystems eine Rolle spielt.
Und wenn die Formel also klein ist,
ist das sogar die dominierende Däterung in ihren Defaktor,
weil eben das Transaktionssystem,
also die Kripke-Struktur,
exponentiell wachsen kann gegenüber der Größe des ursprünglichen Programms
Gut, und dann waren wir auch schon zu dem CDL-Model-Shaking übergegangen.
Was jetzt darin besteht, wie eben, dass wir jetzt statt einer LTL-Formel eine CTL-Formel hatten. Ja,
und der Algorithmus funktionierte jetzt durch eine geschachtelte Betrachtung der zurgrunde liegenden Formel,
indem wir also mit den Atommunden in dieser Formel beginnen und dann die Etikette,
die wir ja schon in der Kribbestruktur haben,
schrittweise durch Formeln erweitern, die wir dann in einer Menge Label zusammenfassen,
bis wir dann bei der Zielformel angekommen sind und wir dann nur noch schauen müssen,
in welchen Zuständen diese Zielformel gilt.
Und insbesondere in welchen Anfangszuständen diese Formel gilt. Das war also
für den Aussagen logischen Teil einfach der erste temporallogische Teil,
bestand da drin bei dem Next-Operator,
dass wir sozusagen einen Schritt nach vorne gucken müssen oder entsprechend zurückgehen müssen mit dem Eintrag.
Hier nochmal angedeutet und dann hier in Sonderbetrachtung dasselbe für EU und EG haben. Ja,
wichtig war, dass wir dann eben nur diese drei Kombinationen in CTL,
in unseren Algorithmus einbauen müssen, was allerdings den Nachteil habe,
dass wenn wir eine Formel haben, die also nicht nur darauf beruht,
dass wir die vorher transformieren müssen,
wie wir ja dann auch in dem Beispiel gesehen hatten.
Ja, jetzt nochmal im Einzelnen an einem Beispiel,
zunächst mal übertragen wir die Etikette in unser Label Menge,
was hier keine weitere Darstellung erfordert und
unsere Formel ist hier
Die ist jetzt schon relevant, wenn wir die Negation betrachten,
ja vorher auch schon, weil hier A und B drin vorgekommen ist,
betrachten wir also insbesondere A und B und dann tragen wir dort ein,
wo nicht bigget, dann bei dem O oder einem entsprechend.
Und bei dem Next, wie eben angedeutet,
machen wir dann den Schritt entgegen der Pfeilrichtung und übertragen dann die Informationen,
dass im nächsten Schritt etwas gilt in der entsprechenden Weise und hier eben auch Ja,
das nächste Fall war jetzt das EU,
wo wir was Ähnliches haben, dann nur über mehrere Strecken.
Denn wir, denn EU bedeutet ja, also E-F1,
U-F2 bedeutet ja, es gibt einen Pfad,
sodass irgendwann mal App 2 gilt und bis dahin immer eine F1. Was eben beinhaltet,
dass es auch schon in S gilt und wenn wir einen
Schritt zurückgehen und doch eben F1 gilt eben auch dort.
Ich aber das führt sich dann also fort über mehrere Schritte,
so lange wie also dieses F1 in Vorgängerzuständen
zu finden ist
Ja, ein Beispiel mit einer etwas anderen Formel,
wo jetzt also EU drin vorkommt, dann würde das dann so aussehen.
Ja, und dazu dann auch nochmal das Ganze als Prozedur oder Algorithmus dargestellt. Ja,
der aufwendigste Teil ist der mit dem MEG, wo es darum geht,
zu einem Zustand, also zum Beispiel den Anfangszustand zu untersuchen,
ob es einem Pfad gibt, bei dem immer das Argument,
also hier zum Beispiel F, Er gilt,
also die Formel wäre jetzt EG, ob EGMF gilt.
Das kann man an so einem Beispiel natürlich gleich durch Inspektionen machen bei großen Beispielen.
Sie erinnern sich ja an das, an den großen,
an die große Grip-Struktur bei diesem Erreichbarkeitsgrafen vom Alternierbeit-Protokoll,
ist das natürlich nicht möglich und es müssen dann intelligentere Verfahren angewandt werden,
die zum Beispiel darin bestehen, dass wir erstmal die Zustände streichen.
Jetzt nur für diesen Schritt hier später nehmen wir die natürlich wieder rein,
wo dieses F gar nicht gilt, weil die ja sowieso nicht relevant sind.
Und der Der Schlüsselbegriff war, die der strengen Zusammenhangskomponente,
was jetzt eine Teilmenge von solchen Knoten ist, wo jeder von jedem erreichbar ist. Und wir hatten hier gesehen,
wenn wir das so machen, machen wir einen Fehler,
weil wir ja, das müssen wir mal genauer sehen,
nach dem Next wegstreichend sehen,
dass hier unten tatsächlich keine strenge Zusammenhangskomponente herrscht,
denn von hier aus kommen wir nicht mehr zu den anderen Elementen dieser Menge,
also müssen wir das Ganze hier revidieren und zum Beispiel so,
wo wir zu dem Begriff der trivialen strengen Zusammenhangskomponente kommen und uns interessieren dann nur die Nicht-Trivialen.
Das Ganze ist jetzt so definiert, dass eben
eine strenge Zusammenhangskomponente die Maximalitätseigenschaft erfüllen muss. Das heißt,
wir machen sie so groß, wie es nur geht.
Und die Trivialen, die bestehen jetzt eben darin,
dass sie eben aus einem Zustand nur bestehen und nicht die Situation haben,
dass auch dieser Zustand eine Schleife eben ermöglicht
Gut, nicht. Und jetzt der Bezug zu unserem Problem ist eben der,
wenn wir also eine solche Formel F gleich EGL 111 untersuchen wollen,
dann gehen wir temporär dazu über aus unserer Kripke-Struktur,
die sogenannte Einschränkung zu bilden,
wo wir nur die Zustände nehmen, die das F1 erfüllen.
Und diese Formel gilt genau dann,
wenn es für einen Zustand ist,
wenn es ein Pfad in dieser Reststruktur gibt,
die in eine strenge Zusammenhangskomponente eben führt,
was hier symbolisch dargestellt ist.
Und hier nochmal
das Bild von vorher
Ja, und das wäre jetzt also nochmal der Algorithmus dazu
und eben die Angabe der Zeitkomplexität für die strengen Zusammenhangskomponente nach dem Algorithmus von Terrian.
Ja, um das dominiert die Gesamtkomplexität für diesen Schritt,
nämlich linear in der Größe der Zustände und der Kanten.
Und das Ganze hier nochmal als Prozeduren dargestellt.
Und dann haben wir ja nochmal so sagen,
die Gesamtkomplexität betrachtet, die aber im Wesentlichen nur darauf beruht,
was wir gerade eben hatten
Also in Betracht ziehen, dass wir ja über den Aufbau der Formel,
die ganze Tiefe der Formel ausschöpfen, also von unten nach oben.
Und dass wir jeweils diese Prozeduren eben anwenden. Und das führt dann dazu,
dass wir als Ergebnis haben,
dass in jedem Schritt der schwierigste Fall ist,
dass diese Operation mit der strengen Zusammenhangskomponente,
deren Komplexität hier vorkommt und das Ganze höchstens so oft iteriert werden kann,
wie die Größe der Formel eben entspricht.
Nicht die U-Notation kennen Sie ja, das beinhaltet ja,
dass wir sozusagen noch ein Anfangsstück haben können,
wo wir Ausreißer haben und dass wir einen linearen Faktor haben,
um den das Ganze noch vergrößert werden kann
Ja, das war jetzt die Argumentation dazu. Ja,
das soweit war sozusagen der Stoff in der letzten Stunde.
Wir waren ja schon ein bisschen weitergekommen, was ich auch gleich wiederholen werde.
Und ich wollte jetzt nur schon mal ankündigen,
dass wir jetzt tatsächlich das mit dem Umzug machen,
auch wenn einige von ihnen gesagt hatten, dass sie das dann Probleme bereitet.
Ab nächster Woche wird dann eben Herr Molt die Vorlesung weitererhalten,
und zwar in Stellingen. Und ich hoffe,
dass dann auf der FGI 2-Seite das so angekündigt wird.
Ich habe jetzt hier mal aus Mangel nochmal die Seite vom Vorjahr genommen.
Nicht, also so wird das dann entsprechend sein.
Nicht und sie sollten immer gucken, wo es tatsächlich stattfindet,
weil wir ab und zu mal an einem Tag ins Haus F ausweichen müssen.
Das heißt, da können sie sich dann schlau machen,
wenn sie auf der FG2-Seite nachschauen.
Aber umgekehrt, wenn sie dann in Stellingen sind,
ist das ja dann auch nicht mehr das Problem.
Gut, und dann hatten wir weiter schon mit dem Beispiel
angefangen in der letzten Stunde den bekannten Mikrowellenofen.
Und wir hatten doch als Beispiel Formel, die Formel AG,
Start impliziert AF-Feed genommen, was so viel bedeutet,
für alle möglichen Abläufe beginnt mit dem Stach-Zustand gilt immer,
sozusagen eine generelle in Variante. Wenn ich einmal Start durchlaufen habe,
also zum Beispiel hier, dann komme ich,
egal wie es weitergeht, also dafür steht das A,
sicher mal zu Heat, wie das hier auch der Fall wäre.
Und wir erwarten, dass diese Formel nicht gilt,
weil wir hier auch, wenn wir hier diese fehlerhafte Operation machen,
den Ofen starten, bevor wir eh die Tür geschlossen haben,
können wir eben zum Beispiel hier diese Schleife durchlaufen und kommen nie zu Heat oder wir können auch diese Schleife durchschlaufen,
wo das Gleiche eben gilt
Ja, also mit dieser Formel arbeiten wir jetzt und wir
müssen also zunächst mal das Ganze umwandeln in unsere Normalform,
wo wir hier schon das Ergebnis haben.
Nicht, es kommt jetzt nur noch vor und oder oder,
also das und ist eine Ausnahme,
das haben wir der Vereinfachung auch noch zugelassen.
Es kommt nur noch vor hier EG und das EF,
was so viel, was für, das für eine Antilformel steht.
Wir wissen ja, EF ist dasselbe wie E-True-Antil-F,
nur weil das kürzer ist,
schreiben wir da EF statt diesem hier.
Ja,
und dann hatten wir letztes Mal auch diese Rechnung
Durchgesehen, die im Wesentlichen darin besteht, immer geschickt,
irgendwelche Negationen einzufügen, die dann durchzuschieben,
um dann immer zu diesen E-Quantoren zu kommen,
um dieses A dann hier zum Beispiel zu vermeiden.
Ja, und dann hatten wir, glaube ich,
auch schon ganz kurz angefangen, diese Prozedur hier jetzt auszuführen.
Oben haben wir nochmal die Formel und wir fangen ja gewissermaßen mit den Atomen an.
Das heißt, wir gucken zunächst mal überall,
wo Heat ist, steht und dann im Kompliment,
wo Nordhet steht, das ist also sozusagen gleich hier ausgeführt,
das sind jetzt die Zustände markiert,
wo wir Nordheat hier haben
Wenn ich dazu sitze, dann auch praktisch,
das Ganze zu vervollständigen, dass wir also auch die Negationen hier reinschreiben,
nicht in vielen Fällen, hieß es ja,
wenn die Formel nicht gilt, dann bleibt sie eben weg.
So, als nächstes haben wir dann diese Menge satt von Heat formuliert.
Also hier steht immer noch S von Heat,
aber den Übungsaufgaben oder im Skript steht jetzt satt von Heat,
dass er jetzt die Menge der Zustände, für die diese Formel gilt,
ist also das, was wir hier schon rot markiert haben.
Also eins, zwei, drei,
fünf und sechs
So, und dann geht's jetzt weiter zu der umfassenden Teilformel.
Das wäre jetzt hier das EG-Notiz. Das heißt,
wir haben jetzt hier schon das Problem mit der strengen Zusammenhangskomponente.
Und wir bilden jetzt also die strenge Zusammenhangskomponente für diese Teilmenge.
Das heißt also, wir machen jetzt gedanklich den Schritt,
dass wir alle die Zustände, in denen Not-Heat nicht gilt,
Das heißt, wir konzentrieren uns nur noch auf die roten
und die gelben Zustände, die sehen wir gedanklich nicht.
Und dann sehen Sie hoffentlich hoffentlich,
wo wir jetzt hier die strenge Zusammenhangskomponente haben,
kann das jemand sagen, was ist die strenge Zusammenhangskomponente?
Ja, bitte. Ja, das ist also diese Menge,
weil diese hier führt in eine Sackgasse inbezogen nur auf die
roten Mengen und unter diesen Zuständen kommen wir von jedem
zu jedem
Ja, das halten wir mal fest und die nächste Folie,
die vereinfacht nur das Bild. Hier haben wir immer noch
die strenge Zusammenhangskomponente und wenn wir jetzt also diese Konjunktion hier betrachten wollen,
dann müssen wir auch hier erst das erste Argument betrachten und wir überlegen,
wo jetzt überall Start gilt.
Das zeichnen wir eben ein,
nicht und satt von Start ist also gerade,
die sind die Zustände, wo also zwei,
fünf und sechs und sieben sind,
also gerade die mit Grün
jetzt hier markiert sind
So, und dann kommen wir jetzt zu dem Und,
nicht, was also nicht in unserer Prozedur enthalten war,
aber entsprechend mit dem Oder entspricht das jetzt den Durchschnitt.
Oder hätten wir die Vereinigung. Das heißt,
wir bilden jetzt den Durchschnitt von der lila strengen Zusammenhangskomponente,
lila umrundet und der grünen Menge,
was also ganz deutlich hier diese beiden Zustände 2 und 5 sind,
jetzt hier auch gelb dargestellt.
So, damit sind wir jetzt,
also bei dieser Formel hier angekommen und wir gehen jetzt also weiter,
indem wir jetzt mit dieser Menge weiter arbeiten.
Und wir wollen ja jetzt die Formel bilden,
dass wir die Formel hier e, GF untersuchen.
Das bedeutet ja, wir müssen jetzt alle Zustände suchen,
wo wir irgendwann mal in einem dieser Zustände kommen,
die wir gerade gebildet hatten.
Da habe ich jetzt schon einen Schritt gemacht.
Ich mache nochmal einen Schritt zurück. Das müsste so gehen
. Das heißt, wir müssen jetzt alle Zustände suchen,
für die es einen Pfad gibt, die in diese grüne Zustandsmenge hineinführt.
Wenn ich das sehen sehe, auf den ersten Blick,
das sind dann alle Zustände, weil der ganze Graf ja streng zusammenhängt ist.
Wir können das aber auch sukzessive machen. Wir können sagen,
ja, der führt da rein und in drei führt in eins.
Und vier führt nach drei und sieben führt nach vier und
sechs führt auch nach vier. Das heißt also,
alle Zustände von allen Zuständen gibt es einen Pfad in diese Menge,
sodass wir also haben,
das Satt von dieser Formel hier sind alle Zustände
Also hier sehen wir das nochmal,
das war jetzt die Formel mit den grünen Zuständen und das EF von dem
waren die Menge der Zustände, die ein Vater da rein haben.
Das jetzt ist aber noch nicht unsere Ausgangsformel gewesen,
denn die Ausgangsformel, die bestand ja in der Negation dieser Formel.
Und das Kompliment der Gesamtmengen ist die leere Menge,
nicht sodass wir also sehen, in keinem Zustand gilt also
diese Ausgangsformel und dann natürlich auch nicht im Anfangszustand.
Okay. Ich habe das nochmal jetzt zusammengefasst,
dass wir also sehen,
was wurde bewiesen
Wir haben diese Formel bewiesen, die sagt,
es gilt immer nach einem Zustand mit Start,
wird später ein Zustand mit Heat erreicht.
Nämlich, wir hatten das in diese Normalform gebracht.
Wir hatten dann die entsprechende Sattmenge als Lea nachgewiesen,
woraus folgt, dass eben auch diese Formel nicht im Anfangszustand gilt.
Also gilt sie nicht für die Kripke-Struktur.
Und außerdem haben wir jetzt nicht explizit gemacht,
aber man kann sich das vielleicht erdenken.
Nicht, man kann ein Gegenbeispiel aus der Konstruktion entnehmen
Die, was jetzt eben darin besteht,
dass wir eben in diese strenge Zusammenhangskomponente hineingehen.
Und also zum Beispiel mit der Zustandsfolge 1, 3,
1. Ich habe also hier nochmal so eine unsinnige Iteration vorgeschoben
und dann 2, 5 und da bleiben wir drin.
Das wäre eben das Gegenbeispiel, was der Model Checker dann eben zurückgibt.
Gut. Ja, und dann hatten wir ja gesagt,
wir wollen jetzt in dem CTL auch die Fairness behandeln,
die wir also in LTL direkt in die Formel packen.
Und das machen wir hier ja durch die faire Kripke-Struktur.
Hier nochmal zur Erinnerung,
die anschauliche Bedeutung
Und hier noch mal die Definition mit der fairen Krypto-Struktur.
Nee, das ist jetzt was Neues. Und zwar tritt
jetzt die Fairness im Zusammenhang mit diesen starken Zusammenhangskomponenten auf.
Wir nennen jetzt eine starke Zusammenhangskomponente, eine Fair,
falls sie mit allen diesen Endzustandsmengen einen nicht leeren Durchschnitt haben.
Richters erklärt sich folgendermaßen. Nächstes ist ja klar,
dass diese Fairness Entsprach ja, dem Akzeptierungsmodus der Böschi-Automaten.
Diese Akzeptierungsmodus bestand ja darin, dass wir immer wieder in
die Endzustände gegangen sind. Dieses beinhaltet ja, dass wir
Schleifen finden müssen, die immer wieder die Endzustände durchlaufen.
Und Schleifen hatten wir typischerweise ja dadurch dargestellt, dass wir
die strengen Zusammenhangskomponenten gebildet hatten. Nicht deshalb ist also,
wenn wir diese Fairness verifizieren wollen, müssen wir eben Folgen finden,
die einerseits diesen strengen Zusammenhangskomponenten diese Schleifen bilden.
Und andererseits aber diese Endzustände, die unsere fairen Bedingungen beschreiben,
besuchen, sodass das Ganze nur möglich ist,
wenn überhaupt ein Durchschnitt besteht, zwischen den strengen Zusammenhangskomponenten und diesen Endzuständen.
Ja, ist das klar? Gut. Also einen
habe ich zumindest snicken gesehen, noch jemand.
Dankeschön. Gut, also nur noch mal zur Erinnerung,
dass wir ja hier das Bild für diese Akzeptierung.
So, nicht nur das entsprechende Lämmern ist, es gilt genau dann
Folgende ist für eine Grippestruktur M und ein Zustand S.
Gilt die Formel EGF1, das war ja nun die entscheidende
mit den Schleifen. Jetzt unter der fairen Semantik,
deswegen hier der Index F. Wenn erstens dieser Zustand S in diesem reduzierten Grippestruktur war,
die war vorher da in dem Zusammenhang konstruiert hatten und es einen Pfad gibt,
der von S zu einer fairen, nicht trivialen,
starken Zusammenhang zur Hack-Ende führt.
Nicht das entsprechende Lämma vorher ohne Fairness bestand eben darin,
dass hier dieses F fehlte und das es wird
fair fehlte.
Ansonsten ist die Überlegung
ganz analog
Ja, das ist also kurz nachgeschoben. Die Theorie dazu und die
wenden wir jetzt also auch gleich an für die, für unser Beispiel.
Das heißt, wir wollen, hatten wir ja diese Situation,
hier und wir wollen jetzt als Beispiel eben so modifizieren,
dass wir ein Problem haben, wo diese Fairness eine Rolle spielt.
Und die Formulierung sieht jetzt so aus,
wir prüfen diese Formel wie vorher, wobei vorausgesetzt wird,
dass der Benutzer den Ofen immer korrekt bedient.
Dabei interpretieren wir immer korrekt bedient, dass er also unendlich
oft stacht und Klos und Norderror er bedient.
Nicht, dass er beinhaltet, korrekt bedient heißt,
jeder Benutzer wird ja irgendwann mal merken, wenn er diese Schleife durchläuft,
dass das unsinnig ist und zu nichts führt.
Deswegen wird der natürliche Menschenverstand diese Fairness-Regel schon beachten,
dass er dann diese Schleife hier mal verlässt und deswegen kann man vielleicht davon ausgehen,
dass jedes betrachtete Verhalten diese Fairness-Bedingung eben erfüllt.
Ja, nicht und immer interpretieren wir hier mit unendlich oft und korrekt bedienen,
bedienen wir interpretieren wir damit, dass unendlich oft gilt,
Start und Close und Nicht-Error,
dass wir also hier auch mal nach sechs immer wieder kommen
Ja, nicht. Und deswegen setzen wir jetzt unsere Kripke-Struktur mit Endzuständen,
wo, dass der Endzustand darin besteht,
über die Menge der Endzustände, dass diese Formel hier eben gilt.
Und das sind genau die beiden Formeln,
die beiden Zustände sechs und sieben, wo wir also die Bedingung haben,
dass Start gilt und Close-Gilt und Not-Error.
Das heißt, wir betrachten nur das unendliche Verhalten,
wo immer mal wieder die Zustände sechs und sieben durchlaufen werden.
Also das ist jetzt
unsere Endzustandsmenge
Ich meine, wenn wir uns das jetzt nochmal global angucken,
dann sehen wir, dass es dadurch dann unmöglich ist,
dass wir ein Verhalten haben,
was jetzt hier in diesem Teil bleibt,
wo wir nie zu Heat kommen, also sei es,
dass wir hier zwischen zwei und fünf iterieren oder auch mal diese andere Schleife durchlaufen.
Ja, das ist anschaulich soweit,
einsichtig und jetzt müssen wir nur noch sehen,
wie weit unser Formalismus in diesem
eben folgt
Ja, dazu betrachten wir hier wieder Nordtät,
wie wir das vorher schon hatten und jetzt diese Endzustandsmenge.
Und wir betrachten jetzt hier diese Mengen, die wir also vorher hatten,
Show nicht, das war jetzt also die Menge,
wo Notit gilt, die Menge, wo Start gilt,
also es läuft also ganz entsprechend wie vorher, also noch nichts geändert.
So, und nun kamen wir zu dem Punkt,
wo wir unsere strenge Zusammenhangskomponente haben und dachten, sehen wir,
unsere Strenge Zusammenkrankskomponente, die schneidet nicht unsere Endzüchtersmenge.
An der Stelle ist also wichtig,
da zum Beispiel der Zustand 6 eben nicht zu der strengen Zusammenhangskomponente gehört,
weil der eben nicht ins Schleifen enthalten kann bei dem Reduzierten,
mit der reduzierten Krebke-Struktur. Ja,
und daher fällt eben diese Wahl der strengen Zusammenhangskomponente in dieser Konstruktion aus und wir können das eben nicht benutzen und wir,
ja, da steht also nochmal, dass diese,
also kein nicht leeren Durchschnitt hat und in der Konstruktion führt das dann eben dazu,
dass wir Also hier dann die leere Menge haben bei dem EF und bei der Negation dann die gesamte Menge,
wozu dann auch der Anfangszustand 1 gilt.
Das heißt, unter der Fernsehmanting gilt also diese Formel.
Was also daran lag. Also wir haben am Anfang wieder
das EG for Not Heat als die leere Menge gesehen und so weiter.
Ja, hier nochmal die entsprechende Formel,
was wurde bewiesen jetzt unter der Bedingung der Fairness.
Wir hatten gesehen,
das gilt
Beispiel gibt es keines, ja zu sagen,
nur als formale Analogie zu dem entsprechenden,
was wir also dann vorher eben hatten.
Ja, haben wir da noch eine Frage dazu oder gut?
Ja, jetzt sind wir soweit im Prinzip durch,
was das Skript angeht und ich wollte Ihnen dann nochmal was zu realen Model-Checkern zeigen.
Etwas haben wir ja schon mal gesehen mit dem Mord-Tool,
wo wir RTL-Formeln untersucht hatten. Ein anderer Model-Checker ist dieser Model-Cheker SMV
Das geht zurück auf Arbeiten von McMillan. Nicht McMillan,
das hat in seiner Doktorarbeit, zur Neu93, zum ersten Mal überhaupt dieses Model-Checking aufgebracht.
Und später gab es dann dieses sogenannte Symbolik-Model-A-Checking. Und die Erweiterung mit den BDDs,
nicht was zu sagen, die Binary-Decision-Dia-Gramms waren,
hatte ich ja schon mal erwähnt,
was eine enorme Reduzierung der Komplexität durch Vereinfachung der logischen Darstellung
der Gripre-Strukturen und der Funktionen beinhaltet und was überhaupt erst ermöglichte,
also große,
nicht triviale Beispiele zu analysieren
Ja, und da kommt dann auch nochmal die Autorin Clark vor,
also jetzt der ursprüngliche Autor von dem LCTL ist.
So, nicht? Und dieses Nü-SMV, also Symbolik,
Symbolik, was heißt das, Symbolik,
Model-Chaking-Varification und so was heißt das, ne?
Ja, dieses Nü-SMV, das ist sozusagen eine Nach-Implementation,
die jetzt an der Universität von Trient ausgeführt worden ist und
dort auch gepflegt wird.
Und dort können Sie das also auch runterladen und ausprobieren
Und ja, hier steht das nochmal,
das New-SMV ist also in der Re-Implementation und Erweiterung von SMV,
dem ersten Model-Checker, der diese BDDs besucht hat.
New-SMV wurde entwickelt in Form einer offenen Architektur fürs Model-Checking,
die zuverlässig eben benutzt werden kann zur Verifikation von industriellen Entwürfen,
als das Herz oder als der Kern für
betriebliche oder anwendungsbezogene Verifikationswerkzeuge
Ja, und auch als Testmodell für formale Verifikationen,
wie jetzt in der Forschung eben benutzt wird.
Gut, ja, wenn Sie das also benutzen,
dann werden Sie zunächst mal konfrontiert mit einer eigenen Sprache,
in der man die Systeme formulieren kann.
Denn es ist im Normalfall nicht so,
dass die Systeme in Form von Kripkre-Strukturen vorliegen,
sondern der Meutelchecker konstruiert erst diese Kripkre-Struktur
Nicht, aber wenn man das trotzdem hat,
also trotzdem die Kripke-Struktur schon vorliegen hat, kann man das auch benutzen,
sodass wir das Ganze jetzt hier an unserem Mikrowellenofen auch schon mal zeigen können.
Das wäre jetzt also das Denü-SMV-Datei für die Mikrowelle,
wo wir jetzt hier für die einzelnen Zustände die Beschreibungen der Bedingungen eben haben.
Und hier ist es auch wieder so,
dass wenn sozusagen alle atomaren Aussagen nicht gelten,
dann brauchen wir da gar nichts hinzuschreiben,
nämlich um die drei Striche davor, überdeutet immer,
Auskommentierung,
das wird also das Tool nicht beachten,
das ist nur für den Leser
Nach Start, den Ofen, da... Ach so,
ja, und hier sind so die Übergänge beschrieben.
Nicht, das heißt also, das kühlt immer mit dem Next-Start. Also,
wenn wir die Situation haben, diesen Zustand hier,
das wäre ja der Anfangszustand, eins,
dann besteht zum Beispiel eine Wahl für den nächsten Zustand da drin,
wo wir dann in einen anderen Zustand eben kommen.
Nicht, also das Ausrufezeichen bedeutet immer nicht und das kommerzielle und das und und so weiter, sodass also in dieser Weise alle Übergänge einzeln ökodiert sind. So,
und dann kann man am Ende dann zum Beispiel den CTL solche Spezifikationen aufschreiben,
das ist dann wirklich schon der Text und man haben dann hier also diese Notation mit den Buchstaben,
AG start, impliziert, EFL Heat, das,
was wir also gerade auch gemacht haben und bekommt dann die entsprechende Antwort,
das heißt also ein Okay oder ein Not-OK mit Gegenbeispiel,
die haben das dann aber auch auf sich,
obwohl das ursprünglich von Clark, dem Erfinder des CTL,
stammt dann auch auf LTL erweitert, weil das auch häufig benutzt wird,
nicht unserem Unterschied,
wird dann aus dem Spec dann ein ETL-Spec
Und das hier ist ja jetzt dann eine LTL-Formel,
nicht hier zum Beispiel immer Geld, irgendwann mal,
wenn Start und Norderror gilt,
dann ist irgendwann mal ein Geld irgendwann mal ein Heat.
Ja, also dem oben hier entspricht vielleicht am ähnlichsten das hier,
es gilt immer, naja, das ja,
es gilt immer,
dass irgendwann mal Start und irgendwann mal Heat ist,
also dass die Diskussion über die wechselseitige Bedeutung
will ich jetzt hier nicht
nochmal aufziehen
Gut. Ja, und jetzt kommen wir zu einem anderen Beispiel,
nämlich, wo wir jetzt nicht mit der Gripri-Struktur arbeiten,
sondern mit einem Programm,
und das ist also eine Programmsprache oder eine formale Programmsprache,
eine Art Pseudo-Code, der nur dazu da ist,
jetzt solche Gripri-Strukturen, Programmen ähnlich zu beschreiben.
Und wenn ich das jetzt mal symbolisch darstelle,
würde das so aussehen,
wir haben jetzt hier also eine Variable mit zwei Zuständen,
Nee, wir haben zwei Variablen.
S0 und S1. Und die können beide die Werte Non-Critical 3
jung und Kritikel haben. Das erinnert uns schon stark daran,
dass es hier wohl um den wechselseitigen Ausschluss ergibt.
Und dass wir hier diese Zustände dann hier entsprechend bezeichnen können.
Und die einfachste Version für einen wechselseitigen Ausschuss brauchen wir das Ganze
mindestens zweimal. Und deswegen diese beiden Variablen S0 und S1.
Ich habe das hier zu sagen, erstmal nur einmal dargestellt.
Nicht und das Ganze brauchen wir dann auch noch zweimal,
wo wir dann dasselbe mit Null und mit in eins haben
Gut, aber erst nochmal zurück, dass wir,
dann haben wir hier auch diese, Entschuldigung, das war ja da falsch gedrückt.
Dann haben wir hier auch jetzt diese Bulche Variable Turn,
nicht das erinnert uns daran, dass es sich vermutlich um
den Petersen Decker, Dextra-Algorithmus enthandelt mit dieser Turn-Variable.
Und dass wir jetzt hier das Ganze beschreiben,
indem wir jetzt hier so eine generische Prozessdefinition haben.
Wir haben jetzt die Prozesse PR0 und PR1 für diese beiden Prozesse,
wir aber unterschiedlich aufrufen, nicht den einen mit S0 und den anderen mit S1.
Im zweiten Argument steht immer der jeweils andere Prozess,
nicht, weil wir uns auf den beziehen,
dann haben wir die Variable Turn und die hat in dem einen Fall
den Wert Null und dem anderen Fall den Wert 1, ne?
Ja, und nicht, und am Anfang setzen wir uns
hier, setzen wir das Turn auf Null.
Nicht in unserer Kripke-Struktur hatten wir ja zwei Anfangszustände mit 0 und 1,
das ist hier also eingeschränkt auf einen Anfangszugestalt,
sowie auch, ne, hier ist es auch mit,
der Pfeil hier oben wäre dann also Nicht gültig.
So, dann gucken wir uns diese Prozessdefinition an.
Da haben wir also den Modul für diese Prozesse.
Und da haben wir am Anfang, der Anfangszustand ist also ein Non-Critical.
Insofern stimmt das also auch für die einzelnen Prozesse,
ist Non-Critical, der Anfangszustand. Ja,
und die Interpretation ist sozusagen, das erste Argument ist mein Prozess,
auf den ich mich gedanklich stellen kann.
Und das zweite Argument ist der andere Prozess,
nicht und bei dem anderen dann entsprechend gerade umgekehrt
So, und jetzt geht's hier los in den Code hinein.
Also am Anfang sind wir in Non-Kritik, haben wir ja schon gesagt.
Und dann wird das Ganze ein bisschen ungewöhnlich so beschrieben,
dass wir also jetzt hier immer für jede Variable immer den Nachfolgezustand beschreiben.
Das heißt also, der Nachfolgezustand von dem,
oder der Wert, der Variable State Null,
im Nachfolgezustand, der hat jetzt verschiedene Fälle,
wie hier unter dieser Case-Anweisung beschrieben
Und zwar sieht das jetzt folgendermaßen aus, wenn wir im Zustand Non-Critical sind,
dann haben wir hinterher die Möglichkeit, nach Treilen oder neuen Kritikel zu gehen.
Ja, das ist zunächst mal merkwürdigen Food-Programm, nicht,
dass wir eine Anweisung haben, wenn wir in einem Zustand sind,
haben wir hinterher zwei Möglichkeiten.
Nicht, aber das kommt hier der Theorie sehr entgegen,
weil wir hier mal ein praktisches Beispiel haben für Nicht-Determinismus.
Nicht und dieser Nicht-Stimme, nicht Determinismus,
der drückt sich ja hier auch in dem Diagramm aus.
Wenn ich in dem Zustand bin, dann habe ich folgende Möglichkeiten,
Entweder hier weiterzumachen oder hier oben zu bleiben.
Ich finde, das wird ja hier ausgedrückt.
Es geht entweder nach Dreiing oder bleibe in neun Kritiken. Das heißt also,
wenn Sie sich auch schon gefragt haben,
wofür sind denn nicht deterministische Automaten oder Gripgestrukturen da,
wo ja doch alle reale Systeme deterministisch sind,
wenn man keine propabilistischen Systeme betrachtet, dann sieht man hier die Antwort,
nicht dieser Nicht-Determinismus kommt durch Abstraktionszustande.
Nicht, dass ich eigentlich sage, ja,
mein reales System, das wird schon seine Gründe haben,
worum es hier oder hier lang geht,
interessiert mich aber nicht.
Ich betrachte nur die Möglichkeiten,
was passieren kann
Warum jetzt unter den Betrachtungen das Model in Ishaking,
nämlich der Fragen der Spezifikation zum wechselseitigen Ausschluss, was da alles passieren kann.
Und nicht, was jetzt die Details sind, was dazu geführt hat.
Ist das soweit klar? Gut. Ja, und dann
geht es hier weiter. Wenn ich jetzt im Zustand,
wenn jetzt ich im Zustand Trying bin und der andere im
neuen Kritikel, dann darf ich nach Kritikel gehen.
Wenn ich uns jetzt sehen, das entspricht dann gerade der Situation,
wenn ich hier in Trying bin und der andere in Non-Critical
ist,
dann darf ich hier runtergehen
Nicht. Und wenn wir jetzt so sagen, nur diesen Übergang hätten,
dann war ja das in den Beispielen von, von Daiksraden,
sodass wir das dann zu dieser Verklemmung kommen und diese Partei-Break-Rule bestand ja darin,
dass sich auch noch die andere Möglichkeit zu haben habe,
mit der Turn-Variable.
Ich interessiere hier in der nächsten Zeile auch wieder unter derselben Bedingung,
wenn ich im Zustand Dreiing bin, also nee,
wenn ich im Zustand teiligen bin und der andere auch,
das war ja die sozusagen die Verklemmungssituation und der Wert meiner Turn-Variable
gleich Turn 0 ist,
was ich hier oben entsprechend übergeben wurde,
dann darf ich
auch nach Kritik übergehen
Ja, nicht? Und dann haben wir hier unten noch
den Übergang von Kritikal. Da habe ich jetzt die Möglichkeit,
jetzt hier in Kritikal zu bleiben oder eben wieder zurück nach Nordkritikal.
Und hier habe ich jetzt auch wieder diese Schleife.
Und das beinhaltet natürlich, dass wir in dieser Abstraktion nicht wissen,
wie lange wir in diesem kritischen Abschnitt bleiben.
Es gibt sozusagen die beiden Möglichkeiten,
ich bleibe drin oder gehe raus,
was jetzt hier unten auch wieder eine Form des Nicht-Determinismus
eben darstellt
So, und dann brauchen wir dasselbe noch für die Variable Turn.
Die Variable Turn ist folgendermaßen jetzt definiert. Wenn ich,
wenn Turn gleich Turn 0 ist,
wie hier oben spezifiziert, und ich bin in Kritikal,
dann invertiere ich, das mache ich not turn.
Nicht was hier in diesem Übergang entspricht,
wo die Variable Turn dann umgesetzt wird.
Das habe ich eben nicht erwähnt. Dann gäbe es hier
immer noch so einen Default-Fall, wenn das alles nicht gelten sollte.
Dann komme ich jetzt dann auf diese untere Zeile
Ja, und dann schauen wir mal uns an,
was wir denn jetzt für Anforderungen erstellen, jetzt beim Ilmaudel-Checking.
Nicht zum Beispiel könnten wir folgende CTL-Spezifikation untersuchen. Es gibt
einen Pfad, sodass wir das S0-Critical ist und das S1-Critical.
Gilt das jetzt? Also nehmen wir an,
das Beispiel ist so korrekt,
wie wir das jetzt ja auch ja früher gesehen haben,
das ist im Grunde klar, dass das Beispiel ist,
gilt das oder gilt das dann nicht?
Ja, bitte
Ja. Ja, ich sag nochmal laut,
also die haben da den schlauen Vorbehalt gemacht,
wenn das Beispiel richtig ist, dann sollte das nicht gelten,
weil ja im richtigen Beispiel darf es ja keinen Pfad geben,
der beide Prozesse nach Kritik führt.
Damit ist auch schon die nächste Frage, beantworte,
die ich stellen wollte, ist das gut oder schlecht?
Ja, dieses Nein ist natürlich gut. Das heißt also,
man kann diese Fragen natürlich auch negativ stellen. Das heißt also,
bei unserem Modelchecking sollte rauskommen, das gilt nicht,
aber wir sind zufrieden, dass erfüllt, also unsere Erwartung.
Ja, das sind also auch diese Beispiele,
wie Sie in dem, wenn Sie also das S,
das Nü-SMV herunterladen und da ist jetzt also das auch unter Mutex 1,
finden Sie das und da sind ja auch die Spezifikationen drin,
die können Sie also sofort da eben ausprobieren.
So, dann haben wir noch sowas hier. Das bedeutet ja,
es gilt immer, wenn ich in Dreiing bin,
dann komme ich irgendwann mal nach Kritikal.
Sollte das gelten
Also wenn das Beispiel richtig ist, nehmen wir ein,
das ist, ja bitte. Ja, das sind ja
genau die beiden Bedingungen, die ich auch hatte.
Im einfachsten Fall soll der Kritiker ein wechselseitiger Ausschluss korrekt sein.
Erstens, wenn nie der kritische Abschnitt verletzt wird,
was die erste Zeile wäre. Und zweitens,
wenn ich mich anmelde, das ist hier jetzt durch das Drei gegeben,
dann komme ich auch mal rein.
Das sollte auch gelten. So, und jetzt kommen
noch zwei Zeilen, die nicht zu diesem Standardananwendungen kommen
Nee, das war es noch nicht, sondern das war jetzt
die entsprechende Zeile für den anderen Prozess, soll das auch sein.
Aber jetzt kommt noch was, was wir nicht so kennen,
da sehen Sie, ich habe das nur mal gelassen,
weil das war auch ein Beispiel für Antil ist und das ist ja
ein bisschen länger und das will ich hier auch nicht aufschlüsseln,
sondern nur verraten, was das bedeutet.
Das bedeutet folgendes, ich frage nach, ob es so ist,
dass wir, wenn der eine Kritik,
eine Prozesse im kritischen Abschnitt ist, dass es dann notwendig ist,
dass dann nach der andere reingeht, dass die also immer wechselnd reingehen.
Nicht, das hängt damit zusammen, dass es manche Lösungen gibt,
die diese Bedingung erfüllen und das ist natürlich eine Lösung,
die Nicht gewollt ist, denn das würde ja bedeuten,
wenn der eine zum Beispiel nie in den kritischen Abschnitt will,
dass dann der andere blockiert wird, weil er immer darauf wartet,
dass der erste reingeht.
Das heißt also, bei einer fehlerhaften Lösung des Problems könnte das
rauskommen und das könnte so ein bisschen auch so sehen,
es gilt immer, wenn ich in, wenn S0 in Kritik bin,
dann bleibt er solange er kritisch, bis ich,
bis er nicht mehr kritisch ist und der andere dann kritisch wird.
Also zweimal dieses Antil. Und das sollte jetzt, wenn das korrekt ist,
nicht dieser Peter dass es ein Algorithmus ist, sollte das nicht gelten.
Und da sind wir auch mit zufrieden und nicht und dasselbe
dann auch für den symmetrischen Fall.
Gut, und das wollte ich Ihnen jetzt mal vorführen,
wie das Ganze geht. Das heißt,
das Ganze spielt sich jetzt in Windows ab und ich habe hier sozusagen dieses Terminal,
was da, glaube ich, Eingabefenster heißt,
das ist nicht erstmal meine Maus finden.
Habe ich da schon eingegeben, da haben wir hier also
dieses Nü-SMV geladen und führen das aus.
Und hier haben wir den Dateipfad zu meiner Datei Modeck 2
heißt die jetzt hier. Und wenn ich jetzt da meinen
Return drücke, dann sollte der das auch tun.
Und dann gehen wir mal am Anfang und gucken,
was da alles passiert ist.
Weiß jemand, wie man das größer machen kann in Windows?
Oder ist das groß genau? Weiß keiner, aber dann machen
wir mal damit. Also, Das hier interessiert uns jetzt hier.
Hier geht es los, hier mit der Spezifikation,
dass wir irgendwann mal in den kritischen Abschnitt,
das weiter im kritischen Abschnitt gehen.
Naja, und das ist also, es ist also falsch.
Und da gibt es so ein Gegenbeispiel,
was jetzt hier nicht weiter interessiert, weil das ja da viele Möglichkeiten gibt.
Da sind wir erstmal damit zufrieden, dass das also ist.
So, jetzt ist aber das Nächste, das ist der
merkwürdige Punkt. Hier bei dieser Spezifikation hier,
da steht ja für alle Pfade gilt, Wenn wir von Intralienk sind,
dann kommen wir irgendwann mal nach Kritikel und da steht, das ist Falls.
Und das ist ja nicht das, was wir erwartet haben.
Und dann gibt es hier also auch ein Gegenbeispiel,
was da eine, was da zu einer,
einem unendlichen Pfad führt, der also dadurch gezeichnet wird,
dass da irgendwas mit Loopstarts hier beginnt und wo irgendwie so eine Schleife betrachtet wird.
Und das ist also eine Schleife, die wir unseren gleich
noch überlegen können, was das denn der Fall ist.
Ja, und dazu gehe ich jetzt jetzt nochmal zurück,
dass wir uns das vielleicht an diesem Beispiel überlegen, wo dran das eben liegen könnte.
Also, da haben wir jetzt jetzt nochmal unsere grafische Darstellung.
Also, dieser Fehler ist aufgetreten an der Stelle,
wo wir hier in dem Dreiing gewesen sind.
Jetzt habe ich jetzt hier nicht die Gripri-Struktur aufgemalt,
aber die haben sie ja vielleicht noch in Erinnerung,
die sah ja genauso aus, also sie sieht ja im Prinzip genauso aus,
wie wir das große Bild beim wechselseitigen Ausschluss,
Und da hatten wir ja auch den Fall,
dass wir vor, bevor wir in den kritischen Abschnitt gingen,
permanent eine Schleife durchlaufen haben.
Und erinnern sich noch, woran das lag?
Ja, bitte? Ja, das ist der Prozess,
bei dem wir darauf waren. Genau, und er sagt nochmal,
wir brauchen nochmal die Fairness-Anahme, dass jeder, der Prozess,
der das kann, auch einen Schritt machen.
Und die habe ich jetzt gemeinerweise in diesem Beispiel ausgeschaltet und ihnen nicht gezeigt. So,
das heißt also, wenn wir Jetzt noch mal hier hingucken,
da habe ich da unten was ausgeschaltet und wenn ich das einschalte,
heißt das, in der Prozessdefinition, da steht Fairness Running.
Und das ist nichts anderes, als die Fairness-Bedingungen, die sagen,
dass jeder Prozess, der permanent kann, es auch tun soll,
was wir ja eben noch mal in der Wiederholung als schwache Fairness kennengelernt haben.
Und das Bild war ja Folgendes,
also wenn das der eine Prozess ist und der andere ist,
dann steht der davor und wartet,
dass der andere einen Schritt macht und der andere arbeitet immer weiter,
zumindest in unseren gedachten Fahrten in der Kripke-Struktur und der andere kann diesen Schritt eben nicht machen.
Und mit dieser Und mit diesem Running wird also diese schwache Fairness in die Kripke-Struktur,
in die Analyse hineingebracht, sei es durch diesen Trick,
den wir eben für CTL eben besprochen haben.
So, das war das, aber dann habe ich noch
was anderes ausgeblendet, was in dem Kasten da steht.
Und wenn ich den mal aufblende, da steht er nun explizit Fairness,
und da steht not S0, gleich Kritikel und Nord-S1-Reich-Kritikel,
was könnte denn das bedeuten?
Ja, sieh bitte, oder die Marise und Enchip
dürfen sie, darf er mal, naja,
sieh genau,
Ja, und warum ist das denn, also ich sag nochmal,
der Antwort ist, dass er nicht immer in Kritikal drin bleibt.
Warum ist das sinnvoll? Dass du faul dann? Ja,
also der muss ja auch mal rausgehen, damit der andere
rein kann. Dann kann die Bedingung dadurch verletzt bleiben,
dass er immer drin ist. Und das ist inhaltlich sinnvoll,
weil man das für die realen Systeme auch gewährleisten muss.
Wenn wir ein System haben, was immer im kritischen Abschnitt drin bleibt,
dann haben wir keine Chance, dass wir diese Spezifikation dann eben erfüllen.
Und das wird dann also hier durch diese Fairness-Bedingungen gemacht.
Und das kann man eben mittelbar dann durch diese Endzustände ausdrücken,
dass wir sagt, wir nehmen hier die Anfangszustände als Endzustände.
Das heißt, wir betrachten nur Abläufe, die unendlich oft auch wieder hier oben anlangen.
Das heißt, nicht hier in dieser Schleife bleiben.
Das ist also die ähnliche Geschichte, wie wir das beim Alternierbild-Protokoll eben hatten.
So, das ist also die starke Fairness, die wir hier unten im Recht hatten. Ja,
gucken wir mal,
wenn wir, wie das dann eben jetzt aussieht,
wenn wir das korrigieren, Das war jetzt die Situation,
wo wir, also ich habe mir das damit,
dass ich hier nicht so viel Tipperei habe,
hier diese Pfade mal hier aufgeschrieben,
das war jetzt hier dieses Motex 1. Also das hier,
so das kopiere ich mir jetzt mal und gehe jetzt hier
rein und trage das da ein
So, da bin ich jetzt bei Mootakes 1. Und wenn
ich jetzt Return mache, dann sehen wir, hier,
das war ja der entscheidende Punkt, den wir betrachtet haben,
dass wir einen kritischen Abschnitt reinkommen, das Geld jetzt.
Und das Opere sollte ja nicht gelten. Und das Untere
war das mit dem ständigen Wechsel. Das war ja auch
gut, dass es nicht gelten soll. Also wie gesagt,
unter Motex 1 können Sie das in diesem Beispiel dann nachvollziehen,
wenn Sie sich das selber mal laden.
Okay, dann machen wir jetzt mal weiter
Ja, dann wollte ich jetzt noch mal,
na vielleicht mache ich noch mal was anderes, was ich auch noch zeigen wollte.
Und zwar, wie das Alternierbeet-Protokoll jetzt in diesem Tool hier aussieht.
Das habe ich jetzt hier an dieser Stelle. So,
das ist jetzt die Beschreibung des Alternierbeet-Protokolls, wie das in dem Tool da mitgeliefert wird.
Da sehen wir hier oben, Frauen andauernd, Das bedeutet,
das ist alles Kommentar. Da wird also beschrieben,
es gibt einen Sender, einen Empfänger,
es gibt einen Modul, Sender, Sendertouriseiver,
also S-to-L und R2S. Und dann ist hier noch in so sozusagen die Kommunikationsstruktur aufgemalt.
Das heißt, in dem Beispiel ist es so,
dass wir extrae Funktionseinheiten für die Kanäle haben.
Wir hatten ja zur Kompression unseres Beispieles gesagt, ja,
der Fehler, den Fehler beschreiben wir so,
in dem der Sender gleichen Fehler abschickt.
Nicht um das realistischer zu machen,
kann man auch noch sagen, der Sender,
der schickt hier die Nachricht ab und dann hier im Kanal tritt
der Fehler auf und dann wird manchmal der Fehler hier abgeliefert.
Und dann wird hier also beschrieben, wie das Ganze
eben funktioniert
Und so weiter und so fort. Ja,
und dann kommt ja immer noch, immer noch jetzt,
ach ja, das ist auch noch interessant.
Das ist jetzt sozusagen eine Beschreibung des Senders,
sind immer noch auskommentiert. Und das kann man jetzt so
ein bisschen als Transitionssystem oder als Automat auffassen,
wo das hier also die Zustände sind.
Und die der Chan-de-Bud-Synchronisation dann mit den anderen Modeln kommunizieren,
das ist im Grunde so eine ähnliche Darstellung,
wie wir
das Alternativ-Bit-Protokoll mit Transitionssystemen beschrieben haben
So, das geht dann so, wann haben wir also deinen Empfänger,
entsprechend und hier die Kanäle, die Kanäle sind also nur einfache Schleifen,
nämlich indem sie entweder das Datum weiterliefern.
Nicht, das sehen wir auch, typisch Fürth alterniert,
Wildprotokoll haben wir das Datum, Datum und das Alternating Bit,
was also mal 0 oder mal 1 ist oder eben,
dass wir hier die Fehler, den Fehler,
die Fehlermeldung haben.
Für einen anderen Kanal auch. So,
nur geht's richtig los. Da haben wir den Modulsender.
Und das ist im selben Stil gemacht,
wie wir das eben hatten
Ich wollte jetzt mal aufpassen, wo wir auf Spezifikationen treffen.
Da nicht, da haben wir zumindest die Fairness auch drin,
die brauchen wir ja für den Kanal, für die Fehlerhaftigkeit des Kanals.
Nee, da brauchen wir ja die richtige Fährenmoment. Richtige Fährte,
mal sehen, ob die auch noch kommt, die stark gefährden ist.
Training brauchen wir für andere Zwecke. Da,
das ist die Fairness, die den fehlerhaften Kanal steuert,
dass da mal immer sozusagen die Acnoledge dann auch immer wechseln sollen,
das wird auf diese Art und Weise dargestellt.
Geht immer noch weiter
Auch für den anderen Kanal. Und hier habe ich die einzige Spezifikation ist die,
die sagt, es gilt immer,
wenn irgendwann mal der Sender ein Get macht, dann,
also vom Benutzer ein Datum aufnimmt, neben von wenn,
ist da gar keine Rede, sondern ein und,
sondern es gilt unendlich oft,
dass der Sender an Get macht und der Empfänger abliefert.
Also in der Form formuliert, dass also wir da eine
Verklemmung ausgeschlossen wird, dass unendlich oft dieser Vorgang eben weiterläuft.
Nicht, was also ausschließt, dass beispielsweise immer nur ein
Fehler übermittelt wird. Nicht, dass das Einzige,
was massiert, spezifiziert wird und für den Zerklang das auch.
Und wenn ich das jetzt laufen lassen würde,
dann wäre erst mal ein, zwei Minuten Pause und man könnte denken,
das System ist abgestürzt, aber dann kommt doch die Antwort.
Das heißt, für dieses Beispiel dauert das hier auf meinem
Rechner schon etwas Zeit, worin man sieht,
dass das also durchaus Zeit eben verbraucht
Okay, das wolltet ihr noch mal zeigen und dann geht es jetzt folgendermaßen weiter.
Ein anderes Beispiel für einen Model-Checker ist der Model-Checker Spin,
der ja in diesem Benchmark von dem Mord schon mal erwähnt worden ist.
Und da sehen Sie die Programms benutzen. Wir haben nämlich hier
sozusagen zwei Prozesse und wir haben hier so eine Du-Ott-Schleife.
Haben Sie das woanders schon mal gesehen,
eine sogenannte Durchleife, was das ist?
Ich meine jetzt
nicht Vortragen
Das gibt es eben in Spezifikationen jetzt schon mal.
Und das sieht folgendermaßen aus. Nächster schreibt man also hier
ein Du und hier hätte man irgendwie eine Bedingung B1 und hier
hätte man irgendwie eine Anweisung eins und dann kommen da die Separatoren,
nimmt man manchmal so einen Kasten,
weil ich den mal hier drunter und dann kommt ein B2
und dann kommt eine Anweisung Zwei.
Und das endlich oft. Ich mache das jetzt mal mit dreien.
P3. Anweisung 3. Und dann käme die schließende Klammer mit dem Ort.
Und die Semantik davon ist, das ist eine Art Schleife.
Und der Befehlzähler geht also hier herein und führt eines
dieser sogenannten Guarded Commands aus. Guarded Commands bedeutet,
wir haben eine Schutzbedingung, ein Guard und ein Anweisungsteil und
ein Guarded Command darf ausgeführt werden,
wenn die Schulzbedingungen gilt
Nicht ohne in der abstrakten Form, ist nicht gesagt,
in welcher Reihenfolge das gemacht wird. Das heißt,
wir haben da auch schon die Möglichkeit des Nicht-Terminismus drin.
Und in manchen Sprachen, die das benutzen,
die arbeiten das von oben nach unten ab.
Sehen Sie jetzt, wenn wir das verstanden haben,
wie da die normale Waldschleife drin zu formulieren würde, wäre?
Nicht in der normalen Waldschleife hätte ich hier ein B1 und
ein B2, wobei das B2 not B1 wäre.
Und hier eine triviale Anweisung. Und da würde man aus der Schleife
dann eben herausspringen. Vielleicht haben die das deswegen nicht lösen können,
weil eine wichtige Dinge ich eben gerade vergessen hatte.
Wenn keiner dieser Schutzbedingungen erfüllt ist, dann wird die
Schleife verlassen
So, das ist jetzt hier in unserem Beispiel aber in trivialerweise eingesetzt,
weil wir hier bei diesem Duo gar kein Guard drin haben.
Das heißt, diese Duotschleife ist nur so eine Endlosschleife,
wie wir auch in unserem Beispiel hatten.
Da hatten wir manchmal geschrieben, Waltruh.
Ja, also das ist sozusagen die Endlosschleife. Ja,
und wenn Sie hier Want-Q sehen,
dann klingelt es bei Ihnen auch schon, nämlich,
dass es dasselbe Want-Q, was wir in unserem Beispiel vom wechselseitigen Ausschluss drin hatten.
Und dann sehen Sie hier so was wie,
wo die das Want
mal wieder zurückrückgesetzt wird
Das ist nämlich nichts anderes als eine Codierung, dieses wechselseitigen Ausschuss nach Deixtra. Sie erinnern sich,
das war also die Situation, wo wir dem anderen,
also sagen auf die,
darauf achten, dass der andere mal seinen Wunsch zurückzieht,
wo das aber im unglücklichen Fall passieren kann,
dass sie das simultan machen und wir dadurch so ein Live-Log bekommen,
was de facto wenig Verklemmung aussieht,
aber nicht die Inaktivität des Systems bedeutet,
was wir auch als After-You, After-You-Effekt Effekt bezeichnen.
Ja, und ich habe das jetzt mal rausgegriffen aus dem Buch,
weil das jetzt sozusagen eine andere Aufgabe ist als das,
was wir bisher betrachtet hatten, nämlich solche Live-Logs heraus zu finden.
Und in dem Buch wird dann beschrieben, dass dann,
wenn also zum Beispiel ein Ziel nicht erreicht wird,
die Analyse, also so eine Trace dann ausgegeben wird,
die unten grafisch dargestellt ist, die also bedeutet,
dass wir dort immer eine solche Schleife durchlaufen,
was diesem After-You-After-You-Effekt entspricht, was wir eben schon kennengelernt haben.
Wir sehen, wenn man diese alten Klamotten anguckt,
nämlich wie dieses Deixtra-Beispiel, dann hat das nicht nur den Fachteil,
dass man die alten Klamotten kennt,
sondern es hat auch den Vorteil, dass man neue Sachen versteht,
weil andere die alten Klamotten als Beispiele benutzen,
wie in diesem neueren Buch und man sich dann gleich zu Hause füllt.
Also da war eben noch eine Beschreibung unten, was stand da,
da stand Ja, das ist also eine Form von Starvation.
Starvation ist ein anderer Begriff für Verklemmung. Nicht,
sie werden in dem nächsten Kapitel über Petrinette das Beispiel auch von Dikestar kennenlernen,
über die fünf Philosophen, wo sie vielleicht schon mal,
wo sie, dass sie vielleicht schon mal von gehört haben.
Da geht es darum, dass irgendwelche Philosophen in einem Tisch
sitzen und irgendeine Speise essen.
Und jetzt können sich zwei Philosophen beispielsweise verschwören und die Speisen
und die Betriebsmittel so benutzen, dass der andere nicht mehr
zum Essen kommt
Und der würde dann verhungern. Und das ist also eine
Form von Nicht-Fairness und Fairness. Und aus diesem Grund hat
sich für Unfairness auch der Begriff im Englischen von Starvasion,
also verhungern, durchgesetzt.
Und das wäre hier auch bei diesem Live-Log so ungefähr eben der Fall.
Ja, und ich finde, das kann man dann irgendwie
durch Tricks, dann wird hier beschrieben, aussetzen.
Und hier ist auch nochmal dieser Wieg-Fairness erwähnt.
Das soll jetzt hier nur nochmal einen Hinweis auf andere Model-Shaker
dann sein
Gut, dann geht es also, wie gesagt,
in der nächsten Woche weiter mit dem neuen Thema Petrinetze.
Und zwar in Stellingen und gucken Sie nochmal genauer auf die FGI-2-Seite,
dass Sie dann zielgerichtet und exakt dann den richtigen Hörsaal erreichen.
Das wird dann Herr Molt weitermachen. Und wir sehen wir,
wenn alles so läuft, hier geplant,
dann am 7. Januar wieder,
wo ich dann die Prozessalgebra dann vorstellen werde.
Und ich dafür danke mich für heute,
dann erstmal,
okay,