Admissible-cut enumeration on rose trees #
The combinatorics of admissible cuts, independent of the Hopf-algebra structures built on it in
Core/Algebra/RootedTree/Coproduct/. An admissible cut of a tree removes a set of subtrees, no
two on a common path to the root. It splits the tree into a crown, the multiset of removed
subtrees, and a trunk, what is left at the root. The enumeration is parameterized by an
extraction policy extract : RoseTree α → Option (List (RoseTree α)), called on each cut subtree:
extract t = noneforbids cuts at that subtree;extract t = some []removes it, leaving nothing in the parent's child slot;extract t = some rsremoves it and leaves the replacement treesrsin its slot.
The cut bookkeeping is shared by every policy; only the remainder left at a cut varies. The
policy pruning, which always leaves nothing, gives the cuts of the Connes–Kreimer coproduct.
Main definitions #
ConnesKreimer.cutSummandsG extract: the enumeration of the pairs of a crown and a trunk.ConnesKreimer.ExtractInvariant: the policies that descend alongRoseTree.Perm.ConnesKreimer.pruning,ConnesKreimer.cutSummandsN: the pruning policy and its cuts onUnorderedTree.ConnesKreimer.emptyCuts: the enumeration with only the empty cut.ConnesKreimer.CutChoice,ConnesKreimer.forestCutChoicesG cuts F: a cut chosen for each tree of a forest, with its crown, its trunk and the number of trees it takes whole.ConnesKreimer.CutChoice.HasExtractionCost: each tree the choice cuts measures its crown and its trunk and a fixed amount for each tree extracted.ConnesKreimer.countSingleCutsRho: the number of single cuts with given crown and trunk.
Main results #
ConnesKreimer.cutSummandsG_proj_perm: the projected enumeration isPerm-invariant for an invariant policy.ConnesKreimer.cutSummandsG_filter_empty: the empty cut is the unique cut with empty crown.ConnesKreimer.cutSummandsN_node: the pruning cuts of a node are the cut convolution over its children.ConnesKreimer.CutChoice.HasExtractionCost.sum_map_add_mul_numWhole: a choice of cuts keeps the measure of the forest up to its extraction cost.
[UPSTREAM] candidate.
References #
The enumeration #
The cuts of a tree under the policy extract, as pairs of a crown and a trunk.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The cuts of a list of children, as pairs of a crown and the list of what remains. A surviving
child contributes its trunk and a cut child contributes extract of it.
Equations
- One or more equations did not get rendered due to their size.
- ConnesKreimer.cutListSummandsG extract [] = {(0, [])}
Instances For
The choices at one child t are to cut t itself, with crown {t} and remainder
extract t when the policy allows it, or to cut inside t.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Where the policy forbids a cut, the only choices at a child are the cuts inside it.
Where the policy allows a cut, cutting the child itself is one of the choices.
Vertex conservation #
When every remainder the policy leaves has k vertices in total, a cut conserves vertices up to
k per crown component. Pruning has k = 0 and a policy leaving one leaf has k = 1.
The crown and the trunk of a cut have the vertices of the tree, plus k for each crown
component.
Projection to unordered trees #
A cut of a rose tree projects to UnorderedTree componentwise. On children the remainder list
becomes a multiset, and the combination of the cuts of two children becomes combinerProjG.
Project the crown and the trunk of a cut to unordered trees.
Equations
- ConnesKreimer.projSummand p = (Multiset.map UnorderedTree.mk p.1, UnorderedTree.mk p.2)
Instances For
Project the crown and the remainder list of a cut of a list of children.
Equations
- ConnesKreimer.projForest p = (Multiset.map UnorderedTree.mk p.1, ↑(List.map UnorderedTree.mk p.2))
Instances For
Combine two pairs of a crown and a remainder by adding componentwise.
Equations
- ConnesKreimer.combinerProjG ((F1, m1), F2, m2) = (F1 + F2, m1 + m2)
Instances For
Policies that descend to unordered trees #
A policy is invariant when the projection of what it leaves at a cut depends only on the unordered tree that is cut.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Combining three pairs is symmetric in the first two.
The combination of three multisets of pairs is symmetric in the first two.
For an invariant policy, the projected cuts of a tree depend only on the unordered tree.
Cut convolution #
treeCutsG cuts T lists the cuts of the tree T as a forest, including the cut that takes all
of T, and forestCutsG cuts F combines them over the trees of a forest. The admissible-cut
coproduct is a sum over these (comulForestNG_eq_sum in Coproduct/WithCuts.lean).
All the cuts of a tree with the trunk as a forest. They are the cut taking the whole tree,
with crown {T} and empty trunk, and each cut in cuts T with a one-tree trunk.
Equations
- ConnesKreimer.treeCutsG cuts T = ({T}, 0) ::ₘ Multiset.map (fun (p : Multiset (UnorderedTree α) × UnorderedTree α) => (p.1, {p.2})) (cuts T)
Instances For
The cuts of a forest combine one choice from treeCutsG cuts T for each tree T.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Cuts chosen tree by tree #
A CutChoice records, for each tree of a forest, the crown and trunk of the cut chosen for it
beside the tree, and forestCutChoicesG cuts F lists the choices for F. Gathering the crowns and
the trunks of a choice gives a forest cut of F (forestCutsG_eq_map_forestCutChoicesG), and the
record says where each tree went: into the crown whole, or cut and left as a trunk.
A choice of cuts for the trees of a forest, each tree beside the crown and the trunk of the cut chosen for it.
Equations
- ConnesKreimer.CutChoice α = Multiset (UnorderedTree α × Multiset (UnorderedTree α) × Multiset (UnorderedTree α))
Instances For
The crown of a choice of cuts gathers the crowns chosen for its trees.
Equations
- s.crown = (Multiset.map Prod.snd s).sum.1
Instances For
The trunk of a choice of cuts gathers the trunks its trees leave.
Equations
- s.trunk = (Multiset.map Prod.snd s).sum.2
Instances For
The number of trees a choice of cuts takes whole, leaving no trunk.
Equations
- s.numWhole = Multiset.countP (fun (x : UnorderedTree α × Multiset (UnorderedTree α) × Multiset (UnorderedTree α)) => x.2.2 = 0) s
Instances For
A choice of cuts has extraction cost k in a measure μ when each tree it cuts rather than
takes whole measures its crown and its trunk together, and k more for each tree it
extracts.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The ways of choosing one cut of treeCutsG cuts T for each tree T of a forest.
Equations
- ConnesKreimer.forestCutChoicesG cuts F = (Multiset.map (fun (T : UnorderedTree α) => Multiset.map (Prod.mk T) (ConnesKreimer.treeCutsG cuts T)) F).Sections
Instances For
Gathering the crowns and the trunks of a choice of cuts gives a forest cut, and every forest cut arises this way.
A cut of a tree takes the whole tree into the crown, or cuts it and leaves one trunk.
A tree that leaves no trunk was taken whole into the crown.
A tree taken whole lies in the crown.
A choice has extraction cost k when each cut it makes does.
Every tree of a forest leaves one trunk, except the trees taken whole into the crown.
The crown of a tree that is cut lies in the crown of the choice beside the trees taken whole.
A choice of cuts with extraction cost k in μ keeps the measure of the forest, counting
k for each tree it extracts and each tree it takes whole as extracting itself.
Choices of cuts for two forests combine to a choice for their sum.
Every tree of a forest can be taken whole.
Every tree of a forest can be left uncut, when the empty cut is among its cuts.
Taking every tree of a forest whole puts the forest in the crown.
Leaving every tree of a forest uncut puts the forest in the trunk.
A choice taking every tree whole extracts nothing, so it has every extraction cost.
The empty cut #
The empty cut is the unique cut with empty crown.
The empty cut is the unique cut of a list of children with empty crown.
Keeping the child whole is the unique choice at a child with empty crown.
Pruning cuts #
The policy that leaves nothing at a cut gives the admissible cuts of the Connes–Kreimer
coproduct. It is invariant, so its cuts descend to UnorderedTree, where the cuts of a node are
the cut convolution over its children.
The pruning policy cuts anywhere and leaves nothing in place of the cut subtree.
Equations
- ConnesKreimer.pruning x✝ = some []
Instances For
The pruning cuts of an unordered tree, as pairs of a crown and a trunk.
Equations
- ConnesKreimer.cutSummandsN = Quotient.lift (fun (T : RoseTree α) => Multiset.map ConnesKreimer.projSummand (ConnesKreimer.cutSummandsG ConnesKreimer.pruning T)) ⋯
Instances For
A leaf has only the empty cut.
The number of pruning cut summands of T whose crown is {T₁} and whose trunk is
T₂.
Equations
- ConnesKreimer.countSingleCutsRho T T₁ T₂ = Multiset.countP (fun (p : Multiset (UnorderedTree α) × UnorderedTree α) => p.1 = {T₁} ∧ p.2 = T₂) (ConnesKreimer.cutSummandsN T)
Instances For
The pruning cuts of a node choose, for each child, to cut it whole or to cut inside it.
The enumeration whose only cut is the empty cut. Its coproduct makes every tree primitive.
Equations
- ConnesKreimer.emptyCuts T = {(0, T)}
Instances For
The forest cuts of the empty-cut enumeration split a forest into two subforests.
The empty cut is the unique pruning cut with empty crown.