Productive-owner provenance for compressed layouts #
EventCompatible records only that every event depth is a physical block boundary. It does
not say which productive node owns a selected block, and a binary child can inherit a parent
block whose endpoint belongs only to its sibling. EventOwnedLayout adds exactly that local
provenance: every owner is either the canonical owner of its cumulative endpoint in the current
parse, or lies outside the current parse's productive-owner window. The latter alternative is
what makes the ledger stable under binary descent.
Read the owner aligned with a block index.
Equations
- IndexedGrammar.Aho.blockOwnerAt owners hlen i = owners.get ⟨↑i, ⋯⟩
Instances For
An inherited owner belongs to a disjoint productive subtree when it lies outside the current parse's contiguous owner window.
Equations
- IndexedGrammar.Aho.OutsideProductiveWindow window owner = (↑owner < window.base ∨ window.base + parse.productiveCount ≤ ↑owner)
Instances For
The distinguished persistent scratch owner is outside every productive window.
The distinguished collision owner is outside every productive window.
Every reusable generic label lies beyond every primary productive-owner window.
Semantic owner refinement of EventCompatible.
At every nonempty physical block endpoint, either the aligned owner is the canonical current event owner, or it is inherited from a disjoint productive window. Binary children use the second case for cuts contributed only by their sibling.
- compatible : EventCompatible parse blocks
- owner_at (i : Fin blocks.length) : (∃ (hd : blockEndpoint blocks i ∈ parse.eventDepths), blockOwnerAt owners ⋯ i = window.eventOwner (blockEndpoint blocks i) hd) ∨ OutsideProductiveWindow window (blockOwnerAt owners ⋯ i)
Instances For
Remove the first block while transporting endpoint-event ownership through a unary or atomic-pop continuation. The caller supplies precisely the semantic shift of endpoint owners; the concrete list alignment is handled here.
Equations
Instances For
Prepend a new physical block while transporting every old endpoint by the new block's length. The head's provenance is explicit, so this constructor supports both a canonical fresh event owner and an owner inherited from outside the new window.
Equations
Instances For
Unary push windows have the same interval as their parents.
Specialized fresh-block transport for a unary push. The new head may be either a canonical depth-one event block or an inherited owner outside the child window.
Equations
- ledger.pushFresh head_owner = ledger.cons ledger.compatible.pushFresh ⋯ head_owner ⋯ ⋯
Instances For
Specialized fused-head transport for a unary push. No owner is allocated: all old positive endpoints and their owners shift together by one.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Transport a tail ledger through an atomic whole-block pop. This consumes exactly the owner
shift furnished by exists_popContinuation_of_eventFree_block_with_owners.
Equations
- ledger.atomicPopTail compatible endpoint_pos hproductive hevents howners = ledger.tail compatible endpoint_pos ⋯ ⋯
Instances For
A canonical event owner whose depth differs from every represented endpoint is absent from the layout's complete owner list. Outside-window inherited owners cannot collide with it.
Owners outside a parent window are outside its left binary subwindow.
Owners outside a parent window are outside its right binary subwindow.
Restrict an owner ledger to the left binary child. Parent endpoints belonging only to the right child become inherited owners outside the left productive window.
Equations
- ledger.binaryLeft = { compatible := ledger.compatible.binaryLeft, owners_length := ⋯, endpoint_pos := ⋯, owner_at := ⋯ }
Instances For
Restrict an owner ledger to the right binary child. Parent endpoints selected from the left child become inherited owners outside the right productive window.
Equations
- ledger.binaryRight = { compatible := ledger.compatible.binaryRight, owners_length := ⋯, endpoint_pos := ⋯, owner_at := ⋯ }