Skip to content

Saturation + CEGAR - #523

Draft
mondokm wants to merge 39 commits into
masterfrom
cegarsaturation
Draft

Saturation + CEGAR#523
mondokm wants to merge 39 commits into
masterfrom
cegarsaturation

Conversation

@mondokm

@mondokm mondokm commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

This PR adds MddCegarChecker, a checker that uses saturation as the substep of the CEGAR loop in every iteration, reusing intermediate results in two ways:

  • concrete "transition witnesses" discovered in the previous iteration get mapped to the newly introduced predicates, no further solver call is required for them
  • the edges of the transition 2k MDD visited during the previous iteration are used as "upper bound" for the transition relation in the next iteration

@github-actions

Copy link
Copy Markdown
Contributor

❗ Please run ./gradlew applyCopyright on your branch to fix copyright headers, or add a comment with /format to let the bot do it for you.

@github-actions

Copy link
Copy Markdown
Contributor

❗ Please run ./gradlew spotlessApply on your branch to fix formatting, or add a comment with /format to let the bot do it for you.

@github-actions

Copy link
Copy Markdown
Contributor

❗ Please modify build.gradle.kts to contain a later version than 7.3.0. Current version is 7.3.0.
You can add a new comment with /version-bump <patch|minor|major> to let the bot do it for you.

@github-actions

Copy link
Copy Markdown
Contributor

Release Preview

Version: 7.3.0
Tag: v7.3.0

Release Notes:
Saturation + CEGAR

This PR adds MddCegarChecker, a checker that uses saturation as the substep of the CEGAR loop in every iteration, reusing intermediate results in two ways:

  • concrete "transition witnesses" discovered in the previous iteration get mapped to the newly introduced predicates, no further solver call is required for them
  • the edges of the transition 2k MDD visited during the previous iteration are used as "upper bound" for the transition relation in the next iteration

Modified subprojects (since v7.3.0):
common/analysis
frontends/petrinet-analysis
frontends/petrinet-xsts
xcfa/xcfa-cli
xsts/xsts-analysis
xsts/xsts-cli

Files to be uploaded:

@github-actions

Copy link
Copy Markdown
Contributor

Benchexec test report for a selection of benchmarks (correct / incorrect / all):

Rundefinition Correct Incorrect All Status
CHC-COMP_Portfolio 147 0 195
Hardware_CEGAR 47 0 54
PLC_CEGAR 9 0 9
PetriNet_MDD 60 0 122
PetriNet_PN_MDD 72 0 122
SV-COMP_Portfolio_Emergent 154 0 168
SV-COMP_Portfolio_Horn 114 0 168
SV-COMP_Portfolio_Stable 166 0 168
Statechart_CEGAR 110 0 126

📦 Download the results - extract the zip and open the *.html files.

@leventeBajczi leventeBajczi left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the new backend, looks promising!
I'm happy to approve, I just left two minor comments for the xcfa part of the PR.
Feel free to resolve it without modification if you think they're not worth changing.

CHC,
OC,
LAZY,
PORTFOLIO,
TRACEGEN,
MDD,
MDD_CEGAR,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a separate enough backend that it warrants a new entry here? Usuaually, implicit predicate abstraction is a flag under the corresponding backend.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, it is very different from the simple algorithm-agnostic implicit wrapper. For now, I need both as separate CLI bindings to be able to benchmark them against each other, but later I will consider placing this under the flag you mentioned (although it would be somewhat confusing that way, because elsewhere the flag implies the simple wrapper).

@@ -623,6 +602,59 @@ data class MddConfig(
var initPrec: InitPrec = InitPrec.EMPTY,
) : SpecBackendConfig

data class MddCegarConfig(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if this becomes a sub-setting of MDD rather than its own block, then MDD can still wrap it directly, we don't need to merge the two configs if we don't want to.

@leventeBajczi

Copy link
Copy Markdown
Contributor

Also, don't forget that the PR description will become the release note as well, so maybe it's worth removing the "This PR" part.

@mondokm

mondokm commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

Also, don't forget that the PR description will become the release note as well, so maybe it's worth removing the "This PR" part.

I intended to publish this PR as a draft for now, but I will update the description for the merge-ready version

@mondokm
mondokm marked this pull request as draft July 15, 2026 13:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants