:: Walks in a Graph
:: by Gilbert Lee
::
:: Received February 22, 2005
:: Copyright (c) 2005-2026 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, ABIAN, SUBSET_1, ARYTM_3, XXREAL_0, ARYTM_1, CARD_1,
TARSKI, FINSEQ_1, RELAT_1, FUNCT_1, NAT_1, XBOOLE_0, GLIB_000, FINSEQ_5,
GRAPH_2, INT_1, FINSET_1, RCOMP_1, WAYBEL_0, ZFMISC_1, MSAFREE2,
ORDINAL4, GRAPH_1, FUNCT_4, FUNCOP_1, MCART_1, GLIB_001, NUMBER09;
notations TARSKI, XBOOLE_0, CARD_1, ORDINAL1, NUMBERS, SUBSET_1, XCMPLX_0,
XXREAL_0, DOMAIN_1, RELAT_1, FUNCT_1, FINSEQ_1, GRAPH_2, FINSEQ_5,
RELSET_1, XTUPLE_0, MCART_1, FINSET_1, NAT_1, NAT_D, FUNCOP_1, FUNCT_4,
GLIB_000, ABIAN, FINSEQ_6;
constructors DOMAIN_1, FUNCT_4, NAT_D, RECDEF_1, FINSEQ_5, GLIB_000, ABIAN,
GRAPH_2, XXREAL_2, RELSET_1, FINSEQ_2, RAT_1, XTUPLE_0, FINSEQ_6;
registrations XBOOLE_0, RELAT_1, FUNCT_1, ORDINAL1, FUNCOP_1, FINSET_1,
XXREAL_0, XREAL_0, NAT_1, INT_1, FINSEQ_1, GLIB_000, ABIAN, GRAPH_3,
CARD_1, XTUPLE_0, FINSEQ_6;
requirements ARITHM, BOOLE, NUMERALS, REAL, SUBSET;
equalities FUNCOP_1, ORDINAL1;
theorems CARD_1, CARD_2, FUNCOP_1, ENUMSET1, FINSEQ_1, FINSEQ_2, FINSEQ_3,
FINSEQ_4, FINSEQ_5, FINSET_1, FUNCT_1, FUNCT_4, GLIB_000, GRAPH_2,
GRAPH_5, INT_1, JORDAN12, NAT_1, NAT_2, PEPIN, RELAT_1, TARSKI, XBOOLE_0,
XBOOLE_1, XREAL_1, PRE_CIRC, XXREAL_0, ABIAN, ORDINAL1, NAT_D, XTUPLE_0,
FINSEQ_6, JORDAN1G, XCMPLX_1, FUNCT_2;
schemes FINSEQ_1, FUNCT_1, NAT_1, RECDEF_1;
begin :: Preliminaries
theorem Th1:
for x,y being odd Element of NAT holds x < y iff x + 2 <= y
proof
let x,y be odd Element of NAT;
hereby
assume x < y;
then x + 1 <= y by NAT_1:13;
then x + 1 < y by XXREAL_0:1;
then x + 1 + 1 < y + 1 by XREAL_1:8;
hence x + 2 <= y by NAT_1:13;
end;
assume x + 2 <= y;
then x + 2 - 2 < y - 0 by XREAL_1:15;
hence thesis;
end;
::$CT
theorem Th2:
for X being set, fs being FinSequence of X, fss being Subset of fs holds
len (Seq fss) <= len fs
proof
let X be set, fs be FinSequence of X, fss be Subset of fs;
A1: Seq fss = fss * Sgm(dom fss) by FINSEQ_1:def 15;
rng (Sgm(dom fss)) = dom fss by FINSEQ_1:def 14;
then len (Seq fss) = len Sgm (dom fss) by A1,FINSEQ_2:29
.= card (dom fss) by FINSEQ_3:39
.= card fss by CARD_1:62;
hence thesis by NAT_1:43;
end;
theorem Th3:
for X being set, fs being FinSequence of X, fss being Subset of fs,
m being Element of NAT st m in dom Seq fss holds
ex n being Element of NAT
st n in dom fs & m <= n & (Seq fss).m = fs.n
proof
let X be set, fs be FinSequence of X, fss be Subset of fs, m be Element of
NAT;
set f = Sgm(dom fss), n = f.m;
assume
A2: m in dom Seq fss;
then
A3: m in dom (fss * f) by FINSEQ_1:def 15;
then
A4: n in dom fss by FUNCT_1:11;
Seq fss = fss * f by FINSEQ_1:def 15;
then (Seq fss).m = fss.n by A2,FUNCT_1:12;
then
A5: [n, Seq(fss).m] in fss by A4,FUNCT_1:def 2;
then
A6: n in dom fs by FUNCT_1:1;
A7: m in dom f by A3,FUNCT_1:11;
(Seq fss).m = fs.n by A5,FUNCT_1:1;
hence thesis by A7,A6,FINSEQ_3:152;
end;
theorem Th4:
for X being set, fs being FinSequence of X, fss being Subset of fs
holds len Seq fss = card fss
proof
let X be set, fs be FinSequence of X, fss be Subset of fs;
A1: Seq fss = fss * Sgm(dom fss) by FINSEQ_1:def 15;
rng Sgm(dom fss) = dom fss by FINSEQ_1:def 14;
then dom (Seq fss) = dom (Sgm (dom fss)) by A1,RELAT_1:27;
then dom (Seq fss) = Seg (card dom fss) by FINSEQ_3:40;
then len Seq fss = card dom fss by FINSEQ_1:def 3;
hence thesis by CARD_1:62;
end;
theorem Th5:
for X being set, fs being FinSequence of X, fss being Subset of
fs holds dom Seq fss = dom Sgm (dom fss)
proof
let X be set, fs be FinSequence of X, fss be Subset of fs;
A1: rng Sgm(dom fss) c= dom fss by FINSEQ_1:def 14;
Seq fss = fss * Sgm (dom fss) by FINSEQ_1:def 15;
hence thesis by A1,RELAT_1:27;
end;
begin :: Definitions
definition
let G be _Graph;
mode VertexSeq of G -> FinSequence of the_Vertices_of G means
:Def1:
for n
being Element of NAT st 1 <= n & n < len it holds ex e being set st e Joins it.
n, it.(n+1), G;
existence
proof
set v = the Element of the_Vertices_of G, IT = <*v*>;
reconsider IT as FinSequence of the_Vertices_of G;
take IT;
let n be Element of NAT;
assume that
A1: 1 <= n and
A2: n < len IT;
thus thesis by A1,A2,FINSEQ_1:40;
end;
end;
definition
let G be _Graph;
mode EdgeSeq of G -> FinSequence of the_Edges_of G means
:Def2:
ex vs being
FinSequence of the_Vertices_of G st len vs = len it + 1 & for n being Element
of NAT st 1 <= n & n <= len it holds it.n Joins vs.n,vs.(n+1),G;
existence
proof
set IT = <*>the_Edges_of G, vs = <*the Element of the_Vertices_of G*>;
reconsider vs as FinSequence of the_Vertices_of G;
take IT, vs;
thus len vs = len IT + 1 by FINSEQ_1:40;
let n be Element of NAT;
assume that
A1: 1 <= n and
A2: n <= len IT;
thus thesis by A1,A2;
end;
end;
definition
let G be _Graph;
mode Walk of G -> FinSequence of the_Vertices_of G \/ the_Edges_of G means
:Def3: len
it is odd & it.1 in the_Vertices_of G & for n being odd Element of
NAT st n < len it holds it.(n+1) Joins it.n, it.(n+2), G;
existence
proof
set VE = (the_Vertices_of G) \/ (the_Edges_of G);
consider v being object such that
A1: v in the_Vertices_of G by XBOOLE_0:def 1;
reconsider v as Element of VE by A1,XBOOLE_0:def 3;
take <*v*>;
thus len <*v*> is odd by FINSEQ_1:40,JORDAN12:2;
thus <*v*>.1 in the_Vertices_of G by A1;
let n be odd Element of NAT;
assume n < len <*v*>;
then n < 1 by FINSEQ_1:40;
hence thesis by ABIAN:12;
end;
end;
registration
let G be _Graph, W be Walk of G;
cluster len W -> odd non empty;
correctness
proof
thus len W is odd by Def3;
hence thesis;
end;
end;
definition
let G be _Graph, v be Vertex of G;
func G.walkOf(v) -> Walk of G equals
<*v*>;
coherence
proof
set VE = (the_Vertices_of G) \/ (the_Edges_of G), W = <*v*>, v9 = v;
reconsider v9 as Element of VE by XBOOLE_0:def 3;
<*v9*> is FinSequence of VE;
then reconsider W as FinSequence of VE;
now
thus len W is odd by FINSEQ_1:40,JORDAN12:2;
thus W.1 in the_Vertices_of G;
let n be odd Element of NAT;
A1: 1 <= n by ABIAN:12;
assume n < len <*v*>;
hence W.(n+1) Joins W.n, W.(n+2), G by A1,FINSEQ_1:40;
end;
hence thesis by Def3;
end;
end;
definition
let G be _Graph, x,y,e be object;
func G.walkOf(x,e,y) -> Walk of G equals
: Def5:
<*x,e,y*> if e Joins x,y,G
otherwise G.walkOf(the Element of the_Vertices_of G);
coherence
proof
set VE = (the_Vertices_of G)\/(the_Edges_of G);
hereby
set W = <*x,e,y*>;
assume
A1: e Joins x,y,G;
then y is Vertex of G by GLIB_000:13;
then
A2: y is Element of VE by XBOOLE_0:def 3;
e in the_Edges_of G by A1,GLIB_000:def 13;
then
A3: e is Element of VE by XBOOLE_0:def 3;
x is Vertex of G by A1,GLIB_000:13;
then x is Element of VE by XBOOLE_0:def 3;
then reconsider W as FinSequence of VE by A2,A3,FINSEQ_2:14;
now
reconsider aa1=1 as odd Element of NAT by JORDAN12:2;
aa1+2 is odd;
hence len W is odd by FINSEQ_1:45;
thus W.1 in the_Vertices_of G by A1,GLIB_000:13;
let n be odd Element of NAT;
assume n < len W;
then n < 2 + 1 by FINSEQ_1:45;
then n <= 2 by NAT_1:13;
then n = 0 or ... or n = 2;
hence W.(n+1) Joins W.n,W.(n+2),G by A1;
end;
hence <*x,e,y*> is Walk of G by Def3;
end;
thus thesis;
end;
consistency;
end;
definition
let G be _Graph, W be Walk of G;
func W.first() -> Vertex of G equals
W.1;
coherence by Def3;
func W.last() -> Vertex of G equals
W.(len W);
coherence
proof
now
per cases;
suppose
len W = 1;
hence thesis by Def3;
end;
suppose
A1: len W <> 1;
1 <= len W by ABIAN:12;
then 1 < len W by A1,XXREAL_0:1;
then 1+1 < len W + 1 by XREAL_1:8;
then 2 <= len W by NAT_1:13;
then reconsider n = len W - 2 * 1 as odd Element of NAT by INT_1:5;
A2: n + 2 = len W;
then n < len W by NAT_1:16;
then W.(n+1) Joins W.n, W.(len W), G by A2,Def3;
hence thesis by GLIB_000:13;
end;
end;
hence thesis;
end;
end;
definition
let G be _Graph, W be Walk of G, n be Nat;
func W.vertexAt(n) -> Vertex of G equals
:Def8:
W.n if n is odd & n <= len W
otherwise W.first();
correctness
proof
hereby
reconsider n1 = n as Element of NAT by ORDINAL1:def 12;
assume that
A1: n is odd and
A2: n <= len W;
now
per cases;
suppose
n = len W;
then W.n = W.last();
hence W.n is Vertex of G;
end;
suppose
n <> len W;
then n < len W by A2,XXREAL_0:1;
then W.(n1+1) Joins W.n, W.(n+2), G by A1,Def3;
hence W.n is Vertex of G by GLIB_000:13;
end;
end;
hence W.n is Vertex of G;
end;
thus thesis;
end;
end;
definition
let G be _Graph, W be Walk of G;
func W.reverse() -> Walk of G equals
Rev W;
coherence
proof
set W9 = Rev W;
reconsider W9 as FinSequence of (the_Vertices_of G)\/(the_Edges_of G);
A1: len W9 = len W by FINSEQ_5:def 3;
now
thus len W9 is odd by A1;
W9.1 = W.last() by FINSEQ_5:62;
hence W9.1 in the_Vertices_of G;
let n be odd Element of NAT;
set rn = len W-n+1, rnaa1 = len W-(n+1)+1, rn2 = len W-(n+2)+1;
assume
A2: n < len W9;
then
A3: n+1 <= len W by A1,NAT_1:13;
then reconsider rnaa1 as even Element of NAT by FINSEQ_5:1;
n+1 < len W by A3,XXREAL_0:1;
then
A4: n+1+1 <= len W by NAT_1:13;
then reconsider rn2 as odd Element of NAT by FINSEQ_5:1;
1 <= n+1 by NAT_1:12;
then n+1 in dom W by A3,FINSEQ_3:25;
then
A5: W9.(n+1) = W.(rnaa1) by FINSEQ_5:58
.= W.(rn2+1);
A6: n <= len W by A2,FINSEQ_5:def 3;
then reconsider rn as odd Element of NAT by FINSEQ_5:1;
1 <= n by ABIAN:12;
then n in dom W by A6,FINSEQ_3:25;
then
A7: W9.n = W.rn by FINSEQ_5:58
.= W.(rn2+2);
1+0 < n+2 by XREAL_1:8;
then len W - (n+2) < len W - 1 by XREAL_1:15;
then len W - (n+2) + 1 < len W - 1 + 1 by XREAL_1:8;
then
A8: W.(rn2+1) Joins W.rn2, W.(rn2+2), G by Def3;
1 <= n+2 by NAT_1:12;
then n+2 in dom W by A4,FINSEQ_3:25;
then W9.(n+1) Joins W9.(n+2), W9.n, G by A8,A7,A5,FINSEQ_5:58;
hence W9.(n+1) Joins W9.n, W9.(n+2), G by GLIB_000:14;
end;
hence thesis by Def3;
end;
involutiveness;
end;
definition
let G be _Graph, W1, W2 be Walk of G;
func W1.append(W2) -> Walk of G equals
:Def10:
W1 ^' W2 if W1.last() = W2
.first() otherwise W1;
correctness
proof
set W = W1 ^' W2, lenW = len W;
hereby
assume
A1: W1.last() = W2.first();
A2: now
let n be odd Element of NAT such that
A3: n < len W;
set v1 = W.n, v2 = W.(n+2), e = W.(n+1);
now
per cases;
suppose
A4: n+2 <= len W1;
A5: 1 <= n by ABIAN:12;
n+2-2 <= len W1-0 by A4,XREAL_1:13;
then
A6: W.n = W1.n by A5,FINSEQ_6:140;
n+2-1 <= len W1-0 by A4,XREAL_1:13;
then
A7: W.(n+1) = W1.(n+1) by FINSEQ_6:140,NAT_1:12;
A8: W.(n+2) = W1.(n+2) by A4,FINSEQ_6:140,NAT_1:12;
n < len W1 by A4,NAT_1:16,XXREAL_0:2;
hence W.(n+1) Joins W.n,W.(n+2),G by A6,A7,A8,Def3;
end;
suppose
A9: len W1 < n+2;
then len W1 + 1 <= n+2 by NAT_1:13;
then len W1 + 1 < n+1+1 by XXREAL_0:1;
then len W1 < n + 1 by XREAL_1:6;
then
A10: len W1 <= n by NAT_1:13;
consider k being Nat such that
A11: n + 2 = len W1 + k by A9,NAT_1:10;
reconsider k as even Element of NAT by A11,ORDINAL1:def 12;
k <> 0 by A9,A11;
then 0 + 1 < k + 1 by XREAL_1:8;
then
A12: 1 <= k by NAT_1:13;
n + 1 < len W + 1 by A3,XREAL_1:8;
then n + 1 < len W1 + len W2 by CARD_1:27,FINSEQ_6:139;
then n + 1 + 1 < len W1 + len W2 + 1 by XREAL_1:8;
then
A13: k + len W1 < len W1 + (len W2 + 1) by A11;
then k < len W2 + 1 by XREAL_1:6;
then
A14: k <= len W2 by NAT_1:13;
then
A15: k < len W2 by XXREAL_0:1;
then
A16: W.(n + 2) = W2.(k+1) by A11,A12,FINSEQ_6:141;
now
per cases;
suppose
A17: n = len W1;
1 <= n by ABIAN:12;
then
A18: W.n = W1.(len W1) by A17,FINSEQ_6:140;
1+1+0< len W2 + 1 by A11,A13,A17,XREAL_1:6;
then
A19: 1 < len W2 by XREAL_1:6;
then W.(n + 1) = W2.(1+1) by A17,FINSEQ_6:141;
hence W.(n+1) Joins W.n, W.(n+2), G by A1,A11,A16,A17,A18,A19
,Def3,JORDAN12:2;
end;
suppose
A20: len W1 <> n;
reconsider two=2*1 as even Element of NAT;
A21: len W1 < n by A10,A20,XXREAL_0:1;
then reconsider k2 = k-two as even Element of NAT by A11,
INT_1:5,XREAL_1:8;
2+len W1-len W1<k+len W1-len W1 by A11,A21,XREAL_1:8;
then 1+1-1 < k2 + 1 + 1 - 1 by XREAL_1:14;
then
A22: 1 <= k2 by NAT_1:13;
set kaa1 = k2+1;
reconsider kaa1 as odd Element of NAT;
A23: 1 <= k2+1 by NAT_1:12;
kaa1+1-1 < len W2-0 by A14,XREAL_1:15;
then
A24: W2.(kaa1+1) = W.(len W1 + kaa1) by A23,FINSEQ_6:141
.= W.(n+1) by A11;
kaa1 < kaa1 + 1 by NAT_1:19;
then
A25: kaa1 < len W2 by A14,XXREAL_0:2;
kaa1+2 = k + 1;
then
A26: W2.(kaa1+2) = W.(n+2) by A11,A12,A15,FINSEQ_6:141;
k2 < k2 + (1+1) by NAT_1:16;
then
A27: k2 < len W2 by A14,XXREAL_0:2;
n + 2 = len W1 + k2 + 2 by A11;
then W.n = W2.(k2+1) by A22,A27,FINSEQ_6:141;
hence e Joins v1,v2,G by A26,A25,A24,Def3;
end;
end;
hence e Joins v1,v2,G;
end;
end;
hence e Joins v1,v2,G;
end;
A28: now
assume len W is even;
then reconsider lenW as even Element of NAT;
lenW + 1 = len W1 + len W2 by CARD_1:27,FINSEQ_6:139;
hence contradiction;
end;
1 <= len W1 by ABIAN:12;
then W.1 = W1.first() by FINSEQ_6:140;
hence W1 ^' W2 is Walk of G by A28,A2,Def3;
end;
thus thesis;
end;
end;
definition
let G be _Graph, W be Walk of G, m, n being Nat;
func W.cut(m,n) -> Walk of G equals
:Def11:
(m,n)-cut W if m is odd & n is
odd & m <= n & n <= len W otherwise W;
correctness
proof
hereby
set W2 = (m,n)-cut W, VG = the_Vertices_of G;
assume that
A1: m is odd and
A2: n is odd and
A3: m <= n and
A4: n <= len W;
reconsider m4 = m, n4 = n as odd Nat by A1,A2;
A5: 1 <= m by A1,ABIAN:12;
then len W2 + m4 - m4 = n4 + 1 - m4 by A3,A4,FINSEQ_6:def 4;
then reconsider lenW2 = len W2 as odd Element of NAT;
now
reconsider lenW2aa1 = lenW2-1 as Element of NAT by ABIAN:12,INT_1:5;
lenW2 is odd;
hence len W2 is odd;
0 < lenW2aa1 + 1;
then
A6: W2.(0+1) = W.(m+0) by A3,A4,A5,FINSEQ_6:def 4;
m <= len W by A3,A4,XXREAL_0:2;
then W.m = W.vertexAt(m) by A1,Def8;
hence W2.1 in VG by A6;
let i be odd Element of NAT;
reconsider x=m4+i-1 as odd Element of NAT by A5,INT_1:5,NAT_1:12;
reconsider iaa1 = i-1 as even Element of NAT by ABIAN:12,INT_1:5;
assume
A7: i < len W2;
then i+1 <= lenW2 by NAT_1:13;
then i+1 < len W2 by XXREAL_0:1;
then
A8: W2.(i+1+1) = W.(m+(i+1)) by A3,A4,A5,FINSEQ_6:def 4;
i + m < len W2 + m by A7,XREAL_1:8;
then i + m < n + 1 by A3,A4,A5,FINSEQ_6:def 4;
then i + m4 <= n4 by NAT_1:13;
then m4 + i < n4 by XXREAL_0:1;
then m + i < len W by A4,XXREAL_0:2;
then m + i - 1 < len W - 0 by XREAL_1:14;
then
A9: W.(x+1) Joins W.x, W.(x+2), G by Def3;
iaa1 < len W2-0 by A7,XREAL_1:14;
then W2.(iaa1+1) = W.(m+iaa1) by A3,A4,A5,FINSEQ_6:def 4;
hence W2.(i+1) Joins W2.i, W2.(i+2), G by A3,A4,A5,A7,A8,A9,
FINSEQ_6:def 4;
end;
hence (m,n)-cut W is Walk of G by Def3;
end;
thus thesis;
end;
end;
definition
let G be _Graph, W be Walk of G, m, n be Element of NAT;
func W.remove(m,n) -> Walk of G equals
:Def12:
W.cut(1,m).append(W.cut(n,len
W)) if m is odd & n is odd & m <= n & n <= len W & W.m = W.n otherwise W;
correctness;
end;
definition
let G be _Graph, W be Walk of G, e be object;
func W.addEdge(e) -> Walk of G equals
W.append(G.walkOf(W.last(), e, W
.last().adj(e)));
coherence;
end;
definition
let G be _Graph, W be Walk of G;
func W.vertexSeq() -> VertexSeq of G means
:Def14:
len W + 1 = 2 * len it &
for n being Nat st 1 <= n & n <= len it holds it.n = W.(2*n - 1);
existence
proof
deffunc F(Nat) = W.(2*$1-1);
reconsider lenW1 = len W + 1 as even Element of NAT;
set lenIT = lenW1 div 2;
consider IT being FinSequence such that
A1: len IT = lenIT & for k being Nat st k in dom IT holds IT.k = F(k)
from FINSEQ_1:sch 2;
A2: 2 divides lenW1 by PEPIN:22;
then
A3: 2*lenIT = lenW1 by NAT_D:3;
now
let y be object;
assume y in rng IT;
then consider x being object such that
A4: x in dom IT and
A5: y = IT.x by FUNCT_1:def 3;
A6: x in Seg lenIT by A1,A4,FINSEQ_1:def 3;
reconsider x as Element of NAT by A4;
set 2x = x*2;
reconsider 2x as even Element of NAT;
set 2xaa1 = 2x-1;
1 <= x by A6,FINSEQ_1:1;
then 1*2 <= 2x by XREAL_1:64;
then reconsider 2xaa1 as odd Element of NAT by INT_1:5,XXREAL_0:2;
x <= lenIT by A6,FINSEQ_1:1;
then 2x <= lenIT * 2 by XREAL_1:64;
then 2xaa1 <= lenW1-1 by A3,XREAL_1:9;
then W.2xaa1 = W.vertexAt(2xaa1) by Def8;
then W.2xaa1 in the_Vertices_of G;
hence y in the_Vertices_of G by A1,A4,A5;
end;
then rng IT c= the_Vertices_of G by TARSKI:def 3;
then reconsider IT as FinSequence of the_Vertices_of G by FINSEQ_1:def 4;
now
let n be Element of NAT;
set v2 = IT.(n+1);
assume that
A7: 1 <= n and
A8: n < len IT;
set 2n = 2*n;
reconsider 2n as even Element of NAT;
A9: 1 <= n+1 by A7,NAT_1:13;
set 2naa1 = 2n-1;
1*2 <= n*2 by A7,XREAL_1:64;
then reconsider 2naa1 as odd Element of NAT by INT_1:5,XXREAL_0:2;
2n <= lenW1 by A3,A1,A8,XREAL_1:68;
then
A10: 2n - 1 <= len W + 1 - 1 by XREAL_1:9;
2naa1 <> len W by A1,A8;
then 2naa1 < len W by A10,XXREAL_0:1;
then
A11: W.(2naa1+1) Joins W.2naa1, W.(2naa1+2), G by Def3;
n+1 <= lenIT by A1,A8,NAT_1:13;
then n+1 in dom IT by A1,A9,FINSEQ_3:25;
then
A12: v2 = W.(2*(n+1)-1) by A1
.= W.(2n+1);
n in dom IT by A7,A8,FINSEQ_3:25;
then W.(2naa1+1) Joins IT.n, W.(2naa1+2), G by A1,A11;
hence ex e being set st e Joins IT.n, IT.(n+1), G by A12;
end;
then reconsider IT as VertexSeq of G by Def1;
take IT;
thus len W + 1 = 2 * len IT by A2,A1,NAT_D:3;
let n be Nat;
assume that
A13: 1 <= n and
A14: n <= len IT;
n in dom IT by A13,A14,FINSEQ_3:25;
hence thesis by A1;
end;
uniqueness
proof
let IT1, IT2 be VertexSeq of G such that
A15: len W + 1 = 2 * len IT1 and
A16: for n being Nat st 1 <= n & n <= len IT1 holds IT1.n = W.(2*n - 1 ) and
A17: len W + 1 = 2 * len IT2 and
A18: for n being Nat st 1 <= n & n <= len IT2 holds IT2.n = W.(2*n - 1 );
A19: now
let n be Nat such that
A20: n in dom IT1;
A21: n <= len IT1 by A20,FINSEQ_3:25;
A22: 1 <= n by A20,FINSEQ_3:25;
then IT1.n = W.(2*n - 1) by A16,A21;
hence IT1.n = IT2.n by A15,A17,A18,A22,A21;
end;
dom IT1 = Seg len IT2 by A15,A17,FINSEQ_1:def 3
.= dom IT2 by FINSEQ_1:def 3;
hence IT1 = IT2 by A19,FINSEQ_1:13;
end;
end;
definition
let G be _Graph, W be Walk of G;
func W.edgeSeq() -> EdgeSeq of G means
:Def15:
len W = 2*len it+1 & for n
being Nat st 1 <= n & n <= len it holds it.n = W.(2*n);
existence
proof
deffunc F(Nat) = W.(2*$1);
reconsider lenWaa1 = len W-1 as even Element of NAT by ABIAN:12,INT_1:5;
set lenIT = lenWaa1 div 2;
reconsider lenIT as Element of NAT;
consider IT being FinSequence such that
A1: len IT = lenIT & for n being Nat st n in dom IT holds IT.n = F(n)
from FINSEQ_1:sch 2;
now
let y be object;
A2: 2 divides lenWaa1 by PEPIN:22;
assume y in rng IT;
then consider x being object such that
A3: x in dom IT and
A4: y = IT.x by FUNCT_1:def 3;
A5: x in Seg lenIT by A1,A3,FINSEQ_1:def 3;
reconsider x as Element of NAT by A3;
reconsider 2x = 2*x as even Element of NAT;
x <= lenIT by A5,FINSEQ_1:1;
then x*2 <= lenIT*2 by XREAL_1:64;
then 2x <= lenWaa1 by A2,NAT_D:3;
then
A6: 2x + 1 <= lenWaa1 + 1 by XREAL_1:7;
1 <= x by A5,FINSEQ_1:1;
then 1*2 <= 2*x by XREAL_1:64;
then reconsider 2xaa1 = 2x-1 as odd Element of NAT by INT_1:5,XXREAL_0:2;
2x <= 2x+1 by NAT_1:11;
then 2x <= len W by A6,XXREAL_0:2;
then 2xaa1 < len W by XREAL_1:147;
then
A7: W.(2xaa1+1) Joins W.2xaa1, W.(2xaa1+2), G by Def3;
y = W.(2*x) by A1,A3,A4;
hence y in the_Edges_of G by A7,GLIB_000:def 13;
end;
then rng IT c= the_Edges_of G by TARSKI:def 3;
then reconsider IT as FinSequence of the_Edges_of G by FINSEQ_1:def 4;
2 divides lenWaa1 by PEPIN:22;
then
A8: lenWaa1 = 2 * lenIT by NAT_D:3;
then
A9: len W = 2 * lenIT + 1;
now
set vs = W.vertexSeq();
take vs;
A10: (2 * len IT + 1) + 1 = 2 * len vs by A8,A1,Def14;
then
A11: 2 * (len IT + 1) = 2 * len vs;
thus len vs = len IT + 1 by A10;
let n be Element of NAT;
set v1 = vs.n, v2 = vs.(n+1);
assume that
A12: 1 <= n and
A13: n <= len IT;
set 2n = 2*n;
reconsider 2n as even Element of NAT;
set 2naa1 = 2n-1;
1 <= n+n by A12,NAT_1:12;
then reconsider 2naa1 as odd Element of NAT by INT_1:5;
A14: 1 <= n+1 by NAT_1:12;
n*2 <= len IT*2 by A13,XREAL_1:64;
then n*2 <= len W by A9,A1,NAT_1:12;
then
A15: 2naa1 < len W - 0 by XREAL_1:15;
n+1 <= len vs by A11,A13,XREAL_1:7;
then v2 = W.(2*(n+1)-1) by A14,Def14;
then
A16: v2 = W.(2naa1+2);
n in dom IT by A12,A13,FINSEQ_3:25;
then
A17: IT.n = W.(2naa1+1) by A1;
n <= len vs by A11,A13,NAT_1:12;
then v1 = W.(2*n-1) by A12,Def14;
hence IT.n Joins vs.n, vs.(n+1), G by A17,A16,A15,Def3;
end;
then reconsider IT as EdgeSeq of G by Def2;
take IT;
thus len W = 2*len IT+1 by A8,A1;
let n be Nat;
assume that
A18: 1 <= n and
A19: n <= len IT;
n in dom IT by A18,A19,FINSEQ_3:25;
hence thesis by A1;
end;
uniqueness
proof
let IT1, IT2 be EdgeSeq of G such that
A20: len W = 2*len IT1 + 1 and
A21: for n being Nat st 1 <= n & n <= len IT1 holds IT1.n = W.(2*n) and
A22: len W = 2*len IT2 + 1 and
A23: for n being Nat st 1 <= n & n <= len IT2 holds IT2.n = W.(2*n);
A24: now
let n be Nat;
assume
A25: n in dom IT1;
then
A26: 1 <= n by FINSEQ_3:25;
A27: n <= len IT2 by A20,A22,A25,FINSEQ_3:25;
n <= len IT1 by A25,FINSEQ_3:25;
hence IT1.n = W.(2*n) by A21,A26
.= IT2.n by A23,A26,A27;
end;
dom IT1 = Seg len IT2 by A20,A22,FINSEQ_1:def 3
.= dom IT2 by FINSEQ_1:def 3;
hence IT1 = IT2 by A24,FINSEQ_1:13;
end;
end;
definition
let G be _Graph, W be Walk of G;
func W.vertices() -> finite Subset of the_Vertices_of G equals
rng W.vertexSeq();
coherence;
end;
definition
let G be _Graph, W be Walk of G;
func W.edges() -> finite Subset of the_Edges_of G equals
rng W.edgeSeq();
coherence;
end;
definition
let G be _Graph, W be Walk of G;
func W.length() -> Element of NAT equals
len W.edgeSeq();
coherence;
end;
definition
let G be _Graph, W be Walk of G, v be set;
func W.find(v) -> odd Element of NAT means
:Def19:
it <= len W & W.it = v &
for n being odd Nat st n <= len W & W.n = v holds it <= n if v in W.vertices()
otherwise it = len W;
existence
proof
hereby
defpred P[Nat] means $1 is odd & $1 <= len W & W.$1 = v;
set vs = W.vertexSeq();
assume
A1: v in W.vertices();
now
consider i being Nat such that
A2: i in dom vs and
A3: vs.i = v by A1,FINSEQ_2:10;
set n1 = 2*i;
reconsider n1 as even Nat;
set n = n1-1;
A4: 1 <= i by A2,FINSEQ_3:25;
then 1 <= i+i by NAT_1:12;
then reconsider n as odd Element of NAT by INT_1:5;
take n;
A5: i <= len vs by A2,FINSEQ_3:25;
then i*2 <= len vs *2 by XREAL_1:64;
then i*2 <= len W + 1 by Def14;
then n1 - 1 <= len W + 1 - 1 by XREAL_1:13;
hence n <= len W;
thus W.n = v by A3,A4,A5,Def14;
end;
then
A6: ex k being Nat st P[k];
consider IT being Nat such that
A7: P[IT] & for n being Nat st P[n] holds IT <= n from NAT_1:sch 5(
A6);
reconsider IT as odd Element of NAT by A7,ORDINAL1:def 12;
take IT;
thus IT <= len W & W.IT = v by A7;
let n be odd Nat;
assume that
A8: n <= len W and
A9: W.n = v;
thus IT <= n by A7,A8,A9;
end;
set IT = len W;
assume not v in W.vertices();
take IT;
thus thesis;
end;
uniqueness
proof
let IT1, IT2 be odd Element of NAT;
hereby
assume v in W.vertices();
assume that
A10: IT1 <= len W and
A11: W.IT1 = v and
A12: for n being odd Nat st n <= len W & W.n = v holds IT1 <= n;
assume that
A13: IT2 <= len W and
A14: W.IT2 = v and
A15: for n being odd Nat st n <= len W & W.n = v holds IT2 <= n;
A16: IT2 <= IT1 by A10,A11,A15;
IT1 <= IT2 by A12,A13,A14;
hence IT1 = IT2 by A16,XXREAL_0:1;
end;
assume not v in W.vertices();
thus thesis;
end;
consistency;
end;
definition
let G be _Graph, W be Walk of G, n be Element of NAT;
func W.find(n) -> odd Element of NAT means
:Def20:
it <= len W & W.it = W.n
& for k being odd Nat st k <= len W & W.k = W.n holds it <= k if n is odd & n
<= len W otherwise it = len W;
existence
proof
defpred P[Nat] means $1 is odd & $1 <= len W & W.$1 = W.n;
hereby
assume that
A1: n is odd and
A2: n <= len W;
A3: ex n being Nat st P[n] by A1,A2;
consider IT being Nat such that
A4: P[IT] & for k being Nat st P[k] holds IT <= k from NAT_1:sch 5(
A3);
reconsider IT as odd Element of NAT by A4,ORDINAL1:def 12;
take IT;
thus IT <= len W & W.IT = W.n by A4;
let k be odd Nat;
thus k <= len W & W.k = W.n implies IT <= k by A4;
end;
thus thesis;
end;
uniqueness
proof
let IT1, IT2 be odd Element of NAT;
hereby
assume that
n is odd and
n <= len W;
assume that
A5: IT1 <= len W and
A6: W.IT1 = W.n and
A7: for k being odd Nat st k <= len W & W.k = W.n holds IT1 <= k;
assume that
A8: IT2 <= len W and
A9: W.IT2 = W.n and
A10: for k being odd Nat st k <= len W & W.k = W.n holds IT2 <= k;
A11: IT2 <= IT1 by A5,A6,A10;
IT1 <= IT2 by A7,A8,A9;
hence IT1 = IT2 by A11,XXREAL_0:1;
end;
thus thesis;
end;
consistency;
end;
definition
let G be _Graph, W be Walk of G, v be set;
func W.rfind(v) -> odd Element of NAT means
:Def21:
it <= len W & W.it = v &
for n being odd Element of NAT st n <= len W & W.n = v holds n <= it if v in W
.vertices() otherwise it = len W;
existence
proof
hereby
defpred P[Nat] means $1 is odd & $1 <= len W & W.$1 = v;
assume
A1: v in W.vertices();
then
A2: W.(W.find(v)) = v by Def19;
W.find(v) <= len W by A1,Def19;
then
A3: ex k being Nat st P[k] by A2;
A4: for k being Nat st P[k] holds k <= len W;
consider IT being Nat such that
A5: P[IT] & for n being Nat st P[n] holds n <= IT from NAT_1:sch 6(
A4, A3);
reconsider IT as odd Element of NAT by A5,ORDINAL1:def 12;
take IT;
thus IT <= len W & W.IT = v by A5;
let n be odd Element of NAT;
assume that
A6: n <= len W and
A7: W.n = v;
thus n <= IT by A5,A6,A7;
end;
thus thesis;
end;
uniqueness
proof
let IT1, IT2 be odd Element of NAT;
hereby
assume v in W.vertices();
assume that
A8: IT1 <= len W and
A9: W.IT1 = v and
A10: for n being odd Element of NAT st n <= len W & W.n = v holds n <= IT1;
assume that
A11: IT2 <= len W and
A12: W.IT2 = v and
A13: for n being odd Element of NAT st n <= len W & W.n = v holds n <= IT2;
A14: IT1 <= IT2 by A8,A9,A13;
IT2 <= IT1 by A10,A11,A12;
hence IT1 = IT2 by A14,XXREAL_0:1;
end;
thus thesis;
end;
consistency;
end;
definition
let G be _Graph, W be Walk of G, n be Element of NAT;
func W.rfind(n) -> odd Element of NAT means
:Def22:
it <= len W & W.it = W.n
& for k being odd Element of NAT st k <= len W & W.k = W.n holds k <= it if n
is odd & n <= len W otherwise it = len W;
existence
proof
defpred P[Nat] means $1 is odd & $1 <= len W & W.$1 = W.n;
hereby
A1: for k being Nat st P[k] holds k <= len W;
assume that
A2: n is odd and
A3: n <= len W;
A4: ex k being Nat st P[k] by A2,A3;
consider IT being Nat such that
A5: P[IT] & for k being Nat st P[k] holds k <= IT from NAT_1:sch 6(
A1, A4);
reconsider IT as odd Element of NAT by A5,ORDINAL1:def 12;
take IT;
thus IT <= len W & W.IT = W.n by A5;
thus for k being odd Element of NAT st k <= len W & W.k = W.n holds k <=
IT by A5;
end;
thus thesis;
end;
uniqueness
proof
let IT1, IT2 be odd Element of NAT;
hereby
assume that
n is odd and
n <= len W;
assume that
A6: IT1 <= len W and
A7: W.IT1 = W.n and
A8: for k being odd Element of NAT st k <= len W & W.k = W.n holds k <= IT1;
assume that
A9: IT2 <= len W and
A10: W.IT2 = W.n and
A11: for k being odd Element of NAT st k <= len W & W.k = W.n holds k <= IT2;
A12: IT2 <= IT1 by A8,A9,A10;
IT1 <= IT2 by A6,A7,A11;
hence IT1 = IT2 by A12,XXREAL_0:1;
end;
thus thesis;
end;
consistency;
end;
definition
let G be _Graph, u, v be object, W be Walk of G;
pred W is_Walk_from u,v means
W.first() = u & W.last() = v;
end;
definition
let G be _Graph, W be Walk of G;
attr W is closed means
:Def24:
W.first() = W.last();
attr W is directed means
:Def25:
for n being odd Element of NAT st n < len W
holds (the_Source_of G).(W.(n+1)) = W.n;
redefine attr W is trivial means :: redefines trivial (SUBSET_1, redefinition) → trivial (ZFMISC_1, definition)
W.length() = 0;
compatibility
proof
W is trivial iff W.length() = 0
proof
hereby assume
A1: W is trivial;
W <> {}
proof
assume W = {}; then
len W = 0;
hence thesis;
end; then
consider x being object such that
A5: W = <*x*> by A1,JORDAN1G:1;
set WW = W.edgeSeq();
len W = 1 by A5,FINSEQ_1:39; then
2 * len WW + 1 = 0 + 1 by Def15;
hence W.length() = 0;
end;
assume W.length() = 0; then
len W = 2 * 0 + 1 by Def15;
hence thesis by NAT_D:60;
end;
hence thesis;
end;
attr W is Trail-like means
:Def27:
W.edgeSeq() is one-to-one;
end;
notation
let G be _Graph, W be Walk of G;
antonym W is open for W is closed;
end;
definition
let G be _Graph, W be Walk of G;
attr W is Path-like means
:Def28:
W is Trail-like & for m, n being odd
Element of NAT st m < n & n <= len W holds W.m = W.n implies m = 1 & n = len W;
end;
definition
let G be _Graph, W be Walk of G;
attr W is vertex-distinct means
:Def29:
for m,n being odd Element of NAT st
m <= len W & n <= len W & W.m = W.n holds m = n;
end;
definition
let G be _Graph, W be Walk of G;
attr W is Circuit-like means
W is closed & W is Trail-like & W is non trivial;
attr W is Cycle-like means
W is closed & W is Path-like & W is non trivial;
end;
Lm1: for G be _Graph, W be Walk of G, n being odd Element of NAT st n <= len W
holds W.n in the_Vertices_of G
proof
let G be _Graph, W be Walk of G, n be odd Element of NAT;
assume n <= len W;
then W.n = W.vertexAt(n) by Def8;
hence thesis;
end;
Lm2: for G be _Graph, W be Walk of G, n being even Element of NAT st n in dom
W holds ex naa1 being odd Element of NAT st naa1 = n-1 & n-1 in dom W & n+1 in
dom W & W.n Joins W.(naa1), W.(n+1),G
proof
let G be _Graph, W be Walk of G, n be even Element of NAT;
A1: 1 <= 1+n by NAT_1:12;
assume
A2: n in dom W;
then
A3: n <= len W by FINSEQ_3:25;
A4: 1 <= n by A2,FINSEQ_3:25;
then reconsider naa1 = n-1 as odd Element of NAT by INT_1:5;
take naa1;
thus naa1 = n-1;
1 < n by A4,JORDAN12:2,XXREAL_0:1;
then 1+1 <= n by NAT_1:13;
then 1+1-1 <= n-1 by XREAL_1:13;
then
A5: 1 <= naa1;
n - 1 <= len W - 0 by A3,XREAL_1:13;
hence n - 1 in dom W by A5,FINSEQ_3:25;
n < len W by A3,XXREAL_0:1;
then n+1 <= len W by NAT_1:13;
hence n+1 in dom W by A1,FINSEQ_3:25;
n - 1 < len W - 0 by A3,XREAL_1:15;
then W.(naa1+1) Joins W.naa1, W.(naa1+2),G by Def3;
hence thesis;
end;
Lm3: for G be _Graph, W be Walk of G, n being odd Element of NAT st n < len W
holds n in dom W & n+1 in dom W & n+2 in dom W
proof
let G be _Graph, W be Walk of G, n be odd Element of NAT;
A1: 1 <= n by ABIAN:12;
A2: 1 <= n+1 by NAT_1:12;
A3: 1 <= n+2 by NAT_1:12;
assume
A4: n < len W;
then
A5: n+1 <= len W by NAT_1:13;
n+2 <= len W by A4,Th1;
hence thesis by A4,A1,A2,A3,A5,FINSEQ_3:25;
end;
Lm4: for G being _Graph, v being Vertex of G holds G.walkOf(v) is closed & G
.walkOf(v) is directed & G.walkOf(v) is trivial & G.walkOf(v) is Trail-like & G
.walkOf(v) is Path-like
proof
let G be _Graph, v be Vertex of G;
set W = G.walkOf(v);
W.first() = W.last() by FINSEQ_1:40;
hence W is closed;
now
let n be odd Element of NAT;
assume n < len W;
then n < 1 by FINSEQ_1:39;
hence W.n = (the_Source_of G).(W.(n+1)) by ABIAN:12;
end;
hence W is directed;
thus W is trivial;
len W = 2*(len (W.edgeSeq()))+1 by Def15;
then 0 + 1 = 2 * (len (W.edgeSeq())) + 1 by FINSEQ_1:40;
then W.edgeSeq() = {};
hence
A1: W is Trail-like;
now
let n, m be odd Element of NAT;
assume that
A2: n < m and
A3: m <= len W;
m <= 1 by A3,FINSEQ_1:40;
then n < 1 by A2,XXREAL_0:2;
hence W.n = W.m implies n = 1 & m = len W by ABIAN:12;
end;
hence thesis by A1;
end;
Lm5: for G be _Graph, x,e,y be object
holds e Joins x,y,G implies len G.walkOf(x,e,y) = 3
proof
let G be _Graph, x,e,y be object;
assume e Joins x,y,G;
then G.walkOf(x,e,y) = <*x,e,y*> by Def5;
hence thesis by FINSEQ_1:45;
end;
Lm6: for G being _Graph, x,e,y being object
holds e Joins x,y,G implies G.walkOf(x,e,y).first() = x &
G.walkOf(x,e,y).last() = y & G.walkOf(x,e,y) is_Walk_from x,y
proof
let G be _Graph, x,e,y be object;
set W = G.walkOf(x,e,y);
assume e Joins x,y,G;
then
A1: W = <*x,e,y*> by Def5;
hence
A2: W.first() = x;
len W = 3 by A1,FINSEQ_1:45;
hence W.last() = y by A1;
hence thesis by A2;
end;
Lm7: for G be _Graph, W be Walk of G holds W.first() = W.reverse().last() & W
.last() = W.reverse().first()
proof
let G be _Graph, W be Walk of G;
len W = len W.reverse() by FINSEQ_5:def 3;
hence W.first() = W.reverse().last() by FINSEQ_5:62;
thus thesis by FINSEQ_5:62;
end;
Lm8: for G being _Graph, W being Walk of G, n being Element of NAT holds n in
dom W.reverse() implies W.reverse().n = W.(len W - n + 1) & (len W - n + 1) in
dom W
proof
let G be _Graph, W be Walk of G, n be Element of NAT;
assume
A1: n in dom W.reverse();
hence W.reverse().n = W.(len W - n + 1) by FINSEQ_5:def 3;
n in Seg len W.reverse() by A1,FINSEQ_1:def 3;
then n in Seg len W by FINSEQ_5:def 3;
then len W - n + 1 in Seg len W by FINSEQ_5:2;
hence thesis by FINSEQ_1:def 3;
end;
Lm9: for G being _Graph, W1,W2 being Walk of G holds W1.last() = W2.first()
implies len W1.append(W2) + 1 = len W1 + len W2
proof
let G be _Graph, W1,W2 be Walk of G;
set W = W1.append(W2);
assume W1.last() = W2.first();
then W = W1 ^' W2 by Def10;
hence thesis by CARD_1:27,FINSEQ_6:139;
end;
Lm10: for G be _Graph, W1,W2 be Walk of G holds W1.last() = W2.first() implies
len W1 <= len W1.append(W2) & len W2 <= len W1.append(W2)
proof
let G be _Graph, W1,W2 be Walk of G;
set W = W1.append(W2);
assume W1.last() = W2.first();
then
A1: len W + 1 = len W1 + len W2 by Lm9;
1 <= len W2 by ABIAN:12;
then len W1 + len W2 - len W2 <= len W + 1 - 1 by A1,XREAL_1:13;
hence len W1 <= len W;
1 <= len W1 by ABIAN:12;
then len W2 + len W1 - len W1 <= len W + 1 - 1 by A1,XREAL_1:13;
hence thesis;
end;
Lm11: for G being _Graph, W1,W2 being Walk of G holds W1.last() = W2.first()
implies W1.append(W2).first() = W1.first() & W1.append(W2).last() = W2.last() &
W1.append(W2) is_Walk_from W1.first(), W2.last()
proof
let G be _Graph, W1, W2 be Walk of G;
set W = W1.append(W2);
assume
A1: W1.last() = W2.first();
then
A2: W = W1 ^' W2 by Def10;
1 <= len W1 by ABIAN:12;
hence
A3: W.first() = W1.first() by A2,FINSEQ_6:140;
now
per cases;
suppose
A4: len W2 <> 1;
1 <= len W2 by ABIAN:12;
then 1 < len W2 by A4,XXREAL_0:1;
hence W.last() = W2.last() by A2,FINSEQ_6:142;
end;
suppose
A5: len W2 = 1;
A6: (2,1)-cut W2 = {} by FINSEQ_6:def 4;
W = W1^(2,1)-cut W2 by A2,A5,FINSEQ_6:def 5;
hence W.last() = W2.last() by A1,A5,A6,FINSEQ_1:34;
end;
end;
hence thesis by A3;
end;
Lm12: for G be _Graph, W1,W2 be Walk of G, n being Element of NAT holds n in
dom W1 implies W1.append(W2).n = W1.n & n in dom W1.append(W2)
proof
let G be _Graph, W1,W2 be Walk of G, n be Element of NAT;
set W = W1.append(W2);
assume
A1: n in dom W1;
then
A2: n <= len W1 by FINSEQ_3:25;
A3: 1 <= n by A1,FINSEQ_3:25;
now
per cases;
suppose
A4: W1.last() = W2.first();
then W = W1 ^' W2 by Def10;
hence W.n = W1.n by A3,A2,FINSEQ_6:140;
reconsider lenW2aa1 = len W2 - 1 as Element of NAT by ABIAN:12,INT_1:5;
n <= len W1 + lenW2aa1 by A2,NAT_1:12;
then n <= len W1 + len W2 + -1;
then n <= len W + 1 + -1 by A4,Lm9;
hence n in dom W by A3,FINSEQ_3:25;
end;
suppose
W1.last() <> W2.first();
hence thesis by A1,Def10;
end;
end;
hence thesis;
end;
Lm13: for G be _Graph, W1,W2 be Walk of G holds W1.last() = W2.first() implies
for n being Element of NAT st n < len W2 holds W1.append(W2).(len W1 + n) = W2.
(n+1) & (len W1 + n) in dom W1.append(W2)
proof
let G be _Graph, W1,W2 be Walk of G;
set W = W1.append(W2);
assume
A1: W1.last() = W2.first();
let n be Element of NAT;
assume
A2: n < len W2;
then n + 1 <= len W2 by NAT_1:13;
then n + 1 + len W1 <= len W2 + len W1 by XREAL_1:7;
then len W1 + n + 1 <= len W + 1 by A1,Lm9;
then
A3: len W1 + n <= len W by XREAL_1:6;
A4: W = W1 ^' W2 by A1,Def10;
now
per cases;
suppose
A5: n = 0;
then 1 <= len W1 + n by ABIAN:12;
then len W1 + n in dom W1 by A5,FINSEQ_3:25;
hence W1.append(W2).(len W1 + n) = W2.(n + 1) by A1,A5,Lm12;
end;
suppose
n <> 0;
then 0 + 1 < n + 1 by XREAL_1:8;
then 1 <= n by NAT_1:13;
hence W1.append(W2).(len W1 + n) = W2.(n+1) by A4,A2,FINSEQ_6:141;
end;
end;
hence W1.append(W2).(len W1 + n) = W2.(n+1);
1 <= len W1 + n by ABIAN:12,NAT_1:12;
hence thesis by A3,FINSEQ_3:25;
end;
Lm14: for G be _Graph, W1,W2 be Walk of G, n be Element of NAT holds n in dom
W1.append(W2) implies n in dom W1 or ex k being Element of NAT st k < len W2 &
n = len W1 + k
proof
let G be _Graph, W1,W2 be Walk of G, n be Element of NAT;
set W3 = W1.append(W2);
assume
A1: n in dom W3;
then
A2: n <= len W3 by FINSEQ_3:25;
A3: 1 <= n by A1,FINSEQ_3:25;
now
per cases;
suppose
W1.last() = W2.first();
then
A4: len W3 + 1 = len W1 + len W2 by Lm9;
now
assume not n in dom W1;
then len W1 < n by A3,FINSEQ_3:25;
then reconsider k = n - len W1 as Element of NAT by INT_1:5;
take k;
now
assume len W2 <= k;
then len W1 + len W2 <= len W1 + k by XREAL_1:7;
hence contradiction by A2,A4,NAT_1:13;
end;
hence k < len W2;
thus n = len W1+k;
end;
hence thesis;
end;
suppose
W1.last() <> W2.first();
hence thesis by A1,Def10;
end;
end;
hence thesis;
end;
Lm15: for G being _Graph, W being Walk of G, m,n being odd Element of NAT st m
<= n & n <= len W holds len W.cut(m,n) + m = n+1 & for i being Element of NAT
st i < len W.cut(m,n) holds W.cut(m,n).(i+1) = W.(m+i) & m+i in dom W
proof
let G be _Graph, W be Walk of G, m, n be odd Element of NAT;
set W2 = W.cut(m,n);
assume that
A1: m <= n and
A2: n <= len W;
A3: 1 <= m by ABIAN:12;
A4: W2 = (m,n)-cut W by A1,A2,Def11;
hence
A5: len W.cut(m,n) + m = n + 1 by A1,A2,A3,FINSEQ_6:def 4;
let i be Element of NAT;
assume
A6: i < len W.cut(m,n);
hence W.cut(m,n).(i+1) = W.(m+i) by A1,A2,A4,A3,FINSEQ_6:def 4;
m+i < n + 1 by A5,A6,XREAL_1:8;
then m+i <= n by NAT_1:13;
then
A7: m+i <= len W by A2,XXREAL_0:2;
1 <= m+i by ABIAN:12,NAT_1:12;
hence thesis by A7,FINSEQ_3:25;
end;
Lm16: for G being _Graph, W being Walk of G, m, n being odd Element of NAT st
m <= n & n <= len W holds W.cut(m,n).first() = W.m & W.cut(m,n).last() = W.n &
W.cut(m,n) is_Walk_from W.m, W.n
proof
let G be _Graph, W be Walk of G, m, n be odd Element of NAT;
set W2 = W.cut(m,n);
assume that
A1: m <= n and
A2: n <= len W;
1-1 < len W2 - 0;
then W2.(0+1) = W.(m+0) by A1,A2,Lm15;
hence
A3: W2.first() = W.m;
reconsider nm4 = n-m as Element of NAT by A1,INT_1:5;
A4: len W2 + m - m = n + 1 - m by A1,A2,Lm15;
then n - m + 1 -1 < len W2 - 0 by XREAL_1:15;
then nm4 < len W2;
then W2.((n-m)+1) = W.(m+(n-m)) by A1,A2,Lm15;
hence W2.last() = W.n by A4;
hence thesis by A3;
end;
Lm17: for G be _Graph, W be Walk of G, m,n,o being odd Element of NAT st m <=
n & n <= o & o <= len W holds W.cut(m,n).append(W.cut(n,o)) = W.cut(m,o)
proof
let G be _Graph, W be Walk of G, m,n,o be odd Element of NAT;
assume that
A1: m <= n and
A2: n <= o and
A3: o <= len W;
set W1 = W.cut(m,n), W2 = W.cut(n,o), W3 = W.cut(m,o), W4 = W1.append(W2);
A4: n <= len W by A2,A3,XXREAL_0:2;
A5: m <= o by A1,A2,XXREAL_0:2;
now
A6: len W3 + m = o + 1 by A3,A5,Lm15;
A7: W1.last() = W.n by A1,A4,Lm16
.= W2.first() by A2,A3,Lm16;
A8: len W1 + m = n + 1 by A1,A4,Lm15;
A9: len W2 + n = o + 1 by A2,A3,Lm15;
then len W1 + len W2 + m = 1 + len W3 + m by A8,A6;
then
A10: len W4 + 1 = len W3 + 1 by A7,Lm9;
hence len W4 = len W4 & len W3 = len W4;
let x be Nat;
assume
A11: x in dom W4;
then
A12: 1 <= x by FINSEQ_3:25;
then reconsider xaa1 = x-1 as Element of NAT by INT_1:5;
A13: x <= len W4 by A11,FINSEQ_3:25;
then xaa1 < len W4 - 0 by XREAL_1:15;
then
A14: W3.(xaa1+1) = W.(m+xaa1) by A3,A5,A10,Lm15;
now
per cases;
suppose
A15: x <= len W1;
then
A16: xaa1 < len W1 - 0 by XREAL_1:15;
x in dom W1 by A12,A15,FINSEQ_3:25;
hence W4.x = W1.(xaa1+1) by Lm12
.= W3.x by A1,A4,A14,A16,Lm15;
end;
suppose
x > len W1;
then consider k being Nat such that
A17: len W1 + k = x by NAT_1:10;
reconsider k as Element of NAT by ORDINAL1:def 12;
len W1 + k + 1 <= len W3 + 1 by A10,A13,A17,XREAL_1:7;
then (k + 1)+len W1-len W1 <= len W2 +len W1-len W1 by A8,A9,A6,
XREAL_1:13;
then
A18: k + 1 - 1 < len W2 + 1 - 1 by NAT_1:13;
then W4.x = W2.(k+1) by A7,A17,Lm13
.= W.(n+k) by A2,A3,A18,Lm15;
hence W4.x = W3.x by A8,A14,A17;
end;
end;
hence W4.x = W3.x;
end;
hence thesis by FINSEQ_2:9;
end;
Lm18: for G be _Graph, W be Walk of G holds W.cut(1,len W) = W
proof
let G be _Graph, W be Walk of G;
1 <= len W by ABIAN:12;
then W.cut(1,len W) = (1,len W)-cut W by Def11,JORDAN12:2;
hence thesis by FINSEQ_6:133;
end;
Lm19: for G be _Graph, W be Walk of G, n being odd Element of NAT st n <= len
W holds W.cut(n,n) = <* W.vertexAt(n) *>
proof
let G be _Graph, W be Walk of G, n be odd Element of NAT;
A1: 1 <= n by ABIAN:12;
assume
A2: n <= len W;
then
A3: W.n = W.vertexAt(n) by Def8;
W.cut(n,n) = (n,n)-cut W by A2,Def11;
hence thesis by A2,A3,A1,FINSEQ_6:132;
end;
Lm20: for G being _Graph, W being Walk of G, m,n being Element of NAT holds m
is odd & m <= n implies W.cut(1,n).cut(1,m) = W.cut(1,m)
proof
let G be _Graph, W be Walk of G, m,n be Element of NAT;
set W1 = W.cut(1,n);
assume that
A1: m is odd and
A2: m <= n;
now
per cases;
suppose
A3: n is odd & n <= len W;
A4: 1 <= m by A1,ABIAN:12;
A5: 1 <= n by A3,ABIAN:12;
then
A6: len W1 + 1 = n + 1 by A3,Lm15,JORDAN12:2;
then
A7: len W1.cut(1,m) + 1 = m + 1 by A1,A2,A4,Lm15,JORDAN12:2;
A8: m <= len W by A2,A3,XXREAL_0:2;
then
A9: W.cut(1,m) = (1,m)-cut W by A1,A4,Def11,JORDAN12:2;
A10: len W.cut(1,m) + 1 = m + 1 by A1,A4,A8,Lm15,JORDAN12:2;
A11: W1 = (1,n)-cut W by A3,A5,Def11,JORDAN12:2;
A12: W1.cut(1,m) = (1,m)-cut W1 by A1,A2,A4,A6,Def11,JORDAN12:2;
A13: now
let x be Nat;
assume
A14: x in dom W1.cut(1,m);
then
A15: x <= m by A7,FINSEQ_3:25;
A16: 1 <= x by A14,FINSEQ_3:25;
then reconsider xaa1 = x-1 as Element of NAT by INT_1:5;
A17: 1 <= m by A16,A15,XXREAL_0:2;
A18: xaa1 < len W.cut(1,m) - 0 by A10,A15,XREAL_1:15;
x <= n by A2,A15,XXREAL_0:2;
then
A19: xaa1 < len W1 - 0 by A6,XREAL_1:15;
xaa1 < len W1.cut(1,m) - 0 by A7,A15,XREAL_1:15;
hence W1.cut(1,m).x = W1.(1+xaa1) by A2,A6,A12,A17,FINSEQ_6:def 4
.= W.(1+xaa1) by A3,A5,A11,A19,FINSEQ_6:def 4
.= W.cut(1,m).x by A4,A8,A9,A18,FINSEQ_6:def 4;
end;
len W.cut(1,m) + 1 = m + 1 by A1,A4,A8,Lm15,JORDAN12:2;
hence thesis by A7,A13,FINSEQ_2:9;
end;
suppose
not (n is odd & n <= len W);
hence thesis by Def11;
end;
end;
hence thesis;
end;
Lm21: for G be _Graph, W1,W2 be Walk of G, m,n being odd Element of NAT st m
<= n & n <= len W1 & W1.last() = W2.first() holds W1.append(W2).cut(m,n) = W1
.cut(m,n)
proof
let G be _Graph, W1,W2 be Walk of G, m,n be odd Element of NAT;
assume that
A1: m <= n and
A2: n <= len W1 and
A3: W1.last() = W2.first();
A4: W1.cut(m,n) = (m,n)-cut W1 by A1,A2,Def11;
set W3 = W1.append(W2);
len W1 <= len W3 by A3,Lm10;
then
A5: n <= len W3 by A2,XXREAL_0:2;
then
A6: len W3.cut(m,n) + m = n + 1 by A1,Lm15
.= len W1.cut(m,n) + m by A1,A2,Lm15;
A7: 1 <= m by ABIAN:12;
A8: W3.cut(m,n) = (m,n)-cut W3 by A1,A5,Def11;
now
let x be Nat;
assume
A9: x in dom W1.cut(m,n);
then 1 <= x by FINSEQ_3:25;
then reconsider xaa1 = x-1 as Element of NAT by INT_1:5;
A10: x <= len W1.cut(m,n) by A9,FINSEQ_3:25;
then
A11: xaa1 < len W1.cut(m,n) - 0 by XREAL_1:15;
len W1.cut(m,n) + m = n + 1 by A1,A2,Lm15;
then m + xaa1 < n + 1 by A11,XREAL_1:8;
then m + xaa1 <= n by NAT_1:13;
then
A12: m+xaa1 <= len W1 by A2,XXREAL_0:2;
1 <= m+xaa1 by ABIAN:12,NAT_1:12;
then
A13: m+xaa1 in dom W1 by A12,FINSEQ_3:25;
A14: xaa1 + 1 = x;
xaa1 < len W3.cut(m,n) - 0 by A6,A10,XREAL_1:15;
then
A15: W3.cut(m,n).x = W3.(m+xaa1) by A1,A5,A8,A7,A14,FINSEQ_6:def 4;
W1.cut(m,n).x = W1.(m+xaa1) by A1,A2,A4,A7,A14,A11,FINSEQ_6:def 4;
hence W3.cut(m,n).x = W1.cut(m,n).x by A15,A13,Lm12;
end;
hence thesis by A6,FINSEQ_2:9;
end;
Lm22: for G being _Graph, W being Walk of G, m being odd Element of NAT st m
<= len W holds len W.cut(1,m) = m
proof
let G be _Graph, W be Walk of G, m be odd Element of NAT;
A1: 1 <= m by ABIAN:12;
assume m <= len W;
then len W.cut(1,m) + 1 = m + 1 by A1,Lm15,JORDAN12:2;
hence thesis;
end;
Lm23: for G be _Graph, W be Walk of G, m be odd Element of NAT, x be Element
of NAT st x in dom W.cut(1,m) & m <= len W holds W.cut(1,m).x = W.x
proof
let G be _Graph, W be Walk of G, m be odd Element of NAT, x be Element of
NAT;
assume that
A1: x in dom W.cut(1,m) and
A2: m <= len W;
x <= len W.cut(1,m) by A1,FINSEQ_3:25;
then
A3: x-1 < len W.cut(1,m) - 0 by XREAL_1:15;
1 <= x by A1,FINSEQ_3:25;
then reconsider xaa1 = x-1 as Element of NAT by INT_1:5;
A4: 1 <= m by ABIAN:12;
xaa1 + 1 = x;
hence thesis by A2,A4,A3,Lm15,JORDAN12:2;
end;
Lm24: for G be _Graph, W be Walk of G, m,n be odd Element of NAT st m <= n & n
<= len W & W.m = W.n holds len W.remove(m,n) + n = len W + m
proof
let G be _Graph, W be Walk of G, m, n be odd Element of NAT;
set W1 = W.cut(1,m), W2 = W.cut(n,len W);
assume that
A1: m <= n and
A2: n <= len W and
A3: W.m = W.n;
A4: W.remove(m,n) = W1.append(W2) by A1,A2,A3,Def12;
A5: len W2 + n = len W + 1 by A2,Lm15;
A6: W.n = W2.first() by A2,Lm16;
A7: 1 <= m by ABIAN:12;
A8: m <= len W by A1,A2,XXREAL_0:2;
then
A9: len W1 + 1 = m + 1 by A7,Lm15,JORDAN12:2;
W1.last() = W.n by A3,A7,A8,Lm16,JORDAN12:2;
then len W1.append(W2) + 1 = m + (len W + 1 + -n) by A6,A9,A5,Lm9
.= len W + m + -n + 1;
hence thesis by A4;
end;
Lm25: for G be _Graph, W be Walk of G, m,n be Element of NAT, x,y be set holds
W is_Walk_from x,y implies W.remove(m,n) is_Walk_from x,y
proof
let G be _Graph, W be Walk of G, m,n be Element of NAT, x,y be set;
set W2 = W.remove(m,n), WA = W.cut(1,m), WB = W.cut(n,len W);
assume
A1: W is_Walk_from x,y;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then
A3: WB.last() = W.last() by Lm16
.= y by A1;
A4: W2 = WA.append(WB) by A2,Def12;
A5: m <= len W by A2,XXREAL_0:2;
A6: 1 <= m by A2,ABIAN:12;
then
A7: WA.first() = W.first() by A2,A5,Lm16,JORDAN12:2
.= x by A1;
WA.last() = W.n by A2,A6,A5,Lm16,JORDAN12:2
.= WB.first() by A2,Lm16;
hence thesis by A4,A7,A3,Lm11;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
hence thesis by A1,Def12;
end;
end;
hence thesis;
end;
Lm26: for G being _Graph, W being Walk of G, m,n be Element of NAT holds len W
.remove(m,n) <= len W
proof
let G be _Graph, W be Walk of G, m,n be Element of NAT;
set W2 = W.remove(m,n);
now
per cases;
suppose
A1: m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then len W2 + n = len W + m by Lm24;
then len W2 + n - n <= len W + m - m by A1,XREAL_1:13;
hence thesis;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
hence thesis by Def12;
end;
end;
hence thesis;
end;
Lm27: for G be _Graph, W be Walk of G, m be Element of NAT holds W.remove(m,m)
= W
proof
let G be _Graph, W be Walk of G, m be Element of NAT;
now
per cases;
suppose
A1: m is odd & m <= len W & W.m = W.m;
then
A2: 1 <= m by ABIAN:12;
thus W.remove(m,m) = W.cut(1,m).append(W.cut(m,len W)) by A1,Def12
.= W.cut(1,len W) by A1,A2,Lm17,JORDAN12:2
.= W by Lm18;
end;
suppose
not (m is odd & m <= len W & W.m = W.m);
hence thesis by Def12;
end;
end;
hence thesis;
end;
Lm28: for G being _Graph, W being Walk of G, m,n be odd Element of NAT st m <=
n & n <= len W & W.m = W.n holds W.cut(1,m).last() = W.cut(n,len W).first()
proof
let G be _Graph, W be Walk of G, m,n be odd Element of NAT;
assume that
A1: m <= n and
A2: n <= len W and
A3: W.m = W.n;
A4: 1 <= m by ABIAN:12;
m <= len W by A1,A2,XXREAL_0:2;
hence W.cut(1,m).last() = W.n by A3,A4,Lm16,JORDAN12:2
.= W.cut(n,len W).first() by A2,Lm16;
end;
Lm29: for G be _Graph, W be Walk of G, x,y be set, m,n being odd Element of
NAT st m <= n & n <= len W & W.m = W.n holds for x being Element of NAT st x in
Seg m holds W.remove(m,n).x = W.x
proof
let G be _Graph, W be Walk of G, x,y be set, m, n be odd Element of NAT;
set W2 = W.remove(m,n);
assume that
A1: m <= n and
A2: n <= len W and
A3: W.m = W.n;
let x be Element of NAT;
assume
A4: x in Seg m;
then x <= m by FINSEQ_1:1;
then
A5: x <= len W.cut(1,m) by A1,A2,Lm22,XXREAL_0:2;
1 <= x by A4,FINSEQ_1:1;
then
A6: x in dom W.cut(1,m) by A5,FINSEQ_3:25;
W2 = W.cut(1,m).append(W.cut(n,len W)) by A1,A2,A3,Def12;
hence W2.x = W.cut(1,m).x by A6,Lm12
.= W.x by A1,A2,A6,Lm23,XXREAL_0:2;
end;
Lm30: for G be _Graph, W be Walk of G, m,n being odd Element of NAT st m <= n
& n <= len W & W.m = W.n holds for x being Element of NAT st m <= x & x <= len
W.remove(m,n) holds W.remove(m,n).x = W.(x - m + n) & x - m + n is Element of
NAT & x - m + n <= len W
proof
let G be _Graph, W be Walk of G, m, n be odd Element of NAT;
set W2 = W.remove(m,n), WA = W.cut(1,m), WB = W.cut(n,len W);
assume that
A1: m <= n and
A2: n <= len W and
A3: W.m = W.n;
A4: WA.last() = WB.first() by A1,A2,A3,Lm28;
let x be Element of NAT;
assume that
A5: m <= x and
A6: x <= len W2;
A7: len WA = m by A1,A2,Lm22,XXREAL_0:2;
then consider a being Nat such that
A8: len WA + a = x by A5,NAT_1:10;
reconsider a as Element of NAT by ORDINAL1:def 12;
len W2 + n = len W + m by A1,A2,A3,Lm24;
then m + a + n <= m + len W by A7,A6,A8,XREAL_1:7;
then
A9: a+n + m - m <= len W + m - m by XREAL_1:13;
len WB + n = len W + 1 by A2,Lm15;
then a + n + 1 <= len WB + n by A9,XREAL_1:7;
then a + 1 + n - n <= len WB + n - n by XREAL_1:13;
then
A10: a + 1 - 1 < len WB + 1 - 1 by NAT_1:13;
W2 = WA.append(WB) by A1,A2,A3,Def12;
then W2.x = WB.(a+1) by A4,A8,A10,Lm13
.= W.(a + n) by A2,A10,Lm15;
hence W2.x = W.(x - m + n) by A7,A8;
a + n is Element of NAT;
hence x-m+n is Element of NAT by A7,A8;
thus thesis by A7,A8,A9;
end;
Lm31: for G be _Graph, W be Walk of G, m,n be odd Element of NAT st m <= n & n
<= len W & W.m = W.n holds len W.remove(m,n) = len W + m - n
proof
let G be _Graph, W be Walk of G, m,n be odd Element of NAT;
assume that
A1: m <= n and
A2: n <= len W and
A3: W.m = W.n;
len W.remove(m,n) + n = len W + m by A1,A2,A3,Lm24;
hence thesis;
end;
Lm32: for G be _Graph, W be Walk of G, m being Element of NAT st W.first() = W
.m holds W.remove(1,m) = W.cut(m, len W)
proof
let G be _Graph, W be Walk of G, m be Element of NAT;
assume
A1: W.first() = W.m;
now
per cases;
suppose
A2: m is odd & m <= len W;
then 1 <= m by ABIAN:12;
then
A3: W.remove(1,m) = W.cut(1,1).append(W.cut(m, len W)) by A1,A2,Def12,
JORDAN12:2;
A4: 1 <= len W by ABIAN:12;
then
A5: W.cut(1,1).last() = W.m by A1,Lm16,JORDAN12:2
.= W.cut(m, len W).first() by A2,Lm16;
A6: now
let n be Nat;
assume that
A7: 1 <= n and
A8: n <= len W.remove(1,m);
A9: n in dom W.remove(1,m) by A7,A8,FINSEQ_3:25;
now
per cases by A3,A9,Lm14;
suppose
A10: n in dom W.cut(1,1);
then n <= len W.cut(1,1) by FINSEQ_3:25;
then
A11: n <= 1 by A4,Lm22,JORDAN12:2;
A12: 1 <= n by A10,FINSEQ_3:25;
then
A13: n = 1 by A11,XXREAL_0:1;
W.remove(1,m).n = W.cut(1,1).n by A3,A10,Lm12
.= <* W.vertexAt(1) *>.1 by A4,A13,Lm19,JORDAN12:2
.= W.vertexAt(1)
.= W.m by A1,A4,Def8,JORDAN12:2
.= W.cut(m, len W).first() by A2,Lm16
.= W.cut(m, len W).1;
hence W.remove(1,m).n = W.cut(m, len W).n by A12,A11,XXREAL_0:1;
end;
suppose
ex k being Element of NAT st k < len W.cut(m, len W) & n
= len W.cut(1,1) + k;
then consider k being Element of NAT such that
A14: k < len W.cut(m, len W) and
A15: n = len W.cut(1,1) + k;
n = k + 1 by A14,A15,Lm22,ABIAN:12,JORDAN12:2;
hence W.remove(1,m).n = W.cut(m, len W).n by A3,A5,A14,A15,Lm13;
end;
end;
hence W.remove(1,m).n = W.cut(m, len W).n;
end;
len W.remove(1,m) + 1 = len W.cut(1,1) + len W.cut(m, len W) by A3,A5,Lm9
;
then len W.remove(1,m) + 1 = len W.cut(m, len W) + 1 by Lm22,ABIAN:12
,JORDAN12:2;
hence thesis by A6,FINSEQ_1:14;
end;
suppose
A16: not (m is odd & m <= len W);
then W.cut(m, len W) = W by Def11;
hence thesis by A16,Def12;
end;
end;
hence thesis;
end;
Lm33: for G be _Graph, W be Walk of G, m,n be Element of NAT holds W.remove(m,
n).first() = W.first() & W.remove(m,n).last() = W.last()
proof
let G be _Graph, W be Walk of G, m,n be Element of NAT;
W is_Walk_from W.first(), W.last();
then W.remove(m,n) is_Walk_from W.first(), W.last() by Lm25;
hence thesis;
end;
Lm34: for G be _Graph, W be Walk of G, m,n being odd Element of NAT, x being
Element of NAT st x in dom W.remove(m,n) holds x in Seg m or m <= x & x <= len
W.remove(m,n)
proof
let G be _Graph, W be Walk of G, m,n be odd Element of NAT, x be Element of
NAT;
assume that
A1: x in dom W.remove(m,n);
1 <= x by A1,FINSEQ_3:25;
hence thesis by A1,FINSEQ_1:1,FINSEQ_3:25;
end;
Lm35: for G be _Graph, W be Walk of G, e,x be object
holds e Joins W.last(), x, G
implies W.addEdge(e) = W^<*e,x*>
proof
let G be _Graph, W be Walk of G, e,x be object;
set W1 = G.walkOf(W.last(), e, W.last().adj(e));
assume
A1: e Joins W.last(), x, G;
then reconsider x9=x as Vertex of G by GLIB_000:13;
A2: W.last().adj(e) = x9 by A1,GLIB_000:66;
then
A3: W1 = <*W.last(), e, x*> by A1,Def5;
then
A4: len W1 = 3 by FINSEQ_1:45;
A5: W1.3 = x by A3;
W1.2 = e by A3;
then (2,2)-cut W1 = <*e*> by A4,FINSEQ_6:132;
then <*e*> ^ (2+1,3)-cut W1 = (1+1,3)-cut W1 by A4,FINSEQ_6:134;
then
A6: <*e*> ^ <*x*> = (2,3)-cut W1 by A4,A5,FINSEQ_6:132;
W.last() = W1.first() by A1,A2,Lm6;
then W.append(W1) = W ^' W1 by Def10
.= W ^ (2,len W1)-cut W1 by FINSEQ_6:def 5
.= W ^ (2,3)-cut W1 by A3,FINSEQ_1:45;
hence thesis by A6,FINSEQ_1:def 9;
end;
Lm36: for G be _Graph, W be Walk of G, e,x be object
holds e Joins W.last(),x,G
implies W.addEdge(e).first() = W.first() & W.addEdge(e).last() = x & W.addEdge(
e) is_Walk_from W.first(), x
proof
let G be _Graph, W be Walk of G, e,x be object;
set W2 = G.walkOf(W.last(), e, W.last().adj(e));
assume
A1: e Joins W.last(), x, G;
then reconsider x9=x as Vertex of G by GLIB_000:13;
A2: W.last().adj(e) = x9 by A1,GLIB_000:66;
then
A3: W2.last() = x by A1,Lm6;
W2.first() = W.last() by A1,A2,Lm6;
hence thesis by A3,Lm11;
end;
Lm37: for G be _Graph, W be Walk of G, e,x be object
holds e Joins W.last(),x,G
implies len W.addEdge(e) = len W + 2
proof
let G be _Graph, W be Walk of G, e,x be object;
set W2 = G.walkOf(W.last(),e, W.last().adj(e));
assume
A1: e Joins W.last(), x, G;
then reconsider x9=x as Vertex of G by GLIB_000:13;
A2: W.last().adj(e) = x9 by A1,GLIB_000:66;
then W2.first() = W.last() by A1,Lm6;
then
A3: len W.addEdge(e) + 1 = len W + len W2 by Lm9;
W2 = <*W.last(), e, x*> by A1,A2,Def5;
then len W.addEdge(e) + 1 = len W + 3 by A3,FINSEQ_1:45;
hence thesis;
end;
Lm38: for G be _Graph, W be Walk of G, e,x be object
holds e Joins W.last(),x,G
implies W.addEdge(e).(len W + 1) = e & W.addEdge(e).(len W + 2) = x & for n
being Element of NAT st n in dom W holds W.addEdge(e).n = W.n
proof
let G be _Graph, W be Walk of G, e,x be object;
set W2 = W.addEdge(e);
A1: <*e,x*>.1 = e;
assume e Joins W.last(), x, G;
then
A2: W2 = W^<*e,x*> by Lm35;
A3: dom <*e,x*> = Seg 2 by FINSEQ_1:89;
then 1 in dom <*e,x*> by FINSEQ_1:1;
hence W2.(len W + 1) = e by A2,A1,FINSEQ_1:def 7;
A4: <*e,x*>.2 = x;
2 in dom <*e,x*> by A3,FINSEQ_1:1;
hence W2.(len W + 2) = x by A2,A4,FINSEQ_1:def 7;
let n be Element of NAT;
assume n in dom W;
hence thesis by A2,FINSEQ_1:def 7;
end;
Lm39: for G be _Graph, W be Walk of G, e,x,y,z be object
holds W is_Walk_from x,y
& e Joins y,z,G implies W.addEdge(e) is_Walk_from x,z
by Lm36;
Lm40: for G being _Graph, W being Walk of G, n being even Nat st 1
<= n & n <= len W holds n div 2 in dom W.edgeSeq() & W.n = W.edgeSeq().(n div 2
)
proof
let G be _Graph, W be Walk of G, n be even Nat;
assume that
A1: 1 <= n and
A2: n <= len W;
A3: 2 divides n by PEPIN:22;
then
A4: n = 2 * (n div 2) by NAT_D:3;
A5: now
assume
A6: not n div 2 in dom W.edgeSeq();
now
per cases by A6,FINSEQ_3:25;
suppose
n div 2 < 0+1;
then n div 2 = 0 by NAT_1:13;
then n = 2 * 0 by A3,NAT_D:3;
hence contradiction by A1;
end;
suppose
n div 2 > len W.edgeSeq();
then 2 * (n div 2) > 2 * len W.edgeSeq() by XREAL_1:68;
then n + 1 > 2 * len W.edgeSeq() + 1 by A4,XREAL_1:8;
then n + 1 > len W by Def15;
then n >= len W by NAT_1:13;
hence contradiction by A2,XXREAL_0:1;
end;
end;
hence contradiction;
end;
hence n div 2 in dom W.edgeSeq();
A7: n div 2 <= len W.edgeSeq() by A5,FINSEQ_3:25;
1 <= n div 2 by A5,FINSEQ_3:25;
hence thesis by A4,A7,Def15;
end;
Lm41: for G being _Graph, W being Walk of G, n being Nat holds n in
dom W.edgeSeq() iff 2*n in dom W
proof
let G be _Graph, W be Walk of G, n be Nat;
hereby
assume
A1: n in dom W.edgeSeq();
then n <= len W.edgeSeq() by FINSEQ_3:25;
then 2*n <= len W.edgeSeq()*2 by NAT_1:4;
then 2*n <= len W.edgeSeq()*2 + 1 by NAT_1:12;
then
A2: 2*n <= len W by Def15;
1 <= n by A1,FINSEQ_3:25;
then 1 <= n + n by NAT_1:12;
hence 2*n in dom W by A2,FINSEQ_3:25;
end;
assume
A3: 2*n in dom W;
then
A4: 2*n <= len W by FINSEQ_3:25;
1 <= 2*n by A3,FINSEQ_3:25;
then 2*n div 2 in dom W.edgeSeq() by A4,Lm40;
hence thesis;
end;
Lm42: for G be _Graph, W be Walk of G holds ex lenWaa1 being even Element of
NAT st lenWaa1 = len W - 1 & len W.edgeSeq() = lenWaa1 div 2
proof
let G be _Graph, W be Walk of G;
set lenWaa1 = len W - 1;
reconsider lenWaa1 as even Element of NAT by ABIAN:12,INT_1:5;
take lenWaa1;
thus lenWaa1 = len W - 1;
2 divides lenWaa1 by PEPIN:22;
then
A1: lenWaa1 = 2 * (lenWaa1 div 2) by NAT_D:3;
len W = 2*len W.edgeSeq()+1 by Def15;
hence thesis;
end;
Lm43: for G be _Graph, W be Walk of G, n be Element of NAT holds W.cut(1,n)
.edgeSeq() c= W.edgeSeq()
proof
let G be _Graph, W be Walk of G, n be Element of NAT;
per cases;
suppose
A1: n is odd & 1 <= n & n <= len W;
set f = W.cut(1,n).edgeSeq();
now
let e be object;
assume
A2: e in W.cut(1,n).edgeSeq();
then consider x,y being object such that
A3: e = [x,y] by RELAT_1:def 1;
A4: y = f.x by A2,A3,FUNCT_1:1;
A5: x in dom f by A2,A3,FUNCT_1:1;
then reconsider x as Element of NAT;
A6: x <= len f by A5,FINSEQ_3:25;
A7: 2*x in dom W.cut(1,n) by A5,Lm41;
then 2*x <= len W.cut(1,n) by FINSEQ_3:25;
then 2*x <= n by A1,Lm22;
then
A8: 2*x <= len W by A1,XXREAL_0:2;
1 <= 2*x by A7,FINSEQ_3:25;
then 2*x in dom W by A8,FINSEQ_3:25;
then
A9: x in dom W.edgeSeq() by Lm41;
then
A10: x <= len W.edgeSeq() by FINSEQ_3:25;
1 <= x by A5,FINSEQ_3:25;
then y = W.cut(1,n).(2*x) by A4,A6,Def15;
then
A11: y = W.(2*x) by A1,A7,Lm23;
1 <= x by A9,FINSEQ_3:25;
then W.edgeSeq().x = y by A11,A10,Def15;
hence e in W.edgeSeq() by A3,A9,FUNCT_1:1;
end;
hence thesis by TARSKI:def 3;
end;
suppose
not (n is odd & 1 <= n & n <= len W);
hence thesis by Def11;
end;
end;
Lm44: for G be _Graph, W be Walk of G, e,x be object
holds e Joins W.last(),x,G
implies W.addEdge(e).edgeSeq() = W.edgeSeq() ^ <*e*>
proof
let G be _Graph, W be Walk of G, e,x be object;
set W2 = W.addEdge(e), W3 = W.edgeSeq() ^ <*e*>;
assume
A1: e Joins W.last(),x,G;
then len W2 = len W + 2 by Lm37;
then len W + 2 = 2 * len W2.edgeSeq() + 1 by Def15;
then 2 + (2*len W.edgeSeq()+1) = 2*len W2.edgeSeq() + 1 by Def15;
then
A2: 2*(len W.edgeSeq()+1) = 2*len W2.edgeSeq();
len W3 = len W.edgeSeq() + len <*e*> by FINSEQ_1:22;
then
A3: 2*len W3 = 2*len W2.edgeSeq() by A2,FINSEQ_1:39;
now
let k be Nat;
assume that
A4: 1 <= k and
A5: k <= len W2.edgeSeq();
A6: W2.edgeSeq().k = W2.(2*k) by A4,A5,Def15;
A7: k in dom W3 by A3,A4,A5,FINSEQ_3:25;
now
per cases by A7,FINSEQ_1:25;
suppose
A8: k in dom W.edgeSeq();
then
A9: 2*k in dom W by Lm41;
A10: 1 <= k by A8,FINSEQ_3:25;
A11: k <= len W.edgeSeq() by A8,FINSEQ_3:25;
W3.k = W.edgeSeq().k by A8,FINSEQ_1:def 7;
then W3.k = W.(2*k) by A10,A11,Def15;
hence W2.edgeSeq().k = W3.k by A1,A6,A9,Lm38;
end;
suppose
ex n being Nat st n in dom <*e*> & k=len W.edgeSeq() + n;
then consider n being Element of NAT such that
A12: n in dom <*e*> and
A13: k = len W.edgeSeq() + n;
n in {1} by A12,FINSEQ_1:2,38;
then
A14: n = 1 by TARSKI:def 1;
then
A15: 2*k = 2*len W.edgeSeq() + 1 + 1 by A13
.= len W + 1 by Def15;
W3.k = <*e*>.1 by A12,A13,A14,FINSEQ_1:def 7
.= e;
hence W2.edgeSeq().k = W3.k by A1,A6,A15,Lm38;
end;
end;
hence W2.edgeSeq().k = W3.k;
end;
hence thesis by A3,FINSEQ_1:14;
end;
Lm45: for G be _Graph, W be Walk of G, x be set holds x in W.vertices() iff ex
n being odd Element of NAT st n <= len W & W.n = x
proof
let G be _Graph, W be Walk of G, x be set;
set vs = W.vertexSeq();
hereby
assume x in W.vertices();
then consider i being Nat such that
A1: i in dom vs and
A2: vs.i = x by FINSEQ_2:10;
set n1 = 2*i;
reconsider n1 as even Nat;
set n = n1-1;
A3: 1 <= i by A1,FINSEQ_3:25;
then 1 <= i+i by NAT_1:12;
then reconsider n as odd Element of NAT by INT_1:5;
take n;
A4: i <= len vs by A1,FINSEQ_3:25;
then i*2 <= len vs *2 by XREAL_1:64;
then i*2 <= len W + 1 by Def14;
then n1 - 1 <= len W + 1 - 1 by XREAL_1:13;
hence n <= len W;
thus W.n = x by A2,A3,A4,Def14;
end;
assume ex n being odd Element of NAT st n <= len W & W.n = x;
then consider n being odd Element of NAT such that
A5: n <= len W and
A6: W.n = x;
set n1 = n+1;
reconsider n1 as even Element of NAT;
set i = n1 div 2;
A7: 2 divides n1 by PEPIN:22;
then
A8: 2*i = n1 by NAT_D:3;
reconsider i as Element of NAT;
1 <= n by ABIAN:12;
then 1+1 <= n1 by XREAL_1:7;
then 2*1 <= 2*i by A7,NAT_D:3;
then
A9: 1 <= i by XREAL_1:68;
n1 <= len W + 1 by A5,XREAL_1:7;
then 2*i <= 2*len vs by A8,Def14;
then
A10: i <= len vs by XREAL_1:68;
then
A11: i in dom vs by A9,FINSEQ_3:25;
vs.i = W.(2*i-1) by A9,A10,Def14
.= x by A6,A8;
hence thesis by A11,FUNCT_1:def 3;
end;
Lm46: for G be _Graph, W be Walk of G, e be set holds e in W.edges() iff ex n
being even Element of NAT st 1 <= n & n <= len W & W.n = e
proof
let G be _Graph, W be Walk of G, e be set;
set es = W.edgeSeq();
hereby
assume e in W.edges();
then consider i being Nat such that
A1: i in dom es and
A2: es.i = e by FINSEQ_2:10;
set n = 2*i;
reconsider n as even Element of NAT by ORDINAL1:def 12;
take n;
A3: 1 <= i by A1,FINSEQ_3:25;
then 1 <= i+i by NAT_1:12;
hence 1 <= n;
A4: i <= len es by A1,FINSEQ_3:25;
then i*2 <= len es * 2 by XREAL_1:64;
then n <= len es * 2 + 1 by NAT_1:12;
hence n <= len W by Def15;
thus W.n = e by A2,A3,A4,Def15;
end;
assume ex n being even Element of NAT st 1 <= n & n <= len W & W.n = e;
then consider n being even Element of NAT such that
A5: 1 <= n and
A6: n <= len W and
A7: W.n = e;
set i = n div 2;
2 divides n by PEPIN:22;
then
A8: 2*i = n by NAT_D:3;
reconsider i as Element of NAT;
1 < n by A5,JORDAN12:2,XXREAL_0:1;
then 1+1 < n+1 by XREAL_1:8;
then 2*1 <= 2*i by A8,NAT_1:13;
then
A9: 1 <= i by XREAL_1:68;
n < len W by A6,XXREAL_0:1;
then 2*i < 2*len es + 1 by A8,Def15;
then 2*i <= 2*len es by NAT_1:13;
then
A10: i <= len es by XREAL_1:68;
then
A11: i in dom es by A9,FINSEQ_3:25;
es.i = e by A7,A8,A9,A10,Def15;
hence thesis by A11,FUNCT_1:def 3;
end;
Lm47: for G be _Graph, W be Walk of G, e be set holds e in W.edges() implies
ex v1, v2 being Vertex of G, n being odd Element of NAT st n+2 <= len W & v1 =
W.n & e = W.(n+1) & v2 = W.(n+2) & e Joins v1, v2,G
proof
let G be _Graph, W be Walk of G, e be set;
reconsider lenW = len W as odd Element of NAT;
assume e in W.edges();
then consider n1 being even Element of NAT such that
A1: 1 <= n1 and
A2: n1 <= len W and
A3: W.n1 = e by Lm46;
reconsider n = n1-1 as odd Element of NAT by A1,INT_1:5;
set v1 = W.n, v2 = W.(n+2);
n1-1 <= len W - 0 by A2,XREAL_1:13;
then reconsider v1 as Vertex of G by Lm1;
n1 < lenW by A2,XXREAL_0:1;
then
A4: n+1+1 <= len W by NAT_1:13;
then reconsider v2 as Vertex of G by Lm1;
take v1, v2, n;
thus n+2 <= len W by A4;
thus v1 = W.n & e = W.(n+1) & v2 = W.(n+2) by A3;
n+1-1 < len W - 0 by A2,XREAL_1:15;
hence thesis by A3,Def3;
end;
Lm48: for G be _Graph, W be Walk of G, e,x,y be object
holds e in W.edges() & e
Joins x,y,G implies x in W.vertices() & y in W.vertices()
proof
let G be _Graph, W be Walk of G, e,x,y be object;
assume that
A1: e in W.edges() and
A2: e Joins x,y,G;
consider v1,v2 being Vertex of G, n being odd Element of NAT such that
A3: n+2 <= len W and
A4: v1 = W.n and
e = W.(n+1) and
A5: v2 = W.(n+2) and
A6: e Joins v1,v2,G by A1,Lm47;
n+2-2 <= len W-0 by A3,XREAL_1:13;
then
A7: v1 in W.vertices() by A4,Lm45;
v2 in W.vertices() by A3,A5,Lm45;
hence thesis by A2,A6,A7,GLIB_000:15;
end;
Lm49: for G be _Graph, W be Walk of G, n be odd Element of NAT st n <= len W
holds W.find(n) <= n
proof
let G be _Graph, W be Walk of G, n be odd Element of NAT;
assume
A1: n <= len W;
then
for k being odd Element of NAT st k <= len W & W.k = W.n holds W.find(n)
<= k by Def20;
hence thesis by A1;
end;
Lm50: for G be _Graph, W be Walk of G, n being odd Element of NAT st n <= len
W holds W.rfind(n) >= n
proof
let G be _Graph, W be Walk of G, n be odd Element of NAT;
assume
A1: n <= len W;
then for k being odd Element of NAT st k <= len W & W.k = W.n holds k <= W
.rfind(n) by Def22;
hence thesis by A1;
end;
Lm51: for G being _Graph, W being Walk of G holds W is directed iff for n
being odd Element of NAT st n < len W holds W.(n+1) DJoins W.n, W.(n+2), G
proof
let G be _Graph, W be Walk of G;
hereby
assume
A1: W is directed;
let n be odd Element of NAT;
assume
A2: n < len W;
then
A3: W.n = (the_Source_of G).(W.(n+1)) by A1;
A4: now
assume
A5: W.(n+1) DJoins W.(n+2), W.n, G;
then W.(n+2) = W.n by A3,GLIB_000:def 14;
hence W.(n+1) DJoins W.n, W.(n+2), G by A5;
end;
W.(n+1) Joins W.n, W.(n+2), G by A2,Def3;
hence W.(n+1) DJoins W.n, W.(n+2), G by A4,GLIB_000:16;
end;
assume
A6: for n being odd Element of NAT st n < len W holds W.(n+1) DJoins W.n
, W.(n+2), G;
now
let n be odd Element of NAT;
assume n < len W;
then W.(n+1) DJoins W.n, W.(n+2), G by A6;
hence (the_Source_of G).(W.(n+1)) = W.n by GLIB_000:def 14;
end;
hence thesis;
end;
Lm52: for G be _Graph, W be Walk of G, x,e,y,z be set holds W is directed & W
is_Walk_from x,y & e DJoins y,z,G implies W.addEdge(e) is directed & W.addEdge(
e) is_Walk_from x,z
proof
let G be _Graph, W be Walk of G, x,e,y,z be set;
set W2 = W.addEdge(e);
assume that
A1: W is directed and
A2: W is_Walk_from x,y and
A3: e DJoins y,z,G;
A4: W.last() = y by A2;
then
A5: e Joins W.last(),z,G by A3,GLIB_000:16;
then
A6: len W2 = len W + 2 by Lm37;
A7: W2.(len W + 1) = e by A5,Lm38;
1 <= len W by ABIAN:12;
then len W in dom W by FINSEQ_3:25;
then
A8: W2.(len W) = y by A4,A5,Lm38;
now
let n be odd Element of NAT;
assume n < len W2;
then n < len W + 1+1 by A6;
then n <= len W + 1 by NAT_1:13;
then n < len W + 1 by XXREAL_0:1;
then
A9: n <= len W by NAT_1:13;
now
per cases;
suppose
n = len W;
hence W2.n = (the_Source_of G).(W2.(n+1)) by A3,A8,A7,GLIB_000:def 14;
end;
suppose
A10: n <> len W;
A11: 1 <= n+1 by NAT_1:12;
1 <= n by ABIAN:12;
then n in dom W by A9,FINSEQ_3:25;
then
A12: W2.n = W.n by A5,Lm38;
A13: n < len W by A9,A10,XXREAL_0:1;
then n + 1 <= len W by NAT_1:13;
then n+1 in dom W by A11,FINSEQ_3:25;
then W2.(n+1) = W.(n+1) by A5,Lm38;
hence W2.n = (the_Source_of G).(W2.(n+1)) by A1,A13,A12;
end;
end;
hence W2.n = (the_Source_of G).(W2.(n+1));
end;
hence W.addEdge(e) is directed;
thus thesis by A2,A5,Lm39;
end;
Lm53: for G being _Graph, W being Walk of G, m,n being Element of NAT holds W
is directed implies W.cut(m,n) is directed
proof
let G be _Graph, W be Walk of G, m, n be Element of NAT;
set W2 = W.cut(m,n);
assume
A1: W is directed;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W;
then reconsider m9 = m as odd Element of NAT;
now
let x be odd Element of NAT;
reconsider xaa1 = x - 1 as even Element of NAT by ABIAN:12,INT_1:5;
assume
A3: x < len W2;
then x + 1 <= len W2 by NAT_1:13;
then
A4: x + 1 < len W2 by XXREAL_0:1;
m+x in dom W by A2,A3,Lm15;
then m9+x <= len W by FINSEQ_3:25;
then
A5: m9+x-1 < len W - 0 by XREAL_1:15;
xaa1 < len W2 - 0 by A3,XREAL_1:14;
then
A6: W2.(xaa1+1) = W.(m+xaa1) by A2,Lm15;
A7: W2.(x+2) = W2.(x+1+1) .= W.(m+(x-1+1+1)) by A2,A4,Lm15
.= W.(m+xaa1+2);
W2.(x+1) = W.(m+x-1+1) by A2,A3,Lm15
.= W.(m+xaa1+1);
hence W2.(x+1) DJoins W2.x, W2.(x+2), G by A1,A6,A5,A7,Lm51;
end;
hence thesis by Lm51;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W);
hence thesis by A1,Def11;
end;
end;
hence thesis;
end;
Lm54: for G being _Graph, W being Walk of G holds W is non trivial iff 3 <=
len W
proof
let G be _Graph, W be Walk of G;
hereby
assume W is non trivial;
then W.length() <> 0;
then 0+1 <= len W.edgeSeq() by NAT_1:13;
then 2*1 <= 2*len W.edgeSeq() by NAT_1:4;
then 2+1 <= 2*len W.edgeSeq() + 1 by XREAL_1:7;
hence 3 <= len W by Def15;
end;
assume 3 <= len W;
then 2*1 + 1 <= 2*len W.edgeSeq() + 1 by Def15;
then W.length() <> 0;
hence thesis;
end;
Lm55: for G being _Graph, W being Walk of G holds W is non trivial iff len W
<> 1
proof
let G be _Graph, W be Walk of G;
A1: 1 <= len W by ABIAN:12;
thus W is non trivial implies len W <> 1 by Lm54;
assume len W <> 1;
then 1 < len W by A1,XXREAL_0:1;
then 1+1 <= len W by NAT_1:13;
then 2*1 < len W by XXREAL_0:1;
then 2*1+1 <= len W by NAT_1:13;
hence thesis by Lm54;
end;
Lm56: for G be _Graph, W be Walk of G holds W is trivial iff ex v being Vertex
of G st W = G.walkOf(v)
proof
let G be _Graph, W be Walk of G;
hereby
assume
A1: W is trivial;
take v = W.first();
len W = 1 by A1,Lm55;
hence W = G.walkOf(v) by FINSEQ_1:40;
end;
given v being Vertex of G such that
A2: W = G.walkOf(v);
len W = 1 by A2,FINSEQ_1:39;
hence thesis by Lm55;
end;
Lm57: for G being _Graph, W being Walk of G holds W is Trail-like iff for m,n
being even Element of NAT st 1 <= m & m < n & n <= len W holds W.m <> W.n
proof
let G be _Graph, W be Walk of G;
hereby
assume W is Trail-like;
then
A1: W.edgeSeq() is one-to-one;
let m, n be even Element of NAT;
assume that
A2: 1 <= m and
A3: m < n and
A4: n <= len W;
A5: 1 <= n by A2,A3,XXREAL_0:2;
then
A6: n div 2 in dom W.edgeSeq() by A4,Lm40;
A7: m <= len W by A3,A4,XXREAL_0:2;
then
A8: W.m = W.edgeSeq().(m div 2) by A2,Lm40;
A9: now
2 divides m by PEPIN:22;
then
A10: 2 * (m div 2) = m by NAT_D:3;
A11: 2 divides n by PEPIN:22;
assume m div 2 = n div 2;
hence contradiction by A3,A11,A10,NAT_D:3;
end;
A12: W.n = W.edgeSeq().(n div 2) by A4,A5,Lm40;
m div 2 in dom W.edgeSeq() by A2,A7,Lm40;
hence W.m <> W.n by A1,A8,A6,A12,A9,FUNCT_1:def 4;
end;
assume
A13: for m,n being even Element of NAT st 1 <= m & m < n & n <= len W
holds W.m <> W.n;
now
let x1, x2 be object;
assume that
A14: x1 in dom W.edgeSeq() and
A15: x2 in dom W.edgeSeq() and
A16: W.edgeSeq().x1 = W.edgeSeq().x2;
reconsider m = x1, n = x2 as Element of NAT by A14,A15;
A17: m <= len W.edgeSeq() by A14,FINSEQ_3:25;
1 <= m by A14,FINSEQ_3:25;
then
A18: W.edgeSeq().x1 = W.(2*m) by A17,Def15;
A19: n <= len W.edgeSeq() by A15,FINSEQ_3:25;
1 <= n by A15,FINSEQ_3:25;
then
A20: W.(2*m) = W.(2*n) by A16,A18,A19,Def15;
A21: 2*n in dom W by A15,Lm41;
then
A22: 1 <= 2*n by FINSEQ_3:25;
A23: 2*m in dom W by A14,Lm41;
then
A24: 2*m <= len W by FINSEQ_3:25;
A25: 2*n <= len W by A21,FINSEQ_3:25;
A26: 1 <= 2*m by A23,FINSEQ_3:25;
now
per cases by XXREAL_0:1;
suppose
2*m < 2*n;
hence x1 = x2 by A13,A20,A26,A25;
end;
suppose
2*m = 2*n;
hence x1 = x2;
end;
suppose
2*m > 2*n;
hence x1 = x2 by A13,A20,A24,A22;
end;
end;
hence x1 = x2;
end;
then W.edgeSeq() is one-to-one by FUNCT_1:def 4;
hence thesis;
end;
Lm58: for G being _Graph, W being Walk of G holds W is Trail-like iff W
.reverse() is Trail-like
proof
let G be _Graph, W be Walk of G;
A1: now
let W be Walk of G;
assume
A2: W is Trail-like;
now
reconsider lenW = len W as odd Element of NAT;
let m, n be even Element of NAT;
assume that
A3: 1 <= m and
A4: m < n and
A5: n <= len W.reverse();
len W - n < len W - m by A4,XREAL_1:15;
then
A6: len W - n + 1 < len W - m + 1 by XREAL_1:8;
m <= len W.reverse() by A4,A5,XXREAL_0:2;
then
A7: m in dom W.reverse() by A3,FINSEQ_3:25;
then
A8: len W - m + 1 in dom W by Lm8;
then reconsider rm = lenW-m+1 as even Element of NAT;
A9: rm <= len W by A8,FINSEQ_3:25;
1 <= n by A3,A4,XXREAL_0:2;
then
A10: n in dom W.reverse() by A5,FINSEQ_3:25;
then
A11: W.reverse().n = W.(len W - n + 1) by Lm8;
A12: len W - n + 1 in dom W by A10,Lm8;
then reconsider rn = lenW-n+1 as even Element of NAT;
A13: 1 <= rn by A12,FINSEQ_3:25;
W.reverse().m = W.(len W - m + 1) by A7,Lm8;
hence W.reverse().m <> W.reverse().n by A2,A11,A6,A13,A9,Lm57;
end;
hence W.reverse() is Trail-like by Lm57;
end;
hence W is Trail-like implies W.reverse() is Trail-like;
assume W.reverse() is Trail-like;
then W.reverse().reverse() is Trail-like by A1;
hence thesis;
end;
Lm59: for G being _Graph, W being Walk of G, m,n being Element of NAT holds W
is Trail-like implies W.cut(m,n) is Trail-like
proof
let G be _Graph, W be Walk of G, m,n be Element of NAT;
assume
A1: W is Trail-like;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W;
now
reconsider m9=m as odd Element of NAT by A2;
let x,y be even Element of NAT;
assume that
A3: 1 <= x and
A4: x < y and
A5: y <= len W.cut(m,n);
reconsider xaa1 = x-1 as odd Element of NAT by A3,INT_1:5;
reconsider yaa1 = y-1 as odd Element of NAT by A3,A4,INT_1:5,XXREAL_0:2
;
x - 1 < y - 1 by A4,XREAL_1:14;
then
A6: xaa1 + m < yaa1 + m by XREAL_1:8;
x <= len W.cut(m,n) by A4,A5,XXREAL_0:2;
then x-1 < len W.cut(m,n)-0 by XREAL_1:15;
then
A7: W.cut(m,n).(xaa1+1) = W.(m+xaa1) by A2,Lm15;
A8: y-1 < len W.cut(m,n)-0 by A5,XREAL_1:15;
then
A9: W.cut(m,n).(yaa1+1) = W.(m+yaa1) by A2,Lm15;
m+yaa1 in dom W by A2,A8,Lm15;
then
A10: m+yaa1 <= len W by FINSEQ_3:25;
1 <= m+xaa1 by ABIAN:12,NAT_1:12;
then W.(m9+xaa1) <> W.(m9+yaa1) by A1,A10,A6,Lm57;
hence W.cut(m,n).x <> W.cut(m,n).y by A7,A9;
end;
hence thesis by Lm57;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W);
hence thesis by A1,Def11;
end;
end;
hence thesis;
end;
Lm60: for G be _Graph, W being Walk of G, e being set st W is Trail-like & e
in W.last().edgesInOut() & not e in W.edges() holds W.addEdge(e) is Trail-like
proof
let G be _Graph, W be Walk of G, e be set;
assume that
A1: W is Trail-like and
A2: e in W.last().edgesInOut() and
A3: not e in W.edges();
set W2 = W.addEdge(e);
reconsider lenW2 = len W2 as odd Element of NAT;
A4: e Joins W.last(), W.last().adj(e),G by A2,GLIB_000:67;
now
let m,n be even Element of NAT;
assume that
A5: 1 <= m and
A6: m < n and
A7: n <= len W2;
now
per cases;
suppose
A8: n <= len W;
then m <= len W by A6,XXREAL_0:2;
then m in dom W by A5,FINSEQ_3:25;
then
A9: W2.m = W.m by A4,Lm38;
1 <= n by A5,A6,XXREAL_0:2;
then n in dom W by A8,FINSEQ_3:25;
then W2.n = W.n by A4,Lm38;
hence W2.m <> W2.n by A1,A5,A6,A8,A9,Lm57;
end;
suppose
A10: n > len W;
n < lenW2 by A7,XXREAL_0:1;
then n+1 <= len W2 by NAT_1:13;
then n+1-1 <= len W2 - 1 by XREAL_1:13;
then
A11: n <= len W + (1+1) - 1 by A4,Lm37;
len W + 1 <= n by A10,NAT_1:13;
then
A12: n = len W + 1 by A11,XXREAL_0:1;
then
A13: W2.n = e by A4,Lm38;
A14: m + 1 - 1 <= len W + 1 - 1 by A6,A12,NAT_1:13;
then m in dom W by A5,FINSEQ_3:25;
then W2.m = W.m by A4,Lm38;
hence W2.m <> W2.n by A3,A5,A13,A14,Lm46;
end;
end;
hence W2.m <> W2.n;
end;
hence thesis by Lm57;
end;
Lm61: for G be _Graph, W be Walk of G holds len W <= 3 implies W is Trail-like
proof
let G be _Graph, W be Walk of G;
assume
A1: len W <= 3;
now
per cases;
suppose
len W = 1;
then W is trivial by Lm55;
then ex v being Vertex of G st W = G.walkOf(v) by Lm56;
hence thesis by Lm4;
end;
suppose
A2: len W <> 1;
1 <= len W by ABIAN:12;
then 1 < len W by A2,XXREAL_0:1;
then 1+2 <= len W by Th1,JORDAN12:2;
then
A3: len W = 3 by A1,XXREAL_0:1;
now
let m, n be even Element of NAT such that
A4: 1 <= m and
A5: m < n and
A6: n <= len W;
2*0+1 < m by A4,XXREAL_0:1;
then
A7: 1+1 <= m by NAT_1:13;
n < 2+1 by A3,A6,XXREAL_0:1;
then n <= 2 by NAT_1:13;
hence W.m <> W.n by A5,A7,XXREAL_0:2;
end;
hence thesis by Lm57;
end;
end;
hence thesis;
end;
Lm62: for G being _Graph, x,e,y being object
holds e Joins x,y,G implies G.walkOf
(x,e,y) is Path-like
proof
let G be _Graph, x,e,y be object;
set W = G.walkOf(x,e,y);
assume
A1: e Joins x,y,G;
then
A2: len W = 3 by Lm5;
A3: now
let m,n be odd Element of NAT;
assume that
A4: m < n and
A5: n <= len W;
assume W.m = W.n;
A6: 1 <= m by ABIAN:12;
then 1 < n by A4,XXREAL_0:2;
then 1+1 < n+1 by XREAL_1:8;
then 2*1 <= n by NAT_1:13;
then 2*1 < n by XXREAL_0:1;
then 2+1 < n+1 by XREAL_1:8;
then
A7: 3 <= n by NAT_1:13;
then
A8: n = 3 by A2,A5,XXREAL_0:1;
now
assume m <> 1;
then 1 < m by A6,XXREAL_0:1;
then 1+1 < m+1 by XREAL_1:8;
then 2*1 <= m by NAT_1:13;
then 2*1 < m by XXREAL_0:1;
then 2+1 < m+1 by XREAL_1:8;
hence contradiction by A4,A8,NAT_1:13;
end;
hence m = 1 & n = len W by A2,A5,A7,XXREAL_0:1;
end;
now
let m,n be even Element of NAT;
assume that
A9: 1 <= m and
A10: m < n and
A11: n <= len W;
1 < m by A9,JORDAN12:2,XXREAL_0:1;
then 1+1 <= m by NAT_1:13;
then
A12: 2 < n by A10,XXREAL_0:2;
n <= 3 by A1,A11,Lm5;
then n < 2*1+1 by XXREAL_0:1;
hence W.m <> W.n by A12,NAT_1:13;
end;
then W is Trail-like by Lm57;
hence thesis by A3;
end;
Lm63: for G being _Graph, W being Walk of G holds W is Path-like iff W
.reverse() is Path-like
proof
let G be _Graph, W be Walk of G;
A1: now
let W be Walk of G;
reconsider lenW=len W as odd Element of NAT;
assume
A2: W is Path-like;
A3: now
let m, n be odd Element of NAT;
assume that
A4: m < n and
A5: n <= len W.reverse() and
A6: W.reverse().m = W.reverse().n;
A7: 1 <= m by ABIAN:12;
m <= len W.reverse() by A4,A5,XXREAL_0:2;
then
A8: m in dom W.reverse() by A7,FINSEQ_3:25;
then
A9: len W - m + 1 in dom W by Lm8;
then reconsider rm = lenW-m+1 as odd Element of NAT;
1 <= n by ABIAN:12;
then
A10: n in dom W.reverse() by A5,FINSEQ_3:25;
then len W - n + 1 in dom W by Lm8;
then reconsider rn = lenW-n+1 as odd Element of NAT;
lenW - n < len W - m by A4,XREAL_1:15;
then
A11: rn < rm by XREAL_1:8;
W.reverse().n = W.(len W - n + 1) by A10,Lm8;
then
A12: W.rm = W.rn by A6,A8,Lm8;
A13: rm <= len W by A9,FINSEQ_3:25;
then len W + (1 + -m) = len W by A2,A11,A12;
hence m = 1;
rn = 1 by A2,A11,A13,A12;
hence n = len W.reverse() by FINSEQ_5:def 3;
end;
W is Trail-like by A2;
then W.reverse() is Trail-like by Lm58;
hence W.reverse() is Path-like by A3;
end;
hence W is Path-like implies W.reverse() is Path-like;
assume W.reverse() is Path-like;
then W.reverse().reverse() is Path-like by A1;
hence thesis;
end;
Lm64: for G being _Graph, W being Walk of G, m, n being Element of NAT st W is
Path-like holds W.cut(m,n) is Path-like
proof
let G be _Graph, W be Walk of G, m, n be Element of NAT;
assume
A1: W is Path-like;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W;
then reconsider m9=m as odd Element of NAT;
now
W is Trail-like by A1;
hence W.cut(m,n) is Trail-like by Lm59;
let x,y be odd Element of NAT;
assume that
A3: x < y and
A4: y <= len W.cut(m,n) and
A5: W.cut(m,n).x = W.cut(m,n).y;
reconsider xaa1 = x-1 as even Element of NAT by ABIAN:12,INT_1:5;
reconsider yaa1 = y-1 as even Element of NAT by ABIAN:12,INT_1:5;
x - 1 < y - 1 by A3,XREAL_1:14;
then
A6: xaa1 + m < yaa1 + m by XREAL_1:8;
x <= len W.cut(m,n) by A3,A4,XXREAL_0:2;
then x-1 < len W.cut(m,n) - 0 by XREAL_1:15;
then
A7: W.cut(m,n).(xaa1+1) = W.(m+xaa1) by A2,Lm15;
A8: y-1 < len W.cut(m,n) - 0 by A4,XREAL_1:15;
then
A9: W.cut(m,n).(yaa1+1) = W.(m+yaa1) by A2,Lm15;
m+yaa1 in dom W by A2,A8,Lm15;
then
A10: m9+yaa1 <= len W by FINSEQ_3:25;
then
A11: m9+yaa1 = len W by A1,A5,A7,A9,A6;
A12: now
assume
A13: xaa1 <> 0;
m >= 1 by A2,ABIAN:12;
then 1+0 < m + xaa1 by A13,XREAL_1:8;
hence contradiction by A1,A5,A7,A9,A6,A10;
end;
then m + 1 - 1 = 1 by A1,A5,A7,A9,A6,A10;
then
A14: len W.cut(m,n) + 1 = n + 1 by A2,Lm15;
thus x = 1 by A12;
m9+xaa1 = 1 by A1,A5,A7,A9,A6,A10;
hence y = len W.cut(m,n) by A2,A4,A11,A12,A14,XXREAL_0:1;
end;
hence thesis;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W);
hence thesis by A1,Def11;
end;
end;
hence thesis;
end;
Lm65: for G being _Graph, W being Walk of G, e,v being object
st W is Path-like &
e Joins W.last(),v,G & not e in W.edges() & (W is trivial or W is open) & for n
being odd Element of NAT st 1 < n & n <= len W holds W.n <> v holds W.addEdge(e
) is Path-like
proof
let G be _Graph, W be Walk of G, e,v be object;
assume that
A1: W is Path-like and
A2: e Joins W.last(), v,G and
A3: not e in W.edges() and
A4: W is trivial or W is open and
A5: for n being odd Element of NAT st 1 < n & n <= len W holds W.n <> v;
reconsider lenW = len W as odd Element of NAT;
set W2 = W.addEdge(e);
A6: e in W.last().edgesInOut() by A2,GLIB_000:62;
now
W is Trail-like by A1;
hence W2 is Trail-like by A3,A6,Lm60;
let m, n be odd Element of NAT;
assume that
A7: m < n and
A8: n <= len W2 and
A9: W2.m = W2.n;
now
per cases by A4;
suppose
A10: W is open;
now
per cases;
suppose
A11: n <= len W;
A12: 1 <= m by ABIAN:12;
m <= len W by A7,A11,XXREAL_0:2;
then m in dom W by A12,FINSEQ_3:25;
then
A13: W2.m = W.m by A2,Lm38;
1 <= n by ABIAN:12;
then n in dom W by A11,FINSEQ_3:25;
then
A14: W.m = W.n by A2,A9,A13,Lm38;
then m = 1 by A1,A7,A11;
then W.first() = W.last() by A1,A7,A11,A14;
hence m = 1 & n = len W2 by A10;
end;
suppose
n > len W;
then lenW + 1 <= n by NAT_1:13;
then lenW + 1 < n by XXREAL_0:1;
then lenW + 1 + 1 <= n by NAT_1:13;
then len W + (1+1) <= n;
then
A15: len W2 <= n by A2,Lm37;
then n = len W2 by A8,XXREAL_0:1;
then W2.n = W2.(len W + 2) by A2,Lm37;
then
A16: W2.n = v by A2,Lm38;
m < len W2 by A7,A8,A15,XXREAL_0:1;
then m < len W + (1 + 1) by A2,Lm37;
then m < len W + 1 + 1;
then m <= lenW + 1 by NAT_1:13;
then m < lenW + 1 by XXREAL_0:1;
then
A17: m <= len W by NAT_1:13;
1 <= m by ABIAN:12;
then m in dom W by A17,FINSEQ_3:25;
then
A18: W.m = v by A2,A9,A16,Lm38;
now
A19: 1 <= m by ABIAN:12;
assume m <> 1;
then 1 < m by A19,XXREAL_0:1;
hence contradiction by A5,A17,A18;
end;
hence m = 1;
thus n = len W2 by A8,A15,XXREAL_0:1;
end;
end;
hence m = 1 & n = len W2;
end;
suppose
W is trivial;
then ex v being Vertex of G st W = G.walkOf(v) by Lm56;
then len W = 1 by FINSEQ_1:39;
then
A20: len W2 = 1 + 2 by A2,Lm37;
A21: m+1 <= n by A7,NAT_1:13;
A22: 1 <= m by ABIAN:12;
then 1+1 <= m+1 by XREAL_1:7;
then 2*1 <= n by A21,XXREAL_0:2;
then 2*1 < n by XXREAL_0:1;
then
A23: len W2 <= n by A20,NAT_1:13;
then n = len W2 by A8,XXREAL_0:1;
then m+1-1 <= 3-1 by A7,A20,NAT_1:13;
then m < 2*1 by XXREAL_0:1;
then m+1 <= 2 by NAT_1:13;
then m+1-1 <= 2-1 by XREAL_1:13;
hence m = 1 & n = len W2 by A8,A22,A23,XXREAL_0:1;
end;
end;
hence m = 1 & n = len W2;
end;
hence thesis;
end;
Lm66: for G be _Graph, W be Walk of G holds (for m,n being odd Element of NAT
st m <= len W & n <= len W & W.m = W.n holds m = n) implies W is Path-like
proof
let G be _Graph, W be Walk of G;
assume
A1: for m,n being odd Element of NAT st m <= len W & n <= len W & W.m =
W.n holds m = n;
now
let m,n be even Element of NAT;
assume that
A2: 1 <= m and
A3: m < n and
A4: n <= len W;
m <= len W by A3,A4,XXREAL_0:2;
then
A5: m in dom W by A2,FINSEQ_3:25;
1 <= n by A2,A3,XXREAL_0:2;
then
A6: n in dom W by A4,FINSEQ_3:25;
now
assume W.m = W.n;
then consider naa1 being odd Element of NAT such that
A7: naa1 = n-1 and
A8: n-1 in dom W and
A9: n+1 in dom W and
A10: W.m Joins W.(naa1), W.(n+1), G by A6,Lm2;
A11: naa1 <= len W by A7,A8,FINSEQ_3:25;
consider maa1 being odd Element of NAT such that
A12: maa1 = m-1 and
A13: m-1 in dom W and
A14: m+1 in dom W and
A15: W.m Joins W.(maa1), W.(m+1), G by A5,Lm2;
A16: maa1 <= len W by A12,A13,FINSEQ_3:25;
A17: n+1 <= len W by A9,FINSEQ_3:25;
A18: m+1 <= len W by A14,FINSEQ_3:25;
now
per cases by A15,A10,GLIB_000:15;
suppose
W.(naa1) = W.(maa1) & W.(n+1) = W.(m+1);
then naa1 = maa1 by A1,A16,A11;
hence contradiction by A3,A12,A7;
end;
suppose
A19: W.(naa1) = W.(m+1) & W.(n+1) = W.(maa1);
then
A20: n+1 = maa1 by A1,A16,A17;
naa1 = m+1 by A1,A18,A11,A19;
hence contradiction by A12,A7,A20;
end;
end;
hence contradiction;
end;
hence W.m <> W.n;
end;
then
A21: W is Trail-like by Lm57;
now
let m,n be odd Element of NAT;
assume that
A22: m < n and
A23: n <= len W;
assume
A24: W.m = W.n;
m <= len W by A22,A23,XXREAL_0:2;
hence m = 1 & n = len W by A1,A22,A23,A24;
end;
hence thesis by A21;
end;
Lm67: for G be _Graph, W be Walk of G holds (for n being odd Element of NAT st
n <= len W holds W.rfind(n) = n) implies W is Path-like
proof
let G be _Graph, W be Walk of G;
assume
A1: for n being odd Element of NAT st n <= len W holds W.rfind(n) = n;
now
let m,n be odd Element of NAT;
assume that
A2: m <= len W and
A3: n <= len W and
A4: W.m = W.n;
W.rfind(n) = n by A1,A3;
then
A5: m <= n by A2,A3,A4,Def22;
W.rfind(m) = m by A1,A2;
then n <= m by A2,A3,A4,Def22;
hence m = n by A5,XXREAL_0:1;
end;
hence thesis by Lm66;
end;
Lm68: for G be _Graph, W being Walk of G, e, v being object
st e Joins W.last(),v
,G & W is Path-like & not v in W.vertices() & (W is trivial or W is open) holds
W.addEdge(e) is Path-like
proof
let G be _Graph, W be Walk of G, e, v be object;
assume that
A1: e Joins W.last(),v,G and
A2: W is Path-like and
A3: not v in W.vertices() and
A4: W is trivial or W is open;
A5: for n being odd Element of NAT st 1 < n & n <= len W holds v <> W.n by A3
,Lm45;
not e in W.edges() by A1,A3,Lm48;
hence thesis by A1,A2,A4,A5,Lm65;
end;
Lm69: for G be _Graph, W be Walk of G holds len W <= 3 implies W is Path-like
proof
let G be _Graph, W be Walk of G;
assume
A1: len W <= 3;
now
per cases;
suppose
len W = 1;
then W is trivial by Lm55;
then ex v being Vertex of G st W = G.walkOf(v) by Lm56;
hence thesis by Lm4;
end;
suppose
A2: len W <> 1;
1 <= len W by ABIAN:12;
then 1 < len W by A2,XXREAL_0:1;
then 1+2 <= len W by Th1,JORDAN12:2;
then
A3: len W = 3 by A1,XXREAL_0:1;
A4: now
let m, n be odd Element of NAT;
assume that
A5: m < n and
A6: n <= len W and
W.m = W.n;
A7: 1 <= m by ABIAN:12;
m < 2*1+1 by A3,A5,A6,XXREAL_0:2;
then m+2-2 <= 3-2 by Th1;
hence m = 1 by A7,XXREAL_0:1;
2*0+1 < n by A5,A7,XXREAL_0:2;
then 1+2 <= n by Th1;
hence n = len W by A3,A6,XXREAL_0:1;
end;
W is Trail-like by A1,Lm61;
hence thesis by A4;
end;
end;
hence thesis;
end;
registration
let G be _Graph;
cluster Path-like -> Trail-like for Walk of G;
correctness;
cluster trivial -> Path-like for Walk of G;
correctness
proof
let W be Walk of G;
assume
A1: W is trivial;
A2: now
let m,n be odd Element of NAT;
assume that
A3: m < n and
A4: n <= len W and
W.m = W.n;
A5: 1 <= m by ABIAN:12;
A6: 1 <= n by ABIAN:12;
n <= 1 by A1,A4,Lm55;
hence m = 1 & n = len W by A3,A5,A6,XXREAL_0:1;
end;
len W = 1 by A1,Lm55;
then 2*len W.edgeSeq() + 1 = 0+1 by Def15;
then W.edgeSeq() = {};
then W is Trail-like;
hence thesis by A2;
end;
cluster trivial -> vertex-distinct for Walk of G;
coherence
proof
let W be Walk of G;
assume
A7: W is trivial;
now
let m,n be odd Element of NAT;
assume that
A8: m <= len W and
A9: n <= len W and
W.m = W.n;
A10: 1 <= m by ABIAN:12;
m <= 1 by A7,A8,Lm55;
then
A11: m = 1 by A10,XXREAL_0:1;
A12: 1 <= n by ABIAN:12;
n <= 1 by A7,A9,Lm55;
hence m = n by A12,A11,XXREAL_0:1;
end;
hence thesis;
end;
cluster vertex-distinct -> Path-like for Walk of G;
coherence
by Lm66;
cluster Circuit-like -> closed Trail-like non trivial for Walk of G;
correctness;
cluster Cycle-like -> closed Path-like non trivial for Walk of G;
correctness;
end;
registration
let G be _Graph;
cluster closed directed trivial for Walk of G;
existence
proof
set v = the Vertex of G;
take G.walkOf(v);
thus thesis by Lm4;
end;
end;
registration
let G be _Graph;
cluster vertex-distinct for Walk of G;
existence
proof
set W = the trivial Walk of G;
take W;
thus thesis;
end;
end;
definition
let G be _Graph;
mode Trail of G is Trail-like Walk of G;
mode Path of G is Path-like Walk of G;
end;
definition
let G be _Graph;
mode DWalk of G is directed Walk of G;
mode DTrail of G is directed Trail of G;
mode DPath of G is directed Path of G;
end;
registration
let G be _Graph, v be Vertex of G;
cluster G.walkOf(v) -> closed directed trivial;
coherence by Lm4;
end;
registration
let G be _Graph, x,e,y be object;
cluster G.walkOf(x,e,y) -> Path-like;
coherence
proof
set W = G.walkOf(x,e,y);
now
per cases;
suppose
e Joins x,y,G;
hence thesis by Lm62;
end;
suppose
not e Joins x,y,G;
then W = G.walkOf(the Element of the_Vertices_of G) by Def5;
hence thesis;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, x,e be object;
cluster G.walkOf(x,e,x) -> closed;
coherence
proof
set W = G.walkOf(x,e,x);
now
per cases;
suppose
A1: e Joins x,x,G;
then
A2: W.last() = x by Lm6;
W.first() = x by A1,Lm6;
hence thesis by A2;
end;
suppose
not e Joins x,x,G;
then W = G.walkOf(the Element of the_Vertices_of G) by Def5;
hence thesis;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be closed Walk of G;
cluster W.reverse() -> closed;
coherence
proof
W is closed iff W.reverse().last() = W.last() by Lm7;
then W is closed iff W.reverse().last() = W.reverse().first() by Lm7;
hence thesis;
end;
end;
registration
let G be _Graph, W be trivial Walk of G;
cluster W.reverse() -> trivial;
coherence
proof
len W = 1 by Lm55;
then len W.reverse() = 1 by FINSEQ_5:def 3;
hence thesis by Lm55;
end;
end;
registration
let G be _Graph, W be Trail of G;
cluster W.reverse() -> Trail-like;
coherence by Lm58;
end;
registration
let G be _Graph, W be Path of G;
cluster W.reverse() -> Path-like;
coherence by Lm63;
end;
registration
let G be _Graph, W1,W2 be closed Walk of G;
cluster W1.append(W2) -> closed;
coherence
proof
set W = W1.append(W2);
now
per cases;
suppose
A1: W1.last() = W2.first();
then W1.last() = W2.last() by Def24;
then W1.first() = W2.last() by Def24
.= W.last() by A1,Lm11;
then W.first() = W.last() by A1,Lm11;
hence thesis;
end;
suppose
W1.last() <> W2.first();
hence thesis by Def10;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W1,W2 be DWalk of G;
cluster W1.append(W2) -> directed;
coherence
proof
set W = W1.append(W2);
now
per cases;
suppose
A1: W1.last() = W2.first();
now
let n be odd Element of NAT;
assume
A2: n < len W;
1 <= n by ABIAN:12;
then
A3: n in dom W by A2,FINSEQ_3:25;
now
per cases by A3,Lm14;
suppose
A4: n in dom W1;
then
A5: n <= len W1 by FINSEQ_3:25;
A6: W.n = W1.n by A4,Lm12;
now
per cases by A5,XXREAL_0:1;
suppose
A7: n < len W1;
then n+2 in dom W1 by Lm3;
then
A8: W.(n+2) = W1.(n+2) by Lm12;
n+1 in dom W1 by A7,Lm3;
then W.(n+1) = W1.(n+1) by Lm12;
hence W.(n+1) DJoins W.n, W.(n+2), G by A6,A7,A8,Lm51;
end;
suppose
A9: n = len W1;
n + 1 < len W + 1 by A2,XREAL_1:8;
then 1 + n < len W2 + n by A1,A9,Lm9;
then
A10: 1 < len W2 by XREAL_1:6;
then
A11: W2.(2*0+1+1) DJoins W2.(2*0+1), W2.(2*0+1+2), G by Lm51;
A12: n = len W1 + 0 by A9;
A13: 0 < len W2;
1+1 <= len W2 by A10,NAT_1:13;
then 2*1 < len W2 by XXREAL_0:1;
then
A14: W.(n+2) = W2.(2+1) by A1,A9,Lm13;
W.(n+1) = W2.(1+1) by A1,A9,A10,Lm13;
hence W.(n+1) DJoins W.n, W.(n+2), G by A1,A13,A12,A14,A11
,Lm13;
end;
end;
hence W.(n+1) DJoins W.n, W.(n+2), G;
end;
suppose
ex k being Element of NAT st k < len W2 & n = len W1 + k;
then consider k being Element of NAT such that
A15: k < len W2 and
A16: n = len W1 + k;
reconsider k as even Element of NAT by A16;
A17: W.n = W2.(k+1) by A1,A15,A16,Lm13;
n + 1 < len W + 1 by A2,XREAL_1:8;
then 1 + (k + len W1) < len W2 + len W1 by A1,A16,Lm9;
then
A18: k + 1 + len W1 - len W1 < len W2 + len W1 - len W1 by XREAL_1:14;
then k + 1 + 1 <= len W2 by NAT_1:13;
then
A19: k + 1 + 1 < len W2 by XXREAL_0:1;
A20: n + 1 + 1 = len W1 + ((k + 1) + 1) by A16;
A21: W2.(k+1+(1+1)) = W2.(k+1+1+1) .= W.(n+(1+1)) by A1,A19,A20,Lm13;
W.(n+1) = W2.(k+1+1) by A1,A16,A18,Lm13;
hence W.(n+1) DJoins W.n, W.(n+2), G by A17,A18,A21,Lm51;
end;
end;
hence W.(n+1) DJoins W.n, W.(n+2), G;
end;
hence thesis by Lm51;
end;
suppose
W1.last() <> W2.first();
hence thesis by Def10;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W1,W2 be trivial Walk of G;
cluster W1.append(W2) -> trivial;
coherence
proof
set W = W1.append(W2);
now
per cases;
suppose
W1.last() = W2.first();
then len W + 1 = len W1 + len W2 by Lm9
.= len W1 + 1 by Lm55
.= 1 + 1 by Lm55;
hence thesis by Lm55;
end;
suppose
W1.last() <> W2.first();
hence thesis by Def10;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be DWalk of G, m,n be Element of NAT;
cluster W.cut(m,n) -> directed;
coherence by Lm53;
end;
registration
let G be _Graph, W be trivial Walk of G, m,n be Element of NAT;
cluster W.cut(m,n) -> trivial;
coherence
proof
set W2 = W.cut(m,n);
now
per cases;
suppose
A1: m is odd & n is odd & m <= n & n <= len W;
then
A2: 1 <= n by ABIAN:12;
n <= 1 by A1,Lm55;
then
A3: n = 1 by A2,XXREAL_0:1;
A4: 1 <= m by A1,ABIAN:12;
len W2 + m = n + 1 by A1,Lm15;
then len W2 + 1 = 1 + 1 by A1,A4,A3,XXREAL_0:1;
hence thesis by Lm55;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W);
hence thesis by Def11;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be Trail of G, m,n be Element of NAT;
cluster W.cut(m,n) -> Trail-like;
coherence by Lm59;
end;
registration
let G be _Graph, W be Path of G, m,n be Element of NAT;
cluster W.cut(m,n) -> Path-like;
coherence by Lm64;
end;
registration
let G be _Graph, W be vertex-distinct Walk of G, m,n be Element of NAT;
cluster W.cut(m,n) -> vertex-distinct;
coherence
proof
set W2 = W.cut(m,n);
now
per cases;
suppose
A1: m is odd & n is odd & m <= n & n <= len W;
then reconsider m9 = m as odd Element of NAT;
now
let a,b be odd Element of NAT;
assume that
A2: a <= len W2 and
A3: b <= len W2 and
A4: W2.a = W2.b;
reconsider aaa1 = a-1, baa1 = b-1 as even Element of NAT by ABIAN:12
,INT_1:5;
A5: baa1 < len W2 - 0 by A3,XREAL_1:15;
then
A6: W2.(baa1+1) = W.(m+baa1) by A1,Lm15;
A7: aaa1 < len W2 - 0 by A2,XREAL_1:15;
then m+aaa1 in dom W by A1,Lm15;
then
A8: m9+aaa1 <= len W by FINSEQ_3:25;
m+baa1 in dom W by A1,A5,Lm15;
then
A9: m9 + baa1 <= len W by FINSEQ_3:25;
W2.(aaa1+1) = W.(m+aaa1) by A1,A7,Lm15;
then aaa1+m9 = baa1 + m9 by A4,A6,A8,A9,Def29;
hence a = b;
end;
hence thesis;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W);
hence thesis by Def11;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be closed Walk of G, m,n be Element of NAT;
cluster W.remove(m,n) -> closed;
coherence
proof
thus W.remove(m,n).first() = W.first() by Lm33
.= W.last() by Def24
.= W.remove(m,n).last() by Lm33;
end;
end;
registration
let G be _Graph, W be DWalk of G, m,n be Element of NAT;
cluster W.remove(m,n) -> directed;
coherence
proof
now
per cases;
suppose
m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then W.remove(m,n) = W.cut(1,m).append(W.cut(n,len W)) by Def12;
hence thesis;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
hence thesis by Def12;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be trivial Walk of G, m,n be Element of NAT;
cluster W.remove(m,n) -> trivial;
coherence
proof
now
per cases;
suppose
m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then W.remove(m,n) = W.cut(1,m).append(W.cut(n,len W)) by Def12;
hence thesis;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
hence thesis by Def12;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be Trail of G, m,n be Element of NAT;
cluster W.remove(m,n) -> Trail-like;
coherence
proof
set W2 = W.remove(m,n);
A1: len W2 <= len W by Lm26;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then reconsider m9=m, n9=n as odd Element of NAT;
now
given a,b being even Element of NAT such that
A3: 1 <= a and
A4: a < b and
A5: b <= len W2 and
A6: W2.a = W2.b;
1 <= b by A3,A4,XXREAL_0:2;
then
A7: b in dom W2 by A5,FINSEQ_3:25;
a <= len W2 by A4,A5,XXREAL_0:2;
then
A8: a in dom W2 by A3,FINSEQ_3:25;
now
per cases by A2,A8,Lm34;
suppose
a in Seg m;
then
A9: W2.a = W.a by A2,Lm29;
now
per cases by A2,A7,Lm34;
suppose
A10: b in Seg m;
A11: b <= len W by A1,A5,XXREAL_0:2;
W2.b = W.b by A2,A10,Lm29;
hence contradiction by A3,A4,A6,A9,A11,Lm57;
end;
suppose
A12: m <= b & b <= len W2;
then reconsider b2 = b-m9+n9 as even Element of NAT by A2
,Lm30;
A13: b2 <= len W by A2,A12,Lm30;
A14: W2.b = W.b2 by A2,A12,Lm30;
now
per cases;
suppose
a < b2;
hence contradiction by A3,A6,A9,A14,A13,Lm57;
end;
suppose
A15: b2 <= a;
A16: n-m >= m-m by A2,XREAL_1:13;
A17: a-b < b-b by A4,XREAL_1:14;
(n-m)+b-b <= a-b by A15,XREAL_1:13;
then 0 <= a-b by A16;
hence contradiction by A17;
end;
end;
hence contradiction;
end;
end;
hence contradiction;
end;
suppose
A18: m <= a & a <= len W2;
then reconsider a2 = a-m9+n9 as even Element of NAT by A2,Lm30;
reconsider nm4 = n9-m9 as even Element of NAT by A2,INT_1:5;
A19: W2.a = W.a2 by A2,A18,Lm30;
now
per cases by A2,A7,Lm34;
suppose
b in Seg m;
then b <= m by FINSEQ_1:1;
hence contradiction by A4,A18,XXREAL_0:2;
end;
suppose
A20: m <= b & b <= len W2;
then reconsider b2 = b-m9+n9 as even Element of NAT by A2
,Lm30;
A21: b2 <= len W by A2,A20,Lm30;
A22: W2.b = W.b2 by A2,A20,Lm30;
now
per cases;
suppose
A23: a2 < b2;
1 <= m9 by ABIAN:12;
then 1 <= a by A18,XXREAL_0:2;
then 1 <= a+nm4 by NAT_1:12;
hence contradiction by A6,A19,A22,A21,A23,Lm57;
end;
suppose
b2 <= a2;
then b + nm4 <= a + nm4;
hence contradiction by A4,XREAL_1:6;
end;
end;
hence contradiction;
end;
end;
hence contradiction;
end;
end;
hence contradiction;
end;
hence thesis by Lm57;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
hence thesis by Def12;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be Path of G, m,n be Element of NAT;
cluster W.remove(m,n) -> Path-like;
coherence
proof
set W2 = W.remove(m,n);
A1: len W2 <= len W by Lm26;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then reconsider m9=m, n9=n as odd Element of NAT;
now
let x,y be odd Element of NAT;
assume that
A3: x < y and
A4: y <= len W2 and
A5: W2.x = W2.y;
A6: 1 <= x by ABIAN:12;
x <= len W2 by A3,A4,XXREAL_0:2;
then
A7: x in dom W2 by A6,FINSEQ_3:25;
1 <= y by ABIAN:12;
then
A8: y in dom W2 by A4,FINSEQ_3:25;
A9: y <= len W by A1,A4,XXREAL_0:2;
now
per cases by A2,A7,Lm34;
suppose
x in Seg m;
then
A10: W2.x = W.x by A2,Lm29;
now
per cases by A2,A8,Lm34;
suppose
y in Seg m;
then
A11: W2.y = W.y by A2,Lm29;
then y = len W by A3,A5,A9,A10,Def28;
hence x = 1 & y = len W2 by A1,A3,A4,A5,A10,A11,Def28,
XXREAL_0:1;
end;
suppose
A12: m <= y & y <= len W2;
then
A13: y-m+n <= len W by A2,Lm30;
A14: W2.y = W.(y-m+n) by A2,A12,Lm30;
reconsider y2 = y-m9+n9 as odd Element of NAT by A2,A12,Lm30;
y-m + n >= y-m+m by A2,XREAL_1:7;
then
A15: x < y2 by A3,XXREAL_0:2;
y2 <= len W by A2,A12,Lm30;
then y2 = len W by A5,A10,A14,A15,Def28;
then len W2 + n = y -m + n + m by A2,Lm24
.= y + n;
hence x = 1 & y = len W2 by A5,A10,A14,A13,A15,Def28;
end;
end;
hence x = 1 & y = len W2;
end;
suppose
A16: m <= x & x <= len W2;
then reconsider x2 = x-m9+n9 as odd Element of NAT by A2,Lm30;
A17: W2.x = W.(x-m+n) by A2,A16,Lm30;
now
per cases by A2,A8,Lm34;
suppose
y in Seg m;
then y <= m by FINSEQ_1:1;
hence x = 1 & y = len W2 by A3,A16,XXREAL_0:2;
end;
suppose
A18: m <= y & y <= len W2;
then reconsider y2 = y-m9+n9 as odd Element of NAT by A2,Lm30
;
x + (n - m) < y + (n-m) by A3,XREAL_1:8;
then
A19: x2 < y2;
reconsider xm4 = x-m as Element of NAT by A16,INT_1:5;
A20: 1 <= n9 by ABIAN:12;
A21: 1 <= m9 by ABIAN:12;
A22: y-m+n <= len W by A2,A18,Lm30;
A23: W2.y = W.(y-m+n) by A2,A18,Lm30;
then y2 = len W by A5,A17,A22,A19,Def28;
then
A24: len W2 + n = y -m + n + m by A2,Lm24
.= y + n;
x2 = 1 by A5,A17,A23,A22,A19,Def28;
then x2 - n9 <= 1-1 by A20,XREAL_1:13;
then
A25: xm4 = 0;
then m <= 1 by A2,A5,A17,A23,A22,A19,Def28;
hence x = 1 & y = len W2 by A24,A25,A21,XXREAL_0:1;
end;
end;
hence x = 1 & y = len W2;
end;
end;
hence x = 1 & y = len W2;
end;
hence thesis;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
hence thesis by Def12;
end;
end;
hence thesis;
end;
end;
definition
let G be _Graph, W be Walk of G;
mode Subwalk of W -> Walk of G means
:Def32:
it is_Walk_from W.first(), W
.last() & ex es being Subset of W.edgeSeq() st it.edgeSeq() = Seq es;
existence
proof
reconsider es = W.edgeSeq() as Subset of W.edgeSeq() by FINSEQ_6:152;
take W;
thus W is_Walk_from W.first(), W.last();
take es;
thus thesis by FINSEQ_3:116;
end;
end;
Lm70: for G being _Graph, W being Walk of G holds W is Subwalk of W
proof
let G be _Graph, W be Walk of G;
reconsider es = W.edgeSeq() as Subset of W.edgeSeq() by FINSEQ_6:152;
A1: W.edgeSeq() = Seq es by FINSEQ_3:116;
W is_Walk_from W.first(),W.last();
hence thesis by A1,Def32;
end;
Lm71: for G be _Graph, W1 be Walk of G, W2 be Subwalk of W1, W3 be Subwalk of
W2 holds W3 is Subwalk of W1
proof
let G be _Graph, W1 be Walk of G, W2 be Subwalk of W1, W3 be Subwalk of W2;
set fs = W1.edgeSeq(),fs1 = W2.edgeSeq(),fs2 = W3.edgeSeq();
consider fss1 being Subset of fs1 such that
A1: fs2 = Seq fss1 by Def32;
consider fss being Subset of fs such that
A2: fs1 = Seq fss by Def32;
set fss2 = fss | rng((Sgm dom fss)|dom fss1);
reconsider fss2 as Subset of fs by FINSEQ_6:153;
A3: fs2 = Seq fss2 by A1,A2,FINSEQ_6:154;
A4: W2 is_Walk_from W1.first(), W1.last() by Def32;
then
A5: W2.last() = W1.last();
W2.first() = W1.first() by A4;
hence thesis by A5,A3,Def32;
end;
Lm72: for G be _Graph, W1,W2 be Walk of G holds W1 is Subwalk of W2 implies
len W1 <= len W2
proof
let G be _Graph, W1,W2 be Walk of G;
assume W1 is Subwalk of W2;
then ex es being Subset of W2.edgeSeq() st W1.edgeSeq() = Seq es by Def32;
then 2*len W1.edgeSeq() <= 2*len W2.edgeSeq() by Th2,XREAL_1:64;
then 2*len W1.edgeSeq()+1 <= 2*len W2.edgeSeq() + 1 by XREAL_1:7;
then len W1 <= 2*len W2.edgeSeq() + 1 by Def15;
hence thesis by Def15;
end;
definition
let G be _Graph, W be Walk of G, m,n being Element of NAT;
redefine func W.remove(m,n) -> Subwalk of W; :: redefines .remove (GLIB_001, definition)
coherence
proof
set W2 = W.remove(m,n), es1 = W2.edgeSeq();
now
per cases;
suppose
A1: m is odd & n is odd & m <= n & n <= len W & W.m = W.n;
then reconsider m9=m, n9=n as odd Element of NAT;
reconsider lenWn4 = len W - n9 as even Element of NAT by A1,INT_1:5;
A2: Seg len es1 = dom es1 by FINSEQ_1:def 3;
reconsider lenWaa1 = len W - 1 as even Element of NAT
by ABIAN:12,INT_1:5;
reconsider n1 = n9+1 as even Element of NAT;
reconsider maa1 = m9-1 as even Element of NAT by ABIAN:12,INT_1:5;
set X = {x where x is Nat : 1 <= x & x <= maa1 div 2};
set Y = {x where x is Nat : n1 div 2 <= x & x <= lenWaa1
div 2};
set Z = X \/ Y, es = W.edgeSeq() | Z;
2 divides maa1 by PEPIN:22;
then
A3: maa1 = 2 * (maa1 div 2) by NAT_D:3;
2 divides n1 by PEPIN:22;
then
A4: n1 = 2 * (n1 div 2) by NAT_D:3;
now
assume n1 div 2 < 1;
then 2*(n1 div 2) < 2*1 by XREAL_1:68;
then n + 1 - 1 < 2 - 1 by A4,XREAL_1:14;
then n9 < 1;
hence contradiction by ABIAN:12;
end;
then
reconsider n1div2aa1 = (n1 div 2) - 1 as Element of NAT by INT_1:5;
A5: 2 divides lenWaa1 by PEPIN:22;
then
A6: lenWaa1 = 2 * (lenWaa1 div 2) by NAT_D:3;
now
let x be object;
assume
A7: x in Z;
now
per cases by A7,XBOOLE_0:def 3;
suppose
x in X;
then consider y being Nat such that
A8: y = x and
A9: 1 <= y and
A10: y <= maa1 div 2;
2*y <= maa1 by A3,A10,XREAL_1:64;
then 2*y <= maa1+1 by NAT_1:12;
then 2*y <= n by A1,XXREAL_0:2;
then
A11: 2*y <= len W by A1,XXREAL_0:2;
1 <= y+y by A9,NAT_1:12;
then 2*y in dom W by A11,FINSEQ_3:25;
hence x in dom W.edgeSeq() by A8,Lm41;
end;
suppose
x in Y;
then consider y being Nat such that
A12: y = x and
A13: n1 div 2 <= y and
A14: y <= lenWaa1 div 2;
2*y <= lenWaa1 by A6,A14,XREAL_1:64;
then
A15: 2*y <= lenWaa1+1 by NAT_1:12;
A16: 1 <= n1 by NAT_1:12;
n1 <= 2*y by A4,A13,XREAL_1:64;
then 1 <= 2*y by A16,XXREAL_0:2;
then 2*y in dom W by A15,FINSEQ_3:25;
hence x in dom W.edgeSeq() by A12,Lm41;
end;
end;
hence x in dom W.edgeSeq();
end;
then
A17: Z c= dom W.edgeSeq() by TARSKI:def 3;
then
A18: Z c= Seg len W.edgeSeq() by FINSEQ_1:def 3;
then
a18: Z is included_in_Seg by FINSEQ_1:def 13;
X c= Seg len W.edgeSeq() by A18,XBOOLE_1:11;
then
a19: X is included_in_Seg by FINSEQ_1:def 13;
Y c= Seg len W.edgeSeq() by A18,XBOOLE_1:11;
then
a20: Y is included_in_Seg by FINSEQ_1:def 13;
reconsider X,Y as finite set by A18,FINSET_1:1,XBOOLE_1:11;
A21: X = {x where x is Nat : 0+1 <= x & x <= 0+(maa1 div 2 )};
dom W.edgeSeq() /\ Z = Z by A17,XBOOLE_1:28;
then
A23: dom es = Z by RELAT_1:61;
2 divides lenWn4 by PEPIN:22;
then
A24: lenWn4 = 2 * (lenWn4 div 2) by NAT_D:3;
A25: now
per cases;
suppose
A26: n1 div 2 > lenWaa1 div 2;
then lenWaa1 < n+1 by A6,A4,XREAL_1:68;
then lenWaa1 + 1 <= n+1 by NAT_1:13;
then len W <= n9+1;
then len W < n+1 by XXREAL_0:1;
then len W <= n by NAT_1:13;
then
A27: len W = n by A1,XXREAL_0:1;
now
assume Y <> {};
then consider x being object such that
A28: x in Y by XBOOLE_0:def 1;
ex x9 being Nat st x9 = x & n1 div 2 <= x9 &
x9 <= lenWaa1 div 2 by A28;
hence contradiction by A26,XXREAL_0:2;
end;
hence card Y = lenWn4 div 2 by A27;
end;
suppose
n1 div 2 <= lenWaa1 div 2;
then reconsider
k = (lenWaa1 div 2) - (n1 div 2) as Element of NAT by INT_1:5;
Y = {x where x is Nat: n1 div 2 <= x & x <= n1 div
2 + k};
then card Y = k+1 by FINSEQ_6:130;
hence card Y = lenWn4 div 2 by A24,A6,A4;
end;
end;
reconsider Z as finite set by A17;
W.edgeSeq() is Subset of W.edgeSeq() by FINSEQ_6:152;
then reconsider es as Subset of W.edgeSeq() by FINSEQ_6:153;
set es2 = Seq es;
A29: es2 = es * Sgm(dom es) by FINSEQ_1:def 15;
set lenY = lenWaa1 div 2 - n1div2aa1;
now
assume n1div2aa1 > lenWaa1 div 2;
then 2*n1div2aa1 > 2 * (lenWaa1 div 2) by XREAL_1:68;
then n+1 - 1 - 1 > len W - 1 by A5,A4,NAT_D:3;
hence contradiction by A1,XREAL_1:9;
end;
then reconsider lenY as Element of NAT by INT_1:5;
A30: Y = {x where x is Nat: n1div2aa1+1 <= x & x <=
n1div2aa1+lenY};
A31: now
let a,b be Nat;
assume that
A32: a in X and
A33: b in Y;
consider b9 being Nat such that
A34: b9=b and
A35: n1 div 2 <= b9 and
b9 <= lenWaa1 div 2 by A33;
consider a9 being Nat such that
A36: a9=a and
1 <= a9 and
A37: a9 <= maa1 div 2 by A32;
2*a9 <= maa1 by A3,A37,XREAL_1:64;
then 2*a9 < maa1+1 by NAT_1:13;
then 2*a9 < n by A1,XXREAL_0:2;
then
A38: 2*a9+0 < n+1 by XREAL_1:8;
A39: n+1 <= 2*b9 by A4,A35,XREAL_1:64;
then 2*a9 < 2*b9 by A38,XXREAL_0:2;
then a9 <= b9 by XREAL_1:68;
hence a < b by A36,A34,A38,A39,XXREAL_0:1;
end;
A40: now
per cases;
suppose
A41: maa1 div 2 = 0;
now
assume X <> {};
then consider x being object such that
A42: x in X by XBOOLE_0:def 1;
ex x9 being Nat st x9 = x & 1 <= x9 & x9 <=
maa1 div 2 by A42;
hence contradiction by A41;
end;
hence card X = maa1 div 2 by A41;
end;
suppose
maa1 div 2 <> 0;
then consider k being Nat such that
A43: maa1 div 2 = k + 1 by NAT_1:6;
reconsider k as Element of NAT by ORDINAL1:def 12;
maa1 div 2 = k + 1 by A43;
hence card X = maa1 div 2 by FINSEQ_6:130;
end;
end;
then
A44: dom Sgm X = Seg (maa1 div 2) by a19,FINSEQ_3:40;
then
A45: len (Sgm X) = maa1 div 2 by FINSEQ_1:def 3;
len W2 = 2*len W2.edgeSeq()+1 by Def15;
then
A46: len W + m - n = 2*len es1 + 1 by A1,Lm31;
now
assume not X /\ Y = {};
then consider x being object such that
A47: x in X /\ Y by XBOOLE_0:def 1;
x in Y by A47,XBOOLE_0:def 4;
then consider y9 being Nat such that
A48: y9 = x and
A49: n1 div 2 <= y9 and
y9 <= lenWaa1 div 2;
x in X by A47,XBOOLE_0:def 4;
then consider x9 being Nat such that
A50: x9 = x and
1 <= x9 and
A51: x9 <= maa1 div 2;
2*x9 <= maa1 by A3,A51,XREAL_1:64;
then 2*y9 < maa1+1 by A50,A48,NAT_1:13;
then 2*y9 < n by A1,XXREAL_0:2;
then 2*y9+0 < n+1 by XREAL_1:8;
hence contradiction by A4,A49,XREAL_1:64;
end;
then X misses Y by XBOOLE_0:def 7;
then
A52: card Z = (maa1 div 2) + (lenWn4 div 2) by A40,A25,CARD_2:40;
rng Sgm(dom es) = dom es by FINSEQ_1:def 14;
then
A53: dom es2 = dom Sgm(Z) by A23,A29,RELAT_1:27
.= Seg card Z by a18,FINSEQ_3:40;
A54: dom Sgm Y = Seg (lenWn4 div 2) by a20,A25,FINSEQ_3:40;
now
let x9 be object;
assume
A55: x9 in dom es1;
then reconsider x = x9 as Element of NAT;
A56: 1 <= x by A55,FINSEQ_3:25;
A57: x <= len es1 by A55,FINSEQ_3:25;
then
A58: es1.x = W2.(2*x) by A56,Def15;
now
per cases;
suppose
A59: 2*x+1 <= m;
A60: 1 <= x+x by A56,NAT_1:12;
2*x+1-1 < m - 0 by A59,XREAL_1:15;
then 2*x in Seg m by A60,FINSEQ_1:1;
then
A61: es1.x9 = W.(2*x) by A1,A58,Lm29;
A62: Sgm(Z).x = (Sgm(X) ^ Sgm(Y)).x by a19,a20,A31,FINSEQ_3:42;
2*x+1-1 <= maa1 by A59,XREAL_1:13;
then
A63: x <= maa1 div 2 by A3,XREAL_1:68;
then x in X by A56;
then
A64: x in dom es by A23,XBOOLE_0:def 3;
x in dom Sgm X by A44,A56,A63,FINSEQ_1:1;
then Sgm(Z).x = Sgm(X).x by A62,FINSEQ_1:def 7
.= 0+x by A21,A56,A63,FINSEQ_6:131;
then
es2.x = es.x by A3,A24,A23,A2,A29,A53,A46,A52,A55,FUNCT_1:12;
then
A65: es2.x = W.edgeSeq().x by A64,FUNCT_1:47;
x <= len W.edgeSeq() by A23,A18,A64,FINSEQ_1:1;
hence es1.x9 = es2.x9 by A56,A61,A65,Def15;
end;
suppose
A66: 2*x+1 > m;
A67: now
assume x <= maa1 div 2;
then 2*x <= maa1 by A3,XREAL_1:64;
then 2*x+1 <= maa1+1 by XREAL_1:7;
hence contradiction by A66;
end;
then consider k being Nat such that
A68: x = maa1 div 2 + k by NAT_1:10;
A69: Sgm(Z).x = (Sgm(X) ^ Sgm(Y)).x by a19,a20,A31,FINSEQ_3:42;
A70: ex lenWaa19 being even Element of NAT st lenWaa19 =
lenWaa1 & len W.edgeSeq() = lenWaa19 div 2 by Lm42;
2*x <= 2*len es1 by A57,XREAL_1:64;
then 2*x <= 2*len es1 + 1 by NAT_1:12;
then
A71: 2*x <= len W2 by Def15;
reconsider k as Element of NAT by ORDINAL1:def 12;
A72: 2*(n1div2aa1 + k) = 2*x - m + n by A3,A4,A68;
A73: m <= 2*x by A66,NAT_1:13;
then
A74: 2*x-m+n <= len W by A1,A71,Lm30;
A75: now
reconsider z = 2*x-m9+n9 as Element of NAT by A1,A73,A71,Lm30;
assume lenWaa1 div 2 < k + n1div2aa1;
then lenWaa1 < 2*(x - (maa1 div 2) + n1div2aa1) by A6,A68,
XREAL_1:68;
then lenWaa1 + 1 < 2*x-m+n+1 by A3,A4,XREAL_1:8;
then len W <= z by NAT_1:13;
hence contradiction by A74,XXREAL_0:1;
end;
k <> 0 by A67,A68;
then 0+1 < k+1 by XREAL_1:8;
then
A76: 1 <= k by NAT_1:13;
then n1div2aa1 + 1 <= n1div2aa1 + k by XREAL_1:7;
then n1div2aa1 + k in Y by A75;
then n1div2aa1+k in dom es by A23,XBOOLE_0:def 3;
then
A77: es.(n1div2aa1+k) = W.edgeSeq().(n1div2aa1+k) by FUNCT_1:47;
A78: now
set z = 2*x-m9+n9;
reconsider z as Element of NAT by A1,A73,A71,Lm30;
assume lenWn4 div 2 < x - (maa1 div 2);
then 2 * (lenWn4 div 2) < 2*(x - (maa1 div 2)) by XREAL_1:68;
then
A79: lenWn4 + n < 2*x - m + 1 + n by A3,A24,XREAL_1:8;
2*x-m9+n9 < len W by A74,XXREAL_0:1;
then z+1 <= len W by NAT_1:13;
hence contradiction by A79;
end;
then k in dom Sgm(Y) by A54,A68,A76,FINSEQ_1:1;
then Sgm(Z).x = Sgm(Y).k by A45,A69,A68,FINSEQ_1:def 7
.= n1div2aa1 + k by A24,A6,A4,A30,A68,A76,A78,FINSEQ_6:131;
then
A80: es2.x = es.(n1div2aa1 + k) by A3,A24,A23,A2,A29,A53,A46,A52,A55,
FUNCT_1:12;
1 <= n1div2aa1+k by A76,NAT_1:12;
then es2.x = W.(2*(n1div2aa1+k)) by A80,A75,A77,A70,Def15;
hence es1.x9 = es2.x9 by A1,A58,A73,A71,A72,Lm30;
end;
end;
hence es1.x9 = es2.x9;
end;
then
A81: W2.edgeSeq() = Seq es by A3,A24,A2,A53,A46,A52,FUNCT_1:2;
W is_Walk_from W.first(), W.last();
then W2 is_Walk_from W.first(), W.last() by Lm25;
hence thesis by A81,Def32;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W & W.m = W.n);
then W.remove(m,n) = W by Def12;
hence thesis by Lm70;
end;
end;
hence thesis;
end;
end;
registration
let G be _Graph, W be Walk of G;
cluster Trail-like Path-like for Subwalk of W;
existence
proof
set n = len W + 1;
defpred P1[Nat,set,set] means ($2 is Walk of G & ex Wn being
Walk of G st Wn = $2 & $3 = Wn.remove(Wn.find(2*$1+1),Wn.rfind(2*$1+1))) or (
not $2 is Walk of G & $3 = $2);
A1: now
let n be Nat, x be set;
now
per cases;
suppose
x is Walk of G;
then reconsider W = x as Walk of G;
set y = W.remove(W.find(2*n+1),W.rfind(2*n+1));
P1[n,x,y];
hence ex y being set st P1[n,x,y];
end;
suppose
not x is Walk of G;
hence ex y being set st P1[n,x,y];
end;
end;
hence ex y being set st P1[n,x,y];
end;
consider f being Function such that
A2: dom f = NAT & f.0 = W & for n being Nat holds P1[n,f.n,
f.(n+1)] from RECDEF_1:sch 1(A1);
defpred P3[Nat] means ex Wn being Subwalk of W st Wn = f.$1 &
len Wn <= len W & for m being odd Element of NAT st m < 2*$1+1 & m <= len Wn
holds Wn.rfind(m) = m;
now
let n be Nat;
assume P3[n];
then consider Wn being Subwalk of W such that
A3: Wn = f.n and
A4: len Wn <= len W and
A5: for m being odd Element of NAT st m < 2*n+1 & m <= len Wn holds
Wn .rfind(m) = m;
set a = Wn.find(2*n+1), b = Wn.rfind(2*n+1);
set Wn1 = Wn.remove(a,b);
reconsider Wn1 as Subwalk of W by Lm71;
take Wn1;
P1[n,f.n,f.(n+1)] by A2;
hence f.(n+1) = Wn1 by A3;
len Wn1 <= len Wn by Lm26;
hence len Wn1 <= len W by A4,XXREAL_0:2;
let m be odd Element of NAT;
assume that
A6: m < 2*(n+1)+1 and
A7: m <= len Wn1;
set W1 = Wn.cut(1,a), W2 = Wn.cut(b, len Wn);
A8: len Wn1 <= len Wn by Lm26;
then
A9: m <= len Wn by A7,XXREAL_0:2;
m <= 2*(n+1) by A6,NAT_1:13;
then m < 2*n+1+1 by XXREAL_0:1;
then
A10: m <= 2*n+1 by NAT_1:13;
now
per cases;
suppose
A11: 2*n+1 <= len Wn;
then
A12: a <= 2*n+1 by Lm49;
A13: Wn.a = Wn.(2*n+1) by A11,Def20;
A14: a <= len Wn by A11,Def20;
A15: now
assume
A16: a < 2*n+1;
then a <= len Wn by A11,XXREAL_0:2;
then Wn.rfind(a) = a by A5,A16;
hence contradiction by A11,A14,A13,A16,Def22;
end;
then
A17: a = 2*n+1 by A12,XXREAL_0:1;
A18: Wn.b = Wn.(2*n+1) by A11,Def22;
set m9 = Wn1.rfind(m);
A19: 1 <= m by ABIAN:12;
A20: Wn1.m9 = Wn1.m by A7,Def22;
A21: m9 >= m by A7,Lm50;
A22: b <= len Wn by A11,Def22;
1 <= a by ABIAN:12;
then
A23: W1.last() = Wn.(2*n+1) by A14,A13,Lm16,JORDAN12:2
.= W2.first() by A22,A18,Lm16;
2*n+1 <= b by A11,Lm50;
then
A24: a <= b by A12,XXREAL_0:2;
then
A25: Wn1 = W1.append(W2) by A13,A22,A18,Def12;
A26: m9 <= len Wn1 by A7,Def22;
then
A27: m9 <= len Wn by A8,XXREAL_0:2;
now
per cases by A10,XXREAL_0:1;
suppose
A28: m < 2*n+1;
then m < len Wn.cut(1,a) by A11,A17,Lm22;
then
A29: Wn1.cut(1,m) = Wn.cut(1,a).cut(1,m) by A25,A19,A23,Lm21,
JORDAN12:2
.= Wn.cut(1,m) by A10,A17,Lm20;
reconsider maa1 = m - 1 as Element of NAT by ABIAN:12,INT_1:5;
A30: maa1 + 1 = m;
A31: maa1 < m - 0 by XREAL_1:15;
then
A32: maa1 < len Wn.cut(1,m) by A7,A8,Lm22,XXREAL_0:2;
maa1 < len Wn1.cut(1,m) by A7,A31,Lm22;
then Wn1.m = Wn.cut(1,m).m by A7,A19,A29,A30,Lm15,JORDAN12:2;
then
A33: Wn1.m = Wn.m by A9,A19,A30,A32,Lm15,JORDAN12:2;
A34: Wn.rfind(m) = m by A5,A9,A28;
now
per cases;
suppose
A35: m9 < a;
reconsider m9aa1 = m9 - 1 as Element of NAT by ABIAN:12
,INT_1:5;
A36: 1 <= m9 by ABIAN:12;
A37: m9aa1 < m9 - 0 by XREAL_1:15;
then
A38: m9aa1 < len Wn1.cut(1,m9) by A26,Lm22;
A39: m9aa1 < len Wn.cut(1,m9) by A8,A26,A37,Lm22,XXREAL_0:2;
m9 < len Wn.cut(1,a) by A14,A35,Lm22;
then Wn1.cut(1,m9) = Wn.cut(1,a).cut(1,m9) by A25,A23,A36
,Lm21,JORDAN12:2
.= Wn.cut(1,m9) by A35,Lm20;
then Wn1.m9 = Wn.cut(1,m9).(m9aa1+1) by A26,A36,A38,Lm15,
JORDAN12:2;
then Wn.m9 = Wn.m by A20,A27,A33,A36,A39,Lm15,JORDAN12:2;
then m9 <= m by A9,A27,A34,Def22;
hence Wn1.rfind(m) = m by A21,XXREAL_0:1;
end;
suppose
A40: a <= m9;
set x = m9 - a + b;
A41: Wn1.m9 = Wn.x by A13,A22,A18,A24,A26,A40,Lm30;
A42: x <= len Wn by A13,A22,A18,A24,A26,A40,Lm30;
m9 + a <= m9 + b by A24,XREAL_1:7;
then
A43: m9 + a - a <= m9 + b - a by XREAL_1:13;
reconsider x as Element of NAT by A13,A22,A18,A24,A26,A40
,Lm30;
x <= m by A9,A20,A34,A33,A41,A42,Def22;
then m9 <= m by A43,XXREAL_0:2;
hence Wn1.rfind(m) = m by A21,XXREAL_0:1;
end;
end;
hence Wn1.rfind(m) = m;
end;
suppose
A44: m = 2*n+1;
then m <= len Wn.cut(1,a) by A11,A17,Lm22;
then
A45: Wn1.cut(1,m) = Wn.cut(1,a).cut(1,m) by A25,A19,A23,Lm21,
JORDAN12:2
.= Wn.cut(1,m) by A10,A17,Lm20;
reconsider maa1 = m - 1 as Element of NAT by ABIAN:12,INT_1:5;
A46: maa1 + 1 = m;
A47: maa1 < m - 0 by XREAL_1:15;
then
A48: maa1 < len Wn.cut(1,m) by A7,A8,Lm22,XXREAL_0:2;
maa1 < len Wn1.cut(1,m) by A7,A47,Lm22;
then Wn1.m = Wn.cut(1,m).m by A7,A19,A45,A46,Lm15,JORDAN12:2;
then
A49: Wn1.m = Wn.m by A9,A19,A46,A48,Lm15,JORDAN12:2;
now
set x = m9 - a + b;
assume
A50: m < m9;
then
A51: a < m9 by A12,A15,A44,XXREAL_0:1;
then
A52: x is Element of NAT by A13,A22,A18,A24,A26,Lm30;
A53: x <= len Wn by A13,A22,A18,A24,A26,A51,Lm30;
Wn1.m9 = Wn.x by A13,A22,A18,A24,A26,A51,Lm30;
then m9 - a + b <= b by A11,A20,A44,A49,A52,A53,Def22;
then m9 - a + b - b <= b - b by XREAL_1:13;
then m9 - a + a <= 0 + a by XREAL_1:7;
hence contradiction by A12,A15,A44,A50,XXREAL_0:1;
end;
hence Wn1.rfind(m) = m by A21,XXREAL_0:1;
end;
end;
hence Wn1.rfind(m) = m;
end;
suppose
A54: len Wn < 2*n+1;
then
A55: m < 2*n+1 by A9,XXREAL_0:2;
A56: b = len Wn by A54,Def22;
a = len Wn by A54,Def20;
then Wn1 = Wn by A56,Lm27;
hence Wn1.rfind(m) = m by A5,A7,A55;
end;
end;
hence Wn1.rfind(m) = m;
end;
then
A57: for n being Nat st P3[n] holds P3[n+1];
reconsider W0 = f.0 as Subwalk of W by A2,Lm70;
for m being odd Element of NAT st m < 2*0+1 & m <= len W0 holds W0
.rfind(m) = m by ABIAN:12;
then
A58: P3[0] by A2;
for n being Nat holds P3[n] from NAT_1:sch 2(A58,A57);
then consider P being Subwalk of W such that
P = f.n and
A59: len P <= len W and
A60: for m being odd Element of NAT st m < 2*n+1 & m <= len P holds P
.rfind(m) = m;
take P;
now
let m be odd Element of NAT;
assume
A61: m <= len P;
len P + 0 < n by A59,XREAL_1:8;
then len P + 0 < n+n by XREAL_1:8;
then len P + 0 < 2*n+1 by XREAL_1:8;
then m < 2*n+1 by A61,XXREAL_0:2;
hence P.rfind(m) = m by A60,A61;
end;
then P is Path-like by Lm67;
hence thesis;
end;
end;
definition
let G be _Graph, W be Walk of G;
mode Trail of W is Trail-like Subwalk of W;
mode Path of W is Path-like Subwalk of W;
end;
registration
let G be _Graph, W be DWalk of G;
cluster directed for Path of W;
existence
proof
defpred P[Nat] means for W1 being DWalk of G st W1.length() =
$1 holds ex W2 being Path of W1 st W2 is directed;
A1: W.length() = W.length();
now
let k be Nat;
assume
A2: P[k];
let W1 be DWalk of G;
set WA = W1.cut(1,2*k+1);
set e = W1.(2*k+1+1), v = W1.(2*k+1+2);
assume
A3: W1.length() = k + 1;
then
A4: len W1 = 2*(k+1)+1 by Def15
.= 2*k+1+2;
then
A5: 2*k+1+2-2 < len W1 - 0 by XREAL_1:15;
then
A6: e DJoins W1.(2*k+1), v, G by Lm51;
len WA = 2*k+1 by A5,Lm22;
then
A7: 2*k+1 = 2*WA.length()+1 by Def15;
then consider WB being Path of WA such that
A8: WB is directed by A2;
A9: WA.edgeSeq() c= W1.edgeSeq() by Lm43;
A10: WB is_Walk_from WA.first(), WA.last() by Def32;
A11: 1 <= 2*k+1 by NAT_1:12;
then
A12: WA.last() = W1.(2*k+1) by A5,Lm16,JORDAN12:2;
A13: WA.first() = W1.1 by A5,A11,Lm16,JORDAN12:2;
then
A14: WB.first() = W1.1 by A10;
A15: WB.last() = W1.(2*k+1) by A10,A12;
then
A16: e Joins WB.last(), v, G by A6,GLIB_000:16;
now
per cases;
suppose
A17: WB is closed;
set W2 = W1.remove(1,2*k+1);
W1.first() = W1.(2*k+1) by A14,A15,A17;
then W2 = W1.cut(2*k+1, 2*k+1+2) by A4,Lm32;
then len W2 + (2*k+1) = 2*k+1+2+1 by A4,A5,Lm15
.= 2*k+1+(2+1);
then reconsider W2 as Path of W1 by Lm69;
take W2;
thus W2 is directed;
end;
suppose
A18: WB is open;
consider esb being Subset of WA.edgeSeq() such that
A19: WB.edgeSeq() = Seq esb by Def32;
A20: Seq esb is one-to-one by A19,Def27;
A21: Seq esb = esb * (Sgm (dom esb)) by FINSEQ_1:def 15;
A22: now
let x be object;
assume x in dom esb;
then [x,esb.x] in esb by FUNCT_1:1;
then x in dom WA.edgeSeq() by FUNCT_1:1;
hence x in Seg k by A7,FINSEQ_1:def 3;
end;
then
A23: dom esb c= Seg k by TARSKI:def 3;
rng Sgm(dom esb) = dom esb by FINSEQ_1:def 14;
then
A24: Sgm(dom esb) is one-to-one by A21,A20,FUNCT_1:26;
now
per cases;
suppose
A25: v in WB.vertices();
reconsider WB9 = WB as directed Path of G by A8;
A26: dom Sgm(dom esb) = dom WB.edgeSeq() by A19,Th5
.= Seg len WB.edgeSeq() by FINSEQ_1:def 3;
consider n being odd Element of NAT such that
A27: n <= len WB and
A28: WB.n = v by A25,Lm45;
set W2 = WB9.cut(1,n);
len W2 = n by A27,Lm22;
then consider naa1 being even Element of NAT such that
A29: naa1 = n - 1 and
A30: len W2.edgeSeq() = naa1 div 2 by Lm42;
2*0+1 <= n by ABIAN:12;
then
A31: W2 is_Walk_from W1.first(), W1.last() by A4,A14,A27,A28,Lm16;
2 divides naa1 by PEPIN:22;
then
A32: 2*(naa1 div 2) = naa1 by NAT_D:3;
now
assume naa1 div 2 > len WB.edgeSeq();
then naa1 > 2 * len WB.edgeSeq() by A32,XREAL_1:68;
then naa1+1 > 2*len WB.edgeSeq() + 1 by XREAL_1:8;
hence contradiction by A27,A29,Def15;
end;
then Seg (naa1 div 2) c= dom Sgm (dom esb) by A26,FINSEQ_1:5;
then
A33: dom (Sgm(dom esb)| Seg(naa1 div 2)) = Seg ( naa1 div 2) by
RELAT_1:62;
reconsider
ses = Sgm(dom esb)|Seg(naa1 div 2) as FinSequence;
A34: ses is one-to-one by A24,FUNCT_1:52;
set es = esb | (rng (Sgm (dom esb) | Seg (naa1 div 2)));
reconsider es as Subset of WA.edgeSeq() by FINSEQ_6:153;
for x being object st x in es holds x in W1.edgeSeq() by A9,
TARSKI:def 3;
then reconsider es as Subset of W1.edgeSeq() by TARSKI:def 3;
reconsider esbes1 = esb \ es as Function;
now
let z be object;
A35: rng (Sgm (dom esb) | Seg (naa1 div 2)) c= rng Sgm (dom
esb ) by RELAT_1:70;
assume z in rng (Sgm (dom esb) | Seg (naa1 div 2));
then z in rng Sgm (dom esb) by A35;
hence z in dom esb by FINSEQ_1:def 14;
end;
then rng (Sgm (dom esb) | Seg (naa1 div 2)) c= dom esb
by TARSKI:def 3;
then
A36: dom es = rng (Sgm (dom esb) | Seg (naa1 div 2) ) by RELAT_1:62;
A37: now
let a,b be Nat;
assume that
A38: a in dom es and
A39: b in dom (esbes1);
consider xa being object such that
A40: xa in dom ses and
A41: ses.xa = a by A36,A38,FUNCT_1:def 3;
reconsider xa as Element of NAT by A40;
A42: xa in Seg(naa1 div 2) by A40,RELAT_1:57;
then
A43: 1 <= xa by FINSEQ_1:1;
A44: [b, esbes1.b] in esb \ es by A39,FUNCT_1:1;
then
A45: [b, esbes1.b] in esb by XBOOLE_0:def 5;
then b in dom esb by FUNCT_1:1;
then b in rng (Sgm (dom esb)) by FINSEQ_1:def 14;
then consider xb being object such that
A46: xb in dom (Sgm (dom esb)) and
A47: Sgm(dom esb).xb = b by FUNCT_1:def 3;
reconsider xb as Element of NAT by A46;
A48: 1 <= xb by A26,A46,FINSEQ_1:1;
A49: xa <= naa1 div 2 by A42,FINSEQ_1:1;
A50: now
assume xb <= xa;
then xb <= naa1 div 2 by A49,XXREAL_0:2;
then
A51: xb in Seg(naa1 div 2) by A48,FINSEQ_1:1;
[xb, b] in Sgm(dom esb) by A46,A47,FUNCT_1:1;
then [xb, b] in ses by A51,RELAT_1:def 11;
then b in rng ses by XTUPLE_0:def 13;
then [b, esbes1.b] in es by A45,RELAT_1:def 11;
hence contradiction by A44,XBOOLE_0:def 5;
end;
xb <= len WB.edgeSeq() by A26,A46,FINSEQ_1:1;
then xb in dom Seq esb by A19,A48,FINSEQ_3:25;
then xb in dom Sgm (dom esb) by Th5;
then
A52: xb <= len Sgm(dom esb) by FINSEQ_3:25;
a = Sgm(dom esb).xa by A40,A41,FUNCT_1:47;
hence a < b by A47,A43,A52,A50,FINSEQ_1:def 14;
end;
len ses = naa1 div 2 by A33,FINSEQ_1:def 3;
then card dom es = naa1 div 2 by A36,A34,FINSEQ_4:62;
then card es = naa1 div 2 by CARD_1:62;
then
A53: len Seq es = len W2.edgeSeq() by A30,Th4;
A54: es c= esb by RELAT_1:59;
now
let z be object;
hereby
assume
A55: z in esb;
now
per cases;
suppose
z in es;
hence z in es \/ (esb \ es) by XBOOLE_0:def 3;
end;
suppose
not z in es;
then z in esb \ es by A55,XBOOLE_0:def 5;
hence z in es \/ (esb \ es) by XBOOLE_0:def 3;
end;
end;
hence z in es \/ (esb \ es);
end;
assume
A56: z in es \/ (esb \ es);
now
per cases by A56,XBOOLE_0:def 3;
suppose
z in es;
hence z in esb by A54;
end;
suppose
z in esb \ es;
hence z in esb by XBOOLE_0:def 5;
end;
end;
hence z in esb;
end;
then esb = es \/ (esb \ es) by TARSKI:2;
then
A57: dom esb = dom es \/ dom (esb \ es) by XTUPLE_0:23;
A59: Sgm(dom esb) = Sgm(dom es) ^ Sgm(dom (esb \ es ))
by A57,A37,FINSEQ_3:42;
A60: W2.edgeSeq() c= WB.edgeSeq() by Lm43;
then
A61: dom W2.edgeSeq() c= dom Seq esb by A19,RELAT_1:11;
A62: Seq es = es * Sgm (dom es) by FINSEQ_1:def 15;
now
let x be Nat;
assume that
A63: 1 <= x and
A64: x <= len W2.edgeSeq();
A65: x in dom W2.edgeSeq() by A63,A64,FINSEQ_3:25;
then x in dom Sgm(dom esb) by A21,A61,FUNCT_1:11;
then
A66: [x, Sgm(dom esb).x] in Sgm(dom esb) by FUNCT_1:1;
x in Seg (naa1 div 2) by A30,A63,A64,FINSEQ_1:1;
then [x, Sgm(dom esb).x] in ses by A66,RELAT_1:def 11;
then
A67: Sgm(dom esb).x in rng ses by XTUPLE_0:def 13;
Sgm(dom esb).x in dom esb by A21,A61,A65,FUNCT_1:11;
then [Sgm(dom esb).x, esb.(Sgm(dom esb).x)] in esb
by FUNCT_1:1;
then
A68: [Sgm(dom esb).x, esb.(Sgm(dom esb).x)] in es
by A67,RELAT_1:def 11;
[x,W2.edgeSeq().x] in W2.edgeSeq() by A65,FUNCT_1:1;
then
A69: W2.edgeSeq().x = (Seq esb).x by A19,A60,FUNCT_1:1
.= esb.(Sgm(dom esb).x) by A21,A61,A65,FUNCT_1:12;
A70: x in dom Seq es by A53,A63,A64,FINSEQ_3:25;
then x in dom Sgm(dom es) by Th5;
then Sgm(dom esb).x = Sgm(dom es).x by A59,FINSEQ_1:def 7;
then es.(Sgm(dom es).x) = esb.(Sgm(dom esb).x) by A68,FUNCT_1:1
;
hence W2.edgeSeq().x = (Seq es).x by A62,A69,A70,FUNCT_1:12;
end;
then W2.edgeSeq() = Seq es by A53,FINSEQ_1:14;
then reconsider W2 as Path of W1 by A31,Def32;
take W2;
thus W2 is directed;
end;
suppose
A71: not v in WB.vertices();
set es = esb +* ((k+1) .--> e);
set W2 = WB.addEdge(e);
A72: now
let m, n be Nat;
assume that
A73: m in dom esb and
A74: n in {k+1};
A75: n = k+1 by A74,TARSKI:def 1;
m <= k by A23,A73,FINSEQ_1:1;
hence m < n by A75,NAT_1:13;
end;
A76: dom ((k+1) .--> e) = {k+1};
then
A77: dom es = dom esb \/ {k+1} by FUNCT_4:def 1;
now
let x be object;
assume
A78: x in dom es;
now
per cases by A77,A78,XBOOLE_0:def 3;
suppose
x in dom esb;
then
A79: x in Seg k by A22;
then reconsider x9=x as Element of NAT;
x9 <= k by A79,FINSEQ_1:1;
then
A80: x9 <= k+1 by NAT_1:12;
1 <= x9 by A79,FINSEQ_1:1;
hence x in Seg (k+1) by A80,FINSEQ_1:1;
end;
suppose
A81: x in {k+1};
A82: 1 <= k+1 by NAT_1:12;
x = k+1 by A81,TARSKI:def 1;
hence x in Seg (k+1) by A82,FINSEQ_1:1;
end;
end;
hence x in Seg (k+1);
end;
then dom es c= Seg (k+1) by TARSKI:def 3;
then reconsider es as FinSubsequence by FINSEQ_1:def 12;
now
let z be object;
assume
A84: z in es;
then consider x,y being object such that
A85: z = [x,y] by RELAT_1:def 1;
A86: x in dom es by A84,A85,FUNCT_1:1;
A87: es.x = y by A84,A85,FUNCT_1:1;
now
per cases;
suppose
A88: x in dom ((k+1) .--> e);
then reconsider x9 = x as Element of NAT by A76;
A89: x = k+1 by A88,TARSKI:def 1;
then
A90: 1 <= x9 by NAT_1:12;
then
A91: x in dom W1.edgeSeq() by A3,A89,FINSEQ_3:25;
y = ((k+1).-->e).x by A77,A86,A87,A88,FUNCT_4:def 1;
then
A92: y = e by A89,FUNCOP_1:72;
W1.edgeSeq().x = W1.(2*(k+1)) by A3,A89,A90,Def15
.= W1.(2*k+1+1);
hence z in W1.edgeSeq() by A85,A92,A91,FUNCT_1:1;
end;
suppose
A93: not x in dom ((k+1) .--> e);
then
A94: x in dom esb by A77,A86,XBOOLE_0:def 3;
y = esb.x by A77,A86,A87,A93,FUNCT_4:def 1;
then [x,y] in esb by A94,FUNCT_1:1;
then [x,y] in WA.edgeSeq();
hence z in W1.edgeSeq() by A9,A85;
end;
end;
hence z in W1.edgeSeq();
end;
then reconsider es as Subset of W1.edgeSeq() by TARSKI:def 3;
A95: Sgm(dom es)=Sgm(dom esb) ^ Sgm({k+1}) by A77,A72,FINSEQ_3:42
.=Sgm(dom esb) ^ <* k+1 *> by FINSEQ_3:44;
now
assume dom esb /\ dom ((k+1).-->e) <> {};
then consider x being object such that
A96: x in dom esb /\ dom ((k+1).-->e) by XBOOLE_0:def 1;
x in {k+1} by A96;
then
A97: x = k+1 by TARSKI:def 1;
x in dom esb by A96,XBOOLE_0:def 4;
then k+1 <= k+0 by A23,A97,FINSEQ_1:1;
hence contradiction by XREAL_1:6;
end;
then
A98: dom esb misses dom ((k+1).-->e) by XBOOLE_0:def 7;
A99: W2.edgeSeq() = Seq esb ^ <*e*> by A16,A19,Lm44;
then
A100: len W2.edgeSeq() = len Seq esb + len <*e*> by FINSEQ_1:22
.= len Seq esb + 1 by FINSEQ_1:39
.= card esb + 1 by Th4;
A101: len Seq es = card es by Th4
.= card esb + card ((k+1).-->e) by A98,PRE_CIRC:22
.= card esb + card {[k+1,e]} by FUNCT_4:82
.= len W2.edgeSeq() by A100,CARD_1:30;
now
A102: Seq es = es * Sgm(dom es) by FINSEQ_1:def 15;
let n be Nat;
assume that
A103: 1 <= n and
A104: n <= len W2.edgeSeq();
n in dom Seq es by A101,A103,A104,FINSEQ_3:25;
then
A105: (Seq es).n = es.(Sgm(dom es).n) by A102,FUNCT_1:12;
A106: Seq esb = esb * Sgm(dom esb) by FINSEQ_1:def 15;
A107: n in dom W2.edgeSeq() by A103,A104,FINSEQ_3:25;
now
per cases by A99,A107,FINSEQ_1:25;
suppose
A108: n in dom Seq esb;
then n in dom Sgm(dom esb) by A106,FUNCT_1:11;
then
A109: Sgm(dom es).n=Sgm(dom esb).n by A95,FINSEQ_1:def 7;
A110: Sgm(dom esb).n in dom esb by A106,A108,FUNCT_1:11;
W2.edgeSeq().n = (Seq esb).n by A99,A108,FINSEQ_1:def 7
.= esb.(Sgm(dom esb).n) by A106,A108,FUNCT_1:12;
hence W2.edgeSeq().n = (Seq es).n by A98,A105,A110,A109,
FUNCT_4:16;
end;
suppose
ex m being Nat st m in dom <*e*> & n = len Seq esb + m;
then consider m being Nat such that
A111: m in dom <*e*> and
A112: n = len Seq esb + m;
m in {1} by A111,FINSEQ_1:2,def 8;
then
A113: m = 1 by TARSKI:def 1;
A114: k+1 in dom ((k+1).-->e) by TARSKI:def 1;
then
A115: k+1 in dom esb \/ dom ((k+1).-->e) by XBOOLE_0:def 3;
len Sgm(dom esb) = card dom esb by FINSEQ_3:39
.= card esb by CARD_1:62
.= len Seq esb by Th4;
then (Seq es).n = es.(k+1) by A95,A105,A112,A113,
FINSEQ_1:42;
then
A116: (Seq es).n = ((k+1).-->e).(k+1) by A114,A115,FUNCT_4:def 1
.= e by FUNCOP_1:72;
W2.edgeSeq().n = <*e*>.1 by A99,A111,A112,A113,
FINSEQ_1:def 7
.= e;
hence W2.edgeSeq().n = (Seq es).n by A116;
end;
end;
hence W2.edgeSeq().n = (Seq es).n;
end;
then
A117: W2.edgeSeq() = Seq es by A101,FINSEQ_1:14;
W2 is_Walk_from W1.first(), W1.last() by A4,A8,A6,A10,A13,A12
,Lm52;
then reconsider W2 as Path of W1 by A16,A18,A71,A117,Def32,Lm68;
take W2;
thus W2 is directed by A8,A6,A10,A12,Lm52;
end;
end;
hence ex W2 being Path of W1 st W2 is directed;
end;
end;
hence ex W2 being Path of W1 st W2 is directed;
end;
then
A118: for k being Nat st P[k] holds P[k+1];
now
let W1 be DWalk of G;
set W2 = the Path of W1;
assume W1.length() = 0;
then len W1 = 2*0+1 by Def15;
then
A119: len W2 <= 1 by Lm72;
take W2;
1 <= len W2 by ABIAN:12;
then len W2 = 1 by A119,XXREAL_0:1;
then W2 is trivial by Lm55;
then ex v being Vertex of G st W2 = G.walkOf(v) by Lm56;
hence W2 is directed;
end;
then
A120: P[0];
for k being Nat holds P[k] from NAT_1:sch 2(A120,A118);
hence thesis by A1;
end;
end;
definition
let G be _Graph, W be DWalk of G;
mode DWalk of W is directed Subwalk of W;
mode DTrail of W is directed Trail of W;
mode DPath of W is directed Path of W;
end;
definition
let G be _Graph;
func G.allWalks()-> non empty Subset of ((the_Vertices_of G)\/(the_Edges_of
G))* equals
the set of all W where W is Walk of G ;
coherence
proof
set IT = the set of all W where W is Walk of G ;
A1: now
let x be object;
assume x in IT;
then ex W being Walk of G st x = W;
hence x in ((the_Vertices_of G)\/(the_Edges_of G))* by FINSEQ_1:def 11;
end;
G.walkOf(the Element of the_Vertices_of G) in IT;
hence thesis by A1,TARSKI:def 3;
end;
end;
definition
let G be _Graph;
func G.allTrails() -> non empty Subset of G.allWalks() equals
the set of all W where W is
Trail of G ;
coherence
proof
set IT = the set of all W where W is Trail of G ;
A1: now
let e be object;
assume e in IT;
then ex W being Trail of G st W = e;
hence e in G.allWalks();
end;
G.walkOf(the Element of the_Vertices_of G) in IT;
hence thesis by A1,TARSKI:def 3;
end;
end;
definition
let G be _Graph;
func G.allPaths() -> non empty Subset of G.allTrails() equals
the set of all W where W is
Path of G ;
coherence
proof
set IT = the set of all W where W is Path of G ;
A1: now
let e be object;
assume e in IT;
then ex W being Path of G st e = W;
hence e in G.allTrails();
end;
G.walkOf(the Element of the_Vertices_of G) in IT;
hence thesis by A1,TARSKI:def 3;
end;
end;
definition
let G be _Graph;
func G.allDWalks() -> non empty Subset of G.allWalks() equals
the set of all W where W is
DWalk of G ;
coherence
proof
set IT = the set of all W where W is directed Walk of G ;
A1: now
let e be object;
assume e in IT;
then ex W being directed Walk of G st e = W;
hence e in G.allWalks();
end;
G.walkOf(the Element of the_Vertices_of G) in IT;
hence thesis by A1,TARSKI:def 3;
end;
end;
definition
let G be _Graph;
func G.allDTrails() -> non empty Subset of G.allTrails() equals
the set of all W where W
is DTrail of G ;
coherence
proof
set IT = the set of all W where W is DTrail of G ;
A1: now
let e be object;
assume e in IT;
then ex W being DTrail of G st e = W;
hence e in G.allTrails();
end;
G.walkOf(the Element of the_Vertices_of G) in IT;
hence thesis by A1,TARSKI:def 3;
end;
end;
definition
let G be _Graph;
func G.allDPaths() -> non empty Subset of G.allDTrails() equals
the set of all W where W
is directed Path of G ;
coherence
proof
set IT = the set of all W where W is DPath of G ;
A1: now
let e be object;
assume e in IT;
then ex W being DPath of G st e = W;
hence e in G.allDTrails();
end;
G.walkOf(the Element of the_Vertices_of G) in IT;
hence thesis by A1,TARSKI:def 3;
end;
end;
registration
let G be _finite _Graph;
cluster G.allTrails() -> finite;
correctness
proof
set D = (the_Vertices_of G)\/(the_Edges_of G);
set X = {x where x is Element of D* : len x <= 2*G.size()+1};
A1: now
let W be Trail of G;
consider f being Function such that
A2: dom f = W.edgeSeq() & for x being object st x in W.edgeSeq() holds
f.x = x`2 from FUNCT_1:sch 3;
now
A3: W.edgeSeq() is one-to-one by Def27;
let x1,x2 be object;
assume that
A4: x1 in dom f and
A5: x2 in dom f and
A6: f.x1 = f.x2;
consider a1,b1 being object such that
A7: x1 = [a1,b1] by A2,A4,RELAT_1:def 1;
A8: a1 in dom W.edgeSeq() by A2,A4,A7,FUNCT_1:1;
A9: f.x2 = x2`2 by A2,A5;
A10: W.edgeSeq().a1 = b1 by A2,A4,A7,FUNCT_1:1;
consider a2,b2 being object such that
A11: x2 = [a2,b2] by A2,A5,RELAT_1:def 1;
A12: a2 in dom W.edgeSeq() by A2,A5,A11,FUNCT_1:1;
f.x1 = x1`2 by A2,A4;
then
A13: b1 = f.x1 by A7
.= b2 by A6,A9,A11;
then W.edgeSeq().a2 = b1 by A2,A5,A11,FUNCT_1:1;
hence x1 = x2 by A7,A11,A13,A3,A8,A10,A12,FUNCT_1:def 4;
end;
then
A14: f is one-to-one by FUNCT_1:def 4;
now
let y be object;
assume y in rng f;
then consider x being object such that
A15: x in dom f and
A16: f.x = y by FUNCT_1:def 3;
consider a,b being object such that
A17: x = [a,b] by A2,A15,RELAT_1:def 1;
y = x`2 by A2,A15,A16;
then y = b by A17;
then y in rng W.edgeSeq() by A2,A15,A17,XTUPLE_0:def 13;
hence y in (the_Edges_of G);
end;
then rng f c= the_Edges_of G by TARSKI:def 3;
then Segm card W.edgeSeq() c= Segm card (the_Edges_of G)
by A2,A14,CARD_1:10;
then len W.edgeSeq() <= card (the_Edges_of G) by NAT_1:39;
then len W.edgeSeq() <= G.size() by GLIB_000:def 25;
then 2*len W.edgeSeq() <= 2*G.size() by XREAL_1:64;
then 2*len W.edgeSeq()+1 <= 2*G.size()+1 by XREAL_1:7;
hence len W <= 2*G.size()+1 by Def15;
end;
now
let e be object;
assume e in G.allTrails();
then consider W being Trail of G such that
A18: W = e;
A19: len W <= 2*G.size()+1 by A1;
e is Element of D* by A18,FINSEQ_1:def 11;
hence e in X by A18,A19;
end;
then G.allTrails() c= X by TARSKI:def 3;
hence thesis by FINSET_1:1,GRAPH_5:3;
end;
end;
definition
let G be _Graph, X be non empty Subset of G.allWalks();
redefine mode Element of X -> Walk of G; :: redefines Element (SUBSET_1, definition)
coherence
proof
let x be Element of X;
x in the set of all W where W is Walk of G ;
then ex y being Walk of G st y = x;
hence thesis;
end;
end;
definition
let G be _Graph, X be non empty Subset of G.allTrails();
redefine mode Element of X -> Trail of G; :: redefines Element (SUBSET_1, definition)
coherence
proof
let x be Element of X;
x in the set of all W where W is Trail of G ;
then ex y being Trail of G st y = x;
hence thesis;
end;
end;
definition
let G be _Graph, X be non empty Subset of G.allPaths();
redefine mode Element of X -> Path of G; :: redefines Element (SUBSET_1, definition)
coherence
proof
let x be Element of X;
x in the set of all W where W is Path of G ;
then ex y being Path of G st y = x;
hence thesis;
end;
end;
definition
let G be _Graph, X be non empty Subset of G.allDWalks();
redefine mode Element of X -> DWalk of G; :: redefines Element (SUBSET_1, definition)
coherence
proof
let x be Element of X;
x in the set of all W where W is DWalk of G ;
then ex y being DWalk of G st y = x;
hence thesis;
end;
end;
definition
let G be _Graph, X be non empty Subset of G.allDTrails();
redefine mode Element of X -> DTrail of G; :: redefines Element (SUBSET_1, definition)
coherence
proof
let x be Element of X;
x in the set of all W where W is DTrail of G ;
then ex y being DTrail of G st y = x;
hence thesis;
end;
end;
definition
let G be _Graph, X be non empty Subset of G.allDPaths();
redefine mode Element of X -> DPath of G; :: redefines Element (SUBSET_1, definition)
coherence
proof
let x be Element of X;
x in the set of all W where W is DPath of G ;
then ex y being DPath of G st y = x;
hence thesis;
end;
end;
begin :: Theorems
reserve G,G1,G2 for _Graph;
reserve W,W1,W2 for Walk of G;
reserve e,x,y,z for set;
reserve v for Vertex of G;
reserve n,m for Element of NAT;
theorem
for n being odd Element of NAT st n <= len W holds
W.n in the_Vertices_of G by Lm1;
theorem Th7:
for n being even Element of NAT st n in dom W holds W.n in the_Edges_of G
proof
let n be even Element of NAT;
assume
A1: n in dom W;
then 1 <= n by FINSEQ_3:25;
then reconsider naa1 = n-1 as odd Element of NAT by INT_1:5;
n <= len W by A1,FINSEQ_3:25;
then naa1 < len W - 0 by XREAL_1:15;
then W.(naa1+1) Joins W.naa1, W.(naa1+2), G by Def3;
hence thesis by GLIB_000:def 13;
end;
theorem
for n being even Element of NAT st n in dom W holds ex naa1 being odd
Element of NAT st naa1 = n-1 & n-1 in dom W & n+1 in dom W & W.n Joins W.(naa1)
, W.(n+1),G by Lm2;
theorem Th9:
for n being odd Element of NAT st n < len W holds
W.(n+1) in W.vertexAt(n).edgesInOut()
proof
let n be odd Element of NAT;
assume
A1: n < len W;
then
A2: W.vertexAt(n) = W.n by Def8;
W.(n+1) Joins W.n, W.(n+2), G by A1,Def3;
hence thesis by A2,GLIB_000:62;
end;
theorem Th10:
for n being odd Element of NAT st 1 < n & n <= len W holds W.(n-
1) in W.vertexAt(n).edgesInOut()
proof
let n be odd Element of NAT;
assume that
A1: 1 < n and
A2: n <= len W;
reconsider naa1 = n-1 as even Element of NAT by A1,INT_1:5;
1+1 <= n by A1,NAT_1:13;
then
A3: 1+1-1 <= n-1 by XREAL_1:13;
n - 1 <= len W - 0 by A2,XREAL_1:13;
then naa1 in dom W by A3,FINSEQ_3:25;
then consider n5 being odd Element of NAT such that
A4: n5 = naa1-1 and
A5: naa1-1 in dom W and
naa1+1 in dom W and
A6: W.naa1 Joins W.(n5), W.(naa1+1),G by Lm2;
n5 <= len W by A4,A5,FINSEQ_3:25;
then W.(n5) = W.vertexAt(n5) by Def8;
then W.(n-1) Joins W.vertexAt(n5), W.vertexAt(n), G by A2,A6,Def8;
hence thesis by GLIB_000:14,62;
end;
theorem
for n being odd Element of NAT st n < len W holds n in dom W & n+1 in
dom W & n+2 in dom W
proof
let n be odd Element of NAT;
A1: 1 <= n by ABIAN:12;
A2: 1 <= n+1 by NAT_1:12;
A3: 1 <= n+2 by NAT_1:12;
assume
A4: n < len W;
then
A5: n+1 <= len W by NAT_1:13;
n+2 <= len W by A4,Th1;
hence thesis by A4,A1,A2,A3,A5,FINSEQ_3:25;
end;
theorem Th12:
len G.walkOf(v) = 1 & G.walkOf(v).1 = v & G.walkOf(v).first() =
v & G.walkOf(v).last() = v & G.walkOf(v) is_Walk_from v,v
proof
thus
A1: len G.walkOf(v) = 1 & G.walkOf(v).1 = v by FINSEQ_1:40;
thus
G.walkOf(v).first() = v;
thus G.walkOf(v).last() = v by A1;
hence thesis;
end;
theorem Th13:
for e,x,y being object holds
e Joins x,y,G implies len G.walkOf(x,e,y) = 3
proof let e,x,y be object;
assume e Joins x,y,G;
then G.walkOf(x,e,y) = <*x,e,y*> by Def5;
hence thesis by FINSEQ_1:45;
end;
theorem Th14:
for e,x,y being object holds
e Joins x,y,G implies G.walkOf(x,e,y).first() = x & G.walkOf(x,e
,y).last() = y & G.walkOf(x,e,y) is_Walk_from x,y
proof let e,x,y be object;
set W = G.walkOf(x,e,y);
assume e Joins x,y,G;
then
A1: W = <*x,e,y*> by Def5;
hence
A2: W.first() = x;
len W = 3 by A1,FINSEQ_1:45;
hence W.last() = y by A1;
hence thesis by A2;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
.first() = W2.first() & W1.last() = W2.last();
theorem
for x,y being object holds
W is_Walk_from x,y iff W.1 = x & W.(len W) = y;
theorem
for x,y being object holds
W is_Walk_from x,y implies x is Vertex of G & y is Vertex of G;
theorem
for x,y being object holds
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
is_Walk_from x,y iff W2 is_Walk_from x,y;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds for n
being Element of NAT holds W1.vertexAt(n) = W2.vertexAt(n)
proof
let W1 be Walk of G1, W2 be Walk of G2;
assume
A1: W1 = W2;
let n be Element of NAT;
now
per cases;
suppose
A2: n is odd & n <= len W1;
hence W1.vertexAt(n) = W2.n by A1,Def8
.= W2.vertexAt(n) by A1,A2,Def8;
end;
suppose
A3: not (n is odd & n <= len W1);
hence W1.vertexAt(n) = W1.first() by Def8
.= W2.first() by A1
.= W2.vertexAt(n) by A1,A3,Def8;
end;
end;
hence thesis;
end;
theorem
len W = len W.reverse() & dom W = dom W.reverse() & rng W = rng W
.reverse() by FINSEQ_5:57,def 3;
theorem Th21:
W.first() = W.reverse().last() & W.last() = W.reverse().first()
proof
len W = len W.reverse() by FINSEQ_5:def 3;
hence W.first() = W.reverse().last() by FINSEQ_5:62;
thus thesis by FINSEQ_5:62;
end;
theorem Th22:
for x,y being object holds
W is_Walk_from x,y iff W.reverse() is_Walk_from y, x
proof let x,y be object;
A1: len W = len W.reverse() by FINSEQ_5:def 3;
thus W is_Walk_from x, y implies W.reverse() is_Walk_from y,x
by A1,FINSEQ_5:62;
assume
A2: W.reverse() is_Walk_from y,x;
then W.reverse().1=y;
then
A3: W.(len W) = y by FINSEQ_5:62;
W.reverse().(len W.reverse())=x by A2;
then W.1 = x by A1,FINSEQ_5:62;
hence thesis by A3;
end;
theorem Th23:
n in dom W implies W.n = W.reverse().(len W - n + 1) & (len W -
n + 1) in dom W.reverse()
proof
set rn = len W - n + 1;
assume
A1: n in dom W;
then n <= len W by FINSEQ_3:25;
then reconsider rn as Element of NAT by FINSEQ_5:1;
n in Seg len W by A1,FINSEQ_1:def 3;
then len W - n + 1 in Seg len W by FINSEQ_5:2;
then
A2: rn in Seg len W.reverse() by FINSEQ_5:def 3;
then rn in dom W.reverse() by FINSEQ_1:def 3;
then W.reverse().rn = W.(len W - rn + 1) by FINSEQ_5:def 3;
hence thesis by A2,FINSEQ_1:def 3;
end;
theorem
n in dom W.reverse() implies W.reverse().n = W.(len W - n + 1) &
(len W - n + 1) in dom W by Lm8;
::$CT
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds
W1.reverse() = W2.reverse();
theorem
W1.last() = W2.first() implies len W1.append(W2) + 1 = len W1 + len W2
by Lm9;
theorem
W1.last() = W2.first() implies len W1 <= len W1.append(W2) &
len W2 <= len W1.append(W2) by Lm10;
theorem
W1.last() = W2.first() implies W1.append(W2).first() = W1.first() & W1
.append(W2).last() = W2.last() & W1.append(W2) is_Walk_from W1.first(), W2
.last() by Lm11;
theorem Th29:
for x,y,z being object holds
W1 is_Walk_from x,y & W2 is_Walk_from y,z implies W1.append(W2)
is_Walk_from x,z
by Lm11;
theorem
n in dom W1 implies W1.append(W2).n = W1.n & n in dom W1.append(W2) by Lm12;
theorem
W1.last() = W2.first() implies for n being Element of NAT st n < len
W2 holds W1.append(W2).(len W1 + n) = W2.(n+1) & (len W1 + n) in dom W1.append(
W2) by Lm13;
theorem
n in dom W1.append(W2) implies n in dom W1 or ex k being Element of
NAT st k < len W2 & n = len W1 + k by Lm14;
theorem Th33:
for W1A, W1B being Walk of G1, W2A,W2B being Walk of G2 st W1A =
W2A & W1B = W2B holds W1A.append(W1B) = W2A.append(W2B)
proof
let W1A, W1B be Walk of G1, W2A, W2B be Walk of G2;
assume that
A1: W1A = W2A and
A2: W1B = W2B;
now
per cases;
suppose
A3: W1A.last() = W1B.first();
then
A4: W2A.last() = W2B.first() by A1,A2;
thus W1A.append(W1B) = W1A ^' W1B by A3,Def10
.= W2A.append(W2B) by A1,A2,A4,Def10;
end;
suppose
A5: W1A.last() <> W1B.first();
then
A6: W2A.last() <> W2B.first() by A1,A2;
thus W1A.append(W1B) = W2A by A1,A5,Def10
.= W2A.append(W2B) by A6,Def10;
end;
end;
hence thesis;
end;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W holds len W
.cut(m,n) + m = n+1 & for i being Element of NAT st i < len W.cut(m,n) holds W
.cut(m,n).(i+1) = W.(m+i) & m+i in dom W by Lm15;
theorem
for m, n being odd Element of NAT st m <= n & n <= len W holds W.cut(m
,n).first() = W.m & W.cut(m,n).last() = W.n & W.cut(m,n) is_Walk_from W.m, W.n
by Lm16;
theorem
for m,n,o being odd Element of NAT st m <= n & n <= o & o <= len W
holds W.cut(m,n).append(W.cut(n,o)) = W.cut(m,o) by Lm17;
theorem
W.cut(1,len W) = W by Lm18;
theorem Th38:
for n being odd Element of NAT st n < len W holds G.walkOf(W.n,
W.(n+1), W.(n+2)) = W.cut(n,n+2)
proof
let n be odd Element of NAT;
set v1 = W.n, e = W.(n+1), v2 = W.(n+2);
set W1 = G.walkOf(v1,e,v2), W2 = W.cut(n,n+2);
assume
A1: n < len W;
then
A2: n+2 <= len W by Th1;
A3: n <= n+2 by Th1;
then
A4: len W.cut(n,n+2) + n = 1 + (2+n) by A2,Lm15;
A5: e Joins v1,v2,G by A1,Def3;
then
A6: G.walkOf(v1,e,v2) = <*v1,e,v2*> by Def5;
A7: len W1 = 3 by A5,Th13;
then
A8: dom W1 = Seg 3 by FINSEQ_1:def 3;
now
let x be Nat;
assume
A9: x in dom W1;
then 1 <= x by FINSEQ_3:25;
then reconsider xaa1 = x-1 as Element of NAT by INT_1:5;
x <= 3 by A7,A9,FINSEQ_3:25;
then
A10: xaa1 < 3-0 by XREAL_1:15;
xaa1+1 = x;
then
A11: W2.x = W.(n+xaa1) by A3,A2,A4,A10,Lm15;
now
per cases by A8,A9,ENUMSET1:def 1,FINSEQ_3:1;
suppose
x = 1;
hence W1.x = W2.x by A6,A11;
end;
suppose
x = 2;
hence W1.x = W2.x by A6,A11;
end;
suppose
x = 3;
hence W1.x = W2.x by A6,A11;
end;
end;
hence W1.x = W2.x;
end;
hence thesis by A4,A7,FINSEQ_2:9;
end;
theorem Th39:
for m,n being odd Element of NAT st m <= n & n < len W holds W
.cut(m,n).addEdge(W.(n+1)) = W.cut(m,n+2)
proof
let m,n be odd Element of NAT;
set W1 = W.cut(m,n);
set e = W.(n+1);
assume that
A1: m <= n and
A2: n < len W;
A3: n+2 <= len W by A2,Th1;
A4: W1.last() = W.n by A1,A2,Lm16;
then e Joins W1.last(), W.(n+2), G by A2,Def3;
then e Joins W1.last(), W.vertexAt(n+2), G by A3,Def8;
then W1.last().adj(e) = W.vertexAt(n+2) by GLIB_000:66;
then W1.last().adj(e) = W.(n+2) by A3,Def8;
then
A5: G.walkOf(W1.last(),e,W1.last().adj(e)) = W.cut(n,n+2) by A2,A4,Th38;
n <= n+2 by Th1;
hence thesis by A1,A3,A5,Lm17;
end;
theorem
for n being odd Element of NAT st n <= len W holds W.cut(n,n) = <* W
.vertexAt(n) *> by Lm19;
theorem
m is odd & m <= n implies W.cut(1,n).cut(1,m) = W.cut(1,m) by Lm20;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W1 & W1.last() =
W2.first() holds W1.append(W2).cut(m,n) = W1.cut(m,n) by Lm21;
theorem
for m being odd Element of NAT st m <= len W holds len W.cut(1,m) = m
by Lm22;
theorem
for m being odd Element of NAT, x being Element of NAT st x in dom W
.cut(1,m) & m <= len W holds W.cut(1,m).x = W.x by Lm23;
theorem
for m,n being odd Element of NAT, i being Element of NAT st m <= n & n
<= len W & i in dom W.cut(m,n) holds W.cut(m,n).i = W.(m+i-1) & m+i-1 in dom W
proof
let m,n be odd Element of NAT, i be Element of NAT;
assume that
A1: m <= n and
A2: n <= len W and
A3: i in dom W.cut(m,n);
1 <= i by A3,FINSEQ_3:25;
then reconsider iaa1 = i-1 as Element of NAT by INT_1:5;
i <= len W.cut(m,n) by A3,FINSEQ_3:25;
then
A4: iaa1 < len W.cut(m,n) - 0 by XREAL_1:15;
iaa1+1 = i;
then W.cut(m,n).i = W.(m+iaa1) by A1,A2,A4,Lm15;
hence thesis by A1,A2,A4,Lm15;
end;
theorem Th46:
for W1 being Walk of G1, W2 being Walk of G2, m, n being Element
of NAT st W1 = W2 holds W1.cut(m,n) = W2.cut(m,n)
proof
let W1 be Walk of G1, W2 be Walk of G2, m, n be Element of NAT;
assume
A1: W1 = W2;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W1;
hence W1.cut(m,n) = (m,n)-cut W2 by A1,Def11
.= W2.cut(m,n) by A1,A2,Def11;
end;
suppose
A3: not (m is odd & n is odd & m <= n & n <= len W1);
hence W1.cut(m,n) = W2 by A1,Def11
.= W2.cut(m,n) by A1,A3,Def11;
end;
end;
hence thesis;
end;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W & W.m = W.n
holds len W.remove(m,n) + n = len W + m by Lm24;
theorem
W is_Walk_from x,y implies W.remove(m,n) is_Walk_from x,y by Lm25;
theorem
len W.remove(m,n) <= len W by Lm26;
theorem
W.remove(m,m) = W by Lm27;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W & W.m = W.n
holds W.cut(1,m).last() = W.cut(n,len W).first() by Lm28;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W & W.m = W.n
holds for x being Element of NAT st x in Seg m holds W.remove(m,n).x = W.x
by Lm29;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W & W.m = W.n
holds for x being Element of NAT st m <= x & x <= len W.remove(m,n) holds W
.remove(m,n).x = W.(x - m + n) & x - m + n is Element of NAT & x - m + n <= len
W by Lm30;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W & W.m = W.n
holds len W.remove(m,n) = len W + m - n by Lm31;
theorem Th55:
for m being Element of NAT st W.m = W.last() holds W.remove(m,
len W) = W.cut(1,m)
proof
let m be Element of NAT;
assume
A1: W.m = W.last();
now
per cases;
suppose
A2: m is odd & m <= len W;
then
A3: len W.remove(m,len W) + len W = len W + m by A1,Lm24;
then
A4: len W.remove(m,len W) = len W.cut(1,m) by A2,Lm22;
now
let k be Nat;
assume that
A5: 1 <= k and
A6: k <= len W.remove(m, len W);
A7: k in dom W.cut(1,m) by A4,A5,A6,FINSEQ_3:25;
k in Seg m by A3,A5,A6,FINSEQ_1:1;
hence W.remove(m,len W).k = W.k by A1,A2,Lm29
.= W.cut(1,m).k by A2,A7,Lm23;
end;
hence thesis by A4,FINSEQ_1:14;
end;
suppose
A8: not (m is odd & m <= len W);
then W.cut(1,m) = W by Def11;
hence thesis by A8,Def12;
end;
end;
hence thesis;
end;
theorem
for m being Element of NAT st W.first() = W.m holds W.remove(1,m) = W
.cut(m, len W) by Lm32;
theorem
W.remove(m,n).first() = W.first() & W.remove(m,n).last() = W.last() by Lm33;
theorem
for m,n being odd Element of NAT, x being Element of NAT st m <= n & n
<= len W & W.m = W.n & x in dom W.remove(m,n) holds x in Seg m or m <= x & x <=
len W.remove(m,n) by Lm34;
theorem
for W1 being Walk of G1, W2 being Walk of G2, m, n being Element of
NAT st W1 = W2 holds W1.remove(m,n) = W2.remove(m,n)
proof
let W1 be Walk of G1, W2 be Walk of G2, m, n be Element of NAT;
assume
A1: W1 = W2;
now
per cases;
suppose
A2: m is odd & n is odd & m <= n & n <= len W1 & W1.m = W1.n;
A3: W1.cut(n,len W1) = W2.cut(n,len W2) by A1,Th46;
A4: W1.cut(1,m) = W2.cut(1,m) by A1,Th46;
W1.remove(m,n) = W1.cut(1,m).append(W1.cut(n,len W1)) by A2,Def12;
then W1.remove(m,n) = W2.cut(1,m).append(W2.cut(n,len W2)) by A4,A3,Th33;
hence thesis by A1,A2,Def12;
end;
suppose
A5: not (m is odd & n is odd & m <= n & n <= len W1 & W1.m = W1.n);
hence W1.remove(m,n) = W2 by A1,Def12
.= W2.remove(m,n) by A1,A5,Def12;
end;
end;
hence thesis;
end;
theorem
for e,x being object holds
e Joins W.last(), x, G implies W.addEdge(e) = W^<*e,x*> by Lm35;
theorem
for e,x being object holds
e Joins W.last(),x,G implies W.addEdge(e).first() = W.first() & W
.addEdge(e).last() = x & W.addEdge(e) is_Walk_from W.first(), x by Lm36;
theorem
for e,x being object holds
e Joins W.last(),x,G implies len W.addEdge(e) = len W + 2 by Lm37;
theorem
for e,x being object holds
e Joins W.last(),x,G implies W.addEdge(e).(len W + 1) = e & W.addEdge(
e).(len W + 2) = x & for n being Element of NAT st n in dom W holds W.addEdge(e
).n = W.n by Lm38;
theorem
for e,x,y,z being object holds
W is_Walk_from x,y & e Joins y,z,G implies W.addEdge(e) is_Walk_from x
,z by Lm39;
theorem Th65:
1 <= len W.vertexSeq()
proof
now
assume len W.vertexSeq() < 1;
then len W.vertexSeq() < 0 + 1;
then len W.vertexSeq() = 0 by NAT_1:13;
then len W + 1 = 2 * 0 by Def14;
hence contradiction;
end;
hence thesis;
end;
theorem Th66:
for n being odd Element of NAT st n <= len W holds 2 * ((n+1)
div 2) - 1 = n & 1 <= (n+1) div 2 & (n+1) div 2 <= len W.vertexSeq()
proof
let n be odd Element of NAT;
assume
A1: n <= len W;
set m = (n+1) div 2;
2 divides n+1 by PEPIN:22;
then
A2: 2 * m = n+1 by NAT_D:3;
hence 2 * m - 1 = n;
A3: now
assume m < 1;
then m < 0 + 1;
then m = 0 by NAT_1:13;
hence contradiction by A2;
end;
then reconsider maa1 = m-1 as Element of NAT by INT_1:5;
thus 1 <= m by A3;
now
assume len W.vertexSeq() < m;
then len W.vertexSeq() < maa1 + 1;
then len W.vertexSeq() <= maa1 by NAT_1:13;
then 2 * len W.vertexSeq() <= 2 * maa1 by NAT_1:4;
then len W + 1 <= (2 * m) - (2 * 1) by Def14;
then len W + 1 + 2 <= n + 1 - 2 + 2 by A2,XREAL_1:7;
then len W + 1 + 2 < n + 1 + 1 by NAT_1:13;
then len W + 3 - 3 < n + 2 - 2 by XREAL_1:14;
hence contradiction by A1;
end;
hence thesis;
end;
theorem
G.walkOf(v).vertexSeq() = <*v*>
proof
set VS = G.walkOf(v).vertexSeq();
len G.walkOf(v) + 1 = 2 * len VS by Def14;
then
A1: 1 + 1 = 2 * len VS by Th12;
then VS.1 = G.walkOf(v).(2*1-1) by Def14
.= v;
hence thesis by A1,FINSEQ_1:40;
end;
theorem Th68:
for e,x,y being object holds
e Joins x,y,G implies G.walkOf(x,e,y).vertexSeq() = <*x,y*>
proof let e,x,y be object;
set W = G.walkOf(x,e,y);
assume e Joins x, y, G;
then
A1: W = <*x, e, y*> by Def5;
len W + 1 = 2 * len W.vertexSeq() by Def14;
then
A2: 3 + 1 = 2 * len W.vertexSeq() by A1,FINSEQ_1:45;
then W.vertexSeq().2 = W.(2*2-1) by Def14;
then
A3: W.vertexSeq().2 = y by A1;
W.vertexSeq().1 = W.(2*1-1) by A2,Def14;
then W.vertexSeq().1 = x by A1;
hence thesis by A2,A3,FINSEQ_1:44;
end;
theorem
W.first() = W.vertexSeq().1 & W.last() = W.vertexSeq().(len W .vertexSeq())
proof
A1: len W + 1 = 2*len W.vertexSeq() by Def14;
A2: 1 <= len W.vertexSeq() by Th65;
then W.vertexSeq().1 = W.(2*1-1) by Def14;
hence W.vertexSeq().1 = W.first();
W.vertexSeq().(len W.vertexSeq()) = W.(2*len W.vertexSeq()-1) by A2,Def14;
hence thesis by A1;
end;
theorem
for n being odd Element of NAT st n <= len W holds W.vertexAt(n) = W
.vertexSeq().((n+1) div 2)
proof
let n be odd Element of NAT;
set m = (n+1) div 2;
assume
A1: n <= len W;
then
A2: 2 * m - 1 = n by Th66;
A3: m <= len W.vertexSeq() by A1,Th66;
A4: 1 <= m by A1,Th66;
W.vertexAt(n) = W.n by A1,Def8;
hence thesis by A2,A4,A3,Def14;
end;
theorem Th71:
n in dom W.vertexSeq() iff 2*n-1 in dom W
proof
hereby
assume
A1: n in dom W.vertexSeq();
then
A2: 1 <= n by FINSEQ_3:25;
then 1 <= n+n by NAT_1:12;
then
A3: 2*n-1 is Element of NAT by INT_1:5;
n <= len W.vertexSeq() by A1,FINSEQ_3:25;
then 2*n <= 2*len W.vertexSeq() by XREAL_1:64;
then 2*n <= len W + 1 by Def14;
then
A4: 2*n-1 <= len W + 1 - 1 by XREAL_1:13;
2*1 <= 2*n by A2,XREAL_1:64;
then 2-1 <= 2*n-1 by XREAL_1:13;
hence 2*n-1 in dom W by A4,A3,FINSEQ_3:25;
end;
assume
A5: 2*n-1 in dom W;
then reconsider 2naa1=2*n-1 as Element of NAT;
1 <= 2naa1 by A5,FINSEQ_3:25;
then 1+1 <= 2*n-1+1 by XREAL_1:7;
then 2*1 <= 2*n;
then
A6: 1 <= n by XREAL_1:68;
2naa1 <= len W by A5,FINSEQ_3:25;
then 2*n-1+1 <= len W+1 by XREAL_1:7;
then 2*n <= 2 * len W.vertexSeq() by Def14;
then n <= len W.vertexSeq() by XREAL_1:68;
hence thesis by A6,FINSEQ_3:25;
end;
theorem
W.cut(1,n).vertexSeq() c= W.vertexSeq()
proof
now
per cases;
suppose
A1: n is odd & 1 <= n & n <= len W;
set f = W.cut(1,n).vertexSeq();
now
let v be object;
assume
A2: v in f;
then consider x,y being object such that
A3: v = [x,y] by RELAT_1:def 1;
A4: y = f.x by A2,A3,FUNCT_1:1;
A5: x in dom f by A2,A3,FUNCT_1:1;
then reconsider x as Element of NAT;
A6: x <= len f by A5,FINSEQ_3:25;
A7: 2*x-1 in dom W.cut(1,n) by A5,Th71;
then 2*x-1 <= len W.cut(1,n) by FINSEQ_3:25;
then 2*x-1 <= n by A1,Lm22;
then
A8: 2*x-1 <= len W by A1,XXREAL_0:2;
1 <= 2*x-1 by A7,FINSEQ_3:25;
then 2*x-1 in dom W by A7,A8,FINSEQ_3:25;
then
A9: x in dom W.vertexSeq() by Th71;
then
A10: x <= len W.vertexSeq() by FINSEQ_3:25;
1 <= x by A5,FINSEQ_3:25;
then y = W.cut(1,n).(2*x-1) by A4,A6,Def14;
then
A11: y = W.(2*x-1) by A1,A7,Lm23;
1 <= x by A9,FINSEQ_3:25;
then W.vertexSeq().x = y by A11,A10,Def14;
hence v in W.vertexSeq() by A3,A9,FUNCT_1:1;
end;
hence thesis by TARSKI:def 3;
end;
suppose
not (n is odd & 1 <= n & n <= len W);
hence thesis by Def11;
end;
end;
hence thesis;
end;
theorem Th73:
e Joins W.last(),x,G implies W.addEdge(e).vertexSeq() = W
.vertexSeq() ^ <*x*>
proof
set W2 = W.addEdge(e), W3 = W.vertexSeq() ^ <*x*>;
assume
A1: e Joins W.last(),x,G;
then len W2 = len W + 2 by Lm37;
then
A2: len W + 2 + 1 = 2 * len W2.vertexSeq() by Def14;
len W3 = len W.vertexSeq() + len <*x*> by FINSEQ_1:22;
then len W3 = len W.vertexSeq() + 1 by FINSEQ_1:39;
then 2*len W3 = 2*len W.vertexSeq()+2*1;
then
A3: 2*len W3 = len W + 1 + 2 by Def14
.= 2* len W2.vertexSeq() by A2;
now
let k be Nat;
assume that
A4: 1 <= k and
A5: k <= len W2.vertexSeq();
A6: W2.vertexSeq().k = W2.(2*k-1) by A4,A5,Def14;
A7: k in dom W3 by A3,A4,A5,FINSEQ_3:25;
now
per cases by A7,FINSEQ_1:25;
suppose
A8: k in dom W.vertexSeq();
then
A9: 2*k-1 in dom W by Th71;
A10: 1 <= k by A8,FINSEQ_3:25;
A11: k <= len W.vertexSeq() by A8,FINSEQ_3:25;
W3.k = W.vertexSeq().k by A8,FINSEQ_1:def 7;
then W3.k = W.(2*k-1) by A10,A11,Def14;
hence W2.vertexSeq().k = W3.k by A1,A6,A9,Lm38;
end;
suppose
ex n being Nat st n in dom <*x*> & k=len W.vertexSeq()+n;
then consider n being Nat such that
A12: n in dom <*x*> and
A13: k = len W.vertexSeq() + n;
n in Seg 1 by A12,FINSEQ_1:38;
then
A14: n = 1 by FINSEQ_1:2,TARSKI:def 1;
then
A15: 2*k = 2*len W.vertexSeq() + 2*1 by A13
.= len W + 1 + 2 by Def14
.= len W + 2 + 1;
W3.k = <*x*>.1 by A12,A13,A14,FINSEQ_1:def 7
.= x;
hence W2.vertexSeq().k = W3.k by A1,A6,A15,Lm38;
end;
end;
hence W2.vertexSeq().k = W3.k;
end;
hence thesis by A3,FINSEQ_1:14;
end;
theorem Th74:
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
.vertexSeq() = W2.vertexSeq()
proof
let W1 be Walk of G1, W2 be Walk of G2;
set VS1 = W1.vertexSeq(), VS2 = W2.vertexSeq();
assume
A1: W1 = W2;
now
thus len VS1 = len VS1;
A2: 2 * len VS1 = len W2 + 1 by A1,Def14
.= 2 * len VS2 by Def14;
hence len VS2 = len VS1;
let x be Nat;
assume
A3: x in dom VS1;
then
A4: x <= len VS2 by A2,FINSEQ_3:25;
A5: 1 <= x by A3,FINSEQ_3:25;
x <= len VS1 by A3,FINSEQ_3:25;
hence VS1.x = W2.(2*x - 1) by A1,A5,Def14
.= VS2.x by A5,A4,Def14;
end;
hence thesis by FINSEQ_2:9;
end;
theorem
for n being even Element of NAT st 1 <= n & n <= len W holds n div 2
in dom W.edgeSeq() & W.n = W.edgeSeq().(n div 2) by Lm40;
theorem
n in dom W.edgeSeq() iff 2*n in dom W by Lm41;
theorem
for n being Element of NAT st n in dom W.edgeSeq() holds W.edgeSeq().n
in the_Edges_of G
proof
let n be Element of NAT;
assume n in dom W.edgeSeq();
then W.edgeSeq().n in rng W.edgeSeq() by FUNCT_1:def 3;
hence thesis;
end;
theorem
ex lenWaa1 being even Element of NAT st lenWaa1 = len W - 1 & len W
.edgeSeq() = lenWaa1 div 2 by Lm42;
theorem
W.cut(1,n).edgeSeq() c= W.edgeSeq() by Lm43;
theorem
for e,x being object holds
e Joins W.last(),x,G implies W.addEdge(e).edgeSeq() = W.edgeSeq() ^ <*
e*> by Lm44;
theorem Th81:
for e,x,y being object holds
e Joins x,y,G iff G.walkOf(x,e,y).edgeSeq() = <*e*>
proof let e,x,y be object;
set W = G.walkOf(x,e,y);
hereby
assume
A1: e Joins x,y, G;
then len W = 3 by Th13;
then
A2: 2+1 = 2*len W.edgeSeq()+1 by Def15;
A3: W = <*x,e,y*> by A1,Def5;
A4: now
let k be Nat;
assume that
A5: 1 <= k and
A6: k <= len W.edgeSeq();
A7: k = 1 by A2,A5,A6,XXREAL_0:1;
then W.edgeSeq().k = W.(2*1) by A6,Def15
.= e by A3;
hence W.edgeSeq().k = <*e*>.k by A7;
end;
len W.edgeSeq() = len <*e*> by A2,FINSEQ_1:39;
hence W.edgeSeq() = <*e*> by A4,FINSEQ_1:14;
end;
assume W.edgeSeq() = <*e*>;
then len W.edgeSeq() = 1 by FINSEQ_1:39;
then
A8: len W = 2*1+1 by Def15;
now
assume not e Joins x,y,G;
then W = G.walkOf(the Element of the_Vertices_of G) by Def5;
hence contradiction by A8,Th12;
end;
hence thesis;
end;
theorem
W.reverse().edgeSeq() = Rev (W.edgeSeq())
proof
set W1 = W.reverse().edgeSeq(), W2 = Rev (W.edgeSeq());
A1: len W = len W.reverse() by FINSEQ_5:def 3;
len W = 2 * len W.edgeSeq() + 1 by Def15;
then
A2: 2 * len W.edgeSeq() + 1 = 2 * len W1 + 1 by A1,Def15;
A3: now
let n be Nat;
assume that
A4: 1 <= n and
A5: n <= len W1;
A6: W1.n = W.reverse().(2*n) by A4,A5,Def15;
set rn = len W.edgeSeq() - n + 1;
reconsider rn as Element of NAT by A2,A5,FINSEQ_5:1;
A7: n in Seg len W.edgeSeq() by A2,A4,A5,FINSEQ_1:1;
then
A8: rn in Seg len W.edgeSeq() by FINSEQ_5:2;
then
A9: 1 <= rn by FINSEQ_1:1;
A10: n in dom W.edgeSeq() by A7,FINSEQ_1:def 3;
then
A11: 2*n in dom W by Lm41;
then
A12: 1 <= 2*n by FINSEQ_3:25;
A13: rn <= len W.edgeSeq() by A8,FINSEQ_1:1;
A14: len W - 2*n + 1 = 2*len W.edgeSeq() + 1 - 2*n + 1 by Def15
.= 2*rn;
2*n <= len W.reverse() by A1,A11,FINSEQ_3:25;
then
A15: 2*n in dom W.reverse() by A12,FINSEQ_3:25;
W2.n = W.edgeSeq().rn by A10,FINSEQ_5:58
.= W.(2*rn) by A9,A13,Def15;
hence W1.n = W2.n by A15,A6,A14,Lm8;
end;
len W1 = len W2 by A2,FINSEQ_5:def 3;
hence thesis by A3,FINSEQ_1:14;
end;
theorem
W1.last() = W2.first() implies W1.append(W2).edgeSeq() = W1.edgeSeq()
^ W2.edgeSeq()
proof
set W3 = W1.append(W2), W4 = W1.edgeSeq() ^ W2.edgeSeq();
A1: len W4 = len W1.edgeSeq() + len W2.edgeSeq() by FINSEQ_1:22;
assume
A2: W1.last() = W2.first();
then len W3 + 1 = len W1 + len W2 by Lm9;
then len W3 + 1 = len W1 + (2*len W2.edgeSeq() + 1) by Def15
.= len W1 + 2*len W2.edgeSeq() + 1;
then
A3: 2*len W3.edgeSeq()+1 = 2*len W2.edgeSeq()+len W1 by Def15
.= 2*len W2.edgeSeq()+(2*len W1.edgeSeq()+1) by Def15
.= 2*len W2.edgeSeq()+2*len W1.edgeSeq()+1;
A4: W3 = W1 ^' W2 by A2,Def10;
now
let n be Nat;
assume that
A5: 1 <= n and
A6: n <= len W3.edgeSeq();
reconsider n1 = n as Element of NAT by ORDINAL1:def 12;
A7: W3.edgeSeq().n1 = W3.(2*n1) by A5,A6,Def15;
A8: n1 in dom W4 by A1,A3,A5,A6,FINSEQ_3:25;
now
per cases by A8,FINSEQ_1:25;
suppose
A9: n in dom W1.edgeSeq();
then
A10: n <= len W1.edgeSeq() by FINSEQ_3:25;
A11: 1 <= n by A9,FINSEQ_3:25;
A12: 2*n in dom W1 by A9,Lm41;
then
A13: 1 <= 2*n by FINSEQ_3:25;
A14: 2*n <= len W1 by A12,FINSEQ_3:25;
W4.n = W1.edgeSeq().n by A9,FINSEQ_1:def 7
.= W1.(2*n) by A11,A10,Def15;
hence W3.edgeSeq().n = W4.n by A4,A7,A13,A14,FINSEQ_6:140;
end;
suppose
ex k being Nat st k in dom W2.edgeSeq() & n = len W1 .edgeSeq() + k;
then consider k being Nat such that
A15: k in dom W2.edgeSeq() and
A16: n = len W1.edgeSeq() + k;
2*n+1 = 2*k + (2*len W1.edgeSeq()+1) by A16
.= 2*k + len W1 by Def15;
then
A17: 2*n = len W1 + (2*k-1);
A18: 1 <= k by A15,FINSEQ_3:25;
then 1 <= k+k by NAT_1:12;
then reconsider 2kaa1 = 2*k-1 as Element of NAT by INT_1:5;
A19: k <= len W2.edgeSeq() by A15,FINSEQ_3:25;
then 2*k <= 2*len W2.edgeSeq() by XREAL_1:64;
then 2*k < 2*len W2.edgeSeq() + 1 by NAT_1:13;
then 2*k < len W2 by Def15;
then
A20: 2kaa1 < len W2 - 0 by XREAL_1:14;
1+1 <= k+k by A18,XREAL_1:7;
then 1+1-1 <= 2kaa1 by XREAL_1:13;
then
A21: W3.(2*n) = W2.(2kaa1+1) by A4,A17,A20,FINSEQ_6:141
.= W2.(2*k);
W4.n = W2.edgeSeq().k by A15,A16,FINSEQ_1:def 7
.= W2.(2*k) by A18,A19,Def15;
hence W3.edgeSeq().n = W4.n by A5,A6,A21,Def15;
end;
end;
hence W3.edgeSeq().n = W4.n;
end;
hence thesis by A1,A3,FINSEQ_1:14;
end;
theorem Th84:
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
.edgeSeq() = W2.edgeSeq()
proof
let W1 be Walk of G1, W2 be Walk of G2;
set ES1 = W1.edgeSeq(), ES2 = W2.edgeSeq();
assume
A1: W1 = W2;
now
thus len ES1 = len ES1;
A2: 2 * len ES1 + 1 = len W2 by A1,Def15
.= 2 * len ES2 + 1 by Def15;
hence len ES2 = len ES1;
let x be Nat;
assume
A3: x in dom ES1;
then
A4: x <= len ES2 by A2,FINSEQ_3:25;
A5: 1 <= x by A3,FINSEQ_3:25;
x <= len ES1 by A3,FINSEQ_3:25;
hence ES1.x = W2.(2*x) by A1,A5,Def15
.= ES2.x by A5,A4,Def15;
end;
hence thesis by FINSEQ_2:9;
end;
theorem
x in W.vertices() iff ex n being odd Element of NAT st n <= len W & W.
n = x by Lm45;
theorem Th86:
W.first() in W.vertices() & W.last() in W.vertices()
proof
1 <= len W by ABIAN:12;
hence W.first() in W.vertices() by Lm45,JORDAN12:2;
thus thesis by Lm45;
end;
theorem Th87:
for n being odd Element of NAT st n <= len W holds W.vertexAt(n)
in W.vertices()
proof
let n be odd Element of NAT;
assume
A1: n <= len W;
then W.vertexAt(n) = W.n by Def8;
hence thesis by A1,Lm45;
end;
theorem
G.walkOf(v).vertices() = {v}
proof
now
let x be object;
A1: 1 <= len G.walkOf(v) by ABIAN:12;
hereby
assume x in G.walkOf(v).vertices();
then consider n being odd Element of NAT such that
A2: n <= len G.walkOf(v) and
A3: G.walkOf(v).n = x by Lm45;
A4: 1 <= n by ABIAN:12;
n <= 1 by A2,Th12;
then x = G.walkOf(v).1 by A3,A4,XXREAL_0:1;
then x = v;
hence x in {v} by TARSKI:def 1;
end;
assume x in {v};
then
A5: x = v by TARSKI:def 1;
G.walkOf(v).1 = v;
hence x in G.walkOf(v).vertices() by A5,A1,Lm45,JORDAN12:2;
end;
hence thesis by TARSKI:2;
end;
theorem Th89:
for e,x,y being object holds
e Joins x,y,G implies G.walkOf(x,e,y).vertices() = {x,y}
proof let e,x,y be object;
set W = G.walkOf(x,e,y);
assume e Joins x, y, G;
then W.vertexSeq() = <*x,y*> by Th68;
hence thesis by FINSEQ_2:127;
end;
theorem
W.vertices() = W.reverse().vertices()
proof
now
reconsider lenW = len W as odd Element of NAT;
let x be object;
hereby
reconsider lenW = len W as odd Element of NAT;
assume x in W.vertices();
then consider n being odd Element of NAT such that
A1: n <= len W and
A2: W.n = x by Lm45;
A3: lenW-n+1 is odd Element of NAT by A1,FINSEQ_5:1;
1 <= n by ABIAN:12;
then
A4: n in dom W by A1,FINSEQ_3:25;
then n in Seg len W by FINSEQ_1:def 3;
then lenW-n+1 in Seg len W by FINSEQ_5:2;
then lenW-n+1 in dom W by FINSEQ_1:def 3;
then lenW-n+1 <= len W by FINSEQ_3:25;
then
A5: lenW-n+1 <= len W.reverse() by FINSEQ_5:def 3;
W.reverse().(len W - n + 1) = x by A2,A4,Th23;
hence x in W.reverse().vertices() by A3,A5,Lm45;
end;
assume x in W.reverse().vertices();
then consider n being odd Element of NAT such that
A6: n <= len W.reverse() and
A7: W.reverse().n = x by Lm45;
A8: 1 <= n by ABIAN:12;
then n in dom W.reverse() by A6,FINSEQ_3:25;
then
A9: W.(len W - n + 1) = x by A7,FINSEQ_5:def 3;
A10: n <= len W by A6,FINSEQ_5:def 3;
then n in Seg len W by A8,FINSEQ_1:1;
then lenW-n+1 in Seg len W by FINSEQ_5:2;
then
A11: lenW-n+1 <= len W by FINSEQ_1:1;
lenW-n+1 is odd Element of NAT by A10,FINSEQ_5:1;
hence x in W.vertices() by A9,A11,Lm45;
end;
hence thesis by TARSKI:2;
end;
theorem Th91:
W1.last() = W2.first() implies W1.append(W2).vertices() = W1
.vertices() \/ W2.vertices()
proof
set W = W1.append(W2);
assume
A1: W1.last() = W2.first();
then
A2: W = W1 ^' W2 by Def10;
now
let x be object;
A3: now
assume x in W1.vertices();
then consider n being odd Element of NAT such that
A4: n <= len W1 and
A5: W1.n = x by Lm45;
1 <= n by ABIAN:12;
then
A6: n in dom W1 by A4,FINSEQ_3:25;
then n in dom W by Lm12;
then
A7: n <= len W by FINSEQ_3:25;
W.n = x by A5,A6,Lm12;
hence x in W.vertices() by A7,Lm45;
end;
hereby
assume
A8: x in W.vertices();
then reconsider v=x as Vertex of G;
consider n being odd Element of NAT such that
A9: n <= len W and
A10: W.n = v by A8,Lm45;
A11: 1 <= n by ABIAN:12;
now
per cases;
suppose
A12: n <= len W1;
then n in dom W1 by A11,FINSEQ_3:25;
then W1.n = v by A10,Lm12;
then v in W1.vertices() by A12,Lm45;
hence x in W1.vertices()\/W2.vertices() by XBOOLE_0:def 3;
end;
suppose
A13: n > len W1;
then consider k being Nat such that
A14: len W1 + k = n by NAT_1:10;
reconsider k as even Element of NAT by A14,ORDINAL1:def 12;
k <> 0 by A13,A14;
then
A15: 0+1 <= k by NAT_1:13;
len W1 + k + 1 <= len W + 1 by A9,A14,XREAL_1:7;
then (k + 1) + len W1 <= len W2 + len W1 by A1,Lm9;
then
A16: k + 1 + len W1 - len W1 <= len W2 + len W1 - len W1 by XREAL_1:13;
then
A17: W2.vertexAt(k+1) in W2.vertices() by Th87;
k < len W2 - 1 + 1 by A16,NAT_1:13;
then W2.(k+1) = v by A2,A10,A14,A15,FINSEQ_6:141;
then v in W2.vertices() by A16,A17,Def8;
hence x in W1.vertices() \/ W2.vertices() by XBOOLE_0:def 3;
end;
end;
hence x in W1.vertices() \/ W2.vertices();
end;
assume
A18: x in W1.vertices() \/ W2.vertices();
now
per cases by A18,XBOOLE_0:def 3;
suppose
x in W1.vertices();
hence x in W.vertices() by A3;
end;
suppose
A19: x in W2.vertices();
reconsider lenW1 = len W1 as odd Element of NAT;
consider n being odd Element of NAT such that
A20: n <= len W2 and
A21: W2.n = x by A19,Lm45;
reconsider naa1 = n-1 as even Element of NAT by ABIAN:12,INT_1:5;
A22: naa1 < len W2 - 0 by A20,XREAL_1:15;
then (len W1 + naa1) in dom W by A1,Lm13;
then
A23: lenW1 + naa1 <= len W by FINSEQ_3:25;
W.(len W1 + naa1) = W2.(naa1 + 1) by A1,A22,Lm13;
hence x in W.vertices() by A21,A23,Lm45;
end;
end;
hence x in W.vertices();
end;
hence thesis by TARSKI:2;
end;
theorem
for m,n being odd Element of NAT st m <= n & n <= len W holds W.cut(m,
n).vertices() c= W.vertices()
proof
let m, n be odd Element of NAT;
set W2 = W.cut(m,n);
assume that
A1: m <= n and
A2: n <= len W;
now
let x be object;
assume x in W2.vertices();
then consider n being odd Element of NAT such that
A3: n <= len W2 and
A4: W2.n = x by Lm45;
reconsider naa1 = n - 1 as even Element of NAT by ABIAN:12,INT_1:5;
A5: naa1 < len W2 - 0 by A3,XREAL_1:15;
then m+naa1 in dom W by A1,A2,Lm15;
then
A6: m+naa1 <= len W by FINSEQ_3:25;
W2.(naa1+1) = W.(m+naa1) by A1,A2,A5,Lm15;
hence x in W.vertices() by A4,A6,Lm45;
end;
hence thesis by TARSKI:def 3;
end;
theorem Th93:
for e,x being object holds
e Joins W.last(),x,G implies W.addEdge(e).vertices() = W .vertices() \/ {x}
proof let e,x be object;
set W2 = G.walkOf(W.last(), e, W.last().adj(e));
set W3 = W.addEdge(e), WV = W.vertices();
assume
A1: e Joins W.last(), x, G;
then reconsider x9=x as Vertex of G by GLIB_000:13;
A2: W.last().adj(e) = x9 by A1,GLIB_000:66;
then W2.first() = W.last() by A1,Th14;
then
A3: W3.vertices() = WV \/ W2.vertices() by Th91;
A4: now
let y be object;
hereby
assume
A5: y in WV \/ {W.last(), x};
now
per cases by A5,XBOOLE_0:def 3;
suppose
y in WV;
hence y in WV \/ {x} by XBOOLE_0:def 3;
end;
suppose
A6: y in {W.last(), x};
now
per cases by A6,TARSKI:def 2;
suppose
y = W.last();
then y in WV by Th86;
hence y in WV \/ {x} by XBOOLE_0:def 3;
end;
suppose
y = x;
then y in {x} by TARSKI:def 1;
hence y in WV \/ {x} by XBOOLE_0:def 3;
end;
end;
hence y in WV \/ {x};
end;
end;
hence y in WV \/ {x};
end;
assume
A7: y in WV \/ {x};
now
per cases by A7,XBOOLE_0:def 3;
suppose
y in WV;
hence y in WV \/ {W.last(), x} by XBOOLE_0:def 3;
end;
suppose
y in {x};
then y = x by TARSKI:def 1;
then y in {W.last(), x} by TARSKI:def 2;
hence y in WV \/ {W.last(), x} by XBOOLE_0:def 3;
end;
end;
hence y in WV \/ {W.last(), x};
end;
W2.vertices() = {W.last(), x} by A1,A2,Th89;
hence thesis by A3,A4,TARSKI:2;
end;
theorem
for G being _Graph, W being Walk of G, e,x being set holds e
Joins W.last(),x,G & not x in W.vertices() implies card W.addEdge(e).vertices()
= card W.vertices() + 1
proof
let G be _Graph, W be Walk of G, e, x be set;
assume that
A1: e Joins W.last(),x,G and
A2: not x in W.vertices();
card W.addEdge(e).vertices() = card (W.vertices()\/{x}) by A1,Th93;
hence thesis by A2,CARD_2:41;
end;
theorem
x in W.vertices() & y in W.vertices() implies ex W9 being Walk of G st
W9 is_Walk_from x,y
proof
assume that
A1: x in W.vertices() and
A2: y in W.vertices();
consider m being odd Element of NAT such that
A3: m <= len W and
A4: W.m = x by A1,Lm45;
consider n being odd Element of NAT such that
A5: n <= len W and
A6: W.n = y by A2,Lm45;
now
per cases;
suppose
m <= n;
then W.cut(m,n) is_Walk_from x, y by A4,A5,A6,Lm16;
hence thesis;
end;
suppose
n <= m;
then W.cut(n,m) is_Walk_from y, x by A3,A4,A6,Lm16;
then W.cut(n,m).reverse() is_Walk_from x, y by Th22;
hence thesis;
end;
end;
hence thesis;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
.vertices() = W2.vertices() by Th74;
theorem
e in W.edges() iff ex n being even Element of NAT st 1 <= n & n <= len
W & W.n = e by Lm46;
theorem Th98:
e in W.edges() iff ex n being odd Element of NAT st n < len W & W.(n+1) = e
proof
hereby
assume e in W.edges();
then consider n1 being even Element of NAT such that
A1: 1 <= n1 and
A2: n1 <= len W and
A3: W.n1 = e by Lm46;
reconsider n = n1-1 as odd Element of NAT by A1,INT_1:5;
take n;
n1-1 < len W - 0 by A2,XREAL_1:15;
hence n < len W;
thus W.(n+1) = e by A3;
end;
given n being odd Element of NAT such that
A4: n < len W and
A5: W.(n+1) = e;
A6: 1 <= n+1 by NAT_1:12;
n+1 <= len W by A4,NAT_1:13;
hence thesis by A5,A6,Lm46;
end;
theorem Th99:
rng W = W.vertices() \/ W.edges()
proof
now
let y be object;
assume
A1: y in W.vertices() \/ W.edges();
now
per cases by A1,XBOOLE_0:def 3;
suppose
y in W.vertices();
then consider x being odd Element of NAT such that
A2: x <= len W and
A3: W.x = y by Lm45;
1 <= x by ABIAN:12;
then x in dom W by A2,FINSEQ_3:25;
hence y in rng W by A3,FUNCT_1:def 3;
end;
suppose
y in W.edges();
then consider x being even Element of NAT such that
A4: 1 <= x and
A5: x <= len W and
A6: W.x = y by Lm46;
x in dom W by A4,A5,FINSEQ_3:25;
hence y in rng W by A6,FUNCT_1:def 3;
end;
end;
hence y in rng W;
end;
then
A7: W.vertices() \/ W.edges() c= rng W by TARSKI:def 3;
now
let y be object;
assume y in rng W;
then consider x being Nat such that
A8: x in dom W and
A9: W.x = y by FINSEQ_2:10;
A10: x <= len W by A8,FINSEQ_3:25;
A11: 1 <= x by A8,FINSEQ_3:25;
now
per cases;
suppose
x is odd;
then y in W.vertices() by A8,A9,A10,Lm45;
hence y in W.vertices() \/ W.edges() by XBOOLE_0:def 3;
end;
suppose
x is even;
then y in W.edges() by A8,A9,A11,A10,Lm46;
hence y in W.vertices() \/ W.edges() by XBOOLE_0:def 3;
end;
end;
hence y in W.vertices() \/ W.edges();
end;
then rng W c= W.vertices() \/ W.edges() by TARSKI:def 3;
hence thesis by A7,XBOOLE_0:def 10;
end;
theorem Th100:
W1.last() = W2.first() implies W1.append(W2).edges() = W1
.edges() \/ W2.edges()
proof
set W = W1.append(W2);
set WE = W.edges(), W1E = W1.edges(), W2E = W2.edges();
set lenW1 = len W1, lenW2 = len W2;
reconsider lenW1, lenW2 as odd Element of NAT;
assume
A1: W1.last() = W2.first();
then
A2: W = W1 ^' W2 by Def10;
now
let x be object;
hereby
assume x in WE;
then consider n being even Element of NAT such that
A3: 1 <= n and
A4: n <= len W and
A5: W.n = x by Lm46;
now
per cases;
suppose
A6: n <= len W1;
then W.n = W1.n by A2,A3,FINSEQ_6:140;
then x in W1E by A3,A5,A6,Lm46;
hence x in W1E \/ W2E by XBOOLE_0:def 3;
end;
suppose
len W1 < n;
then reconsider k = n-lenW1 as odd Element of NAT by INT_1:5;
A7: 1 <= k+1 by NAT_1:12;
n - lenW1 + len W1 < len W + 1 by A4,NAT_1:13;
then n-lenW1 + lenW1 < lenW2 + len W1 by A1,Lm9;
then
A8: k < lenW2 + len W1 - len W1 by XREAL_1:14;
then
A9: k+1 <= len W2 by NAT_1:13;
W2.(k+1) = W.(len W1+k) by A2,A8,ABIAN:12,FINSEQ_6:141
.= x by A5;
then x in W2E by A7,A9,Lm46;
hence x in W1E \/ W2E by XBOOLE_0:def 3;
end;
end;
hence x in W1E \/ W2E;
end;
assume
A10: x in W1E \/ W2E;
now
per cases by A10,XBOOLE_0:def 3;
suppose
x in W1E;
then consider n being even Element of NAT such that
A11: 1 <= n and
A12: n <= len W1 and
A13: W1.n = x by Lm46;
len W1 <= len W by A1,Lm10;
then
A14: n <= len W by A12,XXREAL_0:2;
W.n = x by A2,A11,A12,A13,FINSEQ_6:140;
hence x in WE by A11,A14,Lm46;
end;
suppose
x in W2E;
then consider n being even Element of NAT such that
A15: 1 <= n and
A16: n <= len W2 and
A17: W2.n = x by Lm46;
reconsider naa1 = n-1 as odd Element of NAT by A15,INT_1:5;
naa1 < len W2 by A16,XREAL_1:147;
then
A18: W.(lenW1 + naa1) = W2.(naa1+1) by A2,ABIAN:12,FINSEQ_6:141
.= x by A17;
(naa1 + 1) + lenW1 <= len W2 + len W1 by A16,XREAL_1:7;
then lenW1 + naa1 + 1 <= len W + 1 by A1,Lm9;
then
A19: lenW1+naa1 <= len W by XREAL_1:6;
1 <= lenW1+naa1 by ABIAN:12,NAT_1:12;
hence x in WE by A18,A19,Lm46;
end;
end;
hence x in WE;
end;
hence thesis by TARSKI:2;
end;
theorem
e in W.edges() implies ex v1, v2 being Vertex of G, n being odd
Element of NAT st n+2 <= len W & v1 = W.n & e = W.(n+1) & v2 = W.(n+2) & e
Joins v1, v2,G by Lm47;
theorem Th102:
e in W.edges() iff ex n being Element of NAT st n in dom W
.edgeSeq() & W.edgeSeq().n = e
proof
hereby
assume e in W.edges();
then consider n being object such that
A1: n in dom W.edgeSeq() and
A2: W.edgeSeq().n = e by FUNCT_1:def 3;
reconsider n as Element of NAT by A1;
take n;
thus n in dom W.edgeSeq() & W.edgeSeq().n = e by A1,A2;
end;
given n being Element of NAT such that
A3: n in dom W.edgeSeq() and
A4: W.edgeSeq().n = e;
thus thesis by A3,A4,FUNCT_1:def 3;
end;
theorem
e in W.edges() & e Joins x,y,G implies x in W.vertices() & y in W
.vertices() by Lm48;
theorem
W.cut(m,n).edges() c= W.edges()
proof
now
per cases;
suppose
A1: m is odd & n is odd & m <= n & n <= len W;
then reconsider m9 = m as odd Element of NAT;
now
let e be object;
assume e in W.cut(m,n).edges();
then consider x being even Element of NAT such that
A2: 1 <= x and
A3: x <= len W.cut(m,n) and
A4: W.cut(m,n).x = e by Lm46;
reconsider xaa1 = x-1 as odd Element of NAT by A2,INT_1:5;
A5: xaa1 < len W.cut(m,n) - 0 by A3,XREAL_1:15;
then
A6: m+xaa1 in dom W by A1,Lm15;
then
A7: m9+xaa1 <= len W by FINSEQ_3:25;
xaa1+1 = x;
then
A8: e = W.(m+xaa1) by A1,A4,A5,Lm15;
1 <= m9+xaa1 by A6,FINSEQ_3:25;
hence e in W.edges() by A8,A7,Lm46;
end;
hence thesis by TARSKI:def 3;
end;
suppose
not (m is odd & n is odd & m <= n & n <= len W);
hence thesis by Def11;
end;
end;
hence thesis;
end;
theorem Th105:
W.edges() = W.reverse().edges()
proof
now
let e be object;
hereby
assume e in W.edges();
then consider n being even Element of NAT such that
A1: 1 <= n and
A2: n <= len W and
A3: W.n = e by Lm46;
A4: n in dom W by A1,A2,FINSEQ_3:25;
then
A5: (len W - n + 1) in dom W.reverse() by Th23;
then reconsider rn = len W - n + 1 as even Element of NAT;
A6: 1 <= rn by A5,FINSEQ_3:25;
A7: rn <= len W.reverse() by A5,FINSEQ_3:25;
e = W.reverse().(len W - n + 1) by A3,A4,Th23;
hence e in W.reverse().edges() by A6,A7,Lm46;
end;
assume e in W.reverse().edges();
then consider n being even Element of NAT such that
A8: 1 <= n and
A9: n <= len W.reverse() and
A10: W.reverse().n = e by Lm46;
A11: n in dom W.reverse() by A8,A9,FINSEQ_3:25;
then
A12: (len W.reverse() - n + 1) in dom W.reverse().reverse() by Th23;
then reconsider rn = len W.reverse() - n + 1 as even Element of NAT;
e = W.reverse().reverse().(len W.reverse() - n + 1) by A10,A11,Th23;
then
A13: e = W.rn;
rn in dom W by A12;
then
A14: rn <= len W by FINSEQ_3:25;
1 <= rn by A12,FINSEQ_3:25;
hence e in W.edges() by A13,A14,Lm46;
end;
hence thesis by TARSKI:2;
end;
theorem Th106:
for e,x,y being object holds
e Joins x,y,G iff G.walkOf(x,e,y).edges() = {e}
proof let e,x,y be object;
set W = G.walkOf(x,e,y);
hereby
assume e Joins x,y,G;
then W.edgeSeq() = <*e*> by Th81;
hence W.edges() = {e} by FINSEQ_1:39;
end;
assume W.edges() = {e};
then e in W.edges() by TARSKI:def 1;
then consider n being even Element of NAT such that
A1: 1 <= n and
A2: n <= len W and
W.n = e by Lm46;
A3: 2*0+1 < n by A1,XXREAL_0:1;
now
assume not e Joins x,y,G;
then W = G.walkOf(the Element of the_Vertices_of G) by Def5;
hence contradiction by A2,A3,Th12;
end;
hence thesis;
end;
theorem
W.edges() c= G.edgesBetween(W.vertices())
proof
now
let e be object;
assume e in W.edges();
then consider
v1,v2 being Vertex of G, n being odd Element of NAT such that
A1: n+2 <= len W and
A2: v1 = W.n and
e = W.(n+1) and
A3: v2 = W.(n+2) and
A4: e Joins v1,v2,G by Lm47;
n < len W by A1,Th1;
then
A5: v1 in W.vertices() by A2,Lm45;
v2 in W.vertices() by A1,A3,Lm45;
hence e in G.edgesBetween(W.vertices()) by A4,A5,GLIB_000:32;
end;
hence thesis by TARSKI:def 3;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
.edges() = W2.edges() by Th84;
theorem
for e,x being object holds
e Joins W.last(),x,G implies W.addEdge(e).edges() = W.edges() \/ {e}
proof let e,x be object;
set WB = G.walkOf(W.last(),e,W.last().adj(e));
assume e Joins W.last(),x,G;
then e in W.last().edgesInOut() by GLIB_000:62;
then
A1: e Joins W.last(), W.last().adj(e), G by GLIB_000:67;
then
A2: WB.first() = W.last() by Th14;
WB.edges() = {e} by A1,Th106;
hence thesis by A2,Th100;
end;
theorem
len W = 2 * W.length() + 1 by Def15;
theorem
len W1 = len W2 iff W1.length() = W2.length()
proof
hereby
assume len W1 = len W2;
then 2 * W1.length() + 1 = len W2 by Def15
.= 2 * W2.length() + 1 by Def15;
hence W1.length() = W2.length();
end;
assume W1.length() = W2.length();
hence len W1 = 2*W2.length()+1 by Def15
.= len W2 by Def15;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 holds W1
.length() = W2.length() by Th84;
theorem Th113:
for n being odd Element of NAT st n <= len W holds W.find(W.n)
<= n & W.rfind(W.n) >= n
proof
let n be odd Element of NAT;
assume
A1: n <= len W;
then
A2: W.n in W.vertices() by Lm45;
hence W.find(W.n) <= n by A1,Def19;
thus thesis by A1,A2,Def21;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2, v being set st W1 = W2
holds W1.find(v) = W2.find(v) & W1.rfind(v) = W2.rfind(v)
proof
let W1 be Walk of G1, W2 be Walk of G2, v be set;
assume
A1: W1 = W2;
now
per cases;
suppose
A2: v in W1.vertices();
then
A3: W2.(W1.find(v)) = v by A1,Def19;
A4: v in W2.vertices() by A1,A2,Th74;
A5: for n being odd Nat st n <= len W2 & W2.n = v holds W1.find(v) <= n
by A1,A2,Def19;
W1.find(v) <= len W2 by A1,A2,Def19;
hence W1.find(v) = W2.find(v) by A4,A3,A5,Def19;
A6: W2.(W1.rfind(v)) = v by A1,A2,Def21;
A7: for n being odd Element of NAT st n <= len W2 & W2.n = v holds n <=
W1 .rfind(v) by A1,A2,Def21;
W1.rfind(v) <= len W2 by A1,A2,Def21;
hence W1.rfind(v) = W2.rfind(v) by A4,A6,A7,Def21;
end;
suppose
A8: not v in W1.vertices();
then
A9: not v in W2.vertices() by A1,Th74;
thus W1.find(v) = len W2 by A1,A8,Def19
.= W2.find(v) by A9,Def19;
thus W1.rfind(v) = len W2 by A1,A8,Def21
.= W2.rfind(v) by A9,Def21;
end;
end;
hence thesis;
end;
theorem
for n being odd Element of NAT st n <= len W holds W.find(n) <= n &
W.rfind(n) >= n by Lm49,Lm50;
theorem
W is closed iff W.1 = W.(len W);
theorem
W is closed iff ex x being set st W is_Walk_from x,x
proof
hereby
set x = W.first();
assume W is closed;
then W.first() = W.last();
then W is_Walk_from x,x;
hence ex x being set st W is_Walk_from x,x;
end;
given v being set such that
A1: W is_Walk_from v,v;
A2: W.last() = v by A1;
W.first() = v by A1;
hence thesis by A2;
end;
theorem
W is closed iff W.reverse() is closed
proof
W is closed iff W.reverse().last() = W.last() by Th21;
then W is closed iff W.reverse().last() = W.reverse().first() by Th21;
hence thesis;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st W1 = W2 & W1 is closed
holds W2 is closed;
theorem
W is directed iff for n being odd Element of NAT st n < len W holds W.
(n+1) DJoins W.n, W.(n+2), G by Lm51;
theorem
W is directed & W is_Walk_from x,y & e DJoins y,z,G implies W.addEdge(
e) is directed & W.addEdge(e) is_Walk_from x,z by Lm52;
theorem
for W being DWalk of G, m,n being Element of NAT holds W.cut(m,n) is
directed;
theorem
W is non trivial iff 3 <= len W by Lm54;
theorem
W is non trivial iff len W <> 1 by Lm55;
theorem
W.first() <> W.last() implies W is non trivial by Lm55;
theorem
W is trivial iff ex v being Vertex of G st W = G.walkOf(v) by Lm56;
theorem
W is trivial iff W.reverse() is trivial
proof
thus W is trivial implies W.reverse() is trivial;
assume W.reverse() is trivial;
then len W.reverse() = 1 by Lm55;
then len W = 1 by FINSEQ_5:def 3;
hence thesis by Lm55;
end;
theorem
W2 is trivial implies W1.append(W2) = W1
proof
assume W2 is trivial;
then
A1: len W2 = 1 by Lm55;
now
per cases;
suppose
W1.last() = W2.first();
then
A2: W1.append(W2) = W1 ^' W2 by Def10;
then
A3: len W1.append(W2) + 1 = len W1 + 1 by A1,CARD_1:27,FINSEQ_6:139;
for k being Nat st 1 <= k & k <= len W1.append(W2) holds W1.append(
W2).k = W1.k
by A2,A3,FINSEQ_6:140;
hence thesis by A3,FINSEQ_1:14;
end;
suppose
W1.last() <> W2.first();
hence thesis by Def10;
end;
end;
hence thesis;
end;
theorem
for m, n being odd Element of NAT st m <= n & n <= len W holds W.cut(m
,n) is trivial iff m = n
proof
let m, n be odd Element of NAT;
assume that
A1: m <= n and
A2: n <= len W;
A3: len W.cut(m,n) + m = n + 1 by A1,A2,Lm15;
hereby
assume W.cut(m,n) is trivial;
then 1 = (n - m) + 1 by A3,Lm55;
hence m = n;
end;
assume m = n;
hence thesis by A3,Lm55;
end;
theorem Th130:
for e,x being object holds
e Joins W.last(),x,G implies W.addEdge(e) is non trivial
proof let e,x be object;
assume e Joins W.last(), x, G;
then
A1: len W.addEdge(e) = len W + 2 by Lm37;
1 + 0 < len W + 2 by XREAL_1:8;
hence thesis by A1,Lm55;
end;
theorem Th131:
W is non trivial implies ex lenW2 being odd Element of NAT st
lenW2 = len W - 2 & W.cut(1,lenW2).addEdge(W.(lenW2+1)) = W
proof
set lenW2 = len W - 2*1;
assume W is non trivial;
then len W >= 3 by Lm54;
then reconsider lenW2 as odd Element of NAT by INT_1:5,XXREAL_0:2;
set W1 = W.cut(1,lenW2), e = W.(lenW2+1);
take lenW2;
thus lenW2 = len W - 2;
lenW2 < len W - 0 by XREAL_1:15;
hence W1.addEdge(e) = W.cut(1,lenW2+2) by Th39,ABIAN:12,JORDAN12:2
.= W by Lm18;
end;
theorem Th132:
W2 is non trivial & W2.edges() c= W1.edges() implies W2
.vertices() c= W1.vertices()
proof
assume that
A1: W2 is non trivial and
A2: W2.edges() c= W1.edges();
A3: 3 <= len W2 by A1,Lm54;
now
let v be object;
assume v in W2.vertices();
then consider n being odd Element of NAT such that
A4: n <= len W2 and
A5: W2.n = v by Lm45;
now
per cases;
suppose
n = len W2;
then 3-1 < n-0 by A3,XREAL_1:15;
then reconsider n5 = n-2*1 as odd Element of NAT by INT_1:5;
A6: 1 <= n5+1 by NAT_1:12;
n5 < n - 0 by XREAL_1:15;
then
A7: n5 < len W2 by A4,XXREAL_0:2;
then
A8: W2.(n5+1) Joins W2.n5, W2.(n5+2), G by Def3;
n5+1 <= len W2 by A7,NAT_1:13;
then W2.(n5+1) in W2.edges() by A6,Lm46;
then consider m being even Element of NAT such that
A9: 1 <= m and
A10: m <= len W1 and
A11: W1.m = W2.(n5+1) by A2,Lm46;
reconsider maa1 = m - 1 as odd Element of NAT by A9,INT_1:5;
A12: maa1 < len W1 - 0 by A10,XREAL_1:15;
then
A13: W1.(maa1+1) Joins W1.maa1, W1.(maa1+2), G by Def3;
A14: W1.maa1 = W1.vertexAt(maa1) by A12,Def8;
A15: maa1+2 <= len W1 by A12,Th1;
then W1.(maa1+2) = W1.vertexAt(maa1+2) by Def8;
then v = W1.vertexAt(maa1) or v = W1.vertexAt(maa1+2) by A5,A8,A11,A13
,A14,GLIB_000:15;
hence v in W1.vertices() by A12,A15,Th87;
end;
suppose
n <> len W2;
then
A16: n < len W2 by A4,XXREAL_0:1;
then W2.(n+1) in W2.edges() by Th98;
then consider m being even Element of NAT such that
A17: 1 <= m and
A18: m <= len W1 and
A19: W1.m = W2.(n+1) by A2,Lm46;
A20: W1.m Joins v, W2.(n+2),G by A5,A16,A19,Def3;
reconsider maa1 = m - 1 as odd Element of NAT by A17,INT_1:5;
A21: maa1 < len W1 - 0 by A18,XREAL_1:15;
then
A22: W1.(maa1+1) Joins W1.maa1, W1.(maa1+2), G by Def3;
A23: W1.maa1 = W1.vertexAt(maa1) by A21,Def8;
A24: maa1+2 <= len W1 by A21,Th1;
then W1.(maa1+2) = W1.vertexAt(maa1+2) by Def8;
then v = W1.vertexAt(maa1) or v = W1.vertexAt(maa1+2)
by A20,A22,A23,GLIB_000:15;
hence v in W1.vertices() by A21,A24,Th87;
end;
end;
hence v in W1.vertices();
end;
hence thesis by TARSKI:def 3;
end;
theorem
W is non trivial implies for v being Vertex of G st v in W.vertices()
holds not v is isolated
proof
assume W is non trivial;
then
A1: len W <> 1 by Lm55;
let v be Vertex of G;
assume v in W.vertices();
then consider n being odd Element of NAT such that
A2: n <= len W and
A3: W.n = v by Lm45;
now
per cases;
suppose
A4: n = len W;
1 <= len W by ABIAN:12;
then 1 < len W by A1,XXREAL_0:1;
then 1+1 <= len W by NAT_1:13;
then reconsider lenW2 = len W - 2*1 as odd Element of NAT by INT_1:5;
lenW2 < len W - 0 by XREAL_1:15;
then W.(lenW2+1) Joins W.lenW2,W.(lenW2+2),G by Def3;
then W.(lenW2+1) Joins v,W.lenW2,G by A3,A4,GLIB_000:14;
hence ex e being set st e in v.edgesInOut() by GLIB_000:62;
end;
suppose
n <> len W;
then n < len W by A2,XXREAL_0:1;
then W.(n+1) Joins v, W.(n+2), G by A3,Def3;
hence ex e being set st e in v.edgesInOut() by GLIB_000:62;
end;
end;
hence thesis by GLIB_000:def 49;
end;
theorem
W is trivial iff W.edges() = {}
proof
hereby
assume W is trivial;
then W.length() = 0;
then W.edgeSeq() = {};
hence W.edges() = {};
end;
assume W.edges() = {};
then W.edgeSeq() = {};
then W.length() = 0;
hence thesis;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st
W1 = W2 & W1 is trivial holds W2 is trivial;
theorem
W is Trail-like iff for m,n being even Element of NAT st 1 <= m & m <
n & n <= len W holds W.m <> W.n by Lm57;
theorem
len W <= 3 implies W is Trail-like by Lm61;
theorem
W is Trail-like iff W.reverse() is Trail-like by Lm58;
theorem
for W being Trail of G, m,n being Element of NAT holds W.cut(m,n) is
Trail-like;
theorem
for W being Trail of G, e being set st e in W.last().edgesInOut() &
not e in W.edges() holds W.addEdge(e) is Trail-like by Lm60;
theorem
for W being Trail of G, v being Vertex of G st v in W.vertices() & v
is endvertex holds v = W.first() or v = W.last()
proof
let W be Trail of G, v be Vertex of G;
assume that
A1: v in W.vertices() and
A2: v is endvertex;
consider e being object such that
A3: v.edgesInOut() = {e} and
not e Joins v,v,G by A2,GLIB_000:def 51;
consider n being odd Element of NAT such that
A4: n <= len W and
A5: W.n = v by A1,Lm45;
A6: W.vertexAt(n) = v by A4,A5,Def8;
now
reconsider naa1 = n-1 as even Element of NAT by ABIAN:12,INT_1:5;
assume that
A7: v <> W.first() and
A8: v <> W.last();
A9: n-1 < naa1+2 by NAT_1:16;
1 <= n by ABIAN:12;
then
A10: 1 < n by A5,A7,XXREAL_0:1;
then 1+1 <= n by NAT_1:13;
then
A11: 1+1-1 <= n-1 by XREAL_1:13;
A12: n < len W by A4,A5,A8,XXREAL_0:1;
then
A13: W.(n+1) in v.edgesInOut() by A6,Th9;
W.(n-1) in v.edgesInOut() by A4,A6,A10,Th10;
then
A14: W.(n-1) = e by A3,TARSKI:def 1;
n+1 <= len W by A12,NAT_1:13;
then W.(naa1) <> W.(n+1) by A11,A9,Lm57;
hence contradiction by A3,A14,A13,TARSKI:def 1;
end;
hence thesis;
end;
theorem
for G being _finite _Graph, W being Trail of G holds
len W.edgeSeq() <= G.size()
proof
let G be _finite _Graph, W be Trail of G;
consider f being Function such that
A1: dom f = W.edgeSeq() & for x being object st x in W.edgeSeq() holds f.x
= x`2 from FUNCT_1:sch 3;
now
A2: W.edgeSeq() is one-to-one by Def27;
let x1,x2 be object;
assume that
A3: x1 in dom f and
A4: x2 in dom f and
A5: f.x1 = f.x2;
consider a1,b1 being object such that
A6: x1 = [a1,b1] by A1,A3,RELAT_1:def 1;
A7: a1 in dom W.edgeSeq() by A1,A3,A6,FUNCT_1:1;
A8: f.x2 = x2`2 by A1,A4;
A9: W.edgeSeq().a1 = b1 by A1,A3,A6,FUNCT_1:1;
consider a2,b2 being object such that
A10: x2 = [a2,b2] by A1,A4,RELAT_1:def 1;
A11: a2 in dom W.edgeSeq() by A1,A4,A10,FUNCT_1:1;
f.x1 = x1`2 by A1,A3;
then
A12: b1 = f.x1 by A6
.= b2 by A5,A8,A10;
then W.edgeSeq().a2 = b1 by A1,A4,A10,FUNCT_1:1;
hence x1 = x2 by A6,A10,A12,A2,A7,A9,A11,FUNCT_1:def 4;
end;
then
A13: f is one-to-one by FUNCT_1:def 4;
now
let y be object;
assume y in rng f;
then consider x being object such that
A14: x in dom f and
A15: f.x = y by FUNCT_1:def 3;
consider a,b being object such that
A16: x = [a,b] by A1,A14,RELAT_1:def 1;
y = x`2 by A1,A14,A15;
then y = b by A16;
then y in rng W.edgeSeq() by A1,A14,A16,XTUPLE_0:def 13;
hence y in (the_Edges_of G);
end;
then rng f c= the_Edges_of G by TARSKI:def 3;
then Segm card W.edgeSeq() c= Segm card (the_Edges_of G) by A1,A13,CARD_1:10;
then card W.edgeSeq() <= card (the_Edges_of G) by NAT_1:39;
hence thesis by GLIB_000:def 25;
end;
theorem
len W <= 3 implies W is Path-like by Lm69;
theorem
(for m,n being odd Element of NAT st m <= len W & n <= len W & W.m = W
.n holds m = n) implies W is Path-like by Lm66;
theorem
for W being Path of G st W is open holds for m, n being odd Element of
NAT st m < n & n <= len W holds W.m <> W.n
proof
let W be Path of G;
assume
A1: W is open;
let m, n be odd Element of NAT;
assume that
A2: m < n and
A3: n <= len W;
now
assume
A4: W.m = W.n;
then
A5: n = len W by A2,A3,Def28;
m = 1 by A2,A3,A4,Def28;
hence contradiction by A1,A4,A5;
end;
hence thesis;
end;
theorem
W is Path-like iff W.reverse() is Path-like by Lm63;
theorem
for W being Path of G, m, n being Element of NAT holds W.cut(m,n) is
Path-like;
theorem Th148:
for W being Path of G, e,v being object st e Joins W.last(),v,G &
not e in W.edges() & (W is trivial or W is open) & for n being odd Element of
NAT st 1 < n & n <= len W holds W.n <> v holds W.addEdge(e) is Path-like
proof
let W be Path of G, e,v be object;
assume that
A1: e Joins W.last(), v,G and
A2: not e in W.edges() and
A3: W is trivial or W is open and
A4: for n being odd Element of NAT st 1 < n & n <= len W holds W.n <> v;
reconsider lenW = len W as odd Element of NAT;
set W2 = W.addEdge(e);
A5: e in W.last().edgesInOut() by A1,GLIB_000:62;
now
thus W2 is Trail-like by A2,A5,Lm60;
let m, n be odd Element of NAT;
assume that
A6: m < n and
A7: n <= len W2 and
A8: W2.m = W2.n;
now
per cases by A3;
suppose
A9: W is open;
now
per cases;
suppose
A10: n <= len W;
A11: 1 <= m by ABIAN:12;
m <= len W by A6,A10,XXREAL_0:2;
then m in dom W by A11,FINSEQ_3:25;
then
A12: W2.m = W.m by A1,Lm38;
1 <= n by ABIAN:12;
then n in dom W by A10,FINSEQ_3:25;
then
A13: W.m = W.n by A1,A8,A12,Lm38;
then m = 1 by A6,A10,Def28;
then W.first() = W.last() by A6,A10,A13,Def28;
hence m = 1 & n = len W2 by A9;
end;
suppose
n > len W;
then lenW + 1 <= n by NAT_1:13;
then lenW + 1 < n by XXREAL_0:1;
then lenW + 1 + 1 <= n by NAT_1:13;
then len W + (1+1) <= n;
then
A14: len W2 <= n by A1,Lm37;
then
A15: n = len W2 by A7,XXREAL_0:1;
then W2.n = W2.(len W + 2) by A1,Lm37;
then
A16: W2.n = v by A1,Lm38;
m < len W + (1 + 1) by A1,A6,A15,Lm37;
then m < len W + 1 + 1;
then m <= lenW + 1 by NAT_1:13;
then m < lenW + 1 by XXREAL_0:1;
then
A17: m <= len W by NAT_1:13;
1 <= m by ABIAN:12;
then m in dom W by A17,FINSEQ_3:25;
then
A18: W.m = v by A1,A8,A16,Lm38;
now
A19: 1 <= m by ABIAN:12;
assume m <> 1;
then 1 < m by A19,XXREAL_0:1;
hence contradiction by A4,A17,A18;
end;
hence m = 1;
thus n = len W2 by A7,A14,XXREAL_0:1;
end;
end;
hence m = 1 & n = len W2;
end;
suppose
W is trivial;
then ex v being Vertex of G st W = G.walkOf(v) by Lm56;
then len W = 1 by Th12;
then
A20: len W2 = 1 + 2 by A1,Lm37;
A21: m+1 <= n by A6,NAT_1:13;
A22: 1 <= m by ABIAN:12;
then 1+1 <= m+1 by XREAL_1:7;
then 2*1 <= n by A21,XXREAL_0:2;
then 2*1 < n by XXREAL_0:1;
then
A23: len W2 <= n by A20,NAT_1:13;
then m < 3 by A6,A7,A20,XXREAL_0:1;
then m+1-1 <= 3-1 by A20,NAT_1:13;
then m < 2*1 by XXREAL_0:1;
then m+1 <= 2 by NAT_1:13;
then m+1-1 <= 2-1 by XREAL_1:13;
hence m = 1 & n = len W2 by A7,A22,A23,XXREAL_0:1;
end;
end;
hence m = 1 & n = len W2;
end;
hence thesis;
end;
theorem
for W being Path of G, e, v being object st e Joins W.last(),v,G & not v
in W.vertices() & (W is trivial or W is open) holds W.addEdge(e) is Path-like
by Lm68;
theorem
(for n being odd Element of NAT st n <= len W holds W.find(W.n) = W
.rfind(W.n)) implies W is Path-like
proof
assume
A1: for n being odd Element of NAT st n <= len W holds W.find(W.n) = W
.rfind(W.n);
A2: now
let x be odd Element of NAT;
assume
A3: x <= len W;
then
A4: W.rfind(W.x) >= x by Th113;
A5: W.find(W.x) = W.rfind(W.x) by A1,A3;
W.find(W.x) <= x by A3,Th113;
hence W.find(W.x) = x & W.rfind(W.x) = x by A4,A5,XXREAL_0:1;
end;
now
let m, n be even Element of NAT;
assume that
A6: 1 <= m and
A7: m < n and
A8: n <= len W;
1 <= n by A6,A7,XXREAL_0:2;
then n in dom W by A8,FINSEQ_3:25;
then consider naa1 being odd Element of NAT such that
A9: naa1 = n-1 and
A10: n-1 in dom W and
A11: n+1 in dom W and
A12: W.n Joins W.(naa1), W.(n+1),G by Lm2;
m <= len W by A7,A8,XXREAL_0:2;
then m in dom W by A6,FINSEQ_3:25;
then consider maa1 being odd Element of NAT such that
A13: maa1 = m-1 and
A14: m-1 in dom W and
m+1 in dom W and
A15: W.m Joins W.(maa1), W.(m+1),G by Lm2;
now
set Wnaa1 = W.(naa1), Wn1 = W.(n+1);
set Wmaa1 = W.(maa1), Wm1 = W.(m+1);
assume
A16: W.m = W.n;
maa1 <= len W by A13,A14,FINSEQ_3:25;
then
A17: W.find(Wmaa1) = maa1 by A2;
A18: n+1 <= len W by A11,FINSEQ_3:25;
A19: naa1 <= len W by A9,A10,FINSEQ_3:25;
now
per cases by A15,A12,A16,GLIB_000:15;
suppose
Wmaa1 = Wnaa1 & Wm1 = Wn1;
then maa1 = naa1 by A2,A19,A17;
hence contradiction by A7,A13,A9;
end;
suppose
Wmaa1 = Wn1 & Wm1 = Wnaa1;
then maa1 = n+1 by A2,A18,A17;
then n <= maa1-1+1 by NAT_1:12;
then n <= m-1+1 by A13,NAT_1:12;
hence contradiction by A7;
end;
end;
hence contradiction;
end;
hence W.m <> W.n;
end;
then
A20: W is Trail-like by Lm57;
now
let m, n be odd Element of NAT;
assume that
A21: m < n and
A22: n <= len W and
A23: W.m = W.n;
m <= len W by A21,A22,XXREAL_0:2;
then W.find(W.m) = m by A2;
hence m = 1 & n = len W by A2,A21,A22,A23;
end;
hence thesis by A20;
end;
theorem
(for n being odd Element of NAT st n <= len W holds W.rfind(n) = n)
implies W is Path-like by Lm67;
theorem
for G being _finite _Graph, W being Path of G holds
len W.vertexSeq() <= G.order() + 1
proof
let G be _finite _Graph, W be Path of G;
now
per cases;
suppose
len W = 1;
then 1 + 1 = 2 * len W.vertexSeq() by Def14;
hence thesis by NAT_1:12;
end;
suppose
len W <> 1;
then W is non trivial by Lm55;
then consider lenW2 being odd Element of NAT such that
A1: lenW2 = len W - 2 and
A2: W.cut(1,lenW2).addEdge(W.(lenW2+1)) = W by Th131;
set W2 = W.cut(1,lenW2), vs1 = W2.vertexSeq();
consider f being Function such that
A3: dom f = vs1 & for x being object st x in vs1 holds f.x = x`2 from
FUNCT_1:sch 3;
A4: lenW2 < len W - 0 by A1,XREAL_1:15;
then
A5: len W2 = lenW2 by Lm22;
now
let x1, x2 be object;
assume that
A6: x1 in dom f and
A7: x2 in dom f and
A8: f.x1 = f.x2;
consider a1,b1 being object such that
A9: x1 = [a1,b1] by A3,A6,RELAT_1:def 1;
A10: b1 = vs1.a1 by A3,A6,A9,FUNCT_1:1;
A11: f.x1 = x1`2 by A3,A6
.= b1 by A9;
consider a2,b2 being object such that
A12: x2 = [a2,b2] by A3,A7,RELAT_1:def 1;
A13: a2 in dom vs1 by A3,A7,A12,FUNCT_1:1;
A14: a1 in dom vs1 by A3,A6,A9,FUNCT_1:1;
A15: b2 = vs1.a2 by A3,A7,A12,FUNCT_1:1;
A16: f.x2 = x2`2 by A3,A7
.= b2 by A12;
reconsider a1,a2 as Element of NAT by A14,A13;
A17: now
let n1,n2 be Element of NAT;
assume that
A18: n1<n2 and
A19: n1 in dom vs1 and
A20: n2 in dom vs1 and
A21: vs1.n1 = vs1.n2;
A22: 2*n2-1 in dom W2 by A20,Th71;
A23: 2*n1-1 in dom W2 by A19,Th71;
then reconsider a = 2*n1-1, b=2*n2-1 as odd Element of NAT by A22;
A24: W2.b = W.b by A4,A22,Lm23;
A25: n2 <= len vs1 by A20,FINSEQ_3:25;
1 <= n2 by A20,FINSEQ_3:25;
then
A26: vs1.n2 = W2.b by A25,Def14;
A27: n1 <= len vs1 by A19,FINSEQ_3:25;
1 <= n1 by A19,FINSEQ_3:25;
then
A28: vs1.n1 = W2.a by A27,Def14;
b <= lenW2 by A5,A22,FINSEQ_3:25;
then
A29: b < len W by A4,XXREAL_0:2;
2*n1 < 2*n2 by A18,XREAL_1:68;
then
A30: a < b by XREAL_1:14;
W2.a = W.a by A4,A23,Lm23;
hence contradiction by A21,A28,A26,A24,A30,A29,Def28;
end;
now
assume
A31: a1 <> a2;
now
per cases;
suppose
a1 <= a2;
then a1 < a2 by A31,XXREAL_0:1;
hence contradiction by A8,A11,A16,A14,A10,A13,A15,A17;
end;
suppose
a1 > a2;
hence contradiction by A8,A11,A16,A14,A10,A13,A15,A17;
end;
end;
hence contradiction;
end;
hence x1 = x2 by A8,A9,A12,A11,A16;
end;
then
A32: f is one-to-one by FUNCT_1:def 4;
now
let y be object;
assume y in rng f;
then consider x being object such that
A33: x in dom f and
A34: f.x = y by FUNCT_1:def 3;
consider a,b being object such that
A35: x = [a,b] by A3,A33,RELAT_1:def 1;
y = x`2 by A3,A33,A34;
then
A36: y = b by A35;
A37: b = vs1.a by A3,A33,A35,FUNCT_1:1;
a in dom vs1 by A3,A33,A35,FUNCT_1:1;
then y in rng vs1 by A36,A37,FUNCT_1:def 3;
hence y in the_Vertices_of G;
end;
then rng f c= the_Vertices_of G by TARSKI:def 3;
then Segm card vs1 c= Segm card the_Vertices_of G by A3,A32,CARD_1:10;
then card vs1 <= card the_Vertices_of G by NAT_1:39;
then len vs1 <= G.order() by GLIB_000:def 24;
then
A38: len vs1 + 1 <= G.order() + 1 by XREAL_1:7;
A39: lenW2 < len W - 0 by A1,XREAL_1:15;
then
A40: W.(lenW2+1) Joins W.lenW2, W.(lenW2+2), G by Def3;
1 <= lenW2 by ABIAN:12;
then W2.last() = W.lenW2 by A39,Lm16,JORDAN12:2;
then W.vertexSeq() = vs1 ^ <*W.(lenW2+2)*> by A2,A40,Th73;
then len W.vertexSeq() = len vs1 + len <*W.(lenW2+2)*> by FINSEQ_1:22;
hence thesis by A38,FINSEQ_1:39;
end;
end;
hence thesis;
end;
theorem
for G being _Graph, W being vertex-distinct Walk of G, e,v being object
st e Joins W.last(),v,G & not v in W.vertices() holds W.addEdge(e) is
vertex-distinct
proof
let G be _Graph, W be vertex-distinct Walk of G, e,v be object;
assume that
A1: e Joins W.last(),v,G and
A2: not v in W.vertices();
set W2 = W.addEdge(e);
A3: len W2 = len W + 2 by A1,Lm37;
A4: now
let n be odd Element of NAT;
assume that
A5: n <= len W2 and
A6: n > len W;
len W + 1 <= n by A6,NAT_1:13;
then len W + 1 < n by XXREAL_0:1;
then len W + 1 + 1 <= n by NAT_1:13;
hence n = len W2 by A3,A5,XXREAL_0:1;
hence W2.n = v by A1,A3,Lm38;
end;
now
let m,n be odd Element of NAT;
assume that
A7: m <= len W2 and
A8: n <= len W2 and
A9: W2.m = W2.n;
A10: 1 <= n by ABIAN:12;
A11: 1 <= m by ABIAN:12;
now
per cases;
suppose
A12: m <= len W;
then m in dom W by A11,FINSEQ_3:25;
then
A13: W2.m = W.m by A1,Lm38;
now
per cases;
suppose
A14: n <= len W;
then n in dom W by A10,FINSEQ_3:25;
then W2.n = W.n by A1,Lm38;
hence m = n by A9,A12,A13,A14,Def29;
end;
suppose
n > len W;
then W.m = v by A4,A8,A9,A13;
hence m = n by A2,A12,Lm45;
end;
end;
hence m = n;
end;
suppose
A15: m > len W;
then
A16: W2.m = v by A4,A7;
A17: m = len W2 by A4,A7,A15;
now
per cases;
suppose
A18: n <= len W;
then n in dom W by A10,FINSEQ_3:25;
then v = W.n by A1,A9,A16,Lm38;
hence m = n by A2,A18,Lm45;
end;
suppose
n > len W;
hence m = n by A4,A8,A17;
end;
end;
hence m =n;
end;
end;
hence m = n;
end;
hence thesis;
end;
theorem
for e,x being object holds
e Joins x,x,G implies G.walkOf(x,e,x) is Cycle-like
proof let e,x be object;
set W = G.walkOf(x,e,x);
assume e Joins x,x,G;
then len W = 3 by Th13;
then W is non trivial by Lm54;
hence thesis;
end;
theorem
e Joins x,y,G & e in W1.edges() & W1 is Cycle-like implies ex W2 being
Walk of G st W2 is_Walk_from x,y & not e in W2.edges()
proof
assume that
A1: e Joins x,y,G and
A2: e in W1.edges() and
A3: W1 is Cycle-like;
consider v1,v2 being Vertex of G, n being odd Element of NAT such that
A4: n+2 <= len W1 and
A5: v1 = W1.n and
A6: e = W1.(n+1) and
A7: v2 = W1.(n+2) and
A8: e Joins v1,v2,G by A2,Lm47;
set WA = W1.cut(n+2, len W1), WB = W1.cut(2*0+1,n);
A9: WA.last() = W1.last() by A4,Lm16;
A10: n+2-2 < len W1-0 by A4,XREAL_1:15;
A11: now
assume e in WB.edges();
then consider m being even Element of NAT such that
A12: 1 <= m and
A13: m <= len WB and
A14: WB.m = e by Lm46;
m in dom WB by A12,A13,FINSEQ_3:25;
then
A15: W1.m = W1.(n+1) by A6,A10,A14,Lm23;
len WB = n by A10,Lm22;
then
A16: m+0 < n+1 by A13,XREAL_1:8;
n+1 <= len W1 by A10,NAT_1:13;
hence contradiction by A3,A12,A15,A16,Lm57;
end;
1 <= n by ABIAN:12;
then WB is_Walk_from W1.first(), v1 by A5,A10,Lm16;
then
A17: WB is_Walk_from W1.last(), v1 by A3,Def24;
A18: WA is_Walk_from v2, W1.(len W1) by A4,A7,Lm16;
then WA.append(WB) is_Walk_from v2,v1 by A17,Th29;
then
A19: WA.append(WB).reverse() is_Walk_from v1,v2 by Th22;
A20: now
assume e in WA.edges();
then consider m being even Element of NAT such that
A21: 1 <= m and
A22: m <= len WA and
A23: WA.m = e by Lm46;
reconsider maa1 = m-1 as odd Element of NAT by A21,INT_1:5;
A24: maa1 < len WA - 0 by A22,XREAL_1:15;
then n+2+maa1 in dom W1 by A4,Lm15;
then
A25: n+2+maa1 <= len W1 by FINSEQ_3:25;
maa1+1 = m;
then
A26: e = W1.(n+2+maa1) by A4,A23,A24,Lm15;
n+1 < n+1+1 by NAT_1:13;
then
A27: n+1+0 < n+2+maa1 by XREAL_1:8;
1 <= n+1 by NAT_1:12;
hence contradiction by A3,A6,A26,A25,A27,Lm57;
end;
WB.first() = W1.last() by A17;
then WA.append(WB).edges() = WA.edges() \/ WB.edges() by A9,Th100;
then
A28: not e in WA.append(WB).edges() by A20,A11,XBOOLE_0:def 3;
then
A29: not e in WA.append(WB).reverse().edges() by Th105;
now
per cases by A1,A8,GLIB_000:15;
suppose
x = v1 & y = v2;
hence thesis by A29,A19;
end;
suppose
x = v2 & y = v1;
hence thesis by A18,A17,A28,Th29;
end;
end;
hence thesis;
end;
theorem
W is Subwalk of W by Lm70;
theorem
for W1 being Walk of G, W2 being Subwalk of W1, W3 being Subwalk of W2
holds W3 is Subwalk of W1 by Lm71;
theorem
W1 is Subwalk of W2 implies (W1 is_Walk_from x,y iff W2 is_Walk_from x ,y)
proof
assume
A1: W1 is Subwalk of W2;
hereby
A2: W1 is_Walk_from W2.first(),W2.last() by A1,Def32;
assume
A3: W1 is_Walk_from x,y;
then W1.last() = y;
then
A4: y = W2.last() by A2;
W1.first() = x by A3;
then x = W2.first() by A2;
hence W2 is_Walk_from x,y by A4;
end;
assume
A5: W2 is_Walk_from x,y;
then
A6: W2.last() = y;
W2.first() = x by A5;
hence thesis by A1,A6,Def32;
end;
theorem Th159:
W1 is Subwalk of W2 implies W1.first() = W2.first() & W1.last() = W2.last()
proof
assume W1 is Subwalk of W2;
then W1 is_Walk_from W2.first(), W2.last() by Def32;
hence thesis;
end;
theorem
W1 is Subwalk of W2 implies len W1 <= len W2 by Lm72;
theorem Th161:
W1 is Subwalk of W2 implies W1.edges() c= W2.edges() & W1
.vertices() c= W2.vertices()
proof
assume
A1: W1 is Subwalk of W2;
then consider es being Subset of W2.edgeSeq() such that
A2: W1.edgeSeq() = Seq es by Def32;
now
let e be object;
assume e in W1.edges();
then consider n being even Element of NAT such that
A3: 1 <= n and
A4: n <= len W1 and
A5: W1.n = e by Lm46;
A6: W1.n = (Seq es).(n div 2) by A2,A3,A4,Lm40;
n div 2 in dom Seq es by A2,A3,A4,Lm40;
then
ex m being Element of NAT st m in dom W2.edgeSeq() & n div 2 <= m &
W1.n = W2.edgeSeq().m by A6,Th3;
hence e in W2.edges() by A5,Th102;
end;
hence
A7: W1.edges() c= W2.edges() by TARSKI:def 3;
now
per cases;
suppose
A8: W1 is trivial;
now
let v be object;
assume v in W1.vertices();
then consider n being odd Element of NAT such that
A9: n <= len W1 and
A10: W1.n = v by Lm45;
A11: 1 <= n by ABIAN:12;
n <= 1 by A8,A9,Lm55;
then v = W1.first() by A10,A11,XXREAL_0:1;
then v = W2.first() by A1,Th159;
hence v in W2.vertices() by Th86;
end;
hence thesis by TARSKI:def 3;
end;
suppose
W1 is non trivial;
hence thesis by A7,Th132;
end;
end;
hence thesis;
end;
theorem Th162:
W1 is Subwalk of W2 implies for m being odd Element of NAT st m
<= len W1 holds ex n being odd Element of NAT st m <= n & n <= len W2 & W1.m =
W2.n
proof
assume
A1: W1 is Subwalk of W2;
let m be odd Element of NAT such that
A2: m <= len W1;
A3: ex es being Subset of W2.edgeSeq() st W1.edgeSeq() = Seq es by A1,Def32;
now
per cases by A2,XXREAL_0:1;
suppose
A4: m < len W1;
then
A5: W1.(m+1) Joins W1.m, W1.(m+2), G by Def3;
reconsider m1= m+1 as even Element of NAT;
A6: 1 <= m1 by NAT_1:12;
A7: m1 <= len W1 by A4,NAT_1:13;
then
A8: W1.m1 = W1.edgeSeq().(m1 div 2) by A6,Lm40;
m1 div 2 in dom W1.edgeSeq() by A6,A7,Lm40;
then consider x being Element of NAT such that
A9: x in dom W2.edgeSeq() and
A10: m1 div 2 <= x and
A11: W1.m1 = W2.edgeSeq().x by A3,A8,Th3;
set n = 2*x;
A12: 1 <= x by A9,FINSEQ_3:25;
2 divides m1 by PEPIN:22;
then 2 * (m1 div 2) = m1 by NAT_D:3;
then m1 <= n by A10,XREAL_1:64;
then
A13: m1-1 <= n-1 by XREAL_1:13;
A14: x <= len W2.edgeSeq() by A9,FINSEQ_3:25;
A15: n in dom W2 by A9,Lm41;
then 1 <= n by FINSEQ_3:25;
then reconsider naa1 = n - 1 as odd Element of NAT by INT_1:5;
n <= len W2 by A15,FINSEQ_3:25;
then
A16: naa1 < len W2 - 0 by XREAL_1:15;
then W2.(naa1+1) Joins W2.naa1, W2.(naa1+2), G by Def3;
then
A17: W1.m1 Joins W2.naa1, W2.(naa1+2), G by A11,A12,A14,Def15;
A18: naa1 + 2 <= len W2 by A16,Th1;
now
per cases by A5,A17,GLIB_000:15;
suppose
W1.m = W2.naa1;
hence thesis by A16,A13;
end;
suppose
W1.m = W2.(naa1+2);
hence thesis by A13,A18,NAT_1:12;
end;
end;
hence thesis;
end;
suppose
A19: m = len W1;
len W1 <= len W2 by A1,Lm72;
then
A20: m <= len W2 by A2,XXREAL_0:2;
W1.m = W1.last() by A19
.= W2.last() by A1,Th159
.= W2.(len W2);
hence thesis by A20;
end;
end;
hence thesis;
end;
theorem
W1 is Subwalk of W2 implies for m being even Element of NAT st 1 <= m
& m <= len W1 holds ex n being even Element of NAT st m <= n & n <= len W2 & W1
.m = W2.n
proof
assume W1 is Subwalk of W2;
then
A1: ex es being Subset of W2.edgeSeq() st W1.edgeSeq() = Seq es by Def32;
let m be even Element of NAT such that
A2: 1 <= m and
A3: m <= len W1;
A4: W1.m = W1.edgeSeq().(m div 2) by A2,A3,Lm40;
m div 2 in dom W1.edgeSeq() by A2,A3,Lm40;
then consider ndiv2 being Element of NAT such that
A5: ndiv2 in dom W2.edgeSeq() and
A6: m div 2 <= ndiv2 and
A7: W1.m = W2.edgeSeq().ndiv2 by A1,A4,Th3;
A8: ndiv2 <= len W2.edgeSeq() by A5,FINSEQ_3:25;
2 divides m by PEPIN:22;
then
A9: 2 * (m div 2) = m by NAT_D:3;
2*ndiv2 in dom W2 by A5,Lm41;
then
A10: 2*ndiv2 <= len W2 by FINSEQ_3:25;
1 <= ndiv2 by A5,FINSEQ_3:25;
then W1.m = W2.(2*ndiv2) by A7,A8,Def15;
hence thesis by A6,A9,A10,XREAL_1:64;
end;
theorem
for W1 being Trail of G st W1 is non trivial holds ex W2 being Path of
W1 st W2 is non trivial
proof
let W1 be Trail of G;
assume W1 is non trivial;
then
A1: 1 <> len W1 by Lm55;
1 <= len W1 by ABIAN:12;
then
A2: 1 < len W1 by A1,XXREAL_0:1;
now
per cases;
suppose
A3: W1 is open;
set P = the Path of W1;
take P;
A4: P.first() = W1.first() by Th159;
A5: P.last() = W1.last() by Th159;
W1.first() <> W1.last() by A3;
hence P is non trivial by A4,A5,Lm55;
end;
suppose
A6: W1 is closed;
defpred P[Nat] means $1 is odd & 1 < $1 & $1 <= len W1 & W1.($1) = W1.(
len W1);
A7: ex k being Nat st P[k] by A2;
consider k being Nat such that
A8: P[k] & for m being Nat st P[m] holds k <= m from NAT_1:sch 5(
A7);
reconsider k as odd Element of NAT by A8,ORDINAL1:def 12;
1+1 < k+1 by A8,XREAL_1:8;
then 2 <= k by NAT_1:13;
then reconsider k2 = k - 2*1 as odd Element of NAT by INT_1:5;
set W3 = W1.remove(k,len W1);
set W4 = W3.cut(2*0+1,k2);
set W5 = the Path of W4;
consider es5 being Subset of W4.edgeSeq() such that
A9: W5.edgeSeq() = Seq es5 by Def32;
A10: W4.edgeSeq() c= W3.edgeSeq() by Lm43;
W1.k = W1.last() by A8;
then
A11: W3 = W1.cut(1,k) by Th55;
then W3.edgeSeq() c= W1.edgeSeq() by Lm43;
then W4.edgeSeq() c= W1.edgeSeq() by A10,XBOOLE_1:1;
then reconsider es5 as Subset of W1.edgeSeq() by XBOOLE_1:1;
A12: W5 is_Walk_from W4.first(), W4.last() by Def32;
A13: len W3 + len W1 = len W1 + k by A8,Lm24;
then
A14: k2 <= len W3 - 0 by XREAL_1:13;
A15: 1 <= k2 by ABIAN:12;
then W4.last() = W3.k2 by A14,Lm16;
then
A16: W5.last() = W3.k2 by A12;
k2 in dom W3 by A14,A15,FINSEQ_3:25;
then
A17: W5.last() = W1.k2 by A8,A16,A11,Lm23;
W4.first() = W3.1 by A14,A15,Lm16;
then
A18: W5.first() = W3.1 by A12;
A19: W1.1 = W1.(len W1) by A6;
A20: now
1 <= len W3 by ABIAN:12;
then
A21: 2*0+1 in dom W3 by FINSEQ_3:25;
assume that
A22: W5 is non trivial and
A23: W5 is closed;
W5.first() = W1.k2 by A17,A23;
then
A24: W1.k2 = W1.(len W1) by A19,A8,A18,A11,A21,Lm23;
now
assume k2 = 1;
then len W4 = 1 by A14,Lm22;
then
A25: len W5 <= 1 by Lm72;
1 <= len W5 by ABIAN:12;
then len W5 = 1 by A25,XXREAL_0:1;
hence contradiction by A22,Lm55;
end;
then
A26: 1 < k2 by A15,XXREAL_0:1;
A27: k2 < k - 0 by XREAL_1:15;
then k2 <= len W1 by A8,XXREAL_0:2;
hence contradiction by A8,A24,A26,A27;
end;
set e = W1.(k2+1), W2 = W5.addEdge(e);
k2 < len W1 - 0 by A8,XREAL_1:15;
then
A28: e Joins W1.k2, W1.(k2+2), G by Def3;
A29: k2 < len W3 - 0 by A13,XREAL_1:15;
then
A30: len W4 = k2 by Lm22;
A31: now
let m be odd Element of NAT;
assume that
A32: 1 < m and
A33: m <= len W5;
consider n being odd Element of NAT such that
A34: m <= n and
A35: n <= len W4 and
A36: W5.m = W4.n by A33,Th162;
A37: 1 < n by A32,A34,XXREAL_0:2;
then n in dom W4 by A35,FINSEQ_3:25;
then
A38: W5.m = W3.n by A14,A36,Lm23;
A39: n+0 < k2+2 by A30,A35,XREAL_1:8;
then
A40: n <= len W1 by A8,XXREAL_0:2;
n in dom W3 by A13,A37,A39,FINSEQ_3:25;
then W5.m = W1.n by A8,A11,A38,Lm23;
hence W5.m <> W1.k by A8,A37,A39,A40;
end;
k2+1 <= k by A13,A29,NAT_1:13;
then
A41: k2+1 <= len W1 by A8,XXREAL_0:2;
now
assume
A42: e in W5.edges();
W5.edges() c= W4.edges() by Th161;
then consider n being even Element of NAT such that
A43: 1 <= n and
A44: n <= len W4 and
A45: W4.n = e by A42,Lm46;
A46: n < k2+1 by A30,A44,NAT_1:13;
n <= k2+2 by A30,A44,NAT_1:12;
then
A47: n in dom W3 by A13,A43,FINSEQ_3:25;
n in dom W4 by A43,A44,FINSEQ_3:25;
then e = W3.n by A14,A45,Lm23;
then W1.(k2+1) = W1.n by A8,A11,A47,Lm23;
hence contradiction by A41,A43,A46,Lm57;
end;
then reconsider W2 as Path of G by A28,A17,A20,A31,Th148;
set g = ((k2+1) div 2) .--> e, es = es5 +* g;
A48: dom es = dom es5 \/ dom g by FUNCT_4:def 1;
A50: g.((k2+1) div 2) = e by FUNCOP_1:72;
A51: now
let z be object;
assume
A52: z in es;
then consider x,y being object such that
A53: z = [x,y] by RELAT_1:def 1;
A54: x in dom es by A52,A53,FUNCT_1:1;
A55: y = es.x by A52,A53,FUNCT_1:1;
now
per cases;
suppose
A56: x in dom g;
then
A57: x = (k2+1) div 2 by TARSKI:def 1;
A58: 1 <= k2+1 by NAT_1:12;
then W1.(k2+1) = W1.edgeSeq().x by A41,A57,Lm40;
then
A59: W1.edgeSeq().x = y by A48,A50,A54,A55,A56,A57,FUNCT_4:def 1;
x in dom W1.edgeSeq() by A41,A57,A58,Lm40;
hence z in W1.edgeSeq() by A53,A59,FUNCT_1:1;
end;
suppose
A60: not x in dom g;
then
A61: x in dom es5 by A48,A54,XBOOLE_0:def 3;
y = es5.x by A48,A54,A55,A60,FUNCT_4:def 1;
then z in es5 by A53,A61,FUNCT_1:1;
hence z in W1.edgeSeq();
end;
end;
hence z in W1.edgeSeq();
end;
then es c= W1.edgeSeq() by TARSKI:def 3;
then dom es c= dom W1.edgeSeq() by RELAT_1:11;
then
A62: dom es c= Seg len W1.edgeSeq() by FINSEQ_1:def 3;
then reconsider es as FinSubsequence by FINSEQ_1:def 12;
reconsider es as Subset of W1.edgeSeq() by A51,TARSKI:def 3;
A63: dom es5 c= dom W4.edgeSeq() by FINSEQ_6:151;
dom es5 c= Seg len W1.edgeSeq() & dom g c= Seg len W1.edgeSeq()
by A48,A62,XBOOLE_1:11;
then
aaa: dom es5 is included_in_Seg & dom g is included_in_Seg by FINSEQ_1:def 13;
now
let x,y be Nat such that
A64: x in dom es5 and
A65: y in dom g;
x <= len W4.edgeSeq() by A63,A64,FINSEQ_3:25;
then 2*x <= 2*len W4.edgeSeq() by XREAL_1:64;
then 2*x+1 <= 2*len W4.edgeSeq()+1 by XREAL_1:7;
then
A66: 2*x+1 <= k2 by A30,Def15;
A67: 2 divides k2+1 by PEPIN:22;
y = (k2+1) div 2 by A65,TARSKI:def 1;
then 2*y = k2+1 by A67,NAT_D:3;
then 2*x+1 < 2*y by A66,NAT_1:13;
then
A68: 2*x+1-1 < 2*y - 0 by XREAL_1:14;
then x <= y by XREAL_1:68;
hence x < y by A68,XXREAL_0:1;
end;
then
A69: Sgm(dom es) = Sgm(dom es5) ^ Sgm(dom g) by aaa,A48,FINSEQ_3:42;
A70: k2 in dom W3 by A15,A29,FINSEQ_3:25;
then
A71: W5.last() = W1.k2 by A8,A16,A11,Lm23;
now
now
assume dom es5 /\ dom g <> {};
then consider x being object such that
A72: x in dom es5 /\ dom g by XBOOLE_0:def 1;
x in dom g by A72;
then
A73: x = (k2+1) div 2 by TARSKI:def 1;
x in dom es5 by A72,XBOOLE_0:def 4;
then (k2+1) div 2 <= len W4.edgeSeq() by A63,A73,FINSEQ_3:25;
then
A74: 2 * ((k2+1) div 2) <= 2*len W4.edgeSeq() by XREAL_1:64;
2 divides (k2+1) by PEPIN:22;
then k2+1 <= 2*len W4.edgeSeq() by A74,NAT_D:3;
then k2+1+1 <= 2*len W4.edgeSeq()+1 by XREAL_1:7;
then (1+1)+k2 <= 0 + k2 by A30,Def15;
hence contradiction by XREAL_1:6;
end;
then
A75: dom es5 misses dom g by XBOOLE_0:def 7;
len W2 = len W5 + 2 by A28,A71,Lm37;
then
A76: len W5 + 2 = 2 * len W2.edgeSeq() + 1 by Def15;
A77: len Sgm(dom es5) = card dom es5 by FINSEQ_3:39
.= card es5 by CARD_1:62
.= len W5.edgeSeq() by A9,Th4;
A78: now
assume k2+1 div 2 = 0;
then
A79: 2 * ((k2+1) div 2) = 2*0;
2 divides k2+1 by PEPIN:22;
hence contradiction by A79,NAT_D:3;
end;
A80: Sgm dom g = <* (k2+1) div 2 *> by A78,FINSEQ_3:44;
then
A81: len Sgm dom g = 1 by FINSEQ_1:40;
A82: (Sgm dom g).1 = (k2+1) div 2 by A80;
set h = Sgm dom es;
A83: Seq es = es * h by FINSEQ_1:def 15;
len Seq es = card es by Th4
.= card dom es by CARD_1:62;
then len Seq es = card dom es5 + card dom g by A48,A75,CARD_2:40
.= card dom es5 + 1 by CARD_1:30
.= card es5 + 1 by CARD_1:62
.= len W5.edgeSeq() + 1 by A9,Th4;
then
A84: 2 * len Seq es + 1 = 2*len W5.edgeSeq() + 1 + 2
.= 2 * len W2.edgeSeq() + 1 by A76,Def15;
hence len W2.edgeSeq() = len Seq es;
let x be Nat;
assume that
A85: 1 <= x and
A86: x <= len W2.edgeSeq();
A88: x in dom (Seq es) by A84,A85,A86,FINSEQ_3:25;
then
A89: h.x in dom es by A83,FUNCT_1:11;
A90: dom h = Seg (len Sgm(dom es5) + len (Sgm dom g)) by A69,FINSEQ_1:def 7;
A91: e Joins W5.last(), W1.k, G by A8,A28,A16,A11,A70,Lm23;
A92: (Seq es).x = es.(h.x) by A83,A88,FUNCT_1:12;
A93: x in dom h by A83,A88,FUNCT_1:11;
now
per cases;
suppose
A94: x <= len Sgm (dom es5);
then
A95: x in dom Sgm dom es5 by A85,FINSEQ_3:25;
then
A96: h.x = Sgm(dom es5).x by A69,FINSEQ_1:def 7;
rng Sgm(dom es5) = dom es5 by FINSEQ_1:def 14;
then h.x in dom es5 by A95,A96,FUNCT_1:def 3;
then not h.x in dom g by A75,XBOOLE_0:3;
then
A97: (Seq es).x = es5.(Sgm(dom es5).x) by A48,A89,A92,A96,FUNCT_4:def 1;
A98: x in dom W5.edgeSeq() by A85,A77,A94,FINSEQ_3:25;
then
A99: 2*x in dom W5 by Lm41;
W5.edgeSeq().x = W5.(2*x) by A85,A77,A94,Def15;
then
A100: W2.(2*x) = W5.edgeSeq().x by A91,A99,Lm38
.= (es5 * Sgm(dom es5)).x by A9,FINSEQ_1:def 15;
x in dom (es5 * Sgm(dom es5)) by A9,A98,FINSEQ_1:def 15;
hence (Seq es).x = W2.(2*x) by A97,A100,FUNCT_1:12;
end;
suppose
len Sgm (dom es5) < x;
then
A101: len Sgm(dom es5) + 1 <= x by NAT_1:13;
x <= len Sgm(dom es5) + 1 by A93,A90,A81,FINSEQ_1:1;
then
A102: x = len Sgm(dom es5) + 1 by A101,XXREAL_0:1;
1 in dom Sgm(dom g) by A81,FINSEQ_3:25;
then
A103: h.x = (k2+1) div 2 by A69,A82,A102,FINSEQ_1:def 7;
then h.x in dom g by TARSKI:def 1;
then
A104: (Seq es).x = g.((k2+1) div 2) by A48,A89,A92,A103,FUNCT_4:def 1
.= e by FUNCOP_1:72
.= W2.(len W5 + 1) by A91,Lm38;
2*x = 2*len W5.edgeSeq()+1+1 by A77,A102
.= len W5 + 1 by Def15;
hence (Seq es).x = W2.(2*x) by A104;
end;
end;
hence W2.edgeSeq().x = (Seq es).x by A85,A86,Def15;
end;
then
A105: W2.edgeSeq() = Seq es by FINSEQ_1:14;
1 <= len W3 by ABIAN:12;
then 2*0+1 in dom W3 by FINSEQ_3:25;
then W5.first() = W1.first() by A8,A18,A11,Lm23;
then W5 is_Walk_from W1.first(), W1.k2 by A71;
then W2 is_Walk_from W1.first(), W1.last() by A8,A28,Lm39;
then reconsider W2 as Path of W1 by A105,Def32;
take W2;
thus W2 is non trivial by A28,A17,Th130;
end;
end;
hence thesis;
end;
theorem Th165:
for G1 being _Graph, G2 being Subgraph of G1, W being Walk of G2 holds
W is Walk of G1
proof
let G1 be _Graph, G2 be Subgraph of G1, W be Walk of G2;
set VG1 = the_Vertices_of G1, VG2 = the_Vertices_of G2;
set EG1 = the_Edges_of G1, EG2 = the_Edges_of G2;
A1: EG2 c= VG1 \/ EG1 by XBOOLE_1:10;
A2: now
thus len W is odd;
W.1 in VG2 by Def3;
hence W.1 in VG1;
let n be odd Element of NAT;
assume n < len W;
then W.(n+1) Joins W.n, W.(n+2), G2 by Def3;
hence W.(n+1) Joins W.n, W.(n+2), G1 by GLIB_000:72;
end;
VG2 c= VG1 \/ EG1 by XBOOLE_1:10;
then VG2 \/ EG2 c= VG1 \/ EG1 by A1,XBOOLE_1:8;
then for y being object st y in rng W holds y in VG1 \/ EG1 by TARSKI:def 3;
then rng W c= VG1 \/ EG1 by TARSKI:def 3;
then W is FinSequence of VG1 \/ EG1 by FINSEQ_1:def 4;
hence thesis by A2,Def3;
end;
theorem Th166:
for G1 being _Graph, G2 being Subgraph of G1, W being Walk of G1 st
W is trivial & W.first() in the_Vertices_of G2 holds W is Walk of G2
proof
let G1 be _Graph, G2 be Subgraph of G1, W be Walk of G1;
assume that
A1: W is trivial and
A2: W.first() in the_Vertices_of G2;
consider v being Vertex of G1 such that
A3: W = G1.walkOf(v) by A1,Lm56;
reconsider v9= v as Vertex of G2 by A2,A3;
W = G2.walkOf(v9) by A3;
hence thesis;
end;
theorem Th167:
for G1 being _Graph, G2 being Subgraph of G1, W being Walk of
G1 st W is non trivial & W.edges() c= the_Edges_of G2 holds W is Walk of G2
proof
let G1 be _Graph, G2 be Subgraph of G1, W be Walk of G1;
assume that
A1: W is non trivial and
A2: W.edges() c= the_Edges_of G2;
set VG2 = the_Vertices_of G2, EG2 = the_Edges_of G2;
set WV = W.vertices(), WE = W.edges();
A3: now
let n be odd Element of NAT such that
A4: n <= len W;
now
per cases;
suppose
A5: n = len W;
A6: 1 <= n by ABIAN:12;
n <> 1 by A1,A5,Lm54;
then 1 < n by A6,XXREAL_0:1;
then 1+1 <= n by NAT_1:13;
then reconsider n5 = n-2*1 as odd Element of NAT by INT_1:5;
n5+1 = n-(2-1);
then
A7: n5+1 <= len W-0 by A5,XREAL_1:13;
n5 < len W - 0 by A5,XREAL_1:15;
then
A8: W.(n5+1) Joins W.n5, W.(n5+2), G1 by Def3;
1 <= n5+1 by NAT_1:12;
then W.(n5+1) in W.edges() by A7,Lm46;
then W.(n5+1) Joins W.n5, W.(n5+2), G2 by A2,A8,GLIB_000:73;
hence W.n in the_Vertices_of G2 by GLIB_000:13;
end;
suppose
n <> len W;
then
A9: n < len W by A4,XXREAL_0:1;
then
A10: W.(n+1) Joins W.n, W.(n+2), G1 by Def3;
A11: 1 <= n+1 by NAT_1:12;
n+1 <= len W by A9,NAT_1:13;
then W.(n+1) in W.edges() by A11,Lm46;
then W.(n+1) Joins W.n, W.(n+2), G2 by A2,A10,GLIB_000:73;
hence W.n in the_Vertices_of G2 by GLIB_000:13;
end;
end;
hence W.n in VG2;
end;
now
let y be object;
assume y in rng W;
then
A12: y in WV \/ WE by Th99;
now
per cases by A12,XBOOLE_0:def 3;
suppose
y in WV;
then ex n being odd Element of NAT st n <= len W & W.n = y by Lm45;
then y in VG2 by A3;
hence y in VG2 \/ EG2 by XBOOLE_0:def 3;
end;
suppose
y in WE;
hence y in VG2 \/ EG2 by A2,XBOOLE_0:def 3;
end;
end;
hence y in VG2 \/ EG2;
end;
then rng W c= VG2 \/ EG2 by TARSKI:def 3;
then
A13: W is FinSequence of VG2 \/ EG2 by FINSEQ_1:def 4;
now
reconsider aa1 = 1 as odd Element of NAT by JORDAN12:2;
thus len W is odd;
aa1 <= len W by ABIAN:12;
hence W.1 in VG2 by A3;
let n be odd Element of NAT;
A14: 1 <= n+1 by NAT_1:12;
assume
A15: n < len W;
then
A16: W.(n+1) Joins W.n, W.(n+2), G1 by Def3;
n+1 <= len W by A15,NAT_1:13;
then W.(n+1) in W.edges() by A14,Lm46;
hence W.(n+1) Joins W.n, W.(n+2), G2 by A2,A16,GLIB_000:73;
end;
hence thesis by A13,Def3;
end;
theorem Th168:
for G1 being _Graph, G2 being Subgraph of G1, W being Walk of
G1 st W.vertices() c= the_Vertices_of G2 & W.edges() c= the_Edges_of G2 holds W
is Walk of G2
proof
let G1 be _Graph, G2 be Subgraph of G1, W be Walk of G1;
assume that
A1: W.vertices() c= the_Vertices_of G2 and
A2: W.edges() c= the_Edges_of G2;
now
per cases;
suppose
W is non trivial;
hence thesis by A2,Th167;
end;
suppose
A3: W is trivial;
W.first() in W.vertices() by Th86;
hence thesis by A1,A3,Th166;
end;
end;
hence thesis;
end;
theorem
for G1 being non _trivial _Graph, W being Walk of G1, v being Vertex of
G1, G2 being removeVertex of G1,v st not v in W.vertices() holds W is Walk of
G2
proof
let G1 be non _trivial _Graph, W be Walk of G1, v be Vertex of G1, G2 be
removeVertex of G1,v;
assume
A1: not v in W.vertices();
set EG2 = (the_Edges_of G1) \ v.edgesInOut();
set W2 = W, VG2 = (the_Vertices_of G1) \ {v};
v.edgesInOut() = G1.edgesInOut({v}) by GLIB_000:def 40;
then
A2: EG2 = G1.edgesBetween( the_Vertices_of G1 \ {v}) by GLIB_000:35;
now
let y be object;
assume y in rng W2;
then consider x being object such that
A3: x in dom W2 and
A4: y = W2.x by FUNCT_1:def 3;
reconsider x as Element of NAT by A3;
A5: x <= len W2 by A3,FINSEQ_3:25;
now
per cases;
suppose
A6: x is odd;
A7: now
assume y in {v};
then not y in W.vertices() by A1,TARSKI:def 1;
hence contradiction by A4,A5,A6,Lm45;
end;
y in the_Vertices_of G1 by A4,A5,A6,Lm1;
then y in VG2 by A7,XBOOLE_0:def 5;
hence y in VG2 \/ EG2 by XBOOLE_0:def 3;
end;
suppose
x is even;
then reconsider x as even Element of NAT;
consider xaa1 being odd Element of NAT such that
A8: xaa1 = x-1 and
A9: x-1 in dom W2 and
A10: x+1 in dom W2 and
A11: W2.x Joins W2.(xaa1), W2.(x+1),G1 by A3,Lm2;
A12: x+1 <= len W2 by A10,FINSEQ_3:25;
A13: xaa1 <= len W2 by A8,A9,FINSEQ_3:25;
A14: now
assume y in v.edgesInOut();
then
A15: y in v.edgesIn() \/ v.edgesOut() by GLIB_000:60;
now
per cases by A15,XBOOLE_0:def 3;
suppose
y in v.edgesIn();
then (the_Target_of G1).y = v by GLIB_000:56;
hence v=W2.(xaa1) or v = W2.(x+1) by A4,A11,GLIB_000:def 13;
end;
suppose
y in v.edgesOut();
then (the_Source_of G1).y = v by GLIB_000:58;
hence v=W2.(xaa1) or v = W2.(x+1) by A4,A11,GLIB_000:def 13;
end;
end;
then v = W2.vertexAt(xaa1) or v = W2.vertexAt(x+1) by A13,A12,Def8;
hence contradiction by A1,A13,A12,Th87;
end;
y in the_Edges_of G1 by A4,A11,GLIB_000:def 13;
then y in EG2 by A14,XBOOLE_0:def 5;
hence y in VG2 \/ EG2 by XBOOLE_0:def 3;
end;
end;
then y in (the_Vertices_of G2) \/ EG2 by GLIB_000:47;
hence y in (the_Vertices_of G2) \/ (the_Edges_of G2) by A2,GLIB_000:47;
end;
then rng W2 c= (the_Vertices_of G2) \/ (the_Edges_of G2) by TARSKI:def 3;
then reconsider
W2 as FinSequence of (the_Vertices_of G2)\/(the_Edges_of G2 ) by
FINSEQ_1:def 4;
now
reconsider lenW2 = len W2 as odd Element of NAT;
thus len W2 is odd;
W.first() in W.vertices() by Th86;
then
A16: not W2.1 in {v} by A1,TARSKI:def 1;
W.first() in the_Vertices_of G1;
then W2.1 in VG2 by A16,XBOOLE_0:def 5;
hence W2.1 in the_Vertices_of G2 by GLIB_000:47;
let n be odd Element of NAT;
assume
A17: n < len W2;
then
A18: W.(n+1) Joins W.n, W.(n+2), G1 by Def3;
then
A19: W.(n+1) in the_Edges_of G1 by GLIB_000:def 13;
n+1 <= len W2 by A17,NAT_1:13;
then n+1 < lenW2 by XXREAL_0:1;
then n+1+1 <= len W2 by NAT_1:13;
then
A20: W.(n+2) <> v by A1,Lm45;
W.n <> v by A1,A17,Lm45;
then not W.(n+1) in v.edgesInOut() by A18,A20,GLIB_000:65;
then W.(n+1) in EG2 by A19,XBOOLE_0:def 5;
then W.(n+1) in the_Edges_of G2 by A2,GLIB_000:47;
hence W.(n+1) Joins W.n, W.(n+2), G2 by A18,GLIB_000:73;
end;
hence thesis by Def3;
end;
theorem
for G1 being _Graph, W being Walk of G1, e being set, G2 being
removeEdge of G1,e st not e in W.edges() holds W is Walk of G2
proof
let G1 be _Graph, W be Walk of G1, e be set, G2 be removeEdge of G1,e;
A1: the_Edges_of G2 = (the_Edges_of G1) \ {e} by GLIB_000:53;
assume
A2: not e in W.edges();
now
let x be object;
assume
A3: x in W.edges();
then not x in {e} by A2,TARSKI:def 1;
hence x in the_Edges_of G2 by A1,A3,XBOOLE_0:def 5;
end;
then
A4: W.edges() c= the_Edges_of G2 by TARSKI:def 3;
the_Vertices_of G2 = the_Vertices_of G1 by GLIB_000:53;
then W.vertices() c= the_Vertices_of G2;
hence thesis by A4,Th168;
end;
theorem Th171:
for G1 being _Graph, G2 being Subgraph of G1, x,y,e being set
st e Joins x,y,G2 holds G1.walkOf(x, e, y) = G2.walkOf(x, e, y)
proof
let G1 be _Graph, G2 be Subgraph of G1, x, y, e be set;
assume
A1: e Joins x,y,G2;
then
A2: e Joins x,y,G1 by GLIB_000:72;
G2.walkOf(x,e,y) = <*x,e,y*> by A1,Def5;
hence thesis by A2,Def5;
end;
theorem
for G1 being _Graph, G2 being Subgraph of G1, W1 being Walk of G1, W2
being Walk of G2, e being set st W1 = W2 & e in W2.last().edgesInOut() holds W1
.addEdge(e) = W2.addEdge(e)
proof
let G1 be _Graph, G2 be Subgraph of G1, W1 be Walk of G1, W2 be Walk of G2,
e be set;
assume that
A1: W1 = W2 and
A2: e in W2.last().edgesInOut();
set W2B = G2.walkOf(W2.last(), e, W2.last().adj(e));
set W1B = G1.walkOf(W1.last(), e, W1.last().adj(e));
A3: e Joins W2.last(),W2.last().adj(e),G2 by A2,GLIB_000:67;
W1.last().adj(e) = W2.last().adj(e) by A1,A2,GLIB_000:80;
then W1B = W2B by A1,A3,Th171;
hence thesis by A1,Th33;
end;
theorem Th173:
for G1 being _Graph, G2 being Subgraph of G1, W being Walk of
G2 holds (W is closed implies W is closed Walk of G1) & (W is directed implies
W is directed Walk of G1) & (W is trivial implies W is trivial Walk of G1) & (W
is Trail-like implies W is Trail-like Walk of G1) & (W is Path-like implies W
is Path-like Walk of G1) & (W is vertex-distinct implies W is vertex-distinct
Walk of G1)
proof
let G1 be _Graph, G2 be Subgraph of G1, W be Walk of G2;
reconsider W9=W as Walk of G1 by Th165;
hereby
assume W is closed;
then W.first() = W.last();
then W9.first() = W9.last();
hence W is closed Walk of G1 by Def24;
end;
hereby
assume
A1: W is directed;
now
let n be odd Element of NAT;
A2: 1 <= n+1 by NAT_1:12;
assume
A3: n < len W9;
then n+1 <= len W9 by NAT_1:13;
then n+1 in dom W9 by A2,FINSEQ_3:25;
then
A4: W9.(n+1) in the_Edges_of G2 by Th7;
(the_Source_of G2).(W9.(n+1)) = W9.n by A1,A3;
hence (the_Source_of G1).(W9.(n+1)) = W9.n by A4,GLIB_000:def 32;
end;
hence W is directed Walk of G1 by Def25;
end;
hereby
assume W is trivial;
then len W9 = 1 by Lm55;
hence W is trivial Walk of G1 by Lm54;
end;
A5: now
assume W is Trail-like;
then for m,n being even Element of NAT st 1 <= m & m < n & n <= len W
holds W9.m <> W9.n by Lm57;
hence W is Trail-like Walk of G1 by Lm57;
end;
hence W is Trail-like implies W is Trail-like Walk of G1;
W is Path-like implies W is Path-like Walk of G1 by A5,Def28;
hence W is Path-like implies W is Path-like Walk of G1;
hereby
assume W is vertex-distinct;
then for m,n being odd Element of NAT st m <= len W9 & n <= len W9 & W9.m
= W9.n holds m = n;
hence W is vertex-distinct Walk of G1 by Def29;
end;
end;
theorem Th174:
for G1 being _Graph, G2 being Subgraph of G1, W1 being Walk of
G1, W2 being Walk of G2 st W1 = W2 holds (W1 is closed iff W2 is closed) & (W1
is directed iff W2 is directed) & (W1 is trivial iff W2 is trivial) & (W1 is
Trail-like iff W2 is Trail-like) & (W1 is Path-like iff W2 is Path-like) & (W1
is vertex-distinct iff W2 is vertex-distinct)
proof
let G1 be _Graph, G2 be Subgraph of G1, W1 be Walk of G1, W2 be Walk of G2;
assume
A1: W1 = W2;
then
A2: W1.last() = W2.last();
W1.first() = W2.first() by A1;
hence W1 is closed iff W2 is closed by A2;
now
hereby
assume
A3: W1 is directed;
now
let n be odd Element of NAT;
A4: 1 <= n+1 by NAT_1:12;
assume
A5: n < len W2;
then n+1 <= len W2 by NAT_1:13;
then n+1 in dom W2 by A4,FINSEQ_3:25;
then W2.(n+1) in the_Edges_of G2 by Th7;
then
(the_Source_of G2).(W2.(n+1)) = (the_Source_of G1).(W2.(n +1)) by
GLIB_000:def 32;
hence (the_Source_of G2).(W2.(n+1)) = W2.n by A1,A3,A5;
end;
hence W2 is directed;
end;
assume W2 is directed;
hence W1 is directed Walk of G1 by A1,Th173;
end;
hence W1 is directed iff W2 is directed;
W1 is trivial iff len W2 = 1 by A1,Lm55;
hence W1 is trivial iff W2 is trivial by Lm55;
W1 is Trail-like iff for m,n being even Element of NAT st 1 <= m & m <
n & n <= len W2 holds W2.m <> W2.n by A1,Lm57;
hence
A6: W1 is Trail-like iff W2 is Trail-like by Lm57;
W1 is Path-like iff (W1 is Trail-like & for m,n being odd Element of
NAT st m < n & n <= len W2 holds W2.m = W2.n implies m = 1 & n = len W2 ) by A1
;
hence W1 is Path-like iff W2 is Path-like by A6;
W1 is vertex-distinct iff for m,n being odd Element of NAT st m <= len
W2 & n <= len W2 & W2.m = W2.n holds m = n by A1;
hence thesis;
end;
theorem
G1 == G2 & x is VertexSeq of G1 implies x is VertexSeq of G2
proof
assume that
A1: G1 == G2 and
A2: x is VertexSeq of G1;
reconsider x2 = x as FinSequence of the_Vertices_of G2 by A1,A2,
GLIB_000:def 34;
now
let n be Element of NAT;
assume that
A3: 1 <= n and
A4: n < len x2;
consider e being set such that
A5: e Joins x2.n, x2.(n+1), G1 by A2,A3,A4,Def1;
e Joins x2.n, x2.(n+1), G2 by A1,A5,GLIB_000:88;
hence ex e being set st e Joins x2.n, x2.(n+1), G2;
end;
hence thesis by Def1;
end;
theorem
G1 == G2 & x is EdgeSeq of G1 implies x is EdgeSeq of G2
proof
assume that
A1: G1 == G2 and
A2: x is EdgeSeq of G1;
reconsider es = x as EdgeSeq of G1 by A2;
reconsider es2 = es as FinSequence of the_Edges_of G2 by A1,GLIB_000:def 34;
consider vs being FinSequence of the_Vertices_of G1 such that
A3: len vs = len es + 1 and
A4: for n being Element of NAT st 1 <= n & n <= len es holds es.n Joins
vs.n,vs.(n+1),G1 by Def2;
now
reconsider vs as FinSequence of the_Vertices_of G2 by A1,GLIB_000:def 34;
take vs;
thus len vs = len es + 1 by A3;
let n be Element of NAT;
assume that
A5: 1 <= n and
A6: n <= len es2;
es2.n Joins vs.n,vs.(n+1),G1 by A4,A5,A6;
hence es2.n Joins vs.n,vs.(n+1),G2 by A1,GLIB_000:88;
end;
hence thesis by Def2;
end;
theorem
G1 == G2 & x is Walk of G1 implies x is Walk of G2
proof
assume that
A1: G1 == G2 and
A2: x is Walk of G1;
A3: the_Vertices_of G1 = the_Vertices_of G2 by A1,GLIB_000:def 34;
then reconsider
W = x as FinSequence of the_Vertices_of G2 \/ the_Edges_of G2 by A1,A2,
GLIB_000:def 34;
A4: now
let n be odd Element of NAT;
assume n < len W;
then W.(n+1) Joins W.n, W.(n+2), G1 by A2,Def3;
hence W.(n+1) Joins W.n, W.(n+2), G2 by A1,GLIB_000:88;
end;
W.1 in the_Vertices_of G2 by A2,A3,Def3;
hence thesis by A2,A4,Def3;
end;
theorem
G1 == G2 implies G1.walkOf(x,e,y) = G2.walkOf(x,e,y)
proof
assume
A1: G1 == G2;
now
per cases;
suppose
A2: e Joins x,y,G1;
then
A3: e Joins x,y,G2 by A1,GLIB_000:88;
thus G1.walkOf(x,e,y) = <*x,e,y*> by A2,Def5
.= G2.walkOf(x,e,y) by A3,Def5;
end;
suppose
A4: not e Joins x,y,G1;
then
A5: not e Joins x,y,G2 by A1,GLIB_000:88;
A6: the_Vertices_of G1 = the_Vertices_of G2 by A1,GLIB_000:def 34;
thus G1.walkOf(x,e,y) =
G1.walkOf(the Element of the_Vertices_of G1) by A4,Def5
.= G2.walkOf(the Element of the_Vertices_of G2)
by A6
.= G2.walkOf(x,e,y) by A5,Def5;
end;
end;
hence thesis;
end;
theorem
for W1 being Walk of G1, W2 being Walk of G2 st G1 == G2 & W1 = W2
holds (W1 is closed iff W2 is closed) & (W1 is directed iff W2 is directed) & (
W1 is trivial iff W2 is trivial) & (W1 is Trail-like iff W2 is Trail-like) & (
W1 is Path-like iff W2 is Path-like) & (W1 is vertex-distinct iff W2 is
vertex-distinct)
proof
let W1 be Walk of G1, W2 be Walk of G2;
assume that
A1: G1 == G2 and
A2: W1 = W2;
G1 is Subgraph of G2 by A1,GLIB_000:87;
hence thesis by A2,Th174;
end;