Skip to content

feat: detect competing-transition overlaps via symbolic disjointness#90

Merged
joshua-temple merged 1 commit into
mainfrom
feat/verify-symbolic-overlaps
May 31, 2026
Merged

feat: detect competing-transition overlaps via symbolic disjointness#90
joshua-temple merged 1 commit into
mainfrom
feat/verify-symbolic-overlaps

Conversation

@joshua-temple
Copy link
Copy Markdown
Collaborator

Builds nondeterminism detection on the symbolic disjointness primitive. Overlaps scans a machine — descending into compound children and parallel regions — for competing transitions (same source state, same event) whose guards are not provably disjoint, returning each such pair. It is conservative: a pair is reported unless the analyzer can prove the guards mutually exclusive, so transitions guarded only by opaque (named Go-func or Rich) guards, or unguarded, are flagged as potential overlaps — a false positive is the safe direction for catching nondeterminism. An empty result means every same-source/same-event pair is provably disjoint over the analyzable Core guards. It reads the machine's IR (no registry/Provide needed) and a transition's effective guard is the conjunction of its named-ref guards and its composite GuardExpr. Tests cover disjoint guards (clean), overlapping numeric guards (reported), and opaque guards (conservatively reported). Additive; stdlib-only.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple joshua-temple merged commit 43dd366 into main May 31, 2026
10 checks passed
@joshua-temple joshua-temple deleted the feat/verify-symbolic-overlaps branch May 31, 2026 20:22
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.

1 participant