Directed walks along an explicit arrow family #
A directed walk along an arrow family Q : V → V → Type* is a Mathlib Quiver.Path for the
quiver whose arrows from v to w are the terms of Q v w. The quiver is supplied explicitly,
as @Quiver.Path V ⟨Q⟩ s t, so that several arrow families on one vertex type, such as a network
and its residual network, have their own walks without competing Quiver instances.
TauCeti.ArrowWalk Q s t abbreviates this type, and the abbreviations in its namespace expose the
Mathlib path operations through dot notation.
A walk records the identities of the arrows it traverses, which TauCeti.ArrowWalk.arrows lists
in order with repetitions. A directed path repeats no vertex, and a directed cycle is a closed
walk of positive length that repeats no vertex other than its common endpoints. Since the target
of each traversed arrow is a later vertex of the walk, neither repeats an arrow; this is what
bounds the value a path or cycle places on a single arrow in flow augmentation. Every walk
contains a path between the same endpoints that uses only arrows of the walk, and every closed
walk of positive length contains a cycle at the same vertex that uses only arrows of the walk.
The bottleneck of a walk for capacities c is the least capacity of an arrow it traverses, and
a vertex is positively reachable from another when some walk joins them along arrows of positive
capacity; for residual capacities these are augmenting walks.
Main definitions #
TauCeti.ArrowWalk Q s t: directed walks fromstotalong the arrow familyQ.TauCeti.ArrowWalk.arrows: the arrows traversed by a walk, in order.TauCeti.ArrowWalk.IsPathandTauCeti.ArrowWalk.IsCycle: directed paths and cycles.TauCeti.Assignment.IsAcyclic: arrow assignments whose positive support contains no directed cycle.TauCeti.ArrowWalk.bottleneck: the least capacity along a walk that traverses an arrow.TauCeti.PositiveReachable c s t: some walk fromstottraverses only arrows of positive capacity forc.TauCeti.ReachableWithout F s t: some walk fromstottraverses no arrow of the setFof arrows, sotstays reachable fromsafter deleting the arrows ofF.TauCeti.WithoutHom F: the arrow family of the arrows outsideF, with its inclusionTauCeti.WithoutHom.incl FintoQ.TauCeti.ReachableAvoiding Q X s t: some walk fromstotvisits no vertex ofX, sotstays reachable fromsafter deleting the vertices ofX.TauCeti.ArrowWalk.InternallyDisjoint: two walks fromstotsharing no vertex other thansandt.
Main results #
TauCeti.ArrowWalk.map_target_arrows: the targets of the traversed arrows are the vertices of the walk after its first.TauCeti.ArrowWalk.isChain_verticesandTauCeti.ArrowWalk.exists_vertices_eq_of_isChain: the vertex sequences of walks are the lists of vertices in which consecutive vertices are joined by an arrow;TauCeti.ArrowWalk.vertices_injectiveshows that they determine the walk when at most one arrow runs from any vertex to any other.TauCeti.ArrowWalk.IsPath.nodup_arrowsandTauCeti.ArrowWalk.IsCycle.nodup_arrows: paths and cycles traverse every arrow at most once.TauCeti.ArrowWalk.exists_isPath_arrows_subset: every walk contains a path with the same endpoints.TauCeti.ArrowWalk.exists_isPath_interior_notMem: every walk from a vertex ofAto a vertex ofBcontains a path from a vertex ofAto a vertex ofBwith no other vertex inAorB, traversing only arrows of the walk.TauCeti.ArrowWalk.exists_isCycle_arrows_subset: every closed walk of positive length contains a cycle.TauCeti.ArrowWalk.exists_eq_comp_cons_comp_of_mem_arrows: a walk that traverses a specified arrow splits at that arrow.TauCeti.ArrowWalk.le_bottleneck_iffandTauCeti.ArrowWalk.exists_mem_bottleneck_eq: the bottleneck is the minimum of the capacities along the walk.TauCeti.positiveReachable_iff_exists_isPathandTauCeti.positiveReachable_iff_reflTransGen: positive reachability is witnessed by a path, and is the reflexive transitive closure of being joined by an arrow of positive capacity;TauCeti.exists_isCycle_iff_transGenis the counterpart for cycles.TauCeti.Assignment.isAcyclic_iff_forall_not_transGen: an assignment is acyclic exactly when no vertex reaches itself in one or more steps along arrows of positive value.TauCeti.positiveReachable_iff_nonempty_arrowWalk: positive reachability is reachability along the arrow familyTauCeti.PositiveHom cof arrows of positive capacity, andTauCeti.reachableWithout_iff_nonempty_arrowWalkis the counterpart for deleted arrows.TauCeti.PositiveReachable.mem_of_mem: a vertex set that no arrow of positive capacity leaves contains every vertex positively reachable from one of its members, andTauCeti.ReachableWithout.mem_of_memis the counterpart for deleted arrows.TauCeti.positiveReachable_map_iffandTauCeti.positiveReachable_map_iff_of_strictMono: a coefficient map preserving and reflecting positivity, such as a strictly monotone map fixing zero, does not change positive reachability.
Directed walks from s to t along the arrow family Q: Mathlib's quiver paths for the
quiver with arrow types Q, supplied explicitly rather than as an instance.
Instances For
The walk of length zero at s.
Instances For
The vertices of p.cons e are those of p followed by x. This is not a simp lemma, since
simp already rewrites its left-hand side by Quiver.Path.vertices_cons.
The vertices of p.comp p' are those of p without its last vertex, followed by those of
p'. This is not a simp lemma, since simp already rewrites its left-hand side by
Quiver.Path.vertices_comp.
Read backwards, the vertices of a walk are its target followed by Quiver.Path.toList, which
lists the sources of the traversed arrows from last to first.
Consecutive vertices of a walk are joined by an arrow.
Every list of vertices from s to t in which consecutive vertices are joined by an arrow is
the vertex sequence of a walk from s to t.
When at most one arrow runs from any vertex to any other, a walk is determined by its vertices.
Paths and cycles #
Trimming a walk between two vertex sets. A walk from a vertex of A to a vertex of B
contains a path from a vertex a ∈ A to a vertex b ∈ B whose vertices other than a and b
lie in neither A nor B, and which visits only vertices and traverses only arrows of the
walk.
Bottlenecks #
The bottleneck of a walk p that traverses at least one arrow, for the capacities c: the
least capacity of an arrow traversed by p.
Instances For
A value is at most the bottleneck exactly when it is at most every capacity along the walk.
The bottleneck is attained on an arrow traversed by the walk.
The bottleneck lies in every set that contains the capacities along the walk.
A value is below the bottleneck exactly when it is below every capacity along the walk.
An arrow-disjoint family of walks between distinct vertices has distinct members: a walk between distinct vertices traverses some arrow, which a second copy of it would share.
Reachability along arrows of positive capacity #
The vertex t is positively reachable from s for the capacities c when some walk from s
to t traverses only arrows of positive capacity. For the residual capacities of a flow, such a
walk is an augmenting walk.
Instances For
Positive reachability is unchanged by a coefficient map that preserves and reflects positivity.
A positively reachable vertex stays reachable along a further arrow of positive capacity.
The head of an arrow of positive capacity is positively reachable from its tail.
The target of every arrow on a walk from s along arrows of positive capacity is positively
reachable from s.
Positive reachability is the reflexive transitive closure of being joined by an arrow of positive capacity.
Cycles of positive arrows. Some cycle at v traverses only arrows of positive capacity
exactly when v reaches itself in one or more steps along arrows of positive capacity.
An arrow assignment is acyclic when no directed cycle traverses only arrows of positive value.
Instances For
An assignment is acyclic exactly when no vertex reaches itself in one or more steps along arrows of positive value.
The arrows of positive capacity for c, retaining their identities: the arrow family of the
part of Q along which positive reachability travels.
Instances For
Positive reachability is reachability along the arrows of positive capacity.
A vertex set that no arrow of positive capacity leaves is closed under positive reachability.
Positive reachability is unchanged by a strictly monotone coefficient map fixing zero.
If no vertex reaches itself along positive arrows and some arrow is positive, there is a positive path between distinct vertices, with no positive arrow entering its initial vertex and no positive arrow leaving its final vertex.
Reachability after deleting arrows #
The vertex t is reachable from s without the arrows of F when some walk from s to t
traverses no arrow of F: reachability after deleting the arrows of F, which are identified in
the total arrow type, so that parallel arrows are deleted separately.
Instances For
Deleting no arrows, reachability is the existence of a walk.
A reachable vertex stays reachable along a further arrow outside F.
Deleting fewer arrows preserves reachability.
A vertex set that no arrow outside F leaves contains every vertex reachable without the
arrows of F from one of its members.
The arrows outside F, retaining their identities: the arrow family of Q with the arrows of
F deleted, along which reachability without the arrows of F travels.
Instances For
A walk traversing no arrow of F is the image of a walk along the arrows outside F.
Reachability without the arrows of F is reachability along the arrows outside F.
Reachability avoiding a vertex set #
A reachable vertex stays reachable along a further arrow to a vertex outside X.
A vertex set that no arrow between vertices outside X leaves contains every vertex reachable
avoiding X from one of its members.
Deleting arrows with an endpoint in X does not change reachability avoiding X.
Avoiding fewer vertices preserves reachability.
Avoiding no vertices, reachability is the existence of a walk.
Internally disjoint walks #
A family of pairwise internally disjoint walks from s to t, each visiting a vertex other
than s and t, has distinct members: such a vertex would be shared by two copies of a walk.