Ich versuche, einige Aussagen über die Ausführung in Java-Programmen unter einigen starken Einschränkungen zu beweisen (im Grunde genommen habe ich die Vermutung, dass zwei Methoden, die eine Reihe von Einschränkungen für eine bestimmte Eingabe erfüllen, äquivalent sind - dh den Wert und den Status danach zurückgeben Ausführung sind identisch). Um dies zu beweisen, suche ich nach einer Art Formalismus, der mich darüber sprechen lässt.
Ich bin mit der operativen Semantik funktionaler Sprachen vertraut und könnte möglicherweise für Schleifen / while-Schleifen in rekursive Funktionen übersetzen ... Ich würde dies lieber nicht tun, und es wäre schön, einige Maschinen zu haben, damit ich im imperativen Land bleiben kann .
Insbesondere möchte ich über den Zustand einer Methode im k- ten Ausführungsschritt nachdenken. Dies beinhaltet den globalen Zustand:
- Aufrufe wie
this.field = 2
aktualisieren unseren Klassenstatus - Aufrufe zur Änderung des Aktualisierungsstatus von Parametern außerhalb unserer Methode:
myParam.setFoo(...)
myParam.x = y
- Aufruf statischer Methoden
Blah.static_side_effects()
Ich gehe davon aus, dass dies alles deterministisch ist . Das heißt, ich möchte die Annahme formalisieren, dass, wenn eine dieser globalen Statusaktualisierungen in zwei Methoden erfolgt, deren globaler und lokaler Ausführungsstatus identisch sind, der neue Status ebenfalls identisch ist - dass jeder Berechnungsschritt bestimmt wird genau nach globalem Staat und lokalem Staat. Dies schließt offensichtlich RNGs und Parallelität aus (aber ich kann später darauf eingehen ...).
Irgendwelche Ideen oder Quellen, wie ich das angehen könnte? Mein einziger Gedanke ist, Methoden als Liste von Anweisungen zu behandeln und zu versuchen, eine Anweisungssemantik formal zu beschreiben.
Wenn möglich, würde ich dies gerne auf Java-Sprachebene und nicht auf JVM-Ebene tun. Dies ist möglicherweise nicht machbar, aber mein Ziel ist es, vorerst einige vernünftige Annahmen über meine operative Semantik zu treffen und diese dann von dort zu übernehmen.
Oh, eine letzte Anmerkung - alle Vorschläge, wie ich diese Frage verbessern kann, wären sehr dankbar. Ich versuche, die richtige Sprache zu finden, um die Frage zu stellen, und wenn ich Terminologie missbrauche (wie den lokalen / globalen Ausführungsstatus ...), würde ich dies gerne korrigieren.