Skip to content

Remove predicative invariants #385

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Remove predicative invariants #385

wants to merge 4 commits into from

Conversation

gebner
Copy link
Contributor

@gebner gebner commented Mar 20, 2025

This PR contains a number of cleanings that bring the PulseCore formalization closer to our written account.

  • Predicative invariants are removed, including the meta flag on cells.
  • The high water mark sinks to Heap.heap (as described in Section 3.1)
  • The free_above predicates are removed (made possible by sinking the high water mark)
  • Actions no longer have allocation flags and pure pre/postconditions (also made possible by the sinking)
  • BaseHeapSig.mem no longer needs to add counters and is defined directly as Heap2.heap
  • The heap extension mechanism is removed, instead we use Heap2.heap u#3 as the timeless heap and store small values using Pulse.Lib.PCM.Raise
  • Heap signatures are removed too (they didn't fit the impredicative heap anyhow)

In total, the PulseCore LOC count shrinks by 35%. The CI runtime decreases by roughly 10%.

Removing predicative invariants does not significantly reduce the expressivity of PulseCore: impredicative invariants storing timeless predicates offer the same API as the predicative invariants on the lowest level. I expect most nested invariants can be encoded with flags (like cancellable invariants).

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