System. Das heißt, ihr temporales Verhalten mit Hilfe von Logik beschreiben können.
Und wir hatten Aussagen, die wir sind taktisch folgendermaßen notieren konnten,
entweder in der Form Box P und das ist das Gleiche wie GP,
das heißt, immer gilt diese Eigenschaft P, P für Proposition.
Und genauso gibt es zwei Arten, historisch gewachsen, zu schreiben.
Irgendwann einmal gilt P, irgendwann einmal gilt oder Future P.
Und ein dritter Operator war der Antill-Operator und ein Vierter der Next-Operator und wir konnten solche Formeln bilden,
formal war das dann definiert über eine solche Bakus-Nauer-Form,
also True und Falls sind Formeln, alle atomaren Propositionen,
P sind Formeln, Negationen, Konjunktionen,
Disjunktionen sind Formeln, also bis hierhin eigentlich Aussagenlogik,
was jetzt hinzukommt, sind die temporalen Modalitäten, temporale Modalitäten,
also X, Finext, Aff for Future, G,
für Generally und Uwe an Till.
Also diese neuen Modalitäten können wir verwenden,
um neue Formeln zu bilden
Und mit üblichen Klammersparregeln kann man das jetzt ein bisschen verkürzen,
indem man beispielsweise sagt, Negation bindet sehr stark.
X bindet stärker als an Till, dann kann ich eine Klammerung weglassen,
also X bildet, bindet stärker auch als F und G.
Und wenn nur eine atomare Formel folgt,
dann kann ich bei einem Future R auch die Klammerung weglassen.
Und wir hatten uns beim letzten Mal angesehen,
diese Operatoren sollen das bedeuten, wie man sie auch spricht,
XP,
Next Time
Oder FP irgendwann in der Zukunft gilt P. GP für Always
oder Globaly Guild P. Und P. Antil Kuh soll bedeuten,
es gibt in der gegebenen Folge einen Zeitpunkt,
in dem kugelt und vor diesem Zeitpunkt gilt immer P. Also
auf einem Zeitstrahl visualisiert, es gibt diesen Zeitpunkt Kuh.
Und davor habe ich immer die Eigenschaft P gültig.
So, das ist erstmal die informale Beschreibung,
aber wir können uns ungefähr schon denken,
was für Formeln
ausdrückbar sind
Zum Beispiel die erste Formel, wenn man da sieht,
nicht rund Antil Roth, der obere Block.
Das gilt nicht für diesen gesamten zeitlichen Ablauf. Das schon
mal nicht, aber es gilt ab dem grünen Quadrat.
Weil es ab dem grünen Quadrat gilt, da kommen mich
bis zu dem roten Kreis nur nicht runde Sachen, nämlich Quadrate.
Das heißt, das stimmt schon mal. Es gilt aber
nicht von Anfang an, deswegen ist diese Formel an sich falsch.
Sie ist aber richtig, wenn ich den F-Operator davor packe
Also sagt irgendwann in der Zukunft, wird diese Formel nicht rund Antel Rot gelten.
Das, was mit der geschweifenen Klammer um diesen gesamten Ablauf
herumsteht. Wenn ich das jetzt formal unterfüttern möchte,
dann mache ich das bei Aussagenlogik ja so, dass ich sage,
zu jeder Formel gebe ich eine Auswertung und diese Auswertungsfunktion
bildet das Ganze auf wahr oder falsch,
null oder eins ab.
Und sehnlich läuft das auch,
nur dass wir das jetzt nicht interpretieren,
indem wir nur die Atome mit wahr oder falsch
belegen und daraus ergibt sich in Aussagenlogik ja der gesamte Wahrheitswert
der gesamten Formel
Wir machen es jetzt folgendermaßen. Wir überlegen uns einen Ablauf,
also eine solche Sequenz, wie sie hier illustrativ dargestellt ist.
Und das sind unsere diskreten Zeitpunkte und diese Zeitpunkte sind dann dafür da,
um zu interpretieren, ob eine Formel war oder falsch ist.
Das heißt, der Wahrheitswert einer Formel,
das haben wir schon gesehen, ist nicht absolut gegeben,
sondern hängt auch ab von dem Zeitpunkt,
an dem ich es betrachte.
Ja, in diesem Beispiel ist es beispielsweise so,
dass nicht rund Antil Roth ist nicht am Anfang gültig,
aber zum Beispiel ab dem Zeitpunkt,
wo dieses grüne Quadrat auftritt
Also Formeln sind nicht wahr oder falsch, sondern sie sind
relativ zu einem Zeitpunkt in diesem Zeitstrahl, war oder falsch.
Und natürlich interessiert uns jetzt der Wahrheitswert eine Aussage bezüglich des Startpunktes des Zeitstrahls.
So einen Zeitstrahl formalisieren wir als Sequenz, als unendliche Folge, Alpha.
Und jedes Element von Alpha ist eins dieser A-Indexi,
also A0, A1, A2, unendlich weiter.
Also ein omega Wort. Und jedes A ist aus der
Potenzmenge der atomaren Proposition. Das heißt, A ist eine
Teilmenge von atomaren Formeln. Und die Intuition soll sein,
das sind genau die atomaren Formeln, die zu diesem Zeitpunkt gültig sind.
Also ein A0, in dieser Menge sind alle atomaren Formeln,
die jetzt im Zeitpunkt null gültig sind.
Und das kann sich natürlich ändern über den Zeitverlauf hinweg.
Jetzt brauchen wir noch eine Notation für jedes I sei Alpha-Superskript I,
einfach das, was ihr halte,
wenn ich I minus eins von 0 bis I minus eins alles wegschneide,
also ab AI beginne.
Ich schneide also
ein endliches Anfangsstück weg
Und zwar genau I-Stück, weil ich ja mit null beginne zu zählen.
So, also das Reststück des Suffix von Alpha ab,
dem Index I. Und jetzt definiere ich im Prinzip
genauso wie der Induktiv über den Formelaufbau den Wahrheitswert.
Und das ist jetzt in drei Blöcken aufgeteilt,
der erste Block. Ja, den muss man machen,
der ist so, wie man sich das denkt.
Jeder Ablaufeifer erfüllt True. Ja, die Konstante True ist
leicht zu erfüllen. Und kein Ablaufalpha ist in der Lage,
die Kontradiktion Falls zu erfüllen.
Denn der zweite Block drittens bis sechstens sagt,
die atomare Form mit P ist in dieser Sequenz,
Alpha gültig, genau dann, wenn.
Das P in der Menge A0 vorkommt.
Also wir gucken schlichtweg nach, ist die atomare Form mit P
gerade schon zum Zeitpunkt T gleich null.
In der Menge der aktuell gültigen Formeln A0 enthalten. So,
und das ist der eigentliche Basisfall,
deswegen haben wir diese A0A1-Mengen,
um das nachgucken zu können
Denn der nächste Punkt ist genauso wie ein Aussagenlogik,
eine Folge erfüllt nicht F, naja,
wenn die Folge Alpha eben die Formel F eben nicht erfüllt.
Also, wenn ich es spreche,
schubse ich nur die Position des Nichts umher.
Einmal ist es aber das sind Taktische nicht,
also Negation von F und beim anderen ist es erfüllt nicht die Formel F.
So, die Disjunktion F1 F2 ist halt in der Sequenz Alpha erfüllt,
wenn entweder Alpha F1 erfüllt oder Alpha F2 erfüllt oder meinetwegen
auch beide erfüllt sind
Und die Konjunktion F1 und F2 ist genau dann für diese Sequenz Alpha erfüllt,
wenn sowohl die Formel F1 als auch die Formel F2 für diese Sequenz Alpha erfüllt sind.
Gut, bis hierhin genau das, was man bei Aussagenlogik
auch so schreiben könnte. Da müsste man noch nicht mal wissen,
dass Alpha eine Sequenz ist. Das ist eine Sequenz,
das sieht man jetzt im letzten Blog, Punkte 7 bis 10.
Da sage ich diese Sequenz Alpha erfüllt XF,
genau dann, wenn Alpha hoch 1 F erfüllt.
Ein Alpha hoch 1 ist ja genau die Sequenz,
die ich erhalte, wenn ich erst ab dem Zeitpunkt 1 beginne.
Also genau das nullte Element, wo ich beginne zu zählen, wegschneide.
Ich bilde also den Rest der Folge, gehe zum nächsten,
kriegt dann wieder nur endliche Folge, Alpha hoch 1. Naja,
und das alte Nächste ist jetzt das neue Erste.
Das heißt, in Alpha hoch 1 muss ich jetzt
nur nachgucken, was gilt dort aktuell.
Und deswegen frage ich es in Alpha hoch 1,
gerade in die Formel F erfüllt.
Bin gewissermaßen ein Zeitschritt in die Zukunft gegangen
Wenn ich jetzt wissen will, ob bei Achtens die Sequenz Alpha,
die Formel F, F, also Groß-F-Klein F,
in der Zukunft irgendwann mal gilt F, erfüllt,
dann ist das der Fall,
wenn es irgendein Zeitindex K gibt, sodass Alpha hochkam,
also ich lasse die ersten K-Elemente weg.
Wenn zu diesem Zeitpunkt gerade F gilt, das ist dann
dieser Zeitpunkt in der Zukunft, nämlich genau zum Zeitpunkt K.
Und sehr ähnlich kann ich jetzt formulieren,
weil gilt GF, das ist genau dann der Fall,
wenn jetzt für alle K Und zwar ab dem Zeitpunkt null gilt,
dass ab diesem K diese Formel F gilt.
Also Alpha hoch K sagt er, jetzt gilt es,
ab dem ersten Schritt gilt es ab dem zweiten,
ab dem dritten und immer so weiter.
Das heißt, zu jedem Zeitpunkt K gilt diese Formel F.
Und zehntens gibt jetzt die Semantik für Antil, F1, Antil F2.
Und da steht eine doppelte Bedingung, das ist ein bisschen aufwendiger.
Da steht zum einen, es gibt ein K,
sodass zu diesem Zeitpunkt K die Formel F2
erfüllt ist
Also das ist schon mal garantiert. Und die zweite Bedingung sagt,
dass zu jedem Zeitpunkt J, vor diesem K,
die Formel F1 gilt. Alfo J, erfüllt F1. Das heißt,
unsere Bedeutung von F1, Antil F2,
ist irgendwann einmal Guilt F2, um zu allen Zeitpunkten,
die echt davor liegen, gilt F1.
Das könnte auch zu diesem Zeitpunkt K gelten,
muss aber nicht, steht hier. Insbesondere ist möglich,
dass K zum Beispiel gleich Null ist, dann würde F1 nie gelten.
Das wäre auch erlaubt. Wenn sofort der Fall eintritt,
die zweite Formel ist, war, jetzt sofort und hier,
dann muss F1 nie wahr gewesen sein.
Es existiert ein Paar. Nö, das ist ein Tippfehler in diesem Sinne.
Also ob da was steht oder Punkt steht oder ein Doppelpunkt
, ist eh weitestgehend wurscht.
Irgendwann kann man damit Dinge treiben,
aber bislang ist es
völlig wurscht
Also in diesem Sinne, ja, es ist ein Tippfehler.
Gut, und so haben wir auf jeden Fall über den
rekursiven Aufbau der Formel. Diese Formel hat ja einen Syntaxbaum.
Wenn ich diesen Syntaxbaum jetzt von der Wurzel zu den Blättern verfolge,
weiß ich also, wie ich den Wahrheitswert ausrechnen muss.
Genauso habe ich das bei Aussagenlogik auch gemacht. Nur,
dass es hier ein bisschen aufwendiger ist mit den temporalen Operatoren XFE und U.
Und jetzt schreiben wir kurz Alpha, erfüllt semantisch F,
also für die Folge Alpha gilt das F oder Alpha erfüllt F kurz.
Das ist also unsere Syntax, um auszudrücken,
für diesen Ablauf gilt die Formel F.
So, wenn wir jetzt eine Sequenz haben,
Alpha soll eine unendliche Folge von Aussagenmengen sein.
Jetzt nehmen wir mal hier unseren Mikrowellenofen,
der diese abstrakten Zustände hat, man kann Aktionen machen,
also von Zustand eins zum Zustand 3 komme ich durch das schließende Tür
Und dann gilt ein neuer Zustand, weil vorher gilt not close, hinterher gilt close.
Also hier ist explizit aufgeführt, auch welche Atome nicht gelten.
Eigentlich würde es ausreichen, nur die positiven Fälle zu listen.
Also für den Zustand 1 gar nichts, dass wir die leere Menge.
Und im Zustand 3 würde ich nur die Menge,
die Close enthält, hinschreiben.
So, wie kann deine Sequenz aussehen? Wenn ich jetzt anfange,
hier durchzulaufen, dann habe ich die Vorstellung,
wie baue ich mir so
eine Sequenz auf
Ich nehme einfach entlang der Zustände die Menge der atomaren Propositionen mit,
die da so stehen. Und da ich im Zustand eins
starte, schreibe ich dort A 0 hin und A
0. Ja, da gilt gar nichts.
Also die leere Menge. Dann mache ich den Übergang zu 3.
Das gilt schon was, nämlich die atomare Proposition close.
Und jetzt betrachte ich mal den Ablauf,
bei dem es weitergeht, dass sie das Ganze hier anwerfe.
Also ich starte den Ofen mit der Starttaste.
Bin also im Zustand 6, im Zustand 6 sieht man
Start and Closed gilt
Also habe ich das hier? Dann gehe ich rüber zum
Zustand 7. Die Aufwärmphase führt dazu, dass der Backofen jetzt
auch heiß ist. Also bekomme ich Start Close und Heat
. Das habe ich jetzt also als Menge A 0123,
das WA3. Wenn ich jetzt nach oben gehe,
eine andere Wahl habe ich eh nicht,
dann beginne ich das Kochen.
Ja, dann ist der Startknopf nicht mehr aktiv
Also komme ich zum Zustand, in dem die Tür
geschlossen ist und das Ganze noch schön heiß ist.
Und Kochen dauert so eine Weile, ich bleibe aus in diesem Zustand.
Und wenn ich mich jetzt entschließe, immer drin zu bleiben,
dann hätte ich jetzt die Sequenz, diese Menge Close-Heat unendlich lange wiederholt. So,
und wenn ich jetzt angucke, was ist jetzt Alphahoch 3,
dann soll ich 0-1 und 2 wegschmeißen,
0 ist die leere Menge, An der Position 1 steht die Menge Close,
an der Stelle 2, Startclose, das heißt Alpha,
3, ist alles, was danach folgt nach 0-1,
2. Also mit anderen Worten, wieder eine Omega-Sequenz,
aber jetzt Startclose-Heat und dann Close-Heat immer so weiter.
Ungefähr so möchte ich das später benutzen, kommen wir später nochmal zu,
bislang ist es einfach nur so, die Sequenzen,
die Alphas, die fallen bislang noch vom Himmel,
aber natürlich werden wir sie später von einem Zustandssystem generieren lassen
Bislang gibt es die aber noch nicht,
weil wir einfach sagen, wir geben ein Alpha vor und
zu diesem Alpha gilt eine Formel oder sie gilt nicht.
Was wir jetzt machen können, ist erstmal ohne auf Kripke-Strukturen abzuheben,
können wir uns die Logik anschauen. Wir wissen ja schon,
wie eine Formel definiert ist, wie sie aussehen kann.
Und wir wissen auch, was sie bedeuten soll.
Und wir können uns jetzt also überlegen, naja,
was haben zwei Formeln miteinander zu tun?
Und wenn wir das Spiel treiben, dann werden wir feststellen,
es gelten da gewisse Tautologien.
Ja, in der Mitte steht eine uns wohl vertraute Tautologie
Da steht, dass du morgen schon ein Gesetz,
da steht nämlich die Konjunktion ist Äquivalent zur Negation der Dissunktion der Negation.
Solche Tautologien kennen wir von der Aussagenlogik. Das Ganze
kann man jetzt hier auch treiben. Zum Beispiel in der
ersten Zeile steht Globaly F, also immer gilt F,
sei das Gleiche wie, es ist nicht der Fall,
dass in der Zukunft einmal Nicht-F gelten würden.
Oder ein bisschen Lachser formuliert ist es nicht der Fall,
dass irgendwann in der Zukunft die Negation von F gilt.
Das soll das Gleiche sein
wie immer gilt
Und daran erkennt man schon, G ist sowas wie ein All-Quantur,
er quantifiziert universell über alle Zeitpunkte und F
ist ein Existenzquanteur über die Zeitpunkte.
Und das Verhalten, was hier steht, ist das,
was wir auch schon aus Prädikatenlogik kennen.
Denn für alle F ist semantisch Äquivalent
zu nicht existiert.
X für das Nicht-F gibt
Eine solche Dualität hatten wir also auch schon in der Prädikatenlogik.
Hier ist sie jetzt ohne Variablen aufgeführt,
in der Prädikatlogik steht ja immer für alle X,
gilt irgendwas oder es existiert ein X, sodass etwas gilt.
Dieser Zeitpunkt K, das ist jetzt unser X,
nur dass es nicht explizit da steht. Das liegt schlichtweg daran,
dass wir hier uns auf eine Domäne beziehen,
bei der es eh immer nur um Zeitpunkte und eh immer
nur um einen Zeitpunkt geht,
sodass das Ganze implizit verschwindet.
Also geh F, wissen wir bedeutet,
es ist für alle Zeitpunkte
K gilt
Aber gewissermaßen steht dort das Gleiche wie Dualität der Prädikatenlogik.
Und in der dritten Zeile steht etwas sehr Praktisches.
Da steht, in der Zukunft gilt einmal 11 ist
das Gleiche, als würde ich sagen True Until F.
Und das kann man sich folgendermaßen erklären,
True Until F. Antil hat ja die Bedeutung,
die hintere Formel muss irgendwann eintreten.
Also irgendwann mal gilt F. Wenn ich das schon weiß,
dann gilt erst recht Future
Denn genau dieser Punkt sagt Future F irgendwann in der Zukunft einmal.
So, das heißt, die rechte Seite impliziert die Linke also auf jeden Fall.
Da haben wir sogar mehr Bedingungen in dem Antil.
Das ist nur ein Spezialfall von rechts nach links gelesen.
Das ist jetzt von links nach rechts auch gilt,
als Implikation liegt schlichtweg daran,
dass da vorne das True steht beim Antil.
Und das führt dazu, dass die Zusatzbedingungen,
ich wissen also jetzt, irgendwann gilt einmal F.
Und was war beim Antil, die zweite Bedingung?
Ja, davor muss immer diese andere Formel gelten.
In diesem Fall steht da also True True
sehr leicht zu erfüllen.
True gilt immer
Das heißt, um davor immer True zu erfüllen,
muss ich also gar nichts haben. Das gilt immer.
Jeder. Jede Formel erfüllt zu jedem Zeitpunkt True.
Was heißt das jetzt? Diese beiden Operatoren, F und G,
an denen wir das festgemacht haben. Also es existiert ein Zeitpunkt,
zu dem F gilt oder für alle Zeitpunkte K, Guilt F.
Die beiden sind gewissermaßen überflüssig. Denn nach der dritten Zeile
sehen wir ja, wenn ich den Antilloperator habe,
Denn kann ich damit gewissermaßen als Makro kodiert,
auch den F-Operator beschreiben.
Das heißt, überall, wo ich gerne F benutzen würde,
sage ich, ja, ja, das schreibe ich so hin.
In Wirklichkeit meine ich aber True Until F. Gut,
das wäre dann eine einfache Substitution auf der Formel.
Dann kommt in meiner Formel auf jeden Fall nie wieder
ein F vor, das brauche ich nicht.
Und mit dem ersten Punkt sehe ich, ich brauche kein G.
Könnte ich syntaktisch darauf verzichten, ohne das abzuschwächen.
Denn damit sehe ich ja, wenn ich GF habe,
das kann ich immer
durch F ausdrücken
Also der Globaly-Operator ist ausdrückbar durch den Future-Operator und der wiederum
durch den Antill-Operator. Das heißt, diese beiden Operatoren,
G, GroßG und GroßF sind beide durch den Antill-Operator darstellbar.
So, das heißt, formal puristisch können wir jetzt G und F
aus unserer Logik eigentlich rausschmeißen, dann haben wir es ein bisschen übersichtlicher.
Wenn man ein Tool dafür schreibt,
ist das auch sehr vorteilhaft, wenn man also sagt,
okay, ich schreibe keine Prozeduren,
die etwas mit G und F zu tun haben,
sondern nur eine sehr effiziente Prozedur für Antill
Dann ist das ein sehr schlaues Vorgehen, denn der User
am Rechner kann ja trotzdem weiterhin G und F benutzen.
Das würde ich dann hinterher weg manipulieren, auf der Formel-Ebene.
Und dann habe ich eine Formel,
die kein G und kein F mehr enthält.
Und dann kann das Tool hocheffizient nur mit dem Antill umgehen.
Und genauso ist es mathematisch. Ja,
wir wollen eigentlich auch nur eine Logik haben mit Antil,
weil typischerweise müssen wir Beweise führen.
Und dann ist es praktisch, wenn unsere Logik möglichst klein ist,
weil wir funktionieren Beweise,
die funktionieren meistens per Induktion über den Formelaufbau
Und dann muss ich für jeden Operator einen Fallunterscheidungspunkt machen.
Und wenn G&F da gar nicht mehr drin vorkommt,
spare ich mir schon zwei. So, das heißt,
der Mathematiker ist genauso wie der Programmierer faul und möchte da
möglichst wenig Elemente haben, an die er denken muss.
So, in diesem Sinne ist es also überflüssig.
Allerdings nur, naja, das kann ich ja erst zeigen,
wenn ich die Semantik erstmal formal festgelegt habe.
Aus diesem gewissermaßen Kreislauf kommt man nur dann raus,
wenn man entweder oder zwei Dinge hat man dazu aus,
weil entweder sagt man, Ich gebe für G&F 0 umgangssprachlich eine Beschreibung,
aber nie eine formale Semantik.
Und sagt, die formale Semantik definiere ich durch solche Ersetzungsoperationen. Das heißt,
ich habe nie definiert, nehmen wir das die letzte Zeile,
was diese Mantik des Groß-F-Operators ist, sondern ich sage einfach,
die Semantik definiere ich indirekt über True Until F.
Denn hat der Operator F nie eine formale Semantik bekommen,
dann halten solche Äquivalenzen trivialerweise nach Definition. Oder,
wenn ich die Äquivalenzen tatsächlich nachweisen möchte, gewissermaßen erst hinterher feststelle,
ach, da habe ich ja was Redundantes in meinem System.
Naja, dann habe ich die Semantik eben erstmal definieren müssen.
Wir haben uns jetzt hier für den Weg entschieden,
die Semantik ist erstmal komplett definiert und hinterher haben wir sie dann,
haben wir festgestellt, dass wir es gar nicht hätten machen müssen.
Das geht auch mit diesen Äquivalenzen. Sollen wir uns hier nochmal in die Definition angucken,
nochmal als Wiederholung, diese drei Blöcke, die Konstanten,
die Aussagen logischen Verknüpfung, dritter Block, die Temporaloperatoren,
Dann gucken wir uns mal, dass nochmal einen Kleingedruckten an.
Nehmen wir einfach die letzte Zeile, dass an Till,
was ja wichtig ist. Hatten wir schon mal ungefähr gesagt,
dass es ein Zeitpunkt K geben muss.
Das soll jener sein. Was dahinter gilt, ist völlig wurscht.
Da kann F 1 F2, nichts von beiden 1,
von beiden gelten. Es ist egal. Und für
alle Zeitpunkte davor bin ich auf jeden Fall sicher,
dass dort F1 gilt
Und in dem Sinne ist es dann auch ganz klar,
wenn ich True Antel F betrachte,
an dem roten Zeitpunkt K, da gilt ja das F.
Und für alle anderen Zeitpunkte muss ich jetzt nur True gelten,
weil das gilt ohnehin. In diesem Sinne kriegt man sofort diese Äquivalenz,
so kann man das beweisen,
dass Future F das Gleiche ist wie True Antel F. Sondern hatte ich irgendwann mal gesagt,
dass diese Logik etwas mit den Büchi-Automaten zu tun hat und das ist Schon mal auf den syntaktischen Blick völlig klar.
Denn wir haben ja mit Alpha so eine unendliche Folge an
0-1, A-2. Über einem, sagen wir mal,
relativ komplexen Alphabet, das Alphabet besteht nämlich aus Poetenzmengen,
also aus der Poetenzmenge, also allen Timemengen.
Gut, sieht komisch aus, ist aber auch letztendlich
nur ein Alphabet. Und jetzt kann ich Folgendes machen.
Ich kann eine Formel A vorgeben und sagen, die Sprache,
die Omega-Sprache von F ist jetzt die Menge aller Sequenzen Alpha,
der oberigen Bauart,
die die Eigenschaften haben,
dass sie
die Formel F erfüllen
Also die Menge aller F-Erfüllenden Folgen, Alpha. Was ich da habe,
ist erstmal eine Omega-Sprache. Und für uns ist es jetzt spannend,
auch insbesondere fürs Modelchecking später, werden wir noch sehen,
dass das nicht irgendeine Omega-Sprache ist,
sondern tatsächlich so auch eine omega-reguläre Sprache.
Wir werden später sehen, dass das El Omega von F
immer eine Sprache ist, die er von einem Bücherautomaten akzeptiert werden kann.
Und das ermöglicht uns Algorithmen zum Modelchecking.
Auch das schauen wir uns nochmal an
Was wir jetzt als nächstes aber erstmal machen wollen,
müssen, ist, uns zu fragen,
wie hängt denn beim Automaten das Verhalten mit diesen Folgen Alpha zusammen?
Ja, das ist so, wie man das beim Mikrowellenofen vorhin gesehen hat.
Wir latschen einmal durch einen Automaten und gucken uns nach,
was steht da an Etiketten dran.
Ich nehme also mir eine unendliche Folge von Zuständen in dieser Krypto-Struktur.
Also P ist gleich, S0 ist 1 ist 2 immer
so weiter
Eine Zustandssequenz. Aus meiner Krypto-Struktur. Und ich weiß ja,
ich kann in der Krypto-Struktur, habe ich für jeden Zustand eine Menge,
eine Teilmenge der atomaren Proposition, nämlich die der Gültigen.
Meine ich eine unendliche Sequenz habe, dann kann ich diese Etikettenfunktion,
hatten wir auch schon mal für einen Allgemeinen Fall,
für eine beliebige Etikettenfunktion,
dann kann ich diese Etikettenfunktion e-index-s auch auf diese Folge P loslassen,
indem ich einfach für jeden Zustand einzeln die Menge ausrechne,
also ES von S0, e von S1 und immer so weiter.
Und was da rauskommt,
ist ja wieder
eine Omega-Folge
Ja, und genau die Omega-Folge, die wir haben wollen,
genau das haben wir ein Beispiel gemacht.
Wir haben die Etiketten eingesammelt entlang des Zustandsfahrens. Und was
da rauskommt, ist jetzt tatsächlich eine Omega-Sequenz von Teilmengen,
atomare Proposition. Gut, und jetzt definieren wir Gültigkeit,
wenn wir eine Krypto-Struktur vorgeben. Wir sagen nämlich,
wenn M eine Krypto-Struktur ist und Pi eine Zustandssequenz in dieser Krypto-Struktur,
also ein Pfad, dann sagen wir,
In dieser Krypto-Struktur bezüglich dieses Fahren des P gilt die Formel F,
genau dann, wenn die Kettin von diesem Pfad Pi die Formel F erfüllen.
Was der rechte Ausdruck bedeutet, das wissen wir schon.
Denn ES von Pi ist eine Sequenz von A0A1A2,
also eine Sequenz, die wir vorher immer mit Alpha bezeichnet haben.
Und wann eine Sequenz Alpha eine Formel F erfüllt,
ist erfüllt, das haben wir schon definiert.
Und jetzt sagen wir indirekt, okay,
eine Zustandsfolge Pi in einer Krypto-Struktur M
erfüllt die Formel
Wenn die Etikettenfolge von Pi das tut.
Das ist ganz praktisch. Jetzt ist es also egal.
Ich kann sagen, auch eine Zustandsfolge erfüllt eine Formel F.
Jetzt kann ich das Ganze noch auf einen Staatszustand beziehen.
Ich sage, eine Formel F gilt oder ist gültig,
in einem ausgezeichneten Zustand klein ist, der Kripke-Struktur.
Wenn für alle Pfade Pi DNS starten, gilt,
dass diese Kripke-Struktur mit diesem Pfad Pi die Formel F wahrmacht,
Und das für jeden möglichen Pfad. Also alle Pfade,
die in S beginnen, erfüllen die Formel F.
Und das notiere ich eben als die Kripre-Struktur M und
der Zustand S, dieser Kripre-Struktur, erfüllen die Formel F.
Und der dritte Punkt sagt, eine Formel gilt in
der Kripre-Struktur M, wenn sie in allen Anfangszuständen gilt.
Dann kann ich das weglassen und sage nur noch M erfüllt F,
wenn für alle S aus der Startzustandsmenge es null gilt,
M,
1 erfüllt
So, damit wissen wir jetzt, und darauf wollten wir eigentlich hinaus,
dass eine Krypke-Struktur und eine Krypke-Struktur ist eine Systembeschreibung.
Unser Kaffee-T-Automat, da will ich ja fragen, erfüllst du lieber Kaffee-T-Automat die Formel F? Ich möchte also wissen,
erfüllt Kaffee-T-Automat F, also Kaffee-T-Automat,
semantische Implikation F. Naja, und das soll eben gelten,
wenn man das rückwärts jetzt liest, für alle Fahne,
die in der Kaffee-T-Automat hat, einen Staatszustand,
diesem einen Staatszustand losgehen, alle Pfade betrachtet,
wenn in allen Faden gilt, dass die Formel F gilt,
dann sagen wir, ja, der Automat erfüllt das.
So, da möchten wir irgendwann hingehen,
diese Frage für vorgegebene Zustandsbeschreibung, Transitionssysteme, Kripke-Strukturen,
möchten wir diese Frage effizient beantworten können?
Gegeben eine Kripke-Struktur und gegeben eine Formel F,
erfüllt die Kripke-Struktur die Formel F?
Was können wir jetzt noch machen? Wir können auf
der Formel-Ebene bleiben, also noch semantisch etwas machen
Wir können nicht sagen, wann eine Formel gehe aus einer anderen Formel erfüllt.
Das gab es in Logik auch schon mal. Das wollen wir sagen,
wenn ich in eine beliebige Kripke-Struktur M vorgeben kann,
also für jede Kripke-Struktur gilt, M erfüllt F,
dann impliziert das auch das MG erfüllt.
Egal, welche Kripke-Struktur ich nehme, F impliziert also auch G gewissermaßen.
In diesem Sinne ist die Formel F so stark,
dass sie die Gültigkeit von G erzwingt
Und zwar das bezüglich aller Modelle N. Gut, das notieren wir so.
F. Geh folgt aus F, haben wir das gesprochen.
Und dann, wenn das in beide Richtungen gilt,
also für F&G gilt,
in jeder Kriptrestruktur gilt F genau dann, wenn auch G gilt,
dann sagen wir F und G sind semantisch äqualent.
In dem Sinne hätte man auch vorhin schreiben können,
dass Future F semantisch äqualent ist zu True Until
Dann wäre es keine Tautologie mit so einem Biblikationsfall,
sondern dann hätten wir einen Vergleich zwischen zwei Formeln und deren Wahrheitsverlaufen.
Jetzt wollen wir mal schauen, wie gut kann ich Systeme eigentlich mit LTL unterscheiden?
Also es ist eine beliebte Frage, wie ausdrucksmächtig ist meine
Logik eigentlich? Und das kann man beispielsweise daran messen,
dass ich sage, und wenn ich zwei Systeme vorgebe,
kann ich da immer eine Formel finden,
die im einen gilt,
aber nicht im anderen
Also bin ich in der Lage, mit einer noch zu
konstruierenden Formel F, die beiden Systeme zu trennen.
Oder kann das passieren, dass ich zwei Systeme habe,
aber es ist der Fall, wenn eine Formel im einen gilt,
dann auch immer am anderen und umgekehrt.
Das heißt, mit keiner Formel F kann ich da einen Unterschied feststellen.
Wenn ich mir eine Formel vorstelle als Test,
um sie zu trennen, dann könnte es ja sein,
dass es gar nicht geht.
So, und jetzt haben wir den trivialen Fall,
wenn ich zwei Transitionssysteme habe, die Struktur gleich sind.
Die Zustands mit Zeichen heißen anders. Beim einen heißt das
S0 S1 S2, beim anderen heißt es Z0 Z1 Z2.
Das sind formal erst mal unterschiedliche Kripke-Strukturen. Ja,
die werden wohl nicht auseinanderzuhalten sein, wenn die gleichen Übergänge haben.
Deswegen schließt man solche trivialen Sachen, das heißt Strukturgleichheit,
vornehmer Isomaphie, das muss man da ausschließen.
Das ist ein bisschen langweilig. Also eigentlich will man
auch keine Logik haben, die Isomorphe Modelle unterscheiden kann
Wenn wer die Logik mich in der Lage bis zur Syntax vorzubringen,
und zwar Syntax der Systeme,
und dann wäre die Logik in der Lage nicht über das,
was da passiert, sondern wie das, was passiert,
wie das kodiert ist, zu reden.
Und das will man eigentlich gar nicht so sehr ins Detail,
möchte man dann doch nicht geben.
Man will nur über das Verhalten, aber nicht über die
Darstellung des Verhaltens reden. So, die erste Aussage,
die wir mit diesem Lämmer treffen können, wenn wir zwei Krypto-Strukturen haben.
Und die etike etikettierten Zustandsfolgen dieser beiden Krypto-Strukturen M1 und M2
sind immer gleich
Dann kann keine RTL-Formel die beiden Systeme unterscheiden.
Das heißt, wenn die Formel sie in M1 gilt,
dann gilt sie auch in M2 und umgekehrt.
Das kann, entweder liegt das daran,
dass M1 und M2 bis auf Umbenennung gleich sind.
Die Etiketten sind dann nur identisch,
vielleicht heißen die Zustände anders, aber die Deketten sind gleich.
Dann sind erst recht alle Etiketten von Zustandsfolgen gleich
Aber es kann eben auch sein,
dass die Krippenstrukturen komplett anders aussehen, aber vielleicht,
weil sie b-similar sind oder ähnliches, führt das dazu,
dass auf der einen Seite in meinen Ablauf auf der anderen Seite existiert.
Und dann sind die Etiketten auch identisch. So,
wo steht das jetzt? Der Beweis ist einfach,
also die Etiketten der beiden Systeme sind gleich.
Also die Etiketten der Zustandssequenz von dem 1 sind gleich
den Etiketten der Zustandssequenz von M2.
Und jetzt dröseln wir das nach Definitionen auf,
wenn in einem
1 die Formel Psy gilt
Dann ist das der Fall,
wenn für alle Sequenzen piegelt, da muss M1 stehen,
M1 gilt bezüglich dieses Fahren des PDV MPC.
Und das kann ich auch anders schreiben,
das hatten wir ja vereinbart, dass es genau dann der Fall,
wenn die Etikette von P, Deformed PC erfüllt.
Das kann ich immer anders schreiben, alle folgen Sigma,
alle Etiketten folgen,
erfüllen die Formel PC
Da ich aber weiß, dass die Etikettenfolgen der beiden Mengen gleich sind,
kann ich in der zweiten Zeil einfach M1 durch M2 ersetzen.
Und dann gilt immer noch für alle Sigma, die Formel, sie.
Und jetzt läuft die ganze Argumentation rückwärts nur für das System
M2. Das heißt, wenn für alle Etiketten das gilt,
dann gilt es auch für alle Pfade und deren Etiketten,
eh von Pi.
Und dann nur noch umgeschrieben für alle Pfade,
gilt dann M2, Pi, erfüllt die VLPC.
Das heißt, in dem Modell M2
gilt die VLPC
Also kein wirklich tiefsinniges Resultat, aber eins,
das uns zeigt, das ist eine ganze Menge Systeme geben kann,
die sich unterscheiden,
aber halt nicht mehr bezüglich der Etikettenmengen oder der Tikettensprachen.
Und wenn sich zwei Systeme nicht mehr bezüglich der Etiketten folgen,
der Etikettensprachen unterscheiden, dann kann auch keine LTL-Formel sie unterscheiden.
Was ist das Nächste, was wir uns angucken können?
Wir hatten ja die Beziehung,
geh folgt das
Wenn das für jedes beliebige Modell geht, die Gültigkeit von
F impliziert die Gültigkeit von G in der Kripke-Struktur enden.
Oder wenn das ein genau dann Wende ist und nicht nur eine Implikation,
dann sagen wir, F ist Äquivalent zu geben.
Das hatten wir eben gehabt. Ja,
und jetzt kann man mal da spielen und gucken,
was da alles so Spannendes auftritt, was alles so gilt.
Und dann sind hier mal exemplarisch eine Menge von Dualitäten,
Distributivitäten aufgeführt, vom Moment den Dualitäten an.
Eine Dualität hatten wir schon. Hier ist sie
ein teximetrischer aufgeschrieben
Nicht-G-Vieh ist semantisch äquivalent zu F-Nicht-Vieh. Also wenn nicht gilt,
dass immer viel gültig ist, dann gibt es wohl irgendwann
einen Zeitpunkt, an dem die Negation davon gültig ist.
Es gibt mindestens einen Ausnahmefall. Und solche Formen,
wo man sagt, die Negation verschiebt sich in der Position,
das ist ja erst Negation, dann Operator,
wird zu Operator und dann Negation.
Das ist jetzt eine Dualität. In der gleichen Zeile kommt
die Negation einmal verschoben vor. Der zweite Unterpunkt macht das
genau umgekehrt. Er sagt, nicht F-Fee ist Äquivalent,
so geh nicht Vieh. Also wenn es nicht irgendwann einmal gilt,
dann gilt wohl zu jedem Zeitpunkt die Eigenschaft,
dass die Negation von Vieh erfüllt ist.
Also nie gilt Vieh. In diesem Sinne sind also F und Geh-Dual zueinander,
so wie und und oder auch Dual zueinander sind.
Das ist dem Morgen für G&F. In der dritten Zeile steht das X zu sich selbst,
Dualist, Wenn es nicht der Fall ist,
dass im nächsten Zeitpunkt viel gilt,
dann gilt wohl im nächsten Zeitpunkt nicht viel.
Ja, und das andere eben. Zumindest bei zwei wertiger
Logik ist das so. Und wir haben hier eine Zweiwärtige
Logik. Der zweite Block, Iden Potenzen. Ja,
kann man sich am ehesten noch vorstellen,
für alle X, für alle X gilt eine Formel.
Das ist doppelt, das kann nicht wegstreichen. Genauso steht hier,
Nicht GG-Vieh, naja, da wissen wir mit der oberen Formel.
Das kann ich so ein bisschen reinziehen,
das sei das Gleiche, wir gehen nicht viel.
Ich kann das also so ein bisschen kontrahieren, zwei Gs werden zusammengezogen.
Oder zwei an Tills kann ich auch zu allem zusammenziehen. Das heißt also,
wenn ich solche Qualenzen habe und ich finde das in einer Formel
, dann kann ich das zum Vereinfachen nutzen.
Das kann also ein Tool schon mal machen.
Oder dritter Fall, Absorption. Wenn in der Zukunft ein
Zeitpunkt existiert, wo immer Ab dem immer gilt in der Zukunft Good Fee,
dann gilt es auch jetzt, dass irgendwann in der Zukunft F gibt.
Ich muss ja einfach nur das erste Zukunft,
sagt ab da gilt es immer, dass in der Zukunft,
naja, da habe ich zwei Sprünge gemacht, die kann ich auch zusammenziehen.
Ich sage, mit dem ersten F,
das gilt in der Zukunft, dann habe ich immer,
gilt davon nochmal in der Zukunft,
wenn diese beiden Sprünge zusammenziehe, kann ich auch gleich sagen,
es gilt in der Zukunft.
Und das gilt immer. Also kann ich
eine Mehrfachkombination von Temporaloperatoren, die gemischt sind,
Oder das Duale GFG, also immer gilt in der Zukunft,
geh, wenn immer in der Zukunft was gilt,
dann gilt es in der Zukunft immer.
Also es gibt diesen einen Zeitpunkt, ab dem es immer gilt.
Da gibt es nur zwei Fälle. Entweder bin ich davor oder dahinter,
wenn ich davor bin, gilt irgendwann in der Zukunft gilt es.
Ja, oder es gilt jetzt. Das sagen beide Seiten aus.
Mit dieser Absorptionsregel kann ich mir also die Länge von Operatoren,
die da auftreten, verkürzen,
wenn die so gemischt auftreten,
kann ich sie mit dieser Regel verkürzen
Das nächste rechts oben bis zur Motivität des X-Operators. Den kann ich im Wesentlichen,
so wie eine Negation reinwandern lassen. Wenn ich sage,
im nächsten Schritt gilt in der Zukunft einmal etwas, naja gut,
das ist klar, dann gilt irgendwann in der Zukunft,
dass es davon ausgerechnet im nächsten Schritt fiegelt.
Was auf jeden Fall ist, es ist in der Zukunft,
aber nicht jetzt steht da. Genauso wie irgendwann in der echten Zukunft,
aber nicht jetzt gilt immer viel, naja,
das ist ab dem Zeitpunkt eins gilt es immer, sagt die linke Seite.
Kann ich auch sagen, ab jetzt gilt es,
dass davon folgend, also auch ab dem Zeitpunkt eins das Ganze gilt.
Ein bisschen kompliziert ist es bei einem Till, da sagt man,
das gilt nicht jetzt, aber im nächsten Schritt gilt diese Antitel-Beziehung.
Und das kann ich auch reinziehen, indem ich sage,
na gut, dann gilt für jetzt bezogen das nicht,
aber immer im nächsten Schritt.
Also ich kann jetzt schon im Hier gucken,
und dann immer einen nach vorne schielen,
dann verschiebe ich den Zeitpunkt der Betrachtung auch auf alle Werte,
die größer als eins sind.
Und das sowohl für Vieh und Phypsie. Dystomotivität bahnt Till,
wenn rechts sein Oder steht, dann darf ich das ausklammern,
bin ganzen Block. Das heißt, wenn ich weiß,
es kommt irgendwann mal der Punkt, wo entweder sie oder kiegelt,
weil sie irgendwann kommt der Zeitpunkt,
wo mindestens eins von beiden gilt.
Und davor gilt immer Vieh
Das steht auf der rechten wie auf der linken Seite.
Es gibt einmal den Zeitpunkt,
da gilt eins von beiden und davor immer Vieh.
Und etwas Ähnliches steht in den zweiten Unterpunkt. Wenn ich weiß,
dass irgendeinmal Kiegelt und davor gilt, die Konjunktion,
Psy und Vieh, dann weiß ich ja alle Zeitpunkte vorher,
erfüllen das.
Also es gilt sowohl Fee Antilchie als
auch Psy Antilchie
Auch noch so als kleine Spezialfälle. Future. Ja,
das kann ich mit dem oder machen,
wenn in der Zukunft eins von beiden gilt,
also entweder, also, oder Vieh oder Psy,
dann weiß ich mindestens eins von beiden gilt irgendwann in der Zukunft.
Ja. Das ist nicht da,
warum nicht geallert
Kann sein, dass es eine Negation erfiel zu viel ist.
Mal gucken. Also zwei Sachen, wenn man sich
die Negation erstmal wegnimmt, das wäre die erste Idern-Potenz.
Immer gilt immer Vieh. Dass das das Gleiche ist,
wie immer gilt Vieh, das wäre schon mal richtig.
Genauso wie Future, Future, Feeze, Future Fee.
Das wären so die einfachen Edern-Potenzen.
Genau, jetzt überlege ich bei den Dualitäten, wenn ich das reinziehe,
das erste gebe zu einem F, die Negation kommt rein.
Denn nicht geh, dann kann ich auch wieder durchwandern lassen,
kommt auch rein. Dann hätte ich aber FF nicht.
Also ich würde mal vermuten, dass dort nicht GG,
das Gleiche ist wie F, nicht Vieh.
Und dementsprechend in unteren Zeile nicht FF,
wenn ich die Negation reintreibe,
dann tauschen sich ja die FSNGs um,
dann wird daraus also GG Vieh
nicht Vieh
Und GG kann ich zusammenfassen. Das heißt, auf der rechten Seite
wird denn G nicht fies stehen. Ich denke mal,
wenn das hier so vorne zehn Sekunden überlegt,
wenn man so eine Sache ist, ich meine,
das gehört auf der rechten Seite ausgetauscht, G und 11.
Genauso wie rechts unten, das gefällt mir auch gerade spontan nicht so.
Ja, wenn immer, fie und ziegelt,
dann gilt natürlich auch in der Zukunft, Einmal Vieh und auch in der Zukunft einmal Sie.
Logisch. Aber wenn ich weiß,
in der Zukunft gilt einmal Vieh und ich weiß irgendwann in einer anderen Zukunft gibt sie,
dann weiß ich schon mal gar nicht,
ob es zum gleichen Zeitpunkt gilt und erst recht nicht,
ob es immer gibt.
Ja, aber wenn ich da beides mal ein G schreibe,
dann wird es schon ein bisschen besser, wenn da steht,
immer gilt die Konduktion, ja, dann gilt beides immer.
Also diese Regeln müssen sowieso so ähnlich aussehen wie die Regeln für
All- und Existenzquantor und bei denen gilt das ja gerade,
dass man bei einer Diskussion das machen darf.
Und bei einer allgemeinen Allquantifizierung und einer Konjunktion darf ich das auch auseinanderziehen.
Gut, also eine Menge Regeln zum Umformen,
dass es für zwei Dinge gut.
Entweder wenn man Aufgaben hat, vereinfachen sie diese Formel.
Oder wenn man ein Tool schreiben will und sagt,
ich will eine Normalform erstellen,
Äquivalenzen schreibt man sich immer dann hin,
wenn man Folgendes möchte.
Man fängt an mit einer einfachen Struktur
Und sagt, für die Normalform habe ich einen einfachen Algorithmus.
Bei Aussagenlogik war das konjunktive Normal vom dissunktiven Normalform.
Für die konnte man Dinge einfacher tun, wenn man wusste, die haben diese Form.
Und dann zeigt man, nachdem man gesagt hat,
okay, es gibt super tolle Algorithmen für konjunktive Normalformen,
dann zeigt man hinterher noch,
jede Formel kann in diese Normalform gebracht werden.
Und genauso läuft das hier auch, die Tools werden nicht
für beliebige LTL-Formeln gebaut, sondern sie werden so gebaut,
dass die Negation absolut weit innen vorkommt.
Also die wichtigsten Regeln Sind die, die Negationen nach innen
treiben, bis sie bei den atomaren Propositionen ankommen?
Dafür brauche ich Äquivalenzen. So, jetzt die nächste Frage.
Woran sieht man, dass LTL eine praktische Logik ist?
Was sieht man daran, dass man ein paar interessante Systemeigenschaften beschreiben kann?
Wir hatten ja schon mal als Anfangsmotivation gehabt,
unseren wechselseitigen Ausschluss, Mute to Exclusion.
Da war es ja so, dass wir beschreiben wollten,
dass es nie der Fall sein kann,
dass beide im wechselseitigen Ausschluss sind.
Und jeder Prozess,
der rein möchte,
kommt auch irgendwann rein
Solche Safety- und Liveness-Eigenschaften haben wir gesehen, konnten wir gut beschreiben.
Mit LTL, das ließ sich ausdrücken. Da mussten wir nur sagen,
immer gilt die Negation von, beide sind drin.
Und das andere war, wir sagten, immer gilt,
dass wenn einer will, dann gibt es eine Zukunft davon,
sodass er auch darf.
Was kann man da sonst noch Schönes mit beschreiben?
Also erstmal kann man so etwas ausdrücken,
wie unendlich oft gilt etwas. Man nennt dich oft,
gilt Vieh,
das ist GFV
Immer gilt, dass in der Zukunft davon viel gilt.
Das heißt, egal wo ich hinspringe, da ist was.
Das muss unendlich oft sein. Und wer es nur endlich auf das Vieh gilt,
da wäre, hätte ich ja ab da den Zeitpunkt,
wo es eine Zukunft gibt, in der es nicht mehr gilt.
Denn wer aber F, Vieh falsch. Und aus diesem Grund weiß ich,
GF bedeutet unendlich oft, gilt die Eigenschaft Vieh.
Manchmal findet man auch tatsächlich dafür F,
Superskript unendlich oft
Ja, und endlich oft gilt es in der Zukunft.
Oder das Duale dazu ab einem zukünftigen Zeitpunkt gilt immer,
wie. Das heißt, geh unendlich aus Symmetriegründen.
Sowas kann ich jetzt auch noch machen. Ich kann Fairness
aussagen. Bestimmt empfehlen ist es eine ganz nette Sache.
Fairness bedeutet im Prinzip so etwas wie,
wenn einer will, dann kann er irgendwann auch mal.
Also wenn eine Aktion aktiviertes, englisch enabled,
dann ist sie bereit, was zu tun.
Wir fragen uns jetzt, wird sie auch ausgeführt?
Wird sie executed? Und dann gibt es jetzt unterschiedliche Ansichten,
was jetzt heißt, dass ein Ablauf fair ist.
So unbedingte Fairness sagt jetzt, für alle Aktionen gilt,
GF, das heißt ja unendlich oft, wird das ausgeführt.
Das heißt, wir betrachten ein System und erwarten,
dass jede Aktion, die davor kommt,
in einem unendlichen Ablauf immer unendlich oft ausgeführt wird
Das ist eine sehr starke Forderung, die sagt nur nicht mal,
die impliziert nämlich auch gleich, dass es aktiviert ist.
Also wenn etwas geschehen kann, ausgeführt wird,
dann muss es ja vorher aktiviert sein.
Also wir gehen erst recht davon aus, mit dieser Formulierung,
dass es auch unendlich oft aktiviert war.
Das kann man jetzt ein bisschen abschwächen, indem man sagt,
naja, also wir wollen auch Systeme betrachten,
bei denen nicht alle Aktionen tatsächlich unendlich oft aktiviert sind.
Und das steht jetzt unten, das steht,
wenn es einen Zeitpunkt gibt,
ab dem eine Aktion K
immer aktiviert ist
Denn gibt es auch unendlich viele Aktivierungen davon.
Also wenn ab jetzt gilt, sie kann immer durchgängig,
dann wird sie zwar nicht immer dran genommen.
Dann ist der Klassenstreber, der sich immer meldet,
der wird von einem schwach fairen Lehrer unendlich oft dran genommen,
aber nicht jedes Mal unbedingt.
Schwache fairness heißt, der nimmt auch mal andere dran.
Starke Fairness sagt jetzt, wenn das ist ein bisschen anders formuliert,
da muss ich nicht immer ständig melden,
sondern ich muss mich nur immer mal wieder melden.
Und das ist die Aussage, wenn sich jemand immer mal wieder meldet,
dann wird er auch immer mal wieder dran genommen.
Also unendlich oft aktiviert zu sein, bedeutet auch unendlich oft
dran zu kommen. Weil das wäre dann die starke Fairness.
Das ist starke Fairness, heißt das.
Es ist eine stärkere Forderung, das ist schwieriger zu implementieren.
Schwache Fairness, was muss ich da als Skedular?
Das wäre technisch ein Skedular, der guckt sich an.
Die Aktionen, welche sind es denn, 1 bis K?
Welcher ist jetzt gerade aktiviert
Und dann stelle ich fest, na gut, ich nehme einen dran.
Dann stelle ich fest, der ist ja immer noch aktiviert.
Warten wir mal. Und so bleibt er. Da bleibt er aber
ständig aktiviert. Da ändert sich an diesem Zustand nicht.
Und dann kann ich Folgendes machen, ein Betriebssystem löst man das mit Priorisierung.
Wenn ich einen Prozess immer mal zurückstelle, einer,
der will, aber gerade nicht zum Zuge kommt,
der rutscht dann in der Priorität nach oben.
Das heißt, einmal zurückstellen gibt einen Bonus.
Und dann wird auch noch satiert, nach der Priorität.
Das heißt, durch langes Warten,
durch viele Wartesemester rutscht man dann hoch in der Ausführungspriorisierung.
Und irgendwann hat man die höchste Priorität, weil man so
oft zurückgestellt wurde, dass man dann irgendwann mal drankommt.
Also wenn ich permanent aktiviert bin, dann komme ich auch dran.
Und durch diese Priorisierung immer wieder. Es wird
dann zurückgesetzt nach Ausführung und dann wieder von vorne gestartet.
Starke Fairness ist viel schwieriger. Da sagt ein Prozess,
jetzt will ich und sage ich, ja,
warte noch mal kurz, ich nehme dich gleich dran.
Dann sagt er, jetzt will ich
gar nicht
Na gut, sagt man, dann eben nicht.
Man sagt, aber kurzes Schweiz, jetzt will ich wieder.
Ja, und dafür einen Algorithmus zu finden,
der sagt, du hast jetzt ganz oft gewollt,
aber dann auch wieder nicht gewollt, zurückgezogen, wie verrechnet man das?
Das ist auf jeden Fall aufwendiger, Buch zu führen,
mit welcher Priorisierung ein solcher Prozess versehen wird.
Eine solche Fairness-Anforderung ist schwieriger zu implementieren,
als bei einem Prozess, der die ganze Zeit sagt,
hier, hier, du hast mich übersehen,
das geht dann viel leichter,
indem man einfach merkt,
wie lange er
schon übersehen wurde
So, das sind also Fairness-Bedingungen, die ich jetzt schon mal
ausdrücken kann in der Logik. Ich kann jetzt zum Beispiel annehmen,
ja, wenn ich ausdrücken möchte, eigentlich weiß ich,
mein System hat einen Skettjuler, der mir schwache,
Fairness zur Verfügung stellt.
Dann kann ich Folgendes machen. Dann kann ich sagen,
ich betrachte nur Abläufe, die schwach fair sind.
Also ich nehme diese Formel und sage, wenn das gilt
, dann wird meine Spezifikation erfüllt.
Also ich mache eine große Implikation draus
Wenn schwache Fairness, große Formel, gilt,
dann impliziert das die Systemspezifikation. Das hat den Vorteil,
dass alle Abläufe, die ich auch betrachten könnte,
aber die nicht schwach fair sind, die erfüllen ja vielleicht die Systemspezifikation nicht.
Also so ein unfairer Ablauf, da passiert irgendwie nichts.
Der wird vielleicht die Spezifikation gar nicht erfüllen, schlichtweg,
weil die Spezifikation irgendwann an einer Stelle annimmt,
dass das Ganze sich nur dann korrekt verhalten kann,
wenn irgendwo ein bisschen Fairness ist
So, das heißt, die Dinger,
weil die Vorbedingungen der Implikationen nicht stimmt, werden ausgeschlossen.
Die Formel wäre also trotzdem wahr.
Fairness, Implikationen, Spezifikationen, das wer jetzt war.
Und das ist auch gut so. Denn ich weiß ja,
dass mein Skedulizer meine Hardware mir schwache Fairness zur Verfügung stellt.
Deswegen ist es gar nicht schlimm, wenn es Abläufe gibt,
die die Spezifikation verletzen, aber dass immer solche sind,
die nicht schwach fair sind.
Weil ich weiß, laut Hardware können die mich nie vorkommen.
Dann habe ich nämlich die nette Eigenschaft bewiesen,
relativ zu dieser schwach fairen Hardware gilt die Spezifikation.
Selbst wenn sie im Allgemeinen auf einer beliebigen Hardware
nicht gilt
Und das Nette ist, da muss ich gar nichts tun,
das kann ich innerhalb der Logik ausdrücken mit einer Implikation.
Gucken wir doch mal den Mikrowellenofen an. Was habe ich
dort für Möglichkeiten? Da kann ich mir jetzt solche Formeln
anschauen, wie ein bisschen eski-freundliche Notation immer gilt.
Also hier nicht geh, sondern die Box dargestellt durch die eckigen Klammern.
Nicht heat until close, also die Negation als Tilde.
Das ist die Syntax von einem Tool,
mit dem man das Ganze betreiben kann
Also interessieren wir uns für eigentlich Zustände für die Close gilt?
Die können wir schon mal markieren. Diese unteren Zustände 3,
4, 5, 6, 7, das sind alles Zustände,
in denen die Eigenschaft an Till Close, also das zweite, gilt.
Das heißt, wenn alle Abläufe die Eigenschaft haben,
da irgendwie hinzugelangen, dann bin ich schon mal auf dem richtigen Weg.
Wenn es irgendwie einen Ablauf gäbe, der mich nie in
diese Zustandsmenge führen würde, dann hätte ich ein Problem.
Das ist in diesem Fall nicht der Fall,
denn ich habe gar keine Chance,
als irgendwann mal in die Zustandsmenge drei, vier,
fünf, sechs, sieben zu gelangen.
Irgendwann komme ich da mal hin. Das wäre etwas anderes,
wenn ich zum Beispiel an dem Zustand zwei noch irgendwie eine Schleife aus irgendwelchen Gründen hätte.
Dann könnte ich mich von Zustand eins,
Zustand zwei gehen und da immer und für ewig bleiben.
Das heißt, dann weiß ich sofort,
die Formel kann nicht gelten, weil es einen Ablauf gibt,
an dem die zweite Bedingung Close gar nicht gelten wird
So, das ist hier aber nicht der Fall.
Also müssen wir jetzt weitergucken. Die zweite Bedingung,
wie ist das mit Nicht-Heat? Also ich frage mich auf
allen Faden, wo gilt denn da nicht Heat?
Kann ich also irgendwo dahin kommen? Gilt da vor Jahres
immer? Die Eigenschaft, die man jetzt hier hat,
gilt. Nur wie kriegt man das raus?
Ich müsste irgendwie alle Fade durchprobieren, im Zweifelsfall gibt es
aber unendlich viele Fahle
Das ist also jetzt eine nette Eigenschaft. Man kann das
vielleicht im kleinen Beispiel, kann man da sich noch Pfade
endlich irgendwie charakterisieren. So, nach dem Sinne,
erst von eins nach drei hin und her, dann 6,
7, 4 und entweder da bleiben oder nach eins oder drei zurück.
So, und da kann man dann eben feststellen, wie sieht das aus?
Nicht, hieht, nicht, hieht, nicht, hieht.
Bis close. Also in diesem Fall ist es sogar einfach
vom Staatszustand, muss ich das gar nicht gucken,
ich gehe zum Zustand.
Drei, stell fest,
super,
da gilt close
Und der einzige Zustand davor ist nicht heat.
Und was kann ich davor gemacht haben?
Boah, ist nur eins. Und die Alternative ist,
nach zwei zu gehen, aber da gilt immerhin noch nicht Heat.
Und die einzige Möglichkeit ist, dann nach fünf zu gehen, da gilt schon close.
Also in diesem Fall habe ich es noch einfach.
Hier habe ich sogar nur endlich viele Fälle zu betrachten,
weil ich mir nur ein Anfangsstück des ganzen Systems anschauen muss.
Ich muss nur gucken, 1, 2,
5 als Sequenz und 1, 3. Mehr Möglichkeiten habe ich
gar nicht vom Staatszustand wegzukommen.
Das ist da also noch ganz übersichtlich,
die Welt
Neue Folie. Immer gilt, irgendwann. So,
und dann komplexer Ausdruck, Start und nicht Error.
Also das Ding ist losgelaufen, ich habe keinen Fehlerfall.
Das führt dazu, dass irgendwann das Ding auch aufgeheizt ist. Also etwas,
was ich gern hätte, wenn ich sage, leg mal los,
starte dich mal und ich sage das nicht in einem Fehlerzustand,
also einen, wo ich den Startkopf gar nicht drücken darf,
dann tut er das auch.
Dann heizt er irgendwann auf
Auch da ist es wieder interessant, mal nachzugucken, wo gilt denn überhaupt Heat?
Also wo heizt er auf? Jetzt kann man weitergucken,
wo gilt dieses Konjunkt? Also Staat und nicht Error.
Da sind die beiden unteren sechs und sieben. Das heißt,
immer wenn ich da hinkomme,
dann muss ich in dieser Schleife drei, sechs, sieben,
vier da irgendwo sein, also in dem unteren Quadrat.
Wenn das also gilt, Da wird auch aufgeheizt.
Das sieht man, wenn ich in sechs bin, naja,
dann weiß ich irgendwann, nämlich wenn ich zu sieben gehe.
Das ist die eine mögliche Zukunft, die direkt folgende.
Und wenn ich schon im Zustand sieben bin,
dann gilt jetzt Heat und es gilt davor auch Start und nicht erbe.
So, das heißt, egal wann ich das Ganze betrachte,
immer wenn ich es betrachte und es gilt Start und Error.
Oder ich habe einen Zustand, wo das irgendwann mal gelten wird.
Also auf gut Deutsch, ich bin irgendwie nach sechs und sieben
gekommen.
Dann gilt diese Implikation
Blauer Cola impliziert, rote Box. Das heißt,
wir können schließen, diese Eigenschaft gilt auch.
Noch ein Beispiel. Jetzt die Abschwächung immer gilt,
Staat impliziert irgendwann Heat. Da gucken wir mal.
Staat sehe ich im Zustand zwei, fünf,
sechs und sieben.
Und Heat sehe ich da
Jetzt gibt es offenbar den Bereich rechts und den Bereich links.
Also wenn ich von eins nach zwei gehe,
starte ich das Ganze, dann heizt er nicht.
Wenn ich dann nach fünf gehe, heizt er nicht.
Und jetzt kann ich folgendes Spielchen zum Beispiel treiben,
wenn ich lustig bin.
Ich gehe jetzt immer von zwei nach fünf hin und her.
Kann ich mich munter mit Tür öffnen und schließen beschäftigen,
was aber dann nicht zum Heizen führt.
Sondern wir sehen schon, immer gilt das nicht, diese Eigenschaft.
Jetzt wüsste ich spannende Frage,
gut,
sagt das Tool jetzt
Nee, gilt nicht. Dann wüssten wir wenigstens,
okay, da ist ein Problem,
aber so richtig hilfreich wäre das auch nicht.
Cooler wäre es, wenn uns das Ding auch tatsächlich ein Gegenbeispiel liefert.
Das beweist, dass die Eigenschaft nicht geht. Also ein
Counterexamel. Und die Tools tun das. Die sagen dann,
okay, geh mal vom Zustand S1 mit Start Open weiter zum Zustand
S2. Was macht er dann? Schließe in die Tür.
Okay, jetzt sind wir im Zustand 5.
Da macht man ein Reset.
Okay,
öffne die Tür
Und dann starte den Ofen. Na gut.
Da scheint er dann so die Schleife 1, 2,
5, 3, 1 zu geben.
Und in diesem Kreislauf kann er sich auch wunderbar aufhalten.
Also in der Raute 1, 2, 5,
3, da kann man wohl eine ganze Zeit lang laufen.
Jetzt können wir noch ein anderes Beispiel machen. Wie ist es denn,
wenn mich das fast das Gleiche nehme,
aber jetzt ein bisschen abschwäche und sagt, naja,
das muss nicht sofort gelten, sondern in der Zukunft?
Also immer gilt das in der Zukunft,
die ich die Möglichkeit habe,
wenn ich Staat habe,
dass dann irgendwann einmal aufgeheizt wird
Sehen wir das nächste Gegenbeispiel. Ich starte in den Ofen
, schließe in die Tür und öffne die Tür.
Aha. Das Beispiel, das uns vorhin ins Auge gesprungen ist,
also ich bleibe auf 1, 2,
5 und dann bleibe ich in 2 und 5 hängen.
Also auch ein Gegenbeispiel. Und das ist ganz praktisch,
hier diese Gegenbeispiele zu haben, wenn ich implementiere,
dann kann ich mir mich genau feststellen,
wo der Fehler ist, also zum Debacken herrlich,
in dem Sinne kann ich auch einen Modelchecker eigentlich eher als Debugger einsetzen.
Denn das Typische ist ja nicht, dass ich Eine Implementation hinwerfe,
eine Spezifikation hinwerfe, dann sagt mir das System, erfüllt.
So bleibt das mulmige Gefühl übrig,
dann weiß ich erst mal, die Spezifikation ist erfüllt.
Aber das sagt man im Englischen, doing things right.
Aber die andere spannende Frage ist, mache ich wirklich das,
was ich haben will, doing the right things?
Also es drückt meine Spezifikation eigentlich wirklich das aus,
was ich haben will. Nein,
ich kann immer noch den Fall haben,
dass ich die blödsinnige Spezifikation habe,
die ich eigentlich gar nicht haben wollte,
aber die
getreu doof umgesetzt habe
Ja, dann habe ich das noch nicht rausbekommen.
So gesehen ist manchmal ein Fehler viel spannender, denn bei einem Fehler
werde ich auf etwas gestoßen, das kann zweierlei sein.
Entweder ich habe fehlerhaft implementiert Variante 1, gut,
da muss ich nachbessern oder Variante 2, ich gucke mir das Gegenbeispiel an,
bin eigentlich der Meinung, das Gegenbeispiel will ich haben.
Das ist ein Ablauf, der soll so sein,
die möchte ich gerne erlauben. Ja gut,
wenn ich den aber erlauben will,
der bei der Spezifikation ein Fehler ist,
dann ist offenbar die Spezifikation nicht das, was ich haben wollte.
So, das sind oftmals die viel informativeren Fälle,
dass man sieht, die Spezifikation ist nicht das,
was ich haben wollte
So, in diesem Sinne ist Model-Checking so der beste Debugger,
den man sich vorstellen kann, also ein High-Level-Debugger.
Wer hat da auf gewisse Dingen Probleme,
entweder in der Implementation und oder der Spezifikation gestoßen?
Was können wir jetzt noch machen? Wir können da
noch weiter rumbasteln. Vielleicht wollen wir die Eigenschaft haben,
dass irgendwann mal gilt, wenn er aufheizt und startet,
dass dann gilt,
dass immer irgendwann der Zeitpunkt gekommen ist,
wo er heizt
Also wenn ich die beiden Bedingungen jetzt reinpacke dazu,
also Heat und Star zusammen.
Bislang hatte ich ja immer nur vorausgesetzt, dass er startet.
Ja, was ist dann der Fall? Das können wir
uns angucken, wo das der Fall ist.
Heat und Start sieht man da unten rechts.
Also nicht so oft der Fall. Gut, da komme ich
auch irgendwie hin. Und ab da soll jetzt gelten,
wenn ich angenommen, ich bin da.
Also das soll ich erreichen, ja.
Was habe ich dann vor Problemen? Aha,
ein Counter-Example sehe ich, da kommt er wieder.
Und was ist da
der spannende Teil
Was kann passieren? Also ich gehe von S1 nach S2,
also links rüber, nach fünf. Denn ein Reset nach drei,
jetzt damit irgendwas passiert, gehe ich nach sechs rüber,
starte das Kochen, sieben, gehe nach vier,
gehe dann nach eins, zwei, fünf und drei.
Ein solcher problematischer Ablauf,
wo ich also erst über sieben gelaufen bin und mich dann
auf der linken Seite verhettere,
wo ich nicht mehr aufheize
Bei 2 und 5 und 3,
also ich bleibe immer in der Raute,
das Problem hatten wir schon mal, 1, 2,
1, 2, 5, 3, 1,
wo ich dann durch häufiges Türen öffnen, also wechseln,
erst starten, schließen, rücksetzen, öffnen.
Also durch dieses Staaten und Rücksetzen verhindere, dass ich die ganze Maschine irgendwann aufheizen würde.
Also obwohl ich irgendwann mal einen schönen Zustand hatte,
ich bin ja zum Zustand 7 gegangen,
dort starte ich und heize auf,
das Ganze ist auch schön geschlossen,
komme ich nicht hin zu einem,
unbedingt zu einem Zustand,
in dem sichergestellt ist,
das irgendwie aufgeheizt wird
Kann ich also so schon mal nicht haben. So,
ob das jetzt ein Problem der Implementation ist oder der Spezifikation,
kann man hier so nicht sehen.
Ja, dann ist ja relativ müßig zu sagen,
was zuerst da war, die Spezifikation oder diese Implementation als Zustandsdiagramm.
Na, hier wird das nochmal schön nachgezeichnet. Ich laufe also hier lang,
das ist der Prefix, da stelle ich die Situation fest.
Jetzt habe ich also es geschafft, er heizt auf,
er startet und ist heiß.
Jetzt frage ich mich von dort aus weitergehend, gehe ich jetzt zurück,
zum Startzustand und verhädere mich hier auf der linken Seite.
Also auf der Seite, die immer stört, weil sie kein Aufheizen macht.
So, wir wollen irgendwann nochmal dahin kommen und so ein
bisschen eine Ahnung zu verschaffen, wie das so funktioniert.
Wie kann ich eigentlich ein Tool bauen im Prinzip,
das mir jetzt entweder ein Ja zurückgibt, alles in Ordnung oder so ein Gegenbeispiel.
Und da kommt uns jetzt zu Pass dass wir schon was wissen,
nämlich wir wissen, dass LTL, oder ich habe es verraten schon mal,
das LTL, was mit Büchi-Automaten zu tun hat.
Und dann kann man später so etwas machen,
zu sagen, okay, wenn ich weiß,
eine Formel ist ein Büchi-Automat und so eine Kripke-Struktur ist vielleicht ein Büchi-Automat,
dann kann ich mit den Automaten Produkte machen, kann gucken,
ob das eine vielleicht im anderen enthalten ist.
Also ich mache kleine, nette Tricks mit Automaten,
um festzustellen, ob eine Formel gilt oder nicht gilt.
Und die erste wichtige Eigenschaft, die man dazu braucht,
ist folgendes, wann immer ich eine LTL-Formel F habe,
kann ich daraus eine Kripke-Struktur konstruktiv berechnen.
Und diese Krypto-Struktur ist nichts weiter als ein Büchi-Automat.
Und er hat die Eigenschaft, dass die Büchi-Sprache des Automaten
identisch ist, mit der Sprache, die die Formel beschreibt.
So eine Formel beschreibt ja eine Menge von Atomaren, Aussagensequenzen.
Und so ein Büchi-Automat kann auch solche Mengen machen.
Also wir schreiben nichts weiterhin, als dass die Sprache einer Formel,
dass die Omega regulär ist.
Es gibt da leider einen kleinen Wermutstropfen,
das ist die Komplexität dieses Verfahrens
Ja, das wächst exponentiell in der Größe der Form.
So, das ist jetzt erst mal nicht so schön.
Also man kann zeigen, dass es nicht nur bei
einer Formel so, sondern man kann das sogar generalisieren.
Ich kann mir eine Formel, Folge Alpha 1,
Alpha 2, das sind LTL-Formeln.
Die sind alle in ihrem Größenwachstum polymiell beschränkt.
Das heißt, polymiell wächst das Ganze. Aber ich weiß,
die Kryptostrukturen, deren Zustandsanzahl,
die hat dann jeweils zwei Hochendzustände,
wenn nicht
die Ente Formel habe
Das heißt, diese obere Schranke ist tatsächlich
auch eine untere Schranke. Zwei Hoch-O von F,
das ist ja eine obere Schranke im gewissen Sinne,
aber dieser Nachsatz sagt, ich kann das tatsächlich ausreizen.
Polynomiell wachsende Formeln, die wirklich exponentiell das ausreizen.
Das ist jetzt theoretisch gar nicht mal so gut,
exponentielles Wachstum praktisch ist das oftmals aber gar kein Problem,
weil die Formeln gar nicht so groß werden.
Die meisten Menschen tendieren dazu, keine Spezifikationen zu schreiben,
die länger als paar Seiten sind,
weil sie dann die Formeln nicht mehr
überblicken können
Das heißt, es gibt eine natürliche Obergrenze dessen, was man so spezifiziert.
Und das ist dann auch eine halbwegs trägliche Größe für die Formel F.
Und dann ist, wenn das relativ klein ist,
ja, ist dann zwei hoch relativ klein, naja,
deutlich größer, aber immer noch erträglich.
Und es ist deswegen auch nicht so schlimm. Wir werden später sehen,
in die algorithmischen Betrachtungen geht der Zustandsraum des Systems,
das ich analysiere, auch ein.
Und typischerweise ist die Zustandsraumgröße des zu überprüfenden Systems deutlich,
deutlich größer als zwei Hochofen
Das heißt, ja, es ist erstmal schlimm,
dass die Formel einen exponentiell größeren Büchi-Automaten generiert,
aber typischerweise ist das System, das ich analysiere,
bereits so groß, dass es darauf überhaupt nicht mehr ankommt.
Wir wollen uns mal diese Eigenschaft mal für zwei einfache Formeln
F anschauen, wie das denn aussieht. Ey,
wir wissen ja, wir machen es ein bisschen einfacher,
wir wissen, ich hebe jetzt keinen Büchi-Automaten an,
sondern eine omega-reguläre Sprache, aber wir wissen aus einer omega-regulären Sprache,
da kriege ich wunderbar einfach auch immer ein Büchi-Automaten rauskonstruiert.
Wir nehmen jetzt mal eine einfache Formel, nämlich die Formel F ist immer Guilt P.
So, welche Sequenzen erfüllen das? Das erfüllen noch alle Sequenzen,
die die Eigenschaft haben. In Alpha Null ist P,
in Alpha 1 ist P, in Alpha 2 SP.
Diese atomare Formel P muss eigentlich ja in allen Mengen A 0 A1 A2 drin sein.
So, und das steht hier in der großen Summe.
Ich nehme jetzt also jede Menge M, Mit der Eigenschaft,
da ist P drin. Also ich könnte auch anders sagen,
Am ist eine Obermenge von dem Singleton P. Wenn,
mir ist es ja egal, welche anderen atomaren Propositionen noch gelten.
Die Menge, die nur P enthält, ja gut, die tut es.
Aber wenn das die Menge P und Kuh ist,
die tut es auch, da gilt ja auch P. PQR,
also irgendeine Obermenge von der Menge, die P enthält.
Und das Ganze, da steht jetzt ein Summenzeichen,
also ein großes Oder oder eine Vereinigung davon.
Und alle, die habe ich als Alternative zur Auswahl
und das unendlich lange hintereinander, also als Omega-Sequenz.
Ja, was da rauskommt, ist ein omega Ausdruck,
der beschreibt auf jeden Fall nur Sequenzen an 0A1A2 und in jedem AI kommt mein P jetzt drin vor.
Und genau solche Dinger brauche ich. Überall kommt das P
drin vor. Und jetzt gewissermaßen die zweiteinfachste Formel,
die ich mir denken kann, F ist irgendwann einmal Guild P.,
da mache ich einen ähnlichen Trick.
Ja, das zerlege ich jetzt in drei Ausdrücke.
Der erste Ausdruck sah, ist, die Potenzmenge der Atomaren-Proposition
mit dem Sternchen
Das heißt, es gibt ein endliches Anfangsstück, da gilt irgendwas.
Und dann kommt der Zeitpunkt K, der wird durch diese
große Klammer beschrieben. Das sind jetzt alle möglichen Varianten,
wie ich Mengen aufschreiben kann, in denen P vorkommt.
Das heißt, zu diesem Zeitpunkt habe ich auf jeden Fall
einen Zustand am Wickel der P erfüllt.
So, und dann ist alles gut.
Dann gilt irgendwann einmal P. Das heißt, danach folgt irgendwas.
Und das ist unendlich lange. Also die Potenzmenge von AP
, hochamiga
Das sind so die einfachsten Arten und Weisen. Da sieht man
für diese einfachen Formeln kann ich das so direkt schon hinschreiben.
Für größere Formeln würde man ein konstruktives Verfahren gerne.
Gibt es auch, wollen wir uns aber nicht angucken,
sondern wir nehmen einfach zur Kenntnis, das kann man machen.
Und was wir beim nächsten Mal intensiv anschauen wollen,
ist eine zweite Logik, die Computational Tree Logic.
Die hat auch ihre Vorteile, ist so ein bisschen ähnlich,
will auch temporal irgendwas aussagen. Funktioniert aber ganz anders.
Die betrachtet mich das Ganze jetzt nicht auf einem Ablauf,
sondern macht einen Baum mit allen Alternativen ab.
Was sieht man hier in dieser Grafik?
Ich starte ganz oben und habe dann die Möglichkeit,
entweder so links lang oder rechts lang.
Und dieser riesige Baum, der jetzt aufgebaut wird,
den kann ich mit meiner Logik irgendwie beschreiben und sagen,
gilt da irgendwas oder gilt da nichts?
Und das wollen wir dann
am Donnerstag betrachten.
Bis dahin