heutigen Termin gehen, um die sogenannte Zustandsraumexplosion. Zustandsraum,
Explosionen soll schlichtweg bedeuten, dass man für sehr kleine Netze schon extrem große Zustandsräume bekommen kann.
Also weit schlimmer als exponentielles Aufblähen. Was das heißt,
das kann man sogar noch genauer fassen. Man kann mich zeigen,
dass es Petrinetze gibt,
deren Erreichbarkeitsmenge oder Erreichbarkeitsgraf im Verhältnis zu ihrer Kodierungsgröße,
also Anzahl der Plätze, Transitionen und der Erkannten,
dass das Ganze unheimlich schnell wächst, unheimlich schnell in der formalen Informatik,
ist durch den Begriff primitiver Rekussion gekennzeichnet.
Man kann erst mal feststellen, wenn ich eine Folge von beschränkten Netzen habe,
die kann ich konstruieren, in 1 in 2 N3,
dann wächst deren Codierungsgröße, Anzahl der Plätze,
Anzahl der Transition plus Anzahl der Kanten, die wächst nur linear.
Das heißt, die Größe von dieser Folge
ist eine lineare Wachse
Und wenn ich dann vergleiche, wie schnell wächst jetzt dazu
der Erreichbarkeitsgraf und in die Erreichbarkeitsmenge dieser Netze, dann stelle ich fest,
dass diese Größen durch keine Primitiv-rekrussive Funktion mehr beschränkt werden können.
Was heißt primitiv-rekrusive Funktion? Das ist praktisch all das,
was ich mit Vorschleifen beschreiben kann. Wenn ich ein handelsübliches Programm habe,
wir hatten das in FG1 mal,
das Schema der primitiven Rekursion erlaubt mir,
im Wesentlichen alles zu programmieren, was ich so kann mit Zahlen,
aber nur mit Hilfe von Vorschleifen,
weil schleifen sie nicht erlaubt
Das führt dazu, dass es eine gewisse Begrenzung gibt des Wachstums.
Wie habe ich mir das jetzt ein bisschen konkret davor zu stellen?
Da kann ich mir zum Beispiel vorstellen,
dass das erste Netz vielleicht ein Erreichbarkeitsgrafen hat,
der die Größe 2 hoch 2 hoch N hat,
wenn N die Größe des Netzes ist.
Das nächste Netz hat dann vielleicht die Größe 2 hoch 2 hoch 2 hoch N.
Also schon mal die Größe des ersten Netzes,
aber als exponent zur Basis 2 wieder.
Und so geht das immer weiter. Ich kann das also
beliebig weitertreiben,
das Spiel
Und kann natürlich Netze dann irgendwann konstruieren, 2 auf 2
auf 2 auf 2 auf 2, ganz viele hoch enden.
Diese größte ist im Wachstum, das soll das Wachstum sein,
mit dem der Erreichbarkeitskraft nichts. Das heißt schon für relativ
kleine Netze in dieser Folge erreiche ich praktisch relevante Größenordnung,
nämlich welche, die den Speicher in einen handelsüblichen Großrechner sprengen werden.
Und wie kann man sich das vorstellen,
wie nähert man sich an ein solches Wachstum,
man nähert sich dadurch, dass man sagt,
dieses Hyperexponentielle Wachstum, weil es halt nicht begrenzt ist,
sondern die Höhe Der ist Exponentialstapels, ist halt ein freier Parameter.
Das kann ich programmieren. Ich kann es aber nur mit Wi-Schleifen programmieren.
Das werden dann die Reco-7-Funktionen, die haben den Minimalisierungsoperator.
Heutzutage würde man sagen, okay, wir haben eine Wi-Schleife,
deren Anzahl von Schleifen durchläufen nicht beschränkt ist.
Und jetzt könnten wir dieses aufblähende Wachstum dadurch beschreiben,
indem wir uns sagen, okay,
wir wollen jetzt genau zwei, auf zwei, auf zwei,
auf zwei, auf N irgendwie ausrechnen,
dann macht das die Funktion links folgendermaßen.
Sie sagt,
unser Wert Value ist erstmal eins
Und jetzt laufe ich von 1 bis 1,
das ist die Eingabe und nach Folgendes,
erstmal setze ich kaum auf den Anfangswert von Value.
Und solange dieser Zähler größer als null ist,
multipliziere ich den aktuellen Wert von wahr mit sich,
mit 2 und weiß das wieder dazu und dekrementiere den Counter.
Was ich also bilde, ist zweimal, zweimal,
zweimal, zweimal, zweimal 2,
das ganze Counter mal, also zwei Hochcounter My Value.
Und dann starte ich wieder in diese Schleife.
Nun hat Value aber schon den Wert 2-Hochcounter mal alten Value-Wert.
Das heißt, wenn ich das nächste Mal in die Vorschleife eintrete,
wird Counter dieser neue jetzt exponentiell angegewachsene Wert.
Und was mache ich damit? So oft,
wie ich diesen Wert habe,
multipliziere ich mit 2. Ich bekomme also zweimal, zweimal,
zweimal, zweimal 2 und das Ganze zwei hoch n-mal.
Das heißt, ich bekomme zwei hoch, zwei hoch n.
Beim nächsten Durchlauf bekomme ich das jetzt wieder
als Anzahl für Count
Berechne also 2 hoch 2 hoch N mal die Multiplikation mit
2. Was ich also habe, ist letztendlich eine Dekussionsgleichung,
wenn ich sage, beim iPlus 1 Durchlauf, was mache ich da?
Ja, ich habe den alten Wert von Value,
von dem Schleifendurchlauf i und multipliziere das mit zwei hoch
dem aktuellen Wert in den iTon-Durchlauf von Value.
Also zweimal, zweimal zwei, ganz oft,
das multipliziert, nochmal mit dem Wert,
dem aktuellen Value,
ergibt den Value ePlus
Und das Ganze starte ich eben, Value 0 ist 1,
weil am Anfang, dass der Initialwert ist,
bevor ich in die Vorschleife trete.
So, das kann man jetzt genauer ausrechnen.
Für uns reicht ja eine Abschätzung. Und für uns ist es
interessant, eine untere Abschätzung. Wir wollen also wissen,
wie schlimm ist das mindestens. Und dann können wir sagen,
okay, wir sagen, VI ist 2 Uhr VI.
Also Value ist ja immer größer als oder gleich eins.
Deswegen können wir das mal von unten abschätzen in den Value-Wert
weglassen.
Und Frauen 0 gleich
Das ist eine untere Abschätzung. Das kann man relativ leicht
lösen. Da weiß ich nicht, V0 ist 1,
V1 ist 2, V2 ist 2 hoch 2,
von 3 ist 2 auf 2 auf 2,
V4 ist 2 auf 2 auf 2 auf 2 oder 2.
Und wenn man das weitermacht und das so weiter abwickelt,
dann glaubt man das entweder sofort oder darf es sich auch zu Hause mit Induktionsbeweisen noch herleiten.
Das VN mit dieser Rekussionsformelheit 2 hoch 2 hoch 2 hoch 2
auf ist und der Stapel der zwei Exponenten ist eben von der Größe N.
Das heißt, genau die Zahl, die da rechts oben steht,
nur dass da oben vielleicht keine N steht,
sondern eine 2 ist, also eine untere Schranke,
für das Wachstum, was dieses, diese Wahlschleife produzieren kann.
Das ist also ein mächtiges Wachstum,
also ob da oben nun zwei hochend steht oder nicht,
das ist gar nicht so wichtig, denn ja,
wenn da N meinetwegen eine Million ist,
zwei auch eine Million, naja,
das kriege ich mit einem relativ kleinen Stapel da oben auch hin.
Also zwei auf zwei auf zwei ist dann auch von der
Größenordnung, zwei hoch eine Million.
Wenn ich also einen beliebig hohen Stapel hinkriegen kann durch En-Iterationen,
dann ist jetzt die Frage, kriegt sowas auch mit dem Netz hin?
Kann ich also dieses Verhalten der Wahlschleife nachahmen
Dabei muss ich es nicht exakt nachahmen. Also ein Petri-Netz hat ja durchaus
verschiedene Möglichkeiten. Es kann mal schalten, muss nicht.
Die spannende Frage ist eigentlich eher, gibt es eine Möglichkeit,
ein Netz so zu konstruieren, dass es so schalten könnte?
Ja, und wenn man sich das anguckt,
hier ist ein Netz, das ist relativ verworren,
wenn man genauer hinguckt, es hat drei Zustände,
da wird so hin und her geschaltet.
Aber dieser Platz, der Orange vorgehoben ist,
der hat genau die interessante Eigenschaft, nämlich bei jedem Schalten der Transition,
die da rechts unterliegt, dann nehme ich eine Marke,
von da unten und ersetzte durch Karl-Markende auf dem orangenen Platz.
Das heißt, aus einer Marke werden K. Wenn ich das
jetzt für jede Marke, die da unten liegt,
einmal mache, habe ich mir das Ganze mit K multipliziert.
Wenn die Programm von eben war das 2, einmal verdoppeln.
Es geht auch für K größer als 2. Das heißt,
wenn ich diesen linken Kreislauf schalte,
kann ich die Anzahl der Marken verkarfachen,
sodass wir jetzt einen Durchlauf.
Wenn ich das so oft mache, wie ich ein Zieler habe,
den ich mir zwischendurch generiere,
denn simuliere ich gerade
die Schleife
Und dann sieht man noch die Marke, ja,
der Platz, der mit M-Marken am Anfang markiert sein soll.
Das ist genau die Anzahl der Vorschleifendurchläufe. Das heißt,
die Anzahl der Marken auf dem Platz bestimmt mir,
wie viel ich als höher für diesen Stapel der Exponenten spendieren möchte. So,
das kann man im Ganzen durchexerzieren, indem man die Schaltfolgen angibt,
die dazu führen, was man eben aber zeigen kann,
ist, dass dieser vorgehobene Platz es schafft tatsächlich,
obwohl das Netz relativ klein ist,
kann ich die Anzahl der Marken auf dem Orangenplatz abschätzen durch die Funktion,
von M&K und dass es kam mal FVK von M plus 2.
Und er von Karls eine Rekursionsgleichung, wie sie uns bekannt vorkommen sollte.
Wenn M0 ist, dann ist es der Abbruch wert.
K. Gut. Und ansonsten ist es der Vorgängerwert mal Kaho,
dem Vorgängerwert. So was ähnliches hatten wir eben auch.
Da war nämlich, weil i plus 1 war,
weil i mal 2 hoch war i. Also genau dieser Ausdruck,
dass da Value statt F von K steht.
Und für unser konkretes Beispiel war es 2 und ich kam
So, und das ist insofern bemerkenswert,
dieses Netz hat ja nur sechs Plätze,
sechs Transitionen und man kann nochmal nachzählen,
es sind 30 plus K-Kanten und M plus vier Marken.
Das ist also fest, das einzig Variable ist jetzt K&M.
Das fließt in die Größe ein. Wenn ich diesen Wert
linear wachsen lasse, dann schaffe ich es halt,
dass der Erreichbarkeitsgraf als Schranke eben dieses Max von M und K besitzt.
Denn auf diesem orange hervorgehobenen Platz wird das
erreichbar sein
Das heißt, dieses Netz hat gewissermaßen die Chance, den Wertwall zu berechnen.
Wobei das ein sehr eingeschränkter Berechnungsbegriff ist. Es ist ja nicht gewährleistet,
dass da tatsächlich in jeder Schaltfolge so viel Marken mal rauskommen.
Aber es gibt immer eine gewissermaßen, die schlimmst denkbarste,
die produziert genauso viele Marken. Nämlich die,
die ganz bis zum Schluss in allen Schleifen bleibt und nie
mal vorher aufhört. Das Netz ist mich so gebaut,
das kann jederzeit die White Schleife und die Vorschleife abbrechen,
muss es aber nicht.
Erst ganz zum Schluss muss es das
Und wenn ich früher rausspringe aus einer Beischleife, dann wird eben nicht zweimal,
zweimal zwei ganz brav durchgerechnet, sondern nur ein Anfangsstück davon.
Ist für uns aber völlig egal,
denn wir wissen ja die schlimmstmögliche Markierung,
wo tatsächlich Max von MK viele Marken auf dem orangefarbenen Platz produziert werden.
Diese Markierung ist auch erreichbar und deswegen ist das eine Schranke.
So viele verschiedene Markierungen gibt es nämlich mindestens,
weil alle Zwischenwerte auch erreicht werden müssen von dieser Größenordnung.
Immer in K-Schritten
Das heißt, dieser Wert geteilt durch K,
ist die Mindestanzahl von verschiedenen Markierungen, die im Erreichbarkeitsgraf sein müssen.
Das wissen wir also auch sofort. Und wenn K gleich 2 ist,
dann haben wir trotzdem ein hyperexponentielles Wachstum und die Größe ist der Erreichbarkeitsgraf und dann wissen wir schon,
ist ein halbmal 2 oder 2 oder 2 auf 2. Das heißt,
langer Rede, kurzer Sinn, mit diesem Beispiel können wir zeigen,
dass wir ein riesengroßes Netz haben.
Und wie groß ist das? Naja, wenn ich
nur K gleich 2 wähle und nur zwei Schleifendurchläufe mache.
Also M auch auf 2 gesetzt habe
Dann sind das nur in Anführungszeichen 4.098 verschiedene, nee,
da habe ich das als Grenze, das heißt,
ich bin mir sicher, dass ich mindestens 2.000 erreichbare Markierungen habe.
So, und das Nächste, was ich machen kann,
ich kann jetzt einen der beiden Argumenten mal auf drei setzen,
Max 3-2 ist dann schon ein wenig größer.
Eine Million bummelig, hoch 100. Da kommen eine ganze Menge Nullen zusammen.
Plus zwei. Oder ich kann das andere ersetzen,
zwei, drei, naja, dann sind es drei
hoch 6,86 plus zwei
Ich glaube, damit haben wir die Anzahl der Atomen
im Weltall bei weitem überschritten. Aber ich möchte mich nicht
exakt drauf festlegen. Gut. Das heißt,
beim handelsüblichen Rechner haben wir da gewisse Probleme,
das überhaupt irgendwie darzustellen, in welcher Form auch immer.
Und das ist eben die Zustandsraumexplosion. Bei ganz kleinen Netzen,
sechs Plätze, sechs Transitionen, in diesem Fall 30 plus 3, 33 Kanten.
M ist zwei, also sechs Marken in der Initialmarkierung,
hat dieses Netz 386 plus zwei
verschiedene erreichbare Markierungen
Ein extrem kleines Netz, ist also ausgestattet mit extrem vielen Zuständen.
Mehr als wir irgendwie praktisch noch berücksichtigen können. So,
welche Konsequenzen hat das? Die Erreichbarkeitsanalyse ist selbst für beschränkte Netze also sehr schwer.
Und wenn wir uns noch mal in den Überdeckungsgrafen zurückerinnern,
dann gab es da ja zwei wichtige Aussagen.
Also erstmal die positive Aussage ist, wir können
mithilfe des Überdeckungsgrafen feststellen, ob ein Netz beschränkt ist.
Denn ein Platz P ist genau dann im Netz beschränkt,
wenn wir über Deckungsgraf kein Knoten vorkommt,
der an der Position P ein Omega trägt.
Also wissen wir genau, wenn wir uns den Überdeckungsgrafen anschauen,
der ist immer endlich.
Müssen wir nur schauen, welche Plätze haben denn ein Omega?
Das gibt uns die Menge der unbeschränkten Plätze. Und entsprechend
auch der beschränkten Plätze. Ein paar Sachen kann man nicht mehr machen,
weil der Erreichbarkeitsgraf unendlich sein wird im allgemeinen Fall Überdeckungsgraf ist immer endlich.
Das heißt, ich vergesse Informationen. Und das führt dazu,
dass ich zum Beispiel nicht mehr feststellen kann,
ob eine Transition lebendig ist oder ob das ganze Netz lebendig ist.
Oder ob eine Markierung, die Vorgebe erreichbar ist.
All das kann ich damit nicht mehr machen
So, nun ist das ja erst mal ein,
zumindest der erste Satz, ein positives Ergebnis.
Ich kann etwas feststellen. Zumindest im Prinzip.
Nämlich unter der Voraussetzung den Überdeckungsgrafen erst endlich.
Also kann ich ihn im Prinzip hinschreiben. Im Prinzip,
wenn ich an das Netz zurückdenke, dann heißt dieses Prinzip,
naja, ich sollte nicht jedes Netz nehmen.
Und ich bin noch nicht mal mit sehr kleinen Netzen auf der sicheren Seite.
Wenn man sagen würde, ich kann bei sehr großen Netzen
vielleicht nichts mehr machen, wäre das ja vielleicht noch einzusehen.
Aber man sieht hier auch, bei sehr kleinen Netzen kann ich schon
Im böse Fallen hineintappen, wo ich mich feststelle,
dass der Überdeckungsgraf oder der Erreichbarkeitsgraf, was für endliche Netze ja zusammenfällt,
dass dieser Graf so groß ist,
dass ich nicht mehr praktisch realisieren kann.
Wenn ich nicht mehr praktisch realisieren kann, weiß ich,
naja, selbst die prinzipielle Generierbarkeit sagt mir, es sprengt jede Komplexität.
Und Komplexität sagt in diesem Fall, ich kriege es nicht
mehr in den Speicher hinein.
Und deswegen kann ich jedes Petrinnetz-Analyse-Tool, wenn ich wollte,
es an die Grenzen führen.
Also diese kleinen Netze
Bringen jedes Analysewerkzeug zum Verzweifeln. Da passiert dann nichts.
Das kann den Erreichbarkeitsgrafen oder den Überdeckungsgrafen nicht aufbauen.
Das ist einfach viel zu groß. So in praktischen Fällen
wird so etwas nicht vorkommen. Aber wenn man sagt,
naja, ich weiß erstmal gar nicht,
was praktische Fälle sind, dann müsste ich mir überlegen,
was ist denn ein praktischer Fall?
Ein praktischer Fall wäre einer, bei dem ich die Netzstruktur
erstmal einschränke. Wenn ich das nicht tue,
ist jetzt die Frage, ist unser Überdeckungsgraf vielleicht nur einfach
eine blöde Herangehensweise
Blöde Herangehensweise heißt, gibt es vielleicht ein besseres Verfahren,
mit dem ich zum Beispiel Beschränktheit entscheiden kann.
Oder wenn ich Beschränktheit schon weiß und sage, mich interessiert Erreichbarkeit,
gibt es ein schlaues Verfahren als die Erreichbarkeitsmenge aufzuzählen.
Denn das Verfahren ist nicht besonders intelligent in dem Sinne,
dass ich hier weiß, die Größe ist nicht primitiv rekursiv abzuschätzen,
sondern liegt im schlimmsten Fall da drüber.
Und da ist die Antwort, eigentlich weiß man,
das geht gar nicht
so viel besser
Man kennt nämlich Ober- und Unterschranken für die Komplexität. Nein,
die Oberstanke, 78, sagt, um das Beschränkheitsproblem zu entscheiden,
brauche ich höchstens zwei hohe konstante mal N, mal Log-N. Platzbedarf.
Also irgendwie so etwas, was zwar deutlich schlimmer als zwei
Hochendes, aber deutlich besser als zwei hoch Endquadrat.
Und das ist der Platzbedarf. Also exponentieller Platz.
Mehr als exponentiell. Irgendwo zwischen zwei hoch End- und zwei
hoch Endquadrat
Jetzt könnte man sagen, gut, das ist eine Oberschranke,
aber schon zwei Jahre früher ist publiziert worden,
dass es eine untere Schranke gibt, die gar nicht so viel besser aussieht.
Denn man weiß als untere Schranke für den Platzbedarf,
habe ich zwei hochkonstante mal Wurzel von innen.
Wurzel ist zwar immer noch besser als linear in N,
aber zwei hochwurzelndes doch deutlich schlimmer als ein Polynom.
Also es braucht deutlich mehr als Polynom für Platz. Wenn ich mir das aufmale,
natürlich die rote Linie für zwei hoch X, Log X,
deutlich die Form einer Exponentialkurve, eigentlich noch viel schlimmer.
Und zwei Ruhezylyps sind, auch wenn das relativ flach aussieht,
merkt man schon, dass es exponentiell einen Verlauf haben wird.
Also das fängt nur so sachte an, geht dann aber
natürlich auf entsprechenden größeren Zeitskalen auch schnell in die Höhe.
Das heißt, wir haben gewisse Komplexitätsmaße, die uns sagen,
naja, besser als nicht polymiell witzen, die werden,
wenn ich zwei Hochwurzeln als untere Schranke schon für dieses Problem kenne.
Das heißt, es liegt nicht mehr im Überdeckungsgrafen,
ist das ein falscher Algorithmus wäre, sondern es liegt daran,
dass das Problem an sich minimale Komplexität in diesem Sinne,
zwei hochkonstante mal wohlzuenden benötigt.
Dass es eine obere Schranke hat,
die das Ganze jetzt irgendwie auf zwei hochen Login beschränkt,
das ist ja ganz okay, aber nicht hilfreich,
wenn ich weiß, dass es von unten eben dadurch schon eingegrenzt wird.
Man kann das, wenn man will,
nach oben noch ein bisschen zerfeinern,
also ich kann die obere Schranke noch
ein bisschen verbessern
Ich kann es mir ein bisschen genauer sagen, sage ich,
für ein gegebenes PT-Netz kann ich es im Platzbedarf 2
auch konstante Anzahl der Plätze mal Logarhythmusanzahl der Plätze,
mal Logarhythmus der Transition und das größte Kantengewicht,
was ich da so vorfinde, entscheiden.
Ja, das ist schon ein bisschen besser,
weil eben war die Abschätzung für N und N war die Größe des Netzes.
Die Größe des Netzes ist aber ungefähr so die Anzahl der Kanten,
die Anzahl der Kanten, naja, was ist das im schlimmsten Fall?
Anzahl der Plätze, mal Anzahl der Transitionen. Ja,
also wenn wenn dann nur steht P, dann ist das schon ganz gut,
weil N ist ja Pemaltee und man beide so die gleiche Größenordnung hat.
Denn wissen wir, hier steht nur P,
in einer anderen Formel würde sowas stehen wie P maltee, also Endquadrat eigentlich.
Von daher ist das schon eine Verbesserung irgendwie im quadratischen Sinne.
Wenn ich dabei jetzt nicht annehme,
dass ich die Plätze und Transitionen alles frei wählen kann,
sondern ich sage, ich fixiere jetzt die Menge der Plätze auf eine endliche Menge P,
dann halte ich ja die Platzmenge fest
Und für eine solche fixierte Platzmenge,
dann wird es ein Tick besser, dann weiß ich nämlich,
Mensch, das ist ja eine konstante.
Das heißt, zwei hochkonstante, mal konstante, mal konstante,
ist weder eine Konstante. Das heißt, der vordere Teil
fliegt weg. Dann entsteht dann nur noch der Platzbedarf,
ist linear im Neines linearen Logarithmus, also ist logarithmisch in Tee.
Wenn ich das also festhalte, dann ist es immerhin so,
dann weiß ich, dass das Problem Peace-Space vollständig ist.
Also unter allen Problemen, die in Polynomzeit gehen,
ist es dann eins der Schlimmsten
Und das ist ja schon eine relativ starke Fixierung auf eine feste Platzmenge.
Wenn ich noch irgendwie in nettere Bereiche stoßen will als Peace-Space,
also vielleicht bei NP vollständig ankommen will oder NP geradezu,
dann muss sich die Netzklassen noch viel weiter einschränken.
Und sagen wir mal, die schlimmstmögliche Einschränkung,
die man sich vielleicht bei Petronetzen vorstellen kann,
ist so mal mit dem extremsten anzufangen,
dass wir
konfliktfreie Netze anschauen
Und ein Netz heißt konfliktfrei,
wenn es keinen Konfliktplatz enthält oder einen Konfliktplatz ist,
ein Platz, von dem zwei oder mehr Kanten abgehen.
Wenn da zwei oder mehr Kanten abgehen, ist es also so,
dass sich eine Transition mit einer anderen vielleicht um die Marke kloppt.
Das heißt, es besteht ein Konflikt zwischen Transition,
wer die Marke im Zweifelsfall kriegen kann.
Wenn es nie einen Konflikt gibt,
dann ist ja mal ganz klar festgelegt,
welche Transition die Marke,
wenn er mal eine vorbeikommt,
bekommen soll
Das heißt, da wird kombinatorisch nicht viel passieren,
sondern man guckt nur Marke da, dann ist die Zugehörige Transition aktiviert.
Marke weckt, naja, dann ist sie eben nicht aktiviert.
Und weil das nicht mehrere zur Auswahl sind, verzweigt das nicht baumartig,
sondern es gibt mehr oder weniger pro Platz so einen Strang.
Und dieses konfliktfreie, das hat dann,
wenn es nicht niemals ein solches Muster als Teil des Netzes geben kann,
dann führt das dazu, dass ich weiß,
dass das Beschränktheitsproblem dann in einem sehr kleinen Polynom,
nämlich Nhoch 1,5,
also irgendwo zwischen den Jahren quadratisch
Lösbar ist. Wobei konfliktfreie Netze, kann man ja sagen,
die sind äußerst langweilig. Denn da wird die Marke,
wenn sie nicht gerade liegen bleibt,
höchstens weiter konsumiert und von irgendwo wieder ausgespuckt.
Aber es gibt nie mal Alternativen,
also schon mal gar keinen If-Sen Else oder sowas.
Das ist also ein durchlaufendes Etwas. So,
also für diese doch recht langweiligen Netze kriegen wir dann wenigstens
eine Polynom-Schranke, da geht was,
aber die wenigsten praktischen Netze haben diese Eigenschaft
Es gibt noch so andere Eigenschaften, zum Beispiel,
wenn das Netz komplett zyklenfrei ist. Keine Zyklen heißt,
das kann allenfalls von vorne nach hinten durchschalten,
dann kann man auch solche Resultate herausbekommen, dass die Frage,
ob eine Markierung erreichbar ist, auch in Polynomzeit geht.
Er ist Kunststück, muss ja nur von links
nach rechts durchgehen. Problematisch wird es erst dann,
wenn man irgendwelche Zyklen hat und irgendwelche Konfliktmöglichkeiten,
wo gerangelt ist, um die Marken,
das heißt,
wo sich irgendwelche kombinatorischen Vervielfältigungsmöglichkeiten geben
Gut, also wir haben ein Problembewusstsein bekommen. Wir wissen jetzt,
für einen Allgemeinfall mindestens zwei Hochwurzel-N viel Platz bedarf.
Also zwei Hoch, zwei Wurzel-N-Zeit. So als grobe Annäherung
. Jetzt können wir uns noch fragen, wo wir doch
gerade beim Berechnen waren. Wie sieht das eigentlich aus,
wenn ich die Petrinetze als Berechnungsmodell ansehe und mich frage,
naja gut, so ein Platz, da liegt ja eine Zahl von Marken drin.
Jetzt könnte ich auf einen Gedanken kommen, einige Plätze,
das ist mein Input
Und dann habe ich einen anderen Platz, das soll der Output sein.
Und dann sage ich sowas, kann das Netz nicht einfach mal losrattern?
Denn vielleicht sagen, ich bin jetzt fertig,
wie auch immer das jetzt signalisiert wird.
Und dann zähle ich die Marken auf dem Output-Platz und das ist dann der berechnete Wert.
Sowas könnte ich mit einem Netz ja auch machen,
jetzt im Sinne der Berechnungstheorien. Dann könnte ich mich fragen,
kann damit jede Toring berechenbare Funktion auch von einem Netz berechnet werden?
Input zu Output nach endlicher Zeit. Und da ist vielleicht
nicht so schlau eine Turing-Maschine als Vergleich zu nehmen,
zwei oder mehr Zähleautomat. Denn wir wissen,
dass es äquivalent ist, das macht also keinen Unterschied,
ob ich die Berechnungsmächtigkeit anhand einer Touring-Maschine definiere oder anhand eines Zähleautomaten.
Sobald ich zwei oder mehr Zähle habe, kann ich alle Touring-berechenbaren Funktionen berechnen.
Bei einem Zähler kriege ich nicht so viel,
ein Zähler lassen Kellautomat im Wesentlichen.
Und jetzt ist es naheliegend, mich zu überlegen,
wie ist denn ein PT-Netz von seiner Mächtigkeit im Verhältnis zu
einem Mehrzähleautomaten zu sehen?
Ist das gleichmächtig
Mächtiger ist unwahrscheinlich, dann hätte ich nicht in FG 1 gesagt,
Touri-Maschinen ist das Maß aller Dinge. Also bleibt nur die
spannende Frage, ist es genauso mächtig oder ist es schwächer?
Und da gucken wir uns jetzt ein Zielautomat an und um mal ein Beispiel zu haben,
ein Drei-Zähler-Automat,
da gibt es Zustandsübergänge von Z1 nach Z2. Und wenn in der ersten Komponente plus einsteht,
dann soll das bedeuten, dass bei diesem Übergang der erste Zähler,
der mit der Nummer eins,
dass der um plus eins
erhöht wird
Dem Beispiel, der erste Zähler hat gerade die Anzahl 8. Das heißt,
wenn ich diesen Übergang machen würde, hätte ich neun.
Die zweite Zahl minus eins bedeutet, dass der zweite Zähler
um eins erniedrigt wird, vorausgesetzt, er ist schon nicht null.
Also er muss echt positiv sein, denn ich will nicht
in die negativen Zahlen zählen.
Bleib also immer in die natürlichen Zahlen. Da im Moment,
an dem Beispiel, der zweite Zähler Y,
den Wert 3 hat,
könnte ich also durchaus
diesen Übergang machen
Ja, und das dritte Argument sagt, okay,
ich muss auch gar nichts tun, ich kann den Wert auch so belassen.
Und eine Alternative muss ich noch haben, denn für den Fall,
dass der Zähler null ist, muss ich auch was machen dürfen.
Und beim Zähleautomaten gibt es deswegen die Alternative,
ich kann auch fragen, ob ein Zählerstand null ist.
Das heißt, für diesen Übergang würde ich fragen, gleich null,
das heißt, der Übergang ist nur dann möglich,
wenn der dritte Zähler den Wert null hat, ein Nulltest.
Genauso funktionieren Zählerprogramme, sie können Verzweigungen in Abhängigkeit des Zählerstandes machen.
Sie können ihn testen, ob er null ist.
Und sie haben die Möglichkeit, plus um minus eins zu rechnen.
Und man kann natürlich durch hinreichende Sicherheitsabfragen immer sicherstellen,
dass nie die Null dekrementiert wird. Oder man fordert gleich,
dass das immer so sein muss, weil ansonsten ein Fehlerfall eindrückt.
Gut, wenn ich das also so mache,
dann kann ich damit verschiedene Funktionen berechnen,
also x Model Y, solche Sachen kann man da ausrechnen.
Das mit drei Zählern ist das möglich
Wie sieht das aus? Wenn ich einmal das Ganze mache,
dann ist nur die Schleife am Anfang möglich.
Warum der zweite Zähler ist nicht null. Das heißt,
die Kante, die nach rechts geht, kann ich nicht nehmen.
Und dann wird ja gerechnet minus eins auf dem ersten Ziel,
da kommt die 7 raus,
minus eins auf den zweiten Zähler,
3 minus 1 ist 2. Wenn auf dem dritten Zähler wird einer hochgezählt.
Ja, und danach ist die zweite Komponente immer noch nicht null.
Das heißt,
das Ganze mache ich nochmal,
bin synchron runtergezählt
Und nochmal, und dann ist der zweite Zähler null geworden.
Das heißt, ich habe mitgezählt,
wie oft ich x dekrementieren konnte. Solange bis y.0 ist,
ich habe also y davon runtergezählt, sieht man,
da wäre 3 von 8 unterdekrementiert, kommt also 5 raus.
Habe ich also einmal x-y gerechnet, dann ist y ja null.
Gut, das heißt, ich mache jetzt den Übergang auf
die rechte Seite.
Dabei werden die Zähler
nicht verändert
Und was mache ich jetzt? Jetzt verändere ich wieder etwas
. Der mittlere Zähler wird wieder hochgezählt. Dabei wird x
weiter dekrementiert. Und jetzt wird der dritte Wert,
der ist jetzt angekommen, 1, 2, 3,
jetzt ist er wieder 2, 1, 0 runtergezählt,
also wieder drei Durchläufe.
Das heißt, ich habe mir eigentlich wieder den alten Wert von Y aufgebaut,
nur einmal komplementär, dass ich mit Z gerechnet habe,
habe also nochmal
Y subtrahiert
So, da das jetzt der Fall ist, kann die
dritte Komponente ist jetzt null, kann ich wieder zurückwechseln.
Und was mache ich jetzt? Ich kann das noch einmal
machen und noch einmal. Und da bin ich aber auch
wirklich fertig. Da habe ich das subtrahiert,
dann ist die erste Komponente null geworden.
Dann gehe ich hier runter und stelle fest, die erste Komponente ist null.
Jetzt zähle ich nochmal hoch wieder und zwar im Prinzip so oft,
wie mir meine letzte Komponente,
in der ich das mitgezählt habe,
Wird hier wieder rückwärts gezählt. Und der wird,
der übrig bleibt, jetzt in der ersten Komponente.
Ich habe einfach nur den Wert von Z übertragen auf X.
Auf der anderen Seite hätte ich den Wert von Y übertragen auf X.
Das ist jetzt der Modul wert. Und wenn das der
Fall ist, den habe ich hier aufgehört zu rechnen,
Z ist jetzt null und ich gehe in den Endzustand.
Und da liegt jetzt gewissermaßen der Wert der Berechnung zum Abgreifen.
Und jetzt habe ich den Wunsch, das als Petrinetz darzustellen.
Also genauso eine Berechnung mit Hilfe eines Netzes. Das heißt,
ich habe in diesen drei Zähleautomaten Jetzt kann man sagen,
okay, die Situation, es ist doch absolut naheliegend,
den Zähler X, der Anfang 8, als Wert hat,
hinstellig da durch einen Platz X, auf dem acht Marken liegen.
Y, die drei codiere ich durch drei Marken,
Z hat den Wert null, also null machen.
Wenn jetzt die erste Aktion ist, ja,
was soll ich machen, wenn ich im Zustand Z1 bin,
dann habe ich eine Marke für den aktuellen Zustand,
lege ich dahin.
Da soll jetzt Folgendes passieren,
ich soll ja ein von X subtrahieren,
nämlich also eine Marke weg
Und ich soll einen von Y entfernen, nehme ich also auch eine Marke weg.
Und auf den dritten Zähler, da steht Plus 1,
dann lege ich auf Z eine neue Marke hin.
So, das sind die also Aktionen,
die ich ausführen kann, wenn ich ein Zustand Z1 bin.
Das wäre also eine Modellierung des Ganzen. Und jetzt will ich weitermachen,
will T2 nach dem gleichen Schema auch modellieren und stelle dann fest,
Mensch, da müsste ich ja wissen,
denn der Übergang ist nur möglich,
wenn der Zweitzähler den Wert gleich Null hat,
dann müsst ihr die Transition T2 erkennen können,
ob keine Marken auf dem Platz Y liegen.
Nun ist das das Hauptproblem, wie soll eine Transition erkennen,
dass weniger als eine Schranke Marken da liegen.
Bis jetzt ist in der Schaltregel das nur möglich zu sagen,
es müssen mindestens zwei Marken da liegen,
wenn ich da ein Kantengewicht von zwei vorschreibe.
Dann können da zwei, drei,
vier oder fünf Marken liegen, dann schaltet das.
Und wenn da null oder eine Marke liegen, dann eben nicht.
Jetzt möchte ich aber den Fall haben,
dass gewissermaßen das andere Verhalten modelliert wird.
Ich möchte also sagen können, nur wenn da null Marken
liegen,
dann schalte
Genau das Gegenteil. Und jetzt ist die Frage
eher so direkt modellieren, können wir das nicht?
Und die nächste Frage ist dann, geht das vielleicht nur im Trick?
Wenn wir es nicht richtig hinbekommen. Es könnte ja sein,
dass durch ein geschicktes Zusammenspiel mehrere Transitionen das geht.
Und da gibt es jetzt einen Hinweis darauf,
dass das nicht klappen kann.
Denn ich hatte schon mal vor ein paar Folien verraten,
dass das Erreichbarkeitsproblem für Petrinetze
entscheidbar ist
Man ist für Touring-Maschinen, ist aber nicht erscheinbar,
ob ich eine Endkonfiguration einnehmen werde, in der ich halte,
weil sonst das Halteproblem entscheidbar wäre.
Das heißt, bei PT-Netzen ist eine wichtige Frage,
entscheidbar, die bei Touring-Maschinen nicht entscheidbar ist.
Und das hat als Konsequenz, dass man ja schon hier vermuten,
wenn ich direkt sogar sehen kann,
dass wir nicht die Mächtigkeit von Touring-Maschinen haben.
Denn hätten wir sie, dann dürfte das Erreichbarkeitsproblem auch nicht entscheidbar sein.
Wir dürfen also an dieser Stelle nicht erwarten,
dass wir das hinkriegen können.
Im Allgemeinfall
Was ist jetzt genau das Problem? Gucken wir uns das
nochmal an? Wir haben jetzt Nummer eins,
Zähle am Wickel und wir nehmen an, wir sind gerade in dem Zustand,
da oben ist eine Marke, von dem Kreis.
Und der Zähler X, in der Ellipse, der hat jetzt
eine gewisse Anzahl von Marken, hier hieß es zwei.
Und ich möchte jetzt diesen Platz auf null testen. Und es ist ganz klar,
wenn ich wissen will, dass er nicht null ist,
dann nehme ich eine Marke weg, leg sie wieder zurück,
dann weiß ich schon mal mindestens eine Marke, hat dort gelegen.
Das war einfach. Wie kriege ich es jetzt auf der
rechten Seite hin, zu überprüfen,
dass da
null Marken gingen
Ja, ich kann ja irgendwie nicht nachgucken,
was sollte ich an diese Kante da dran schreiben.
Das ist genau das Problem. Das kriege ich auch nicht
hin, wenn ich das irgendwie machen will.
Ich kriege es gewissermaßen hin, wenn ich zum Beispiel wüsste,
dass mein Zähler nie einen gewissen Wert übersteigt.
Also wenn ich sicher gehen könnte, dass der Zähler
zum Beispiel nie mehr als zwei als Wert annimmt.
Also da kommen nur die Werte 0-1-2 vor.
Also ein beschränkter Zähler, dann ist das gar nicht
so schlimm
Dafür kennt man einen Trick. Wir nehmen uns einen Komplementärenplatz X-Strich.
Komplementär heißt die Anzahl der Marken auf X und seinem Komplementärplatz
X-Strich ist immer konstant k. Also vielleicht in diesem Beispiel zwei.
Ja, und jetzt mache ich mir diesen neuen blauen Komplementärplatz.
Die In-Variante wird initial erfüllt, wenn da keine Marken liegen.
Und jetzt kann ich den Test, ob auf X,
null Marken liegen, dadurch realisieren,
dass ich einfach nachschaue,
ob im Komplementärplatz
zwei Marken liegen
Denn wenn im nächsten Strich zwei Marken liegen,
dann weiß ich durch die Innenvariante, dass auf X-0-Marken liegen müssen.
Das heißt, mit dieser Idee, dass ich hier frage,
liegen da zwei Marken, habe ich implizit erfragt,
ob der Komplementärplatz X den Wert null annimmt.
Das heißt, so kann ich da schon einen Nulltest machen,
wenn ich nur weiß, dass ich irgendeine geartete Schranke K
habe für die Anzahl der Marken dort.
Dann geht das schon. Im allgemeinen Fall geht es eben nicht.
So, das führt dazu, also Petri-Netze Turing mächtig,
das liegt schlichtweg daran, dass es mir bei Petenetzen keiner verbietet,
unendlich viele Plätze und Transitionen zu haben.
Damit kann man ein paar Dinge tun. Wenn da genug
da sind, geht da was. Bei PT-Netzen ist aber die Forderung,
dass die Anzahl der Plätze und Transitionen endlich ist.
Also ich kann nur diesen endlich viele Zustände simulieren und so
weiter und so fort. Wenn das alles endlich ist,
dann führt eben die Entscheidbarkeit, das Erreichbarkeitsproblem dazu,
dass ich weiß, dass PT-Netze gar nicht Turing mächtig
sein können.
Das kann ich also nicht simulieren
Und das liegt eben daran, dass dieser Test auf null
für einen Platz X eben nicht realisierbar ist.
Jetzt kann man sich fragen, was wäre denn,
wenn ich da was hinzufüge? Also so eine neue Kante
. Und diese neue Kante mit diesem Kuller soll bedeuten,
diese Transition, die mit null beschriftet ist,
ist nur dann aktiviert, wenn dann null Marken auf X liegen.
Das ist dann eine Inhibitor-Kante. Im Hibitor ein Verhinderer,
das ist eine Verhinderungskante, das heißt Marken auf X verhindern,
das Schalten der rechten Transition
Dann habe ich genau die Möglichkeit, die ich brauche,
auf der linken Seite kann ich wie gehabt testen,
ob da mindestens eine Marke liegt, also not null.
Und mit dieser neuen Kante, der neuen Form von Inhibitor-Kanten, weiß ich wunderbar.
Damit kann ich jetzt einen Null-Test durchführen. Und wenn ich mir jetzt frage,
wenn ich PT-Netze mit Inhibitor-Kanten betrachte oder kurz Inhibitor-Netze,
sind die dann Thuring mächtig und es ist nicht verwunderlich,
wenn ich weiß, dass ich nur zwei Zähler brauche,
um Thuring-Mächtigkeit zu erreichen, eine Berechenbarkeit,
dass die Antwort ist,
ja,
solche Netze sind schmächtig genug
Um alle berechenbaren Funktionen auch ausrechnen zu können. Das ist
jetzt aber eine sehr große Erweiterung, nämlich das Einzige,
was Petri-Netzen noch fehlte, das Erkennen der Situation,
ob weniger als gewünscht viele Marken da liegen.
Das ist ja jetzt irgendwie durch die Inhibitorkante möglich geworden.
Und wenn ich damit jetzt rumspiele, natürlich kann ich auch
feststellen, ob weniger als drei Marken liegen.
Ich versuche einfach, die Sequenz dreimal etwas wegzunehmen,
zu realisieren
Und teste dann, ob dann null rausgekommen ist.
Dann wusste ich, okay, das waren drei,
wenn es klappt, wenn es früher schon null ist,
dann waren es zwei und so weiter.
Das heißt, durchhin reichen viele Dekrementschritte, kann ich testen,
ob es ein Wert kleiner gleichtar gewesen ist.
Das heißt, in Hiebtürkanten geben wir genau die umgekehrte Relation,
werden nicht mit normalen Kanten auf größer gleich einer Anzahl teste auf X,
können in Hibitürkanten auf kleiner gleich testen.
An diesem Fall kleiner gleich null. Eine normale Inhibitorkante testet darauf,
ob der Wert oder die Anzahl der Marken auf einem Platz X
einer gleich null ist. Wenn man das noch mal zusammenfasst,
dann haben wir gerade gesehen, PT-Netzes sind nicht turn mächtig,
in Hybitonnetze, dagegen sind es.
Und was wir in den fortgeschrittenen Veranstaltungsterminen noch kennenlernen,
sind gefärbte Netzen und da kann man zwei Dinge unterscheiden,
gefärbte Netze und unterscheiden die Token, indem sie sie einfärben.
Also es gibt rote Token, blaue Token, gelbe Token,
die haben alle ihre Farbe und deswegen sind sie nicht alle schwarz lackiert, sondern unterscheidbar.
Jetzt kann ich mich fragen, was passiert denn,
wenn ich solche Netze habe,
aber nur endlich viel Farben
Was weiß ich. 256 Farben oder sowas. Wenn die mir zur Verfügung stehen,
dann weiß ich, die Netze sind auch nicht türgenmächtig.
Das liegt schlichtweg daran, dass ich in dem Fall
ein PT-Netz angeben kann, das eigentlich das Gleiche tun.
Wenn ich aber durch die Hintertür eine beliebiger Sorgen und
endliche Farbmenge zulasse, dann wird das Ganze wieder einfach.
Dann nehme ich halt eine Farbmenge, die Isomorph zu den
natürlichen Zahlen ist. Und dann habe ich 0,
1, 2, 3 und dann kann ich natürlich überprüfen,
nehme ich gerade die Null weg.
Das heißt, mit solchen gefärbten Netzen kann ich alles machen
und das ist auch so gewollt
Gut. Die gucken uns also später. So,
jetzt ist die Sache, wir haben jetzt festgestellt,
dass das Leben ganz schön hart ist.
Also untere Schranken, zwei auch Wurzeln oder manche Sachen gehen
gar nicht. Manche Funktionen kann ich nicht berechnen oder,
oder, oder. Die Analysemöglichkeiten sind also deutlich eingeschränkt.
Und jetzt kommen wir deswegen auf den Gedanken. Wir versuchen
das mal anders. Wir versuchen gar nicht zu analysieren,
indem wir den Erreichbarkeitsgrafen oder analog die Erreichbarkeitsmenge betrachten.
Oder auch nicht den Überdeckungsgrafen. Denn das Ganze wird viel
zu groß. Das ist so der erste Wermutstropfen,
haben wir gesehen
Das explodiert uns, es fliegt uns um die Ohren.
Zwei auf zwei auf zwei, auf zwei auf M.
Als Größe ist es schlimm. Und das andere ist,
diese Eigenschaften gelten ja nur für eine einzige Startmarkierung.
Jetzt könnte man sagen, ja, die interessiert mich,
aber jene diese oder diese ganze Menge von Staatmarkierung finde ich eigentlich interessant.
Möchte ich sagen, möchte ich für alle diese Startmarkierung machen.
Vielleicht sind das sogar unendlich viele. Bei struktureller Beschränktheit haben
wir gefragt, ist es für jede denkbare Anfangsmarkierung beschränkt?
Das sind also Fragen, die beziehen sich
gar nicht mehr auf eine Anfangsmarkierung
Gut, und wenn man also aus zwei Richtungen motiviert ist,
einerseits nicht so einen großen Erreichbarkeitsgrafen aufzubauen.
Und andererseits vielleicht einige Eigenschaften beweisen zu wollen oder zu müssen,
die unabhängig von der initialen Markierung gelten sollen.
Dann muss man jetzt auf die Struktur des Netzes eingehen.
Man guckt nicht mehr auf die Markierung und was kann da passieren.
Sondern man guckt nur noch nach,
welche Plätze Transitionen sind das und wie sind die miteinander verkabelt.
Was kann da überhaupt prinzipiell passieren? In irgendeiner Erreichbarenmarkierung.
Das heißt, wir vergessen die Initialmarkierung.
Das nennt sich eine strukturelle Eigenschaft und die klassische,
die Strukturelle Eigenschaft ist die einer Netz-In-Variante.
Was ist das? Gucken wir uns dafür mal ein Beispiel an, das Leserschreiber-Problem.
Beim Leserschreiber-Problem haben wir zum einen ganz oben eine Menge von lokalen Daten,
auf denen gearbeitet werden soll, ganz oben lockt.
Und dann gibt es den linken Aster, da wird sich zum Lesen angemeldet.
Also auf ein Datum soll ein Lesezugriff stattfinden. Ja,
und dann habe ich die Möglichkeit zum Lesen und weil ich sage,
okay, wenn ich das lese, Dann dürfen zwar noch andere lesen,
aber es soll nicht möglich sein, dass in der Zwischenzeit geschrieben wird.
Also wenn ich da auf diesem Datum lesen darauf zugreife,
dann soll bitte keiner zwischendurch was schreiben.
Also ich möchte exklusiv hier den Zugriff haben,
damit ich auch weiß, dass es der aktuelle Wert ist.
Deswegen wird durch das Wegnehmen einer Marke in der Mitte der rechte Ast,
wo analog geschrieben wird, blockiert, denn der braucht alle Marken,
die in dieser Mitte liegen.
Alternativ kann sich auch ein Prozess recht zum Schreiben anmelden und schreiben.
Dazu nimmt er denn alle Marken weg
Und die Möglichkeit, dass zwar mehrere Leser erlaubt sind,
aber dann kein Schreiber,
oder nur einer schreiben kann und sonst keiner und auch keiner lesen,
das wird eben durch dieses Betriebsmittel in der Mitte die Ressource eher kontrolliert.
Und was kann da jetzt passieren? Ich kann solche Prozesse ablaufen lassen,
zum Beispiel, kann ich das mal loslaufen lassen?
Der erste Prozess sagt, die Aktion A,
es findet einen Lesezugriff statt,
habe ich die Marke dort,
gehe dort weiter
Noch ein Zweiter möchte gerne lesen.
Und einer möchte schreiben. Die sind natürlich in Konkurrenz,
jetzt weiß ich noch nicht, was passieren wird,
ob sich die Leser oder die Schreiber zuerst durchsetzen, schauen wir mal.
AHE, das heißt, der Schreiber kommt zuerst dran, warum auch immer.
Was dazu führt, er nimmt alle Ressourcen weg,
da durchgeht auf dem linken Ast gar nichts mehr.
Er schreibt und gibt dann die Ressourcen wieder frei und ist fertig.
Dieses Datum ist also beschrieben worden neu und danach werden
alle Betriebsmittel wieder freigegeben, sodass es jetzt möglich ist,
Dass hier der Leser zum Zuge kommt, eine Ressource nimmt.
Noch ein B heißt noch ein Leser, parallel dazu.
Und diese geben das dann auch wieder frei.
Noch einer. Dann sind die Ressourcen wieder zurück und ich habe
die Ausgangssituation wieder erreicht. Wenn ich das so mache,
kann das wieder von vorne losgehen. Aber was mich jetzt
viel mehr interessiert, ist die Korrektheit eines solchen Systems.
Ich möchte also
eine Spezifikation des Systems formulieren
Ich möchte mich, egal welche Markierung ich erreichen kann,
also hier ist das vielleicht noch übersichtlich,
vielleicht sind es nur endlich viele.
Aber zum Beispiel kann ich ja anfangen, irgendwie die Anfangsmarkierung zu verändern.
Also mehr Daten auch in lokalen Platz da oben zuzulassen und solche Sachen.
Das heißt, die Anfangsmarkierung war eigentlich illustrativ. Ich stelle mir vor,
ich habe irgendeine Anfangsmarkierung auf Lok und eine passende dazu,
ob er womöglich, nämlich genauso viel.
Man möchte für eine Seuche,
Anfangsmarkierung für alle davon erreichbaren, folgendes sicherstellen.
Erstens, Punkt
Wenn die Stelle S markiert ist, also geschrien wird,
dann ist die Stelle der Leser leer.
Also was daneben steht, wenn ein Schreiber schreibt, darf kein Leser lesen.
Die nächste Bedingung sagt, die Stelle der Schreiber hat höchstens eine Marke.
Also es ist nur ein Schreibzugriff, gleichzeitig erlaubt.
Und die dritte Bedingung sagt, wenn jemand liest,
also L markiert ist, dann ist die Schreiberstelle null.
Das heißt, wir haben es einerseits mit einem Problem
des Wechsels an den Ausschluss zu tun, Huture Exclusion,
was ist so das eine?
Nur, dass wir New Tax Clues nahmen plus zwei Typen von Auftritten.
Bei New Tax Exclusion geht es um zwei Aufträge,
behaken sich. Und es ist immer klar,
dass nur einer von beiden kritischen Abschnitt sein soll.
Hier ist es so, hier erlauben wir durchaus,
dass zwei Prozesse gleichzeitig im kritischen Abschnitt sind.
Aber dann müssen es Leseprozesse sein. Zwei Mal, paralleles
Lesen ist erlaubt. Paralleles Lesen, Schreiben, gemischtes,
nicht erlaubt und paralleles Schreiben ist auch nicht erlaubt.
Das sagen diese drei Bedingungen
Das ist also gewissermaßen eine Verallgemeinerung von Muty Exclusion,
wenn ich zwei verschiedene Aufträge als Typen habe und schreiben, dominanter ist.
Schreiben blockiert den Rest. Paralleles Lesen ist erlaubt.
Also eine typische Situation, wie man sie auch in Daten
machen kann. Gut, das möchte ich jetzt verifizieren.
Und das möchte ich jetzt nicht durch Erreichbarkeitsgrafanalyse machen,
sondern ich möchte es anhand der Netzstruktur ablesen.
Also anhand der Kanten. Und was ich jetzt mache,
ich formuliere zwei In-Varianten, E1 und E2,
also in Varianten Dinge,
die sich nicht ändern
Die unverändert bleiben. So,
da stehen jetzt in diesen Gleichungen immer Platznamen, das sind Abkürzungen für,
ich will nicht immer schreiben, die Markierung von Logs,
sondern statt M von Logs schreibe ich 1 von 0 Log.
Das heißt, die Anzahl der Marken im Log und von Leseanforderungen,
Schreibanforderungen, Lesen und Schreiben zusammen ist immer eng.
Das ist konstant. Ich kann also sagen,
ein Datum befindet sich in genau einem dieser Zustände.
Entweder ist es im Pool, im Log,
oder es ist in einer beiden Anforderungszustände oder im Leser
oder im Schreibzustand
Aber die Gesamtsumme all dieser Varianten ist immer konstant N.
Verändert sich nicht. Das heißt,
wenn nicht alle Marken am Anfang auf Lock packe,
steht da Lock plus 0 plus 0 plus 0 plus 0 ist M.
Also weiß ich auch von einer Initialmarkierung,
wo ich nur da oben die Prozesse haben kann,
weiß ich, naja, es gibt genau Endprozesse.
Und das verändert sich auch nicht. Und die zweite Innenvariante sagt mir
etwas über die Ressourcen, die Betriebsmittel in der Mitte aus.
Das steht nämlich die Anzahl der Leser plus die Anzahl Der
Ressourcen plus die mit Enggewichtete Zahl der Schreiber ist immer N.
Das ist jetzt verklausuliert. Denn in unserem Beispiel ist N
gleich 3. Und was kann da jetzt passieren?
Das kann zum Beispiel sein, dass ich einschreiber habe,
dann weiß ich sofort dreimal eins bis drei.
Denn es ist für L und R aber nichts mehr übrig.
Das heißt, sobald ein Schreiber dabei ist,
ist keiner ein Lesezustand und alle Ressourcen sind weg.
Und wenn ich zwei aufschreiben habe, Da habe ich ein Problem.
Bei zweimal N gleich N, in den natürlichen Zahlen,
das kriege ich nicht hin. Zweimal N ist immer größer als N,
wenn N mindestens eins ist. Was aber möglich ist,
dass die Leser und die Ressourcen zusammen enden sind,
wenn es aber die als Konsequenz, dass denn S Null sein muss.
Denn wenn, wir haben ja gesehen, wenn es größer ist
als Null, dann muss ein L&R immer Null sein.
So, das heißt, aus dieser dritten Bedingung kann ich schon Schlussfolgern,
dass der wechselseitige Ausschluss realisiert ist, wenn ich das so überprüfe.
Für dieses Beispiel, diese Situation kann ja eintreten,
dann sind zwei Leser dort und eine Ressource.
Wenn ich das einsetze, stelle ich fest,
die erste Innenvariante gilt. Denn Lok ist eins,
Leseanforderung ist null, schreibt man forderungsnull, Leser sind zwei,
es ist null, also zwei plus eins ist drei,
wie versprochen
Und die zweite Gleichung gilt auch,
denn da ist Lesen zwei plus Ressources, eins ist dreimal,
N mal 0. Ja, also wieder drei.
Stimmt auch. Oder eine andere Situation, hier beim Schreiben auf der rechten Seite.
Wie kann ich das jetzt ausrechnen? Naja,
ich kann zum Beispiel überprüfen, wenn ich mir eine Transition rauspicke,
also eh zum Beispiel, was passiert, wenn ich eh schalte?
Ich nehme jetzt also eine Situation heraus. Ich nehme an,
ich habe eine erreichbare Markierung, in denen gelten die beiden in Varianten.
Und jetzt schaue ich nach, wenn eine Transition schaltet, was passiert dann?
Und jetzt ist es mein Sinn und Trachten zu zeigen,
dass jede Transition, wenn sie denn schaltet, die in Variante nicht verändert.
Und das können wir für dieses Beispiel klar sehen,
wenn ihr schaltet, dann nimmt sie eine Marke von der Schreibanforderung
weg und legt eine auf es zum Schreiben hin.
Es nimmt zwar auch drei Marken von Airbag,
aber er kommt in der ersten in Variante nicht vor.
Dann weiß man, wenn vorher die in Variante gilt,
dann ist nach einmal Schalten von E, die in Variante immer noch gültig,
denn Schreibanforderungen sind um eins kleiner gemacht, Schreiben um eins größer,
in der Bilanz hebt sich das genau auf.
Also verändert sich da nichts. Und genauso fällt es sich
mit der zweiten in Variante. Da widme mich,
wenn ihr schaltet, werden drei Marken von dem Platz R abgezogen.
Aber gleichzeitig wird das kompensiert, weil ja der Schreiber jetzt eine Marke mehr hat.
Und da enden ja die Anzahl der Ressourcen sein sollte,
habe ich dann heraus, minus drei plus dreimal eins,
und das hebt sich auch wieder zu Null auf
Das heißt, wenn ich das so einmal komplett durchmache,
für jede Transition, davon gibt es sechs Stück,
dann werde ich feststellen, dass diese beiden Innenvarianten immer im Balance sind,
für jede Transition, die ich schalte.
Das heißt, wenn die Anfangsmarkierung diese Innenvariante erfüllt,
dann habe ich so ein Induktionsprinzip, das ich sage,
am Anfang gilt es.
Und egal, wo ich hingekommen bin, wenn ich jetzt
was tue, dann gilt es danach immer noch.
Und daraus schlussfolgere ich dann, dass es immer gilt.
Nein, das halten wir gleich nochmal fest,
aber das ist so die Grundidee,
die hinter Innenvarianten steckt
Man sagt, eine Invariante ist etwas,
was die Eigenschaft hat, durch eine Systemaktion,
wenn es vorher gilt, auch noch hinterher zu gelten.
Und wenn da noch die tolle Situation eintritt,
dass die Invariante am Anfang wahr ist,
dann weiß man, es gilt für alle erreichbaren Zuständen.
Das ist das Beweisprinzip, das hinter Invarianten liegt, also eine Art des Induktiven Beweisens.
Und für unseren Fall ist es eben so,
hatte ich schon angedeutet, dass diese beiden Invarianten stark genug sind,
um genau unsere Spezifikation abzuleiten, ABC, Nein,
der erste Punkt war, wenn einer schreibt, soll keiner lesen.
Das kann ich aus der zweiten in Variante ablesen.
Wenn mich einer schreibt, dann habe ich dort en-mal,
mindestens eins. Zwei haben wir schon gesehen,
geht nicht, also es steht da N mal eins gleich
N und das ist nur erfüllbar in den natürlichen Zahlen,
wenn L und R jeweils null sind.
LRS, das müssen alles nicht negative Zahlen sein. Das heißt,
ich habe als Konsequenz,
wenn ich dort mindestens den Wert eins habe,
dass L und R auf jeden Fall den Wert null
haben sollen und das ist genau das,
was in A gefordert ist
NBs gefordert, dass ich höchstens einen Schreiber habe.
Das gibt mir auch die zweite in Variante. Bei zwei Schreibern haben wir gesehen,
steht dort N mal 2 gleich N, mindestens.
Egal was L&R ist. Und zweimal N, wenn N
mindestens den Wert 1 hat, kann nicht N sein.
Also weiß ich, der Wert auf S muss kleiner gleich eins sein.
So, und die nächste Eigenschaft ist, M von L größer Null,
impliziert, dass es keinen Schreiber gibt. Naja,
wenn ich FRL etwas einsetze, Und verträgt sich das nicht damit,
dass sich für Es den Wert eins oder Größe einsetze,
weil dann steht da hinten ja L plus ein Vielfaches von N,
soll gleich N sein.
Und L soll positiv sein, also L plus N gleich N,
das ist nur erfüllbar, wenn L gleich Null wäre,
aber nicht, wenn L größer ist als Null.
Das heißt, die zweite in Variante reizt schon aus,
um das Ganze zu beweisen,
das regelt nämlich genau den Ablauf von Lesenschreiben und den Ressourcen.
Was ich da habe, das kann ich jetzt noch ein bisschen systematischer aufschreiben.
Ich weiß jetzt also, was ich ungefähr haben will,
diese beiden Innenvarianten, Das sind eigentlich ja Gleichungen.
Wir nehmen also mal an, wir haben ein ST-Netz,
also andere Schreibweise, PT- oder ST-Netz.
Und unsere Stellen seien S1 bis SP. Und jetzt ist das
da oben hier eine linear gewichtete Gleichung. Es ist nämlich
ein Gewicht KI für die IT-Stelle. Und das aufsummiert,
also ich sage die Summe von I von 1 bis P,
also ich lasse I über alle Stellen laufen.
Und Gewichte jetzt, die Markierung von SI mit dem
Gewicht KI
Also eine lineare Gewichtung aller Markierung. Und das ist immer gleich einer konstanten K.
Eine solche Gleichung für eine Markierung mit diesen Gewichten KI und K.
Das heißt S-In-Variantengleichung. Hat eigentlich fast genau die Form,
die wir schon von den Markierungsprädikaten kennen.
Da stand kleiner gleich. Da hatten wir auch die Markierung
jedes Platzes gewichtet und gesagt, es muss kleiner gleich K sein.
Hier schränken wir das also noch weiter ein und sagen,
gewichtete Markierung aller Plätze in Summe, muss gleich einer Konstanten sein.
Diese Aussage nennen wir es in Variantengleichen.
Also eine in Variantengleichung, die überall einen Plätzen ranschien.
So, und diese Gleichung ist gültig,
also es ist eine wahre Gleichung oder eine Gleichung,
wenn sie für alle erreichbaren Markierungen gilt.
Wenn ich das hinschreiben kann, also diese Gleichung gilt,
ja, dann meine ich damit,
dass sie für alle möglichen erreichbaren Markierungen m,
die ich da einsetzen könnte in diese
gleich und gültig ist
Eine wahre Aussage für alle erreichbaren Markierungen. So,
und abkürzen kann ich eben statt M von S auch nur S schreiben.
Das ist dann so ein bisschen die suggestive Notation,
die wir auch in den Beispielen verwendet haben.
Wir haben uns also eben klargemacht,
dass diese beiden in Variantie 1 sind,
die zwei in allen Markierungen gelten,
weil ich hatte es mal behauptet und für ein Event auch gezeigt.
Aber eigentlich möchten wir das jetzt nachweisen,
dass I1 und I2 tatsächlich es in Variantengleichung sind.
Wie machen wir das? Wir machen das genauso,
indem wir das für jedes Ereignis
tatsächlich nachprüfen
Das kann man jetzt so zu Fuß machen,
indem wir die Gleichung nehmen und da plus eins,
minus eins und sowas, drüber schreiben und feststellen,
ja, da kommt immer null raus.
Man kann das ein bisschen in der Notation abkürzen,
indem man das Ganze mit Hilfe der Wirkungsmatrix schreibt.
Nochmal zur Erinnerung, die Wirkungsmatrix eines Netzes, was soll das sein?
Das ist eine Matrix, eine P-Kreuz-T-Matrix, also ein Rechteckschema,
da habe ich für jeden Platz eine Zeile.
Und für jede Transition A bis F habe ich
eine Spalte
An jede Position in dieser Tabelle,
schreibe ich jetzt genau rein, was die Wirkung ist.
Also wenn ich in der Zeile für einen Platz L meinetwegen bin,
nehmen wir mal raus, die vierte Zeile L und wir
nehmen mal die Transition D. Was macht die?
Die halt als Effekt, das auf Lock eine Marke weniger da ist am Ende.
Deswegen steht dort in der ersten Zeile bei D minus eins.
Und eine Schreibanforderung mit generiert, deswegen steht dort an der Stelle SA, Treibanforderung.
Plus eins. Und für alle anderen Plätze passiert gar nichts,
da ist die Bilanz plus minus null. In diesem Fall,
weil da gar keine Kanten kann, ist da sind.
Allgemein definiert man die Wirkung, Delta, also das,
was sich verändert, von T&S als Minus, das,
was ich wegnehme, plus das, was sich hinlegt,
das ist genau dieser Effekt des Schaltens von T in Bezug auf die Stelle ist.
Und das hat mit dem Schalten eine Menge zu tun,
das steht hier rechts unten, Wenn ich nämlich weiß,
dass M1 mit Teez nach M2 schalte, dann wird M2 dadurch ausgerechnet,
dass ich zu M1 genau diesen Effekt Delta von Tee hinzu agiere.
Und Delta von Tee ist genau die Spalte an der Position Tee.
Wenn ich mir jetzt eine Transition mal rauspicke, ehe zum Beispiel,
dann ist das genau die mit E markierte Spalt.
Und da trage ich jetzt genau diesen Wirkungseffekt rein.
Da kommt also der Vektor raus,
den wir schon kennen,
we mit dem Kullab für das Ereignis
Alles im Vorbereich wird negativ gezielt. Ich nehme es ja weg.
Alles im Nachbereich positiv. Und das wird dann gegeneinander verrechnet.
Das heißt, Doppelkanten werden nur in ihrer Bilanz berücksichtigt.
Das heißt, ob ich gar nichts damit zu tun habe,
mit einem Platz P, also gar keine Kanten da sind.
Oder ob ich zwei wegnehme, aber gleich wieder zwei zurücklege,
ist egal. Die Bilanz wird immer null sein.
Es wird also der reine Effekt nur betrachten. Und für
diese Transition E sieht man, bei Log passiert gar nichts,
keine Kante, LA, keine Kante,
SA minus eins,
also eine Marke weg
Beim Lesen passiert auch nichts. Beim Schreiben,
es kommt ein Schreiber hinzu und wenn das Ganze parametrisiert ist,
also nicht diese drei,
sondern das Ganze für N eben läuft,
er setzt überall sinngemäß die drei Marken und die Kantenanschrift von 3 durch N,
dann nehme ich eben auch von den Ressourcen ein Stück weg.
Und wenn ich das habe, diese Wirkungsmatrix,
dann kann ich damit ein bisschen rumspielen.
Und wenn ich das lange genug gemacht habe, dann habe ich
die glorreiche Einsicht gehabt, dass ich jetzt null Stellensuche.
Also ich suche eigentlich den Kern einer linearen Abbildung.
Kern ist die Menge aller Vektoren, die auf den Null-Vektor abbilden.
So, und jetzt ist da noch eine Einschränkung.
Also erst mal interessiert uns die transponierte Matrix.
Also Delta Tröb. Was ist das Transponieren? Einmal in
der hauptdiagonalen Kippen. Das heißt, aus einer P-Kreuz-Thema-Atrix wird
plötzlich eine T-Kreuz-P-Matrix. War das das Erste? So,
von dieser Matrix, da kommt ja wieder eine raus,
da nehmen wir jetzt alle Vektoren ihn,
die eine Lösung des gleichen Systems sind, Delta, Triummai ist der Nullvektor.
So, da kann man schon mal sehen, i,
damit diese gleichen überhaupt sind taktisch Sinn macht, muss,
ich multipliziere ja eine Teekreuz-P-Matrix mit einem Vektor.
Dieser Vektor muss jetzt ein P-Vektor sein. Das heißt,
der hat jetzt für jeden Platz eine Komponente.
Das heißt, uns zu interessieren, nur Vektoren-I,
die jetzt genau die Dimension betragen von Essha
Und jetzt wollen wir das noch weiter einschränken. Wir lösen das
nicht in den reellen Zahlen, sondern ein bisschen komplizierter.
Wir interessieren uns nur für ganz zahlige Lösungen, I.
Also wir nehmen nur ganz zahlige Lösungen, I ist aus Z-Hochbetrag von S.
Also ein Vektor, der hat nur ganzen Zahlen und
er hat genauso viele Einträge, wie ich Stellen habe.
Und dann nehme ich noch den Null-Vektor raus.
Ja klar, irgendwas mein Null ist Null.
Aber das ist nur total unspannende Aussage.
Der Null-Vektor ist immer im Kern jeder Matrix,
das können wir mal rauslassen
So eine solche spezielle Lösung, I, eine ganz zahlige
Lösung, heißt jetzt S in Varianten-Vektor. Das heißt,
bislang haben wir nichts weiter gemacht als ein lineares Gleichnissystem aufzustellen,
Lösungen in den ganzen Zahlen zu suchen und sagen,
jede ganz zeitige Lösung nenne ich jetzt S in Varianten-Vektor.
Gut. Und das Ganze natürlich ist jetzt für ein Festes
vorgegebenes Netz N zu betrachten,
denn ich muss ja die Wirkungsmatrix Delta von N haben,
damit ich das Gleichungssystem überhaupt angeben kann
Wenn ich das habe, dann gilt der berühmte Satz von Lautenbach,
wenn ich ein solchen Essen-Varianten-Vactor habe. I ist einer.
Dann gilt, entweder als Vektorgleichung oder als Matrixgleichen geschrieben,
I mal eine erreichbare Markierung oder I mal die Anfangsmarkierung,
das ist egal. Wenn ich I-Trim my M multipliziere,
dann heißt das komponentenweise multiplizieren und alles addieren.
Da kommt also eine Zahl raus und I-Trim mal M0,
da kommt auch eine Zahl raus
Das heißt, da kommt etwas raus, was für uns
das Schema einer S-in-Variantengleichung erfüllt. Ich würde mich das Gewicht sein,
die K-Werte, dadurch, dass ich das als Vektor schreibe,
schreibe ich nur Vektor, E mal M,
habe dann die Gleichung, Summe von KI mal M von SI,
das alles aussummiert,
kann ich mit den Linear-Eigebranchen-Notationen einfach nur schreiben als E mal M.
Und auf der rechten Seite steht E mal M0,
aber da kommt eine Zahl K raus.
Und in dem Sinne ist das jetzt also
unsere S in Varianten gleich
Der Satz sagt also nichts weiter, wenn ich schon eine IS-In-Variante habe,
dann bekomme ich diese Gleichheit für alle erreichbaren Markierungen M.
Also ich bekomme eine S-In-Variantengleichung. Das ist schon mal ganz nett
. Ich kann also nur an der Struktur des Netzes,
also an seiner Wirkungsmatrix Delta, es in Variantengleichung ablehnen.
Was uns jetzt noch fehlt, ist ein Beweis dieser Tatsache.
Fangen wir mal an. Wir machen Induktionsbeweis über den Aufbau
der Erreichbarkeitsmenge
Ja, und da wieder über die Länge der Schaltfolgen,
die uns beweist, dass eine Markierung erreichbar ist.
Die Nuktionsbehauptung beginnt natürlich, der Anfang ist für die Lehreschaltfolge.
Da ist dann die erreichbare Markierung M M0. Denn von M0
komme ich mit dem leeren Wort nur zur M0. Die Aussage,
die ich aber beweisen muss, E-Mail M ist gleich E-Mail M0,
ist trivialerweise richtig, wenn M gleich M0 ist.
Dann steht da eh mal M0, gleich E-Mail M0,
das ist immer wahr.
Und jetzt ist der Interessante Fall,
also der Induktionsschritt oder der Induktionsschluss
Und dabei berücksichtigen wir, wenn wir jetzt einen Induktionsschluss machen,
wir wissen also schon, wir kommen bis zu M1
und für M1 gilt diese Aussage des Satzes.
Und jetzt sagen wir, jetzt nehmen wir die in der
nächsten Ebene erreichbare Markierung, M2, es gibt irgendeine Transition
Tee und ich komme dann von einer in Endschritten erreichbaren Markierung
M1 durch einen Zusatzschritt zu M2, dann gilt ja,
das wissen wir, dass sich die Markierung M2 ausrechnen kann
als M1 plus den Effekt Delta von Tee.
Und das benutze ich jetzt einfach zum Ausrechnen
Ich rechne mal aus, was ist denn jetzt I mal M2?
Statt Tröl kann man auch, also statt Transportierung tritt,
kann man auch mal einen Strich dran schreiben,
man kann es auch ganz weglassen, bin ich der Meinung.
Denn wir Skalarmultiplikationen. Also Ima M2,
da setze ich einfach ein, was links steht für M2.
Das ist I mal im 1 plus Delta von Tee.
Gut, jetzt darf ich das laut lineare Algebra ausmultiplizieren,
also ist das I mal M1 plus E-Mail Delta von Tee.
Und wenn man dann noch berücksichtigt,
dass I mal Delta das Gleiche ist wie Delta, Trimai.
Also ich darf die hinteren beiden umtauschen. Und einfach nur
die Tris auch verschieben. Also hier steht ja Itrium,
mal Delta, dann kann ich das umdrehen und vertausche auch die Transponierungssachen.
Denn gilt das genauso, was steht denn da?
Dann steht genau die Eigenschaft, die ein Essin-Variantenweckel haben muss.
Für den steht nämlich Delta, Trimai ist gleich null.
So, das heißt, an dieser Stelle steht hinten plus null.
Kann ich also auch weglassen. Eigentlich steht da nur
I mal
Und nach Induktionsvoraussetzungen, in diesem Schritt, weiß ich ja,
I mal M1, das ist ja die Annahme,
die ich den Induktionsschritt zugrunde lege, ist I mal M0.
Das habe ich da reingesteckt in den Erektionsschluss. Also weiß ich
I mal M2, ist gleich I mal M0. Das heißt,
dafür, dass ich reinstecke, es gilt für alle erreichbaren Markierungen M1,
die ich mit Schaltfolgen der Länge N erreichen kann,
weiß ich jetzt, ich kann auch die Behauptung beweisen,
für alle Schaltfolgen der Länge N plus 1.
Und damit folgt jetzt nach Induktionsprinzip mit der Verankerung zusammen.
Es gilt für beliebig lange Schaltfolgen, es gilt also für
alle erreichbaren Markierungen
Gut, dazu mal ein Beispiel. Wir suchen also ganz zahlige Lösung I,
die Lösung des Gleichungssystems, Delta Trömai, gleich Null sind.
So, hier steht die normale Matrix,
die müsste ich jetzt transponieren und dann einen Vektor dazuschreiben,
ich lasse das mal und schreibe den Vektor,
den ich gern hätte, das muss ja ein Vektor sein,
der genauso viele Komponenten hat, wie ich Plätze habe.
Wenn ich das so daneben schreibe,
dann kann man die gewissermaßen diesen Vektor immer auf so
eine Spalte drauflegen und dann auf so ein Ja genau,
so eine Spalte drauflegen und multiplizieren und es muss jeweils null rauskommen,
wenn nicht alle Produkte aufsummieren.
Wenn ich das jetzt für jede Spalte einmal mache,
also für die Transition A, sieht man da,
wenn ich das jetzt ausrechne,
dann steht in der Spalte A ja nur minus eins ins eins für Lock und LA.
Wenn ich das jetzt also tatsächlich multipliziere und das lineare gleiche System hinschreibe,
dann weiß ich als erstes schon mal,
minus U plus V muss null sein.
Das sagt mir die erste Spalte
Okay, das ist so eine Bedingung,
die ich schon mal an den Vector i stellen muss.
So musste aussehen, die ersten beiden sind vom Zahlenwert gleich.
Wenn ich mit der zweiten Spalte jetzt losgehe oder ich weiß erstmal,
die beiden sind gleich, gut, und ist gleich voll.
Jetzt gehe ich in die zweite Spalte,
dann lese ich hier ab, minus eins an der V-Stelle,
dann plus eins bei X und minus eins bei Z.
Und das muss null sein. Gut, kann ich jetzt
auch nochmal umformen. Da kommt jetzt raus,
X ist U plus
Möglichst wenig negative Vorzeichen. Bei der dritten Spalte kommt jetzt raus,
naja, einmal uuu, minus 1 mal x plus einmal Z. Muss null sein.
Was haben wir da? Da haben wir keine neue Information,
denn wir wissen, u ist gleich V. Und dann steht
da nur die zweite Gleichung mit anderen Vorzeichen.
Wenn ich die zweite gleiche mit minus eins multipliziere,
dann steht ja V minus X plus Z und da ungleich V ist,
steht da eigentlich nur die zweite Zeile.
Also diese Gleichen bringt uns nichts Neues. Müssen wir nicht
weiter betrachten. Es waren also linieabhängig die Gleichung des Teilen.
Gehen wir weiter zum vierten. Da steht ja minus einmal
U plus einmal weh, gleich 0. Also weiß ihr,
U ist gleich weh und da ungleich faul ist,
weil sie U ist gleich V gleich weh.
Also drei Variablen müssen schon mal den gleichen Wert haben
So, was haben wir dann noch mal, also 4,
5, minus einmal W plus, einmal Y,
minus N mal Z gleich mal. Und die letzte Speide,
was steht da, da steht so was ähnliches,
da steht dann, ich fange nur mit U an,
minus y mal MAZ gleich 0. So, da wir eben gesehen haben,
dass U und W das Gleiche ist, stellt man fest,
diese beiden Gleichungen sind ja auch nur vom Vorzeichen anders.
Wenn ich eine mit minus 1 multipliziere, naja,
eine kann ich streichen, Eine von beiden ist überflüssig.
Und die andere sagt, okay, Y,
danach kann ich auflösen zu Ü mal N, MyZ. U plus N-MyZ.
Jetzt habe ich viel Gleichung. Das kann ich nochmal einsetzen in den Vektor.
Der lässt sich ein bisschen einfacher schreiben als die erste Kompendent
des U, die zweite war V, aber VSU.
Die dritte ist W ist aber auch U. X.
Wo sind wir? X ist U plus Z,
das ist die blaue Gleichung, die zweite.
Die Grüne für Y, U plus N plus Z,
9 Z ist
Haben wir keine weitere Einschränkung. Wir haben das also aufgelöst nach U und Z.
Also nur noch zwei Variablen, die bestimmen, was da ist.
Es kann die noch ein bisschen auseinanderziehen. Ich kann mich sagen,
okay, ich habe die zwei freien Parameter U und Z.
Und wenn ich U abspalte, alles mit U,
dann sieht man, da habe ich den Vactor 1,
1, 1, 1, 1, 0, U mal.
Und beim anderen, wenn ich da das Z rausziehe,
habe ich also 0, 0, 0,
in den ersten drei Komponenten, kommt mit Z überhaupt nichts vor.
Denn einmal Z, N-MyZ, I-MyZ. So müssen alle Lösungen
aufgebaut sein
Und jetzt kann ich UNZ eigentlich fast völlig frei wählen.
Ich muss nur dafür sorgen, dass da insgesamt eine positive Zahl rauskommt.
Und da die beiden Vektoren im Gelb schon mal positiv sind,
also nicht negativ, sondern lieber, kann ich auf jeden Fall
schon mal alle in natürlichen Zahlen für uns Set einsetzen.
Aber negative sind, sind die möglich? Naja,
ich sollte für U, wenn ich da was Negatives einsetze,
dann kriege ich ja, weil da oben eine Eins steht,
da eine negative Zahl.
Und mit Z kann ich das
nicht mehr kompensieren
Weil für die erste Komponente steht da ja Um mal eins
, das ist mit der Negative in U negativ ist.
Und egal wie ich Z wähle, Z mal null,
das hat gar keinen Einfluss, das wird also negativ bleiben.
EU sollte ich schon mal nicht negativ wählen, damit die
Lösung positiv werden kann. Und was ist das Nächste,
wenn ich Z negativ wähle,
dann habe ich das Problem der letzten Komponente,
die wird dann negativ, weil ich das mit Um mal null nicht kompensieren kann.
Also die beiden sollte ich schon mal nicht negativ wählen.
In diesem Spezialfall kann man das sehen,
dass ich so den ganzen Raum aufspannen kann
der Lösung
Und wenn man das nochmal vergleicht, Mensch,
das passt ja genau, das sind genau die beiden Innenvarianten übrigens.
Die erste Innenvariante, die 1-1-1-
1-1 aussieht, sagt ja, die erste,
die erste Komponente steht ja für Lok.
Einmal Lok. Ist die erste Innenvariante. Dann plus einmal
LA plus einmal SA plus einmal L plus einmal S plus 0 mal R.
Das muss ich nicht aufschreiben. Und das ist das ganze Mal,
ja, der Satz von Lautenbach sagt ja,
das ist I mal
Das muss ich also nur ausrechnen. Was war da nochmal
? Das ist jetzt die Innenvariante. Und M0,
ich habe nur Marken auf den Ressourcen und auf Lock.
Auf Lock habe ich einen Marken. Also es ist das
Einmal-M plus 0 mal M. Also insgesamt Ende. So kommt
die erste in Variante zustande. Der Satz von Lautenbach gibt
sie mir also direkt durch den Umweg des linearen Gleichungssystems,
bekomme ich an diese in Variantengleichung E-Ites.
Und E2 kriege ich aus dem zweiten Vector,
denn da steht 0000, das kann ich ignorieren.
Einmal L plus
N mal S plus einmal R, bis auf die Reihenfolge,
genau das, was links vom Gleicherzeichen steht.
Und von denen ist Initial ja nur der Ressourcenplatz.
Er markiert, und zwar mit N-Marken, also N mal
1. Das heißt, auf der rechten Seite steht korrekterweise N.
Das heißt, wenn ich ein solches lineares Gleichungssystem gelöst habe,
dann kann ich damit in Varianten basteln.
Ich könnte auch vielfacher davon nehmen, aber die sind enthalten
eher weniger Informationen. Dann nehme ich doch lieber
die Basis in Varianten
Nun ist das manchmal ein recht aufwendiger Weg, in Varianten so auszurechnen. Wie sieht denn das umgekehrt aus,
wenn ich schon eine Vermutung habe,
also uns das Netz angucken und ich sehe so auf den ersten Blick,
Mensch,
da links ist so eine Schleife und da rechts auch und in der Mitte dieser Ressourcenplatz,
wenn ich mir den genauer angucke, sehe ich ja,
ach Mensch, rechts rüber,
da verschwinden die Marken und links rüber und mit ein bisschen Übung rate ich gleich I2. Ja,
diese Invariante I2,
da kommt mir der Geistesblitz,
ich rate die einfach mal
Wenn ich das so kann, dann kann ich eben auch ausrechnen,
dass i2 mal M, so wie es da steht,
in die 2 mal M0, das kann ich eben nachprüfen.
Ich muss es ja nur jetzt ausrechnen,
dass i2 der entsprechende Vektor, den ich damit meine,
ich meine damit nämlich den Vektor 1 mal N1 an diesen Komponenten,
also i2, da steht es 0001 N1,
dass der eine Innenvariante ist.
Das kann man leicht durcheinsetzen, bestätigen. Da muss ich
nur den Vektor i2 mit jeder der Spalten multiplizieren,
Skala multiplizieren und dann kommt da hoffentlich null raus
Das heißt, wenn ich diese Eingebung hatte,
dann kann ich das schnell überprüfen, indem ich hierfür A,
B, C, D, E,
F einmal die Skalarmultiplikation ausführe und Tesla, ob da immer null rauskommt.
Wenn das so ist, habe ich eine Innenvariante.
Und dann kann ich die Innenvariantengleichung auch hinschreiben, so wie es da steht,
die zweimal M, ist dann ja einmal M von L,
plus N mal M von S, plus einmal M von R.
Und das ist gleich i2 mal M0. Und wie wir es eben schon gesehen hatten,
das kann ich jetzt hinschreiben, wenn ich das ausrechne für M0,
Leserplatz ist am Anfangs nicht, also einmal null,
auf dem Schreiberplatz ist am Anfang zu nicht,
also N mal null und auf den Ressourcen darf ich was,
also einmal N insgesamt, also N.
Und wenn ich da von den gleichen die Teile nehme,
die mich interessieren, dann stelle ich eben fest,
dass M von L plus N mal M von S plus M von R,
also genau der Teil da in der ersten Zeile recht steht,
N ergeben muss.
Das heißt, durch Ausrechnen mit M0
bekomme ich aus dieser In-Varianten auch meine In-Varianten gleich heraus
Also es ist übrigens die stärkere Beziehung,
aus einer In-Variante, aus einer Stellen in Varianten,
die ich aus der Wirkungsmatrix abgelesen habe,
bekomme ich auf diesem Weg immer eine solche in Variantengleichung.
Wenn ich eine Innenvariante I habe, dann folge daraus automatisch
auf diese Art und Weise, die in Variantengleichung.
Was man aber auch sagen muss, ist folgen nicht alle in Variantengleichung,
die ich mir so ausdenken kann, unmittelbar daraus.
Es kann also Gleichungen geben,
die gelten für alle erreichbaren Markierungen,
die müssen aber nicht
struktureller Natur sein
Die gelten vielleicht genau für diese Anfangsmarkierung,
aber nicht für jede. Das Besondere an in Variantengleichung,
die ich ableite aus der Inzidenzmatrix eines Netzes, ist ihre Eigenschaft,
dass sie eigentlich eine konstant bleibende Beziehung für jede beliebige Anfangsmarkierung beschreiben.
Ja, ich weiß, L plus R mal,
N von S ist immer eine Konstante.
Und das ist unabhängig davon,
wie die anfangs Markierung auf dem Ressourcenplatz ist
Ja, in diesem Fall ist es praktischerweise so,
dass genauso viele Marken auf Air liegen,
wie das Kantengewicht an diesen Kanten,
die von Air wegführen auf der rechten Seite ist.
Da liegen drei Marken und an den Kanten steht drei.
Also hier ist Anglic 3. Aber die in Variantengleichung wird auch gelten,
wenn ich da zwei, drei stehen habe,
aber auf dem Ressourcenplatz sind 15 Marken drauf.
Trotzdem gilt dann diese in Variante. Und eine entsprechende in Variante.
Also in Variantengleichung gelten für jede Anfangsmarkierung M0. Das heißt,
man sagt dazu auch strukturelle in Variante, wären in Variantengleichung
erstmal nur gültig sein müssen für jede erreichbare Markierung.
Das kann deswegen noch einfacher sein. Gut,
und was wir damit machen können noch weiter,
gucken wir uns beim nächsten Mal