let G2 be _Graph; :: thesis: for v1, v2 being Vertex of G2
for e being object
for G1 being addEdge of G2,v1,e,v2
for w1 being Vertex of G1 st not e in the_Edges_of G2 & w1 = v1 holds
G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)

let v1, v2 be Vertex of G2; :: thesis: for e being object
for G1 being addEdge of G2,v1,e,v2
for w1 being Vertex of G1 st not e in the_Edges_of G2 & w1 = v1 holds
G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)

let e be object ; :: thesis: for G1 being addEdge of G2,v1,e,v2
for w1 being Vertex of G1 st not e in the_Edges_of G2 & w1 = v1 holds
G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)

let G1 be addEdge of G2,v1,e,v2; :: thesis: for w1 being Vertex of G1 st not e in the_Edges_of G2 & w1 = v1 holds
G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)

let w1 be Vertex of G1; :: thesis: ( not e in the_Edges_of G2 & w1 = v1 implies G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2) )
assume A1: ( not e in the_Edges_of G2 & w1 = v1 ) ; :: thesis: G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)
A2: G2 is Subgraph of G1 by GLIB_006:57;
e DJoins v1,v2,G1 by A1, GLIB_006:105;
then A3: e Joins v1,v2,G1 by GLIB_000:16;
for x being object st x in G1 .reachableFrom w1 holds
x in (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)
proof
let x be object ; :: thesis: ( x in G1 .reachableFrom w1 implies x in (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2) )
assume A4: x in G1 .reachableFrom w1 ; :: thesis: x in (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)
per cases ( x = w1 or x <> w1 ) ;
suppose A5: x <> w1 ; :: thesis: x in (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)
consider W1 being Walk of G1 such that
A6: W1 is_Walk_from w1,x by A4, GLIB_002:def 5;
set P1 = the Path of W1 .reverse() ;
A7: W1 .reverse() is_Walk_from x,w1 by A6, GLIB_001:23;
x is set by TARSKI:1;
then A8: the Path of W1 .reverse() is_Walk_from x,w1 by A7, GLIB_001:160;
per cases ( not e in the Path of W1 .reverse() .edges() or e in the Path of W1 .reverse() .edges() ) ;
suppose e in the Path of W1 .reverse() .edges() ; :: thesis: x in (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2)
then consider u1, u2 being Vertex of G1, n being odd Element of NAT such that
A9: ( n + 2 <= len the Path of W1 .reverse() & u1 = the Path of W1 .reverse() . n & e = the Path of W1 .reverse() . (n + 1) & u2 = the Path of W1 .reverse() . (n + 2) ) and
A10: e Joins u1,u2,G1 by GLIB_001:103;
A11: ( v2 = u1 & v1 = u2 )
proof
assume ( not v2 = u1 or not v1 = u2 ) ; :: thesis: contradiction
then A12: v1 = the Path of W1 .reverse() . n by A3, A9, A10, GLIB_000:15;
A13: the Path of W1 .reverse() . (len the Path of W1 .reverse() ) = the Path of W1 .reverse() .last() by GLIB_001:def 7
.= v1 by A1, A8, GLIB_001:def 23 ;
(n + 2) - 2 < (len the Path of W1 .reverse() ) - 0 by A9, XREAL_1:15;
then n = 1 by A12, A13, GLIB_001:def 28;
then v1 = the Path of W1 .reverse() .first() by A12, GLIB_001:def 6
.= x by A8, GLIB_001:def 23 ;
hence contradiction by A1, A5; :: thesis: verum
end;
set P2 = the Path of W1 .reverse() .cut (1,n);
not e in ( the Path of W1 .reverse() .cut (1,n)) .edges()
proof
assume e in ( the Path of W1 .reverse() .cut (1,n)) .edges() ; :: thesis: contradiction
then consider u3, u4 being Vertex of G1, m being odd Element of NAT such that
A14: ( m + 2 <= len ( the Path of W1 .reverse() .cut (1,n)) & u3 = ( the Path of W1 .reverse() .cut (1,n)) . m & e = ( the Path of W1 .reverse() .cut (1,n)) . (m + 1) & u4 = ( the Path of W1 .reverse() .cut (1,n)) . (m + 2) ) and
e Joins u3,u4,G1 by GLIB_001:103;
(n + 2) - 2 <= (len the Path of W1 .reverse() ) - 0 by A9, XREAL_1:13;
then A15: ( 1 <= n & n <= len the Path of W1 .reverse() ) by ABIAN:12;
A16: (m + 2) - 2 < (len ( the Path of W1 .reverse() .cut (1,n))) - 0 by A14, XREAL_1:15;
then A17: the Path of W1 .reverse() . (m + 1) = the Path of W1 .reverse() . (n + 1) by A9, A14, A15, POLYFORM:4, GLIB_001:36;
A18: ( 1 + 0 <= m + 1 & m < n ) by A15, A16, GLIB_001:45, XREAL_1:7;
then A19: m + 1 < n + 1 by XREAL_1:6;
(n + 2) - 1 <= (len the Path of W1 .reverse() ) - 0 by A9, XREAL_1:13;
hence contradiction by A17, A18, A19, GLIB_001:138; :: thesis: verum
end;
then reconsider W2 = the Path of W1 .reverse() .cut (1,n) as Walk of G2 by GLIB_006:109;
(n + 2) - 2 <= (len the Path of W1 .reverse() ) - 0 by A9, XREAL_1:13;
then ( 1 <= n & n <= len the Path of W1 .reverse() ) by ABIAN:12;
then the Path of W1 .reverse() .cut (1,n) is_Walk_from the Path of W1 .reverse() . 1, the Path of W1 .reverse() . n by POLYFORM:4, GLIB_001:37;
then W2 is_Walk_from the Path of W1 .reverse() . 1, the Path of W1 .reverse() . n by GLIB_001:19;
then W2 is_Walk_from the Path of W1 .reverse() .first() , the Path of W1 .reverse() . n by GLIB_001:def 6;
then W2 is_Walk_from x,v2 by A8, A9, A11, GLIB_001:def 23;
then W2 .reverse() is_Walk_from v2,x by GLIB_001:23;
then x in G2 .reachableFrom v2 by GLIB_002:def 5;
hence x in (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2) by XBOOLE_0:def 3; :: thesis: verum
end;
end;
end;
end;
end;
then A20: G1 .reachableFrom w1 c= (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2) by TARSKI:def 3;
A21: G2 .reachableFrom v1 c= G1 .reachableFrom w1 by A1, A2, GLIB_002:14;
reconsider w2 = v2 as Vertex of G1 by GLIB_006:68;
G2 .reachableFrom v2 c= G1 .reachableFrom w2 by A2, GLIB_002:14;
then G2 .reachableFrom v2 c= G1 .reachableFrom w1 by A1, Th41, GLIB_002:12;
then (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2) c= G1 .reachableFrom w1 by A21, XBOOLE_1:8;
hence G1 .reachableFrom w1 = (G2 .reachableFrom v1) \/ (G2 .reachableFrom v2) by A20, XBOOLE_0:def 10; :: thesis: verum