Skip to content

Attach invariant! to the loop that contains it - #353

Open
coord-e wants to merge 1 commit into
mainfrom
claude/gifted-bohr-l4smuf
Open

coord-e wants to merge 1 commit into
mainfrom
claude/gifted-bohr-l4smuf

Conversation

@coord-e

@coord-e coord-e commented Oct 23, 2026

Copy link
Copy Markdown
Owner

Fixes #352.

loop_header_of walked up the dominator tree from the marker block and took the first block with a back edge. A header that dominates the marker does not have to contain it, which caused two problems:

  • An invariant written in an outer loop body after an inner loop was installed at the inner loop's header. Correct programs were then rejected as Unsat.
  • An invariant written after a loop, outside every loop, was silently attached to that loop. It should hit the existing "no enclosing loop header" panic.

The fix keeps the dominator walk but accepts a header only when the marker lies in the natural loop of one of its back edges p -> header. That means the marker reaches p without passing through the header, which natural_loop_contains checks with a backward search from p.

Added tests/ui/{pass,fail}/loop_invariant_after_inner_loop.rs. The pass file was Unsat before this change. The fail file breaks the invariant (3 * i → 2 * i).

cargo fmt --check, cargo clippy -- -D warnings and cargo test (with PCSat) all pass.


Generated by Claude Code

`loop_header_of` took the first dominator of the marker block that has a
back edge, but a dominating loop header need not contain the marker. An
invariant written in an outer loop body after an inner loop was installed
at the inner loop's header, and one written after a loop outside every
loop was silently attached to that loop. Require the marker to lie in the
natural loop of one of the header's back edges.

Fixes #352

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JTZrVqVEqBgdyunsY7yQ5P
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-23T21:34:09.635588Z 1fd83d6 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants