:: GLIB_002 semantic presentation

registration
let c1 be finite set ;
cluster bool a1 -> finite ;
coherence
bool c1 is finite
by FINSET_1:24;
end;

theorem Th1: :: GLIB_002:1
for b1 being finite set st 1 < card b1 holds
ex b2, b3 being set st
( b2 in b1 & b3 in b1 & b2 <> b3 )
proof end;

definition
let c1 be _Graph;
attr a1 is connected means :Def1: :: GLIB_002:def 1
for b1, b2 being Vertex of a1 ex b3 being Walk of a1 st b3 is_Walk_from b1,b2;
end;

:: deftheorem Def1 defines connected GLIB_002:def 1 :
for b1 being _Graph holds
( b1 is connected iff for b2, b3 being Vertex of b1 ex b4 being Walk of b1 st b4 is_Walk_from b2,b3 );

definition
let c1 be _Graph;
attr a1 is acyclic means :Def2: :: GLIB_002:def 2
for b1 being Walk of a1 holds not b1 is Cycle-like;
end;

:: deftheorem Def2 defines acyclic GLIB_002:def 2 :
for b1 being _Graph holds
( b1 is acyclic iff for b2 being Walk of b1 holds not b2 is Cycle-like );

definition
let c1 be _Graph;
attr a1 is Tree-like means :Def3: :: GLIB_002:def 3
( a1 is acyclic & a1 is connected );
end;

:: deftheorem Def3 defines Tree-like GLIB_002:def 3 :
for b1 being _Graph holds
( b1 is Tree-like iff ( b1 is acyclic & b1 is connected ) );

registration
cluster trivial -> connected GraphStruct ;
coherence
for b1 being _Graph st b1 is trivial holds
b1 is connected
proof end;
end;

registration
cluster loopless trivial -> Tree-like GraphStruct ;
coherence
for b1 being _Graph st b1 is trivial & b1 is loopless holds
b1 is Tree-like
proof end;
end;

registration
cluster acyclic -> simple GraphStruct ;
coherence
for b1 being _Graph st b1 is acyclic holds
b1 is simple
proof end;
end;

registration
cluster Tree-like -> simple connected acyclic GraphStruct ;
coherence
for b1 being _Graph st b1 is Tree-like holds
( b1 is acyclic & b1 is connected )
by Def3;
end;

registration
cluster connected acyclic -> simple connected acyclic Tree-like GraphStruct ;
coherence
for b1 being _Graph st b1 is acyclic & b1 is connected holds
b1 is Tree-like
by Def3;
end;

registration
let c1 be _Graph;
let c2 be Vertex of c1;
cluster -> Tree-like inducedSubgraph of a1,{a2}, {} ;
coherence
for b1 being inducedSubgraph of c1,{c2}, {} holds b1 is Tree-like
;
end;

definition
let c1 be _Graph;
let c2 be set ;
pred c1 is_DTree_rooted_at c2 means :Def4: :: GLIB_002:def 4
( a1 is Tree-like & ( for b1 being Vertex of a1 ex b2 being DWalk of a1 st b2 is_Walk_from a2,b1 ) );
end;

:: deftheorem Def4 defines is_DTree_rooted_at GLIB_002:def 4 :
for b1 being _Graph
for b2 being set holds
( b1 is_DTree_rooted_at b2 iff ( b1 is Tree-like & ( for b3 being Vertex of b1 ex b4 being DWalk of b1 st b4 is_Walk_from b2,b3 ) ) );

registration
cluster finite trivial simple connected acyclic Tree-like GraphStruct ;
existence
ex b1 being _Graph st
( b1 is trivial & b1 is finite & b1 is Tree-like )
proof end;
cluster finite non trivial simple connected acyclic Tree-like GraphStruct ;
existence
ex b1 being _Graph st
( not b1 is trivial & b1 is finite & b1 is Tree-like )
proof end;
end;

registration
let c1 be _Graph;
cluster finite trivial simple connected acyclic Tree-like Subgraph of a1;
existence
ex b1 being Subgraph of c1 st
( b1 is trivial & b1 is finite & b1 is Tree-like )
proof end;
end;

registration
let c1 be acyclic _Graph;
cluster -> acyclic Subgraph of a1;
coherence
for b1 being Subgraph of c1 holds b1 is acyclic
proof end;
end;

definition
let c1 be _Graph;
let c2 be Vertex of c1;
func c1 .reachableFrom c2 -> non empty Subset of (the_Vertices_of a1) means :Def5: :: GLIB_002:def 5
for b1 being set holds
( b1 in a3 iff ex b2 being Walk of a1 st b2 is_Walk_from a2,b1 );
existence
ex b1 being non empty Subset of (the_Vertices_of c1) st
for b2 being set holds
( b2 in b1 iff ex b3 being Walk of c1 st b3 is_Walk_from c2,b2 )
proof end;
uniqueness
for b1, b2 being non empty Subset of (the_Vertices_of c1) st ( for b3 being set holds
( b3 in b1 iff ex b4 being Walk of c1 st b4 is_Walk_from c2,b3 ) ) & ( for b3 being set holds
( b3 in b2 iff ex b4 being Walk of c1 st b4 is_Walk_from c2,b3 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines .reachableFrom GLIB_002:def 5 :
for b1 being _Graph
for b2 being Vertex of b1
for b3 being non empty Subset of (the_Vertices_of b1) holds
( b3 = b1 .reachableFrom b2 iff for b4 being set holds
( b4 in b3 iff ex b5 being Walk of b1 st b5 is_Walk_from b2,b4 ) );

definition
let c1 be _Graph;
let c2 be Vertex of c1;
func c1 .reachableDFrom c2 -> non empty Subset of (the_Vertices_of a1) means :Def6: :: GLIB_002:def 6
for b1 being set holds
( b1 in a3 iff ex b2 being DWalk of a1 st b2 is_Walk_from a2,b1 );
existence
ex b1 being non empty Subset of (the_Vertices_of c1) st
for b2 being set holds
( b2 in b1 iff ex b3 being DWalk of c1 st b3 is_Walk_from c2,b2 )
proof end;
uniqueness
for b1, b2 being non empty Subset of (the_Vertices_of c1) st ( for b3 being set holds
( b3 in b1 iff ex b4 being DWalk of c1 st b4 is_Walk_from c2,b3 ) ) & ( for b3 being set holds
( b3 in b2 iff ex b4 being DWalk of c1 st b4 is_Walk_from c2,b3 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines .reachableDFrom GLIB_002:def 6 :
for b1 being _Graph
for b2 being Vertex of b1
for b3 being non empty Subset of (the_Vertices_of b1) holds
( b3 = b1 .reachableDFrom b2 iff for b4 being set holds
( b4 in b3 iff ex b5 being DWalk of b1 st b5 is_Walk_from b2,b4 ) );

Lemma8: for b1 being _Graph
for b2 being Vertex of b1 holds b2 in b1 .reachableFrom b2
proof end;

Lemma9: for b1 being _Graph
for b2 being Vertex of b1
for b3, b4, b5 being set st b4 in b1 .reachableFrom b2 & b3 Joins b4,b5,b1 holds
b5 in b1 .reachableFrom b2
proof end;

Lemma10: for b1 being _Graph
for b2, b3 being Vertex of b1 st b2 in b1 .reachableFrom b3 holds
b1 .reachableFrom b2 = b1 .reachableFrom b3
proof end;

Lemma11: for b1 being _Graph
for b2 being Walk of b1
for b3 being Vertex of b1 st b3 in b2 .vertices() holds
b2 .vertices() c= b1 .reachableFrom b3
proof end;

definition
let c1 be _Graph;
let c2 be Subgraph of c1;
attr a2 is Component-like means :Def7: :: GLIB_002:def 7
( a2 is connected & ( for b1 being connected Subgraph of a1 holds not a2 c< b1 ) );
end;

:: deftheorem Def7 defines Component-like GLIB_002:def 7 :
for b1 being _Graph
for b2 being Subgraph of b1 holds
( b2 is Component-like iff ( b2 is connected & ( for b3 being connected Subgraph of b1 holds not b2 c< b3 ) ) );

registration
let c1 be _Graph;
cluster Component-like -> connected Subgraph of a1;
coherence
for b1 being Subgraph of c1 st b1 is Component-like holds
b1 is connected
by Def7;
end;

registration
let c1 be _Graph;
let c2 be Vertex of c1;
cluster -> connected Component-like inducedSubgraph of a1,a1 .reachableFrom a2,a1 .edgesBetween (a1 .reachableFrom a2);
coherence
for b1 being inducedSubgraph of c1,(c1 .reachableFrom c2) holds b1 is Component-like
proof end;
end;

registration
let c1 be _Graph;
cluster connected Component-like Subgraph of a1;
existence
ex b1 being Subgraph of c1 st b1 is Component-like
proof end;
end;

definition
let c1 be _Graph;
mode Component of a1 is Component-like Subgraph of a1;
end;

definition
let c1 be _Graph;
func c1 .componentSet() -> non empty Subset-Family of (the_Vertices_of a1) means :Def8: :: GLIB_002:def 8
for b1 being set holds
( b1 in a2 iff ex b2 being Vertex of a1 st b1 = a1 .reachableFrom b2 );
existence
ex b1 being non empty Subset-Family of (the_Vertices_of c1) st
for b2 being set holds
( b2 in b1 iff ex b3 being Vertex of c1 st b2 = c1 .reachableFrom b3 )
proof end;
uniqueness
for b1, b2 being non empty Subset-Family of (the_Vertices_of c1) st ( for b3 being set holds
( b3 in b1 iff ex b4 being Vertex of c1 st b3 = c1 .reachableFrom b4 ) ) & ( for b3 being set holds
( b3 in b2 iff ex b4 being Vertex of c1 st b3 = c1 .reachableFrom b4 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def8 defines .componentSet() GLIB_002:def 8 :
for b1 being _Graph
for b2 being non empty Subset-Family of (the_Vertices_of b1) holds
( b2 = b1 .componentSet() iff for b3 being set holds
( b3 in b2 iff ex b4 being Vertex of b1 st b3 = b1 .reachableFrom b4 ) );

registration
let c1 be _Graph;
let c2 be Element of c1 .componentSet() ;
cluster -> connected Component-like inducedSubgraph of a1,a2,a1 .edgesBetween a2;
coherence
for b1 being inducedSubgraph of c1,c2 holds b1 is Component-like
proof end;
end;

definition
let c1 be _Graph;
func c1 .numComponents() -> Cardinal equals :: GLIB_002:def 9
Card (a1 .componentSet() );
coherence
Card (c1 .componentSet() ) is Cardinal
;
end;

:: deftheorem Def9 defines .numComponents() GLIB_002:def 9 :
for b1 being _Graph holds b1 .numComponents() = Card (b1 .componentSet() );

definition
let c1 be finite _Graph;
redefine func .numComponents() as c1 .numComponents() -> non empty Nat;
coherence
c1 .numComponents() is non empty Nat
proof end;
end;

definition
let c1 be _Graph;
let c2 be Vertex of c1;
attr a2 is cut-vertex means :Def10: :: GLIB_002:def 10
for b1 being removeVertex of a1,a2 holds a1 .numComponents() <` b1 .numComponents() ;
end;

:: deftheorem Def10 defines cut-vertex GLIB_002:def 10 :
for b1 being _Graph
for b2 being Vertex of b1 holds
( b2 is cut-vertex iff for b3 being removeVertex of b1,b2 holds b1 .numComponents() <` b3 .numComponents() );

definition
let c1 be finite _Graph;
let c2 be Vertex of c1;
redefine attr a2 is cut-vertex means :Def11: :: GLIB_002:def 11
for b1 being removeVertex of a1,a2 holds a1 .numComponents() < b1 .numComponents() ;
compatibility
( c2 is cut-vertex iff for b1 being removeVertex of c1,c2 holds c1 .numComponents() < b1 .numComponents() )
proof end;
end;

:: deftheorem Def11 defines cut-vertex GLIB_002:def 11 :
for b1 being finite _Graph
for b2 being Vertex of b1 holds
( b2 is cut-vertex iff for b3 being removeVertex of b1,b2 holds b1 .numComponents() < b3 .numComponents() );

Lemma16: for b1 being non trivial connected _Graph
for b2 being Vertex of b1
for b3 being removeVertex of b1,b2 st b2 is endvertex holds
b3 is connected
proof end;

Lemma17: for b1 being _Graph st ex b2 being Vertex of b1 st
for b3 being Vertex of b1 ex b4 being Walk of b1 st b4 is_Walk_from b2,b3 holds
b1 is connected
proof end;

Lemma18: for b1 being _Graph st ex b2 being Vertex of b1 st b1 .reachableFrom b2 = the_Vertices_of b1 holds
b1 is connected
proof end;

Lemma19: for b1 being _Graph st b1 is connected holds
for b2 being Vertex of b1 holds b1 .reachableFrom b2 = the_Vertices_of b1
proof end;

Lemma20: for b1, b2 being _Graph
for b3 being Vertex of b1
for b4 being Vertex of b2 st b1 == b2 & b3 = b4 holds
b1 .reachableFrom b3 = b2 .reachableFrom b4
proof end;

Lemma21: for b1 being _Graph
for b2 being connected Subgraph of b1 st b2 is spanning holds
b1 is connected
proof end;

Lemma22: for b1 being _Graph holds
( b1 is connected iff b1 .componentSet() = {(the_Vertices_of b1)} )
proof end;

Lemma23: for b1, b2 being _Graph st b1 == b2 holds
b1 .componentSet() = b2 .componentSet()
proof end;

Lemma24: for b1 being _Graph
for b2 being set st b2 in b1 .componentSet() holds
b2 is non empty Subset of (the_Vertices_of b1)
proof end;

Lemma25: for b1 being _Graph
for b2 being Component of b1 holds the_Edges_of b2 = b1 .edgesBetween (the_Vertices_of b2)
proof end;

Lemma26: for b1 being _Graph
for b2, b3 being Component of b1 holds
( the_Vertices_of b2 = the_Vertices_of b3 iff b2 == b3 )
proof end;

Lemma27: for b1 being _Graph
for b2 being Component of b1
for b3 being Vertex of b1 holds
( b3 in the_Vertices_of b2 iff the_Vertices_of b2 = b1 .reachableFrom b3 )
proof end;

Lemma28: for b1 being _Graph
for b2, b3 being Component of b1
for b4 being set st b4 in the_Vertices_of b2 & b4 in the_Vertices_of b3 holds
b2 == b3
proof end;

Lemma29: for b1 being _Graph holds
( b1 is connected iff b1 .numComponents() = 1 )
proof end;

Lemma30: for b1, b2 being _Graph st b1 == b2 holds
b1 .numComponents() = b2 .numComponents()
by Lemma23;

Lemma31: for b1 being connected _Graph
for b2 being Vertex of b1 holds
( not b2 is cut-vertex iff for b3 being removeVertex of b1,b2 holds b3 .numComponents() <=` b1 .numComponents() )
proof end;

Lemma32: for b1 being connected _Graph
for b2 being Vertex of b1
for b3 being removeVertex of b1,b2 st not b2 is cut-vertex holds
b3 is connected
proof end;

Lemma33: for b1 being finite non trivial connected _Graph ex b2, b3 being Vertex of b1 st
( b2 <> b3 & not b2 is cut-vertex & not b3 is cut-vertex )
proof end;

registration
let c1 be finite non trivial connected _Graph;
cluster non cut-vertex Element of the_Vertices_of a1;
existence
not for b1 being Vertex of c1 holds b1 is cut-vertex
proof end;
end;

Lemma34: for b1 being acyclic _Graph
for b2 being Path of b1
for b3 being set st not b3 in b2 .edges() & b3 in (b2 .last() ) .edgesInOut() holds
b2 .addEdge b3 is Path-like
proof end;

Lemma35: for b1 being finite non trivial acyclic _Graph st the_Edges_of b1 <> {} holds
ex b2, b3 being Vertex of b1 st
( b2 <> b3 & b2 is endvertex & b3 is endvertex & b3 in b1 .reachableFrom b2 )
proof end;

Lemma36: for b1 being finite non trivial Tree-like _Graph ex b2, b3 being Vertex of b1 st
( b2 <> b3 & b2 is endvertex & b3 is endvertex )
proof end;

registration
let c1 be finite non trivial Tree-like _Graph;
cluster endvertex Element of the_Vertices_of a1;
existence
ex b1 being Vertex of c1 st b1 is endvertex
proof end;
end;

registration
let c1 be finite non trivial Tree-like _Graph;
let c2 be endvertex Vertex of c1;
cluster -> acyclic Tree-like inducedSubgraph of a1,K132((the_Vertices_of a1),{a2}),a1 .edgesBetween K132((the_Vertices_of a1),{a2});
coherence
for b1 being removeVertex of c1,c2 holds b1 is Tree-like
proof end;
end;

definition
let c1 be GraphSeq;
attr a1 is connected means :Def12: :: GLIB_002:def 12
for b1 being Nat holds a1 .-> b1 is connected;
attr a1 is acyclic means :Def13: :: GLIB_002:def 13
for b1 being Nat holds a1 .-> b1 is acyclic;
attr a1 is Tree-like means :Def14: :: GLIB_002:def 14
for b1 being Nat holds a1 .-> b1 is Tree-like;
end;

:: deftheorem Def12 defines connected GLIB_002:def 12 :
for b1 being GraphSeq holds
( b1 is connected iff for b2 being Nat holds b1 .-> b2 is connected );

:: deftheorem Def13 defines acyclic GLIB_002:def 13 :
for b1 being GraphSeq holds
( b1 is acyclic iff for b2 being Nat holds b1 .-> b2 is acyclic );

:: deftheorem Def14 defines Tree-like GLIB_002:def 14 :
for b1 being GraphSeq holds
( b1 is Tree-like iff for b2 being Nat holds b1 .-> b2 is Tree-like );

registration
cluster trivial -> connected ManySortedSet of NAT ;
coherence
for b1 being GraphSeq st b1 is trivial holds
b1 is connected
proof end;
cluster loopless trivial -> Tree-like ManySortedSet of NAT ;
coherence
for b1 being GraphSeq st b1 is trivial & b1 is loopless holds
b1 is Tree-like
proof end;
cluster acyclic -> simple ManySortedSet of NAT ;
coherence
for b1 being GraphSeq st b1 is acyclic holds
b1 is simple
proof end;
cluster Tree-like -> connected acyclic ManySortedSet of NAT ;
coherence
for b1 being GraphSeq st b1 is Tree-like holds
( b1 is acyclic & b1 is connected )
proof end;
cluster connected acyclic -> Tree-like ManySortedSet of NAT ;
coherence
for b1 being GraphSeq st b1 is acyclic & b1 is connected holds
b1 is Tree-like
proof end;
end;

registration
cluster halting finite simple connected acyclic Tree-like ManySortedSet of NAT ;
existence
ex b1 being GraphSeq st
( b1 is halting & b1 is finite & b1 is Tree-like )
proof end;
end;

registration
let c1 be connected GraphSeq;
let c2 be Nat;
cluster a1 .-> a2 -> connected ;
coherence
c1 .-> c2 is connected
by Def12;
end;

registration
let c1 be acyclic GraphSeq;
let c2 be Nat;
cluster a1 .-> a2 -> acyclic ;
coherence
c1 .-> c2 is acyclic
by Def13;
end;

registration
let c1 be Tree-like GraphSeq;
let c2 be Nat;
cluster a1 .-> a2 -> connected acyclic Tree-like ;
coherence
c1 .-> c2 is Tree-like
;
end;

theorem Th2: :: GLIB_002:2
for b1 being non trivial connected _Graph
for b2 being Vertex of b1 holds not b2 is isolated
proof end;

theorem Th3: :: GLIB_002:3
for b1 being non trivial _Graph
for b2 being Vertex of b1
for b3 being removeVertex of b1,b2 st b3 is connected & ex b4 being set st
( b4 in b2 .edgesInOut() & not b4 Joins b2,b2,b1 ) holds
b1 is connected
proof end;

theorem Th4: :: GLIB_002:4
for b1 being non trivial connected _Graph
for b2 being Vertex of b1
for b3 being removeVertex of b1,b2 st b2 is endvertex holds
b3 is connected by Lemma16;

theorem Th5: :: GLIB_002:5
for b1 being connected _Graph
for b2 being Walk of b1
for b3 being set
for b4 being removeEdge of b1,b3 st b2 is Cycle-like & b3 in b2 .edges() holds
b4 is connected
proof end;

theorem Th6: :: GLIB_002:6
for b1 being _Graph st ex b2 being Vertex of b1 st
for b3 being Vertex of b1 ex b4 being Walk of b1 st b4 is_Walk_from b2,b3 holds
b1 is connected by Lemma17;

theorem Th7: :: GLIB_002:7
for b1 being trivial _Graph holds b1 is connected ;

theorem Th8: :: GLIB_002:8
for b1, b2 being _Graph st b1 == b2 & b1 is connected holds
b2 is connected
proof end;

theorem Th9: :: GLIB_002:9
for b1 being _Graph
for b2 being Vertex of b1 holds b2 in b1 .reachableFrom b2 by Lemma8;

theorem Th10: :: GLIB_002:10
for b1 being _Graph
for b2, b3, b4 being set
for b5 being Vertex of b1 st b2 in b1 .reachableFrom b5 & b3 Joins b2,b4,b1 holds
b4 in b1 .reachableFrom b5 by Lemma9;

theorem Th11: :: GLIB_002:11
for b1 being _Graph
for b2 being Vertex of b1 holds b1 .edgesBetween (b1 .reachableFrom b2) = b1 .edgesInOut (b1 .reachableFrom b2)
proof end;

theorem Th12: :: GLIB_002:12
for b1 being _Graph
for b2, b3 being Vertex of b1 st b2 in b1 .reachableFrom b3 holds
b1 .reachableFrom b2 = b1 .reachableFrom b3 by Lemma10;

theorem Th13: :: GLIB_002:13
for b1 being _Graph
for b2 being Vertex of b1
for b3 being Walk of b1 st b2 in b3 .vertices() holds
b3 .vertices() c= b1 .reachableFrom b2 by Lemma11;

theorem Th14: :: GLIB_002:14
for b1 being _Graph
for b2 being Subgraph of b1
for b3 being Vertex of b1
for b4 being Vertex of b2 st b3 = b4 holds
b2 .reachableFrom b4 c= b1 .reachableFrom b3
proof end;

theorem Th15: :: GLIB_002:15
for b1 being _Graph st ex b2 being Vertex of b1 st b1 .reachableFrom b2 = the_Vertices_of b1 holds
b1 is connected by Lemma18;

theorem Th16: :: GLIB_002:16
for b1 being _Graph st b1 is connected holds
for b2 being Vertex of b1 holds b1 .reachableFrom b2 = the_Vertices_of b1 by Lemma19;

theorem Th17: :: GLIB_002:17
for b1, b2 being _Graph
for b3 being Vertex of b1
for b4 being Vertex of b2 st b1 == b2 & b3 = b4 holds
b1 .reachableFrom b3 = b2 .reachableFrom b4 by Lemma20;

theorem Th18: :: GLIB_002:18
for b1 being _Graph
for b2 being Vertex of b1 holds b2 in b1 .reachableDFrom b2
proof end;

theorem Th19: :: GLIB_002:19
for b1 being _Graph
for b2, b3, b4 being set
for b5 being Vertex of b1 st b2 in b1 .reachableDFrom b5 & b3 DJoins b2,b4,b1 holds
b4 in b1 .reachableDFrom b5
proof end;

theorem Th20: :: GLIB_002:20
for b1 being _Graph
for b2 being Vertex of b1 holds b1 .reachableDFrom b2 c= b1 .reachableFrom b2
proof end;

theorem Th21: :: GLIB_002:21
for b1 being _Graph
for b2 being Subgraph of b1
for b3 being Vertex of b1
for b4 being Vertex of b2 st b3 = b4 holds
b2 .reachableDFrom b4 c= b1 .reachableDFrom b3
proof end;

theorem Th22: :: GLIB_002:22
for b1, b2 being _Graph
for b3 being Vertex of b1
for b4 being Vertex of b2 st b1 == b2 & b3 = b4 holds
b1 .reachableDFrom b3 = b2 .reachableDFrom b4
proof end;

theorem Th23: :: GLIB_002:23
for b1 being _Graph
for b2 being connected Subgraph of b1 st b2 is spanning holds
b1 is connected by Lemma21;

theorem Th24: :: GLIB_002:24
for b1 being _Graph holds union (b1 .componentSet() ) = the_Vertices_of b1
proof end;

theorem Th25: :: GLIB_002:25
for b1 being _Graph holds
( b1 is connected iff b1 .componentSet() = {(the_Vertices_of b1)} ) by Lemma22;

theorem Th26: :: GLIB_002:26
for b1, b2 being _Graph st b1 == b2 holds
b1 .componentSet() = b2 .componentSet() by Lemma23;

theorem Th27: :: GLIB_002:27
for b1 being _Graph
for b2 being set st b2 in b1 .componentSet() holds
b2 is non empty Subset of (the_Vertices_of b1) by Lemma24;

theorem Th28: :: GLIB_002:28
for b1 being _Graph holds
( b1 is connected iff b1 .numComponents() = 1 ) by Lemma29;

theorem Th29: :: GLIB_002:29
for b1, b2 being _Graph st b1 == b2 holds
b1 .numComponents() = b2 .numComponents() by Lemma30;

theorem Th30: :: GLIB_002:30
for b1 being _Graph holds
( b1 is Component of b1 iff b1 is connected )
proof end;

theorem Th31: :: GLIB_002:31
for b1 being _Graph
for b2 being Component of b1 holds the_Edges_of b2 = b1 .edgesBetween (the_Vertices_of b2) by Lemma25;

theorem Th32: :: GLIB_002:32
for b1 being _Graph
for b2, b3 being Component of b1 holds
( the_Vertices_of b2 = the_Vertices_of b3 iff b2 == b3 ) by Lemma26;

theorem Th33: :: GLIB_002:33
for b1 being _Graph
for b2 being Component of b1
for b3 being Vertex of b1 holds
( b3 in the_Vertices_of b2 iff the_Vertices_of b2 = b1 .reachableFrom b3 ) by Lemma27;

theorem Th34: :: GLIB_002:34
for b1 being _Graph
for b2, b3 being Component of b1
for b4 being set st b4 in the_Vertices_of b2 & b4 in the_Vertices_of b3 holds
b2 == b3 by Lemma28;

theorem Th35: :: GLIB_002:35
for b1 being connected _Graph
for b2 being Vertex of b1 holds
( not b2 is cut-vertex iff for b3 being removeVertex of b1,b2 holds b3 .numComponents() <=` b1 .numComponents() ) by Lemma31;

theorem Th36: :: GLIB_002:36
for b1 being connected _Graph
for b2 being Vertex of b1
for b3 being removeVertex of b1,b2 st not b2 is cut-vertex holds
b3 is connected by Lemma32;

theorem Th37: :: GLIB_002:37
for b1 being finite non trivial connected _Graph ex b2, b3 being Vertex of b1 st
( b2 <> b3 & not b2 is cut-vertex & not b3 is cut-vertex ) by Lemma33;

theorem Th38: :: GLIB_002:38
for b1 being _Graph
for b2 being Vertex of b1 st b2 is cut-vertex holds
not b1 is trivial
proof end;

theorem Th39: :: GLIB_002:39
for b1, b2 being _Graph
for b3 being Vertex of b1
for b4 being Vertex of b2 st b1 == b2 & b3 = b4 & b3 is cut-vertex holds
b4 is cut-vertex
proof end;

theorem Th40: :: GLIB_002:40
for b1 being finite connected _Graph holds b1 .order() <= (b1 .size() ) + 1
proof end;

theorem Th41: :: GLIB_002:41
for b1 being acyclic _Graph holds b1 is simple ;

theorem Th42: :: GLIB_002:42
for b1 being acyclic _Graph
for b2 being Path of b1
for b3 being set st not b3 in b2 .edges() & b3 in (b2 .last() ) .edgesInOut() holds
b2 .addEdge b3 is Path-like by Lemma34;

theorem Th43: :: GLIB_002:43
for b1 being finite non trivial acyclic _Graph st the_Edges_of b1 <> {} holds
ex b2, b3 being Vertex of b1 st
( b2 <> b3 & b2 is endvertex & b3 is endvertex & b3 in b1 .reachableFrom b2 ) by Lemma35;

theorem Th44: :: GLIB_002:44
for b1, b2 being _Graph st b1 == b2 & b1 is acyclic holds
b2 is acyclic
proof end;

theorem Th45: :: GLIB_002:45
for b1 being finite non trivial Tree-like _Graph ex b2, b3 being Vertex of b1 st
( b2 <> b3 & b2 is endvertex & b3 is endvertex ) by Lemma36;

theorem Th46: :: GLIB_002:46
for b1 being finite _Graph holds
( b1 is Tree-like iff ( b1 is acyclic & b1 .order() = (b1 .size() ) + 1 ) )
proof end;

theorem Th47: :: GLIB_002:47
for b1 being finite _Graph holds
( b1 is Tree-like iff ( b1 is connected & b1 .order() = (b1 .size() ) + 1 ) )
proof end;

theorem Th48: :: GLIB_002:48
for b1, b2 being _Graph st b1 == b2 & b1 is Tree-like holds
b2 is Tree-like
proof end;

theorem Th49: :: GLIB_002:49
for b1 being _Graph
for b2 being set st b1 is_DTree_rooted_at b2 holds
b2 is Vertex of b1
proof end;

theorem Th50: :: GLIB_002:50
for b1, b2 being _Graph
for b3 being set st b1 == b2 & b1 is_DTree_rooted_at b3 holds
b2 is_DTree_rooted_at b3
proof end;