Projecting split paths and preserving endpoint loads
Lax263307.SplitPathProjection · concepts/Lax263307/SplitPathProjection.lean · lax-263307
No public endorsements yet.
Loading review…
Sign in with ORCIDNatural Language Statement
Theorem
A simple path of positive-capacity arcs in the split network, starting at and ending at , is the expansion of a simple original path from to . Each original vertex expands to its consecutive input/output ports. A reverse port arc would repeat an input port, so simplicity excludes it. Successive original vertices must therefore be graph neighbors.
For a simple original route , the expanded route traverses the capacity arc exactly once when belongs to , and zero times otherwise. This counts both endpoints and includes singleton routes.
Concept map
Evidence
Lean source view on GitHub
| 1 | import Lax263307.VertexSplitting |
| 2 | import Mathlib.Data.List.Chain |
| 3 | |
| 4 | /-! |
| 5 | --- |
| 6 | title: Projecting split paths and preserving endpoint loads |
| 7 | type: theorem |
| 8 | --- |
| 9 | A simple path of positive-capacity arcs in the split network, starting at |
| 10 | and ending at , is the expansion of a simple original path from |
| 11 | to . Each original vertex expands to its consecutive input/output |
| 12 | ports. A reverse port arc would repeat an input port, so simplicity excludes |
| 13 | it. Successive original vertices must therefore be graph neighbors. |
| 14 | |
| 15 | For a simple original route , the expanded route traverses the capacity |
| 16 | arc exactly once when belongs to , and zero times |
| 17 | otherwise. This counts both endpoints and includes singleton routes. |
| 18 | |
| 19 | # Attribution |
| 20 | |
| 21 | Bonnet–Chang, flow projection and endpoint-inclusive load accounting in |
| 22 | Lemma 7. |
| 23 | -/ |
| 24 | |
| 25 | namespace Lax263307.SplitPathProjection |
| 26 | |
| 27 | open scoped NNReal NNRat |
| 28 | open VertexSplitting Lax455465.ProductNetwork Lax455465.ConcurrentFlow |
| 29 | |
| 30 | /-- Replace each original route vertex by its consecutive two split ports. -/ |
| 31 | def expandRoute {n : ℕ} (Q : List (Fin n)) : List (Fin (2 * n)) := |
| 32 | Q.flatMap fun v => [minus v, plus v] |
| 33 | |
| 34 | /-- A positive simple split path projects to a simple original route. -/ |
| 35 | axiom project_simple_path {n : ℕ} (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] |
| 36 | (x : Fin n → ℚ≥0) (large : ℚ≥0) (P : List (Fin (2 * n))) (u v : Fin n) |
| 37 | (simple : P.Nodup) |
| 38 | (chain : P.IsChain (fun a b => 0 < (splitInstance G x large).capacity a b)) |
| 39 | (start : P.head? = some (minus u)) (finish : P.getLast? = some (plus v)) : |
| 40 | ∃ Q : List (Fin n), P = expandRoute Q ∧ Q.Nodup ∧ Q.IsChain G.Adj ∧ |
| 41 | Q.head? = some u ∧ Q.getLast? = some v |
| 42 | |
| 43 | /-- Capacity-arc occurrence equals the original vertex-membership indicator. -/ |
| 44 | axiom capacity_arc_count {n : ℕ} (Q : List (Fin n)) (simple : Q.Nodup) (v : Fin n) : |
| 45 | ((expandRoute Q).zip (expandRoute Q).tail).count (minus v, plus v) = |
| 46 | if v ∈ Q then 1 else 0 |
| 47 | |
| 48 | /-- Every retained positive path in a feasible split flow has such a projection. -/ |
| 49 | axiom split_support_projection {n : ℕ} (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] |
| 50 | (x : Fin n → ℚ≥0) (large : ℚ≥0) (f : ℝ≥0) (F : PathFlow (2 * n)) |
| 51 | (feasible : IsConcurrentFlow .directed (splitInstance G x large).network |
| 52 | (splitInstance G x large).weights f F) |
| 53 | (P : List (Fin (2 * n))) (member : P ∈ F.support) (u v : Fin n) |
| 54 | (start : P.head? = some (minus u)) (finish : P.getLast? = some (plus v)) : |
| 55 | ∃ Q : List (Fin n), P = expandRoute Q ∧ Q.Nodup ∧ Q.IsChain G.Adj ∧ |
| 56 | Q.head? = some u ∧ Q.getLast? = some v |
| 57 | |
| 58 | end Lax263307.SplitPathProjection |
| 59 |
Attribution
Bonnet–Chang, flow projection and endpoint-inclusive load accounting in Lemma 7.
Builds on
Used by
From Mathlib
Discussion
Ask a question or add context. Endorsements and structured flags are kept in the review panel above.
0 comments