Expanding a small subdivision core to a larger one along a contraction #
This module supplies the inverse of the usual reduction move. Given a
subdivision specification small over an ordered loopless core, a piece of
passive combinatorial data called an ExpansionData describes a larger
ordered loopless core bigCore together with
- a fibre map
fibsending each big core vertex to the small core vertex its fibre collapses onto, and - a slot classification
kind, saying for each big slot whether it is contracted into a fibre, carries exactly one small slot, or carries two small slots in series through a bivalent marker of the small core.
The double case is what makes the datum usable for loop-aware small cores. A semantic loop of a topological core is displayed in a loopless split core as two slots meeting at a bivalent marker; on the big side it is one slot whose two endpoints lie in a single fibre, and the marker is an interior vertex of that slot.
The output is a topological contraction certificate
bigSpec.graph → small.graph: quotient multiplicities match exactly and every
fibre is connected. Nothing here is specific to genus four.
Small helpers about path vertices #
Slot kinds #
The role of one big slot in the contraction.
- contracted
{p : ℕ}
: SlotKind p
The slot is contracted; both endpoints lie in one fibre.
- single
{p : ℕ}
: Fin p → SlotKind p
The slot maps onto a single small slot.
- double
{p : ℕ}
: Fin p → Fin p → SlotKind p
The slot maps onto two small slots in series through a marker.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Utilities.Subdivision.CoreExpansion.instDecidableEqSlotKind.decEq Utilities.Subdivision.CoreExpansion.SlotKind.contracted Utilities.Subdivision.CoreExpansion.SlotKind.contracted = isTrue ⋯
- Utilities.Subdivision.CoreExpansion.instDecidableEqSlotKind.decEq Utilities.Subdivision.CoreExpansion.SlotKind.contracted (Utilities.Subdivision.CoreExpansion.SlotKind.single a) = isFalse ⋯
- Utilities.Subdivision.CoreExpansion.instDecidableEqSlotKind.decEq (Utilities.Subdivision.CoreExpansion.SlotKind.single a) Utilities.Subdivision.CoreExpansion.SlotKind.contracted = isFalse ⋯
Instances For
Length of a big slot forced by its role.
Equations
- Utilities.Subdivision.CoreExpansion.kindLength small Utilities.Subdivision.CoreExpansion.SlotKind.contracted = 1
- Utilities.Subdivision.CoreExpansion.kindLength small (Utilities.Subdivision.CoreExpansion.SlotKind.single j) = small.length j
- Utilities.Subdivision.CoreExpansion.kindLength small (Utilities.Subdivision.CoreExpansion.SlotKind.double j₁ j₂) = small.length j₁ + small.length j₂
Instances For
The vertex of the small subdivision sitting at path position q of a big
slot with the given role. Positions beyond the slot are clamped, which keeps
the definition total and free of transported bound proofs.
Equations
- One or more equations did not get rendered due to their size.
- Utilities.Subdivision.CoreExpansion.kindVertex small fallback Utilities.Subdivision.CoreExpansion.SlotKind.contracted x✝ = small.coreVertex fallback
- Utilities.Subdivision.CoreExpansion.kindVertex small fallback (Utilities.Subdivision.CoreExpansion.SlotKind.single j) x✝ = small.pathVertex j ⟨min x✝ (small.length j), ⋯⟩
Instances For
The passive datum #
Passive expansion data. bigCore is the expanded ordered core, fib
the fibre map on big core vertices, kind the slot classification, and
owner/side the explicit inverse of kind on small slots.
- bigCore : Certificate.ExplicitPotential.Core N Q
The expanded ordered core.
Which small core vertex a big core vertex collapses onto.
The role of each big slot.
The big slot carrying a given small slot.
Whether a small slot is the second half of a double.
Instances For
Endpoint compatibility of one big slot with its role.
Equations
- One or more equations did not get rendered due to their size.
Instances For
owner/side really invert kind.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every small slot really is claimed by its recorded owner.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The middle vertex of a double is a genuine bivalent marker: it is outside the image of the fibre map, and no other small slot ends there.
Equations
- One or more equations did not get rendered due to their size.
Instances For
All conditions a usable expansion datum has to satisfy. Every clause ranges over finite types, so the whole conjunction is decidable.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
Equations
Equations
Equations
The owner of a small slot determines the big slot it lives in.
The big slot owning a small slot really carries it, and side records
which half.
The expanded specification #
The length assignment on the expanded core forced by the datum.
Equations
- D.bigLength small e = Utilities.Subdivision.CoreExpansion.kindLength small (D.kind e)
Instances For
The expanded subdivision specification.
Equations
- D.bigSpec small hN hLoopless = Utilities.Certificate.SubdivisionGraph.Spec.ofCore D.bigCore hN hLoopless (D.bigLength small) ⋯
Instances For
Path terms #
The two ordered-endpoint indicators of one unit step of a small slot, written through clamped path positions.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two ordered-endpoint indicators of one unit step of a big slot, after applying the contraction.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Total contribution of one small slot.
Equations
- Utilities.Subdivision.CoreExpansion.slotSum small j a b = ∑ i : Fin (small.length j), Utilities.Subdivision.CoreExpansion.smallStepTerm small j a b ↑i
Instances For
Total contribution of the small slots carried by one big slot.
Equations
- One or more equations did not get rendered due to their size.
- Utilities.Subdivision.CoreExpansion.kindSlotSum small a b Utilities.Subdivision.CoreExpansion.SlotKind.contracted = 0
- Utilities.Subdivision.CoreExpansion.kindSlotSum small a b (Utilities.Subdivision.CoreExpansion.SlotKind.single j) = Utilities.Subdivision.CoreExpansion.slotSum small j a b
Instances For
Per-slot evaluation #
Positions of the second half of a double, shifted past the first half.
Sum of the contracted step terms over one big slot, in terms of the small slots it carries.
A two-point indicator sum #
Small-side edge count #
Endpoints of a big slot #
The contraction certificate #
The contraction on subdivision vertices.
Equations
Instances For
The contraction reads off the small path vertex at the same position.
The quotient multiplicity equation #
Regroup the small slots carried by a big slot by their recorded owner.
Quotient multiplicities match exactly.
Shape of the image of an interior position #
Fibres #
Fibres over the image of an interior big vertex are singletons.
The contraction hits every small vertex.
The topological contraction certificate #
The contraction certificate attached to an expansion datum.
Equations
- D.certificate small hN hL = { vertexMap := D.vertexMap small hN hL }