Path matching on boundary flags #
For a boundary-relative transition system κ : RelTransitionSystem F,
the alternating paths traced by traceChain pair the boundary flags
of the edge subset. This file constructs the path matching as a
proven involution on boundary flags.
Main results #
RelTransitionSystem.pathMatch— sends each boundary flag to the boundary flag at the other end of its alternating chain.pathMatch_mem— the result is a boundary flag.pathMatch_invol—pathMatchis an involution.
Proof architecture #
Chain termination uses a pigeonhole/backward-injectivity argument on
the pairings visited at each step. The involution is proved via an
identity on the reverse iterate sequence:
iterWalk κ b' j = σ(iterWalk κ b (k - j)) (where b' is the
chain result and σ is the edge pairing), established by induction
on j using match_invol.
Flag classification helpers #
traceChain rewriting lemmas #
One step of the chain when the flag's edge partner is internal: match and recurse on one less fuel.
The chain stops at the first boundary partner and returns it.
The chain fails on a partner outside the subset.
Fuel monotonicity #
Extra fuel does not change a successful result.
Result is boundary #
A chain that succeeds ends at a boundary flag.
Iterated walk #
The fuel-free chain step iterated: cross the edge, then match.
This is traceChain's recursion without the termination test, so
the two can be compared step by step.
Equations
- RS.EdgeSubset.iterWalk κ f 0 = f
- RS.EdgeSubset.iterWalk κ f n.succ = κ.match_ (W.pairing (RS.EdgeSubset.iterWalk κ f n))
Instances For
No steps leave the flag where it is.
One more step: cross the edge from the current flag, then match.
Splitting an iterated walk.
Starting one step along is the same as taking one more step.
While the chain continues, every flag it reaches after the first step is internal.
match_ injectivity on internal flags #
The matching is injective on internal flags, being an involution there.
Chain unfolding #
Splitting the fuel: k steps of a continuing chain can be run
first, leaving the rest of the chain from the flag reached.
Backward injectivity #
A continuing chain never revisits a flag. A repeat would force the matching to send two distinct internal flags to the same place, or the chain to re-enter its own boundary start.
The edge partners visited by a continuing chain are pairwise distinct — the pigeonhole input for termination.
Chain termination with data #
The chain terminates, within F.flags.card steps, at a
boundary partner: the visited partners are distinct and there are
only that many flags.
traceChain terminates #
With F.flags.card + 1 fuel every chain from a boundary flag
succeeds.
pathMatch definition #
The path matching: the boundary flag at the other end of a boundary flag's alternating chain.
Instances For
Reading pathMatch off any successful trace at the standard
fuel.
The path matching lands in the boundary flags.
Forward/reverse chain helpers #
A chain that continues for k steps and then meets a boundary
partner traces to that partner.
The reverse-iterate identity: walking back from the chain's far end retraces the forward walk under the edge pairing. This is what makes the path matching an involution.
The reversed chain continues wherever the forward one did.
The reversed chain arrives back at the original start.
Involution #
The trace from the far end returns the original boundary flag.
The path matching is an involution: it pairs the boundary flags of the subset.
Self-matching analysis #
A boundary flag whose edge partner is also boundary is matched to that partner: the chain has no internal steps.
Interaction lemmas #
The path matching, together with the length of the chain that produced it and the continuation data along the way — the form downstream chain arguments consume.