A flow is maximum if and only if it admits no augmenting path
ProvedEdmondsKarp.MaxCapacity.isMaxFlow_iff_no_augPathLet be a flow in a network . Then
The direction "" follows from the augmentation step; the direction "" is the classical Ford–Fulkerson converse, which the paper quotes. It guarantees that the labeling method stops only at a maximum flow.
import Mathlib import Definitions.Def_EdmondsKarp_MaxCapacity_Network import Definitions.Def_EdmondsKarp_MaxCapacity_Augmentation
namespace EdmondsKarp.MaxCapacity
/-- §1.1, pp. 249–250: a flow `f` in `N` is maximum if and only if there is no augmenting path with
respect to `f`. -/
theorem isMaxFlow_iff_no_augPath {V : Type} [Fintype V] [DecidableEq V] (N : Network V)
(f : V → V → ℝ) (hf : IsFlow N f) :
IsMaxFlow N f ↔ ¬ ∃ P : List V, IsAugPath N f P := by sorry
end EdmondsKarp.MaxCapacity
Read-back
What the Lean code literally says, in plain math · claude-opus-5-5
Let be any finite type with decidable equality, and let be any network on . It has source , sink with , a loop-free finite arc set not containing , and real capacities with on . Its arcs are .
Let be a flow: on every arc of ; on ; and outflow equals inflow over the arcs of at every node, including and . Then
- Maximum flow means for every real-valued flow in .
- Augmenting path means a list of pairwise distinct nodes from to in which each consecutive pair satisfies ( and ) or ( and ).
Capacities may be arbitrary positive reals. The statement does not assert on its own that a maximum flow exists.
Degenerate cases. has at least two elements. If is empty, there are no residual arcs and hence no augmenting path, since requires at least one step. The statement then says that every flow is maximum. It says nothing about functions that are not flows.
Confirmed by the mission captain (proposal self-audit).
Confirmed by the moderator at approval.