Boundary-relative transition systems #
For an open fragment W : Fragment α and an Eulerian edge
subset that may contain boundary-attached flags, the standard
TransitionSystem is too strong: it requires every participating
flag to be internally attached (attach_internal). This file
defines a weaker notion.
Design #
A RelTransitionSystem W F for an edge subset F : EdgeSubset W
matches the internal participating flags pairwise at common
vertices, leaving boundary-attached flags unmatched (they are path
endpoints).
The walk permutation κ ∘ σ is well-defined only on internal flags.
Internal circuits are the orbits of this internal walk permutation.
Paths connect boundary flags in pairs: starting from a boundary flag
b, follow the edge pairing σ to the partner σ b (internal),
then apply matching κ, then σ again, alternating until reaching
another boundary flag. The resulting pairing is pathMatch.
Representation choice for the gluing theorem #
The path matching is an involution on boundary s-flags. For the eventual gluing decomposition:
circuitCount(glued) = internalCircuitCount(F) + internalCircuitCount(G) + cycleCount(pathMatch_G ∘ pathMatch_F)
the composition of two path matchings produces closed cycles that
become "cross-boundary" circuits. Representing pathMatch as an
involution on boundary flags makes this composition natural.
For a closed fragment (no boundary flags), RelTransitionSystem
degenerates to TransitionSystem and internalCircuitCount equals
circuitCount.
Internal vs boundary flag classification #
The internal flags of an edge subset: participating flags attached to a vertex.
Instances For
The boundary flags of an edge subset: participating flags attached to a boundary label.
Instances For
Every participating flag is either internal or boundary.
Internal and boundary flags are disjoint.
An internal flag is in the edge subset.
A boundary flag is in the edge subset.
An internal flag is attached to some vertex.
A boundary flag is attached to some label.
A participating boundary flag lies in the boundary flags: it attaches to a label, so it cannot be internal.
All participating flags are internal (no boundary flags).
Equations
- F.allInternal = (F.boundaryFlags = ∅)
Instances For
When all flags are internal, a participating flag is internal.
Boundary-relative transition system #
A boundary-relative transition system on an edge subset: a
fixed-point-free involution of its internal flags matching flags at
a common vertex. Boundary flags are path endpoints and are not
matched. This mirrors TransitionSystem but restricts the domain
from all participating flags to internal flags only.
The matching, defined on all flags but only meaningful on internal participating flags.
The matching is an involution on the internal flags.
- match_ne (f : W.Flag) : f ∈ F.internalFlags → self.match_ f ≠ f
The matching has no fixed points on internal flags.
- match_mem (f : W.Flag) : f ∈ F.internalFlags → self.match_ f ∈ F.internalFlags
The matching maps internal flags to internal flags.
- match_vertex (f : W.Flag) : f ∈ F.internalFlags → ∀ (v : W.Vertex), W.attach f = Sum.inl v → W.attach (self.match_ f) = Sum.inl v
Matched flags share an internal vertex.
Instances For
Compatibility: conversions #
Every TransitionSystem is a RelTransitionSystem.
Equations
- κ.toRelTransitionSystem = { match_ := κ.match_, match_invol := ⋯, match_ne := ⋯, match_mem := ⋯, match_vertex := ⋯ }
Instances For
Walk and circuit count on internal flags #
The walk map on flags via a relative transition: follow pairing then matching.
Equations
- κ.internalWalk f = κ.match_ (W.pairing f)
Instances For
If a flag's pairing is internal, its walk successor is internal.
The walk map is injective on flags whose pairings are internal.
When all flags are internal, the pairing of an internal flag is internal.
When all flags are internal, the walk preserves internal flags.
When all flags are internal, the walk is injective.
The walk permutation on internal flags, when all flags are internal.
Equations
- κ.walkPermInternal hall = Equiv.ofBijective (fun (f : ↥F.internalFlags) => ⟨κ.internalWalk ↑f, ⋯⟩) ⋯
Instances For
The internal circuit count when all flags are internal.
Equations
- κ.internalCircuitCount hall = ((κ.walkPermInternal hall).cycleType.card + Fintype.card ↑(Function.fixedPoints ⇑(κ.walkPermInternal hall))) / 2
Instances For
Compatibility: circuit-count agreement for closed subsets #
When a TransitionSystem exists (all flags internal), the internal
flags equal the full flag set.
A standard TransitionSystem implies all flags are internal.
The equivalence between full-flag and internal-flag subtypes when all flags are internal.
Equations
- RS.EdgeSubset.flagsEquivInternal κ = { toFun := fun (f : ↥F.flags) => ⟨↑f, ⋯⟩, invFun := fun (f : ↥F.internalFlags) => ⟨↑f, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }
Instances For
The walk permutations agree under the canonical equivalence.
Compatibility: for a closed-fragment transition system,
internalCircuitCount equals circuitCount.
Orientation for relative transition systems #
An orientation compatible with a boundary-relative transition system: an in/out designation of the internal flags, flipped by the matching and by the edge pairing (when both ends are internal).
Whether a flag is outgoing.
The matching flips orientation on internal flags.
- pairing_flip (f : W.Flag) : f ∈ F.internalFlags → W.pairing f ∈ F.internalFlags → self.isOut (W.pairing f) = !self.isOut f
The pairing flips orientation on internal flags whose partner is also internal.
Instances For
Path chain tracing #
Follow the chain from a flag: apply pairing, check if boundary;
if internal, apply matching and recurse. Returns none if the fuel
runs out.
Equations
- One or more equations did not get rendered due to their size.
- RS.EdgeSubset.traceChain κ 0 x✝ = none