:: Quick Sort on SCMPDS
:: by JingChao Chen
::
:: Received June 14, 2000
:: Copyright (c) 2000-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, SCMPDS_2, SUBSET_1, FSM_1, SCMPDS_4, AMI_1, TURING_1,
SCMFSA8A, SCMFSA_7, AMI_3, INT_1, SCMFSA8B, CARD_1, ARYTM_3, FUNCT_1,
XXREAL_0, UNIALG_2, SCMFSA7B, SCMFSA6B, RELAT_1, FUNCT_4, AMI_2,
SCMFSA_9, ARYTM_1, VALUED_1, TARSKI, GRAPHSP, CIRCUIT2, MSUALG_1, NAT_1,
FUNCOP_1, CARD_3, FINSEQ_1, GRAPH_2, SCPISORT, SCMP_GCD, CLASSES1,
SCPQSORT, EXTPRO_1, SCMFSA6C, COMPOS_1, MEMSTR_0;
notations TARSKI, XBOOLE_0, FUNCT_2, SUBSET_1, CARD_1, ORDINAL1, NUMBERS,
XXREAL_0, RELAT_1, FUNCT_1, PARTFUN1, FUNCT_4, PBOOLE, VALUED_1,
XCMPLX_0, RECDEF_1, INT_1, NAT_1, STRUCT_0, COMPOS_1, MEMSTR_0, EXTPRO_1,
AMI_2, FUNCT_7, SCMPDS_2, SCMPDS_4, SCMPDS_5, SCMPDS_6, SCMP_GCD, CARD_3,
FINSEQ_1, SCMPDS_8, GRAPH_2, CLASSES1, SCPISORT, FINSEQ_6;
constructors REAL_1, RECDEF_1, NEWTON, MESFUNC1, SCM_1, SCMPDS_4, SCMPDS_5,
SCMPDS_6, SCMP_GCD, SCMPDS_8, SCPISORT, CLASSES1, GRAPH_2, VALUED_1,
AMI_2, SCMPDS_1, PRE_POLY, AMISTD_1, AMISTD_2, SCMPDS_7, PBOOLE,
AMISTD_5, MEMSTR_0, FINSEQ_6;
registrations RELSET_1, XXREAL_0, XREAL_0, NAT_1, INT_1, SCMPDS_2, SCMPDS_4,
SCMPDS_5, SCMPDS_6, SCMPDS_8, ORDINAL1, VALUED_0, COMPOS_1, AFINSQ_1,
MEMSTR_0, EXTPRO_1, FUNCT_4, FUNCT_7, PRE_POLY, AMI_3, COMPOS_0;
requirements NUMERALS, REAL, SUBSET, ARITHM;
definitions SCPISORT;
equalities SCMPDS_2, SCMP_GCD, COMPOS_1, EXTPRO_1, MEMSTR_0;
expansions SCPISORT;
theorems AMI_3, NAT_1, TARSKI, FUNCT_4, SCMPDS_2, FUNCT_7, GRFUNC_1, SCMPDS_4,
SCMPDS_5, SCMPDS_7, SCMPDS_8, FINSEQ_1, FINSEQ_2, RFINSEQ, SCPISORT,
XBOOLE_1, XREAL_1, XXREAL_0, GRAPH_2, MEMSTR_0, CLASSES1, SCMPDS_6,
SCMP_GCD, INT_1, COMPOS_1, AFINSQ_1, EXTPRO_1, FINSEQ_6, PBOOLE;
schemes NAT_1, SCMPDS_8;
begin :: The Several Properties of "while" Program and Finite Sequence
reserve x for Int_position,
n,p0 for Nat;
registration
let I,J be shiftable Program of SCMPDS, a be Int_position,k1 be Integer;
cluster if>0(a,k1,I,J) -> shiftable;
correctness
proof
set i = (a,k1)<=0_goto (card I + 2), G =Goto (card J+1);
I ';' G ';' J = I ';' Load (goto (card J+1)) ';' J by SCMPDS_6:def 1;
then reconsider IJ=I ';' G ';' J as shiftable Program of SCMPDS;
if>0(a,k1,I,J) = i ';' I ';' G ';' J by SCMPDS_6:def 5
.=i ';' (I ';' G) ';' J by SCMPDS_4:14
.=i ';' IJ by SCMPDS_4:14
.=Load i ';' IJ by SCMPDS_4:def 2;
hence thesis;
end;
end;
reserve P,Q,V for Instruction-Sequence of SCMPDS;
theorem Th1: :: see SCMPDS_6:87
for s being 0-started State of SCMPDS,I being halt-free shiftable Program
of SCMPDS, J being shiftable Program of SCMPDS,a,b be Int_position,k1 being
Integer st s.DataLoc(s.a,k1) > 0 & I is_closed_on s,P & I is_halting_on s,P
holds
IExec(if>0(a,k1,I,J),P,s).b = IExec(I,P,s).b
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, J be
shiftable Program of SCMPDS,a,b be Int_position,k1 be Integer;
assume that
A1: s.DataLoc(s.a,k1)>0 and
A2: I is_closed_on s,P and
A3: I is_halting_on s,P;
A4: not b in dom Start-At((card I+card J+2),SCMPDS) by SCMPDS_4:18;
IExec(if>0(a,k1,I,J),P,s) = IExec(I,P,s) +*
Start-At((card I+card J+2),SCMPDS)
by A1,A2,A3,SCMPDS_6:70;
hence thesis by A4,FUNCT_4:11;
end;
set A = NAT, D = SCM-Data-Loc;
Lm1: for a be Int_position,i be Integer,I be Program of SCMPDS holds while>0(a
,i,I)= ((a,i)<=0_goto (card I +2)) ';' (I ';' goto -(card I+1))
proof
let a be Int_position,i be Integer,I be Program of SCMPDS;
set i1=(a,i)<=0_goto (card I +2), i2=goto -(card I+1);
thus while>0(a,i,I) = i1 ';' I ';' i2 by SCMPDS_8:def 3
.= i1 ';' (I ';' i2) by SCMPDS_4:15;
end;
Lm2: for I being Program of SCMPDS,a being Int_position,i being Integer holds
Shift(I,1) c= while>0(a,i,I)
proof
let I be Program of SCMPDS,a be Int_position,i be Integer;
set i1=(a,i)<=0_goto (card I+2), i2=goto -(card I+1);
A1: while>0(a,i,I) = i1 ';' I ';' i2 by SCMPDS_8:def 3
.= i1 ';' I ';' Load i2 by SCMPDS_4:def 3
.= Load i1 ';' I ';' Load i2 by SCMPDS_4:def 2;
card Load i1=1 by COMPOS_1:54;
hence thesis by A1,SCMPDS_7:3;
end;
theorem Th2:
for s,sm be State of SCMPDS,I be halt-free shiftable Program of
SCMPDS, a be Int_position,i be Integer, m be Nat st
I is_closed_on s,P & I is_halting_on s,P & s.DataLoc(s.a,i) > 0 &
m=LifeSpan(P +* stop I,Initialize s)+2 &
sm=Comput(P +* stop while>0(a,i,I),Initialize s,m)
holds DataPart sm = DataPart IExec(I,P,Initialize s) &
Initialize sm=sm
proof
let s,sm be State of SCMPDS,I be halt-free shiftable Program of SCMPDS, a
be Int_position,i be Integer,m be Nat;
set b=DataLoc(s.a,i);
set WH =while>0(a,i,I), iWH= stop WH, IsI= stop I;
set i1=(a,i)<=0_goto (card I+2), i2=goto -(card I+1);
set s2 = Initialize s, P2 = P +* stop I,
s3 = Initialize s, P3 = P +* stop WH,
s4 = Comput(P3,s3,1), P4 = P3;
assume that
A1: I is_closed_on s,P and
A2: I is_halting_on s,P and
A3: s.b > 0 and
A4: m=LifeSpan(P2,s2)+2 and
A5: sm= Comput(P3,s3,m);
A6: IsI c= P2 by FUNCT_4:25;
A7: iWH c= P3 by FUNCT_4:25;
WH c= iWH by AFINSQ_1:74;
then
A8: WH c= P3 by A7,XBOOLE_1:1;
Shift(I,1) c= WH by Lm2;
then
A9: Shift(I,1) c= P4 by A8,XBOOLE_1:1;
A10: WH = i1 ';' (I ';' i2) by Lm1;
A11: Comput(P3,s3,0+1) = Following(P3,Comput(P3,s3,0)) by EXTPRO_1:3
.= Exec(i1,s3) by A10,SCMPDS_6:11;
set m2=LifeSpan(P2,s2), s5= Comput(P4, s4,m2), P5 = P4,
l1=
(card I + 1);
A12: IC s3 = 0 by MEMSTR_0:def 11;
A13: not b in dom Start-At(0,SCMPDS) by SCMPDS_4:18;
not a in dom Start-At(0,SCMPDS) by SCMPDS_4:18;
then
A14: s3.DataLoc(s3.a,i)= s3.b by FUNCT_4:11
.= s.b by A13,FUNCT_4:11;
set m3=m2 +1;
set s6= Comput(P3, s3,m3), P6 = P3;
A15: s6=s5 by EXTPRO_1:4;
set s7= Comput(P3,s3,m3+1);
card I + 1 < card I + 2 by XREAL_1:6;
then
A16: l1 in dom WH by SCMPDS_8:18;
A17: I is_closed_on s2,P2 by A1,SCMPDS_6:24;
for x holds s2.x = s4.x by A11,SCMPDS_2:56;
then
A18: DataPart s2 = DataPart s4 by SCMPDS_4:8;
A19: P2 halts_on s2 by A2,SCMPDS_6:def 3;
P2+*stop I halts_on Initialize s2
by A2,SCMPDS_6:def 3;
then
A20: I is_halting_on s2,P2 by SCMPDS_6:def 3;
A21: IC s4 = 0+1 by A3,A12,A11,A14,SCMPDS_2:56;
then DataPart Comput(P2, s2,m2) = DataPart s5 by A6,A20,A17,A18,A9,
SCMPDS_7:18;
then
A22: DataPart s5 = DataPart(Result(P2,s2)) by A19,EXTPRO_1:23
.= DataPart IExec(I,P,Initialize s) by SCMPDS_4:def 5;
A23: IC s5=l1 by A6,A20,A17,A21,A18,A9,SCMPDS_7:18;
then
A24: CurInstr(P6,s6)=P5.l1 by A15,PBOOLE:143
.=WH.l1 by A16,A8,GRFUNC_1:2
.=i2 by SCMPDS_8:19;
A25: s7 = Following(P3,s6) by EXTPRO_1:3
.= Exec(i2,s6) by A24;
now
let x;
thus sm.x=s6.x by A4,A5,A25,SCMPDS_2:54
.=s5.x by EXTPRO_1:4;
end;
hence DataPart sm = DataPart IExec(I,P,Initialize s) by A22,SCMPDS_4:8;
IC s7 =ICplusConst(s6,0-(card I+1)) by A25,SCMPDS_2:54
.= 0 by A23,A15,SCMPDS_7:1;
hence thesis by A4,A5,MEMSTR_0:46;
end;
theorem Th3:
for s be State of SCMPDS,I be Program of SCMPDS st
for t be 0-started State of SCMPDS, Q st DataPart t = DataPart s
holds I is_halting_on t,Q
holds I is_closed_on s,P
proof
let s be State of SCMPDS,I be Program of SCMPDS;
assume
A1: for t be 0-started State of SCMPDS,Q st DataPart t = DataPart s holds I
is_halting_on t,Q;
set pI=stop I, sI=Initialize s, PI = P +* pI;
defpred X[Nat] means not IC Comput(PI,sI,$1) in dom pI;
A2: for a be Int_position holds s.a = sI.a
proof let a be Int_position;
not a in dom Start-At(0,SCMPDS) by SCMPDS_4:18;
hence thesis by FUNCT_4:11;
end;
assume not I is_closed_on s,P;
then ex k be Nat st X[k] by SCMPDS_6:def 2;
then
A3: ex k be Nat st X[k];
consider n be Nat such that
A4: X[n] and
A5: for m be Nat st X[m] holds n <= m from NAT_1:sch 5(A3);
reconsider n as Nat;
set s2 = Comput(PI,sI,n), P2 = PI,
Ig = ((IC s2,IC s2 + 1) --> (goto 1,goto -1));
reconsider P0 = PI +* Ig as Instruction-Sequence of SCMPDS;
reconsider P1 = P2 +* Ig as Instruction-Sequence of SCMPDS;
reconsider P3 = PI +* (IC s2,goto 1) as Instruction-Sequence of SCMPDS;
reconsider P4 = P3 +* (IC s2 + 1,goto -1)
as Instruction-Sequence of SCMPDS;
A6: P0 = P4 by FUNCT_7:139;
A7: for m be Nat st m < n holds IC( Comput(PI, sI,m))
in dom pI by A5;
A8: stop I c= PI by FUNCT_4:25;
pI c= P3 by A4,FUNCT_4:25,FUNCT_7:89;
then
A9: stop I c= P0 by A6,A4,AFINSQ_1:73,FUNCT_7:89;
then
A10: Comput(P0,sI,n) = s2 by A8,A7,SCMPDS_4:21;
DataPart sI = DataPart s by A2,SCMPDS_4:8;
then I is_halting_on sI,P0 by A1;
then
A11: P0+*pI halts_on Initialize sI
by SCMPDS_6:def 3;
A12: not P0 halts_on s2 by SCMPDS_4:20;
P0 +* pI=P0 by A9,FUNCT_4:98;
hence contradiction by A12,A10,A11,EXTPRO_1:22;
end;
theorem Th4:
for i1,i2,i3,i4 be Instruction of SCMPDS holds
card (i1 ';' i2 ';' i3 ';' i4) = 4
proof
let x1,x2,x3,x4 be Instruction of SCMPDS;
thus card (x1 ';' x2 ';' x3 ';' x4)=card (x1 ';' x2 ';' x3)+1 by SCMP_GCD:4
.=card (x1 ';' x2 )+1+1 by SCMP_GCD:4
.=2+1+1 by SCMP_GCD:5
.=4;
end;
theorem Th5:
for s being 0-started State of SCMPDS,I being halt-free shiftable Program
of SCMPDS, a,x,y be Int_position, i,c be Integer st s.x >= c+s.
DataLoc(s.a,i) &
(for t be 0-started State of SCMPDS,Q st t.x >= c+t.DataLoc(s.a,i) & t.y=s
.y & t.a=s.a & t.DataLoc(s.a,i) > 0
holds IExec(I,Q,t).a=t.a & I is_closed_on t,Q &
I is_halting_on t,Q & IExec(I,Q,t).DataLoc(s.a,i) < t.DataLoc(s.a,i)
& IExec(I,Q,t).x
>= c+IExec(I,Q,t).DataLoc(s.a,i) & IExec(I,Q,t).y=t.y)
holds while>0(a,i,I) is_closed_on s,P & while>0(a,i,I) is_halting_on s,P &
(s.DataLoc(s.a,i) > 0 implies
IExec(while>0(a,i,I),P,s)
=IExec(while>0(a,i,I),P,Initialize IExec(I,P,s)))
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a,x1,
y1 be Int_position, i,c be Integer;
set b=DataLoc(s.a,i);
assume s.x1 >= c+s.b;
then
A1: for x st x in {x1} holds s.x >= c+s.b by TARSKI:def 1;
assume
A2: for t be 0-started State of SCMPDS,Q st t.x1 >= c+t.b &
t.y1=s.y1 & t.a=s.a & t.b > 0
holds IExec(I,Q,t).a=t.a & I is_closed_on t,Q & I is_halting_on t,Q
& IExec(I,Q,t).b < t.b & IExec(I,Q,t).x1 >= c+IExec(I,Q,t).b &
IExec(I,Q,t).y1=t.y1;
now
let t be 0-started State of SCMPDS, Q;
assume that
A3: for x st x in {x1} holds t.x >= c+t.b and
A4: for x st x in {y1} holds t.x=s.x and
A5: t.a=s.a and
A6: t.b > 0;
y1 in {y1} by TARSKI:def 1;
then
A7: t.y1=s.y1 by A4;
x1 in {x1} by TARSKI:def 1;
then
A8: t.x1 >= c+t.b by A3;
hence
IExec(I,Q,t).a=t.a & I is_closed_on t,Q
& I is_halting_on t,Q & IExec(I,Q,t).
b < t.b by A2,A5,A6,A7;
hereby
let x;
assume
A9: x in {x1};
IExec(I,Q,t).x1 >= c+IExec(I,Q,t).b
by A2,A5,A6,A8,A7;
hence IExec(I,Q,t).x >= c+IExec(I,Q,t).b
by A9,TARSKI:def 1;
end;
let x;
assume
A10: x in {y1};
hence IExec(I,Q,t).x=IExec(I,Q,t).y1
by TARSKI:def 1
.=t.y1 by A2,A5,A6,A8,A7
.=t.x by A10,TARSKI:def 1;
end;
hence thesis by A1,SCMPDS_8:27;
end;
theorem Th6:
for s being 0-started State of SCMPDS,I being halt-free shiftable Program
of SCMPDS, a,x,y be Int_position, i,c be Integer st s.x >= c & (
for t be 0-started State of SCMPDS,Q
st t.x >= c & t.y=s.y & t.a=s.a & t.DataLoc(s.a,i) > 0
holds IExec(I,Q,t).a=t.a & I is_closed_on t,Q
& I is_halting_on t,Q & IExec(I,Q,t).
DataLoc(s.a,i) < t.DataLoc(s.a,i) & IExec(I,Q,t).x >= c
& IExec(I,Q,t).y=t.y) holds
while>0(a,i,I) is_closed_on s,P & while>0(a,i,I) is_halting_on s,P
& ( s.DataLoc(s.a,i) > 0
implies IExec(while>0(a,i,I),P,s)
=IExec(while>0(a,i,I),P,Initialize IExec(I,P,s)))
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a,x,y
be Int_position, i,c be Integer;
set b=DataLoc(s.a,i);
defpred P[set] means ex t be State of SCMPDS st t=$1 & t.x >= c & t.y=s.y;
consider f be Function of product the_Values_of SCMPDS,NAT such that
A1: for s be State of SCMPDS holds (s.b <= 0 implies f.s =0) & (s.b > 0
implies f.s=s.b) by SCMPDS_8:5;
deffunc F(State of SCMPDS) = f.$1;
A2: for t be 0-started State of SCMPDS st P[t] & F(t)=0 holds t.b <= 0 by A1;
assume
A3: s.x >= c;
A4: P[s] by A3;
assume
A5: for t be 0-started State of SCMPDS,Q
st t.x >= c & t.y=s.y & t.a=s.a & t.b > 0
holds IExec(I,Q,t).a=t.a & I is_closed_on t,Q & I is_halting_on t,Q
& IExec(I,Q,t).b <
t.b & IExec(I,Q,t).x >= c & IExec(I,Q,t).y=t.y;
A6: now
let t be 0-started State of SCMPDS, Q;
assume that
A7: P[t] and
A8: t.a=s.a and
A9: t.b > 0;
set It=IExec(I,Q,t), t2=Initialize It;
thus
IExec(I,Q,t).a=t.a & I is_closed_on t,Q & I is_halting_on t,Q
by A5,A8,A9,A7;
thus F(t2) < F(t)
proof
A10: F(t)=t.b by A1,A9;
assume
A11: F(t2) >= F(t);
then t2.b > 0 by A1,A9,A10;
then F(t2)=t2.b by A1
.=It.b by SCMPDS_5:15;
hence contradiction by A5,A8,A9,A7,A11,A10;
end;
thus P[Initialize It]
proof
take v=Initialize It;
thus v=Initialize It;
It.x >= c by A5,A8,A9,A7;
hence v.x >= c by SCMPDS_5:15;
It.y=t.y by A5,A8,A9,A7;
hence thesis by A7,SCMPDS_5:15;
end;
end;
while>0(a,i,I) is_closed_on s,P & while>0(a,i,I)
is_halting_on s,P from SCMPDS_8:sch 3(A2,A4,A6);
hence while>0(a,i,I) is_closed_on s,P & while>0(a,i,I) is_halting_on s,P;
assume
A12: s.b > 0;
IExec(while>0(a,i,I),P,s)
= IExec(while>0(a,i,I),P,Initialize IExec(I,P,s))
from SCMPDS_8:sch 4(A12,A2,A4,A6);
hence thesis;
end;
theorem Th7:
for s being 0-started State of SCMPDS,I being halt-free shiftable Program
of SCMPDS, a,x1,x2,x3,x4 be Int_position, i,c,md be Integer st s.
x4=s.x3-c+s.x1 & md <= s.x3-c &
(for t be 0-started State of SCMPDS,Q st t.x4=t.x3-c+t.x1 &
md <= t.x3-c & t.x2=s.x2 & t.a=s.a & t.DataLoc(s.a,i) > 0
holds IExec(I,Q,t).a=t.
a & I is_closed_on t,Q & I is_halting_on t,Q
& IExec(I,Q,t).DataLoc(s.a,i) < t.
DataLoc(s.a,i) & IExec(I,Q,t).x4=
IExec(I,Q,t).x3-c+IExec(I,Q,t).x1
& md <= IExec(I,Q,t)
.x3-c & IExec(I,Q,t).x2=t.x2) holds while>0(a,i,I) is_closed_on s,P
& while>0(a,i,I) is_halting_on s,P & ( s.DataLoc(s.a,i) > 0
implies IExec(while>0(a,i,I),P,s) =
IExec(while>0(a,i,I),P,Initialize IExec(I,P,s)) )
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a,x1,
x2,x3,x4 be Int_position, i,c,md be Integer;
set b=DataLoc(s.a,i);
defpred P[set] means ex t be State of SCMPDS st t=$1 & t.x4=t.x3-c+t.x1 & md
<= t.x3-c & t.x2=s.x2;
assume that
A1: s.x4=s.x3-c+s.x1 and
A2: md <= s.x3-c;
consider f be Function of product the_Values_of SCMPDS,NAT such that
A3: for s be State of SCMPDS holds (s.b <= 0 implies f.s =0) & (s.b > 0
implies f.s=s.b) by SCMPDS_8:5;
deffunc F(State of SCMPDS) = f.$1;
A4: for t be 0-started State of SCMPDS st P[t] & F(t)=0 holds t.b <= 0 by A3;
assume
A5: for t be 0-started State of SCMPDS,Q
st t.x4=t.x3-c+t.x1 & md <= t.x3-c & t.x2=s
.x2 & t.a=s.a & t.DataLoc(s.a,i) > 0 holds IExec(I,Q,t).a=t.a
& I is_closed_on t,Q
& I is_halting_on t,Q & IExec(I,Q,t).DataLoc(s.a,i) <
t.DataLoc(s.a,i)
& IExec(I,Q,t).x4=IExec(I,Q,t).x3-c+IExec(I,Q,t).x1
& md <= IExec(I,Q,t).x3-c & IExec(I,Q,t).x2=t.x2;
A6: now
let t be 0-started State of SCMPDS, Q;
assume that
A7: P[t] and
A8: t.a=s.a and
A9: t.b > 0;
set It=IExec(I,Q,t), t2=Initialize It;
consider v be State of SCMPDS such that
A10: v=t and
A11: v.x4=v.x3-c+v.x1 and
A12: md <= v.x3-c and
A13: v.x2=s.x2 by A7;
A14: t.x2=s.x2 by A10,A13;
A15: t.x4=t.x3-c+t.x1 by A10,A11;
A16: md <= t.x3-c by A10,A12;
thus IExec(I,Q,t).a=t.a & I is_closed_on t,Q & I is_halting_on t,Q
by A5,A8,A9,A15,A13,A10,A12;
thus F(t2) < F(t)
proof
A17: F(t)=t.b by A3,A9;
assume
A18: F(t2) >= F(t);
then t2.b > 0 by A3,A9,A17;
then F(t2)=t2.b by A3
.=It.b by SCMPDS_5:15;
hence contradiction by A5,A8,A9,A15,A16,A10,A13,A18,A17;
end;
thus P[Initialize It]
proof
take v=Initialize It;
thus v=Initialize It;
It.x4=It.x3-c+It.x1 by A5,A8,A9,A15,A16,A14;
then v.x4=It.x3-c+It.x1 by SCMPDS_5:15;
then v.x4=v.x3-c+It.x1 by SCMPDS_5:15;
hence v.x4=v.x3-c+v.x1 by SCMPDS_5:15;
md <= It.x3-c by A5,A8,A9,A15,A16,A14;
hence md <= v.x3-c by SCMPDS_5:15;
It.x2=t.x2 by A5,A8,A9,A15,A16,A10,A13;
hence thesis by A10,A13,SCMPDS_5:15;
end;
end;
A19: P[s] by A1,A2;
while>0(a,i,I) is_closed_on s,P & while>0(a,i,I)
is_halting_on s,P from SCMPDS_8:sch 3(A4,A19,A6);
hence while>0(a,i,I) is_closed_on s,P & while>0(a,i,I) is_halting_on s,P;
assume
A20: s.b > 0;
IExec(while>0(a,i,I),P,s) = IExec(while>0(a,i,I),P,
Initialize IExec(I,P,s)) from SCMPDS_8:sch 4(A20,A4,A19,A6);
hence thesis;
end;
theorem Th8:
for f being FinSequence of INT,m,k1,k,n be Nat st k1=k
-1 & f is_non_decreasing_on m,k1 & f is_non_decreasing_on k+1,n & (for i be
Nat st m <= i & i < k holds f.i <= f.k) & (for i be Nat
st k < i & i <= n holds f.k <= f.i) holds f is_non_decreasing_on m,n
proof
let f be FinSequence of INT,m,k1,k,n be Nat;
assume that
A1: k1=k-1;
assume
A2: f is_non_decreasing_on m,k1;
assume
A3: f is_non_decreasing_on k+1,n;
assume
A4: for i be Nat st m <= i & i < k holds f.i <= f.k;
assume
A5: for i be Nat st k < i & i <= n holds f.k <= f.i;
now
let i,j be Nat;
assume that
A6: m <= i and
A7: i <= j and
A8: j <= n;
per cases by XXREAL_0:1;
suppose
j < k;
then j+1 <= k by INT_1:7;
then j <= k1 by A1,XREAL_1:19;
hence f.i <= f.j by A2,A6,A7,FINSEQ_6:def 9;
end;
suppose
A9: j = k;
per cases;
suppose
i=j;
hence f.i <= f.j;
end;
suppose
i<>j;
then i<j by A7,XXREAL_0:1;
hence f.i <= f.j by A4,A6,A9;
end;
end;
suppose
A10: j > k;
per cases by XXREAL_0:1;
suppose
i < k;
then
A11: f.k >= f.i by A4,A6;
f.j >= f.k by A5,A8,A10;
hence f.i <= f.j by A11,XXREAL_0:2;
end;
suppose
A12: i = k;
per cases;
suppose
i=j;
hence f.i <= f.j;
end;
suppose
i<>j;
then i<j by A7,XXREAL_0:1;
hence f.i <= f.j by A5,A8,A12;
end;
end;
suppose
i > k;
then i >= k+1 by INT_1:7;
hence f.i <= f.j by A3,A7,A8,FINSEQ_6:def 9;
end;
end;
end;
hence thesis by FINSEQ_6:def 9;
end;
Lm3: for s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a
be Int_position, i,c be Integer,f,g be FinSequence of INT,
m,n,m1 be Nat st s.a=c & len f=n & len g=n & f is_FinSequence_on s,m & g
is_FinSequence_on IExec(while>0(a,i,I),P,s),m & 1=s.DataLoc(c,i)
& m1=m+n+1 & m+1
=s.intpos m1 & m+n=s.intpos(m1+1) &
(for t be 0-started State of SCMPDS,Q
for f1,f2 be
FinSequence of INT,k1,k2,y1, yn be Nat st t.a=c & 2*k1+1=t.DataLoc(c
,i) & k2=m+n+2*k1+1 & m+y1=t.intpos k2 & m+yn=t.intpos(k2+1) & (1 <= y1 & yn <=
n or y1 >= yn) holds I is_closed_on t,Q & I is_halting_on t,Q
& IExec(I,Q,t).a=t.a &
(for j be Nat st (1<=j & j<2*k1+1)
holds IExec(I,Q,t).intpos(m+n+j)=t.
intpos(m+n+j)) & (y1>=yn implies IExec(I,Q,t).DataLoc(c,i)=2*k1-1
& (for j be
Nat st (1<=j & j <= n)
holds IExec(I,Q,t).intpos (m+j) = t.intpos (m+j
))) & (y1<yn implies IExec(I,Q,t).DataLoc(c,i)=2*k1+3
& (for j be Nat
st 1<=j & j<y1 or yn<j & j <= n
holds IExec(I,Q,t).intpos(m+j) = t.intpos (m+
j)) & (ex ym be Nat st y1 <= ym & ym <= yn
& m+y1=IExec(I,Q,t).intpos
k2 & m+ym-1=IExec(I,Q,t).intpos (k2+1) &
m+ym+1=IExec(I,Q,t).intpos (k2+2)
& m+yn=
IExec(I,Q,t).intpos (k2+3) &
(for j be Nat st y1 <= j & j < ym holds
IExec(I,Q,t).intpos (m+j) <=
IExec(I,Q,t).intpos (m+ym)) &
(for j be Nat
st ym < j & j <= yn holds IExec(I,Q,t).intpos (m+j)
>= IExec(I,Q,t).intpos (m+ym)))
) & (f1 is_FinSequence_on t,m
& f2 is_FinSequence_on IExec(I,Q,t),m & len f1=n &
len f2=n implies f1,f2 are_fiberwise_equipotent)) holds while>0(a,i,I)
is_halting_on s,P & f,g are_fiberwise_equipotent & g is_non_decreasing_on 1,n
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a be
Int_position, i,c be Integer,f,g be FinSequence of INT,
m,n,m1 be Nat;
A1: Initialize s = s by MEMSTR_0:44;
set b=DataLoc(c,i);
assume that
A2: s.a=c and
A3: len f=n and
A4: len g=n;
set WH =while>0(a,i,I), sWH=stop WH;
assume
A5: f is_FinSequence_on s,m;
defpred P[Nat] means
for t be 0-started State of SCMPDS,Q
for f1 be FinSequence of INT, k1,k2,y1,yn be Nat
st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
(1 <= y1 & yn <= n or y1 >= yn) &
m+y1=t.intpos k2 & m+yn=t.intpos(k2+1) & yn-y1<=$1 &
f1 is_FinSequence_on t,m & len f1=n
ex k be Nat,f2 be FinSequence of INT
st Initialize Comput(Q+*sWH,t,k)
= Comput(Q+*sWH,t,k) &
f2 is_FinSequence_on
Comput(Q+*sWH,t,k),m & len f2=n &
f1,f2 are_fiberwise_equipotent &
f2 is_non_decreasing_on y1,yn &
(for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n)
holds f2.j= t.intpos(m+j)) &
(for j be Nat st y1>=yn & 1<=j & j<= n
holds f2.j= t.intpos(m+j)) &
(for j be Nat st 1<=j & j<2*k1+1
holds Comput(Q+*sWH,t,k).intpos(m+n+j)=t.intpos(m+n+j)) &
Comput(Q+*sWH,t,k).b=t.b-2 & Comput(Q+*sWH,t,k).a=c;
assume
A6: g is_FinSequence_on IExec(while>0(a,i,I),P,s),m;
assume
A7: 1=s.b;
assume that
A8: m1=m+n+1 and
A9: m+1=s.intpos m1 and
A10: m+n=s.intpos(m1+1);
A11: m1=m+n+2*0+1 by A8;
assume
A12: for t be 0-started State of SCMPDS,Q
for f1,f2 be FinSequence of INT, k1,k2,y1,yn
be Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 & m+y1=t.intpos k2 & m+
yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
holds I is_closed_on t,Q & I is_halting_on t,Q & IExec(I,Q,t).a=t.a &
(for j be Nat st (1<=j & j<2*k1+1)
holds IExec(I,Q,t).intpos(m+n+j)=t.intpos(m+n+j)) &
(y1>=yn implies IExec(I,Q,t).b=2*k1-1 &
for j be Nat
st 1<=j & j <= n
holds IExec(I,Q,t).intpos (m+j) = t.intpos (m+j) ) &
(y1<yn implies IExec(I,Q,t).b=2*k1+3 &
(for j be
Nat st 1<=j & j<y1 or yn<j & j <= n
holds IExec(I,Q,t).intpos (m+j) = t.intpos (m+j)) &
ex ym be Nat st y1 <= ym & ym <= yn & m+y1=
IExec(I,Q,t).intpos k2 & m+ym-1=
IExec(I,Q,t).intpos (k2+1)
& m+ym+1=IExec(I,Q,t).intpos (k2+2) & m+yn=IExec(I,Q,t).intpos (k2+3) &
(for j be Nat st y1<= j & j < ym holds IExec(I,Q,t).intpos(m+j) <=
IExec(I,Q,t).intpos(m+ym))
& for j be Nat st ym < j & j <= yn
holds IExec(I,Q,t).intpos(m+j) >=
IExec(I,Q,t).intpos(m+ym) )
& (f1 is_FinSequence_on t,m
& f2 is_FinSequence_on IExec(I,Q,t),
m & len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent);
A13: P[0]
proof
let t be 0-started State of SCMPDS,Q;
let f1 be FinSequence of INT,k1,k2,y1,yn be Nat;
A14: Initialize t = t by MEMSTR_0:44;
assume that
A15: t.a=c and
A16: 2*k1+1=t.b and
A17: k2=m+n+2*k1+1 and
A18: 1 <= y1 & yn <= n or y1 >= yn and
A19: m+y1=t.intpos k2 and
A20: m+yn=t.intpos(k2+1) and
A21: yn-y1<=0 and
A22: f1 is_FinSequence_on t,m and
A23: len f1=n;
A24: I is_halting_on t,Q by A12,A15,A16,A17,A18,A19,A20;
take k=LifeSpan(Q+*stop I,t)+2;
set tk= Comput(Q+*sWH,t,k);
A25: I is_closed_on t,Q by A12,A15,A16,A17,A18,A19,A20;
then
A26: DataPart tk = DataPart IExec(I,Q,t) by A15,A16,A24,Th2,A14;
consider f2 be FinSequence of INT such that
A27: len f2=n and
A28: for i be Nat st 1<=i & i <= len f2
holds f2.i=IExec(I,Q,t) .intpos(m+i) by SCPISORT:1;
take f2;
thus Initialize tk =tk by A15,A16,A25,A24,Th2,A14;
now
let i be Nat;
assume that
A29: 1<=i and
A30: i <= len f2;
thus f2.i=IExec(I,Q,t).intpos(m+i) by A28,A29,A30
.=tk.intpos(m+i) by A26,SCMPDS_4:8;
end;
hence f2 is_FinSequence_on tk,m;
thus len f2=n by A27;
f2 is_FinSequence_on IExec(I,Q,t),m by A28;
hence
f1,f2 are_fiberwise_equipotent by A12,A15,A16,A17,A18,A19,A20,A22,A23,A27;
thus f2 is_non_decreasing_on y1,yn by A21,FINSEQ_6:165,XREAL_1:50;
thus for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n)
holds f2.j= t.intpos(m+j) by A21,XREAL_1:50;
hereby
let j be Nat;
assume that
A31: y1>=yn and
A32: 1<=j and
A33: j<= n;
thus f2.j=IExec(I,Q,t).intpos (m+j) by A27,A28,A32,A33
.=t.intpos(m+j) by A12,A15,A16,A17,A19,A20,A31,A32,A33;
end;
hereby
let j be Nat;
assume that
A34: 1<=j and
A35: j<2*k1+1;
thus tk.intpos(m+n+j)=IExec(I,Q,t).intpos(m+n+j)
by A26,SCMPDS_4:8
.=t.intpos(m+n+j) by A12,A15,A16,A17,A18,A19,A20,A34,A35;
end;
y1>=yn implies IExec(I,Q,t).b=2*k1-1 &
for j be Nat st 1<=j & j <= n
holds IExec(I,Q,t).intpos (m+j) = t.intpos (m+j)
by A12,A15,A16,A17,A19,A20;
hence tk.b=t.b-2 by A16,A21,A26,SCMPDS_4:8,XREAL_1:50;
IExec(I,Q,t).a=t.a by A12,A15,A16,A17,A18,A19,A20;
hence thesis by A15,A26,SCMPDS_4:8;
end;
A36: now
let k be Nat;
assume
A37: P[k];
P[k+1]
proof
let t be 0-started State of SCMPDS,Q;
let f1 be FinSequence of INT, k1,k2,y1,yn be Nat;
A38: Initialize t = t by MEMSTR_0:44;
assume that
A39: t.a=c and
A40: 2*k1+1=t.b and
A41: k2=m+n+2*k1+1 and
A42: 1 <= y1 & yn <= n or y1 >= yn and
A43: m+y1=t.intpos k2 and
A44: m+yn=t.intpos(k2+1) and
A45: yn-y1<=k+1 and
A46: f1 is_FinSequence_on t,m and
A47: len f1=n;
per cases;
suppose
yn-y1<=0;
hence ex kk be Nat,f2 be FinSequence of INT st
Initialize Comput(Q+*sWH,t,kk)
= Comput(Q+*sWH,t,kk) &
f2 is_FinSequence_on
Comput(Q+*sWH,t,kk),m &
len f2=n & f1,f2 are_fiberwise_equipotent & f2 is_non_decreasing_on
y1,yn & (for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n) holds
f2.j= t.intpos(m+j)) & (for j be Nat st y1>=yn & 1<=j & j<= n holds
f2.j= t.intpos(m+j)) & (for j be Nat st (1<=j & j<2*k1+1) holds
Comput(Q+*sWH,t,kk).intpos(m+n+j)
=t.intpos(m+n+j)) &
Comput(Q+*sWH,t,kk).b=
t.b-2 & Comput(Q+*sWH,t,kk).a=c
by A13,A39,A40,A41,A42,A43,A44,A46,A47;
end;
suppose
A48: yn-y1>0;
set m1=LifeSpan(Q+*stop I,t)+2;
set t1= Comput(Q+*sWH,t,m1),
Q1 = Q+*sWH;
A49: I is_halting_on t,Q by A12,A39,A40,A41,A42,A43,A44;
y1-1 >= 0 by A42,A48,XREAL_1:47,48;
then reconsider y0=y1-1 as Element of NAT by INT_1:3;
set jj=2*k1+1;
A50: yn-y1-1 <= k+1-1 by A45,XREAL_1:9;
A51: yn <= y1+(k+1) by A45,XREAL_1:20;
consider f2 be FinSequence of INT such that
A52: len f2=n and
A53: for i be Nat st 1<=i & i <= len f2 holds f2.i=t1.
intpos( m+i) by SCPISORT:1;
set It=IExec(I,Q,t);
A54: y1<yn implies It.b=2*k1+3 & (for j be Nat st 1<=j & j
<y1 or yn<j & j <= n holds IExec(I,Q,t).intpos (m+j)
= t.intpos (m+j))
& ex ym
be Nat st y1 <= ym & ym <= yn & m+y1=It.intpos k2 & m+ym-1=It.intpos
(k2+1) & m+ym+1=It.intpos (k2+2) & m+yn=It.intpos (k2+3) &
(for j be Nat st y1 <= j & j < ym
holds IExec(I,Q,t).intpos(m+j) <=
IExec(I,Q,t).intpos(m+ym)
) & for j be Nat st ym < j & j <= yn
holds IExec(I,Q,t).intpos(m+j) >=
IExec(I,Q,t).intpos(m+ym) by A12,A39,A40,A41,A42,A43,A44;
then consider ym be Nat such that
A55: y1 <= ym and
A56: ym <= yn and
A57: m+y1=It.intpos k2 and
A58: m+ym-1=It.intpos (k2+1) and
A59: m+ym+1=It.intpos (k2+2) and
A60: m+yn=It.intpos (k2+3) and
A61: for j be Nat st y1 <= j & j < ym
holds IExec(I,Q,t).
intpos(m+j) <= IExec(I,Q,t).intpos(m+ym) and
A62: for j be Nat st ym < j & j <= yn
holds IExec(I,Q,t).
intpos(m+j) >= IExec(I,Q,t).intpos(m+ym) by A48,XREAL_1:47;
A63: I is_closed_on t,Q by A12,A39,A40,A41,A42,A43,A44;
then
A64: DataPart t1 = DataPart IExec(I,Q,t) by A39,A40,A49,Th2,A38;
then
A65: t1.b=2*k1+3 by A48,A54,SCMPDS_4:8,XREAL_1:47;
A66: ym >= 1 by A42,A48,A55,XREAL_1:47,XXREAL_0:2;
then reconsider yc=ym-1 as Element of NAT by INT_1:3,XREAL_1:48;
A67: yc <= yn by A56,XREAL_1:146,XXREAL_0:2;
then
A68: yc <= n by A42,A48,XREAL_1:47,XXREAL_0:2;
A69: t1.b=2*(k1+1)+1 by A48,A54,A64,SCMPDS_4:8,XREAL_1:47;
IExec(I,Q,t).a=t.a by A12,A39,A40,A41,A42,A43,A44;
then
A70: t1.a=c by A39,A64,SCMPDS_4:8;
set k3=m+n+2*(k1+1)+1, yd=ym+1;
A71: yd > ym by XREAL_1:29;
then
A72: yd >= y1 by A55,XXREAL_0:2;
then
A73: yd >= 1 by A42,A48,XREAL_1:47,XXREAL_0:2;
A74: t1.intpos(k3+1)=m+yn by A41,A64,A60,SCMPDS_4:8;
ym+(1+k) >= y1+(1+k) by A55,XREAL_1:6;
then yn <= yd+k by A51,XXREAL_0:2;
then
A75: yn-yd<=k by XREAL_1:20;
A76: t1.intpos k3=m+yd by A41,A64,A59,SCMPDS_4:8;
A77: (Initialize t1).a = t1.a by SCMPDS_5:15;
A78: (Initialize t1).b = t1.b by SCMPDS_5:15;
A79: (Initialize t1).intpos k3 = t1.intpos k3 by SCMPDS_5:15;
A80: (Initialize t1).intpos(k3+1) = t1.intpos(k3+1) by SCMPDS_5:15;
f2 is_FinSequence_on (Initialize t1),m
proof let i be Nat;
assume 1 <= i & i <= len f2;
then f2.i=t1.intpos(m+i) by A53;
hence thesis by SCMPDS_5:15;
end;
then consider kl be Nat,f3 be FinSequence of INT such that
A81: Initialize Comput(Q1+*sWH,(Initialize t1),kl)
= Comput(Q1+*sWH,(Initialize t1),kl) and
A82: f3 is_FinSequence_on
Comput(Q1+*sWH,(Initialize t1),kl),m and
A83: len f3=n and
A84: f2,f3 are_fiberwise_equipotent and
A85: f3 is_non_decreasing_on yd,yn and
A86: for j be Nat st yd<yn & (1<=j & j<yd or yn<j & j<= n)
holds f3.j= (Initialize t1).intpos(m+j) and
A87: for j be Nat st yd>=yn & 1<=j & j<= n
holds f3.j= (Initialize t1).intpos(m+j) and
A88: for j be Nat st 1<=j & j<2*(k1+1)+1
holds Comput(Q1+*sWH,(Initialize t1),kl).intpos(m+n+j)
=(Initialize t1).intpos(m+n+j) and
A89: Comput(Q1+*sWH,(Initialize t1),kl).b=(Initialize t1).b-2 and
A90: Comput(Q1+*sWH,(Initialize t1),kl).a=c
by A37,A73,A75,A52,A42,A48,A70,A77,A69,A78,A76,A79,A74,A80,XREAL_1:47;
A91: Initialize Comput(Q1+*sWH,Initialize t1,kl)
= Comput(Q1+*sWH,Initialize t1,kl) by A81;
A92: f3 is_FinSequence_on Comput(Q1+*sWH,Initialize t1,kl),m by A82;
A93: len f3=n by A83;
A94: f2,f3 are_fiberwise_equipotent by A84;
A95: f3 is_non_decreasing_on yd,yn by A85;
A96: for j be Nat st yd<yn & (1<=j & j<yd or yn<j & j<=n)
holds f3.j= t1.intpos(m+j)
proof let j be Nat;
assume yd<yn & (1<=j & j<yd or yn<j & j<=n);
then f3.j= (Initialize t1).intpos(m+j) by A86;
hence thesis by SCMPDS_5:15;
end;
A97: for j be Nat st yd>=yn & 1<=j & j<= n
holds f3.j=t1. intpos(m+j)
proof let j be Nat;
assume yd>=yn & 1<=j & j<= n;
then f3.j= (Initialize t1).intpos(m+j) by A87;
hence thesis by SCMPDS_5:15;
end;
A98: for j be Nat st 1<=j & j<2*(k1+1)+1
holds Comput(Q1+*sWH,Initialize t1,kl).intpos(m+n+j)
=t1.intpos(m+n+j)
proof let j be Nat;
assume 1<=j & j<2*(k1+1)+1;
then Comput(Q1+*sWH,Initialize t1,kl).intpos(m+n+j)
= (Initialize t1).intpos(m+n+j) by A88;
hence thesis by SCMPDS_5:15;
end;
set t2= Comput(Q1+*sWH,Initialize t1,kl),
Q2 = Q1+*sWH;
A99: t2.b=t1.b-2 by A89,A78;
A100: t2.a = c by A90;
A101: 2*k1+3=2*(k1+1)+1;
then jj < 2*(k1+1)+1 by XREAL_1:6;
then
A102: t2.intpos k2=t1.intpos(m+n+jj) by A41,A98,NAT_1:11
.=m+y1 by A41,A64,A57,SCMPDS_4:8;
A103: ym <= n by A42,A48,A56,XREAL_1:47,XXREAL_0:2;
A104: now
per cases;
suppose
yd<yn;
hence f3.ym= t1.intpos(m+ym) by A71,A96,A66;
end;
suppose
yd>=yn;
hence f3.ym= t1.intpos(m+ym) by A97,A66,A103;
end;
end;
A105: now
let i be Nat;
assume that
A106: 1<=i and
A107: i<=ym;
A108: i<=n by A103,A107,XXREAL_0:2;
A109: i<yd by A71,A107,XXREAL_0:2;
now
per cases;
suppose
yd<yn;
hence f3.i= t1.intpos(m+i) by A96,A106,A109;
end;
suppose
yd>=yn;
hence f3.i= t1.intpos(m+i) by A97,A106,A108;
end;
end;
hence f3.i=f2.i by A52,A53,A106,A108;
end;
yc <= yn-1 by A56,XREAL_1:9;
then yc-y1 <= yn-1-y1 by XREAL_1:9;
then
A110: yc-y1<=k by A50,XXREAL_0:2;
A111: yc < yd by A71,XREAL_1:146,XXREAL_0:2;
set jj=2*k1+2;
jj >= 2 by NAT_1:11;
then
A112: jj >= 1 by XXREAL_0:2;
jj < 2*(k1+1)+1 by A101,XREAL_1:6;
then
A113: t2.intpos (k2+1)=t1.intpos(m+n+jj) by A41,A98,A112
.=m+yc by A41,A64,A58,SCMPDS_4:8;
A114: 1 <= y1 & yc <= n or y1 >= yc by A48,A68,A42,XREAL_1:47;
A115: (Initialize t2).a = t2.a by SCMPDS_5:15;
A116: (Initialize t2).b = t2.b by SCMPDS_5:15;
A117: (Initialize t2).intpos k2 = t2.intpos k2 by SCMPDS_5:15;
A118: (Initialize t2).intpos(k2+1) = t2.intpos(k2+1) by SCMPDS_5:15;
f3 is_FinSequence_on (Initialize t2),m
proof let i be Nat;
assume 1 <= i & i <= len f3;
then f3.i= t2.intpos(m+i) by A92;
hence thesis by SCMPDS_5:15;
end;
then consider km be Nat,f4 be FinSequence of INT such that
A119: Initialize Comput(Q2+*sWH,(Initialize t2),km)
= Comput(Q2+*sWH,(Initialize t2),km) and
A120: f4 is_FinSequence_on
Comput(Q2+*sWH,(Initialize t2),km),m and
A121: len f4=n and
A122: f3,f4 are_fiberwise_equipotent and
A123: f4 is_non_decreasing_on y1,yc and
A124: for j be Nat st y1<yc & (1<=j & j<y1 or yc<j & j<= n)
holds f4.j= (Initialize t2).intpos(m+j) and
A125: for j be Nat st y1>=yc & 1<=j & j<= n
holds f4.j= (Initialize t2).intpos(m+j) and
A126: for j be Nat st 1<=j & j<2*k1+1
holds Comput(Q2+*sWH,(Initialize t2),km).intpos(m+n+j)
=(Initialize t2).intpos(m+n+j) and
A127: Comput(Q2+*sWH,(Initialize t2),km).b=(Initialize t2).b-2 and
A128: Comput(Q2+*sWH,(Initialize t2),km).a=c
by A37,A110,A93,A114,A41,A115,A100,A116,A65,A99,A117,A102,A118,A113;
A129: Initialize Comput(Q2+*sWH,Initialize t2,km)
= Comput(Q2+*sWH,Initialize t2,km) by A119;
A130: f4 is_FinSequence_on Comput(Q2+*sWH,Initialize t2,km),m by A120;
A131: len f4=n by A121;
A132: f3,f4 are_fiberwise_equipotent by A122;
A133: f4 is_non_decreasing_on y1,yc by A123;
A134: for j be Nat st y1<yc & (1<=j & j<y1 or yc<j & j
<= n) holds f4.j= t2.intpos(m+j)
proof let j be Nat;
assume y1<yc & (1<=j & j<y1 or yc<j & j <= n);
then f4.j= (Initialize t2).intpos(m+j) by A124;
hence thesis by SCMPDS_5:15;
end;
A135: for j be Nat st y1>=yc & 1<=j & j<= n
holds f4.j= t2. intpos(m+j)
proof let j be Nat;
assume y1>=yc & 1<=j & j<= n;
then f4.j= (Initialize t2).intpos(m+j) by A125;
hence thesis by SCMPDS_5:15;
end;
A136: for j be Nat st 1<=j & j<2*k1+1 holds
Comput(Q2+*sWH,Initialize t2,km).intpos(m+n+j)=t2.intpos(m+n+j)
proof let j be Nat;
assume 1<=j & j<2*k1+1;
then Comput(Q2+*sWH,Initialize t2,km).intpos(m+n+j)
=(Initialize t2).intpos(m+n+j) by A126;
hence thesis by SCMPDS_5:15;
end;
A137: Comput(Q2+*sWH,Initialize t2,km).b=t2.b-2 by A127,A116;
A138: Comput(Q2+*sWH,Initialize t2,km).a = c by A128;
A139: now
let i be Nat;
assume that
A140: yc<i and
A141: i<=len f4;
A142: 1+0 <= i by A140,INT_1:7;
now
per cases;
suppose
y1<yc;
hence f4.i= t2.intpos(m+i) by A131,A134,A140,A141;
end;
suppose
y1>=yc;
hence f4.i= t2.intpos(m+i) by A131,A135,A141,A142;
end;
end;
hence f4.i=f3.i by A92,A93,A131,A141,A142;
end;
then f4.ym=f3.ym by A131,A103,XREAL_1:146;
then
A143: f4.ym=IExec(I,Q,t).intpos(m+ym) by A64,A104,SCMPDS_4:8;
A144: now
let i be Nat;
assume that
A145: yn<i and
A146: i<=len f3;
A147: 1+0<=i by A145,INT_1:7;
now
per cases;
suppose
yd<yn;
hence f3.i= t1.intpos(m+i) by A93,A96,A145,A146;
end;
suppose
yd>=yn;
hence f3.i= t1.intpos(m+i) by A93,A97,A146,A147;
end;
end;
hence f3.i=f2.i by A52,A53,A93,A146,A147;
end;
A148: now
let i be Nat;
assume that
A149: ym < i and
A150: i <= yn;
consider j be Nat such that
A151: ym<j and
A152: j<=yn and
A153: f3.i=f2.j by A42,A48,A56,A93,A94,A105,A144,A149,A150,RFINSEQ:32
,XREAL_1:47;
A154: yc < i by A149,XREAL_1:146,XXREAL_0:2;
A155: 1<=j by A66,A151,XXREAL_0:2;
A156: j<=len f2 by A42,A48,A52,A152,XREAL_1:47,XXREAL_0:2;
i<=len f4 by A42,A48,A131,A150,XREAL_1:47,XXREAL_0:2;
then f4.i=f2.j by A139,A154,A153
.=t1.intpos(m+j) by A53,A155,A156
.=IExec(I,Q,t).intpos(m+j) by A64,SCMPDS_4:8;
hence f4.ym <= f4.i by A62,A143,A151,A152;
end;
A157: yn>y1 by A48,XREAL_1:47;
A158: now
let i be Nat;
assume that
A159: 1<=i and
A160: i<=y0;
i-1 < y1-1 by A160,XREAL_1:146,XXREAL_0:2;
then
A161: i<y1 by XREAL_1:9;
y1 <= n by A42,A157,XXREAL_0:2;
then
A162: i<=n by A161,XXREAL_0:2;
now
per cases;
suppose
y1<yc;
hence f4.i= t2.intpos(m+i) by A134,A159,A161;
end;
suppose
y1>=yc;
hence f4.i= t2.intpos(m+i) by A135,A159,A162;
end;
end;
hence f4.i=f3.i by A92,A93,A159,A162;
end;
A163: y0 <= yc by A55,XREAL_1:9;
A164: now
let i be Nat;
assume that
A165: y1 <= i and
A166: i < ym;
i+1 <= ym by A166,INT_1:7;
then
A167: i<=yc by XREAL_1:19;
y0 < i by A165,XREAL_1:146,XXREAL_0:2;
then consider j be Nat such that
A168: y0<j and
A169: j<=yc and
A170: f4.i=f3.j by A68,A131,A132,A163,A158,A139,A167,RFINSEQ:32;
A171: 1+0 <= j by A168,INT_1:7;
A172: j<= n by A68,A169,XXREAL_0:2;
A173: j<yd by A111,A169,XXREAL_0:2;
now
per cases;
suppose
yd<yn;
hence f3.j= t1.intpos(m+j) by A96,A171,A173;
end;
suppose
yd>=yn;
hence f3.j= t1.intpos(m+j) by A97,A171,A172;
end;
end;
then
A174: f4.i=IExec(I,Q,t).intpos(m+j) by A64,A170,SCMPDS_4:8;
A175: j < ym by A169,XREAL_1:146,XXREAL_0:2;
y1-1+1 <= j by A168,INT_1:7;
hence f4.i <= f4.ym by A61,A143,A175,A174;
end;
take mm=m1+(kl+km);
set tm=Comput(Q+*sWH,t,mm);
take f4;
Initialize t1 =t1 by A39,A40,A63,A49,Th2,A38;
then
A176: tm = Comput(Q+*sWH,Initialize t1,kl+km) by EXTPRO_1:4
.= Comput(Q2+*sWH,Initialize t2,km)
by A91,EXTPRO_1:4;
hence Initialize tm =tm by A129;
thus f4 is_FinSequence_on tm,m by A130,A176;
thus len f4=n by A131;
now
let i be Nat;
assume that
A177: 1<=i and
A178: i <= len f2;
thus f2.i=t1.intpos(m+i) by A53,A177,A178
.=IExec(I,Q,t).intpos(m+i) by A64,SCMPDS_4:8;
end;
then f2 is_FinSequence_on IExec(I,Q,t),m;
then f1,f2 are_fiberwise_equipotent by A12,A39,A40,A41,A42,A43,A44,A46
,A47,A52;
then f1,f3 are_fiberwise_equipotent by A94,CLASSES1:76;
hence f1,f4 are_fiberwise_equipotent by A132,CLASSES1:76;
A179: now
let j be Nat;
assume that
A180: yd<=j and
A181: j<=yn;
A182: 1<=j by A73,A180,XXREAL_0:2;
A183: j <= n by A42,A48,A181,XREAL_1:47,XXREAL_0:2;
A184: yc < j by A111,A180,XXREAL_0:2;
now
per cases;
suppose
y1<yc;
hence f4.j=t2.intpos(m+j) by A134,A183,A184;
end;
suppose
y1>=yc;
hence f4.j=t2.intpos(m+j) by A135,A183,A182;
end;
end;
hence f4.j=f3.j by A92,A93,A183,A182;
end;
now
let i,j be Nat;
assume that
A185: yd <= i and
A186: i <= j and
A187: j <= yn;
yd <= j by A185,A186,XXREAL_0:2;
then
A188: f4.j=f3.j by A179,A187;
i <= yn by A186,A187,XXREAL_0:2;
then f4.i=f3.i by A179,A185;
hence f4.i <= f4.j by A95,A185,A186,A187,A188,FINSEQ_6:def 9;
end;
then f4 is_non_decreasing_on yd,yn by FINSEQ_6:def 9;
hence f4 is_non_decreasing_on y1,yn by A133,A164,A148,Th8;
thus for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n)
holds f4.j= t.intpos(m+j)
proof
let j be Nat;
assume that
A189: y1<yn and
A190: 1<=j & j<y1 or yn<j & j<= n;
A191: 1<=j & j<= n
proof
per cases by A190;
suppose
A192: 1<=j & j<y1;
then j<yn by A189,XXREAL_0:2;
hence thesis by A42,A48,A192,XREAL_1:47,XXREAL_0:2;
end;
suppose
A193: yn<j & j<=n;
then y1 < j by A189,XXREAL_0:2;
hence thesis by A42,A48,A193,XREAL_1:47,XXREAL_0:2;
end;
end;
A194: 1<=j & j<yd or yn<j & j<= n
proof
per cases by A190;
suppose
1<=j & j<y1;
hence thesis by A72,XXREAL_0:2;
end;
suppose
yn<j & j<=n;
hence thesis;
end;
end;
A195: now
per cases;
suppose
yd<yn;
hence f3.j=t1.intpos(m+j) by A96,A194;
end;
suppose
yd>=yn;
hence f3.j=t1.intpos(m+j) by A97,A191;
end;
end;
A196: 1<=j & j<y1 or yc<j & j<= n
proof
per cases by A190;
suppose
1<=j & j<y1;
hence thesis;
end;
suppose
yn<j & j<=n;
hence thesis by A67,XXREAL_0:2;
end;
end;
now
per cases;
suppose
y1<yc;
hence f4.j=t2.intpos(m+j) by A134,A196;
end;
suppose
y1>=yc;
hence f4.j=t2.intpos(m+j) by A135,A191;
end;
end;
hence f4.j=f3.j by A92,A93,A191
.=IExec(I,Q,t).intpos(m+j) by A64,A195,SCMPDS_4:8
.=t.intpos(m+j) by A12,A39,A40,A41,A42,A43,A44,A189,A190;
end;
thus for j be Nat st y1>=yn & 1<=j & j<= n holds f4.j=t.
intpos(m+j) by A48,XREAL_1:47;
hereby
let j be Nat;
assume that
A197: 1<=j and
A198: j<2*k1+1;
2*k1+1 < 2*(k1+1)+1 by A101,XREAL_1:6;
then
A199: j < 2*(k1+1)+1 by A198,XXREAL_0:2;
thus tm.intpos(m+n+j)=t2.intpos(m+n+j) by A136,A176,A197,A198
.=t1.intpos(m+n+j) by A98,A197,A199
.=IExec(I,Q,t).intpos(m+n+j) by A64,SCMPDS_4:8
.=t.intpos(m+n+j) by A12,A39,A40,A41,A42,A43,A44,A197,A198;
end;
thus tm.b=t.b-2 by A40,A65,A99,A137,A176;
thus tm.a=c by A138,A176;
end;
end;
hence P[k+1];
end;
A200: for k being Nat holds P[k] from NAT_1:sch 2(A13,A36);
ex k be Nat,f2 be FinSequence of INT st
Initialize Comput(P+*sWH,s,k)
= Comput(P+*sWH,s,k) &
f2 is_FinSequence_on Comput(P+*sWH,s,k),m &
len f2=n & f,f2 are_fiberwise_equipotent & f2 is_non_decreasing_on 1,n & (for j
be Nat st 1<n & (1<=j & j<1 or n<j & j<= n) holds f2.j= s.intpos(m+j
)) & (for j be Nat st 1>=n & 1<=j & j<= n holds f2.j= s.intpos(m+j))
& (for j be Nat st (1<=j & j<2*0+1) holds
Comput(P+*sWH,s,k).
intpos(m+n+j)=s.intpos(m+n+j)) &
Comput(P+*sWH,s,k).b=s.b-2 &
Comput(P+*sWH,s,k).a=c
proof
per cases;
suppose
n-1<=0;
hence thesis by A2,A3,A5,A7,A9,A10,A13,A11;
end;
suppose
n-1>0;
then reconsider nn=n-1 as Element of NAT by INT_1:3;
P[nn] by A200;
hence thesis by A2,A3,A5,A7,A9,A10,A11;
end;
end;
then consider k be Nat,f2 be FinSequence of INT such that
A201: Initialize Comput(P+*sWH,s,k)
= Comput(P+*sWH,s,k) and
A202: f2 is_FinSequence_on
Comput(P+*sWH,s,k),m and
A203: len f2=n and
A204: f,f2 are_fiberwise_equipotent and
A205: f2 is_non_decreasing_on 1,n and
A206: Comput(P+*sWH,s,k).b=s.b-2 and
A207: Comput(P+*sWH,s,k).a=c;
set sk= Comput(P+*sWH,s,k),
s1 = Initialize sk, P1 = P+*sWH+*sWH,
s2 = Comput(P1,s1,1), P2 = P1;
A208: IC s1 = 0 by MEMSTR_0:def 11;
set i1=(a,i)<=0_goto (card I+2), i2=goto -(card I+1);
A209: card WH=card I+2 by SCMPDS_8:17;
then
A210: (card I+2) in dom sWH by COMPOS_1:64;
A211: dom g = Seg n by A4,FINSEQ_1:def 3;
sWH c= P2 by FUNCT_4:25;
then
A212: P2.(card I+2) = sWH.(card I+2) by A210,GRFUNC_1:2
.=halt SCMPDS by A209,COMPOS_1:64;
A213: WH = i1 ';' (I ';' i2 ) by Lm1;
A214: Comput(P1,s1,0+1) = Following(P1,Comput(P1,s1,0)) by EXTPRO_1:3
.= Exec(i1,s1) by A213,SCMPDS_6:11;
IC s2 = ICplusConst(s1,(card I+2)) by A7,A201,A206,A207,A214,SCMPDS_2:56
.= 0+(card I+2) by A208,SCMPDS_6:12;
then
A215: CurInstr(P2,s2) = halt SCMPDS by A212,PBOOLE:143;
A216: s2= Comput(P+*sWH,s,k+1) by A201,EXTPRO_1:4;
A217: P+*sWH halts_on s
by A215,A216,EXTPRO_1:29;
hence WH is_halting_on s,P by A1,SCMPDS_6:def 3;
A218: Result(P+*sWH,s)=s2
by A215,A216,A217,EXTPRO_1:def 9;
now
let i be Nat;
reconsider a = i as Nat;
set xi=intpos (m+a);
assume
A219: i in dom g;
then
A220: 1 <= i by A211,FINSEQ_1:1;
A221: i <= n by A211,A219,FINSEQ_1:1;
IExec(WH,P,s)=s2 by A218,SCMPDS_4:def 5;
hence g.i = s2.xi by A4,A6,A220,A221
.=s1.xi by A214,SCMPDS_2:56
.=f2.i by A201,A202,A203,A220,A221;
end;
hence thesis by A4,A203,A204,A205,FINSEQ_2:9;
end;
Lm4: for s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a
be Int_position, i,c be Integer,m,n,m1 be Nat st s.a=c &
1=s.DataLoc(c,i) & m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1) &
(for t be 0-started State of SCMPDS,Q
for f1,f2 be FinSequence of INT, k1,k2,y1,yn be Nat st t
.a=c & 2*k1+1=t.DataLoc(c,i) & k2=m+n+2*k1+1 & m+y1=t.intpos k2 & m+yn=t.intpos
(k2+1) & (1 <= y1 & yn <= n or y1 >= yn) holds I is_closed_on t,Q & I
is_halting_on t,Q & IExec(I,Q,t).a=t.a & (for j be Nat
st (1<=j & j<2*k1
+1) holds IExec(I,Q,t).intpos(m+n+j)=t.intpos(m+n+j)) & (y1>=yn
implies IExec(I,Q,t).DataLoc(c,i)=2*k1-1
& (for j be Nat st (1<=j & j <= n) holds IExec
(I,Q,t).intpos (m+j) = t.intpos (m+j))) & (y1<yn
implies IExec(I,Q,t).DataLoc(c,i)=
2*k1+3 & (for j be Nat st 1<=j & j<y1 or yn<j & j <= n holds
IExec(I,Q,t).intpos(m+j) = t.intpos (m+j))
& (ex ym be Nat st y1 <= ym
& ym <= yn & m+y1=IExec(I,Q,t).intpos k2
& m+ym-1=IExec(I,Q,t).intpos (k2+1) & m+ym
+1=IExec(I,Q,t).intpos (k2+2) & m+yn=
IExec(I,Q,t).intpos (k2+3)
& (for j be Nat st y1 <= j & j < ym
holds IExec(I,Q,t).intpos (m+j) <= IExec(I,Q,t).intpos (
m+ym)) & (for j be Nat st ym < j & j <= yn
holds IExec(I,Q,t).intpos (
m+j) >= IExec(I,Q,t).intpos (m+ym)))) & (f1 is_FinSequence_on t,m
& f2
is_FinSequence_on IExec(I,Q,t),m & len f1=n & len f2=n implies f1,f2
are_fiberwise_equipotent)) holds while>0(a,i,I) is_halting_on s,P
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a be
Int_position, i,c be Integer,m,n,m1 be Nat;
set b=DataLoc(c,i);
assume
A1: s.a=c;
consider f be FinSequence of INT such that
A2: len f=n and
A3: for i be Nat st 1<=i & i <= len f holds f.i=s.intpos(m+i)
by SCPISORT:1;
A4: f is_FinSequence_on s,m by A3;
set ss=IExec(while>0(a,i,I),P,s);
assume
A5: 1=s.b;
consider g be FinSequence of INT such that
A6: len g=n and
A7: for i be Nat st 1<=i & i <= len g holds g.i=ss.intpos(m+
i ) by SCPISORT:1;
A8: g is_FinSequence_on ss,m by A7;
assume that
A9: m1=m+n+1 and
A10: m+1=s.intpos m1 and
A11: m+n=s.intpos(m1+1);
assume
for t be 0-started State of SCMPDS,Q
for f1,f2 be FinSequence of INT, k1,k2,y1,yn be
Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 & m+y1=t.intpos k2 & m+yn=
t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn) holds I is_closed_on t,Q & I
is_halting_on t,Q & IExec(I,Q,t).a=t.a & (for j be Nat
st (1<=j & j<2*k1
+1) holds IExec(I,Q,t).intpos(m+n+j)=t.intpos(m+n+j))
& (y1>=yn implies IExec(I,Q,t).b=2*k1-1
& for j be Nat st 1<=j & j <= n
holds IExec(I,Q,t).intpos (
m+j) = t.intpos (m+j) ) & (y1<yn implies IExec(I,Q,t).b=2*k1+3
& (for j be Nat st 1<=j & j<y1 or yn<j & j <= n
holds IExec(I,Q,t).intpos (m+j
) = t.intpos (m+j)) & ex ym be Nat st y1 <= ym & ym <= yn & m+y1=
IExec(I,Q,t).intpos k2 & m+ym-1=
IExec(I,Q,t).intpos (k2+1)
& m+ym+1=IExec(I,Q,t).
intpos (k2+2) & m+yn=IExec(I,Q,t).intpos (k2+3)
& (for j be Nat st y1 <= j & j < ym
holds IExec(I,Q,t).intpos(m+j) <=
IExec(I,Q,t).intpos(m+ym)) & for j be Nat st ym < j & j <= yn
holds IExec(I,Q,t).intpos(m+j) >=
IExec(I,Q,t).intpos(m+ym) )
& (f1 is_FinSequence_on t,m
& f2 is_FinSequence_on IExec(I,Q,t),
m & len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent);
hence thesis by A1,A5,A9,A10,A11,A2,A4,A6,A8,Lm3;
end;
Lm5: for s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a
be Int_position, i,c be Integer,m,n,m1 be Nat st s.a=c &
1=s.DataLoc(c,i) & m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1) &
(for t be 0-started State of SCMPDS,Q
for f1,f2 be FinSequence of INT, k1,k2,y1,yn be Nat st t
.a=c & 2*k1+1=t.DataLoc(c,i) & k2=m+n+2*k1+1 & m+y1=t.intpos k2 &
m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
holds I is_closed_on t,Q & I
is_halting_on t,Q & IExec(I,Q,t).a=t.a & (for j be Nat
st (1<=j & j<2*k1
+1) holds IExec(I,Q,t).intpos(m+n+j)=t.intpos(m+n+j))
& (y1>=yn implies IExec(I,Q,t).DataLoc(c,i)=2*k1-1
& (for j be Nat st (1<=j & j <= n) holds IExec
(I,Q,t).intpos (m+j) = t.intpos (m+j)))
& (y1<yn implies IExec(I,Q,t).DataLoc(c,i)=
2*k1+3 & (for j be Nat st 1<=j & j<y1 or yn<j & j <= n holds
IExec(I,Q,t).intpos(m+j) = t.intpos (m+j))
& (ex ym be Nat st y1 <= ym
& ym <= yn & m+y1=IExec(I,Q,t).intpos k2
& m+ym-1=IExec(I,Q,t).intpos (k2+1) & m+ym
+1=IExec(I,Q,t).intpos (k2+2) &
m+yn=IExec(I,Q,t).intpos (k2+3)
& (for j be Nat st y1 <= j & j < ym
holds IExec(I,Q,t).intpos (m+j) <= IExec(I,Q,t).intpos (
m+ym)) & (for j be Nat st ym < j & j <= yn
holds IExec(I,Q,t).intpos (
m+j) >= IExec(I,Q,t).intpos (m+ym)))) & (f1 is_FinSequence_on t,m
& f2
is_FinSequence_on IExec(I,Q,t),m & len f1=n & len f2=n implies f1,f2
are_fiberwise_equipotent))
holds while>0(a,i,I) is_halting_on s,P & while>0(a,i,I) is_closed_on s,P
proof
let s be 0-started State of SCMPDS,
I be halt-free shiftable Program of SCMPDS, a be
Int_position, i,c be Integer,m,n,m1 be Nat;
set b=DataLoc(c,i);
assume
A1: s.a=c;
assume
A2: 1=s.b;
assume that
A3: m1=m+n+1 and
A4: m+1=s.intpos m1 and
A5: m+n=s.intpos(m1+1);
assume
A6: for t be 0-started State of SCMPDS,Q
for f1,f2 be FinSequence of INT, k1,k2,y1,yn be
Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 & m+y1=t.intpos k2 & m+yn=
t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn) holds I is_closed_on t,Q & I
is_halting_on t,Q & IExec(I,Q,t).a=t.a & (for j be Nat
st (1<=j & j<2*k1
+1) holds IExec(I,Q,t).intpos(m+n+j)=t.intpos(m+n+j))
& (y1>=yn implies IExec(I,Q,t).b=2*k1-1
& for j be Nat st 1<=j & j <= n
holds IExec(I,Q,t).intpos (
m+j) = t.intpos (m+j) ) & (y1<yn implies IExec(I,Q,t).b=2*k1+3
& (for j be
Nat st 1<=j & j<y1 or yn<j & j <= n
holds IExec(I,Q,t).intpos (m+j
) = t.intpos (m+j)) & ex ym be Nat st y1 <= ym & ym <= yn & m+y1=
IExec(I,Q,t).intpos k2 & m+ym-1=
IExec(I,Q,t).intpos (k2+1)
& m+ym+1=IExec(I,Q,t).
intpos (k2+2) & m+yn=IExec(I,Q,t).intpos (k2+3)
& (for j be Nat st y1
<= j & j < ym holds IExec(I,Q,t).intpos(m+j) <=
IExec(I,Q,t).intpos(m+ym))
& for j
be Nat st ym < j & j <= yn
holds IExec(I,Q,t).intpos(m+j) >=
IExec(I,Q,t).intpos(m+ym) )
& (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,Q,t),
m & len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent);
A7: now
let v be 0-started State of SCMPDS;
let V;
assume
A8: DataPart v = DataPart s;
then
A9: 1 =v.b by A2,SCMPDS_4:8;
A10: m+n =v.intpos (m1+1) by A5,A8,SCMPDS_4:8;
A11: m+1 =v.intpos m1 by A4,A8,SCMPDS_4:8;
v.a =c by A1,A8,SCMPDS_4:8;
hence while>0(a,i,I) is_halting_on v,V by A3,A6,A9,A11,A10,Lm4;
end;
hence while>0(a,i,I) is_halting_on s,P;
thus thesis by A7,Th3;
end;
begin :: Program Partition is to split a sequence into a "smaller" and
:: a "larger" subsequence
:: a5=a7=length a2=mid(x[1]), a3=x[2], a4=x[n], a6=save
definition
func Partition -> Program of SCMPDS equals
((GBP,5):=(GBP,4) ';' SubFrom(GBP
,5,GBP,2) ';' (GBP,3):=(GBP,2) ';' AddTo(GBP,3,1)) ';' while>0(GBP,5, while>0(
GBP,5, (GBP,7):=(GBP,5) ';' AddTo(GBP,5,-1) ';' (GBP,6):=(intpos 4,0) ';'
SubFrom(GBP,6,intpos 2,0) ';' if>0(GBP,6, AddTo(GBP,4,-1) ';' AddTo(GBP,7,-1),
Load (GBP,5):=0 ) ) ';' while>0(GBP,7, (GBP,5):=(GBP,7) ';' AddTo(GBP,7,-1) ';'
(GBP,6):=(intpos 2,0) ';' SubFrom(GBP,6,intpos 3,0) ';' if>0(GBP,6, AddTo(GBP,3
,1) ';' AddTo(GBP,5,-1), Load (GBP,7):=0 ) ) ';' if>0(GBP,5,((GBP,6):=(intpos 4
,0) ';' (intpos 4,0):=(intpos 3,0) ';' (intpos 3,0):=(GBP,6) ';' AddTo(GBP,5,-2
) ';' AddTo(GBP,3,1)) ';' AddTo(GBP,4,-1) ) ) ';' (GBP,6):=(intpos 4,0) ';' (
intpos 4,0):=(intpos 2,0) ';' (intpos 2,0):=(GBP,6);
coherence;
end;
begin :: The Construction of Quick Sort
:: a0=global, a1=stack, a2=stack depth
definition
let n,p0 be Nat;
func QuickSort(n,p0) -> Program of SCMPDS equals
((GBP:=0) ';' (SBP:=1) ';'
(SBP,p0+n):=(p0+1) ';' (SBP,p0+n+1):=(p0+n)) ';' while>0(GBP,1, (GBP,2):=(SBP,
p0+n+1) ';' SubFrom(GBP,2,SBP,p0+n) ';' if>0(GBP,2, (GBP,2):=(SBP,p0+n) ';' (
GBP,4):=(SBP,p0+n+1) ';' Partition ';' (((SBP,p0+n+3):=(SBP,p0+n+1) ';' (SBP,p0
+n+1):=(GBP,4) ';' (SBP,p0+n+2):=(GBP,4) ';' AddTo(SBP,p0+n+1,-1)) ';' AddTo(
SBP,p0+n+2,1) ';' AddTo(GBP,1,2)), Load AddTo(GBP,1,-2) ) );
coherence;
end;
set i1= (GBP,7):=(GBP,5), i2= AddTo(GBP,5,-1), i3= (GBP,6):=(intpos 4,0), i4=
SubFrom(GBP,6,intpos 2,0), i5= AddTo(GBP,4,-1), i6= AddTo(GBP,7,-1), i7= Load (
GBP,5):=0, IF1= if>0(GBP,6,i5 ';' i6,i7), WB1= i1 ';' i2 ';' i3 ';' i4 ';' IF1,
WH1= while>0(GBP,5,WB1), j1= (GBP,5):=(GBP,7), j2= AddTo(GBP,7,-1), j3= (GBP,6)
:=(intpos 2,0), j4= SubFrom(GBP,6,intpos 3,0), j5= AddTo(GBP,3,1), j6= AddTo(
GBP,5,-1), j7= Load (GBP,7):=0, IF2= if>0(GBP,6,j5 ';' j6, j7), WB2= j1 ';' j2
';' j3 ';' j4 ';' IF2,
WH2= while>0(GBP,7,WB2),
k1 = (GBP,5):=(GBP,4), k2 =
SubFrom(GBP,5,GBP,2), k3 = (GBP,3):=(GBP,2), k4 = AddTo(GBP,3,1), K4 = k1 ';'
k2 ';' k3 ';' k4, k5 = (GBP,6):=(intpos 4,0), k6 = (intpos 4,0):=(intpos 3,0),
k7 = (intpos 3,0):=(GBP,6), k8 = AddTo(GBP,5,-2), k9 = AddTo(GBP,3,1), k0 =
AddTo(GBP,4,-1), IF3= if>0(GBP,5, k5 ';' k6 ';' k7 ';' k8 ';' k9 ';' k0), WB3=
WH1 ';' WH2 ';' IF3, WH3= while>0(GBP,5,WB3), j8 = (GBP,6):=(intpos 4,0), j9 =
(intpos 4,0):=(intpos 2,0), j0 = (intpos 2,0):=(GBP,6);
set a1=intpos 1, a2=intpos 2, a3=intpos 3, a4=intpos 4, a5=intpos 5, a6=intpos
6, a7=intpos 7;
Lm6: card WB1=9
proof
thus card WB1= card (i1 ';' i2 ';' i3 ';' i4) + card IF1 by AFINSQ_1:17
.= 4+card IF1 by Th4
.= 4+(card (i5 ';' i6)+card i7+2) by SCMPDS_6:65
.= 4+(2+card i7+2) by SCMP_GCD:5
.= 4+(2+1+2) by COMPOS_1:54
.= 9;
end;
Lm7:
for s being 0-started State of SCMPDS,
md,me be Nat st s.a2=md & s.a4=me
& md >= 8 & me >= 8 & s.GBP=0
holds IExec(WB1,P,s).GBP=0 &
IExec(WB1,P,s).a1=s.a1 &
IExec(WB1,P,s).a2=s.a2 &
IExec(WB1,P,s).a3=s.a3 &
(for i be Nat st i >= 8
holds IExec(WB1,P,s).intpos i=s.intpos i) &
(s.intpos md < s.intpos me implies
IExec(WB1,P,s).a5=s.a5-1 &
IExec(WB1,P,s).a4=s.a4-1 &
IExec(WB1,P,s).a7=s.a5-1) &
(s.intpos md >= s.intpos me implies
IExec(WB1,P,s).a5=0 &
IExec(WB1,P,s).a4=s.a4 &
IExec(WB1,P,s).a7=s.a5)
proof
set a=GBP;
let s be 0-started State of SCMPDS,md,me be Nat;
assume that
A1: s.a2=md and
A2: s.a4=me and
A3: md >= 8 and
A4: me >= 8 and
A5: s.a=0;
set t0=s, Q0 = P,
t1=IExec(i1 ';' i2 ';' i3 ';' i4,P,s),
Q1 = P,
t2=IExec(i1 ';' i2 ';' i3,P,s),
t3=IExec(i1 ';' i2,P,s),
Q2 = P,
t4=Exec(i1, t0), Q4 = Q0;
A6: t0.a=0 by A5;
A7: DataLoc(t0.a,7)=intpos (0+7) by A5,SCMP_GCD:1;
then
A8: t4.a =0 by A6,AMI_3:10,SCMPDS_2:47;
then
A9: DataLoc(t4.a,5)=intpos (0+5) by SCMP_GCD:1;
A10: t4.a4 =me by A7,A2,AMI_3:10,SCMPDS_2:47;
A11: t3.a4 =Exec(i2, t4).a4 by SCMPDS_5:42
.=me by A10,A9,AMI_3:10,SCMPDS_2:48;
then
A12: DataLoc(t3.a4,0)=intpos (me+0) by SCMP_GCD:1;
A13: t3.a =Exec(i2, t4).a by SCMPDS_5:42
.=0 by A8,A9,AMI_3:10,SCMPDS_2:48;
then
A14: DataLoc(t3.a,6)=intpos (0+6) by SCMP_GCD:1;
A15: t4.a2 =md by A7,A1,AMI_3:10,SCMPDS_2:47;
A16: t3.a2 =Exec(i2, t4).a2 by SCMPDS_5:42
.=md by A15,A9,AMI_3:10,SCMPDS_2:48;
A17: t4.a5 =s.a5 by A7,AMI_3:10,SCMPDS_2:47;
set t01=Initialize Initialize t1, ii7= (GBP,5):=0, t5=Exec(i5,t01);
A18: t2.a2 =Exec(i3, t3).a2 by SCMPDS_5:41
.=md by A16,A14,AMI_3:10,SCMPDS_2:47;
A19: t2.a =Exec(i3, t3).a by SCMPDS_5:41
.=0 by A13,A14,AMI_3:10,SCMPDS_2:47;
then
A20: DataLoc(t2.a,6)=intpos (0+6) by SCMP_GCD:1;
DataLoc(t0.a,5)=intpos (0+5) by A6,SCMP_GCD:1;
then
A21: t4.a7 =s.a5 by A7,SCMPDS_2:47;
A22: t3.a7 =Exec(i2, t4).a7 by SCMPDS_5:42
.=s.a5 by A21,A9,AMI_3:10,SCMPDS_2:48;
A23: t2.a7 =Exec(i3, t3).a7 by SCMPDS_5:41
.=s.a5 by A22,A14,AMI_3:10,SCMPDS_2:47;
t1.a7 =Exec(i4, t2).a7 by SCMPDS_5:41
.=s.a5 by A23,A20,AMI_3:10,SCMPDS_2:50;
then
A24: t01.a7=s.a5 by SCMPDS_5:15;
t1.a2 =Exec(i4, t2).a2 by SCMPDS_5:41
.=md by A18,A20,AMI_3:10,SCMPDS_2:50;
then
A25: t01.a2=s.a2 by A1,SCMPDS_5:15;
A26: now
let i be Nat;
assume i>=8;
then i > 7 by XXREAL_0:2;
hence t4.intpos i = s.intpos i by A7,AMI_3:10,SCMPDS_2:47;
end;
A27: now
let i be Nat;
assume
A28: i>=8;
then
A29: i > 5 by XXREAL_0:2;
thus t3.intpos i =Exec(i2, t4).intpos i by SCMPDS_5:42
.=t4.intpos i by A9,A29,AMI_3:10,SCMPDS_2:48
.=s.intpos i by A26,A28;
end;
A30: now
let i be Nat;
assume
A31: i>=8;
then
A32: i > 6 by XXREAL_0:2;
thus t2.intpos i=Exec(i3, t3).intpos i by SCMPDS_5:41
.=t3.intpos i by A14,A32,AMI_3:10,SCMPDS_2:47
.=s.intpos i by A27,A31;
end;
A33: now
let i be Nat;
assume
A34: i>=8;
then
A35: i > 6 by XXREAL_0:2;
thus t1.intpos i=Exec(i4, t2).intpos i by SCMPDS_5:41
.=t2.intpos i by A20,A35,AMI_3:10,SCMPDS_2:50
.=s.intpos i by A30,A34;
end;
A36: t4.a3 =s.a3 by A7,AMI_3:10,SCMPDS_2:47;
A37: t3.a3 =Exec(i2, t4).a3 by SCMPDS_5:42
.=s.a3 by A36,A9,AMI_3:10,SCMPDS_2:48;
A38: t4.a1 =s.a1 by A7,AMI_3:10,SCMPDS_2:47;
A39: t3.a1 =Exec(i2, t4).a1 by SCMPDS_5:42
.=s.a1 by A38,A9,AMI_3:10,SCMPDS_2:48;
A40: t2.a1 =Exec(i3, t3).a1 by SCMPDS_5:41
.=s.a1 by A39,A14,AMI_3:10,SCMPDS_2:47;
t1.a1 =Exec(i4, t2).a1 by SCMPDS_5:41
.=s.a1 by A40,A20,AMI_3:10,SCMPDS_2:50;
then
A41: t01.a1=s.a1 by SCMPDS_5:15;
A42: t2.a3 =Exec(i3, t3).a3 by SCMPDS_5:41
.=s.a3 by A37,A14,AMI_3:10,SCMPDS_2:47;
t1.a3 =Exec(i4, t2).a3 by SCMPDS_5:41
.=s.a3 by A42,A20,AMI_3:10,SCMPDS_2:50;
then
A43: t01.a3=s.a3 by SCMPDS_5:15;
A44: t1.a =Exec(i4, t2).a by SCMPDS_5:41
.=0 by A19,A20,AMI_3:10,SCMPDS_2:50;
then
A45: t01.a=0 by SCMPDS_5:15;
then
A46: DataLoc(t01.a,5)=intpos(0+5) by SCMP_GCD:1;
a3<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
then
A47: t5.a3=s.a3 by A43,SCMPDS_2:48;
a2<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
then
A48: t5.a2=s.a2 by A25,SCMPDS_2:48;
a<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
then
A49: t5.a=0 by A45,SCMPDS_2:48;
then
A50: DataLoc(t5.a,7)=intpos(0+7) by SCMP_GCD:1;
A51: t2.a6 =Exec(i3, t3).a6 by SCMPDS_5:41
.=t3.intpos me by A14,A12,SCMPDS_2:47
.=s.intpos me by A4,A27;
t1.a6 =Exec(i4, t2).a6 by SCMPDS_5:41
.=t2.a6-t2.DataLoc(t2.a2,0) by A20,SCMPDS_2:50
.=t2.a6-t2.intpos(md+0) by A18,SCMP_GCD:1
.=s.intpos me - s.intpos md by A3,A51,A30;
then
A52: t1.DataLoc(t1.a,6)=s.intpos me - s.intpos md by A44,SCMP_GCD:1;
a1<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
then
A53: t5.a1=s.a1 by A41,SCMPDS_2:48;
A54: now
per cases;
suppose
A55: t01.DataLoc(t01.a,6) <= 0;
hence IExec(IF1,Q1,Initialize t1).a
=IExec(i7,Q1,Initialize t1).a by SCMPDS_6:74
.=Exec(ii7,t01).a by SCMPDS_5:40
.=0 by A45,A46,AMI_3:10,SCMPDS_2:46;
thus IExec(IF1,Q1,Initialize t1).a1
=IExec(i7,Q1,Initialize t1).a1 by A55,SCMPDS_6:74
.=Exec(ii7,t01).a1 by SCMPDS_5:40
.=s.a1 by A41,A46,AMI_3:10,SCMPDS_2:46;
thus IExec(IF1,Q1,Initialize t1).a2
=IExec(i7,Q1,Initialize t1).a2 by A55,SCMPDS_6:74
.=Exec(ii7,t01).a2 by SCMPDS_5:40
.=s.a2 by A25,A46,AMI_3:10,SCMPDS_2:46;
thus IExec(IF1,Q1,Initialize t1).a3
=IExec(i7,Q1,Initialize t1).a3 by A55,SCMPDS_6:74
.=Exec(ii7,t01).a3 by SCMPDS_5:40
.=s.a3 by A43,A46,AMI_3:10,SCMPDS_2:46;
let i be Nat;
assume
A56: i>=8;
then
A57: i > 5 by XXREAL_0:2;
thus IExec(WB1,P,s).intpos i=
IExec(IF1,Q1,Initialize t1).intpos i by SCMPDS_5:35
.=IExec(i7,Q1,Initialize t1).intpos i by A55,SCMPDS_6:74
.=Exec(ii7,t01).intpos i by SCMPDS_5:40
.=t01.intpos i by A46,A57,AMI_3:10,SCMPDS_2:46
.=t1.intpos i by SCMPDS_5:15
.=s.intpos i by A33,A56;
end;
suppose
A58: t01.DataLoc(t01.a,6) > 0;
thus IExec(IF1,Q1,Initialize t1).a
=IExec(i5 ';' i6,Q1,Initialize t1).a
by A58,SCMPDS_6:73
.=Exec(i6,t5).a by SCMPDS_5:42
.=0 by A49,A50,AMI_3:10,SCMPDS_2:48;
thus IExec(IF1,Q1,Initialize t1).a1
=IExec(i5 ';' i6,Q1,Initialize t1).a1
by A58,SCMPDS_6:73
.=Exec(i6,t5).a1 by SCMPDS_5:42
.=s.a1 by A53,A50,AMI_3:10,SCMPDS_2:48;
thus IExec(IF1,Q1,Initialize t1).a2
=IExec(i5 ';' i6,Q1,Initialize t1).a2
by A58,SCMPDS_6:73
.=Exec(i6,t5).a2 by SCMPDS_5:42
.=s.a2 by A48,A50,AMI_3:10,SCMPDS_2:48;
thus IExec(IF1,Q1,Initialize t1).a3
=IExec(i5 ';' i6,Q1,Initialize t1).a3
by A58,SCMPDS_6:73
.=Exec(i6,t5).a3 by SCMPDS_5:42
.=s.a3 by A47,A50,AMI_3:10,SCMPDS_2:48;
let i be Nat;
assume
A59: i>=8;
then
A60: i > 7 by XXREAL_0:2;
i > 4 by A59,XXREAL_0:2;
then
A61: intpos i<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
thus IExec(WB1,P,s).intpos i=
IExec(IF1,Q1,Initialize t1).intpos i by SCMPDS_5:35
.=IExec(i5 ';' i6,Q1,Initialize t1).intpos i by A58,SCMPDS_6:73
.=Exec(i6,t5).intpos i by SCMPDS_5:42
.=t5.intpos i by A50,A60,AMI_3:10,SCMPDS_2:48
.=t01.intpos i by A61,SCMPDS_2:48
.=t1.intpos i by SCMPDS_5:15
.=s.intpos i by A33,A59;
end;
end;
hence IExec(WB1,P,s).a=0 & IExec(WB1,P,s).a1=s.a1
& IExec(WB1,P,s).a2=s.a2 & IExec(WB1,P,s).a3=s.a3
by SCMPDS_5:35;
thus for i be Nat st i >= 8
holds IExec(WB1,P,s).intpos i=s.intpos i by A54;
A62: t3.a5 =Exec(i2, t4).a5 by SCMPDS_5:42
.=t4.a5+ -1 by A9,SCMPDS_2:48
.=s.a5-1 by A17;
A63: t2.a5 =Exec(i3, t3).a5 by SCMPDS_5:41
.=s.a5-1 by A62,A14,AMI_3:10,SCMPDS_2:47;
t1.a5 =Exec(i4, t2).a5 by SCMPDS_5:41
.=s.a5-1 by A63,A20,AMI_3:10,SCMPDS_2:50;
then
A64: t01.a5=s.a5-1 by SCMPDS_5:15;
A65: t2.a4 =Exec(i3, t3).a4 by SCMPDS_5:41
.=me by A11,A14,AMI_3:10,SCMPDS_2:47;
t1.a4 =Exec(i4, t2).a4 by SCMPDS_5:41
.=me by A65,A20,AMI_3:10,SCMPDS_2:50;
then
A66: t01.a4=s.a4 by A2,SCMPDS_5:15;
A67: DataLoc(t01.a,4)=intpos(0+4) by A45,SCMP_GCD:1;
A68: t01.DataLoc(t01.GBP,6) = t01.DataLoc(t1.GBP,6) by SCMPDS_5:15
.= t1.DataLoc(t1.GBP,6) by SCMPDS_5:15;
hereby
A69: a5<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
assume s.intpos md < s.intpos me; then
A70: 0<s.intpos me - s.intpos md by XREAL_1:50;
A71: t01.DataLoc(t01.GBP,6) = t01.DataLoc(t1.GBP,6) by SCMPDS_5:15
.= t1.DataLoc(t1.GBP,6) by SCMPDS_5:15;
thus IExec(WB1,P,s).a5=IExec(IF1,Q1,t01).a5 by SCMPDS_5:35
.=IExec(i5 ';' i6,Q1,t01).a5 by A52,A70,A71,SCMPDS_6:73
.=Exec(i6,t5).a5 by SCMPDS_5:42
.=t5.a5 by A50,AMI_3:10,SCMPDS_2:48
.=s.a5-1 by A64,A69,SCMPDS_2:48;
thus IExec(WB1,P,s).a4=IExec(IF1,Q1,Initialize t01).a4
by SCMPDS_5:35
.=IExec(i5 ';' i6,Q1,Initialize t01).a4 by A52,A71,A70,SCMPDS_6:73
.=Exec(i6,t5).a4 by SCMPDS_5:42
.=t5.a4 by A50,AMI_3:10,SCMPDS_2:48
.=t01.a4+-1 by A67,SCMPDS_2:48
.=s.a4-1 by A66;
A72: a7<>DataLoc(t01.a,4) by A45,AMI_3:10,SCMP_GCD:1;
thus IExec(WB1,P,s).a7=IExec(IF1,Q1,Initialize t1).a7
by SCMPDS_5:35
.=IExec(i5 ';' i6,Q1,Initialize t1).a7 by A52,A71,A70,SCMPDS_6:73
.=Exec(i6,t5).a7 by SCMPDS_5:42
.=t5.a7+ -1 by A50,SCMPDS_2:48
.=t5.a7-1
.=s.a5-1 by A24,A72,SCMPDS_2:48;
end;
assume s.intpos md >= s.intpos me;
then
A73: s.intpos me - s.intpos md <= 0 by XREAL_1:47;
thus IExec(WB1,P,s).a5=IExec(IF1,Q1,Initialize t1).a5
by SCMPDS_5:35
.=IExec(i7,Q1,Initialize t1).a5 by A52,A68,A73,SCMPDS_6:74
.=Exec(ii7,t01).a5 by SCMPDS_5:40
.=0 by A46,SCMPDS_2:46;
thus IExec(WB1,P,s).a4
=IExec(IF1,Q1,Initialize t1).a4
by SCMPDS_5:35
.=IExec(i7,Q1,Initialize t1).a4 by A52,A68,A73,SCMPDS_6:74
.=Exec(ii7,t01).a4 by SCMPDS_5:40
.=s.a4 by A46,A66,AMI_3:10,SCMPDS_2:46;
thus IExec(WB1,P,s).a7=IExec(IF1,Q1,Initialize t1).a7
by SCMPDS_5:35
.=IExec(i7,Q1,Initialize t1).a7 by A52,A68,A73,SCMPDS_6:74
.=Exec(ii7,t01).a7 by SCMPDS_5:40
.=s.a5 by A24,A46,AMI_3:10,SCMPDS_2:46;
end;
Lm8: for s being 0-started State of SCMPDS,
m4,md be Nat st s.GBP=0 & s.a5 > 0
& s.a4=m4+s.a5 & m4>=8 & s.a2=md & md >= 8
holds IExec(WH1,P,s).GBP=0 & IExec(WH1,P,s).a1=s.a1
& IExec(WH1,P,s).a5=0 & IExec(WH1,P,s).a2=s.a2 &
IExec(WH1,P,s).a3=s.a3 &
(for i be Nat st i >= 8
holds IExec(WH1,P,s).intpos i=s.intpos i)
& ex mE be Nat st mE=IExec(WH1,P,s).a7
& IExec(WH1,P,s).a4=m4+mE & mE <= s.a5
& (for i be Nat st m4+mE < i & i <=s.a4
holds IExec(WH1,P,s).intpos md
< IExec(WH1,P,s).intpos i) &
(mE = 0 or IExec(WH1,P,s).intpos md >= IExec(WH1,P,s).intpos(m4+mE))
proof
set a=GBP;
let s be 0-started State of SCMPDS,m4,md be Nat;
assume that
A1: s.GBP=0 and
A2: s.a5 > 0 and
A3: s.a4=m4+s.a5 and
A4: m4>=8 and
A5: s.a2=md and
A6: md >= 8;
s.a5 >=1+0 by A2,INT_1:7;
then reconsider m5=s.a5-1 as Element of NAT by INT_1:3,XREAL_1:48;
A7: s.a5=m5+1;
defpred P[Nat] means
for t being 0-started State of SCMPDS,Q st t.a=0 & t.a5 =$1+1 &
t.a4=m4+t.a5 & t.a2=md holds IExec(WH1,Q,t).a=0
& IExec(WH1,Q,t).a1=t.a1 &
IExec(WH1,Q,t).a5=0 & IExec(WH1,Q,t).a2=t.a2 &
IExec(WH1,Q,t).a3=t.a3
& (for i be Nat st i >= 8
holds IExec(WH1,Q,t).intpos i=t.intpos i) &
ex mE be Nat st mE=IExec(WH1,Q,t).a7
& IExec(WH1,Q,t).a4=m4+mE & mE <= t.a5 &
(for i be Nat st m4+mE < i & i <=t.a4
holds IExec(WH1,Q,t).intpos md < IExec(WH1,Q,t).intpos i) &
(mE=0 or IExec(WH1,Q,t).intpos md >= IExec(WH1,Q,t).intpos(m4+mE));
A8: now
let k be Nat;
assume
A9: P[k];
thus P[k+1]
proof
set me=m4+(k+1+1);
let t be 0-started State of SCMPDS;
let Q;
set b=DataLoc(t.a,5);
assume that
A10: t.a=0 and
A11: t.a5 =(k+1)+1 and
A12: t.a4=m4+t.a5 and
A13: t.a2=md;
set It= IExec(WB1,Q,t), IT = Q, It0 = Initialize It;
A14: me>=m4 by NAT_1:11;
then
A15: me>=8 by A4,XXREAL_0:2;
then
A16: It.a1=t.a1 by A6,A10,A11,A12,A13,Lm7;
A17: t.intpos md >= t.intpos me implies
It.a5=0 & It.a4=t.a4 & It.a7=t.a5
by A6,A10,A11,A12,A13,A15,Lm7;
A18: b=intpos (0+5) by A10,SCMP_GCD:1;
A19: now let v be 0-started State of SCMPDS;
let V;
assume that
A20: v.a4 >= m4+v.b and
A21: v.a2=t.a2 and
A22: v.a=t.a and
A23: v.b > 0;
A24: m4+v.b>m4+0 by A23,XREAL_1:6;
then reconsider ME=v.a4 as Element of NAT by A20,INT_1:3;
v.a4 >=m4 by A20,A24,XXREAL_0:2;
then
A25: ME >= 8 by A4,XXREAL_0:2;
then
A26: v.intpos md < v.intpos ME implies IExec(WB1,V,v).a5=v.a5-1 &
IExec(WB1,V,v).a4=v.a4-1 &
IExec(WB1,V,v).a7=v.a5-1
by A6,A10,A13,A21,A22,Lm7;
thus IExec(WB1,V,v).a=v.a
by A6,A10,A13,A21,A22,A25,Lm7;
thus WB1 is_closed_on v,V & WB1 is_halting_on v,V by SCMPDS_6:20,21;
A27: v.intpos md >= v.intpos ME implies IExec(WB1,V,v).a5=0 &
IExec(WB1,V,v).a4 =v.a4 & IExec(WB1,V,v).a7=v.a5
by A6,A10,A13,A21,A22,A25,Lm7;
hereby
per cases;
suppose
A28: v.intpos md < v.intpos ME;
hence IExec(WB1,V,v).b < v.b by A18,A26,XREAL_1:146;
m4+v.b-1=m4+IExec(WB1,V,v).b by A18,A26,A28;
hence IExec(WB1,V,v).a4 >=
m4+IExec(WB1,V,v).b by A20,A26,A28,XREAL_1:9;
end;
suppose
A29: v.intpos md >= v.intpos ME;
hence IExec(WB1,V,v).b < v.b
by A6,A10,A13,A18,A21,A22,A23,A25,Lm7;
m4+IExec(WB1,V,v).b < m4+v.b
by A18,A23,A27,A29,XREAL_1:6;
hence IExec(WB1,V,v).a4 >=
m4+IExec(WB1,V,v).b by A20,A27,A29,XXREAL_0:2;
end;
end;
thus IExec(WB1,V,v).a2=v.a2 by A6,A10,A13,A21,A22,A25,Lm7;
end;
A30: It.a3=t.a3 by A6,A10,A11,A12,A13,A15,Lm7;
A31: t.intpos md < t.intpos me implies It.a5=t.a5-1 & It.a4=t.a4-1 & It.
a7= t.a5-1 by A6,A10,A11,A12,A13,A15,Lm7;
A32: It.a=0 by A6,A10,A11,A12,A13,A15,Lm7;
then
A33: It0.a=0 by SCMPDS_5:15;
A34: DataLoc(It.a,5)=intpos(0+5) by A32,SCMP_GCD:1;
A35: It.a2=t.a2 by A6,A10,A11,A12,A13,A15,Lm7;
then
A36: It0.a2=t.a2 by SCMPDS_5:15;
per cases;
suppose
A37: t.intpos md < t.intpos me;
then
A38: It.a4=m4+It.a5 by A12,A31;
A39: It0.a4=m4+It.a5 by A12,A31,A37,SCMPDS_5:15
.= m4+It0.a5 by SCMPDS_5:15;
A40: It0.a5 = It.a5 by SCMPDS_5:15;
A41: It0.a1 = It.a1 by SCMPDS_5:15;
A42: It0.a3 = It.a3 by SCMPDS_5:15;
A43: It0.a4 = It.a4 by SCMPDS_5:15;
It.a5 =k+1 by A11,A31,A37;
then consider mE be Nat such that
A44: mE=IExec(WH1,IT,Initialize It).a7 and
A45: IExec(WH1,IT,Initialize It).a4=m4+mE and
A46: mE <= It.a5 and
A47: for i be Nat st m4+mE < i & i <=It.a4
holds IExec(WH1,IT,Initialize It).intpos md <
IExec(WH1,IT,Initialize It).intpos i and
A48: mE=0 or IExec(WH1,IT,Initialize It).intpos md >=
IExec(WH1,IT,Initialize It).intpos (m4+mE)
by A9,A12,A13,A31,A17,A33,A36,A39,A40;
A49: IExec(WH1,Q,t)=IExec(WH1,IT,Initialize It)
by A11,A12,A18,A19,Th5;
hence IExec(WH1,Q,t).a=0
by A9,A11,A12,A13,A31,A17,A38,A40,A36,A33,A43;
thus IExec(WH1,Q,t).a1=t.a1
by A9,A11,A12,A13,A16,A31,A17,A38,A49,A40,A36,A33,A41,A43;
thus IExec(WH1,Q,t).a5=0
by A9,A11,A12,A13,A31,A17,A38,A49,A40,A36,A33,A43;
thus IExec(WH1,Q,t).a2=t.a2
by A9,A11,A12,A13,A31,A17,A38,A49,A40,A36,A33,A43;
thus IExec(WH1,Q,t).a3=t.a3
by A9,A11,A12,A13,A30,A31,A17,A38,A49,A40,A36,A33,A42,A43;
A50: now
let i be Nat;
assume
A51: i >= 8;
hence IExec(WH1,Q,t).intpos i=It0.intpos i
by A9,A11,A12,A13,A31,A17,A38,A49,A40,A36,A33,A43
.= It.intpos i by SCMPDS_5:15
.=t.intpos i by A6,A10,A11,A12,A13,A15,A51,Lm7;
end;
hence for i be Nat st i >= 8
holds IExec(WH1,Q,t).intpos i=t.intpos i;
take mE;
thus mE=IExec(WH1,Q,t).a7 by A11,A12,A18,A19,A44,Th5;
thus IExec(WH1,Q,t).a4=m4+mE by A11,A12,A18,A19,A45,Th5;
thus mE <= t.a5 by A31,A37,A46,XREAL_1:146,XXREAL_0:2;
A52: It.a4=t.a4-1 by A6,A10,A11,A12,A13,A15,A37,Lm7;
hereby
let i be Nat;
assume that
A53: m4+mE < i and
A54: i <=t.a4;
per cases;
suppose
A55: i=t.a4;
IExec(WH1,Q,t).intpos me =t.intpos me
by A4,A14,A50,XXREAL_0:2;
hence IExec(WH1,Q,t).intpos md < IExec(WH1,Q,t).intpos i
by A6,A11,A12,A37,A50,A55;
end;
suppose
i<>t.a4;
then i < t.a4 by A54,XXREAL_0:1;
then i+1 <= t.a4 by INT_1:7;
then i <= It.a4 by A52,XREAL_1:19;
hence IExec(WH1,Q,t).intpos md < IExec(WH1,Q,t).intpos i
by A49,A47,A53;
end;
end;
thus mE=0 or IExec(WH1,Q,t).intpos md >=
IExec(WH1,Q,t).intpos (m4+mE) by A49,A48;
end;
suppose
A56: t.intpos md >= t.intpos me;
A57: now
A58: (Initialize It).GBP = It.GBP by SCMPDS_5:15;
A59: (Initialize It).DataLoc(It.GBP,5) = It.DataLoc(It.GBP,5) by SCMPDS_5:15;
let x;
thus IExec(WH1,Q,t).x =IExec(WH1,IT,Initialize It).x
by A11,A12,A18,A19,Th5
.=(Initialize It).x by A17,A34,A56,A58,A59,SCMPDS_8:23
.=It.x by SCMPDS_5:15;
end;
hence IExec(WH1,Q,t).a=0 by A32;
thus IExec(WH1,Q,t).a1=t.a1 by A16,A57;
thus IExec(WH1,Q,t).a5=0 by A17,A56,A57;
thus IExec(WH1,Q,t).a2=t.a2 by A35,A57;
thus IExec(WH1,Q,t).a3=t.a3 by A30,A57;
A60: now
let i be Nat;
assume
A61: i >= 8;
thus IExec(WH1,Q,t).intpos i=It.intpos i by A57
.=t.intpos i by A6,A10,A11,A12,A13,A15,A61,Lm7;
end;
hence for i be Nat st i >= 8
holds IExec(WH1,Q,t).intpos i=t.intpos i;
take ME=k+1+1;
thus IExec(WH1,Q,t).a7=ME by A11,A17,A56,A57;
thus IExec(WH1,Q,t).a4=m4+ME by A11,A12,A17,A56,A57;
thus ME <= t.a5 by A11;
thus for i be Nat st m4+ME < i & i <=t.a4
& not IExec(WH1,Q,t).intpos md < IExec(WH1,Q,t).intpos i
holds contradiction by A11,A12;
IExec(WH1,Q,t).intpos me=t.intpos me
by A4,A14,A60,XXREAL_0:2;
hence ME=0 or IExec(WH1,Q,t).intpos md
>= IExec(WH1,Q,t).intpos (m4+ME) by A6,A56,A60;
end;
end;
end;
A62: P[0]
proof
set me=m4+1;
let t be 0-started State of SCMPDS;
let Q;
set It=IExec(WB1,Q,t), IT = Q;
set b=DataLoc(t.a,5);
assume that
A63: t.a=0 and
A64: t.a5 =0+1 and
A65: t.a4=m4+t.a5 and
A66: t.a2=md;
A67: me>=m4 by NAT_1:11;
then
A68: me>=8 by A4,XXREAL_0:2;
then
A69: t.intpos md < t.intpos me implies It.a5=t.a5-1 & It.a4=t.a4-1 & It.a7
= t.a5-1 by A6,A63,A64,A65,A66,Lm7;
A70: t.intpos md >= t.intpos me implies It.a5=0 & It.a4=t.a4 & It.a7=t.a5
by A6,A63,A64,A65,A66,A68,Lm7;
A71: b=intpos (0+5) by A63,SCMP_GCD:1;
A72: now
let v be 0-started State of SCMPDS,V;
assume that
A73: v.a4 >= m4+v.b and
A74: v.a2=t.a2 and
A75: v.a=t.a and
A76: v.b > 0;
A77: m4+v.b>m4+0 by A76,XREAL_1:6;
then reconsider ME=v.a4 as Element of NAT by A73,INT_1:3;
v.a4 >=m4 by A73,A77,XXREAL_0:2;
then
A78: ME >= 8 by A4,XXREAL_0:2;
then
A79: v.intpos md < v.intpos ME implies IExec(WB1,V,v).a5=v.a5-1 &
IExec(WB1,V,v).a4=v.a4-1 &
IExec(WB1,V,v).a7=v.a5-1 by A6,A63,A66,A74,A75,Lm7;
thus IExec(WB1,V,v).a=v.a by A6,A63,A66,A74,A75,A78,Lm7;
thus WB1 is_closed_on v,V & WB1 is_halting_on v,V by SCMPDS_6:20,21;
A80: v.intpos md >= v.intpos ME implies IExec(WB1,V,v).a5=0 &
IExec(WB1,V,v)
.a4 =v.a4 & IExec(WB1,V,v).a7=v.a5
by A6,A63,A66,A74,A75,A78,Lm7;
hereby
per cases;
suppose
A81: v.intpos md < v.intpos ME;
hence IExec(WB1,V,v).b < v.b by A71,A79,XREAL_1:146;
m4+v.b-1=m4+IExec(WB1,V,v).b by A71,A79,A81;
hence IExec(WB1,V,v).a4 >=
m4+IExec(WB1,V,v).b by A73,A79,A81,XREAL_1:9;
end;
suppose
A82: v.intpos md >= v.intpos ME;
hence IExec(WB1,V,v).b < v.b
by A6,A63,A66,A71,A74,A75,A76,A78,Lm7;
m4+IExec(WB1,V,v).b < m4+v.b
by A71,A76,A80,A82,XREAL_1:6;
hence IExec(WB1,V,v).a4 >=
m4+IExec(WB1,V,v).b by A73,A80,A82,XXREAL_0:2;
end;
end;
thus IExec(WB1,V,v).a2=v.a2 by A6,A63,A66,A74,A75,A78,Lm7;
end;
A83: It.a=0 by A6,A63,A64,A65,A66,A68,Lm7;
then
A84: It.DataLoc(It.a,5)=0 by A64,A69,A70,SCMP_GCD:1;
A85: now
A86: (Initialize It).GBP = It.GBP by SCMPDS_5:15;
A87: (Initialize It).DataLoc(It.GBP,5) = It.DataLoc(It.GBP,5) by SCMPDS_5:15;
let x;
thus IExec(WH1,Q,t).x
= IExec(WH1,Q,Initialize It).x by A64,A65,A71,A72,Th5
.=(Initialize It).x by A84,A86,A87,SCMPDS_8:23
.=It.x by SCMPDS_5:15;
end;
hence IExec(WH1,Q,t).a=0 by A83;
It.a1=t.a1 by A6,A63,A64,A65,A66,A68,Lm7;
hence IExec(WH1,Q,t).a1=t.a1 by A85;
thus IExec(WH1,Q,t).a5=0 by A64,A69,A70,A85;
It.a2=t.a2 by A6,A63,A64,A65,A66,A68,Lm7;
hence IExec(WH1,Q,t).a2=t.a2 by A85;
It.a3=t.a3 by A6,A63,A64,A65,A66,A68,Lm7;
hence IExec(WH1,Q,t).a3=t.a3 by A85;
A88: now
let i be Nat;
assume
A89: i >= 8;
thus IExec(WH1,Q,t).intpos i=It.intpos i by A85
.=t.intpos i by A6,A63,A64,A65,A66,A68,A89,Lm7;
end;
hence for i be Nat st i >= 8
holds IExec(WH1,Q,t).intpos i=t.intpos i;
A90: IExec(WH1,Q,t).intpos me=t.intpos me by A4,A67,A88,XXREAL_0:2;
per cases;
suppose
A91: t.intpos md < t.intpos me;
take ME=0;
thus IExec(WH1,Q,t).a7=ME by A64,A69,A85,A91;
thus IExec(WH1,Q,t).a4=m4+ME by A64,A65,A69,A85,A91;
thus ME <= t.a5 by A64;
hereby
let i be Nat;
assume that
A92: m4+ME < i and
A93: i <=t.a4;
m4+1 <= i by A92,INT_1:7;
then i=m4+1 by A64,A65,A93,XXREAL_0:1;
hence IExec(WH1,Q,t).intpos md
< IExec(WH1,Q,t).intpos i by A6,A88,A90,A91;
end;
thus ME=0 or IExec(WH1,Q,t).intpos md
>= IExec(WH1,Q,t).intpos (m4+ ME );
end;
suppose
A94: t.intpos md >= t.intpos me;
take ME=1;
thus IExec(WH1,Q,t).a7=ME by A64,A70,A85,A94;
thus IExec(WH1,Q,t).a4=m4+ME by A64,A65,A70,A85,A94;
thus ME <= t.a5 by A64;
thus for i be Nat st m4+ME < i & i <=t.a4
holds IExec(WH1,Q,t).intpos md < IExec(WH1,Q,t).intpos i by A64,A65;
thus ME=0 or IExec(WH1,Q,t).intpos md
>= IExec(WH1,Q,t).intpos (m4+ME) by A6,A88,A90,A94;
end;
end;
for k be Nat holds P[k] from NAT_1:sch 2(A62,A8);
hence thesis by A1,A3,A5,A7;
end;
Lm9: for s being 0-started State of SCMPDS,
m4,md be Nat st s.GBP=0 & s.a4=m4
+s.a5 & m4>=8 & s.a2=md & md >= 8
holds WH1 is_closed_on s,P & WH1 is_halting_on s,P
proof
set a=GBP;
let s be 0-started State of SCMPDS,m4,md be Nat;
assume that
A1: s.GBP=0 and
A2: s.a4=m4+s.a5 and
A3: m4>=8 and
A4: s.a2=md and
A5: md >= 8;
set b=DataLoc(s.a,5);
A6: b=intpos (0+5) by A1,SCMP_GCD:1;
now
let v be 0-started State of SCMPDS, V;
assume that
A7: v.a4 >= m4+v.b and
A8: v.a2=s.a2 and
A9: v.a=s.a and
A10: v.b > 0;
A11: m4+v.b>m4+0 by A10,XREAL_1:6;
then reconsider ME=v.a4 as Element of NAT by A7,INT_1:3;
v.a4 >=m4 by A7,A11,XXREAL_0:2;
then
A12: ME >= 8 by A3,XXREAL_0:2;
then
A13: v.intpos md < v.intpos ME implies IExec(WB1,V,v).a5=v.a5-1
& IExec(WB1,V,v) .a4=v.a4-1 & IExec(WB1,V,v).a7=v.a5-1
by A1,A4,A5,A8,A9,Lm7;
thus IExec(WB1,V,v).a=v.a
by A1,A4,A5,A8,A9,A12,Lm7;
thus WB1 is_closed_on v,V & WB1 is_halting_on v,V by SCMPDS_6:20,21;
A14: v.intpos md >= v.intpos ME implies IExec(WB1,V,v).a5=0
& IExec(WB1,V,v).
a4= v.a4 & IExec(WB1,V,v).a7=v.a5
by A1,A4,A5,A8,A9,A12,Lm7;
hereby
per cases;
suppose
A15: v.intpos md < v.intpos ME;
hence IExec(WB1,V,v).b < v.b by A6,A13,XREAL_1:146;
m4+v.b-1=m4+IExec(WB1,V,v).b by A6,A13,A15;
hence IExec(WB1,V,v).a4 >= m4+IExec(WB1,V,v).b
by A7,A13,A15,XREAL_1:9;
end;
suppose
A16: v.intpos md >= v.intpos ME;
hence IExec(WB1,V,v).b < v.b
by A1,A4,A5,A6,A8,A9,A10,A12,Lm7;
m4+IExec(WB1,V,v).b < m4+v.b by A6,A10,A14,A16,XREAL_1:6;
hence IExec(WB1,V,v).a4 >= m4+IExec(WB1,V,v).b
by A7,A14,A16,XXREAL_0:2;
end;
end;
thus IExec(WB1,V,v).a2=v.a2 by A1,A4,A5,A8,A9,A12,Lm7;
end;
hence thesis by A2,A6,Th5;
end;
Lm10: card WH1=11
proof
thus card WH1=9+2 by Lm6,SCMPDS_8:17
.=11;
end;
Lm11: card WB2=9
proof
thus card WB2= card (j1 ';' j2 ';' j3 ';' j4) + card IF2 by AFINSQ_1:17
.= 4+card IF2 by Th4
.= 4+(card (j5 ';' j6) +card j7+2) by SCMPDS_6:65
.= 4+(2+card j7+2) by SCMP_GCD:5
.= 4+(2+1+2) by COMPOS_1:54
.= 9;
end;
Lm12: card WH2=11
proof
thus card WH2= 9+2 by Lm11,SCMPDS_8:17
.=11;
end;
Lm13: for s being 0-started State of SCMPDS,
md,me be Nat st s.a2=md & s.a3=me
& md >= 8 & me >= 8 & s.GBP=0 holds IExec(WB2,P,s).GBP=0
& IExec(WB2,P,s).a1=s.a1 &
IExec(WB2,P,s).a2=s.a2 & IExec(WB2,P,s).a4=s.a4
& (for i be Nat st i >=
8 holds IExec(WB2,P,s).intpos i=s.intpos i)
& (s.intpos md > s.intpos me implies
IExec(WB2,P,s).a7=s.a7-1 & IExec(WB2,P,s).a3=s.a3+1
& IExec(WB2,P,s).a5=s.a7-1) & (s.
intpos md <= s.intpos me implies IExec(WB2,P,s).a7=0 &
IExec(WB2,P,s).a3=s.a3 &
IExec(WB2,P,s).a5=s.a7)
proof
set a=GBP;
let s be 0-started State of SCMPDS,md,me be Nat;
assume that
A1: s.a2=md and
A2: s.a3=me and
A3: md >= 8 and
A4: me >= 8 and
A5: s.a=0;
set t0= s, t1=IExec(j1 ';' j2 ';' j3 ';' j4,P,s),
Q1 = P,
t2=IExec(j1 ';' j2 ';' j3,P,s),
t3=IExec(j1 ';' j2,P,s),
t4=Exec(j1, t0);
A6: t0.a=0 by A5;
A7: DataLoc(t0.a,5)=intpos (0+5) by A5,SCMP_GCD:1; then
A8: t4.a =0 by A5,AMI_3:10,SCMPDS_2:47; then
A9: DataLoc(t4.a,7)=intpos (0+7) by SCMP_GCD:1;
A10: t4.a2 =md by A7,A1,AMI_3:10,SCMPDS_2:47;
A11: t3.a2 =Exec(j2, t4).a2 by SCMPDS_5:42
.=md by A10,A9,AMI_3:10,SCMPDS_2:48; then
A12: DataLoc(t3.a2,0)=intpos (md+0) by SCMP_GCD:1;
A13: t3.a =Exec(j2, t4).a by SCMPDS_5:42
.=0 by A8,A9,AMI_3:10,SCMPDS_2:48;
then
A14: DataLoc(t3.a,6)=intpos (0+6) by SCMP_GCD:1;
A15: t4.a3 =me by A7,A2,AMI_3:10,SCMPDS_2:47;
A16: t3.a3 =Exec(j2, t4).a3 by SCMPDS_5:42
.=me by A15,A9,AMI_3:10,SCMPDS_2:48;
A17: t4.a7 =s.a7 by A7,AMI_3:10,SCMPDS_2:47;
set t01=Initialize t1, jj7= (GBP,7):=0, t5=Exec(j5,t01);
A18: t2.a3 =Exec(j3, t3).a3 by SCMPDS_5:41
.=me by A16,A14,AMI_3:10,SCMPDS_2:47;
A19: t2.a =Exec(j3, t3).a by SCMPDS_5:41
.=0 by A13,A14,AMI_3:10,SCMPDS_2:47;
then
A20: DataLoc(t2.a,6)=intpos (0+6) by SCMP_GCD:1;
A21: t4.a4 =s.a4 by A7,AMI_3:10,SCMPDS_2:47;
A22: t3.a4 =Exec(j2, t4).a4 by SCMPDS_5:42
.=s.a4 by A21,A9,AMI_3:10,SCMPDS_2:48;
A23: t4.a1 =s.a1 by A7,AMI_3:10,SCMPDS_2:47;
A24: t3.a1 =Exec(j2, t4).a1 by SCMPDS_5:42
.=s.a1 by A23,A9,AMI_3:10,SCMPDS_2:48;
A25: t2.a1 =Exec(j3, t3).a1 by SCMPDS_5:41
.=s.a1 by A24,A14,AMI_3:10,SCMPDS_2:47;
t1.a1 =Exec(j4, t2).a1 by SCMPDS_5:41
.=s.a1 by A25,A20,AMI_3:10,SCMPDS_2:50;
then
A26: t01.a1=s.a1 by SCMPDS_5:15;
A27: t2.a4 =Exec(j3, t3).a4 by SCMPDS_5:41
.=s.a4 by A22,A14,AMI_3:10,SCMPDS_2:47;
t1.a4 =Exec(j4, t2).a4 by SCMPDS_5:41
.=s.a4 by A27,A20,AMI_3:10,SCMPDS_2:50;
then
A28: t01.a4=s.a4 by SCMPDS_5:15;
A29: t1.a =Exec(j4, t2).a by SCMPDS_5:41
.=0 by A19,A20,AMI_3:10,SCMPDS_2:50;
then
A30: t01.a=0 by SCMPDS_5:15;
then
A31: DataLoc(t01.a,7)=intpos(0+7) by SCMP_GCD:1;
DataLoc(t0.a,7)=intpos (0+7) by A6,SCMP_GCD:1;
then
A32: t4.a5 =s.a7 by A7,SCMPDS_2:47;
A33: t3.a5 =Exec(j2, t4).a5 by SCMPDS_5:42
.=s.a7 by A32,A9,AMI_3:10,SCMPDS_2:48;
A34: t2.a5 =Exec(j3, t3).a5 by SCMPDS_5:41
.=s.a7 by A33,A14,AMI_3:10,SCMPDS_2:47;
t1.a5 =Exec(j4, t2).a5 by SCMPDS_5:41
.=s.a7 by A34,A20,AMI_3:10,SCMPDS_2:50;
then
A35: t01.a5=s.a7 by SCMPDS_5:15;
A36: t2.a2 =Exec(j3, t3).a2 by SCMPDS_5:41
.=md by A11,A14,AMI_3:10,SCMPDS_2:47;
t1.a2 =Exec(j4, t2).a2 by SCMPDS_5:41
.=md by A36,A20,AMI_3:10,SCMPDS_2:50;
then
A37: t01.a2=s.a2 by A1,SCMPDS_5:15;
a4<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
then
A38: t5.a4=s.a4 by A28,SCMPDS_2:48;
a2<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
then
A39: t5.a2=s.a2 by A37,SCMPDS_2:48;
a<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
then
A40: t5.a=0 by A30,SCMPDS_2:48;
then
A41: DataLoc(t5.a,5)=intpos(0+5) by SCMP_GCD:1;
A42: now
let i be Nat;
assume i>=8;
then i > 5 by XXREAL_0:2;
hence t4.intpos i = s.intpos i by A7,AMI_3:10,SCMPDS_2:47;
end;
A43: now
let i be Nat;
assume
A44: i>=8;
then
A45: i > 7 by XXREAL_0:2;
thus t3.intpos i =Exec(j2, t4).intpos i by SCMPDS_5:42
.=t4.intpos i by A9,A45,AMI_3:10,SCMPDS_2:48
.=s.intpos i by A42,A44;
end;
A46: now
let i be Nat;
assume
A47: i>=8;
then
A48: i > 6 by XXREAL_0:2;
thus t2.intpos i=Exec(j3, t3).intpos i by SCMPDS_5:41
.=t3.intpos i by A14,A48,AMI_3:10,SCMPDS_2:47
.=s.intpos i by A43,A47;
end;
A49: now
let i be Nat;
assume
A50: i>=8;
then
A51: i > 6 by XXREAL_0:2;
thus t1.intpos i=Exec(j4, t2).intpos i by SCMPDS_5:41
.=t2.intpos i by A20,A51,AMI_3:10,SCMPDS_2:50
.=s.intpos i by A46,A50;
end;
A52: t2.a6 =Exec(j3, t3).a6 by SCMPDS_5:41
.=t3.intpos md by A14,A12,SCMPDS_2:47
.=s.intpos md by A3,A43;
t1.a6 =Exec(j4, t2).a6 by SCMPDS_5:41
.=t2.a6-t2.DataLoc(t2.a3,0) by A20,SCMPDS_2:50
.=t2.a6-t2.intpos(me+0) by A18,SCMP_GCD:1
.=s.intpos md - s.intpos me by A4,A52,A46;
then
A53: t1.DataLoc(t1.a,6)=s.intpos md - s.intpos me by A29,SCMP_GCD:1;
a1<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
then
A54: t5.a1=s.a1 by A26,SCMPDS_2:48;
A55: now
per cases;
suppose
A56: t01.DataLoc(t01.a,6) <= 0;
hence IExec(IF2,Q1,Initialize t1).a
=IExec(j7,Q1,Initialize t1).a by SCMPDS_6:74
.=Exec(jj7,t01).a by SCMPDS_5:40
.=0 by A30,A31,AMI_3:10,SCMPDS_2:46;
thus IExec(IF2,Q1,Initialize t1).a1=IExec(j7,Q1,Initialize t1).a1
by A56,SCMPDS_6:74
.=Exec(jj7,t01).a1 by SCMPDS_5:40
.=s.a1 by A26,A31,AMI_3:10,SCMPDS_2:46;
thus IExec(IF2,Q1,Initialize t1).a2=IExec(j7,Q1,Initialize t1).a2
by A56,SCMPDS_6:74
.=Exec(jj7,t01).a2 by SCMPDS_5:40
.=s.a2 by A37,A31,AMI_3:10,SCMPDS_2:46;
thus IExec(IF2,Q1,Initialize t1).a4=IExec(j7,Q1,Initialize t1).a4
by A56,SCMPDS_6:74
.=Exec(jj7,t01).a4 by SCMPDS_5:40
.=s.a4 by A28,A31,AMI_3:10,SCMPDS_2:46;
let i be Nat;
assume
A57: i>=8;
then
A58: i > 7 by XXREAL_0:2;
thus IExec(WB2,P,s).intpos i
=IExec(IF2,Q1,Initialize t1).intpos i
by SCMPDS_5:35
.=IExec(j7,Q1,Initialize t1).intpos i by A56,SCMPDS_6:74
.=Exec(jj7,t01).intpos i by SCMPDS_5:40
.=t01.intpos i by A31,A58,AMI_3:10,SCMPDS_2:46
.=t1.intpos i by SCMPDS_5:15
.=s.intpos i by A49,A57;
end;
suppose
A59: t01.DataLoc(t01.a,6) > 0;
hence IExec(IF2,Q1,Initialize t1).a=IExec(j5 ';' j6,Q1,Initialize t1).a
by SCMPDS_6:73
.=Exec(j6,t5).a
by SCMPDS_5:42
.=0 by A40,A41,AMI_3:10,SCMPDS_2:48;
thus IExec(IF2,Q1,Initialize t1).a1=IExec(j5 ';' j6,Q1,Initialize t1).a1
by A59,SCMPDS_6:73
.=Exec(j6,t5).a1 by SCMPDS_5:42
.=s.a1 by A54,A41,AMI_3:10,SCMPDS_2:48;
thus IExec(IF2,Q1,Initialize t1).a2=IExec(j5 ';' j6,Q1,Initialize t1).a2
by A59,SCMPDS_6:73
.=Exec(j6,t5).a2 by SCMPDS_5:42
.=s.a2 by A39,A41,AMI_3:10,SCMPDS_2:48;
thus IExec(IF2,Q1,Initialize t1).a4=IExec(j5 ';' j6,Q1,Initialize t1).a4
by A59,SCMPDS_6:73
.=Exec(j6,t5).a4 by SCMPDS_5:42
.=s.a4 by A38,A41,AMI_3:10,SCMPDS_2:48;
let i be Nat;
assume
A60: i>=8;
then
A61: i > 5 by XXREAL_0:2;
i > 3 by A60,XXREAL_0:2;
then
A62: intpos i<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
thus IExec(WB2,P,s).intpos i=
IExec(IF2,Q1,Initialize t1).intpos i by SCMPDS_5:35
.=IExec(j5 ';' j6,Q1,Initialize t1).intpos i by A59,SCMPDS_6:73
.=Exec(j6,t5).intpos i by SCMPDS_5:42
.=t5.intpos i by A41,A61,AMI_3:10,SCMPDS_2:48
.=t01.intpos i by A62,SCMPDS_2:48
.=t1.intpos i by SCMPDS_5:15
.=s.intpos i by A49,A60;
end;
end;
hence IExec(WB2,P,s).a=0 & IExec(WB2,P,s).a1=s.a1 &
IExec(WB2,P,s).a2=s.a2 & IExec(WB2,P,s).a4=s.a4 by SCMPDS_5:35;
thus for i be Nat st i >= 8
holds IExec(WB2,P,s).intpos i=s.intpos i by A55;
A63: t3.a7 =Exec(j2, t4).a7 by SCMPDS_5:42
.=t4.a7+ -1 by A9,SCMPDS_2:48
.=s.a7-1 by A17;
A64: t2.a7 =Exec(j3, t3).a7 by SCMPDS_5:41
.=s.a7-1 by A63,A14,AMI_3:10,SCMPDS_2:47;
t1.a7 =Exec(j4, t2).a7 by SCMPDS_5:41
.=s.a7-1 by A64,A20,AMI_3:10,SCMPDS_2:50;
then
A65: t01.a7=s.a7-1 by SCMPDS_5:15;
t1.a3 =Exec(j4, t2).a3 by SCMPDS_5:41
.=me by A18,A20,AMI_3:10,SCMPDS_2:50;
then
A66: t01.a3=s.a3 by A2,SCMPDS_5:15;
A67: DataLoc(t01.a,3)=intpos(0+3) by A30,SCMP_GCD:1;
A68: t01.DataLoc(t01.a,6) = t1.DataLoc(t01.a,6) by SCMPDS_5:15
.= t1.DataLoc(t1.a,6) by SCMPDS_5:15;
hereby
A69: a7<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
assume
s.intpos md > s.intpos me;
then
A70: s.intpos md - s.intpos me > 0 by XREAL_1:50;
thus IExec(WB2,P,s).a7=IExec(IF2,Q1,Initialize t1).a7
by SCMPDS_5:35
.=IExec(j5 ';' j6,Q1,Initialize t1).a7 by A53,A68,A70,SCMPDS_6:73
.=Exec(j6,t5).a7 by SCMPDS_5:42
.=t5.a7 by A41,AMI_3:10,SCMPDS_2:48
.=s.a7-1 by A65,A69,SCMPDS_2:48;
thus IExec(WB2,P,s).a3=IExec(IF2,Q1,Initialize t1).a3
by SCMPDS_5:35
.=IExec(j5 ';' j6,Q1,Initialize t1).a3 by A53,A68,A70,SCMPDS_6:73
.=Exec(j6,t5).a3 by SCMPDS_5:42
.=t5.a3 by A41,AMI_3:10,SCMPDS_2:48
.=s.a3+1 by A67,A66,SCMPDS_2:48;
A71: a5<>DataLoc(t01.a,3) by A30,AMI_3:10,SCMP_GCD:1;
thus IExec(WB2,P,s).a5=IExec(IF2,Q1,Initialize t1).a5
by SCMPDS_5:35
.=IExec(j5 ';' j6,Q1,Initialize t1).a5 by A53,A68,A70,SCMPDS_6:73
.=Exec(j6,t5).a5 by SCMPDS_5:42
.=t5.a5+ -1 by A41,SCMPDS_2:48
.=t5.a5-1
.=s.a7-1 by A35,A71,SCMPDS_2:48;
end;
hereby
assume
s.intpos md <= s.intpos me;
then
A72: 0 >= s.intpos md - s.intpos me by XREAL_1:47;
thus IExec(WB2,P,s).a7=IExec(IF2,Q1,Initialize t1).a7
by SCMPDS_5:35
.=IExec(j7,Q1,Initialize t1).a7 by A53,A68,A72,SCMPDS_6:74
.=Exec(jj7,t01).a7 by SCMPDS_5:40
.=0 by A31,SCMPDS_2:46;
thus IExec(WB2,P,s).a3=IExec(IF2,Q1,Initialize t1).a3
by SCMPDS_5:35
.=IExec(j7,Q1,Initialize t1).a3 by A53,A68,A72,SCMPDS_6:74
.=Exec(jj7,t01).a3 by SCMPDS_5:40
.=s.a3 by A31,A66,AMI_3:10,SCMPDS_2:46;
thus IExec(WB2,P,s).a5=IExec(IF2,Q1,Initialize t1).a5
by SCMPDS_5:35
.=IExec(j7,Q1,Initialize t1).a5 by A53,A68,A72,SCMPDS_6:74
.=Exec(jj7,t01).a5 by SCMPDS_5:40
.=s.a7 by A35,A31,AMI_3:10,SCMPDS_2:46;
end;
end;
Lm14: for s being 0-started State of SCMPDS,
m3,md be Nat st s.GBP=0 & s.a7 >
0 & s.a3+s.a7=m3 & s.a3>=8 & s.a2=md & md >= 8
holds IExec(WH2,P,s).GBP=0 & IExec(WH2,P,s).a1=s.a1 &
IExec(WH2,P,s).a7=0 & IExec(WH2,P,s).a2=s.a2 &
IExec(WH2,P,s).a4=s.a4 &
(for i be Nat st i >= 8
holds IExec(WH2,P,s).intpos i=s.intpos i)
& ex m5,mE3 be Nat st m5=IExec(WH2,P,s).a5
& IExec(WH2,P,s).a3=mE3 & mE3
+m5=m3 & m5 <= s.a7 & (for i be Nat st s.a3 <= i & i < mE3 holds
IExec(WH2,P,s).intpos md > IExec(WH2,P,s).intpos i)
& (m5 = 0 or IExec(WH2,P,s).intpos md <= IExec(WH2,P,s).intpos mE3)
proof
set a=GBP;
let s be 0-started State of SCMPDS,m3,md be Nat;
assume that
A1: s.a=0 and
A2: s.a7 > 0 and
A3: s.a3+s.a7=m3 and
A4: s.a3>=8 and
A5: s.a2=md and
A6: md >= 8;
s.a7 >=1+0 by A2,INT_1:7;
then reconsider m7=s.a7-1 as Element of NAT by INT_1:3,XREAL_1:48;
A7: s.a7=m7+1;
defpred P[Nat] means
for t being 0-started State of SCMPDS,Q st t.a=0 & t.a7 =$1+1 &
t.a3+t.a7=m3 & t.a3>=8 & t.a2=md
holds IExec(WH2,Q,t).a=0 & IExec(WH2,Q,t).
a1=t.a1 & IExec(WH2,Q,t).a7=0 & IExec(WH2,Q,t).a2=t.a2
& IExec(WH2,Q,t).a4=t.a4 &
(for i be Nat st i >= 8
holds IExec(WH2,Q,t).intpos i=t.intpos i) &
ex m5,mE3 be Nat st m5=IExec(WH2,Q,t).a5
& IExec(WH2,Q,t).a3=mE3 & mE3+m5= m3 & m5 <= t.a7 &
(for i be Nat st t.a3 <= i & i < mE3
holds IExec(WH2,Q,t).intpos md >
IExec(WH2,Q,t).intpos i)
& (m5=0 or IExec(WH2,Q,t).intpos md <=
IExec(WH2,Q,t).intpos mE3);
A8: now
let k be Nat;
assume
A9: P[k];
P[k+1]
proof
let t be 0-started State of SCMPDS;
let Q;
set b=DataLoc(t.a,7);
assume that
A10: t.a=0 and
A11: t.a7 =(k+1)+1 and
A12: t.a3+t.a7=m3 and
A13: t.a3>=8 and
A14: t.a2=md;
reconsider me=t.a3 as Element of NAT by A13,INT_1:3;
set It=IExec(WB2,Q,t), IT = Q;
A15: t.intpos md > t.intpos me implies It.a7=t.a7-1 & It.a3=t.a3+1 & It.
a5= t.a7-1 by A6,A10,A13,A14,Lm13;
A16: b=intpos (0+7) by A10,SCMP_GCD:1;
A17: now
let v be 0-started State of SCMPDS;
let V;
assume that
A18: v.a3 >= 8 and
A19: v.a2=t.a2 and
A20: v.a=t.a and
A21: v.b > 0;
reconsider ME=v.a3 as Element of NAT by A18,INT_1:3;
A22: ME=v.a3;
hence IExec(WB2,V,v).a=v.a
by A6,A10,A14,A18,A19,A20,Lm13;
thus WB2 is_closed_on v,V & WB2 is_halting_on v,V by SCMPDS_6:20,21;
A23: v.intpos md > v.intpos ME implies IExec(WB2,V,v).a7=v.a7-1
& IExec(WB2,V,v).a3=v.a3+1
& IExec(WB2,V,v).a5=v.a7-1
by A6,A10,A14,A18,A19,A20,Lm13;
hereby
per cases;
suppose
A24: v.intpos md > v.intpos ME;
hence IExec(WB2,V,v).b < v.b by A16,A23,XREAL_1:146;
A25: v.a3 +1 > v.a3 by XREAL_1:29;
IExec(WB2,V,v).a3=v.a3+1
by A6,A10,A14,A18,A19,A20,A24,Lm13;
hence IExec(WB2,V,v).a3 >= 8 by A18,A25,XXREAL_0:2;
end;
suppose
A26: v.intpos md <= v.intpos ME;
hence IExec(WB2,V,v).b < v.b
by A6,A10,A14,A16,A18,A19,A20,A21,Lm13;
thus IExec(WB2,V,v).a3 >= 8
by A6,A10,A14,A18,A19,A20,A26,Lm13;
end;
end;
thus IExec(WB2,V,v).a2=v.a2
by A6,A10,A14,A18,A19,A20,A22,Lm13;
end;
A27: t.intpos md <= t.intpos me implies It.a7=0 & It.a3=t.a3 & It.a5=t.
a7 by A6,A10,A13,A14,Lm13;
A28: me=t.a3;
then
A29: It.a=0 by A6,A10,A13,A14,Lm13;
then
A30: DataLoc(It.a,7)=intpos(0+7) by SCMP_GCD:1;
A31: It.a1=t.a1 by A6,A10,A13,A14,A28,Lm13;
A32: It.a4=t.a4 by A6,A10,A13,A14,A28,Lm13;
A33: It.a2=t.a2 by A6,A10,A13,A14,A28,Lm13;
A34: (Initialize It).a1 = It.a1 by SCMPDS_5:15;
A35: (Initialize It).a4 = It.a4 by SCMPDS_5:15;
A36: (Initialize It).a2 = It.a2 by SCMPDS_5:15;
per cases;
suppose
A37: t.intpos md > t.intpos me;
then t.a3 < It.a3 by A15,XREAL_1:29;
then
A38: It.a3 >= 8 by A13,XXREAL_0:2;
A39: It.a3+It.a7=m3 by A12,A15,A37;
A40: (Initialize It).a = It.a by SCMPDS_5:15;
A41: (Initialize It).a3 = It.a3 by SCMPDS_5:15;
A42: (Initialize It).a7 = It.a7 by SCMPDS_5:15;
consider m5,mE3 be Nat such that
A43: m5=IExec(WH2,IT,Initialize It).a5 and
A44: IExec(WH2,IT,Initialize It).a3=mE3 and
A45: mE3+m5=m3 and
A46: m5 <= It.a7 and
A47: for i be Nat st It.a3 <= i & i < mE3 holds
IExec(WH2,IT,Initialize It).intpos md >
IExec(WH2,IT,Initialize It).intpos i and
A48: m5=0 or IExec(WH2,IT,Initialize It).intpos md <=
IExec(WH2,IT,Initialize It).intpos mE3
by A9,A11,A12,A14,A29,A33,A36,A15,A27,A38,A39,A40,A41,A42;
A49: IExec(WH2,Q,t)=IExec(WH2,IT,Initialize It) by A11,A13,A16,A17,Th6;
hence IExec(WH2,Q,t).a=0
by A9,A11,A12,A14,A29,A33,A36,A15,A27,A38,A39,A40,A41,A42;
thus IExec(WH2,Q,t).a1=t.a1
by A9,A11,A12,A14,A29,A31,A34,A33,A36,A15,A27,A38,A39,A49,A40,A41,A42;
thus IExec(WH2,Q,t).a7=0
by A9,A11,A12,A14,A29,A33,A36,A15,A27,A38,A39,A49,A40,A41,A42;
thus IExec(WH2,Q,t).a2=t.a2
by A9,A11,A12,A14,A29,A33,A36,A15,A27,A38,A39,A49,A40,A41,A42;
thus IExec(WH2,Q,t).a4=t.a4
by A9,A11,A12,A14,A29,A33,A36,A32,A35,A15,A27,A38,A39,A49,A40,A41,A42;
A50: now
let i be Nat;
assume
A51: i >= 8;
(Initialize It).intpos i = It.intpos i by SCMPDS_5:15;
hence IExec(WH2,Q,t).intpos i=It.intpos i
by A9,A11,A12,A14,A29,A33,A36,A15,A27,A38,A39,A49,A40,A41,A42,A51
.=t.intpos i by A6,A10,A13,A14,A28,A51,Lm13;
end;
hence for i be Nat st i >= 8
holds IExec(WH2,Q,t).intpos i=t.intpos i;
take m5;
take mE3;
thus m5=IExec(WH2,Q,t).a5 by A11,A13,A16,A17,A43,Th6;
thus IExec(WH2,Q,t).a3=mE3 by A11,A13,A16,A17,A44,Th6;
thus mE3+m5=m3 by A45;
thus m5 <= t.a7 by A15,A37,A46,XREAL_1:146,XXREAL_0:2;
A52: It.a3=t.a3+1 by A6,A10,A13,A14,A37,Lm13;
hereby
let i be Nat;
assume that
A53: t.a3 <= i and
A54: i < mE3;
per cases;
suppose
A55: i=t.a3;
IExec(WH2,Q,t).intpos me =t.intpos me by A13,A50;
hence IExec(WH2,Q,t).intpos md
> IExec(WH2,Q,t).intpos i by A6,A37,A50,A55;
end;
suppose
i<>t.a3;
then t.a3 < i by A53,XXREAL_0:1;
then It.a3 <= i by A52,INT_1:7;
hence
IExec(WH2,Q,t).intpos md >
IExec(WH2,Q,t).intpos i by A49,A47,A54;
end;
end;
thus m5=0 or IExec(WH2,Q,t).intpos md
<= IExec(WH2,Q,t).intpos mE3 by A49,A48;
end;
suppose
A56: t.intpos md <= t.intpos me;
A57: now
let x;
A58: (Initialize It).GBP = It.GBP by SCMPDS_5:15;
A59: (Initialize It).DataLoc(It.GBP,7) = It.DataLoc(It.GBP,7) by SCMPDS_5:15;
thus IExec(WH2,Q,t).x =IExec(WH2,IT,Initialize It).x
by A11,A13,A16,A17,Th6
.=(Initialize It).x by A27,A30,A56,A58,A59,SCMPDS_8:23
.=It.x by SCMPDS_5:15;
end;
hence IExec(WH2,Q,t).a=0 by A29;
thus IExec(WH2,Q,t).a1=t.a1 by A31,A57;
thus IExec(WH2,Q,t).a7=0 by A27,A56,A57;
thus IExec(WH2,Q,t).a2=t.a2 by A33,A57;
thus IExec(WH2,Q,t).a4=t.a4 by A32,A57;
A60: now
let i be Nat;
assume
A61: i >= 8;
thus IExec(WH2,Q,t).intpos i=It.intpos i by A57
.=t.intpos i by A6,A10,A13,A14,A28,A61,Lm13;
end;
hence for i be Nat st i >= 8
holds IExec(WH2,Q,t).intpos i=t.intpos i;
reconsider m5=k+1+1 as Nat;
take m5;
take mE3=me;
thus IExec(WH2,Q,t).a5=m5 by A11,A27,A56,A57;
thus IExec(WH2,Q,t).a3=mE3 by A27,A56,A57;
thus mE3+m5=m3 by A11,A12;
thus m5 <= t.a7 by A11;
thus for i be Nat st t.a3 <= i & i < mE3
holds IExec(WH2,Q,t).intpos md > IExec(WH2,Q,t).intpos i;
IExec(WH2,Q,t).intpos me=t.intpos me by A13,A60;
hence m5=0 or IExec(WH2,Q,t).intpos md
<= IExec(WH2,Q,t).intpos mE3 by A6,A56,A60;
end;
end;
hence P[k+1];
end;
P[0]
proof
let t be 0-started State of SCMPDS;
let Q;
set b=DataLoc(t.a,7);
assume that
A62: t.a=0 and
A63: t.a7 =0+1 and
A64: t.a3+t.a7=m3 and
A65: t.a3>=8 and
A66: t.a2=md;
reconsider me=t.a3 as Element of NAT by A65,INT_1:3;
set It=IExec(WB2,Q,t), IT = Q;
A67: t.intpos md > t.intpos me implies It.a7=t.a7-1 & It.a3=t.a3+1 & It.a5
= t.a7-1 by A6,A62,A65,A66,Lm13;
A68: b=intpos (0+7) by A62,SCMP_GCD:1;
A69: now
let v be 0-started State of SCMPDS, V;
assume that
A70: v.a3 >= 8 and
A71: v.a2=t.a2 and
A72: v.a=t.a and
A73: v.b > 0;
reconsider ME=v.a3 as Element of NAT by A70,INT_1:3;
A74: ME=v.a3;
A75: v.intpos ME = (v).intpos ME;
thus IExec(WB2,V,v).a=v.a
by A6,A62,A66,A70,A71,A72,Lm13,A75;
thus WB2 is_closed_on v,V & WB2 is_halting_on v,V by SCMPDS_6:20,21;
A76: v.intpos md > v.intpos ME implies IExec(WB2,V,v).a7=v.a7-1
& IExec(WB2,V,v) .a3=v.a3+1
& IExec(WB2,V,v).a5=v.a7-1
by A6,A62,A66,A70,A71,A72,Lm13;
hereby
per cases;
suppose
A77: v.intpos md > v.intpos ME;
hence IExec(WB2,V,v).b < v.b by A68,A76,XREAL_1:146;
A78: v.a3 +1 > v.a3 by XREAL_1:29;
IExec(WB2,V,v).a3=v.a3+1
by A6,A62,A66,A70,A71,A72,A77,Lm13;
hence IExec(WB2,V,v).a3 >= 8 by A70,A78,XXREAL_0:2;
end;
suppose
A79: v.intpos md <= v.intpos ME;
hence IExec(WB2,V,v).b < v.b
by A6,A62,A66,A68,A70,A71,A72,A73,Lm13;
thus IExec(WB2,V,v).a3 >= 8
by A6,A62,A66,A70,A71,A72,A79,Lm13;
end;
end;
thus IExec(WB2,V,v).a2=v.a2
by A6,A62,A66,A70,A71,A72,A74,Lm13;
end;
A80: t.intpos md <= t.intpos me implies It.a7=0 & It.a3=t.a3 & It.a5=t.a7
by A6,A62,A65,A66,Lm13;
A81: me=t.a3;
then
A82: It.a=0 by A6,A62,A65,A66,Lm13;
then
A83: It.DataLoc(It.a,7)=0 by A63,A67,A80,SCMP_GCD:1;
A84: now
let x;
A85: (Initialize It).GBP = It.GBP by SCMPDS_5:15;
A86: (Initialize It).DataLoc(It.GBP,7) = It.DataLoc(It.GBP,7) by SCMPDS_5:15;
thus IExec(WH2,Q,t).x =IExec(WH2,IT,Initialize It).x
by A63,A65,A68,A69,Th6
.=(Initialize It).x by A83,A85,A86,SCMPDS_8:23
.=It.x by SCMPDS_5:15;
end;
hence IExec(WH2,Q,t).a=0 by A82;
It.a1=t.a1 by A6,A62,A65,A66,A81,Lm13;
hence IExec(WH2,Q,t).a1=t.a1 by A84;
thus IExec(WH2,Q,t).a7=0 by A63,A67,A80,A84;
It.a2=t.a2 by A6,A62,A65,A66,A81,Lm13;
hence IExec(WH2,Q,t).a2=t.a2 by A84;
It.a4=t.a4 by A6,A62,A65,A66,A81,Lm13;
hence IExec(WH2,Q,t).a4=t.a4 by A84;
A87: now
let i be Nat;
assume
A88: i >= 8;
thus IExec(WH2,Q,t).intpos i=It.intpos i by A84
.=t.intpos i by A6,A62,A65,A66,A81,A88,Lm13;
end;
hence for i be Nat st i >= 8
holds IExec(WH2,Q,t).intpos i=t.intpos i;
A89: IExec(WH2,Q,t).intpos me=t.intpos me by A65,A87;
per cases;
suppose
A90: t.intpos md > t.intpos me;
reconsider m5=0 as Nat;
take m5;
take mE3=m3;
thus IExec(WH2,Q,t).a5=m5 by A63,A67,A84,A90;
thus IExec(WH2,Q,t).a3 =mE3 by A63,A64,A67,A84,A90;
thus mE3+m5=m3;
thus m5 <= t.a7 by A63;
hereby
let i be Nat;
assume that
A91: t.a3 <= i and
A92: i < mE3;
i <= me by A63,A64,A92,NAT_1:13;
then i=t.a3 by A91,XXREAL_0:1;
hence IExec(WH2,Q,t).intpos md
> IExec(WH2,Q,t).intpos i by A6,A87,A89,A90;
end;
thus m5=0 or IExec(WH2,Q,t).intpos md <=
IExec(WH2,Q,t).intpos mE3;
end;
suppose
A93: t.intpos md <= t.intpos me;
reconsider m5=1 as Nat;
take m5;
take mE3=me;
thus IExec(WH2,Q,t).a5=m5 by A63,A80,A84,A93;
thus IExec(WH2,Q,t).a3=mE3 by A80,A84,A93;
thus mE3+m5=m3 by A63,A64;
thus m5 <= t.a7 by A63;
thus for i be Nat st t.a3 <= i
& i < mE3 holds IExec(WH2,Q,t).intpos md > IExec(WH2,Q,t).intpos i;
thus m5=0 or IExec(WH2,Q,t).intpos md
<= IExec(WH2,Q,t).intpos mE3 by A6,A87,A89,A93;
end;
end;
then
A94: P[0];
for k be Nat holds P[k] from NAT_1:sch 2(A94,A8);
hence thesis by A1,A3,A4,A5,A7;
end;
Lm15: for s being 0-started State of SCMPDS,md be Nat
st s.GBP=0 & s.a3>=8 &
s.a2=md & md >= 8 holds WH2 is_closed_on s,P & WH2 is_halting_on s,P
proof
set a=GBP;
let s be 0-started State of SCMPDS,md be Nat;
set b=DataLoc(s.a,7);
assume that
A1: s.a=0 and
A2: s.a3>=8 and
A3: s.a2=md and
A4: md >= 8;
A5: b=intpos (0+7) by A1,SCMP_GCD:1;
now
let v be 0-started State of SCMPDS, V;
assume that
A6: v.a3 >= 8 and
A7: v.a2=s.a2 and
A8: v.a=s.a and
A9: v.b > 0;
reconsider ME=v.a3 as Element of NAT by A6,INT_1:3;
A10: ME=v.a3;
hence IExec(WB2,V,v).a=v.a
by A1,A3,A4,A6,A7,A8,Lm13;
thus WB2 is_closed_on v,V & WB2 is_halting_on v,V by SCMPDS_6:20,21;
A11: v.intpos md > v.intpos ME implies IExec(WB2,V,v).a7=v.a7-1
& IExec(WB2,V,v) .a3=v.a3+1
& IExec(WB2,V,v).a5=v.a7-1 by A1,A3,A4,A6,A7,A8,Lm13;
hereby
per cases;
suppose
A12: v.intpos md > v.intpos ME;
hence IExec(WB2,V,v).b < v.b by A5,A11,XREAL_1:146;
A13: v.a3 +1 > v.a3 by XREAL_1:29;
IExec(WB2,V,v).a3=v.a3+1
by A1,A3,A4,A6,A7,A8,A12,Lm13;
hence IExec(WB2,V,v).a3 >= 8 by A6,A13,XXREAL_0:2;
end;
suppose
A14: v.intpos md <= v.intpos ME;
hence IExec(WB2,V,v).b < v.b
by A1,A3,A4,A5,A6,A7,A8,A9,Lm13;
thus IExec(WB2,V,v).a3 >= 8
by A1,A3,A4,A6,A7,A8,A14,Lm13;
end;
end;
thus IExec(WB2,V,v).a2=v.a2 by A1,A3,A4,A6,A7,A8,A10,Lm13;
end;
hence thesis by A2,Th6;
end;
Lm16: card WB3=29
proof
thus card WB3=card (WH1 ';' WH2 )+card IF3 by AFINSQ_1:17
.=11+ 11+card IF3 by Lm10,Lm12,AFINSQ_1:17
.=22+(card (k5 ';' k6 ';' k7 ';' k8 ';' k9 ';' k0)+1) by SCMPDS_6:75
.=22+(card (k5 ';' k6 ';' k7 ';' k8 ';' k9)+1+1) by SCMP_GCD:4
.=22+(card (k5 ';' k6 ';' k7 ';' k8)+1+1+1) by SCMP_GCD:4
.=22+(card (k5 ';' k6 ';' k7)+1+1+1+1) by SCMP_GCD:4
.=22+(card (k5 ';' k6)+1+1+1+1+1) by SCMP_GCD:4
.=22+(2+1+1+1+1+1) by SCMP_GCD:5
.=29;
end;
Lm17: card WH3=31
proof
thus card WH3=29+2 by Lm16,SCMPDS_8:17
.=31;
end;
begin :: The Basic Property of Partition Program
theorem Th9:
card Partition=38
proof
thus card Partition=card (K4 ';' WH3 ';' j8 ';' j9)+1 by SCMP_GCD:4
.=card (K4 ';' WH3 ';' j8)+1+1 by SCMP_GCD:4
.=card (K4 ';' WH3)+1+1+1 by SCMP_GCD:4
.=card K4+card WH3+1+1+1 by AFINSQ_1:17
.=4+31+1+1+1 by Lm17,Th4
.=38;
end;
Lm18: for s be 0-started State of SCMPDS,
m3,m4 be Nat st s.GBP=0 & s.a5 > 0 &
s.a3=m3 & s.a4=m4 & m3>6 & m4 > 6
holds IExec(IF3,P,Initialize s).GBP=0 & IExec(IF3,P,Initialize s).a1=s.
a1 & IExec(IF3,P,Initialize s).a2=s.a2 &
IExec(IF3,P,Initialize s).intpos m3=s.intpos m4
& IExec(IF3,P,Initialize s).
intpos m4=s.intpos m3 & IExec(IF3,P,Initialize s).a3=s.a3+1
& IExec(IF3,P,Initialize s).a4=s.a4-1 &
IExec(IF3,P,Initialize s).a5=s.a5-2 &
for i be Nat st i >= 8 & i <> m3 & i <> m4 holds
IExec(IF3,P,Initialize s).intpos i=s.intpos i
proof
set a=GBP;
let s be 0-started State of SCMPDS,m3,m4 be Nat;
assume that
A1: s.a=0 and
A2: s.a5 > 0 and
A3: s.a3=m3 and
A4: s.a4=m4 and
A5: m3 > 6 and
A6: m4 > 6;
A7: m4 > 3 by A6,XXREAL_0:2;
set x=intpos m3, y=intpos m4, t0=Initialize s, t1=IExec(k5 ';' k6 ';' k7
';' k8 ';' k9 ';' k0,P,Initialize s),
t2=IExec(k5 ';' k6 ';' k7 ';' k8 ';' k9,P,Initialize s),
t3=IExec(k5 ';' k6 ';' k7 ';' k8,P,Initialize s),
t4=IExec(k5 ';' k6 ';' k7,P,Initialize s), t5=IExec(k5 ';' k6,P,Initialize s)
, t6=Exec(k5,t0);
A8: t0.a=0 by A1,SCMPDS_5:15;
then
A9: DataLoc(t0.a,6)=intpos (0+6) by SCMP_GCD:1;
then
A10: t6.a =0 by A8,AMI_3:10,SCMPDS_2:47;
A11: t0.a4=m4 by A4,SCMPDS_5:15;
then
A12: t6.a4 =m4 by A9,AMI_3:10,SCMPDS_2:47;
then
A13: DataLoc(t6.a4,0)=intpos (m4+0) by SCMP_GCD:1;
A14: t5.a =Exec(k6, t6).a by SCMPDS_5:42
.=0 by A6,A10,A13,AMI_3:10,SCMPDS_2:47;
A15: t6.a6 =t0.DataLoc(t0.a4,0) by A9,SCMPDS_2:47
.=t0.intpos(m4+0) by A11,SCMP_GCD:1
.=s.y by SCMPDS_5:15;
t5.a6 =Exec(k6, t6).a6 by SCMPDS_5:42
.=s.y by A6,A15,A13,AMI_3:10,SCMPDS_2:47;
then
A16: t5.DataLoc(t5.a,6)=s.y by A14,SCMP_GCD:1;
t0.a3=m3 by A3,SCMPDS_5:15;
then
A17: t6.a3 =m3 by A9,AMI_3:10,SCMPDS_2:47;
A18: t5.a3 =Exec(k6, t6).a3 by SCMPDS_5:42
.=m3 by A7,A17,A13,AMI_3:10,SCMPDS_2:47;
then
A19: DataLoc(t5.a3,0)=intpos (m3+0) by SCMP_GCD:1;
A20: t0.x=s.x by SCMPDS_5:15;
A21: t5.y=Exec(k6, t6).y by SCMPDS_5:42
.=t6.DataLoc(t6.a3,0) by A13,SCMPDS_2:47
.=t6.intpos(m3+0) by A17,SCMP_GCD:1
.=s.x by A5,A20,A9,AMI_3:10,SCMPDS_2:47;
A22: now
per cases;
suppose
A23: y<>DataLoc(t5.a3,0);
thus t4.y =Exec(k7, t5).y by SCMPDS_5:41
.=s.x by A21,A23,SCMPDS_2:47;
end;
suppose
A24: y=DataLoc(t5.a3,0);
thus t4.y =Exec(k7, t5).y by SCMPDS_5:41
.=s.x by A19,A16,A24,SCMPDS_2:47;
end;
end;
t0.a2=s.a2 by SCMPDS_5:15;
then
A25: t6.a2 =s.a2 by A9,AMI_3:10,SCMPDS_2:47;
A26: m4 > 2 by A6,XXREAL_0:2;
A27: m3 > 5 by A5,XXREAL_0:2;
A28: t4.a =Exec(k7, t5).a by SCMPDS_5:41
.=0 by A5,A14,A19,AMI_3:10,SCMPDS_2:47;
then
A29: DataLoc(t4.a,5)=intpos (0+5) by SCMP_GCD:1;
A30: t3.a =Exec(k8, t4).a by SCMPDS_5:41
.=0 by A28,A29,AMI_3:10,SCMPDS_2:48;
then
A31: a<>DataLoc(t3.a,3) by AMI_3:10,SCMP_GCD:1;
A32: m3 > 3 by A5,XXREAL_0:2;
then
A33: x<>DataLoc(t3.a,3) by A30,AMI_3:10,SCMP_GCD:1;
A34: t4.a3 =Exec(k7, t5).a3 by SCMPDS_5:41
.=m3 by A32,A18,A19,AMI_3:10,SCMPDS_2:47;
A35: t3.a3 =Exec(k8, t4).a3 by SCMPDS_5:41
.=m3 by A34,A29,AMI_3:10,SCMPDS_2:48;
A36: DataLoc(t3.a,3)=intpos (0+3) by A30,SCMP_GCD:1;
A37: t2.a3 =Exec(k9, t3).a3 by SCMPDS_5:41
.=m3+1 by A35,A36,SCMPDS_2:48;
A38: m3 > 2 by A5,XXREAL_0:2;
A39: m4 > 5 by A6,XXREAL_0:2;
A40: t5.a2 =Exec(k6, t6).a2 by SCMPDS_5:42
.=s.a2 by A25,A13,A26,AMI_3:10,SCMPDS_2:47;
A41: t4.x=Exec(k7, t5).x by SCMPDS_5:41
.=s.y by A19,A16,SCMPDS_2:47;
A42: t3.x =Exec(k8, t4).x by SCMPDS_5:41
.=s.y by A27,A41,A29,AMI_3:10,SCMPDS_2:48;
A43: t2.x =Exec(k9, t3).x by SCMPDS_5:41
.=s.y by A42,A33,SCMPDS_2:48;
A44: t3.y =Exec(k8, t4).y by SCMPDS_5:41
.=s.x by A39,A22,A29,AMI_3:10,SCMPDS_2:48;
A45: y<>DataLoc(t3.a,3) by A7,A30,AMI_3:10,SCMP_GCD:1;
A46: t2.y =Exec(k9, t3).y by SCMPDS_5:41
.=s.x by A44,A45,SCMPDS_2:48;
A47: t4.a2 =Exec(k7, t5).a2 by SCMPDS_5:41
.=s.a2 by A40,A19,A38,AMI_3:10,SCMPDS_2:47;
A48: t3.a2 =Exec(k8, t4).a2 by SCMPDS_5:41
.=s.a2 by A47,A29,AMI_3:10,SCMPDS_2:48;
A49: a2<>DataLoc(t3.a,3) by A30,AMI_3:10,SCMP_GCD:1;
A50: t2.a2 =Exec(k9, t3).a2 by SCMPDS_5:41
.=s.a2 by A48,A49,SCMPDS_2:48;
A51: m4 > 1 by A6,XXREAL_0:2;
A52: DataLoc(s.a,5)=intpos(0+5) by A1,SCMP_GCD:1;
t0.a5=s.a5 by SCMPDS_5:15;
then
A53: t6.a5 =s.a5 by A9,AMI_3:10,SCMPDS_2:47;
A54: t5.a5 =Exec(k6, t6).a5 by SCMPDS_5:42
.=s.a5 by A39,A53,A13,AMI_3:10,SCMPDS_2:47;
A55: t4.a5 =Exec(k7, t5).a5 by SCMPDS_5:41
.=s.a5 by A27,A54,A19,AMI_3:10,SCMPDS_2:47;
A56: t3.a5 =Exec(k8, t4).a5 by SCMPDS_5:41
.=t4.a5+-2 by A29,SCMPDS_2:48
.=s.a5-2 by A55;
A57: a5<>DataLoc(t3.a,3) by A30,AMI_3:10,SCMP_GCD:1;
A58: t2.a5 =Exec(k9, t3).a5 by SCMPDS_5:41
.=s.a5-2 by A56,A57,SCMPDS_2:48;
t0.a1=s.a1 by SCMPDS_5:15;
then
A59: t6.a1 =s.a1 by A9,AMI_3:10,SCMPDS_2:47;
A60: m3 > 1 by A5,XXREAL_0:2;
A61: t2.a =Exec(k9, t3).a by SCMPDS_5:41
.=0 by A30,A31,SCMPDS_2:48;
then
A62: a<>DataLoc(t2.a,4) by AMI_3:10,SCMP_GCD:1;
A63: m4 > 4 by A6,XXREAL_0:2;
then
A64: y<>DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
A65: m3 > 4 by A5,XXREAL_0:2;
then
A66: x<>DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
A67: a4<>DataLoc(t3.a,3) by A30,AMI_3:10,SCMP_GCD:1;
A68: t5.a4 =Exec(k6, t6).a4 by SCMPDS_5:42
.=m4 by A63,A12,A13,AMI_3:10,SCMPDS_2:47;
A69: t4.a4 =Exec(k7, t5).a4 by SCMPDS_5:41
.=m4 by A65,A68,A19,AMI_3:10,SCMPDS_2:47;
A70: t3.a4 =Exec(k8, t4).a4 by SCMPDS_5:41
.=m4 by A69,A29,AMI_3:10,SCMPDS_2:48;
A71: t2.a4 =Exec(k9, t3).a4 by SCMPDS_5:41
.=m4 by A70,A67,SCMPDS_2:48;
A72: a3<>DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
A73: t5.a1 =Exec(k6, t6).a1 by SCMPDS_5:42
.=s.a1 by A59,A13,A51,AMI_3:10,SCMPDS_2:47;
A74: t4.a1 =Exec(k7, t5).a1 by SCMPDS_5:41
.=s.a1 by A73,A19,A60,AMI_3:10,SCMPDS_2:47;
A75: t3.a1 =Exec(k8, t4).a1 by SCMPDS_5:41
.=s.a1 by A74,A29,AMI_3:10,SCMPDS_2:48;
A76: a1<>DataLoc(t3.a,3) by A30,AMI_3:10,SCMP_GCD:1;
A77: t2.a1 =Exec(k9, t3).a1 by SCMPDS_5:41
.=s.a1 by A75,A76,SCMPDS_2:48;
A78: a1<>DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
t1.a =Exec(k0, t2).a by SCMPDS_5:41
.=0 by A61,A62,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).a=0 by A2,A52,SCMPDS_6:83;
t1.a1 =Exec(k0, t2).a1 by SCMPDS_5:41
.=s.a1 by A77,A78,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).a1=s.a1 by A2,A52,SCMPDS_6:83;
A79: a2<>DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
t1.a2 =Exec(k0, t2).a2 by SCMPDS_5:41
.=s.a2 by A50,A79,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).a2=s.a2 by A2,A52,SCMPDS_6:83;
t1.x =Exec(k0, t2).x by SCMPDS_5:41
.=s.y by A43,A66,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).x=s.y by A2,A52,SCMPDS_6:83;
t1.y =Exec(k0, t2).y by SCMPDS_5:41
.=s.x by A46,A64,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).y=s.x by A2,A52,SCMPDS_6:83;
A80: DataLoc(t2.a,4)=intpos (0+4) by A61,SCMP_GCD:1;
t1.a3 =Exec(k0, t2).a3 by SCMPDS_5:41
.=m3+1 by A37,A72,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).a3=s.a3+1 by A2,A3,A52,SCMPDS_6:83;
t1.a4 =Exec(k0, t2).a4 by SCMPDS_5:41
.=t2.a4+-1 by A80,SCMPDS_2:48
.=s.a4-1 by A4,A71;
hence IExec(IF3,P,Initialize s).a4=s.a4-1 by A2,A52,SCMPDS_6:83;
A81: a5<>DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
t1.a5 =Exec(k0, t2).a5 by SCMPDS_5:41
.=s.a5-2 by A58,A81,SCMPDS_2:48;
hence IExec(IF3,P,Initialize s).a5=s.a5-2 by A2,A52,SCMPDS_6:83;
A82: now
let i be Nat;
assume that
A83: i >= 8 and
i <> m3 and
i <> m4;
i > 6 by A83,XXREAL_0:2;
hence t6.intpos i =t0.intpos i by A9,AMI_3:10,SCMPDS_2:47
.=s.intpos i by SCMPDS_5:15;
end;
A84: now
let i be Nat;
assume that
A85: i >= 8 and
A86: i <> m3 and
A87: i <> m4;
thus t5.intpos i =Exec(k6, t6).intpos i by SCMPDS_5:42
.=t6.intpos i by A13,A87,AMI_3:10,SCMPDS_2:47
.=s.intpos i by A82,A85,A86,A87;
end;
A88: now
let i be Nat;
assume that
A89: i >= 8 and
A90: i <> m3 and
A91: i <> m4;
thus t4.intpos i =Exec(k7, t5).intpos i by SCMPDS_5:41
.=t5.intpos i by A19,A90,AMI_3:10,SCMPDS_2:47
.=s.intpos i by A84,A89,A90,A91;
end;
A92: now
let i be Nat;
assume that
A93: i >= 8 and
A94: i <> m3 and
A95: i <> m4;
A96: i > 5 by A93,XXREAL_0:2;
thus t3.intpos i =Exec(k8, t4).intpos i by SCMPDS_5:41
.=t4.intpos i by A29,A96,AMI_3:10,SCMPDS_2:48
.=s.intpos i by A88,A93,A94,A95;
end;
A97: now
let i be Nat;
assume that
A98: i >= 8 and
A99: i <> m3 and
A100: i <> m4;
i > 3 by A98,XXREAL_0:2;
then
A101: intpos i <> DataLoc(t3.a,3) by A30,AMI_3:10,SCMP_GCD:1;
thus t2.intpos i =Exec(k9, t3).intpos i by SCMPDS_5:41
.=t3.intpos i by A101,SCMPDS_2:48
.=s.intpos i by A92,A98,A99,A100;
end;
A102: now
let i be Nat;
assume that
A103: i >= 8 and
A104: i <> m3 and
A105: i <> m4;
i > 4 by A103,XXREAL_0:2;
then
A106: intpos i <> DataLoc(t2.a,4) by A61,AMI_3:10,SCMP_GCD:1;
thus t1.intpos i =Exec(k0, t2).intpos i by SCMPDS_5:41
.=t2.intpos i by A106,SCMPDS_2:48
.=s.intpos i by A97,A103,A104,A105;
end;
hereby
let i be Nat;
assume that
A107: i >= 8 and
A108: i <> m3 and
A109: i <> m4;
thus IExec(IF3,P,Initialize s).intpos i = t1.intpos i by A2,A52,SCMPDS_6:83
.=s.intpos i by A102,A107,A108,A109;
end;
end;
Lm19: for s be 0-started State of SCMPDS,
md,m3 be Nat st s.GBP=0 & s.a5 > 0 &
s.a4=m3+s.a5 & m3=s.a3-1 & s.a2=md & md >= 8 & md <= m3
holds WB3 is_closed_on s,P
& WB3 is_halting_on s,P & IExec(WB3,P,s).GBP=0 &
IExec(WB3,P,s).a1=s.a1
& IExec(WB3,P,s).a2=md & IExec(WB3,P,s).a3 >= s.a3
& IExec(WB3,P,s).a4 <= s.a4 & IExec(WB3,P,s).a4
>= m3 & IExec(WB3,P,s).a5 < s.a5 & IExec(WB3,P,s).a5 >= -1
& IExec(WB3,P,s).a4= IExec(WB3,P,s).a3-1+IExec(WB3,P,s).a5
& ex n1,n2 be Nat st n1=IExec(WB3,P,s).a3-1 &
n2=IExec(WB3,P,s).a4+1
& (for i be Nat st i >= 8 & i <>n1 & i<> n2
holds IExec(WB3,P,s).intpos i=s.intpos i)
& (IExec(WB3,P,s).intpos n1=s.intpos n1 &
IExec(WB3,P,s).intpos n2=s.intpos n2 or n1 >= s.a3
& n2 <= s.a4 & IExec(WB3,P,s).
intpos n1=s.intpos n2 & IExec(WB3,P,s).intpos n2=s.intpos n1)
& (for i be Nat st s.a3<=i & i <= n1
holds IExec(WB3,P,s).intpos md >= IExec(WB3,P,s).intpos i) &
for i be Nat st n2<=i & i <= s.a4
holds IExec(WB3,P,s).intpos md <= IExec(WB3,P,s).intpos i
proof
set a=GBP;
let s be 0-started State of SCMPDS,md,m3 be Nat;
A1: Initialize s = s by MEMSTR_0:44;
assume that
A2: s.a=0 and
A3: s.a5 > 0 and
A4: s.a4=m3+s.a5 and
A5: m3=s.a3-1 and
A6: s.a2=md and
A7: md >= 8 and
A8: md <= m3;
set s1=IExec(WH1,P,s);
A9: s1.a = (Initialize s1).a by SCMPDS_5:15;
A10: s1.a1 = (Initialize s1).a1 by SCMPDS_5:15;
A11: s1.a2 = (Initialize s1).a2 by SCMPDS_5:15;
A12: s1.a3 = (Initialize s1).a3 by SCMPDS_5:15;
A13: s1.a4 = (Initialize s1).a4 by SCMPDS_5:15;
A14: s1.a7 = (Initialize s1).a7 by SCMPDS_5:15;
A15: m3 >= 8 by A7,A8,XXREAL_0:2;
then consider mE be Nat such that
A16: mE=s1.a7 and
A17: s1.a4=m3+mE and
A18: mE <= s.a5 and
A19: for i be Nat st m3+mE < i & i <=s.a4 holds s1.intpos md
< s1.intpos i and
A20: mE = 0 or s1.intpos md >= s1.intpos(m3+mE) by A2,A3,A4,A6,A7,Lm8;
A21: s1.a=0 by A2,A3,A4,A6,A7,A15,Lm8;
A22: s1.a1=s.a1 by A2,A3,A4,A6,A7,A15,Lm8;
A23: WH1 is_halting_on s,P by A2,A4,A6,A7,A15,Lm9;
set s2=IExec(WH2,P,Initialize s1), sm=m3+1+mE,
s12=IExec(WH1 ';' WH2,P,s),
s3=IExec(WB3,P,s), P12 = P, P3 = P,
m4=m3+mE;
A24: s12.a = (Initialize s12).a by SCMPDS_5:15;
A25: s12.a1 = (Initialize s12).a1 by SCMPDS_5:15;
A26: s12.a2 = (Initialize s12).a2 by SCMPDS_5:15;
A27: s12.a3 = (Initialize s12).a3 by SCMPDS_5:15;
A28: s12.a4 = (Initialize s12).a4 by SCMPDS_5:15;
A29: s12.a5 = (Initialize s12).a5 by SCMPDS_5:15;
A30: s1.a3+s1.a7=sm by A2,A3,A4,A5,A6,A7,A15,A16,Lm8;
A31: m4 >= 8 by A15,NAT_1:12;
A32: s1.a2=s.a2 by A2,A3,A4,A6,A7,A15,Lm8;
A33: s1.a3=s.a3 by A2,A3,A4,A6,A7,A15,Lm8;
s1.a3=m3+1 by A2,A3,A4,A5,A6,A7,A15,Lm8;
then m3 < s1.a3 by XREAL_1:29;
then
A34: s1.a3 >= 8 by A15,XXREAL_0:2;
A35: s1.a5=0 by A2,A3,A4,A6,A7,A15,Lm8;
A36: m3+mE <= m3+s.a5 by A18,XREAL_1:6;
A37: WH1 is_closed_on s,P by A2,A4,A6,A7,A15,Lm9;
per cases;
suppose
A38: mE <= 0;
A39: (Initialize s1).GBP = s1.GBP by SCMPDS_5:15;
A40: (Initialize s1).DataLoc(s1.GBP,7) = s1.DataLoc(s1.GBP,7) by SCMPDS_5:15;
A41: (Initialize s1).a5 = s1.a5 by SCMPDS_5:15;
A42: (Initialize s1).a1 = s1.a1 by SCMPDS_5:15;
A43: (Initialize s1).a2 = s1.a2 by SCMPDS_5:15;
A44: (Initialize s1).a3 = s1.a3 by SCMPDS_5:15;
A45: (Initialize s1).a4 = s1.a4 by SCMPDS_5:15;
A46: DataLoc(s1.a,7)=intpos(0+7) by A21,SCMP_GCD:1;
then
A47: WH2 is_halting_on s1,P by A16,A38,SCMPDS_8:20;
A48: WH2 is_closed_on s1,P by A16,A38,A46,SCMPDS_8:20;
then
A49: s12.a5=s2.a5 by A37,A23,A47,SCMPDS_7:30
.=0 by A35,A41,A16,A38,A46,A39,A40,SCMPDS_8:23;
A50: s12.a=s2.a by A37,A23,A48,A47,SCMPDS_7:30
.=0 by A21,A39,A16,A38,A46,A40,SCMPDS_8:23;
then
A51: DataLoc(s12.a,5)=intpos(0+5) by SCMP_GCD:1;
A52: WH1 ';' WH2 is_halting_on s,P by A37,A23,A48,A47,A1,SCMPDS_7:24;
A53: WH1 ';' WH2 is_closed_on s,P by A37,A23,A48,A47,A1,SCMPDS_7:24;
hence WB3 is_closed_on s,P & WB3 is_halting_on s,P by A52,SCPISORT:8;
thus IExec(WB3,P,s).a
=IExec(IF3,P12,Initialize s12).a by A53,A52,SCPISORT:6
.=0 by A50,A49,A51,SCMPDS_6:84;
thus IExec(WB3,P,s).a1=IExec(IF3,P12,Initialize s12).a1
by A53,A52,SCPISORT:6
.= s12.a1 by A49,A51,SCMPDS_6:84
.= s2.a1 by A37,A23,A48,A47,SCMPDS_7:30
.= s.a1 by A22,A16,A38,A46,A39,A40,A42,SCMPDS_8:23;
thus s3.a2=IExec(IF3,P12,Initialize s12).a2 by A53,A52,SCPISORT:6
.= s12.a2 by A49,A51,SCMPDS_6:84
.= s2.a2 by A37,A23,A48,A47,SCMPDS_7:30
.= md by A6,A32,A16,A38,A46,A39,A40,A43,SCMPDS_8:23;
A54: s3.a3=IExec(IF3,P12,Initialize s12).a3 by A53,A52,SCPISORT:6
.= s12.a3 by A49,A51,SCMPDS_6:84
.= s2.a3 by A37,A23,A48,A47,SCMPDS_7:30
.= s.a3 by A33,A16,A38,A46,A39,A40,A44,SCMPDS_8:23;
hence s3.a3 >= s.a3;
A55: s3.a4=IExec(IF3,P12,Initialize s12).a4 by A53,A52,SCPISORT:6
.= s12.a4 by A49,A51,SCMPDS_6:84
.= s2.a4 by A37,A23,A48,A47,SCMPDS_7:30
.= m4 by A16,A17,A38,A46,A39,A40,A45,SCMPDS_8:23;
hence s3.a4 <= s.a4 by A4,A18,XREAL_1:6;
thus s3.a4 >= m3 by A55,NAT_1:12;
A56: s3.a5=IExec(IF3,P12,Initialize s12).a5 by A53,A52,SCPISORT:6
.=0 by A49,A51,SCMPDS_6:84;
hence s3.a5 < s.a5 by A3;
thus s3.a5 >= -1 by A56;
thus s3.a4=s3.a3-1+s3.a5 by A5,A38,A54,A55,A56;
take n1=m4;
take n2=m4+1;
A57: mE=0 by A38;
hence n1=s3.a3-1 by A5,A54;
thus n2=s3.a4+1 by A55;
A58: now
let x;
thus s3.x=IExec(IF3,P12,Initialize s12).x by A53,A52,SCPISORT:6
.=s12.x by A49,A51,SCMPDS_6:84
.=s2.x by A37,A23,A48,A47,SCMPDS_7:30;
end;
A59: now
let i be Nat;
assume
A60: i >= 8;
A61: (Initialize s1).GBP = s1.GBP by SCMPDS_5:15;
A62: (Initialize s1).DataLoc(s1.GBP,7) = s1.DataLoc(s1.GBP,7) by SCMPDS_5:15;
thus s3.intpos i=s2.intpos i by A58
.=(Initialize s1).intpos i by A16,A38,A46,A61,A62,SCMPDS_8:23
.=s1.intpos i by SCMPDS_5:15
.=s.intpos i by A2,A3,A4,A6,A7,A15,A60,Lm8;
end;
hence
for i be Nat st i >= 8 & i <>n1 & i<> n2
holds s3.intpos i =s.intpos i;
A63: m4 < n2 by XREAL_1:29;
hence s3.intpos n1=s.intpos n1 & s3.intpos n2=s.intpos n2 or n1 >= s.a3 &
n2 <= s.a4 & s3.intpos n1=s.intpos n2 & s3.intpos n2=s.intpos n1 by A31,A59,
XXREAL_0:2;
thus for i be Nat st s.a3<=i & i <= n1 holds s3.intpos md >= s3
.intpos i by A5,A57,XREAL_1:146,XXREAL_0:2;
hereby
A64: (Initialize s1).GBP = s1.GBP by SCMPDS_5:15;
A65: (Initialize s1).DataLoc(s1.GBP,7) = s1.DataLoc(s1.GBP,7) by SCMPDS_5:15;
A66: s3.intpos md=s2.intpos md by A58
.=(Initialize s1).intpos md by A16,A38,A46,A64,A65,SCMPDS_8:23
.=s1.intpos md by SCMPDS_5:15;
let i be Nat;
assume that
A67: n2<=i and
A68: i <= s.a4;
A69: s3.intpos i=s2.intpos i by A58
.=(Initialize s1).intpos i by A16,A38,A46,A64,A65,SCMPDS_8:23
.=s1.intpos i by SCMPDS_5:15;
m4 < i by A63,A67,XXREAL_0:2;
hence s3.intpos md <= s3.intpos i by A19,A68,A66,A69;
end;
end;
suppose
A70: mE > 0;
then consider m5,mE3 be Nat such that
A71: m5=s2.a5 and
A72: s2.a3=mE3 and
A73: mE3+m5=sm and
A74: m5 <= (Initialize s1).a7 and
A75: (for i be Nat st (Initialize s1).a3 <= i & i < mE3 holds
s2.intpos md > s2.intpos i) and
A76: (m5 = 0 or s2.intpos
md <= s2.intpos mE3) by A5,A6,A7,A16,A21,A32,A33,A34,Lm14,A9,A11,A14,A12;
A77: mE3+m5 <= mE3+s1.a7 by A74,A14,XREAL_1:6;
then
A78: s1.a3 <= mE3 by A5,A33,A16,A73,XREAL_1:6;
A79: s1.a3+s1.a7 <= mE3+s1.a7 by A5,A33,A16,A73,A74,A14,XREAL_1:6;
then
A80: s.a3 <= mE3 by A33,XREAL_1:6;
then mE3 >= 8 by A33,A34,XXREAL_0:2;
then
A81: mE3 > 6 by XXREAL_0:2;
A82: (Initialize s1).GBP = s1.GBP by SCMPDS_5:15;
A83: (Initialize s1).a2 = s1.a2 by SCMPDS_5:15;
A84: (Initialize s1).a3 = s1.a3 by SCMPDS_5:15;
A85: WH2 is_halting_on Initialize s1,P by A6,A7,A21,A32,A34,Lm15,A82,A83,A84;
A86: WH2 is_halting_on s1,P
proof
P+*stop WH2 halts_on Initialize Initialize s1 by A85,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
A87: WH2 is_closed_on Initialize s1,P by A6,A7,A21,A32,A34,Lm15,A82,A83,A84;
A88: WH2 is_closed_on s1,P
proof
for k being Nat holds
IC Comput(P+*stop WH2,Initialize Initialize s1,k) in dom stop WH2
by A87,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
then
A89: WH1 ';' WH2 is_closed_on s,P by A37,A23,A86,A1,SCMPDS_7:24;
s2.a1=s1.a1 by A5,A6,A7,A21,A32,A33,A34,A30,A70,Lm14,A9,A10,A11,A12,A14;
then
A90: s12.a1=s.a1 by A22,A37,A23,A88,A86,SCMPDS_7:30;
s2.a4=s1.a4
by A5,A6,A7,A21,A32,A33,A34,A30,A70,Lm14,A9,A11,A12,A13,A14;
then
A91: s12.a4=m4 by A17,A37,A23,A88,A86,SCMPDS_7:30;
s2.a2=s1.a2 by A5,A6,A7,A21,A32,A33,A34,A30,A70,Lm14,A9,A11,A12,A14;
then
A92: s12.a2=md by A6,A32,A37,A23,A88,A86,SCMPDS_7:30;
s2.a=0 by A5,A6,A7,A21,A32,A33,A34,A30,A70,Lm14,A9,A11,A12,A14;
then
A93: s12.a=0 by A37,A23,A88,A86,SCMPDS_7:30;
A94: s12.a5=m5 by A37,A23,A71,A88,A86,SCMPDS_7:30;
A95: s12.a3=mE3 by A37,A23,A72,A88,A86,SCMPDS_7:30;
A96: WH1 ';' WH2 is_halting_on s,P by A37,A23,A88,A86,A1,SCMPDS_7:24;
hence WB3 is_closed_on s,P & WB3 is_halting_on s,P by A89,SCPISORT:8;
A97: m4 > 6 by A31,XXREAL_0:2;
A98: m4 > m3+0 by A70,XREAL_1:6;
then
A99: m4 >= m3+1 by INT_1:7;
A100: IExec(IF3,P12,Initialize s12) = IExec(IF3,P12,Initialize Initialize s12);
hereby
per cases;
suppose
A101: s12.a5 > 0;
then IExec(IF3,P12,Initialize s12).a=0
by A93,A95,A81,A91,A97,Lm18,A24,A27,A28,A29,A100;
hence IExec(WB3,P,s).a=0 by A89,A96,SCPISORT:6;
IExec(IF3,P12,Initialize s12).a1=s12.a1
by A93,A95,A81,A91,A97,A101,Lm18,A24,A25,A27,A28,A29,A100;
hence IExec(WB3,P,s).a1=s.a1 by A89,A96,A90,SCPISORT:6;
IExec(IF3,P12,Initialize s12).a2=s12.a2
by A93,A95,A81,A91,A97,A101,Lm18,A24,A26,A27,A28,A29,A100;
hence s3.a2=md by A89,A96,A92,SCPISORT:6;
IExec(IF3,P12,Initialize s12).a3=s12.a3+1
by A93,A95,A81,A91,A97,A101,Lm18,A24,A27,A28,A29,A100;
then
A102: s3.a3=mE3+1 by A89,A96,A95,SCPISORT:6;
then mE3 < s3.a3 by XREAL_1:29;
hence s3.a3 >= s.a3 by A33,A78,XXREAL_0:2;
A103: IExec(IF3,P12,Initialize s12).a4=s12.a4-1
by A93,A95,A81,A91,A97,A101,Lm18,A24,A27,A28,A29,A100;
then
A104: s3.a4=m4-1 by A89,A96,A91,SCPISORT:6;
hence s3.a4 <= s.a4 by A4,A36,XREAL_1:146,XXREAL_0:2;
A105: IExec(IF3,P12,Initialize s12).a5=s12.a5-2
by A93,A95,A81,A91,A97,A101,Lm18,A24,A27,A28,A29,A100;
then
A106: s3.a5 =s12.a5-2 by A89,A96,SCPISORT:6;
s12.a5 >=0+1 by A101,INT_1:7;
then
A107: s12.a5-2 >= 1-2 by XREAL_1:9;
then
A108: s3.a5+1 >= -1+1 by A106,XREAL_1:6;
thus s3.a4 >= m3 by A99,A104,XREAL_1:19;
m5 <= s.a5 by A16,A18,A74,A14,XXREAL_0:2;
then m5-2 < s.a5-0 by XREAL_1:15;
hence s3.a5 < s.a5 by A37,A23,A71,A88,A86,A106,SCMPDS_7:30;
thus s3.a5 >= -1 by A89,A96,A105,A107,SCPISORT:6;
thus s3.a4=s3.a3-1+s3.a5 by A73,A89,A96,A91,A94,A103,A102,A106
,SCPISORT:6;
take n1=mE3;
take n2=m4;
n2=n1+(s3.a5+1) by A73,A94,A106;
then
A109: n2 >= n1+0 by A108,XREAL_1:6;
thus n1=s3.a3-1 by A102;
thus n2=m4+-1+1
.=s3.a4+1 by A89,A96,A91,A103,SCPISORT:6;
A110: now
let i be Nat;
A111: s1.intpos i = (Initialize s1).intpos i by SCMPDS_5:15;
assume
A112: i >= 8;
thus s12.intpos i=s2.intpos i by A37,A23,A88,A86,SCMPDS_7:30
.=s1.intpos i by A5,A6,A7,A21,A32,A33,A34,A30,A70,A112,Lm14,A9,A11
,A12,A14,A111
.=s.intpos i by A2,A3,A4,A6,A7,A15,A112,Lm8;
end;
A113: now
let i be Nat;
assume that
A114: i >= 8 and
A115: i <>n1 and
A116: i<> n2;
A117: s12.intpos i = (Initialize s12).intpos i by SCMPDS_5:15;
thus s3.intpos i=IExec(IF3,P12,Initialize s12).intpos i
by A89,A96,SCPISORT:6
.=s12.intpos i by A93,A95,A81,A91,A97,A101,A114,A115,A116,Lm18,A24,
A27
,A28,A29,A100,A117
.=s.intpos i by A110,A114;
end;
hence for i be Nat st i >= 8 & i <>n1 & i<> n2 holds s3.
intpos i=s.intpos i;
A118: s12.intpos m4 = (Initialize s12).intpos m4 by SCMPDS_5:15;
IExec(IF3,P12,Initialize s12).intpos mE3=s12.intpos m4
by A93,A95,A81,A91,A97,A101,Lm18,A24,A27,A28,A29,A100,A118;
then
A119: s3.intpos n1=s12.intpos n2 by A89,A96,SCPISORT:6
.=s.intpos n2 by A15,A110,NAT_1:12;
m3 < m3+1 by XREAL_1:29;
then m3 < n1 by A5,A33,A78,XXREAL_0:2;
then
A120: md < n1 by A8,XXREAL_0:2;
then md < n2 by A109,XXREAL_0:2;
then
A121: n2 >= 8 by A7,XXREAL_0:2;
A122: s3.intpos md=s.intpos md by A7,A113,A120,A109;
then
A123: s1.intpos md=s3.intpos md by A2,A3,A4,A6,A7,A15,Lm8;
A124: s12.intpos mE3 = (Initialize s12).intpos mE3 by SCMPDS_5:15;
IExec(IF3,P12,Initialize s12).intpos m4=s12.intpos mE3
by A93,A95,A81,A91,A97,A101,Lm18,A24,A27,A28,A29,A100,A124;
then
A125: s3.intpos n2=s12.intpos n1 by A89,A96,SCPISORT:6
.=s.intpos n1 by A33,A34,A80,A110,XXREAL_0:2;
hence
s3.intpos n1=s.intpos n1 & s3.intpos n2=s.intpos n2 or s.a3 <= n1
& n2 <= s.a4 & s3.intpos n1=s.intpos n2 & s3.intpos n2=s.intpos n1 by A4,A33
,A18,A79,A119,XREAL_1:6;
A126: s1.intpos md = (Initialize s1).intpos md by SCMPDS_5:15;
A127: s2.intpos md=s1.intpos md by A5,A6,A7,A21,A32,A33,A34,A30,A70,Lm14,A9
,A11,A12,A14,A126
.=s3.intpos md by A2,A3,A4,A6,A7,A15,A122,Lm8;
hereby
let i be Nat;
assume that
A128: s.a3<=i and
A129: i <= n1;
A130: i >= 8 by A33,A34,A128,XXREAL_0:2;
A131: s1.a3 <= i by A2,A3,A4,A6,A7,A15,A128,Lm8;
per cases;
suppose
A132: i < n1;
A133: s1.intpos i = (Initialize s1).intpos i by SCMPDS_5:15;
s2.intpos i=s1.intpos i by A5,A6,A7,A21,A32,A33,A34,A30,A70,A130,A9
,A11,A12,A14,A133,Lm14
.=s.intpos i by A2,A3,A4,A6,A7,A15,A130,Lm8
.=s3.intpos i by A33,A34,A113,A109,A128,A132,XXREAL_0:2;
hence s3.intpos md >= s3.intpos i by A75,A127,A131,A132,A12;
end;
suppose
i >= n1;
then i=n1 by A129,XXREAL_0:1;
hence
s3.intpos md >= s3.intpos i by A2,A3,A4,A6,A7,A15,A20,A70,A119,A121
,A123,Lm8;
end;
end;
A134: n1 >= 8 by A7,A120,XXREAL_0:2;
hereby
let i be Nat;
assume that
A135: n2<=i and
A136: i <= s.a4;
A137: i >= 8 by A121,A135,XXREAL_0:2;
A138: s1.intpos n1 = (Initialize s1).intpos n1 by SCMPDS_5:15;
per cases;
suppose
A139: n2 < i;
s1.intpos i=s.intpos i by A2,A3,A4,A6,A7,A15,A137,Lm8
.=s3.intpos i by A113,A109,A121,A139,XXREAL_0:2;
hence s3.intpos md <= s3.intpos i by A19,A123,A136,A139;
end;
suppose
n2 >= i;
then i=n2 by A135,XXREAL_0:1;
then s3.intpos i=s1.intpos n1 by A2,A3,A4,A6,A7,A15,A125,A134,Lm8
.=s2.intpos n1 by A5,A6,A7,A21,A32,A33,A34,A30,A70,A134,Lm14,A9
,A11,A12,A14,A138;
hence s3.intpos md <= s3.intpos i by A37,A23,A71,A76,A88,A86,A101
,A127,SCMPDS_7:30;
end;
end;
end;
suppose
A140: s12.a5 <= 0;
A141: DataLoc(s12.a,5)=intpos(0+5) by A93,SCMP_GCD:1;
thus IExec(WB3,P,s).a=IExec(IF3,P12,Initialize s12).a
by A89,A96,SCPISORT:6
.=0 by A93,A140,A141,SCMPDS_6:84;
thus IExec(WB3,P,s).a1=IExec(IF3,P12,Initialize s12).a1
by A89,A96,SCPISORT:6
.= s.a1 by A90,A140,A141,SCMPDS_6:84;
thus s3.a2=IExec(IF3,P12,Initialize s12).a2 by A89,A96,SCPISORT:6
.= md by A92,A140,A141,SCMPDS_6:84;
A142: s3.a3=IExec(IF3,P12,Initialize s12).a3 by A89,A96,SCPISORT:6
.= mE3 by A95,A140,A141,SCMPDS_6:84;
hence s3.a3 >= s.a3 by A5,A16,A73,A77,XREAL_1:6;
A143: s3.a4=IExec(IF3,P12,Initialize s12).a4 by A89,A96,SCPISORT:6
.= m4 by A91,A140,A141,SCMPDS_6:84;
hence s3.a4 <= s.a4 by A4,A18,XREAL_1:6;
A144: s12.a5=0 by A37,A23,A71,A88,A86,A140,SCMPDS_7:30;
thus s3.a4 >= m3 by A98,A143;
A145: s3.a5=IExec(IF3,P12,Initialize s12).a5 by A89,A96,SCPISORT:6
.=0 by A141,A144,SCMPDS_6:84;
hence s3.a5 < s.a5 by A3;
thus s3.a5 >= -1 by A145;
A146: m4=m3+mE+1-1
.=mE3+0-1 by A37,A23,A71,A73,A88,A86,A144,SCMPDS_7:30;
hence s3.a4=s3.a3-1+s3.a5 by A142,A143,A145;
take n1=m4;
reconsider n2=m4+1 as Nat;
take n2;
thus n1=s3.a3-1 by A142,A146;
thus n2=s3.a4+1 by A143;
A147: now
let x;
thus s3.x=IExec(IF3,P12,Initialize s12).x by A89,A96,SCPISORT:6
.=s12.x by A140,A141,SCMPDS_6:84
.=s2.x by A37,A23,A88,A86,SCMPDS_7:30;
end;
A148: now
let i be Nat;
assume
A149: i >= 8;
A150: s1.intpos i = (Initialize s1).intpos i by SCMPDS_5:15;
thus s3.intpos i=s2.intpos i by A147
.=s1.intpos i by A5,A6,A7,A21,A32,A33,A34,A30,A70,A149,Lm14,A9,A11
,A12,A14,A150
.=s.intpos i by A2,A3,A4,A6,A7,A15,A149,Lm8;
end;
hence for i be Nat st i >= 8 & i <>n1 & i<> n2 holds s3.
intpos i=s.intpos i;
A151: m4 < n2 by XREAL_1:29;
hence
s3.intpos n1=s.intpos n1 & s3.intpos n2=s.intpos n2 or s.a3 <= n1
& n2 <= s.a4 & s3.intpos n1=s.intpos n2 & s3.intpos n2=s.intpos n1 by A31,A148,
XXREAL_0:2;
hereby
let i be Nat;
assume that
A152: s.a3<=i and
A153: i <= n1;
i < mE3 by A146,A153,XREAL_1:146,XXREAL_0:2;
then
A154: s2.intpos md > s2.intpos i by A33,A75,A152,A12;
s3.intpos md=s2.intpos md by A147;
hence s3.intpos md >= s3.intpos i by A147,A154;
end;
hereby
let i be Nat;
assume that
A155: n2<=i and
A156: i <= s.a4;
A157: m4 < i by A151,A155,XXREAL_0:2;
then
A158: i >= 8 by A31,XXREAL_0:2;
A159: s1.intpos md = (Initialize s1).intpos md by SCMPDS_5:15;
A160: s1.intpos i = (Initialize s1).intpos i by SCMPDS_5:15;
A161: s3.intpos md=s2.intpos md by A147
.=s1.intpos md by A5,A6,A7,A21,A32,A33,A34,A30,A70,Lm14,A9,A11,A12
,A14,A159;
s3.intpos i=s2.intpos i by A147
.=s1.intpos i by A5,A6,A7,A21,A32,A33,A34,A30,A70,A158,Lm14,A9,A11
,A12,A14,A160;
hence s3.intpos md <= s3.intpos i by A19,A156,A157,A161;
end;
end;
end;
end;
end;
Lm20: for i be Integer st i >= -1 & i <= 0 holds i=-1 or i=0
proof
let i be Integer;
assume that
A1: i >= -1 and
A2: i <= 0;
per cases;
suppose
i <= -1;
hence thesis by A1,XXREAL_0:1;
end;
suppose
i > -1;
then i >= -1+1 by INT_1:7;
hence thesis by A2;
end;
end;
Lm21: for i1,i2 be Integer,n1,n2,i be Nat st i1 >= -1 & i1 <= 0 &
n2=i2+1 & i2=n1+i1 & i < n2 holds i <= n1
proof
let i1,i2 be Integer,n1,n2,i be Nat;
assume that
A1: i1 >= -1 and
A2: i1 <= 0 and
A3: n2=i2+1 and
A4: i2=n1+i1 and
A5: i < n2;
per cases by A1,A2,Lm20;
suppose
i1=0;
hence thesis by A3,A4,A5,NAT_1:13;
end;
suppose
i1=-1;
hence thesis by A3,A4,A5;
end;
end;
Lm22: for i1,i2 be Integer,n1,n2 be Nat st i1 >= -1 & n2=i2+1 & i2=
n1+i1 holds n1 <= n2
proof
let i1,i2 be Integer,n1,n2 be Nat;
assume that
A1: i1 >= -1 and
A2: n2=i2+1 and
A3: i2=n1+i1;
n1+i1 >= n1+ -1 by A1,XREAL_1:6;
then i2+1 >= n1+ -1+1 by A3,XREAL_1:6;
hence thesis by A2;
end;
Lm23: for s,s1 be State of SCMPDS,n0,n1,n2,n be Nat,f, f1 be
FinSequence of INT st f is_FinSequence_on s,n0 & f1 is_FinSequence_on s1,n0 &
len f=n & len f1 = n & (for i be Nat st i >= n0+1 & i<>n1 & i<>n2
holds s1.intpos i=s.intpos i) & (s1.intpos n1=s.intpos n1 & s1.intpos n2=s.
intpos n2 or n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n & s1.intpos n1=s
.intpos n2 & s1.intpos n2=s.intpos n1) holds f,f1 are_fiberwise_equipotent
proof
let s,s1 be State of SCMPDS,n0,n1,n2,n be Nat, f,f1 be
FinSequence of INT;
assume that
A1: f is_FinSequence_on s,n0 and
A2: f1 is_FinSequence_on s1,n0;
assume that
A3: len f=n and
A4: len f1 = n;
assume
A5: for i be Nat st i >= n0+1 & i<>n1 & i<>n2 holds s1.intpos
i=s.intpos i;
assume that
A6: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or n1 >= n0+1 &
n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n & s1.intpos n1=s.intpos n2 & s1.intpos n2=
s.intpos n1;
per cases by A6;
suppose
A7: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2;
A8: dom f1 = Seg n by A4,FINSEQ_1:def 3;
now
let i be Nat;
reconsider a = i as Nat;
assume
A9: i in dom f1;
then
A10: 1 <= i by A8,FINSEQ_1:1;
then
A11: n0+1 <= n0+i by XREAL_1:6;
A12: i <= n by A8,A9,FINSEQ_1:1;
per cases;
suppose
A13: n0+i<>n1 & n0+i<>n2;
thus f1.i=s1.intpos (n0+a) by A2,A4,A10,A12
.=s.intpos (n0+a) by A5,A11,A13
.=f.i by A1,A3,A10,A12;
end;
suppose
A14: not (n0+i<>n1 & n0+i<>n2);
hereby
per cases by A14;
suppose
n0+i=n1;
hence f1.i=s.intpos (n0+a) by A2,A4,A7,A10,A12
.=f.i by A1,A3,A10,A12;
end;
suppose
n0+i=n2;
hence f1.i=s.intpos (n0+a) by A2,A4,A7,A10,A12
.=f.i by A1,A3,A10,A12;
end;
end;
end;
end;
hence thesis by A3,A4,FINSEQ_2:9;
end;
suppose
A15: n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n & s1.intpos n1=
s.intpos n2 & s1.intpos n2=s.intpos n1;
then
A16: n1-n0 >= 1 by XREAL_1:19;
then reconsider m1=n1-n0 as Element of NAT by INT_1:3;
A17: m1 <= len f by A3,A15,XREAL_1:20;
A18: n2-n0 >= 1 by A15,XREAL_1:19;
then reconsider m2=n2-n0 as Element of NAT by INT_1:3;
A19: m2 <= len f1 by A4,A15,XREAL_1:20;
A20: n2=m2+n0;
A21: n1=m1+n0;
then
A22: f.m1=s1.intpos n2 by A1,A15,A16,A17
.=f1.m2 by A2,A18,A19,A20;
A23: now
let k be Nat;
assume that
A24: k <> m1 and
A25: k <> m2 and
A26: 1 <= k and
A27: k <= len f;
A28: k+n0 <> m1+n0 by A24;
A29: n0+1 <= n0+k by A26,XREAL_1:6;
A30: k+n0 <> m2+n0 by A25;
thus f.k=s.intpos(k+n0) by A1,A26,A27
.=s1.intpos (k+n0) by A5,A28,A30,A29
.=f1.k by A2,A3,A4,A26,A27;
end;
A31: m2 <= len f by A3,A15,XREAL_1:20;
then f.m2=s1.intpos n1 by A1,A15,A18,A20
.=f1.m1 by A2,A3,A4,A16,A17,A21;
hence thesis by A3,A4,A16,A18,A17,A31,A22,A23,SCPISORT:3;
end;
end;
Lm24: for s,s1 be State of SCMPDS,n0,n1,n2 be Nat,c1,c2 be Integer
st (for i be Nat st i >= n0 & i <>n1 & i<> n2 holds s1.intpos i=s.
intpos i) & n1 <= n2 & (s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or
c1 <= n1 & n2 <= c2 & s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1)
holds for i be Nat st i >= n0 & (i < c1 or i > c2) holds s1.intpos i
=s.intpos i
proof
let s,s1 be State of SCMPDS,n0,n1,n2 be Nat,c1,c2 be Integer;
assume
A1: for i be Nat st i >= n0 & i<>n1 & i<>n2 holds s1.intpos i
=s.intpos i;
assume
A2: n1 <= n2;
assume
A3: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or c1 <= n1 & n2
<= c2 & s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1;
per cases by A3;
suppose
A4: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2;
hereby
let i be Nat;
assume that
A5: i >= n0 and
i < c1 or i > c2;
per cases;
suppose
i<>n1 & i<>n2;
hence s1.intpos i=s.intpos i by A1,A5;
end;
suppose
A6: not (i<>n1 & i<>n2);
hereby
per cases by A6;
suppose
i=n1;
hence s1.intpos i=s.intpos i by A4;
end;
suppose
i=n2;
hence s1.intpos i=s.intpos i by A4;
end;
end;
end;
end;
end;
suppose
A7: c1 <= n1 & n2 <= c2 & s1.intpos n1=s.intpos n2 & s1.intpos n2=s.
intpos n1;
hereby
let i be Nat;
assume that
A8: i >= n0 and
A9: i < c1 or i > c2;
per cases by A9;
suppose
i < c1;
then i < n1 by A7,XXREAL_0:2;
hence s1.intpos i=s.intpos i by A1,A2,A8;
end;
suppose
i > c2;
then i > n2 by A7,XXREAL_0:2;
hence s1.intpos i=s.intpos i by A1,A2,A8;
end;
end;
end;
end;
Lm25: for s be 0-started State of SCMPDS,
md,m3,n0 be Nat,f,f1 be FinSequence
of INT st s.GBP=0 & s.a5 > 0 & s.a4=m3+s.a5 & m3=s.a3-1 & s.a2=md & md >= n0+1
& md <= m3 & n0+1 <= s.a3 & s.a4 <= n0+n & f is_FinSequence_on s,n0 & f1
is_FinSequence_on IExec(WH3,P,s),n0 & n0 >= 7 &
len f=n & len f1=n holds
IExec(WH3,P,s).GBP=0 & IExec(WH3,P,s).a1=s.a1 &
IExec(WH3,P,s).a2=md &
IExec(WH3,P,s).a4 >= md &
IExec(WH3,P,s).a4 <= s.a4 &
f,f1 are_fiberwise_equipotent &
(for i be Nat st s.a3<=i & i <= IExec(WH3,P,s).a4
holds IExec(WH3,P,s).intpos md >=
IExec(WH3,P,s).intpos i) &
(for i be Nat st IExec(WH3,P,s).a4 < i & i <= s.a4
holds IExec(WH3,P,s).intpos md <=
IExec(WH3,P,s).intpos i) &
for i be Nat st i >= n0+1 & (i < s.a3 or i > s.a4)
holds IExec(WH3,P,s).intpos i = s.intpos i
proof
set a=GBP;
let s be 0-started State of SCMPDS,
md,m3,n0 be Nat, f,f1 be FinSequence of INT;
assume that
A1: s.a=0 and
A2: s.a5 > 0 and
A3: s.a4=m3+s.a5 and
A4: m3=s.a3-1 and
A5: s.a2=md and
A6: md >= n0+1 and
A7: md <= m3 and
A8: n0+1 <= s.a3 and
A9: s.a4 <= n0+n;
defpred P[Nat] means
for t be 0-started State of SCMPDS,Q
for n3 be Nat, g,g1 be FinSequence of INT
st t.a=0 & t.a5 > 0 & t.a5<= $1+1 & t.a4=n3+t.
a5 & n3=t.a3-1 & t.a2=md & md <= n3 & n0+1 <= t.a3 & t.a4 <= n0+n & g
is_FinSequence_on t,n0 & g1 is_FinSequence_on IExec(WH3,Q,t),n0
& len g=n
& len g1=n holds
IExec(WH3,Q,t).a=0 & IExec(WH3,Q,t).a1=t.a1
& IExec(WH3,Q,t).a2=md & IExec
(WH3,Q,t).a4 >= md & IExec(WH3,Q,t).a4 <= t.a4
& g,g1 are_fiberwise_equipotent & (
for i be Nat st t.a3<=i & i <= IExec(WH3,Q,t).a4
holds IExec(WH3,Q,t).intpos md
>= IExec(WH3,Q,t).intpos i)
& (for i be Nat st IExec(WH3,Q,t).
a4 < i & i <= t.a4
holds IExec(WH3,Q,t).intpos md <=
IExec(WH3,Q,t).intpos i) &
(for i be Nat st i >= n0+1 & (i < t.a3 or i > t.a4)
holds IExec(WH3,Q,t).intpos i = t.intpos i);
assume
A10: f is_FinSequence_on s,n0;
assume
A11: f1 is_FinSequence_on IExec(WH3,P,s),n0;
assume that
A12: n0 >= 7 and
A13: len f=n and
A14: len f1=n;
n0+1 >= 7+1 by A12,XREAL_1:6;
then
A15: md >= 8 by A6,XXREAL_0:2;
A16: now
let k be Nat;
assume
A17: P[k];
now
let t be 0-started State of SCMPDS,
n3 be Nat, g,g1 be FinSequence of INT;
let Q;
assume that
A18: t.a=0 and
A19: t.a5 > 0 and
A20: t.a5<= (k+1)+1 and
A21: t.a4=n3+t.a5 and
A22: n3=t.a3-1 and
A23: t.a2=md and
A24: md <= n3 and
A25: n0+1 <= t.a3 and
A26: t.a4 <= n0+n;
set t1=IExec(WB3,Q,t), Q1 = Q;
A27: t1.a=(Initialize t1).a by SCMPDS_5:15;
A28: t1.a1=(Initialize t1).a1 by SCMPDS_5:15;
A29: t1.a2=(Initialize t1).a2 by SCMPDS_5:15;
A30: t1.a3=(Initialize t1).a3 by SCMPDS_5:15;
A31: t1.a4=(Initialize t1).a4 by SCMPDS_5:15;
A32: t1.a5=(Initialize t1).a5 by SCMPDS_5:15;
A33: t1.a4=t1.a3-1+t1.a5 by A15,A18,A19,A21,A22,A23,A24,Lm19;
A34: now
A35: DataLoc(t.a,5)=intpos(0+5) by A18,SCMP_GCD:1;
let v be 0-started State of SCMPDS;
let V;
assume that
A36: v.a4=v.a3-1+v.a5 and
A37: md <= v.a3-1 and
A38: v.a2=t.a2 and
A39: v.a=t.a and
A40: v.DataLoc(t.a,5) > 0;
reconsider mm=v.a3-1 as Element of NAT by A37,INT_1:3;
set Iv=IExec(WB3,V,v);
A41: v.a4=mm+v.a5 by A36;
hence Iv.a=v.a
by A15,A18,A23,A37,A38,A39,A40,A35,Lm19;
thus WB3 is_closed_on v,V & WB3 is_halting_on v,V
by A15,A18,A23,A37,A38,A39,A40,A35,A41,Lm19;
thus Iv.DataLoc(t.a,5) < v.DataLoc(t.a,5) by A15,A18,A23,A37,A38,A39
,A40,A35,A41,Lm19;
thus Iv.a4=Iv.a3-1+Iv.a5 by A15,A18,A23,A37,A38,A39,A40,A35,A41,Lm19;
Iv.a3 >= v.a3 by A15,A18,A23,A37,A38,A39,A40,A35,A41,Lm19;
then Iv.a3-1 >= v.a3-1 by XREAL_1:9;
hence md <= Iv.a3-1 by A37,XXREAL_0:2;
thus Iv.a2=v.a2 by A15,A18,A23,A37,A38,A39,A40,A35,A41,Lm19;
end;
t1.a5 < t.a5 by A15,A18,A19,A21,A22,A23,A24,Lm19;
then t1.a5+1 <= t.a5 by INT_1:7;
then t1.a5+1 <= (k+1)+1 by A20,XXREAL_0:2;
then
A42: t1.a5 <= k+1 by XREAL_1:6;
set t2=IExec(WH3,Q,t);
assume
A43: g is_FinSequence_on t,n0;
assume
A44: g1 is_FinSequence_on IExec(WH3,Q,t),n0;
A45: t1.a=0 by A15,A18,A19,A21,A22,A23,A24,Lm19;
then
A46: DataLoc(t1.a,5)=intpos(0+5) by SCMP_GCD:1;
assume that
A47: len g=n and
A48: len g1=n;
A49: t1.a2=md by A15,A18,A19,A21,A22,A23,A24,Lm19;
A50: t1.a1=t.a1 by A15,A18,A19,A21,A22,A23,A24,Lm19;
A51: t1.a3 >= t.a3 by A15,A18,A19,A21,A22,A23,A24,Lm19;
A52: t1.a4 >= n3 by A15,A18,A19,A21,A22,A23,A24,Lm19;
A53: DataLoc(t.a,5)=intpos(0+5) by A18,SCMP_GCD:1;
A54: t1.a4 <= t.a4 by A15,A18,A19,A21,A22,A23,A24,Lm19;
consider n1,n2 be Nat such that
A55: n1=t1.a3-1 and
A56: n2=t1.a4+1 and
A57: for i be Nat st i >= 8 & i <>n1 & i<> n2 holds t1.
intpos i=t.intpos i and
A58: t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2 or t.a3 <=
n1 & n2 <= t.a4 & t1.intpos n1=t.intpos n2 & t1.intpos n2=t.intpos n1 and
A59: for i be Nat st t.a3<=i & i <= n1 holds t1.intpos
md >= t1.intpos i and
A60: for i be Nat st n2<=i & i <= t.a4 holds t1.intpos
md <= t1.intpos i by A15,A18,A19,A21,A22,A23,A24,Lm19;
A61: t1.a5 >= -1 by A15,A18,A19,A21,A22,A23,A24,Lm19;
then
A62: n1 <= n2 by A33,A55,A56,Lm22;
per cases;
suppose
A63: t1.a5 > 0;
set t3=IExec(WH3,Q1,Initialize t1);
consider f3 be FinSequence of INT such that
A64: len f3=n and
A65: for i be Nat st 1<=i & i <= len f3 holds f3.i=t1.
intpos (n0+i) by SCPISORT:1;
A66: f3 is_FinSequence_on t1,n0 by A65;
A67: f3 is_FinSequence_on Initialize t1,n0
proof let i be Nat;
assume 1 <= i & i <= len f3;
then f3.i=t1.intpos(n0+i) by A65;
hence f3.i=(Initialize t1).intpos(n0+i) by SCMPDS_5:15;
end;
A68: t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2 or n1 >= n0+
1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n & t1.intpos n1=t.intpos n2 & t1.intpos
n2=t.intpos n1
proof
per cases by A58;
suppose
t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2;
hence thesis;
end;
suppose
A69: t.a3 <= n1 & n2 <= t.a4 & t1.intpos n1=t.intpos n2 & t1.
intpos n2=t.intpos n1;
then
A70: n2 <= n0+n by A26,XXREAL_0:2;
n1 >= n0+1 by A25,A69,XXREAL_0:2;
hence thesis by A62,A69,A70,XXREAL_0:2;
end;
end;
A71: n0+1 <= t1.a3 by A25,A51,XXREAL_0:2;
t1.a3-1 >= t.a3-1 by A51,XREAL_1:9;
then
A72: md <= n1 by A22,A24,A55,XXREAL_0:2;
now
let i be Nat;
assume that
A73: i >= n0+1 and
A74: i<>n1 and
A75: i<>n2;
n0+1 >= 7+1 by A12,XREAL_1:6;
hence t1.intpos i=t.intpos i by A57,A73,A74,A75,XXREAL_0:2;
end;
then
A76: g,f3 are_fiberwise_equipotent by A43,A47,A64,A66,A68,Lm23;
A77: t1.a4 <= n0+n by A26,A54,XXREAL_0:2;
A78: t2 =t3 by A19,A21,A22,A24,A53,A34,Th7;
consider f4 be FinSequence of INT such that
A79: len f4=n and
A80: for i be Nat st 1<=i & i <= len f4 holds f4.i=t3.
intpos (n0+i) by SCPISORT:1;
A81: f4 is_FinSequence_on t3,n0
by A80;
thus t2.a=0 by A17,A33,A42,A45,A49,A55,A63,A64,A67,A78,A79,A81,A72,A71
,A77,A27,A29,A30,A31,A32;
A82:
(md < t1.a3 or md > t1.a4)
implies t2.intpos md
= (Initialize t1).intpos md by A6,A17,A33,A42,A45,A49,A55,A63,A64,A67,A71
,A72,A77,A78,A79,A81,A27,A29,A30,A31,A32;
A83: md < t1.a3 by A55,A72,XREAL_1:146,XXREAL_0:2;
A84: dom f4 = Seg n by A79,FINSEQ_1:def 3;
now
let i be Nat;
reconsider a = i as Nat;
assume
A85: i in dom f4;
then
A86: i <= n by A84,FINSEQ_1:1;
A87: 1 <= i by A84,A85,FINSEQ_1:1;
hence f4.i=t2.intpos (n0+a) by A79,A80,A78,A86
.=g1.i by A44,A48,A87,A86;
end;
then
A88: f4=g1 by A48,A79,FINSEQ_2:9;
thus t2.a1=t.a1 by A17,A45,A50,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72
,A71,A77,A78,A27,A28,A29,A30,A31,A32;
thus t2.a2=md by A17,A45,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72,A71
,A77,A78,A27,A29,A30,A31,A32;
thus t2.a4 >= md by A17,A45,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72,A71
,A77,A78,A27,A29,A30,A31,A32;
t3.a4 <= t1.a4 by A17,A45,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72,A71
,A77,A27,A29,A30,A31,A32;
hence t2.a4 <= t.a4 by A54,A78,XXREAL_0:2;
f3,f4 are_fiberwise_equipotent by A17,A45,A49,A33,A55,A42,A63,A64,A67
,A79,A81,A72,A71,A77,A27,A29,A30,A31,A32;
hence g,g1 are_fiberwise_equipotent by A76,A88,CLASSES1:76;
A89: t1.a3=n1+1 by A55;
hereby
let i be Nat;
assume that
A90: t.a3<=i and
A91: i <= t2.a4;
A92: t1.intpos i = (Initialize t1).intpos i by SCMPDS_5:15;
A93: n0+1 <= i by A25,A90,XXREAL_0:2;
hereby
per cases;
suppose
A94: i < t1.a3;
then
A95: i <= n1 by A89,INT_1:7;
A96: t2.intpos i = t1.intpos i by A17,A45,A49,A33,A55,A42,A63,A64,A67
,A79,A81,A72,A71,A77,A78,A93,A94,A92,A27,A29,A30,A31,A32;
t2.intpos md = t1.intpos md by A83,A82,SCMPDS_5:15;
hence t2.intpos md >= t2.intpos i by A59,A90,A95,A96;
end;
suppose
A97: i >= t1.a3;
thus
t2.intpos md >= t2.intpos i by A17,A45,A49,A33,A55,A42,A63,A64
,A67,A79,A81,A72,A71,A77,A78,A91,A97,A27,A29,A30,A31,A32;
end;
end;
end;
hereby
let i be Nat;
assume that
A98: t2.a4 < i and
A99: i <= t.a4;
A100: t1.intpos i = (Initialize t1).intpos i by SCMPDS_5:15;
hereby
per cases;
suppose
A101: i > t1.a4;
then
A102: i >= n2 by A56,INT_1:7;
t1.a4 > n1+0 by A33,A55,A63,XREAL_1:6;
then n2 > n1+1 by A56,XREAL_1:6;
then n2 >= n0+1 by A55,A71,XXREAL_0:2;
then i >= n0+1 by A102,XXREAL_0:2;
then
A103: t2.intpos i = t1.intpos i
by A17,A45,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72,A71,A77,A78,A101
,A27,A29,A30,A31,A32,A100;
t2.intpos md = t1.intpos md by A83,A82,SCMPDS_5:15;
hence t2.intpos md <= t2.intpos i by A60,A99,A102,A103;
end;
suppose
A104: i <= t1.a4;
thus
t2.intpos md <= t2.intpos i
by A17,A45,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72,A71,A77,A78,A98
,A104,A27,A29,A30,A31,A32;
end;
end;
end;
hereby
let i be Nat;
A105: t1.intpos i = (Initialize t1).intpos i by SCMPDS_5:15;
assume that
A106: i >= n0+1 and
A107: i < t.a3 or i > t.a4;
n0+1 >= 7+1 by A12,XREAL_1:6;
then
A108: i >= 8 by A106,XXREAL_0:2;
then
A109: t1.intpos i = t.intpos i by A57,A58,A62,A107,Lm24;
per cases by A107;
suppose
i < t.a3;
then i < t1.a3 by A51,XXREAL_0:2;
hence
t2.intpos i = t1.intpos i
by A17,A45,A49,A33,A55,A42,A63,A64,A67,A79,A81,A72,A71,A77,A78,A106
,A27,A29,A30,A31,A32,A105
.= t.intpos i by A57,A58,A62,A107,Lm24,A108;
end;
suppose
i > t.a4;
then i > t1.a4 by A54,XXREAL_0:2;
hence
t2.intpos i = t.intpos i by A109,A17,A45,A49,A33,A55,A42,A63,A64,
A67,A79,A81,A72,A71,A77,A78,A106,A27,A29,A30,A31,A32,A105;
end;
end;
end;
suppose
A110: t1.a5 <= 0;
A111: now
let x;
A112: (Initialize t1).GBP = t1.GBP by SCMPDS_5:15;
A113: (Initialize t1).DataLoc(t1.GBP,5) = t1.DataLoc(t1.GBP,5) by SCMPDS_5:15;
thus t2.x =IExec(WH3,Q1,Initialize t1).x
by A19,A21,A22,A24,A53,A34,Th7
.=(Initialize t1).x by A46,A110,A112,A113,SCMPDS_8:23
.=t1.x by SCMPDS_5:15;
end;
hence t2.a=0 by A45;
thus t2.a1=t.a1 by A50,A111;
thus t2.a2=md by A49,A111;
t2.a4 >= n3 by A52,A111;
hence t2.a4 >= md by A24,XXREAL_0:2;
thus t2.a4 <= t.a4 by A54,A111;
A114: now
A115: n0+1 >= 7+1 by A12,XREAL_1:6;
let i be Nat;
assume that
A116: i >= n0+1 and
A117: i<>n1 and
A118: i<>n2;
thus t2.intpos i=t1.intpos i by A111
.=t.intpos i by A57,A116,A117,A118,A115,XXREAL_0:2;
end;
A119: t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or t.a3 <=
n1 & n2 <= t.a4 & t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1
proof
per cases by A58;
suppose
t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2;
hence thesis by A111;
end;
suppose
t.a3 <= n1 & n2 <= t.a4 & t1.intpos n1=t.intpos n2 & t1.
intpos n2=t.intpos n1;
hence thesis by A111;
end;
end;
t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or n1 >= n0+
1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n & t2.intpos n1=t.intpos n2 & t2.intpos
n2=t.intpos n1
proof
per cases by A119;
suppose
t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2;
hence thesis;
end;
suppose
A120: t.a3 <= n1 & n2 <= t.a4 & t2.intpos n1=t.intpos n2 & t2.
intpos n2=t.intpos n1;
then
A121: n2 <= n0+n by A26,XXREAL_0:2;
n1 >= n0+1 by A25,A120,XXREAL_0:2;
hence thesis by A62,A120,A121,XXREAL_0:2;
end;
end;
hence g,g1 are_fiberwise_equipotent by A43,A44,A47,A48,A114,Lm23;
A122: t2.a4=n2-1 by A56,A111;
hereby
let i be Nat;
assume that
A123: t.a3 <= i and
A124: i <= t2.a4;
i < n2 by A122,A124,XREAL_1:146,XXREAL_0:2;
then i <= n1 by A61,A33,A55,A56,A110,Lm21;
then t1.intpos md >= t1.intpos i by A59,A123;
then t2.intpos md >= t1.intpos i by A111;
hence t2.intpos md >= t2.intpos i by A111;
end;
hereby
let i be Nat;
assume that
A125: t2.a4 < i and
A126: i <= t.a4;
t2.a4+1=n2 by A56,A111;
then n2 <= i by A125,INT_1:7;
then t1.intpos md <= t1.intpos i by A60,A126;
then t2.intpos md <= t1.intpos i by A111;
hence t2.intpos md <= t2.intpos i by A111;
end;
thus for i be Nat st i >= n0+1 & (i < t.a3 or i > t.a4)
holds t2.intpos i = t.intpos i by A62,A114,A119,Lm24;
end;
end;
hence P[k+1];
end;
s.a5 >=1+0 by A2,INT_1:7;
then reconsider m5=s.a5-1 as Element of NAT by INT_1:3,XREAL_1:48;
A127: s.a5=m5+1;
A128: P[0 qua Nat]
proof
let t be 0-started State of SCMPDS, Q;
let n3 be Nat,g,g1 be FinSequence of INT;
assume that
A129: t.a=0 and
A130: t.a5 > 0 and
A131: t.a5<= 0+1 and
A132: t.a4=n3+t.a5 and
A133: n3=t.a3-1 and
A134: t.a2=md and
A135: md <= n3 and
A136: n0+1 <= t.a3 and
A137: t.a4 <= n0+n;
set t2=IExec(WH3,Q,t), Q2 = Q;
assume
A138: g is_FinSequence_on t,n0;
set t1=IExec(WB3,Q,t), Q1 = Q;
assume
A139: g1 is_FinSequence_on IExec(WH3,Q,t),n0;
A140: t1.a4=t1.a3-1+t1.a5 by A15,A129,A130,A132,A133,A134,A135,Lm19;
consider n1,n2 be Nat such that
A141: n1=t1.a3-1 and
A142: n2=t1.a4+1 and
A143: for i be Nat st i >= 8 & i <>n1 & i<> n2 holds t1.
intpos i=t.intpos i and
A144: t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2 or t.a3 <= n1
& n2 <= t.a4 & t1.intpos n1=t.intpos n2 & t1.intpos n2=t.intpos n1 and
A145: for i be Nat st t.a3<=i & i <= n1 holds t1.intpos md
>= t1.intpos i and
A146: for i be Nat st n2<=i & i <= t.a4 holds t1.intpos md
<= t1.intpos i by A15,A129,A130,A132,A133,A134,A135,Lm19;
A147: t1.a5 >= -1 by A15,A129,A130,A132,A133,A134,A135,Lm19;
then
A148: n1 <= n2 by A140,A141,A142,Lm22;
t1.a5 < t.a5 by A15,A129,A130,A132,A133,A134,A135,Lm19;
then t1.a5+1 <= t.a5 by INT_1:7;
then t1.a5+1 <= 0+1 by A131,XXREAL_0:2;
then
A149: t1.a5 <= 0 by XREAL_1:6;
A150: now
A151: DataLoc(t.a,5)=intpos(0+5) by A129,SCMP_GCD:1;
let v be 0-started State of SCMPDS;
let V;
assume that
A152: v.a4=v.a3-1+v.a5 and
A153: md <= v.a3-1 and
A154: v.a2=t.a2 and
A155: v.a=t.a and
A156: v.DataLoc(t.a,5) > 0;
reconsider mm=v.a3-1 as Element of NAT by A153,INT_1:3;
set Iv=IExec(WB3,V,v);
A157: v.a4=mm+v.a5 by A152;
hence Iv.a=v.a by A15,A129,A134,A153,A154,A155,A156,A151,Lm19;
thus WB3 is_closed_on v,V & WB3 is_halting_on v,V
by A15,A129,A134,A153,A154,A155,A156,A151,A157,Lm19;
thus Iv.DataLoc(t.a,5) < v.DataLoc(t.a,5) by A15,A129,A134,A153,A154,A155
,A156,A151,A157,Lm19;
thus Iv.a4=Iv.a3-1+Iv.a5 by A15,A129,A134,A153,A154,A155,A156,A151,A157
,Lm19;
Iv.a3 >= v.a3 by A15,A129,A134,A153,A154,A155,A156,A151,A157,Lm19;
then Iv.a3-1 >= v.a3-1 by XREAL_1:9;
hence md <= Iv.a3-1 by A153,XXREAL_0:2;
thus Iv.a2=v.a2 by A15,A129,A134,A153,A154,A155,A156,A151,A157,Lm19;
end;
A158: DataLoc(t.a,5)=intpos(0+5) by A129,SCMP_GCD:1;
assume that
A159: len g=n and
A160: len g1=n;
A161: t1.a=0 by A15,A129,A130,A132,A133,A134,A135,Lm19;
then
A162: DataLoc(t1.a,5)=intpos(0+5) by SCMP_GCD:1;
A163: now
A164: (Initialize t1).GBP = t1.GBP by SCMPDS_5:15;
A165: (Initialize t1).DataLoc(t1.GBP,5) = t1.DataLoc(t1.GBP,5) by SCMPDS_5:15;
let x;
thus t2.x =IExec(WH3,Q1,Initialize t1).x
by A130,A132,A133,A135,A158,A150,Th7
.=(Initialize t1).x by A162,A149,A164,A165,SCMPDS_8:23
.=t1.x by SCMPDS_5:15;
end;
hence t2.a=0 by A161;
t1.a1=t.a1 by A15,A129,A130,A132,A133,A134,A135,Lm19;
hence t2.a1=t.a1 by A163;
t1.a2=md by A15,A129,A130,A132,A133,A134,A135,Lm19;
hence t2.a2=md by A163;
t1.a4 >= n3 by A15,A129,A130,A132,A133,A134,A135,Lm19;
then t2.a4 >= n3 by A163;
hence t2.a4 >= md by A135,XXREAL_0:2;
t1.a4 <= t.a4 by A15,A129,A130,A132,A133,A134,A135,Lm19;
hence t2.a4 <= t.a4 by A163;
A166: now
A167: n0+1 >= 7+1 by A12,XREAL_1:6;
let i be Nat;
assume that
A168: i >= n0+1 and
A169: i<>n1 and
A170: i<>n2;
thus t2.intpos i=t1.intpos i by A163
.=t.intpos i by A143,A168,A169,A170,A167,XXREAL_0:2;
end;
A171: t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or t.a3 <= n1 &
n2 <= t.a4 & t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1
proof
per cases by A144;
suppose
t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2;
hence thesis by A163;
end;
suppose
t.a3 <= n1 & n2 <= t.a4 & t1.intpos n1=t.intpos n2 & t1.
intpos n2=t.intpos n1;
hence thesis by A163;
end;
end;
t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or n1 >= n0+1 &
n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n & t2.intpos n1=t.intpos n2 & t2.intpos n2=
t.intpos n1
proof
per cases by A171;
suppose
t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2;
hence thesis;
end;
suppose
A172: t.a3 <= n1 & n2 <= t.a4 & t2.intpos n1=t.intpos n2 & t2.
intpos n2=t.intpos n1;
then
A173: n2 <= n0+n by A137,XXREAL_0:2;
n1 >= n0+1 by A136,A172,XXREAL_0:2;
hence thesis by A148,A172,A173,XXREAL_0:2;
end;
end;
hence g,g1 are_fiberwise_equipotent by A138,A139,A159,A160,A166,Lm23;
A174: t2.a4=n2-1 by A142,A163;
hereby
let i be Nat;
assume that
A175: t.a3 <= i and
A176: i <= t2.a4;
i < n2 by A174,A176,XREAL_1:146,XXREAL_0:2;
then i <= n1 by A147,A140,A141,A142,A149,Lm21;
then t1.intpos md >= t1.intpos i by A145,A175;
then t2.intpos md >= t1.intpos i by A163;
hence t2.intpos md >= t2.intpos i by A163;
end;
hereby
let i be Nat;
assume that
A177: t2.a4 < i and
A178: i <= t.a4;
t2.a4+1=n2 by A142,A163;
then n2 <= i by A177,INT_1:7;
then t1.intpos md <= t1.intpos i by A146,A178;
then t2.intpos md <= t1.intpos i by A163;
hence t2.intpos md <= t2.intpos i by A163;
end;
thus thesis by A166,A148,A171,Lm24;
end;
for k be Nat holds P[k] from NAT_1:sch 2(A128,A16);
hence thesis by A1,A3,A4,A5,A7,A8,A9,A10,A11,A13,A14,A127;
end;
Lm26: for s be 0-started State of SCMPDS,
md,m3,n0 be Nat st s.GBP=0 & s.a4=m3
+s.a5 & m3=s.a3-1 & s.a2=md & md >= n0+1 & md <= m3 & n0 >= 7 holds WH3
is_closed_on s,P & WH3 is_halting_on s,P
proof
set a=GBP;
let s be 0-started State of SCMPDS,md,m3,n0 be Nat;
assume that
A1: s.a=0 and
A2: s.a4=m3+s.a5 and
A3: m3=s.a3-1 and
A4: s.a2=md and
A5: md >= n0+1 and
A6: md <= m3 and
A7: n0 >= 7;
n0+1 >= 7+1 by A7,XREAL_1:6;
then
A8: md >= 8 by A5,XXREAL_0:2;
A9: DataLoc(s.a,5)=intpos(0+5) by A1,SCMP_GCD:1;
now
let v be 0-started State of SCMPDS;
let V;
assume that
A10: v.a4=v.a3-1+v.a5 and
A11: md <= v.a3-1 and
A12: v.a2=s.a2 and
A13: v.a=s.a and
A14: v.DataLoc(s.a,5) > 0;
set Iv=IExec(WB3,V,v);
reconsider mm=v.a3-1 as Element of NAT by A11,INT_1:3;
A15: v.a4=mm+v.a5 by A10;
hence Iv.a=v.a by A1,A4,A8,A9,A11,A12,A13,A14,Lm19;
thus WB3 is_closed_on v,V & WB3 is_halting_on v,V
by A1,A4,A8,A9,A11,A12,A13,A14,A15,Lm19;
thus Iv.DataLoc(s.a,5) < v.DataLoc(s.a,5) by A1,A4,A8,A9,A11,A12,A13,A14
,A15,Lm19;
thus Iv.a4=Iv.a3-1+Iv.a5 by A1,A4,A8,A9,A11,A12,A13,A14,A15,Lm19;
Iv.a3 >= v.a3 by A1,A4,A8,A9,A11,A12,A13,A14,A15,Lm19;
then Iv.a3-1 >= v.a3-1 by XREAL_1:9;
hence md <= Iv.a3-1 by A11,XXREAL_0:2;
thus Iv.a2=v.a2 by A1,A4,A8,A9,A11,A12,A13,A14,A15,Lm19;
end;
hence thesis by A2,A3,A6,Th7;
end;
Lm27: for s being 0-started State of SCMPDS
st s.GBP=0 holds IExec(K4,P,Initialize s).GBP=0 &
IExec(K4,P,Initialize s).a1=s.a1
& IExec(K4,P,Initialize s).a2=s.a2 & IExec(K4,P,Initialize s).a3=s.a2+1 &
IExec(K4,P,Initialize s).a4=s.
a4 & IExec(K4,P,Initialize s).a5=s.a4-s.a2
& for i be Nat st i >= 8
holds IExec(K4,P,Initialize s).intpos i=s.intpos i
proof
set a=GBP;
let s be 0-started State of SCMPDS;
set t0=Initialize s, t1=IExec(k1 ';' k2 ';' k3 ';' k4,P,Initialize s),
t2=IExec(k1 ';'k2 ';' k3,P,Initialize s),
t3=IExec(k1 ';' k2,P,Initialize s), t4=Exec(k1, t0);
assume s.a=0;
then
A1: t0.a=0 by SCMPDS_5:15;
then
A2: DataLoc(t0.a,5)=intpos (0+5) by SCMP_GCD:1;
then
A3: t4.a5=t0.DataLoc(t0.a,4) by SCMPDS_2:47
.=t0.intpos (0+4) by A1,SCMP_GCD:1
.=s.a4 by SCMPDS_5:15;
t0.a4=s.a4 by SCMPDS_5:15;
then
A4: t4.a4 =s.a4 by A2,AMI_3:10,SCMPDS_2:47;
t0.a1=s.a1 by SCMPDS_5:15;
then
A5: t4.a1 =s.a1 by A2,AMI_3:10,SCMPDS_2:47;
A6: t4.a =0 by A1,A2,AMI_3:10,SCMPDS_2:47;
then
A7: DataLoc(t4.a,5)=intpos (0+5) by SCMP_GCD:1;
A8: t3.a=Exec(k2, t4).a by SCMPDS_5:42
.=0 by A6,A7,AMI_3:10,SCMPDS_2:50;
then
A9: DataLoc(t3.a,3)=intpos (0+3) by SCMP_GCD:1;
A10: t3.a4=Exec(k2, t4).a4 by SCMPDS_5:42
.=s.a4 by A4,A7,AMI_3:10,SCMPDS_2:50;
A11: t2.a4 =Exec(k3, t3).a4 by SCMPDS_5:41
.=s.a4 by A10,A9,AMI_3:10,SCMPDS_2:47;
A12: t0.a2=s.a2 by SCMPDS_5:15;
then
A13: t4.a2 =s.a2 by A2,AMI_3:10,SCMPDS_2:47;
A14: t3.a5=Exec(k2, t4).a5 by SCMPDS_5:42
.=t4.a5-t4.DataLoc(t4.a,2) by A7,SCMPDS_2:50
.=t4.a5-t4.intpos(0+2) by A6,SCMP_GCD:1
.=s.a4-s.a2 by A12,A2,A3,AMI_3:10,SCMPDS_2:47;
A15: t2.a5 =Exec(k3, t3).a5 by SCMPDS_5:41
.=s.a4-s.a2 by A14,A9,AMI_3:10,SCMPDS_2:47;
A16: t3.a2=Exec(k2, t4).a2 by SCMPDS_5:42
.=s.a2 by A13,A7,AMI_3:10,SCMPDS_2:50;
A17: t3.a1=Exec(k2, t4).a1 by SCMPDS_5:42
.=s.a1 by A5,A7,AMI_3:10,SCMPDS_2:50;
A18: t2.a1 =Exec(k3, t3).a1 by SCMPDS_5:41
.=s.a1 by A17,A9,AMI_3:10,SCMPDS_2:47;
A19: t2.a =Exec(k3, t3).a by SCMPDS_5:41
.=0 by A8,A9,AMI_3:10,SCMPDS_2:47;
then
A20: DataLoc(t2.a,3)=intpos (0+3) by SCMP_GCD:1;
A21: t2.a3 =Exec(k3, t3).a3 by SCMPDS_5:41
.=t3.DataLoc(t3.a,2) by A9,SCMPDS_2:47
.=s.a2 by A8,A16,SCMP_GCD:1;
A22: t2.a2 =Exec(k3, t3).a2 by SCMPDS_5:41
.=s.a2 by A16,A9,AMI_3:10,SCMPDS_2:47;
thus t1.a =Exec(k4, t2).a by SCMPDS_5:41
.=0 by A19,A20,AMI_3:10,SCMPDS_2:48;
thus t1.a1 =Exec(k4, t2).a1 by SCMPDS_5:41
.=s.a1 by A18,A20,AMI_3:10,SCMPDS_2:48;
thus t1.a2 =Exec(k4, t2).a2 by SCMPDS_5:41
.=s.a2 by A22,A20,AMI_3:10,SCMPDS_2:48;
thus t1.a3 =Exec(k4, t2).a3 by SCMPDS_5:41
.=s.a2+1 by A21,A20,SCMPDS_2:48;
thus t1.a4 =Exec(k4, t2).a4 by SCMPDS_5:41
.=s.a4 by A11,A20,AMI_3:10,SCMPDS_2:48;
thus t1.a5 =Exec(k4, t2).a5 by SCMPDS_5:41
.=s.a4-s.a2 by A15,A20,AMI_3:10,SCMPDS_2:48;
A23: now
let i be Nat;
assume i>=8;
then i > 5 by XXREAL_0:2;
hence t4.intpos i=t0.intpos i by A2,AMI_3:10,SCMPDS_2:47
.=s.intpos i by SCMPDS_5:15;
end;
A24: now
let i be Nat;
assume
A25: i>=8;
then
A26: i > 5 by XXREAL_0:2;
thus t3.intpos i=Exec(k2, t4).intpos i by SCMPDS_5:42
.=t4.intpos i by A7,A26,AMI_3:10,SCMPDS_2:50
.=s.intpos i by A23,A25;
end;
A27: now
let i be Nat;
assume
A28: i>=8;
then
A29: i > 3 by XXREAL_0:2;
thus t2.intpos i=Exec(k3, t3).intpos i by SCMPDS_5:41
.=t3.intpos i by A9,A29,AMI_3:10,SCMPDS_2:47
.=s.intpos i by A24,A28;
end;
hereby
let i be Nat;
assume
A30: i>=8;
then
A31: i > 3 by XXREAL_0:2;
thus t1.intpos i=Exec(k4, t2).intpos i by SCMPDS_5:41
.=t2.intpos i by A20,A31,AMI_3:10,SCMPDS_2:48
.=s.intpos i by A27,A30;
end;
end;
theorem Th10:
for s be 0-started State of SCMPDS,
md,p0 be Nat st s.GBP=0 & s.
intpos 2=md & md >= p0+1 & p0 >= 7 holds Partition is_closed_on s,P
& Partition
is_halting_on s,P
proof
set KW=K4 ';' WH3;
let s be 0-started State of SCMPDS,md,n0 be Nat;
set s2=IExec(K4,P,Initialize s), a=GBP, P2 = P;
assume that
A1: s.a=0 and
A2: s.a2=md and
A3: md >= n0+1 and
A4: n0 >= 7;
A5: s2.a2=s.a2 by A1,Lm27;
set m3=md;
s2.a5=s.a4-s.a2 by A1,Lm27;
then
A6: s2.a4=m3+s2.a5 by A1,A2,Lm27;
s2.a3=s.a2+1 by A1,Lm27;
then
A7: s.a2=s2.a3-1;
A8: s2.a=0 by A1,Lm27;
A9: (Initialize s2).GBP = s2.GBP by SCMPDS_5:15;
A10: (Initialize s2).a2 = s2.a2 by SCMPDS_5:15;
A11: (Initialize s2).a3 = s2.a3 by SCMPDS_5:15;
A12: (Initialize s2).a4 = s2.a4 by SCMPDS_5:15;
A13: (Initialize s2).a5 = s2.a5 by SCMPDS_5:15;
A14: WH3 is_halting_on Initialize s2,P2 by A2,A3,A4,A5,A7,A6,Lm26,A8,A9,A10,A11
,A12
,A13;
A15: WH3 is_halting_on s2,P2
proof
P+*stop WH3 halts_on Initialize Initialize s2 by A14,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
A16: WH3 is_closed_on Initialize s2,P2 by A2,A3,A4,A8,A5,A7,A6,Lm26,A9,A10,A11,
A12
,A13;
A17: WH3 is_closed_on s2,P2
proof
for k being Nat holds
IC Comput(P+*stop WH3,Initialize Initialize s2,k) in dom stop WH3
by A16,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
then
A18: KW is_closed_on s,P by A15,SCPISORT:9;
A19: KW is_halting_on s,P by A17,A15,SCPISORT:9;
then
A20: KW ';' j8 is_closed_on s,P by A18,SCPISORT:10;
A21: KW ';' j8 is_halting_on s,P by A18,A19,SCPISORT:10;
then
A22: KW ';' j8 ';' j9 is_halting_on s,P by A20,SCPISORT:10;
KW ';' j8 ';' j9 is_closed_on s,P by A20,A21,SCPISORT:10;
hence thesis by A22,SCPISORT:10;
end;
theorem Th11:
for s be 0-started State of SCMPDS,
md,p0,n be Nat,f,f1 be
FinSequence of INT st s.GBP=0 & s.intpos 4-s.intpos 2 > 0 & s.intpos 2=md & md
>= p0+1 & s.intpos 4 <= p0+n & p0 >= 7 & f is_FinSequence_on s,p0 & len f=n &
f1 is_FinSequence_on IExec(Partition,P,s),p0 & len f1=n holds
IExec(Partition,P,s).GBP=0 &
IExec(Partition,P,s).intpos 1=s.intpos 1 &
f,f1 are_fiberwise_equipotent
& ex m4 be Nat
st m4=IExec(Partition,P,s).intpos 4 &
md <= m4 & m4 <= s.intpos 4 &
(for i be Nat st md<=i & i < m4
holds IExec(Partition,P,s).intpos m4 >=
IExec(Partition,P,s).intpos i) &
(for i be Nat st m4 < i & i <= s.intpos 4
holds IExec(Partition,P,s).intpos m4 <=
IExec(Partition,P,s).intpos i) &
for i be Nat st i >= p0+1 & (i < s.intpos 2 or i > s.
intpos 4) holds IExec(Partition,P,s).intpos i = s.intpos i
proof
set KW=K4 ';' WH3;
let s be 0-started State of SCMPDS,
md,n0,n be Nat, f,f1 be FinSequence of INT;
A1: Initialize s = s by MEMSTR_0:44;
set s1=IExec(Partition,P,s), s2=IExec(K4,P,s), P2 = P,
s3=IExec(K4 ';' WH3,P,s), a=GBP;
A2: s2.a=(Initialize s2).a by SCMPDS_5:15;
A3: s2.a1=(Initialize s2).a1 by SCMPDS_5:15;
A4: s2.a2=(Initialize s2).a2 by SCMPDS_5:15;
A5: s2.a3=(Initialize s2).a3 by SCMPDS_5:15;
A6: s2.a4=(Initialize s2).a4 by SCMPDS_5:15;
A7: s2.a5=(Initialize s2).a5 by SCMPDS_5:15;
assume that
A8: s.a=0 and
A9: s.a4-s.a2 > 0 and
A10: s.a2=md and
A11: md >= n0+1 and
A12: s.a4 <= n0+n and
A13: n0 >= 7;
A14: s2.GBP=0 by A8,Lm27,A1;
A15: s2.a1=s.a1 by A8,Lm27,A1;
A16: n0+1 >= 7+1 by A13,XREAL_1:6;
then
A17: md >= 8 by A11,XXREAL_0:2;
then
A18: md > 1 by XXREAL_0:2;
A19: md > 4 by A17,XXREAL_0:2;
A20: md-n0 >= 1 by A11,XREAL_1:19;
then reconsider n1=md-n0 as Element of NAT by INT_1:3;
A21: md=n0+n1;
A22: s2.a4=s.a4 by A8,Lm27,A1;
set m3=md;
s2.a5=s.a4-s.a2 by A8,Lm27,A1;
then
A23: s2.a4=m3+s2.a5 by A8,A10,Lm27,A1;
set s4=IExec(WH3,P2,Initialize s2);
consider f3 be FinSequence of INT such that
A24: len f3=n and
A25: for i be Nat st 1<=i & i <= len f3 holds f3.i=s4.intpos(
n0+i) by SCPISORT:1;
A26: f3 is_FinSequence_on s4,n0 by A25;
md < s.a4 by A9,A10,XREAL_1:47;
then md < n0+n by A12,XXREAL_0:2;
then
A27: n1 <= len f3 by A24,XREAL_1:20;
A28: s2.a2=s.a2 by A8,Lm27,A1;
A29: s2.a3=s.a2+1 by A8,Lm27,A1;
then
A30: s.a2=s2.a3-1;
A31: (Initialize s2).GBP = s2.GBP by SCMPDS_5:15;
A32: (Initialize s2).a2 = s2.a2 by SCMPDS_5:15;
A33: (Initialize s2).a3 = s2.a3 by SCMPDS_5:15;
A34: (Initialize s2).a4 = s2.a4 by SCMPDS_5:15;
A35: (Initialize s2).a5 = s2.a5 by SCMPDS_5:15;
A36: WH3 is_halting_on Initialize s2,P2 by A10,A11,A13,A14,A28,A23,Lm26,A30,A31
,A32,A33,A34,A35;
A37: WH3 is_halting_on s2,P2
proof
P+*stop WH3 halts_on Initialize Initialize s2 by A36,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
s.a2 < s2.a3 by A29,XREAL_1:29;
then
A38: n0+1 <= s2.a3 by A10,A11,XXREAL_0:2;
A39: WH3 is_closed_on Initialize s2,P2 by A10,A11,A13,A14,A28,A30,A23,Lm26,A31,
A32
,A33,A34,A35;
A40: WH3 is_closed_on s2,P2
proof
for k being Nat holds
IC Comput(P+*stop WH3,Initialize Initialize s2,k) in dom stop WH3
by A39,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
then
A41: KW is_halting_on s,P by A37,A1,SCPISORT:9;
consider f2 be FinSequence of INT such that
A42: len f2=n and
A43: for i be Nat st 1<=i & i <= len f2 holds f2.i=s2.intpos(
n0+i) by SCPISORT:1;
A44: f2 is_FinSequence_on Initialize s2,n0
proof let i be Nat;
assume 1 <= i & i <= len f2;
then f2.i=s2.intpos(n0+i) by A43;
hence thesis by SCMPDS_5:15;
end;
then
A45: f2,f3 are_fiberwise_equipotent by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23
,A38,A42,A24,A26,Lm25,A2,A4,A5,A6,A7;
s4.a4 > 0 by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24,A26,Lm25
,A2,A4,A5,A6,A7;
then reconsider m4=s4.a4 as Element of NAT by INT_1:3;
A46: s4.a4 >= md by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24,A26
,Lm25,A2,A4,A5,A6,A7;
then
A47: m4-n0 >= md-n0 by XREAL_1:9;
then reconsider n2=m4-n0 as Element of NAT by A20,INT_1:3;
A48: m4-n0 >= 1 by A20,A47,XXREAL_0:2;
s4.a2=md by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24,A26,Lm25,
A2
,A4,A5,A6,A7;
then
A49: s3.a2=md by A40,A37,SCPISORT:7;
A50: s3.a4 =m4 by A40,A37,SCPISORT:7;
s4.a=0 by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24,A26,Lm25,A2
,A4,A5,A6,A7;
then
A51: s3.a=0 by A40,A37,SCPISORT:7;
then
A52: DataLoc(s3.a,6)=intpos(0+6) by SCMP_GCD:1;
set t2=IExec(KW ';' j8 ';' j9,P,s),
t3=IExec(KW ';' j8,P,s);
assume that
A53: f is_FinSequence_on s,n0 and
A54: len f=n;
assume that
A55: f1 is_FinSequence_on s1,n0 and
A56: len f1=n;
A57: dom f2 = Seg n by A42,FINSEQ_1:def 3;
A58: now
let i be Nat;
reconsider a = i as Nat;
assume
A59: i in dom f2;
then
A60: 1 <= i by A57,FINSEQ_1:1;
then i+n0 >= n0+1 by XREAL_1:6;
then
A61: n0+i >= 8 by A16,XXREAL_0:2;
A62: i <= n by A57,A59,FINSEQ_1:1;
hence f2.i=s2.intpos (n0+a) by A42,A43,A60
.=s.intpos (n0+a) by A8,A61,Lm27,A1
.=f.i by A53,A54,A60,A62;
end;
A63: KW is_closed_on s,P by A40,A37,A1,SCPISORT:9;
then
A64: KW ';' j8 is_closed_on s,P by A41,SCPISORT:10;
A65: s4.a4 <= s2.a4 by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24
,A26,Lm25,A2,A4,A5,A6,A7;
then m4 <= n0+n by A12,A22,XXREAL_0:2;
then
A66: n2 <= len f3 by A24,XREAL_1:20;
A67: t3.a6=Exec(j8,s3).a6 by A63,A41,SCMPDS_7:31
.=s3.DataLoc(s3.a4,0) by A52,SCMPDS_2:47
.=s3.intpos(m4+0) by A50,SCMP_GCD:1
.=s4.intpos m4 by A40,A37,SCPISORT:7;
A68: t3.a4=Exec(j8,s3).a4 by A63,A41,SCMPDS_7:31
.=m4 by A50,A52,AMI_3:10,SCMPDS_2:47;
then
A69: DataLoc(t3.a4,0)=intpos(m4+0) by SCMP_GCD:1;
A70: s4.a1=s2.a1 by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24,A26
,Lm25,A2,A3,A4,A5,A6,A7;
A71: t3.a1=Exec(j8,s3).a1 by A63,A41,SCMPDS_7:31
.=s3.a1 by A52,AMI_3:10,SCMPDS_2:47
.=s.a1 by A15,A70,A40,A37,SCPISORT:7;
A72: s4.a4 >= 8 by A46,A17,XXREAL_0:2;
then
A73: m4 > 2 by XXREAL_0:2;
A74: t3.a=Exec(j8,s3).a by A63,A41,SCMPDS_7:31
.=0 by A51,A52,AMI_3:10,SCMPDS_2:47;
A75: t3.a2=Exec(j8,s3).a2 by A63,A41,SCMPDS_7:31
.=md by A49,A52,AMI_3:10,SCMPDS_2:47;
A76: KW ';' j8 is_halting_on s,P by A63,A41,SCPISORT:10;
then
A77: KW ';' j8 ';' j9 is_halting_on s,P by A64,SCPISORT:10;
t2.a2=Exec(j9,t3).a2 by A64,A76,SCMPDS_7:31
.=md by A75,A69,A73,AMI_3:10,SCMPDS_2:47;
then
A78: DataLoc(t2.a2,0)=intpos(md+0) by SCMP_GCD:1;
A79: m4 > 6 by A72,XXREAL_0:2;
A80: m4 > 1 by A72,XXREAL_0:2;
A81: t2.a6=Exec(j9,t3).a6 by A64,A76,SCMPDS_7:31
.=s4.intpos m4 by A67,A69,A79,AMI_3:10,SCMPDS_2:47;
A82: t2.a=Exec(j9,t3).a by A64,A76,SCMPDS_7:31
.=0 by A11,A46,A74,A69,AMI_3:10,SCMPDS_2:47;
A83: KW ';' j8 ';' j9 is_closed_on s,P by A64,A76,SCPISORT:10;
then
A84: s1.intpos md=Exec(j0,t2).intpos md by A77,SCMPDS_7:31
.=t2.DataLoc(t2.a,6) by A78,SCMPDS_2:47
.=s4.intpos m4 by A82,A81,SCMP_GCD:1;
A85: now
let i be Nat;
assume i >= 8;
then
A86: i > 6 by XXREAL_0:2;
thus t3.intpos i =Exec(j8,s3).intpos i by A63,A41,SCMPDS_7:31
.=s3.intpos i by A52,A86,AMI_3:10,SCMPDS_2:47
.=s4.intpos i by A40,A37,SCPISORT:7;
end;
A87: now
let i be Nat;
assume that
A88: i >= 8 and
A89: i <> m4;
thus t2.intpos i =Exec(j9,t3).intpos i by A64,A76,SCMPDS_7:31
.=t3.intpos i by A69,A89,AMI_3:10,SCMPDS_2:47
.=s4.intpos i by A85,A88;
end;
A90: now
let i be Nat;
assume that
A91: i >= 8 and
A92: i <> m4 and
A93: i<>md;
thus s1.intpos i =Exec(j0,t2).intpos i by A83,A77,SCMPDS_7:31
.=t2.intpos i by A78,A93,AMI_3:10,SCMPDS_2:47
.=s4.intpos i by A87,A91,A92;
end;
A94: now
let k be Nat;
assume that
A95: k<>n1 and
A96: k<>n2 and
A97: 1<=k and
A98: k <= len f3;
A99: k+n0<>md by A95;
A100: k+n0 >= n0+1 by A97,XREAL_1:6;
A101: k+n0<>m4 by A96;
thus f3.k=s4.intpos(n0+k) by A25,A97,A98
.=s1.intpos(n0+k) by A16,A90,A99,A101,A100,XXREAL_0:2
.=f1.k by A55,A56,A24,A97,A98;
end;
A102: m4=n0+n2;
then
A103: f3.n2=s1.intpos md by A25,A84,A48,A66
.=f1.n1 by A55,A56,A24,A20,A27,A21;
A104: t2.a1=Exec(j9,t3).a1 by A64,A76,SCMPDS_7:31
.=s.a1 by A71,A69,A80,AMI_3:10,SCMPDS_2:47;
thus s1.a=Exec(j0,t2).a by A83,A77,SCMPDS_7:31
.=0 by A11,A82,A78,AMI_3:10,SCMPDS_2:47;
thus s1.a1=Exec(j0,t2).a1 by A83,A77,SCMPDS_7:31
.=s.a1 by A104,A78,A18,AMI_3:10,SCMPDS_2:47;
A105: m4 > 4 by A72,XXREAL_0:2;
A106: t2.a4=Exec(j9,t3).a4 by A64,A76,SCMPDS_7:31
.=m4 by A68,A69,A105,AMI_3:10,SCMPDS_2:47;
A107: t2.intpos m4=Exec(j9,t3).intpos m4 by A64,A76,SCMPDS_7:31
.=t3.DataLoc(t3.a2,0) by A69,SCMPDS_2:47
.=t3.intpos (md+0) by A75,SCMP_GCD:1
.=s4.intpos md by A11,A16,A85,XXREAL_0:2;
A108: now
per cases;
suppose
m4=md;
hence s1.intpos m4=s4.intpos md by A84;
end;
suppose
A109: m4<>md;
thus s1.intpos m4=Exec(j0,t2).intpos m4 by A83,A77,SCMPDS_7:31
.=s4.intpos md by A107,A78,A109,AMI_3:10,SCMPDS_2:47;
end;
end;
then f3.n1=s1.intpos m4 by A25,A20,A27,A21
.=f1.n2 by A55,A56,A24,A48,A66,A102;
then f3,f1 are_fiberwise_equipotent by A56,A24,A20,A27,A48,A66,A103,A94,
SCPISORT:3;
then f2,f1 are_fiberwise_equipotent by A45,CLASSES1:76;
hence f,f1 are_fiberwise_equipotent by A54,A42,A58,FINSEQ_2:9;
take m4;
thus s1.a4=Exec(j0,t2).a4 by A83,A77,SCMPDS_7:31
.=m4 by A106,A78,A19,AMI_3:10,SCMPDS_2:47;
A110: m3=s2.a3-1 by A10,A29;
hence md <= m4 by A9,A10,A11,A12,A13,A14,A28,A22,A23,A38,A42,A44,A24,A26,Lm25
,A2,A4,A5,A6,A7;
thus m4 <= s.a4 by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24,A26
,Lm25,A2,A4,A5,A6,A7;
A111: s2.a3=md+1 by A8,A10,Lm27,A1;
hereby
let i be Nat;
assume that
A112: md<=i and
A113: i < m4;
per cases;
suppose
A114: i=md;
then s2.a3 <= m4 by A111,A113,INT_1:7;
hence
s1.intpos m4 >= s1.intpos i by A114,A84,A9,A10,A11,A12,A13,A14,A28,A22
,A110,A23,A38,A42,A44,A24,A26,A108,Lm25,A2,A4,A5,A6,A7;
end;
suppose
A115: i<>md;
then md < i by A112,XXREAL_0:1;
then s2.a3 <= i by A10,A29,INT_1:7;
then s4.intpos md >= s4.intpos i
by A9,A10,A11,A12,A13,A14,A28,A22,A110,A23,A38,A42,A44,A24,A26,A113,Lm25,
A2
,A4,A5,A6,A7;
hence s1.intpos m4 >= s1.intpos i by A17,A108,A90,A112,A115,XXREAL_0:2;
end;
end;
hereby
let i be Nat;
assume that
A116: m4 < i and
A117: i <= s.a4;
A118: md < i by A46,A116,XXREAL_0:2;
s4.intpos md <= s4.intpos i by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38
,A42,A44,A24,A26,A116,A117,Lm25,A2,A4,A5,A6,A7;
hence s1.intpos m4 <= s1.intpos i by A17,A108,A90,A118,XXREAL_0:2;
end;
hereby
let i be Nat;
assume that
A119: i >= n0+1 and
A120: i < s.a2 or i > s.a4;
A121: i >= 8 by A16,A119,XXREAL_0:2;
A122: now
per cases by A120;
case
A123: i < s.a2;
s.a2 < s2.a3 by A29,XREAL_1:29;
hence i < s2.a3 by A123,XXREAL_0:2;
end;
case
i > s.a4;
hence i > s2.a4 by A8,Lm27,A1;
end;
end;
A124: s2.intpos i = (Initialize s2).intpos i by SCMPDS_5:15;
A125: for i be Nat st i >= n0+1 &
(i < (Initialize s2).a3 or i > (Initialize s2).a4)
holds IExec(WH3,P2,Initialize s2).intpos i = (Initialize s2).intpos i
by A9,A10,A11,A12,A13,A14,A28,A22,A110,A23,A38,A42,A44,A24,A26
,Lm25,A2,A4,A5,A6,A7;
i<>md & i<>m4
proof
per cases by A120;
suppose
i< s.a2;
hence thesis by A9,A10,A11,A12,A13,A14,A28,A22,A30,A23,A38,A42,A44,A24
,A26,Lm25,A2,A4,A5,A6,A7;
end;
suppose
i > s.a4;
hence thesis by A22,A46,A65,XXREAL_0:2;
end;
end;
hence s1.intpos i = s4.intpos i by A16,A90,A119,XXREAL_0:2
.=s2.intpos i by A119,A122,A125,A5,A6,A124
.=s.intpos i by A8,A121,Lm27,A1;
end;
end;
theorem
Partition is halt-free shiftable;
Lm28: for s being 0-started State of SCMPDS,
p0,n being Nat holds card QuickSort(n,p0)=57 &
(p0 >= 7 implies QuickSort(n,p0) is_halting_on s,P
& ex f,g
be FinSequence of INT st len f=n & f is_FinSequence_on s,p0 & len g = n & g
is_FinSequence_on IExec(QuickSort(n,p0),P,s),p0
& f,g are_fiberwise_equipotent &
g is_non_decreasing_on 1,n)
proof
set b1=DataLoc(0,1);
reconsider Pt=Partition as halt-free shiftable Program of SCMPDS;
let s be 0-started State of SCMPDS,p0,n be Nat;
A1: Initialize s = s by MEMSTR_0:44;
set pn=p0+n;
set l1= (GBP,2):=(SBP,pn+1), l2= SubFrom(GBP,2,SBP,pn), l3= (GBP,2):=(SBP,pn
), l4= (GBP,4):=(SBP,pn+1), l5= (SBP,pn+3):=(SBP,pn+1), l6= (SBP,pn+1):=(GBP,4)
, l7= (SBP,pn+2):=(GBP,4), l8= AddTo(SBP,pn+1,-1), l9= AddTo(SBP,pn+2,1), l0=
AddTo(GBP,1,2), lb= Load AddTo(GBP,1,-2), L5= l5 ';' l6 ';' l7 ';' l8 ';' l9
';' l0, TR= l3 ';' l4 ';' Pt ';' L5, IF4= if>0(GBP,2,TR,lb),
WB4= l1 ';' l2 ';' IF4, WH4= while>0(GBP,1,WB4);
set m1= GBP:=0, m2= SBP:=1, m3= (SBP,pn):=(p0+1), m4= (SBP,pn+1):=pn, M4= m1
';' m2 ';' m3 ';' m4;
set s1=IExec(M4,P,s), a=GBP, P1 = P;
A2: 7+n >= 7 by NAT_1:11;
A3: card L5= card (l5 ';' l6 ';' l7 ';' l8 ';' l9 )+1 by SCMP_GCD:4
.= card (l5 ';' l6 ';' l7 ';' l8)+1+1 by SCMP_GCD:4
.= 4+1+1 by Th4;
A4: card WB4=card (l1 ';' l2) + card IF4 by AFINSQ_1:17
.=2+card IF4 by SCMP_GCD:5
.=2+(card TR +card lb +2) by SCMPDS_6:65
.=2+(card TR +1 +2) by COMPOS_1:54
.=2+(card (l3 ';' l4 ';' Pt)+ card L5+1+2) by AFINSQ_1:17
.=2+(card (l3 ';' l4) + card Pt + card L5+1+2) by AFINSQ_1:17
.=2+(2+ 38 + card L5+1+2) by Th9,SCMP_GCD:5
.=51 by A3;
thus card QuickSort(n,p0)=card M4 + card WH4 by AFINSQ_1:17
.=4 + card WH4 by Th4
.=4 + (51+2) by A4,SCMPDS_8:17
.=57;
assume
A5: p0 >= 7;
then pn >= 7+n by XREAL_1:6;
then
A6: pn >= 7 by A2,XXREAL_0:2;
A7: for t be State of SCMPDS,Q
for m1 be Nat st t.a=0 & t.SBP=m1 holds
IExec(l3 ';' l4,Q,Initialize t).a2=t.intpos(m1+pn)
& IExec(l3 ';' l4,Q,Initialize t).a4=t.intpos(m1+pn+
1) & for i be Nat st i <> 2 & i <> 4
holds IExec(l3 ';' l4,Q,Initialize t).intpos i=t.intpos i
proof
let t be State of SCMPDS, Q;
let m1 be Nat;
set t0=Initialize t, t2=IExec(l3 ';' l4,Q,Initialize t),
t3=Exec(l3, t0), mp=m1+pn,
Q0 = Q;
assume that
A8: t.a=0 and
A9: t.SBP=m1;
A10: t0.a =0 by A8,SCMPDS_5:15;
then
A11: DataLoc(t0.a,2)=intpos (0+2) by SCMP_GCD:1;
then t3.a=0 by A10,AMI_3:10,SCMPDS_2:47;
then
A12: DataLoc(t3.a,4)=intpos (0+4) by SCMP_GCD:1;
A13: t0.SBP =m1 by A9,SCMPDS_5:15;
then
A14: t3.SBP=m1 by A11,AMI_3:10,SCMPDS_2:47;
mp >= 0+7 by A6,XREAL_1:7;
then mp+1 >= 7+1 by XREAL_1:6;
then mp+1 > 2 by XXREAL_0:2;
then
A15: t3.intpos(mp+1)=t0.intpos(mp+1) by A11,AMI_3:10,SCMPDS_2:47
.=t.intpos(mp+1) by SCMPDS_5:15;
A16: t3.a2=t0.DataLoc(t0.SBP,pn) by A11,SCMPDS_2:47
.=t0.intpos mp by A13,SCMP_GCD:1
.=t.intpos mp by SCMPDS_5:15;
thus t2.a2=Exec(l4, t3).a2 by SCMPDS_5:42
.=t.intpos mp by A16,A12,AMI_3:10,SCMPDS_2:47;
thus t2.a4=Exec(l4, t3).a4 by SCMPDS_5:42
.=t3.DataLoc(t3.SBP,pn+1) by A12,SCMPDS_2:47
.=t.intpos(mp+1) by A14,A15,SCMP_GCD:1;
hereby
let i be Nat;
assume that
A17: i<>2 and
A18: i <> 4;
thus t2.intpos i =Exec(l4, t3).intpos i by SCMPDS_5:42
.=t3.intpos i by A12,A18,AMI_3:10,SCMPDS_2:47
.=t0.intpos i by A11,A17,AMI_3:10,SCMPDS_2:47
.=t.intpos i by SCMPDS_5:15;
end;
end;
A19: for t being State of SCMPDS,Q
for m,m1 be Nat st t.a=0 & t.SBP=m1 &
m1=m+1 holds IExec(L5,Q,Initialize t).a=0 & IExec(L5,Q,Initialize t).SBP=m1+2
& IExec(L5,Q,Initialize t).intpos (m1+pn
)=t.intpos (m1+pn) & IExec(L5,Q,Initialize t).intpos (m1+pn+1)=t.a4-1
& IExec(L5,Q,Initialize t).intpos (
m1+pn+2)=t.a4+1 & IExec(L5,Q,Initialize t).intpos (m1+pn+3)
=t.intpos (m1+pn+1)
& for i be
Nat st i >= 8 & i < m1+pn
holds IExec(L5,Q,Initialize t).intpos i=t.intpos i
proof
let t be State of SCMPDS,Q;
let m,m1 be Nat;
assume that
A20: t.a=0 and
A21: t.SBP=m1 and
A22: m1=m+1;
set t0=Initialize t, t1=IExec(L5,Q,Initialize t), Q0 = Q,
t2=IExec(l5 ';' l6 ';' l7 ';' l8 ';' l9,Q,Initialize t),
t3=IExec(l5 ';' l6 ';' l7 ';' l8,Q,Initialize t),
t4=IExec(l5 ';' l6 ';' l7, Q,Initialize t),
t5= IExec(l5 ';' l6,Q,Initialize t), t6=Exec(l5,t0), mp=m1+pn;
A23: mp+3 <> mp+1;
m1 >= 1 by A22,NAT_1:11;
then
A24: mp >= 1+7 by A6,XREAL_1:7;
then
A25: mp+1 >= 8+1 by XREAL_1:6;
then
A26: mp+1 > 4 by XXREAL_0:2;
A27: mp+1 > 1 by A25,XXREAL_0:2;
A28: mp+0 <> mp+2;
A29: mp > 1 by A24,XXREAL_0:2;
A30: mp+1 <> mp+2;
A31: t0.SBP =m1 by A21,SCMPDS_5:15;
then
A32: DataLoc(t0.SBP,pn+3)=intpos (mp+3) by SCMP_GCD:1;
A33: now
let i be Nat;
assume i<>mp+3;
hence t6.intpos i=t0.intpos i by A32,AMI_3:10,SCMPDS_2:47
.=t.intpos i by SCMPDS_5:15;
end;
mp+0 <> mp+3;
then
A34: t6.intpos mp=t.intpos mp by A33;
A35: mp+1 <> mp+2;
A36: mp+3 <> mp+2;
A37: mp+3 >= 8+3 by A24,XREAL_1:6;
then
A38: mp+3 > 1 by XXREAL_0:2;
mp+3 > 1 by A37,XXREAL_0:2;
then
A39: t6.SBP=m1 by A21,A33;
then
A40: DataLoc(t6.SBP,pn+1)=intpos (mp+1) by SCMP_GCD:1;
A41: now
let i be Nat;
assume
A42: i<>mp+1;
thus t5.intpos i=Exec(l6, t6).intpos i by SCMPDS_5:42
.=t6.intpos i by A40,A42,AMI_3:10,SCMPDS_2:47;
end;
mp+1 > 1 by A25,XXREAL_0:2;
then
A43: t5.SBP=m1 by A39,A41;
then
A44: DataLoc(t5.SBP,pn+2)=intpos (mp+2) by SCMP_GCD:1;
A45: now
let i be Nat;
assume
A46: i<>mp+2;
thus t4.intpos i=Exec(l7, t5).intpos i by SCMPDS_5:41
.=t5.intpos i by A44,A46,AMI_3:10,SCMPDS_2:47;
end;
t6.intpos (mp+3)=t0.DataLoc(t0.SBP,pn+1) by A32,SCMPDS_2:47
.=t0.intpos(m1+(pn+1)) by A31,SCMP_GCD:1
.=t.intpos (mp+1) by SCMPDS_5:15;
then t5.intpos(mp+3)=t.intpos(mp+1) by A41,A23;
then
A47: t4.intpos(mp+3)=t.intpos(mp+1) by A45,A36;
A48: mp+3 > 4 by A37,XXREAL_0:2;
then
A49: t6.a4=t.a4 by A33;
A50: mp+2 >= 8+2 by A24,XREAL_1:6;
then
A51: mp+2 > 1 by XXREAL_0:2;
mp+2 > 1 by A50,XXREAL_0:2;
then
A52: t4.SBP=m1 by A43,A45;
then
A53: DataLoc(t4.SBP,pn+1)=intpos (mp+1) by SCMP_GCD:1;
A54: now
let i be Nat;
assume
A55: i<>mp+1;
thus t3.intpos i=Exec(l8, t4).intpos i by SCMPDS_5:41
.=t4.intpos i by A53,A55,AMI_3:10,SCMPDS_2:48;
end;
m1+pn+1 > 1 by A25,XXREAL_0:2;
then
A56: t3.SBP=m1 by A52,A54;
then
A57: DataLoc(t3.SBP,pn+2)=intpos (mp+2) by SCMP_GCD:1;
A58: now
let i be Nat;
assume
A59: i<>mp+2;
thus t2.intpos i=Exec(l9, t3).intpos i by SCMPDS_5:41
.=t3.intpos i by A57,A59,AMI_3:10,SCMPDS_2:48;
end;
A60: t6.a=0 by A20,A33;
then
A61: t5.a=0 by A41;
then t4.a=0 by A45;
then t3.a=0 by A54;
then
A62: t2.a=0 by A58;
then
A63: DataLoc(t2.a,1)=intpos (0+1) by SCMP_GCD:1;
mp+2 > 1 by A50,XXREAL_0:2;
then
A64: t2.SBP=m1 by A56,A58;
A65: now
let i be Nat;
assume i<>1;
then
A66: intpos i <> DataLoc(t2.a,1) by A62,AMI_3:10,SCMP_GCD:1;
thus t1.intpos i=Exec(l0, t2).intpos i by SCMPDS_5:41
.=t2.intpos i by A66,SCMPDS_2:48;
end;
hence t1.a=0 by A62;
A67: mp+0 <> mp+2;
mp+0 <> mp+1;
then t5.intpos mp=t.intpos mp by A34,A41;
then
A68: t4.intpos mp=t.intpos mp by A45,A67;
thus t1.SBP=Exec(l0, t2).SBP by SCMPDS_5:41
.=m1+2 by A64,A63,SCMPDS_2:48;
mp+0 <> mp+1;
then t3.intpos mp=t.intpos mp by A68,A54;
then t2.intpos mp=t.intpos mp by A58,A28;
hence t1.intpos mp=t.intpos mp by A65,A29;
A69: mp+1 <> mp+2;
t4.intpos(mp+2)=Exec(l7, t5).intpos(mp+2) by SCMPDS_5:41
.=t5.DataLoc(t5.GBP,4) by A44,SCMPDS_2:47
.=t5.intpos(0+4) by A61,SCMP_GCD:1
.=t.a4 by A49,A41,A26;
then
A70: t3.intpos(mp+2)=t.a4 by A54,A30;
t5.intpos (mp+1)=Exec(l6, t6).intpos(mp+1) by SCMPDS_5:42
.=t6.DataLoc(t6.GBP,4) by A40,SCMPDS_2:47
.=t6.intpos(0+4) by A60,SCMP_GCD:1
.=t.a4 by A33,A48;
then
A71: t4.intpos (mp+1)=t.a4 by A45,A69;
t3.intpos(mp+1)=Exec(l8, t4).intpos(mp+1) by SCMPDS_5:41
.=t.a4+-1 by A71,A53,SCMPDS_2:48
.=t.a4-1;
then t2.intpos(mp+1)=t.a4-1 by A58,A35;
hence t1.intpos(mp+1)=t.a4-1 by A65,A27;
t2.intpos(mp+2)=Exec(l9, t3).intpos(mp+2) by SCMPDS_5:41
.=t.a4+1 by A70,A57,SCMPDS_2:48;
hence t1.intpos(mp+2)=t.a4+1 by A65,A51;
A72: mp+3 <> mp+2;
mp+3 <> mp+1;
then t3.intpos(mp+3)=t.intpos(mp+1) by A47,A54;
then t2.intpos(mp+3)=t.intpos(mp+1) by A58,A72;
hence t1.intpos(mp+3)=t.intpos(mp+1) by A65,A38;
hereby
A73: mp <= mp+3 by NAT_1:11;
A74: mp <= mp+2 by NAT_1:11;
A75: mp <= mp+1 by NAT_1:11;
let i be Nat;
assume that
A76: i >= 8 and
A77: i < mp;
i > 1 by A76,XXREAL_0:2;
hence t1.intpos i=t2.intpos i by A65
.=t3.intpos i by A58,A77,A74
.=t4.intpos i by A54,A77,A75
.=t5.intpos i by A45,A77,A74
.=t6.intpos i by A41,A77,A75
.=t.intpos i by A33,A77,A73;
end;
end;
A78: for t be 0-started State of SCMPDS,Q
for m,m1,md be Nat,n4 be Integer,
f1,f2 be FinSequence of INT
st t.a=0 & t.SBP=m1 & m1=m+1 & t.intpos(m1+pn)=md &
md >= p0+1 & n4=t.intpos(m1+pn+1) & n4-md > 0 &
n4 <= pn & f1 is_FinSequence_on t,p0 & len f1=n &
f2 is_FinSequence_on IExec(TR,Q,t),p0 & len f2=n
holds IExec(TR,Q,t).a=0 & IExec(TR,Q,t).a1=m1+2 &
md= IExec(TR,Q,t).intpos(m1+pn)
& n4=IExec(TR,Q,t).intpos (m1+pn+3)
& (for j be Nat st 1<=j & j<m1 holds IExec(TR,Q,t).
intpos(pn+j)=t.intpos(pn+j)) & f1,f2 are_fiberwise_equipotent &
ex m4 be Nat st md <= m4 & m4 <= n4
& m4-1=IExec(TR,Q,t).intpos (m1+pn+1) & m4+
1=IExec(TR,Q,t).intpos (m1+pn+2) &
(for i be Nat st md<=i & i < m4
holds IExec(TR,Q,t).intpos m4 >=
IExec(TR,Q,t).intpos i)
& (for i be Nat st m4 < i & i <= n4
holds IExec(TR,Q,t).intpos m4 <=
IExec(TR,Q,t).intpos i)
& for j be Nat st p0+1<=j & j<md or n4<j & j <= p0+n
holds IExec(TR,Q,t).intpos j = t.intpos j
proof
let t be 0-started State of SCMPDS, Q;
let m,m1,md be Nat,n4 be Integer, f1,f2 be
FinSequence of INT;
A79: Initialize t = t by MEMSTR_0:44;
set t1=IExec(TR,Q,t), lPt=l3 ';' l4 ';' Pt,
t2=IExec(lPt,Q,t), Q2 = Q,
t4=IExec(l3 ';' l4,Q,t), mp=m1+pn, Q4 = Q;
A80: t4.a = (Initialize t4).a by SCMPDS_5:15;
A81: t4.a2 = (Initialize t4).a2 by SCMPDS_5:15;
A82: t4.a4 = (Initialize t4).a4 by SCMPDS_5:15;
A83: t4.a1 = (Initialize t4).a1 by SCMPDS_5:15;
set tp=IExec(Pt,Q4,Initialize t4);
assume that
A84: t.a=0 and
A85: t.SBP=m1 and
A86: m1=m+1 and
A87: t.intpos mp=md and
A88: md >= p0+1 and
A89: n4=t.intpos (mp+1) and
A90: n4-md > 0 and
A91: n4 <= pn;
A92: t4.a=0 by A7,A84,A85,A79;
assume that
A93: f1 is_FinSequence_on t,p0 and
A94: len f1=n;
A95: p0+1 >= 7+1 by A5,XREAL_1:6;
A96: now
let i be Nat;
assume that
A97: 1 <= i and
A98: i <= len f1;
p0+i >= p0+1 by A97,XREAL_1:6;
then
A99: p0+i >= 8 by A95,XXREAL_0:2;
then
A100: p0+i > 2 by XXREAL_0:2;
A101: p0+i > 4 by A99,XXREAL_0:2;
thus f1.i=t.intpos(p0+i) by A93,A97,A98
.=t4.intpos(p0+i) by A7,A84,A85,A100,A101,A79;
end;
A102: t4.a4=n4 by A7,A84,A85,A89,A79;
A103: t4.a4=t.intpos(mp+1) by A7,A84,A85,A79;
A104: t4.a2=t.intpos mp by A7,A84,A85,A79;
then Pt is_closed_on Initialize t4,Q4 by A5,A87,A88,A92,Th10,A80,A81;
then
A105: Pt is_closed_on t4,Q4 by SCMPDS_6:125;
Pt is_halting_on Initialize t4,Q4 by A5,A87,A88,A104,A92,Th10,A80,A81;
then
A106: Pt is_halting_on t4,Q4 by SCMPDS_6:126;
then
A107: lPt is_closed_on t,Q by A105,A79,SCPISORT:9;
assume that
A108: f2 is_FinSequence_on IExec(TR,Q,t),p0 and
A109: len f2=n;
consider f4 be FinSequence of INT such that
A110: len f4=n and
A111: for i be Nat st 1<=i & i <= len f4 holds f4.i=tp.
intpos (p0+i) by SCPISORT:1;
A112: f1 is_FinSequence_on Initialize t4,p0
proof let i be Nat;
assume 1 <= i & i <= len f1;
then f1.i=t4.intpos(p0+i) by A96;
hence thesis by SCMPDS_5:15;
end;
A113: f4 is_FinSequence_on tp,p0 by A111;
then consider m4 be Nat such that
A114: m4=tp.a4 and
A115: md <= m4 and
A116: m4 <= t4.a4 and
A117: for i be Nat st md<=i & i < m4 holds tp.intpos m4 >=
tp.intpos i and
A118: for i be Nat st m4 < i & i <= t4.a4 holds tp.intpos
m4 <= tp.intpos i and
A119: for i be Nat st i >= p0+1 & (i < t4.a2 or i > t4.a4)
holds tp.intpos i = (Initialize t4).intpos i
by A5,A87,A88,A89,A90,A91,A94,A104,A103,A92,A112,A110,Th11,A80,A81,A82;
tp.a=0 by A5,A87,A88,A89,A90,A91,A94,A104,A103,A92,A112,A110,A113,Th11,A80
,A81,A82;
then
A120: t2.a=0 by A105,A106,SCPISORT:7;
A121: lPt is_halting_on t,Q by A105,A106,A79,SCPISORT:9;
tp.a1=t4.a1 by A5,A87,A88,A89,A90,A91,A94,A104,A103,A92,A112,A110,A113,Th11
,A80,A81,A82,A83;
then
A122: t2.SBP=t4.a1 by A105,A106,SCPISORT:7
.=m1 by A7,A84,A85,A79;
then
A123: IExec(L5,Q2,Initialize t2).intpos mp=t2.intpos mp by A19,A86,A120;
IExec(L5,Q2,Initialize t2).a=0 by A19,A86,A120,A122;
hence t1.a=0 by A107,A121,SCPISORT:6;
IExec(L5,Q2,Initialize t2).SBP=m1+2 by A19,A86,A120,A122;
hence t1.a1=m1+2 by A107,A121,SCPISORT:6;
A124: IExec(L5,Q2,Initialize t2).intpos (mp+3)=t2.intpos (mp+1)
by A19,A86,A120,A122;
A125: IExec(L5,Q2,Initialize t2).intpos (mp+2)=t2.a4+1 by A19,A86,A120,A122;
A126: IExec(L5,Q2,Initialize t2).intpos (mp+1)=t2.a4-1 by A19,A86,A120,A122;
A127: 1+pn > pn by XREAL_1:29;
A128: m1 >= 1 by A86,NAT_1:11;
then mp >= 1+pn by XREAL_1:6;
then
A129: mp > pn by A127,XXREAL_0:2;
then
A130: mp > t4.a4 by A91,A102,XXREAL_0:2;
then
A131: m4 < mp by A116,XXREAL_0:2;
A132: dom f2 = Seg n by A109,FINSEQ_1:def 3;
A133: now
let i be Nat;
reconsider a = i as Nat;
assume
A134: i in dom f2;
then
A135: 1 <= i by A132,FINSEQ_1:1;
then p0+i >= p0+1 by XREAL_1:6;
then
A136: p0+i >= 8 by A95,XXREAL_0:2;
A137: i <= n by A132,A134,FINSEQ_1:1;
then p0+i <= pn by XREAL_1:6;
then
A138: p0+i < mp by A129,XXREAL_0:2;
thus f2.i = t1.intpos(p0+a) by A108,A109,A135,A137
.=IExec(L5,Q2,Initialize t2).intpos(p0+a) by A107,A121,SCPISORT:6
.=t2.intpos (p0+a) by A19,A86,A120,A122,A136,A138
.=tp.intpos (p0+a) by A105,A106,SCPISORT:7
.=f4.i by A110,A111,A135,A137;
end;
A139: mp >= 1+7 by A6,A128,XREAL_1:7;
then
A140: mp > 4 by XXREAL_0:2;
A141: mp+1 > mp by XREAL_1:29;
then
A142: mp+1 > t4.a4 by A130,XXREAL_0:2;
A143: pn >= p0 by NAT_1:11;
then
A144: mp >= p0+1 by A128,XREAL_1:7;
then
A145: mp+1 >= p0+1 by A141,XXREAL_0:2;
A146: mp+1 >= 8+1 by A139,XREAL_1:6;
then
A147: mp+1 > 4 by XXREAL_0:2;
A148: t4.intpos mp = (Initialize t4).intpos mp by SCMPDS_5:15;
A149: t4.intpos (mp+1) = (Initialize t4).intpos (mp+1) by SCMPDS_5:15;
mp > 2 by A139,XXREAL_0:2;
hence md=t4.intpos mp by A7,A84,A85,A87,A140,A79
.=tp.intpos mp by A119,A144,A130,A148
.=IExec(L5,Q2,Initialize t2).intpos mp by A105,A106,A123,SCPISORT:7
.=t1.intpos mp by A107,A121,SCPISORT:6;
mp+1 > 2 by A146,XXREAL_0:2;
hence n4=t4.intpos (mp+1) by A7,A84,A85,A89,A147,A79
.=tp.intpos (mp+1) by A119,A145,A142,A149
.=IExec(L5,Q2,Initialize t2).intpos (mp+3) by A105,A106,A124,SCPISORT:7
.=t1.intpos (mp+3) by A107,A121,SCPISORT:6;
hereby
let j be Nat;
assume that
A150: 1<=j and
A151: j<m1;
A152: pn+j < mp by A151,XREAL_1:6;
pn+j >= pn+1 by A150,XREAL_1:6;
then pn+j > pn by A127,XXREAL_0:2;
then
A153: pn+j > t4.a4 by A91,A102,XXREAL_0:2;
A154: pn+j >= p0+1 by A143,A150,XREAL_1:7;
A155: pn+j >= 1+7 by A6,A150,XREAL_1:7;
then
A156: pn+j > 2 by XXREAL_0:2;
A157: pn+j > 4 by A155,XXREAL_0:2;
A158: t4.intpos (pn+j) = (Initialize t4).intpos (pn+j) by SCMPDS_5:15;
thus t1.intpos(pn+j)=IExec(L5,Q2,Initialize t2).intpos(pn+j)
by A107,A121,SCPISORT:6
.=t2.intpos (pn+j) by A19,A86,A120,A122,A155,A152
.=tp.intpos (pn+j) by A105,A106,SCPISORT:7
.=t4.intpos (pn+j) by A119,A154,A153,A158
.=t.intpos(pn+j) by A7,A84,A85,A156,A157,A79;
end;
f1,f4 are_fiberwise_equipotent by A5,A87,A88,A89,A90,A91,A94,A104,A103,A92
,A112,A110,A113,Th11,A80,A81,A82;
hence f1,f2 are_fiberwise_equipotent by A109,A110,A133,FINSEQ_2:9;
take m4;
thus md <= m4 & m4 <= n4 by A7,A84,A85,A89,A115,A116,A79;
thus m4-1=t2.a4-1 by A114,A105,A106,SCPISORT:7
.=t1.intpos (mp+1) by A107,A121,A126,SCPISORT:6;
thus m4+1=t2.a4+1 by A114,A105,A106,SCPISORT:7
.=t1.intpos (mp+2) by A107,A121,A125,SCPISORT:6;
A159: md >= 8 by A88,A95,XXREAL_0:2;
then
A160: m4 >= 8 by A115,XXREAL_0:2;
hereby
A161: tp.intpos m4=t2.intpos m4 by A105,A106,SCPISORT:7
.=IExec(L5,Q2,Initialize t2).intpos m4 by A19,A86,A120,A122,A131,A160
.=t1.intpos m4 by A107,A121,SCPISORT:6;
let i be Nat;
assume that
A162: md<=i and
A163: i < m4;
A164: i < mp by A131,A163,XXREAL_0:2;
A165: i >= 8 by A159,A162,XXREAL_0:2;
tp.intpos i=t2.intpos i by A105,A106,SCPISORT:7
.=IExec(L5,Q2,Initialize t2).intpos i by A19,A86,A120,A122,A164,A165
.=t1.intpos i by A107,A121,SCPISORT:6;
hence t1.intpos m4 >= t1.intpos i by A117,A162,A163,A161;
end;
hereby
A166: tp.intpos m4=t2.intpos m4 by A105,A106,SCPISORT:7
.=IExec(L5,Q2,Initialize t2).intpos m4 by A19,A86,A120,A122,A131,A160
.=t1.intpos m4 by A107,A121,SCPISORT:6;
let i be Nat;
assume that
A167: m4 < i and
A168: i <= n4;
A169: i < mp by A89,A103,A130,A168,XXREAL_0:2;
i >= md by A115,A167,XXREAL_0:2;
then
A170: i >= 8 by A159,XXREAL_0:2;
tp.intpos i=t2.intpos i by A105,A106,SCPISORT:7
.=IExec(L5,Q2,Initialize t2).intpos i by A19,A86,A120,A122,A169,A170
.=t1.intpos i by A107,A121,SCPISORT:6;
hence t1.intpos m4 <= t1.intpos i by A102,A118,A167,A168,A166;
end;
hereby
let j be Nat;
assume that
A171: p0+1<=j & j<md or n4<j & j <= pn;
A172: now
per cases by A171;
suppose
A173: p0+1<=j & j<md;
hence j >= p0+1 & (j < t4.a2 or j > t4.a4) by A7,A84,A85,A87,A79;
md < mp by A115,A131,XXREAL_0:2;
hence j < mp by A173,XXREAL_0:2;
end;
suppose
A174: n4<j & j <= pn;
n4 >= md by A102,A115,A116,XXREAL_0:2;
then j >= md by A174,XXREAL_0:2;
hence j >= p0+1 by A88,XXREAL_0:2;
thus j < t4.a2 or j > t4.a4 by A7,A84,A85,A89,A174,A79;
thus j < mp by A129,A174,XXREAL_0:2;
end;
end;
then
A175: j >= 8 by A95,XXREAL_0:2;
then
A176: j > 2 by XXREAL_0:2;
A177: j > 4 by A175,XXREAL_0:2;
A178: t4.intpos j = (Initialize t4).intpos j by SCMPDS_5:15;
thus t1.intpos j=IExec(L5,Q2,Initialize t2).intpos j
by A107,A121,SCPISORT:6
.=t2.intpos j by A19,A86,A120,A122,A172,A175
.=tp.intpos j by A105,A106,SCPISORT:7
.=t4.intpos j by A119,A172,A178
.=t.intpos j by A7,A84,A85,A176,A177,A79;
end;
end;
A179: for t be State of SCMPDS,Q
for m be Nat st t.a=0 & t.SBP=m holds
IExec(l1 ';' l2,Q,Initialize t).a2=t.intpos (m+pn+1)-t.intpos (m+pn)
& for i be Nat st i <> 2
holds IExec(l1 ';' l2,Q,Initialize t).intpos i=t.intpos i
proof
let t be State of SCMPDS,Q;
let m be Nat;
assume that
A180: t.a=0 and
A181: t.SBP=m;
set t0=Initialize t,
t1=IExec(l1 ';' l2, Q,Initialize t), t2=Exec(l1, t0), mp=m+pn;
A182: t0.a =0 by A180,SCMPDS_5:15;
then
A183: DataLoc(t0.a,2)=intpos (0+2) by SCMP_GCD:1;
then t2.a=0 by A182,AMI_3:10,SCMPDS_2:47;
then
A184: DataLoc(t2.a,2)=intpos (0+2) by SCMP_GCD:1;
A185: t0.SBP =m by A181,SCMPDS_5:15;
then
A186: t2.SBP=m by A183,AMI_3:10,SCMPDS_2:47;
mp >= 0+7 by A6,XREAL_1:7;
then mp > 2 by XXREAL_0:2;
then
A187: t2.intpos mp=t0.intpos mp by A183,AMI_3:10,SCMPDS_2:47
.=t.intpos mp by SCMPDS_5:15;
A188: t2.a2=t0.DataLoc(t0.SBP,pn+1) by A183,SCMPDS_2:47
.=t0.intpos (m+(pn+1)) by A185,SCMP_GCD:1
.=t.intpos (mp+1) by SCMPDS_5:15;
thus t1.a2 =Exec(l2, t2).a2 by SCMPDS_5:42
.=t2.a2-t2.DataLoc(t2.SBP,pn) by A184,SCMPDS_2:50
.=t.intpos (mp+1)-t.intpos mp by A186,A188,A187,SCMP_GCD:1;
hereby
let i be Nat;
assume
A189: i <> 2;
thus t1.intpos i=Exec(l2, t2).intpos i by SCMPDS_5:42
.=t2.intpos i by A184,A189,AMI_3:10,SCMPDS_2:50
.=t0.intpos i by A183,A189,AMI_3:10,SCMPDS_2:47
.=t.intpos i by SCMPDS_5:15;
end;
end;
A190: pn+1 >= 7+1 by A6,XREAL_1:6;
A191: for t be 0-started State of SCMPDS,Q
for m be Nat st t.a=0 & t.SBP=m & t.
intpos (m+pn+1) <= t.intpos (m+pn) holds IExec(WB4,Q,t).a=0
& IExec(WB4,Q,t).a1=m-2
& (for j be Nat st 1<=j & j<m
holds IExec(WB4,Q,t).intpos(pn+j)=t.
intpos(pn+j)) & for j be Nat st 1<=j & j <= n
holds IExec(WB4,Q,t).
intpos (p0+j) = t.intpos (p0+j)
proof
let t be 0-started State of SCMPDS,Q;
let m be Nat;
set mp=m+pn, t1=IExec(l1 ';' l2,Q,t), Q1 = Q;
A192: Initialize t = t by MEMSTR_0:44;
assume that
A193: t.a=0 and
A194: t.SBP=m and
A195: t.intpos (mp+1) <= t.intpos mp;
A196: t1.a1=m by A179,A193,A194,A192;
A197: t1.a2=t.intpos (mp+1)-t.intpos mp by A179,A193,A194,A192;
then
A198: t1.a2 <= 0 by A195,XREAL_1:47;
set li=AddTo(GBP,1,-2), t0=Initialize t1;
A199: lb is_halting_on t1,Q1 by SCMPDS_6:21;
A200: t1.a=0 by A179,A193,A194,A192;
then
A201: DataLoc(t1.a,2)=intpos(0+2) by SCMP_GCD:1;
A202: t0.a=0 by A200,SCMPDS_5:15;
then
A203: DataLoc(t0.a,1)=intpos (0+1) by SCMP_GCD:1;
A204: lb is_closed_on t1,Q1 by SCMPDS_6:20;
then
A205: IF4 is_halting_on t1,Q1 by A201,A198,A199,SCMPDS_6:69;
A206: IF4 is_closed_on t1,Q1 by A201,A198,A204,A199,SCMPDS_6:69;
A207: now
let x;
A208: (Initialize t1).GBP = t1.GBP by SCMPDS_5:15;
A209: (Initialize t1).DataLoc(t1.GBP,2) = t1.DataLoc(t1.GBP,2) by SCMPDS_5:15;
thus IExec(WB4,Q,t).x = IExec(IF4,Q1,Initialize t1).x
by A206,A205,SCPISORT:7
.=IExec(lb,Q1,Initialize t1).x
by A195,A197,A201,A208,A209,SCMPDS_6:74,XREAL_1:47
.=Exec(li,t0).x by SCMPDS_5:40;
end;
A210: now
let i be Nat;
assume i <> 1;
then
A211: intpos i <> DataLoc(t0.a,1) by A202,AMI_3:10,SCMP_GCD:1;
thus IExec(WB4,Q,t).intpos i=Exec(li,t0).intpos i by A207
.=t0.intpos i by A211,SCMPDS_2:48
.=t1.intpos i by SCMPDS_5:15;
end;
hence IExec(WB4,Q,t).a=0 by A200;
thus IExec(WB4,Q,t).a1=Exec(li,t0).a1 by A207
.=t0.a1+-2 by A203,SCMPDS_2:48
.=t0.a1-2
.=m-2 by A196,SCMPDS_5:15;
hereby
let j be Nat;
assume that
A212: 1<=j and
j<m;
pn+j >= pn+1 by A212,XREAL_1:6;
then
A213: pn+j >= 8 by A190,XXREAL_0:2;
then
A214: pn+j > 2 by XXREAL_0:2;
pn+j > 1 by A213,XXREAL_0:2;
hence IExec(WB4,Q,t).intpos(pn+j)=t1.intpos(pn+j) by A210
.=t.intpos(pn+j) by A179,A193,A194,A214,A192;
end;
hereby
let j be Nat;
assume that
A215: 1<=j and
j<=n;
A216: p0+1 >= 7+1 by A5,XREAL_1:6;
p0+j >= p0+1 by A215,XREAL_1:6;
then
A217: p0+j >= 8 by A216,XXREAL_0:2;
then
A218: p0+j > 2 by XXREAL_0:2;
p0+j > 1 by A217,XXREAL_0:2;
hence IExec(WB4,Q,t).intpos(p0+j)=t1.intpos(p0+j) by A210
.=t.intpos(p0+j) by A179,A193,A194,A218,A192;
end;
end;
A219: for t be State of SCMPDS,Q
for m1,md be Nat st t.a=0 & t.SBP=m1 &
t.intpos(m1+pn)=md & md >= p0+1 & t.intpos(m1+pn+1)-md > 0 holds TR
is_closed_on t,Q & TR is_halting_on t,Q
proof
let t be State of SCMPDS,Q;
let m1,md be Nat;
set lPt=l3 ';' l4 ';' Pt, t2=IExec(l3 ';' l4,Q,Initialize t),
mp=m1+pn, Q2 = Q;
A220: t2.a = (Initialize t2).a by SCMPDS_5:15;
A221: t2.a2 = (Initialize t2).a2 by SCMPDS_5:15;
assume that
A222: t.a=0 and
A223: t.SBP=m1 and
A224: t.intpos mp=md and
A225: md >= p0+1 and
t.intpos (mp+1)-md > 0;
A226: t2.a=0 by A7,A222,A223;
A227: t2.a2=t.intpos mp by A7,A222,A223;
then Pt is_halting_on Initialize t2,Q2 by A5,A224,A225,A226,Th10,A220,A221;
then
A228: Pt is_halting_on t2,Q2 by SCMPDS_6:126;
Pt is_closed_on Initialize t2,Q2 by A5,A224,A225,A227,A226,Th10,A220,A221;
then
A229: Pt is_closed_on t2,Q2 by SCMPDS_6:125;
then
A230: lPt is_halting_on t,Q by A228,SCPISORT:9;
lPt is_closed_on t,Q by A229,A228,SCPISORT:9;
hence thesis by A230,SCPISORT:8;
end;
A231: for t be 0-started State of SCMPDS,Q
for m,m1,md be Nat,n4 be Integer, f1,
f2 be FinSequence of INT st t.a=0 & t.SBP=m1 & m1=m+1 & t.intpos(m1+pn)=md & md
>= p0+1 & n4=t.intpos(m1+pn+1) & n4-md > 0 & n4 <= pn & f1 is_FinSequence_on t,
p0 & len f1=n & f2 is_FinSequence_on IExec(WB4,Q,t),p0 & len f2=n
holds IExec(WB4,Q,t).a=0 & IExec(WB4,Q,t).a1=m1+2 &
md=IExec(WB4,Q,t).intpos(m1+pn)
& n4=IExec(WB4,Q,t).intpos (m1+pn+3) &
(for j be Nat st (1<=j & j<m1)
holds IExec(WB4,Q,t).intpos(pn+j)=t.intpos(pn+j)) &
f1,f2 are_fiberwise_equipotent & ex m4 be
Nat st md <= m4 & m4 <= n4
& m4-1=IExec(WB4,Q,t).intpos (m1+pn+1) & m4
+1=IExec(WB4,Q,t).intpos (m1+pn+2)
& (for i be Nat st md<=i & i < m4
holds IExec(WB4,Q,t).intpos m4 >=
IExec(WB4,Q,t).intpos i)
& (for i be Nat st m4 < i & i <= n4
holds IExec(WB4,Q,t).intpos m4 <=
IExec(WB4,Q,t).intpos i)
& for j be Nat st p0+1<=j & j<md or n4<j & j <= p0+n
holds IExec(WB4,Q,t).intpos j = t.intpos j
proof
let t be 0-started State of SCMPDS,Q;
let m,m1,md be Nat,n4 be Integer, f1,f2 be
FinSequence of INT;
A232: Initialize t = t by MEMSTR_0:44;
set mp=m1+pn, t1=IExec(l1 ';' l2,Q,t), Q1 = Q;
assume that
A233: t.a=0 and
A234: t.SBP=m1 and
A235: m1=m+1 and
A236: t.intpos mp=md and
A237: md >= p0+1 and
A238: n4=t.intpos (mp+1) and
A239: n4-md > 0 and
A240: n4 <= pn;
A241: t1.a2 > 0 by A179,A233,A234,A236,A238,A239,A232;
A242: mp >= 0+7 by A6,XREAL_1:7;
then mp > 2 by XXREAL_0:2;
then
A243: t1.intpos mp=md by A179,A233,A234,A236,A232;
assume that
A244: f1 is_FinSequence_on t,p0 and
A245: len f1=n;
A246: p0+1>= 7+1 by A5,XREAL_1:6;
now
let i be Nat;
assume that
A247: 1 <= i and
A248: i <= len f1;
p0+i >= p0+1 by A247,XREAL_1:6;
then p0+i >= 8 by A246,XXREAL_0:2;
then
A249: p0+i > 2 by XXREAL_0:2;
thus f1.i=t.intpos(p0+i) by A244,A247,A248
.= t1.intpos(p0+i) by A179,A233,A234,A249,A232;
end;
then
A250: f1 is_FinSequence_on t1,p0;
mp+1 >= 7+1 by A242,XREAL_1:6;
then mp+1 > 2 by XXREAL_0:2;
then
A251: n4=t1.intpos (mp+1) by A179,A233,A234,A238,A232;
A252: t1.a=0 by A179,A233,A234,A232;
then
A253: DataLoc(t1.a,2)=intpos(0+2) by SCMP_GCD:1;
A254: t1.SBP=m1 by A179,A233,A234,A232;
then
A255: TR is_halting_on t1,Q1 by A219,A237,A239,A243,A251,A252;
A256: TR is_halting_on Initialize t1,Q1
proof
Q1+*stop TR halts_on Initialize Initialize t1 by A255,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
A257: (Initialize t1).GBP = t1.GBP by SCMPDS_5:15;
A258: (Initialize t1).DataLoc(t1.GBP,2) = t1.DataLoc(t1.GBP,2) by SCMPDS_5:15;
A259: TR is_closed_on t1,Q1 by A219,A237,A239,A254,A243,A251,A252;
A260: TR is_closed_on Initialize t1,Q1
proof
for k being Nat holds
IC Comput(Q1+*stop TR,Initialize Initialize t1,k) in dom stop TR
by A259,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
then
A261: IF4 is_halting_on Initialize t1,Q1
by A253,A241,A257,A258,A256,SCMPDS_6:68;
A262: IF4 is_halting_on t1,Q1
proof
Q1+*stop IF4 halts_on Initialize Initialize t1 by A261,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
assume that
A263: f2 is_FinSequence_on IExec(WB4,Q,t),p0 and
A264: len f2=n;
A265: IF4 is_closed_on Initialize t1,Q1
by A253,A241,A257,A258,A256,A260,SCMPDS_6:68;
A266: IF4 is_closed_on t1,Q1
proof
for k being Nat holds
IC Comput(Q1+*stop IF4,Initialize Initialize t1,k) in dom stop IF4
by A265,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
A267: now
let x;
thus IExec(WB4,Q,t).x = IExec(IF4,Q1,Initialize t1).x
by A266,A262,SCPISORT:7
.=IExec(TR,Q1,Initialize t1).x
by A253,A241,Th1,A257,A258,A260,A256;
end;
now
let i be Nat;
assume that
A268: 1 <= i and
A269: i <= len f2;
thus f2.i=IExec(WB4,Q,t).intpos(p0+i)
by A263,A268,A269
.= IExec(TR,Q1,Initialize t1).intpos(p0+i) by A267;
end;
then
A270: f2 is_FinSequence_on IExec(TR,Q1,Initialize t1),p0;
A271: (Initialize t1).SBP = t1.SBP by SCMPDS_5:15;
A272: (Initialize t1).a = t1.a by SCMPDS_5:15;
A273: (Initialize t1).intpos(m1+pn) = t1.intpos(m1+pn) by SCMPDS_5:15;
A274: (Initialize t1).intpos(m1+pn+1) = t1.intpos(m1+pn+1) by SCMPDS_5:15;
A275: f1 is_FinSequence_on Initialize t1,p0
proof let i be Nat;
assume 1 <= i & i <= len f1;
then f1.i=t1.intpos(p0+i) by A250;
hence thesis by SCMPDS_5:15;
end;
IExec(TR,Q1,Initialize t1).a=0
by A78,A235,A237,A239,A240,A245,A264,A254,A243,A251,A252,A270,A271,A272,
A273,A274
,A275;
hence IExec(WB4,Q,t).a=0 by A267;
consider m4 be Nat such that
A276: md <= m4 and
A277: m4 <= n4 and
A278: m4-1=IExec(TR,Q1,Initialize t1).intpos (mp+1) and
A279: m4+1=IExec(TR,Q1,Initialize t1).intpos (mp+2) and
A280: for i be Nat st md<=i & i < m4
holds IExec(TR,Q1,Initialize t1).
intpos m4 >= IExec(TR,Q1,Initialize t1).intpos i and
A281: for i be Nat st m4 < i & i <= n4
holds IExec(TR,Q1,Initialize t1).
intpos m4 <= IExec(TR,Q1,Initialize t1).intpos i and
A282: for j be Nat st p0+1<=j & j<md or n4<j & j <= p0+n
holds IExec(TR,Q1,Initialize t1).intpos j = (Initialize t1).intpos j
by A78,A235,A237,A239,A240,A245,A264,A254,A243,A251,A252,A270,A271,A272,A273,
A274,A275;
A283: for j be Nat st p0+1<=j & j<md or n4<j & j <= p0+n
holds IExec(TR,Q1,Initialize t1).intpos j = t1.intpos j
proof let j be Nat;
assume p0+1<=j & j<md or n4<j & j <= p0+n;
then IExec(TR,Q1,Initialize t1).intpos j = (Initialize t1).intpos j
by A282;
hence thesis by SCMPDS_5:15;
end;
IExec(TR,Q1,Initialize t1).a1=m1+2
by A78,A235,A237,A239,A240,A245,A264,A254,A243,A251,A252,A270,A271,A272,
A273,A274
,A275;
hence IExec(WB4,Q,t).a1=m1+2 by A267;
md=IExec(TR,Q1,Initialize t1).intpos mp
by A78,A235,A237,A239,A240,A245,A264,A254,A243,A251,A252,A270,A271,A272,
A273,A274
,A275;
hence md=IExec(WB4,Q,t).intpos mp by A267;
n4=IExec(TR,Q1,Initialize t1).intpos (mp+3)
by A78,A235,A237,A239,A240,A245,A264,A254,A243,A251,A252,A270,A271,A272,
A273,A274
,A275;
hence n4=IExec(WB4,Q,t).intpos (mp+3) by A267;
hereby
let j be Nat;
assume that
A284: 1<=j and
A285: j<m1;
pn+j >= pn+1 by A284,XREAL_1:6;
then pn+j >= 8 by A190,XXREAL_0:2;
then
A286: pn+j > 2 by XXREAL_0:2;
thus IExec(WB4,Q,t).intpos(pn+j)=
IExec(TR,Q1,Initialize t1).intpos(pn+j) by A267
.=(Initialize t1).intpos(pn+j)
by A78,A235,A237,A239,A240,A245,A264,A254,A243,A251,A252,A270,A284
,A285,A271,A272,A273,A274,A275
.=t1.intpos(pn+j) by SCMPDS_5:15
.=t.intpos(pn+j) by A179,A233,A234,A286,A232;
end;
thus f1,f2 are_fiberwise_equipotent by A78,A235,A237,A239,A240,A245,A264
,A254,A243,A251,A252,A270,A271,A272,A273,A274,A275;
take m4;
thus md <= m4 & m4 <= n4 by A276,A277;
thus m4-1=IExec(WB4,Q,t).intpos (mp+1) by A267,A278;
thus m4+1=IExec(WB4,Q,t).intpos (mp+2) by A267,A279;
hereby
let i be Nat;
assume that
A287: md<=i and
A288: i < m4;
IExec(TR,Q1,Initialize t1).intpos m4 >=
IExec(TR,Q1,Initialize t1).intpos i by A280,A287,A288;
then IExec(WB4,Q,t).intpos m4 >=
IExec(TR,Q1,Initialize t1).intpos i
by A267;
hence IExec(WB4,Q,t).intpos m4 >=
IExec(WB4,Q,t).intpos i by A267;
end;
hereby
let i be Nat;
assume that
A289: m4 < i and
A290: i <= n4;
IExec(TR,Q1,Initialize t1).intpos m4 <=
IExec(TR,Q1,Initialize t1).intpos i by A281,A289,A290;
then IExec(WB4,Q,t).intpos m4 <=
IExec(TR,Q1,Initialize t1).intpos i
by A267;
hence IExec(WB4,Q,t).intpos m4 <=
IExec(WB4,Q,t).intpos i by A267;
end;
hereby
let j be Nat;
assume that
A291: p0+1<=j & j<md or n4<j & j <= p0+n;
now
per cases by A291;
suppose
p0+1<=j & j<md;
hence p0+1<=j;
end;
suppose
n4<j & j <= p0+n;
then j >= m4 by A277,XXREAL_0:2;
then j >= md by A276,XXREAL_0:2;
hence j >= p0+1 by A237,XXREAL_0:2;
end;
end;
then j >= 8 by A246,XXREAL_0:2;
then
A292: j > 2 by XXREAL_0:2;
thus IExec(WB4,Q,t).intpos j =
IExec(TR,Q1,Initialize t1).intpos j by A267
.=t1.intpos j by A283,A291
.=t.intpos j by A179,A233,A234,A292,A232;
end;
end;
consider f be FinSequence of INT such that
A293: len f=n and
A294: f is_FinSequence_on s,p0 by SCPISORT:2;
A295: pn+2 >= 7+2 by A6,XREAL_1:6;
A296: s1.a=0 & s1.a1=1 & s1.intpos(pn+1)=p0+1 & s1.intpos(pn+2)=pn & for i
be Nat st i >= 8 & i <= pn holds s1.intpos i=s.intpos i
proof
set t2=IExec(m1 ';' m2 ';' m3,P,s),
t3=IExec(m1 ';' m2,P,s), t4=Exec(m1, s);
A297: t4.a =0 by SCMPDS_2:45;
A298: t3.a=Exec(m2, t4).a by SCMPDS_5:42
.=0 by A297,SCMPDS_2:45,SCMP_GCD:3;
A299: t3.SBP=Exec(m2, t4).SBP by SCMPDS_5:42
.=1 by SCMPDS_2:45;
then
A300: DataLoc(t3.SBP,pn)=intpos (pn+1) by SCMP_GCD:1;
A301: t2.a=Exec(m3,t3).a by SCMPDS_5:41
.=0 by A298,A300,AMI_3:10,SCMPDS_2:46;
A302: t2.intpos (pn+1)=Exec(m3,t3).intpos (pn+1) by SCMPDS_5:41
.=p0+1 by A300,SCMPDS_2:46;
A303: pn+2 > 1 by A295,XXREAL_0:2;
A304: pn+1 > 1 by A190,XXREAL_0:2;
A305: t2.SBP=Exec(m3,t3).SBP by SCMPDS_5:41
.=1 by A299,A300,A304,AMI_3:10,SCMPDS_2:46;
then
A306: DataLoc(t2.SBP,pn+1)=intpos (pn+(1+1)) by SCMP_GCD:1;
thus s1.a=Exec(m4,t2).a by SCMPDS_5:41
.=0 by A301,A306,AMI_3:10,SCMPDS_2:46;
thus s1.a1=Exec(m4,t2).SBP by SCMPDS_5:41
.=1 by A305,A306,A303,AMI_3:10,SCMPDS_2:46;
A307: pn+2 > pn+1 by XREAL_1:6;
thus s1.intpos (pn+1)=Exec(m4,t2).intpos (pn+1) by SCMPDS_5:41
.=p0+1 by A302,A306,A307,AMI_3:10,SCMPDS_2:46;
thus s1.intpos (pn+2)=Exec(m4,t2).intpos (pn+2) by SCMPDS_5:41
.=pn by A306,SCMPDS_2:46;
A308: for i being Nat st i >= 8 holds t4.intpos i = s.intpos i
by AMI_3:10,SCMPDS_2:45;
A309: now
let i be Nat;
assume
A310: i >= 8;
then
A311: i > 1 by XXREAL_0:2;
thus t3.intpos i =Exec(m2, t4).intpos i by SCMPDS_5:42
.=t4.intpos i by A311,AMI_3:10,SCMPDS_2:45
.=s.intpos i by A308,A310;
end;
A312: now
let i be Nat;
assume that
A313: i >= 8 and
A314: i <=pn;
A315: pn+1 > pn by XREAL_1:29;
thus t2.intpos i =Exec(m3, t3).intpos i by SCMPDS_5:41
.=t3.intpos i by A300,A314,A315,AMI_3:10,SCMPDS_2:46
.=s.intpos i by A309,A313;
end;
A316: pn+2 > pn+0 by XREAL_1:6;
let i be Nat;
assume that
A317: i >= 8 and
A318: i <=pn;
thus s1.intpos i =Exec(m4, t2).intpos i by SCMPDS_5:41
.=t2.intpos i by A306,A318,A316,AMI_3:10,SCMPDS_2:46
.=s.intpos i by A312,A317,A318;
end;
now
A319: p0+1 >= 7+1 by A5,XREAL_1:6;
let i be Nat;
assume that
A320: 1 <= i and
A321: i <= len f;
A322: p0+i <= pn by A293,A321,XREAL_1:6;
p0+i >= p0+1 by A320,XREAL_1:6;
then
A323: p0+i >= 8 by A319,XXREAL_0:2;
thus f.i=s.intpos(p0+i) by A294,A320,A321
.=s1.intpos(p0+i) by A296,A323,A322;
end;
then
A324: f is_FinSequence_on s1,p0;
consider g be FinSequence of INT such that
A325: len g=n and
A326: g is_FinSequence_on IExec(QuickSort(n,p0),P,s),p0
by SCPISORT:2;
A327: b1=intpos(0+1) by SCMP_GCD:1;
A328: for t be State of SCMPDS,Q
for m,md be Nat st t.a=0 & t.SBP=m & t
.intpos(m+pn)=md & (md >= p0+1 or t.intpos(m+pn+1)-md <= 0) holds WB4
is_closed_on t,Q & WB4 is_halting_on t,Q
proof
let t be State of SCMPDS,Q;
let m,md be Nat;
set mp=m+pn, t1=IExec(l1 ';' l2,Q,Initialize t), Q1 = Q;
assume that
A329: t.a=0 and
A330: t.SBP=m and
A331: t.intpos mp=md and
A332: md >= p0+1 or t.intpos(mp+1)-md <= 0;
A333: t1.a2=t.intpos (mp+1)-t.intpos mp by A179,A329,A330;
A334: t1.a=0 by A179,A329,A330;
then
A335: DataLoc(t1.a,2)=intpos(0+2) by SCMP_GCD:1;
per cases;
suppose
A336: t1.DataLoc(t1.a,2) > 0;
A337: mp >= 0+7 by A6,XREAL_1:7;
then mp+1 >= 7+1 by XREAL_1:6;
then mp+1 > 2 by XXREAL_0:2;
then
A338: t1.intpos(mp+1)-md > 0 by A179,A329,A330,A331,A333,A335,A336;
A339: t1.SBP=m by A179,A329,A330;
mp > 2 by A337,XXREAL_0:2;
then
A340: t1.intpos mp=md by A179,A329,A330,A331;
then
A341: TR is_halting_on t1,Q1
by A219,A179,A329,A330,A331,A332,A334,A335,A336,A339,A338;
A342: (Initialize t1).DataLoc(t1.a,2) = t1.DataLoc(t1.a,2) by SCMPDS_5:15;
A343: (Initialize t1).a = t1.a by SCMPDS_5:15;
A344: TR is_closed_on t1,Q1
by A219,A179,A329,A330,A331,A332,A334,A335,A336,A339,A340,A338;
A345: TR is_halting_on Initialize t1,Q1
proof
Q1+*stop TR halts_on Initialize Initialize t1 by A341,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
A346: TR is_closed_on Initialize t1,Q1
proof
for k being Nat holds
IC Comput(Q1+*stop TR,Initialize Initialize t1,k) in dom stop TR
by A344,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
then
A347: IF4 is_halting_on Initialize t1,Q1 by A336,A345,A342,A343,SCMPDS_6:68;
A348: IF4 is_halting_on t1,Q1
proof
Q1+*stop IF4 halts_on Initialize Initialize t1 by A347,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
A349: IF4 is_closed_on Initialize t1,Q1 by A336,A346,A345,A342,A343
,SCMPDS_6:68;
IF4 is_closed_on t1,Q1
proof
for k being Nat holds
IC Comput(Q1+*stop IF4,Initialize Initialize t1,k) in dom stop IF4
by A349,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
hence thesis by A348,SCPISORT:9;
end;
suppose
A350: t1.DataLoc(t1.a,2) <= 0;
A351: lb is_halting_on t1,Q1 by SCMPDS_6:21;
A352: lb is_closed_on t1,Q1 by SCMPDS_6:20;
then
A353: IF4 is_halting_on t1,Q1 by A350,A351,SCMPDS_6:69;
IF4 is_closed_on t1,Q1 by A350,A352,A351,SCMPDS_6:69;
hence thesis by A353,SCPISORT:9;
end;
end;
A354:
now let t be 0-started State of SCMPDS, Q;
let f1,f2 be FinSequence of INT, k1,k2,y1,yn be
Nat;
set mm=2*k1+1, md=p0+y1, n4=p0+yn;
assume that
A355: t.a=0 and
A356: mm=t.b1 and
A357: k2=pn+2*k1+1 and
A358: md=t.intpos k2 and
A359: n4=t.intpos(k2+1) and
A360: 1 <= y1 & yn <= n or y1 >= yn;
set mp=mm+pn;
A361: md=t.intpos mp by A357,A358;
now
per cases by A360;
case
1 <= y1 & yn <= n;
hence p0+1 <= md by XREAL_1:6;
end;
case
y1 >= yn;
then md >= t.intpos (mp+1) by A357,A359,XREAL_1:6;
hence t.intpos (mp+1) -md <= 0 by XREAL_1:47;
end;
end;
hence WB4 is_closed_on t,Q & WB4 is_halting_on t,Q
by A328,A327,A355,A356,A361;
consider f3 be FinSequence of INT such that
A362: len f3=n and
A363: for i be Nat st 1<=i & i <= len f3 holds f3.i=t.
intpos( p0+i) by SCPISORT:1;
consider f4 be FinSequence of INT such that
A364: len f4=n and
A365: for i be Nat st 1<=i & i <= len f4
holds f4.i=IExec(WB4,Q,t).intpos(p0+i) by SCPISORT:1;
A366: f4 is_FinSequence_on IExec(WB4,Q,t),p0 by A365;
A367: f3 is_FinSequence_on t,p0 by A363;
hereby
per cases;
suppose
t.intpos (mp+1) <= t.intpos mp;
hence
IExec(WB4,Q,t).a=t.a &
for j be Nat st 1<=j & j<mm holds
IExec(WB4,Q,t).intpos(pn+j)=t.intpos(pn+j)
by A191,A327,A355,A356;
end;
suppose
A368: t.intpos (mp+1) > t.intpos mp;
then
A369: n4-md > 0 by A357,A358,A359,XREAL_1:50;
A370: n4 <= pn by A357,A358,A359,A360,A368,XREAL_1:6;
p0+1 <= md by A357,A358,A359,A360,A368,XREAL_1:6;
hence
IExec(WB4,Q,t).a=t.a &
for j be Nat st 1<=j & j<mm holds
IExec(WB4,Q,t).intpos(pn+j)=t.intpos(pn+j)
by A231,A327,A355,A356,A357,A359,A361,A362,A367,A364,A366,A369,A370;
end;
end;
hereby
assume y1>=yn;
then
A371: t.intpos (mp+1) <= t.intpos mp by A357,A358,A359,XREAL_1:6;
hence IExec(WB4,Q,t).b1=2*k1+1-2 by A191,A327,A355,A356
.=2*k1-1;
thus for j be Nat st 1<=j & j <= n
holds IExec(WB4,Q,t).intpos
(p0+j) = t.intpos (p0+j) by A191,A327,A355,A356,A371;
end;
A372: k2=mp by A357;
set s = Initialize s1,
a = GBP,
c = 0,
m = p0,
i = 1,
I = WB4,
P = P1,
pn = p0+n,
m1 = pn+1;
thus
y1<yn implies IExec(I,Q,t).DataLoc(c,i)=2*k1+3
& (for j be Nat
st 1<=j & j<y1 or yn<j & j <= n
holds IExec(I,Q,t).intpos(m+j) = t.intpos (m+
j)) & (ex ym be Nat st y1 <= ym & ym <= yn
& m+y1=IExec(I,Q,t).intpos
k2 & m+ym-1=IExec(I,Q,t).intpos (k2+1) &
m+ym+1=IExec(I,Q,t).intpos (k2+2)
& m+yn=
IExec(I,Q,t).intpos (k2+3) &
(for j be Nat st y1 <= j & j < ym holds
IExec(I,Q,t).intpos (m+j) <=
IExec(I,Q,t).intpos (m+ym)) &
(for j be Nat
st ym < j & j <= yn holds IExec(I,Q,t).intpos (m+j)
>= IExec(I,Q,t).intpos (m+ym)))
proof
assume
A373: y1<yn;
then
A374: p0+1 <= md by A360,XREAL_1:6;
n4 > md by A373,XREAL_1:6;
then
A375: n4-md > 0 by XREAL_1:50;
A376: n4 <= pn by A360,A373,XREAL_1:6;
hence
IExec(WB4,Q,t).b1=2*k1+1+2
by A231,A327,A355,A356,A357,A359,A361,A362,A367,A364,A366,A375,A374
.=2*k1+3;
consider m4 be Nat such that
A377: md <= m4 and
A378: m4 <= n4 and
A379: m4-1=IExec(WB4,Q,t).intpos (mp+1) and
A380: m4+1=IExec(WB4,Q,t).intpos (mp+2) and
A381: for i be Nat st md<=i & i < m4
holds IExec(WB4,Q,t).
intpos m4 >= IExec(WB4,Q,t).intpos i and
A382: for i be Nat st m4 < i & i <= n4
holds IExec(WB4,Q,t)
. intpos m4 <= IExec(WB4,Q,t).intpos i and
A383: for j be Nat st p0+1<=j & j<md or n4<j & j <= p0+n
holds IExec(WB4,Q,t).intpos j = t.intpos j
by A231,A327,A355,A356,A357,A358,A359,A362,A367,A364,A366,A375,A374,A376;
hereby
let j be Nat;
assume 1<=j & j<y1 or yn<j & j <= n;
then p0+1<=p0+j & p0+j<md or n4<p0+j & p0+j <= p0+n by XREAL_1:6;
hence IExec(WB4,Q,t).intpos(p0+j) = t.intpos (p0+j) by A383;
end;
m4-p0 >= y1 by A377,XREAL_1:19;
then reconsider ym=m4-p0 as Element of NAT by INT_1:3;
take ym;
m4=p0+ym;
hence y1 <= ym & ym <= yn by A377,A378,XREAL_1:6;
thus md=IExec(WB4,Q,t).intpos k2
by A231,A327,A355,A356,A358,A359,A372,A362,A367,A364,A366,A375,A374,A376
;
thus p0+ym-1=IExec(WB4,Q,t).intpos (k2+1) by A357,A379;
thus p0+ym+1=IExec(WB4,Q,t).intpos (k2+2) by A357,A380;
thus n4=IExec(WB4,Q,t).intpos (k2+3)
by A231,A327,A355,A356,A358,A359,A372,A362,A367,A364,A366,A375,A374,A376
;
hereby
let j be Nat;
assume that
A384: y1 <= j and
A385: j < ym;
A386: p0+j < p0+ym by A385,XREAL_1:6;
p0+y1 <= p0+j by A384,XREAL_1:6;
hence
IExec(WB4,Q,t).intpos (p0+j) <=
IExec(WB4,Q,t).intpos (p0+ym)
by A381,A386;
end;
hereby
let j be Nat;
assume that
A387: ym < j and
A388: j <= yn;
A389: p0+j <= p0+yn by A388,XREAL_1:6;
p0+ym < p0+j by A387,XREAL_1:6;
hence
IExec(WB4,Q,t).intpos (p0+j) >=
IExec(WB4,Q,t).intpos (p0+ym)
by A382,A389;
end;
end;
hereby
assume that
A390: f1 is_FinSequence_on t,p0 and
A391: f2 is_FinSequence_on IExec(WB4,Q,t),p0 and
A392: len f1=n and
A393: len f2=n;
per cases;
suppose
A394: t.intpos (mp+1) <= t.intpos mp;
A395: dom f1 = Seg n by A392,FINSEQ_1:def 3;
now
let i be Nat;
reconsider a = i as Nat;
assume
A396: i in dom f1;
then
A397: 1 <= i by A395,FINSEQ_1:1;
A398: i <= n by A395,A396,FINSEQ_1:1;
hence f1.i = t.intpos(p0+a) by A390,A392,A397
.=IExec(WB4,Q,t).intpos(p0+a)
by A191,A327,A355,A356,A394,A397,A398
.=f2.i by A391,A393,A397,A398;
end;
hence f1,f2 are_fiberwise_equipotent by A392,A393,FINSEQ_2:9;
end;
suppose
A399: t.intpos (mp+1) > t.intpos mp;
then
A400: n4-md > 0 by A357,A358,A359,XREAL_1:50;
A401: n4 <= pn by A357,A358,A359,A360,A399,XREAL_1:6;
p0+1 <= md by A357,A358,A359,A360,A399,XREAL_1:6;
hence
f1,f2 are_fiberwise_equipotent by A231,A327,A355,A356,A357,A359,A361
,A390,A391,A392,A393,A400,A401;
end;
end;
end;
A402: (Initialize s1).GBP = s1.GBP by SCMPDS_5:15;
A403: (Initialize s1).intpos (pn+1) = s1.intpos (pn+1) by SCMPDS_5:15;
A404: (Initialize s1).intpos((pn+1)+1) = s1.intpos((pn+1)+1) by SCMPDS_5:15;
A405: (Initialize s1).DataLoc(0,1) = s1.DataLoc(0,1) by SCMPDS_5:15;
A406: WH4 is_closed_on Initialize s1,P by A327,A354,A296,Lm5,A402,A403,A404,
A405;
A407: WH4 is_closed_on s1,P
proof
for k being Nat holds
IC Comput(P+*stop WH4,Initialize Initialize s1,k) in dom stop WH4
by A406,SCMPDS_6:def 2;
hence thesis by SCMPDS_6:def 2;
end;
A408: WH4 is_halting_on Initialize s1,P by A327,A354,A296,Lm5,A402,A403,A404,
A405;
A409: WH4 is_halting_on s1,P
proof
P+*stop WH4 halts_on Initialize Initialize s1 by A408,SCMPDS_6:def 3;
hence thesis by SCMPDS_6:def 3;
end;
hence QuickSort(n,p0) is_halting_on s,P by A407,A1,SCPISORT:9;
take f,g;
thus len f=n & f is_FinSequence_on s,p0 & len g=n & g is_FinSequence_on
IExec(QuickSort(n,p0),P,s),p0 by A293,A294,A325,A326;
now
let i be Nat;
assume that
A410: 1 <= i and
A411: i <= len g;
thus g.i=IExec(M4 ';' WH4,P,s).intpos(p0+i)
by A326,A410,A411
.=IExec(WH4,P1,Initialize s1).intpos(p0+i) by A409,A407,SCPISORT:7;
end;
then
A412: g is_FinSequence_on IExec(WH4,P1,Initialize s1),p0;
A413: (Initialize s1).GBP = s1.GBP by SCMPDS_5:15;
A414: (Initialize s1).DataLoc(0,1) = s1.DataLoc(0,1) by SCMPDS_5:15;
A415: (Initialize s1).intpos (pn+1) = s1.intpos (pn+1) by SCMPDS_5:15;
A416: (Initialize s1).intpos((pn+1)+1) = s1.intpos((pn+1)+1) by SCMPDS_5:15;
f is_FinSequence_on Initialize s1,p0
proof let i be Nat;
assume 1 <= i & i <= len f;
then f.i=s1.intpos(p0+i) by A324;
hence thesis by SCMPDS_5:15;
end;
hence thesis
by Lm3,A325,A293,A412,A414,A327,A296,A413,A415,A416,A354;
end;
begin :: The Basic Property of Quick Sort and Its Correctness
theorem
card QuickSort(n,p0)=57 by Lm28;
theorem
for p0,n being Nat st p0 >= 7 holds QuickSort(n,p0) is
parahalting
proof
let p0,n be Nat;
assume
A1: p0 >= 7;
for s be State of SCMPDS,P
holds QuickSort(n,p0) is_halting_on s,P
proof let s be State of SCMPDS,P;
QuickSort(n,p0) is_halting_on Initialize s,P by A1,Lm28;
hence thesis by SCMPDS_6:126;
end;
hence thesis by SCMPDS_6:21;
end;
theorem
for s being 0-started State of SCMPDS,p0,n being Nat st p0 >= 7
ex f,g be FinSequence of INT st len f=n & f is_FinSequence_on s,p0 & len g = n
& g is_FinSequence_on IExec(QuickSort(n,p0),P,s),p0 & f,g
are_fiberwise_equipotent & g is_non_decreasing_on 1,n by Lm28;