Documentation

Atlas.CombinatorialOptimization.code.Flow.Menger

structure NetworkFlow.DirectedGraph (V : Type u_2) [Fintype V] [DecidableEq V] :
Type u_2
  • edge : VVProp
  • edge_decidable (u v : V) : Decidable (self.edge u v)
  • s : V
  • t : V
  • s_ne_t : self.s self.t
Instances For
    @[implicit_reducible]
    instance NetworkFlow.instDecidableEdge {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (u v : V) :
    Decidable (G.edge u v)
    structure NetworkFlow.DirPath {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) :
    Type u_1
    Instances For
      def NetworkFlow.DirPath.edges {V : Type u_1} [Fintype V] [DecidableEq V] {G : DirectedGraph V} (p : DirPath G) :
      List (V × V)
      Instances For
        def NetworkFlow.PairwiseEdgeDisjoint {V : Type u_1} [Fintype V] [DecidableEq V] {k : } {G : DirectedGraph V} (paths : Fin kDirPath G) :
        Instances For
          structure NetworkFlow.EdgeDisjointPaths {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (k : ) :
          Type u_1
          Instances For
            noncomputable def NetworkFlow.minSTCutSize {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) :
            Instances For
              noncomputable def NetworkFlow.maxEdgeDisjointPaths {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) :
              Instances For
                theorem NetworkFlow.list_crossing {α : Type u_2} (P : αProp) [DecidablePred P] (l : List α) (hl : l []) :
                P (l.head hl)¬P (l.getLast hl)el.zip l.tail, P e.1 ¬P e.2
                theorem NetworkFlow.path_crosses_cut {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (p : DirPath G) (S : Finset V) (hs : G.s S) (ht : G.tS) :
                ep.edges, e.1 S e.2 S G.edge e.1 e.2
                theorem NetworkFlow.edgeDisjointPaths_le_cutSize {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (k : ) (edp : EdgeDisjointPaths G k) (S : Finset V) (hs : G.s S) (ht : G.tS) :
                k {p : V × V | p.1 S p.2 S G.edge p.1 p.2}.card
                theorem NetworkFlow.exists_maxFlow {V : Type u_1} [Fintype V] [DecidableEq V] (N : FlowNetwork V) :
                ∃ (fl : STFlow N), NoAugmentingPath N fl
                theorem NetworkFlow.cutCapacity_eq_crossing_edges {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (C : STCut G.toFlowNetwork) :
                cutCapacity G.toFlowNetwork C = {p : V × V | p.1 C.S p.2 C.S G.edge p.1 p.2}.card
                theorem NetworkFlow.unit_cap_max_flow_integral {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (fl : STFlow G.toFlowNetwork) (hmax : NoAugmentingPath G.toFlowNetwork fl) (u v : V) :
                fl.f u v = 0 fl.f u v = 1
                theorem NetworkFlow.integral_unit_flow_path_extraction {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) (fl : STFlow G.toFlowNetwork) (hint : ∀ (u v : V), fl.f u v = 0 fl.f u v = 1) (k : ) (hval : flowValue G.toFlowNetwork fl = k) :
                theorem NetworkFlow.unit_flow_to_paths {V : Type u_1} [Fintype V] [DecidableEq V] (G : DirectedGraph V) :
                ∃ (k : ) (edp : EdgeDisjointPaths G k) (C : STCut G.toFlowNetwork), k = {p : V × V | p.1 C.S p.2 C.S G.edge p.1 p.2}.card ∀ (C' : STCut G.toFlowNetwork), k {p : V × V | p.1 C'.S p.2 C'.S G.edge p.1 p.2}.card