Hier ist eine "Track B" -Frage, falls es jemals eine gab. Zusammenfassung: Das erste, woran ich denke, wenn ich versuche, nicht deterministischen Programmen eine Semantik zu geben, führt zu einer Semantik, in der ich keine Dinge über Schleifen beweisen kann, die nur nicht deterministisch enden. Sicherlich hat jemand herausgefunden, was in dieser Situation zu tun ist, oder zumindest darauf hingewiesen, dass es schwierig ist, aber ich weiß nicht, wie ich danach suchen soll (daher das Tag "Referenzanfrage").
Hintergrund
Ich möchte eine while-Sprache mit Nichtdeterminismus modellieren. Ich denke, dies ist der offensichtliche (oder zumindest naive) Weg, eine solche Sprache mit einer Smyth-Powerdomain zu modellieren, aber korrigiere mich, wenn ich falsch liege. Wir werden die Bedeutung eines Befehls in dieser Sprache als eine Funktion modellieren, deren Domäne die Menge von Zuständen ist und deren Codomäne die Menge , wobei das kleinste Element ist nicht-Beendigung darstellt und ist die Powerset von Zuständen.
Wir interpretieren Befehle als Abbildungen von Zuständen entweder auf das oder auf Mengen von Zuständen die mögliche Ergebnisse darstellen. ist eine nicht deterministische Wahl.
- if , andernfalls
- wenn oder , andernfalls
- wenn oder für einige , andernfalls
Es gibt eine gerichtete vollständige , wobei für jedes und wenn sowohl als auch richtige Mengen und , und wir können dies auf Funktionen von bis punktweise erweitern: wenn für jedes und ist die Funktion, die jeden Status .
Die Bedeutung einer Schleife ist ist die kleinste Obergrenze der Kette , wobei wenn , andernfalls wenn oder für einige , andernfalls . (Diese Definition geht davon aus, dass das gerade definierte Scott stetig ist, aber ich denke, es ist sicher, das beiseite zu lassen.)
Frage
Betrachten Sie dieses Programm:
Intuitiv ist dies eine Schleife, die eine beliebige positive gerade Zahl zurückgeben oder nicht terminieren kann und die dem entspricht, was wir über diese Schleife unter Verwendung der schwächsten liberalen Voraussetzung beweisen können (es ist möglich zu zeigen, dass eine Schleife ist invariant). Da die Schleife jedoch nicht beendet werden kann (wir können die nicht deterministische Auswahl durch das Programm verfeinern, das immer den rechten Zweig verwendet), lautet die Bedeutung dieses Programms bei jedem Anfangszustand . (Weniger informell: Die Funktion, die jeden Zustand abbildet, in dem für sich selbst falsch ist, und jeden Zustand, in dem für wahr ist, ist ein fester Punkt des der zum Definieren der Schleife verwendet wird.)
Dies bedeutet, dass die von mir vorgeschlagene naive Semantik nicht der Art entspricht, wie ich es mir vorstellen kann, über Programme zu argumentieren. Ich beschuldige meine Semantik, weiß aber nicht, wie ich sie reparieren soll.