Wenn wir eine gemeinsame Ressource nutzen wollen machen wir das oft mit einem System von höflichkeit
Sowas kann man allerdings nur sehr schlecht formalisieren
Das ist problematisch, weil dann können wir uns praktisch garnicht sicher sein, ob das was wir machen / das was wir betrachten, tatsächlich das tut was es tun soll
Wenn wir uns das mal fundamental anschauen, sehen wir, dass eine Ressource automatisch abhängig ist, wenn wir sie teilen
Genauer gesagt ist ein System Abhängig, indem sich mehrere Prozesse untereinander beeinflussen können
Das können sachen sein die ein gemeinsames Ziel verfolgen oder auch dinge sein die was komplett unterschiedliches machen
klassisch können wir das in einem System beobachten indem es Mutual exclusion gibt
Beim model-Checking verwenden wir (wie so häufig) einen Algorithmus um zuzuschauen, dass alles so passiert wie wirs haben wollen
Wir modellieren unser Programm in einem Transitionssystem, damit wir den fluss von Daten / Informationen schön und sinnvoll darstellen können
Spezifizieren der einzelnen Eigenschaften durch formeln
Wir schreiben also eine Formel, für jede auftretende eingenschaft, damit wir uns absolut sicher sein können, dass wir tatsächlich das ausdrücken was wir auch sagen wollen
Dann testen wir, ob das Transitionssystem auch unseren Formeln "Standhält"
Wenn das nicht der fall sein sollte, konstruieren wir ein Gegenbeispiel
betrachten können wir das ganze durch typische Logiken
LTL Linear temporal logic
CTL Computational tree logic
Das modelchecking und seine respektiven logiken verwenden wir in Programmen, Protokollen und vielem mehr