Chain refinement combinatorics #
List-level machinery for the additive sewing lemma over a linear order:
deduplication of monotone chains (dedupChain), and the decomposition of a
strict chain as a glued refinement of a coarser strict chain through the
same points (refineAlong), giving common refinements of two chains.
Deduplication of monotone chains #
Remove adjacent duplicates from a list (of a ≤-chain, producing a
<-chain).
Equations
- RoughPaths.Sewing.dedupChain [] = []
- RoughPaths.Sewing.dedupChain [x_1] = [x_1]
- RoughPaths.Sewing.dedupChain (x_1 :: y :: rest) = if x_1 = y then RoughPaths.Sewing.dedupChain (y :: rest) else x_1 :: RoughPaths.Sewing.dedupChain (y :: rest)
Instances For
Deduplicating a ≤-chain yields a <-chain.
Deduplication preserves the fine-chain property.
Deduplication preserves pair sums when the summand vanishes on the diagonal.
Strict chains and their extremes #
On a strict chain, the head is strictly below every later element.
On a strict chain, the head is at most the last element.
On a strict chain, every element other than the last is below the last.
Refinement decomposition along a finer chain #
Decompose a refinement r along a base chain: for consecutive base
points x, y the inserted points are the elements of r strictly between
them.
Equations
- RoughPaths.Sewing.refineAlong r (x_1 :: y :: rest) = (x_1, List.filter (fun (z : T) => decide (x_1 < z) && decide (z < y)) r) :: RoughPaths.Sewing.refineAlong r (y :: rest)
- RoughPaths.Sewing.refineAlong r x✝ = []
Instances For
refineAlong recovers the base partition.
refineAlong recovers the refinement: if r = x :: rtail is a
strict chain ending at t containing all the base points, gluing the
decomposition along the base returns r.