:: GRAPH_1 semantic presentation

definition
attr a1 is strict;
struct MultiGraphStruct -> ;
aggr MultiGraphStruct(# Vertices, Edges, Source, Target #) -> MultiGraphStruct ;
sel Vertices c1 -> set ;
sel Edges c1 -> set ;
sel Source c1 -> Function of the Edges of a1,the Vertices of a1;
sel Target c1 -> Function of the Edges of a1,the Vertices of a1;
end;

set DomEx = {1,2};

reconsider empty1 = {} as Function of {} ,{1,2} by FUNCT_2:55, RELAT_1:60;

definition
let IT be MultiGraphStruct ;
attr a1 is Graph-like means :Def1: :: GRAPH_1:def 1
the Vertices of DomEx is non empty set ;
end;

:: deftheorem Def1 defines Graph-like GRAPH_1:def 1 :
for IT being MultiGraphStruct holds
( IT is Graph-like iff the Vertices of IT is non empty set );

registration
cluster strict Graph-like MultiGraphStruct ;
existence
ex b1 being MultiGraphStruct st
( b1 is strict & b1 is Graph-like )
proof end;
end;

definition
mode Graph is Graph-like MultiGraphStruct ;
end;

Lemma27: for G being Graph holds
( dom the Source of G = the Edges of G & dom the Target of G = the Edges of G )
proof end;

Lemma28: for G being Graph
for x being Element of the Vertices of G holds x in the Vertices of G
proof end;

definition
let G1 be Graph;
let G2 be Graph;
assume E29: ( the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 ) ;
func c1 \/ c2 -> strict Graph means :Def2: :: GRAPH_1:def 2
( the Vertices of it = the Vertices of DomEx \/ the Vertices of empty1 & the Edges of it = the Edges of DomEx \/ the Edges of empty1 & ( for v being set st v in the Edges of DomEx holds
( the Source of it . v = the Source of DomEx . v & the Target of it . v = the Target of DomEx . v ) ) & ( for v being set st v in the Edges of empty1 holds
( the Source of it . v = the Source of empty1 . v & the Target of it . v = the Target of empty1 . v ) ) );
existence
ex b1 being strict Graph st
( the Vertices of b1 = the Vertices of G1 \/ the Vertices of G2 & the Edges of b1 = the Edges of G1 \/ the Edges of G2 & ( for v being set st v in the Edges of G1 holds
( the Source of b1 . v = the Source of G1 . v & the Target of b1 . v = the Target of G1 . v ) ) & ( for v being set st v in the Edges of G2 holds
( the Source of b1 . v = the Source of G2 . v & the Target of b1 . v = the Target of G2 . v ) ) )
proof end;
uniqueness
for b1, b2 being strict Graph st the Vertices of b1 = the Vertices of G1 \/ the Vertices of G2 & the Edges of b1 = the Edges of G1 \/ the Edges of G2 & ( for v being set st v in the Edges of G1 holds
( the Source of b1 . v = the Source of G1 . v & the Target of b1 . v = the Target of G1 . v ) ) & ( for v being set st v in the Edges of G2 holds
( the Source of b1 . v = the Source of G2 . v & the Target of b1 . v = the Target of G2 . v ) ) & the Vertices of b2 = the Vertices of G1 \/ the Vertices of G2 & the Edges of b2 = the Edges of G1 \/ the Edges of G2 & ( for v being set st v in the Edges of G1 holds
( the Source of b2 . v = the Source of G1 . v & the Target of b2 . v = the Target of G1 . v ) ) & ( for v being set st v in the Edges of G2 holds
( the Source of b2 . v = the Source of G2 . v & the Target of b2 . v = the Target of G2 . v ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines \/ GRAPH_1:def 2 :
for G1, G2 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 holds
for b3 being strict Graph holds
( b3 = G1 \/ G2 iff ( the Vertices of b3 = the Vertices of G1 \/ the Vertices of G2 & the Edges of b3 = the Edges of G1 \/ the Edges of G2 & ( for v being set st v in the Edges of G1 holds
( the Source of b3 . v = the Source of G1 . v & the Target of b3 . v = the Target of G1 . v ) ) & ( for v being set st v in the Edges of G2 holds
( the Source of b3 . v = the Source of G2 . v & the Target of b3 . v = the Target of G2 . v ) ) ) );

definition
let G be Graph, G1 be Graph, G2 be Graph;
pred c1 is_sum_of c2,c3 means :Def3: :: GRAPH_1:def 3
( the Target of empty1 tolerates the Target of G & the Source of empty1 tolerates the Source of G & MultiGraphStruct(# the Vertices of DomEx,the Edges of DomEx,the Source of DomEx,the Target of DomEx #) = empty1 \/ G );
end;

:: deftheorem Def3 defines is_sum_of GRAPH_1:def 3 :
for G, G1, G2 being Graph holds
( G is_sum_of G1,G2 iff ( the Target of G1 tolerates the Target of G2 & the Source of G1 tolerates the Source of G2 & MultiGraphStruct(# the Vertices of G,the Edges of G,the Source of G,the Target of G #) = G1 \/ G2 ) );

definition
let IT be Graph;
attr a1 is oriented means :Def4: :: GRAPH_1:def 4
for x, y being set st x in the Edges of DomEx & y in the Edges of DomEx & the Source of DomEx . x = the Source of DomEx . y & the Target of DomEx . x = the Target of DomEx . y holds
x = y;
attr a1 is non-multi means :Def5: :: GRAPH_1:def 5
for x, y being set st x in the Edges of DomEx & y in the Edges of DomEx & ( ( the Source of DomEx . x = the Source of DomEx . y & the Target of DomEx . x = the Target of DomEx . y ) or ( the Source of DomEx . x = the Target of DomEx . y & the Source of DomEx . y = the Target of DomEx . x ) ) holds
x = y;
attr a1 is simple means :Def6: :: GRAPH_1:def 6
for x being set holds
( not x in the Edges of DomEx or not the Source of DomEx . x = the Target of DomEx . x );
attr a1 is connected means :Def7: :: GRAPH_1:def 7
for G1, G2 being Graph holds
( not the Vertices of G1 misses the Vertices of G2 or not DomEx is_sum_of G1,G2 );
end;

:: deftheorem Def4 defines oriented GRAPH_1:def 4 :
for IT being Graph holds
( IT is oriented iff for x, y being set st x in the Edges of IT & y in the Edges of IT & the Source of IT . x = the Source of IT . y & the Target of IT . x = the Target of IT . y holds
x = y );

:: deftheorem Def5 defines non-multi GRAPH_1:def 5 :
for IT being Graph holds
( IT is non-multi iff for x, y being set st x in the Edges of IT & y in the Edges of IT & ( ( the Source of IT . x = the Source of IT . y & the Target of IT . x = the Target of IT . y ) or ( the Source of IT . x = the Target of IT . y & the Source of IT . y = the Target of IT . x ) ) holds
x = y );

:: deftheorem Def6 defines simple GRAPH_1:def 6 :
for IT being Graph holds
( IT is simple iff for x being set holds
( not x in the Edges of IT or not the Source of IT . x = the Target of IT . x ) );

:: deftheorem Def7 defines connected GRAPH_1:def 7 :
for IT being Graph holds
( IT is connected iff for G1, G2 being Graph holds
( not the Vertices of G1 misses the Vertices of G2 or not IT is_sum_of G1,G2 ) );

definition
let IT be MultiGraphStruct ;
attr a1 is finite means :Def8: :: GRAPH_1:def 8
( the Vertices of DomEx is finite & the Edges of DomEx is finite );
end;

:: deftheorem Def8 defines finite GRAPH_1:def 8 :
for IT being MultiGraphStruct holds
( IT is finite iff ( the Vertices of IT is finite & the Edges of IT is finite ) );

registration
cluster finite MultiGraphStruct ;
existence
ex b1 being MultiGraphStruct st b1 is finite
proof end;
cluster oriented non-multi simple connected finite MultiGraphStruct ;
existence
ex b1 being Graph st
( b1 is finite & b1 is non-multi & b1 is oriented & b1 is simple & b1 is connected )
proof end;
end;

definition
let G be Graph;
let x be Element of the Vertices of G;
let y be Element of the Vertices of G;
let v be set ;
pred c4 joins c2,c3 means :: GRAPH_1:def 9
( ( the Source of DomEx . x = empty1 & the Target of DomEx . x = G ) or ( the Source of DomEx . x = G & the Target of DomEx . x = empty1 ) );
end;

:: deftheorem Def9 defines joins GRAPH_1:def 9 :
for G being Graph
for x, y being Element of the Vertices of G
for v being set holds
( v joins x,y iff ( ( the Source of G . v = x & the Target of G . v = y ) or ( the Source of G . v = y & the Target of G . v = x ) ) );

definition
let G be Graph;
let x be Element of the Vertices of G, y be Element of the Vertices of G;
pred c2,c3 are_incydent means :: GRAPH_1:def 10
ex v being set st
( v in the Edges of DomEx & v joins empty1,G );
end;

:: deftheorem Def10 defines are_incydent GRAPH_1:def 10 :
for G being Graph
for x, y being Element of the Vertices of G holds
( x,y are_incydent iff ex v being set st
( v in the Edges of G & v joins x,y ) );

definition
let G be Graph;
mode Chain of c1 -> FinSequence means :Def11: :: GRAPH_1:def 11
( ( for n being Element of NAT st 1 <= n & n <= len it holds
it . n in the Edges of DomEx ) & ex p being FinSequence st
( len p = (len it) + 1 & ( for n being Element of NAT st 1 <= n & n <= len p holds
p . n in the Vertices of DomEx ) & ( for n being Element of NAT st 1 <= n & n <= len it holds
ex x', y' being Element of the Vertices of DomEx st
( x' = p . n & y' = p . (n + 1) & it . n joins x',y' ) ) ) );
existence
ex b1 being FinSequence st
( ( for n being Element of NAT st 1 <= n & n <= len b1 holds
b1 . n in the Edges of G ) & ex p being FinSequence st
( len p = (len b1) + 1 & ( for n being Element of NAT st 1 <= n & n <= len p holds
p . n in the Vertices of G ) & ( for n being Element of NAT st 1 <= n & n <= len b1 holds
ex x', y' being Element of the Vertices of G st
( x' = p . n & y' = p . (n + 1) & b1 . n joins x',y' ) ) ) )
proof end;
end;

:: deftheorem Def11 defines Chain GRAPH_1:def 11 :
for G being Graph
for b2 being FinSequence holds
( b2 is Chain of G iff ( ( for n being Element of NAT st 1 <= n & n <= len b2 holds
b2 . n in the Edges of G ) & ex p being FinSequence st
( len p = (len b2) + 1 & ( for n being Element of NAT st 1 <= n & n <= len p holds
p . n in the Vertices of G ) & ( for n being Element of NAT st 1 <= n & n <= len b2 holds
ex x', y' being Element of the Vertices of G st
( x' = p . n & y' = p . (n + 1) & b2 . n joins x',y' ) ) ) ) );

Lemma83: for G being Graph holds {} is Chain of G
proof end;

definition
let G be Graph;
redefine mode Chain as Chain of c1 -> FinSequence of the Edges of a1;
coherence
for b1 being Chain of G holds b1 is FinSequence of the Edges of G
proof end;
end;

definition
let G be Graph;
let IT be Chain of G;
attr a2 is oriented means :Def12: :: GRAPH_1:def 12
for n being Element of NAT st 1 <= n & n < len empty1 holds
the Source of DomEx . (empty1 . (n + 1)) = the Target of DomEx . (empty1 . n);
end;

:: deftheorem Def12 defines oriented GRAPH_1:def 12 :
for G being Graph
for IT being Chain of G holds
( IT is oriented iff for n being Element of NAT st 1 <= n & n < len IT holds
the Source of G . (IT . (n + 1)) = the Target of G . (IT . n) );

registration
let G be Graph;
cluster oriented Chain of a1;
existence
ex b1 being Chain of G st b1 is oriented
proof end;
end;

Lemma86: for G being Graph holds {} is oriented Chain of G
proof end;

definition
let G be Graph;
let IT be Chain of G;
redefine attr one-to-one as a2 is one-to-one means :: GRAPH_1:def 13
for n, m being Element of NAT st 1 <= n & n < m & m <= len empty1 holds
empty1 . n <> empty1 . m;
compatibility
( IT is one-to-one iff for n, m being Element of NAT st 1 <= n & n < m & m <= len IT holds
IT . n <> IT . m )
proof end;
end;

:: deftheorem Def13 defines one-to-one GRAPH_1:def 13 :
for G being Graph
for IT being Chain of G holds
( IT is one-to-one iff for n, m being Element of NAT st 1 <= n & n < m & m <= len IT holds
IT . n <> IT . m );

registration
let G be Graph;
cluster V5 Chain of a1;
existence
ex b1 being Chain of G st b1 is one-to-one
proof end;
end;

definition
let G be Graph;
mode Path of a1 is V5 Chain of a1;
end;

registration
let G be Graph;
cluster V5 oriented Chain of a1;
existence
ex b1 being Chain of G st
( b1 is one-to-one & b1 is oriented )
proof end;
end;

definition
let G be Graph;
mode OrientedPath of a1 is V5 oriented Chain of a1;
end;

definition
let G be Graph;
let IT be Path of G;
canceled;
attr a2 is cyclic means :Def15: :: GRAPH_1:def 15
ex p being FinSequence st
( len p = (len empty1) + 1 & ( for n being Element of NAT st 1 <= n & n <= len p holds
p . n in the Vertices of DomEx ) & ( for n being Element of NAT st 1 <= n & n <= len empty1 holds
ex x', y' being Element of the Vertices of DomEx st
( x' = p . n & y' = p . (n + 1) & empty1 . n joins x',y' ) ) & p . 1 = p . (len p) );
end;

:: deftheorem Def14 GRAPH_1:def 14 :
canceled;

:: deftheorem Def15 defines cyclic GRAPH_1:def 15 :
for G being Graph
for IT being Path of G holds
( IT is cyclic iff ex p being FinSequence st
( len p = (len IT) + 1 & ( for n being Element of NAT st 1 <= n & n <= len p holds
p . n in the Vertices of G ) & ( for n being Element of NAT st 1 <= n & n <= len IT holds
ex x', y' being Element of the Vertices of G st
( x' = p . n & y' = p . (n + 1) & IT . n joins x',y' ) ) & p . 1 = p . (len p) ) );

registration
let G be Graph;
cluster cyclic Chain of a1;
existence
ex b1 being Path of G st b1 is cyclic
proof end;
end;

definition
let G be Graph;
mode Cycle of a1 is cyclic Path of a1;
end;

Lemma90: for G being Graph holds {} is Cycle of G
proof end;

registration
let G be Graph;
cluster cyclic Chain of a1;
existence
ex b1 being OrientedPath of G st b1 is cyclic
proof end;
end;

definition
let G be Graph;
mode OrientedCycle of a1 is cyclic OrientedPath of a1;
end;

Lemma92: for G being Graph
for v being set st v in the Edges of G holds
( the Source of G . v in the Vertices of G & the Target of G . v in the Vertices of G )
proof end;

definition
let G be Graph;
canceled;
mode Subgraph of c1 -> Graph means :Def17: :: GRAPH_1:def 17
( the Vertices of it c= the Vertices of DomEx & the Edges of it c= the Edges of DomEx & ( for v being set st v in the Edges of it holds
( the Source of it . v = the Source of DomEx . v & the Target of it . v = the Target of DomEx . v & the Source of DomEx . v in the Vertices of it & the Target of DomEx . v in the Vertices of it ) ) );
existence
ex b1 being Graph st
( the Vertices of b1 c= the Vertices of G & the Edges of b1 c= the Edges of G & ( for v being set st v in the Edges of b1 holds
( the Source of b1 . v = the Source of G . v & the Target of b1 . v = the Target of G . v & the Source of G . v in the Vertices of b1 & the Target of G . v in the Vertices of b1 ) ) )
proof end;
end;

:: deftheorem Def16 GRAPH_1:def 16 :
canceled;

:: deftheorem Def17 defines Subgraph GRAPH_1:def 17 :
for G, b2 being Graph holds
( b2 is Subgraph of G iff ( the Vertices of b2 c= the Vertices of G & the Edges of b2 c= the Edges of G & ( for v being set st v in the Edges of b2 holds
( the Source of b2 . v = the Source of G . v & the Target of b2 . v = the Target of G . v & the Source of G . v in the Vertices of b2 & the Target of G . v in the Vertices of b2 ) ) ) );

registration
let G be Graph;
cluster strict Subgraph of a1;
existence
ex b1 being Subgraph of G st b1 is strict
proof end;
end;

definition
let G be finite Graph;
func VerticesCount c1 -> Element of NAT means :: GRAPH_1:def 18
ex B being finite set st
( B = the Vertices of DomEx & it = card B );
existence
ex b1 being Element of NAT ex B being finite set st
( B = the Vertices of G & b1 = card B )
proof end;
uniqueness
for b1, b2 being Element of NAT st ex B being finite set st
( B = the Vertices of G & b1 = card B ) & ex B being finite set st
( B = the Vertices of G & b2 = card B ) holds
b1 = b2
;
func EdgesCount c1 -> Element of NAT means :: GRAPH_1:def 19
ex B being finite set st
( B = the Edges of DomEx & it = card B );
existence
ex b1 being Element of NAT ex B being finite set st
( B = the Edges of G & b1 = card B )
proof end;
uniqueness
for b1, b2 being Element of NAT st ex B being finite set st
( B = the Edges of G & b1 = card B ) & ex B being finite set st
( B = the Edges of G & b2 = card B ) holds
b1 = b2
;
end;

:: deftheorem Def18 defines VerticesCount GRAPH_1:def 18 :
for G being finite Graph
for b2 being Element of NAT holds
( b2 = VerticesCount G iff ex B being finite set st
( B = the Vertices of G & b2 = card B ) );

:: deftheorem Def19 defines EdgesCount GRAPH_1:def 19 :
for G being finite Graph
for b2 being Element of NAT holds
( b2 = EdgesCount G iff ex B being finite set st
( B = the Edges of G & b2 = card B ) );

definition
let G be finite Graph;
let x be Element of the Vertices of G;
func EdgesIn c2 -> Element of NAT means :: GRAPH_1:def 20
ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of DomEx & the Target of DomEx . z = empty1 ) ) ) & it = card X );
existence
ex b1 being Element of NAT ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Target of G . z = x ) ) ) & b1 = card X )
proof end;
uniqueness
for b1, b2 being Element of NAT st ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Target of G . z = x ) ) ) & b1 = card X ) & ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Target of G . z = x ) ) ) & b2 = card X ) holds
b1 = b2
proof end;
func EdgesOut c2 -> Element of NAT means :: GRAPH_1:def 21
ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of DomEx & the Source of DomEx . z = empty1 ) ) ) & it = card X );
existence
ex b1 being Element of NAT ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Source of G . z = x ) ) ) & b1 = card X )
proof end;
uniqueness
for b1, b2 being Element of NAT st ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Source of G . z = x ) ) ) & b1 = card X ) & ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Source of G . z = x ) ) ) & b2 = card X ) holds
b1 = b2
proof end;
end;

:: deftheorem Def20 defines EdgesIn GRAPH_1:def 20 :
for G being finite Graph
for x being Element of the Vertices of G
for b3 being Element of NAT holds
( b3 = EdgesIn x iff ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Target of G . z = x ) ) ) & b3 = card X ) );

:: deftheorem Def21 defines EdgesOut GRAPH_1:def 21 :
for G being finite Graph
for x being Element of the Vertices of G
for b3 being Element of NAT holds
( b3 = EdgesOut x iff ex X being finite set st
( ( for z being set holds
( z in X iff ( z in the Edges of G & the Source of G . z = x ) ) ) & b3 = card X ) );

definition
let G be finite Graph;
let x be Element of the Vertices of G;
func Degree c2 -> Element of NAT equals :: GRAPH_1:def 22
(EdgesIn empty1) + (EdgesOut empty1);
correctness
coherence
(EdgesIn x) + (EdgesOut x) is Element of NAT
;
;
end;

:: deftheorem Def22 defines Degree GRAPH_1:def 22 :
for G being finite Graph
for x being Element of the Vertices of G holds Degree x = (EdgesIn x) + (EdgesOut x);

Lemma100: for n being Element of NAT
for G being Graph
for p being Chain of G holds p | (Seg n) is Chain of G
proof end;

Lemma103: for G being Graph
for H1, H2 being strict Subgraph of G st the Vertices of H1 = the Vertices of H2 & the Edges of H1 = the Edges of H2 holds
H1 = H2
proof end;

definition
let G1 be Graph, G2 be Graph;
pred c1 c= c2 means :Def23: :: GRAPH_1:def 23
DomEx is Subgraph of empty1;
reflexivity
for G1 being Graph holds G1 is Subgraph of G1
proof end;
end;

:: deftheorem Def23 defines c= GRAPH_1:def 23 :
for G1, G2 being Graph holds
( G1 c= G2 iff G1 is Subgraph of G2 );

Lemma107: for G being Graph
for H being Subgraph of G holds
( the Source of H in PFuncs the Edges of G,the Vertices of G & the Target of H in PFuncs the Edges of G,the Vertices of G )
proof end;

definition
let G be Graph;
func bool c1 -> set means :Def24: :: GRAPH_1:def 24
for x being set holds
( x in it iff x is strict Subgraph of DomEx );
existence
ex b1 being set st
for x being set holds
( x in b1 iff x is strict Subgraph of G )
proof end;
uniqueness
for b1, b2 being set st ( for x being set holds
( x in b1 iff x is strict Subgraph of G ) ) & ( for x being set holds
( x in b2 iff x is strict Subgraph of G ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def24 defines bool GRAPH_1:def 24 :
for G being Graph
for b2 being set holds
( b2 = bool G iff for x being set holds
( x in b2 iff x is strict Subgraph of G ) );

scheme :: GRAPH_1:sch 122
s122{ F1() -> Graph, P1[ set ] } :
ex X being set st
for x being set holds
( x in X iff ( x is strict Subgraph of F1() & P1[x] ) )
proof end;

theorem Th1: :: GRAPH_1:1
for G being Graph holds
( dom the Source of G = the Edges of G & dom the Target of G = the Edges of G ) by ;

theorem Th2: :: GRAPH_1:2
for G being Graph
for x being Element of the Vertices of G holds x in the Vertices of G by ;

theorem Th3: :: GRAPH_1:3
for G being Graph
for v being set st v in the Edges of G holds
( the Source of G . v in the Vertices of G & the Target of G . v in the Vertices of G ) by ;

theorem Th4: :: GRAPH_1:4
for n being Element of NAT
for G being Graph
for p being Chain of G holds p | (Seg n) is Chain of G by ;

theorem Th5: :: GRAPH_1:5
for G1, G being Graph st G1 c= G holds
( the Source of G1 c= the Source of G & the Target of G1 c= the Target of G )
proof end;

theorem Th6: :: GRAPH_1:6
for G1, G2 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 holds
( the Source of (G1 \/ G2) = the Source of G1 \/ the Source of G2 & the Target of (G1 \/ G2) = the Target of G1 \/ the Target of G2 )
proof end;

theorem Th7: :: GRAPH_1:7
for G being strict Graph holds G = G \/ G
proof end;

theorem Th8: :: GRAPH_1:8
for G1, G2 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 holds
G1 \/ G2 = G2 \/ G1
proof end;

theorem Th9: :: GRAPH_1:9
for G1, G2, G3 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 & the Source of G1 tolerates the Source of G3 & the Target of G1 tolerates the Target of G3 & the Source of G2 tolerates the Source of G3 & the Target of G2 tolerates the Target of G3 holds
(G1 \/ G2) \/ G3 = G1 \/ (G2 \/ G3)
proof end;

theorem Th10: :: GRAPH_1:10
for G, G1, G2 being Graph st G is_sum_of G1,G2 holds
G is_sum_of G2,G1
proof end;

theorem Th11: :: GRAPH_1:11
for G being strict Graph holds G is_sum_of G,G
proof end;

theorem Th12: :: GRAPH_1:12
for G1, G2 being Graph st ex G being Graph st
( G1 c= G & G2 c= G ) holds
G1 \/ G2 = G2 \/ G1
proof end;

theorem Th13: :: GRAPH_1:13
for G1, G2, G3 being Graph st ex G being Graph st
( G1 c= G & G2 c= G & G3 c= G ) holds
(G1 \/ G2) \/ G3 = G1 \/ (G2 \/ G3)
proof end;

theorem Th14: :: GRAPH_1:14
for G being Graph holds {} is oriented cyclic Path of G by , ;

theorem Th15: :: GRAPH_1:15
for G being Graph
for H1, H2 being strict Subgraph of G st the Vertices of H1 = the Vertices of H2 & the Edges of H1 = the Edges of H2 holds
H1 = H2 by ;

theorem Th16: :: GRAPH_1:16
for G1, G2 being strict Graph st G1 c= G2 & G2 c= G1 holds
G1 = G2
proof end;

theorem Th17: :: GRAPH_1:17
for G1, G2, G3 being Graph st G1 c= G2 & G2 c= G3 holds
G1 c= G3
proof end;

theorem Th18: :: GRAPH_1:18
for G, G1, G2 being Graph st G is_sum_of G1,G2 holds
( G1 c= G & G2 c= G )
proof end;

theorem Th19: :: GRAPH_1:19
for G1, G2 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 holds
( G1 c= G1 \/ G2 & G2 c= G1 \/ G2 )
proof end;

theorem Th20: :: GRAPH_1:20
for G1, G2 being Graph st ex G being Graph st
( G1 c= G & G2 c= G ) holds
( G1 c= G1 \/ G2 & G2 c= G1 \/ G2 )
proof end;

theorem Th21: :: GRAPH_1:21
for G1, G3, G2, G being Graph st G1 c= G3 & G2 c= G3 & G is_sum_of G1,G2 holds
G c= G3
proof end;

theorem Th22: :: GRAPH_1:22
for G1, G, G2 being Graph st G1 c= G & G2 c= G holds
G1 \/ G2 c= G
proof end;

theorem Th23: :: GRAPH_1:23
for G1, G2 being strict Graph st G1 c= G2 holds
( G1 \/ G2 = G2 & G2 \/ G1 = G2 )
proof end;

theorem Th24: :: GRAPH_1:24
for G1, G2 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 & ( G1 \/ G2 = G2 or G2 \/ G1 = G2 ) holds
G1 c= G2
proof end;

theorem Th25: :: GRAPH_1:25
canceled;

theorem Th26: :: GRAPH_1:26
canceled;

theorem Th27: :: GRAPH_1:27
for G1 being Graph
for G being oriented Graph st G1 c= G holds
G1 is oriented
proof end;

theorem Th28: :: GRAPH_1:28
for G1 being Graph
for G being non-multi Graph st G1 c= G holds
G1 is non-multi
proof end;

theorem Th29: :: GRAPH_1:29
for G1 being Graph
for G being simple Graph st G1 c= G holds
G1 is simple
proof end;

theorem Th30: :: GRAPH_1:30
for G being Graph
for G1 being strict Graph holds
( G1 in bool G iff G1 c= G )
proof end;

theorem Th31: :: GRAPH_1:31
for G being strict Graph holds G in bool G
proof end;

theorem Th32: :: GRAPH_1:32
for G2 being Graph
for G1 being strict Graph holds
( G1 c= G2 iff bool G1 c= bool G2 )
proof end;

theorem Th33: :: GRAPH_1:33
canceled;

theorem Th34: :: GRAPH_1:34
for G being strict Graph holds {G} c= bool G
proof end;

theorem Th35: :: GRAPH_1:35
for G1, G2 being strict Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 & bool (G1 \/ G2) c= (bool G1) \/ (bool G2) & not G1 c= G2 holds
G2 c= G1
proof end;

theorem Th36: :: GRAPH_1:36
for G1, G2 being Graph st the Source of G1 tolerates the Source of G2 & the Target of G1 tolerates the Target of G2 holds
(bool G1) \/ (bool G2) c= bool (G1 \/ G2)
proof end;

theorem Th37: :: GRAPH_1:37
for G1, G, G2 being Graph st G1 in bool G & G2 in bool G holds
G1 \/ G2 in bool G
proof end;