:: About Supergraphs, {P}art {III}
:: by Sebastian Koch
::
:: Received May 27, 2019
:: Copyright (c) 2019 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies NUMBERS, FINSEQ_1, SUBSET_1, RELAT_1, FUNCT_1, XXREAL_0, TARSKI,
ORDINAL4, ARYTM_3, CARD_1, XBOOLE_0, NAT_1, ARYTM_1, GLIB_000, PBOOLE,
FINSET_1, ZFMISC_1, RELAT_2, GLIB_002, FUNCOP_1, TREES_1, GLIB_001,
FUNCT_4, ABIAN, REWRITE1, CHORD, HELLY, FINSEQ_8, GRAPH_1, RFINSEQ,
XCMPLX_0, CARD_2, GRAPH_2, GLIB_006, GLIB_007, SCMYCIEL, GLIB_003,
EQREL_1;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1, EQREL_1, FUNCT_1,
ORDINAL1, RELSET_1, PARTFUN1, FUNCT_2, BINOP_1, DOMAIN_1, FUNCT_3,
FUNCOP_1, FUNCT_4, FINSET_1, CARD_1, PBOOLE, NUMBERS, XCMPLX_0, XXREAL_0,
XREAL_0, NAT_1, INT_1, VALUED_0, NAT_D, CARD_2, FINSEQ_1, RVSUM_1,
RFINSEQ, FUNCT_7, ABIAN, FINSEQ_6, GLIB_000, FINSEQ_8, GRAPH_2, GRAPH_5,
GLIB_001, GLIB_002, HELLY, GLIB_003, CHORD, GLIB_006, GLIB_007;
constructors DOMAIN_1, BINOP_1, BINOP_2, FINSOP_1, RVSUM_1, FINSEQ_5, GRAPH_5,
ABIAN, WELLORD2, FUNCT_2, FIB_NUM2, FINSEQ_8, GLIB_001, GLIB_002, HELLY,
RELSET_1, FUNCT_3, CHORD, NAT_D, GRAPH_2, RFINSEQ, FINSEQ_6, CARD_2,
FUNCT_7, FINSEQ_1, SUBSET_1, GLIB_006, GLIB_007, RELAT_1, GLIB_003,
EQREL_1;
registrations XBOOLE_0, RELAT_1, FUNCT_1, ORDINAL1, FUNCOP_1, FINSET_1, ABIAN,
NUMBERS, XREAL_0, NAT_1, MEMBERED, FINSEQ_1, GLIB_000, GLIB_001, HELLY,
GLIB_002, CHORD, INT_1, VALUED_0, CARD_1, FUNCT_2, PARTFUN1, HURWITZ2,
RELSET_1, RAMSEY_1, FUNCT_4, SUBSET_1, GLIB_006, GLIB_007, GLIB_003,
MSAFREE5, JORDAN1J, CARD_5, EQREL_1;
requirements ARITHM, BOOLE, NUMERALS, REAL, SUBSET;
definitions GLIB_000, GLIB_002;
theorems TARSKI, XBOOLE_0, XBOOLE_1, ORDINAL1, XXREAL_0, RELAT_1, CARD_1,
CARD_2, FUNCT_2, FUNCOP_1, FUNCT_4, ZFMISC_1, FUNCT_1, GLIB_000,
GLIB_001, GLIB_002, CHORD, POLYFORM, NAT_1, XREAL_1, ABIAN, FINSEQ_6,
FINSEQ_8, FINSEQ_1, FINSEQ_3, FINSEQ_5, RFINSEQ, INT_1, HELLY, PARTFUN1,
GLIB_006, GLIB_007, GLIB_003, FUNCT_7, EQREL_1, WELLORD2;
schemes NAT_1, FUNCT_1;
begin :: Preliminaries
Lm12:
for p being non empty FinSequence, x being object
for n being Element of dom(p^<*x*>) st n <= len(p^<*x*>) - 1
holds n = len(p^<*x*>) - 1 or n <= len p - 1
proof
let p be non empty FinSequence, x be object, n be Element of dom(p^<*x*>);
A1: len(p^<*x*>) = len p + len <*x*> by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:39;
assume A2: n <= len(p^<*x*>) - 1;
assume n <> len(p^<*x*>) - 1; then
A3: n < len p - 1 + 1 by A1, A2, XXREAL_0:1;
len p - 1 is Nat by INT_1:74;
hence n <= len p - 1 by A3, NAT_1:13;
end;
Lm13:
for p being non empty FinSequence, x being object
for n being Element of dom(<*x*>^p) st n <= len(<*x*>^p) - 1
holds n = 1 or (n-1 in dom p & n-1 <= len p - 1)
proof
let p be non empty FinSequence, x be object, n be Element of dom(<*x*>^p);
A1: len(<*x*>^p) = len <*x*> + len p by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:39;
assume n <= len(<*x*>^p) - 1; then
A2: n-1 <= len p - 1 by A1, XREAL_1:9; then
A3: n-1 + 0 <= len p - 1 + 1 by XREAL_1:7;
assume A4: n <> 1;
n is non zero by FINSEQ_3:25; then
A5: n-1 is Nat by INT_1:74;
1 <= n-1
proof
assume not 1 <= n-1;
then n-1 = 0 by A5, NAT_1:14;
hence contradiction by A4;
end;
hence n-1 in dom p by A3, A5, FINSEQ_3:25;
thus n-1 <= len p - 1 by A2;
end;
::: START into GLIB_000 ?
registration
let G be _Graph, v be Vertex of G;
cluster -> trivial for inducedSubgraph of G, {v};
coherence
proof
G.edgesBetween({v}) c= G.edgesBetween({v});
hence thesis;
end;
end;
theorem Th1:
for G being _Graph, X being set, v being Vertex of G
holds G.edgesBetween(X \ {v}) = G.edgesBetween(X) \ v.edgesInOut()
proof
let G be _Graph, X be set, v be Vertex of G;
for e being object holds e in G.edgesBetween(X \ {v})
iff e in G.edgesBetween(X) \ v.edgesInOut()
proof
let e be object;
set u = (the_Source_of G).e, w = (the_Target_of G).e;
hereby
assume e in G.edgesBetween(X \ {v});
then A1: e in the_Edges_of G & u in X\{v} & w in X\{v} by GLIB_000:31;
then A2: e in G.edgesBetween(X) by GLIB_000:31;
not e in v.edgesInOut()
proof
assume e in v.edgesInOut();
then u = v or w = v by GLIB_000:61;
hence contradiction by A1, ZFMISC_1:56;
end;
hence e in G.edgesBetween(X) \ v.edgesInOut() by A2, XBOOLE_0:def 5;
end;
assume e in G.edgesBetween(X) \ v.edgesInOut();
then A3: e in G.edgesBetween(X) & not e in v.edgesInOut()
by XBOOLE_0:def 5;
then A4: e in the_Edges_of G & u in X & w in X by GLIB_000:31;
u <> v & w <> v by A3, GLIB_000:61;
then not u in {v} & not w in {v} by TARSKI:def 1;
then u in X\{v} & w in X\{v} by A4, XBOOLE_0:def 5;
hence thesis by A3, GLIB_000:31;
end;
hence thesis by TARSKI:2;
end;
theorem Th2:
for G being _Graph, X being set, v being Vertex of G st v is isolated
holds G.edgesBetween(X \ {v}) = G.edgesBetween(X)
proof
let G be _Graph, X be set, v be Vertex of G;
assume A1: v is isolated;
thus G.edgesBetween(X \ {v}) = G.edgesBetween(X) \ v.edgesInOut() by Th1
.= G.edgesBetween(X) \ {} by A1, GLIB_000:def 49
.= G.edgesBetween(X);
end;
theorem Th3:
for G being non-Dmulti _Graph, v being Vertex of G
holds v.inDegree() = card v.inNeighbors()
proof
let G be non-Dmulti _Graph, v be Vertex of G;
defpred P[object,object] means $2 DJoins $1,v,G;
A1: for x,y1,y2 being object st x in v.inNeighbors() & P[x,y1] & P[x,y2]
holds y1 = y2 by GLIB_000:def 21;
A2: for x being object st x in v.inNeighbors() ex y being object st P[x,y]
by GLIB_000:69;
consider f being Function such that
A3: dom f = v.inNeighbors() and
A4: for x being object st x in v.inNeighbors() holds P[x,f.x]
from FUNCT_1:sch 2(A1,A2);
for y being object holds y in rng f iff y in v.edgesIn()
proof
let y be object;
hereby
assume y in rng f;
then consider x being object such that
A5: x in dom f & f.x = y by FUNCT_1:def 3;
reconsider x as set by TARSKI:1;
thus y in v.edgesIn() by A3, A4, A5, GLIB_000:57;
end;
assume y in v.edgesIn();
then consider x being set such that
A6: y DJoins x,v,G by GLIB_000:57;
a7: x in v.inNeighbors() by A6, GLIB_000:69;
then x in dom f & P[x,f.x] by A3, A4;
then y = f.x by A1, A3, A6;
hence thesis by a7, FUNCT_1:def 3, A3;
end;
then A8: rng f = v.edgesIn() by TARSKI:2;
for x1,x2 being object st x1 in dom f & x2 in dom f & f.x1 = f.x2
holds x1 = x2
proof
let x1,x2 be object;
assume x1 in dom f & x2 in dom f & f.x1 = f.x2;
then P[x1,f.x1] & P[x2,f.x1] by A3, A4;
then (the_Source_of G).(f.x1) = x1 & (the_Source_of G).(f.x1) = x2
by GLIB_000:def 14;
hence x1 = x2;
end;
then f is one-to-one by FUNCT_1:def 4;
then card v.inNeighbors() = card v.edgesIn()
by A3, A8, WELLORD2:def 4, CARD_1:5;
hence thesis by GLIB_000:def 42;
end;
theorem Th4:
for G being non-Dmulti _Graph, v being Vertex of G
holds v.outDegree() = card v.outNeighbors()
proof
let G be non-Dmulti _Graph, v be Vertex of G;
defpred P[object,object] means $2 DJoins v,$1,G;
A1: for x,y1,y2 being object st x in v.outNeighbors() & P[x,y1] & P[x,y2]
holds y1 = y2 by GLIB_000:def 21;
A2: for x being object st x in v.outNeighbors() ex y being object st P[x,y]
by GLIB_000:70;
consider f being Function such that
A3: dom f = v.outNeighbors() and
A4: for x being object st x in v.outNeighbors() holds P[x,f.x]
from FUNCT_1:sch 2(A1,A2);
for y being object holds y in rng f iff y in v.edgesOut()
proof
let y be object;
hereby
assume y in rng f;
then consider x being object such that
A5: x in dom f & f.x = y by FUNCT_1:def 3;
reconsider x as set by TARSKI:1;
thus y in v.edgesOut() by A3, A4, A5, GLIB_000:59;
end;
assume y in v.edgesOut();
then consider x being set such that
A6: y DJoins v,x,G by GLIB_000:59;
a7: x in v.outNeighbors() by A6, GLIB_000:70;
then x in dom f & P[x,f.x] by A3, A4;
then y = f.x by A1, A3, A6;
hence thesis by a7, A3, FUNCT_1:def 3;
end;
then A8: rng f = v.edgesOut() by TARSKI:2;
for x1,x2 being object st x1 in dom f & x2 in dom f & f.x1 = f.x2
holds x1 = x2
proof
let x1,x2 be object;
assume x1 in dom f & x2 in dom f & f.x1 = f.x2;
then P[x1,f.x1] & P[x2,f.x1] by A3, A4;
then (the_Target_of G).(f.x1) = x1 & (the_Target_of G).(f.x1) = x2
by GLIB_000:def 14;
hence x1 = x2;
end;
then f is one-to-one by FUNCT_1:def 4;
then card v.outNeighbors() = card v.edgesOut()
by A3, A8, WELLORD2:def 4, CARD_1:5;
hence thesis by GLIB_000:def 43;
end;
theorem Th5:
for G being simple _Graph, v being Vertex of G
holds v.degree() = card v.allNeighbors()
proof
let G be simple _Graph, v be Vertex of G;
v.inNeighbors() /\ v.outNeighbors() = {}
proof
assume v.inNeighbors() /\ v.outNeighbors() <> {};
then consider w being object such that
A1: w in v.inNeighbors() /\ v.outNeighbors() by XBOOLE_0:def 1;
A2: w in v.inNeighbors() & w in v.outNeighbors() by A1, XBOOLE_0:def 4;
consider e1 being object such that
A3: e1 DJoins w,v,G by A2, GLIB_000:69;
consider e2 being object such that
A4: e2 DJoins v,w,G by A2, GLIB_000:70;
e1 Joins v,w,G & e2 Joins v,w,G by A3, A4, GLIB_000:16;
then e1 = e2 by GLIB_000:def 20;
then e1 in the_Edges_of G & (the_Source_of G).e1 = v &
(the_Target_of G).e1 = v by A3, A4, GLIB_000:def 14;
hence contradiction by GLIB_000:def 18;
end;
then card(v.inNeighbors() \/ v.outNeighbors())
= card v.inNeighbors() +` card v.outNeighbors()
by CARD_2:35,XBOOLE_0:def 7
.= v.inDegree() +` card v.outNeighbors() by Th3
.= v.inDegree() +` v.outDegree() by Th4
.= v.degree() by GLIB_000:def 44;
hence thesis by GLIB_000:def 48;
end;
theorem Th6:
for G being _Graph holds G is loopless iff
for v being Vertex of G holds not v in v.allNeighbors()
proof
let G be _Graph;
hereby
assume A1: G is loopless;
let v be Vertex of G;
thus not v in v.allNeighbors()
proof
assume v in v.allNeighbors();
then consider e being object such that
A2: e Joins v,v,G by GLIB_000:71;
thus contradiction by A1, A2, GLIB_000:18;
end;
end;
assume A3: for v being Vertex of G holds not v in v.allNeighbors();
for v being object holds not ex e being object st e Joins v,v,G
proof
given v being object such that
A4: ex e being object st e Joins v,v,G;
reconsider v0 = v as Vertex of G by A4, GLIB_000:13;
not v0 in v0.allNeighbors() by A3;
hence contradiction by A4, GLIB_000:71;
end;
hence thesis by GLIB_000:18;
end;
theorem Th7:
for G being _Graph, v being Vertex of G
holds v is isolated iff v.allNeighbors() = {}
proof
let G be _Graph, v be Vertex of G;
hereby
assume v is isolated;
then v.edgesInOut() = {} by GLIB_000:def 49;
then v.edgesIn() \/ v.edgesOut() = {} by GLIB_000:60;
then v.edgesIn() = {} & v.edgesOut() = {};
then (the_Source_of G).:v.edgesIn() = {} &
(the_Target_of G).:v.edgesOut() = {};
then v.inNeighbors() = {} & v.outNeighbors() = {}
by GLIB_000:def 46, GLIB_000:def 47;
then v.inNeighbors() \/ v.outNeighbors() = {} \/ {};
hence v.allNeighbors() = {} by GLIB_000:def 48;
end;
assume A1: v.allNeighbors() = {};
assume not v is isolated;
then A2: v.edgesInOut() <> {} by GLIB_000:def 49;
set e = the Element of v.edgesInOut();
consider v0 being Vertex of G such that
A3: e Joins v,v0,G by A2, GLIB_000:64;
thus contradiction by A1, A3, GLIB_000:71;
end;
Lm2:
for G1 being _Graph, v being set, G2 being removeVertex of G1, v
st not v in the_Vertices_of G1 holds G1 == G2
proof
let G1 be _Graph, v be set, G2 be removeVertex of G1, v;
set V = the_Vertices_of G1 \ {v};
assume not v in the_Vertices_of G1;
then A1: V = the_Vertices_of G1 by ZFMISC_1:57;
then the_Vertices_of G2 = V & the_Edges_of G2 = G1.edgesBetween(V)
by GLIB_000:def 37;
then A2: the_Vertices_of G2 = the_Vertices_of G1 &
the_Edges_of G2 = the_Edges_of G1 by A1, GLIB_000:34;
G1 is Subgraph of G1 by GLIB_000:40;
hence thesis by A2, GLIB_000:86;
end;
theorem Th8:
for G1 being _Graph, v being set, G2 being removeVertex of G1, v
st G1 is trivial or not v in the_Vertices_of G1 holds G1 == G2
proof
let G1 be _Graph, v be set, G2 be removeVertex of G1, v;
assume G1 is trivial or not v in the_Vertices_of G1;
then per cases;
suppose G1 is trivial;
then consider v1 being Vertex of G1 such that
A1: the_Vertices_of G1 = {v1} by GLIB_000:22;
set V = the_Vertices_of G1 \ {v}, E = G1.edgesBetween(V);
per cases;
suppose V is non empty Subset of the_Vertices_of G1 &
E c= G1.edgesBetween(V);
then V = {v1} by A1, ZFMISC_1:33;
hence thesis by A1, Lm2, ZFMISC_1:57;
end;
suppose not (V is non empty Subset of the_Vertices_of G1 &
E c= G1.edgesBetween(V));
hence thesis by GLIB_000:def 37;
end;
end;
suppose not v in the_Vertices_of G1;
hence thesis by Lm2;
end;
end;
Lm3:
for G1, G2 being _Graph, v being set
st G1 == G2 & not v in the_Vertices_of G1
holds G2 is removeVertex of G1, v
proof
let G1, G2 be _Graph, v be set;
assume A1: G1 == G2 & not v in the_Vertices_of G1;
then A2: G2 is Subgraph of G1 by GLIB_000:87;
set V = the_Vertices_of G1 \ {v};
A3: V = the_Vertices_of G1 by A1, ZFMISC_1:57;
A4: G1.edgesBetween(V) = the_Edges_of G1 by A3, GLIB_000:34
.= the_Edges_of G2 by A1, GLIB_000:def 34;
V = the_Vertices_of G2 by A1, A3, GLIB_000:def 34;
hence thesis by A2, A4, GLIB_000:def 37;
end;
theorem Th9:
for G1, G2 being _Graph, v being set
st G1 == G2 & (G1 is trivial or not v in the_Vertices_of G1)
holds G2 is removeVertex of G1, v
proof
let G1, G2 be _Graph, v be set;
assume that
A1: G1 == G2 and
A2: G1 is trivial or not v in the_Vertices_of G1;
A3: G2 is Subgraph of G1 by A1, GLIB_000:87;
set V = the_Vertices_of G1 \ {v};
per cases by A2;
suppose G1 is trivial;
then consider v1 being Vertex of G1 such that
A4: the_Vertices_of G1 = {v1} by GLIB_000:22;
per cases;
suppose v = v1;
then V = {} by A4, XBOOLE_1:37;
hence thesis by A1, A3, GLIB_000:def 37;
end;
suppose v <> v1;
then not v in the_Vertices_of G1 by A4, TARSKI:def 1;
hence thesis by A1, Lm3;
end;
end;
suppose not v in the_Vertices_of G1;
hence thesis by A1, Lm3;
end;
end;
:: converse of GLIB_000:21
theorem Th10:
for G being _Graph holds (ex v1, v2 being Vertex of G st v1 <> v2)
implies G is non trivial
proof
let G be _Graph;
given v1, v2 being Vertex of G such that
A1: v1 <> v2;
card the_Vertices_of G <> 1
proof
assume card the_Vertices_of G = 1;
then card {v1,v2} c= 1 by CARD_1:11;
then {0,1} c= 1 by A1, CARD_2:57, CARD_1:50;
then 1 in 1 by ZFMISC_1:32;
hence contradiction;
end;
hence thesis by GLIB_000:def 19;
end;
registration
let G be non trivial _Graph, X be set;
cluster -> non trivial for removeEdges of G, X;
coherence
proof
let G2 be removeEdges of G, X;
ex v1, v2 being Vertex of G2 st v1 <> v2
proof
consider v1, v2 being Vertex of G such that
A1: v1 <> v2 by GLIB_000:21;
reconsider v1, v2 as Vertex of G2 by GLIB_000:53;
take v1, v2;
thus thesis by A1;
end;
hence thesis by Th10;
end;
end;
theorem Th11:
for G1 being finite _Graph, G2 being Subgraph of G1
holds G2 is spanning iff G1.order() = G2.order()
proof
let G1 be finite _Graph, G2 be Subgraph of G1;
hereby
assume A1: G2 is spanning;
thus G1.order() = card the_Vertices_of G1 by GLIB_000:def 24
.= card the_Vertices_of G2 by A1, GLIB_000:def 33
.= G2.order() by GLIB_000:def 24;
end;
assume A2: G1.order() = G2.order();
card the_Vertices_of G1 = G1.order() by GLIB_000:def 24
.= card the_Vertices_of G2 by A2, GLIB_000:def 24;
hence thesis by GLIB_000:def 33, CARD_2:102;
end;
theorem Th12:
for G1 being _Graph, G2 being spanning Subgraph of G1
st the_Edges_of G1 = the_Edges_of G2 holds G1 == G2
proof
let G1 be _Graph, G2 be spanning Subgraph of G1;
assume A1: the_Edges_of G1 = the_Edges_of G2;
A2: G1 is Subgraph of G1 by GLIB_000:40;
the_Vertices_of G1 = the_Vertices_of G2 by GLIB_000:def 33;
hence thesis by A1, A2, GLIB_000:86;
end;
theorem Th13:
for G1 being finite _Graph, G2 being spanning Subgraph of G1
st G1.size() = G2.size() holds G1 == G2
proof
let G1 be finite _Graph, G2 be spanning Subgraph of G1;
assume A1: G1.size() = G2.size();
card the_Edges_of G1 = G1.size() by GLIB_000:def 25
.= card the_Edges_of G2 by A1, GLIB_000:def 25;
then the_Edges_of G1 = the_Edges_of G2 by CARD_2:102;
hence thesis by Th12;
end;
theorem Th14:
for G1 being _Graph, V being set, G2 being inducedSubgraph of G1, V
st G2 is spanning holds G1 == G2
proof
let G1 be _Graph, V be set, G2 be inducedSubgraph of G1, V;
assume G2 is spanning;
then A1: the_Vertices_of G1 = the_Vertices_of G2 by GLIB_000:def 33;
per cases;
suppose V is non empty Subset of the_Vertices_of G1;
then the_Vertices_of G2 = V & the_Edges_of G2 = G1.edgesBetween(V)
by GLIB_000:def 37;
then A2: the_Edges_of G2 = the_Edges_of G1 by A1, GLIB_000:34;
G1 is Subgraph of G1 by GLIB_000:40;
hence thesis by A1, A2, GLIB_000:86;
end;
suppose not V is non empty Subset of the_Vertices_of G1;
hence thesis by GLIB_000:def 37;
end;
end;
theorem Th15:
for G being _Graph holds G is non trivial iff
ex H being Subgraph of G st H is non spanning
proof
let G be _Graph;
hereby
assume A1: G is non trivial;
set v1 = the Vertex of G, v2 = the Vertex of G;
reconsider H = the removeVertex of G, v1 as Subgraph of G;
take H;
A2: the_Vertices_of H = the_Vertices_of G \ {v1} by A1, GLIB_000:47;
v1 in {v1} by TARSKI:def 1;
then the_Vertices_of H <> the_Vertices_of G by A2, XBOOLE_0:def 5;
hence H is non spanning by GLIB_000:def 33;
end;
given H being Subgraph of G such that
A3: H is non spanning;
A4: the_Vertices_of G <> the_Vertices_of H by A3, GLIB_000:def 33;
the_Vertices_of H c= the_Vertices_of G;
then reconsider v1 = the Vertex of H as Vertex of G by TARSKI:def 3;
not the_Vertices_of G c= the_Vertices_of H by A4, XBOOLE_0:def 10;
then A5: the_Vertices_of G \ the_Vertices_of H <> {} by XBOOLE_1:37;
set v2 = the Element of the_Vertices_of G \ the_Vertices_of H;
reconsider v2 as Vertex of G by A5, TARSKI:def 3;
A6: v1 <> v2 by A5, XBOOLE_0:def 5;
card {v1, v2} c= card the_Vertices_of G by CARD_1:11;
then A7: 2 c= card the_Vertices_of G by A6, CARD_2:57;
assume G is trivial;
then A8: 2 c= 1 by A7, GLIB_000:def 19;
1 in {0,1} by TARSKI:def 2;
then 1 in 1 by A8, CARD_1:50;
hence contradiction;
end;
theorem Th16:
for G being _Graph
holds (ex v being Vertex of G st v is endvertex) implies G is non trivial
proof
let G be _Graph;
given v being Vertex of G such that
A1: v is endvertex;
set G2 = the removeVertex of G, v;
consider e being object such that
A2: v.edgesInOut() = {e} & not e Joins v,v,G
by A1, GLIB_000:def 51;
set w = v.adj(e);
A3: e in v.edgesInOut() by A2, TARSKI:def 1;
for u being Vertex of G holds the_Vertices_of G <> {u}
proof
let u be Vertex of G;
assume the_Vertices_of G = {u};
then v = u & w = u by TARSKI:def 1;
hence contradiction by A2, A3, GLIB_000:67;
end;
hence G is non trivial by GLIB_000:22;
end;
:: note that induced subgraphs generally commute
::theorem
:: for G1 being _Graph, V1, E1, V2, E2 being set
:: for G2 being inducedSubgraph of G1, V1, E1
:: for G3 being inducedSubgraph of G1, V2, E2
:: for G4 being inducedSubgraph of G2, V2, E2
:: holds G4 is inducedSubgraph of G3, V1, E1;
:: but the form above doesn't translate to removeEdge/Vertex exactly
Lm4:
for G1, G2 being _Graph, e being set
for G3 being removeEdge of G1, e, G4 being removeEdge of G2, e
st G1 == G2 holds G3 == G4
proof
let G1, G2 be _Graph, e be set;
let G3 be removeEdge of G1, e, G4 be removeEdge of G2, e;
assume A1: G1 == G2;
then the_Vertices_of G1 = the_Vertices_of G2 &
the_Edges_of G1 = the_Edges_of G2 by GLIB_000:def 34;
then G4 is removeEdge of G1, e by A1, GLIB_000:95;
hence thesis by GLIB_000:93;
end;
:: removeEdge and removeVertex commute, Part I
theorem
for G1 being _Graph, v,e being set, G2 being removeVertex of G1, v
for G3 being removeEdge of G1, e, G4 being removeEdge of G2, e
holds G4 is removeVertex of G3, v
proof
let G1 be _Graph, v,e be set, G2 be removeVertex of G1, v;
let G3 be removeEdge of G1, e, G4 be removeEdge of G2, e;
A1: the_Vertices_of G3 = the_Vertices_of G1 &
the_Edges_of G3 = the_Edges_of G1 \ {e} by GLIB_000:51;
A2: the_Vertices_of G4 = the_Vertices_of G2 &
the_Edges_of G4 = the_Edges_of G2 \ {e} by GLIB_000:51;
per cases;
suppose A3: G1 is non trivial & v in the_Vertices_of G1;
then reconsider v1 = v as Vertex of G1;
:: basic relations
reconsider v3 = v1 as Vertex of G3 by A1;
A4: the_Vertices_of G2 = the_Vertices_of G1 \ {v} &
the_Edges_of G2 = G1.edgesBetween(the_Vertices_of G1 \ {v})
by A3, GLIB_000:47;
then A5: the_Edges_of G2
= G1.edgesBetween(the_Vertices_of G1) \ v1.edgesInOut() by Th1
.= the_Edges_of G1 \ v1.edgesInOut() by GLIB_000:34;
:: G4 is subgraph of G3
A6: the_Vertices_of G4 c= the_Vertices_of G3 by A1, A2;
A7: G4 is Subgraph of G1 by GLIB_000:43;
for x being object holds x in the_Edges_of G4 implies x in the_Edges_of G3
proof
let x be object;
assume x in the_Edges_of G4;
then x in the_Edges_of G2 & not x in {e} by A2, XBOOLE_0:def 5;
hence thesis by A1, XBOOLE_0:def 5;
end;
then the_Edges_of G4 c= the_Edges_of G3 by TARSKI:def 3;
then A8: G4 is Subgraph of G3 by A6, A7, GLIB_000:44;
:: properties of removeVertex
now
thus the_Vertices_of G4 = the_Vertices_of G3 \ {v} by A1, A2, A4;
for x being object holds x in the_Edges_of G4 iff
x in G3.edgesBetween(the_Vertices_of G3 \ {v})
proof
let x be object;
A9: G3.edgesBetween(the_Vertices_of G3 \ {v})
= G3.edgesBetween(the_Vertices_of G3) \ v3.edgesInOut() by Th1
.= the_Edges_of G3 \ v3.edgesInOut() by GLIB_000:34;
hereby
assume x in the_Edges_of G4;
then A10: x in the_Edges_of G2 & not x in {e} by A2, XBOOLE_0:def 5;
then x in the_Edges_of G1 & not x in v1.edgesInOut()
by A5, XBOOLE_0:def 5;
then A11: not x in v3.edgesInOut() by GLIB_000:78, TARSKI:def 3;
x in the_Edges_of G3 by A1, A10, XBOOLE_0:def 5;
hence x in G3.edgesBetween(the_Vertices_of G3 \ {v})
by A9, A11, XBOOLE_0:def 5;
end;
assume x in G3.edgesBetween(the_Vertices_of G3 \ {v});
then A12: x in the_Edges_of G3 & not x in v3.edgesInOut()
by A9, XBOOLE_0:def 5;
then A13: x in the_Edges_of G1 & not x in {e} by A1, XBOOLE_0:def 5;
not x in v1.edgesInOut()
proof
assume x in v1.edgesInOut();
then x in v1.edgesInOut() /\ (the_Edges_of G3)
by A12, XBOOLE_0:def 4;
hence contradiction by A12, GLIB_000:79;
end;
then x in the_Edges_of G2 by A5, A13, XBOOLE_0:def 5;
hence thesis by A2, A13, XBOOLE_0:def 5;
end;
hence the_Edges_of G4 = G3.edgesBetween(the_Vertices_of G3 \ {v})
by TARSKI:2;
end;
hence thesis by A8, GLIB_000:def 37;
end;
suppose A14: G1 is trivial or not v in the_Vertices_of G1;
then G1 == G2 by Th8;
then A15: G3 == G4 by Lm4;
G3 is trivial or not v in the_Vertices_of G3 by A14;
hence thesis by A15, Th9;
end;
end;
Lm5:
for G1,G3,G4 being _Graph, e being set, G2 being removeEdge of G1, e
st G1 == G3 & G2 == G4 holds G4 is removeEdge of G3, e
proof
let G1,G3,G4 be _Graph, e be set;
let G2 be removeEdge of G1, e;
assume A1: G1 == G3 & G2 == G4;
then the_Vertices_of G1 = the_Vertices_of G3 &
the_Edges_of G1 = the_Edges_of G3 by GLIB_000:def 34;
then G2 is removeEdge of G3, e by A1, GLIB_000:95;
hence thesis by A1, GLIB_006:16;
end;
:: removeEdge and removeVertex commute, Part II
theorem Th18:
for G1 being _Graph, v,e being set
for G2 being removeEdge of G1, e
for G3 being removeVertex of G1, v, G4 being removeVertex of G2, v
holds G4 is removeEdge of G3, e
proof
let G1 be _Graph, v,e be set;
let G2 be removeEdge of G1, e;
let G3 be removeVertex of G1, v, G4 be removeVertex of G2, v;
A1: the_Vertices_of G2 = the_Vertices_of G1 &
the_Edges_of G2 = the_Edges_of G1 \ {e} by GLIB_000:51;
per cases;
suppose A2: G1 is non trivial & v in the_Vertices_of G1;
then reconsider v1 = v as Vertex of G1;
reconsider v2 = v1 as Vertex of G2 by A1;
:: basic relations
the_Vertices_of G3 = the_Vertices_of G1 \ {v} &
the_Edges_of G3 = G1.edgesBetween(the_Vertices_of G1 \ {v})
by A2, GLIB_000:47;
then A3: the_Edges_of G3
= G1.edgesBetween(the_Vertices_of G1) \ v1.edgesInOut() by Th1
.= the_Edges_of G1 \ v1.edgesInOut() by GLIB_000:34;
the_Vertices_of G4 = the_Vertices_of G2 \ {v} &
the_Edges_of G4 = G2.edgesBetween(the_Vertices_of G2 \ {v})
by A1, A2, GLIB_000:47;
then A4: the_Edges_of G4
= G2.edgesBetween(the_Vertices_of G2) \ v2.edgesInOut() by Th1
.= the_Edges_of G2 \ v2.edgesInOut() by GLIB_000:34;
:: G4 is subgraph of G3
A5: the_Vertices_of G4 = the_Vertices_of G1 \ {v} by A1, A2, GLIB_000:47
.= the_Vertices_of G3 by A2, GLIB_000:47;
for x being object holds x in the_Edges_of G4
implies x in the_Edges_of G3 \ {e}
proof
let x be object;
assume x in the_Edges_of G4;
then A6: x in the_Edges_of G2 & not x in v2.edgesInOut()
by A4, XBOOLE_0:def 5;
then A7: x in the_Edges_of G1 & not x in {e} by A1, XBOOLE_0:def 5;
not x in v1.edgesInOut()
proof
assume x in v1.edgesInOut();
then per cases by GLIB_000:61;
suppose (the_Source_of G1).x = v1;
then (the_Source_of G2).x = v1 by A6, GLIB_000:def 32;
hence contradiction by A6, GLIB_000:61;
end;
suppose (the_Target_of G1).x = v1;
then (the_Target_of G2).x = v1 by A6, GLIB_000:def 32;
hence contradiction by A6, GLIB_000:61;
end;
end;
then x in the_Edges_of G3 by A3, A6, XBOOLE_0:def 5;
hence thesis by A7, XBOOLE_0:def 5;
end;
then A8: the_Edges_of G4 c= the_Edges_of G3 \ {e} by TARSKI:def 3;
the_Edges_of G3 \ {e} c= the_Edges_of G3 by XBOOLE_1:36;
then A9: the_Edges_of G4 c= the_Edges_of G3 by A8, XBOOLE_1:1;
G4 is Subgraph of G1 by GLIB_000:43;
then A10: G4 is Subgraph of G3 by A5, A9, GLIB_000:44;
:: property assumptions for induced subgraph
A11: now
the_Vertices_of G3 c= the_Vertices_of G3;
hence the_Vertices_of G3 is non empty Subset of the_Vertices_of G3;
the_Edges_of G3 \ {e} c= the_Edges_of G3 by XBOOLE_1:36;
hence the_Edges_of G3 \ {e} c= G3.edgesBetween(the_Vertices_of G3)
by GLIB_000:34;
end;
:: properties of removeEdge
now
thus the_Vertices_of G4 = the_Vertices_of G3 by A5;
for x being object holds x in the_Edges_of G3 \ {e}
implies x in the_Edges_of G4
proof
let x be object;
assume x in the_Edges_of G3 \ {e};
then A12: x in the_Edges_of G3 & not x in {e} by XBOOLE_0:def 5;
then A13: x in the_Edges_of G1 & not x in v1.edgesInOut()
by A3, XBOOLE_0:def 5;
A14: x in the_Edges_of G2 by A1, A12, XBOOLE_0:def 5;
not x in v2.edgesInOut() by A13, GLIB_000:78, TARSKI:def 3;
hence thesis by A4, A14, XBOOLE_0:def 5;
end;
then the_Edges_of G3 \ {e} c= the_Edges_of G4 by TARSKI:def 3;
hence the_Edges_of G4 = the_Edges_of G3 \ {e} by A8, XBOOLE_0:def 10;
end;
hence thesis by A10, A11, GLIB_000:def 37;
end;
suppose A15: G1 is trivial or not v in the_Vertices_of G1;
then A16: G1 == G3 by Th8;
G2 is trivial or not v in the_Vertices_of G2
proof
per cases by A15;
suppose G1 is trivial;
hence thesis;
end;
suppose not v in the_Vertices_of G1;
hence thesis;
end;
end;
then G2 == G4 by Th8;
hence thesis by A16, Lm5;
end;
end;
:: END into GLIB_000 ?
:: START into GLIB_002 ?
Lm6: for G being finite connected _Graph
ex H being Subgraph of G st H is spanning Tree-like connected acyclic
proof
defpred P[Nat] means for G being finite connected _Graph
st G.order() + $1 = G.size() + 1
ex H being Subgraph of G st H is spanning Tree-like connected acyclic;
A1: P[0]
proof
let G be finite connected _Graph;
assume A2: G.order() + 0 = G.size() + 1;
reconsider H = G as Subgraph of G by GLIB_000:40;
take H;
the_Vertices_of H = the_Vertices_of G;
hence H is spanning by GLIB_000:def 33;
thus H is Tree-like by A2, GLIB_002:47;
hence thesis;
end;
A3: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A4: P[k];
let G be finite connected _Graph;
assume A5: G.order() + (k+1) = G.size() + 1;
:: we want to remove an edge that is part of a cycle
:: so that the resulting subgraph is still connected
k+1 <> 0;
then G.order() <> G.size() + 1 by A5;
then G is non acyclic by GLIB_002:47;
then consider C being Walk of G such that
A6: C is Cycle-like by GLIB_002:def 2;
A7: C.edges() is non empty by A6, GLIB_001:136;
set e = the Element of C.edges();
set G2 = the removeEdge of G, e;
A8: G2 is connected by A6, A7, GLIB_002:5;
G.order() + k + 1 = G2.size() + 1 + 1
by A5, A7, TARSKI:def 3, GLIB_000:52;
then G2.order() + k = G2.size() + 1 by GLIB_000:52;
then consider H being Subgraph of G2 such that
A9: H is spanning Tree-like connected acyclic by A4, A8;
reconsider H as spanning Subgraph of G by A9, GLIB_000:74;
take H;
thus thesis by A9;
end;
A10: for k being Nat holds P[k] from NAT_1:sch 2(A1,A3);
let G be finite connected _Graph;
ex k being Nat st
G.size() + 1 = G.order() + k by GLIB_002:40, NAT_1:10;
hence thesis by A10;
end;
registration
let G be finite connected _Graph;
cluster spanning Tree-like connected acyclic for Subgraph of G;
existence by Lm6;
end;
theorem Th19:
for G1 being connected _Graph, G2 being Subgraph of G1
st the_Edges_of G1 c= the_Edges_of G2 holds G1 == G2
proof
let G1 be connected _Graph, G2 be Subgraph of G1;
assume A1: the_Edges_of G1 c= the_Edges_of G2;
A2: the_Edges_of G1 = the_Edges_of G2 by A1, XBOOLE_0:def 10;
A3: G1 is Subgraph of G1 by GLIB_000:40;
the_Vertices_of G1 = the_Vertices_of G2
proof
per cases;
suppose A4: G1 is non trivial;
assume the_Vertices_of G1 <> the_Vertices_of G2;
then not the_Vertices_of G1 c= the_Vertices_of G2 by XBOOLE_0:def 10;
then A5: the_Vertices_of G1 \ the_Vertices_of G2 <> {} by XBOOLE_1:37;
set v = the Element of the_Vertices_of G1 \ the_Vertices_of G2;
reconsider v as Vertex of G1 by A5, TARSKI:def 3;
per cases;
suppose v.edgesInOut() = {};
hence contradiction by A4, GLIB_000:def 49, GLIB_002:2;
end;
suppose A6: v.edgesInOut() <> {};
set e = the Element of v.edgesInOut();
per cases by A6, GLIB_000:61;
suppose A7: (the_Source_of G1).e = v;
A8: e in the_Edges_of G2 by A2, A6, GLIB_000:61;
then (the_Source_of G2).e = v by A7, GLIB_000:def 32;
then v in the_Vertices_of G2 by A8, FUNCT_2:5;
hence contradiction by A5, XBOOLE_0:def 5;
end;
suppose A9: (the_Target_of G1).e = v;
A10: e in the_Edges_of G2 by A2, A6, GLIB_000:61;
then (the_Target_of G2).e = v by A9, GLIB_000:def 32;
then v in the_Vertices_of G2 by A10, FUNCT_2:5;
hence contradiction by A5, XBOOLE_0:def 5;
end;
end;
end;
suppose A11: G1 is trivial;
then consider v1 being Vertex of G1 such that
A12: the_Vertices_of G1 = {v1} by GLIB_000:22;
consider v2 being Vertex of G2 such that
A13: the_Vertices_of G2 = {v2} by A11, GLIB_000:22;
thus thesis by A12, A13, ZFMISC_1:3;
end;
end;
hence thesis by A2, A3, GLIB_000:86;
end;
theorem
for G1 being finite connected _Graph, G2 being Subgraph of G1
st G1.size() = G2.size() holds G1 == G2
proof
let G1 be finite connected _Graph, G2 be Subgraph of G1;
assume A1: G1.size() = G2.size();
card the_Edges_of G2 = G2.size() by GLIB_000:def 25
.= card the_Edges_of G1 by A1, GLIB_000:def 25;
then the_Edges_of G1 = the_Edges_of G2 by CARD_2:102;
hence thesis by Th19;
end;
theorem Th21:
for G1 being finite Tree-like _Graph
for G2 being spanning Tree-like Subgraph of G1
holds G1 == G2
proof
let G1 be finite Tree-like _Graph, G2 be spanning Tree-like Subgraph of G1;
G1.order() = G2.order() by Th11;
then G1.size() + 1 = G2.order() by GLIB_002:47;
then G1.size() + 1 = G2.size() + 1 by GLIB_002:47;
hence thesis by Th13;
end;
registration
let G be non trivial _Graph;
cluster non spanning trivial connected for Subgraph of G;
existence
proof
set v = the Vertex of G;
set H = the inducedSubgraph of G, {v};
the_Vertices_of H <> the_Vertices_of G
proof
assume A1: the_Vertices_of H = the_Vertices_of G;
1 = card the_Vertices_of G by A1, GLIB_000:def 19;
hence contradiction by GLIB_000:def 19;
end;
hence thesis by GLIB_000:def 33;
end;
end;
:: counterpart of GLIB_002:12
theorem Th22:
for G being _Graph, v1, v2 being Vertex of G st not v1 in G.reachableFrom(v2)
holds G.reachableFrom(v1) misses G.reachableFrom(v2)
proof
let G be _Graph, v1, v2 be Vertex of G;
assume A1: not v1 in G.reachableFrom(v2);
assume not G.reachableFrom(v1) misses G.reachableFrom(v2);
then G.reachableFrom(v1) /\ G.reachableFrom(v2) <> {} by XBOOLE_0:def 7;
then consider w being object such that
A2: w in G.reachableFrom(v1) /\ G.reachableFrom(v2) by XBOOLE_0:def 1;
A3: w in G.reachableFrom(v1) & w in G.reachableFrom(v2)
by A2, XBOOLE_0:def 4;
then consider W1 being Walk of G such that
A4: W1 is_Walk_from v1,w by GLIB_002:def 5;
consider W2 being Walk of G such that
A5: W2 is_Walk_from v2,w by A3, GLIB_002:def 5;
W1.reverse() is_Walk_from w,v1 by A4, GLIB_001:23;
then W2.append(W1.reverse()) is_Walk_from v2,v1 by A5, GLIB_001:31;
hence contradiction by A1, GLIB_002:def 5;
end;
theorem Th23:
for G being _Graph holds G.componentSet() is a_partition of the_Vertices_of G
proof
let G be _Graph;
set V = the_Vertices_of G;
A1: union G.componentSet() = V by GLIB_002:24;
for A being Subset of V st A in G.componentSet() holds A <> {} &
for B being Subset of V st B in G.componentSet() holds A = B or A misses B
proof
let A be Subset of V;
assume A in G.componentSet();
then consider v being Vertex of G such that
A2: A = G.reachableFrom(v) by GLIB_002:def 8;
thus A <> {} by A2;
let B be Subset of V;
assume B in G.componentSet();
then consider w being Vertex of G such that
A3: B = G.reachableFrom(w) by GLIB_002:def 8;
per cases;
suppose v in G.reachableFrom(w);
hence thesis by A2, A3, GLIB_002:12;
end;
suppose not v in G.reachableFrom(w);
hence thesis by A2, A3, Th22;
end;
end;
hence thesis by A1, EQREL_1:def 4;
end;
theorem Th24:
for G being _Graph, C being a_partition of the_Vertices_of G,
v being Vertex of G
st C = G.componentSet() holds EqClass(v,C) = G.reachableFrom(v)
proof
let G be _Graph, C be a_partition of the_Vertices_of G, v be Vertex of G;
assume A1: C = G.componentSet();
EqClass(v,C) in C by EQREL_1:def 6;
then consider w being Vertex of G such that
A2: EqClass(v,C) = G.reachableFrom(w) by A1, GLIB_002:def 8;
v in EqClass(v,C) by EQREL_1:def 6;
hence thesis by A2, GLIB_002:12;
end;
:: holds more generally when G is non trivial and v0 is non cut-vertex;
:: however, this theorem is used to show that endvertex implies non cut-vertex
theorem Th25:
for G1 being _Graph, v0, v1 being Vertex of G1
for G2 being removeVertex of G1,v0, v2 being Vertex of G2
st v0 is endvertex & v1 = v2 & v1 in G1.reachableFrom(v0)
holds G2.reachableFrom(v2) = G1.reachableFrom(v1) \ {v0}
proof
let G1 be _Graph, v0,v1 be Vertex of G1;
let G2 be removeVertex of G1, v0, v2 be Vertex of G2;
assume A1: v0 is endvertex & v1 = v2 & v1 in G1.reachableFrom(v0);
then A2: G1 is non trivial by Th16;
then A3: the_Vertices_of G2 = the_Vertices_of G1 \ {v0} by GLIB_000:47;
for w being object holds w in G2.reachableFrom(v2) iff
w in G1.reachableFrom(v1) & not w in {v0}
proof
let w be object;
thus w in G2.reachableFrom(v2) implies w in G1.reachableFrom(v1) &
not w in {v0} by A1, A3, GLIB_002:14, TARSKI:def 3, XBOOLE_0:def 5;
assume A4: w in G1.reachableFrom(v1) & not w in {v0};
then consider W being Walk of G1 such that
A5: W is_Walk_from v1, w by GLIB_002:def 5;
set P = the Path of W;
v1 is set & w is set by TARSKI:1;
then A6: P is_Walk_from v1, w by A5, GLIB_001:160;
not v0 in P.vertices()
proof
assume v0 in P.vertices();
then per cases by A1, GLIB_001:143;
suppose v0 = P.first();
then v0 = v2 by A1, A6, GLIB_001:def 23;
then not v0 in {v0} by A3, XBOOLE_0:def 5;
hence contradiction by TARSKI:def 1;
end;
suppose v0 = P.last();
then v0 = w by A6, GLIB_001:def 23;
hence contradiction by A4, TARSKI:def 1;
end;
end;
then reconsider P as Walk of G2 by A2, GLIB_001:171;
P is_Walk_from v2, w by A1, A6, GLIB_001:19;
hence w in G2.reachableFrom(v2) by GLIB_002:def 5;
end;
hence thesis by XBOOLE_0:def 5;
end;
theorem Th26:
for G1 being non trivial _Graph, v0,v1 being Vertex of G1
for G2 being removeVertex of G1, v0, v2 being Vertex of G2
st v1 = v2 & not v1 in G1.reachableFrom(v0)
holds G2.reachableFrom(v2) = G1.reachableFrom(v1)
proof
let G1 be non trivial _Graph, v0,v1 be Vertex of G1;
let G2 be removeVertex of G1, v0, v2 be Vertex of G2;
assume A1: v1 = v2 & not v1 in G1.reachableFrom(v0);
then A2: G2.reachableFrom(v2) c= G1.reachableFrom(v1) by GLIB_002:14;
for w being object holds w in G1.reachableFrom(v1)
implies w in G2.reachableFrom(v2)
proof
let w be object;
assume w in G1.reachableFrom(v1);
then consider W being Walk of G1 such that
A3: W is_Walk_from v1, w by GLIB_002:def 5;
not v0 in W.vertices()
proof
assume A4: v0 in W.vertices();
reconsider m = 1 as odd Element of NAT by POLYFORM:4;
reconsider n = W.find(v0) as odd Element of NAT;
set U = W.cut(m,n);
m <= n & n <= len W by A4, GLIB_001:def 19, CHORD:2;
then U is_Walk_from W.m, W.n by GLIB_001:37;
then U is_Walk_from W.first(), W.n by GLIB_001:def 6;
then U is_Walk_from v1, W.n by A3, GLIB_001:def 23;
then U is_Walk_from v1, v0 by A4, GLIB_001:def 19;
then U.reverse() is_Walk_from v0, v1 by GLIB_001:23;
hence contradiction by A1, GLIB_002:def 5;
end;
then reconsider W2 = W as Walk of G2 by GLIB_001:171;
W2 is_Walk_from v2, w by A1, A3, GLIB_001:19;
hence w in G2.reachableFrom(v2) by GLIB_002:def 5;
end;
then G1.reachableFrom(v1) c= G2.reachableFrom(v2) by TARSKI:def 3;
hence thesis by A2, XBOOLE_0:def 10;
end;
theorem Th27:
for G being non trivial finite Tree-like _Graph, v being Vertex of G
st G.order() = 2 holds v is endvertex
proof
let G be non trivial finite Tree-like _Graph, v be Vertex of G;
assume G.order() = 2;
then card the_Vertices_of G = 2 by GLIB_000:def 24;
then consider v1, v2 being object such that
A1: v1 <> v2 & the_Vertices_of G = {v1,v2} by CARD_2:60;
consider w1,w2 being Vertex of G such that
A2: w1 <> w2 & w1 is endvertex & w2 is endvertex by GLIB_002:45;
(w1 = v1 or w1 = v2) & (w2 = v1 or w2 = v2) by A1, TARSKI:def 2;
then per cases by A2;
suppose w1 = v1 & w2 = v2;
hence thesis by A1, A2, TARSKI:def 2;
end;
suppose w1= v2 & w2 = v1;
hence thesis by A1, A2, TARSKI:def 2;
end;
end;
registration
let G be non trivial connected _Graph, v be Vertex of G;
cluster v.allNeighbors() -> non empty;
coherence by Th7, GLIB_002:2;
end;
:: END into GLIB_002 ?
:: into HELLY ?
theorem
for T being _Tree, a being Vertex of T holds T.pathBetween(a,a) = T.walkOf(a)
proof
let T be _Tree, a be Vertex of T;
consider b being Vertex of T such that
A1: T.pathBetween(a,a) = T.walkOf(b) by GLIB_001:128;
{a} = T.pathBetween(a,a).vertices() by HELLY:30
.= {b} by A1, GLIB_001:90;
hence thesis by A1, ZFMISC_1:3;
end;
:: into HELLY ?
theorem Th29:
for T being _Tree, a,b being Vertex of T, e being object
st e Joins a,b,T holds T.pathBetween(a,b) = T.walkOf(a,e,b)
by GLIB_001:15, HELLY:def 2;
:: into HELLY ?
theorem Th30:
for T being non trivial finite _Tree, v being Vertex of T
ex v1, v2 being Vertex of T
st v1 <> v2 & v1 is endvertex & v2 is endvertex &
v in T.pathBetween(v1,v2).vertices()
proof
defpred P[Nat] means for T being non trivial finite _Tree
for v being Vertex of T st T.order() = $1 + 2 holds
ex v1, v2 being Vertex of T
st v1 <> v2 & v1 is endvertex & v2 is endvertex &
v in T.pathBetween(v1,v2).vertices();
A1: P[0]
proof
let T be non trivial finite _Tree, v be Vertex of T;
assume A2: T.order() = 0 + 2;
then card the_Vertices_of T = 2 by GLIB_000:def 24;
then consider v1, v2 being object such that
A3: v1 <> v2 & the_Vertices_of T = {v1,v2} by CARD_2:60;
reconsider v1, v2 as Vertex of T by A3, TARSKI:def 2;
take v1, v2;
thus v1 <> v2 by A3;
thus v1 is endvertex & v2 is endvertex by A2, Th27;
v = v1 or v = v2 by A3, TARSKI:def 2;
hence thesis by HELLY:29;
end;
A4: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A5: P[k];
let T be non trivial finite _Tree, v be Vertex of T;
assume A6: T.order() = (k+1) + 2;
set v0 = the endvertex Vertex of T;
per cases;
suppose A7: v = v0;
consider v1, v2 being Vertex of T such that
A8: v1 <> v2 & v1 is endvertex & v2 is endvertex by GLIB_002:45;
per cases;
suppose A9: v <> v1;
take v, v1;
thus v <> v1 & v is endvertex & v1 is endvertex by A7, A8, A9;
thus thesis by HELLY:29;
end;
suppose A10: v = v1;
take v, v2;
thus v <> v2 & v is endvertex & v2 is endvertex by A8, A10;
thus thesis by HELLY:29;
end;
end;
suppose A11: v <> v0;
set T0 = the removeVertex of T, v0;
a12: T0.order() + 1 = k + 2 + 1 by A6, GLIB_000:48;
T0.order() <> 1
proof
assume T0.order() = 1;
then 0+1 = k + 1 + 1 by a12;
hence contradiction;
end;
then reconsider T0 as non trivial finite _Tree by GLIB_000:26;
not v in {v0} by A11, TARSKI:def 1;
then v in the_Vertices_of T \ {v0} by XBOOLE_0:def 5;
then v in the_Vertices_of T0 by GLIB_000:47;
then consider v1,v2 being Vertex of T0 such that
A13: v1 <> v2 & v1 is endvertex & v2 is endvertex and
A14: v in T0.pathBetween(v1,v2).vertices() by A5, a12;
the_Vertices_of T0 c= the_Vertices_of T by GLIB_000:def 32;
then reconsider w1 = v1, w2 = v2 as Vertex of T by TARSKI:def 3;
consider e0 being object such that
A15: v0.edgesInOut() = {e0} & not e0 Joins v0,v0,T by GLIB_000:def 51;
A16: the_Edges_of T0
= T.edgesBetween(the_Vertices_of T \ {v0}) by GLIB_000:47
.= T.edgesBetween(the_Vertices_of T) \ v0.edgesInOut() by Th1
.= the_Edges_of T \ {e0} by A15, GLIB_000:34;
consider e1 being object such that
A17: v1.edgesInOut() = {e1} & not e1 Joins v1,v1,T0
by A13, GLIB_000:def 51;
consider e2 being object such that
A18: v2.edgesInOut() = {e2} & not e2 Joins v2,v2,T0
by A13, GLIB_000:def 51;
v0 in {v0} by TARSKI:def 1;
then not v0 in the_Vertices_of T \ {v0} by XBOOLE_0:def 5;
then A19: not v0 in the_Vertices_of T0 by GLIB_000:47;
A20: w1 <> v0.adj(e0) implies w1 is endvertex
proof
assume A21: w1 <> v0.adj(e0);
A22: v1.edgesInOut() c= w1.edgesInOut() by GLIB_000:78;
for e being object st e in w1.edgesInOut() holds e in v1.edgesInOut()
proof
let e be object;
assume A23: e in w1.edgesInOut();
e <> e0
proof
assume e = e0;
then A24: e0 Joins w1,w1.adj(e0),T by A23, GLIB_000:67;
e0 in v0.edgesInOut() by A15, TARSKI:def 1;
then e0 Joins v0,v0.adj(e0),T by GLIB_000:67;
then w1 = v0 or w1 = v0.adj(e0) by A24, GLIB_000:15;
hence contradiction by A19, A21;
end;
then not e in {e0} by TARSKI:def 1;
then A25: e in the_Edges_of T0 by A16, A23, XBOOLE_0:def 5;
then (the_Source_of T0).e = (the_Source_of T).e &
(the_Target_of T0).e = (the_Target_of T).e by GLIB_000:def 32;
then (the_Source_of T0).e = w1 or (the_Target_of T0).e = w1
by A23, GLIB_000:61;
hence thesis by A25, GLIB_000:61;
end;
then w1.edgesInOut() c= v1.edgesInOut() by TARSKI:def 3;
then v1.edgesInOut() = w1.edgesInOut() by A22, XBOOLE_0:def 10;
hence w1 is endvertex by A17, GLIB_000:18, GLIB_000:def 51;
end;
A26: w2 <> v0.adj(e0) implies w2 is endvertex
proof
assume A27: w2 <> v0.adj(e0);
A28: v2.edgesInOut() c= w2.edgesInOut() by GLIB_000:78;
for e being object st e in w2.edgesInOut() holds e in v2.edgesInOut()
proof
let e be object;
assume A29: e in w2.edgesInOut();
e <> e0
proof
assume e = e0;
then A30: e0 Joins w2,w2.adj(e0),T by A29, GLIB_000:67;
e0 in v0.edgesInOut() by A15, TARSKI:def 1;
then e0 Joins v0,v0.adj(e0),T by GLIB_000:67;
then w2 = v0 or w2 = v0.adj(e0) by A30, GLIB_000:15;
hence contradiction by A19, A27;
end;
then not e in {e0} by TARSKI:def 1;
then A31: e in the_Edges_of T0 by A16, A29, XBOOLE_0:def 5;
then (the_Source_of T0).e = (the_Source_of T).e &
(the_Target_of T0).e = (the_Target_of T).e by GLIB_000:def 32;
then (the_Source_of T0).e = w2 or (the_Target_of T0).e = w2
by A29, GLIB_000:61;
hence thesis by A31, GLIB_000:61;
end;
then w2.edgesInOut() c= v2.edgesInOut() by TARSKI:def 3;
then v2.edgesInOut() = w2.edgesInOut() by A28, XBOOLE_0:def 10;
hence w2 is endvertex by A18, GLIB_000:18, GLIB_000:def 51;
end;
A32: T0.pathBetween(v1,v2) = T.pathBetween(w1,w2) by HELLY:33;
per cases;
suppose A33: w1 = v0.adj(e0);
then A34: w2 <> v0.adj(e0) by A13;
take v0, w2;
thus v0 <> w2 & v0 is endvertex & w2 is endvertex by A19, A26, A34;
e0 in v0.edgesInOut() by A15, TARSKI:def 1;
then A35: e0 Joins v0, w1, T by A33, GLIB_000:67;
then A36: T.walkOf(v0,e0,w1) = T.pathBetween(v0,w1) by Th29;
set P1 = T.pathBetween(v0,w1), P2 = T.pathBetween(w1,w2);
set P = P1.append(P2);
A37: P1.last() = w1 & P2.first() = w1 by HELLY:28;
for x being object holds x in P1.vertices() /\ P2.vertices()
iff x = w1
proof
let x be object;
hereby
assume x in P1.vertices() /\ P2.vertices();
then A38: x in P1.vertices() & x in P2.vertices()
by XBOOLE_0:def 4;
then A39: x in {v0,w1} by A35, A36, GLIB_001:91;
x in T0.pathBetween(v1,v2).vertices() by A32, A38, GLIB_001:98;
then x in the_Vertices_of T0;
hence x = w1 by A19, A39, TARSKI:def 2;
end;
assume x = w1;
then x = P1.last() & x = P2.first() by HELLY:28;
then x in P1.vertices() & x in P2.vertices() by GLIB_001:88;
hence thesis by XBOOLE_0:def 4;
end;
then P1.vertices() /\ P2.vertices() = {P1.last()} by A37,TARSKI:def 1;
then reconsider P as Path of T by A37, HELLY:38;
P1 is_Walk_from v0,w1 & P2 is_Walk_from w1,w2 by HELLY:def 2;
then A40: P = T.pathBetween(v0,w2) by GLIB_001:31, HELLY:def 2;
T0.pathBetween(v1,v2).vertices() = P2.vertices()
by HELLY:33, GLIB_001:98;
then v in P1.vertices() \/ P2.vertices() by A14, XBOOLE_0:def 3;
hence thesis by A37, A40, GLIB_001:93;
end;
suppose A41: w2 = v0.adj(e0);
then A42: w1 <> v0.adj(e0) by A13;
take w1, v0;
thus w1 <> v0 & w1 is endvertex & v0 is endvertex by A19, A20, A42;
e0 in v0.edgesInOut() by A15, TARSKI:def 1;
then A43: e0 Joins w2, v0, T by A41, GLIB_000:67, GLIB_000:14;
then A44: T.walkOf(w2,e0,v0) = T.pathBetween(w2,v0) by Th29;
set P1 = T.pathBetween(w1,w2), P2 = T.pathBetween(w2,v0);
set P = P1.append(P2);
A45: P1.last() = w2 & P2.first() = w2 by HELLY:28;
for x being object holds x in P1.vertices() /\ P2.vertices()
iff x = w2
proof
let x be object;
hereby
assume x in P1.vertices() /\ P2.vertices();
then A46: x in P1.vertices() & x in P2.vertices()
by XBOOLE_0:def 4;
then A47: x in {w2,v0} by A43, A44, GLIB_001:91;
x in T0.pathBetween(v1,v2).vertices() by A32, A46, GLIB_001:98;
then x in the_Vertices_of T0;
hence x = w2 by A19, A47, TARSKI:def 2;
end;
assume x = w2;
then x in P1.vertices() & x in P2.vertices() by GLIB_001:88, A45;
hence thesis by XBOOLE_0:def 4;
end;
then P1.vertices() /\ P2.vertices() = {P1.last()} by A45,TARSKI:def 1;
then reconsider P as Path of T by A45, HELLY:38;
P1 is_Walk_from w1,w2 & P2 is_Walk_from w2,v0 by HELLY:def 2;
then A48: P = T.pathBetween(w1,v0) by GLIB_001:31, HELLY:def 2;
T0.pathBetween(v1,v2).vertices() = P1.vertices()
by HELLY:33, GLIB_001:98;
then v in P1.vertices() \/ P2.vertices() by A14, XBOOLE_0:def 3;
hence thesis by A45, A48, GLIB_001:93;
end;
suppose A49: w1 <> v0.adj(e0) & w2 <> v0.adj(e0);
take w1, w2;
thus w1<>w2 & w1 is endvertex & w2 is endvertex by A13, A20, A26, A49;
thus thesis by A14, GLIB_001:98, HELLY:33;
end;
end;
end;
A50: for k being Nat holds P[k] from NAT_1:sch 2(A1,A4);
let T be non trivial finite _Tree, v be Vertex of T;
T.order() >= 1 & T.order() <> 1 by GLIB_000:25, GLIB_000:26;
then T.order() > 1 by XXREAL_0:1;
then T.order() >= 1+1 by INT_1:7;
then consider k being Nat such that
A51: T.order() = 2 + k by NAT_1:10;
thus thesis by A50, A51;
end;
:: into HELLY ?
theorem Th31:
for G1 being non trivial finite Tree-like _Graph
for G2 being non spanning connected Subgraph of G1
ex v being Vertex of G1 st v is endvertex & not v in the_Vertices_of G2
proof
let G1 be non trivial finite Tree-like _Graph;
let G2 be non spanning connected Subgraph of G1;
assume A1: for v being Vertex of G1 holds not v is endvertex or
v in the_Vertices_of G2;
A2: not the_Vertices_of G1 c= the_Vertices_of G2
by GLIB_000:def 33, XBOOLE_0:def 10;
:: Now we show the negation
for x being object st x in the_Vertices_of G1 holds x in the_Vertices_of G2
proof
let x be object;
assume x in the_Vertices_of G1;
then reconsider v = x as Vertex of G1;
consider v1, v2 being Vertex of G1 such that
A3: v1 <> v2 & v1 is endvertex & v2 is endvertex and
A4: v in G1.pathBetween(v1,v2).vertices() by Th30;
reconsider w1 = v1, w2 = v2 as Vertex of G2 by A1, A3;
v in G2.pathBetween(w1,w2).vertices() by A4, HELLY:33, GLIB_001:98;
hence thesis;
end;
hence contradiction by A2, TARSKI:def 3;
end;
:: START into GLIB_006 ?
theorem Th32:
for G2, G3 being _Graph, V being set, G1 being addVertices of G2, V
st G2 == G3 holds G1 is addVertices of G3, V
proof
let G2, G3 be _Graph, V be set, G1 be addVertices of G2, V;
assume A1: G2 == G3;
then the_Vertices_of G3 = the_Vertices_of G2 &
the_Edges_of G3 = the_Edges_of G2 &
the_Target_of G3 = the_Target_of G2 &
the_Source_of G3 = the_Source_of G2 by GLIB_000:def 34;
then A2: the_Vertices_of G1 = the_Vertices_of G3 \/ V &
the_Edges_of G1 = the_Edges_of G3 &
the_Source_of G1 = the_Source_of G3 &
the_Target_of G1 = the_Target_of G3 by GLIB_006:def 10;
G2 is Supergraph of G3 by A1, GLIB_006:58;
then G1 is Supergraph of G3 by GLIB_006:62;
hence thesis by A2, GLIB_006:def 10;
end;
theorem Th33:
for G2 being _Graph, G1 being Supergraph of G2
st the_Edges_of G1 = the_Edges_of G2
holds G1 is addVertices of G2, the_Vertices_of G1 \ the_Vertices_of G2
proof
let G2 be _Graph, G1 be Supergraph of G2;
assume A1: the_Edges_of G1 = the_Edges_of G2;
the_Vertices_of G2 c= the_Vertices_of G1 by GLIB_006:def 9;
then A2: the_Vertices_of G1 = the_Vertices_of G2 \/
(the_Vertices_of G1 \ the_Vertices_of G2) by XBOOLE_1:45;
A3: the_Source_of G2 = (the_Source_of G1)|the_Edges_of G2 by GLIB_006:69
.= the_Source_of G1 by A1;
the_Target_of G2 = (the_Target_of G1)|the_Edges_of G2 by GLIB_006:69
.= the_Target_of G1 by A1;
hence thesis by A1, A2, A3, GLIB_006:def 10;
end;
theorem Th34:
for G1 being finite _Graph, G2 being Subgraph of G1 st G1.size() = G2.size()
holds G1 is addVertices of G2, the_Vertices_of G1 \ the_Vertices_of G2
proof
let G1 be finite _Graph, G2 be Subgraph of G1;
assume A1: G1.size() = G2.size();
card the_Edges_of G2 = G2.size() by GLIB_000:def 25
.= card the_Edges_of G1 by A1, GLIB_000:def 25;
then A2: the_Edges_of G1 = the_Edges_of G2 by CARD_2:102;
G1 is Supergraph of G2 by GLIB_006:57;
hence thesis by A2, Th33;
end;
theorem
for G1 being non trivial _Graph, v being Vertex of G1
for G2 being removeVertex of G1, v st v is isolated
holds G1 is addVertex of G2, v
proof
let G1 be non trivial _Graph, v be Vertex of G1;
let G2 be removeVertex of G1, v;
assume A1: v is isolated;
A2: G1 is Supergraph of G2 by GLIB_006:57;
A3: the_Vertices_of G1 = (the_Vertices_of G1 \ {v}) \/ {v} by ZFMISC_1:116
.= the_Vertices_of G2 \/ {v} by GLIB_000:47;
A4: the_Edges_of G1 = G1.edgesBetween(the_Vertices_of G1) by GLIB_000:34
.= G1.edgesBetween(the_Vertices_of G1 \ {v}) by A1, Th2
.= the_Edges_of G2 by GLIB_000:47;
A5: dom the_Source_of G1 = the_Edges_of G1 by FUNCT_2:def 1
.= dom the_Source_of G2 by A4, FUNCT_2:def 1;
for e being object st e in dom the_Source_of G2 holds
(the_Source_of G2).e = (the_Source_of G1).e by GLIB_000:def 32;
then A6: the_Source_of G1 = the_Source_of G2 by A5, FUNCT_1:2;
A7: dom the_Target_of G1 = the_Edges_of G1 by FUNCT_2:def 1
.= dom the_Target_of G2 by A4, FUNCT_2:def 1;
for e being object st e in dom the_Target_of G2 holds
(the_Target_of G2).e = (the_Target_of G1).e by GLIB_000:def 32;
then the_Target_of G1 = the_Target_of G2 by A7, FUNCT_1:2;
hence thesis by A2, A3, A4, A6, GLIB_006:def 10;
end;
theorem Th36:
for G2, G3 being _Graph, v1,e,v2 being object, G1 being addEdge of G2,v1,e,v2
st G2 == G3 holds G1 is addEdge of G3,v1,e,v2
proof
let G2, G3 be _Graph, v1,e,v2 be object;
let G1 be addEdge of G2,v1,e,v2;
assume A1: G2 == G3;
then A2: the_Vertices_of G3 = the_Vertices_of G2 &
the_Edges_of G3 = the_Edges_of G2 &
the_Target_of G3 = the_Target_of G2 &
the_Source_of G3 = the_Source_of G2 by GLIB_000:def 34;
per cases;
suppose A3: v1 in the_Vertices_of G2 & v2 in the_Vertices_of G2 &
not e in the_Edges_of G2;
then A4: the_Vertices_of G1 = the_Vertices_of G3 &
the_Edges_of G1 = the_Edges_of G3 \/ {e} &
the_Source_of G1 = the_Source_of G3 +* (e .--> v1) &
the_Target_of G1 = the_Target_of G3 +* (e .--> v2)
by A2, GLIB_006:def 11;
G2 is Supergraph of G3 by A1, GLIB_006:58;
then G1 is Supergraph of G3 by GLIB_006:62;
hence thesis by A2, A3, A4, GLIB_006:def 11;
end;
suppose A5: not (v1 in the_Vertices_of G2 & v2 in the_Vertices_of G2 &
not e in the_Edges_of G2);
then G1 == G2 by GLIB_006:def 11;
then A6: G1 == G3 by A1, GLIB_000:85;
then G1 is Supergraph of G3 by GLIB_006:58;
hence thesis by A2, A5, A6, GLIB_006:def 11;
end;
end;
theorem Th37:
for G1 being _Graph, e being set, G2 being removeEdge of G1, e
st e in the_Edges_of G1
holds G1 is addEdge of G2, (the_Source_of G1).e, e, (the_Target_of G1).e
proof
let G1 be _Graph, e be set, G2 be removeEdge of G1, e;
assume A1: e in the_Edges_of G1;
set u = (the_Source_of G1).e, w = (the_Target_of G1).e;
A2: G1 is Supergraph of G2 by GLIB_006:57;
A3: the_Vertices_of G1 = the_Vertices_of G2 by GLIB_000:51;
A4: the_Edges_of G1 = (the_Edges_of G1 \ {e}) \/ {e} by A1, ZFMISC_1:116
.= the_Edges_of G2 \/ {e} by GLIB_000:51;
A5: dom the_Source_of G1 = the_Edges_of G1 by FUNCT_2:def 1
.= dom the_Source_of G2 \/ dom({e} --> u) by A4, FUNCT_2:def 1
.= dom the_Source_of G2 \/ dom(e .--> u) by FUNCOP_1:def 9
.= dom(the_Source_of G2 +* (e .--> u)) by FUNCT_4:def 1;
for e0 being object st e0 in dom the_Source_of G1
holds (the_Source_of G1).e0 = (the_Source_of G2 +* (e .--> u)).e0
proof
let e0 be object;
assume A6: e0 in dom the_Source_of G1;
per cases;
suppose e0 = e;
hence (the_Source_of G1).e0
= (the_Source_of G2 +* (e .--> u)).e0 by FUNCT_4:113;
end;
suppose A7: e0 <> e;
then not e0 in {e} by TARSKI:def 1;
then e0 in the_Edges_of G1 \ {e} by A6, XBOOLE_0:def 5;
then e0 in the_Edges_of G2 by GLIB_000:51;
hence (the_Source_of G1).e0 = (the_Source_of G2).e0 by GLIB_000:def 32
.= (the_Source_of G2 +* (e .--> u)).e0 by A7, FUNCT_4:83;
end;
end;
then A8: the_Source_of G1 = the_Source_of G2 +* (e .--> u) by A5, FUNCT_1:2;
A9: dom the_Target_of G1 = the_Edges_of G1 by FUNCT_2:def 1
.= dom the_Target_of G2 \/ dom({e} --> w) by A4, FUNCT_2:def 1
.= dom the_Target_of G2 \/ dom(e .--> w) by FUNCOP_1:def 9
.= dom(the_Target_of G2 +* (e .--> w)) by FUNCT_4:def 1;
for e0 being object st e0 in dom the_Target_of G1
holds (the_Target_of G1).e0 = (the_Target_of G2 +* (e .--> w)).e0
proof
let e0 be object;
assume A10: e0 in dom the_Target_of G1;
per cases;
suppose e0 = e;
hence (the_Target_of G1).e0
= (the_Target_of G2 +* (e .--> w)).e0 by FUNCT_4:113;
end;
suppose A11: e0 <> e;
then not e0 in {e} by TARSKI:def 1;
then e0 in the_Edges_of G1 \ {e} by A10, XBOOLE_0:def 5;
then e0 in the_Edges_of G2 by GLIB_000:51;
hence (the_Target_of G1).e0 = (the_Target_of G2).e0 by GLIB_000:def 32
.= (the_Target_of G2 +* (e .--> w)).e0 by A11, FUNCT_4:83;
end;
end;
then A12: the_Target_of G1 = the_Target_of G2 +*(e .--> w) by A9, FUNCT_1:2;
A13: u in the_Vertices_of G2 & w in the_Vertices_of G2 by A1, A3, FUNCT_2:5;
e in {e} by TARSKI:def 1;
then not e in the_Edges_of G1 \ {e} by XBOOLE_0:def 5;
then not e in the_Edges_of G2 by GLIB_000:51;
hence thesis by A2, A3, A4, A8, A12, A13, GLIB_006:def 11;
end;
theorem Th38:
for G1 being non trivial _Graph, v being Vertex of G1, e being object
for G2 being removeVertex of G1, v
st {e} = v.edgesInOut() & not e Joins v,v,G1 :: i.e. v is endvertex
holds G1 is addAdjVertex of G2, v.adj(e), e, v
or G1 is addAdjVertex of G2, v, e, v.adj(e)
proof
let G1 be non trivial _Graph, v be Vertex of G1, e be object;
let G2 be removeVertex of G1, v;
assume A1: {e} = v.edgesInOut() & not e Joins v,v,G1;
A2: G1 is Supergraph of G2 by GLIB_006:57;
A3: the_Vertices_of G1 = (the_Vertices_of G1 \ {v}) \/ {v} by ZFMISC_1:116
.= the_Vertices_of G2 \/ {v} by GLIB_000:47;
A4: e in {e} by TARSKI:def 1;
A5: the_Edges_of G1 = (the_Edges_of G1 \ {e}) \/ {e} by A1, A4, ZFMISC_1:116
.= (G1.edgesBetween(the_Vertices_of G1) \ v.edgesInOut()) \/ {e}
by A1, GLIB_000:34
.= G1.edgesBetween(the_Vertices_of G1 \ {v}) \/ {e} by Th1
.= the_Edges_of G2 \/ {e} by GLIB_000:47;
set u = (the_Source_of G1).e, w = (the_Target_of G1).e;
v in {v} by TARSKI:def 1;
then not v in the_Vertices_of G1 \ {v} by XBOOLE_0:def 5;
then A6: not v in the_Vertices_of G2 by GLIB_000:47;
not e in G1.edgesBetween(the_Vertices_of G1) \ v.edgesInOut()
by A1, A4, XBOOLE_0:def 5;
then not e in G1.edgesBetween(the_Vertices_of G1 \ {v}) by Th1;
then A7: not e in the_Edges_of G2 by GLIB_000:47;
e in v.edgesInOut() by A1, TARSKI:def 1;
then A8: v <> v.adj(e) by A1, GLIB_000:67;
then not v.adj(e) in {v} by TARSKI:def 1;
then v.adj(e) in the_Vertices_of G1 \ {v} by XBOOLE_0:def 5;
then A9: v.adj(e) in the_Vertices_of G2 by GLIB_000:47;
A10: dom the_Source_of G1 = the_Edges_of G1 by FUNCT_2:def 1
.= dom the_Source_of G2 \/ {e} by A5, FUNCT_2:def 1;
A11: dom the_Target_of G1 = the_Edges_of G1 by FUNCT_2:def 1
.= dom the_Target_of G2 \/ {e} by A5, FUNCT_2:def 1;
e in v.edgesInOut() by A1, TARSKI:def 1;
then per cases by GLIB_000:61;
suppose A12: u = v;
then A13: w = v.adj(e) by A1, A4, A8, GLIB_000:def 41;
:: we show G1 is addAdjVertex of G2, v, e, v.adj(e)
:: using the second part of the definition
A14: dom the_Source_of G1 = dom the_Source_of G2 \/ dom({e} --> v)
by A10
.= dom(the_Source_of G2 +* ({e} --> v)) by FUNCT_4:def 1
.= dom(the_Source_of G2 +* (e .--> v)) by FUNCOP_1:def 9;
for e0 being object st e0 in dom the_Source_of G1
holds (the_Source_of G1).e0 = (the_Source_of G2 +* (e .--> v)).e0
proof
let e0 be object;
assume A15: e0 in dom the_Source_of G1;
per cases;
suppose e0 = e;
hence (the_Source_of G1).e0
= (the_Source_of G2 +* (e .--> v)).e0 by A12, FUNCT_4:113;
end;
suppose A16: e0 <> e;
then not e0 in {e} by TARSKI:def 1;
then e0 in the_Edges_of G2 by A5, A15, XBOOLE_0:def 3;
hence (the_Source_of G1).e0 = (the_Source_of G2).e0 by GLIB_000:def 32
.= (the_Source_of G2 +* (e .--> v)).e0 by A16, FUNCT_4:83;
end;
end;
then A17: the_Source_of G1 = the_Source_of G2 +* (e .--> v)
by A14, FUNCT_1:2;
A18: dom the_Target_of G1 = dom the_Target_of G2 \/ dom({e} --> v.adj(e))
by A11
.= dom(the_Target_of G2 +* ({e} --> v.adj(e))) by FUNCT_4:def 1
.= dom(the_Target_of G2 +* (e .--> v.adj(e))) by FUNCOP_1:def 9;
for e0 being object st e0 in dom the_Target_of G1
holds (the_Target_of G1).e0 = (the_Target_of G2 +* (e .--> v.adj(e))).e0
proof
let e0 be object;
assume A19: e0 in dom the_Target_of G1;
per cases;
suppose e0 = e;
hence (the_Target_of G1).e0 =
(the_Target_of G2 +* (e .--> v.adj(e))).e0 by A13, FUNCT_4:113;
end;
suppose A20: e0 <> e;
then not e0 in {e} by TARSKI:def 1;
then e0 in the_Edges_of G2 by A5, A19, XBOOLE_0:def 3;
hence (the_Target_of G1).e0 = (the_Target_of G2).e0 by GLIB_000:def 32
.= (the_Target_of G2 +* (e .--> v.adj(e))).e0 by A20, FUNCT_4:83;
end;
end;
then the_Target_of G1 = the_Target_of G2 +* (e .--> v.adj(e))
by A18, FUNCT_1:2;
hence thesis by A2, A3, A5, A6, A7, A9, A17, GLIB_006:def 12;
end;
suppose A21: w = v;
then A22: u = v.adj(e) by A1, A4, GLIB_000:def 41;
:: we show G1 is addAdjVertex of G2, v.adj(e), e, v
:: using the first part of the definition
A23: dom the_Target_of G1 = dom the_Target_of G2 \/ dom({e} --> v)
by A11
.= dom(the_Target_of G2 +* ({e} --> v)) by FUNCT_4:def 1
.= dom(the_Target_of G2 +* (e .--> v)) by FUNCOP_1:def 9;
for e0 being object st e0 in dom the_Target_of G1
holds (the_Target_of G1).e0 = (the_Target_of G2 +* (e .--> v)).e0
proof
let e0 be object;
assume A24: e0 in dom the_Target_of G1;
per cases;
suppose e0 = e;
hence (the_Target_of G1).e0 =
(the_Target_of G2 +* (e .--> v)).e0 by A21, FUNCT_4:113;
end;
suppose A25: e0 <> e;
then not e0 in {e} by TARSKI:def 1;
then e0 in the_Edges_of G2 by A5, A24, XBOOLE_0:def 3;
hence (the_Target_of G1).e0 = (the_Target_of G2).e0 by GLIB_000:def 32
.= (the_Target_of G2 +* (e .--> v)).e0 by A25, FUNCT_4:83;
end;
end;
then A26: the_Target_of G1 = the_Target_of G2 +* (e .--> v)
by A23, FUNCT_1:2;
A27: dom the_Source_of G1 = dom the_Source_of G2 \/ dom({e} --> v.adj(e))
by A10
.= dom(the_Source_of G2 +* ({e} --> v.adj(e))) by FUNCT_4:def 1
.= dom(the_Source_of G2 +* (e .--> v.adj(e))) by FUNCOP_1:def 9;
for e0 being object st e0 in dom the_Source_of G1
holds (the_Source_of G1).e0 = (the_Source_of G2 +* (e .--> v.adj(e))).e0
proof
let e0 be object;
assume A28: e0 in dom the_Source_of G1;
per cases;
suppose e0 = e;
hence (the_Source_of G1).e0 =
(the_Source_of G2 +* (e .--> v.adj(e))).e0 by A22, FUNCT_4:113;
end;
suppose A29: e0 <> e;
then not e0 in {e} by TARSKI:def 1;
then e0 in the_Edges_of G2 by A5, A28, XBOOLE_0:def 3;
hence (the_Source_of G1).e0 = (the_Source_of G2).e0 by GLIB_000:def 32
.= (the_Source_of G2 +* (e .--> v.adj(e))).e0 by A29, FUNCT_4:83;
end;
end;
then the_Source_of G1 = the_Source_of G2 +* (e .--> v.adj(e))
by A27, FUNCT_1:2;
hence thesis by A2, A3, A5, A6, A7, A9, A26, GLIB_006:def 12;
end;
end;
theorem Th39:
for G2 being _Graph, v1,v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
for w being Vertex of G1, v being Vertex of G2
st v2 in G2.reachableFrom(v1) & v = w
holds G1.reachableFrom(w) = G2.reachableFrom(v)
proof
let G2 be _Graph, v1,v2 be Vertex of G2, e be object;
let G1 be addEdge of G2,v1,e,v2;
let w be Vertex of G1, v be Vertex of G2;
assume that
A1: v2 in G2.reachableFrom(v1) and
A2: w = v;
per cases;
suppose A3: not e in the_Edges_of G2;
G2 is Subgraph of G1 by GLIB_006:57;
then A4: G2.reachableFrom(v) c= G1.reachableFrom(w) by A2, GLIB_002:14;
for y being object holds y in G1.reachableFrom(w)
implies y in G2.reachableFrom(v)
proof
let y be object;
assume y in G1.reachableFrom(w);
then consider W1 being Walk of G1 such that
A5: W1 is_Walk_from w,y by GLIB_002:def 5;
set T = the Trail of W1;
y is set by TARSKI:1;
then A6: T is_Walk_from w,y by A5, GLIB_001:160;
per cases;
suppose not e in T.edges();
then reconsider W2 = T as Walk of G2 by GLIB_006:109;
W2 is_Walk_from v,y by A6, A2, GLIB_001:19;
hence y in G2.reachableFrom(v) by GLIB_002:def 5;
end;
suppose e in T.edges();
then consider w1, w2 being Vertex of G1, n being odd Element of NAT
such that
A7: n+2 <= len T and
A8: w1 = T.n & e = T.(n+1) & w2 = T.(n+2) and
A9: e Joins w1,w2,G1 by GLIB_001:103;
set E = G1.walkOf(w1,e,w2);
A10: E is_odd_substring_of T,0 by A7, A8, GLIB_006:27;
e DJoins v1,v2,G1 by A3, GLIB_006:105;
then A11: e Joins v1,v2,G1 by GLIB_000:16;
then per cases by A9, GLIB_000:15;
suppose A12: v1 = w1 & v2 = w2;
consider W2 being Walk of G2 such that
A13: W2 is_Walk_from v1,v2 by A1, GLIB_002:def 5;
reconsider W4 = W2 as Walk of G1 by GLIB_006:75;
not e in W2.edges() by A3;
then A14: not e in W4.edges() by GLIB_001:110;
set W5 = T.replaceEdgeWith(e,W4);
A15: W5 is_Walk_from v,y by A2, A6, GLIB_006:47;
W2.first() = v1 & W2.last() = v2 by A13, GLIB_001:def 23;
then W4.first() = v1 & W4.last() = v2 by GLIB_001:16;
then not e in W5.edges() by A11, A14, GLIB_006:40, A10, A12;
then reconsider W = W5 as Walk of G2 by GLIB_006:109;
W is_Walk_from v,y by A15, GLIB_001:19;
hence y in G2.reachableFrom(v) by GLIB_002:def 5;
end;
suppose A17: v1 = w2 & v2 = w1;
consider W3 being Walk of G2 such that
A18: W3 is_Walk_from v1,v2 by A1, GLIB_002:def 5;
A19: W3.reverse() is_Walk_from v2,v1 by A18, GLIB_001:23;
reconsider W4 = W3.reverse() as Walk of G1 by GLIB_006:75;
not e in W3.reverse().edges() by A3;
then A20: not e in W4.edges() by GLIB_001:110;
set W5 = T.replaceEdgeWith(e,W4);
A21: W5 is_Walk_from v,y by A2, A6, GLIB_006:47;
W3.reverse().first() = v2 & W3.reverse().last() = v1
by A19, GLIB_001:def 23;
then W4.first() = v2 & W4.last() = v1 by GLIB_001:16;
then not e in W5.edges()
by A11, A20, GLIB_006:40, GLIB_000:14, A10, A17;
then reconsider W = W5 as Walk of G2 by GLIB_006:109;
W is_Walk_from v,y by A21, GLIB_001:19;
hence y in G2.reachableFrom(v) by GLIB_002:def 5;
end;
end;
end;
then G1.reachableFrom(w) c= G2.reachableFrom(v) by TARSKI:def 3;
hence G1.reachableFrom(w) = G2.reachableFrom(v) by A4, XBOOLE_0:def 10;
end;
suppose e in the_Edges_of G2;
then G1 == G2 by GLIB_006:def 11;
hence thesis by A2, GLIB_002:17;
end;
end;
theorem Th40:
for G2 being _Graph, v1, v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
st v2 in G2.reachableFrom(v1) holds G1.componentSet() = G2.componentSet()
proof
let G2 be _Graph, v1,v2 be Vertex of G2, e be object;
let G1 be addEdge of G2,v1,e,v2;
assume A1: v2 in G2.reachableFrom(v1);
per cases;
suppose A2: not e in the_Edges_of G2;
then A3: the_Vertices_of G1 = the_Vertices_of G2 by GLIB_006:def 11;
for x being set holds x in G2.componentSet() iff ex v being Vertex of G1
st x = G1.reachableFrom(v)
proof
let x be set;
hereby
assume x in G2.componentSet();
then consider v0 being Vertex of G2 such that
A4: x = G2.reachableFrom(v0) by GLIB_002:def 8;
reconsider v = v0 as Vertex of G1 by A2, GLIB_006:def 11;
take v;
thus x = G1.reachableFrom(v) by A1, A4, Th39;
end;
given v being Vertex of G1 such that
A5: x = G1.reachableFrom(v);
ex v0 being Vertex of G2 st x = G2.reachableFrom(v0)
proof
reconsider v0 = v as Vertex of G2 by A2, GLIB_006:def 11;
take v0;
thus thesis by A1, A5, Th39;
end;
hence x in G2.componentSet() by GLIB_002:def 8;
end;
hence G1.componentSet() = G2.componentSet() by A3, GLIB_002:def 8;
end;
suppose e in the_Edges_of G2;
then G1 == G2 by GLIB_006:def 11;
hence thesis by GLIB_002:26;
end;
end;
:: v1 and v2 are connected in supergraph
theorem Th41:
for G2 being _Graph, v1,v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
for w1, w2 being Vertex of G1
st not e in the_Edges_of G2 & w1 = v1 & w2 = v2
holds w2 in G1.reachableFrom(w1)
proof
let G2 be _Graph, v1,v2 be Vertex of G2, e be object;
let G1 be addEdge of G2,v1,e,v2;
let w1, w2 be Vertex of G1;
assume that
A1: not e in the_Edges_of G2 and
A2: w1 = v1 & w2 = v2;
e DJoins v1,v2,G1 by A1, GLIB_006:105;
then e Joins w1,v2,G1 by A2, GLIB_000:16;
then G1.walkOf(w1,e,w2) is_Walk_from w1,w2 by A2, GLIB_001:15;
hence thesis by GLIB_002:def 5;
end;
:: their components are connected as well
theorem Th42:
for G2 being _Graph, v1,v2 being Vertex of G2, 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)
proof
let G2 be _Graph, v1,v2 be Vertex of G2, e be object;
let G1 be addEdge of G2,v1,e,v2, w1 be Vertex of G1;
assume A1: not e in the_Edges_of G2 & w1 = v1;
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 holds x in G1.reachableFrom(w1)
implies x in G2.reachableFrom(v1) \/ G2.reachableFrom(v2)
proof
let x be object;
assume A4: x in G1.reachableFrom(w1);
per cases;
suppose x = w1;
then x in G2.reachableFrom(v1) by GLIB_002:9, A1;
hence thesis by XBOOLE_0:def 3;
end;
suppose A5: x <> w1;
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: P1 is_Walk_from x, w1 by A7, GLIB_001:160;
per cases;
suppose not e in P1.edges();
then reconsider W2 = P1 as Walk of G2 by GLIB_006:109;
W2 is_Walk_from x, w1 by A8, GLIB_001:19;
then W2.reverse() is_Walk_from v1, x by A1, GLIB_001:23;
then x in G2.reachableFrom(v1) by GLIB_002:def 5;
hence thesis by XBOOLE_0:def 3;
end;
suppose e in P1.edges();
then consider u1, u2 being Vertex of G1, n being odd Element of NAT
such that
A9: n+2 <= len P1 & u1 = P1.n & e = P1.(n+1) & u2 = P1.(n+2) and
A10: e Joins u1,u2,G1 by GLIB_001:103;
A11: v2 = u1 & v1 = u2
proof
assume not (v2 = u1 & v1 = u2);
then A12: v1 = P1.n by A3, A9, A10, GLIB_000:15;
A13: P1.len P1 = P1.last() by GLIB_001:def 7
.= v1 by A1, A8, GLIB_001:def 23;
n+2-2 < len P1 - 0 by A9, XREAL_1:15;
then n = 1 by A12, A13, GLIB_001:def 28;
then v1 = P1.first() by A12, GLIB_001:def 6
.= x by A8, GLIB_001:def 23;
hence contradiction by A1, A5;
end;
set P2 = P1.cut(1,n);
not e in P2.edges()
proof
assume e in P2.edges();
then consider u3, u4 being Vertex of G1, m being odd Element of NAT
such that
A14: m+2 <= len P2 & u3 = P2.m & e = P2.(m+1) & u4 = P2.(m+2) and
e Joins u3,u4,G1 by GLIB_001:103;
n+2-2 <= len P1 - 0 by A9, XREAL_1:13;
then A15: 1 <= n & n <= len P1 by ABIAN:12;
A16: m+2-2 < len P2 - 0 by A14, XREAL_1:15;
then A17: P1.(m+1) = P1.(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 P1 - 0 by A9, XREAL_1:13;
hence contradiction by A17, A18, A19, GLIB_001:138;
end;
then reconsider W2 = P2 as Walk of G2 by GLIB_006:109;
n+2-2 <= len P1 - 0 by A9, XREAL_1:13;
then 1 <= n & n <= len P1 by ABIAN:12;
then P2 is_Walk_from P1.1, P1.n by POLYFORM:4, GLIB_001:37;
then W2 is_Walk_from P1.1, P1.n by GLIB_001:19;
then W2 is_Walk_from P1.first(), P1.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 thesis by XBOOLE_0:def 3;
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 thesis by A20, XBOOLE_0:def 10;
end;
:: the other components stay unaffected
theorem Th43:
for G2 being _Graph, v1,v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
for w being Vertex of G1, v being Vertex of G2
st not e in the_Edges_of G2 & v = w &
not v in G2.reachableFrom(v1) & not v in G2.reachableFrom(v2)
holds G1.reachableFrom(w) = G2.reachableFrom(v)
proof
let G2 be _Graph, v1,v2 be Vertex of G2, e be object;
let G1 be addEdge of G2,v1,e,v2;
let w be Vertex of G1, v be Vertex of G2;
assume that
A1: not e in the_Edges_of G2 & v = w and
A2: not v in G2.reachableFrom(v1) & not v in G2.reachableFrom(v2);
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 holds
x in G1.reachableFrom(w) implies x in G2.reachableFrom(v)
proof
let x be object;
assume x in G1.reachableFrom(w);
then consider W1 being Walk of G1 such that
A4: W1 is_Walk_from w,x by GLIB_002:def 5;
set T1 = the Trail of W1;
x is set by TARSKI:1;
then A5: T1 is_Walk_from w,x by A4, GLIB_001:160;
not e in T1.edges()
proof
assume e in T1.edges();
then consider u1, u2 being Vertex of G1, n being odd Element of NAT
such that
A6: n+2 <= len T1 & u1 = T1.n & e = T1.(n+1) & u2 = T1.(n+2) and
A7: e Joins u1,u2,G1 by GLIB_001:103;
set T2 = T1.cut(1,n);
n+2-2 <= len T1 - 0 by A6, XREAL_1:13;
then A8: 1 <= n & n <= len T1 by ABIAN:12;
not e in T2.edges()
proof
assume e in T2.edges();
then consider u3, u4 being Vertex of G1, m being odd Element of NAT
such that
A9: m+2 <= len T2 & u3 = T2.m & e = T2.(m+1) & u4 = T2.(m+2) and
e Joins u3,u4,G1 by GLIB_001:103;
A10: m+2-2 < len T2 - 0 by A9, XREAL_1:15;
then A11: T1.(m+1) = T1.(n+1) by A6, A9, A8, POLYFORM:4, GLIB_001:36;
A12: 1+0 <= m+1 & m < n by A8, A10, XREAL_1:7, GLIB_001:45;
then A13: m+1 < n+1 by XREAL_1:6;
n+2-1 <= len T1 - 0 by A6, XREAL_1:13;
hence contradiction by A11, A12, A13, GLIB_001:138;
end;
then reconsider W2 = T2 as Walk of G2 by GLIB_006:109;
T2 is_Walk_from T1.1, T1.n by A8, POLYFORM:4, GLIB_001:37;
then T2 is_Walk_from T1.first(), T1.n by GLIB_001:def 6;
then T2 is_Walk_from w, T1.n by A5, GLIB_001:def 23;
then A14: W2 is_Walk_from v, u1 by A1, A6, GLIB_001:19;
per cases by A3, A7, GLIB_000:15;
suppose v1 = u1 & v2 = u2;
then W2.reverse() is_Walk_from v1, v by A14, GLIB_001:23;
hence contradiction by A2, GLIB_002:def 5;
end;
suppose v1 = u2 & v2 = u1;
then W2.reverse() is_Walk_from v2, v by A14, GLIB_001:23;
hence contradiction by A2, GLIB_002:def 5;
end;
end;
then reconsider W = T1 as Walk of G2 by GLIB_006:109;
W is_Walk_from w,x by A5, GLIB_001:19;
hence x in G2.reachableFrom(v) by A1, GLIB_002:def 5;
end;
then A15: G1.reachableFrom(w) c= G2.reachableFrom(v) by TARSKI:def 3;
G2 is Subgraph of G1 by GLIB_006:57;
then G2.reachableFrom(v) c= G1.reachableFrom(w) by A1, GLIB_002:14;
hence thesis by A15, XBOOLE_0:def 10;
end;
:: composition of component set in graph with added edge
theorem Th44:
for G2 being _Graph, v1,v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
st not e in the_Edges_of G2
holds G1.componentSet() =
(G2.componentSet() \ {G2.reachableFrom(v1), G2.reachableFrom(v2)})
\/ {G2.reachableFrom(v1) \/ G2.reachableFrom(v2)}
proof
let G2 be _Graph, v1,v2 be Vertex of G2, e be object;
let G1 be addEdge of G2,v1,e,v2;
assume A1: not e in the_Edges_of G2;
set V1 = G2.reachableFrom(v1), V2 = G2.reachableFrom(v2);
A2: G2 is Subgraph of G1 by GLIB_006:57;
for x being object holds x in G1.componentSet()
iff x in (G2.componentSet() \ {V1, V2}) \/ {V1 \/ V2}
proof
let x be object;
reconsider w1 = v1, w2 = v2 as Vertex of G1 by GLIB_006:68;
thus x in G1.componentSet()
implies x in (G2.componentSet() \ {V1, V2}) \/ {V1 \/ V2}
proof
assume x in G1.componentSet();
then consider w being Vertex of G1 such that
A3: x = G1.reachableFrom(w) by GLIB_002:def 8;
reconsider v = w as Vertex of G2 by GLIB_006:102;
per cases;
suppose A4: not v in G2.reachableFrom(v1) &
not v in G2.reachableFrom(v2);
then A5: G1.reachableFrom(w) = G2.reachableFrom(v) by A1, Th43;
G2.reachableFrom(v) <> V1 & G2.reachableFrom(v) <> V2 by A4, Th22;
then A6: not G1.reachableFrom(w) in {V1, V2} by A5, TARSKI:def 2;
G2.reachableFrom(v) in G2.componentSet() by GLIB_002:def 8;
then G1.reachableFrom(w) in G2.componentSet() \ {V1, V2}
by A5, A6, XBOOLE_0:def 5;
hence thesis by A3, XBOOLE_0:def 3;
end;
suppose v in G2.reachableFrom(v1);
then w in G1.reachableFrom(w1) by A2, TARSKI:def 3, GLIB_002:14;
then x = G1.reachableFrom(w1) by A3, GLIB_002:12
.= V1 \/ V2 by A1, Th42;
then x in {V1 \/ V2} by TARSKI:def 1;
hence thesis by XBOOLE_0:def 3;
end;
suppose v in G2.reachableFrom(v2);
then w in G1.reachableFrom(w2) by A2, TARSKI:def 3, GLIB_002:14;
then w in G1.reachableFrom(w1) by A1, Th41, GLIB_002:12;
then x = G1.reachableFrom(w1) by A3, GLIB_002:12
.= V1 \/ V2 by A1, Th42;
then x in {V1 \/ V2} by TARSKI:def 1;
hence thesis by XBOOLE_0:def 3;
end;
end;
assume x in (G2.componentSet() \ {V1, V2}) \/ {V1 \/ V2};
then per cases by XBOOLE_0:def 3;
suppose x in G2.componentSet() \ {V1, V2};
then A7: x in G2.componentSet() & not x in {V1, V2} by XBOOLE_0:def 5;
then A8: x <> V1 & x <> V2 by TARSKI:def 2;
consider v being Vertex of G2 such that
A9: x = G2.reachableFrom(v) by A7, GLIB_002:def 8;
reconsider w = v as Vertex of G1 by GLIB_006:68;
not v in V1 & not v in V2 by A8, A9, GLIB_002:12;
then G1.reachableFrom(w) = x by A1, A9, Th43;
hence thesis by GLIB_002:def 8;
end;
suppose x in {V1 \/ V2};
then x = V1 \/ V2 by TARSKI:def 1;
then x = G1.reachableFrom(w1) by A1, Th42;
hence thesis by GLIB_002:def 8;
end;
end;
hence thesis by TARSKI:2;
end;
Lm7:
for G2 being _Graph, v1,v2 being Vertex of G2
st not v2 in G2.reachableFrom(v1)
holds not G2.reachableFrom(v1) \/ G2.reachableFrom(v2) in G2.componentSet()
proof
let G2 be _Graph, v1,v2 be Vertex of G2;
assume A1: not v2 in G2.reachableFrom(v1);
set V1 = G2.reachableFrom(v1), V2 = G2.reachableFrom(v2);
reconsider C = G2.componentSet() as a_partition of the_Vertices_of G2
by Th23;
A2: V1 in C & V2 in C by GLIB_002:def 8;
A3: V1 misses V2 by A1, Th22;
assume V1 \/ V2 in G2.componentSet();
then per cases by A2, EQREL_1:def 4;
suppose V1 \/ V2 = V1;
then V2 c= V1 by XBOOLE_1:11;
hence contradiction by A3, XBOOLE_1:63, XBOOLE_1:66;
end;
suppose V1 \/ V2 misses V1;
then V1 misses V1 by XBOOLE_1:70;
hence contradiction;
end;
end;
:: the finite restriction is not neccessary, but all that's needed here
Lm8:
for G1 being finite _Graph, e being set, G2 being removeEdge of G1, e
holds G1.numComponents() c= G2.numComponents()
proof
let G1 be finite _Graph, e be set, G2 be removeEdge of G1, e;
per cases;
suppose A1: e in the_Edges_of G1;
set w1 = (the_Source_of G1).e, w2 = (the_Target_of G1).e;
reconsider w1, w2 as Vertex of G1 by A1, FUNCT_2:5;
A2: G1 is addEdge of G2,w1,e,w2 by A1, Th37;
reconsider v1 = w1, v2 = w2 as Vertex of G2 by GLIB_000:51;
reconsider G1 as addEdge of G2,v1,e,v2 by A2;
A3: the_Edges_of G2 = the_Edges_of G1 \ {e} by GLIB_000:51;
e in {e} by TARSKI:def 1;
then A4: not e in the_Edges_of G2 by A3, XBOOLE_0:def 5;
set V1 = G2.reachableFrom(v1), V2 = G2.reachableFrom(v2);
per cases;
suppose A5: not v2 in G2.reachableFrom(v1);
then not V1 \/ V2 in G2.componentSet() by Lm7;
then A6: not V1 \/ V2 in G2.componentSet() \ {V1,V2}
by XBOOLE_1:36, TARSKI:def 3;
V1 in G2.componentSet() & V2 in G2.componentSet() by GLIB_002:def 8;
then A7: {V1, V2} c= G2.componentSet() by ZFMISC_1:32;
A8: V1 <> V2 by A5, Th22;
G1.numComponents() = card G1.componentSet() by GLIB_002:def 9
.= card((G2.componentSet()\{V1,V2})\/{V1 \/ V2}) by A4, Th44
.= card(G2.componentSet()\{V1,V2}) + 1 by A6, CARD_2:41
.= card G2.componentSet() - card {V1,V2} + 1 by A7, CARD_2:44
.= card G2.componentSet() - 2 + 1 by A8, CARD_2:57
.= G2.numComponents() - 2 + 1 by GLIB_002:def 9
.= G2.numComponents() - 1;
then G2.numComponents() = G1.numComponents() +` 1;
hence thesis by CARD_2:94;
end;
suppose A9: v2 in G2.reachableFrom(v1);
G1.numComponents() = card G1.componentSet() by GLIB_002:def 9
.= card G2.componentSet() by A9, Th40
.= G2.numComponents() by GLIB_002:def 9;
hence thesis;
end;
end;
suppose not e in the_Edges_of G1;
then the_Edges_of G1 \ {e} = the_Edges_of G1 by ZFMISC_1:57
.= G1.edgesBetween(the_Vertices_of G1) by GLIB_000:34;
hence thesis by GLIB_002:29, GLIB_000:94;
end;
end;
:: removing an endvertex doesn't change number of components
theorem Th45:
for G1 being _Graph, v being Vertex of G1, G2 being removeVertex of G1, v
st v is endvertex holds G1.numComponents() = G2.numComponents()
proof
let G1 be _Graph, v be Vertex of G1, G2 be removeVertex of G1, v;
assume A1: v is endvertex;
then A2: G1 is non trivial by Th16;
ex f being Function st f is one-to-one &
dom f = G1.componentSet() & rng f = G2.componentSet()
proof
reconsider C = G1.componentSet() as a_partition of the_Vertices_of G1
by Th23;
set V = EqClass(v,C);
set f = id C +* (V, V\{v});
take f;
for x1,x2 being object st x1 in dom f & x2 in dom f & f.x1 = f.x2
holds x1 = x2
proof
let x1,x2 be object;
assume A3: x1 in dom f & x2 in dom f & f.x1 = f.x2;
then A4: x1 in dom id C & x2 in dom id C by FUNCT_7:30;
A5: not V\{v} in C
proof
assume A6: V\{v} in C;
set w = the Element of V\{v};
w in V by A6, XBOOLE_1:36, TARSKI:def 3;
then w in V /\ (V\{v}) by A6, XBOOLE_0:def 4;
then A8: not V misses V\{v} by XBOOLE_0:def 7;
v in {v} by TARSKI:def 1;
then not v in V\{v} by XBOOLE_0:def 5;
then A9: V <> V \{v} by EQREL_1:def 6;
V in C by EQREL_1:def 6;
hence contradiction by A6, A8, A9, EQREL_1:def 4;
end;
per cases;
suppose x1 <> V & x2 <> V;
then f.x1 = (id C).x1 & f.x2 = (id C).x2 by FUNCT_7:32;
then f.x1 = x1 & f.x2 = x2 by A4, FUNCT_1:18;
hence thesis by A3;
end;
suppose x1 = V & x2 <> V;
then f.x1 = V\{v} & f.x2 = (id C).x2 by A4, FUNCT_7:31, FUNCT_7:32;
hence thesis by A5, A3, A4, FUNCT_1:18; :: by contradiction
end;
suppose x1 <> V & x2 = V;
then f.x2 = V\{v} & f.x1 = (id C).x1 by A4, FUNCT_7:31, FUNCT_7:32;
hence thesis by A5, A3, A4, FUNCT_1:18; :: by contradiction
end;
suppose x1 = V & x2 = V;
hence thesis;
end;
end;
hence f is one-to-one by FUNCT_1:def 4;
thus A10: dom f = dom id C by FUNCT_7:30
.= G1.componentSet();
for y being object holds y in rng f iff y in G2.componentSet()
proof
let y be object;
hereby
assume y in rng f;
then consider x being object such that
A11: x in dom f & y = f.x by FUNCT_1:def 3;
reconsider x as set by TARSKI:1;
per cases;
suppose A12: x = V;
V in dom id C by EQREL_1:def 6;
then A13: y = V\{v} by A11, A12, FUNCT_7:31;
ex w being Vertex of G2 st V\{v} = G2.reachableFrom(w)
proof
consider e being object such that
A14: v.edgesInOut() = {e} & not e Joins v,v,G1
by A1, GLIB_000:def 51;
set w = v.adj(e);
A15: e in v.edgesInOut() by A14, TARSKI:def 1;
then A16: v <> w by A14, GLIB_000:67;
A17: the_Vertices_of G2 = the_Vertices_of G1 \ {v}
by A2, GLIB_000:47;
v in G1.reachableFrom(v) & e Joins v,w,G1
by A15, GLIB_000:67, GLIB_002:9;
then A18: w in G1.reachableFrom(v) by GLIB_002:10;
not w in {v} by A16, TARSKI:def 1;
then reconsider w0 = w as Vertex of G2 by A17, XBOOLE_0:def 5;
take w0;
thus V\{v} = G1.reachableFrom(v)\{v} by Th24
.= G1.reachableFrom(w)\{v} by A18, GLIB_002:12
.= G2.reachableFrom(w0) by A1, A18, Th25;
end;
hence y in G2.componentSet() by A13, GLIB_002:def 8;
end;
suppose A19: x <> V;
consider w being Vertex of G1 such that
A20: x = G1.reachableFrom(w) by A10, A11, GLIB_002:def 8;
A21: x in C & V in C by A10, A11, EQREL_1:def 6;
x misses V by A19, A21, EQREL_1:def 4;
then A22: x misses G1.reachableFrom(v) by Th24;
G1.reachableFrom(w) <> G1.reachableFrom(v) by A20, A22, XBOOLE_1:66;
then A23: not w in G1.reachableFrom(v) by GLIB_002:12;
then A24: v <> w by GLIB_002:9;
A25: the_Vertices_of G2 = the_Vertices_of G1 \ {v}
by A2, GLIB_000:47;
not w in {v} by A24, TARSKI:def 1;
then reconsider w0 = w as Vertex of G2 by A25, XBOOLE_0:def 5;
G1.reachableFrom(w) = G2.reachableFrom(w0) by A2, A23, Th26;
then A26: x in G2.componentSet() by A20, GLIB_002:def 8;
x = (id C).x by A10, A11, FUNCT_1:18
.= y by A11, A19, FUNCT_7:32;
hence y in G2.componentSet() by A26;
end;
end;
assume y in G2.componentSet();
then consider w0 being Vertex of G2 such that
A27: y = G2.reachableFrom(w0) by GLIB_002:def 8;
the_Vertices_of G2 c= the_Vertices_of G1;
then reconsider w = w0 as Vertex of G1 by TARSKI:def 3;
ex x being object st x in dom f & y = f.x
proof
per cases;
suppose A28: w in G1.reachableFrom(v);
then G2.reachableFrom(w0) = G1.reachableFrom(w) \ {v} by A1, Th25;
then y = G1.reachableFrom(v) \ {v} by A27, A28, GLIB_002:12;
then A29: y = V\{v} by Th24;
take V;
V = G1.reachableFrom(v) by Th24;
then A30: V in C by GLIB_002:def 8;
hence V in dom f by A10;
V in dom id C by A30;
hence y = f.V by A29, FUNCT_7:31;
end;
suppose A31: not w in G1.reachableFrom(v);
then A32: G2.reachableFrom(w0) = G1.reachableFrom(w) by A2, Th26;
set x = G1.reachableFrom(w);
take x;
A33: x in G1.componentSet() by GLIB_002:def 8;
hence x in dom f by A10;
x <> V
proof
assume x = V;
then x = G1.reachableFrom(v) by Th24;
hence contradiction by A31, GLIB_002:9;
end;
then f.x = (id C).x by FUNCT_7:32
.= x by A33, FUNCT_1:18;
hence y = f.x by A27, A32;
end;
end;
hence thesis by FUNCT_1:def 3;
end;
hence rng f = G2.componentSet() by TARSKI:2;
end;
then card G1.componentSet() = card G2.componentSet()
by WELLORD2:def 4, CARD_1:5;
then G1.numComponents() = card G2.componentSet() by GLIB_002:def 9;
hence thesis by GLIB_002:def 9;
end;
registration
let G be _Graph;
cluster endvertex -> non cut-vertex for Vertex of G;
coherence
proof
let v be Vertex of G;
assume A1: v is endvertex;
set H = the removeVertex of G, v;
G.numComponents() = H.numComponents() by A1, Th45;
then not G.numComponents() in H.numComponents();
hence thesis by GLIB_002:def 10;
end;
end;
theorem
for G1 being non trivial finite connected _Graph
for G2 being non spanning connected Subgraph of G1
ex v being Vertex of G1 st v is non cut-vertex & not v in the_Vertices_of G2
proof
defpred P[Nat] means for G1 being non trivial finite connected _Graph
for G2 being non spanning connected Subgraph of G1
st G1.order() + $1 = G1.size() + 1
ex v being Vertex of G1
st v is non cut-vertex & not v in the_Vertices_of G2;
A1: P[0]
proof
let G1 be non trivial finite connected _Graph;
let G2 be non spanning connected Subgraph of G1;
assume G1.order() + 0 = G1.size() + 1;
then G1 is Tree-like by GLIB_002:47;
then consider v being Vertex of G1 such that
A2: v is endvertex & not v in the_Vertices_of G2 by Th31;
thus thesis by A2;
end;
A3: for k being Nat st P[k] holds P[k+1] :: remove an edge
proof
let k be Nat;
assume A4: P[k];
let G1 be non trivial finite connected _Graph;
let G2 be non spanning connected Subgraph of G1;
assume A5: G1.order() + (k+1) = G1.size() + 1;
G1 is non acyclic
proof
assume G1 is acyclic;
then k + 1 + (G1.size() + 1) = 0 + (G1.size() + 1) by A5, GLIB_002:46;
hence contradiction;
end;
then consider C being Walk of G1 such that
A6: C is Cycle-like by GLIB_002:def 2;
ex e being set st e in C.edges() &
(C.edges() c= the_Edges_of G2 or not e in the_Edges_of G2)
proof
per cases;
suppose A7: C.edges() c= the_Edges_of G2;
set e = the Element of C.edges();
C.edges() <> {} by A6, GLIB_001:136;
then e in C.edges();
hence thesis by A7;
end;
suppose not C.edges() c= the_Edges_of G2;
then A8: C.edges() \ the_Edges_of G2 <> {} by XBOOLE_1:37;
set e = the Element of C.edges() \ the_Edges_of G2;
e in C.edges() & not e in the_Edges_of G2 by A8, XBOOLE_0:def 5;
hence thesis;
end;
end;
then consider e being set such that
A9: e in C.edges() and
A10: C.edges() c= the_Edges_of G2 or not e in the_Edges_of G2;
set G3 = the removeEdge of G1, e;
reconsider G3 as non trivial _Graph;
reconsider G3 as non trivial finite connected _Graph by A6, A9, GLIB_002:5;
A11: the_Vertices_of G3 = the_Vertices_of G1 by GLIB_000:51;
A12: the_Edges_of G3 = the_Edges_of G1 \ {e} by GLIB_000:51;
A13: the_Edges_of G2 \ {e} c= the_Edges_of G3 by A12, XBOOLE_1:33;
set G4 = the removeEdge of G2, e;
reconsider G4 as Subgraph of G1 by GLIB_000:43;
A14: the_Vertices_of G4 = the_Vertices_of G2 &
the_Edges_of G4 = the_Edges_of G2 \ {e} by GLIB_000:51;
then reconsider G4 as Subgraph of G3 by A11, A13, GLIB_000:44;
G4 is connected
proof
per cases by A10;
suppose A15: C.edges() c= the_Edges_of G2;
reconsider C2 = C as Walk of G2 by A6, A15, GLIB_001:169;
A16: C2 is Cycle-like by A6, GLIB_006:24;
e in C2.edges() by A9, GLIB_001:110;
hence thesis by A16, GLIB_002:5;
end;
suppose not e in the_Edges_of G2;
then the_Edges_of G4 = the_Edges_of G2 by A14, ZFMISC_1:57;
hence thesis by A14, GLIB_000:86, GLIB_002:8;
end;
end;
then reconsider G4 as connected Subgraph of G3;
G4 is non spanning
proof
assume G4 is spanning;
then the_Vertices_of G2 = the_Vertices_of G1
by A11, A14, GLIB_000:def 33;
hence contradiction by GLIB_000:def 33;
end;
then reconsider G4 as non spanning connected Subgraph of G3;
G1.order() + k + 1 = G3.size() + 1 + 1 by A5, A9, GLIB_000:52;
then G3.order() + k = G3.size() + 1 by GLIB_000:52;
then consider v being Vertex of G3 such that
A17: v is non cut-vertex & not v in the_Vertices_of G4 by A4;
the_Vertices_of G3 c= the_Vertices_of G1 by GLIB_000:def 32;
then reconsider v0 = v as Vertex of G1 by TARSKI:def 3;
take v0;
now
let H1 be removeVertex of G1, v0;
set H2 = the removeVertex of G3, v;
A18: H2.numComponents() c= G3.numComponents() by A17, GLIB_002:35;
H2 is removeEdge of H1, e by Th18;
then A19: H1.numComponents() c= H2.numComponents() by Lm8;
G1.numComponents() = 1 & G3.numComponents() = 1 by GLIB_002:28;
hence H1.numComponents() c= G1.numComponents() by A18, A19, XBOOLE_1:1;
end;
hence v0 is non cut-vertex by GLIB_002:35;
thus not v0 in the_Vertices_of G2 by A14, A17;
end;
A20: for k being Nat holds P[k] from NAT_1:sch 2(A1,A3);
let G1 be non trivial finite connected _Graph;
let G2 be non spanning connected Subgraph of G1;
ex k being Nat st
G1.order() + k = G1.size() + 1 by GLIB_002:40, NAT_1:10;
hence thesis by A20;
end;
:: improved in GLIB_007:61
:: not e in the_Edges_of G3 can then be followed by GLIB_006:def 9
Lm9:
for G3 being _Graph, v being object, V being set, v1 being Vertex of G3
for G1 being addAdjVertexAll of G3,v,V \/ {v1}
st V c= the_Vertices_of G3 & not v in the_Vertices_of G3 & not v1 in V
ex G2 being addAdjVertexAll of G3,v,V, e being object
st not e in the_Edges_of G2 &
(G1 is addEdge of G2,v,e,v1 or G1 is addEdge of G2,v1,e,v)
by GLIB_007:61;
:: into GLIB_007 ?
theorem Th47:
for G1 being non trivial simple _Graph, v being Vertex of G1
for G2 being removeVertex of G1, v
holds G1 is addAdjVertexAll of G2, v, v.allNeighbors()
proof
let G1 be non trivial simple _Graph, v be Vertex of G1;
let G2 be removeVertex of G1, v;
A1: G1 is Supergraph of G2 by GLIB_006:57;
A2: the_Vertices_of G2 = the_Vertices_of G1 \ {v} by GLIB_000:47;
A3: the_Edges_of G2 = G1.edgesBetween(the_Vertices_of G1 \ {v})
by GLIB_000:47
.= G1.edgesBetween(the_Vertices_of G1) \ v.edgesInOut() by Th1
.= the_Edges_of G1 \ v.edgesInOut() by GLIB_000:34;
v in {v} by TARSKI:def 1;
then A4: not v in the_Vertices_of G2 by A2, XBOOLE_0:def 5;
for x being object holds
x in v.allNeighbors() implies x in the_Vertices_of G2
proof
let x be object;
assume A5: x in v.allNeighbors();
x <> v
proof
assume x = v;
then consider e being object such that
A6: e Joins v,v,G1 by A5, GLIB_000:71;
thus contradiction by A6, GLIB_000:18;
end;
then not x in {v} by TARSKI:def 1;
hence thesis by A2, A5, XBOOLE_0:def 5;
end;
then A7: v.allNeighbors() c= the_Vertices_of G2 by TARSKI:def 3;
:: show the properties of addAdjVertexAll
now
thus the_Vertices_of G1 = the_Vertices_of G2 \/ {v} by A2, ZFMISC_1:116;
hereby
let e be object;
thus not e Joins v,v,G1 by GLIB_000:18;
let v1 be object;
hereby
assume A8: not v1 in v.allNeighbors();
v1 is set by TARSKI:1;
hence not e Joins v1,v,G1 by A8, GLIB_000:71, GLIB_000:14;
end;
let v2 be object;
assume A9: v1 <> v & v2 <> v & e DJoins v1,v2,G1;
thus e DJoins v1,v2,G2
proof
assume not e DJoins v1,v2,G2;
then A10: not e in the_Edges_of G2 by A1, A9, GLIB_006:71;
e in the_Edges_of G1 by A9, GLIB_000:def 14;
then e in v.edgesInOut() by A3, A10, XBOOLE_0:def 5;
then per cases by GLIB_000:61;
suppose (the_Source_of G1).e = v;
hence contradiction by A9, GLIB_000:def 14;
end;
suppose (the_Target_of G1).e = v;
hence contradiction by A9, GLIB_000:def 14;
end;
end;
end;
reconsider E = v.edgesInOut() as set;
take E;
card E = v.degree() by GLIB_000:19;
hence card v.allNeighbors() = card E by Th5;
E /\ the_Edges_of G2 = {}
proof
assume E /\ the_Edges_of G2 <> {};
then consider e being object such that
A11: e in E /\ the_Edges_of G2 by XBOOLE_0:def 1;
A12: e in E & e in the_Edges_of G2 by A11, XBOOLE_0:def 4;
then (the_Source_of G1).e = v or (the_Target_of G1).e = v by GLIB_000:61;
then (the_Source_of G2).e = v or (the_Target_of G2).e = v
by A12, GLIB_000:def 32;
then (the_Source_of G2).e in {v} or (the_Target_of G2).e in {v}
by TARSKI:def 1;
then not (the_Source_of G2).e in the_Vertices_of G2 or
not (the_Target_of G2).e in the_Vertices_of G2 by A2, XBOOLE_0:def 5;
hence contradiction by A12, FUNCT_2:5;
end;
hence E misses the_Edges_of G2 by XBOOLE_0:def 7;
A13: the_Edges_of G2 \/ E c= the_Edges_of G1 by XBOOLE_1:8;
for e being object holds
e in the_Edges_of G1 implies e in the_Edges_of G2 \/ E
proof
let e be object;
assume A14: e in the_Edges_of G1;
e in the_Edges_of G2 or e in E by A3, A14, XBOOLE_0:def 5;
hence thesis by XBOOLE_0:def 3;
end;
then the_Edges_of G1 c= the_Edges_of G2 \/ E by TARSKI:def 3;
hence the_Edges_of G1 = the_Edges_of G2 \/ E by A13, XBOOLE_0:def 10;
let v1 be object;
assume A15: v1 in v.allNeighbors();
then consider e1 being object such that
A16: e1 Joins v,v1,G1 by GLIB_000:71;
take e1;
v1 in the_Vertices_of G1 & e1 is set by A15, TARSKI:1;
hence e1 in E by A16, GLIB_000:64;
thus A17: e1 Joins v1,v,G1 by A16, GLIB_000:14;
let e2 be object;
assume e2 Joins v1,v,G1;
hence e1 = e2 by A17, GLIB_000:def 20;
end;
hence thesis by A1, A4, A7, GLIB_007:def 4;
end;
begin :: Edgeless and non edgeless graphs
definition
let G be _Graph;
attr G is edgeless means :Def1:
the_Edges_of G = {};
end;
theorem
for G being _Graph holds G is edgeless iff card the_Edges_of G = 0;
theorem Th49:
for G being _Graph holds G is edgeless iff G.size() = 0
proof
let G be _Graph;
hereby
assume G is edgeless;
then card the_Edges_of G = 0;
hence G.size() = 0 by GLIB_000:def 25;
end;
assume G.size() = 0;
then card the_Edges_of G = 0 by GLIB_000:def 25;
hence thesis;
end;
registration
let G be _Graph;
cluster -> edgeless for removeEdges of G, the_Edges_of G;
coherence
proof
let G2 be removeEdges of G, the_Edges_of G;
the_Edges_of G2 = the_Edges_of G \ the_Edges_of G by GLIB_000:53
.= {} by XBOOLE_1:37;
hence thesis;
end;
end;
registration
cluster edgeless for _Graph;
existence
proof
take the removeEdges of the _Graph, the_Edges_of the _Graph;
thus thesis;
end;
let G be _Graph;
cluster edgeless spanning for Subgraph of G;
existence
proof
take the removeEdges of G, the_Edges_of G;
thus thesis;
end;
cluster edgeless trivial for Subgraph of G;
existence
proof
set G2 = the inducedSubgraph of G, {the Vertex of G};
reconsider G3 = the removeEdges of G2, the_Edges_of G2
as Subgraph of G by GLIB_000:43;
take G3;
thus thesis;
end;
end;
registration
let G be edgeless _Graph;
cluster the_Edges_of G -> empty;
coherence by Def1;
end;
registration
cluster edgeless -> non-multi non-Dmulti loopless simple Dsimple for _Graph;
coherence
proof
let G be _Graph;
assume A1: G is edgeless;
then for e1,e2,v1,v2 being object
holds e1 Joins v1,v2,G & e2 Joins v1,v2,G implies e1 = e2
by GLIB_000:def 13;
hence A2: G is non-multi by GLIB_000:def 20;
for e1,e2,v1,v2 being object
holds e1 DJoins v1,v2,G & e2 DJoins v1,v2,G implies e1 = e2
by A1, GLIB_000:def 14;
hence G is non-Dmulti by GLIB_000:def 21;
not ex e being object st e in the_Edges_of G &
(the_Source_of G).e = (the_Target_of G).e by A1;
hence G is loopless by GLIB_000:def 18;
hence thesis by A2;
end;
cluster trivial loopless -> edgeless for _Graph;
coherence by GLIB_000:23;
let V be non empty set, S,T be Function of {},V;
cluster createGraph(V,{},S,T) -> edgeless;
coherence by GLIB_000:6;
end;
theorem
for G being edgeless_Graph, e,v1,v2 being object
holds not e Joins v1,v2,G & not e DJoins v1,v2,G
proof
let G be edgeless _Graph;
let e,v1,v2 be object;
not e Joins v1,v2,G
proof
assume e Joins v1,v2,G;
then e in the_Edges_of G by GLIB_000:def 13;
hence contradiction;
end;
hence thesis by GLIB_000:16;
end;
theorem
for G being edgeless_Graph, e being object, X, Y being set
holds not e SJoins X,Y,G & not e DSJoins X,Y,G
proof
let G be edgeless _Graph;
let e be object, X, Y be set;
thus not e SJoins X,Y,G
proof
assume e SJoins X,Y,G;
then e in the_Edges_of G by GLIB_000:def 15;
hence contradiction;
end;
thus not e DSJoins X,Y,G
proof
assume e DSJoins X,Y,G;
then e in the_Edges_of G by GLIB_000:def 16;
hence contradiction;
end;
end;
theorem Th52:
for G1, G2 being _Graph st G1 == G2
holds G1 is edgeless implies G2 is edgeless by GLIB_000:def 34;
registration
let G be edgeless _Graph;
cluster -> trivial for Walk of G;
coherence
proof
let W be Walk of G;
W.edges() = {};
hence thesis by GLIB_001:136;
end;
cluster -> edgeless for Subgraph of G;
coherence
proof
let G2 be Subgraph of G;
the_Edges_of G2 c= the_Edges_of G;
hence thesis;
end;
let X be set;
cluster G.edgesInto(X) -> empty;
coherence;
cluster G.edgesOutOf(X) -> empty;
coherence;
cluster G.edgesInOut(X) -> empty;
coherence;
cluster G.edgesBetween(X) -> empty;
coherence;
cluster G.set(WeightSelector, X) -> edgeless;
coherence by GLIB_003:7, Th52;
cluster G.set(ELabelSelector, X) -> edgeless;
coherence by GLIB_003:7, Th52;
cluster G.set(VLabelSelector, X) -> edgeless;
coherence by GLIB_003:7, Th52;
cluster -> edgeless for addVertices of G, X;
coherence
proof
let G1 be addVertices of G, X;
the_Edges_of G1 = the_Edges_of G by GLIB_006:def 10;
hence thesis;
end;
cluster -> edgeless for reverseEdgeDirections of G, X;
coherence
proof
let G1 be reverseEdgeDirections of G, X;
per cases;
suppose X c= the_Edges_of G;
hence thesis by GLIB_007:def 1;
end;
suppose not X c= the_Edges_of G;
then G1 == G by GLIB_007:def 1;
then the_Edges_of G1 = the_Edges_of G by GLIB_000:def 34;
hence thesis;
end;
end;
let Y be set;
cluster G.edgesBetween(X,Y) -> empty;
coherence;
cluster G.edgesDBetween(X,Y) -> empty;
coherence;
end;
registration
cluster edgeless -> acyclic chordal for _Graph;
coherence
proof
let G be _Graph;
assume A1: G is edgeless;
then not ex W being Walk of G st W is Cycle-like;
hence G is acyclic by GLIB_002:def 2;
for W being Walk of G st W.length()>3 & W is Cycle-like holds W is chordal
by A1;
hence thesis by CHORD:def 11;
end;
cluster trivial edgeless -> Tree-like for _Graph;
coherence;
cluster non trivial edgeless -> non connected non Tree-like non complete
for _Graph;
coherence
proof
let G be _Graph;
assume A2: G is non trivial edgeless;
then consider v1, v2 being Vertex of G such that
A3: v1 <> v2 by GLIB_000:21;
not ex W being Walk of G st W is_Walk_from v1, v2
proof
given W being Walk of G such that
A4: W is_Walk_from v1,v2;
W.first() = v1 & W.last() = v2 by A4, GLIB_001:def 23;
hence contradiction by A2, A3, GLIB_001:127;
end;
hence thesis by GLIB_002:def 1;
end;
cluster connected edgeless -> trivial for _Graph;
coherence;
end;
theorem
for G1 being edgeless _Graph, G2 being Subgraph of G1
holds G1 is addVertices of G2, the_Vertices_of G1 \ the_Vertices_of G2
proof
let G1 be edgeless _Graph, G2 be Subgraph of G1;
A1: the_Edges_of G1 = the_Edges_of G2;
G1 is Supergraph of G2 by GLIB_006:57;
hence thesis by A1, Th33;
end;
theorem Th54:
for G2 being _Graph, v1, v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2 st not e in the_Edges_of G2
holds G1 is non edgeless
proof
let G2 be _Graph, v1, v2 be Vertex of G2, e be object;
let G1 be addEdge of G2, v1, e, v2;
assume not e in the_Edges_of G2;
then the_Edges_of G1 = the_Edges_of G2 \/ {e} by GLIB_006:def 11;
hence thesis;
end;
theorem Th55:
for G2 being _Graph, v1 being Vertex of G2, e, v2 being object
for G1 being addAdjVertex of G2,v1,e,v2
st not v2 in the_Vertices_of G2 & not e in the_Edges_of G2
holds G1 is non edgeless
proof
let G2 be _Graph, v1 be Vertex of G2, e, v2 be object;
let G1 be addAdjVertex of G2, v1, e, v2;
assume not v2 in the_Vertices_of G2 & not e in the_Edges_of G2;
then the_Edges_of G1 = the_Edges_of G2 \/ {e} by GLIB_006:def 13;
hence thesis;
end;
theorem Th56:
for G2 being _Graph, v1, e being object, v2 being Vertex of G2
for G1 being addAdjVertex of G2,v1,e,v2
st not v1 in the_Vertices_of G2 & not e in the_Edges_of G2
holds G1 is non edgeless
proof
let G2 be _Graph, v1, e be object, v2 be Vertex of G2;
let G1 be addAdjVertex of G2, v1, e, v2;
assume not v1 in the_Vertices_of G2 & not e in the_Edges_of G2;
then the_Edges_of G1 = the_Edges_of G2 \/ {e} by GLIB_006:def 14;
hence thesis;
end;
theorem Th57:
for G2 being _Graph, v being object
for V being non empty Subset of the_Vertices_of G2
for G1 being addAdjVertexAll of G2,v,V st not v in the_Vertices_of G2
holds G1 is non edgeless by GLIB_007:47;
registration
let G be _Graph;
cluster -> non edgeless for addAdjVertexToAll of G, the_Vertices_of G;
coherence
proof
the_Vertices_of G is non empty & the_Vertices_of G c= the_Vertices_of G;
then A1: not the_Vertices_of G in the_Vertices_of G &
the_Vertices_of G is non empty Subset of the_Vertices_of G;
let G1 be addAdjVertexToAll of G, the_Vertices_of G;
G1 is addAdjVertexToAll of G, the_Vertices_of G, the_Vertices_of G;
hence thesis by A1, Th57;
end;
cluster -> non edgeless for addAdjVertexFromAll of G, the_Vertices_of G;
coherence
proof
the_Vertices_of G is non empty & the_Vertices_of G c= the_Vertices_of G;
then A2: not the_Vertices_of G in the_Vertices_of G &
the_Vertices_of G is non empty Subset of the_Vertices_of G;
let G1 be addAdjVertexFromAll of G, the_Vertices_of G;
G1 is addAdjVertexFromAll of G, the_Vertices_of G, the_Vertices_of G;
hence thesis by A2, Th57;
end;
cluster -> non edgeless for addAdjVertexAll of G, the_Vertices_of G;
coherence
proof
the_Vertices_of G is non empty & the_Vertices_of G c= the_Vertices_of G;
then not the_Vertices_of G in the_Vertices_of G &
the_Vertices_of G is non empty Subset of the_Vertices_of G;
hence thesis by Th57;
end;
let v be Vertex of G;
cluster -> non edgeless for
addAdjVertex of G, v, the_Edges_of G, the_Vertices_of G;
coherence
proof
not the_Vertices_of G in the_Vertices_of G &
not the_Edges_of G in the_Edges_of G;
hence thesis by Th55;
end;
cluster -> non edgeless for
addAdjVertex of G, the_Vertices_of G, the_Edges_of G, v;
coherence
proof
not the_Vertices_of G in the_Vertices_of G &
not the_Edges_of G in the_Edges_of G;
hence thesis by Th56;
end;
let w be Vertex of G;
cluster -> non edgeless for addEdge of G, v, the_Edges_of G, w;
coherence
proof
not the_Edges_of G in the_Edges_of G;
hence thesis by Th54;
end;
end;
registration
let G be edgeless _Graph;
cluster -> trivial for Component of G;
coherence;
let v be Vertex of G;
cluster v.edgesIn() -> empty;
coherence;
cluster v.edgesOut() -> empty;
coherence;
cluster v.edgesInOut() -> empty;
coherence;
end;
registration
let G be edgeless _Graph;
cluster -> isolated non cut-vertex non endvertex for Vertex of G;
coherence
proof
let v be Vertex of G;
v.edgesInOut() = {};
hence v is isolated by GLIB_000:def 49;
hence v is non cut-vertex;
thus v is non endvertex
proof
assume v is endvertex;
then consider e being object such that
A1: v.edgesInOut() = {e} & not e Joins v,v,G by GLIB_000:def 51;
thus contradiction by A1;
end;
end;
let v be Vertex of G;
cluster v.inDegree() -> empty;
coherence
proof
v.edgesIn() = {};
hence thesis by GLIB_000:def 42, CARD_1:27;
end;
cluster v.outDegree() -> empty;
coherence
proof
v.edgesOut() = {};
hence thesis by GLIB_000:def 43, CARD_1:27;
end;
cluster v.inNeighbors() -> empty;
coherence
proof
(the_Source_of G).:(v.edgesIn()) = {};
hence thesis by GLIB_000:def 46;
end;
cluster v.outNeighbors() -> empty;
coherence
proof
(the_Target_of G).:(v.edgesOut()) = {};
hence thesis by GLIB_000:def 47;
end;
end;
registration
let G be edgeless _Graph, v be Vertex of G;
cluster v.degree() -> empty;
coherence
proof
v.inDegree() +` v.outDegree() = 0 + 0;
hence thesis by GLIB_000:def 44;
end;
cluster v.allNeighbors() -> empty;
coherence
proof
v.inNeighbors() \/ v.outNeighbors() = {};
hence thesis by GLIB_000:def 48;
end;
end;
registration
cluster trivial finite edgeless for _Graph;
existence
proof
set G = the trivial finite _Graph;
take the removeEdges of G, the_Edges_of G;
thus thesis;
end;
cluster non trivial finite edgeless for _Graph;
existence
proof
set G = the non trivial finite _Graph;
take the removeEdges of G, the_Edges_of G;
thus thesis;
end;
cluster trivial finite non edgeless for _Graph;
existence
proof
set G = the trivial finite _Graph;
set v = the Vertex of G;
take the addEdge of G, v, the_Edges_of G, v;
thus thesis;
end;
cluster non trivial finite non edgeless for _Graph;
existence
proof
set G = the non trivial finite _Graph;
set v = the Vertex of G;
take the addEdge of G, v, the_Edges_of G, v;
thus thesis;
end;
end;
registration
let G be non edgeless _Graph;
cluster the_Edges_of G -> non empty;
coherence by Def1;
cluster -> non edgeless for Supergraph of G;
coherence
proof
let G1 be Supergraph of G;
assume A1: G1 is edgeless;
G is Subgraph of G1 by GLIB_006:57;
hence contradiction by A1;
end;
let X be set;
cluster -> non edgeless for reverseEdgeDirections of G, X;
coherence
proof
let G1 be reverseEdgeDirections of G, X;
per cases;
suppose X c= the_Edges_of G;
hence thesis by GLIB_007:def 1;
end;
suppose not X c= the_Edges_of G;
then G1 == G by GLIB_007:def 1;
then the_Edges_of G1 = the_Edges_of G by GLIB_000:def 34;
hence thesis;
end;
end;
cluster G.set(WeightSelector, X) -> non edgeless;
coherence
proof
G.set(WeightSelector, X) == G by GLIB_003:7;
hence thesis by Th52;
end;
cluster G.set(ELabelSelector, X) -> non edgeless;
coherence
proof
G.set(ELabelSelector, X) == G by GLIB_003:7;
hence thesis by Th52;
end;
cluster G.set(VLabelSelector, X) -> non edgeless;
coherence
proof
G.set(VLabelSelector, X) == G by GLIB_003:7;
hence thesis by Th52;
end;
end;
definition
let G be non edgeless _Graph;
mode Edge of G is Element of the_Edges_of G;
end;
theorem
for G1 being finite edgeless _Graph, G2 being Subgraph of G1
st G1.order() = G2.order() holds G1 == G2
proof
let G1 be finite edgeless _Graph, G2 be Subgraph of G1;
assume A1: G1.order() = G2.order();
A2: card the_Vertices_of G1 = G1.order() by GLIB_000:def 24
.= card the_Vertices_of G2 by A1, GLIB_000:def 24;
A3: the_Vertices_of G2 = the_Vertices_of G1 by A2, CARD_2:102;
A4: the_Edges_of G1 = the_Edges_of G2;
G1 is Subgraph of G1 by GLIB_000:40;
hence thesis by A3, A4, GLIB_000:86;
end;
definition
let GF be Graph-yielding Function;
attr GF is edgeless means :Def2:
for x being object st x in dom GF
ex G being _Graph st GF.x = G & G is edgeless;
end;
definition
let GF be non empty Graph-yielding Function;
redefine attr GF is edgeless means
:Def3:
for x being Element of dom GF holds GF.x is edgeless;
compatibility
proof
hereby
assume A1: GF is edgeless;
let x be Element of dom GF;
consider G being _Graph such that
A2: GF.x = G & G is edgeless by A1;
thus GF.x is edgeless by A2;
end;
assume A3: for x being Element of dom GF holds GF.x is edgeless;
let x be object;
assume x in dom GF;
then reconsider y = x as Element of dom GF;
take GF.y;
thus thesis by A3;
end;
end;
Lm10: :: copied from GLIB_000
for F being ManySortedSet of NAT, n being object
holds n is Nat iff n in dom F
proof
let F be ManySortedSet of NAT, n being object;
hereby
assume n is Nat;
then n in NAT by ORDINAL1:def 12;
hence n in dom F by PARTFUN1:def 2;
end;
assume n in dom F;
hence n is Nat;
end;
definition
let GSq be GraphSeq;
redefine attr GSq is edgeless means :Def4:
for n being Nat holds GSq.n is edgeless;
compatibility
proof
hereby
assume A1: GSq is edgeless;
let x be Nat;
x in dom GSq by Lm10;
hence GSq.x is edgeless by A1;
end;
assume A2: for x being Nat holds GSq.x is edgeless;
let x be Element of dom GSq;
thus thesis by A2;
end;
end;
registration
cluster trivial loopless -> edgeless for Graph-yielding Function;
coherence
proof
let GF be Graph-yielding Function;
assume A1: GF is trivial loopless;
let x be object;
assume A2: x in dom GF;
consider G1 being _Graph such that
A3: GF.x = G1 & G1 is trivial by A1, A2, GLIB_000:def 60;
consider G2 being _Graph such that
A4: GF.x = G2 & G2 is loopless by A1, A2, GLIB_000:def 59;
take G1;
thus thesis by A3, A4;
end;
cluster edgeless -> non-multi non-Dmulti loopless simple Dsimple acyclic
for Graph-yielding Function;
coherence
proof
let GF be Graph-yielding Function;
assume A5: GF is edgeless;
now
let x be object;
assume x in dom GF;
then consider G being _Graph such that
A6: GF.x = G & G is edgeless by A5;
take G;
thus GF.x = G by A6;
thus G is non-multi by A6;
end;
hence GF is non-multi by GLIB_000:def 62;
now
let x be object;
assume x in dom GF;
then consider G being _Graph such that
A7: GF.x = G & G is edgeless by A5;
take G;
thus GF.x = G by A7;
thus G is non-Dmulti by A7;
end;
hence GF is non-Dmulti by GLIB_000:def 63;
now
let x be object;
assume x in dom GF;
then consider G being _Graph such that
A8: GF.x = G & G is edgeless by A5;
take G;
thus GF.x = G by A8;
thus G is loopless by A8;
end;
hence GF is loopless by GLIB_000:def 59;
now
let x be object;
assume x in dom GF;
then consider G being _Graph such that
A9: GF.x = G & G is edgeless by A5;
take G;
thus GF.x = G by A9;
thus G is simple by A9;
end;
hence GF is simple by GLIB_000:def 64;
now
let x be object;
assume x in dom GF;
then consider G being _Graph such that
A10: GF.x = G & G is edgeless by A5;
take G;
thus GF.x = G by A10;
thus G is Dsimple by A10;
end;
hence GF is Dsimple by GLIB_000:def 65;
now
let x be object;
assume x in dom GF;
then consider G being _Graph such that
A11: GF.x = G & G is edgeless by A5;
take G;
thus GF.x = G by A11;
thus G is acyclic by A11;
end;
hence GF is acyclic by GLIB_002:def 13;
end;
end;
registration
let GF be edgeless non empty Graph-yielding Function, x be Element of dom GF;
cluster GF.x -> edgeless;
coherence by Def3;
end;
registration
let GSq be edgeless GraphSeq, x be Nat;
cluster GSq.x -> edgeless;
coherence by Def4;
end;
begin :: Finite Graph sequences
registration
let G be _Graph;
cluster <* G *> -> Graph-yielding;
coherence
proof
let x be object;
assume x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is _Graph by FINSEQ_1:def 8;
end;
end;
registration
let G be finite _Graph;
cluster <* G *> -> finite;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is finite by FINSEQ_1:def 8;
end;
end;
registration
let G be loopless _Graph;
cluster <* G *> -> loopless;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is loopless by FINSEQ_1:def 8;
end;
end;
registration
let G be trivial _Graph;
cluster <* G *> -> trivial;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is trivial by FINSEQ_1:def 8;
end;
end;
registration
let G be non trivial _Graph;
cluster <* G *> -> non-trivial;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is non trivial by FINSEQ_1:def 8;
end;
end;
registration
let G be non-multi _Graph;
cluster <* G *> -> non-multi;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is non-multi by FINSEQ_1:def 8;
end;
end;
registration
let G be non-Dmulti _Graph;
cluster <* G *> -> non-Dmulti;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is non-Dmulti by FINSEQ_1:def 8;
end;
end;
registration
let G be simple _Graph;
cluster <* G *> -> simple;
coherence;
end;
registration
let G be Dsimple _Graph;
cluster <* G *> -> Dsimple;
coherence;
end;
registration
let G be connected _Graph;
cluster <* G *> -> connected;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is connected by FINSEQ_1:def 8;
end;
end;
registration
let G be acyclic _Graph;
cluster <* G *> -> acyclic;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is acyclic by FINSEQ_1:def 8;
end;
end;
registration
let G be Tree-like _Graph;
cluster <* G *> -> Tree-like;
coherence;
end;
registration
let G be edgeless _Graph;
cluster <* G *> -> edgeless;
coherence
proof
let x be Element of dom <* G *>;
x in dom <* G *>;
then x in Seg 1 by FINSEQ_1:def 8;
then x = 1 by FINSEQ_1:2, TARSKI:def 1;
hence <* G *>.x is edgeless by FINSEQ_1:def 8;
end;
end;
registration
cluster empty Graph-yielding for FinSequence;
existence
proof
take the empty FinSequence;
thus thesis;
end;
cluster non empty Graph-yielding for FinSequence;
existence
proof
take <* the _Graph *>;
thus thesis;
end;
end;
registration
let p be non empty Graph-yielding FinSequence;
cluster p.1 -> Function-like Relation-like;
coherence
proof
1 in dom p by FINSEQ_5:6;
hence thesis;
end;
cluster p.len p -> Function-like Relation-like;
coherence
proof
len p in dom p by FINSEQ_5:6;
hence thesis;
end;
end;
registration
let p be non empty Graph-yielding FinSequence;
cluster p.1 -> finite NAT-defined;
coherence
proof
1 in dom p by FINSEQ_5:6;
hence thesis;
end;
cluster p.len p -> finite NAT-defined;
coherence
proof
len p in dom p by FINSEQ_5:6;
hence thesis;
end;
end;
registration
let p be non empty Graph-yielding FinSequence;
cluster p.1 -> [Graph-like];
coherence
proof
1 in dom p by FINSEQ_5:6;
hence thesis;
end;
cluster p.len p -> [Graph-like];
coherence
proof
len p in dom p by FINSEQ_5:6;
hence thesis;
end;
end;
registration
cluster non empty finite loopless trivial non-multi non-Dmulti simple Dsimple
connected acyclic Tree-like edgeless for Graph-yielding FinSequence;
existence
proof
take <* the finite trivial edgeless _Graph *>;
thus thesis;
end;
cluster non empty finite loopless non-trivial non-multi non-Dmulti simple
Dsimple connected acyclic Tree-like for Graph-yielding FinSequence;
existence
proof
take <* the finite non trivial Tree-like _Graph *>;
thus thesis;
end;
end;
registration
let p be Graph-yielding FinSequence, n be Nat;
cluster p | n -> Graph-yielding;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then p.x is _Graph by GLIB_000:def 53;
hence (p|n).x is _Graph by A1, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 53;
end;
cluster p /^ n -> Graph-yielding;
coherence
proof
per cases;
suppose A3: n <= len p;
now
let x be object;
assume A4: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A4, FINSEQ_5:26;
then p.(n+i) is _Graph by GLIB_000:def 53;
hence (p /^ n).x is _Graph by A3, A4, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 53;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> Graph-yielding;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> Graph-yielding;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be finite Graph-yielding FinSequence, n be Nat;
cluster p | n -> finite;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is finite by GLIB_000:def 58;
take G;
thus (p|n).x = G & G is finite by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 58;
end;
cluster p /^ n -> finite;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is finite by GLIB_000:def 58;
take G;
thus (p /^ n).x = G & G is finite by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 58;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> finite;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> finite;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be loopless Graph-yielding FinSequence, n be Nat;
cluster p | n -> loopless;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is loopless by GLIB_000:def 59;
take G;
thus (p|n).x = G & G is loopless by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 59;
end;
cluster p /^ n -> loopless;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is loopless by GLIB_000:def 59;
take G;
thus (p /^ n).x = G & G is loopless by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 59;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> loopless;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> loopless;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be trivial Graph-yielding FinSequence, n be Nat;
cluster p | n -> trivial;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is trivial by GLIB_000:def 60;
take G;
thus (p|n).x = G & G is trivial by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 60;
end;
cluster p /^ n -> trivial;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is trivial by GLIB_000:def 60;
take G;
thus (p /^ n).x = G & G is trivial by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 60;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> trivial;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> trivial;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be non-trivial Graph-yielding FinSequence, n be Nat;
cluster p | n -> non-trivial;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is non trivial by GLIB_000:def 61;
take G;
thus (p|n).x = G & G is non trivial by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 61;
end;
cluster p /^ n -> non-trivial;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is non trivial by GLIB_000:def 61;
take G;
thus (p /^ n).x = G & G is non trivial by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 61;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> non-trivial;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> non-trivial;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be non-multi Graph-yielding FinSequence, n be Nat;
cluster p | n -> non-multi;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is non-multi by GLIB_000:def 62;
take G;
thus (p|n).x = G & G is non-multi by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 62;
end;
cluster p /^ n -> non-multi;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is non-multi by GLIB_000:def 62;
take G;
thus (p /^ n).x = G & G is non-multi by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 62;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> non-multi;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> non-multi;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be non-Dmulti Graph-yielding FinSequence, n be Nat;
cluster p | n -> non-Dmulti;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is non-Dmulti by GLIB_000:def 63;
take G;
thus (p|n).x = G & G is non-Dmulti by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_000:def 63;
end;
cluster p /^ n -> non-Dmulti;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is non-Dmulti by GLIB_000:def 63;
take G;
thus (p /^ n).x = G & G is non-Dmulti by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_000:def 63;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> non-Dmulti;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> non-Dmulti;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be simple Graph-yielding FinSequence, n be Nat;
cluster p | n -> simple;
coherence;
cluster p /^ n -> simple;
coherence;
let m be Nat;
cluster smid(p,m,n) -> simple;
coherence;
cluster (m,n)-cut p -> simple;
coherence;
end;
registration
let p be Dsimple Graph-yielding FinSequence, n be Nat;
cluster p | n -> Dsimple;
coherence;
cluster p /^ n -> Dsimple;
coherence;
let m be Nat;
cluster smid(p,m,n) -> Dsimple;
coherence;
cluster (m,n)-cut p -> Dsimple;
coherence;
end;
registration
let p be connected Graph-yielding FinSequence, n be Nat;
cluster p | n -> connected;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is connected by GLIB_002:def 12;
take G;
thus (p|n).x = G & G is connected by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_002:def 12;
end;
cluster p /^ n -> connected;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is connected by GLIB_002:def 12;
take G;
thus (p /^ n).x = G & G is connected by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_002:def 12;
end;
suppose not n <= len p;
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> connected;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> connected;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be acyclic Graph-yielding FinSequence, n be Nat;
cluster p | n -> acyclic;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is acyclic by GLIB_002:def 13;
take G;
thus (p|n).x = G & G is acyclic by A1, A3, A2, FUNCT_1:47;
end;
hence thesis by GLIB_002:def 13;
end;
cluster p /^ n -> acyclic;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is acyclic by GLIB_002:def 13;
take G;
thus (p /^ n).x = G & G is acyclic by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis by GLIB_002:def 13;
end;
suppose not (n <= len p);
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> acyclic;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> acyclic;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p be Tree-like Graph-yielding FinSequence, n be Nat;
cluster p | n -> Tree-like;
coherence;
cluster p /^ n -> Tree-like;
coherence;
let m be Nat;
cluster smid(p,m,n) -> Tree-like;
coherence;
cluster (m,n)-cut p -> Tree-like;
coherence;
end;
registration
let p be edgeless Graph-yielding FinSequence, n be Nat;
cluster p | n -> edgeless;
coherence
proof
A1: p|n = p|Seg n by FINSEQ_1:def 15;
now
let x be object;
assume A2: x in dom(p|n);
then x in dom p by A1, RELAT_1:60, TARSKI:def 3;
then consider G being _Graph such that
A3: p.x = G & G is edgeless by Def2;
take G;
thus (p|n).x = G & G is edgeless by A1, A3, A2, FUNCT_1:47;
end;
hence thesis;
end;
cluster p /^ n -> edgeless;
coherence
proof
per cases;
suppose A4: n <= len p;
now
let x be object;
assume A5: x in dom(p /^ n);
then reconsider i = x as Nat;
n+i in dom p by A5, FINSEQ_5:26;
then consider G being _Graph such that
A6: p.(n+i) = G & G is edgeless by Def2;
take G;
thus (p /^ n).x = G & G is edgeless by A4, A5, A6, RFINSEQ:def 1;
end;
hence thesis;
end;
suppose not (n <= len p);
hence thesis by RFINSEQ:def 1;
end;
end;
let m be Nat;
cluster smid(p,m,n) -> edgeless;
coherence
proof
smid(p,m,n) = (p/^(m-'1))|(n+1-'m) by FINSEQ_8:def 1;
hence thesis;
end;
cluster (m,n)-cut p -> edgeless;
coherence
proof
per cases;
suppose 1 <= m & m <= n & n <= len p;
then 1 <= m & m <= len p & 1 <= n & n <= len p by XXREAL_0:2;
then m in dom p & n in dom p by FINSEQ_3:25;
then smid(p,m,n) = (m,n)-cut p by FINSEQ_8:29;
hence thesis;
end;
suppose not(1 <= m & m <= n & n <= len p);
hence thesis by FINSEQ_6:def 4;
end;
end;
end;
registration
let p, q be Graph-yielding FinSequence;
cluster p ^ q -> Graph-yielding;
coherence
proof
now
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & p.k is _Graph by FINSEQ_1:def 7, GLIB_000:def 53;
hence (p^q).x is _Graph;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & q.n is _Graph
by A2, FINSEQ_1:def 7, GLIB_000:def 53;
hence (p^q).x is _Graph by A2;
end;
end;
hence thesis by GLIB_000:def 53;
end;
cluster p ^' q -> Graph-yielding;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be finite Graph-yielding FinSequence;
cluster p ^ q -> finite;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is finite
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is finite
by FINSEQ_1:def 7, GLIB_000:def 58;
hence ex G being _Graph st (p^q).x = G & G is finite;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G & G is finite
by A2, FINSEQ_1:def 7, GLIB_000:def 58;
hence ex G being _Graph st (p^q).x = G & G is finite by A2;
end;
end;
hence thesis by GLIB_000:def 58;
end;
cluster p ^' q -> finite;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be loopless Graph-yielding FinSequence;
cluster p ^ q -> loopless;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is loopless
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is loopless
by FINSEQ_1:def 7, GLIB_000:def 59;
hence ex G being _Graph st (p^q).x = G & G is loopless;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G & G is loopless
by A2, FINSEQ_1:def 7, GLIB_000:def 59;
hence ex G being _Graph st (p^q).x = G & G is loopless by A2;
end;
end;
hence thesis by GLIB_000:def 59;
end;
cluster p ^' q -> loopless;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be trivial Graph-yielding FinSequence;
cluster p ^ q -> trivial;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is trivial
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is trivial
by FINSEQ_1:def 7, GLIB_000:def 60;
hence ex G being _Graph st (p^q).x = G & G is trivial;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G & G is trivial
by A2, FINSEQ_1:def 7, GLIB_000:def 60;
hence ex G being _Graph st (p^q).x = G & G is trivial by A2;
end;
end;
hence thesis by GLIB_000:def 60;
end;
cluster p ^' q -> trivial;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be non-trivial Graph-yielding FinSequence;
cluster p ^ q -> non-trivial;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is non trivial
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is non trivial
by FINSEQ_1:def 7, GLIB_000:def 61;
hence ex G being _Graph st (p^q).x = G & G is non trivial;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G &
G is non trivial by A2, FINSEQ_1:def 7, GLIB_000:def 61;
hence ex G being _Graph st (p^q).x = G & G is non trivial by A2;
end;
end;
hence thesis by GLIB_000:def 61;
end;
cluster p ^' q -> non-trivial;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be non-multi Graph-yielding FinSequence;
cluster p ^ q -> non-multi;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is non-multi
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is non-multi
by FINSEQ_1:def 7, GLIB_000:def 62;
hence ex G being _Graph st (p^q).x = G & G is non-multi;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G & G is non-multi
by A2, FINSEQ_1:def 7, GLIB_000:def 62;
hence ex G being _Graph st (p^q).x = G & G is non-multi by A2;
end;
end;
hence thesis by GLIB_000:def 62;
end;
cluster p ^' q -> non-multi;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be non-Dmulti Graph-yielding FinSequence;
cluster p ^ q -> non-Dmulti;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is non-Dmulti
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is non-Dmulti
by FINSEQ_1:def 7, GLIB_000:def 63;
hence ex G being _Graph st (p^q).x = G & G is non-Dmulti;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G &
G is non-Dmulti by A2, FINSEQ_1:def 7, GLIB_000:def 63;
hence ex G being _Graph st (p^q).x = G & G is non-Dmulti by A2;
end;
end;
hence thesis by GLIB_000:def 63;
end;
cluster p ^' q -> non-Dmulti;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be simple Graph-yielding FinSequence;
cluster p ^ q -> simple;
coherence;
cluster p ^' q -> simple;
coherence;
end;
registration
let p, q be Dsimple Graph-yielding FinSequence;
cluster p ^ q -> Dsimple;
coherence;
cluster p ^' q -> Dsimple;
coherence;
end;
registration
let p, q be connected Graph-yielding FinSequence;
cluster p ^ q -> connected;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is connected
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is connected
by FINSEQ_1:def 7, GLIB_002:def 12;
hence ex G being _Graph st (p^q).x = G & G is connected;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G &
G is connected by A2, FINSEQ_1:def 7, GLIB_002:def 12;
hence ex G being _Graph st (p^q).x = G & G is connected by A2;
end;
end;
hence thesis by GLIB_002:def 12;
end;
cluster p ^' q -> connected;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be acyclic Graph-yielding FinSequence;
cluster p ^ q -> acyclic;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is acyclic
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is acyclic
by FINSEQ_1:def 7, GLIB_002:def 13;
hence ex G being _Graph st (p^q).x = G & G is acyclic;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G &
G is acyclic by A2, FINSEQ_1:def 7, GLIB_002:def 13;
hence ex G being _Graph st (p^q).x = G & G is acyclic by A2;
end;
end;
hence thesis by GLIB_002:def 13;
end;
cluster p ^' q -> acyclic;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let p, q be Tree-like Graph-yielding FinSequence;
cluster p ^ q -> Tree-like;
coherence;
cluster p ^' q -> Tree-like;
coherence;
end;
registration
let p, q be edgeless Graph-yielding FinSequence;
cluster p ^ q -> edgeless;
coherence
proof
for x being object st x in dom (p^q) ex G being _Graph st
G = (p^q).x & G is edgeless
proof
let x be object;
assume A1: x in dom (p^q);
then reconsider k = x as Nat;
per cases by A1, FINSEQ_1:25;
suppose k in dom p;
then (p^q).k = p.k & ex G being _Graph st p.k = G & G is edgeless
by FINSEQ_1:def 7, Def2;
hence ex G being _Graph st (p^q).x = G & G is edgeless;
end;
suppose ex n being Nat st n in dom q & k = len p + n;
then consider n being Nat such that
A2: n in dom q & k = len p + n;
(p^q).(len p + n) = q.n & ex G being _Graph st q.n = G &
G is edgeless by A2, FINSEQ_1:def 7, Def2;
hence ex G being _Graph st (p^q).x = G & G is edgeless by A2;
end;
end;
hence thesis;
end;
cluster p ^' q -> edgeless;
coherence
proof
p ^' q = p^(2,len q)-cut q by FINSEQ_6:def 5;
hence thesis;
end;
end;
registration
let G1, G2 be _Graph;
cluster <* G1, G2 *> -> Graph-yielding;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be _Graph;
cluster <* G1, G2, G3 *> -> Graph-yielding;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be finite _Graph;
cluster <* G1, G2 *> -> finite;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be finite _Graph;
cluster <* G1, G2, G3 *> -> finite;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be loopless _Graph;
cluster <* G1, G2 *> -> loopless;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be loopless _Graph;
cluster <* G1, G2, G3 *> -> loopless;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be trivial _Graph;
cluster <* G1, G2 *> -> trivial;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be trivial _Graph;
cluster <* G1, G2, G3 *> -> trivial;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be non trivial _Graph;
cluster <* G1, G2 *> -> non-trivial;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be non trivial _Graph;
cluster <* G1, G2, G3 *> -> non-trivial;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be non-multi _Graph;
cluster <* G1, G2 *> -> non-multi;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be non-multi _Graph;
cluster <* G1, G2, G3 *> -> non-multi;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be non-Dmulti _Graph;
cluster <* G1, G2 *> -> non-Dmulti;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be non-Dmulti _Graph;
cluster <* G1, G2, G3 *> -> non-Dmulti;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be simple _Graph;
cluster <* G1, G2 *> -> simple;
coherence;
let G3 be simple _Graph;
cluster <* G1, G2, G3 *> -> simple;
coherence;
end;
registration
let G1, G2 be Dsimple _Graph;
cluster <* G1, G2 *> -> Dsimple;
coherence;
let G3 be Dsimple _Graph;
cluster <* G1, G2, G3 *> -> Dsimple;
coherence;
end;
registration
let G1, G2 be connected _Graph;
cluster <* G1, G2 *> -> connected;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be connected _Graph;
cluster <* G1, G2, G3 *> -> connected;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be acyclic _Graph;
cluster <* G1, G2 *> -> acyclic;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be acyclic _Graph;
cluster <* G1, G2, G3 *> -> acyclic;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
registration
let G1, G2 be Tree-like _Graph;
cluster <* G1, G2 *> -> Tree-like;
coherence;
let G3 be Tree-like _Graph;
cluster <* G1, G2, G3 *> -> Tree-like;
coherence;
end;
registration
let G1, G2 be edgeless _Graph;
cluster <* G1, G2 *> -> edgeless;
coherence
proof
<* G1, G2 *> = <* G1 *> ^ <* G2 *> by FINSEQ_1:def 9;
hence thesis;
end;
let G3 be edgeless _Graph;
cluster <* G1, G2, G3 *> -> edgeless;
coherence
proof
<* G1, G2, G3 *> = <* G1 *> ^ <* G2 *> ^ <* G3 *> by FINSEQ_1:def 10;
hence thesis;
end;
end;
begin :: Construction of finite Graphs
:: finite addition of vertices can be finitely constructed with addVertex only
theorem Th59:
for G2 being _Graph, V being finite set, G1 being addVertices of G2, V
ex p being non empty Graph-yielding FinSequence
st p.1 == G2 & p.len p = G1 & len p = card (V \ the_Vertices_of G2) + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G1
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n
proof
let G2 be _Graph;
defpred P[Nat] means for V being finite set, G1 being addVertices of G2, V
st card (V \ the_Vertices_of G2) = $1 holds
ex p being non empty Graph-yielding FinSequence
st p.1 == G2 & p.len p = G1 & len p = card (V \ the_Vertices_of G2) + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G1
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n;
A1: P[0]
proof
let V be finite set, G1 be addVertices of G2, V;
assume A2: card (V \ the_Vertices_of G2) = 0;
then V \ the_Vertices_of G2 = {};
then A3: G1 == G2 by XBOOLE_1:37, GLIB_006:78;
reconsider p = <* G1 *> as non empty Graph-yielding FinSequence;
take p;
thus p.1 == G2 by A3, FINSEQ_1:40;
thus p.len p = p.1 by FINSEQ_1:40
.= G1 by FINSEQ_1:40;
thus len p = card (V \ the_Vertices_of G2) + 1 by A2, FINSEQ_1:40;
let n be Element of dom p;
1 <= n & n <= len p by FINSEQ_3:25;
then 1 <= n & n <= 1 by FINSEQ_1:40;
then A4: n = 1 by XXREAL_0:1;
assume n <= len p - 1;
then n <= 1 - 1 by FINSEQ_1:40;
hence thesis by A4; :: by contradiction
end;
A5: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A6: P[k];
let V be finite set, G1 be addVertices of G2, V;
assume A7: card (V \ the_Vertices_of G2) = k+1;
then A8: V \ the_Vertices_of G2 <> {};
set v0 = the Element of V \ the_Vertices_of G2;
set V0 = V \ {v0};
set G3 = the addVertices of G2, V0;
V0 \ the_Vertices_of G2 = V0 \ (V0 /\ the_Vertices_of G2) by XBOOLE_1:47;
then A9: card(V0 \ the_Vertices_of G2) =
card V0 - card(V0 /\ the_Vertices_of G2) by CARD_2:44, XBOOLE_1:17;
A10: v0 in V by A8, XBOOLE_0:def 5;
then A11: card V0 = card V - card {v0} by CARD_2:44, ZFMISC_1:31
.= card V - 1 by CARD_1:30;
A12: not v0 in the_Vertices_of G2 by A8, XBOOLE_0:def 5;
then the_Vertices_of G2 misses {v0} by ZFMISC_1:50;
then the_Vertices_of G2 /\ ({v0} \/ V0) = the_Vertices_of G2 /\ V0
by XBOOLE_1:78;
then the_Vertices_of G2 /\ V0 = the_Vertices_of G2 /\ V
by A10, ZFMISC_1:116;
then A13: card(V0 \ the_Vertices_of G2)
= card V - card(V /\ the_Vertices_of G2) - 1 by A9, A11
.= card(V \ (V /\ the_Vertices_of G2)) - 1 by CARD_2:44, XBOOLE_1:17
.= card(V \ the_Vertices_of G2) - 1 by XBOOLE_1:47
.= k by A7;
then consider p being non empty Graph-yielding FinSequence such that
A14: p.1 == G2 & p.len p = G3 &
len p = card (V0 \ the_Vertices_of G2) + 1 and
A15: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G3
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by A6;
reconsider q = p ^ <* G1 *> as non empty Graph-yielding FinSequence;
take q;
1 in dom p by FINSEQ_5:6;
hence q.1 == G2 by A14, FINSEQ_1:def 7;
A16: len q = len p + len <* G1 *> by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:40;
hence A17: q.len q = G1 by FINSEQ_1:42;
thus len q = card (V \ the_Vertices_of G2) + 1 by A7, A13, A14, A16;
G1 is addVertices of G2, {v0} \/ V0 by A10, ZFMISC_1:116;
then consider G4 being addVertices of G2, V0 such that
A18: G1 is addVertices of G4, {v0} by GLIB_006:83;
A19: G1 is addVertices of G3, {v0} by A18, Th32, GLIB_006:77;
let n be Element of dom q;
assume n <= len q - 1;
then per cases by Lm12;
suppose A20: n = len q - 1;
then A21: q.(n+1) = G1 by A17;
1 <= n by FINSEQ_3:25; then
n in dom p by A16, A20, FINSEQ_3:25;
then A24: q.n = G3 by A14, A16, A20, FINSEQ_1:def 7;
the_Vertices_of G1 = the_Vertices_of G2 \/ V by GLIB_006:def 10;
then reconsider v0 as Vertex of G1 by A10, TARSKI:def 3, XBOOLE_1:7;
take v0;
thus q.(n+1) is addVertex of q.n, v0 by A19, A21, A24;
v0 in {v0} by TARSKI:def 1;
then not v0 in V0 by XBOOLE_0:def 5;
then not v0 in the_Vertices_of G2 \/ V0 by A12, XBOOLE_0:def 3;
hence not v0 in the_Vertices_of q.n by A24, GLIB_006:def 10;
end;
suppose A25: n <= len p - 1;
then A26: n+0 <= len p - 1 + 1 by XREAL_1:7;
1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A26, FINSEQ_3:25;
consider v being Vertex of G3 such that
A27: p.(m+1) is addVertex of p.m, v & not v in the_Vertices_of p.m
by A15, A25;
1+0 <= n+1 & n+1 <= len p - 1 + 1 by A25, XREAL_1:6;
then n+1 in dom p by FINSEQ_3:25;
then A28: q.(n+1) = p.(m+1) by FINSEQ_1:def 7;
A29: q.n = p.m by FINSEQ_1:def 7;
the_Vertices_of G3 c= the_Vertices_of G1 by A19, GLIB_006:def 9;
then reconsider v as Vertex of G1 by TARSKI:def 3;
take v;
thus thesis by A27, A28, A29;
end;
end;
A30: for k being Nat holds P[k] from NAT_1:sch 2(A1,A5);
thus thesis by A30;
end;
theorem Th60:
for G being finite _Graph, H being Subgraph of G st G.size() = H.size()
ex p being non empty finite Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n
proof
let G be finite _Graph, H be Subgraph of G;
assume A1: G.size() = H.size();
set V = the_Vertices_of G \ the_Vertices_of H;
G is addVertices of H, V by A1, Th34;
then consider p being non empty Graph-yielding FinSequence such that
A2: p.1 == H & p.len p = G & len p = card (V \ the_Vertices_of H) + 1 and
A3: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by Th59;
defpred P[Nat] means for n being Element of dom p st $1 = n
holds p.n is finite;
A4: P[1] by A2, GLIB_000:89;
A5: for k being non zero Nat st P[k] holds P[k+1]
proof
let k be non zero Nat;
assume A6: P[k];
let m be Element of dom p;
assume A7: k+1 = m;
then A8: k+1 <= len p by FINSEQ_3:25;
then A9: k+1-1 <= len p - 0 by XREAL_1:13;
1 <= k by NAT_1:14;
then reconsider n = k as Element of dom p by A9, FINSEQ_3:25;
k+1-1 <= len p - 1 by A8, XREAL_1:9;
then consider v being Vertex of G such that
A10: p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by A3;
p.n is finite by A6;
hence thesis by A7, A10;
end;
A11: for k being non zero Nat holds P[k] from NAT_1:sch 10(A4,A5);
for x being Element of dom p holds p.x is finite
proof
let x be Element of dom p;
x is non zero Nat by FINSEQ_3:25;
hence thesis by A11;
end;
then reconsider p as non empty finite Graph-yielding FinSequence
by GLIB_000:def 66;
take p;
thus p.1 == H & p.len p = G by A2;
V \ the_Vertices_of H = the_Vertices_of G \
(the_Vertices_of H \/ the_Vertices_of H) by XBOOLE_1:41
.= the_Vertices_of G \ the_Vertices_of H;
hence len p = card (the_Vertices_of G) - card(the_Vertices_of H) + 1
by A2, CARD_2:44
.= G.order() - card(the_Vertices_of H) + 1 by GLIB_000:def 24
.= G.order() - H.order() + 1 by GLIB_000:def 24;
thus thesis by A3;
end;
theorem Th61:
for G being finite edgeless _Graph, H being Subgraph of G
ex p being non empty finite edgeless Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n,v & not v in the_Vertices_of p.n
proof
let G be finite edgeless _Graph, H be Subgraph of G;
G.size() = 0 by Th49
.= H.size() by Th49;
then consider p being non empty finite Graph-yielding FinSequence such that
A1: p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n
by Th60;
defpred P[Nat] means for n being Element of dom p st $1 = n
holds p.n is edgeless;
A3: P[1] by A1, Th52;
A4: for k being non zero Nat st P[k] holds P[k+1]
proof
let k be non zero Nat;
assume A5: P[k];
let m be Element of dom p;
assume A6: k+1 = m;
then A7: k+1 <= len p by FINSEQ_3:25;
then A8: k+1-1 <= len p - 0 by XREAL_1:13;
1 <= k by NAT_1:14;
then reconsider n = k as Element of dom p by A8, FINSEQ_3:25;
k+1-1 <= len p - 1 by A7, XREAL_1:9;
then consider v being Vertex of G such that
A9: p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by A2;
p.n is edgeless by A5;
hence thesis by A6, A9;
end;
A10: for k being non zero Nat holds P[k] from NAT_1:sch 10(A3,A4);
for x being Element of dom p holds p.x is edgeless
proof
let x be Element of dom p;
x is non zero Nat by FINSEQ_3:25;
hence thesis by A10;
end;
then p is edgeless;
then reconsider p as non empty finite edgeless Graph-yielding FinSequence;
take p;
thus thesis by A1, A2;
end;
:: finite edgeless graphs can be finitely constructed with addVertex only
theorem Th62:
for G being finite edgeless _Graph
ex p being non empty finite edgeless Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.order() &
for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n,v & not v in the_Vertices_of p.n
proof
let G be finite edgeless _Graph;
set v0 = the Vertex of G;
set H = the inducedSubgraph of G, {v0};
consider p being non empty finite edgeless Graph-yielding FinSequence
such that
A1: p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by Th61;
take p;
thus p.1 is trivial edgeless by A1, Th52, GLIB_000:89;
thus p.len p = G by A1;
H.order() = 1 by GLIB_000:26;
hence len p = G.order() by A1;
thus thesis by A2;
end;
scheme
FinEdgelessGraphs { P[finite _Graph] } :
for G being finite edgeless _Graph holds P[G]
provided
A1: for G being trivial edgeless _Graph holds P[G] and
A2: for G2 being finite edgeless _Graph, v being object
for G1 being addVertex of G2,v
st not v in the_Vertices_of G2 & P[G2] holds P[G1]
proof
let G be finite edgeless _Graph;
consider p being non empty finite edgeless Graph-yielding FinSequence
such that
A3: p.1 is trivial edgeless & p.len p = G & len p = G.order() and
A4: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n,v & not v in the_Vertices_of p.n
by Th62;
defpred Q[Nat] means $1 + 1 <= len p implies
ex k being Element of dom p st k = $1 + 1 & P[p.k];
A5: Q[0]
proof
assume 0 + 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus k = 0 + 1;
thus P[p.k] by A1, A3;
end;
A6: for m being Nat st Q[m] holds Q[m+1]
proof
let m be Nat;
assume A7: Q[m];
assume A8: m+1 + 1 <= len p;
then m+1 +1 -1 <= len p - 0 by XREAL_1:13;
then consider k0 being Element of dom p such that
A9: k0 = m + 1 & P[p.k0] by A7;
set k = k0+1;
0+1 <= k by XREAL_1:6;
then reconsider k as Element of dom p by A8, A9, FINSEQ_3:25;
take k;
thus k = m+1 + 1 by A9;
k0 +1-1 <= len p - 1 by A8, A9, XREAL_1:9;
then consider v being Vertex of G such that
A10: p.k is addVertex of p.k0,v & not v in the_Vertices_of p.k0 by A4;
thus P[p.k] by A2, A9, A10;
end;
A11: for m being Nat holds Q[m] from NAT_1:sch 2(A5,A6);
len p - 1 is Nat & len p - 1 + 1 <= len p by INT_1:74;
then ex k being Element of dom p st k = len p - 1 + 1 & P[p.k] by A11;
hence thesis by A3;
end;
theorem
for p being non empty Graph-yielding FinSequence
st p.1 is edgeless &
for n being Element of dom p st n <= len p - 1 holds
ex v being object st p.(n+1) is addVertex of p.n,v
holds p.len p is edgeless
proof
defpred P[Nat] means for p being non empty Graph-yielding FinSequence
st len p = $1 & p.1 is edgeless &
for n being Element of dom p st n <= len p - 1 holds
ex v being object st p.(n+1) is addVertex of p.n,v
holds p.len p is edgeless;
A1: P[1];
A2: for m being non zero Nat st P[m] holds P[m+1]
proof
let m be non zero Nat;
assume A3: P[m];
let p be non empty Graph-yielding FinSequence;
assume that
A4: len p = m + 1 & p.1 is edgeless and
A5: for n being Element of dom p st n <= len p - 1 holds
ex v being object st p.(n+1) is addVertex of p.n,v;
reconsider q = p|m as non empty Graph-yielding FinSequence;
m+1-1 <= len p - 0 by A4, XREAL_1:10;
then A6: len q = m by FINSEQ_1:59;
A7: 1 <= m by INT_1:74;
then A8: q.1 is edgeless by A4, FINSEQ_3:112;
now
let n be Element of dom q;
assume A9: n <= len q - 1;
then n + 0 <= m - 1 + 1 by A6, XREAL_1:7;
then A10: n <= len p - 1 by A4;
A11: 1 <= n & n <= len q by FINSEQ_3:25;
then 1 <= n & n + 0 <= m + 1 by A6, XREAL_1:7;
then reconsider k = n as Element of dom p by A4, FINSEQ_3:25;
consider v being object such that
A12: p.(k+1) is addVertex of p.k,v by A5, A10;
take v;
n+1 <= len q - 1 + 1 by A9, XREAL_1:6;
then p.(k+1) = q.(n+1) & p.k = q.k by A6, A11, FINSEQ_3:112;
hence q.(n+1) is addVertex of q.n,v by A12;
end;
then A13: q.len q is edgeless by A3, A6, A8;
m+0 <= len p - 1 + 1 by A4, XREAL_1:6;
then reconsider k=m as Element of dom p by A7, FINSEQ_3:25;
consider v be object such that
A14: p.(k+1) is addVertex of p.k,v by A5, A4;
p.k = q.len q by A6, FINSEQ_3:112;
hence thesis by A13, A4, A14;
end;
A15: for m being non zero Nat holds P[m] from NAT_1:sch 10(A1,A2);
let p be non empty Graph-yielding FinSequence;
assume that
A16: p.1 is edgeless &
for n being Element of dom p st n <= len p - 1 holds
ex v being object st p.(n+1) is addVertex of p.n,v;
thus thesis by A15, A16;
end;
theorem Th64:
for G being finite _Graph, H being spanning Subgraph of G
ex p being non empty finite Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.size() - H.size() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n
proof
let G be finite _Graph;
defpred P[Nat] means for H being spanning Subgraph of G
st G.size() - H.size() = $1
ex p being non empty finite Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.size() - H.size() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n;
A1: P[0]
proof
let H be spanning Subgraph of G;
assume A2: G.size() - H.size() = 0;
then A3: G == H by Th13;
reconsider p = <* G *> as non empty finite Graph-yielding FinSequence;
take p;
thus p.1 == H by A3, FINSEQ_1:40;
thus p.len p = p.1 by FINSEQ_1:40
.= G by FINSEQ_1:40;
thus len p = G.size() - H.size() + 1 by A2, FINSEQ_1:40;
let n be Element of dom p;
1 <= n & n <= len p by FINSEQ_3:25;
then 1 <= n & n <= 1 by FINSEQ_1:40;
then A4: n = 1 by XXREAL_0:1;
assume n <= len p - 1;
then n <= 1 - 1 by FINSEQ_1:40;
hence thesis by A4; :: by contradiction
end;
A5: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A6: P[k];
let H be spanning Subgraph of G;
assume A7: G.size() - H.size() = k+1;
A8: the_Edges_of G \ the_Edges_of H <> {}
proof
assume A9: the_Edges_of G \ the_Edges_of H = {};
0 = card(the_Edges_of G \ the_Edges_of H) by A9
.= card the_Edges_of G - card the_Edges_of H by CARD_2:44
.= G.size() - card the_Edges_of H by GLIB_000:def 25
.= G.size() - H.size() by GLIB_000:def 25;
hence contradiction by A7;
end;
set e0 = the Element of the_Edges_of G \ the_Edges_of H;
A10: e0 in the_Edges_of G by A8, TARSKI:def 3;
then reconsider e0 as Element of the_Edges_of G;
set u = (the_Source_of G).e0, w = (the_Target_of G).e0;
reconsider u,w as Vertex of G by A10, FUNCT_2:5;
A11: the_Vertices_of G = the_Vertices_of H by GLIB_000:def 33;
set H1 = the addEdge of H, u, e0, w;
A12: not e0 in the_Edges_of H by A8, XBOOLE_0:def 5;
A13: k = G.size() - (H.size() + 1) by A7
.= G.size() - H1.size() by A12, A11, GLIB_006:111;
A14: the_Vertices_of H1 = the_Vertices_of H by A11, GLIB_006:102;
H1 is Subgraph of G
proof
for e being object holds
e in the_Edges_of H1 implies e in the_Edges_of G
proof
let e be object;
assume A15: e in the_Edges_of H1;
the_Edges_of H1 = the_Edges_of H \/ {e0} by A11, A12, GLIB_006:def 11;
then per cases by A15, XBOOLE_0:def 3;
suppose e in the_Edges_of H;
hence thesis;
end;
suppose e in {e0};
hence thesis by A10, TARSKI:def 1;
end;
end;
then A16: the_Edges_of H1 c= the_Edges_of G by TARSKI:def 3;
now
let e be set;
assume e in the_Edges_of H1;
then A17: e in the_Edges_of H \/ {e0} by A11, A12, GLIB_006:def 11;
per cases;
suppose e <> e0;
then not e in {e0} by TARSKI:def 1;
then A18: e in the_Edges_of H by A17, XBOOLE_0:def 3;
thus (the_Source_of H1).e = (the_Source_of H).e by A18
, GLIB_006:def 9
.= (the_Source_of G).e by A18, GLIB_000:def 32;
thus (the_Target_of H1).e = (the_Target_of H).e by A18
, GLIB_006:def 9
.= (the_Target_of G).e by A18, GLIB_000:def 32;
end;
suppose A19: e = e0;
then e DJoins u,w,H1 by A11, A12, GLIB_006:105;
hence (the_Source_of H1).e = (the_Source_of G).e &
(the_Target_of H1).e = (the_Target_of G).e by A19, GLIB_000:def 14;
end;
end;
hence thesis by A14, A16, GLIB_000:def 32;
end;
then H1 is spanning Subgraph of G by A11, A14, GLIB_000:def 33;
then consider p being non empty finite Graph-yielding FinSequence such that
A20: p.1 == H1 & p.len p = G & len p = G.size() - H1.size() + 1 and
A21: for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n by A6, A13;
reconsider q = <* H *> ^ p as non empty finite Graph-yielding FinSequence;
take q;
A22: q.1 = H by FINSEQ_1:41;
thus q.1 == H by FINSEQ_1:41;
A23: len q = len <* H *> + len p by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:40;
len p in dom p by FINSEQ_5:6;
hence q.len q = G by A20, A23, FINSEQ_3:103;
A24: H.size() + 1 - 1 = H1.size() - 1 by A12, A11, GLIB_006:111;
thus len q = G.size() - H.size() + 1 by A20, A23, A24;
let n be Element of dom q;
assume n <= len q - 1;
then per cases by Lm13;
suppose A25: n = 1;
take u,w,e0;
1 in dom p by FINSEQ_5:6;
then A26: p.1 = q.(len <* H *> +1) by FINSEQ_1:def 7
.= q.(n+1) by A25, FINSEQ_1:40;
H1 is addEdge of q.n, u, e0, w by A25, FINSEQ_1:41;
hence q.(n+1) is addEdge of q.n, u, e0, w by A26, A20, GLIB_006:101;
thus e0 in the_Edges_of G \ the_Edges_of q.n
by A10, A12, A22, A25, XBOOLE_0:def 5;
thus u in the_Vertices_of q.n & w in the_Vertices_of q.n
by A11, A22, A25;
end;
suppose A27: n-1 in dom p & n-1 <= len p - 1;
then reconsider m = n-1 as Element of dom p;
consider v1,v2 being Vertex of G, e being object such that
A28: p.(m+1) is addEdge of p.m,v1,e,v2 and
A29: e in the_Edges_of G \ the_Edges_of p.m &
v1 in the_Vertices_of p.m & v2 in the_Vertices_of p.m by A21, A27;
take v1,v2,e;
A30: 1 <= n by FINSEQ_3:25;
n <= len p by A27, XREAL_1:9;
then n in dom p by A30, FINSEQ_3:25;
then
A31: p.n = q.(len <* H *> + n) by FINSEQ_1:def 7
.= q.(n+1) by FINSEQ_1:40;
p.m = q.(len <* H *> + m) by FINSEQ_1:def 7
.= q.(m+1) by FINSEQ_1:40
.= q.n;
hence thesis by A28, A29, A31;
end;
end;
A32: for k being Nat holds P[k] from NAT_1:sch 2(A1,A5);
let H be spanning Subgraph of G;
G.size() - H.size() is Nat by GLIB_000:75, NAT_1:21;
hence thesis by A32;
end;
theorem
for G being finite _Graph
ex p being non empty finite Graph-yielding FinSequence
st p.1 is edgeless & p.len p = G & len p = G.size() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n
proof
let G be finite _Graph;
set H = the edgeless spanning Subgraph of G;
consider p being non empty finite Graph-yielding FinSequence such that
A1: p.1 == H & p.len p = G & len p = G.size() - H.size() + 1 and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n by Th64;
take p;
thus p.1 is edgeless & p.len p = G by A1, Th52;
thus len p = G.size() - 0 + 1 by A1, Th49 .= G.size() + 1;
thus thesis by A2;
end;
theorem Th66:
for G being finite connected _Graph, H being spanning connected Subgraph of G
ex p being non empty finite connected Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.size() - H.size() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n
proof
let G be finite connected _Graph, H be spanning connected Subgraph of G;
consider p being non empty finite Graph-yielding FinSequence such that
A1: p.1 == H & p.len p = G & len p = G.size() - H.size() + 1 and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n by Th64;
defpred P[Nat] means for n being Element of dom p st $1 = n
holds p.n is connected;
A3: P[1] by A1, GLIB_002:8;
A4: for k being non zero Nat st P[k] holds P[k+1]
proof
let k be non zero Nat;
assume A5: P[k];
let m be Element of dom p;
assume A6: k+1 = m;
then A7: k+1 <= len p by FINSEQ_3:25;
then A8: k+1-1 <= len p - 0 by XREAL_1:13;
1 <= k by NAT_1:14;
then reconsider n = k as Element of dom p by A8, FINSEQ_3:25;
k+1-1 <= len p - 1 by A7, XREAL_1:9;
then consider v1,v2 being Vertex of G, e being object such that
A9: p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n by A2;
p.n is connected by A5;
hence thesis by A6, A9;
end;
A10: for k being non zero Nat holds P[k] from NAT_1:sch 10(A3,A4);
for x being Element of dom p holds p.x is connected
proof
let x be Element of dom p;
x is non zero Nat by FINSEQ_3:25;
hence thesis by A10;
end;
then reconsider p as non empty finite connected Graph-yielding FinSequence
by GLIB_002:def 15;
take p;
thus thesis by A1, A2;
end;
theorem Th67:
for G1 being finite _Graph, H being Subgraph of G1
ex G2 being spanning Subgraph of G1,
p being non empty finite Graph-yielding FinSequence
st H.size() = G2.size() & p.1 == H & p.len p = G2 &
len p = G1.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G1 st p.(n+1) is addVertex of p.n, v &
not v in the_Vertices_of p.n
proof
let G1 be finite _Graph, H be Subgraph of G1;
set V = the_Vertices_of G1 \ the_Vertices_of H;
set G2 = the addVertices of H, V;
consider p being non empty Graph-yielding FinSequence such that
A1: p.1 == H & p.len p = G2 & len p = card (V \ the_Vertices_of H) + 1 and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G2
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by Th59;
defpred P[Nat] means for n being Element of dom p st $1 = n
holds p.n is finite;
A3: P[1] by A1, GLIB_000:89;
A4: for k being non zero Nat st P[k] holds P[k+1]
proof
let k be non zero Nat;
assume A5: P[k];
let m be Element of dom p;
assume A6: k+1 = m;
then A7: k+1 <= len p by FINSEQ_3:25;
then A8: k+1-1 <= len p - 0 by XREAL_1:13;
1 <= k by NAT_1:14;
then reconsider n = k as Element of dom p by A8, FINSEQ_3:25;
k+1-1 <= len p - 1 by A7, XREAL_1:9;
then consider v being Vertex of G2 such that
A9: p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by A2;
p.n is finite by A5;
hence thesis by A6, A9;
end;
A10: for k being non zero Nat holds P[k] from NAT_1:sch 10(A3,A4);
for x being Element of dom p holds p.x is finite
proof
let x be Element of dom p;
x is non zero Nat by FINSEQ_3:25;
hence thesis by A10;
end;
then reconsider p as non empty finite Graph-yielding FinSequence
by GLIB_000:def 66;
A11: the_Vertices_of G2 = the_Vertices_of H \/
(the_Vertices_of G1 \ the_Vertices_of H) by GLIB_006:def 10
.= the_Vertices_of G1 by XBOOLE_1:45;
G2 is Subgraph of G1
proof
the_Edges_of G2 = the_Edges_of H &
the_Source_of G2 = the_Source_of H &
the_Target_of G2 = the_Target_of H by GLIB_006:def 10;
then the_Edges_of G2 c= the_Edges_of G1 &
for e being set st e in the_Edges_of G2 holds
(the_Source_of G2).e = (the_Source_of G1).e &
(the_Target_of G2).e = (the_Target_of G1).e by GLIB_000:def 32;
hence thesis by A11, GLIB_000:def 32;
end;
then reconsider G2 as spanning Subgraph of G1 by A11, GLIB_000:def 33;
take G2, p;
thus H.size() = G2.size() by GLIB_006:95;
thus p.1 == H & p.len p = G2 by A1;
V \ the_Vertices_of H = the_Vertices_of G1 \
(the_Vertices_of H \/ the_Vertices_of H) by XBOOLE_1:41
.= the_Vertices_of G1 \ the_Vertices_of H;
hence len p
= card (the_Vertices_of G1) - card(the_Vertices_of H) + 1 by A1, CARD_2:44
.= G1.order() - card(the_Vertices_of H) + 1 by GLIB_000:def 24
.= G1.order() - H.order() + 1 by GLIB_000:def 24;
let n be Element of dom p;
assume n <= len p - 1;
then consider v being Vertex of G2 such that
A12: p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n by A2;
the_Vertices_of G2 c= the_Vertices_of G1;
then reconsider v as Vertex of G1 by TARSKI:def 3;
take v;
thus thesis by A12;
end;
theorem Th68:
for G being finite _Graph, H being Subgraph of G
ex p being non empty finite Graph-yielding FinSequence
st p.1 == H & p.len p = G &
len p = G.order() + G.size() - (H.order() + H.size()) + 1 &
for n being Element of dom p st n <= len p - 1 holds
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n) or
(ex v being Vertex of G st p.(n+1) is addVertex of p.n, v &
not v in the_Vertices_of p.n)
proof
let G be finite _Graph, H be Subgraph of G;
per cases;
suppose A1: G.size() <> H.size();
consider G2 being spanning Subgraph of G,
p being non empty finite Graph-yielding FinSequence such that
A2: H.size() = G2.size() and
A3: p.1 == H & p.len p = G2 & len p = G.order() - H.order() + 1 and
A4:for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G st p.(n+1) is addVertex of p.n, v &
not v in the_Vertices_of p.n by Th67;
consider q being non empty finite Graph-yielding FinSequence such that
A5: q.1 == G2 & q.len q = G & len q = G.size() - G2.size() + 1 and
A6: for n being Element of dom q st n <= len q - 1 holds
ex v1,v2 being Vertex of G, e being object
st q.(n+1) is addEdge of q.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of q.n &
v1 in the_Vertices_of q.n & v2 in the_Vertices_of q.n by Th64;
reconsider r = p ^' q as non empty finite Graph-yielding FinSequence;
take r;
1 <= len p by FINSEQ_1:20;
hence r.1 == H by A3, FINSEQ_6:140;
A7: 1 < len q
proof
assume not 1 < len q;
then len q <= 1 & 1 <= len q by FINSEQ_1:20;
then len q = 1 by XXREAL_0:1;
hence contradiction by A1, A2, A5;
end;
hence r.len r = G by A5, FINSEQ_6:142;
len r + 1 = len p + len q by FINSEQ_6:139
.= G.order() + G.size() - (H.order() + H.size()) + 1 + 1 by A2, A3, A5;
hence len r = G.order() + G.size() - (H.order() + H.size()) + 1;
let n be Element of dom r;
assume A8: n <= len r - 1;
n < len p or n = len p or n > len p by XXREAL_0:1;
then n+1 <= len p or n = len p or n > len p by INT_1:7;
then n+1-1 <= len p - 1 or n = len p or n > len p by XREAL_1:9;
then per cases;
suppose A9: n <= len p - 1;
then A10: n+0 <= len p - 1+1 & n+1 <= len p -1+1 by XREAL_1:7;
A11: 1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A10, FINSEQ_3:25;
A12: r.n = p.m by A10, A11, FINSEQ_6:140;
1+0 <= n+1 by XREAL_1:7;
then r.(n+1) = p.(m+1) by A10, FINSEQ_6:140;
hence thesis by A4, A9, A12;
end;
suppose A13: n = len p;
then 1 <= n & n <= len p by FINSEQ_1:20;
then A14: r.n = G2 by A3, A13, FINSEQ_6:140;
reconsider m = 1 as Element of dom q by A7, FINSEQ_3:25;
A15: r.(n+1) = q.(m+1) by A13, A7, FINSEQ_6:141;
now
m+1 <= len q by A7, INT_1:7;
then m+1-1 <= len q - 1 by XREAL_1:9;
then consider v1,v2 being Vertex of G, e being object such that
A16: q.(m+1) is addEdge of q.m,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of q.m &
v1 in the_Vertices_of q.m & v2 in the_Vertices_of q.m by A6;
take v1,v2,e;
thus r.(n+1) is addEdge of r.n,v1,e,v2 by A14, A15, A5, A16, Th36;
thus e in the_Edges_of G \ the_Edges_of r.n &
v1 in the_Vertices_of r.n & v2 in the_Vertices_of r.n
by A14, A16, A5, GLIB_000:def 34;
end;
hence thesis;
end;
suppose A17: n > len p;
then reconsider n1 = n-1 as Nat by NAT_1:20;
n1+1 = n;
then len p <= n1 by A17, NAT_1:13;
then reconsider k1 = n1 - len p as Nat by NAT_1:21;
set k = k1+1;
A18: k+1 < len q
proof
assume len q <= k + 1;
then len q + len p <= k + 1 + len p by XREAL_1:6;
then len r + 1 <= n + 1 by FINSEQ_6:139;
then len r - 1 <= n - 1 by XREAL_1:6, XREAL_1:9;
then n <= n-1 by A8, XXREAL_0:2;
then n-n <= n-1-n by XREAL_1:9;
then 0 <= -1;
hence contradiction;
end;
then k+1-1 < len q - 0 by XREAL_1:14;
then r.(len p + k) = q.(k+1) by NAT_1:14, FINSEQ_6:141;
then A19: r.n = q.(k+1);
1+0 <= k+1 by XREAL_1:7;
then r.(len p +(k+1)) = q.((k+1)+1) by A18, FINSEQ_6:141;
then A20: r.(n+1) = q.((k+1)+1);
1+0 <= k+1 & k+1 <= len q by A18, XREAL_1:7;
then reconsider m=k+1 as Element of dom q by FINSEQ_3:25;
now
m+1 <= len q by A18, INT_1:7;
then m+1-1 <= len q - 1 by XREAL_1:9;
then consider v1,v2 being Vertex of G, e being object such that
A21: q.(m+1) is addEdge of q.m,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of q.m &
v1 in the_Vertices_of q.m & v2 in the_Vertices_of q.m by A6;
take v1,v2,e;
thus r.(n+1) is addEdge of r.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of r.n &
v1 in the_Vertices_of r.n & v2 in the_Vertices_of r.n
by A19, A20, A21;
end;
hence thesis;
end;
end;
suppose A22: G.size() = H.size();
then consider p being non empty finite Graph-yielding FinSequence such that
A23: p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 and
A24: for n being Element of dom p st n <= len p - 1 holds
ex v being Vertex of G
st p.(n+1) is addVertex of p.n, v & not v in the_Vertices_of p.n
by Th60;
take p;
thus p.1 == H & p.len p = G by A23;
thus len p
= G.order() + G.size() - (H.order() + H.size()) + 1 by A22, A23;
let n be Element of dom p;
assume n <= len p - 1;
hence thesis by A24;
end;
end;
:: finite graphs can be finitely constructed with addVertex and addEdge only
theorem Th69:
for G being finite _Graph
ex p being non empty finite Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.order() + G.size() &
for n being Element of dom p st n <= len p - 1 holds
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n) or
(ex v being Vertex of G st p.(n+1) is addVertex of p.n, v &
not v in the_Vertices_of p.n)
proof
let G be finite _Graph;
set H = the trivial edgeless Subgraph of G;
consider p being non empty finite Graph-yielding FinSequence such that
A1: p.1 == H & p.len p = G and
A2: len p = G.order() + G.size() - (H.order() + H.size()) + 1 and
A3: for n being Element of dom p st n <= len p - 1 holds
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n) or
(ex v being Vertex of G st p.(n+1) is addVertex of p.n, v &
not v in the_Vertices_of p.n) by Th68;
take p;
thus p.1 is trivial edgeless by A1, Th52, GLIB_000:89;
thus p.len p = G by A1;
thus len p = G.order() + G.size() - (H.order() + 0) + 1 by A2, Th49
.= G.order() + G.size() - 1 + 1 by GLIB_000:26
.= G.order() + G.size();
thus thesis by A3;
end;
scheme
FinGraphs { P[finite _Graph] } : for G being finite _Graph holds P[G]
provided
A1: for G being trivial edgeless _Graph holds P[G] and
A2: for G2 being finite _Graph, v being object
for G1 being addVertex of G2,v
st not v in the_Vertices_of G2 & P[G2] holds P[G1] and
A3: for G2 being finite _Graph, v1, v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
st not e in the_Edges_of G2 & P[G2] holds P[G1]
proof
let G be finite _Graph;
consider p being non empty finite Graph-yielding FinSequence such that
A4: p.1 is trivial edgeless & p.len p = G & len p = G.order() + G.size()
and A5: for n being Element of dom p st n <= len p - 1 holds
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n) or
(ex v being Vertex of G st p.(n+1) is addVertex of p.n, v &
not v in the_Vertices_of p.n) by Th69;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & P[p.k];
A6: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus 1 = k;
thus P[p.k] by A1, A4;
end;
A7: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A8: Q[m];
assume A9: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A9, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A9, XREAL_1:13;
then consider k0 being Element of dom p such that
A10: m = k0 & P[p.k0] by A8;
m+1-1 <= len p - 1 by A9, XREAL_1:9;
then per cases by A5, A10;
suppose ex v1,v2 being Vertex of G, e being object
st p.(k0+1) is addEdge of p.k0,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.k0 &
v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0;
then consider v1,v2 being Vertex of G, e being object such that
A11: p.(k0+1) is addEdge of p.k0,v1,e,v2 and
A12: e in the_Edges_of G \ the_Edges_of p.k0 &
v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0;
reconsider v1, v2 as Vertex of p.k0 by A12;
A13: not e in the_Edges_of p.k0 by A12, XBOOLE_0:def 5;
A14: p.k is addEdge of p.k0,v1,e,v2 by A10, A11;
thus thesis by A3, A10, A13, A14;
end;
suppose ex v being Vertex of G st p.(k0+1) is addVertex of p.k0, v &
not v in the_Vertices_of p.k0;
then consider v being Vertex of G such that
A15: p.(k0+1) is addVertex of p.k0, v & not v in the_Vertices_of p.k0;
thus thesis by A2, A10, A15;
end;
end;
A16: for m being non zero Nat holds Q[m] from NAT_1:sch 10(A6,A7);
consider k being Element of dom p such that
A17: len p = k & P[p.k] by A16;
thus thesis by A4, A17;
end;
theorem
for p being non empty Graph-yielding FinSequence
st p.1 is finite &
for n being Element of dom p st n <= len p - 1 holds
(ex v being object st p.(n+1) is addVertex of p.n,v) or
(ex v1,e,v2 being object st p.(n+1) is addEdge of p.n,v1,e,v2)
holds p.len p is finite
proof
let p be non empty Graph-yielding FinSequence;
assume that A1: p.1 is finite and
A2: for n being Element of dom p st n <= len p - 1 holds
(ex v being object st p.(n+1) is addVertex of p.n,v) or
(ex v1,e,v2 being object st p.(n+1) is addEdge of p.n,v1,e,v2);
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & p.k is finite;
A3: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus thesis by A1;
end;
A4: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A5: Q[m];
assume A6: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A6, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A6, XREAL_1:13;
then consider k0 being Element of dom p such that
A7: m = k0 & p.k0 is finite by A5;
m+1-1 <= len p - 1 by A6, XREAL_1:9;
then per cases by A2, A7;
suppose ex v being object st p.(k0+1) is addVertex of p.k0,v;
hence thesis by A7;
end;
suppose ex v1,e,v2 being object st p.(k0+1) is addEdge of p.k0,v1,e,v2;
hence thesis by A7;
end;
end;
A8: for m being non zero Nat holds Q[m] from NAT_1:sch 10(A3,A4);
consider k being Element of dom p such that
A9: len p = k & p.k is finite by A8;
thus thesis by A9;
end;
theorem Th71:
for G being finite Tree-like _Graph, H being connected Subgraph of G
ex p being non empty finite Tree-like Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n))
proof
defpred P[Nat] means for G being finite Tree-like _Graph
for H being connected Subgraph of G st $1 = G.order() - H.order()
ex p being non empty finite Tree-like Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n));
A1: P[0]
proof
let G be finite Tree-like _Graph, H be connected Subgraph of G;
assume A2: 0 = G.order() - H.order();
then H is spanning by Th11;
then A3: G == H by Th21;
reconsider p = <* G *>
as non empty finite Tree-like Graph-yielding FinSequence;
take p;
thus p.1 == H by A3, FINSEQ_1:40;
thus p.len p = p.1 by FINSEQ_1:40
.= G by FINSEQ_1:40;
thus len p = G.order() - H.order() + 1 by A2, FINSEQ_1:40;
let n be Element of dom p;
1 <= n & n <= len p by FINSEQ_3:25;
then 1 <= n & n <= 1 by FINSEQ_1:40;
then A4: n = 1 by XXREAL_0:1;
assume n <= len p - 1;
then n <= 1 - 1 by FINSEQ_1:40;
hence thesis by A4; :: by contradiction
end;
A5: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A6: P[k];
let G be finite Tree-like _Graph, H be connected Subgraph of G;
assume A7: k+1 = G.order() - H.order();
then A8: G.order() = H.order() + k + 1;
G.order() <> H.order()
proof
assume G.order() = H.order();
then 0 + H.order() = k+1 + H.order() by A8;
hence contradiction;
end;
then A9: H is non spanning by Th11;
G.order() <> 1 by A8, NAT_1:7;
then A10: G is non trivial by GLIB_000:26;
then consider v being Vertex of G such that
A11: v is endvertex & not v in the_Vertices_of H by A9, Th31;
consider e0 being object such that
A12: v.edgesInOut() = {e0} & not e0 Joins v,v,G by A11, GLIB_000:def 51;
set G2 = the removeVertex of G, v;
A13: G2.order() + 1 = G.order() by A10, GLIB_000:48;
then A14: k = G2.order() - H.order() by A7;
A15: the_Edges_of G2 = G.edgesBetween(the_Vertices_of G \ {v})
by A10, GLIB_000:47
.= G.edgesBetween(the_Vertices_of G) \ v.edgesInOut() by Th1
.= the_Edges_of G \ {e0} by A12, GLIB_000:34;
A16: H is Subgraph of G2
proof
the_Vertices_of H misses {v} by A11, ZFMISC_1:50;
then the_Vertices_of H c= the_Vertices_of G \ {v} by XBOOLE_1:86;
then A17: the_Vertices_of H c= the_Vertices_of G2 by A10, GLIB_000:47;
not e0 in the_Edges_of H
proof
assume A18: e0 in the_Edges_of H;
e0 in v.edgesInOut() by A12, TARSKI:def 1;
then per cases by GLIB_000:61;
suppose (the_Source_of G).e0 = v;
then (the_Source_of H).e0 = v by A18, GLIB_000:def 32;
hence contradiction by A11, A18, FUNCT_2:5;
end;
suppose (the_Target_of G).e0 = v;
then (the_Target_of H).e0 = v by A18, GLIB_000:def 32;
hence contradiction by A11, A18, FUNCT_2:5;
end;
end;
then the_Edges_of H misses {e0} by ZFMISC_1:50;
hence thesis by A15, A17, GLIB_000:44, XBOOLE_1:86;
end;
consider p being non empty finite Tree-like Graph-yielding FinSequence
such that
A19: p.1 == H & p.len p = G2 & len p = G2.order() - H.order() + 1 and
A20: for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G2, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G2 \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n))
by A6, A14, A16, A10, A11;
reconsider q = p ^ <* G *>
as non empty finite Tree-like Graph-yielding FinSequence;
take q;
1 in dom p by FINSEQ_5:6;
hence q.1 == H by A19, FINSEQ_1:def 7;
A21: len q = len p + len <* G *> by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:40;
hence A22: q.len q = G by FINSEQ_1:42;
thus len q = G.order() - H.order() + 1 by A13, A19, A21;
let n be Element of dom q;
assume n <= len q - 1;
then per cases by Lm12;
suppose A23: n = len q - 1;
then A24: q.(n+1) = G by A22;
1 <= n by FINSEQ_3:25;
then n in dom p by A21, A23, FINSEQ_3:25;
then A27: q.n = G2 by A19, A21, A23, FINSEQ_1:def 7;
A28: e0 in v.edgesInOut() by A12, TARSKI:def 1;
then A29: e0 in the_Edges_of G;
e0 in {e0} by TARSKI:def 1;
then A30: not e0 in the_Edges_of q.n by A15, A27, XBOOLE_0:def 5;
v in {v} by TARSKI:def 1;
then not v in the_Vertices_of G \ {v} by XBOOLE_0:def 5;
then A31: not v in the_Vertices_of q.n by A10, A27, GLIB_000:47;
v.adj(e0) <> v by A12, A28, GLIB_000:67;
then not v.adj(e0) in {v} by TARSKI:def 1;
then v.adj(e0) in the_Vertices_of G \ {v} by XBOOLE_0:def 5;
then A32: v.adj(e0) in the_Vertices_of q.n by A10, A27, GLIB_000:47;
per cases by A10, A12, Th38;
suppose A33: G is addAdjVertex of G2, v.adj(e0), e0, v;
take v.adj(e0), v, e0;
thus q.(n+1) is addAdjVertex of q.n, v.adj(e0), e0, v by A24, A27, A33;
thus thesis by A29, A30, A31, A32, XBOOLE_0:def 5;
end;
suppose A34: G is addAdjVertex of G2, v, e0, v.adj(e0);
take v, v.adj(e0), e0;
thus q.(n+1) is addAdjVertex of q.n, v, e0, v.adj(e0) by A24, A27, A34;
thus thesis by A29, A30, A31, A32, XBOOLE_0:def 5;
end;
end;
suppose A35: n <= len p - 1;
then A36: n+0 <= len p - 1 + 1 by XREAL_1:7;
1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A36, FINSEQ_3:25;
consider v1,v2 being Vertex of G2, e being object
such that A37: p.(m+1) is addAdjVertex of p.m,v1,e,v2 &
e in the_Edges_of G2 \ the_Edges_of p.m &
((v1 in the_Vertices_of p.m & not v2 in the_Vertices_of p.m) or
(not v1 in the_Vertices_of p.m & v2 in the_Vertices_of p.m))
by A20, A35;
1+0 <= n+1 & n+1 <= len p - 1 + 1 by A35, XREAL_1:6;
then n+1 in dom p by FINSEQ_3:25;
then A38: q.(n+1) = p.(m+1) by FINSEQ_1:def 7;
A39: q.n = p.m by FINSEQ_1:def 7;
the_Vertices_of G2 c= the_Vertices_of G;
then reconsider v1,v2 as Vertex of G by TARSKI:def 3;
take v1,v2,e;
the_Edges_of G2 \ the_Edges_of p.m c= the_Edges_of G \ the_Edges_of p.m
by XBOOLE_1:33;
hence thesis by A37, A38, A39;
end;
end;
A40: for k being Nat holds P[k] from NAT_1:sch 2(A1,A5);
let G be finite Tree-like _Graph;
let H be connected Subgraph of G;
G.order() - H.order() is Nat by GLIB_000:75, NAT_1:21;
hence thesis by A40;
end;
:: finite trees can be finitely constructed with addAdjVertex only
theorem Th72:
for G being finite Tree-like _Graph
ex p being non empty finite Tree-like Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.order() &
for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n))
proof
let G be finite Tree-like _Graph;
set H = the trivial Subgraph of G;
consider p being non empty finite Tree-like Graph-yielding FinSequence
such that A1: p.1 == H & p.len p = G & len p = G.order() - H.order() +1 and
A2: for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n)) by Th71;
take p;
thus p.1 is trivial edgeless by A1, Th52, GLIB_000:89;
thus p.len p = G by A1;
thus len p = G.order() - 1 + 1 by A1, GLIB_000:26 .= G.order();
thus thesis by A2;
end;
scheme
FinTrees { P[finite _Graph] } :
for G being finite Tree-like _Graph holds P[G]
provided
A1: for G being trivial edgeless _Graph holds P[G] and
A2: for G2 being finite Tree-like _Graph
for v being Vertex of G2, e, w being object
st not e in the_Edges_of G2 & not w in the_Vertices_of G2 & P[G2]
holds (for G1 being addAdjVertex of G2,v,e,w holds P[G1]) &
(for G1 being addAdjVertex of G2,w,e,v holds P[G1])
proof
let G be finite Tree-like _Graph;
consider p being non empty finite Tree-like Graph-yielding FinSequence
such that A3: p.1 is trivial edgeless & p.len p = G & len p = G.order()
and A4: for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n)) by Th72;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & P[p.k];
A5: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus 1 = k;
thus P[p.k] by A1, A3;
end;
A6: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A7: Q[m];
assume A8: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A8, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A8, XREAL_1:13;
then consider k0 being Element of dom p such that
A9: m = k0 & P[p.k0] by A7;
m+1-1 <= len p - 1 by A8, XREAL_1:9;
then consider v1,v2 being Vertex of G, e being object such that
A10: p.(k0+1) is addAdjVertex of p.k0,v1,e,v2 and
A11: e in the_Edges_of G \ the_Edges_of p.k0 and
A12: (v1 in the_Vertices_of p.k0 & not v2 in the_Vertices_of p.k0) or
(not v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0)
by A4, A9;
A13: not e in the_Edges_of p.k0 by A11, XBOOLE_0:def 5;
per cases by A12;
suppose v1 in the_Vertices_of p.k0 & not v2 in the_Vertices_of p.k0;
hence thesis by A2, A9, A10, A13;
end;
suppose not v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0;
hence thesis by A2, A9, A10, A13;
end;
end;
A14: for m being non zero Nat holds Q[m] from NAT_1:sch 10(A5,A6);
consider k being Element of dom p such that
A15: len p = k & P[p.k] by A14;
thus thesis by A3, A15;
end;
theorem
for p being non empty Graph-yielding FinSequence
st p.1 is Tree-like &
for n being Element of dom p st n <= len p - 1
ex v1,e,v2 being object st p.(n+1) is addAdjVertex of p.n,v1,e,v2
holds p.len p is Tree-like
proof
let p be non empty Graph-yielding FinSequence;
assume that A1: p.1 is Tree-like and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v1,e,v2 being object st p.(n+1) is addAdjVertex of p.n,v1,e,v2;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & p.k is Tree-like;
A3: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus thesis by A1;
end;
A4: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A5: Q[m];
assume A6: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A6, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A6, XREAL_1:13;
then consider k0 being Element of dom p such that
A7: m = k0 & p.k0 is Tree-like by A5;
m+1-1 <= len p - 1 by A6, XREAL_1:9;
then consider v1,e,v2 being object such that
A8: p.(k0+1) is addAdjVertex of p.k0,v1,e,v2 by A2, A7;
thus thesis by A7, A8;
end;
A9: for m being non zero Nat holds Q[m] from NAT_1:sch 10(A3,A4);
consider k being Element of dom p such that
A10: len p = k & p.k is Tree-like by A9;
thus thesis by A10;
end;
:: finite connected graphs can be constructed with addAdjVertex and addEdge
theorem Th74:
for G being finite connected _Graph
ex p being non empty finite connected Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.size() + 1 &
for n being Element of dom p st n <= len p - 1 holds
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n)) ) or
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n)
proof
let G be finite connected _Graph;
per cases;
suppose A1: G is non acyclic;
set H = the spanning Tree-like Subgraph of G;
consider p being non empty finite Tree-like Graph-yielding FinSequence
such that
A2: p.1 is trivial edgeless & p.len p = H & len p = H.order() and
A3: for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of H, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of H \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n))
by Th72;
consider q being non empty finite connected Graph-yielding FinSequence
such that
A4: q.1 == H & q.len q = G & len q = G.size() - H.size() + 1 and
A5: for n being Element of dom q st n <= len q - 1 holds
ex v1,v2 being Vertex of G, e being object
st q.(n+1) is addEdge of q.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of q.n &
v1 in the_Vertices_of q.n & v2 in the_Vertices_of q.n by Th66;
reconsider r = p ^' q
as non empty finite connected Graph-yielding FinSequence;
take r;1 <= len p by FINSEQ_1:20;
hence r.1 is trivial edgeless by A2, FINSEQ_6:140;
A6: 1 < len q
proof
assume not 1 < len q;
then len q <= 1 & 1 <= len q by FINSEQ_1:20;
then G == H by A4, XXREAL_0:1;
hence contradiction by A1, GLIB_002:44;
end;
hence r.len r = G by A4, FINSEQ_6:142;
len r + 1 = len p + len q by FINSEQ_6:139
.= H.order() + G.size() - H.size() + 1 by A2, A4
.= H.size() + 1 + G.size() - H.size() + 1 by GLIB_002:46
.= G.size() + 1 + 1;
hence len r = G.size() + 1;
let n be Element of dom r;
assume A7: n <= len r - 1;
n < len p or n = len p or n > len p by XXREAL_0:1;
then n+1 <= len p or n = len p or n > len p by INT_1:7;
then n+1-1 <= len p - 1 or n = len p or n > len p by XREAL_1:9;
then per cases;
suppose A8: n <= len p - 1;
then A9: n+0 <= len p - 1+1 & n+1 <= len p -1+1 by XREAL_1:7;
A10: 1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A9, FINSEQ_3:25;
A11: r.n = p.m by A9, A10, FINSEQ_6:140;
1+0 <= n+1 by XREAL_1:7;
then A12: r.(n+1) = p.(m+1) by A9, FINSEQ_6:140;
now
consider v1,v2 being Vertex of H, e being object such that
A13: p.(m+1) is addAdjVertex of p.m,v1,e,v2 &
e in the_Edges_of H \ the_Edges_of p.m &
((v1 in the_Vertices_of p.m & not v2 in the_Vertices_of p.m) or
(not v1 in the_Vertices_of p.m & v2 in the_Vertices_of p.m))
by A3, A8;
the_Vertices_of H c= the_Vertices_of G;
then reconsider v1, v2 as Vertex of G by TARSKI:def 3;
take v1,v2,e;
the_Edges_of H \ the_Edges_of p.m c= the_Edges_of G \ the_Edges_of p.m
by XBOOLE_1:33;
hence r.(n+1) is addAdjVertex of r.n, v1,e,v2 &
e in the_Edges_of G \ the_Edges_of r.n &
((v1 in the_Vertices_of r.n & not v2 in the_Vertices_of r.n) or
(not v1 in the_Vertices_of r.n & v2 in the_Vertices_of r.n))
by A11, A12, A13;
end;
hence thesis;
end;
suppose A14: n = len p;
then 1 <= n & n <= len p by FINSEQ_1:20;
then A15: r.n = H by A2, A14, FINSEQ_6:140;
reconsider m = 1 as Element of dom q by A6, FINSEQ_3:25;
A16: r.(n+1) = q.(m+1) by A14, A6, FINSEQ_6:141;
now
m+1 <= len q by A6, INT_1:7;
then m+1-1 <= len q - 1 by XREAL_1:9;
then consider v1,v2 being Vertex of G, e being object such that
A17: q.(m+1) is addEdge of q.m,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of q.m &
v1 in the_Vertices_of q.m & v2 in the_Vertices_of q.m by A5;
take v1,v2,e;
thus r.(n+1) is addEdge of r.n,v1,e,v2 by A4, A15, A16, A17, Th36;
thus e in the_Edges_of G \ the_Edges_of r.n &
v1 in the_Vertices_of r.n & v2 in the_Vertices_of r.n
by A4, A15, A17, GLIB_000:def 34;
end;
hence thesis;
end;
suppose A18: n > len p;
then reconsider n1 = n-1 as Nat by NAT_1:20;
n1+1 = n;
then len p <= n1 by A18, NAT_1:13;
then reconsider k1 = n1 - len p as Nat by NAT_1:21;
set k = k1+1;
A19: k+1 < len q
proof
assume len q <= k + 1;
then len q + len p <= k + 1 + len p by XREAL_1:6;
then len r + 1 <= n + 1 by FINSEQ_6:139;
then len r - 1 <= n - 1 by XREAL_1:6, XREAL_1:9;
then n <= n-1 by A7, XXREAL_0:2;
then n-n <= n-1-n by XREAL_1:9;
then 0 <= -1;
hence contradiction;
end;
then k+1-1 < len q - 0 by XREAL_1:14;
then r.(len p + k) = q.(k+1) by NAT_1:14, FINSEQ_6:141;
then A20: r.n = q.(k+1);
1+0 <= k+1 by XREAL_1:7;
then r.(len p +(k+1)) = q.((k+1)+1) by A19, FINSEQ_6:141;
then A21: r.(n+1) = q.((k+1)+1);
1+0 <= k+1 & k+1 <= len q by A19, XREAL_1:7;
then reconsider m=k+1 as Element of dom q by FINSEQ_3:25;
now
m+1 <= len q by A19, INT_1:7;
then m+1-1 <= len q - 1 by XREAL_1:9;
then consider v1,v2 being Vertex of G, e being object such that
A22: q.(m+1) is addEdge of q.m,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of q.m &
v1 in the_Vertices_of q.m & v2 in the_Vertices_of q.m by A5;
take v1,v2,e;
thus r.(n+1) is addEdge of r.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of r.n &
v1 in the_Vertices_of r.n & v2 in the_Vertices_of r.n
by A20, A21, A22;
end;
hence thesis;
end;
end;
suppose A23: G is acyclic;
then consider p being non empty finite Tree-like Graph-yielding FinSequence
such that
A24: p.1 is trivial edgeless & p.len p = G & len p = G.order() and
A25: for n being Element of dom p st n <= len p - 1
ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n))
by Th72;
take p;
thus thesis by A24, A25, A23, GLIB_002:46;
end;
end;
scheme
FinConnectedGraphs { P[finite _Graph] } :
for G being finite connected _Graph holds P[G]
provided
A1: for G being trivial edgeless _Graph holds P[G] and
A2: for G2 being finite connected _Graph
for v being Vertex of G2, e, w being object
st not e in the_Edges_of G2 & not w in the_Vertices_of G2 & P[G2]
holds (for G1 being addAdjVertex of G2,v,e,w holds P[G1]) &
(for G1 being addAdjVertex of G2,w,e,v holds P[G1]) and
A3: for G2 being finite connected _Graph
for v1,v2 being Vertex of G2, e being object
for G1 being addEdge of G2,v1,e,v2
st not e in the_Edges_of G2 & P[G2] holds P[G1]
proof
let G be finite connected _Graph;
consider p being non empty finite connected Graph-yielding FinSequence
such that
A4: p.1 is trivial edgeless & p.len p = G & len p = G.size() + 1
and A5: for n being Element of dom p st n <= len p - 1 holds
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addAdjVertex of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
((v1 in the_Vertices_of p.n & not v2 in the_Vertices_of p.n) or
(not v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n)) ) or
(ex v1,v2 being Vertex of G, e being object
st p.(n+1) is addEdge of p.n,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.n &
v1 in the_Vertices_of p.n & v2 in the_Vertices_of p.n) by Th74;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & P[p.k];
A6: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus 1 = k;
thus P[p.k] by A1, A4;
end;
A7: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A8: Q[m];
assume A9: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A9, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A9, XREAL_1:13;
then consider k0 being Element of dom p such that
A10: m = k0 & P[p.k0] by A8;
m+1-1 <= len p - 1 by A9, XREAL_1:9;
then per cases by A5, A10;
suppose ex v1,v2 being Vertex of G, e being object
st p.(k0+1) is addAdjVertex of p.k0,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.k0 &
((v1 in the_Vertices_of p.k0 & not v2 in the_Vertices_of p.k0) or
(not v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0));
then consider v1,v2 being Vertex of G, e being object such that
A11: p.(k0+1) is addAdjVertex of p.k0,v1,e,v2 and
A12: e in the_Edges_of G \ the_Edges_of p.k0 and
A13: (v1 in the_Vertices_of p.k0 & not v2 in the_Vertices_of p.k0) or
(not v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0);
A14: not e in the_Edges_of p.k0 by A12, XBOOLE_0:def 5;
per cases by A13;
suppose v1 in the_Vertices_of p.k0 & not v2 in the_Vertices_of p.k0;
hence thesis by A2, A10, A11, A14;
end;
suppose not v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0;
hence thesis by A2, A10, A11, A14;
end;
end;
suppose ex v1,v2 being Vertex of G, e being object
st p.(k0+1) is addEdge of p.k0,v1,e,v2 &
e in the_Edges_of G \ the_Edges_of p.k0 &
v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0;
then consider v1,v2 being Vertex of G, e being object such that
A15: p.(k0+1) is addEdge of p.k0,v1,e,v2 and
A16: e in the_Edges_of G \ the_Edges_of p.k0 &
v1 in the_Vertices_of p.k0 & v2 in the_Vertices_of p.k0;
reconsider v1, v2 as Vertex of p.k0 by A16;
A17: not e in the_Edges_of p.k0 by A16, XBOOLE_0:def 5;
p.k is addEdge of p.k0,v1,e,v2 by A10, A15;
hence thesis by A3, A10, A17;
end;
end;
for m being non zero Nat holds Q[m] from NAT_1:sch 10(A6,A7); then
ex k being Element of dom p st len p = k & P[p.k];
hence thesis by A4;
end;
theorem
for p being non empty Graph-yielding FinSequence
st p.1 is connected &
for n being Element of dom p st n <= len p - 1
ex v1,e,v2 being object st p.(n+1) is addAdjVertex of p.n,v1,e,v2
or p.(n+1) is addEdge of p.n,v1,e,v2
holds p.len p is connected
proof
let p be non empty Graph-yielding FinSequence;
assume that A1: p.1 is connected and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v1,e,v2 being object st p.(n+1) is addAdjVertex of p.n,v1,e,v2
or p.(n+1) is addEdge of p.n,v1,e,v2;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & p.k is connected;
A3: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus thesis by A1;
end;
A4: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A5: Q[m];
assume A6: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A6, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A6, XREAL_1:13;
then consider k0 being Element of dom p such that
A7: m = k0 & p.k0 is connected by A5;
m+1-1 <= len p - 1 by A6, XREAL_1:9;
then consider v1,e,v2 being object such that
A8: p.(k0+1) is addAdjVertex of p.k0,v1,e,v2 or
p.(k0+1) is addEdge of p.k0,v1,e,v2 by A2, A7;
thus thesis by A7, A8;
end;
for m being non zero Nat holds Q[m] from NAT_1:sch 10(A3,A4); then
ex k being Element of dom p st len p = k & p.k is connected;
hence thesis;
end;
theorem Th76:
for G2 being _Graph, v being object
for V1 being set, V2 being finite set
for G1 being addAdjVertexAll of G2, v, V1 \/ V2
st V1 \/ V2 c= the_Vertices_of G2 & not v in the_Vertices_of G2 &
V1 misses V2
ex p being non empty Graph-yielding FinSequence
st p.1 = G2 & p.len p = G1 & len p = card V2 + 2 &
p.2 is addAdjVertexAll of G2, v, V1 &
for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v)
proof
let G2 be _Graph, v be object, V1 be set;
defpred P[Nat] means for V2 being finite set
for G1 being addAdjVertexAll of G2, v, V1 \/ V2
st V1 \/ V2 c= the_Vertices_of G2 & not v in the_Vertices_of G2 &
V1 misses V2 & card V2 = $1
ex p being non empty Graph-yielding FinSequence
st p.1 = G2 & p.len p = G1 & len p = card V2 + 2 &
p.2 is addAdjVertexAll of G2, v, V1 &
for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v);
A1: P[0]
proof
let V2 be finite set;
let G1 be addAdjVertexAll of G2, v, V1 \/ V2;
assume that
V1 \/ V2 c= the_Vertices_of G2 & not v in the_Vertices_of G2 and
A2: V1 misses V2 & card V2 = 0;
reconsider p = <* G2, G1 *> as non empty Graph-yielding FinSequence;
take p;
thus p.1 = G2 by FINSEQ_1:44;
thus p.len p = p.2 by FINSEQ_1:44
.= G1 by FINSEQ_1:44;
thus len p = card V2 + 2 by A2, FINSEQ_1:44;
V2 = {} by A2;
hence p.2 is addAdjVertexAll of G2, v, V1 by FINSEQ_1:44;
let n be Element of dom p;
assume 2 <= n & n <= len p - 1;
then 2 <= n & n <= 2 - 1 by FINSEQ_1:44;
hence thesis by XXREAL_0:2; :: by contradiction
end;
A3: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A4: P[k];
let V2 be finite set, G1 be addAdjVertexAll of G2, v, V1 \/ V2;
assume that
A5: V1 \/ V2 c= the_Vertices_of G2 & not v in the_Vertices_of G2 and
A6: V1 misses V2 & card V2 = k+1;
set v0 = the Element of V2;
set V3 = V2 \ {v0};
A7: V2 is non empty by A6;
A8: V2 = V3 \/ {v0} by A7, ZFMISC_1:116;
V1 \/ V3 c= V1 \/ V2 by XBOOLE_1:9;
then A9: V1 \/ V3 c= the_Vertices_of G2 by A5, XBOOLE_1:1;
A10: V1 misses V3 by A6, XBOOLE_1:64;
v0 in {v0} by TARSKI:def 1;
then A11: not v0 in V3 by XBOOLE_0:def 5;
then A12: card V2 = card V3 + 1 by A8, CARD_2:41;
then A13: card V3 = k by A6;
v0 in V1 \/ V2 by A7, XBOOLE_1:7, TARSKI:def 3;
then reconsider v0 as Vertex of G2 by A5;
V1 /\ V2 = {} by A6, XBOOLE_0:def 7;
then not v0 in V1 by A7, XBOOLE_0:def 4;
then A14: not v0 in V1 \/ V3 by A11, XBOOLE_0:def 3;
G1 is addAdjVertexAll of G2,v,(V1 \/ V3) \/ {v0} by A8, XBOOLE_1:4;
then consider G3 being addAdjVertexAll of G2,v,V1 \/ V3, e being object
such that A15: not e in the_Edges_of G3 and
A16: G1 is addEdge of G3,v,e,v0 or G1 is addEdge of G3,v0,e,v
by A5, A9, A14, Lm9;
consider p being non empty Graph-yielding FinSequence such that
A17: p.1 = G2 & p.len p = G3 & len p = card V3 + 2 &
p.2 is addAdjVertexAll of G2, v, V1 and
A18: for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G3 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v)
by A4, A5, A9, A10, A13;
reconsider q = p ^ <* G1 *> as non empty Graph-yielding FinSequence;
take q;
1 in dom p by FINSEQ_5:6;
hence q.1 = G2 by A17, FINSEQ_1:def 7;
A19: len q = len p + len <* G1 *> by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:40;
hence A20: q.len q = G1 by FINSEQ_1:42;
thus len q = card V2 + 2 by A12, A17, A19;
2 + card V3 - card V3 <= len p - 0 by A17, XREAL_1:13;
then 2 in dom p by FINSEQ_3:25;
hence q.2 is addAdjVertexAll of G2, v, V1 by A17, FINSEQ_1:def 7;
let n be Element of dom q;
assume A21: 2 <= n & n <= len q - 1;
then per cases by Lm12;
suppose A22: n = len q - 1;
then A23: q.(n+1) = G1 by A20;
1 <= n by FINSEQ_3:25;
then n in dom p by A19, A22, FINSEQ_3:25;
then A26: q.n = G3 by A17, A19, A22, FINSEQ_1:def 7;
v0 in the_Vertices_of G3 & v in the_Vertices_of G3
proof
A27: v0 in the_Vertices_of G2;
the_Vertices_of G2 c= the_Vertices_of G3 by GLIB_006:def 9;
hence v0 in the_Vertices_of G3 by A27;
v is Vertex of G3 by A5, A9, GLIB_007:50;
hence v in the_Vertices_of G3;
end;
then e DJoins v,v0,G1 or e DJoins v0,v,G1 by A15, A16, GLIB_006:105;
then A28: e in the_Edges_of G1 by GLIB_000:def 14;
take v0, e;
thus e in the_Edges_of G1 \ the_Edges_of q.n
by A15, A26, A28, XBOOLE_0:def 5;
thus q.(n+1) is addEdge of q.n,v,e,v0 or q.(n+1) is addEdge of q.n,v0,e,v
by A16, A23, A26;
end;
suppose A29: n <= len p - 1;
then A30: n+0 <= len p - 1 + 1 by XREAL_1:7;
1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A30, FINSEQ_3:25;
consider w being Vertex of G2, e being object such that
A31: e in the_Edges_of G3 \ the_Edges_of p.m &
(p.(m+1) is addEdge of p.m,v,e,w or p.(m+1) is addEdge of p.m,w,e,v)
by A18, A21, A29;
1+0 <= n+1 & n+1 <= len p - 1 + 1 by A29, XREAL_1:6;
then n+1 in dom p by FINSEQ_3:25;
then A32: q.(n+1) = p.(m+1) by FINSEQ_1:def 7;
A33: q.n = p.m by FINSEQ_1:def 7;
the_Edges_of G3 c= the_Edges_of G1 by A16, GLIB_006:def 9;
then A34: the_Edges_of G3 \ the_Edges_of p.m
c= the_Edges_of G1 \ the_Edges_of p.m by XBOOLE_1:33;
take w,e;
thus thesis by A31, A32, A33, A34;
end;
end;
for k being Nat holds P[k] from NAT_1:sch 2(A1,A3);
hence thesis;
end;
theorem
for G2 being _Graph, v being object
for V being finite set, G1 being addAdjVertexAll of G2, v, V
st V c= the_Vertices_of G2 & not v in the_Vertices_of G2
ex p being non empty Graph-yielding FinSequence
st p.1 = G2 & p.len p = G1 & len p = card V + 2 & p.2 is addVertex of G2,v &
for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v)
proof
let G2 be _Graph, v be object, V be finite set;
let G1 be addAdjVertexAll of G2, v, V;
assume A1: V c= the_Vertices_of G2 & not v in the_Vertices_of G2;
V = V \/ {} & {} misses V by XBOOLE_1:65;
then consider p being non empty Graph-yielding FinSequence such that
A2: p.1 = G2 & p.len p = G1 & len p = card V + 2 and
A3: p.2 is addAdjVertexAll of G2, v, {} and
A4: for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v)
by A1, Th76;
take p;
thus p.1 = G2 & p.len p = G1 & len p = card V + 2 by A2;
thus p.2 is addVertex of G2, v by A3, GLIB_007:55;
thus thesis by A4;
end;
theorem
for G2 being _Graph, v being object
for V being non empty finite set, G1 being addAdjVertexAll of G2, v, V
st V c= the_Vertices_of G2 & not v in the_Vertices_of G2
ex p being non empty Graph-yielding FinSequence
st p.1 = G2 & p.len p = G1 & len p = card V + 1 &
(ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of G2 &
(p.2 is addAdjVertex of G2,v,e,w or p.2 is addAdjVertex of G2,w,e,v)) &
for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v)
proof
let G2 be _Graph, v be object, V be non empty finite set;
let G1 be addAdjVertexAll of G2, v, V;
assume A1: V c= the_Vertices_of G2 & not v in the_Vertices_of G2;
set v0 = the Element of V;
set V0 = V \ {v0};
v0 in {v0} by TARSKI:def 1;
then not v0 in V0 by XBOOLE_0:def 5;
then V = V0 \/ {v0} & {v0} misses V0 by ZFMISC_1:50, ZFMISC_1:116;
then consider p being non empty Graph-yielding FinSequence such that
A2: p.1 = G2 & p.len p = G1 & len p = card V0 + 2 and
A3: p.2 is addAdjVertexAll of G2, v, {v0} and
A4: for n being Element of dom p st 2 <= n & n <= len p - 1 holds
ex w being Vertex of G2, e being object
st e in the_Edges_of G1 \ the_Edges_of p.n &
(p.(n+1) is addEdge of p.n,v,e,w or p.(n+1) is addEdge of p.n,w,e,v)
by A1, Th76;
take p;
thus p.1 = G2 & p.len p = G1 by A2;
thus len p = card V - card {v0} + 2 by A2, CARD_2:44
.= card V - 1 + 2 by CARD_1:30
.= card V + 1;
hereby
reconsider w = v0 as Vertex of G2 by A1, TARSKI:def 3;
consider e being object such that
A5: not e in the_Edges_of G2 and
A6: p.2 is addAdjVertex of G2,v,e,w or p.2 is addAdjVertex of G2,w,e,v
by A1, A3, GLIB_007:56;
A7: e in the_Edges_of G1
proof
defpred P[Nat] means $1 + 2 <= len p implies ex k being Element of dom p
st k = $1 + 2 & e in the_Edges_of p.k;
A8: P[0]
proof
assume 0 + 2 <= len p;
card V0 + 2 - card V0 <= len p - 0 by A2, XREAL_1:10;
then reconsider k = 2 as Element of dom p by FINSEQ_3:25;
take k;
thus k = 0 + 2;
per cases by A6;
suppose p.k is addAdjVertex of G2,v,e,w;
then e Joins v,w,p.k by A1, A5, GLIB_006:132;
hence e in the_Edges_of p.k by GLIB_000:def 13;
end;
suppose p.k is addAdjVertex of G2,w,e,v;
then e Joins w,v,p.k by A1, A5, GLIB_006:131;
hence e in the_Edges_of p.k by GLIB_000:def 13;
end;
end;
A9: for m being Nat st P[m] holds P[m+1]
proof
let m be Nat;
assume A10: P[m];
assume A11: m+1 + 2 <= len p;
then m+1 + 2 - 1 <= len p - 0 by XREAL_1:13;
then consider k0 being Element of dom p such that
A12: k0 = m + 2 & e in the_Edges_of p.k0 by A10;
1+0 <= m+1+2 by XREAL_1:7;
then reconsider k = m+1 + 2 as Element of dom p by A11, FINSEQ_3:25;
take k;
thus k = m+1 + 2;
A13: 0+(1+1) <= m+(1+1) by XREAL_1:7;
m+1 + 2 - 1 <= len p - 1 by A11, XREAL_1:9;
then consider u being Vertex of G2, f being object
such that f in the_Edges_of G1 \ the_Edges_of p.k0 and
A14: (p.(k0+1) is addEdge of p.k0,v,f,u or
p.(k0+1) is addEdge of p.k0,u,f,v) by A4, A12, A13;
the_Edges_of p.k0 c= the_Edges_of p.k by A12, A14, GLIB_006:def 9;
hence thesis by A12;
end;
A15: for m being Nat holds P[m] from NAT_1:sch 2(A8,A9);
reconsider m = len p - 2 as Nat by A2;
consider k being Element of dom p such that
A16: k = m + 2 & e in the_Edges_of p.k by A15;
thus thesis by A2, A16;
end;
take w,e;
thus e in the_Edges_of G1 \ the_Edges_of G2 &
(p.2 is addAdjVertex of G2,v,e,w or p.2 is addAdjVertex of G2,w,e,v)
by A5, A6, A7, XBOOLE_0:def 5;
end;
thus thesis by A4;
end;
theorem Th79:
for G being finite simple _Graph
for W being set, H being inducedSubgraph of G, W
ex p being non empty finite simple Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1
ex v being object, V being finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
proof
defpred P[Nat] means for G being finite simple _Graph
for W being set, H being inducedSubgraph of G, W
st G.order() - H.order() = $1
ex p being non empty finite simple Graph-yielding FinSequence
st p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 &
for n being Element of dom p st n <= len p - 1
ex v being object, V being finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V;
A1: P[0]
proof
let G be finite simple _Graph;
let W be set, H be inducedSubgraph of G, W;
assume A2: G.order() - H.order() = 0;
then H is spanning by Th11;
then A3: G == H by Th14;
set p = <* G *>;
take p;
thus p.1 == H by A3, FINSEQ_1:40;
thus p.len p = p.1 by FINSEQ_1:40
.= G by FINSEQ_1:40;
thus len p = G.order() - H.order() + 1 by A2, FINSEQ_1:40;
let n be Element of dom p;
1 <= n & n <= len p by FINSEQ_3:25;
then 1 <= n & n <= 1 by FINSEQ_1:40;
then A4: n = 1 by XXREAL_0:1;
assume n <= len p - 1;
then n <= 1 - 1 by FINSEQ_1:40;
hence thesis by A4; :: by contradiction
end;
A5: for k being Nat st P[k] holds P[k+1]
proof
let k be Nat;
assume A6: P[k];
let G be finite simple _Graph;
let W be set, H be inducedSubgraph of G, W;
assume A7: G.order() - H.order() = k+1;
A8: the_Vertices_of G \ the_Vertices_of H <> {}
proof
assume the_Vertices_of G \ the_Vertices_of H = {};
then the_Vertices_of G c= the_Vertices_of H by XBOOLE_1:37;
then A9: the_Vertices_of G = the_Vertices_of H by XBOOLE_0:def 10;
G.order() = card the_Vertices_of G by GLIB_000:def 24
.= H.order() by A9, GLIB_000:def 24;
then 0 = k+1 by A7;
hence contradiction;
end;
set v0 = the Element of the_Vertices_of G \ the_Vertices_of H;
v0 in the_Vertices_of G \ the_Vertices_of H by A8;
then reconsider v0 as Vertex of G;
set G2 = the removeVertex of G,v0;
A10: the_Vertices_of G <> the_Vertices_of H by A8, XBOOLE_1:37;
then A11: G is non trivial by Th15, GLIB_000:def 33;
then A12: G2.order() + 1 = G.order() by GLIB_000:48;
then A13: G2.order() - H.order() = k by A7;
A14: the_Edges_of G2
= G.edgesBetween(the_Vertices_of G \ {v0}) by A11, GLIB_000:47
.= G.edgesBetween(the_Vertices_of G) \ v0.edgesInOut() by Th1
.= the_Edges_of G \ v0.edgesInOut() by GLIB_000:34;
the_Vertices_of H c= the_Vertices_of G2 & the_Edges_of H c= the_Edges_of G2
proof
A15: not v0 in the_Vertices_of H by A8, XBOOLE_0:def 5;
the_Vertices_of H c= the_Vertices_of G \ {v0} by A15, ZFMISC_1:34;
hence the_Vertices_of H c= the_Vertices_of G2 by A11, GLIB_000:47;
the_Edges_of H /\ v0.edgesInOut() = {}
proof
assume A16: the_Edges_of H /\ v0.edgesInOut() <> {};
set e = the Element of the_Edges_of H /\ v0.edgesInOut();
A17: e in the_Edges_of H & e in v0.edgesInOut() by A16, XBOOLE_0:def 4;
then per cases by GLIB_000:61;
suppose (the_Source_of G).e = v0;
then (the_Source_of H).e = v0 by A17, GLIB_000:def 32;
hence contradiction by A15, A17, FUNCT_2:5;
end;
suppose (the_Target_of G).e = v0;
then (the_Target_of H).e = v0 by A17, GLIB_000:def 32;
hence contradiction by A15, A17, FUNCT_2:5;
end;
end;
then the_Edges_of H = the_Edges_of H \ v0.edgesInOut()
by XBOOLE_0:def 7, XBOOLE_1:83;
hence thesis by A14, XBOOLE_1:33;
end;
then A18: H is Subgraph of G2 by GLIB_000:44;
H is inducedSubgraph of G2, W
proof
H != G by A10, GLIB_000:def 34;
then W is non empty Subset of the_Vertices_of G by GLIB_000:def 37;
then A19: the_Vertices_of H = W & the_Edges_of H = G.edgesBetween(W)
by GLIB_000:def 37;
then A20: W is non empty Subset of the_Vertices_of G2
by A18, GLIB_000:def 32;
for x being object
st x in G.edgesBetween(W) holds x in G2.edgesBetween(W)
proof
let x be object;
assume A21: x in G.edgesBetween(W);
reconsider e = x as set by TARSKI:1;
A22: (the_Source_of G).e in W & (the_Target_of G).e in W
by A21, GLIB_000:31;
A23: e in the_Edges_of G2
proof
assume not e in the_Edges_of G2;
then e in v0.edgesInOut() by A14, A21, XBOOLE_0:def 5;
then per cases by GLIB_000:61;
suppose (the_Source_of G).e = v0;
hence contradiction by A8, A19, A22, XBOOLE_0:def 5;
end;
suppose (the_Target_of G).e = v0;
hence contradiction by A8, A19, A22, XBOOLE_0:def 5;
end;
end;
then (the_Source_of G2).e = (the_Source_of G).e &
(the_Target_of G2).e = (the_Target_of G).e by GLIB_000:def 32;
hence thesis by A22, A23, GLIB_000:31;
end;
then A24: G.edgesBetween(W) c= G2.edgesBetween(W) by TARSKI:def 3;
G2.edgesBetween(W) c= G.edgesBetween(W) by GLIB_000:76;
then G2.edgesBetween(W) = the_Edges_of H by A19, A24, XBOOLE_0:def 10;
hence thesis by A18, A19, A20, GLIB_000:def 37;
end;
then consider p being non empty finite simple Graph-yielding FinSequence
such that
A25: p.1 == H & p.len p = G2 & len p = G2.order() - H.order() + 1 and
A26: for n being Element of dom p st n <= len p - 1
ex v being object, V being finite set
st v in the_Vertices_of G2 \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
by A6, A13;
set q = p ^ <* G *>;
take q;
1 in dom p by FINSEQ_5:6;
hence q.1 == H by A25, FINSEQ_1:def 7;
A27: len q = len p + len <* G *> by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:40;
hence A28: q.len q = G by FINSEQ_1:42;
thus len q = G.order() - H.order() + 1 by A12, A25, A27;
let n be Element of dom q;
assume n <= len q - 1;
then per cases by Lm12;
suppose A29: n = len q - 1;
then A30: q.(n+1) = G by A28;
A31: 1 <= n by FINSEQ_3:25;
A32: n = len p by A27, A29;
then n in dom p by A31, FINSEQ_3:25;
then A33: q.n = G2 by A25, A32, FINSEQ_1:def 7;
reconsider V = v0.allNeighbors() as finite set;
take v0,V;
v0 in {v0} by TARSKI:def 1;
then not v0 in the_Vertices_of G \ {v0} by XBOOLE_0:def 5;
then not v0 in the_Vertices_of G2 by A11, GLIB_000:47;
hence v0 in the_Vertices_of G \ the_Vertices_of q.n
by A33, XBOOLE_0:def 5;
for x being object st x in V holds x in the_Vertices_of G2
proof
let x be object;
assume A34: x in V;
then x <> v0 by Th6;
then A35: not x in {v0} by TARSKI:def 1;
x in the_Vertices_of G \ {v0} by A34, A35, XBOOLE_0:def 5;
hence thesis by A11, GLIB_000:47;
end;
hence V c= the_Vertices_of q.n by A33, TARSKI:def 3;
thus q.(n+1) is addAdjVertexAll of q.n,v0,V by A11, A30, A33, Th47;
end;
suppose A36: n <= len p - 1;
then A37: n+0 <= len p - 1 + 1 by XREAL_1:7;
1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A37, FINSEQ_3:25;
consider v being object, V being finite set such that
A38: v in the_Vertices_of G2 \ the_Vertices_of p.m &
V c= the_Vertices_of p.m & p.(m+1) is addAdjVertexAll of p.m,v,V
by A26, A36;
1+0 <= n+1 & n+1 <= len p - 1 + 1 by A36, XREAL_1:6;
then n+1 in dom p by FINSEQ_3:25;
then A39: q.(n+1) = p.(m+1) by FINSEQ_1:def 7;
A40: q.n = p.m by FINSEQ_1:def 7;
take v,V;
the_Vertices_of G2 \ the_Vertices_of p.m
c= the_Vertices_of G \ the_Vertices_of p.m by XBOOLE_1:33;
hence v in the_Vertices_of G \ the_Vertices_of q.n
by A38, A40;
thus thesis by A38, A39, A40;
end;
end;
A41: for k being Nat holds P[k] from NAT_1:sch 2(A1,A5);
let G be finite simple _Graph;
let W be set, H be inducedSubgraph of G, W;
G.order() - H.order() is Nat by GLIB_000:75, NAT_1:21;
hence thesis by A41;
end;
theorem Th80:
for G being finite simple _Graph
ex p being non empty finite simple Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.order() &
for n being Element of dom p st n <= len p - 1
ex v being object, V being finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
proof
let G be finite simple _Graph;
set v0 = the Vertex of G;
set H = the inducedSubgraph of G,{v0};
consider p being non empty finite simple Graph-yielding FinSequence such that
A1: p.1 == H & p.len p = G & len p = G.order() - H.order() + 1 and
A2: for n being Element of dom p st n <= len p - 1
ex v being object, V being finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
by Th79;
take p;
thus p.1 is trivial edgeless by A1, Th52, GLIB_000:89;
thus p.len p = G by A1;
H.order() = 1 by GLIB_000:26;
hence len p = G.order() by A1;
thus thesis by A2;
end;
scheme
FinSimpleGraphs { P[finite _Graph] } :
for G being finite simple _Graph holds P[G]
provided
A1: for G being trivial edgeless _Graph holds P[G] and
A2: for G2 being finite simple _Graph, v being object, V being finite set
for G1 being addAdjVertexAll of G2,v,V
st not v in the_Vertices_of G2 & V c= the_Vertices_of G2 & P[G2]
holds P[G1]
proof
let G be finite simple _Graph;
consider p being non empty finite simple Graph-yielding FinSequence
such that A3: p.1 is trivial edgeless & p.len p = G & len p = G.order()
and A4: for n being Element of dom p st n <= len p - 1
ex v being object, V being finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
by Th80;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & P[p.k];
A5: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus 1 = k;
thus P[p.k] by A1, A3;
end;
A6: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A7: Q[m];
assume A8: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A8, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A8, XREAL_1:13;
then consider k0 being Element of dom p such that
A9: m = k0 & P[p.k0] by A7;
m+1-1 <= len p - 1 by A8, XREAL_1:9;
then consider v being object, V being finite set such that
A10: v in the_Vertices_of G \ the_Vertices_of p.k0 and
A11: V c= the_Vertices_of p.k0 & p.(k0+1) is addAdjVertexAll of p.k0,v,V
by A4, A9;
not v in the_Vertices_of p.k0 by A10, XBOOLE_0:def 5;
hence thesis by A2, A9, A11;
end;
for m being non zero Nat holds Q[m] from NAT_1:sch 10(A5,A6); then
ex k being Element of dom p st len p = k & P[p.k];
hence thesis by A3;
end;
theorem
for p being non empty Graph-yielding FinSequence
st p.1 is simple &
for n being Element of dom p st n <= len p - 1
ex v being object, V being set st p.(n+1) is addAdjVertexAll of p.n,v,V
holds p.len p is simple
proof
let p be non empty Graph-yielding FinSequence;
assume that A1: p.1 is simple and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v being object, V being set st p.(n+1) is addAdjVertexAll of p.n,v,V;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & p.k is simple;
A3: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus thesis by A1;
end;
A4: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A5: Q[m];
assume A6: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A6, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A6, XREAL_1:13;
then consider k0 being Element of dom p such that
A7: m = k0 & p.k0 is simple by A5;
m+1-1 <= len p - 1 by A6, XREAL_1:9;
then consider v being object, V being set such that
A8: p.(k0+1) is addAdjVertexAll of p.k0,v,V by A2, A7;
thus thesis by A7, A8;
end;
for m being non zero Nat holds Q[m] from NAT_1:sch 10(A3,A4); then
ex k being Element of dom p st len p = k & p.k is simple;
hence thesis;
end;
theorem Th82:
for G being finite simple connected _Graph
ex p being non empty finite simple connected Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.order() &
for n being Element of dom p st n <= len p - 1
ex v being object, V being non empty finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
proof
defpred P[Nat] means for G being finite simple connected _Graph
st G.order() = $1
ex p being non empty finite simple connected Graph-yielding FinSequence
st p.1 is trivial edgeless & p.len p = G & len p = G.order() &
for n being Element of dom p st n <= len p - 1
ex v being object, V being non empty finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V;
A1: P[1]
proof
let G be finite simple connected _Graph;
assume A2: G.order() = 1;
set p = <* G *>;
take p;
G is trivial by A2, GLIB_000:26;
hence p.1 is trivial edgeless by FINSEQ_1:40;
thus p.len p = p.1 by FINSEQ_1:40
.= G by FINSEQ_1:40;
thus len p = G.order() by A2, FINSEQ_1:40;
let n be Element of dom p;
1 <= n & n <= len p by FINSEQ_3:25;
then 1 <= n & n <= 1 by FINSEQ_1:40;
then A3: n = 1 by XXREAL_0:1;
assume n <= len p - 1;
then n <= 1 - 1 by FINSEQ_1:40;
hence thesis by A3; :: by contradiction
end;
A4: for k being non zero Nat st P[k] holds P[k+1]
proof
let k be non zero Nat;
assume A5: P[k];
let G be finite simple connected _Graph;
assume A6: G.order() = k+1;
A7: G is non trivial
proof
assume G is trivial;
then G.order() = 0 + 1 by GLIB_000:26;
hence contradiction by A6;
end;
then consider v9, v0 being Vertex of G such that
v9 <> v0 & v9 is non cut-vertex and
A8: v0 is non cut-vertex by GLIB_002:37;
set G2 = the removeVertex of G,v0;
A9: G2.order() + 1 = G.order() by A7, GLIB_000:48;
then A10: G2.order() = k by A6;
G2 is connected by A8, GLIB_002:36;
then consider p being
non empty finite simple connected Graph-yielding FinSequence such that
A11: p.1 is trivial edgeless & p.len p = G2 & len p = G2.order() and
A12: for n being Element of dom p st n <= len p - 1
ex v being object, V being non empty finite set
st v in the_Vertices_of G2 \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
by A5, A10;
set q = p ^ <* G *>;
take q;
1 in dom p by FINSEQ_5:6;
hence q.1 is trivial edgeless by A11, FINSEQ_1:def 7;
A13: len q = len p + len <* G *> by FINSEQ_1:22
.= len p + 1 by FINSEQ_1:40;
hence A14: q.len q = G by FINSEQ_1:42;
thus len q = G.order() by A9, A11, A13;
let n be Element of dom q;
assume n <= len q - 1;
then per cases by Lm12;
suppose A15: n = len q - 1;
then A16: q.(n+1) = G by A14;
A17: 1 <= n by FINSEQ_3:25;
A18: n = len p by A13, A15;
then n in dom p by A17, FINSEQ_3:25;
then A19: q.n = G2 by A11, A18, FINSEQ_1:def 7;
reconsider V = v0.allNeighbors() as non empty finite set by A7;
take v0,V;
v0 in {v0} by TARSKI:def 1;
then not v0 in the_Vertices_of G \ {v0} by XBOOLE_0:def 5;
then not v0 in the_Vertices_of G2 by A7, GLIB_000:47;
hence v0 in the_Vertices_of G \ the_Vertices_of q.n
by A19, XBOOLE_0:def 5;
for x being object st x in V holds x in the_Vertices_of G2
proof
let x be object;
assume A20: x in V;
then x <> v0 by Th6;
then A21: not x in {v0} by TARSKI:def 1;
x in the_Vertices_of G \ {v0} by A20, A21, XBOOLE_0:def 5;
hence thesis by A7, GLIB_000:47;
end;
hence V c= the_Vertices_of q.n by A19, TARSKI:def 3;
thus q.(n+1) is addAdjVertexAll of q.n,v0,V by A7, A16, A19, Th47;
end;
suppose A22: n <= len p - 1;
then A23: n+0 <= len p - 1 + 1 by XREAL_1:7;
1 <= n by FINSEQ_3:25;
then reconsider m = n as Element of dom p by A23, FINSEQ_3:25;
consider v being object, V being non empty finite set such that
A24: v in the_Vertices_of G2 \ the_Vertices_of p.m &
V c= the_Vertices_of p.m & p.(m+1) is addAdjVertexAll of p.m,v,V
by A12, A22;
1+0 <= n+1 & n+1 <= len p - 1 + 1 by A22, XREAL_1:6;
then n+1 in dom p by FINSEQ_3:25;
then A25: q.(n+1) = p.(m+1) by FINSEQ_1:def 7;
A26: q.n = p.m by FINSEQ_1:def 7;
take v,V;
the_Vertices_of G2 \ the_Vertices_of p.m
c= the_Vertices_of G \ the_Vertices_of p.m by XBOOLE_1:33;
hence v in the_Vertices_of G \ the_Vertices_of q.n by A24, A26;
thus thesis by A24, A25, A26;
end;
end;
for k being non zero Nat holds P[k] from NAT_1:sch 10(A1,A4);
hence thesis;
end;
scheme
FinSimpleConnectedGraphs { P[finite _Graph] } :
for G being finite simple connected _Graph holds P[G]
provided
A1: for G being trivial edgeless _Graph holds P[G] and
A2: for G2 being finite simple connected _Graph
for v being object, V being non empty finite set
for G1 being addAdjVertexAll of G2,v,V
st not v in the_Vertices_of G2 & V c= the_Vertices_of G2 & P[G2]
holds P[G1]
proof
let G be finite simple connected _Graph;
consider p being non empty finite simple connected Graph-yielding FinSequence
such that A3: p.1 is trivial edgeless & p.len p = G & len p = G.order()
and A4: for n being Element of dom p st n <= len p - 1
ex v being object, V being non empty finite set
st v in the_Vertices_of G \ the_Vertices_of p.n &
V c= the_Vertices_of p.n & p.(n+1) is addAdjVertexAll of p.n,v,V
by Th82;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & P[p.k];
A5: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus 1 = k;
thus P[p.k] by A1, A3;
end;
A6: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A7: Q[m];
assume A8: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A8, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A8, XREAL_1:13;
then consider k0 being Element of dom p such that
A9: m = k0 & P[p.k0] by A7;
m+1-1 <= len p - 1 by A8, XREAL_1:9;
then consider v being object, V being non empty finite set such that
A10: v in the_Vertices_of G \ the_Vertices_of p.k0 and
A11: V c= the_Vertices_of p.k0 & p.(k0+1) is addAdjVertexAll of p.k0,v,V
by A4, A9;
not v in the_Vertices_of p.k0 by A10, XBOOLE_0:def 5;
hence thesis by A2, A9, A11;
end;
for m being non zero Nat holds Q[m] from NAT_1:sch 10(A5,A6); then
ex k being Element of dom p st len p = k & P[p.k];
hence thesis by A3;
end;
theorem
for p being non empty Graph-yielding FinSequence
st p.1 is simple connected &
for n being Element of dom p st n <= len p - 1
ex v being object, V being non empty set
st p.(n+1) is addAdjVertexAll of p.n,v,V
holds p.len p is simple connected
proof
let p be non empty Graph-yielding FinSequence;
assume that A1: p.1 is simple connected and
A2: for n being Element of dom p st n <= len p - 1 holds
ex v being object, V being non empty set
st p.(n+1) is addAdjVertexAll of p.n,v,V;
defpred Q[Nat] means $1 <= len p implies ex k being Element of dom p
st $1 = k & p.k is simple connected;
A3: Q[1]
proof
assume 1 <= len p;
then reconsider k = 1 as Element of dom p by FINSEQ_3:25;
take k;
thus thesis by A1;
end;
A4: for m being non zero Nat st Q[m] holds Q[m+1]
proof
let m be non zero Nat;
assume A5: Q[m];
assume A6: m+1 <= len p;
0+1 <= m+1 by XREAL_1:6;
then reconsider k = m+1 as Element of dom p by A6, FINSEQ_3:25;
take k;
thus m+1 = k;
m+1-1 <= len p - 0 by A6, XREAL_1:13;
then consider k0 being Element of dom p such that
A7: m = k0 & p.k0 is simple connected by A5;
m+1-1 <= len p - 1 by A6, XREAL_1:9;
then consider v being object, V being non empty set such that
A8: p.(k0+1) is addAdjVertexAll of p.k0,v,V by A2, A7;
thus thesis by A7, A8;
end;
for m being non zero Nat holds Q[m] from NAT_1:sch 10(A3,A4); then
ex k being Element of dom p st len p = k & p.k is simple connected;
hence thesis;
end;