aufgehört haben, war Korrektheit und Vollständigkeitsnachweis für den BPA-Kalkül.
Also für die einfachste Prozess eingebar die Basic Process eingebracht.
Mit der konnte man bislang nur aus sequenzielle und alternativ entscheidende Programme ausführen.
Das war das eine. Und die zweite große Einschränkung bislang war,
dass alle Programme endlich sind, was man daran sehen kann,
dass jeder Schritt, den ein Prozess macht,
den Prozesstherm unwiderruflich kleiner gemacht hat.
Daraus kann man sofort schließen,
wenn der Prozesstherm bei jeder Aktion kleiner wird,
dann kann das
nur endlich
lange gehen
Der erste Schritt, den wir jetzt machen wollen,
das Ganze ein bisschen aufzuweichen oder zu erweitern,
ist jetzt die Prozesse mit neuen Operationen auszustatten.
Die erste Operation, die wichtige Grundoperation ist die Parallelkomposition,
sodass wir die Möglichkeit haben, verschiedene Teilkomponenten miteinander zu verbinden.
Und die zweite Aktion, die noch eingeführt werden muss,
ist die der Rekursion. Rekursion, die dafür da ist,
endlich mal auch nicht nur endlich lange laufende Programme,
sondern auch potenziell unendlich lange oder unbeschränkt lange
Laufende zu beschreiben
Der erste Schritt besteht jetzt so daran, dass wir
einen neuen Operator einführen, den Doppelstrich-Operator, gesprochen Merch.
Der Merch-Apparator soll intuitiv die nebenläufige Ausführung zweier Prozesse beschreiben.
Das heißt, wir können jetzt Therme der Formen schreiben,
der Prozess A oder B wird parallel ausgeführt zum Prozess C oder D.
Sollten an sein.
Also ich habe einen klaren Hall auf dem Ohren.
Ich kann es nochmal lauter machen eventuell
Jetzt ist es ein bisschen lauter, aber an war es auch schon.
Gut, jetzt müssen wir erst mal definieren, wie diese beiden Therme,
wenn ich sie parallel komponiere, wie die zusammenwirken.
Und die Idee, die wir jetzt entwickeln wollen, ist,
wir wollen nicht echte Nebenläufigkeit haben, sondern sequenzialisierte Nebenläufigkeit,
wir entscheiden uns jetzt also frei für einen der beiden Prozesse,
den linken oder den rechten, und führen dort die erste mögliche Aktion aus,
oder eine der ersten möglichen.
Wir haben in diesem Fall also die Wahl
uns meinetwegen für den linken Prozess zu entscheiden,
und der kann ja A oder B ausführen
Bleibt ein Restprozess links übrig, in diesem Fall ist er leer.
Gut, und auf der rechten Seite haben wir die Möglichkeit, dann weiterzufahren.
Oder wir hatten auf der rechten Seite anfangen können,
da hätten wir einen C ausgeführt und die Nachfolgende Prozessbeschreibung wäre also A plus B,
parallel zu dem übrig gebliebenen D. Das heißt,
wir interpretieren parallele Ausführungen zweier Prozesse, dadurch,
dass wir sagen,
wir picken immer einen der beiden raus und der führt eine Aktion aus.
Insgesamt wird das Ganze aber
immer noch beschrieben durch einen sequenziellen Ablauf
Und jetzt funktioniert das ganz genauso,
wie wir das schon mal gemacht haben, für BPA.
Wir definieren uns erstmal die Semantik der Übergänge.
Also definieren den Prozessgraphen für Therme. Und das läuft auf
zwei Varianten. Wenn ich mich schon weiß,
dass X mit einem V zu X-Strich wird,
dann sagt mir die obere Regel,
dass ich dann rechtzeitig dazu ein Y parallel komponieren kann.
Und dann ist es so,
dass X parallel zu Y wird eben zu dem X-Strich
parallel zu
Das Y daran, das stört nicht. Wir haben uns für den linken Therm entschieden,
den umzuarbeiten und der wird jetzt von X zu X-Strich.
Dass das möglich ist, das haben wir ja bewiesen,
durch die Eigenschaft, die Überbruchstrich steht.
Und die symmetrische Definition steht unten, da sagen wir,
okay, wenn Y die Möglichkeit hat, Y-Strich zu werben,
dann kann natürlich auch der Kompositionstherm X parallel zu Y auch vereinfacht werden,
zu X parallel zu Y.
So, das gilt für beide Fälle,
wo tatsächlich nach der Ausführung auf der einen Seite
noch was übrig bleibt
Nun kann natürlich auch passieren, dass bei der Ausführung der ersten Aktion,
meinetwegen in X, dass dann der Therm schon komplett abgearbeitet ist.
Also terminiert. Dafür kriegen wir zwei frische, neue Regeln.
Wenn es also möglich ist, dass X mit einer Aktion V terminiert,
dann führt die Parallelausführung von X und Y dazu,
dass nur noch das Y übrig bleibt.
Denn es ist Schluss mit der Parallelausführung,
danach gibt es nur noch den anderen Therm.
Und symmetrisch, wenn Y nicht V terminieren kann,
ist die Parallelausführung von X und Y nach einem V-Schritt eben
bei X gelandet und das Y mit der Parallelkomposition, ist verschwunden.
Diese beiden Varianten, einmal von links,
einmal von rechts und nochmal einmal terminierend auf einer Seite,
einmal nicht, führen dazu, dass wir jetzt beschreiben,
dass Paralleleausführungen eine beliebige Verschränkung der sequenziellen Ausführungsfolgen der beiden ist.
Auf Englisch Interleaving. Also man nimmt die,
eine Sequenz und misst dort irgendwie die andere Sequenz beliebig rein.
Ja, und der aufrechte Haltung der jeweiligen lokalen Sequenzen.
Es ist nicht so, dass ich parallel irgendwas ausführen kann,
gleichzeitig Sondern es wird gesagt, my der,
my der, my der.
Irgendwie werden die ausgibt. Wie sieht das jetzt aus?
Wenn ich einen ganz einfachen Prozessgrafen nehme,
von zwei sehr übersichtlichen Thermen, nämlich A, B und B-A.
Das ist ungefähr klar, was da jetzt passieren soll.
Ich kann mich entweder aus dem linken Therm mit einem A beginnen.
Wow, was bleibt denn übrig? Nur noch das
B und der rechte Therm, B-A ist unverändert.
Oder ich kann auf der rechten Seite, ist das dargestellt,
nur den rechten Therm bearbeiten.
Der kann als einzelne Aktion
ein B ausführen
Bleibt also das A übrig, der Therm auf der linken Seite
AB bleibt unverändert. Gut,
habe ich mich jeweils für die eine Seite entschieden,
das kann ich jetzt gewissermaßen nachholen, was der andere noch machen muss.
Das heißt, wenn ich mich eben noch entschieden hatte,
links ein A zu machen, also vom linken Therm,
dann kann ich jetzt immer noch das B vom rechten Therm nehmen.
Und was bleibt übrig? Die Parallelkomposition B parallel zu A.
Man sieht übrigens, die taucht gleichermaßen nochmal ganz rechts auf.
Oder Übersichtlichkeit halber ist das hier als Baum dargestellt
Die beiden äußeren Knoten gehören eigentlich vereinigt.
Sowas kann ich noch machen auf der linken Seite.
Ich kann natürlich den Therm B, in der Parallelkomposition,
auch den kann ich direkt terminieren lassen.
Dann ist er weg und dann bleibt nur noch die rechte Seite übrig,
also B-A. Und auf der rechten Seite passiert sinngemäß genau das Gleiche.
Entweder ich nehme den rechten Therm nur das A und lasse dort terminieren,
dann bleibt der Therm A B übrig.
Oder ich führe das A der linken Seite aus
Dann bleibt vom AB parallel zu A nur noch B parallel zu A übrig.
Gut, und was da jetzt passieren kann, ist relativ einfach.
Für die Sequenzen wissen wir das ja eh,
also die Sequenz BA, das führt ein B aus,
dann A, dann terminiert's.
Und B und A, da müssen wir jetzt noch unterscheiden,
da können wir erst entweder ein B auswählen,
dann bleibt das A übrig, ganz links, das terminiert dann.
Oder ich will doch, das A aus und dann das B,
ein Terminier. Und die Sequenz eben einmal durch.
Und auf der rechten Seite ganz symmetrisch,
da steht halt AB statt BA
Und ganz rechts erkennt man genau die gleiche Struktur nochmal.
So wird also parallel abgearbeitet, indem ich das alles schön
in irgendwelche Sequenzen zerlege und da alles mögliche erlaube.
Und da sieht man, da kommt,
selbst wenn ich da noch ein bisschen zusammenfasse,
also unten alle Häkchen zusammenfassen würde, gut,
dann spare ich noch ein paar Knoten oder wenn ich den rechten Teilbaum nochmal zusammenklappen würde,
würde ich auch noch was sparen.
Aber man sieht schon, dass die Parallelkomposition durch die Möglichkeiten
verschiedene Permutationen auszuführen, dass da kombinatorisch eine ganze Menge passiert.
Also die Prozessgrafen sind immer noch endlich,
aber sie werden schon deutlich größer
Und jetzt ist noch nicht viel Spannendes passiert. Wir haben einfach nur gesagt,
wir können zwei Prozesse parallel komponieren und das heißt nichts weiter,
als dass sie irgendwie ausgeführt werden,
aber beeinflussen tun sie sich schon mal gar nicht.
Nicht beeinflussen zu können, das klingt ja erstmal positiv,
heißt aber auch negativ formuliert, die können nicht zusammenarbeiten.
Und typischerweise will man ja, wenn man zwei Prozesse komponiert,
dafür sorgen, dass der eine mal dem anderen ein Nachrichtenergebnis
zuschafft und der andere damit weiterarbeitet und so fort.
Also irgendwie eine Synchronisationsform brauchen wir noch
Und um Synchronisationen zu ermöglichen, definieren wir uns jetzt eine
Kommunikationsfunktion und die beschreibt uns jetzt wie zwei Prozesse miteinander kommunizieren sollen.
Eine Kommunikationsfunktion, Gamma macht mich folgendes,
sie nimmt zwei atomare Aktionen, also ein Paar,
und gibt eine atomare Aktion zurück.
Zu zwei atomaren Aktionen AB gibt es die synchrone Kommunikationsaktion Gamma
von AB
Was das ist, ist es eigentlich egal,
aber es bedeutet, dass die beiden gemeinsam etwas tun und
die gemeinsame synchrone Aktion der beiden ist jetzt Gamma von AB.
Und damit das Ganze nicht ein bisschen merkwürdig ist, fordern wir,
dass die Kommunikation von A und B das Gleiche ist,
wie die Kommunikation von B und A.
Also sie ist kommutativ. Und dann fordern wir noch,
dass sie assoziativ ist. Das müssen wir schlichtweg dazu fordern,
dass später unsere Paralleloperator auch kommutativ und assoziativ wird
Denn unser Bauchgefühl sagt uns, ob ich nun einen Prozess
X mit einem Prozess Y parallel komponiere oder umgekehrt,
Y mit X, das sollte das gleiche Verhalten ergeben.
Auch die Klammerung bei paralleler Komposition sollte nicht relevant sein.
Ja, und um das zu unterstützen, muss auch die
synchrone Kommunikation diese Eigenschaften haben, kommunikativ und assoziativ zu sein.
Ansonsten gibt es da keinen tieferen Grund, nur damit das
später rauskommt, müssen diese Aktionen von dieser Bauart sein.
Gut, was machen wir jetzt? Jetzt wissen wir,
sie können kommunizieren, Das weiß der Prozessgraf aber noch nicht.
Im Prozessgraf müssen wir jetzt nachpflegen, dass wir jetzt die
Möglichkeit haben, dass zwei Aktionen auch parallel stattfinden können.
Sondern die einfachste Aktion ist jetzt, wenn ich weiß,
X wird mit einem VCX-Strich und Y mit einem W zu Y-Strich.
Dann kann ich auch sagen, das X parallel zu Y
kann auch in einem Schritt zu X-Strich parallel zu Y-Strich werden.
Nämlich genau dann, wenn V und W zwei Aktionen sind,
die ich jetzt kommunizieren lasse. Das heißt,
der Übergang findet jetzt statt mit der Aktion Gamma von VW.
Die machen einen synchronen gemeinsamen Übergang. Ja,
und synchron heißt eben unteilbar, da gibt es nicht mehr
die Möglichkeit von einem zum anderen.
Man beachte übrigens, dass wir die alten Aktionen nicht ausschließen.
Es ist jetzt möglich, dass sich weiterhin V mache.
Die alten Aktionen sind ja immer noch da,
um mich nicht synchronisiere mit einem Weh. Aber wenn ich
die Möglichkeit habe, kann ich das eben auch tun.
Also Synchronisation wird nicht erzwungen, sie wird aber erstmal ermöglicht.
Sowas kann ich dann noch hinschreiben
Na, jetzt muss ich irgendwie permutieren. Einer von beiden
könnt ja terminieren. Wenn also der linke Prozess,
das X mit einer Aktion V terminiert, der rechte Prozess terminiert nicht,
sondern geht mit einem W von Y zu Y Strich.
Da passiert sinngemäß das, was auch ohne Synchronisation passiert,
X parallel zu Y, weil sie exterminiert.
Das bleibt also nur noch der rechte Prozess übrig.
Da ich mit dem aber eine synchrone,
gemeinsame Aktion ausführe, nämlich Gamma von V&W,
bleibt dann nur noch das Y Strich übrig.
Also das,
was da der Nachfolger ist
Und jetzt kann ich das eben auch noch weitermachen,
indem ich sage, okay, wenn beide terminieren,
wenn X mit V terminiert und Y mit W terminiert,
dann hat das parallel ausgeführte Programm X parallel zu Y eben die Möglichkeit zu terminieren,
wenn es die synchrone Aktion Gamma VW ausführt.
Wer und da drunter steht, das Gleiche in Grün,
wenn nur einer von beiden terminiert,
diesmal ist es halt Y. Und X geht mit VCX-Strich,
naja, dann bleibt eben nach X parallel Y mit der Synchronaktion,
dann bleibt eben nur noch das X-Strich übrig.
Das andere ist ja terminiert
So, das sind jetzt die zusätzlichen Aktionen, die ich habe.
Das heißt, wenn man nochmal das Beispiel von eben aufgreift,
dann habe ich ja alle alten Aktionen,
die ich eben mir herleiten konnte, immer noch.
Nur, jetzt kann ich noch überlegen,
ich füge noch was Zusätzliches ein.
Ich sage, wenn A und B synchron kommunizieren wollen,
dann können sie das tun, dann nehme ich das 10.
Und wenn B und A synchron kommunizieren wollen,
eben auch,
wir wissen,
das ist kommutativ
Und wenn wir wollen, können wir auch A mit A synchronisieren lassen.
Kommt immer zäh raus. Also hier kann jetzt erstmal der Einfachheit
halber alles synchron miteinander ablaufen. Und das führt dazu,
dass wenn ich den Thermen ganz oben betrachte,
ich nicht nur die Möglichkeit habe,
den linken eine A-Aktion machen zu lassen und den Rechten eine B-Aktion,
sondern ich habe auch die Möglichkeit,
diese beiden Aktionen synchron in einem Schritt machen zu lassen.
Das heißt, ich kann mit einer C-Aktion jetzt
sowohl als auch machen und lande gleich im Prozess,
na links bleibt nur noch das B übrig und rechts
nur noch das
Das heißt, eine C-Aktion führt dazu, dass ich
nur noch den Prozess B parallel zu A ausgeführt habe.
Gut, den Prozess hatte ich schon mal, was da übrig bleibt,
als groß, als Grundkonstrukt wissen wir also schon.
Wir wissen, da bleibt übrig,
links nach B und A und komplementär zu gehen.
Aber ich habe immer noch die Möglichkeit, beides auch synchron zu tun.
Das heißt, in der Mitte habe ich noch einen C,
das sofort terminiert. Ja, und dann sieht man überall,
wo zwei Pfeile abgegangen sind, ja,
auch bei den Auslegern rechts und links,
da sind jetzt überall noch Cs in der Mitte,
weil ich
auch diese Aktionen immer synchron machen kann
Ja. Also, geometrisch folgendermaßen,
sobald zwei Pfeile abgegangen sind in diesem Diagramm,
lag das daran, dass sie parallel ausgeführt wurden?
Alternativen gab es ja nicht. Das heißt,
zwischen zwei ausgehende Pfeile muss ich jetzt noch einen C packen,
was bedeutet, die beiden werden gemeinsam ausgeführt.
Gut, also weiß ich jetzt alles um die Semantik von
parallel operierenden Prozessen zu beschreiben.
Ich habe meine Syntax erweitert, ich habe die Prozessgrafen definiert
und natürlich interessiert mich wieder Bisimilarität
Da muss ich nichts Neues definieren. Ich sage weiterhin,
zwei Prozesse sind Bisimilave in ihre Prozessgrafen. Das sind nach
der alten Definition. Da muss ich also nichts ändern.
Was weiterhin natürlich gilt, und es gilt jetzt im vielverschärften Maße,
wir werden mich feststellen, diese Prozessgrafen, die wachsen explosionshaft.
Ja, aus kombinatorischen Gründen gilt auch hier wieder die Möglichkeit, zu Zustandsraum-Explosionen.
Sprich, wenn ich nämlich Endprozesse habe und alle machen,
zwei Aktionen beispielsweise, dann ist schon klar,
ich kann erst die erste vom einen nehmen oder,
oder, oder.
Das heißt, ich habe beim ersten N-Auswahlen und dann
immer so weiter
Und alle möglichen Sequenzialisierungen, diese Aktionen sind jetzt möglich.
Das heißt eine ganze Menge. Wächst so mit der Fakultätsfunktion.
Das heißt, die Prozessgrafen sind zwar immer noch endlich,
aber plötzlich riesengroß im Verhältnis zu den Alten.
Umso zwingender ist es jetzt also Bisimilarität nicht am Prozessgrafen zu testen,
sondern es wieder mit dem alten Trick zu versuchen,
so ein Gleichungskalkül aufzustellen und dann Bisimilarität nachzurechnen.
Aus mathematischen, ästhetischen Gründen hätten wir wieder gerne Normalform,
um zu sagen können,
ja,
es ist ein entscheidbares Problem
Und aus praktischen Gründen wäre es vielleicht ganz nett,
mit diesen Gleichungen rechnen zu können, weil ausrechnen vielleicht in
diesem Fall ein bisschen cleverer sein kann als Normalform bilden.
Das hängt so ein bisschen von der Normalform ab.
Gucken wir uns das mal an. Wir wollen also wieder hier
eine Axomatisierung anstreben. Und die muss natürlich jetzt für den Paralleloperator
stimmen. Und da gibt es jetzt den ersten Wehrmutstropfen.
Man kann den Paralleloperator leider nicht so direkt aksymatisieren.
Das geht nicht, kann man zeigen. Wir nehmen das
einfach mal hin. Aber es gibt ein Hintertürchen.
Und das Hintertürchen lautet, damit das irgendwie geht,
dann nehmen wir uns einen Hilfsopperator. Und der Haupthilfsopperator ist
der sogenannte Left-Merch-Operator. Und noch ein zweiter Hilfsopperator ist Communication-Merch.
Die brauche ich eigentlich nicht. Die sind jetzt Spezialfälle des Parallelopperators.
Der Left-Merch-Operator ist fast so etwas wie ein Parallelopperator.
Er ist nur darauf eingeschränkt, dass er immer zuerst die linke Seite ausführt.
Also er ist gerade nicht symmetrisch mehr. Das heißt,
für den gelten nur zwei statt der vier Regeln,
denn es ist nur interessant, was die linke Seite macht.
Das heißt, wenn X-Leften als Y, wenn die linke Seite terminieren kann,
mit V, dann bleibt nur noch Y übrig.
Oder wenn X-S-S-Strich wird, und ich habe X-Leften-Merch
Y, dann wird das zu X-Strich parallel Y. Ja,
nach einem Ausführen ist es dann wieder der Paralleloperator.
Dieser Left-Merch-Operator sagt nur beim ersten Schritt, muss ich links nehmen.
Was die rechte Seite könnte, ist irrelevant.
Nachdem aber die linke Seite einen Schritt gemacht hat,
dann sieht man, dann ist es wieder der normale Parallelopperator
und dann darf ich auch von der rechten Seite nehmen.
Gut, kann man erst mal sagen, ja, gut.
Braucht man das wirklich? Ja, man braucht es.
Wir nehmen das einfach mal hin, dass das ein
hilfreicher Operator ist. Ja, kriege ich irgendwie hin.
Na gut, erlaubt nur die Ausführung. Zwingt das schon
, ja. Verglich mit dem normalen Parallelitätsopperator fehlen mir halt
die Regeln,
wo Y irgendwas macht
In dem Sinne erzwingt er es auch. Gut, das ist also
eine eingeschränkte Parallelität. Und was wir dann noch brauchen,
der nächste Hilfsoperator in der Communication Merch Operator,
der sagt, ich bin fast wie eine Parallelkomposition,
allerdings erlaube ich nur die Ausführung einer synchronen Operation.
Also der verbietet das alleinigen Ausführen links oder das alleinige Ausführen rechts.
Erlaubt nur, dass Synchrone kommunizieren von zwei Aktionen. Das heißt,
wenn ich weiß, X wird wieder zu X-Strich Y zu Y-Strich,
dann komme ich ausschließlich von X-Communication Merch Y mit der Synchronenaktion
Gamma VW zu X-Strich normaler Parallelitätsopperator, Y-Strich.
So, das ist die einzige Möglichkeit, wenn ich dann Kommunikationsopperator habe,
dann darf ich nur synchron operieren. Sondern was eben noch kommt,
beide könnten terminieren oder einer kann terminieren,
hier sieht man X, wenn X terminiert,
dann führt eine Synchrone Kommunikation eben dazu,
wie gehabt,
dass nur Y-Strich übrig bleibt
Wenn beide terminieren, naja, dann terminiert auch diese krune Operation beim Communication Merch.
Und wenn symmetrisch dazu Y nur terminiert, dann bleibt eben nur x-strich übrig.
So, das sieht jetzt ganz genauso aus, wie die Zusatzfolie für Kommunikation.
Und so soll das auch sein. Also der Unterschied ist ja,
dass auf den linken Seiten immer der Communication Merch steht.
Für den gibt es aber nur diese Regeln. Für den
Parallelopperator waren ja immer noch die anderen Ausführungsfolgen weiterhin möglich.
Der normale Parallelopperator hat neben diesem Schema, diesen vier,
hat der noch seine alten vier Aktionen, die sagten,
entweder links oder rechts und mit geeigneter Termination.
Der hat nur das als Möglichkeit, nur synchrone Operationen sind
da möglich. Und die Besonderheit ist wieder,
nach einem synchronen Schritt bin ich im Zweifelsfall wie rechts unten und
keine Termination aufgetreten ist, wieder bei einer normalen Parallelkomposition.
Was wir dadurch gewonnen haben, ist jetzt mit Left Merch,
wir können also sehr präzise sagen, entweder links mit einer Aktion ausgeführt.
Wir könnten uns auch einen Ride-Merch definieren, wo wir sagen,
auf der rechten Seite wird nur was ausgeführt. Müssen wir aber nicht machen,
weil wenn ich beim Prozess XY sagen will,
auf der rechten Seite möchte ich erzwingen,
dann drehe ich die Therme um und sage,
ich erzwinge auf der linken Seite eine Aktion.
Und hinterher habe ich wieder die Parallelkomposition, die sich genau gleich verhält.
Das heißt, an dieser Stelle kann man ein bisschen sparen,
Left Merch reicht, wenn ich einfach die Therme vertausche,
dann kann ich damit auch Ride Merch simulieren.
Und das ist genau die Idee. Ich habe eigentlich Left Merch,
dadurch indirekt auch Right Merch und ich habe Communication Merch.
Und ein Paralleloperator ist nichts weiter als, naja,
entweder Leftmatch oder Right Merch oder Communication Merch.
Der ist alles drei zusammen. So,
mit diesen Operatoren können wir jetzt steuern,
was von den drei Dingen gerade akut geschehen soll.
Und wenn wir das so machen, dann kriegen wir einen neuen Kalkül,
den PAP, Kalkül, Prozess Algebra mit Parallelität.
Und das ist eine Prozessalgebra, da kommt der allgemeine Parallelopperator,
das Merch drin vor,
Left Merch Komfort und Communication Merch
Der einfache Strich. Das sind die drei Operatoren, die
wir jetzt haben. Und so bilden wir unsere Therme,
so wie wir das jetzt gesehen haben.
Das sind alles binäre Operatoren. Und ein Paralleloperator ist ganz nett,
wenn wir sagen, der soll sehr stark binden.
Also falsch. Soll immer so gelesen werden, dass man sagt,
wenn ich nicht klammere, a parallel zu b,
dann bedeutet immer, das ist eine Bindung.
Also plus ist eine relativ schwache Bindung dagegen.
Sequenz allerdings nicht
A mal B, parallel zu B mal A, das mussten wir
klammern. Aber, oder ist jetzt der schwächste Operator?
Und das Nette ist jetzt, wie ich schon gesagt habe,
der Paralleloperator, den kann ich jetzt indirekt ausdrücken.
Ich brauche ihn eigentlich nicht, denn Parallelität kann ich ausdrücken durch Left Merchandise Communication Merch.
Denn man kann leicht zeigen, es parallel zu Tees,
Bisimilar, zu entweder es, Left Merch Tee,
also die linke Seite führe ich zuerst aus,
beim S was
Oder T-Left Merch S. Ich führe also beim Tee zuerst was aus.
Weil dann bleibt im Zweifelsfall auf der linken Seite Essstrich Tee übrig.
Beim anderen bleibt T-Strich Ess übrig, beides mit normaler Parallelität.
Oder außerhalb der Klammer steht ja Ess Communication Merch T.
Und das erzwingt die dritte Variante, diese krone Operation.
Gewisser Maßnahme bislang ist erst mal komplizierter gemacht.
Wir haben uns also zwei Hilfsoperatoren gemacht,
die zusammen genauso mächtig sind, wie etwas,
das ich vorher schon hatte
Warum ich das mache, ist einfach nur, damit ich
eine Akzematisierung gleich hinkriege. Was wir jetzt erst mal gucken müssen,
ist, was haben wir da eigentlich gemacht?
Haben wir was Sinnvolles gemacht? Die erste Aussage ist,
es ist schon mal so weit sinnvoll, dass wenn ich einen Term habe,
X plus Y. Und ich betrachte den jetzt als PHP-Term.
Und das ist jetzt ein ganz einfacher Term XY,
sollen jetzt mal atomare Aussagen sein oder ähnliches.
Es kommen also in einem PHP-Term durch Zufall
gar keine Parallelitätsoperatoren vor
Dann ist das ja nicht zu unterscheiden von einem BPA-Term.
Also wenn ich einmal nur drauf gucke, ist das ein Termin Plus und Mai.
Und jetzt wäre es ziemlich dumm, wenn ich irgendwas definiert hätte,
wo diese Mantik in diesem neuen Kalkül, der Prozess graf,
jetzt anders wäre, als der Prozessgraf nach alter Definition.
Jetzt kann man mal sehen, an den alten Regeln,
die gelten ja weiterhin.
Und ich habe für Plus und Mai nichts hinzugefügt,
was deren Verhalten ändert. Und deswegen gilt es,
dass der Prozessgraf in diesem neuen System PHP,
dass der genauso aussehen wird,
wie er auch
schon im BPA ausgesehen hat
Und das nennt man konservativ. Das heißt,
die Teilmenge von früher verhält sich auch in der Erweiterung genauso,
wie es vorher war.
So, und das gilt eben auch für beliebige BPA-Therme.
Alle BPA-Therme von vorher haben im neuen Kalköl exakt die gleiche
Semantik wie vorher. Haben in den gleichen Prozess geraffen.
So, und das ist eben eine konservative Erweiterung.
PAP nennt sich jetzt eine konservative Erweiterung von BPA.
Zerstört also nichts, was wir vorher
schon mal hatten
Ja, das ist immer so, wenn man die Syntax erweitert,
muss man ja auch die Semantik erweitern und dann hätte man
gerne die Semantik eingeschränkt auf das Alte, sich auch nicht geändert hat.
Gut, nachdem wir schon mal das erste Konsistenz- oder Sinnhaftigkeitskriterium überstanden haben,
gehen wir jetzt zu dem weiter, wo wir hinwollen,
wir wollen mich hin und wollen wieder nachgucken,
dass Bisimulationen, das ist, was wir gern hätten,
dass B-Simulationen auf den neuen Thermen Äquivalenz ist,
ist klar.
Es ist immer noch reflexiv symmetrisch, transitiv,
das folgt aus der Definition einer Bisimulation
Aber was jetzt interessant ist, es ist auch eine Konkurrenzrelation in PHP.
Kongruenz war Verträglichkeit mit den Operatoren. Wenn ich also weiß,
dass zwei Teiltherme S und S-Strich zueinander,
wie sie im Jahr sind, und ein Tee-Strich sind zueinander Bisimilar,
dann gilt im PHP das Gleiche,
was wir auch schon im BPA hatten, nämlich,
dass dann auch deren Summe Bisimilar ist,
also S-Plus T, ist B-Similar zu S plus T-Strich.
Und die Sequenz S-MIT-S-B-Similar zu S-Strich-MIT-Strich.
Und für die neuen Operatoren gilt das jetzt genauso
Er ist Parallel-Tee, ist auch Bisimilar zu S-Strich,
parallel zu T-Strich und entsprechendes auch für Left-Merch und Communication-Merch.
Das heißt, was wir jetzt haben, ist,
dass B-Simulation schon mal eine Kongruenz ist.
Das ist wichtig, dann wäre B-Simulation keine Kongruenz,
dann hätten wir ein Problem, dann könnten eben keine Axomatisierung,
nämlich das schaffen, dass B-Simulation jetzt charakterisiert wird.
Die Simulation muss eine Kongruenz sein,
sonst kriegen wir das mit dem Gleichheitszeichen nicht in den Griff.
Denn gleich wird immer eine Kongruenz sein, egal was wir machen.
Und ansonsten könnte ich in einem Kalkül,
wie auch immer er aussehen mag, irgendwas ausrechnen,
was das hier gar nicht hergeben muss, wenn es nicht kongruent wäre.
So, jetzt haben wir aber die entspanntere Situation,
ja, wir haben eine Kongruenz, Relation,
nämlich Bisimulation im PHP und können jetzt anfangen,
zu hoffen, dass es jetzt eine Axomatisierung gibt.
Und diese Axomatisierung funktioniert wieder mit dem Gleichenskalkül und die einzige Stelle,
an der ich jetzt drehen muss, ist die Aktionenmenge.
Die Schlussregeln bleiben die gleiche. Also meine Gleichheitszeichen soll immer
noch reflexiv symmetrisch transitiv sein. Kontext gilt immer noch,
Substitutionsregel gilt auch immer noch. Das heißt,
das Einzige, was sich ändern wird,
sind die Aktionen
Und im PHP nehme ich erstmal die Aktion Ma1 bis A5 Division hatten.
Die sind auf jeden Fall weiterhin gültig. Und jetzt setzt
sich als Hauptaktion das Aktion M1 für den Merch-Operator.
Und das sagt genau das, was wir schon als Bisimilar festgestellt haben.
Wir sagen nämlich x parallel zu Y ist gleich.
x Left Merch Y plus y Left Merch x. Oder
noch ein Plus x Communication Deutsch
Y. Diese beiden Therme wissen wir schon,
dass die linke Seite und die rechte Seite
das Dibisimilar sind
Das heißt, ist also korrekt, was wir da aksymatisieren.
Ja, aber das ist hier an dieser Stelle genau der Gag.
Für die Aksymatisierung brauchen wir nachher ein Gewicht, das etwas kleiner wird.
Und genau das passiert jetzt, mithilfe des Left Merch,
mache ich das gerade ein bisschen kleiner,
indem ich das aufspalte in drei.
Ich werde also sagen können, wenn ich das definieren will,
das Left Merch leichter ist als ein Merch-Operator.
Und auch, dass die Summe von drei Thermen,
zwei Left Merch und ein Communication Merch,
wird in der Summe zusammen leichter sein als ein normaler Merch-Operator
Das heißt, das ist mein Sinn und Trachten.
Deswegen habe ich die beiden Paralleloperatoren, damit das mit der Gewichtsfunktion so hinkommt.
Deswegen drücke ich jetzt Parallelität mit Hilfe dieser beiden Hilfsoperatoren aus.
Gut, und dann geht es weiter. Jetzt muss ich
das Verhalten von Left Merch und Communication Merch natürlich auch noch spezifizieren.
Und da ist letztendlich das, was Left Merch auch noch auszeichnet,
was kann auf der linken Seite stehen beim Left Merch, eine Summe.
Wenn es eine Summe ist von X plus Y, Naja,
dann muss ich da von einem dieser beiden Thermen irgendwas ausführen.
Und da ist jetzt die Aussage, da darf ich ausklammern.
Dass es mich entweder, nämlich von X irgendwas, für das zuerst aus.
Und dann, da das Z ran. Oder ich nehme
das Y zuerst und da das Z. Habe ich also wieder eine Summe.
Einen von den beiden Semanten werde ich nehmen, der andere verschwindet dann.
Und links, wie rechts bleibt denn der Nachfolger Y Strich übrig?
Mit einem normalen Merch im Z. Und was wir dann noch brauchen,
sind Regeln, wenn auf der linken Seite Eine Sequenz steht,
wenn da eine Sequenz steht,
dann kann da vorne ein Atombares etwas stehen,
ein V, gefolgt von irgendwas.
Und das ist ja exakt das, was bei Left Merch so gebraucht wird,
dann weiß ich genau, was ausgeführt werden muss.
Zunächst mit mich das V. Und wenn ich das V habe,
was bleibt dann auch übrig? Naja, X,
normaler Parallelitätsopperator Y. Das heißt,
LM 3 ist gewissermaßen die Quintessenz von Left Merch,
wenn ich da mich eine Aktion V vorne finde,
damit sie ausgeklammert und die kommt als nächstes drei
Und jetzt gibt es noch den Spezialfall gewissermaßen, dass X leer ist.
Also da links steht nur das V. Wenn das der Fall ist,
und ich habe V, Left Merch Y,
dann fällt sich das genauso wie die Sequenz V mal Y.
Denn ich würde ja zuerst das V ausführen und übrig bleibt
nur das Y. Also exakt das gleiche Verhalten wie ein sequenzielles Produkt V mal Y. Was passiert mit diesen Regeln?
Das kann man hier schon so ein bisschen ahnen,
wenn diese Regeln reichen sollen.
Warum steht dann bitte auf der linken Seite?
Warum gibt es keine Left Merch Regel 5
Wo gesagt wird, naja,
in der Klammer links könnt ihr auch irgendwas mit Parallelitätsoperatoren stehen.
Dafür haben wir jetzt gar keine Aktion. Hier steht zwar was
irgendwie mit V oder V mal X oder X plus Y,
aber es gibt nichts, X parallel zu Y. Left Mished Set.
Das hat einen einfachen Grund. Mit diesen Regeln,
wie es da ist, kann ich Folgendes machen.
Also der Trick wird wieder sein. Ich wende sie nur von links
nach rechts an. Wenn ich sie nur von links nach rechts anwende,
wenn man da ein bisschen drüber meditiert, dann wird man feststellen,
dass diese Regeln aus allen Parallelitätsoperatoren Nur Summen und Produkte übrig lassen.
Denn M1 sagt, wie ich ein Parallelitätsoperator wegkriege.
Und LM 2, 3 und 4 sagen mir,
wie kriege ich ein Left-Merch weg? Left-Merch,
da komme ich, irgendwann sieht man bei LM 2,
komme ich irgendwann bei einer Sequenz raus.
Und ich habe zwischendurch vielleicht mal eine ganze Menge Sumanten
draus gezogen. Oder LM3 sagt, ja,
im Left-Merch kann ich zwar zu einem normalen Merch machen,
aber der ist kleiner.
Der hat jetzt
kleinere Therme
Also sprich, so eine Induktionsannahme von kleineren Thermen wird jetzt zuschlagen,
das X-Parallel Y auf der rechten Seite von LM3,
dass das auch immer in Summen und Produkte umgewandelt werden kann.
Das ist gewissermaßen bislang die Idee,
wir kriegen gleich noch für Communication Merch auch noch Aktionen,
aber das ist die Idee dahinter, nämlich,
dass alles, was mit Parallelität zu tun hat,
jetzt umgewandelt wird in Summen und Sequenzen.
Das ist genau der semantische Gehalt eigentlich ja auch, hier von Parallelität.
Wir sagen, wir haben eine Interleaving-Semantik. Das ist,
da ist gewissermaßen das parallel zu dem, als würde man sagen,
na gut, alle Mischungen von Aktionen,
die ich haben kann, als große Alternative.
Und das kommt da auch tatsächlich raus. Wenn ich diese Aktionen anwende als Reduktionsregeln,
dann kommen da eine Menge Alternativen raus von ziemlich langen Sequenzen.
Und gar keine Parallelitätsoperaturen. Das ist was Ähnliches,
was wir für Left Merch haben, definiert man auch für Communication Merch.
Da ist jetzt das Grundpattern, das man haben muss,
Ja, ich will ja synchron operieren.
Also wäre es ganz toll, wenn auf der linken Seite
ein Term steht, der mit dem V anfängt.
Und auf der rechten Seite ein Term mit dem W anfängt und danach kommt irgendwas.
X und Y. Wenn ich das habe, dann kann ich ausklammern,
weil ein Communication Merch ist ja genau dafür da,
die beiden Aktionen V&W jetzt synchron auszuführen, also Gamma-VW auszuführen.
Und danach folgt dann der Rest parallel,
also x parallel zu Y. Das heißt,
ein Communication Merch bin ich losgeworden und habe sinngemäß
viel kleineren parallel Term
Gut, und das gibt es jetzt für zig Varianten,
nämlich den Spezialfall, dass einige Therme XY gar nicht da sind.
Wenn beide nicht da sind, dann habe ich Communication Merch-Regel 5,
V, Communication Merch W ist halt direkt die synchrone Operation,
Gamma VW. Wenn es nur das Y gibt,
aber auf der linken Seite kein X, also V,
Communication Merch WY, naja,
dann brauche ich gar kein Parallelitätsopperator mehr,
dann weiß ich,
dass es die synchrone Aktion Gamma VW gefolgt von Y und
zwar sequenziell gefolgt
Und das Gleiche,
wenn ich auf der linken Seite X habe,
hinter dem V und auf der rechten Seite nur das W,
dann führe ich wieder die synchrone Kommunikation,
Gamma VW aus und übrig bleibt in diesem Fall nur das X.
Das ist also gewissermaßen die Konsequenz, wie ich Communication Merch verstehe.
Das sieht man auch. All diese Dinge sind sinnvoll.
Das ist, was ich da sage,
ist durchaus etwas, was visimilares Verhalten hat.
Was jetzt noch fehlt, ist, wie verhält sich das
über Summen?
Und da ist es Distributiv
Wenn ich also die Wahl habe,
das Z soll irgendwie synchron kommunizieren mit X oder mit Y. Naja,
dann sage ich, okay, einer von beiden muss es sein.
Also könnte ich genauso gut schreiben,
X synchronisiert sich mit Z oder Y synchronisiert sich mit Z.
Ich darf das also ausklammern, in diesem Fall von rechts,
und mit Communication Merch 10 darf ich es auch von links ausklammern.
Das heißt, X, Communication Merch Y plus Z ist X,
Z, Communication Merch plus X Communication Merch Z.
Das heißt, mit diesen zehnten Aktionen Zusätzliche Aktionen kann ich tatsächlich so schaffen,
dass alle Parallelitätsoperatoren, die wir jetzt haben,
zurückgeführt werden auf Summe und Produkte, also letztendlich auf PHP-Therme.
Und wenn ich das erst mal geschafft habe, weiß ich,
dass die Aktion mal eins bis A5 ausreichen,
um daraus auch wieder eine Normalform zu machen.
Gewissermaßen arbeitet dieses Aktionssystem zweistufig, in dem es erst mal
alle Parallelitätsoperatoren eliminiert und danach dann noch dafür sorgt,
dass alles, was noch dann übrig ist,
am Plus und mal auch wieder Normalform
gebracht wird
So, jetzt haben wir die Aktion, was wir jetzt
noch zeigen müssen, ist das Ganze in Ordnung.
Ja, ja. Diese Formalisierung ist korrekt. Das heißt,
wenn ich ausrechnen kann, dass S gleich Tee ist,
dann gilt auch, dass die beiden Therme B-Simular zueinander sind.
So, und das läuft genauso wie eben für BPA beim
letzten Termin gezeigt. Nur ist es jetzt eben so,
dass wir jetzt noch Parksumme mehr haben.
Und wir müssen zeigen, dass alle Aktionen letztendlich gültig sind.
Das haben wir uns eben,
als wir die Aktionen schon angeschaut haben,
haben wir festgestellt,
ja,
diese Aktionen sind gültig
Das macht Sinn, so beliebige Therme XYZ, auf diese Art und Weise
gleichzusetzen, mal auf der linken und auf der rechten Seite
etwas Bisimilares steht. Und wie sieht das aus mit Vollständigkeit? Ist auch gegeben,
PHP, Kalkül ist sogar vollständig, das heißt,
waren immer zwei Therme S und TB-Similar sind,
kann ich auch nachweisen, dass sie Bisimilar sind,
denn nämlich im Kalkül ausrechne,
dass S und T gleiche Thermen sind.
Ja, und wiederum nimmt man die Aktionen,
Merch 1 bis Communication Merch 10, wendet sie von links nach rechts an.
Was man jetzt bekommt, ist eine Ersetzung zerkühl,
wieder modulo-assoziativität und Kombitativität von Plus.
Und auch in PHP bekommt dann jeder Therm seine Normalform.
Und zwar wird das eine Normalform sein, die wieder genauso
eine Normalform ist, die sie auch BPA-Thermen machen.
Das heißt, was eine Normalform ist von der Struktur,
das ist wieder der gleiche Formaufbau,
letztendlich eine Summe von atomaren Dingen oder atomares
gefolgt von der Normalform
Genau wie im BPA. Und dann gilt wieder,
wenn ich eine Normalform bilden kann, in endlicher Zeit,
also ich wider eine Gewichtsfunktion angeben kann.
Und ich weiß, es gibt wegen der Konfluenz eine eindeutig
bestimmte Normalform und ich kriege sie in meinen endlicher Zeit.
Da muss ich wieder nur Normalform, Modulu AC vergleichen,
feststellen, ob sie in dieser Relation stehen, was einfach ist.
Und dann gilt, S&T sind genau dann wie Similar,
wenn sie AC-Äquivalente, Normalform S-Strich und T-Strich haben.
Das heißt, wenn gilt S-Strich, ist AC
gleich T-Strich
Dann gilt mich wieder die Kette, Reduktionen verändern ja nichts.
Eine Reduktion ist eine spezielle Äquivalenzumformung. Das heißt,
es ist Äquivalent zu der Normalform ist Strich.
T ist Äquivalent zu normal vom T-Strich.
Und diese beiden Therme müssen jetzt AC-Äquivalent sein,
so wie wir es vorher auch schon hatten.
Und das muss immer gelten in die beiden Therme,
wie sie wieder sind.
So, ohne dass wir da ins Detail jetzt gehen.
Auch da gibt es Gewichtsfunktionen und Konfluenz
Und jetzt müssen wir uns überlegen, jetzt ist vielleicht eine Sache noch
ein bisschen unpraktisch an dem, was wir bislang beschrieben haben.
Nämlich die Tatsache, dass ich noch relativ liberal bin mit dem,
was ich an Kommunikation und Synchronisation erlaube.
Ich sage ja, naja, wenn ich was parallel habe,
dann ist entweder X dran oder Y, wenn die beiden wollen,
kann sich auch synchronisieren, muss aber keiner.
Das ist ein bisschen blöde,
denn normalerweise habe ich ja eher die Situation, dass sie sagt,
na entweder macht X was alleine oder meinetwegen auch Y oder die beiden machen was zusammen.
Aber wenn eine Aktion heißt,
sende ein Ereignis und dann gibt es das Ereignis empfange,
Und ich weiß, das soll jetzt eine synchrone Aktion sein,
dann möchte ich nicht, dass der eine auf den Gedanken kommt,
plötzlich was zu empfangen, ohne das, was gesendet wurden.
Das heißt, eigentlich bin ich der Meinung,
manche Aktionen müssen zwangsweise synchron stattfinden, die dürfen nie allein sein.
Dafür habe ich jetzt nicht die Möglichkeit, weil immer alles
erlaubt ist in diesem Kalkül. Und die einzige Möglichkeit,
jetzt so etwas gewissermaßen zu erzwingen, das zu jedem Empfangsereignis,
auch ein Sendeereignis kommt und die beiden zusammen stattfinden,
das kann ich nur mit einem neuen Operator machen.
Und das mache ich mit einem Operator, explizit angibt,
welche Aktionen ich nicht mehr allein sehen will.
Und das ist der sogenannte Verdeckungsappohaute. Also es gibt jetzt zwei Sachen,
die wir neu hinzubekommen werden, Abbruch, Deadlock.
Das wird eine Konstante sein. Und das Neue ist ein Verdeckungsoperator.
Damit kann ich jetzt genau das machen, was ich beschrieben habe.
Ich kann Teile einer Kommunikation zwangsweise verschmelzen, indem ich die Einzelaktion unterbinde.
Ich kann also, wenn ich einen Sender habe,
dann kann da ja ein Datum senden und auf der Empfängerseite
kann ich die Aktion Missiv die haben.
Die beiden könnten jetzt einzeln stattfinden,
wenn die gerade dran sind in den Prozessen.
Sie könnten auch synchron als Kommunikation von D stattfinden.
Und dieser neue Verdeckungsoperator, dem kann ich jetzt sagen,
verdeckt mal, alle auftreten von Cent und Receive.
Dann bleibt also nur noch Communication übrig. Nur noch Synchrones
wird dann übrig bleiben. Ja, so setze ich den
ein. Das ist jetzt ein neuer Operator.
Fangen wir an, wir brauchen jetzt dann noch einen neuen
Abrufoperator Delta
Wer ist sie einfach? Delta steht jetzt für Termination,
aber eine Unerwünschte. Wir hatten bislang das Häkchen,
das war erwünschte Termination, war alles gut.
Jetzt können wir davon unterscheiden, mit Delta, ein Prozess,
der einfach verklemmt. Also ein Deadlock. Da ein solcher Prozess
nichts mehr tun kann, braucht er auch keine Transitionsregeln.
Dessen Verhalten ist absolut beschrieben. Delta kann nichts machen,
schon gar nicht mehr korrekt terminieren. Was ich denn noch habe,
ist ein Verdeckungsoperator, Verdecken eine Menge von Aktion H,
also ein Verdeckungsoperator, wird immer parametrisiert mit der Indexmenge H.
Und ein H sind genau diejenigen Aktionen, die ich jetzt blockieren werde drin.
Der einfache Fall ist, so wie wir das hier sehen,
wenn ich eine Aktionsfrau habe, die nicht in H ist,
also eine Aktion, die nicht verdeckt werden soll.
Und ich weiß, ich komme mit dieser Aktion V
von X nach Rick Strich.
Dann kann ich jetzt schauen, was passiert denn?
Verdecken von H
angewendet auf
Naja, V ist keine zu verdeckten Aktionen.
Also kann ich sagen, die erlaube ich dir jetzt.
Das heißt, diese Aktion V findet statt.
Und ich komme jetzt sinngemäß nach x Strich,
allerdings natürlich weiter im Kontext des Verdeckungsoperators.
Also auch x Strich ist Argument von Delta Har.
Oder wie immer wir das jetzt aussprechen wollen, verdecken.
Von x Strich. So, und jetzt kann es natürlich sein,
was x Strich jetzt macht, da können jetzt manche Aktionen verdeckt werden.
Und auf der linken Seite,
da kommt jetzt der Fall wohl,
was passiert,
wenn ich
eine Aktion V machen kann
DNH ist, also eine, die verdeckt werden soll.
Nee, kommt doch nicht. Immer noch. Das terminierende Verhalten,
naja, wenn ich sage, ich habe eine Aktion V,
mit der kann ich terminieren,
dann kann ich das auch im Kontext des Verdeckungsoperators.
Ja, terminiere ich auch mit dem V. So,
und da unter, da steht jetzt auch keine Transitionsregel mehr.
Das ist auch korrekt, denn wir sagen einfach,
wenn X jetzt partout eine Aktion V ausführen muss,
die in Haar liegt, Ja, dann kommt es eben da nicht weiter.
Für Aktionen VDNH liegen gibt es halt keine ausgehende Kante mehr.
Das heißt, vorher kam ich vielleicht mit x nach x Strich.
Aber wenn V in Haar liegt, dann komme ich aus
dem Knoten Delta Haar von x nicht mehr raus.
Das heißt, auch das ist dann eine Verklemmung.
Ein nicht korrektes Terminieren. Wenn ich durch Zufall jetzt alle Aktionen abdecke,
also wenn ich alle Aktionen verbiete jetzt,
dann kann das eben schon passieren, dass es sich da nicht mehr rauskomme.
Und wenn ich nicht mehr rauskomme, habe ich halt eine Verklemmung produziert.
So, und deswegen habe ich auch diesen Operatorabbruch
Ist mich so, dass ein Therm, dem ich nichts mehr erlaube,
bisimilar sein wird zu dieser konstante Deadblock, zu dem Delta.
Zu diesem Grund haben wir das Delta eingeführt als neuen Therm.
Was wir jetzt aber noch machen müssen, ist eine kleine Erweiterung,
wir erlauben jetzt bei der Kommunikationsfunktion jetzt noch zusätzlich etwas,
wir sagen nämlich A-Kreuz A,
das kann eine normale Aktion werden oder ein Deadblock,
wenn ich nicht erlaube, dass da was passiert.
Ich kann also auch synchrone Aktionen verbieten,
wenn ich das möchte.
Gut,
wie sieht das jetzt aus
Was kann ich damit machen? Ich kann Synchronisationen machen,
indem ich Kommunikation erzwinge. In einem einfachen Beispiel,
wenn wir mich uns Parallelkompositionen von A, B anschauen,
dann wissen wir, ohne den Verdeckungsoperator kann ich entweder ein A ausführen oder ein B.
Und dann bleibt das übrig. Und dann kann ich das andere
nochmal ausführen, dann terminiert das. Und wenn ich will,
kann ich dann noch die Synchronaktionen gemeinsam ausführen,
asynchron zu B. Gut, das wäre die weitere Möglichkeit.
Terminiert aber immer. Jetzt möchte ich nur Die mittlere Variante,
das A und B-Synchron auftreten, erzwingen.
Nur das Synchrone kommunizieren. Und deswegen schreibe ich jetzt
den Verdeckungsoperator mit der Menge A, Komma B davor.
Das führt dazu, dass jetzt keine Aktion A mehr
möglich ist und keine Aktion B mehr möglich ist.
Das heißt, was bleibt übrig? Nur noch das Synchrone
kommunizieren, Gamma A, B. Das bleibt übrig. Das
ist gewissermaßen der Rest, der jetzt geht. So,
unter der Voraussetzung, dass das nicht Delta ist,
kann ich das jetzt als einziges machen.
Wenn das schon Delta ist, habe ich ein Problem.
Den kann ich auch da nichts machen
Was ich jetzt bekomme ist,
wenn ich PHP mit noch nachfolgenden Aktionen jetzt erweitere,
um dieses neue Symbol für Abbruch und den Verdeckungsoperator parametrisiert durch eine Menge Haar,
was da rauskommt, ist ACP, die Algebra kommunizieren da Prozesse.
Und in der kann man jetzt eben genau das machen,
man kann nämlich kommunizierende Prozessen beschreiben.
Was müssen wir jetzt machen? Wir müssen jetzt
das Verhalten dieser neuen Operatoren und Konstanten definieren
Mit neuen Aktionen. Und was jetzt neu hinzugekommen ist,
wir müssen jetzt erstmal zu den Aktionen A1 bis A5
noch 2 hinzupacken, nämlich die für Deadlock.
Denn hier steht A6, das mag uns doch einleuchten,
wenn ich die Wahl habe zu verklemmen oder X zu machen,
dann ist das genauso gut, als hätte ich X.
Denn wenn ich die freie Wahl habe, dann kann ich
ja immer noch das machen, was X machen kann.
Ich muss also nicht verklemmen. Plus ist also nicht deterministische Auswahl,
Prozess, der irgendwie verklemmen könnte, muss es nicht tun,
er könnte ja immer mit dem Richtigen aus X antworten.
So ist das bei B-Simulationen, da sagt man ja auch,
wenn der eine Prozess was machen kann,
dann kann der andere das Geeignete auch tun.
Wenn der eine eine Aktion machen kann, dann kann auch
der andere eine Aktion machen und ich lande im B-Similaren zuständen.
Es ist nicht gesagt, dass wenn der eine eine Aktion machen kann,
dass denn alle Aktionen des anderen plötzlich ein B-Similaren Nachfolgezustand hätten.
Es muss nicht für alle geben. Nur für Geschicktes
Raten muss das gelten. Und genauso ist es hier auch
Geschickt raten heißt eben Xpus Delta. Ja,
das Delta an dieser Stelle zum Schiffen. Ja,
und genau den blödsinnigen Fall des Deadlocks eben nicht zu nehmen,
sondern nur das X. Ja, und wenn ich einen Deadlock habe,
dann bringt es auch nichts, da noch was machen zu wollen.
Also Delta mal irgendwas, also Delta gefolgt von X,
da passiert nichts mehr. Einmal verklemmt, immer verklemmt.
Das heißt, egal was dahinter kommt, da brechen wir ab.
So, das charakterisiert jetzt das Verhalten eines Deadlocks.
Was charakterisiert jetzt
das Verhalten
Von Verdeckung. Na eben mussten wir teilweise noch gar nichts schreiben.
Also D1 ist das, was wir erwarten. Wenn ich verdecke,
Aktionen in Haar verdecke, und ich habe eine Aktion V,
und die kommt in Haar gar nicht vor,
dann ist diese Aktion V genauso gut,
als würde sie gar nicht im Kontext des Verdeckungsoperators stehen.
Wenn aber die Aktion An dieser Stelle muss ich jetzt aber sagen,
dass, wenn ich eine Aktion fahre,
aus der Menge Haar habe, was das bedeutet,
wenn ich sie verdecke.
Und jetzt ist die Aussage, die explizite Aussage,
eine Aktion faul, die verdeckt wird, ist genauso wie ein Deadlock.
Verdecken von V führt dann in diesem Fall zu Deadlock.
Also verdeckte Aktionen, die ich nicht mehr erlaube,
sind einfach Verklemmung. Da geht nichts mehr. Ja,
und wenn ich schon weiß, ich habe ein Deadlock,
was will ich da noch verklemmen, verbieten.
Verklemmt ist verklemmt, also führt das auch dazu,
dass ich da
nichts mehr verdecken kann
Ist eh vergebene Liebesmühde, passiert ja nichts mehr.
D4 und D5 ist einfach nur, um zu sagen,
okay, verdecken zieht sich so über die Operatoren hinweg.
Also wenn ich in eine Alternative was verdecke,
dann ist es wie die Alternative der Verdeckung.
Wenn ich in einer Sequenz etwas verdecke, dann ist es
die Sequenz der Verdeckung. Gut, das macht auch noch
Sinn. Und jetzt noch die Frage, wie verhält sie
unsere neue konstante Delta mit Left Merch und Communication Merch?
Da gibt es den dummen Fall bei Left Merch,
will ich was machen und es steht auf der linken Seite
Deadlock. Naja, vom Deadlock wird keine Aktion ausgehen.
Wenn ich da was nehmen will, weiß ich,
aha, egal was jetzt X noch ist, das verklemmt.
Wenn ich erzwinge, dass links was getan wird und
das kann nichts tun, dann ist Ende der Bearbeitung.
Communication Merch 12 sagt, wenn ich einen Abbruch,
einen Deadlock, irgendwie synchron koppeln will mit was anderem X,
dann passiert da auch gar nichts.
Das verklemmt immer noch, weil der linke Prozess nicht
synchron kommunizieren kann. Und das Gleiche gilt auch,
wenn der rechte Prozess verklemmt ist
So, das sind die Erweiterungen und ja,
korrekt hat und Vollständigkeit musste auch Geld.
Und für unser Beispiel von eben kann man jetzt tatsächlich das Durchexerzieren,
dass das auch das tut, was es tun soll.
Und man kann das jetzt ausrechnen,
dass ein Prozess der linksten Sender hat und rechts ein Empfänger und die
lokalen Aktionen Cent und Receive erlauft und diese Kronenaktionen Communicate.
Wenn ich jetzt den Prozess betrachte, der eine Menge Aktionen verdeckt,
also da kann ich jetzt zwei Typen von Daten übertragen,
wenn mich Bit0 und Bit1 und ich verbiete jetzt die atomaren Aktionen,
Cent 0, Cent 1, Read 0 Read 1.
Und jetzt habe ich auf der linken Seite einen Prozess,
der entweder eine Null sendet oder eine 1.
Und das komponiere ich parallel mit einem Prozess,
der auf der rechten Seite entweder null liest oder eins liest.
Ohne diesen Verdeckungsoperator ist klar, ich könnte die rechte Seite wählen
und der brechte Prozess könnte mal spontan Read 0 ausführen.
Also eine Null lesen, die nie gesendet wird.
So, was machen wir jetzt? Wir geben dem Kind
von Cent D und Reed D als Paar unter der Kommunikationsfunktion,
in dem geben wir einen Namen, wir nennen das Communicate mit D.
Und D ist entweder das Nullbit oder das Einsbit.
So nah wollen wir jetzt ausrechnen, was dieser Term ist.
Und damit das nicht ganz so lang ist,
fühlen wir mal ein paar Abkürzungen ein.
Wir nennen also ein Nullbit senden A, ein Einsbit senden A-Strich.
Ein Nulllesen ist B, eine Eins zu lesen ist B-Strich.
Und für das Synchrone kommunizieren haben wir C und C-Strich.
Je nachdem, ob ich Null oder Eins
Versenden möchte. Dann ist das ein bisschen einfacher,
dann habe ich die Kommunikationsaktion von A und B,
das ist dann C und von A-Strich und B-Strich ist es C-Strich.
Und der Term da oben, der ist ein bisschen kürzer,
das, was in der Klammer steht,
ist also A oder A-Strich, parallel zu B oder B-Strich.
Und das Ganze steht im Kontext noch vom Deadlock-Operator,
vom Verdeckungsapparator,
aber wir können ja erstmal
den inneren Teiltherm vereinfachen
Denn wenn wir den schon ein bisschen vereinfacht haben,
dann müssen wir nicht den Deadlock-Apparator die ganze Zeit mitschleppen.
Im Schrauben also jetzt nur an dem Argument des Verdeckens.
Und das Erste, was wir da machen können,
das erste Aktionen, dass da gut drauf passt,
ist, dass Aktionen für den Parallelitätsoperator, das Merch-Axium 1.
Und wenn ich das anwende, auf den ersten Therm,
dann zerlege ich das in drei Semanten,
wo ich einmal Left Merch habe, vom linken Rechten,
dann nochmal Left Merch,
aber jetzt von rechts und links vertauscht.
Und einmal Communication Merch
Das heißt, ihr habt A- oder Strichleft-Merch-B- oder B-Strich.
Dann habe ich es umgekehrt. Und dann habe ich A-
oder A-Strich nochmal mit dem Synchronisationsopperator zusammen mit B- oder B-Strich.
So, und da kann ich jetzt weiter operieren.
Ich kann also diverse Dinge ausklammern, umklammern. Ja,
wenn ich weiß, ja, wenn ich Plus irgendwo auf
der linken Seite habe beim Left-Merch-Operator, dann darf ich da ausklammern.
Ich darf also aus der Summe A plus A-Strich-Left-Merch irgendwas,
zwei Summanten, macht man nämlich das ausklammern.
Ja, und das tue ich auch mal fleißig
Also mache ich daraus A, Left Merch,
rechter Therm oder A-Strich, Left Merch rechtet, ja.
Und genauso mit B und B-Strich,
da habe ich nur noch B, Left Merch,
alter Therm oder B-Strich, Left Merch, alter Therm.
Und bei Communication Merch gelten sogar beide Disziputivgesetze. Also kann ich alle somannten aufspalten,
kriege ich also vier Stück, sinngemäß jeder mit jedem.
A mit B, A, B-Strich, A-Strich B,
A-Strich B-Strich. Alle vier Varianten. Gut,
da habe ich also schon mal ein, zwei,
drei, vier, fünf, sechs,
sieben,
acht so Manten draus gemacht
Und jetzt kann ich noch weiter vereinfachen. Jetzt habe ich
die Spezialsituation, dass ich dort Left-Merch-Operatoren habe.
Und das linke Argument besteht genau aus einer atomaren Aktion.
Und da weiß ich, das darf ich in der Sequenz umschreiben.
Denn links muss ich eh wählen, dann bleibt ja nichts
mehr übrig, es bleibt nur das rechte Argument übrig.
Das ist genauso gut wie eine Sequenz. Das heißt,
die oberen vier Therme schreibe ich jeweils so um,
dass ich den Left-Merch jetzt ersetze durch den Punkt.
Also steht da statt A, Left-Merch,
B plus B, Strich,
nur noch A mal B
plus B-Strich
Und das Gleiche für die anderen vier Thermen.
Und die vier Kommunikationsaktionen, die kann die noch umschreiben.
Also erst mal reiße ich A, Communication, Merch B.
Das weiß ich, wenn ich da zwei Atome habe,
dann ist das immer genau die synchrone Aktion Gamma von A,
B. Gamma von A, B ist aber C.
Das haben wir so definiert. Genauso Gamma von A,
Strich B-Strich ist C-Strich. Und für die anderen beiden,
also eine Null senden, eine Eins empfangen,
also etwas, was ja nicht passieren sollte,
ist das nicht definiert oder nicht definiert zu sein,
bedeutet, wir setzen dafür in der Kommunikationsfunktion das Deadlock-Zeichen ein.
Deswegen steht da C plus Delta, plus Delta plus C-Strich.
Die beiden Deltas sind genau die Dinge, die nicht synchronisieren können.
So, jetzt kann ich das Ganze noch ein bisschen vereinfachen.
Da steht jetzt plus Delta und dann wissen wir irgendwas plus Delta,
da kann ich das plus Delta streichen. Das heißt,
aus dieser Darstellung habe ich nochmal das Aktion A6,
eine Alternative mit Delta, da streiche ich das einfach.
Wir kommen also die vier Sumanten plus C-Strich plus C&C-Strich.
Und was ich jetzt mache, diesen vereinfachten Therm,
den packe ich jetzt wieder in den Kontext, des Verdeckungsoperators.
Ich nehme also jetzt diese Verdeckungsmenge, die nenne ich mal H,
damit ich es nicht immer wieder aufschreiben muss,
für unser Beispiel ist H,
also alle atomaren Aktionen senden von null Empfang von null,
senden von 1 im Fang von 1, also A-A-Strich-Baby-Strich-H ist diese Menge.
Und jetzt, wenn ich den Verdeckungsoperator an auf unseren Ausgangstherm.
Und den hatte ich ja eben schon umgeformt, das,
was ich da ausgerechnet hatte,
setze ich jetzt ein
Also A, mal B plus B-Strich, A-Strich,
mal B plus B-Strich, bis zu C plus C-Strich.
Alles jetzt aber als Argument des Verdeckungsoperators mit dem Index H.
Und der Verdeckungsoperator, da wissen wir,
dass sein linearer Operator über Plus und Mal.
Und jetzt stellen wir fest, was würde da passieren?
Naja, da vorne steht also Verdeckungsapparator angewendet auf Sexsumanten.
Das mache ich jetzt für jeden sumanten Einzelnen.
Wenn ich das gemacht habe, habe ich also
die ganzen Verdeckungsoperationen
Und dann, wenn ich Ihnen so jemanden einzeln habe,
dann stelle ich fest, Mensch, da ist eine Sequenz,
dann mache ich das für die beiden Faktoren der Sequenz.
Und das Erste, was ich da feststelle, ist,
ich wende dann den Verdeckungsoperator irgendwann auf das A an,
A, alleine.
A, ist jetzt aber ein Element aus der Menge H.
Und da sagt mir, dass eine Aktion verdecken,
einer zu verdecken, Aktion A, ist so gut wie Deadlock.
Und das stellt es immer fest, A,
muss verdeckt werden, A, Strich, B und B-Strich.
Das heißt, bei den ersten vier Semanten steht Delta mal
verdecken von dem Thermo auf der rechten Seite
Jeweils. Plus Verdecken von C plus Verdecken von C-Strich.
Da das aber keine zu verdeckenden Operationen sind,
verschwindet jetzt nach den Aktionen der Verdeckungsopperator. Eine Aktion,
die ich nicht verdecken soll, da kann ich eine Verdeckungsoperator weglassen.
Und dann weiß ich, eine Sequenz,
die mit einem Deadlock beginnt, ist ein Deadlock.
Das heißt, die ersten vier Semanten,
da steht Deadlock plus Deadlock plus Deadlock, plus Deadlock,
Idem Potenz sagt mir, das ist Deadlock.
Also habe ich da stehen Deadlock plus C
plus C-Strich
Und weil das dann immer noch in der Alternative,
das Deadlock-Zeichen da ist und C&C-Strich keine Deadlock sind,
bleibt dann noch C&C-Strich übrig.
Die Alternative zwischen irgendwas und dem Deadlock, da bleibt nur noch irgendwas übrig.
Das heißt, man kann also tatsächlich ausrechnen,
dass dieser Therm äquivalent ist zu C&C-Strich.
Die Parallelkomposition dieser beiden Systeme verhält sich exakt bisimilar zu einem System,
das synchron, null sendet und empfängt in einem Schritt oder
eine Eins empfängt und sendet.
In einem Schritt.
Das interne Verhalten, das noch möglich war,
ohne den Verdeckungsoperator, wird also komplett weggeschmissen, verhindert.
Das heißt, der Verdeckungsapparat erzwingt die Kommunikation zwischen
Aktionen A und B bzw. A-Strich und B-Strich.
Das haben wir jetzt tatsächlich ausrechnen können mit den Aktionen.
Ja, gut. Und jetzt nochmal die Folie,
um aufzuräumen und zu sagen, alles ist gut.
Tatsächlich, was wir hier gemacht haben, erfüllt alles,
was man braucht.
Ich habe erstmal eine Konkurrenzrelation
Das heißt, B-Simulation ist sogar für diesen neuen Kalkül ACP,
B-Simulation ist eine Konkurrenz, das heißt, zwei Epi-Simulare,
Teiltherme S und S-Strich, T-&T-Strich,
was ich dann machen darf, ich darf die Gleichung addieren,
multiplizieren, mit den Parallelkompo-Operatoren komponieren,
das hatte ich alles schon.
Das Einzige, was jetzt hinzugekommen ist,
dass Verdeckungsoperator auf S angewendet und Verdecknisapparator angewandt auf T,
S und T sind Bisimilar,
na dann weiß ich,
nee,
S und der Strich
müsste da stehen
Ja, die beiden Therme SMS, Strich,
mit dem Verdeckungsoperator, sind auch noch busy.
Ja, S&T haben ja keine Beziehung zu ändern.
Und wenn ich denn den Kalkül so definiere,
dass ich die neuen Aktionen mehr habe,
dann ist alles, was der Kakül behauptet, korrekt.
Also das heißt, alles, was im Kalkül als gleich
bewiesen werden kann, ist tatsächlich etwas, was busymilant ist.
Und C sagt, dieser Kakül ist sogar vollständig, alles,
was bislang formulieren kann, von dem wir nachweisen können,
dass das Ganze busymilar ist, dass es auch nachweisbar,
indem ich ausrechne, dass die beiden Thermen gleich sind.
Und wieder kann ich das zeigen, nehme ich Normalformbildung.
Nur, das kann man an dieser Stelle schon sagen,
das will man nicht mehr machen.
Also die normalen Formen können schon wegen der Zustandsraum-Explosionen sinngemäß so groß sein,
dass es keinen Spaß mehr macht, die Normalform hinzuschreiben.
Also sehr harmlose Therme, die vielleicht so über zwei,
drei Zeilen gehen, führen dazu,
dass man schon mehrere hundert Seiten Texte damit füllen kann,
um die Normalform aufzuschreiben.
Und natürlich kann man dann zwei Therme in ihre Normalform bringen,
also das Buch 1 und Buch 2 und vergleicht dann
auf AC-Equalenz
Man sortiert dann die Bücher irgendwie und guckt dann,
ob sie dann ein bisschen taktisch beeinstellen.
Das ist im Prinzip möglich, aber so wird man kein Tool programmieren.
Bisimilarität wird man also nicht auf diese Herangehensweise überprüfen.
Man wird also nicht die Normalform bilden und die dann
so taktische AC-Äquivalenz überprüfen, sondern man wird schon versuchen,
den Kalkül auszunutzen und möglichst lange eine Gleichung zu operieren.
Das heißt, die Normalform,
das Normalformbilden ist ja relativ stumpf, das sagt,
alle Parallelitätsoperatoren schnellstmöglich in Summen und Produkte umwandeln.
Ja, das ist kein Wunder,
dass das dann ziemlich groß wird
als Ther
Da wäre es schlauer, wenn ich die Parallelitätsoperatoren so lange
wie möglich behalte, um dort irgendwas zu zeigen.
Einfachstes Beispiel ist, wenn man 20 sehr einfache Prozesse hat,
parallel komponiert, in irgendeiner Reihenfolge.
Man will zeigen, dass sich diese Reihenfolge komplett umdrehen könnte.
Wenn ich weiß, dass parallel Kompositionen komutativ ist,
dann tausche ich das halt, sortiere ich das so lange um,
bis dann die andere Reihenfolge steht.
Das dauert nicht so lange. Die ganzen syntaktischen Umformen
geht schnell
Blöder wärst, den Term in die Normalform zu bringen,
so 20 Sumanten, die vielleicht entlang sind.
Das dauert schon sehr lang und den anderen auch und dann
feststellen, dass sie gleich sind. Das heißt,
was bei BPA noch nicht so schlimm war,
wenn mich da die Beispiele betrachte, das Bilden der Normalform,
das ist irgendwie fast genauso lang, als wenn ich einen direkten Beweis mache.
Das heißt, bei BPA lohnt es sich gar nicht nachzudenken für die Beweise.
Einfach Normalform bilden, das dauert nicht so lange, die vergleichen.
Das ist jetzt bei ACP oder auch beim Taika Kühl PAP,
nichts mehr angebracht. Da lohnt es sich tatsächlich nachzudenken,
weil das Bilden von Normalformen für die meisten Beispiele halt so mächtig sein wird,
dass es praktisch nicht mehr möglich ist.
Und dann ist es tatsächlich sinnvoller, die Gleichung anzuwenden,
zu gucken, kann ich nicht den einen Thermen vielleicht zum anderen umfuhren.
Das heißt natürlich, naja,
ob man das wirklich so immer so hinkriegt,
da gehört ja eine gewisse Intuition dazu, dass es dann tatsächlich so,
dass man da dann eher einen Menschen mit einem Tool unterstützt.
Also man wird es nicht mehr vollautomatisch per Blue Force Angriff machen,
Normalform ausrechnen, sondern man würde eher versuchen,
Ein Menschen beim Umformen des Thermes zu assistieren,
ihm zu zeigen, wo ungefähr, was könnte hilfreich sein.
Und der Mensch entscheidet dann mit einem gewissen Grundverständnis,
wo er so hin will, wie er umformen will,
welche Aktionen er jetzt gerade anwenden möchte.
Das kann dann durchaus deutlich, deutlich schneller gehen,
wenn man da in die Intuition hat.
Oder insbesondere, wie man es auch verwenden kann,
wenn man sich überlegt, mich interessiert vielleicht nur,
dass der Therm da irgendwie korrekt ist.
Also ich habe ein Verhalten,
das ich gern hätte und ein anderer liefert mir Verhalten
Dann sage ich, okay, wenn der einen Beweis mitbringt,
also eine Umformung, dass sein Verhalten genau bisimular ist zu meinem gewünschten Verhalten.
Also ich bin irgendwie ein Dienst,
also ich habe eine sichere Umgebung auf meinen Webbrowsern und möchte da was ausführen,
dann wäre es ja toll, wenn ich sage,
okay, alles, was sie ausgeführt werden darf,
muss ich im Wesentlichen so und so verhalten.
Dann kommt da irgendwie ein Programm an aus dem Web und sagt,
ich kann hier nachweisen, dass ich mich,
ich bin so und so kodiert und ich verhalte mich,
bisimular zu dem gewünschten Verhalten.
Und wenn er dann so eine Umformungssequenz mitbringt,
dann sage ich,
ja,
das kann ich nachprüfen
Jeden Beweisschritt nachzuvollziehen der Umformung, das ist leicht.
Wie du immer auf diesen Beweis gekommen bist, ist mir jetzt egal.
Das heißt, man kann auch sagen, hilfreich ist manchmal
so etwas, wenn ich die Arbeitslast des Beweisens auslagern kann.
Gut. Was wir jetzt noch brauchen, nachdem wir schon parallel haben,
ist aber immer noch ein gewisser mathematischer, langweiliger Effekt,
den wir vielleicht nochmal beseitigen sollten.
Bislang sind alle Prozesse endlich. Deswegen können wir ja Normalformen
so leicht bilden, indem wir einfach sagen, naja,
einen komplexen Operator ersetzt sich durch viele einfache Operatoren
Das heißt, bislang ist im Kalkül schon immer angelegt,
dass das Ganze immer endlich abläuft.
Vielleicht sehr viele Schritte, aber immer endlich.
Das heißt, aus formaler Sicht macht das nie ein Problem.
Wir machen uns jetzt Probleme. Oder ein positiver formuliert,
wir ermöglichen, die Modelliere endlich mal ein Betriebssystem oder sonst was,
was ein repetitives Verhalten haben muss, zu beschreiben.
Und das fängt schon damit an, dass ich bislang
ganz einfache Prozesse noch nie mehr beschreiben kann.
Also zum Beispiel ein Ein Prozess, der immer A,
B im Wechsel ausführt, so wie in dieser Abbildung,
den können wir bislang nicht beschreiben.
Denn dazu müsste ja der Prozess, der da oben steht,
und der da unten, wissen wir, die werden bislang immer kleiner.
Bei jedem Schritt, man kann nachweisen,
das ist jetzt eine andere Gewichtsfunktion, nicht die beim,
nicht die, die der Normalformbildung dient, aber man kann zeigen,
wann immer ich einen alten Thermos ACP genommen habe,
dann wird der nach einem Ausführen kleiner.
Bei BPA war das ganz offensichtlich.
Bei jedem Ausführen einen Operator weg
Da wird der Therm einfach von der Länge sogar kürzer.
Ich schmeiße immer was weg. Bei ACP schmeiße ich auch
was weg, wie ich das, was ich wegschmeiße,
definiere es halt ein bisschen anders. Hier ist es aber so,
wenn ich das im Kreis drehen kann, also AB,
AB, AB, unbeschränkt lange machen kann,
dann gibt es da offensichtlich nichts, was irgendwie einfacher würde.
Der Therm oben und der Therm unten,
der muss offensichtlich gleich schwer gleich komplex sein.
Im Programmiersprachen wird man sowas vielleicht durch eine Wi-Schleife machen,
Bei Automaten hat man da auch Schleifen dafür,
bei regulären Ausdrücken hat man das Sternchen.
Was wir jetzt machen, das hatten wir für reguläre Sprachen nicht gemacht,
das wäre aber auch da genauso möglich,
ist, man kann mit Gleichungssystemen solche Mengen definieren.
Man kann also mit Hilfe von Gleichung auch reguläre Menge charakterisieren und auch andere.
Und das Gleichungssystem, das dieses Verhalten spezifiziert, ist sehr einfach.
Da sagt man, ich habe zwei Prozesse,
X und Y und wenn ich X habe,
dann kann der ein A ausführen,
fällt sich wie
Man sieht also, der Prozess X ist der untere.
Denn nach einer A-Aktion bitter zu Y,
Y ist der obere, denn Y fällt sich so,
er kann ein B ausführen, verhält sich dann wie X.
Sei es in der oberen Knot. Ein solches Gleichungssystem kann ich also
mir gut vorstellen, beschreibt exakt ein solches zyklisches Verhalten.
Was wir jetzt machen wollen,
ist, wir wollen solche Gleichungen vorgeben und wollen sagen,
okay, die Lösung eines solchen Gleichungssystems,
das ist jetzt irgendwie ein Prozess gab
Ich suche also Prozessgrafen, die so ein System lösen.
Dieser Prozessgraf will ich als Lösung ansehen von diesem Gleichungssystem. Bisschen formaler,
habe ich ja nicht nur zwei Variablen, X und Y,
sondern ich habe typischerweise ein ganzes System von X1 bis XN,
eine ganze Menge Variablen.
Und wenn ich dann fordere, dass die gleich irgendwas sind,
was auf der rechten Seite steht und auf der rechten Seite steht ein Term,
Und dann steht da eben X1,
ist gleich ein Therm-T1. Und dieser Therm, in dem kommen Variablen vor.
Deswegen ist es ein Therm, der von X1, X2
bis XN abhängt. Also letztendlich ein Ausdruck in ACP.
Nur, dass auch Variablen jetzt anstelle von Thermen vorkommen können.
Also auf der rechten Seite steht ein Variablenbeleg der ACP-Therm.
Und genauso definiere ich das Fix 2,
X3 und so weiter bis XN
XN ist dann eben ein Term,
in dem auch diese Variapien nichts eins bis XN vorkommen.
Das ist ein Gleichungssystem für diesen Variablensatz. Ich habe jetzt erst mal
das Symbol gleich mit einem Ausrufezeichen verwendet, an den meisten Stellen.
In der Literatur, wenn ihr nachguckt, werdet ihr feststellen,
da steht nur das Gleichheitszeichen. Ich habe das hier mal bewusst gemacht,
um zu sagen, dass hier ist erst mal etwas anderes,
als das Gleichheitszeichen im Kalkül, wo wir aussahen, essgleich Tee beweisen.
Natürlich hat auch dieses Gleich wieder Bedeutung von verhält sich B-Simulat zu.
X1 verhält sich ein E-Simulat zu dem Therm auf der rechten Seite.
Aber erst mal formal, auch wenn es so was Ähnliches beschreibt,
ist das jetzt nur ein Trennungssymbol,
bei dem ich fordere X1 soll gleich dem Therm T1 sein.
Jetzt müssen wir definieren, wenn wir eine solche rekursive Spezifikation
von Variablen haben, was deren Lösung ist.
Und als Lösung betrachten wir jetzt Prozesse. Wenn ich also
die Variablen X1 bis XN habe, Dann habe ich Prozesse,
P1 bis PN, also ein Prozess, ist ein Prozess Graf.
Und auf so einem Prozess Grab stelle ich mir jetzt vor,
dass ich sagen kann, ich kann zwei Prozessgrafen addieren.
Was passiert, wenn ich zwei Prozessgrafen addiere?
Wenn ich also einen Prozessgrafen für S habe,
in einen Prozessgrafen für D, wenn ich diesen beiden Prozessgrafen addiere,
bekomme ich einen Prozessgrafen für S plus T. Das heißt,
das Addieren von Prozessgrafen, das versteht man so,
dass man sagt, ich gucke an,
was sind die Wurzelknoten und wenn ich die addiere,
dann habe ich das
So ist ähnlich definiert man für Sequenz. Wenn ich sage,
ich habe einen Prozessgrafen für S und einen für Tee,
dann kann ich auch die multiplizieren, indem ich sage,
S mal Tee oder Prozess Graf 1 mal Prozess Graf 2. Naja,
muss ich da, wo der eine terminiert,
da muss ich den anderen beginnen lassen.
Ja, in diesem Sinne habe ich die Operation plus mal
in Parallelität auch als Operation auf Prozessgrafen.
Und wenn ich das so verstehe,
dann kann ich Prozessgrafen oder dass ich das jetzt formal definieren möchte,
kann ich jetzt einsetzen in diese Gleichungssysteme.
Ich kann also die Prozessgrafen P1 bis PN nehmen,
Setz sie in meine Gleichung ein.
Also ich habe ja eine Menge von Gleichem mit der Laufvariable
I. I geht von 1 bis 1. Und meinen Variablen,
meine rekursive Spezifikation ist denn XI ist ja ein Thermen-TI von X1 bis XA.
Davon eben ein ganzer Satz für alle Eth. Und
wenn ich das jetzt einsetze, dann kommt ja raus,
für XI setze ich PI ein. Und auf der rechten Seite,
da kommt jetzt ein Therm raus, in dem ich an
die entsprechenden Stellen die Therme PI ins Miss PN einsetze.
Manche werden vielleicht nicht gebraucht
Ja, aber ich sitze überall, wo die Variante steht,
jetzt diesen Prozess Therm oder den Prozess Graphen ein.
Das heißt, auf der rechten Seite kommt auch wieder ein Prozess raus.
Und jetzt frage ich mich, ist PI Bisimilat zu dem,
was da rauskommt, wenn ich die ganzen Prozesse eingesetzt habe?
Und sollte das der Fall sein,
dass PI Bisimilat ist zur TI,
und das gilt jetzt für alle Prozesse, das heißt,
ich habe ein simultanes Erfüllen von P1 bis PN für diese Gleichungsspezifikation,
dann nenne ich diese Prozesse P1 bis PN
eine Lösung meiner WQ7 Spezifikation
Und jetzt ist das wieder so mit gleichem System das Vertrackte.
Ich kann da also ja eine Menge hinschreiben.
Und jetzt weiß ich nicht, sind die Lösungen existent?
Gibt es überhaupt eine Lösung? B ist sie eindeutig.
Gibt es eine, keine viele, unendlich viele.
Und da müssen wir jetzt mal gucken. Uns wird natürlich schon interessieren,
um damit rechnen zu können, die Situation zu haben,
wo jede rekursive Spezifikation genau eine Lösung hat.
Also ein Satz P1 bis PN, der damit bezeichnet wird.
Das wäre die Idealsituation
Denn wir möchten mit den rekursiven Spezika, den rekursiven Spezifikationen ja etwas modellieren.
Wir sagen ja, das ist die Spezifikation für ein Verhalten.
Wenn es da gar keine Lösung gibt, dann ist das blöd.
Ja, dann haben wir gesagt, wir haben ein System,
das man nicht implementieren kann. Und das andere,
was blöd wäre, ist, wenn es zwei Lösungen gibt,
dann haben wir unterspezifiziert, dann ist nicht eindeutig, was da rauskommt.
Also genau eine Lösung wäre schon wünschenswert. Ja,
typischerweise ist das nicht so, jetzt muss man sich angucken,
hat man das immer und wenn ja,
wenn es nicht immer gilt, für welche Sozialklassen,
von gleichen Systemen hat man immer eine eindeutige Lösung.
Und was heißt hier überhaupt eindeutig? Da sieht man schon mal,
dass, wenn ich bei den Prozessen PI etwas einsetze für PI,
wenn ich PI ersetze durch einen anderen Prozess PI-Strich,
der nur Bisimilar dazu ist, dann verändert sich ja gar nichts.
Das heißt, wenn ich hier die Ersetzung mache,
Besimulation ist eine Kongruenz. Das heißt,
auch nach dem Substituieren in den Thermen TI kann ich
zwei Bisimilare Therme
nicht unterscheiden
Das heißt, eine Lösung zu bekommen ist schon mal gar nicht möglich.
Das heißt, eine Lösung bekommen wir nur, wenn wir sagen,
wir sagen, eine Lösung, Modologie-Simulation. Das heißt,
die Lösung ist dann eindeutig, wenn ich sie betrachte,
als Äquivalenzklasse und ich packe alle Bisimilaren-Lösungen zusammen. Ja,
ich darf also nie erwarten,
dass es den Lösungsthermen gibt für P1. Nein,
ich muss zufrieden sein,
wenn ich einen Repräsentanten bekomme für die gesamte Klasse aller zueinander Bisimilaren-Therme,
alle Therme,
die zu P1-B-Seminaren sind
So, in diesem Sinne kann ich von einer eindeutigen Lösung sprechen.
Und allein schon der Therm, ah,
hat unendlich viele andere Therme, die zu Embi-Seminar sind.
Nämlich A plus A, A plus A plus A,
A plus A plus A plus A. Ja, da sieht man leicht,
es gibt, wenn man es so taktisch betrachtet, unendlich viele Lösungen.
Uns interessiert aber nur, was passiert denn,
wenn nicht alle busy mir Namen, Lösungen jetzt zusammen auf einen Haufen mache?
Was bleibt da übrig? Wenn da nur eine im Prinzip
nur eine Lösung übrig bleibt, wenn ich diese Klasse,
diese Äquivalenzklasse betrachte, dann nenne ich das eindeutig.
Gut, und da gucken wir jetzt beim nächsten Mal,
was wir da machen können,
was eindeutig ist und was nicht lösbar ist.
Bis dann