Resource-pool surgery for Aho's compressed scheduler #
Fresh compressed blocks move one owner from the free suffix into the cursor's persistent-index owners. Erasing a private overlay block performs the inverse operation. These lemmas express both updates as permutations, keeping the duplicate-freedom proof independent of cursor syntax.
Build the shadow ledger canonically when the physical owner pool is wholly outside every semantic shadow window.
Equations
Instances For
Resources carried by one mutually recursive runner call. charged counts productive
events of the active task already represented by persistent blocks. The remaining events fit
in the free-owner pool. task_locality reserves the interior of the active yield interval for
the child tasks introduced by its binary nodes.
- pool : IndexOwnerPool cursor
- tickets : IndexTicketLedger cursor
An injective logical ticket assignment for the generic physical owners.
- window : ProductiveOwnerWindow parse
- parkingAtOrBelow : self.tickets.ParkingAtOrBelow self.window
Parking tickets in ordinary resources never lie above the current root-relative productive-window base. Protected mode strengthens this to a strict bound, while an active copy-on-write overlay may occupy the base slot itself.
- ownerLedger : ScheduleOwnerLedger parse self.window cursor
- ticketOwnerLedger : IndexTicketLedger.SemanticScheduleOwnerLedger parse self.window self.tickets
Productive-event provenance, interpreted on the logical-ticket projection of
cursor. - ticket_active_eq : self.ticketOwnerLedger.active = self.tickets.semanticOwners self.ownerLedger.active
The projected active list is aligned with the physical active-owner list.
The full aligned shadow context. It may extend the primary active prefix with parked lower blocks which remain on the tape while a structural child runs only that prefix.
- ticketShadowOwners_nodup : self.ticketShadowOwners.Nodup
- ticketShadowLedger : IndexTicketLedger.SemanticShadowOwnerLedger parse self.window self.tickets
Shadow-start provenance on the same logical-ticket projection.
- ticket_shadow_active_eq : self.ticketShadowLedger.active = self.tickets.semanticOwners self.ticketShadowOwners
- ticketShadowLayout : IndexTicketLedger.ShadowTicketLayout parse self.window self.tickets self.ticketShadowBlocks self.ticketShadowOwners
- shadowLedger : ShadowOwnerLedger parse self.window cursor
- charged : ℕ
Instances For
The selected primary block context is a prefix of the full projected shadow context. The suffix is parked on the tape and remains visible to shadow-ticket freshness.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An explicit strict index bound below the exhaustive 6|input| owner pool supplies a free
physical owner.
Every active owner is physically present among the cursor's persistent indices.
Pooled owners all lie beyond the semantic shadow window, so any block partition whose owners are active admits an all-outside shadow layout.
Equations
- ⋯ = ⋯
Instances For
Resource-aware plain runner mode. Both endpoints are genuine invariant-carrying scheduler states, so every intermediate node of the result is automatically within the linear bound.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Resource-aware protected-block runner mode.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two ordinary strict-entry runners used by the window-parking recursion.
Equations
Instances For
The head of a free-owner pool cannot already own a persistent index.
Allocate the head free owner after a cursor change which inserts exactly that owner.
Instances For
Allocate an explicitly selected free owner. Unlike allocate, the owner need not be the
head of the current free list; the remaining pool is supplied up to permutation.
Equations
- pool.allocatePerm owner rest hfree hindices = { free := rest, all_nodup := ⋯, all_perm := ⋯ }
Instances For
Allocate an arbitrary known member of the exhaustive free pool.
Equations
- pool.allocateMember owner hfree hindices = pool.allocatePerm owner (pool.free.erase owner) ⋯ hindices
Instances For
Return an erased owner to the free pool after the cursor removes exactly that index.
Equations
Instances For
Release a private overlay owner before running a same-yield residual parse. One charged owner becomes one free owner, so the productive-event credit is preserved exactly.
Equations
- One or more equations did not get rendered due to their size.