Article GLIB_005, MML version 4.99.1005
:: GLIB_005:attrnot 1 => GLIB_005:attr 1
definition
let a1 be [Graph-like] [ELabeled] GraphStruct;
attr a1 is complete-elabeled means
proj1 the_ELabel_of a1 = the_Edges_of a1;
end;
:: GLIB_005:dfs 1
definiens
let a1 be [Graph-like] [ELabeled] GraphStruct;
To prove
a1 is complete-elabeled
it is sufficient to prove
thus proj1 the_ELabel_of a1 = the_Edges_of a1;
:: GLIB_005:def 1
theorem
for b1 being [Graph-like] [ELabeled] GraphStruct holds
b1 is complete-elabeled
iff
proj1 the_ELabel_of b1 = the_Edges_of b1;
:: GLIB_005:funcreg 1
registration
let a1 be [Graph-like] GraphStruct;
let a2 be ManySortedSet of the_Edges_of a1;
cluster a1 .set(ELabelSelector,a2) -> complete-elabeled;
end;
:: GLIB_005:funcreg 2
registration
let a1 be [Graph-like] GraphStruct;
let a2 be non empty set;
let a3 be Function-like quasi_total Relation of the_Edges_of a1,a2;
cluster a1 .set(ELabelSelector,a3) -> complete-elabeled;
end;
:: GLIB_005:attrnot 2 => GLIB_005:attr 2
definition
let a1 be Graph-yielding [ELabeled] ManySortedSet of NAT;
attr a1 is complete-elabeled means
for b1 being natural set holds
a1 . b1 is complete-elabeled;
end;
:: GLIB_005:dfs 2
definiens
let a1 be Graph-yielding [ELabeled] ManySortedSet of NAT;
To prove
a1 is complete-elabeled
it is sufficient to prove
thus for b1 being natural set holds
a1 . b1 is complete-elabeled;
:: GLIB_005:def 2
theorem
for b1 being Graph-yielding [ELabeled] ManySortedSet of NAT holds
b1 is complete-elabeled
iff
for b2 being natural set holds
b1 . b2 is complete-elabeled;
:: GLIB_005:attrnot 3 => GLIB_005:attr 3
definition
let a1 be [Graph-like] [Weighted] GraphStruct;
attr a1 is natural-weighted means
the_Weight_of a1 is natural-valued;
end;
:: GLIB_005:dfs 3
definiens
let a1 be [Graph-like] [Weighted] GraphStruct;
To prove
a1 is natural-weighted
it is sufficient to prove
thus the_Weight_of a1 is natural-valued;
:: GLIB_005:def 3
theorem
for b1 being [Graph-like] [Weighted] GraphStruct holds
b1 is natural-weighted
iff
the_Weight_of b1 is natural-valued;
:: GLIB_005:attrnot 4 => GLIB_005:attr 4
definition
let a1 be [Graph-like] [ELabeled] GraphStruct;
attr a1 is natural-elabeled means
the_ELabel_of a1 is natural-valued;
end;
:: GLIB_005:dfs 4
definiens
let a1 be [Graph-like] [ELabeled] GraphStruct;
To prove
a1 is natural-elabeled
it is sufficient to prove
thus the_ELabel_of a1 is natural-valued;
:: GLIB_005:def 4
theorem
for b1 being [Graph-like] [ELabeled] GraphStruct holds
b1 is natural-elabeled
iff
the_ELabel_of b1 is natural-valued;
:: GLIB_005:attrnot 5 => GLIB_005:attr 5
definition
let a1 be Graph-yielding [Weighted] ManySortedSet of NAT;
attr a1 is natural-weighted means
for b1 being natural set holds
a1 . b1 is natural-weighted;
end;
:: GLIB_005:dfs 5
definiens
let a1 be Graph-yielding [Weighted] ManySortedSet of NAT;
To prove
a1 is natural-weighted
it is sufficient to prove
thus for b1 being natural set holds
a1 . b1 is natural-weighted;
:: GLIB_005:def 5
theorem
for b1 being Graph-yielding [Weighted] ManySortedSet of NAT holds
b1 is natural-weighted
iff
for b2 being natural set holds
b1 . b2 is natural-weighted;
:: GLIB_005:attrnot 6 => GLIB_005:attr 6
definition
let a1 be Graph-yielding [ELabeled] ManySortedSet of NAT;
attr a1 is natural-elabeled means
for b1 being natural set holds
a1 . b1 is natural-elabeled;
end;
:: GLIB_005:dfs 6
definiens
let a1 be Graph-yielding [ELabeled] ManySortedSet of NAT;
To prove
a1 is natural-elabeled
it is sufficient to prove
thus for b1 being natural set holds
a1 . b1 is natural-elabeled;
:: GLIB_005:def 6
theorem
for b1 being Graph-yielding [ELabeled] ManySortedSet of NAT holds
b1 is natural-elabeled
iff
for b2 being natural set holds
b1 . b2 is natural-elabeled;
:: GLIB_005:condreg 1
registration
cluster [Graph-like] [Weighted] natural-weighted -> nonnegative-weighted (GraphStruct);
end;
:: GLIB_005:condreg 2
registration
cluster [Graph-like] [ELabeled] natural-elabeled -> real-elabeled (GraphStruct);
end;
:: GLIB_005:exreg 1
registration
cluster Relation-like Function-like finite finite-support [Graph-like] finite trivial Tree-like [Weighted] [ELabeled] [VLabeled] real-vlabeled complete-elabeled natural-weighted natural-elabeled GraphStruct;
end;
:: GLIB_005:exreg 2
registration
cluster Relation-like Function-like Graph-yielding finite [Weighted] [ELabeled] [VLabeled] real-WEV complete-elabeled natural-weighted natural-elabeled ManySortedSet of NAT;
end;
:: GLIB_005:funcreg 3
registration
let a1 be Graph-yielding [ELabeled] complete-elabeled ManySortedSet of NAT;
let a2 be Element of NAT;
cluster a1 . a2 -> [Graph-like] [ELabeled] complete-elabeled;
end;
:: GLIB_005:funcreg 4
registration
let a1 be Graph-yielding [ELabeled] natural-elabeled ManySortedSet of NAT;
let a2 be Element of NAT;
cluster a1 . a2 -> [Graph-like] [ELabeled] natural-elabeled;
end;
:: GLIB_005:funcreg 5
registration
let a1 be Graph-yielding [Weighted] natural-weighted ManySortedSet of NAT;
let a2 be Element of NAT;
cluster a1 . a2 -> [Graph-like] [Weighted] natural-weighted;
end;
:: GLIB_005:funcreg 6
registration
let a1 be [Graph-like] [Weighted] natural-weighted GraphStruct;
cluster the_Weight_of a1 -> natural-valued;
end;
:: GLIB_005:funcreg 7
registration
let a1 be [Graph-like] [ELabeled] natural-elabeled GraphStruct;
cluster the_ELabel_of a1 -> Relation-like Function-like natural-valued;
end;
:: GLIB_005:funcnot 1 => GLIB_005:func 1
definition
let a1 be [Graph-like] [ELabeled] complete-elabeled GraphStruct;
redefine func the_ELabel_of a1 -> ManySortedSet of the_Edges_of a1;
end;
:: GLIB_005:funcreg 8
registration
let a1 be [Graph-like] [Weighted] natural-weighted GraphStruct;
let a2 be set;
cluster a1 .set(ELabelSelector,a2) -> natural-weighted;
end;
:: GLIB_005:funcreg 9
registration
let a1 be [Graph-like] [Weighted] natural-weighted GraphStruct;
let a2 be set;
cluster a1 .set(VLabelSelector,a2) -> natural-weighted;
end;
:: GLIB_005:funcreg 10
registration
let a1 be [Graph-like] GraphStruct;
let a2 be natural-valued ManySortedSet of the_Edges_of a1;
cluster a1 .set(ELabelSelector,a2) -> natural-elabeled;
end;
:: GLIB_005:prednot 1 => GLIB_005:pred 1
definition
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be set;
pred A1 has_valid_flow_from A2,A3 means
a2 is Element of the_Vertices_of a1 &
a3 is Element of the_Vertices_of a1 &
(for b1 being set
st b1 in the_Edges_of a1
holds 0 <= (the_ELabel_of a1) . b1 &
(the_ELabel_of a1) . b1 <= (the_Weight_of a1) . b1) &
(for b1 being Element of the_Vertices_of a1
st b1 <> a2 & b1 <> a3
holds Sum ((the_ELabel_of a1) | (b1 .edgesIn())) = Sum ((the_ELabel_of a1) | (b1 .edgesOut())));
end;
:: GLIB_005:dfs 7
definiens
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be set;
To prove
a1 has_valid_flow_from a2,a3
it is sufficient to prove
thus a2 is Element of the_Vertices_of a1 &
a3 is Element of the_Vertices_of a1 &
(for b1 being set
st b1 in the_Edges_of a1
holds 0 <= (the_ELabel_of a1) . b1 &
(the_ELabel_of a1) . b1 <= (the_Weight_of a1) . b1) &
(for b1 being Element of the_Vertices_of a1
st b1 <> a2 & b1 <> a3
holds Sum ((the_ELabel_of a1) | (b1 .edgesIn())) = Sum ((the_ELabel_of a1) | (b1 .edgesOut())));
:: GLIB_005:def 7
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set holds
b1 has_valid_flow_from b2,b3
iff
b2 is Element of the_Vertices_of b1 &
b3 is Element of the_Vertices_of b1 &
(for b4 being set
st b4 in the_Edges_of b1
holds 0 <= (the_ELabel_of b1) . b4 &
(the_ELabel_of b1) . b4 <= (the_Weight_of b1) . b4) &
(for b4 being Element of the_Vertices_of b1
st b4 <> b2 & b4 <> b3
holds Sum ((the_ELabel_of b1) | (b4 .edgesIn())) = Sum ((the_ELabel_of b1) | (b4 .edgesOut())));
:: GLIB_005:funcnot 2 => GLIB_005:func 2
definition
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be set;
assume a1 has_valid_flow_from a2,a3;
func A1 .flow(A2,A3) -> real set equals
(Sum ((the_ELabel_of a1) | (a1 .edgesInto {a3}))) - Sum ((the_ELabel_of a1) | (a1 .edgesOutOf {a3}));
end;
:: GLIB_005:def 8
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set
st b1 has_valid_flow_from b2,b3
holds b1 .flow(b2,b3) = (Sum ((the_ELabel_of b1) | (b1 .edgesInto {b3}))) - Sum ((the_ELabel_of b1) | (b1 .edgesOutOf {b3}));
:: GLIB_005:prednot 2 => GLIB_005:pred 2
definition
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be set;
pred A1 has_maximum_flow_from A2,A3 means
a1 has_valid_flow_from a2,a3 &
(for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
st b1 == a1 & the_Weight_of a1 = the_Weight_of b1 & b1 has_valid_flow_from a2,a3
holds b1 .flow(a2,a3) <= a1 .flow(a2,a3));
end;
:: GLIB_005:dfs 9
definiens
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be set;
To prove
a1 has_maximum_flow_from a2,a3
it is sufficient to prove
thus a1 has_valid_flow_from a2,a3 &
(for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
st b1 == a1 & the_Weight_of a1 = the_Weight_of b1 & b1 has_valid_flow_from a2,a3
holds b1 .flow(a2,a3) <= a1 .flow(a2,a3));
:: GLIB_005:def 9
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set holds
b1 has_maximum_flow_from b2,b3
iff
b1 has_valid_flow_from b2,b3 &
(for b4 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
st b4 == b1 & the_Weight_of b1 = the_Weight_of b4 & b4 has_valid_flow_from b2,b3
holds b4 .flow(b2,b3) <= b1 .flow(b2,b3));
:: GLIB_005:prednot 3 => GLIB_005:pred 3
definition
let a1 be [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct;
let a2 be set;
pred A2 is_forward_labeling_in A1 means
a2 in the_Edges_of a1 &
(the_Source_of a1) . a2 in a1 .labeledV() &
not (the_Target_of a1) . a2 in a1 .labeledV() &
(the_ELabel_of a1) . a2 < (the_Weight_of a1) . a2;
end;
:: GLIB_005:dfs 10
definiens
let a1 be [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct;
let a2 be set;
To prove
a2 is_forward_labeling_in a1
it is sufficient to prove
thus a2 in the_Edges_of a1 &
(the_Source_of a1) . a2 in a1 .labeledV() &
not (the_Target_of a1) . a2 in a1 .labeledV() &
(the_ELabel_of a1) . a2 < (the_Weight_of a1) . a2;
:: GLIB_005:def 10
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct
for b2 being set holds
b2 is_forward_labeling_in b1
iff
b2 in the_Edges_of b1 &
(the_Source_of b1) . b2 in b1 .labeledV() &
not (the_Target_of b1) . b2 in b1 .labeledV() &
(the_ELabel_of b1) . b2 < (the_Weight_of b1) . b2;
:: GLIB_005:prednot 4 => GLIB_005:pred 4
definition
let a1 be [Graph-like] [ELabeled] [VLabeled] real-elabeled GraphStruct;
let a2 be set;
pred A2 is_backward_labeling_in A1 means
a2 in the_Edges_of a1 & (the_Target_of a1) . a2 in a1 .labeledV() & not (the_Source_of a1) . a2 in a1 .labeledV() & 0 < (the_ELabel_of a1) . a2;
end;
:: GLIB_005:dfs 11
definiens
let a1 be [Graph-like] [ELabeled] [VLabeled] real-elabeled GraphStruct;
let a2 be set;
To prove
a2 is_backward_labeling_in a1
it is sufficient to prove
thus a2 in the_Edges_of a1 & (the_Target_of a1) . a2 in a1 .labeledV() & not (the_Source_of a1) . a2 in a1 .labeledV() & 0 < (the_ELabel_of a1) . a2;
:: GLIB_005:def 11
theorem
for b1 being [Graph-like] [ELabeled] [VLabeled] real-elabeled GraphStruct
for b2 being set holds
b2 is_backward_labeling_in b1
iff
b2 in the_Edges_of b1 & (the_Target_of b1) . b2 in b1 .labeledV() & not (the_Source_of b1) . b2 in b1 .labeledV() & 0 < (the_ELabel_of b1) . b2;
:: GLIB_005:attrnot 7 => GLIB_005:attr 7
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Walk of a1;
attr a2 is augmenting means
for b1 being odd Element of NAT
st b1 < len a2
holds (a2 . (b1 + 1) DJoins a2 . b1,a2 . (b1 + 2),a1 implies (the_ELabel_of a1) . (a2 . (b1 + 1)) < (the_Weight_of a1) . (a2 . (b1 + 1))) &
(not a2 . (b1 + 1) DJoins a2 . b1,a2 . (b1 + 2),a1 implies 0 < (the_ELabel_of a1) . (a2 . (b1 + 1)));
end;
:: GLIB_005:dfs 12
definiens
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Walk of a1;
To prove
a2 is augmenting
it is sufficient to prove
thus for b1 being odd Element of NAT
st b1 < len a2
holds (a2 . (b1 + 1) DJoins a2 . b1,a2 . (b1 + 2),a1 implies (the_ELabel_of a1) . (a2 . (b1 + 1)) < (the_Weight_of a1) . (a2 . (b1 + 1))) &
(not a2 . (b1 + 1) DJoins a2 . b1,a2 . (b1 + 2),a1 implies 0 < (the_ELabel_of a1) . (a2 . (b1 + 1)));
:: GLIB_005:def 12
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Walk of b1 holds
b2 is augmenting(b1)
iff
for b3 being odd Element of NAT
st b3 < len b2
holds (b2 . (b3 + 1) DJoins b2 . b3,b2 . (b3 + 2),b1 implies (the_ELabel_of b1) . (b2 . (b3 + 1)) < (the_Weight_of b1) . (b2 . (b3 + 1))) &
(not b2 . (b3 + 1) DJoins b2 . b3,b2 . (b3 + 2),b1 implies 0 < (the_ELabel_of b1) . (b2 . (b3 + 1)));
:: GLIB_005:condreg 3
registration
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
cluster trivial -> augmenting (Walk of a1);
end;
:: GLIB_005:exreg 3
registration
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
cluster Relation-like Function-like finite FinSequence-like finite-support Trail-like Path-like vertex-distinct augmenting Walk of a1;
end;
:: GLIB_005:funcreg 11
registration
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be augmenting Walk of a1;
let a3, a4 be Element of NAT;
cluster a2 .cut(a3,a4) -> augmenting;
end;
:: GLIB_005:th 1
theorem
for b1, b2 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b3 being Walk of b1
for b4 being Walk of b2
st b3 is augmenting(b1) & b1 == b2 & the_Weight_of b1 = the_Weight_of b2 & the_ELabel_of b1 = the_ELabel_of b2 & b3 = b4
holds b4 is augmenting(b2);
:: GLIB_005:th 2
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being augmenting Walk of b1
for b3, b4 being set
st not b4 in b2 .vertices() &
(b3 DJoins b2 .last(),b4,b1 &
(the_ELabel_of b1) . b3 < (the_Weight_of b1) . b3 or b3 DJoins b4,b2 .last(),b1 & 0 < (the_ELabel_of b1) . b3)
holds b2 .addEdge b3 is augmenting(b1);
:: GLIB_005:funcnot 3 => GLIB_005:func 3
definition
let a1 be [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct;
func AP:NextBestEdges A1 -> Element of bool the_Edges_of a1 means
for b1 being set holds
b1 in it
iff
(b1 is_forward_labeling_in a1 or b1 is_backward_labeling_in a1);
end;
:: GLIB_005:def 13
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of bool the_Edges_of b1 holds
b2 = AP:NextBestEdges b1
iff
for b3 being set holds
b3 in b2
iff
(b3 is_forward_labeling_in b1 or b3 is_backward_labeling_in b1);
:: GLIB_005:funcnot 4 => GLIB_005:func 4
definition
let a1 be [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct;
func AP:Step A1 -> [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct equals
a1
if AP:NextBestEdges a1 = {},
a1 .labelVertex((the_Source_of a1) . choose AP:NextBestEdges a1,choose AP:NextBestEdges a1)
if AP:NextBestEdges a1 <> {} &
not (the_Source_of a1) . choose AP:NextBestEdges a1 in a1 .labeledV()
otherwise a1 .labelVertex((the_Target_of a1) . choose AP:NextBestEdges a1,choose AP:NextBestEdges a1);
end;
:: GLIB_005:def 14
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct holds
(AP:NextBestEdges b1 = {} implies AP:Step b1 = b1) &
(AP:NextBestEdges b1 <> {} &
not (the_Source_of b1) . choose AP:NextBestEdges b1 in b1 .labeledV() implies AP:Step b1 = b1 .labelVertex((the_Source_of b1) . choose AP:NextBestEdges b1,choose AP:NextBestEdges b1)) &
(AP:NextBestEdges b1 <> {} &
(AP:NextBestEdges b1 = {} or (the_Source_of b1) . choose AP:NextBestEdges b1 in b1 .labeledV()) implies AP:Step b1 = b1 .labelVertex((the_Target_of b1) . choose AP:NextBestEdges b1,choose AP:NextBestEdges b1));
:: GLIB_005:funcreg 12
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct;
cluster AP:Step a1 -> [Graph-like] finite [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled;
end;
:: GLIB_005:funcreg 13
registration
let a1 be Graph-yielding [Weighted] [ELabeled] [VLabeled] real-weighted ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted;
end;
:: GLIB_005:funcreg 14
registration
let a1 be Graph-yielding [Weighted] [ELabeled] [VLabeled] real-elabeled ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] [VLabeled] real-elabeled;
end;
:: GLIB_005:funcnot 5 => GLIB_005:func 5
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Element of the_Vertices_of a1;
func AP:CompSeq(A1,A2) -> Graph-yielding [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled ManySortedSet of NAT means
it . 0 = a1 .set(VLabelSelector,a2 .--> 1) &
(for b1 being Element of NAT holds
it . (b1 + 1) = AP:Step (it . b1));
end;
:: GLIB_005:def 15
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1
for b3 being Graph-yielding [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled ManySortedSet of NAT holds
b3 = AP:CompSeq(b1,b2)
iff
b3 . 0 = b1 .set(VLabelSelector,b2 .--> 1) &
(for b4 being Element of NAT holds
b3 . (b4 + 1) = AP:Step (b3 . b4));
:: GLIB_005:funcreg 15
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Element of the_Vertices_of a1;
cluster AP:CompSeq(a1,a2) -> Graph-yielding finite [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled;
end;
:: GLIB_005:th 3
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1 holds
b1 == (AP:CompSeq(b1,b2)) . 0 &
the_Weight_of b1 = the_Weight_of ((AP:CompSeq(b1,b2)) . 0) &
the_ELabel_of b1 = the_ELabel_of ((AP:CompSeq(b1,b2)) . 0) &
((AP:CompSeq(b1,b2)) . 0) .labeledV() = {b2};
:: GLIB_005:th 4
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1
for b3, b4 being Element of NAT
st b3 <= b4
holds ((AP:CompSeq(b1,b2)) . b3) .labeledV() c= ((AP:CompSeq(b1,b2)) . b4) .labeledV();
:: GLIB_005:th 5
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1
for b3 being Element of NAT holds
b1 == (AP:CompSeq(b1,b2)) . b3 &
the_Weight_of b1 = the_Weight_of ((AP:CompSeq(b1,b2)) . b3) &
the_ELabel_of b1 = the_ELabel_of ((AP:CompSeq(b1,b2)) . b3);
:: GLIB_005:funcnot 6 => GLIB_005:func 6
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Element of the_Vertices_of a1;
func AP:FindAugPath(A1,A2) -> [Graph-like] [Weighted] [ELabeled] [VLabeled] real-weighted real-elabeled GraphStruct equals
(AP:CompSeq(a1,a2)) .Result();
end;
:: GLIB_005:def 16
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1 holds
AP:FindAugPath(b1,b2) = (AP:CompSeq(b1,b2)) .Result();
:: GLIB_005:th 6
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1 holds
AP:CompSeq(b1,b2) is halting;
:: GLIB_005:th 7
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1
for b3 being Element of NAT
for b4 being set
st b4 in ((AP:CompSeq(b1,b2)) . b3) .labeledV()
holds (the_VLabel_of ((AP:CompSeq(b1,b2)) . b3)) . b4 = (the_VLabel_of AP:FindAugPath(b1,b2)) . b4;
:: GLIB_005:funcnot 7 => GLIB_005:func 7
definition
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
func AP:GetAugPath(A1,A2,A3) -> Path-like vertex-distinct augmenting Walk of a1 means
it is_Walk_from a2,a3 &
(for b1 being even Element of NAT
st b1 in dom it
holds it . b1 = (the_VLabel_of AP:FindAugPath(a1,a2)) . (it . (b1 + 1)))
if a3 in (AP:FindAugPath(a1,a2)) .labeledV()
otherwise it = a1 .walkOf a2;
end;
:: GLIB_005:def 17
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2, b3 being Element of the_Vertices_of b1
for b4 being Path-like vertex-distinct augmenting Walk of b1 holds
(b3 in (AP:FindAugPath(b1,b2)) .labeledV() implies (b4 = AP:GetAugPath(b1,b2,b3)
iff
b4 is_Walk_from b2,b3 &
(for b5 being even Element of NAT
st b5 in dom b4
holds b4 . b5 = (the_VLabel_of AP:FindAugPath(b1,b2)) . (b4 . (b5 + 1))))) &
(b3 in (AP:FindAugPath(b1,b2)) .labeledV() or (b4 = AP:GetAugPath(b1,b2,b3)
iff
b4 = b1 .walkOf b2));
:: GLIB_005:th 8
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1
for b3 being Element of NAT
for b4 being set
st b4 in ((AP:CompSeq(b1,b2)) . b3) .labeledV()
holds ex b5 being Path-like Walk of b1 st
b5 is augmenting(b1) &
b5 is_Walk_from b2,b4 &
b5 .vertices() c= ((AP:CompSeq(b1,b2)) . b3) .labeledV();
:: GLIB_005:th 9
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1
for b3 being set holds
b3 in (AP:FindAugPath(b1,b2)) .labeledV()
iff
ex b4 being Path-like Walk of b1 st
b4 is augmenting(b1) & b4 is_Walk_from b2,b3;
:: GLIB_005:th 10
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Element of the_Vertices_of b1 holds
b2 in (AP:FindAugPath(b1,b2)) .labeledV() & b1 == AP:FindAugPath(b1,b2) & the_Weight_of b1 = the_Weight_of AP:FindAugPath(b1,b2) & the_ELabel_of b1 = the_ELabel_of AP:FindAugPath(b1,b2);
:: GLIB_005:funcnot 8 => GLIB_005:func 8
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be augmenting Walk of a1;
func A2 .flowSeq() -> FinSequence of REAL means
dom it = dom (a2 .edgeSeq()) &
(for b1 being Element of NAT
st b1 in dom it
holds (a2 . (2 * b1) DJoins a2 . ((2 * b1) - 1),a2 . ((2 * b1) + 1),a1 implies it . b1 = ((the_Weight_of a1) . (a2 . (2 * b1))) - ((the_ELabel_of a1) . (a2 . (2 * b1)))) &
(a2 . (2 * b1) DJoins a2 . ((2 * b1) - 1),a2 . ((2 * b1) + 1),a1 or it . b1 = (the_ELabel_of a1) . (a2 . (2 * b1))));
end;
:: GLIB_005:def 18
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being augmenting Walk of b1
for b3 being FinSequence of REAL holds
b3 = b2 .flowSeq()
iff
dom b3 = dom (b2 .edgeSeq()) &
(for b4 being Element of NAT
st b4 in dom b3
holds (b2 . (2 * b4) DJoins b2 . ((2 * b4) - 1),b2 . ((2 * b4) + 1),b1 implies b3 . b4 = ((the_Weight_of b1) . (b2 . (2 * b4))) - ((the_ELabel_of b1) . (b2 . (2 * b4)))) &
(b2 . (2 * b4) DJoins b2 . ((2 * b4) - 1),b2 . ((2 * b4) + 1),b1 or b3 . b4 = (the_ELabel_of b1) . (b2 . (2 * b4))));
:: GLIB_005:funcnot 9 => GLIB_005:func 9
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be augmenting Walk of a1;
func A2 .tolerance() -> Element of REAL means
it in rng (a2 .flowSeq()) &
(for b1 being Element of REAL
st b1 in rng (a2 .flowSeq())
holds it <= b1)
if a2 is not trivial(a1)
otherwise it = 0;
end;
:: GLIB_005:def 19
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being augmenting Walk of b1
for b3 being Element of REAL holds
(b2 is trivial(b1) or (b3 = b2 .tolerance()
iff
b3 in rng (b2 .flowSeq()) &
(for b4 being Element of REAL
st b4 in rng (b2 .flowSeq())
holds b3 <= b4))) &
(b2 is trivial(b1) implies (b3 = b2 .tolerance()
iff
b3 = 0));
:: GLIB_005:funcnot 10 => GLIB_005:func 10
definition
let a1 be [Graph-like] [Weighted] [ELabeled] natural-weighted natural-elabeled GraphStruct;
let a2 be augmenting Walk of a1;
redefine func a2 .tolerance() -> Element of NAT;
end;
:: GLIB_005:funcnot 11 => GLIB_005:func 11
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
func FF:PushFlow(A1,A2) -> ManySortedSet of the_Edges_of a1 means
(for b1 being set
st b1 in the_Edges_of a1 & not b1 in a2 .edges()
holds it . b1 = (the_ELabel_of a1) . b1) &
(for b1 being odd Element of NAT
st b1 < len a2
holds (a2 . (b1 + 1) DJoins a2 . b1,a2 . (b1 + 2),a1 implies it . (a2 . (b1 + 1)) = ((the_ELabel_of a1) . (a2 . (b1 + 1))) + (a2 .tolerance())) &
(a2 . (b1 + 1) DJoins a2 . b1,a2 . (b1 + 2),a1 or it . (a2 . (b1 + 1)) = ((the_ELabel_of a1) . (a2 . (b1 + 1))) - (a2 .tolerance())));
end;
:: GLIB_005:def 20
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Path-like augmenting Walk of b1
for b3 being ManySortedSet of the_Edges_of b1 holds
b3 = FF:PushFlow(b1,b2)
iff
(for b4 being set
st b4 in the_Edges_of b1 & not b4 in b2 .edges()
holds b3 . b4 = (the_ELabel_of b1) . b4) &
(for b4 being odd Element of NAT
st b4 < len b2
holds (b2 . (b4 + 1) DJoins b2 . b4,b2 . (b4 + 2),b1 implies b3 . (b2 . (b4 + 1)) = ((the_ELabel_of b1) . (b2 . (b4 + 1))) + (b2 .tolerance())) &
(b2 . (b4 + 1) DJoins b2 . b4,b2 . (b4 + 2),b1 or b3 . (b2 . (b4 + 1)) = ((the_ELabel_of b1) . (b2 . (b4 + 1))) - (b2 .tolerance())));
:: GLIB_005:funcreg 16
registration
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
cluster FF:PushFlow(a1,a2) -> real-valued;
end;
:: GLIB_005:funcreg 17
registration
let a1 be [Graph-like] [Weighted] [ELabeled] natural-weighted natural-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
cluster FF:PushFlow(a1,a2) -> natural-valued;
end;
:: GLIB_005:funcnot 12 => GLIB_005:func 12
definition
let a1 be [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
func FF:AugmentPath(A1,A2) -> [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct equals
a1 .set(ELabelSelector,FF:PushFlow(a1,a2));
end;
:: GLIB_005:def 21
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Path-like augmenting Walk of b1 holds
FF:AugmentPath(b1,b2) = b1 .set(ELabelSelector,FF:PushFlow(b1,b2));
:: GLIB_005:funcreg 18
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
cluster FF:AugmentPath(a1,a2) -> [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled;
end;
:: GLIB_005:funcreg 19
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] nonnegative-weighted real-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
cluster FF:AugmentPath(a1,a2) -> [Graph-like] [Weighted] [ELabeled] real-weighted nonnegative-weighted real-elabeled complete-elabeled;
end;
:: GLIB_005:funcreg 20
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] natural-weighted natural-elabeled GraphStruct;
let a2 be Path-like augmenting Walk of a1;
cluster FF:AugmentPath(a1,a2) -> [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled natural-weighted natural-elabeled;
end;
:: GLIB_005:funcnot 13 => GLIB_005:func 13
definition
let a1 be [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
func FF:Step(A1,A3,A2) -> [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct equals
FF:AugmentPath(a1,AP:GetAugPath(a1,a3,a2))
if a2 in (AP:FindAugPath(a1,a3)) .labeledV()
otherwise a1;
end;
:: GLIB_005:def 22
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being Element of the_Vertices_of b1 holds
(b2 in (AP:FindAugPath(b1,b3)) .labeledV() implies FF:Step(b1,b3,b2) = FF:AugmentPath(b1,AP:GetAugPath(b1,b3,b2))) &
(b2 in (AP:FindAugPath(b1,b3)) .labeledV() or FF:Step(b1,b3,b2) = b1);
:: GLIB_005:funcreg 21
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] nonnegative-weighted real-elabeled complete-elabeled GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
cluster FF:Step(a1,a2,a3) -> [Graph-like] finite [Weighted] [ELabeled] real-weighted nonnegative-weighted real-elabeled complete-elabeled;
end;
:: GLIB_005:funcreg 22
registration
let a1 be [Graph-like] finite [Weighted] [ELabeled] complete-elabeled natural-weighted natural-elabeled GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
cluster FF:Step(a1,a2,a3) -> [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled natural-weighted natural-elabeled;
end;
:: GLIB_005:funcnot 14 => GLIB_005:func 14
definition
let a1 be Graph-yielding [Weighted] [ELabeled] ManySortedSet of NAT;
let a2 be natural set;
redefine func a1 . a2 -> [Graph-like] [Weighted] [ELabeled] GraphStruct;
end;
:: GLIB_005:funcreg 23
registration
let a1 be Graph-yielding finite [Weighted] [ELabeled] ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] finite [Weighted] [ELabeled];
end;
:: GLIB_005:funcreg 24
registration
let a1 be Graph-yielding [Weighted] [ELabeled] real-weighted ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] real-weighted;
end;
:: GLIB_005:funcreg 25
registration
let a1 be Graph-yielding [Weighted] [ELabeled] real-elabeled ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] real-elabeled;
end;
:: GLIB_005:funcreg 26
registration
let a1 be Graph-yielding [Weighted] [ELabeled] complete-elabeled ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] complete-elabeled;
end;
:: GLIB_005:funcnot 15 => GLIB_005:func 15
definition
let a1 be [Graph-like] finite [Weighted] real-weighted GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
func FF:CompSeq(A1,A2,A3) -> Graph-yielding finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled ManySortedSet of NAT means
it . 0 = a1 .set(ELabelSelector,(the_Edges_of a1) --> 0) &
(for b1 being natural set holds
ex b2, b3 being Element of the_Vertices_of (it . b1) st
b2 = a2 &
b3 = a3 &
it . (b1 + 1) = FF:Step(it . b1,b2,b3));
end;
:: GLIB_005:def 23
theorem
for b1 being [Graph-like] finite [Weighted] real-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1
for b4 being Graph-yielding finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled ManySortedSet of NAT holds
b4 = FF:CompSeq(b1,b2,b3)
iff
b4 . 0 = b1 .set(ELabelSelector,(the_Edges_of b1) --> 0) &
(for b5 being natural set holds
ex b6, b7 being Element of the_Vertices_of (b4 . b5) st
b6 = b2 &
b7 = b3 &
b4 . (b5 + 1) = FF:Step(b4 . b5,b6,b7));
:: GLIB_005:funcreg 27
registration
let a1 be [Graph-like] finite [Weighted] nonnegative-weighted GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
cluster FF:CompSeq(a1,a3,a2) -> Graph-yielding finite [Weighted] [ELabeled] real-weighted nonnegative-weighted real-elabeled complete-elabeled;
end;
:: GLIB_005:funcreg 28
registration
let a1 be [Graph-like] finite [Weighted] natural-weighted GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
cluster FF:CompSeq(a1,a3,a2) -> Graph-yielding finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled natural-weighted natural-elabeled;
end;
:: GLIB_005:funcnot 16 => GLIB_005:func 16
definition
let a1 be [Graph-like] finite [Weighted] real-weighted GraphStruct;
let a2, a3 be Element of the_Vertices_of a1;
func FF:MaxFlow(A1,A3,A2) -> [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct equals
(FF:CompSeq(a1,a3,a2)) .Result();
end;
:: GLIB_005:def 24
theorem
for b1 being [Graph-like] finite [Weighted] real-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1 holds
FF:MaxFlow(b1,b3,b2) = (FF:CompSeq(b1,b3,b2)) .Result();
:: GLIB_005:th 11
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set
for b4 being Element of bool the_Vertices_of b1
st b1 has_valid_flow_from b2,b3 & b2 in b4 & not b3 in b4
holds b1 .flow(b2,b3) = (Sum ((the_ELabel_of b1) | (b1 .edgesDBetween(b4,(the_Vertices_of b1) \ b4)))) - Sum ((the_ELabel_of b1) | (b1 .edgesDBetween((the_Vertices_of b1) \ b4,b4)));
:: GLIB_005:th 12
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set
for b4 being Element of bool the_Vertices_of b1
st b1 has_valid_flow_from b2,b3 & b2 in b4 & not b3 in b4
holds b1 .flow(b2,b3) <= Sum ((the_Weight_of b1) | (b1 .edgesDBetween(b4,(the_Vertices_of b1) \ b4)));
:: GLIB_005:th 13
theorem
for b1 being [Graph-like] [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being Path-like augmenting Walk of b1 holds
b1 == FF:AugmentPath(b1,b2) & the_Weight_of b1 = the_Weight_of FF:AugmentPath(b1,b2);
:: GLIB_005:th 14
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled GraphStruct
for b2 being augmenting Walk of b1
st b2 is not trivial(b1)
holds 0 < b2 .tolerance();
:: GLIB_005:th 15
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set
for b4 being Path-like augmenting Walk of b1
st b2 <> b3 & b1 has_valid_flow_from b2,b3 & b4 is_Walk_from b2,b3
holds FF:AugmentPath(b1,b4) has_valid_flow_from b2,b3;
:: GLIB_005:th 16
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set
for b4 being Path-like augmenting Walk of b1
st b2 <> b3 & b1 has_valid_flow_from b2,b3 & b4 is_Walk_from b2,b3
holds (b1 .flow(b2,b3)) + (b4 .tolerance()) = (FF:AugmentPath(b1,b4)) .flow(b2,b3);
:: GLIB_005:th 17
theorem
for b1 being [Graph-like] finite [Weighted] real-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1
for b4 being Element of NAT holds
(FF:CompSeq(b1,b2,b3)) . b4 == b1 &
the_Weight_of b1 = the_Weight_of ((FF:CompSeq(b1,b2,b3)) . b4);
:: GLIB_005:th 18
theorem
for b1 being [Graph-like] finite [Weighted] nonnegative-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1
for b4 being Element of NAT
st b2 <> b3
holds (FF:CompSeq(b1,b2,b3)) . b4 has_valid_flow_from b2,b3;
:: GLIB_005:funcreg 29
registration
let a1 be Graph-yielding [Weighted] [ELabeled] natural-weighted ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] natural-weighted;
end;
:: GLIB_005:funcreg 30
registration
let a1 be Graph-yielding [Weighted] [ELabeled] natural-elabeled ManySortedSet of NAT;
let a2 be natural set;
cluster a1 . a2 -> [Graph-like] [Weighted] [ELabeled] natural-elabeled;
end;
:: GLIB_005:th 19
theorem
for b1 being [Graph-like] finite [Weighted] natural-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1
st b2 <> b3
holds FF:CompSeq(b1,b2,b3) is halting;
:: GLIB_005:th 20
theorem
for b1 being [Graph-like] finite [Weighted] [ELabeled] real-weighted real-elabeled complete-elabeled GraphStruct
for b2, b3 being set
st b2 <> b3 &
b1 has_valid_flow_from b2,b3 &
(for b4 being Path-like augmenting Walk of b1 holds
not b4 is_Walk_from b2,b3)
holds b1 has_maximum_flow_from b2,b3;
:: GLIB_005:th 21
theorem
for b1 being [Graph-like] finite [Weighted] real-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1 holds
b1 == FF:MaxFlow(b1,b2,b3) & the_Weight_of b1 = the_Weight_of FF:MaxFlow(b1,b2,b3);
:: GLIB_005:th 22
theorem
for b1 being [Graph-like] finite [Weighted] natural-weighted GraphStruct
for b2, b3 being Element of the_Vertices_of b1
st b3 <> b2
holds FF:MaxFlow(b1,b2,b3) has_maximum_flow_from b2,b3;