Symmetry #
Local child-swap symmetries #
A swap at a depth-d node exchanges its two child subtrees. The
permutation is propagated to deeper levels by preserving every subsequent
left/right choice. This file also lifts the permutations to inventory
states and records the equivariance of the hierarchical policy.
Lift a permutation of one tree level to the next level, preserving the left/right choice below every permuted node.
Equations
- FD1D.TreeSymmetry.liftNodePerm e = (FD1D.childrenEquiv k).symm.trans ((Equiv.prodCongr e (Equiv.refl (Fin 2))).trans (FD1D.childrenEquiv k))
Instances For
The permutation at level d+1+r induced by swapping the children of
v.
Equations
Instances For
The ancestor r levels above a node.
Equations
Instances For
A node outside the two exchanged descendant blocks is fixed pointwise.
Relabeling finite inventories #
Push a fixed-total count vector forward along a permutation.
Equations
Instances For
Transport an explicitly iterated subtree swap to a named leaf depth.
Equations
- FD1D.TreeSymmetry.leafSwapWithGap v r hlevel = (Equiv.cast ⋯).symm.trans (Equiv.trans (FD1D.TreeSymmetry.subtreeSwap v r) (Equiv.cast ⋯))
Instances For
The involution of depth-L leaves induced by a child swap at v.
Equations
- FD1D.TreeSymmetry.leafSwap hdL v = FD1D.TreeSymmetry.leafSwapWithGap v (L - (d + 1)) ⋯
Instances For
The child swap lifted to fixed-total leaf inventories.
Equations
Instances For
The lifted inventory swap with an explicit depth gap.
Equations
- FD1D.TreeSymmetry.inventorySwapWithGap v r hlevel = FD1D.TreeSymmetry.inventoryPerm (FD1D.TreeSymmetry.leafSwapWithGap v r hlevel)
Instances For
Canonical aggregate counts under a swap #
Regard a fixed-total state as a leaf inventory.
Instances For
The canonical aggregate counts of a fixed-total state.
Instances For
The inventory consisting of one item at w.
Equations
- FD1D.TreeSymmetry.singletonInventoryState w = ⟨fun (z : FD1D.DyadicNode L) => if z = w then 1 else 0, ⋯⟩
Instances For
Below the swapped children, canonical aggregate counts are carried to the
corresponding node by subtreeSwap.
Counts at the level of the swapped node itself are unchanged.
Every count at or above the swapped node's depth is unchanged.
Action on descendant blocks #
Equivariance of the hierarchical policy #
Hazards at every level weakly above the swapped node are unchanged.
At the first level below v, hazards follow the child swap.
Hazards at every descendant node are transported by the tree swap.
Deletion masses at and above the swapped node are unchanged.
Deletion masses at descendant nodes are transported by the swap.
The Haar-type deletion coefficient at the swapped node changes sign.
A strict ancestor's deletion coefficient is unchanged.
Arbitrary-depth wrappers #
Generic move and kernel equivariance #
The concrete hierarchical deletion kernel #
Invariant stationary laws for a single permutation #
Push a finite law forward along a permutation, in pointwise form.
Equations
- FD1D.TreeSymmetry.permuteLaw e μ = { mass := fun (x : α) => μ.mass ((Equiv.symm e) x), mass_nonneg := ⋯, sum_mass := ⋯ }