1 ネットワークとフロー
定義 1.1. 有限有向グラフD=(V,A)、相異なる二頂点s,t∈V、および容量とよぶ写像c:A→[0,∞)の組(D,c,s,t)をネットワーク (flow network) という。sを湧点 (source)、tを吸点 (sink) という。
写像f:A→Rがフロー (flow) であるとは、次の二条件を満たすことをいう。
- (容量制約)各a∈Aについて0≤f(a)≤c(a)が成り立つ。
- (保存則)各v∈V∖{s,t}について
a∈δ−(v)∑f(a)=a∈δ+(v)∑f(a)
が成り立つ。
フローfの値 (value of a flow) を
val(f)=a∈δ+(s)∑f(a)−a∈δ−(s)∑f(a)と定める。値が最大であるフロー、すなわち任意のフローf′についてval(f′)≤val(f)を満たすフローfを最大フロー (maximum flow) という。
フローが少なくとも一つ存在するかどうかは、この定義だけからは明らかでない。各弧で値0をとる写像がフローであることは命題 3.2の証明で確かめる。以下では、RAをすべての写像A→Rのなす∣A∣次元の実ベクトル空間とみなし、フロー全体の集合を
F={f∈RA: f はフローである}
と書く。
2 カットとフローの値の上界
定義 2.1.s∈Sかつt∈V∖Sを満たす頂点集合S⊆Vを s-tカット (s-t cut) という。s-tカットSの容量 (capacity) を
c(S)=a∈δ+(S)∑c(a)と定める。容量が最小であるs-tカットを最小カット (minimum cut) という。
s-tカットは湧点側と吸点側を分ける切り分けであり、その容量は切り分けを順方向に越えることのできる量の総和である。この見方を、次の命題で等式と不等式の形に確定する。等式の側は後の議論でも繰り返し用いる。
命題 2.2. 任意のフローfと任意のs-tカットSに対し
val(f)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)が成り立つ。とくにval(f)≤c(S)が成り立つ。
証明. 各頂点v∈Vに対し
b(v)=a∈δ+(v)∑f(a)−a∈δ−(v)∑f(a)と置く。保存則によりv∈V∖{s,t}ではb(v)=0であり、値の定義によりb(s)=val(f)である。Sはsを含みtを含まないので、Sの要素はsか、または保存則の成り立つ頂点である。したがって
v∈S∑b(v)=b(s)=val(f)が成り立つ。
左辺を弧ごとに数え直す。自己ループが無いので、弧a=(u,v)の始点と終点は相異なる。aが∑v∈Sb(v)へ寄与する仕方は次の四通りである。u∈Sかつv∈Sのとき、b(u)に+f(a)、b(v)に−f(a)として現れて相殺する。u∈Sかつv∈/Sのとき、すなわちa∈δ+(S)のとき、b(u)に+f(a)としてだけ現れる。u∈/Sかつv∈Sのとき、すなわちa∈δ−(S)のとき、b(v)に−f(a)としてだけ現れる。u∈/Sかつv∈/Sのとき、寄与は無い。したがって
v∈S∑b(v)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)となり、主張の等式を得る。
不等式を示す。容量制約によりf(a)≥0であるから、右辺の第二の和は非負であり、これを落とすと上からの評価になる。さらに各a∈δ+(S)でf(a)≤c(a)であるから
val(f)≤a∈δ+(S)∑f(a)≤a∈δ+(S)∑c(a)=c(S)が成り立つ。▨
この命題により、フローの値とカットの容量が一致する対を見つけることには意味がある。そのような対が見つかれば、両者の最適性を他の候補と比べることなく確定することができるからである。この見通しは定理 5.1 (3)⇒(1)の段で証明の形にする。最大フロー最小カット定理では、値と容量の一致が必ず起こることが主張される。
3 最大フローの存在
容量が非負の実数であるとき、フローの値がとりうる値の集合は上に有界な実数の集合であるから上限をもつ。しかし上限が実際に達成されること、すなわち最大フローが存在することは、この段階では分かっていない。そこで、フロー全体の集合がコンパクトであることと、フローの値が連続であることを示して最大値の存在を得る。
コンパクト性を用いるためには、まずフローの値が連続であることを確かめる必要がある。有限次元空間上の線形汎関数の連続性は先行する記事で扱っていないので、ここで示す。
補題 3.1.Aを有限集合とし、α∈RAを固定する。RAに Euclid 距離ρ2を入れ、
L(x)=a∈A∑α(a)x(a)によってL:RA→Rを定める。このときLは§E2.4 定義 1.1の意味で連続である。
証明.K=1+∑a∈A∣α(a)∣と置く。K≥1>0である。x,y∈RAに対し、各a∈Aについて
∣x(a)−y(a)∣≤(b∈A∑(x(b)−y(b))2)1/2=ρ2(x,y)が成り立つ。三角不等式により
∣L(x)−L(y)∣=a∈A∑α(a)(x(a)−y(a))≤a∈A∑∣α(a)∣∣x(a)−y(a)∣≤Kρ2(x,y)を得る。ε>0に対してδ=ε/K>0と置けば、ρ2(x,y)<δのとき∣L(x)−L(y)∣<εが成り立つ。したがってLは各点で連続である。▨
命題 3.2. ネットワーク(D,c,s,t)に対し、フロー全体の集合F⊆RAは空でない有界閉集合であり、val:F→Rは連続である。従属選択公理を仮定すると、valはFの上で最大値をとる。すなわち最大フローが存在する。
証明.A=∅のときはRAが一点集合であり、Fはその一点からなり、valは0という値だけをとるので主張は成り立つ。以下A=∅とし、n=∣A∣≥1と置く。
空でないこと。各弧で値0をとる写像はフローであるからF=∅である。
有界であること。C=maxa∈Ac(a)と置く。f∈Fならば各aで0≤f(a)≤Cであるから
ρ2(f,0)=(a∈A∑f(a)2)1/2≤nCが成り立つ。したがってFは原点を中心とする半径nC+1の開球に含まれ、有界である。
閉であること。各a∈AについてΦa(x)=x(a)と置き、各v∈V∖{s,t}について
Kv(x)=a∈δ−(v)∑x(a)−a∈δ+(v)∑x(a)と置く。自己ループが無いのでδ−(v)とδ+(v)は交わらず、Kvは係数が1、−1または0である線形汎関数である。Φaも線形汎関数であるから、補題 3.1によりこれらはすべて連続である。
Fの補集合が開であることを示す。g∈RA∖Fとすると、次の三つの場合のいずれかが起こる。
- あるa0∈AについてΦa0(g)<0である。ε=−Φa0(g)>0に対するΦa0の連続性のδ>0をとると、ρ2(x,g)<δを満たすxはΦa0(x)<Φa0(g)+ε=0を満たすので、x∈/Fである。
- あるa0∈AについてΦa0(g)>c(a0)である。ε=Φa0(g)−c(a0)>0に対するδ>0をとると、ρ2(x,g)<δを満たすxはΦa0(x)>Φa0(g)−ε=c(a0)を満たすので、x∈/Fである。
- あるv0∈V∖{s,t}についてKv0(g)=0である。ε=∣Kv0(g)∣>0に対するδ>0をとると、ρ2(x,g)<δを満たすxは∣Kv0(x)−Kv0(g)∣<εを満たすのでKv0(x)=0であり、x∈/Fである。
いずれの場合もgの周りの開球がFと交わらない。したがってFの補集合は開であり、Fは閉である。
値の連続性。α(a)=1(a∈δ+(s)のとき)、α(a)=−1(a∈δ−(s)のとき)、α(a)=0(それ以外のとき)と定めると、自己ループが無いのでδ+(s)とδ−(s)は交わらず、αは矛盾なく定まる。このときval(x)=∑aα(a)x(a)であるから、補題 3.1によりvalはRA上で連続である。連続性はεとδによる条件であるから、定義域を部分集合Fへ制限したものも、FにRAの距離を入れた部分空間の上で連続である。
結論。Aの要素に1からnまで番号を付けると、RAは Euclid 距離を保ったままRnと同一視される。従属選択公理のもとで§E2.9 定理 4.3をRnの有界閉集合Fへ適用すると、Fはコンパクトである。ここで用いるコンパクト性も、次に用いる連続性も、距離から定まる位相についてのものである。実際、§E2.4 定義 1.1の意味での連続性は、§E2.4 定理 2.1により、開集合の逆像が開集合であることと同値であり、これが位相空間の写像としての連続性である。F=∅でありval:F→Rは距離から定まる位相について連続であるから、§E2.19 定理 4.4によりvalはFの上で最大値をとる。最大値を与えるf∈Fが最大フローである。▨
4 残余ネットワークと増加道
フローが最大でないとき、どの方向へ量を動かせば値が増えるかを表すのが残余ネットワークである。弧aの流量は、容量までの余裕c(a)−f(a)の分だけ順方向へ増やすことができ、既に流れているf(a)の分だけ逆方向へ打ち消すことができる。この二種類の操作を、向きをもつ弧として一つのグラフにまとめる。
定義 4.1. ネットワーク(D,c,s,t)とフローfに対し、残余ネットワーク (residual network)Dfを次のように定める。頂点集合はVとする。各弧a=(u,v)∈Aについて、
- c(a)−f(a)>0であるとき、uを始点としvを終点とする順方向残余弧 (forward residual arc)a+を置き、その残余容量 (residual capacity) をcf(a+)=c(a)−f(a)と定める。
- f(a)>0であるとき、vを始点としuを終点とする逆方向残余弧 (backward residual arc)a−を置き、その残余容量をcf(a−)=f(a)と定める。
残余弧は元の弧aと向きの別によって区別する。すなわち残余弧は対(元の弧, 向き)で識別し、始点と終点が同じ二つの残余弧を同一視しない。したがってDfは、始点と終点が同じ弧を複数もつことのある多重有向グラフであり、§D2.11 定義 1.1の有向グラフとは限らない。逆平行な弧の対(u,v)、(v,u)について両方向に残余がある場合に、実際にそのようなことが起こる。そこで、Dfにおける有向道と到達可能性を本記事で次のように定める。頂点がすべて相異なるように残余弧を順にたどってsからtへ至る列を増加道 (augmenting path) という。すなわち増加道とは、頂点の列s=w0,w1,…,wk=t(w0,…,wkは相異なる)と残余弧の列r1,…,rkであって、各riがwi−1を始点、wiを終点とするものである。同じ規約で、Dfにおいてsから到達可能 (reachable) な頂点を、sから始まるこの形の列の終点として定める。増加道Pに対し
Δ(P)=min{cf(r): r は P に現れる残余弧}をPのボトルネック (bottleneck) という。残余弧の残余容量はいずれも正であるからΔ(P)>0である。
この増加道は残余ネットワーク上の有向道であって、元のネットワークの有向道ではない。増加道では、弧に既に流れている量を打ち消すために、逆方向残余弧を用いることができる。この点が、単純に空きのある弧をたどるだけの操作との違いである。
補題 4.2. フローfと増加道Pをとり、Δ=Δ(P)と置く。写像f′:A→Rを
f′(a)=⎩⎨⎧f(a)+Δf(a)−Δf(a)(a+ が P に現れるとき),(a− が P に現れるとき),(それ以外のとき)で定める。このときf′はフローであり、val(f′)=val(f)+Δが成り立つ。
証明. f′が矛盾なく定まること。増加道Pの頂点はすべて相異なる。弧a=(u,v)についてa+とa−がともにPに現れたとすると、Pはuからvへの移動とvからuへの移動をともに含むので、uとvがそれぞれ二度現れることになり、頂点が相異なることに反する。また、同じ残余弧がPに二度現れることも、頂点が相異なることに反する。したがって上の場合分けは重複せず、f′は矛盾なく定まる。
容量制約。Pに現れない弧ではf′=fであるから制約は保たれる。a+がPに現れるときはΔ≤cf(a+)=c(a)−f(a)であるから
0≤f(a)≤f(a)+Δ=f′(a)≤c(a)が成り立つ。a−がPに現れるときはΔ≤cf(a−)=f(a)であるから
0≤f(a)−Δ=f′(a)≤f(a)≤c(a)が成り立つ。
保存則と値。各頂点wについてb(w)=∑a∈δ+(w)f(a)−∑a∈δ−(w)f(a)と置き、f′について同様に定めたものをb′(w)と書く。Pに現れる残余弧rの始点をx、終点をyとすると、rによる流量の変更がbに与える差は次のとおりである。r=a+かつa=(x,y)のときはf(a)がΔだけ増え、a∈δ+(x)かつa∈δ−(y)であるから、b(x)はΔだけ増えb(y)はΔだけ減る。r=a−かつa=(y,x)のときはf(a)がΔだけ減り、a∈δ+(y)かつa∈δ−(x)であるから、やはりb(x)はΔだけ増えb(y)はΔだけ減る。いずれの場合も、残余弧の始点で+Δ、終点で−Δの差が生じる。
増加道をs=w0,r1,w1,…,rk,wk=tと書く。各riはwi−1を始点、wiを終点とする。頂点wi(0<i<k)はriの終点かつri+1の始点であるから、差の総和は−Δ+Δ=0でありb′(wi)=b(wi)=0となる。Pに現れない頂点では流量が変わらないのでb′=bである。よってf′は保存則を満たし、フローである。s=w0はr1の始点であって、どのriの終点でもないからb′(s)=b(s)+Δであり、val(f′)=val(f)+Δを得る。▨
5 最大フロー最小カット定理
5.1 証明方針
三条件の同値性を、定理 5.1 (1)⇒(2)、定理 5.1 (2)⇒(3)、定理 5.1 (3)⇒(1)という巡回の形で示す。
定理 5.1 (1)⇒(2)は対偶をとる。増加道が存在すれば補題 4.2により値の大きいフローが得られるので、もとのフローは最大でない。
定理 5.1 (3)⇒(1)は命題 2.2の不等式から直ちに従う。
本質的な一手は定理 5.1 (2)⇒(3)にある。増加道が存在しないという仮定を、カットの構成へ翻訳する。残余ネットワークDfにおいてsから到達可能な頂点全体をSと置く。増加道が存在しないことはtがsから到達不能であることに他ならないから、Sはs-tカットである。次にSの境界を調べる。Sから出る弧に容量までの余裕が残っていれば、その順方向残余弧によって外側の頂点が到達可能になるので、余裕は残っていない。Sへ入る弧に正の流量があれば、その逆方向残余弧によって外側の頂点が到達可能になるので、流量は零である。この二つの事実を命題 2.2の等式へ代入すると、val(f)=c(S)が得られる。
最後に、最大フローと最小カットの値が一致することを述べるためには、最大フローが実在しなければならない。最大フローの存在は命題 3.2により得られる。従属選択公理を用いる段はここだけであり、三条件の同値の証明には用いない。
定理 5.1 (最大フロー最小カット定理). 非負実容量の有限ネットワーク(D,c,s,t)において、フローfについての次の三条件は同値である。
- fは最大フローである。
- 残余ネットワークDfにsからtへの増加道が存在しない。
- val(f)=c(S)を満たすs-tカットSが存在する。
さらに、従属選択公理を仮定すると、最大フローの値と最小カットの容量は等しい。三条件の同値の証明は選択公理を用いず、最後の主張だけが命題 3.2を経由して従属選択公理を用いる。
証明. (1)⇒(2). 対偶を示す。Dfに増加道Pが存在すると仮定する。補題 4.2により、val(f′)=val(f)+Δ(P)を満たすフローf′が存在する。Δ(P)>0であるからval(f′)>val(f)となり、fは最大フローではない。
(2)⇒(3).Dfにおいてsから到達可能な頂点全体をSと置く。長さ0の有向道によりs∈Sである。仮定によりsからtへの有向道は存在しないのでt∈/Sである。したがってSはs-tカットである。
a=(u,v)∈δ+(S)をとる。u∈Sかつv∈/Sである。もしf(a)<c(a)であるとすると、順方向残余弧a+がDfに存在し、uからvへ移ることができるのでv∈Sとなって矛盾する。よってf(a)=c(a)である。
a=(v,u)∈δ−(S)をとる。u∈Sかつv∈/Sである。もしf(a)>0であるとすると、逆方向残余弧a−がuを始点としvを終点としてDfに存在するのでv∈Sとなって矛盾する。よってf(a)=0である。
これらを命題 2.2の等式へ代入すると
val(f)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)=a∈δ+(S)∑c(a)−0=c(S)を得る。
(3)⇒(1).val(f)=c(S)を満たすs-tカットSをとる。任意のフローf′について命題 2.2によりval(f′)≤c(S)=val(f)が成り立つので、fは最大フローである。
最大フローと最小カットの一致。命題 3.2により最大フローf∗が存在する。(1)⇒(2)と(2)⇒(3)によりval(f∗)=c(S∗)を満たすs-tカットS∗が存在する。任意のs-tカットS′について命題 2.2によりc(S′)≥val(f∗)=c(S∗)であるから、S∗は最小カットであり、最大フローの値と最小カットの容量はともにval(f∗)に等しい。▨
6 Ford–Fulkerson 法と整数性
定理 5.1 (2)⇒(1)は、増加道が見つからなくなるまで増加を繰り返す手続きが最大フローを与えることを意味する。ただし、この手続きが停止することは別に示す必要がある。ここでは容量がすべて非負整数である場合に停止性を証明する。
命題 6.1. ネットワーク(D,c,s,t)の容量がすべて非負整数であるとする。各弧で値0をとるフローfから出発し、残余ネットワークDfに増加道が存在するかぎり、増加道を一つ選んで補題 4.2の増加操作を行い、その結果を新しいfとする手続きを Ford–Fulkerson 法 (Ford–Fulkerson algorithm) という。この手続きは有限回の反復で停止し、停止時のフローは各弧で整数値をとる最大フローである。
証明. 不変条件。ループ不変条件(§D2.8 定義 1.1)として「現在のfはフローであり、各弧で整数値をとる」をとる。初期化では、各弧で値0をとる写像がフローであり整数値をとるので成り立つ。維持を示す。fが整数値をとるフローであるとき、各弧aでc(a)−f(a)とf(a)はともに整数であるから、残余容量はすべて正の整数であり、選んだ増加道PのボトルネックΔ(P)は正の整数である。補題 4.2により増加操作の結果f′はフローであり、各弧でf′(a)はf(a)に整数を加えるか引くかしたものであるから整数値をとる。よって不変条件は保たれる。
停止性。S0={s}と置くと、s=tであるからS0はs-tカットである。容量が整数であるからc(S0)は非負整数である。ループの状態に対して
Φ=c(S0)−val(f)と定める。ここでΦは変量を表す記号であり、頂点集合Vとは無関係である。不変条件によりval(f)は整数であり、命題 2.2によりval(f)≤c(S0)であるから、Φは非負整数である。本体を一度実行すると、上に述べたとおりΔ(P)は正の整数であるからval(f)は1以上増え、Φは狭義に減少する。したがって§D2.8 命題 1.4により手続きは有限回の反復で停止する。
終了。停止時にはループの継続条件が偽であり、残余ネットワークに増加道が存在しない。不変条件により停止時のfはフローであって各弧で整数値をとるから、定理 5.1 (2)⇒(1)によりfは整数値をとる最大フローである。以上の三段は§D2.8 定理 1.2の形の議論であり、手続きは停止して最大フローを返す。▨
系 6.3. ネットワークの容量がすべて非負整数であるとき、各弧で整数値をとる最大フローが存在する。
証明.命題 6.1により、Ford–Fulkerson 法は有限回で停止し、停止時のフローは各弧で整数値をとる最大フローである。これが求める最大フローである。▨
7 検算例
例 7.1. 頂点集合を{s,a,b,t}とし、弧と容量を
c(s,a)=3,c(s,b)=2,c(a,b)=1,c(a,t)=2,c(b,t)=3と定める。各弧で値0をとるフローから出発して増加操作を三度行う。
- 増加道s→a→tをとる。ボトルネックはmin{3,2}=2であり、この道に沿って2を流す。
- 増加道s→b→tをとる。ボトルネックはmin{2,3}=2であり、この道に沿って2を流す。
- 増加道s→a→b→tをとる。残余容量は順に3−2=1、1−0=1、3−2=1であるからボトルネックは1であり、この道に沿って1を流す。
得られたフローは
f(s,a)=3,f(s,b)=2,f(a,b)=1,f(a,t)=2,f(b,t)=3であり、値はval(f)=f(s,a)+f(s,b)=3+2=5である。この例では、5本の弧のすべてで流量が容量に等しい。保存則を確かめると、頂点aでは入る量が3、出る量がf(a,b)+f(a,t)=1+2=3であり、頂点bでは入る量がf(s,b)+f(a,b)=2+1=3、出る量がf(b,t)=3である。吸点tへ入る量はf(a,t)+f(b,t)=2+3=5であり、値と一致する。
このフローの残余ネットワークでは、sを始点とする順方向残余弧が存在しない。c(s,a)−f(s,a)=0かつc(s,b)−f(s,b)=0であり、sを終点とする弧が無いのでsを始点とする逆方向残余弧も存在しないからである。したがってsから到達可能な頂点はsだけであり、定理 5.1の証明が与えるカットはS={s}である。その容量はc(s,a)+c(s,b)=3+2=5であり、val(f)=5と一致する。
他のs-tカットの容量も数える。S={s,a}ではδ+(S)={(s,b),(a,b),(a,t)}であり容量は2+1+2=5である。S={s,b}ではδ+(S)={(s,a),(b,t)}であり容量は3+3=6である。S={s,a,b}ではδ+(S)={(a,t),(b,t)}であり容量は2+3=5である。いずれも5以上であり、最小カットの容量が5であることと整合する。容量がすべて整数であり、得られたフローも整数値をとるので、系 6.3とも整合する。
8 演習
問題 8.1.
- フローfと頂点w∈Vに対しb(w)=∑a∈δ+(w)f(a)−∑a∈δ−(w)f(a)と置く。s-tカットとは限らない任意の頂点集合S⊆Vについて∑w∈Sb(w)=∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)が成り立つことを示せ。これを用いてval(f)=∑a∈δ−(t)f(a)−∑a∈δ+(t)f(a)を証明し、Sがsとtをともに含む場合と、Sがtを含みsを含まない場合について、∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)をval(f)で表せ。
- フローfに対し、頂点の列s=w0,w1,…,wk=tとDfの残余弧の列r1,…,rkの組であって、各riがwi−1を始点、wiを終点とするものを、sからtへの残余歩道とよぶ。頂点w0,…,wkは相異なるとは限らない。残余歩道Wに現れる残余弧の残余容量の最小値をΔとし、各弧aについて、Wの列r1,…,rkにa+が現れる回数をpa、a−が現れる回数をqaとして、f′(a)=f(a)+(pa−qa)Δと定める。f′が保存則を満たし、∑a∈δ+(s)f′(a)−∑a∈δ−(s)f′(a)=val(f)+Δを満たすことを示せ。次に、f′が容量制約を満たさない例を、具体的なネットワークとフローによって作れ。さらに、Dfにsからtへの残余歩道が存在するならばDfに増加道が存在することを示せ。
- 定理 5.1 (2)⇒(3)で構成したカットSが最小カットであることを、命題 2.2だけを用いて示せ。
- 命題 3.2の有界性の証明は、容量制約の上限f(a)≤c(a)を用いる。各a∈Aでf(a)≥0を満たし、保存則を満たす写像f∈RA全体の集合をF′とする。F′がRAの有界集合であるための必要十分条件は、Dが有向閉路をもたず、sからtへの有向道もtからsへの有向道ももたないことであることを示せ。
- 容量がすべて非負の有理数であるとき、Ford–Fulkerson 法が有限回で停止することを、命題 6.1の証明の不変条件と変量をどう取り替えればよいかを示したうえで証明せよ。
解答.
(1)を示す。S⊆Vとする。各弧はただ一つの始点をもつので、集合δ+(w)(w∈S)は互いに素であり、その和集合は始点がSに属する弧全体ASoutである。同様に、集合δ−(w)(w∈S)は互いに素であり、その和集合は終点がSに属する弧全体ASinである。したがって
w∈S∑b(w)=a∈ASout∑f(a)−a∈ASin∑f(a)である。始点と終点がともにSに属する弧の集合をASと置くと、ASoutはASとδ+(S)の互いに素な和集合であり、ASinはASとδ−(S)の互いに素な和集合である。ゆえに右辺の二つの和に共通するASの上の和が打ち消し合い
w∈S∑b(w)=a∈δ+(S)∑f(a)−a∈δ−(S)∑f(a)を得る。
次に、S=Vとすると、始点か終点がVに属さない弧は存在しないからδ+(V)=δ−(V)=∅であり、∑w∈Vb(w)=0である。保存則によりw∈V∖{s,t}ではb(w)=0であり、値の定義によりb(s)=val(f)であるから、val(f)+b(t)=0である。すなわち
val(f)=−b(t)=a∈δ−(t)∑f(a)−a∈δ+(t)∑f(a)であり、湧点から正味に出る量と吸点へ正味に入る量は等しい。
Sがsとtをともに含むとき、Sのうちs,t以外の頂点ではb=0であるから、示した等式により∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)=b(s)+b(t)=val(f)−val(f)=0である。Sがtを含みsを含まないとき、同様に∑a∈δ+(S)f(a)−∑a∈δ−(S)f(a)=b(t)=−val(f)である。
(2)を示す。i=1,…,kについて、riのもとの弧をaiとし、写像χi:A→Rを、ri=ai+のときχi(ai)=1、ri=ai−のときχi(ai)=−1とし、a=aiではχi(a)=0と定める。paとqaの定義により、各弧aについてf′(a)−f(a)=Δ∑i=1kχi(a)である。f′についてbと同様に定めた量をb′と書き、頂点wについて
βi(w)=a∈δ+(w)∑χi(a)−a∈δ−(w)∑χi(a)と置くと、有限和の順序を入れ替えてb′(w)−b(w)=Δ∑i=1kβi(w)を得る。βi(w)を求める。ri=ai+のときai=(wi−1,wi)であるから、ai∈δ+(wi−1)かつai∈δ−(wi)である。ri=ai−のときai=(wi,wi−1)であるから、ai∈δ+(wi)かつai∈δ−(wi−1)である。残余弧の始点と終点はもとの弧の二つの端点であるからwi−1=wiであり、いずれの場合もβi(w)はw=wi−1のとき1、w=wiのとき−1、それ以外のとき0である。wがwjに等しいとき1、そうでないとき0である数を[w=wj]と書くと、βi(w)=[w=wi−1]−[w=wi]であり
i=1∑kβi(w)=i=1∑k([w=wi−1]−[w=wi])=[w=w0]−[w=wk]である。w0=s、wk=tであるから、w∈V∖{s,t}ならばb′(w)=b(w)=0であり、f′は保存則を満たす。s=tであるからb′(s)=b(s)+Δ=val(f)+Δである。
f′が容量制約を満たさない例を作る。V={s,u,v,t}、A={(s,u),(u,v),(v,u),(v,t)}とし、すべての弧の容量を1とする。各弧で値0をとるフローをfとする。Dfの残余弧は各弧aの順方向残余弧a+だけであり、残余容量はいずれも1である。頂点の列s,u,v,u,v,tと残余弧の列(s,u)+,(u,v)+,(v,u)+,(u,v)+,(v,t)+はsからtへの残余歩道であり、Δ=1である。(u,v)+は二回現れるのでf′(u,v)=0+2⋅1=2であり、f′(u,v)>1=c(u,v)となって容量制約が破れる。ほかの三本の弧ではf′の値は1であり、頂点uに入る量f′(s,u)+f′(v,u)=2と出る量f′(u,v)=2、頂点vに入る量f′(u,v)=2と出る量f′(v,u)+f′(v,t)=2はそれぞれ等しく、前段で示したとおり保存則は保たれる。
最後に、Dfにsからtへの残余歩道が存在するとする。そのうち長さkが最小のものをs=w0,…,wk=t、r1,…,rkとする。ある0≤i<j≤kについてwi=wjであると仮定する。w0=s=t=wkであるから(i,j)=(0,k)であり、頂点の列w0,…,wi,wj+1,…,wkと残余弧の列r1,…,ri,rj+1,…,rkを考える。rj+1の始点はwj=wiであるから、これはsからtへの残余歩道であり、その長さk−(j−i)はkより小さい。これはkの最小性に反する。ゆえにw0,…,wkは相異なり、この残余歩道は増加道である。したがって、Dfにおいて頂点の重複を許してたどってsからtへ至ることができるならば、補題 4.2を適用できる増加道が存在する。
(3)を示す。fを、Dfに増加道が存在しないフローとし、SをDfにおいてsから到達可能な頂点全体とする。本文の証明により、Sはs-tカットであり、val(f)=c(S)が成り立つ。任意のs-tカットS′をとると、命題 2.2をfとS′に適用してval(f)≤c(S′)を得る。したがってc(S)=val(f)≤c(S′)である。S′は任意であったから、Sは容量が最小であるs-tカット、すなわち最小カットである。
(4)を示す。弧の集合B⊆Aと実数λ≥0に対し、a∈Bで値λ、a∈/Bで値0をとる写像をλ1B∈RAと書く。
必要性を対偶で示す。Dが有向閉路v0,v1,…,vk=v0(k≥1、v0,…,vk−1は相異なる)をもつとする。自己ループが無いのでk≥2である。B={(vi−1,vi):1≤i≤k}と置く。Bの弧の始点v0,…,vk−1は相異なり、終点v1,…,vk−1,vk=v0も相異なる。ゆえに、v0,…,vk−1のどれか一つに等しい頂点は、Bの弧のちょうど一本の始点であり、ちょうど一本の終点である。それ以外の頂点はBのどの弧の始点でも終点でもない。したがって、任意のλ≥0と任意の頂点wについて∑a∈δ−(w)λ1B(a)=∑a∈δ+(w)λ1B(a)が成り立ち、λ1B∈F′である。Dがsからtへの有向道s=v0,v1,…,vk=tをもつときは、s=tであるからk≥1であり、B={(vi−1,vi):1≤i≤k}と置く。頂点が相異なるので、v1,…,vk−1はそれぞれBのちょうど一本の弧の始点かつちょうど一本の弧の終点であり、道に現れない頂点はBの弧の端点でない。保存則はs,t以外の頂点でだけ課されるので、λ1B∈F′である。tからsへの有向道をもつときも同様である。いずれの場合もB=∅であり、ρ2(λ1B,0)=λ∣B∣である。任意の点x∈RAとr>0について、中心x、半径rの開球は三角不等式により中心0、半径ρ2(x,0)+rの開球に含まれる。λ>ρ2(x,0)+rと取ればλ1Bはその開球に属さないので、F′はどの開球にも含まれず、有界でない。
十分性を示す。Dが有向閉路をもたず、sからtへの有向道もtからsへの有向道ももたないとする。F′={0}を示せば、F′は有界である。0でないf∈F′が存在すると仮定し、A+={a∈A:f(a)>0}と置くとA+=∅である。まず、w∈V∖{s,t}について、A+のある弧がwを終点とするならば、A+のある弧がwを始点とすることを示す。fの値は非負であるから∑a∈δ−(w)f(a)>0であり、保存則により∑a∈δ+(w)f(a)>0であるから、δ+(w)のある弧でfは正である。同じ論法により、A+のある弧がwを始点とするならば、A+のある弧がwを終点とする。
頂点が相異なる列x0,x1,…,xmであって、1≤i≤mのすべてで(xi−1,xi)∈A+を満たすものを考える。A+の弧の始点と終点の列はこの条件をm=1で満たし、頂点が相異なるのでm≤∣V∣−1である。そこでmが最大のものを一つとる。xm∈/{s,t}と仮定する。(xm−1,xm)∈A+であるから、前段により(xm,y)∈A+を満たす頂点yが存在し、自己ループが無いのでy=xmである。ある0≤i≤m−1についてy=xiならば、xi,xi+1,…,xm,xiは長さm−i+1の閉じた有向歩道であり、xi,…,xmは相異なるのでDの有向閉路である。これは仮定に反する。そうでなければ、列x0,…,xm,yは頂点が相異なりmの最大性に反する。ゆえにxm∈{s,t}である。同様に、x0∈/{s,t}と仮定すると、(x0,x1)∈A+であるから(z,x0)∈A+を満たす頂点z=x0が存在する。ある1≤i≤mについてz=xiならばx0,…,xi,x0はDの有向閉路であり、そうでなければ列z,x0,…,xmはmの最大性に反する。ゆえにx0∈{s,t}である。m≥1であり頂点は相異なるのでx0=xmであり、x0,…,xmはsからtへの有向道、またはtからsへの有向道である。これは仮定に反する。したがってF′={0}である。
たとえばV={s,v,t}、A={(s,v),(v,t)}のネットワークではsからtへの有向道s,v,tがあるので、F′は有界でない。実際、正の実数λに対しf(s,v)=f(v,t)=λと置いた写像はF′に属する。
(5)を示す。各弧aについて、整数ma≥0と正の整数naを用いてc(a)=ma/naと書く。q=∏a∈Anaと置く(A=∅のときはq=1とする)。qは正の整数であり、各弧aについてqc(a)=ma∏b∈A,b=anbは整数である。不変条件を「現在のfはフローであり、各弧aでqf(a)が整数である」に取り替え、変量を
Φq=q(c(S0)−val(f))に取り替える。ここでS0={s}である。
不変条件を示す。初期化では、各弧で値0をとる写像がフローであり、q⋅0=0は整数であるから成り立つ。維持を示す。fが不変条件を満たすとき、各弧aでq(c(a)−f(a))とqf(a)はともに整数である。正の実数xについてqxが整数ならばqx≥1、すなわちx≥1/qであるから、残余容量はいずれも1/q以上であり、q倍すると正の整数になる。増加道PのボトルネックΔ(P)はPに現れる残余弧の残余容量の一つであるから、qΔ(P)は正の整数である。補題 4.2により増加操作の結果f′はフローであり、各弧でqf′(a)はqf(a)、qf(a)+qΔ(P)、qf(a)−qΔ(P)のいずれかであるから整数である。よって不変条件は保たれる。
停止性を示す。qc(S0)=∑a∈δ+(S0)qc(a)は整数の和であるから整数であり、不変条件によりqval(f)=∑a∈δ+(s)qf(a)−∑a∈δ−(s)qf(a)も整数である。命題 2.2によりval(f)≤c(S0)であるから、Φqは非負整数である。本体を一度実行するとval(f)はΔ(P)だけ増え、Φqは正の整数qΔ(P)だけ減るので、Φqは狭義に減少する。したがって§D2.8 命題 1.4により手続きは有限回の反復で停止する。停止時にはDfに増加道が存在しないので、定理 5.1 (2)⇒(1)により停止時のfは最大フローであり、不変条件により各弧でqf(a)は整数である。▨