Wollen wir uns jetzt damit beschäftigen, wie das aussieht,
wann zwei Systeme äqualent sind?
Wir kennen bislang einen Äquivalenzbegriff schon bei diversen Automatenmodellen.
Das können wir ganz analog auch bei Traditionssystemen gemacht.
Wir können zwei von der Äquivalenz unterscheiden. Nämlich,
wir haben zwei Konzepte, Aktionsfolgen, zu definieren.
Das eine war Folgen-Äquivalenz, das andere Akzeptanz-Äquivalenz, je nachdem,
wann ich Endzustände in die Betrachtung zuziehe oder nicht
Ich habe da mal rumgefummelt. Also das Mikro hier
ist auf Anschlag. Mehrbeziehung. Und die Begriffe,
die wir bei Transitionssystemen beispielsweise von endlichen Automaten aus verallgemeinern können,
der erste ist erst mal Folgen-Iqualenz, weil betrachten wir einfach die Folgen,
die Aktionsfolgen sind ein solches Transitionssystem, realisieren kann.
Und zwei Transitionssysteme, TAS 1 und TS2, die wollen wir folgen
äquivalent nennen, wenn sie die gleichen Mengen von Aktionsfolgen haben.
Und das Intolenzzeichen ist jetzt die geschwungene Linie mit dem Inletzt
AS der Aktionssequenzen. Also zwei Systems, Aktionssequenzen,
äquivalent, wenn ihre Aktionssequenzenmengen gleich sind. Und das,
was wir schon kennen, Terminal oder Akzeptanz äquivalent zu sein,
bedeutet, für zwei Systeme die gleiche Sprache zu akzeptieren.
Also genau das Gleiche, was wir bei endlichen Automaten
schon mal hatten. Wir nennen zwar endliche Automaten äquivalent,
wenn sie die gleiche Sprache akzeptieren
Und das ist die Frage,
das ist für formale Sprachen bestimmt ein absolut ausreichender Äquivalenzbegriff.
Denn da geht es mir ja nur um die akzeptierte Sprache.
Aber wir wollen ja mit solchen Systemen, die wir in
dieser Veranstaltung betrachten, gut aus reale Systeme betrachten.
Die haben nicht nur die Aufgabe, Sprachen zu charakterisieren in
endlicher Form, sondern sie sollen ein Verhalten charakterisieren.
Und deswegen kommen wir zu der leisen Ahnung,
dass dieser Begriff vielleicht nicht reichen könnte und warum er nicht reichen kann.
Das wollen wir uns anhand eines Beispiels mal anschauen.
In diesem Beispiel sehen wir wieder, unseren guten alten Automaten,
Café und Tee produziert er. Und wir sehen,
unten dargestellt, zwei Transitionssysteme. Auf der linken Seite,
das alte Transitionssysteme, das wir schon mal hatten,
wo ich nach dem Einwurf eines Euros die Möglichkeit habe,
mich für Tee oder Café zu entscheiden.
Und ich bekomme dann entsprechend meine Auswahl, das entsprechende Getränk gekocht.
Und das wird dann noch eingetreten. Variante B auf der rechten Seite zeigt ein System,
bei dem ich, wie auch immer das jetzt sich darstellt,
technisch und für den Benutzer, einen Euro einwerfe,
aber mit dem Einwurf schon verbunden ist,
was ich gerne hätte.
Vielleicht habe ich zwei Münzschlitze, einen Münzschlitz,
den ich nur für Kaffee nehme und einen Münzschlitz,
den ich nur für das andere Getränk nehme.
Wir haben also jetzt im Transitionssystem B die Variante 2 dargestellt,
wo ich offensichtlich so etwas habe wie zwei verschiedene Münzschlitze.
Ich werfe eine Münze ein und mit dem Münzeinwurf ist schon festgelegt,
dass ich Tee haben möchte.
Beispielsweise, ich gehe also auf den linken Ast oder ist
es festgelegt, dass ich alternativ Kaffee haben möchte
Wenn wir jetzt diese beiden Systeme vergleicht, wird man feststellen,
dass sie bezüglich von Akzeptanzinqualenz nicht zu unterscheiden sind.
Das liegt schlichtweg daran, dass beide nur zwei Formen
von Teilworten akzeptieren können, nämlich 1 Euro T,
Teekochen T einfüllen oder 1 Euro Kaffee, Kaffee kochen einfüllen.
Und dabei ist es unerheblich, ob ich diesen 1-Euro-Aktion,
ob ich die an zwei Kanten stattfindet,
wie auf der rechten Seite,
an einer Kante.
Das führt beides zu den gleichen Folgen
Das heißt, eine Folge, links und rechts, das macht keinen Unterschied.
Führt mich beides wieder zurück zum Startzustand, der auch der Endzustand sein soll.
Also stellen wir fest, wir haben zwei Systeme,
die wir eigentlich gern unterscheiden möchten, weil intuitiv gesehen unterschiedliches Verhalten zeigen.
Wenn Sie aber intuitiv zu unterscheiden sind,
folgen oder Akzeptanz Äquivalent sie nicht unterscheiden kann,
weil sie sagt, es sind gleiche Systeme,
dann haben wir offensichtlich ein Äquivalenzbegriff, der nicht fein genug ist,
um diese beiden Automaten oder Transitionssysteme zu unterscheiden.
Und um das nochmal festzumachen, wo das Problem ist,
wenn wir uns hier mal den mittleren Zustand herauspicken,
wenn der Automat A im Zustand S1 ist.
Nach einem Euro-Einwurf, dann ist sinnvoll eigentlich nur möglich,
dass ich den Automaten B im Zustand R1 oder R6 habe.
Nehmen wir also, wie hier angedeutet, R1 mal an.
Das könnte gewissermaßen der korrespondierende Zustand sein
Der dem auf der rechten Seite entspricht. Nun können wir folgendes überlegen,
auf der linken Seite habe ich jetzt die Möglichkeit, Kaffee auszuwählen.
Und diese Möglichkeit habe ich im rechten System nicht mehr.
Genau diese Nichtmöglichkeit zu haben, zeigt es also,
dass dieser Zustand S1 auf der linken Seite nicht richtig gut
wiedergegeben wird vom Zustand R1 auf der rechten Seite.
Und würden wir das Ganze probieren mit dem Zustand R6 auf der anderen Seite,
bekommen wir das gleiche Problem analog,
denn würden wir uns im linken System für den Tee entscheiden,
wer auch der Zustand R6 nicht in der Lage,
das zu simulieren.
Gut, also der Begriff des Verhaltensimulierens ist für uns interessant.
Wir fragen es also nicht, gibt es gleiche Mengen von Aktionssequenzen,
sondern kann ich Verhalten simulieren? Simulierbarkeit heißt grob, haben Sie
dasselbe Verhalten, simulieren Sie einander? Und das wird besonders deutlich,
wenn ich einen Ausfall eines Systems betrachte, also davon ausgehe,
dass es mir nicht mehr möglich ist,
in den Zustand links unten zu belangen
Beispielsweise, weil die Tee-Taste klemmt. Und bei diesem Ausfall ist es dann eben so,
dass der linke Automat immer noch die Möglichkeit hat,
wenigstens auf die Kaffeetasse anzuspringen,
während der rechte Automat gar nichts mehr tun kann.
Also an dieser Stelle verklemmt, sein Deadlock, das System kann nicht weiterarbeiten.
Und das ist ein ziemlich deutlicher Hinweis bei einem System,
nämlich dem System B, geht gar nichts mehr.
Und das andere System kann noch arbeiten,
wenn es vielleicht auch nur noch
Kaffee produzieren kann
So, das ist im Prinzip das, was uns umtreibt.
Dieses beiden Systeme, die wir jetzt nicht äquivalent ansehen wollen,
dafür wollen wir einen Begriff haben, der sagt,
die beiden sind nicht äquivalent, aber sind,
vielleicht sind zwei andere Systeme, die einander wirklich simulieren können,
äquivalent.
Und da gibt es eine lange Tradition, so eine Verhaltenssimulation zu definieren.
Und das ist das Konzept der B-Simulation. Wie Simulation meint,
das eine System kann das andere simulieren und umgekehrt?
Die Vorsilbe B deutet an, dass die Simulierbarkeit in
beiden Richtungen funktioniert
System, A, kein System, B simulieren und B
, kann A simulieren. Das führt dazu,
dass in dieser Definition alle Teilaspekte doppelt vorkommen,
nämlich einmal aus der Sicht des Ein und Einmal aus der Sicht des anderen Systems.
Gut, wir gehen davon aus, erst mal abstrakt,
was sagt die Definition?
Wir haben zwei Transitionssysteme mit TS1 und TS2 gegeben mit den Standardkomponenten,
mit Endzuständen und das Ganze hat die gleiche Aktionsgrundmenge A.
Also spricht schon mal
einer Simulierbarkeit nichts entgegen
Es ist völlig klar, wenn der eine eine Aktion hat,
die der andere gar nicht hat,
dann wird im Zweifelsfall genau bei dieser Aktion A,
die nicht vorhanden ist, etwas haken.
Also machen wir uns das Leben einfacher. Das, was
sowieso im Zweifelsfall passieren wird, beide haben die gleichen Aktionen.
So, und B-Simulationen zwischen zwei Systemen, TS1 und TS2
ist jetzt eine Relation. Eine binäre Relation B auf den Zuständen,
also eine Teilmenge von S1-Kreuz S2. Und damit das Verhalten simuliert wird,
Um das zu definieren,
da geben wir jetzt drei Kriterien an A,
B und C. Machen wir das erstmal in dieser formalen Schreibweise und gucken uns dann gleich das Beispiel dazu an.
Bedingung A sagt, für jeden Startzustand ist Null des ersten Systems gibt es einen Startzustand
R0 aus dem zweiten System. Und diese beiden sind Bisimilar zueinander.
Also salopp gesprochen, wenn zwei Zustände B-Similar zueinander sind,
dann kann ich in diesen Zuständen das Gleiche machen.
Und zwar jetzt, und für alle Zukunft auch.
Das heißt, S-0 und R-0 kann ich eigentlich nicht unterscheiden.
Das ist die Quintessenz. Denn wenn Sie
das gleiche Verhalten jetzt und für alle Zukunft zeigen,
ist es mir nicht möglich zu sagen, dass ich irgendwie einen Unterschied hätte.
Die zweite Zeile sagt das genau umgekehrt für jeden Zustand R-0
des zweiten Systems. Es gibt es einen Staatszustand,
S-0 im ersten System, sodass die beiden wie Simular sind.
Also jeder Staatszustand im einen hat ein Verhaltensgleichen Partner im
anderen System
So, das heißt, am Anfang ist da etwas Bisimilares.
Und jetzt hätte ich gern folgendes, das habe ich noch nicht formuliert,
das ist jetzt der zweite wichtige Punkt, der sagt,
angenommen, ich habe schon zwei bisimulare Knoten,
nämlich S-1, R-1, die sollen verhaltensgleich sein.
Ja, was heißt das eigentlich? Ja, das heißt folgendes,
wenn ich eine Aktion A im ersten System machen kann,
die mich vom Zustand S-1 zum Zustand S-2 führt.
Das heißt, das erste System kann
eine A-Aktion ausführen
Denn will ich, dass das zweite System das auch kann?
Also sage ich, naja,
da möchte ich einen Zustand R2 haben und R2 ist ein Zustand,
den ich von R1 mit einer Aktion erhalte.
Und ich gelange dann also jeweils im Zustand S2 beziehungsweise R2.
Und wenn ich das gemacht habe, möchte ich gerne in zwei Zuständen sein,
die wieder zueinander Äquivalenz sind. Wir haben also seine Situation,
so wie sie grafisch Dieses Quadratrechts oben andeutet, wir gehen an,
wir haben schon zwei äquivalente Zustände, S1 und R1,
was müssen die erfüllen, damit sie wirklich äquivalent sind?
Sie müssen erfüllen für jede Aktion A,
die das eine System machen kann,
nämlich von S1 zu S2 zu gehen, kann das zweite System da mitmachen.
Ich kann da mithalten, das heißt, es gibt ein solches R2,
das deutet man in solchen Diagrammen immer als Ausrufezeichen an,
das heißt,
wenn ein Ausrufezeichen steht,
dann soll das existieren
Und dieses R2 muss dann wieder Verhaltensäquivalent sein, also Bisimilar.
Das ist also gewissermaßen eine rekursive Definition. Damit zwei Zustände,
S1 und R1, B-Similar sein können,
müssen sie nach jeder A-Aktion zu etwas führen, zu einem Pärchen S2R2,
von dem ich schon weiß, dass es B-Similar ist.
Naja, und wie kann ich, bislang weiß ich überhaupt noch nicht,
wann sind zwei Knoten Bisimilar? Ich habe nur gewisse Forderungen gestellt,
falls sie überhaupt per Magie so eine B-Simulation mir gut geraten habe,
dann weiß ich, Die Bedingung A und B müssen erfüllt sein.
In der zweiten Zeile steht das Ganze nochmal andersrum,
wenn das zweite System ein Übergang von R1 nach R2 machen kann,
dann kann das erste das auch,
in dem es von S1 nach S2 kommt.
Und die resultieren in Folgezustände S2 R2 sind auch wieder Bisimüller.
Was ist denn das untere Diagramm andeutet? Bislang ist das aber rein deklarativ,
wir wissen überhaupt noch nicht, wie wir das verankern.
Wir sagen, wir verschieben gewissermaßen den schwarzen Peter auf später.
Wir sagen nämlich, naja, ich weiß nicht,
ob S1 R1 Bisimüller sind
Aber ich frage mal, ob die Folgezustände bei Simular sind.
Und so hangelt man sich immer weiter. Wo kann das
Ganze abbrechen, sinnvollerweise? Bei Endzuständen. Endzustände sind ein
gutes Kriterium, um zu sagen, ist Bisimilar oder nicht.
Denn wir können schon mal davon ausgehen,
dass ein Endzustand und ein Nicht-Endzustand wohl nicht zueinander Bisimular sein könnten.
Denn im einen Zustand werde ich akzeptieren, dem anderen nicht.
So, das heißt, ich denke,
dass eigentlich von hinten und weiß schon mal ganz genau zwei Zustände,
Die könnten vielleicht B-Similar sein, wenn er sich das Gleiche tut.
Ein End- und ein Nicht-Endzustand sind es aber nie.
Und das drückt die dritte Bedingung auch aus.
Wenn ich zwei B-Similare Zustände habe, S&R. Und S ist
ein Endzustand des ersten Systems, dann muss auch gelten,
dass er einen Endzustand des zweiten Systems ist.
Und wenn es kein Endzustand ist, dann bitte auch er nicht.
So, das ist gewissermaßen das atomare Kriterium der B-Similarität.
Endzustand mit Endzustand, nicht Endzustand,
nur mit Nicht-Endzustand gepaart
Alles Weitere kommt über die Bedingung B rein,
dass man sagt, sie können das Gleiche tun.
Gut. Wenn es eine solche binäre Relation B gibt,
dann möchte ich die beiden Zustände Bisimular nennen und dafür gibt es ein zweites Zeichen,
S-Doppelfall-R, immer gesprochen, es ist Bisimular zu R.
Und das Ganze kann ich jetzt auch als Eigenschaft der Transitionssysteme
deuten. Ich sage nämlich, zwei Transitionssysteme heißen Bisimular,
ein Zeichen Transitionssystem 1,
das B-Seminar zu Transitionssystem
Falls es überhaupt irgendeine binäre B-Simulationsrelation gibt,
die die Eigenschaften in der Definition erfüllt.
So wenden wir diese Definition jetzt mal an auf das Beispiel
von Ebene, müssten wir irgendwo den Fehler bekommen.
Schauen wir mal. Nehmen wir erstmal die einfachen Kriterien A
und C. Wobei es in diesem Fall sehr einfach ist,
wir haben im linken System genau einen Staatszustand,
der auch noch Endzustand ist.
Und im rechten System genauso.
Also S-0 und
Es bietet sich also an,
diese beiden Zustände erstmal in Relation zueinander zu setzen.
Denn die dritte Bedingung fordert ja, dass sich eine B-Simulation B bekomme.
Ich konnte natürlich jetzt die beiden nicht rannehmen,
aber wir nehmen die einfach mal rein und sagen,
die beiden haben das Potenzial jetzt, B-Simular zu sein.
So, die dritte Bedingung C wird damit erfüllt und
die erste Bedingung wird auch erfüllt.
Ja, denn zu jedem Staatszustand des einen gibt es
einen Staatszustand im anderen System,
die B-Simular zueinander sind
Gut. Also Bedingung A fordert sogar, dass es einen Partner gibt.
So, das ist die Anfangssituation. Vielmehr ist bislang noch nicht festgelegt,
nutzen wir jetzt aus, dass wir Bedingung B noch haben.
Da muss es ja irgendwann scheitern, aber gucken wir mal,
an welcher Stelle es scheitern wird. Bedingung B sagt ja,
wann immer ich eine A-Aktion im einen System tun kann,
von zwei Bisenmeladenknoten, S-1-R-1,
komme ich zu zwei Bisimilaren Knoten,
Wenn ich das jetzt anwende, dann muss ich ja zwei
Simulationsrichtungen betrachten. Einmal möchte ich das linke System benutzen,
um das Rechte zu simulieren und im zweiten Schritt andersrum.
Jetzt betrachten wir die Simulation durch das linke System.
So, einen Anfang haben wir schon. Gut,
was kommt jetzt als nächstes? Das rechte System macht
einen Übergang, R1 nach Erzball mit irgendeiner Aktion A.
Was könnte das sein? Vielleicht hier diese Kante
mit 1 Euro beschriftet
Ja, wir haben also etwas, einen Übergang in
diesem Fall von R0 zu R1 mit 1 Euro.
Das passt jetzt auf dieses Muster in Grün. Gut,
was ist dann die Forderung? Dann sagt die Definition,
dann muss es ein Zustand S2 auf der anderen Seite geben,
sodass sich dort auch diese A-Aktion ausführen kann.
Viel zur Auswahl haben wir da nicht, die einzige 1-Euro-Kante
ist diese. Und was dann noch gefordert ist,
dass die beiden Folgezustände, dass die zueinander bisimular sein sollen.
Okay, wenn das so sein soll und sein muss,
Dann sind offensichtlich diese beiden Folgezustände zueinander Bisimilla.
So, dieses Spielchen kann ich jetzt weiter treiben,
stelle also fest, rechts ist die Aktion Tee möglich.
Das muss jetzt links irgendwie simuliert werden. Jo,
und das führt dazu, dass diese beiden Knoten als Äquivalent erkannt werden.
Das heißt, an dieser Stelle können wir,
wenn wir das so brav weitermachen, keinen Widerspruch zur Definition finden.
Das heißt, die B-Simulation, die man so konstruieren muss,
weil es gar nicht anders geht, um die Bedingung zu erfüllen,
die wird erst mal nicht der Definition einer Bisimulation widersprechen.
Das heißt, an dieser Stelle kann es eigentlich gar nicht haken.
Es muss an anderer Stelle irgendwie haken. Es muss also daran haken,
dass jetzt das rechte System das Linke simulieren will.
Ja, die Anfangssituation bedingt A und C sind wieder genau
wie vorher, aber jetzt muss es umgekehrt scheitern.
Ich starte wieder mit dem Startzustand und lasse das linke System
eine Aktion A machen, Ja, da bleibt nur die 1-Euro-Aktion übrig.
Und was soll jetzt gelten? Jetzt soll gelten,
dass ich dann zu zweit bis im Laden Zuständen kommen kann.
Es war R2. Da habe ich jetzt zwei Möglichkeiten zur Auswahl.
Ich muss also streng genommen zwei Sachen durchprobieren, die hier klappen könnten.
Probieren wir mal die erste Variante aus und nehmen mal an,
S1 und R1 wäre anders.
Das heißt, der Partner zu S1, dem Folgezustand,
ist jetzt auf der rechten Seite
Ja, bis hierhin, das ist noch alles in Ordnung.
Und jetzt kommen wir mal zum problematischen Fall.
An dieser Stelle starte ich das Spiel von vorne,
habe jetzt die Aktion A gleich Kaffee und brauche jetzt einen Partner.
Dieser bisimulare Partner R1 kann aber die Aktion Kaffee gar nicht ausführen.
Das heißt, da ist es mir gar nicht möglich,
diese A-Aktion auszuführen auf der rechten Seite.
Das heißt, so kann die Bisimulationsrelation schon mal nicht aussehen
Ich würde jetzt also anfangen, mal die Situation durchzuprobieren,
wenn ich S1 als B-Seminar zu R6 betrachte. Ja,
das ist das Gleiche in Grün, dann frage ich,
im linken System,
mach doch mal Tee und das rechte System kann das nicht,
gerät also auch dort ins Leere.
Das heißt, ich habe nur zwei Alternativen zur Auswahl.
Ich muss also S1 mit einem der beiden Zustände auf der rechten Seite in Relation setzen.
Und egal in welchen von beiden ich wähle,
bekomme ich die Situation, dass eine eine Aktion machen kann,
die vom anderen nicht simuliert werden kann
So, an dieser Stelle merken wir also,
dass das rechte System nicht in der Lage ist,
das Linke zu simulieren.
Umgekehrt schon. Ja. Das heißt also nach rechts.
Eine beliebige Aktion A für jede Aktion A muss das gelten.
Für alle Aktionen A. Also ich habe es verstanden hier nicht.
Die Frage war, ich hätte ja auch als Aktion A
Themen wählen können und dann hätte ich kein Problem gehabt,
weil Tee,
diese Aktion kann R1 ja machen
So, der Punkt ist aber, ja, das geht,
dann würde ich die nächste Aktion Kaffee ausprobieren.
Ich muss eh alle Aktionen durchprobieren. Also in dieser Definition
ist implizit gefordert für eine beliebige Aktion A. So,
und spätestens, wenn ich an dem Problem falle,
der hier skizziert ist, komme, dann habe ich das Problem.
Selbst das, ich habe es nicht verstanden
Naja, aber was da dransteht, hat ja irgendwie eine Bedeutung.
Wenn kleinen Tee was anderes ist, als der Knopf Großtee,
weil du vielleicht einen kleinen Teebecher oder einen großen Teebecher haben willst,
dann sind das natürlich unterschiedliche Aktionen.
So. Also, wir sehen erstmal nur, wir wollten,
dass diese beiden Systeme, die ja folgen äquivalent sind,
die wollten wir charakterisieren als nicht äquivalent im Sinne der Bisimulation.
Und das ist uns jetzt auch gelungen.
Wir können also für dieses Beispiel zeigen,
sie sind nach Definition
nicht äquivalent
Noch ein Beispiel, damit ihr nicht denkt, nur gleiche Systeme werden B-Seminar.
Wie sieht das mit diesen beiden Systemen aus? Ja,
fast das gleiche Szenario nochmal, nur mit dem Unterschied,
dass auf der rechten Seite,
wo ich R1 und der 6 wieder habe,
da habe ich jetzt zwei verschiedene Zustände, die sich intern,
wer weiß, wodurch unterscheiden,
die aber beide offensichtlich Tee und Kaffee als Optionen zu lassen.
So, wenn ich das jetzt brav durchspiele, Wie sieht das dann aus?
Was meint ihr? Wird das ein Problem werden? Wer
ist für, diese beiden sind Systeme, sind Bisimilar?
Wer ist dafür, dass es ein Unterschied ist nach B-Simulation?
So, die Hälfte ist für B-Similar,
die andere Hälfte ist für Weiß nicht. Gut. Was
schon ganz okay ist, die beiden Systeme sind jetzt Bisimilar.
Wollen wir nachprüfen? Mit der gleichen Argumentation von vorhin,
Startzustände brauchen Partner. Wenn ich nur einen habe,
habe ich da keine große Wahl
Was könnte ich jetzt machen? Ich könnte ja erst mal
sagen, okay, hat bislang immer gut geklappt.
Zustand S1, setze ich in Relation zu R1.
Ist ein Nachfolgezustand zu einmal 1 Euro einwerfen. Und jetzt
gucke ich, wie sieht das aus mit der Partnerwahl?
Bei der Wahl von Tee bieten sich die beiden Zustände,
das ist zwar in R2 als Partner ein.
Und die können dann auch beide Tee kochen und auch wieder
Tee einfüllen. Das ist das einzige, was sie
so können
Und was ich jetzt auch noch machen kann,
wie sieht das aus, der Zustand auf der rechten Seite,
R6, der könnt ihr auch noch einen Paten abbekommen,
dann nehme ich wieder S-Eis.
Also man sieht hier,
ein Zustand kann auch mehrere Partner bekommen in der B-Simulation.
S-Eis ist jetzt also Verhaltensäquivalent zu R1 und
Was kann ich da jetzt machen?
Naja, Kaffee auswählen, Kaffee kochen, Kaffee einfüllen.
Klar. Und wenn ich das jetzt alles brav durchprobiert habe,
dann sind da ganz viele hübsche, blaue Linien drüber gemalt.
Und die zeigen mir jetzt, dass die beiden Systeme bisimular sind.
Wenn man ganz, ganz tief wühlt,
dann hatten wir B-Simulationen bei endlichen Automaten doch schon mal.
Also wenn ihr nochmal ganz in euch geht oder meinetwegen auch in den Foliensatz von FG1,
dann gab es eine Stelle, wo fast genau das gleiche Konzept,
es hieß nur anders, schon mal benötigt wurde.
Ich nehme mir Vorschläge und Ideen an,
wo das gewesen sein könnte bei endlichen Automaten.
War eins der letzten Themen für endliche Automaten.
Ich gebe mal einen Tipp, Minimalisierung von endlichen Automaten.
Gut wem das jetzt nicht sagt, kannst nachschlagen,
wem es noch was sagt. Es ging darum,
zu einem gegebenen Automaten den kleinstmöglichen Äquivalenten endlichen Automaten zu finden.
Da haben wir gezeigt, ja, das geht und ja,
er ist bis auf Umbenennung der Zustände eindeutig definiert.
Und wie haben wir das gemacht? Wir haben einfach versucht,
herauszufinden, welche Zustände im Automaten das Gleiche können.
Haben also Herausforderungen, und das haben wir versucht herauszufinden,
indem wir zwei Zustände versucht haben zu unterscheiden,
indem wir sagten,
der eine kann terminieren mit einem Wort und der andere
kann mit diesem Wort
nicht terminieren
Genau diese Idee, zwei Zustände unterscheiden zu können,
die haben wir jetzt in diesem B-Simulationskonstrukt auch wieder vorgefunden.
Also die Grundidee ist eigentlich nicht neu, aber jetzt nochmal das,
was wir damit machen wollen, ist was anderes.
Und der Darstellung geht es uns immer um das,
beide Systeme können anders aussehen, haben aber das Verhalten,
das sich extern nicht unterscheiden kann.
Das ist B-Simulation. Was kann man jetzt machen mit B-Simulation
? Man kann so ein bisschen rumspielen mit dem Ganzen
Es gibt ja nicht nur eine Bisimulationsrelation B,
sondern die Definition lässt Platz für eine ganze Menge.
Und was man auf jeden Fall sagen kann, B und B,
Strich, wenn das zwei B-Simulationen zwischen den Systemen T1,
TS1 und TS2 sind, dann ist auch die Vereinigung dieser Bisimulation eine.
Also eine B-Simulation, die noch mehr Knoten identifiziert.
Kann man mal, es ist nicht allzu kompliziert,
kann man mal nachziehen zu Hause
Daraus folgt, aber sofort,
dass es legitim ist von der größten Bi-Simulation zu sprechen,
die maximal viel in Verbindung setzt, die mit diesem geschwungenen Gleich.
Ich nehme einfach alle Bi-Simulationen, die es zwischen diesen
beiden Systemen gibt. Alle Bi-Simulationen B und vereinige sie.
Das ist das Maximum, was ich gleichsetzen darf,
was da rauskommt, ist die größtmögliche Bi-Simulation.
In diesem Sinne,
maximal viel identifizieren im System
Ich kann natürlich Knoten unterscheiden, obwohl sie das Gleiche tun,
ja, aber das ist unnötig.
Mich interessiert ja eigentlich mehr das Gegenteil, maximal viele Zustände,
die das Gleiche tun, miteinander identifizieren. So,
wir nehmen Beispiel eben, da haben wir auch die beiden Knoten S1,
ne, da haben wir den Knoten,
ist eins mit den beiden Knoten, R1 und R6 identifiziert,
mit beiden, damit wirklich maximal viel identifiziert ist.
Jetzt können wir uns nochmal fragen,
was hat das mit Folgen und Akzeptanzäquivalenz
zu tun
Das hat Folgendes damit zu tun, wir formulieren das als B-Simulation,
ist feiner als Folgen-Equalenz, feiner in dem Sinne.
Ja, nicht, dass es eine adlige Relation wäre,
sondern sie unterscheidet mehr.
Also Relationen sind feiner, wenn sie eine bessere Trennungsqualität haben.
Und das gilt im Sinne des folgenden Satzes,
wenn nicht zwei Transitionssysteme mit TS1, ein TS2 habe.
Und diese beiden Systeme sind B-Similar, dann weiß ich automatisch,
sie sind auch Folgen und Akzeptanz äqualent.
Beides. Die Umkehrung gilt aber nicht
So, in diesem Sinne gibt es offensichtlich Systeme,
die wir unterscheiden können mit dem Begriff der B-Simulation,
aber wir könnten sie nicht mehr unterscheiden mit dem Begriff der Folgen-Equalenz.
Unser Eingangsbeispiel war mich genau dafür der Nachweis,
da konnten wir sehen, zwei Folgen äquivalente Systeme,
die nicht das gleiche Verhalten hatten bei Ausfall der Tee-Koch-Einheit.
Die Umkehrung gilt aber, ja,
die haben also schon was miteinander zu tun,
so wie das hier steht,
wie Simularität impliziert,
folgen Äquivalenz
Sagt uns also mehr aus. Sie hätten ja auch unvergleichbar sein können. Ja,
dass es einige Systeme gibt, die weder noch sind,
einige haben das eine, andere das andere, nein.
Die stärkere Eigenschaft ist die Bi-Simulation. Gut, wie kann man
das nachweisen? Beweisen wir es. Wir nehmen also an,
wir haben zwei Bi-Simulare Systeme, TS1, TS2 und beweisen jetzt
erst mal per Induktion über die Länge der Aktionsfolge W folgende Eigenschaft.
Wann immer ich von S0 mit diesem Wort W zur S1 komme,
Und ich starte in einem Knoten S-0, der Bisimler ist zu R0.
Dann finde ich in meinem zweiten System immer einen Knoten der R1,
der von dem zu S-0-B-Simularen Knoten er 0 startet,
die Aktionsfolge W ausführt und dann eben auch in diesem laden Pärchen S-1,
R1 landet.
Ja, das heißt,
die Simulation ermöglicht es mir für eine vorgegebene Aktionsfolge W,
immer eine Paarung von Zueinander Bisimilaren
Knoten zu finden
Wenn das die Länge eins hat und zwei und immer so weiter,
das sind immer zueinander, B-Seminare, Pärchen,
S-I-R-I-I. Induktionsanfang ist ganz einfach, wenn wir weh,
das leere Wort betrachten.
Ja, da passiert mich gar nichts. Da ist der Nachfolgezustand
genau der Staatszustand, also S-0 ist gleich erst eins.
Und wenn ich das auf einem anderen System genauso mache,
eher eins zu R-0 wähle, dann stimmt die Aussage.
Ich wusste ja schon, die beiden S-0 und R-0 sind B-Seminar,
wenn ich nichts tue, bleibe ich da.
Und offensichtlich da, wo ich bleibe,
das ist dann
immer noch B-Seminar
Gut, nicht überraschend, tut aber für den Induktionsanfang alles,
was ich brauche. Also den Induktionsschritt, ich nehme an,
mein Wort setzt sich zusammen aus einem Präfix der Länge,
ein kleiner V und ein Aktionselement A. Und die Situation ist,
ich komme von S-0 mit VA zu S-2,
starte in zwei Bisimilaren Knoten S-0 R0 und möchte jetzt zeigen,
dass ich das gleiche im zweiten System machen kann.
Also ich komme von Im ersten System von S0 zu S1 zu S2 mit V&A.
Und kann das jetzt auch im zweiten System machen.
So, die Induktionsvoraussetzung, die gilt ja für das V.
Das heißt, ich weiß schon mal im zweiten System
komme ich mit dem V irgendwo hin, klar,
zu eurem Zustand nennen wir ihn R1.
Und nach Induktionsvoraussetzung geht ja die Eigenschaft. Ich komme also
zu einem Vise-Milliarden-Zustand, das heißt, S1 ist Bi-Simulat zu R1.
Das ist die Annahme. Wenn ich das jetzt zusammensetze,
dann kriege ich ungefähr
das folgende Diagramm
Ja, dann weiß ich ja, nach der Definition der Bisimilarität-Bedingung
B, kann ich ja in S1 eine A-Aktion machen.
Und die Similarität sagt mir,
dass es dann immer ein R2 geben muss,
dass ich mit dieser A-Aktion von R1 nach R2 überführt.
Und dass die resultierenden Zustände S2 und R2 zueinander Bisimilar sind.
Also weiß ich insgesamt, von R0 komme ich mit
V A zu R2 und die beiden sind Bisimilar.
Das Diagramm fasst das
nur nochmal zusammen
Was ich beweisen will, ist also,
wenn ich von S0 mit V, A zu S2 komme,
komme ich auch von R0 zu R2 mit VA.
Und dir das linke Böcks hier nahe,
also Quadrat auf der linken Seite, ist die Induktionsannahme.
Und die rechte Box ist die Definition der B-Simulation.
Und die beiden zusammengesetzt, also das große Rechteck,
ist genau die Eigenschaft, die ich beweisen.
So, das heißt, diese Hilfsaussage haben wir schon mal bewiesen.
Wann immer ich ein Wort im einen kann,
kann ich es auch im anderen
So und daraus wollen wir jetzt zeigen, damit wollen wir beweisen,
dass wenn ich zwei B-Simulare Systeme habe, dass ihre akzeptierten Sprachen,
elf von TS1 und zwei gleich sind.
Sowas weiß ich jetzt. Ich nehme an,
ich habe ein Wort aus der Sprache des ersten Transitionssystems.
Das kann ja nur sein, wenn es ein Staatszustand ist,
Null und ein Endzustand es eins gibt,
sodass ich von S0 mit diesem Wort W zu dem Endzustand des Eins komme.
So, ich weiß, wie Simularität, erste Bedingung sagt,
zu jedem Staatszustand. Im einen gibt es einen Staatszustand im anderen.
In diesem Fall gibt es also ein R0 im zweiten System.
Und S0 ist da zu Bisy Müller. Und mit dem Hilfssatz von eben,
mit der Zwischenbehauptung, weiß ich jetzt auch,
wenn ich in einem System von S0 zu S1 mit dem Wort W komme,
da gibt es einen bisimularen Partner im zweiten System.
Also komme ich von R0 mit dem Wort W zu R1
und die beiden Zustände sind auch Bisimular zueinander
Und die dritte Bedingung C, der B-Simulationsdefinition,
sagt jetzt, wenn der eine Zustand, nämlich SA1,
ein Endzustand ist, dann ist es insbesondere auch R-Eins.
In beiden Fällen habe ich ja einen Enzelstand. So,
also weiß ich, das Wort ist auch in der Sprache des zweiten Transitionssystems.
Und ich kann genau das Gleiche in der anderen Richtung argumentieren,
ändert sich nichts. Und was ich noch argumentieren kann,
ist, ich darf ja als Endzustandsmenge alle Zustände wählen.
Also wähle ich als Endzuständ im ersten System die Zustandsmenge ist eins.
Die Endzustandsmenge im zweiten System zuerst zwei. Dann weiß ich ja,
dass die Sprache dieses Systems gleich der Aktionssequenzen Sprache ist.
Und da ich weiß, die beiden Systeme haben im allgemeinen Fall
die gleiche Sprache, gilt das auch für den Spezialfall.
Also weiß ich auch, wenn die beiden B-Similar zueinander sind,
dann Geld auch, dass sie die gleichen Aktionssequenzen haben.
Einfach nur, dass ich hier den Spezialfall,
ich habe alle Zustände als Endzustände in beiden Systemen
Okay, und damit ist dieser Satz bewiesen.
Wie sieht das mit der Rückrichtung der Implikation aus?
Gilt die gilt die nicht? Naja,
da erinnern wir uns daran, bei diesen beiden Systemen,
da hatten wir genau gesehen, gleiche Folgen.
Diese beiden Systeme hatten wir bereits als Folgen equalent kennengelernt.
Und wir hatten uns davon überzeugt,
dass sie nicht Bisimilar zueinander sind.
Nochmal hier zur Erinnerung
Wenn man durch... Oh nö. So. Sagt er eben genau in der Tatsache,
dass durch das Auseinanderziehen dieses einen Zustands in zwei Aspekte,
die jeweils entweder Tee oder Kaffeeauswahl erlauben,
habe ich eben die Möglichkeit, nur eins von beiden zu tun,
während das linke System beides kann.
Das hatte keine Auswirkungen auf die Folgen,
hat aber auf das Simulationsvermögen der beiden Systeme
eine große Auswirkung
Gut, also haben wir einen grundlegenden Begriff, wann zwei Systeme eigentlich gleich sind bezüglich des Verhaltens.
Bi-Simulation ist also, das Handwerkszeug, um zu sagen,
ja, die Implementation ist anders, aber das merkt man gar nicht.
Denn zwei bisimilare Systeme kann ich nicht dadurch unterscheiden,
dass ich an diesem Kasten außen dran die Knöpfe wild drücke.
Ja, wenn ich das dadurch unterscheiden könnte, beispielsweise,
ich drücke da wild drauf rum,
auf beiden Systemen immer genau das Gleiche machend,
und die eine Kiste sagt irgendwann, Hilfe,
ich kann nicht mehr, oder sie sagt gar nichts mehr einfach,
Während die andere munter weiter arbeitet.
Genau das passiert hier ja, wenn ich nach einem Euro-Einwurf bei
der rechten Maschine im Zustand R6 lande und dann Tee haben will,
dann sagt die gar nichts mehr, liefert insbesondere keinen Tee,
während die andere Maschine begeistert und willfährig mir Tee einfüllt.
So, in diesem Sinne, die Similarität heißt,
von außen durch Knöpfe drücken nicht unterscheidbar.
Und Knöpfe drücken, sind genau Aktionskanten überlaufen.
Gut, das ist also für Transitionssysteme wichtig
Und jetzt endlich die Folie. Transitionssysteme interessieren uns im Folgenden
in einem besonderen Zusammenhang. Wir wollen das Ganze noch ein bisschen erweitern.
Wir wollen nämlich sagen, mit manchen Zuständen verbinde ich gewisse Eigenschaften.
Ich sage einfach, in diesem Zustand gilt, denkt euch was aus.
Und dieses denkt euch was aus mit formalisiert dadurch,
dass ich jetzt sage, ich gebe Zuständen, Labels.
Wenn man will, kann man das im Deutschen als Etiketten bezeichnen.
Aber die meisten Lehrbüchern findet man ein Labeling durchaus als
mehr oder weniger deutschen Begriff
Also wir beschriften jetzt Aktionen oder Zustände.
Wir können bei beiden Beschriftungen formal erst mal machen.
Fangen wir so an, erst mal damit, Aktionen zu beschriften.
Dann bekommen wir eine Transitionsetikettenfunktion. Das ist eine Abbildung,
EA, die jede Anschrift, eine Etikette zuordnet.
Also da irgendwie an jede Kante was Neues dran schreibt.
Und da passiert Folgendes, wenn ich Aktionen umbenennen darf,
dann kann ich das Ganze wieder unten steht auf Sequenzen erweitern.
Wenn ich also eine Sequenz A 1 bis 1 habe,
bis er ein habe, und sage, das etikettiere ich jetzt um,
dann bedeutet das, die Sequenz, die ich bekomme,
wenn ich alle Aktionen einzeln umittikettiere, also das,
was auf der rechten Seite der Gleichung steht,
EA von A1, gefolgt von Punkt, Punkt,
Punkt, EA von AN.
Also die Abbildung Homomorph auf jedes Einzelne anwenden. Und wenn ich möchte,
kann ich das nicht nur für endliche Sequenzen,
sondern auch für unendliche Sequenzen,
also für Omega-Wörter
Was uns dann meistens interessiert, ist also, was passiert,
wenn ich das Transitionssystem nehme und seine Folgensprache umetikettiere?
Ja, das ist jetzt die Etikettenabbildung des Transitionssystems. Und da sagte ich,
ich nehme einfach diese Erweiterung auf Worte,
jedes Wort weh, aus Sigma Stern,
wenn es denn in den Firing-Sequence FFS des Transitionssystems enthalten ist,
wird abgebildet auf E-Sternchen,
in XA von
Die Menge aller dieser Umitiketierung, das ist jetzt meine Ethikettensprache.
Also einmal umbenannt. Und genauso machen wir das im Prinzip
auch für Zustände. Also es gibt auch Zustandsetiketten und da
können wir auch Zustandsequenzen betrachten und auch die um intikettieren.
Also irgendwelche Abbildung. Und formal sind das denn Homomorph-Abbildungen aus
solchen Sequenzen. Wie kann ich das anwenden?
Gucken wir mal. Beispielhaft uns das an. Hier haben
wir also unseren guten alten Automaten
Extern mit den ganzen Anschriften. Und ich möchte jetzt ein paar Sachen davon abstrahieren,
also intern soll das beispielsweise jetzt nur noch die Anschriften, A,
B, C, D, wo ist das eh geblieben,
naja gut, F, G-I haben.
Ja, weil ich vollständig davon abstrahieren kann, eigentlich interessiert mich gar nicht,
ob für den Benutzer das Tee oder Kaffee bedeutet,
für den Mikroprozess ist das egal,
für wen der schubst dann irgendwelche Heizspulen, irgendwelche Stromimpulse und alles gut.
Da tut es ein einfaches D auch zum Tee kommen.
Das heißt, da kann ich das umetikettieren,
Und was ich da denn mache, ist,
eine andere Variante, wenn ich von internen Aktionen sprechen will,
dann kann ich auch mit dem leeren Wort arbeiten.
Also wir haben zwar ein Transitionssystem, kein leeres Wort,
was wir erlauben, aber beim Abbilden könnte man das machen.
Wir können also zum Beispiel,
weil uns die Kochaktionen aus irgendwelchen Gründen nicht mehr interessieren und
weil auch der Benutzer da gar keine Interaktionsmöglichkeit mehr hat,
wollen wir sagen, die sind für den Benutzer gar nicht mehr da.
Dass wir also gewissermaßen Tee kochen, ist das interne Verhalten
Das ist sichtbar für das kleine Männchen, was in der Kiste sitzt.
Aber für die Benutzer gibt es dort keinen Hinweis darauf, extern.
Ja klar, ein Euro, einwerfen. Da hat er
eine Interaktionsmöglichkeit, Tee oder Kaffee auswählen, Interaktionsmöglichkeit.
Tee einfüllen ist auch irgendwie beobachtbar, weil da typischerweise ein Becher rausplumpst.
Ja, aber dieser Kochvorgang ist als solcher zu vermuten,
also gewissermaßen im Nachhinein festzustellen, es kommt eine heiße Tasse Tee,
mehr oder weniger heiß zumindest raus.
Da wird wohl irgendwann mal dieses Wasser
gekocht worden sein
Und vermutlich, erst nachdem ich das geordert hatte,
so sicher sein kann man sich da nicht,
könnt ihr auch eine riesige Thermoskanne sein.
Um das abzubilden, hätte ich jetzt gesagt, okay,
falls die Aktion A aus der Menge Tee kochen, komm mal,
Kaffee kochen ist, bilde ich es aufs Äpfelon an.
Und ansonsten ist das Bild von A gleich A. Also
das sind so ein paar Dinge,
die ich damit spielen kann mit solchen Abbilden.
Und wenn ich das schon habe,
dann können wir gleich weiter zur Kripri-Strukturen gehen.
Kripri-Strukturen braucht man,
um Transitionssysteme zu analysieren
Und eigentlich will ich nicht nur analysieren,
welche Aktionsfolgen kannst du, welche Zustände du durchläufst.
Das interessiert eigentlich überhaupt nicht. Eigentlich bin ich
nur interessiert an Eigenschaften, die dieses System hat.
Also ich möchte das Ganze noch abstrakter betrachten können.
Ich möchte nicht sagen, ich durchlaufe eine solche Zustandsfolge. Nein,
ich möchte sagen können, ich durchlaufe eine Folge von Zuständen,
die ich nicht kenne, aber von denen ich weiß,
dass sie diese und jene Eigenschaft haben werden.
So in Eigenschaften werden jetzt im Folgenden beschrieben,
durch atomare Aussagen in den Zuständen
Atomare Aussagen in Zuständen können gelten oder nicht gelten.
Und wir benutzen jetzt diese Zustandsetikettenfunktionen dazu,
jedem Zustand genau die Menge der gültigen, atomaren Aussage zuzuweisen.
Also ich schreibe an jedem Zustand bildhaft gesprochen, ran,
was da gilt. Und implizit auch alles,
was ich weggelassen habe, gilt halt nicht.
So, also Zustandsetiketten, jeden Zustand mit einer Menge,
der in diesem Zustand lokal gültigen, atomaren Aussagen zugewiesen.
Wenn ich davon ausgehe, ich habe eine Menge AP,
Für Atomic Propositions, atomare Aussagen.
Dann bilde ich mir davon die Potenzmenge, Kalligrafie-P von AP.
Also die Menge aller Teilmengen davon. Und wenn diese Etikettenfunktion e-indexs,
jetzt S abbildet in die Potenzmenge von AP,
wird jedem Zustand dadurch eine Teilmenge von Atomaren Aussagen zugewiesen.
So, und das ist jetzt hier mal dadurch angedeutet,
dass in oder neben dem Zustand jetzt Alpha 1,
2, 3, das sind meine atomaren Aussagen.
Da sind jetzt Mengen davon ausgemalt. Und Alpha 1 soll ungefähr bedeuten,
ich habe einen Euro bezahlt, Alpha 2 soll bedeuten,
ich habe Tee gewählt, Alpha 3, ich habe Kaffee gewählt.
Diese drei Aussagen haben die Eigenschaften ja im Staatszustand,
gilt keine davon. Weder Geld noch irgendwas ausgewähltes da erfolgt.
Sobald ich in den Zustand S1 übergegangen bin,
in S1, bin ich mir sicher,
da komme ich gerade rein durch das Zahlen eines Euros
Und in Allvereins, in S2 bin ich mir sicher,
da ist ein Euro eingeworfen worden und es ist Tee gewählt.
Also dort gilt die Menge Alpha 1,
Alpha 2. Kaffee wurde da nicht gewebt.
Und analog auf der rechten Seite das Gleiche für Kaffee,
aber nicht für Tee. Und in S4 und S5
sieht man, da gilt dann nichts mehr.
Also ab dort behauptet das System kein Euro mehr da.
Ich habe da nichts mehr zu tun.
Gut. Hat irgendjemand so gesehen. Also das ist jetzt
Semantik. Da kann man lange drüber streiten und diskutieren,
aber so wird das
jetzt gesehen
Und im Zustand, er ist null im Staatszustand,
ist kein Geld da und auch nichts ausgewirkt. So,
das ist also die Grundidee und wir wollen jetzt über die Eigenschaften sprechen.
Wir wollen jetzt beispielsweise sagen können, immer,
wenn ich einen Euro eingeworfen habe und vielleicht danach Café gewählt,
dann kommt da irgendwann auch ein Getränk raus.
Solche Aussagen möchte ich treffen können und möchte ich nachvollziehen können,
dass das hier gilt, bei dieser Umsetzung dieser Implementation eines Kaffeeautomaten,
ist klar, da sehe ich einen Euro rein,
Kaffee gedrückt,
da kommt was
Der Automat füllt mir deinen Kaffee ein. Das heißt,
bei diesem Automaten sieht man das noch ganz gut, dass das funktioniert.
Wenn das nachher ein paar tausende Zustände hat und ein paar mehr Anforderungen kommen,
dann ist es vielleicht ein bisschen mühsam,
dass alles mit einer großen Wandtapete und vielen Buntstiften nachzuvollziehen,
da sollte man dann vielleicht also auf computergestützte Werkzeuge zurückgreifen.
Und wie ein Computer solche Sachen formalisiert und algorithmisch behandelt,
das wollen wir uns im Prinzip so angucken in der nächsten Vorlesungsstunden.
So, neben den Kaffeeautomaten haben wir auch ein
ganz tolles zweites Beispiel,
unser Mikrowellenofen
Denn Zustand 1 startet. Und dieser Mikrowellen-Ofen,
da interessieren uns eigentlich nur vier atomare Aktionen.
Ich kann mich fragen, bist du gestartet? Ist deine Tür
zu? Heizt du auf? Dann hast du einen Fehlerzustand.
Das sind die vier Fragen. Und was ich jetzt machen kann,
ich kann diesen dritten Zustand rauspicken,
nachdem ich die Tür geschlossen habe, hat sich nicht viel verändert,
außer dass im Gegensatz zum Zustand 1 ein Zustand 3 jetzt close gilt.
Wenn ich die Tür geschlossen habe,
ist die Tür zu,
steht da
In diesem Sinne, ja,
ist das ein bisschen doppelt kodiert, das liegt schlichtweg daran,
dass für den Menschen diese Aktionen vielleicht ganz hilfreich sind oder auch vielleicht sogar Bezeichner,
dass das an dem Werkzeug nicht hilft.
Denn ich könnte ohne formal irgendwas zu ändern, die Zustände,
na gut, die heißen schon eins bis sieben,
das ist nicht besonders semantisch wertvoll.
Ihr könnt ja auch die Aktionen einfach wieder A,
B, C, D nennen. So, das Einzige,
was gewissermaßen für das Werkzeug später Semantik tragen kann,
ist, die Charakterisierung des Zustandes als Notstart,
close not heat,
not eror
Dass das in diesem Zustand gilt. Das ist das Einzige,
was später dem Tool als Grundlage dient,
um Anfragen bezüglich irgendeiner Spezifikation beantworten zu können.
So, also damit wollen wir arbeiten. Und das ist
mathematisch abstrakt eine Kripke-Struktur, womit wir arbeiten wollen.
Und weil es praktisch ist, brauchen wir die Eigenschaft
der Links-Tutalität
Zweistellige Relation, eine Timemanuf von Nix Kreuz Y,
die heißt Links, total. Im Prinzip, wenn es
für jedes X ein Y gibt, sodass XY eine Relation steht.
Also zu jedem ersten Argument kann ich mir sicher sein,
es gibt mindestens ein, zweites Argument.
Also eine Analogie zu Funktionen, die sind auch,
da kennt man ja auch total heiß,
es gibt immer einen Funktionswert zu jedem Argument.
Wir haben ja Relationen hier steht, es gibt mindestens einen
Wert Y zu jedem X. Kann auch mehrere geben.
Wir schließen also nur den Fall aus,
dass es zu einem X kein solches Y gibt,
das in Relation steht
So, das wollen wir haben,
denn wir wollen im folgenden nur links totale Transitionsrelationen betrachten.
Also Übergangsrelationen, die Zustände verbinden. Wir ignorieren nämlich im
folgenden alle Kanten Anschriften. Die werden das praktischen und
auch traditionellen Gründen mal unterm Tisch fallen gelassen.
Das heißt, an den Kanten steht nichts mehr dran.
Und deswegen haben wir jetzt eine binäre Relation,
die uns sagt, dieser Zustand ist mit jedem Folgezustand verbunden.
Das ist die Transitionsrelation
Und diese Transitionsrelation soll links total sein.
Das heißt, es gibt zu jedem Zustand einen Nachfolgezustand.
Zu jedem Zustand X gibt es den Nachfolgezustand Y.
Das ist einfach deswegen praktisch, weil das uns garantiert,
dass wir jedes endliche Anfangsstück beliebig verlängern können.
Wir können also davon ausgehen, dass alle Zustandsfolgen unendlich lang sind.
Wir müssen nie aufhören. Es geht immer weiter.
Oder anders formuliert, es gibt keine Sackgasse. Ja,
wenn wir gerade dummerweise analysieren wollen,
ob das System eine Sackgasse hat,
müssen wir
einen kleinen Kniff anwenden
Ja. Wenn das eigentlich unser System ist und die beiden
unteren Zustände sind Sackgassen, dann können wir das reparieren,
indem wir hier so einen kleinen gelben Spezialzustand zu basteln.
Und alle Sackgassen gehen jetzt auf diesen gelben Spezialzustand,
aus dem man auch nicht wieder rauskommt. Der hat einen Nachfolgezustand,
nämlich sich selbst. Und dann kann ich fragen, naja,
das alte System ist genau dann in eine Sackgasse gelangt,
wenn ab einem gewissen Zeitpunkt ich aus dem gelben Zustand nicht mehr rauskomme.
So, eine Krippestruktur ist also So gesehen nichts weiter,
als ein Transitionssystem M, irgendeine Menge von Zuständen.
Endzustände brauchen wir nicht mehr, wir wollen nichts akzeptieren,
wir interessieren uns nur für die unendlichen Zustandsfolgen, die da möglich sind.
Die Aktionsmenge interessiert uns auch nicht, wir können also so tun,
als gäbe es nur ein Zeichen, also Betrag von A ist gleich eins.
Ja, und dieses eine Zeichen steht jetzt an jeder Kante,
weil das sowieso an jeder Kante dran steht, können wir es weglassen.
So, die Transitionsrelation ist links total Und die Zustände sind so,
wie wir das eben bei Mikrowellenofen oder beim Kaffeeautomaten hatten,
etikettiert. Mit der Etikettenabbildung E in XS. So,
und weil wir gewissermaßen jetzt paar Altlasten von den Transitionssystemen mitschleppen,
die ein Element der Aktionsmenge insbesondere, einigen wir uns jetzt darauf,
dass wir nur das noch notieren wollen, was wir wirklich brauchen.
Also wir notieren eine Kryptostruktur M als dieses Viertupel,
bestehend aus einer Zustandsmenge S, muss nicht endlich sein.
Einer Teilmenge ist null davon, die wir als Staatszustände, Anfangszustände identifizieren.
Die Links totale Transitionsrelation eher, die Zustände mit den Folgezuständen verbindet.
Also das, was wir als Pfeile oder Kanten in dem Grafen malen.
Und wie zuvor der Zustandsetikettenfunktion ES, die im Zustand ist,
die Menge der in ihm gültigen, atomaren Formen zuordnet.
So. Dann haben wir erstmal die Kripke-Struktur und eine Kripke-Struktur ist
genau das, was jetzt Argument für jeden Analyse-Algorithmus ist.
Wir fragen uns, hat diese vorgegebene Krypto-Struktur,
die uns jetzt unseren Automaten XY beschreibt, hat die eine Eigenschaft,
Z. Und um Eigenschaften herauszufinden, betrachten wir jetzt die unendlichen Zustandsfolgen.
Zustandsfolgendes hatten wir schon mal, das ist ein Transitionssystem,
eine Folge alternierender Bauart, also er ist null,
A 0, S1, A 1, S2 immer Zustand,
Aktionen abwechselnd.
Und die ganze Folge beginnt in einem Staatszustand
So, wir wissen ja für Kripke, Strukturen ist die Angabe von Reaktionen überflüssig.
Wir können also gewissermaßen auf das A0A1 verzichten.
Das ist immer das Gleiche. Wir können das aber auch
gleich auf die Pfeile verzichten und schreiben jetzt für eine Kripke-Struktur,
dass ein Pfad manchmal auch Rechnung genannt,
DNS beginnt in Klein-S, dass das eine unendliche Folge ist,
P von S0S1 ist 2.
Und das ist ein omiger Wort über der Zustandsmenge.
Und zwar nicht irgendein Omega-Wort,
sondern es beginnt im Zustand S,
also S0S gleich
Und das könnte ich im Automaten auch so langlaufen. Also für jedes Igelt,
dass der Zustand SI und der Nachfolgezustand SI plus 1,
dass die beiden in der Relation eher, in der Transitionsrelation stehen.
Also zwischen SI und SI plus 1 gibt es eine Kante
in der Krypto-Struktur. Gut, und ganz analog,
wie wir das auch schon zu Transitionssystemen formuliert hatten,
definieren wir jetzt die Menge aller State-Sequences von der Krypto-Struktur M,
als die Menge Doppel-S-M,
als die Menge aller solchen
Fade Pi oder aller Rechnung, die in einem Staatszustand S beginnen.
Und bei solchen Rechnungen interessiert uns ja eigentlich nicht die Zustandsfolge,
sondern das, was rauskommt, wenn ich die Etiketten betrachte,
die die Ketten folge. Also wenn ich eine Zustandsfolge Pi habe,
S0 ist 1 ist 2,
und ich wende dort auf jeden Zustand die Etikettenfolge an,
bekomme ich also S ES von Pi, nämlich das komponentenweise mache,
also E von S0, E von S1,
E von S2 und so weiter,
was bekomme ich dann
Dann bekomme ich eine unendliche Sequenz von Teilmengen der atomaren Propositionen.
Also die Potenzmenge hoch Omega. Ja, also das ist
so geklammert, dass man sagt, Potenzmenge bilden.
Und dann hochommiger. Den Omega-Abschluss dafür. Gucken wir uns
das mal am Beispiel an. Wieder unser toller Automat.
Und der hat ja gar nicht so viele Möglichkeiten, was zu tun.
Also er startet im Staatszustand, muss dann zum Zustand S1
gehen. Und wenn er das gemacht hat, Naja,
dann hat er die Auswahl links da rum oder rechts da rumzugehen.
Also über den Zweig S2 S4, den T2 zu gehen oder
den S3 S5 Zweig, den Kaffee Zweig. Das heißt,
genauso wie es da in dem Omega-regulären Ausdruck steht,
S0 ist 1 und dann entweder es 2 plus,
also oder S3 S5, dann bin ich ja wieder am Startzustand,
was auch ein Endzustand ist und das Omega häufig.
So, also jede Rechnung ist aus dieser Menge.
Jetzt interessieren mich ja nur die Tiketten
Ich nehme also die Kettenabbildung eh in XS und wende sie auf diese Menge an.
So ist in diesem Fall einfach, jetzt komponentenweise auf diesen Ausdruck,
eine Freude für Klammerzähler, also eh von S0, E von S1.
Und dann die Abbildung im Zweig ist S2, S4 und S3 S5. Nochmal,
Klammern drumherum, ja, da fehlt eine öffnende, hochomega.
So, was denn da steht, wenn ich das ausrechne,
ich muss jetzt also nur die Etiketten,
wie sie im Diagramm daneben steht, dranschreiben,
Und wenn ich das ganz brav mache,
dann steht dort, naja, die Tickette von S0,
ist die leere Menge.
Etikette von S1 ist die Menge, die Alpha 1 enthält.
Und dann Alpha 1, Alpha 2,
leere Menge oder Alpha 1 sei für 3 leere Menge, geklammert.
Und da eigentlich nochmal komplette Klammern drum, hochomega.
Also da fehlen äußere Klammern. So,
und jetzt könnte man auf den Gedanken kommen,
ihr kennt ja reguläre Ausdrücken und multiplizieren von Mengen
Dass das ein Komplexprodukt ist. Und dann steht da ja
leere Menge, mal Menge, die Alpha 1 enthält.
Und dann weiß man, die Rechenregel, jeder mit jedem,
das führt dazu, dass da die leere Menge eigentlich rauskäme.
Weil leere Menge multipliziert mit irgendwas, es wäre die leere Menge.
So ist das aber nicht gemeint. Dieser Ausdruck soll nicht
weiter bearbeitet werden. Man hätte das auch anders schreiben können.
Also hätte ich jetzt gesagt, ich wandle die Etikettenabbildung leicht ab.
Man schreibt nicht die Etikette X, groß X hin,
sondern immer ein Zeichen A mit dem Index X.
Denn wird der gleiche Ausdruck, so stehen wie in der letzten Zeile,
wo all diese Mengen jetzt als Indie-Cs auftauchen würden.
Und schon wieder fehlt die Klammer. Ja,
und da käme man ja nicht auf den Gedanken jetzt,
a, leere Menge, a, Menge,
die Alpha 1 enthält, irgendwie noch vereinfachen zu wollen.
Das müsste man eigentlich gewissermaßen so schreiben,
weil man ansonsten ja mit den Mengen vielleicht weiter rechnen wollte
So, dass wir gewissermaßen konsequenterweise die vernünftige Schreibweise.
Sie führt aber dazu, dass eigentlich alles Wichtige in den Subskripten passiert.
Deswegen macht man das nicht. Deswegen benutzt man die erste Schreibweise
und schreibt einfach genau die leere Menge und die Menge,
die Eifer 1 dann hält, als Symbole hin.
Ihr müsst euch also jetzt daran gewöhnen, dass die Menge,
die Alpha 1 enthält, ein Element des Alphabetes ist,
das nicht mehr vereinfacht werden soll.
Also bei diesen Mengen passiert da nichts mehr.
Gut, nach dieser Warnung, ja jetzt wisst ihr,
da passiert nichts mehr
Schreiben wir es jetzt so wie in der mittleren Zeile dargestellt direkt.
Jetzt gucken wir, was machen wir damit?
Oder warum sollten wir damit was machen? Also warum sollen wir
diese Strukturen analysieren? Jetzt kommt ein Entspannungsblock, historischer Natur
. So soll der erste Bug der Computergeschichte ausgesehen haben.
Als ich mir mich in einen Rechner eine Motte verirrte,
dort einen Kurzschluss auslöste, schrieb Grace Hopper,
die Informatikerin der ersten Stunde First Actual Case of Buckbeing Found
Angeblich die Anekdote ist auf jeden Fall gut. Ja,
rührt der Name Bug. Genau, von dieser Ursache her.
Also damals, als alles noch groß und warm wurde.
Man wenige Rechner nur brauchte, drei Stöcke weltweit.
Auf die heutige Zeit umgemünzt sieht man hier dieses nette Lehrbuch von Kuven Ryan,
Logic and Computer Science, Modeling and Reasoning about Systems,
was auch auf eine Literaturempfehlung steht.
Und was sieht man dort ganz klein über diesen Barcode?
Da sieht man irgendwie so eine Keine Ahnung, Fackel,
Gasexplosion. Nee, es ist eine startende Ariane-5-Rakete, die
in Kuru gestartet ist. Und was ist da passiert?
1996. Nix Gutes, es ist passiert. Der erste Jungfern-Flug
dieser neuen Trägerrakete der Generation 5 war das. 740 Tonnen,
7 bis 18 Tonnen Nutzlast, das ist schon eine ganze Menge.
Damit kriegt man größere Satelliten oder mehrere Kleinen in die Höhe.
Man wollte die Nutzlast, also steigern, die ist schlicht mick,
trotz zehn Jahren intensiver und teurer Entwicklungsarbeit, mal munter,
nach dem Staat explodiert.
Und es war folgendermaßen, so eine halbe Minute nach zündender
Rakete erreichte die Ariane irgendwie ein horizontal Geschwindigkeit.
Die war fünfmal höher als ein Wert,
den man von der Ariane 4 kannte.
Also lief irgendwas aus dem Ruder. Was passierte dann?
Da wurde damit gerechnet, ja, Realzahlen wurden umgerechnet,
Intageerzahlen. Dann gab es durch die Konversion einen Überlauf.
Der wurde nicht abgefangen. Also da wurde damit weitergerechnet.
Der Ersatzrechner hatte das gleiche Problem.
Schon ein Tick früher schaltete sich sofort ab
Diagnose-Daten wurden geschickt. Die Diagnose-Daten wurden als Flugbahn interpretiert.
Das ganze Ding wollte korrigieren, merkte, das geht irgendwie nicht
und dann sprengte es sich aus Sicherheitsgründen dann ganz zum Schluss selbst.
Und Quintessenz, das ist passiert, obwohl,
das ist die gute E-Technik-Industrie, die hat ordentlich getestet.
Alles war erprobt, also wirklich auch Praxis abrupt von Ariane 4.
Das Problem war nur, es gab ein paar Veränderungen und
die Tests Oder teilweise auch die formalen Beweise hat man nicht übernommen.
Also, die hat man sogar einfach nur übernommen.
Man hat da nicht neu getestet und manche Sachen verhielten sich ein bisschen anders.
So, und dann kann man hier nochmal lesen,
was waren die Kosten? Na, erstmal hat das Ding
die Rakete einen gewissen Grundwert gehabt. Das nächste Problem war,
die ganzen Satellitenbetreiber hatten ja schon Ariane 5 Starts en masse gebucht.
Und die konnte jetzt nicht starten, ja, was funktioniert er nicht?
Die waren noch nicht so gewillt jetzt, ihre Satelliten in
dieser Rakete hochzuschicken. Das war übrigens der Grund,
warum man noch eine ganze Zeit lang Ariane 4 Raketen wiedergenommen hatte,
den Nachteil der geringeren Nutzlast hatten.
Manche Satelliten kamen gar nicht hoch oder nicht ein paar auf einmal.
Das heißt, entweder wurde gar nicht gestartet oder es wurde für irgendjemand teurer.
Naja. Bei der Ursachenanalyse war in einem Problem wahr,
dass man Probleme hatte. Ich gab irgendwie einen Teil,
der sollte aus Sicherheitsgründen ein bisschen deaktiviert sein,
50 Sekunden und dann sollte die Bodenstation die Kontrolle übernehmen
Und an dieser Stelle hakte es, das war ein relativ unwichtiger Teil der Entwicklung,
und den hat man von der Ariane 4 einfach übernommen und nicht irgendwie neu angesetzt.
Es gab andere Variablen,
und nur bei drei von sieben wurde überhaupt geprüft,
ob es einen Überlauf geben kann, denn bei den anderen vier,
den restlichen vier, gab es vorher schon mal Beweise,
dass es gar keinen Überlauf geben kann.
Und jetzt hat man gedacht, na,
der Beweis wird ja wohl immer noch gelten.
Wenn man das auf dem Papier macht,
ist das vielleicht auch eine schön faule,
aber leider auch eine
etwas kostspielige Herangehensweise
Ja, das ist das Problem, um es mal anders zu formulieren, das generell gilt Software,
die in einem Kontext getestet wurde und gut funktioniert, musst du nicht in jedem Kontext tun.
Es gibt mehrere Beispiele. Das ist jetzt ein Beispiel einer Sonde. In dieser Sonde gab es auch ein Steuerungsprogramm,
ein Vorortran, das sah so aus,
ich spreche keinen Vortran, aber der Punkt,
der das hier problematisch macht, ist der Punkt,
das weiß ich, da hätte ein Komma stehen sollen,
damit das irgendwie Als Zahl interpretiert wird, so interpretiert das,
der Vordrang kommt Piler als implizite Deklaration, vortragen,
hat ja so ein paar interessante Aspekte bezüglich der Wahl.
Riab in Deklaration. Und so wurde das irgendwie keine Schleife,
sondern eine Zuweisung an eine Variable, die irgendwie jetzt ad hoc deklariert wird.
So, und die Wirkung führte dann dazu, dass man
wieder Geld verpulverte, also die Sonne ging dann nicht.
War auch wieder ein Problem. Und jetzt kann man sich je in der Verschwörungstheorie aussuchen,
ob die Leute zu blöd waren oder ob das jemand versucht hat an den Songs,
auf Tests dann vorbei zu mogeln, um besonders viel Schaden hervorzurufen.
Nächster Spaß im AT&T-Telefonnetz gab es so ein paar Sachen.
Kann man sich auch nochmal phänomenologisch anschauen. Da gab es
im Jahr eine 1990 so ein kleines Problem, dass ich darin äußerte,
dass fast alle 70 von 138 Millionen von fernen Gesprächen in den USA neun Stunden lang nicht vermittelt werden konnten.
Okay, die Telekom hat, glaube ich,
vor kurzem, vor einem Jahr oder so,
im T1 als ähnliches hingekriegt irgendwie für einen halben Tag.
Aber für den Fall weiß man ungefähr, weil ein,
das ist wieder so ein Schaden von 75 Millionen.
Ich vermute mal einfach durch einen Gang Einnahmen etc. pp.
Und natürlich entstehen dort den Kunden Folge Kosten. Dadurch,
dass sie irgendwie Kunden nicht erreichen können, Kunden,
nicht Aufträge, rechtzeitig losliefern können und so weiter und so fort.
Und die Ursache ohne ganz so sehr ins Detail gehen zu wollen,
war die Tatsache, dass sich im Telefonnetz Nachrichten munter überholt hatten, innerhalb von kritischen Zeitspannen.
Also eine Schaltzentrale setzt so nach einer Fehlfunktion in den Reset-Modus.
Ich glaube, bis hierhin war das noch nicht weiter schlimm.
Das war wohl so eingeplant, dass das mal passiert
Ein normales Prozedere, okay,
alle anderen zentralen sollen das mitkriegen, kriegen eine Ausfallmeldung,
dann wird dort in den Fernmeldetabellen-Routing-Tabellen auch ein Gesett gemacht,
dann gibt es ein OK und eine Weiterleitung danach.
So eine kurze Pause, Resynchronisierung des gesamten Systems.
So, alle zentralen mussten darauf ihre Tabellen ändern,
okay, ja, gute Idee. Und bei drei Schaltzahl,
Schaltzentralen gab es jetzt offenbar das Problem,
dass die OK-Meldung ankam,
mit einer überlappten Zeitspanne von Gesprächen
So, und diese Verarbeitung zerstörte Daten, was wiederum zu
einem Ausfall führte, diese Ausfall führte wieder zu Resets.
Ja, und dann ging das Ganze von vorne los. Das heißt,
das wanderte dadurch als Wellen, dann gab es Probleme,
da kamen dann neue Wellen aus anderen Bundesstaaten wieder zurück.
Und so wanderte das Ganze. Schneeballartig, aber auch phasenartig
durch das ganze Telefonnetz. Bis man irgendwie merkte, okay
, was machen wir? Und die haben kurzerhand gesagt,
wir ändern das Protokoll, es werden keine OK-Meldung mehr geschickt.
Und dann konnte sich das Ganze wieder beruhigen. Ja,
dann gab es zu dieser zeitlichen Überlappung, das passierte nicht mehr.
Und dann konnte sich das System
wieder fangen
Das Interessante ist nicht, dass sowas passiert. Okay,
man hat das, man hat eine ganze Weile gebraucht,
um den Fehler zu finden.
Ich finde, eine Woche ist schon ganz schön eine große Zeitraum.
So lange wusste man gar nicht, worum es nicht geht.
Irgendwo hatte jemand den Break-Befehl von C falsch eingesetzt.
Da kriegt man eh beigebracht,
dass diese unschönen Ausgänge aus den Kontrollschleifen mit Break oder ähnlichen Sachen
sowieso mit vor sich zu genießen sind.
Naja, und der existierte komischerweise durch irgendeine Programmoptimierung
per Hand
Weswegen man auch lieber Compiler optimieren lassen sollte und nicht per Hand das macht.
Nur, die können das auch immer nicht so gut.
Den gab es bereits seit vier Wochen. Also vor vier Wochen
wurde die Optimierung eingespielt und dann gab es den Fehler.
Hat man immer Glück gehabt, dass da nichts passiert ist.
So, und so gibt es ähnliche Sachen,
ganz vor allem, den habe ich mal rausgenommen.
Ein ähnliches Problem gab es auch, jetzt nicht im Telefonnetz,
da mag man noch sagen, ist teuer.
Das gab es leider mal in der Steuerungssoftware eines medizinischen Geräts,
nämlich eines Röntgenapparats. Und der reagierte nicht mit einer Nichtvermittlung,
sondern leider schaltet er von normaler Strahlenbehandlung auf Röntgen, harte Röntgenstrahlung um.
Und da wurden Patienten regelrecht verstrahlt. Also die hatten Verbrennungen
teilweise durch das Gewebe hindurch. Was daran lag,
dass gewisse Aktionen möglich waren innerhalb von Zeitspannen,
die nicht hätten möglich sein können, hat keiner daran gedacht.
Der Konzern konnte es nicht reproduzieren. Schadensersatzplan wurden abgewiesen,
weil nicht möglich. Ja, das kann ja gar nicht passieren.
Eine abgemildeter Form hat man, kennt man das von Kreditkarten,
Pins, die auch angeblich nicht knackbar sind.
Und so hatte man hier Patienten verstrahlt, der Workaround,
das nochmal als letzte Bemerkung war dazu, Das konnte passieren bei gewissen Eingaben,
wenn man den Cursor da zu schnell bewegt.
Und das haben sie gemacht. Sie haben die Cursor-Tasten rausgebrochen und überklebt.
Gut. Woran liegt das? Zum Teil, es liegt
? Mal platt gesagt, ein gewisser Komplexität der Software,
es ist ein alter Hut. Ja, es fängt an,
altes Tech, 14.000 Zeilen, dann wird es immer schöner,
übers einfaches Handy, Habel-Boden-Software, wo auch immer man herweist,
wie viel Steuerungssoftware in Stealth-Bombe hat, Windows 95,
2000 und so weiter, Telefonsysteme bis 200 Millionen Zeilen.
Als Referenzgrößen 200 Millionen Zeilen, wenn man das ausdrucken wollte,
ein Stapel von 300 Metern.
Okay, das will schon keiner mehr irgendwie durchlesen.
Also es macht keinen Spaß. Da möchte ich nicht Co-Tester
sein. Und auch kein Code-Revisor. Das macht irgendwie auch
keine Freude. Und dann ist die Frage natürlich auch,
wie schnell kann man programmieren oder wie schnell kann man Fehler finden?
Da gibt es natürlich verschiedene Sachen, wenn ich programmiere,
dann hat man festgestellt,
es hängt gar nicht so sehr ab von der Programmiersprache,
wie produktiv man ist.
Soweitestgehend unabhängig davon
Also gewisse Grundkonzepte, die man im Kopf hat, lassen sich,
wenn man sie denn hat, in jeder Sprache gleichartig einsetzen.
Was aber der Fall ist, bei kleinen Programmen,
die man noch überschauen kann, kommt man ganz gut voran.
Das sinkt, je größer das Programm wird,
durch die Komplexität oder es sinkt, weil man vorsichtiger wird,
also bei sicherheitskritischer Software, sei es,
weil da Geld oder Menschenleben dranhängt,
sinkt das denn plötzlich von 50 auf ein,
zwei Zeilen effektiver Programmierkunst am Tag
Und da drunter steht dann, welche Fehlerhäufigkeiten so als akzeptabel angesehen werden.
Ja, angefangen von dem guten alten Wörth mit 25 Fehlern,
ja, und das geht dann runter. Bei medizinischer Software,
Steuerungssoftware für Flugzeuge steht hier 0,1 Fehler pro 1000 Zeilen.
Also das kann man eben, das rechte Mann so runter,
dass man sagt, wie viele Flugstunden ohne Unfall wollen wir haben?
Und ungefähr sagt man, naja, wenn Menschenleben dranhängen,
10 hoch 10, weil man das in Relation ungefähr setzt zu dem,
Code, der dahinter steckt, kommt man auf ungefähr solche toleratenen Fehler pro,
wo man gewisse Abschätzung macht, welcher Fehler zu Ausfällen führt.
Und jetzt ist es immer die Frage, natürlich,
es muss nicht alles verifiziert werden, wenn die Textverarbeitung abstürzt zu What,
im schlimmsten Fall sind die letzten zwei, drei Stunden Arbeitszeit weg,
ist meistens immer nur die Arbeitszeit einer Person,
geht also, Menschen kommen im seltenen Fallen zu schade.
Aber es gibt kritischere Sachen und kritische Sachen ist zum Beispiel,
ob ich nun selbst irgendwie einen Text schreibe oder ob ich
ein Betriebssystem für andere Leute entwickle,
da besteht schon ein gewisser fundamentaler Unterschied,
selbst wenn bei beiden keinem auf kein Menschenleben gefährdet ist
Und so pauschal sagt man ungefähr, man kann das Ganze testen,
indem man einen Menschen davor setzt oder ganz viele und sie arbeiten lässt.
Das ist nur sehr aufwendig, man schätzt 25, 185,
also irgendwie so in dem Bereich kann man testen für nur tausend Zeilen.
Wir haben gesehen, wie viele Millionen Zeilen große Programme haben.
Teilweise bringt auch testen nichts, weil da kriegt man nur
einen kleinen Bereich zu erfassen und man kann nicht sagen,
ob das für andere Werte,
die man gehabt hätte,
genauso gut gelaufen wäre,
der Test
Denn das nächste große Problem von Tests ist, man weiß immer nur,
wenn man einen Fehler gefunden hat, dass er da war,
wenn man keinen Fehler findet, weiß man nichts.
Man kann also nie mit einem Test herausfinden, dass es keine Fehler gibt.
Man kann immer nur finden, ja, es gibt einen.
So, dann programmiert man neu und dann hat man ja
das gleiche Problem. Und das nächste Problem ist,
man kann das nicht vernünftig einsetzen, okay,
mit Unit-Tests oder Ähnlichem versucht man dem ein bisschen näher zu kommen,
aber im Prinzip kann man nur testen, was da ist.
Das heißt, man kann Tests nur mit dem fertigen Produkt
machen, oder mit größeren Prototypen des Produktes.
Also sehr spät. Im Softwareentwicklungsprozess sind das die letzten Phasen.
Man braucht es aber eigentlich viel früher. Und der nächste Punkt ist,
wenn es nicht ein segnenziell arbeitendes Programm ist,
sondern was weiß ich, irgendwie ein komplexerer Algorithmus für,
was ist heute das Hipste und Axtuellste im verteilten System, Cloud-Management-Programme.
Also Software, die sich darum kümmert,
dass meine Rechnung in der Cloud und meine Daten in der Cloud
konsistent gehalten werden. Wenn ich da mir was überlege,
das ist ja bei weitem komplizierter durch die ganzen Nachrichten,
die hin und her geschickt wird,
geschickt werden
Wenn es da einen Fehler mal gibt,
der hängt ganz stark von dem Timing der einzelnen Nachrichten ab,
ist von daher sehr subtil schlecht zu finden.
Und kann einem vielleicht auch einen tausenden Test versuchen,
immer so durchrutschen, weil das Timing immer gutartig war.
Also versucht man, irgendwie besser als Testen zu sein und
zu verifizieren. So, und damit meint man nicht,
einen Beweis zu machen, sondern einen Beweis,
der nicht mit Papier und Bleistift funktioniert,
sondern ein Analyse des Zustandsraumes ist
Damit kann man jetzt feststellen, ob die Spezifikation,
die man am Anfang hatte, tatsächlich erfüllt ist.
Und wenn sie nicht erfüllt ist, kann man gucken,
was ist ein schlechtes Produkt oder die Spezifikation?
Praktische Erfahrung zeigen, Verhältnis, Spezifikationen zu Produkt,
also ein Drittel der Spezifikation ist gar nicht so,
wie man das gemeint hat.
Und zwei Drittel ist nicht so umgesetzt, wie man es gewollt hätte.
Hat den Vorteil, das ist eine Technik,
die universell ist, also man findet all das Verhalten.
Es ist industriell gut ansetzbar, sogar für große Systeme.
Also typischerweise werden Chips
damit verifiziert
Auf digitaler Beschreibungsebene bis hoch zu Pant Your Murder Ähnlichem.
Wer sich noch daran erinnert,
dass die Flow-Pointing-Units vom Pendium 1, glaube ich,
war das, einen Bug hatte, der weiß,
wer der Hauptgeldspender war, irgendwann mal für solche Techniken.
Also Intel hat die nächsten Generationen seiner Prozessoren massiv formal verifiziert,
hat da viel Geld reingepumpt. So,
und das als letzte Folie für heute ist die Motivation,
für solche Techniken ist es, man kann sie sehr früh einsetzen.
Und diese Grafik sagt einem, man hat am Anfang Erstmal eine Phase,
wo viele Fehler reinkommen, die dann später entdeckt werden.
Das ist der zweite Buckel. Und der dritte ist,
wie teuer das mich kommt, sie zu beheben. Ja,
und da wird im Prinzip gesagt, wenn nicht in eine Analyse
die Fehler finden kann und beben kann oder im konzeptuellen Entwicklung,
noch vor der Programmierphase, wo dann die ganz viele Fehler reinkommen.
Also wenn ich es schaffe, in den Frühphasen in der ersten Phase
bereits viele Fehler zu eliminieren, dann ist das unheimlich billig.
Denn diese dritte Welle da, die Kosten der Fehler aus Merzung,
die es in dem Bereich in den ersten drei Phasen unschlagbar billig,
wenn das fertige Produkt erst mal ausgeliefert ist und die Testphase durchlaufen hat,
dann wird es teuer.
Also das, die Motivation für in Frühstadien auf Teile
des Ganzen anwendbare Verifikationssachen. Und wie das aussieht,
was man damit machen kann, gucken wir uns dann am
Dodaker.
Bis da