-
-
Notifications
You must be signed in to change notification settings - Fork 0
Proof: borrow-graph soundness (no use-after-move + no conflict + BorrowOutlivesOwner) #515
Copy link
Copy link
Open
Labels
majorMajor issue — significant scope, broader impact than a feature/bugMajor issue — significant scope, broader impact than a feature/bugpriority:p3Low - nice to haveLow - nice to havescope:repoConfined to this repositoryConfined to this repositorystatus:readyFully specified and ready to be picked upFully specified and ready to be picked uptech-debtKnown shortcut, drift, or hygiene owed - includes cleanupKnown shortcut, drift, or hygiene owed - includes cleanup
Description
Activity
Metadata
Metadata
Assignees
Labels
majorMajor issue — significant scope, broader impact than a feature/bugMajor issue — significant scope, broader impact than a feature/bugpriority:p3Low - nice to haveLow - nice to havescope:repoConfined to this repositoryConfined to this repositorystatus:readyFully specified and ready to be picked upFully specified and ready to be picked uptech-debtKnown shortcut, drift, or hygiene owed - includes cleanupKnown shortcut, drift, or hygiene owed - includes cleanup
Parent: #513
Statement
For the borrow checker in
lib/borrow.ml, prove three soundness lemmas:Concretely
The borrow checker emits a borrow graph + a move set per program point. Stating soundness against the operational semantics from
lib/interp.ml:Mechanisation
Lean 4. Target:
formal/Borrow/{BorrowGraph.lean, NoUseAfterMove.lean, NoConflict.lean, BorrowScope.lean}. Borrow graph is a finite relation between program points and borrowed locations —Mathlib.Data.Finset.Basichandles the carrier comfortably.Recent landings to lean on:
Size
XL. Estimate: 4–6 weeks. Can be sliced lemma-by-lemma; each of (1)/(2)/(3) is its own milestone.
Polonius origin variables (deferred)
ADR-022 / #407 is the long-tail follow-on. Out of scope here; keep the soundness proof for the current lexical borrow checker first.
Status
NOT STARTED.
🤖 Generated with Claude Code