Productive-owner provenance for open frames #
Selected blocks which cross an atomic pop leave their index in the stable prefix and put a
matching close atom in the continuation. Relative to the current parse, each open frame is
either inherited from outside the active productive window or is the canonical owner of one
of the current parse's productive events. This file records that provenance independently of
the runner.
It also records the purely syntactic invariant that persistent indices in the cursor prefix
are a permutation of all currently open frame owners. The latter is deliberately stated up
to permutation: opening nested frames places the selected index and its close marker in
opposite traversal orders.
One open frame is either inherited from outside the active productive window or owns a canonical event of the current parse.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Productive provenance for every currently open frame owner.
- owner_at (owner : Fin (10 * input.length)) : owner ∈ owners → EventOwnedFrame parse window owner
Instances For
The empty frame stack has canonical provenance.
Equations
- ⋯ = ⋯
Instances For
Add a frame whose provenance is already known.
Equations
- ⋯ = ⋯
Instances For
Transport all frame classifications through an arbitrary change of active parse/window.
Equations
- ⋯ = ⋯
Instances For
Frame provenance is insensitive to the traversal order of the open-frame ledger.
Equations
- ⋯ = ⋯
Instances For
A canonical event owner lies inside its productive window.
The first aligned block owner is either canonical at the first block endpoint or inherited from outside the active window.
Open the first aligned block as a frame after an atomic pop. The selected local endpoint becomes residual depth zero, while every existing canonical frame follows the continuation's event-owner transport.
Equations
- ⋯ = ⋯
Instances For
Outside-window ownership is unchanged by an equal-productive-count window transport.
Transport every framed event through the one-position event shift of a concrete pop.
Equations
- ⋯ = ⋯
Instances For
Every framed event of a push follows its canonical child preimage.
Equations
- ⋯ = ⋯
Instances For
The binary root owner lies strictly before the left child's productive window.
The binary root owner lies strictly before the right child's productive window.
A parent frame restricts to the matching left event, or becomes outside the left window.
Equations
- ⋯ = ⋯
Instances For
A parent frame restricts to the matching right event, or becomes outside the right window.
Equations
- ⋯ = ⋯
Instances For
Prefix indices and open-frame owners are the same finite ledger, up to traversal order.
- owners_perm : (List.filterMap ScheduleAtom.indexOwner? cursor.left).Perm cursor.frameOwners
Instances For
A cursor with no prefix indices and no open frames has an empty ledger.
Equations
- ⋯ = ⋯
Instances For
The ledger equates prefix-index count with open-frame count.
Transport a prefix/frame ledger across arbitrary owner permutations.
Equations
- ⋯ = ⋯
Instances For
Insert one matched prefix index and open frame. The hypotheses are phrased as permutations so runner-specific zipper rearrangements remain outside this generic API.
Equations
- ⋯ = ⋯
Instances For
Remove one matched prefix index and frame.
Equations
- ⋯ = ⋯
Instances For
Complete cursor-level freshness from the three owner ledgers. Prefix indices are open frames, selected right-side indices are governed by the event layout, and every remaining right-side index is explicitly outside the active productive window.