set D = SCM-Data-Loc ;
let I be halt-free parahalting Program of SCMPDS; :: thesis: for J being parahalting shiftable Program of SCMPDS
for s being 0 -started State of SCMPDS
for s1 being State of SCMPDS st stop (I ';' J) c= s & s1 = s +* (stop I) holds
( IC (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = card I & DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) & Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) )

let J be parahalting shiftable Program of SCMPDS; :: thesis: for s being 0 -started State of SCMPDS
for s1 being State of SCMPDS st stop (I ';' J) c= s & s1 = s +* (stop I) holds
( IC (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = card I & DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) & Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) )

let s be 0 -started State of SCMPDS; :: thesis: for s1 being State of SCMPDS st stop (I ';' J) c= s & s1 = s +* (stop I) holds
( IC (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = card I & DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) & Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) )

let s1 be State of SCMPDS; :: thesis: ( stop (I ';' J) c= s & s1 = s +* (stop I) implies ( IC (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = card I & DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) & Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) ) )
AA: Initialize s = s by COMPOS_1:78;
set spJ = stop J;
set sIJ = stop (I ';' J);
set m1 = LifeSpan ((ProgramPart s1),s1);
set s3 = (Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J);
I1: (Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J) = (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1)))) +* (Initialize (stop J)) by COMPOS_1:125;
set m3 = LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)));
assume that
A1: stop (I ';' J) c= s and
A2: s1 = s +* (stop I) ; :: thesis: ( IC (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = card I & DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) & Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) )
A3: DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) = (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (DataPart (Initialize (stop J))) by I1, FUNCT_4:75;
set s4 = Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)));
UU: ProgramPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = ProgramPart s by AMI_1:123;
A4: I c= stop (I ';' J) by Th15;
hence A5: IC (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = card I by A1, A2, Th30, XBOOLE_1:1; :: thesis: ( DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) & Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) )
A6: now
let x be set ; :: thesis: ( x in dom (DataPart (Initialize (stop J))) implies (DataPart (Initialize (stop J))) . b1 = (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) . b1 )
assume x in dom (DataPart (Initialize (stop J))) ; :: thesis: (DataPart (Initialize (stop J))) . b1 = (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) . b1
then A7: x in (dom (Initialize (stop J))) /\ SCM-Data-Loc by RELAT_1:90, SCMPDS_2:100;
then A8: x in dom (Initialize (stop J)) by XBOOLE_0:def 4;
A9: x in SCM-Data-Loc by A7, XBOOLE_0:def 4;
per cases ( x in dom (stop J) or x = IC SCMPDS ) by A8, COMPOS_1:77;
suppose A10: x in dom (stop J) ; :: thesis: (DataPart (Initialize (stop J))) . b1 = (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) . b1
dom (stop J) c= NAT by RELAT_1:def 18;
then reconsider l = x as Element of NAT by A10;
(DataPart (Initialize (stop J))) . l = (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) . l by A9, SCMPDS_4:22;
hence (DataPart (Initialize (stop J))) . x = (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) . x ; :: thesis: verum
end;
end;
end;
A11: dom (DataPart (stop J)) = (dom (stop J)) /\ SCM-Data-Loc by RELAT_1:90, SCMPDS_2:100;
reconsider m = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)))) as Element of NAT ;
stop (I ';' J) = I ';' (J ';' (Stop SCMPDS)) by AFINSQ_1:30
.= I +* (Shift ((stop J),(card I))) ;
then A12: Shift ((stop J),(card I)) c= stop (I ';' J) by FUNCT_4:26;
A13: stop J c= (Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J) by FUNCT_4:26;
A14: ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) halts_on (Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J) by FUNCT_4:26, SCMPDS_4:def 10;
I3: (Initialize s) +* (stop (I ';' J)) = s +* (Initialize (stop (I ';' J))) by COMPOS_1:125;
XX: DataPart (Initialize (stop J)) = DataPart (stop J) by COMPOS_1:80;
dom (stop J) c= dom ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) by A13, GRFUNC_1:8;
then dom (stop J) c= the carrier of SCMPDS by PARTFUN1:def 4;
then dom (DataPart (stop J)) c= the carrier of SCMPDS /\ SCM-Data-Loc by A11, XBOOLE_1:26;
then dom (DataPart (stop J)) c= (dom (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) /\ SCM-Data-Loc by PARTFUN1:def 4;
then dom (DataPart (stop J)) c= dom (DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) by RELAT_1:90, SCMPDS_2:100;
then DataPart (stop J) c= DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1)))) by A6, XX, GRFUNC_1:8;
then A15: DataPart (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) by A3, XX, LATTICE2:8;
s = (Initialize s) +* (stop (I ';' J)) by A1, AA, FUNCT_4:79
.= s +* ((I ';' (J ';' (Stop SCMPDS))) +* (Start-At (0,SCMPDS))) by I3, AFINSQ_1:30 ;
hence A16: DataPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) = DataPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)) by A2, A15, Th33, AA, COMPOS_1:138; :: thesis: ( Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) & LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) )
T: ProgramPart s = ProgramPart (Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))) by AMI_1:123;
x: Comput ((ProgramPart s),s,((LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)))))) = Comput ((ProgramPart s),(Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))),(LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))))) by EXTPRO_1:5;
Shift ((stop J),(card I)) c= s by A12, A1, XBOOLE_1:1;
hence A17: Shift ((stop J),(card I)) c= Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1))) by AMI_1:81; :: thesis: LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))))
then CurInstr ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),(Comput ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)),(LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))))))) = CurInstr ((ProgramPart s),(Comput ((ProgramPart s),s,((LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)))))))) by x, T, A13, A5, A16, SCMPDS_4:84;
then A18: CurInstr ((ProgramPart s),(Comput ((ProgramPart s),s,m))) = halt SCMPDS by A14, EXTPRO_1:def 14;
A19: now
let k be Element of NAT ; :: thesis: ( (LifeSpan ((ProgramPart s1),s1)) + k < m implies not CurInstr ((ProgramPart s),(Comput ((ProgramPart s),s,((LifeSpan ((ProgramPart s1),s1)) + k)))) = halt SCMPDS )
assume (LifeSpan ((ProgramPart s1),s1)) + k < m ; :: thesis: not CurInstr ((ProgramPart s),(Comput ((ProgramPart s),s,((LifeSpan ((ProgramPart s1),s1)) + k)))) = halt SCMPDS
then A20: k < LifeSpan ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))) by XREAL_1:8;
assume A21: CurInstr ((ProgramPart s),(Comput ((ProgramPart s),s,((LifeSpan ((ProgramPart s1),s1)) + k)))) = halt SCMPDS ; :: thesis: contradiction
x: Comput ((ProgramPart s),s,((LifeSpan ((ProgramPart s1),s1)) + k)) = Comput ((ProgramPart s),(Comput ((ProgramPart s),s,(LifeSpan ((ProgramPart s1),s1)))),k) by EXTPRO_1:5;
CurInstr ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),(Comput ((ProgramPart ((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J))),((Initialize (Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))))) +* (stop J)),k))) = halt SCMPDS by A21, x, A13, A5, A16, A17, UU, SCMPDS_4:84;
hence contradiction by A14, A20, EXTPRO_1:def 14; :: thesis: verum
end;
now end;
then A24: for k being Element of NAT st CurInstr ((ProgramPart s),(Comput ((ProgramPart s),s,k))) = halt SCMPDS holds
m <= k ;
ProgramPart s1 halts_on s1 by A2, FUNCT_4:26, SCMPDS_4:def 10;
then X: Result ((ProgramPart s1),s1) = Comput ((ProgramPart s1),s1,(LifeSpan ((ProgramPart s1),s1))) by EXTPRO_1:23;
ProgramPart s halts_on s by A1, SCMPDS_4:def 10;
hence LifeSpan ((ProgramPart s),s) = (LifeSpan ((ProgramPart s1),s1)) + (LifeSpan ((ProgramPart ((Initialize (Result ((ProgramPart s1),s1))) +* (stop J))),((Initialize (Result ((ProgramPart s1),s1))) +* (stop J)))) by X, A18, A24, EXTPRO_1:def 14; :: thesis: verum