Add Owicki-Gries annotations - #783
Conversation
Also fix base name for ghost mirror variables.
# Conflicts: # trunk/source/Library-ModelCheckerUtils/src/de/uni_freiburg/informatik/ultimate/lib/modelcheckerutils/smt/predicates/PredicateUtils.java # trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/HoareAnnotationComposer.java # trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/TraceAbstractionStarter.java
Previously, each declaration overwrote the previous one.
- initialize to zero (constant expression) - avoid weird symbols in the name
This reverts commit cce4f3f.
This reverts commit c231221.
…dk/empire2-owicki
This aligns the implementation terminology with the POPL'26 paper. Furthermore, the class previously called EmpireAutomaton is named SaturatedEmpire to indicate the implemented algorithm.
matthiaszumkeller
left a comment
There was a problem hiding this comment.
Thank you for preparing this merge. I added some additional comments.
|
In another project building of this work (branch
fork-join01.backup.bpl.txt |
Is it really necessary to have an invariant stronger than
Maybe the validator (or your modelling) has a different understanding of the join that allows more behavior?
Still, we should investigate this nondeterministic behavior! |
We do check validity of the OG-proof internally and at least to me, the resulting proof seems valid wrt. the Petri net representation of the program. It is true, that no information about variable
I also think, that the non-deterministic behavior should be investigated. Update: |
Oh, I see. So I guess we do not output the invariant for This also seems to be the reason for non-determinism, it depends whether we put the invariant at |
Nice catch! I think that I found the location where the non-determinism occurs. In the legal focus, method |
I guess we could check for the auxiliary places in the legal focus as a heuristics (even if it is not quite nice). But I am still wondering whether the loss of precision when omitting the invariants for auxiliary places a) only occurs in combination with the legal focus and b) could be always fixed with such a simple heuristics (which I am quite skeptical). |
|
Thanks to both of you for investigating this! This explains why we could get a seemingly invalid annotation after backtranslation but not trigger an error before. Let's maybe continue the discussion how to fix this in another channel to not overload this PR. |
…out auxilliary places
…dicate in the region so that the comparator prefers regions with only ISLPredicates
# Conflicts: # trunk/source/Library-BoogieAST/src/de/uni_freiburg/informatik/ultimate/boogie/BoogieUtils.java # trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/concurrency/CegarLoopForPetriNet.java
There is no meaningful notion of final states in empires (they do not define a language). These methods were instead used only by the legal focus to find states from which some transitions would lead to false. Instead, this is now directly implemented in LegalFocus.
# Conflicts: # trunk/source/TraceAbstraction/src/de/uni_freiburg/informatik/ultimate/plugins/generator/traceabstraction/TraceAbstractionStarter.java
This PR adds Owicki-Gries annotations as proofs for concurrent programs, as well as algorithms to compute such annotations after verification.
🚧 This is work in progress 🚧
Specifically, we add:
basic classes for describing and validating Owicki-Gries annotations.
2 algorithms for the construction of Owicki-Gries annotations:
We previously implemented some other algorithm variants, but as they have been superseeded by the POPL'26 algorithm, they are no longer part of this PR. With one exception:
a partial implementation of a refined algorithm based on directed empires: while not yet complete, this may be a promising base for future improvements to our Owicki-Gries computation.
changes in backtranslation and correctness witness (v2.1) generation that allow us to output correctness witnesses for concurrent programs from Owicki-Gries proofs.