reserve m,n for Nat,
  a for Int_position,
  i,j for Instruction of SCMPDS,
  s,s1,s2 for State of SCMPDS,
  k1 for Integer,
  loc for Nat,
  I,J,K for Program of SCMPDS;
reserve P,P1,P2 for Instruction-Sequence of SCMPDS;

theorem Th16:
 for s being 0-started State of SCMPDS
  for I,J being Program of SCMPDS
   st I is_closed_on s,P & I is_halting_on s,P
  holds (for k being Nat
    st k <= LifeSpan(P +* stop I,s) holds
     IC Comput(P +* stop I,s,k) = IC Comput(P +* stop(I ';' J),s,k)) &
      DataPart Comput(P +* stop I,s,LifeSpan(P +* stop I,s)) =
    DataPart Comput(P +* stop(I ';' J),s,LifeSpan(P +* stop I,s))
proof
 let s be 0-started State of SCMPDS;
  let I,J be Program of SCMPDS;
  assume
A1: I is_closed_on s,P;
A2: Initialize s = s by MEMSTR_0:44;
  set pI=stop I, pIJ=stop (I ';' J), P1 = P +* pI;
  defpred X[Nat] means $1 <= LifeSpan(P1,s) implies
     Comput(P1, s,$1) = Comput(P1 +* pIJ, s,$1);
  assume I is_halting_on s,P;
  then
A3: P1 halts_on s by A2;
A4: for m st X[m] holds X[m+1]
  proof
    set JS=J ';' Stop SCMPDS, E2 = P1 +* pIJ;
    let m;
    assume
A5: m <= LifeSpan(P1,s) implies Comput(P1, s,m) =  Comput(P1 +* pIJ, s,m);
A6: pIJ c= E2 by FUNCT_4:25;
A7: Comput(P1,s,m+1) = Following(P1,Comput(P1,s,m)) by EXTPRO_1:3;
A8: pIJ =I ';' J ';' Stop SCMPDS
      .=I ';' JS by AFINSQ_1:27;
    dom(I ';' JS) = dom (I +* Shift(JS, card I))
      .= dom I \/ dom Shift(JS, card I) by FUNCT_4:def 1;
    then
A9: dom I c= dom(I ';' JS) by XBOOLE_1:7;
A10: Comput(E2,s,m+1) = Following(E2,Comput(E2,s,m)) by EXTPRO_1:3;
A11: IC Comput(P1,s,m) in dom pI by A1,A2;
A12: P1/.IC Comput(P1,s,m)
 = P1.IC Comput(P1,s,m) by PBOOLE:143;
    pI c= P1 by FUNCT_4:25;
    then
A13: CurInstr(P1,Comput(P1,s,m))
 = pI.IC (Comput(P1,s,m)) by A11,A12,GRFUNC_1:2;
    assume
A14: m+1 <= LifeSpan(P1,s);
    then m < LifeSpan(P1,s) by NAT_1:13;
    then pI.IC(Comput(P1,s,m)) <> halt SCMPDS by A3,A13,EXTPRO_1:def 15;
    then
A15: IC Comput(P1,s,m) in dom I by A11,COMPOS_1:51;
A16: E2/.IC Comput(E2,s,m)
 = E2.IC Comput(E2,s,m) by PBOOLE:143;
    CurInstr(P1,Comput(P1,s,m))
    = (I ';' Stop SCMPDS).IC (Comput(P1,s,m)) by A13
      .=I.IC (Comput(P1,s,m)) by A15,AFINSQ_1:def 3
      .=pIJ.IC(Comput(P1,s,m)) by A15,A8,AFINSQ_1:def 3
      .=E2.IC(Comput(P1,s,m)) by A6,A15,A8,A9,GRFUNC_1:2
      .= CurInstr(E2,Comput(E2,s,m))
       by A5,A14,A16,NAT_1:13;
    hence thesis by A5,A14,A7,A10,NAT_1:13;
  end;
  Comput(P1, s,0) = s &
  Comput(P1 +* pIJ, s,0) = s by EXTPRO_1:2;
  then
A17: X[0];
A18: for m holds X[m] from NAT_1:sch 2(A17,A4);
A19: P +* pI +* pIJ = P +* (pI +* pIJ) by FUNCT_4:14
            .= P +* pIJ by SCMPDS_5:14;
  thus for k being Nat st k <= LifeSpan(P1,s)
   holds IC Comput(P1,s,k) =IC Comput(P +* pIJ, s,k) by A18,A19;
   Comput(P +* stop I, s, LifeSpan(P +* stop I,s)) =
   Comput(P +* stop(I ';' J),s,(LifeSpan(P +* stop I,s))) by A19,A18;
  hence
   DataPart Comput(P +* stop I, s, (LifeSpan(P +* stop I,s))) =
   DataPart Comput(P +* stop(I ';' J), s,(LifeSpan(P +* stop I,s)));
end;
