The Mizar article:

The Construction and Computation of for-loop Programs for SCMPDS

by
Jing-Chao Chen, and
Piotr Rudnicki

Received December 27, 1999

Copyright (c) 1999 Association of Mizar Users

MML identifier: SCMPDS_7
[ MML identifier index ]


environ

 vocabulary AMI_3, SCMPDS_2, AMI_1, INT_1, SCMPDS_4, AMI_2, SCMPDS_3, ARYTM_1,
      ABSVALUE, AMI_5, RELAT_1, BOOLE, FUNCT_1, RELOC, SCMFSA6A, FUNCT_4,
      CAT_1, CARD_1, SCMFSA_7, FUNCT_7, UNIALG_2, SCMFSA7B, SCM_1, SCMFSA6B,
      SCMPDS_5, SFMASTR3, SEMI_AF1, SCMP_GCD, FINSEQ_1, RLVECT_1, MATRIX_2,
      SCMPDS_7;
 notation TARSKI, XBOOLE_0, ENUMSET1, NUMBERS, XCMPLX_0, XREAL_0, ABSVALUE,
      RELAT_1, FUNCT_1, FUNCT_4, INT_1, NAT_1, CQC_LANG, STRUCT_0, AMI_1,
      AMI_2, AMI_3, AMI_5, FUNCT_7, SCMPDS_2, SCMPDS_3, CARD_1, SCMPDS_4,
      SCM_1, SCMPDS_5, SCMPDS_6, SCMP_GCD, FINSEQ_1, TREES_4, WSIERP_1;
 constructors REAL_1, DOMAIN_1, AMI_5, SCMFSA_4, SCMPDS_4, SCM_1, SCMPDS_5,
      SCMPDS_6, SCMP_GCD, WSIERP_1, GOBOARD1, NAT_1, MEMBERED;
 clusters AMI_1, INT_1, FUNCT_1, RELSET_1, SCMPDS_2, FUNCT_7, SCMFSA_4,
      SCMPDS_4, SCMPDS_5, NAT_1, FRAENKEL, XREAL_0, MEMBERED, NUMBERS,
      ORDINAL2;
 requirements REAL, NUMERALS, SUBSET, BOOLE, ARITHM;
 theorems AMI_1, AMI_3, NAT_1, REAL_1, CQC_LANG, TARSKI, FUNCT_4, FUNCT_1,
      INT_1, AMI_5, SCMPDS_2, FUNCT_7, SCMPDS_3, ABSVALUE, SCMFSA6A, GRFUNC_1,
      AXIOMS, SCM_1, SCMFSA6B, SCMPDS_4, SCMPDS_5, SCMPDS_6, SCMFSA8C,
      ENUMSET1, SCMP_GCD, LATTICE2, WSIERP_1, FINSEQ_1, RVSUM_1, RELAT_1,
      FINSEQ_3, XBOOLE_0, XBOOLE_1, XCMPLX_0, XCMPLX_1;
 schemes NAT_1;

begin :: Preliminaries

reserve x for set,
        m,n for Nat,
        a,b for Int_position,
        i,j,k for Instruction of SCMPDS,
        s,s1,s2 for State of SCMPDS,
        k1,k2 for Integer,
        loc,l for Instruction-Location of SCMPDS,
        I,J,K for Program-block;

set A = the Instruction-Locations of SCMPDS;
set D = SCM-Data-Loc;

theorem Th1:  ::SCMPDS_6:23
 for s being State of SCMPDS,m,n being Nat st IC s=inspos m
 holds ICplusConst(s,n-m)=inspos n
proof
    let s be State of SCMPDS,m,n be Nat;
    assume A1: IC s=inspos m;
     consider k be Nat such that
A2:  k = IC s & ICplusConst(s,n-m) = abs(k-2+2*(n-m))+2 by SCMPDS_2:def 20;
A3:  k=il.m by A1,A2,SCMPDS_3:def 2
     .=2*m +2 by AMI_3:def 20;
A4:  2*n >= 0 by NAT_1:18;
     thus ICplusConst(s,n-m) =abs(2*m+2*(n-m))+2 by A2,A3,XCMPLX_1:26
     .=abs(2*m+(2*n-2*m))+2 by XCMPLX_1:40
     .=abs(2*m-(2*m-2*n))+2 by XCMPLX_1:38
     .=abs(2*n)+2 by XCMPLX_1:18
     .=2*n+2 by A4,ABSVALUE:def 1
     .=il.n by AMI_3:def 20
     .=inspos n by SCMPDS_3:def 2;
end;

theorem  ::S8C_Th10
   for P,Q being FinPartState of SCMPDS st P c= Q holds
     ProgramPart P c= ProgramPart Q
proof
   let P,Q be FinPartState of SCMPDS;
   assume A1: P c= Q;
then A2: dom P c= dom Q by GRFUNC_1:8;
A3: ProgramPart P = P | A & ProgramPart Q = Q | A by AMI_5:def 6;
then A4: dom ProgramPart P = dom P /\ A & dom ProgramPart Q = dom Q /\ A
       by RELAT_1:90;
then A5: dom ProgramPart P c= dom ProgramPart Q by A2,XBOOLE_1:26;
     now let x be set;
      assume A6: x in dom ProgramPart P;
  then A7: x in dom P by A4,XBOOLE_0:def 3;
      thus (ProgramPart P).x = P.x by A3,A6,FUNCT_1:68
      .= Q.x by A1,A7,GRFUNC_1:8
      .= (ProgramPart Q).x by A3,A5,A6,FUNCT_1:68;
     end;
   hence ProgramPart P c= ProgramPart Q by A5,GRFUNC_1:8;
end;

theorem  ::S8C_Th11
   for P,Q being programmed FinPartState of SCMPDS, k being Nat st P c= Q holds
     Shift(P,k) c= Shift(Q,k)
proof
   let P,Q be programmed FinPartState of SCMPDS;
   let k be Nat;
   assume A1: P c= Q;
then A2: dom P c= dom Q by GRFUNC_1:8;
A3: dom Shift(P,k) = {inspos (m + k):inspos m in dom P} by SCMPDS_3:def 7;
A4: dom Shift(Q,k) = {inspos (m + k):inspos m in dom Q} by SCMPDS_3:def 7;
      now let x be set;
       assume x in dom Shift(P,k);
       then consider m1 being Nat such that
A5:    x = inspos (m1 + k) & inspos m1 in dom P by A3;
       thus x in dom Shift(Q,k) by A2,A4,A5;
    end;
then A6: dom Shift(P,k) c= dom Shift(Q,k) by TARSKI:def 3;
      now let x be set;
      assume x in dom Shift(P,k);
      then consider m1 being Nat such that
A7:   x = inspos (m1 + k) & inspos m1 in dom P by A3;
      thus Shift(P,k).x
       = Shift(P,k).(inspos m1 + k) by A7,SCMPDS_3:def 3
      .= P.inspos m1 by A7,SCMPDS_3:37
      .= Q.inspos m1 by A1,A7,GRFUNC_1:8
      .= Shift(Q,k).(inspos m1 + k) by A2,A7,SCMPDS_3:37
      .= Shift(Q,k).x by A7,SCMPDS_3:def 3;
     end;
   hence Shift(P,k) c= Shift(Q,k) by A6,GRFUNC_1:8;
end;

theorem Th4: ::S8C_Th14
 IC s = inspos 0 implies Initialized s = s
proof
   assume IC s = inspos 0;
then A1: s.IC SCMPDS = inspos 0 by AMI_1:def 15;
A2: IC SCMPDS in dom s by AMI_5:25;
   thus Initialized s
    = s +* Start-At inspos 0 by SCMPDS_5:def 4
   .= s +* (IC SCMPDS .--> inspos 0) by AMI_3:def 12
   .= s by A1,A2,SCMFSA8C:6;
end;

theorem Th5:
 IC s = inspos 0 implies s +* Initialized I = s +* I
proof
    set SA0=Start-At inspos 0;
    assume A1: IC s = inspos 0;
    A2: dom I misses dom SA0 by SCMPDS_4:54;
      Initialized s = s by A1,Th4;
   hence s +* I =s +* SA0 +* I by SCMPDS_5:def 4
    .= s +* (SA0 +* I) by FUNCT_4:15
    .= s +* (I +* SA0) by A2,FUNCT_4:36
    .= s +* Initialized I by SCMPDS_4:def 2;
end;

theorem Th6:
   (Computation s).n | the Instruction-Locations of SCMPDS
   = s | the Instruction-Locations of SCMPDS
proof
     for x be Instruction-Location of SCMPDS holds
     (Computation s).n.x=s.x by AMI_1:54;
   hence (Computation s).n | A = s | A by SCMPDS_4:21;
end;

theorem Th7:
  for s1,s2 being State of SCMPDS st
  IC s1= IC s2 & s1 | SCM-Data-Loc = s2 | SCM-Data-Loc &
  s1 | the Instruction-Locations of SCMPDS =
  s2 | the Instruction-Locations of SCMPDS
  holds s1=s2
proof
  let s1,s2 be State of SCMPDS;
  assume A1: IC s1= IC s2 & s1 | D = s2 | D & s1 | A = s2 | A;
then A2: s1.IC SCMPDS=IC s2 by AMI_1:def 15
    .=s2.IC SCMPDS by AMI_1:def 15;
A3: dom s1 ={IC SCMPDS} \/ D \/ A by SCMPDS_4:19;
A4: dom s2 ={IC SCMPDS} \/ D \/ A by SCMPDS_4:19;
    then s1|{IC SCMPDS} = s2|{IC SCMPDS} by A2,A3,AMI_3:24;
    then s1|({IC SCMPDS} \/ D) = s2| ({IC SCMPDS} \/ D) by A1,AMI_3:20;
    then s1|({IC SCMPDS} \/ D \/ A) = s2| ({IC SCMPDS} \/ D \/
 A) by A1,AMI_3:20;
    hence s1=s2 | dom s2 by A3,A4,RELAT_1:97
     .=s2 by RELAT_1:97;
end;

theorem Th8: ::S8C_Th20
     l in dom I iff l in dom Initialized I
proof
A1: (Initialized I) | A = I by SCMPDS_4:16;
A2: dom ((Initialized I) | the Instruction-Locations of SCMPDS) c=
       dom Initialized I by FUNCT_1:76;
A3: dom ((Initialized I) | A) = dom Initialized I /\ A by RELAT_1:90;
   thus l in dom I implies l in dom Initialized I by A1,A2;
   assume l in dom Initialized I;
   hence l in dom I by A1,A3,XBOOLE_0:def 3;
end;

theorem  :: S8C_Th26
     x in dom I implies I.x = (s +* (I +* Start-At l)).x
proof
   assume A1: x in dom I;
     dom I c= the Instruction-Locations of SCMPDS by AMI_3:def 13;
   then reconsider y = x as Instruction-Location of SCMPDS by A1;
A2: not y in dom Start-At l by SCMPDS_4:60;
     x in dom (I +* Start-At l) by A1,FUNCT_4:13;
   hence (s +* (I +* Start-At l)).x = (I +* Start-At l).x by FUNCT_4:14
   .= I.x by A2,FUNCT_4:12;
end;

theorem Th10:
   loc in dom I implies (s +* Initialized I).loc = I.loc
proof
  assume A1: loc in dom I;
   set II = Initialized I;
A2: I c= II by SCMPDS_4:9;
then dom I c= dom II by GRFUNC_1:8;
    hence (s +* II).loc = II.loc by A1,FUNCT_4:14
    .=I.loc by A1,A2,GRFUNC_1:8;
end;

theorem  :: S8C_TH28,SCMPDS_5:19,40
         (s +* (I +* Start-At l)).a = s.a
proof
     a in dom s & not a in dom (I +* Start-At l) by SCMPDS_2:49,SCMPDS_4:61;
   hence (s +* (I +* Start-At l)).a = s.a by FUNCT_4:12;
end;

theorem Th12:
     (s +* Start-At loc).IC SCMPDS = loc
proof
    thus
      (s +* Start-At loc).IC SCMPDS=IC (s +* Start-At loc) by AMI_1:def 15
    .=loc by AMI_5:79;
end;

canceled;

theorem Th14:
   (I ';' i ';' j).inspos card I =i
proof
      I ';' i ';' j=I ';' i ';' Load j by SCMPDS_4:def 5;
    hence thesis by SCMP_GCD:11;
end;

theorem Th15:
   i ';' I ';' j ';' k = i ';' (I ';' j ';' k)
proof
   thus i ';' I ';' j ';' k
       = i ';' (I ';' j) ';' k by SCMPDS_4:51
       .= i ';' (I ';' j ';' k) by SCMPDS_4:51;
end;

theorem Th16:
      Shift(J,card I) c= I ';' J ';' K
proof
     set IJ= I ';' J;
       IJ = I +* Shift(J, card I) by SCMPDS_4:def 3;
then A1:  Shift(J, card I) c= IJ by FUNCT_4:26;
A2:  IJ ';' K = IJ +* Shift(K, card IJ) by SCMPDS_4:def 3;
       dom IJ misses dom Shift(K, card IJ) by SCMPDS_4:2;
     then IJ c= IJ ';' K by A2,FUNCT_4:33;
     hence thesis by A1,XBOOLE_1:1;
end;

theorem Th17:
     I c= stop (I ';' J)
proof
        stop (I ';' J) = I ';' J ';' SCMPDS-Stop by SCMPDS_4:def 7
      .=I ';' (J ';' SCMPDS-Stop) by SCMPDS_4:46;
      hence I c= stop (I ';' J) by SCMPDS_4:40;
end;

theorem Th18:
 loc in dom I implies Shift(stop I,n).(loc+n)=Shift(I,n).(loc+n)
proof
    assume A1:loc in dom I;
A2: stop I=I ';' SCMPDS-Stop by SCMPDS_4:def 7;
    then A3: dom I c= dom (stop I) by SCMPDS_4:39;
    thus Shift(I,n).(loc+n)=I.loc by A1,SCMPDS_3:37
    .=(stop I).loc by A1,A2,SCMPDS_4:37
    .=Shift(stop I,n).(loc+n) by A1,A3,SCMPDS_3:37;
end;

theorem Th19:
 card I > 0 implies Shift(stop I,n).inspos n=Shift(I,n).inspos n
proof
    assume card I > 0;
then A1: inspos 0 in dom I by SCMPDS_4:1;
    thus Shift(stop I,n).inspos n=Shift(stop I,n).inspos(0+n)
    .=Shift(stop I,n).(inspos 0 +n) by SCMPDS_3:def 3
   .=Shift(I,n).(inspos 0 +n) by A1,Th18
   .=Shift(I,n).inspos (0+n) by SCMPDS_3:def 3
   .=Shift(I,n).inspos n;
end;

theorem  ::S8C_Th32
   for s being State of SCMPDS, i being Instruction of SCMPDS st
     InsCode i in {0,4,5,6} holds
 Exec(i,s) | SCM-Data-Loc = s | SCM-Data-Loc
proof
   let s be State of SCMPDS,i be Instruction of SCMPDS;
   assume A1: InsCode i in {0,4,5,6};
     now
      let a be Int_position;
      per cases by A1,ENUMSET1:18;
      suppose InsCode i = 0;
       then ex k1 st i = goto k1 by SCMPDS_2:35;
       hence Exec(i,s).a = s.a by SCMPDS_2:66;
      suppose InsCode i = 4;
       then ex b,k1,k2 st i = (b,k1)<>0_goto k2 by SCMPDS_2:39;
       hence Exec(i,s).a = s.a by SCMPDS_2:67;
      suppose InsCode i = 5;
       then ex b,k1,k2 st i = (b,k1)<=0_goto k2 by SCMPDS_2:40;
       hence Exec(i,s).a = s.a by SCMPDS_2:68;
      suppose InsCode i = 6;
       then ex b,k1,k2 st i = (b,k1)>=0_goto k2 by SCMPDS_2:41;
       hence Exec(i,s).a = s.a by SCMPDS_2:69;
     end;
   hence thesis by SCMPDS_4:23;
end;

theorem
   for s,ss being State of SCMPDS holds
     (s +* ss | the Instruction-Locations of SCMPDS) |
         SCM-Data-Loc = s | SCM-Data-Loc
proof
   let s,ss be State of SCMPDS;
     dom (ss | A) = A by SCMPDS_6:1;
   hence thesis by AMI_5:7,SCMPDS_2:10;
end;

theorem  ::S8C_Th41
   for i being Instruction of SCMPDS holds
     rng Load i = {i}
proof
    let i be Instruction of SCMPDS;
      Load i = (inspos 0).--> i by SCMPDS_4:def 1;
    hence rng Load i = {i} by CQC_LANG:5;
end;

theorem Th23:   ::SCMPDS_4:15
   IC s1 = IC s2 & s1 | SCM-Data-Loc = s2 | SCM-Data-Loc implies
   IC Exec(i,s1)=IC Exec(i,s2) &
   Exec(i,s1) | SCM-Data-Loc = Exec(i,s2) | SCM-Data-Loc
proof
  assume IC s1 = IC s2 & s1 | SCM-Data-Loc = s2 | SCM-Data-Loc;
     then s1,s2 equal_outside A by SCMPDS_6:4;
     then Exec(i,s1),Exec(i,s2) equal_outside A by SCMPDS_4:15;
     hence thesis by SCMPDS_6:4;
end;

theorem Th24: ::S8C_43
 for s1,s2 being State of SCMPDS,I being Program-block st
     I is_closed_on s1 &
     Initialized stop I c= s1 & Initialized stop I c= s2 &
     s1 | SCM-Data-Loc = s2 | SCM-Data-Loc
 for i being Nat holds
     IC (Computation s1).i = IC (Computation s2).i &
     CurInstr (Computation s1).i = CurInstr (Computation s2).i &
     (Computation s1).i | SCM-Data-Loc = (Computation s2).i | SCM-Data-Loc
proof
   let s1,s2 be State of SCMPDS,I be Program-block;
   set pI=stop I,
       IsI = Initialized pI;
    assume
A1: I is_closed_on s1 & IsI c= s1 & IsI c= s2
    & s1 | D = s2 | D;
then A2: s1=s1 +* IsI by AMI_5:10;
    set C1 = Computation s1,
        C2 = Computation s2;
   defpred P[Nat] means
       IC C1.$1 = IC C2.$1 & CurInstr (C1.$1) = CurInstr (C2.$1) &
       C1.$1 | SCM-Data-Loc = C2.$1 | SCM-Data-Loc;
       pI c= IsI by SCMPDS_4:9;
then A3: dom pI c= dom IsI by GRFUNC_1:8;
       IC C1.0 in dom pI by A1,A2,SCMPDS_6:def 2;
     then A4: IC s1 in dom pI by AMI_1:def 19;
A5:  P[0]
     proof
A6:  IC SCMPDS in dom IsI by SCMPDS_4:7;
A7:  IC s1 = s1.IC SCMPDS by AMI_1:def 15
     .= IsI.IC SCMPDS by A1,A6,GRFUNC_1:8
     .= s2.IC SCMPDS by A1,A6,GRFUNC_1:8
     .= IC s2 by AMI_1:def 15;
     thus IC C1.0 =IC s1 by AMI_1:def 19
     .=IC C2.0 by A7,AMI_1:def 19;
A8: s1.IC s1 = IsI.IC s1 by A1,A3,A4,GRFUNC_1:8
      .= s2.IC s2 by A1,A3,A4,A7,GRFUNC_1:8;
    thus CurInstr (C1.0) = CurInstr s1 by AMI_1:def 19
      .= s2.IC s2 by A8,AMI_1:def 17
      .= CurInstr s2 by AMI_1:def 17
      .= CurInstr (C2.0) by AMI_1:def 19;
  thus C1.0 | D = s2 | D by A1,AMI_1:def 19
      .= C2.0 | D by AMI_1:def 19;
     end;
A9:  for k being Nat st P[k] holds P[k + 1]
     proof
       let k be Nat;
       assume
A10:   P[k];
       set i = CurInstr C1.k;
A11:   IC Exec(i,C1.k)=IC Exec(i,C2.k) &
       Exec(i,C1.k) | D = Exec(i,C2.k) | D by A10,Th23;
A12:   C1.(k + 1) = Following C1.k by AMI_1:def 19
      .= Exec(i,C1.k) by AMI_1:def 18;
A13:  C2.(k + 1) = Following C2.k by AMI_1:def 19
      .= Exec(i,C2.k) by A10,AMI_1:def 18;
       hence
    IC C1.(k + 1) = IC C2.(k + 1) by A10,A12,Th23;
       A14: IC C1.(k + 1) in dom pI by A1,A2,SCMPDS_6:def 2;
      set l = IC C1.(k + 1);
      thus CurInstr C1.(k + 1) = C1.(k + 1).l by AMI_1:def 17
      .= s1.l by AMI_1:54
      .= IsI.l by A1,A3,A14,GRFUNC_1:8
      .= s2.l by A1,A3,A14,GRFUNC_1:8
      .= C2.(k + 1).l by AMI_1:54
      .=CurInstr C2.(k + 1) by A11,A12,A13,AMI_1:def 17;
      thus C1.(k + 1) | D = C2.(k + 1) | D by A10,A12,A13,Th23;
     end;
     thus for k being Nat holds P[k] from Ind(A5,A9);
end;

theorem Th25: ::S8C:100
 for s1,s2 being State of SCMPDS,I being Program-block
     st I is_closed_on s1 &
     s1 | SCM-Data-Loc = s2 | SCM-Data-Loc holds
 for k being Nat holds
     (Computation (s1 +* Initialized stop I)).k,
         (Computation (s2 +* Initialized stop I)).k
         equal_outside the Instruction-Locations of SCMPDS &
     CurInstr (Computation (s1 +* Initialized stop I)).k =
         CurInstr (Computation (s2 +* Initialized stop I)).k
proof
   let s1,s2 be State of SCMPDS,I be Program-block;
   assume A1: I is_closed_on s1;
   assume A2: s1 | D = s2 | D;
   set pI = stop I,
       IsI = Initialized stop I;
   set ss1 = s1 +* IsI;
   set ss2 = s2 +* IsI;
A3: pI c= IsI by SCMPDS_4:9;
      IsI c= ss1 by FUNCT_4:26;
then A4: pI c= ss1 by A3,XBOOLE_1:1;
      IsI c= ss2 by FUNCT_4:26;
then A5: pI c= ss2 by A3,XBOOLE_1:1;
   hereby let k be Nat;
A6:   ss1,ss2 equal_outside A by A2,SCMPDS_6:12;
A7:   I is_closed_on s2 by A1,A2,SCMPDS_6:36;
      then for m st m < k holds IC (Computation ss2).m in dom pI by SCMPDS_6:
def 2;
      hence (Computation ss1).k,(Computation ss2).k equal_outside A
            by A4,A5,A6,SCMPDS_4:67;
then A8:   IC (Computation ss1).k = IC (Computation ss2).k by SCMFSA6A:29;
A9:   IC (Computation ss1).k in dom pI by A1,SCMPDS_6:def 2;
A10:   IC (Computation ss2).k in dom pI by A7,SCMPDS_6:def 2;
      thus CurInstr (Computation ss2).k
       = (Computation ss2).k.IC (Computation ss2).k by AMI_1:def 17
      .= ss2.IC (Computation ss2).k by AMI_1:54
      .= pI.IC (Computation ss2).k by A5,A10,GRFUNC_1:8
      .= ss1.IC (Computation ss1).k by A4,A8,A9,GRFUNC_1:8
      .= (Computation ss1).k.IC (Computation ss1).k by AMI_1:54
      .= CurInstr (Computation ss1).k by AMI_1:def 17;
     end;
end;

theorem Th26: ::SCMPDS_5:20
 for I being Program-block st I is_closed_on s1 &
     Initialized stop I c= s1 & Initialized stop I c= s2 &
     s1,s2 equal_outside the Instruction-Locations of SCMPDS holds
 for k being Nat holds
     (Computation s1).k, (Computation s2).k
         equal_outside the Instruction-Locations of SCMPDS &
     CurInstr (Computation s1).k = CurInstr (Computation s2).k
proof
   let I be Program-block;
   set iI=Initialized stop I;
   assume that
A1: I is_closed_on s1 and
A2: iI c= s1 and
A3: iI c= s2 and
A4: s1,s2 equal_outside A;
A5: s1=s1 +* iI by A2,AMI_5:10;
A6: s2=s2 +* iI by A3,AMI_5:10;
  s1 | D = s2 | D by A4,SCMPDS_6:4;
    hence thesis by A1,A5,A6,Th25;
end;

theorem  ::S8C:41,SCMPDS_5:21  ???
   for s1,s2 being State of SCMPDS,I being Program-block st
     I is_closed_on s1 & I is_halting_on s1 &
     Initialized stop I c= s1 & Initialized stop I c= s2 &
     s1 | SCM-Data-Loc = s2 | SCM-Data-Loc
 holds LifeSpan s1 = LifeSpan s2
proof
   let s1,s2 be State of SCMPDS,I be Program-block;
   set IsI = Initialized stop I;
   assume
A1:  I is_closed_on s1 & I is_halting_on s1 &
     IsI c= s1 & IsI c= s2 & s1 | D = s2 | D;
     then s1 = s1 +* IsI by AMI_5:10;
then A2: s1 is halting by A1,SCMPDS_6:def 3;
    then CurInstr (Computation s1).(LifeSpan s1) = halt SCMPDS &
       for k being Nat st CurInstr (Computation s1).k = halt SCMPDS holds
           LifeSpan s1 <= k by SCM_1:def 2;
then A3: CurInstr (Computation s2).(LifeSpan s1) = halt SCMPDS by A1,Th24;
then A4: s2 is halting by AMI_1:def 20;
     now let k be Nat;
      assume CurInstr (Computation s2).k = halt SCMPDS;
      then CurInstr (Computation s1).k = halt SCMPDS by A1,Th24;
      hence LifeSpan s1 <= k by A2,SCM_1:def 2;
     end;
   hence LifeSpan s1 = LifeSpan s2 by A3,A4,SCM_1:def 2;
end;

theorem Th28: ::SCMPDS_5:21
 for I being Program-block st I is_closed_on s1 & I is_halting_on s1 &
     Initialized stop I c= s1 & Initialized stop I c= s2 &
     s1,s2 equal_outside the Instruction-Locations of SCMPDS holds
 LifeSpan s1 = LifeSpan s2 &
     Result s1, Result s2 equal_outside the Instruction-Locations of SCMPDS
proof
   let I be Program-block;
   set iI=Initialized stop I;
   assume that
A1: I is_closed_on s1 & I is_halting_on s1 and
A2: iI c= s1 and
A3: iI c= s2 and
A4: s1,s2 equal_outside A;
      s1=s1 +* iI by A2,AMI_5:10;
then A5: s1 is halting by A1,SCMPDS_6:def 3;
A6: now let l be Nat; assume
   A7: CurInstr (Computation s2).l = halt SCMPDS;
     CurInstr (Computation s1).l = CurInstr (Computation s2).l
      by A1,A2,A3,A4,Th26;
      hence LifeSpan s1 <= l by A5,A7,SCM_1:def 2;
     end;
A8: CurInstr (Computation s2).LifeSpan s1
     = CurInstr (Computation s1).LifeSpan s1 by A1,A2,A3,A4,Th26
    .= halt SCMPDS by A5,SCM_1:def 2;
A9: s2=s2 +* iI by A3,AMI_5:10;
      s1 | D = s2 | D by A4,SCMPDS_6:4;
    then I is_halting_on s2 by A1,SCMPDS_6:37;
then A10: s2 is halting by A9,SCMPDS_6:def 3;
   hence LifeSpan s1 = LifeSpan s2 by A6,A8,SCM_1:def 2;
then A11: Result s2 = (Computation s2).LifeSpan s1 by A10,SCMFSA6B:16;
     Result s1 = (Computation s1).LifeSpan s1 by A5,SCMFSA6B:16;
   hence Result s1, Result s2 equal_outside A by A1,A2,A3,A4,A11,Th26;
end;

theorem Th29: ::S8C_: 101
 for s1,s2 being State of SCMPDS,I being Program-block
     st I is_closed_on s1 & I is_halting_on s1 &
     s1 | SCM-Data-Loc = s2 | SCM-Data-Loc holds
 LifeSpan (s1 +* Initialized stop I) = LifeSpan (s2 +* Initialized stop I) &
  Result (s1 +* Initialized stop I),Result (s2 +* Initialized stop I)
  equal_outside the Instruction-Locations of SCMPDS
proof
    let s1,s2 be State of SCMPDS,I be Program-block;
    assume A1: I is_closed_on s1;
    assume A2: I is_halting_on s1;
    assume A3: s1 | D = s2 | D;
    set IsI = Initialized stop I;
    set ss1 = s1 +* IsI;
    set ss2 = s2 +* IsI;
A4: ss1 is halting by A2,SCMPDS_6:def 3;
A5: now let l be Nat;
      assume
A6:   CurInstr (Computation ss2).l = halt SCMPDS;
        CurInstr (Computation ss1).l = CurInstr (Computation ss2).l
          by A1,A3,Th25;
      hence LifeSpan ss1 <= l by A4,A6,SCM_1:def 2;
     end;
A7: CurInstr (Computation ss2).LifeSpan ss1
     = CurInstr (Computation ss1).LifeSpan ss1 by A1,A3,Th25
    .= halt SCMPDS by A4,SCM_1:def 2;
      I is_halting_on s2 by A1,A2,A3,SCMPDS_6:37;
then A8: ss2 is halting by SCMPDS_6:def 3;
    hence LifeSpan ss1 = LifeSpan ss2 by A5,A7,SCM_1:def 2;
then A9: Result ss2 = (Computation ss2).LifeSpan ss1 by A8,SCMFSA6B:16;
      Result ss1 = (Computation ss1).LifeSpan ss1 by A4,SCMFSA6B:16;
    hence Result ss1, Result ss2 equal_outside
       the Instruction-Locations of SCMPDS by A1,A3,A9,Th25;
end;

theorem  ::S8C:103
   for s1,s2 being State of SCMPDS,I being Program-block
     st I is_closed_on s1 & I is_halting_on s1 &
     Initialized stop I c= s1 & Initialized stop I c= s2 &
 ex k being Nat st (Computation s1).k,s2
     equal_outside the Instruction-Locations of SCMPDS holds
 Result s1,Result s2 equal_outside the Instruction-Locations of SCMPDS
proof
   let s1,s2 be State of SCMPDS,I be Program-block;
   set pI =stop I,
       IsI=Initialized pI;
    assume A1: I is_closed_on s1;
    assume A2: I is_halting_on s1;
    assume A3: IsI c= s1;
    assume A4: IsI c= s2;
    given k being Nat such that
A5: (Computation s1).k,s2 equal_outside A;
    set s3 = (Computation s1).k;
A6: s2 = s2 +* IsI by A4,AMI_5:10;
    then IC s3 = IC (s2 +* IsI) by A5,SCMFSA6A:29
    .= inspos 0 by SCMPDS_6:21;
    then IC SCMPDS in dom s3 & s3.IC SCMPDS = inspos 0 by AMI_1:def 15,AMI_5:25
;
    then IC SCMPDS .--> inspos 0 c= s3 by SCMFSA6A:7;
then A7:  Start-At inspos 0 c= s3 by AMI_3:def 12;
A8:  s3 | D = s2 | D by A5,SCMPDS_6:4;
       pI c= IsI by SCMPDS_4:9;
     then pI c= s1 by A3,XBOOLE_1:1;
     then pI c= s3 by AMI_3:43;
     then pI +* Start-At inspos 0 c= s3 by A7,SCMFSA6A:6;
     then IsI c= s3 by SCMPDS_4:def 2;
then A9:  s3 = s3 +* IsI by AMI_5:10;
A10: s1 = s1 +* IsI by A3,AMI_5:10;
       now let n be Nat;
        IC (Computation s3).n = IC (Computation s1).(k + n) by AMI_1:51;
      hence IC (Computation s3).n in dom pI by A1,A10,SCMPDS_6:def 2;
     end;
then A11: I is_closed_on s3 by A9,SCMPDS_6:def 2;
A12: s1 is halting by A2,A10,SCMPDS_6:def 3;
     then consider n being Nat such that
A13: CurInstr (Computation s1).n = halt SCMPDS by AMI_1:def 20;
A14: k + n >= n by NAT_1:29;
       CurInstr (Computation s3).n = CurInstr (Computation s1).(k + n)
      by AMI_1:51
     .= CurInstr (Computation s1).n by A13,A14,AMI_1:52;
     then s3 is halting by A13,AMI_1:def 20;
     then I is_halting_on s3 by A9,SCMPDS_6:def 3; then A15:
     Result s3,Result s2 equal_outside A by A6,A8,A9,A11,Th29;
     consider k being Nat such that
A16: CurInstr (Computation s1).k = halt SCMPDS by A12,AMI_1:def 20;
       s1.IC (Computation s1).k
     = (Computation s1).k.IC (Computation s1).k by AMI_1:54
     .= halt SCMPDS by A16,AMI_1:def 17;
     hence Result s1,Result s2 equal_outside A by A15,AMI_1:57;
end;

definition
 let I be Program-block;
 cluster Initialized I -> initial;
 correctness
proof
     now let m,n;
      assume inspos n in dom Initialized I;
  then A1: inspos n in dom I by Th8;
        I c= Initialized I by SCMPDS_4:9;
   then A2: dom I c= dom Initialized I by GRFUNC_1:8;
      assume m < n;
      then inspos m in dom I by A1,SCMPDS_3:def 5;
      hence inspos m in dom Initialized I by A2;
     end;
   hence thesis by SCMPDS_3:def 5;
  end;
end;

theorem Th31: ::S8C_:87
 for s being State of SCMPDS,I being Program-block, a being Int_position st
 I is_halting_on s holds
     IExec(I,s).a = (Computation (s +* Initialized stop I)).
         (LifeSpan (s +* Initialized stop I)).a
proof
   let s be State of SCMPDS,I be Program-block, a be Int_position;
   set s1 = s +* Initialized stop I;
   assume I is_halting_on s;
then A1: s1 is halting by SCMPDS_6:def 3;
      dom (s | A)=A by SCMPDS_6:1;
then A2: not a in dom (s | A) by SCMPDS_2:53;
    thus IExec(I,s).a = (Result s1 +* s | A).a by SCMPDS_4:def 8
      .= (Result s1).a by A2,FUNCT_4:12
      .= (Computation s1).(LifeSpan s1).a by A1,SCMFSA6B:16;
end;

theorem  ::S8C:88
   for s being State of SCMPDS,I being parahalting Program-block,
 a being Int_position holds
     IExec(I,s).a = (Computation (s +* Initialized stop I)).
         (LifeSpan (s +* Initialized stop I)).a
proof
    let s be State of SCMPDS,I be parahalting Program-block,
    a be Int_position;
      I is_halting_on s by SCMPDS_6:35;
    hence thesis by Th31;
end;

theorem Th33:
 for I being Program-block,i being Nat st
 Initialized stop I c= s & I is_closed_on s & I is_halting_on s &
 i < LifeSpan s holds IC (Computation s).i in dom I
proof
   let I be Program-block,i be Nat;
   set sI = stop I,
       iI = Initialized sI,
       Ci = (Computation s).i,
       Lc = IC Ci;
   assume that
A1: iI c= s and
A2: I is_closed_on s and
A3: I is_halting_on s and
A4: i < LifeSpan s;
A5: s = s +* iI by A1,AMI_5:10;
then A6: Lc in dom sI by A2,SCMPDS_6:def 2;
      sI c= iI by SCMPDS_4:9;
then A7: sI c= s by A1,XBOOLE_1:1;
A8: s is halting by A3,A5,SCMPDS_6:def 3;
      now
       assume A9:sI.Lc=halt SCMPDS;
       CurInstr Ci = Ci.Lc by AMI_1:def 17
        .=s.Lc by AMI_1:54
        .=halt SCMPDS by A6,A7,A9,GRFUNC_1:8;
        hence contradiction by A4,A8,SCM_1:def 2;
    end;
    hence thesis by A6,SCMPDS_5:3;
end;

theorem Th34:  :: SP4_88
 for I being shiftable Program-block st
 Initialized stop I c= s1 & I is_closed_on s1 & I is_halting_on s1
 for n being Nat st Shift(I,n) c= s2 & card I > 0 &
   IC s2 = inspos n & s1 | SCM-Data-Loc = s2 | SCM-Data-Loc
   for i being Nat holds i < LifeSpan s1 implies
     IC (Computation s1).i + n = IC (Computation s2).i &
     CurInstr ((Computation s1).i) = CurInstr ((Computation s2).i) &
     (Computation s1).i | SCM-Data-Loc = (Computation s2).i | SCM-Data-Loc
proof
    let I be shiftable Program-block;
    set SI=stop I,
        II=Initialized SI;
    assume
A1: II c= s1 & I is_closed_on s1 & I is_halting_on s1;
    let n be Nat; assume that
A2: Shift(I,n) c= s2 and
A3: card I > 0 and
A4: IC s2 = inspos n and
A5: s1 | SCM-Data-Loc = s2 | SCM-Data-Loc;
A6: s1=s1 +* II by A1,AMI_5:10;
    set C1 = Computation s1;
    set C2 = Computation s2;

    defpred P[Nat] means
       $1 < LifeSpan s1 implies
       IC C1.$1 + n = IC C2.$1 &
       CurInstr (C1.$1) = CurInstr (C2.$1) &
       C1.$1 | SCM-Data-Loc = C2.$1 | SCM-Data-Loc;

A7:  II= SI +* Start-At inspos 0 by SCMPDS_4:def 2;
       dom SI misses dom Start-At inspos 0 by SCMPDS_4:54;
then A8:  SI c= II by A7,FUNCT_4:33;
then A9:  dom SI c= dom II by GRFUNC_1:8;
A10:  inspos 0 in dom I by A3,SCMPDS_4:1;
A11:  inspos 0 in dom SI by SCMPDS_4:75;
A12: P[0]
     proof
     assume 0 < LifeSpan s1;
A13:  IC SCMPDS in dom II by SCMPDS_4:7;
       inspos 0 + n in dom Shift(I,n) by A10,SCMPDS_4:76;
then A14: inspos (0 + n) in dom Shift(I,n) by SCMPDS_3:def 3;
       IC C1.0 = IC s1 by AMI_1:def 19
    .= s1.IC SCMPDS by AMI_1:def 15
    .= II.IC SCMPDS by A1,A13,GRFUNC_1:8
    .= inspos 0 by SCMPDS_4:29;
   hence IC C1.0 + n = inspos (0 + n) by SCMPDS_3:def 3
      .= IC C2.0 by A4,AMI_1:def 19;
A15: s1.IC s1 = s1.(s1.IC SCMPDS) by AMI_1:def 15
      .= s1.((II).IC SCMPDS) by A1,A13,GRFUNC_1:8
      .= s1.inspos 0 by SCMPDS_4:29
      .= II.inspos 0 by A1,A9,A11,GRFUNC_1:8
      .= SI.inspos 0 by A8,A11,GRFUNC_1:8;
    thus CurInstr (C1.0)
       = CurInstr s1 by AMI_1:def 19
      .= s1.IC s1 by AMI_1:def 17
      .= Shift(SI,n).(inspos 0 + n) by A11,A15,SCMPDS_3:37
      .= Shift(SI,n).inspos (0 + n) by SCMPDS_3:def 3
      .= Shift(I,n).inspos n by A3,Th19
      .= s2.IC s2 by A2,A4,A14,GRFUNC_1:8
      .= CurInstr s2 by AMI_1:def 17
      .= CurInstr (C2.0) by AMI_1:def 19;
  thus C1.0 | SCM-Data-Loc
       = s2 | SCM-Data-Loc by A5,AMI_1:def 19
      .= C2.0 | SCM-Data-Loc by AMI_1:def 19;
     end;
A16: for k being Nat st P[k] holds P[k + 1]
     proof
       let k be Nat;
       assume A17: P[k];
         now
          assume A18: k+1 < LifeSpan s1;
          A19: k <= k+1 by NAT_1:29;
         set i = CurInstr C1.k;
A20:     C1.(k + 1) = Following C1.k by AMI_1:def 19
         .= Exec(CurInstr C1.k,C1.k) by AMI_1:def 18;
A21:     C2.(k + 1) = Following C2.k by AMI_1:def 19
         .= Exec(CurInstr C2.k,C2.k) by AMI_1:def 18;
A22:     IC C1.k in dom SI by A1,A6,SCMPDS_6:def 2;
A23:     i = C1.k.(IC C1.k) by AMI_1:def 17
         .= s1.IC C1.k by AMI_1:54
         .= II.IC C1.k by A1,A9,A22,GRFUNC_1:8
         .= SI.IC C1.k by A8,A22,GRFUNC_1:8;
        consider m such that
A24:    IC C1.k =inspos m by SCMPDS_3:32;
A25:    InsCode i <> 1 & InsCode i <> 3 & i valid_at m
        by A22,A23,A24,SCMPDS_4:def 12;
hence A26: IC C1.(k + 1) + n
          = IC C2.(k + 1) by A17,A18,A19,A20,A21,A24,AXIOMS:22,SCMPDS_4:83;
      set l = IC C1.(k + 1);
A27:   IC C1.(k + 1) in dom I by A1,A18,Th33;
A28:   IC C1.(k + 1) in dom SI by A1,A6,SCMPDS_6:def 2;
A29:   CurInstr C1.(k + 1) = C1.(k + 1).l by AMI_1:def 17
       .= s1.l by AMI_1:54
       .= II.l by A1,A9,A28,GRFUNC_1:8
       .= SI.l by A8,A28,GRFUNC_1:8;
A30:   IC C2.(k + 1) in dom Shift(I,n) by A26,A27,SCMPDS_4:76;
       thus CurInstr C1.(k + 1)
         = Shift(SI,n).(l + n) by A28,A29,SCMPDS_3:37
        .= Shift(I,n).(IC C2.(k + 1)) by A26,A27,Th18
        .= s2.IC C2.(k + 1) by A2,A30,GRFUNC_1:8
        .= C2.(k + 1).IC C2.(k + 1) by AMI_1:54
        .= CurInstr C2.(k + 1) by AMI_1:def 17;
      thus C1.(k + 1) | SCM-Data-Loc
        = C2.(k + 1) | SCM-Data-Loc by A17,A18,A19,A20,A21,A24,A25,AXIOMS:22,
SCMPDS_4:83;
     end;
     hence P[k+1];
   end;
   let i be Nat;
     for k being Nat holds P[k] from Ind(A12,A16);
   hence thesis;
end;

theorem Th35:
 for I being No-StopCode Program-block st
 Initialized stop I c= s & I is_halting_on s & card I > 0 holds
 LifeSpan s > 0
proof
  let I be No-StopCode Program-block;
    set II=Initialized stop I,
        si=s +* II;
  assume
A1: II c= s & I is_halting_on s & card I > 0;
  assume A2: LifeSpan s <= 0;
A3: s=si by A1,AMI_5:10;
    A4: LifeSpan s=0 by A2,NAT_1:18;
A5: si is halting by A1,SCMPDS_6:def 3;
A6: inspos 0 in dom I by A1,SCMPDS_4:1;
A7: I c= II by SCMPDS_6:17;
    then A8: dom I c= dom II by GRFUNC_1:8;
      halt SCMPDS = CurInstr((Computation si).0) by A3,A4,A5,SCM_1:def 2
    .= CurInstr si by AMI_1:def 19
    .= si.IC si by AMI_1:def 17
    .= s.inspos 0 by A3,SCMPDS_6:21
    .=II.inspos 0 by A1,A6,A8,GRFUNC_1:8
    .=I.inspos 0 by A6,A7,GRFUNC_1:8;
   hence contradiction by A6,SCMPDS_5:def 3;
end;

theorem Th36:
 for I being No-StopCode shiftable Program-block st
 Initialized stop I c= s1 & I is_closed_on s1 & I is_halting_on s1
 for n being Nat st Shift(I,n) c= s2 & card I > 0 &
   IC s2 = inspos n & s1 | SCM-Data-Loc = s2 | SCM-Data-Loc
 holds
  IC (Computation s2).LifeSpan s1 = inspos (card I + n) &
  (Computation s1).(LifeSpan s1) | SCM-Data-Loc
  = (Computation s2).(LifeSpan s1) | SCM-Data-Loc
proof
    let I be No-StopCode shiftable Program-block;
    set II=Initialized stop I,
        C1=Computation s1,
        C2=Computation s2;
    assume
A1: II c= s1 & I is_closed_on s1 & I is_halting_on s1;
    let n be Nat; assume that
A2: Shift(I,n) c= s2 and
A3: card I > 0 and
A4: IC s2 = inspos n and
A5: s1 | SCM-Data-Loc = s2 | SCM-Data-Loc;
      LifeSpan s1 > 0 by A1,A3,Th35;
    then 1+0 <= LifeSpan s1 by INT_1:20;
    then consider i be Nat such that
A6: 1+i=LifeSpan s1 by NAT_1:28;
    set i2=CurInstr C2.i;
A7: i < LifeSpan s1 by A6,REAL_1:69;
then A8: IC C1.i + n = IC C2.i by A1,A2,A3,A4,A5,Th34;
    set L1=IC C1.i;
A9: L1 in dom I by A1,A7,Th33;
A10: I c= II by SCMPDS_6:17;
    then A11: dom I c= dom II by GRFUNC_1:8;
A12: i2=CurInstr C1.i by A1,A2,A3,A4,A5,A7,Th34;
then A13: i2=C1.i.L1 by AMI_1:def 17
    .=s1.L1 by AMI_1:54
    .=II.L1 by A1,A9,A11,GRFUNC_1:8
    .=I.L1 by A9,A10,GRFUNC_1:8;
     consider m such that
A14:  L1 =inspos m by SCMPDS_3:32;
A15:  InsCode i2 <> 1 & InsCode i2 <> 3 & i2 valid_at m
      by A9,A13,A14,SCMPDS_4:def 12;
    s1=s1 +* II by A1,AMI_5:10;
then A16: IC C1.(i+1)=inspos card I by A1,A6,SCMPDS_6:43;
A17: C1.(i + 1) = Following C1.i by AMI_1:def 19
    .= Exec(i2,C1.i) by A12,AMI_1:def 18;
A18: C1.i | SCM-Data-Loc = C2.i | SCM-Data-Loc by A1,A2,A3,A4,A5,A7,Th34;
A19: C2.(i + 1) = Following C2.i by AMI_1:def 19
    .=Exec(i2,C2.i) by AMI_1:def 18;
   hence
      IC C2.LifeSpan s1 = inspos card I + n by A6,A8,A14,A15,A16,A17,A18,
SCMPDS_4:83
    .= inspos (card I + n) by SCMPDS_3:def 3;
   thus
      C1.(LifeSpan s1) | SCM-Data-Loc = C2.(LifeSpan s1) | SCM-Data-Loc by A6,
A8,A14,A15,A17,A18,A19,SCMPDS_4:83;
end;

theorem Th37:
 for s being State of SCMPDS,I being Program-block,n being Nat
 st IC (Computation (s +* Initialized I)).n = inspos 0
 holds (Computation (s +* Initialized I)).n +* Initialized I
        =(Computation (s +* Initialized I)).n
proof
  let s be State of SCMPDS,I be Program-block,n be Nat;
  set II=Initialized I,
      sn=(Computation (s +* II)).n;
  assume IC sn= inspos 0;
then A1: sn +* II = sn +* I by Th5;
      I c= I +* Start-At inspos 0 by SCMPDS_6:6;
then A2: I c= II by SCMPDS_4:def 2;
      II c= s +* II by FUNCT_4:26;
    then I c= s +* II by A2,XBOOLE_1:1;
    then I c= sn by AMI_3:38;
    hence thesis by A1,AMI_5:10;
end;

theorem Th38:  ::SCMPDS_5:33
 for I being Program-block,J being Program-block,
  k being Nat st I is_closed_on s & I is_halting_on s
  & k <= LifeSpan (s +* Initialized stop(I))
 holds (Computation (s +* Initialized stop I )).k,
       (Computation (s +* ((I ';' J) +* Start-At inspos 0))).k
        equal_outside the Instruction-Locations of SCMPDS
proof
    let I be Program-block,J be Program-block,k be Nat;
    set SA0=Start-At inspos 0,
        spI= stop I;
    set s1 = s +* Initialized spI;
    set s2 = s +* ((I ';' J) +* SA0);
    set n=LifeSpan s1;
    assume A1: I is_closed_on s & I is_halting_on s & k <= n;
A2: s1 = s +* (spI +* SA0) by SCMPDS_4:def 2
    .=s +* spI +* SA0 by FUNCT_4:15
    .=s+*SA0+* spI by SCMPDS_4:62;
A3: s2 = s +* (I ';' J) +* SA0 by FUNCT_4:15
       .= s+*SA0+*(I ';' J) by SCMPDS_4:62;
     set IL=the Instruction-Locations of SCMPDS;
     set Cs1 = Computation s1, Cs2 = Computation s2;
       s +* SA0, s +* SA0 +* spI equal_outside IL by SCMFSA6A:27;
then A4:  s +* SA0 +* spI, s +* SA0 equal_outside IL by FUNCT_7:28;
     A5: s +* SA0, s +* SA0 +* (I ';' J) equal_outside IL by SCMFSA6A:27;
     defpred X[Nat] means $1 <= n implies Cs1.$1, Cs2.$1 equal_outside IL;
       Cs1.0 = s1 & Cs2.0 = s2 by AMI_1:def 19;
then A6: X[0] by A2,A3,A4,A5,FUNCT_7:29
;
A7: for m being Nat st X[m] holds X[m+1]
  proof let m be Nat;
    assume
A8:  m <= n implies Cs1.m, Cs2.m equal_outside IL;
    assume A9: m+1 <= n;
then A10:    m < n by NAT_1:38;
A11:    Cs1.(m+1) = Following Cs1.m by AMI_1:def 19
             .= Exec(CurInstr Cs1.m,Cs1.m) by AMI_1:def 18;
A12:    Cs2.(m+1) = Following Cs2.m by AMI_1:def 19
             .= Exec(CurInstr Cs2.m,Cs2.m) by AMI_1:def 18;
A13:   IC Cs1.m = IC Cs2.m by A8,A9,NAT_1:38,SCMFSA6A:29;
A14:   IC Cs1.m in dom spI by A1,SCMPDS_6:def 2;
A15:    stop I = I ';' SCMPDS-Stop by SCMPDS_4:def 7;
A16:    I ';' J = I +* Shift(J, card I) by SCMPDS_4:def 3;
A17:    IC Cs1.m in dom I by A1,A10,SCMPDS_6:40;
then A18:    IC Cs1.m in dom (I ';' J) by A16,FUNCT_4:13;
      CurInstr Cs1.m
        = (Cs1.m).IC Cs1.m by AMI_1:def 17
        .= s1.IC Cs1.m by AMI_1:54
        .= spI.IC Cs1.m by A2,A14,FUNCT_4:14
        .= I.IC Cs1.m by A15,A17,SCMPDS_4:37
        .= (I ';' J).IC Cs1.m by A17,SCMPDS_4:37
        .= s2.IC Cs1.m by A3,A18,FUNCT_4:14
        .= (Cs2.m).IC Cs1.m by AMI_1:54
        .=CurInstr Cs2.m by A13,AMI_1:def 17;
    hence Cs1.(m+1),Cs2.(m+1) equal_outside IL by A8,A9,A11,A12,NAT_1:38,
SCMPDS_4:15;
   end;
     for k being Nat holds X[k] from Ind(A6, A7);
   hence thesis by A1;
end;

theorem Th39:  ::SCMPDS_5:29
 for I,J being Program-block,k be Nat
 st I c= J & I is_closed_on s & I is_halting_on s &
    k <= LifeSpan (s +* Initialized stop(I))
 holds
 (Computation (s +* Initialized J)).k,
   (Computation (s +* Initialized stop(I))).k
    equal_outside the Instruction-Locations of SCMPDS
proof
 let I,J be Program-block,k be Nat;
  set IsI=Initialized stop(I),
      IL=the Instruction-Locations of SCMPDS,
      m=LifeSpan (s +* IsI);
  assume that
A1: I c= J and
A2: I is_closed_on s and
A3: I is_halting_on s and
A4: k <= m;
    set Sp=SCMPDS-Stop,
        iJ=Initialized J,
        Cs1=Computation (s +* iJ),
        Cs2=Computation (s +* IsI);
    defpred P[Nat] means
       $1 <= m implies
       Cs1.$1,Cs2.$1 equal_outside IL;
A5: dom I c= dom J by A1,GRFUNC_1:8;
A6: stop I = I ';' Sp by SCMPDS_4:def 7;
then A7: stop I = I +* Shift(Sp, card I) by SCMPDS_4:def 3;
A8: P[0]
   proof
    assume 0 <= m;
    A9: Cs1.0=s +* iJ by AMI_1:def 19;
          Cs2.0=s +* IsI by AMI_1:def 19;
        hence Cs1.0,Cs2.0 equal_outside IL by A9,SCMPDS_4:36;
   end;
A10: now let k be Nat;
      assume A11: P[k];
        now assume A12:k+1 <= m;
       A13: k < k+1 by REAL_1:69;
       then A14: IC Cs1.k = IC Cs2.k by A11,A12,AXIOMS:22,SCMFSA6A:29;
          k < m by A12,A13,AXIOMS:22;
       then A15: IC Cs2.k in dom I by A2,A3,SCMPDS_6:40;
       then A16: IC Cs2.k in dom (stop I) by A7,FUNCT_4:13;
       A17: CurInstr Cs1.k
        = (Cs1.k).IC Cs2.k by A14,AMI_1:def 17
        .= (s +* iJ).IC Cs2.k by AMI_1:54
        .= J.IC Cs2.k by A5,A15,Th10
        .= I.IC Cs2.k by A1,A15,GRFUNC_1:8
        .= (stop I).IC Cs2.k by A6,A15,SCMPDS_4:37
        .= (s +* IsI).IC Cs2.k by A16,Th10
        .= (Cs2.k).IC Cs2.k by AMI_1:54
        .= CurInstr Cs2.k by AMI_1:def 17;
      A18: (Cs1).(k + 1) = Following Cs1.k by AMI_1:def 19
         .= Exec(CurInstr Cs1.k,Cs1.k) by AMI_1:def 18;
            (Cs2).(k + 1) = Following Cs2.k by AMI_1:def 19
         .= Exec(CurInstr Cs2.k,Cs2.k) by AMI_1:def 18;
        hence Cs1.(k+1),Cs2.(k+1) equal_outside IL
         by A11,A12,A13,A17,A18,AXIOMS:22,SCMPDS_4:15;
      end;
      hence P[k+1];
   end;
     for k be Nat holds P[k] from Ind(A8,A10);
   hence thesis by A4;
end;

theorem Th40:
 for I,J being Program-block,k be Nat st
 k <= LifeSpan (s +* Initialized stop(I)) & I c= J
 & I is_closed_on s & I is_halting_on s
 holds IC (Computation (s +* Initialized J)).k in dom stop I
proof
 let I,J be Program-block,k be Nat;
  set ss = s +* Initialized stop(I);
  set s1=(Computation (s +* Initialized J)).k,
      s2=(Computation ss).k;
  assume
A1: k <= LifeSpan ss & I c= J & I is_closed_on s & I is_halting_on s;
    then s1,s2 equal_outside
    the Instruction-Locations of SCMPDS by Th39;
    then IC s1 = IC s2 by SCMFSA6A:29;
    hence IC s1 in dom stop(I) by A1,SCMPDS_6:def 2;
end;

theorem Th41:    ::SCMPDS_5:31
 for I,J being Program-block st I c= J
 & I is_closed_on s & I is_halting_on s
 holds
 CurInstr (Computation (s +* Initialized J)).LifeSpan
  (s +* Initialized stop(I)) = halt SCMPDS
 or IC (Computation (s +* Initialized J)).LifeSpan
  (s +* Initialized stop(I)) = inspos card I
proof
 let I,J be Program-block;
  set IsI=Initialized stop(I),
      ss = s +* IsI,
      m=LifeSpan ss;
    set s0=s +* Initialized J,
        s1=(Computation s0).m,
        s2=(Computation ss).m,
        Ik = IC s2;
  assume
A1: I c= J & I is_closed_on s & I is_halting_on s;
then A2: dom I c= dom J by GRFUNC_1:8;
A3: IsI c= ss by FUNCT_4:26;
    A4: s1,(Computation ss).m equal_outside
    the Instruction-Locations of SCMPDS by A1,Th39;
then A5: IC s1 = Ik by SCMFSA6A:29;
A6: Ik in dom stop(I) by A1,SCMPDS_6:def 2;
A7: ss is halting by A1,SCMPDS_6:def 3;
      stop I c= IsI by SCMPDS_4:9;
then A8: stop I c= ss by A3,XBOOLE_1:1;
    consider n such that
A9: inspos n= Ik by SCMPDS_3:32;
A10: stop I = I ';' SCMPDS-Stop by SCMPDS_4:def 7;
      card stop I = card I + 1 by SCMPDS_5:7;
    then n < card I + 1 by A6,A9,SCMPDS_4:1;
 then A11: n <= card I by INT_1:20;
      now per cases by A11,REAL_1:def 5;
    case n < card I;
        then A12: inspos n in dom I by SCMPDS_4:1;
    thus halt SCMPDS = CurInstr s2 by A7,SCM_1:def 2
        .= s2.Ik by AMI_1:def 17
        .= ss.Ik by AMI_1:54
        .= (stop I).Ik by A6,A8,GRFUNC_1:8
        .= I.Ik by A9,A10,A12,SCMPDS_4:37
        .= J.Ik by A1,A9,A12,GRFUNC_1:8
        .= s0.IC s1 by A2,A5,A9,A12,Th10
        .= s1.IC s1 by AMI_1:54
        .=CurInstr s1 by AMI_1:def 17;
    case n = card I;
      hence IC s1= inspos card I by A4,A9,SCMFSA6A:29;
    end;
    hence thesis;
end;

theorem Th42:
 for I,J being Program-block st
   I is_halting_on s &
  J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s)
  holds
  J is_closed_on (Computation (s +* Initialized stop I)).
     LifeSpan (s +* Initialized stop I) &
  J is_halting_on (Computation (s +* Initialized stop I)).
     LifeSpan (s +* Initialized stop I)
proof
    let I,J be Program-block;
    set s1= s +* Initialized stop I,
        sm = (Computation s1).LifeSpan s1,
        sE = IExec(I,s);
  assume
A1: I is_halting_on s & J is_closed_on sE & J is_halting_on sE;
    A2: dom (s | A) = A by SCMPDS_6:1;
A3: s1 is halting by A1,SCMPDS_6:def 3;
      sE=Result s1 +* s | A by SCMPDS_4:def 8;
    then sE | D = (Result s1) | D by A2,AMI_5:7,SCMPDS_2:10
    .= sm | D by A3,SCMFSA6B:16;
    hence J is_closed_on sm & J is_halting_on sm by A1,SCMPDS_6:37;
end;

theorem Th43:
 for I being Program-block,J being shiftable Program-block st
 I is_closed_on s & I is_halting_on s &
 J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s)
  holds (I ';'J) is_closed_on s & (I ';' J) is_halting_on s
proof
  let I be Program-block,J be shiftable Program-block;
  set sE=IExec(I,s);
  assume A1: I is_closed_on s & I is_halting_on s &
   J is_closed_on sE & J is_halting_on sE;
   set IJ =I ';' J,
       sIJ = stop IJ,
       IsIJ = Initialized sIJ,
       spI = stop I,
       IsI = Initialized spI,
       ss=s +* IsIJ;
A2: IsIJ c= ss by FUNCT_4:26;
A3: ss = s +* ((I ';' (J ';' SCMPDS-Stop)) +* Start-At inspos 0)
    by SCMPDS_5:14;
A4: sIJ c= ss by A2,SCMPDS_4:57;
    set spJ = stop J,
        IsJ = Initialized spJ,
        s1 = s +* IsI,
        m1 = LifeSpan s1,
        sm = (Computation s1).m1,
        s3 = sm +* IsJ,
        m3 = LifeSpan s3;

A5:  s3 | D = ((Computation s1).m1 | D) +* IsJ | D by AMI_5:6;
A6:  now let x be set;
         assume x in dom (IsJ | D);
         then A7: x in dom IsJ /\ D by FUNCT_1:68;
    then A8: x in dom IsJ & x in D by XBOOLE_0:def 3;
         per cases by A8,SCMPDS_4:28;
         suppose A9: x in dom spJ;
              dom spJ c= A by AMI_3:def 13;
          hence (IsJ | D).x = ((Computation s1).m1 | D).x by A8,A9,SCMPDS_4:22
;
         suppose x = IC SCMPDS;
          hence (IsJ | D).x = ((Computation s1).m1 | D).x by A7,SCMPDS_3:6,
XBOOLE_0:def 3;
      end;
A10:   IsJ c= s3 by FUNCT_4:26;
      then dom IsJ c= dom s3 by GRFUNC_1:8;
then A11:  dom IsJ c= the carrier of SCMPDS by AMI_3:36;
        dom (IsJ | D) = dom IsJ /\ D by RELAT_1:90;
      then dom (IsJ | D) c= (the carrier of SCMPDS) /\ D by A11,XBOOLE_1:26;
      then dom (IsJ | D) c= dom sm /\ D by AMI_3:36;
      then dom (IsJ | D) c= dom (sm | D) by RELAT_1:90;
      then IsJ | D c= sm | D by A6,GRFUNC_1:8;
then A12:  sm | D = s3 | D by A5,LATTICE2:8;
      set s4 = (Computation ss).m1;

    (Computation s1).m1, s4 equal_outside A by A1,A3,Th38;
then A13:  s4 | D = s3 | D by A12,SCMPDS_4:24;
A14:   J is_closed_on sm & J is_halting_on sm by A1,Th42;
then A15:   J is_closed_on s3 by SCMPDS_6:38;
A16:  s3 is halting by A14,SCMPDS_6:def 3;
A17:   I c= sIJ by Th17;
A18:   dom stop I c= dom sIJ by SCMPDS_5:16;
        sIJ = I ';' J ';' SCMPDS-Stop by SCMPDS_4:def 7
      .= I ';' (J ';' SCMPDS-Stop) by SCMPDS_4:46
      .= I ';' spJ by SCMPDS_4:def 7
      .= I +* Shift(spJ, card I) by SCMPDS_4:def 3;
      then Shift(spJ, card I) c= sIJ by FUNCT_4:26;
      then Shift(spJ, card I) c= ss by A4,XBOOLE_1:1;
then A19:   Shift(spJ, card I) c= s4 by AMI_3:38;
        now let k be Nat;
          per cases;
          suppose k <= m1;
          then IC (Computation ss).k in dom stop I by A1,A17,Th40;
          hence IC (Computation ss).k in dom sIJ by A18;
          suppose A20: k > m1;
          A21: IC s4 in dom spI by A1,A17,Th40;
          hereby
           per cases by A1,A17,Th41;
           suppose A22:IC s4 = inspos card I;
             consider ii be Nat such that
         A23: k=m1+ii by A20,NAT_1:28;
         A24: IC (Computation s3).ii + card I = IC (Computation s4).ii
             by A10,A13,A15,A19,A22,SCMPDS_6:45;
             consider nn be Nat such that
         A25: IC (Computation s3).ii = inspos nn by SCMPDS_3:32;
               inspos nn in dom spJ by A14,A25,SCMPDS_6:def 2;
             then nn < card spJ by SCMPDS_4:1;
             then nn < card J+1 by SCMPDS_5:7;
             then card I +nn < card I +(card J+1) by REAL_1:53;
         then A26: nn+ card I < card I + card J+1 by XCMPLX_1:1;
             A27: card sIJ=card IJ+1 by SCMPDS_5:7
             .=card I + card J+1 by SCMPDS_4:45;
               IC (Computation ss).k=inspos nn+card I by A23,A24,A25,AMI_1:51
             .=inspos (nn + card I) by SCMPDS_3:def 3;
             hence IC (Computation ss).k in dom sIJ by A26,A27,SCMPDS_4:1;
           suppose CurInstr s4 = halt SCMPDS;
             then IC (Computation ss).k=IC s4 by A20,AMI_1:52;
             hence IC (Computation ss).k in dom sIJ by A18,A21;
          end;
      end;
     hence (I ';'J) is_closed_on s by SCMPDS_6:def 2;
     per cases by A1,A17,Th41;
     suppose CurInstr s4 = halt SCMPDS;
       then ss is halting by AMI_1:def 20;
       hence (I ';' J) is_halting_on s by SCMPDS_6:def 3;

     suppose IC s4 = inspos card I;
       then CurInstr (Computation s3).m3 = CurInstr (Computation s4).m3
       by A10,A13,A15,A19,SCMPDS_6:45;
         then CurInstr (Computation ss).(m1 + m3)
         = CurInstr (Computation s3).m3 by AMI_1:51
        .= halt SCMPDS by A16,SCM_1:def 2;
       then ss is halting by AMI_1:def 20;
       hence (I ';' J) is_halting_on s by SCMPDS_6:def 3;
end;

theorem Th44: :: SCMPDS_5:30
 for I be No-StopCode Program-block,J be Program-block
 st I c= J & I is_closed_on s & I is_halting_on s
 holds
     IC (Computation (s +* Initialized J)).
     LifeSpan (s +* Initialized stop(I)) = inspos card I
proof
  let I be No-StopCode Program-block,J be Program-block;
  set s1 = s +* Initialized J,
      ss = s +* Initialized stop(I),
      m=LifeSpan ss;
  assume
A1: I c= J & I is_closed_on s & I is_halting_on s;
    then (Computation s1).m,(Computation ss).m equal_outside A by Th39;
    hence IC (Computation s1).m =IC (Computation ss).LifeSpan ss by SCMFSA6A:29
          .=inspos card I by A1,SCMPDS_6:43;
end;

theorem      ::SCMPDS_6:42
   for I being Program-block,s being State of SCMPDS,
 k being Nat st I is_halting_on s &
    k < LifeSpan (s +* Initialized stop I)
 holds CurInstr (Computation (s +* Initialized stop I)).k <> halt SCMPDS
proof
  let I be Program-block,s be State of SCMPDS,k be Nat;
  set ss=s +* Initialized stop(I),
      m=LifeSpan ss;
  assume
A1: I is_halting_on s & k < m;
then A2: ss is halting by SCMPDS_6:def 3;
    assume CurInstr ((Computation ss).k)=halt SCMPDS;
     hence thesis by A1,A2,SCM_1:def 2;
end;

theorem Th46:     ::SCMPDS_6:42
 for I,J being Program-block,s being State of SCMPDS,k being Nat
 st I is_closed_on s & I is_halting_on s &
    k < LifeSpan (s +* Initialized stop I)
  holds CurInstr (Computation (s +* Initialized stop (I ';' J))).k
    <> halt SCMPDS
proof
  let I,J be Program-block,s be State of SCMPDS,k be Nat;
  set s1=s +* Initialized stop I,
      s2=s +* Initialized stop (I ';' J),
      m=LifeSpan s1,
      s3=(Computation s2).k;
  assume
A1: I is_closed_on s & I is_halting_on s & k < m;
then A2: s1 is halting by SCMPDS_6:def 3;
    assume CurInstr s3 = halt SCMPDS;
    then CurInstr (Computation s1).k = halt SCMPDS by A1,SCMPDS_6:41;
     hence thesis by A1,A2,SCM_1:def 2;
end;

Lm1:
 for I being No-StopCode Program-block,J being
 shiftable Program-block,s,s1,s2 being State of SCMPDS
 st I is_closed_on s & I is_halting_on s &
    J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s) &
 s2=s +* Initialized stop (I ';' J) & s1=s +* Initialized stop I holds
 IC (Computation s2).(LifeSpan s1) = inspos card I &
 (Computation s2).(LifeSpan s1) | SCM-Data-Loc =
 ((Computation s1).(LifeSpan s1) +* Initialized stop J) | SCM-Data-Loc &
   Shift(stop J,card I) c= (Computation s2).(LifeSpan s1) &
  LifeSpan s2 = LifeSpan s1 + LifeSpan (Result s1 +* Initialized stop J)
proof
 let I be No-StopCode Program-block,J be shiftable Program-block,s,s1,s2
  be State of SCMPDS;
   set IsI = Initialized stop I,
       spJ = stop J,
       IsJ = Initialized spJ,
       IJ = I ';' J,
       sIJ = stop IJ,
       IsIJ = Initialized sIJ,
       m1 = LifeSpan s1,
       sm = (Computation s1).m1,
       s3 = sm +* IsJ;
   set m3 = LifeSpan s3,
       sE = IExec(I,s);
   assume
A1:  I is_closed_on s & I is_halting_on s &
     J is_closed_on sE & J is_halting_on sE &
     s2=s +* IsIJ & s1=s +* IsI;
then A2:  s2 = s +* ((I ';' (J ';' SCMPDS-Stop)) +* Start-At inspos 0)
      by SCMPDS_5:14;
A3:  IsIJ c= s2 by A1,FUNCT_4:26;
       sIJ c= IsIJ by SCMPDS_4:9;
then A4:  sIJ c= s2 by A3,XBOOLE_1:1;
A5:  s3 | D = ((Computation s1).m1 | D) +* IsJ | D by AMI_5:6;
A6:  now let x be set;
         assume x in dom (IsJ | D);
         then A7: x in dom IsJ /\ D by FUNCT_1:68;
    then A8: x in dom IsJ & x in D by XBOOLE_0:def 3;
         per cases by A8,SCMPDS_4:28;
         suppose A9: x in dom spJ;
              dom spJ c= A by AMI_3:def 13;
          hence (IsJ | D).x = ((Computation s1).m1 | D).x by A8,A9,SCMPDS_4:22
;
         suppose x = IC SCMPDS;
          hence (IsJ | D).x = ((Computation s1).m1 | D).x by A7,SCMPDS_3:6,
XBOOLE_0:def 3;
     end;
A10:   IsJ c= s3 by FUNCT_4:26;
      then dom IsJ c= dom s3 by GRFUNC_1:8;
then A11:  dom IsJ c= the carrier of SCMPDS by AMI_3:36;
        dom (IsJ | D) = dom IsJ /\ D by RELAT_1:90;
      then dom (IsJ | D) c= (the carrier of SCMPDS) /\ D by A11,XBOOLE_1:26;
      then dom (IsJ | D) c= dom ((Computation s1).m1) /\ D by AMI_3:36;
      then dom (IsJ | D) c= dom ((Computation s1).m1 | D) by RELAT_1:90;
      then IsJ | D c= (Computation s1).m1 | D by A6,GRFUNC_1:8;
then A12:  (Computation s1).m1 | D = s3 | D by A5,LATTICE2:8;
      set s4 = (Computation s2).m1;
A13:   (Computation s1).m1, s4 equal_outside A by A1,A2,Th38;

A14:   J is_closed_on sm & J is_halting_on sm by A1,Th42;
then A15:  J is_closed_on s3 by SCMPDS_6:38;
A16:  s3 is halting by A14,SCMPDS_6:def 3;

        I c= sIJ by Th17;
      hence
A17:   IC s4 = inspos card I by A1,Th44;
      thus
A18:   s4 | D = s3 | D by A12,A13,SCMPDS_4:24;
      reconsider m = m1 + m3 as Nat;
        sIJ = I ';' J ';' SCMPDS-Stop by SCMPDS_4:def 7
        .= I ';' (J ';' SCMPDS-Stop) by SCMPDS_4:46
        .= I ';' spJ by SCMPDS_4:def 7
        .= I +* Shift(spJ, card I) by SCMPDS_4:def 3;
        then Shift(spJ, card I) c= sIJ by FUNCT_4:26;
        then Shift(spJ, card I) c= s2 by A4,XBOOLE_1:1;
     hence
        A19: Shift(spJ, card I) c= s4 by AMI_3:38;

A20:  now let k be Nat;
      assume m1 + k < m;
then A21:    k < m3 by AXIOMS:24;
      assume
A22:    CurInstr (Computation s2).(m1 + k) = halt SCMPDS;
          CurInstr (Computation s3).k
        = CurInstr (Computation s4).k by A10,A15,A17,A18,A19,SCMPDS_6:45
        .= halt SCMPDS by A22,AMI_1:51;
        hence contradiction by A16,A21,SCM_1:def 2;
     end;
       CurInstr (Computation s3).m3 = CurInstr (Computation s4).m3
         by A10,A15,A17,A18,A19,SCMPDS_6:45;
     then CurInstr (Computation s3).m3
          = CurInstr (Computation s2).(m1 + m3) by AMI_1:51;
then A23:  CurInstr (Computation s2).m = halt SCMPDS by A16,SCM_1:def 2;

       now let k be Nat;
      assume
A24:    k < m;
      per cases;
      suppose k < m1;
       hence CurInstr (Computation s2).k <> halt SCMPDS by A1,Th46;
      suppose m1 <= k;
       then consider kk being Nat such that
A25:         m1 + kk = k by NAT_1:28;
       thus CurInstr (Computation s2).k <> halt SCMPDS by A20,A24,A25;
     end;
then A26:  for k being Nat st CurInstr (Computation s2).k = halt SCMPDS
     holds m <= k;
    IJ is_halting_on s by A1,Th43;
     then s2 is halting by A1,SCMPDS_6:def 3;
then A27: LifeSpan s2 = m by A23,A26,SCM_1:def 2;
       s1 is halting by A1,SCMPDS_6:def 3;
   hence
     LifeSpan s2 = LifeSpan s1 + LifeSpan (Result s1 +* IsJ) by A27,SCMFSA6B:16
;
end;

theorem  ::SCMPDS_5:37
  for I being No-StopCode Program-block,J being shiftable Program-block
 st I is_closed_on s & I is_halting_on s &
    J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s)
   holds
     LifeSpan (s +* Initialized stop (I ';' J))
     = LifeSpan (s +* Initialized stop I)
      + LifeSpan (Result (s +* Initialized stop I) +* Initialized stop J)
by Lm1;

theorem Th48: :: SCMPDS_5:38
 for I being No-StopCode Program-block,J being shiftable Program-block st
 I is_closed_on s & I is_halting_on s &
 J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s)
  holds
  IExec(I ';' J,s) =
      IExec(J,IExec(I,s)) +* Start-At (IC IExec(J,IExec(I,s)) + card I)
proof
 let I be No-StopCode Program-block,J be shiftable Program-block;
   set ps = s | A,
       IsI = Initialized stop I,
       IsJ = Initialized stop J,
       IJ = I ';' J,
       IsIJ =Initialized stop IJ,
       s1 = s +* IsI ,
       m1 = LifeSpan s1,
       C1 = Computation s1,
       s2 = s +* IsIJ,
       s3 = C1.m1 +* IsJ,
       m3 = LifeSpan s3,
       C2 = Computation s2,
       C3 = Computation s3,
       sE = IExec(I,s);
  assume A1: I is_closed_on s & I is_halting_on s &
             J is_closed_on sE & J is_halting_on sE;
then A2: s1 is halting by SCMPDS_6:def 3;
   IJ is_closed_on s & IJ is_halting_on s by A1,Th43;
then A3: s2 is halting by SCMPDS_6:def 3;
A4: IsJ c= s3 by FUNCT_4:26;
A5: J is_closed_on C1.m1 & J is_halting_on C1.m1 by A1,Th42;
then A6: s3 is halting by SCMPDS_6:def 3;
       sE | D = (sE +* IsJ) | D by SCMPDS_6:9;
then A7: J is_closed_on sE +* IsJ & J is_halting_on sE +* IsJ
        by A1,SCMPDS_6:37;

A8: dom ps = dom s /\ A by RELAT_1:90
    .= ({IC SCMPDS} \/ D \/ A) /\ A by SCMPDS_4:19
    .= A by XBOOLE_1:21;
      C1.m1, C1.m1 +* ps equal_outside dom ps by FUNCT_7:31;
    then A9: C1.m1 +* IsJ, C1.m1 +* ps +* IsJ equal_outside dom ps
     by SCMFSA6A:11;
then A10: C1.m1 +* ps +* IsJ, C1.m1 +* IsJ equal_outside dom ps by FUNCT_7:28;
     Result (IExec(I,s) +* IsJ), Result s3 equal_outside A
   proof
   A11: IsJ c= sE +* IsJ by FUNCT_4:26;
   A12: IsJ c= s3 by FUNCT_4:26;
          IExec(I,s) = Result (s +* IsI) +* ps by SCMPDS_4:def 8
        .= C1.m1 +* ps by A2,SCMFSA6B:16;
        hence thesis by A7,A8,A10,A11,A12,Th28;
     end;
then A13: Result (IExec(I,s) +* IsJ) +* ps = Result s3 +* ps
                           by A8,SCMFSA6A:13;
A14: s3 = Result s1 +* IsJ by A2,SCMFSA6B:16;
A15: IExec(I ';' J,s)
    = Result (s +* IsIJ) +* ps by SCMPDS_4:def 8
   .= C2.LifeSpan s2 +* ps by A3,SCMFSA6B:16
   .= C2.(m1 + m3) +* ps by A1,A14,Lm1;
     IExec(I,s) | A = (Result (s +* IsI) +* ps) | A by SCMPDS_4:def 8
   .= ps by SCMPDS_4:25;
then A16: IExec(J,IExec(I,s))
    = Result (IExec(I,s) +* IsJ) +* ps by SCMPDS_4:def 8
   .= C3.m3 +* ps by A6,A13,SCMFSA6B:16;
A17: IC C2.m1 = inspos card I &
     C2.m1 | D = (C1.m1 +* IsJ) | D &
     Shift(stop J,card I) c= C2.m1 by A1,Lm1;

    J is_closed_on s3 by A5,SCMPDS_6:38;
then A18: (Computation C2.m1).m3 | D = C3.m3 | D &
     IC (Computation C2.m1).m3 = IC C3.m3 + card I
      by A4,A17,SCMPDS_6:45;
A19: IExec(I ';' J,s) | D = IExec(J,IExec(I,s)) | D
     proof
      thus IExec(I ';' J,s) | D
       = C2.(m1 + m3) | D by A8,A15,AMI_5:7,SCMPDS_2:10
      .= C3.m3 | D by A18,AMI_1:51
      .= IExec(J,IExec(I,s)) | D by A8,A16,AMI_5:7,SCMPDS_2:10;
     end;
     set R1=IExec(I,s) +* IsJ,
         R2=Result s1 +* IsJ;
A20: IExec(I,s) = Result s1 +* ps by SCMPDS_4:def 8;
       Result s1 = C1.m1 by A2,SCMFSA6B:16;
     then A21: Result s1 +* ps +* IsJ, Result s1 +* IsJ equal_outside A by A8,
A9,FUNCT_7:28;
A22: IsJ c= R1 by FUNCT_4:26;
       IsJ c= R2 by FUNCT_4:26;
     then Result R1, Result R2 equal_outside A by A7,A20,A21,A22,Th28;
then A23: IC Result (Result s1 +* IsJ)
   = IC Result (IExec(I,s) +* IsJ) by SCMFSA6A:29;
A24: IC IExec(I ';' J,s) = IC Result (s +* IsIJ) by SCMPDS_5:22
   .= IC C2.LifeSpan s2 by A3,SCMFSA6B:16
   .= IC C2.(m1 + m3) by A1,A14,Lm1
   .= IC C3.m3 + card I by A18,AMI_1:51
   .= IC Result s3 + card I by A6,SCMFSA6B:16
   .= IC Result (Result s1 +* IsJ) + card I by A2,SCMFSA6B:16
   .= IC IExec(J,IExec(I,s)) + card I by A23,SCMPDS_5:22;
   hereby
A25: dom IExec(I ';' J,s) = the carrier of SCMPDS by AMI_3:36
    .= dom (IExec(J,IExec(I,s)) +*
        Start-At (IC IExec(J,IExec(I,s)) + card I)) by AMI_3:36;
      reconsider l = IC IExec(J,IExec(I,s)) + card I
          as Instruction-Location of SCMPDS;
A26:   dom Start-At l = {IC SCMPDS} by AMI_3:34;
        now let x be set;
      assume A27: x in dom IExec(I ';' J,s);
      per cases by A27,SCMPDS_4:20;
      suppose A28: x is Int_position;
  then A29:  IExec(I ';' J,s).x = IExec(J,IExec(I,s)).x by A19,SCMPDS_4:23;
         x <> IC SCMPDS by A28,SCMPDS_2:52;
       then not x in dom Start-At l by A26,TARSKI:def 1;
       hence IExec(I ';' J,s).x
       = (IExec(J,IExec(I,s)) +* Start-At
         (IC IExec(J,IExec(I,s)) + card I)).x by A29,FUNCT_4:12;
      suppose A30: x = IC SCMPDS;
       then x in {IC SCMPDS} by TARSKI:def 1;
    then A31: x in dom Start-At l by AMI_3:34;
       thus IExec(I ';' J,s).x
        = l by A24,A30,AMI_1:def 15
       .= (Start-At l).IC SCMPDS by AMI_3:50
       .= (IExec(J,IExec(I,s)) +* Start-At
           (IC IExec(J,IExec(I,s)) + card I)).x by A30,A31,FUNCT_4:14;
      suppose A32: x is Instruction-Location of SCMPDS;
         IExec(I ';' J,s) | A = ps by A15,SCMPDS_4:25
       .= IExec(J,IExec(I,s)) | A by A16,SCMPDS_4:25;
  then A33:  IExec(I ';' J,s).x = IExec(J,IExec(I,s)).x by A32,SCMPDS_4:21;
         x <> IC SCMPDS by A32,AMI_1:48;
       then not x in dom Start-At l by A26,TARSKI:def 1;
       hence IExec(I ';' J,s).x
       = (IExec(J,IExec(I,s)) +* Start-At
         (IC IExec(J,IExec(I,s)) + card I)).x by A33,FUNCT_4:12;
      end;
      hence thesis by A25,FUNCT_1:9;
    end;
end;

theorem Th49:  ::SCMPDS_5:39
 for I being No-StopCode Program-block,J being shiftable Program-block st
 I is_closed_on s & I is_halting_on s &
 J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s)
  holds IExec(I ';' J, s).a = IExec(J,IExec(I,s)).a
proof
  let I be No-StopCode Program-block,J be shiftable Program-block;
  assume I is_closed_on s & I is_halting_on s &
    J is_closed_on IExec(I,s) & J is_halting_on IExec(I,s);
then A1: IExec(I ';' J,s) =
         IExec(J,IExec(I,s)) +* Start-At (IC IExec(J,IExec(I,s)) + card I)
                by Th48;
   not a in dom Start-At (IC IExec(J,IExec(I,s)) + card I) by SCMPDS_4:59;
 hence IExec(I ';' J, s).a = IExec(J,IExec(I,s)).a by A1,FUNCT_4:12;
end;

theorem Th50:  ::SCMPDS_5:46
 for I being No-StopCode Program-block,j being parahalting
 shiftable Instruction of SCMPDS st I is_closed_on s & I is_halting_on s
 holds IExec(I ';' j, s).a = Exec(j, IExec(I, s)).a
proof
   let I be No-StopCode Program-block,j be parahalting
   shiftable Instruction of SCMPDS;
   assume A1: I is_closed_on s & I is_halting_on s;
 set Mj = Load j;
      for a holds (Initialized IExec(I,s)).a=IExec(I, s).a by SCMPDS_5:40;
then A2: (Initialized IExec(I,s)) | SCM-Data-Loc
    = IExec(I, s) | SCM-Data-Loc by SCMPDS_4:23;
A3: a in SCM-Data-Loc by SCMPDS_2:def 2;
A4: Mj is_closed_on IExec(I,s) by SCMPDS_6:34;
A5: Mj is_halting_on IExec(I,s) by SCMPDS_6:35;
 thus IExec(I ';' j, s).a
    = IExec(I ';' Mj, s).a by SCMPDS_4:def 5
   .= IExec(Mj,IExec(I,s)).a by A1,A4,A5,Th49
   .= Exec(j, Initialized IExec(I,s)).a by SCMPDS_5:45
   .= (Exec(j, Initialized IExec(I,s)) | SCM-Data-Loc).a by A3,FUNCT_1:72
   .= (Exec(j, IExec(I, s)) |SCM-Data-Loc ).a by A2,SCMPDS_5:44
   .= Exec(j, IExec(I, s)).a by A3,FUNCT_1:72;
end;

begin :: The construction of for-up loop program
:: while (a,i)<=0 do { I, (a,i)+=n }
definition
 let a be Int_position, i be Integer,n be Nat;
 let I be Program-block;
 func for-up(a,i,n,I) -> Program-block equals
:Def1:  ::Def02
   (a,i)>=0_goto (card I +3) ';' I ';' AddTo(a,i,n) ';' goto -(card I+2);
 coherence;
end;

begin :: The computation of for-up loop program

theorem Th51:
 for a be Int_position,i be Integer,n be Nat,I be Program-block holds
  card for-up(a,i,n,I)= card I +3
proof
  let a be Int_position,i be Integer,n be Nat,
  I be Program-block;
  set i1=(a,i)>=0_goto (card I +3),
      i2=AddTo(a,i,n),
      i3=goto -(card I+2);
  set I4=i1 ';' I,
      I5=I4 ';' i2;
  card I4=card I+1 by SCMPDS_6:15;
then A1: card I5=card I +1 +1 by SCMP_GCD:8
    .=card I+ (1+1) by XCMPLX_1:1;
    thus card for-up(a,i,n,I)=card (I5 ';' i3) by Def1
    .=card I +2 +1 by A1,SCMP_GCD:8
    .=card I+ (2+1) by XCMPLX_1:1
    .=card I + 3;
end;

Lm2:
 for a be Int_position,i be Integer,n be Nat,I be Program-block holds
  card stop for-up(a,i,n,I)= card I+4
proof
   let a be Int_position,i be Integer,n be Nat,I be Program-block;
   thus card stop for-up(a,i,n,I)= card for-up(a,i,n,I) +1 by SCMPDS_5:7
   .= card I +3+1 by Th51
   .= card I +(3+1) by XCMPLX_1:1
   .= card I + 4;
end;

theorem Th52:
 for a be Int_position,i be Integer,n,m be Nat,I be Program-block holds
   m < card I+3 iff inspos m in dom for-up(a,i,n,I)
proof
   let a be Int_position,i be Integer,n,m be Nat,I be Program-block;
     card for-up(a,i,n,I)=card I + 3 by Th51;
   hence thesis by SCMPDS_4:1;
end;

theorem Th53:
 for a be Int_position,i be Integer,n be Nat,
 I be Program-block holds
    for-up(a,i,n,I).inspos 0=(a,i)>=0_goto (card I +3) &
    for-up(a,i,n,I).inspos (card I+1)=AddTo(a,i,n) &
    for-up(a,i,n,I).inspos (card I+2)=goto -(card I+2)
proof
    let a be Int_position,i be Integer,n be Nat,
    I be Program-block;
    set i1=(a,i)>=0_goto (card I +3),
        i2=AddTo(a,i,n),
        i3=goto -(card I+2);
    set I4=i1 ';' I,
        I5=I4 ';' i2;
A1: card I4=card I+1 by SCMPDS_6:15;
then A2: card I5=card I +1 +1 by SCMP_GCD:8
    .=card I+ (1+1) by XCMPLX_1:1;
    set J6=i2 ';' i3,
         J5=I ';' J6;
    set F_LOOP=for-up(a,i,n,I);
A3: F_LOOP=I5 ';' i3 by Def1;
then F_LOOP=I4 ';' J6 by SCMPDS_4:49;
then F_LOOP=i1 ';' J5 by SCMPDS_4:50;
   hence F_LOOP.inspos 0=i1 by SCMPDS_6:16;
    thus F_LOOP.inspos(card I+1)=i2 by A1,A3,Th14;
    thus F_LOOP.inspos(card I+2)=i3 by A2,A3,SCMP_GCD:10;
end;

Lm3:
 for a be Int_position,i be Integer,n be Nat,
 I be Program-block holds
   for-up(a,i,n,I)= ((a,i)>=0_goto (card I +3)) ';' (I ';'
   AddTo(a,i,n) ';' goto -(card I+2))
proof
   let a be Int_position,i be Integer,n be Nat,I be Program-block;
   set i1=(a,i)>=0_goto (card I +3),
       i2=AddTo(a,i,n),
       i3=goto -(card I+2);
   thus for-up(a,i,n,I) = i1 ';' I ';' i2 ';' i3 by Def1
       .= i1 ';' (I ';' i2 ';' i3) by Th15;
end;

theorem Th54:
 for s being State of SCMPDS,I being Program-block,a being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) >= 0 holds
 for-up(a,i,n,I) is_closed_on s & for-up(a,i,n,I) is_halting_on s
proof
  let s be State of SCMPDS,I be Program-block,a be Int_position,
  i be Integer,n be Nat;
  set d1=DataLoc(s.a,i);
  assume A1: s.d1 >= 0;
  set FOR=for-up(a,i,n,I),
       pFOR=stop FOR,
       iFOR=Initialized pFOR,
       s3 = s +* iFOR,
       C3 = Computation s3,
       s4 = C3.1;
  set i1=(a,i)>=0_goto (card I+3),
       i2=AddTo(a,i,n),
       i3=goto -(card I+2);

A2: IC s3 =inspos 0 by SCMPDS_6:21;
      FOR = i1 ';' (I ';' i2 ';' i3) by Lm3;
then A3: CurInstr s3 = i1 by SCMPDS_6:22;
A4: (Computation s3).(0 + 1) = Following (Computation s3).0 by AMI_1:def 19
     .= Following s3 by AMI_1:def 19
     .= Exec(i1,s3) by A3,AMI_1:def 18;
A5:  not d1 in dom iFOR & d1 in dom s by SCMPDS_2:49,SCMPDS_4:31;
       not a in dom iFOR & a in dom s by SCMPDS_2:49,SCMPDS_4:31;
 then A6: s3.DataLoc(s3.a,i)=s3.d1 by FUNCT_4:12
     .= s.d1 by A5,FUNCT_4:12;

       iFOR c= s3 by FUNCT_4:26;
  then pFOR c= s3 by SCMPDS_4:57;
then A7:  pFOR c= s4 by AMI_3:38;

A8: card FOR=card I+3 by Th51;
then A9: inspos(card I+3) in dom pFOR by SCMPDS_6:25;
A10: IC s4 = s4.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s3,(card I+3)) by A1,A4,A6,SCMPDS_2:69
     .= inspos(0+(card I+3)) by A2,SCMPDS_6:23;
       s4.inspos(card I+3) = pFOR.inspos(card I+3) by A7,A9,GRFUNC_1:8
     .=halt SCMPDS by A8,SCMPDS_6:25;
then A11: CurInstr s4 = halt SCMPDS by A10,AMI_1:def 17;
       now
       let k be Nat;
       per cases by NAT_1:19;
       suppose 0 < k;
         then 1+0 <= k by INT_1:20;
         hence IC C3.k in dom pFOR by A9,A10,A11,AMI_1:52;
      suppose k = 0;
          then C3.k = s3 by AMI_1:def 19;
         hence IC C3.k in dom pFOR by A2,SCMPDS_4:75;
     end;
     hence FOR is_closed_on s by SCMPDS_6:def 2;
       s3 is halting by A11,AMI_1:def 20;
     hence FOR is_halting_on s by SCMPDS_6:def 3;
end;

theorem Th55:
 for s being State of SCMPDS,I being Program-block,a,c being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) >= 0 holds
 IExec(for-up(a,i,n,I),s) = s +* Start-At inspos (card I + 3)
proof
   let s be State of SCMPDS,I be Program-block, a,c be Int_position,
   i be Integer,n be Nat;
   set d1=DataLoc(s.a,i);
   assume A1: s.d1 >= 0;
   set FOR=for-up(a,i,n,I),
       pFOR=stop FOR,
       iFOR=Initialized pFOR,
       s3 = s +* iFOR,
       s4 = (Computation s3).1,
       i1=(a,i)>=0_goto (card I+3),
       i2=AddTo(a,i,n),
       i3=goto -(card I+2);
   set SAl=Start-At inspos (card I + 3);

A2: IC s3 =inspos 0 by SCMPDS_6:21;
      FOR = i1 ';' (I ';' i2 ';' i3) by Lm3;
then A3: CurInstr s3 = i1 by SCMPDS_6:22;
A4: (Computation s3).(0 + 1) = Following (Computation s3).0 by AMI_1:def 19
     .= Following s3 by AMI_1:def 19
     .= Exec(i1,s3) by A3,AMI_1:def 18;
A5: not d1 in dom iFOR & d1 in dom s by SCMPDS_2:49,SCMPDS_4:31;
      not a in dom iFOR & a in dom s by SCMPDS_2:49,SCMPDS_4:31;
 then A6: s3.DataLoc(s3.a,i)=s3.d1 by FUNCT_4:12
     .= s.d1 by A5,FUNCT_4:12;
A7:  dom (s | A) = A by SCMPDS_6:1;
       iFOR c= s3 by FUNCT_4:26;
     then pFOR c= s3 by SCMPDS_4:57;
then A8:  pFOR c= s4 by AMI_3:38;

A9: card FOR=card I+3 by Th51;
then A10: inspos(card I+3) in dom pFOR by SCMPDS_6:25;
A11: IC s4 = s4.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s3,(card I+3)) by A1,A4,A6,SCMPDS_2:69
     .= inspos(0+(card I+3)) by A2,SCMPDS_6:23;
       s4.inspos(card I+3) = pFOR.inspos(card I+3) by A8,A10,GRFUNC_1:8
     .=halt SCMPDS by A9,SCMPDS_6:25;
then A12: CurInstr s4 = halt SCMPDS by A11,AMI_1:def 17;
then A13: s3 is halting by AMI_1:def 20;
   now let l be Nat;
       assume l < 0+1;
        then l <= 0 by NAT_1:38;
        then l=0 by NAT_1:19;
then CurInstr (Computation s3).l = CurInstr s3 by AMI_1:def 19;
         hence CurInstr (Computation s3).l <> halt SCMPDS by A3,SCMPDS_6:31;
      end;
      then for l be Nat st CurInstr (Computation s3).l = halt SCMPDS
        holds 1 <= l;
  then LifeSpan s3 = 1 by A12,A13,SCM_1:def 2;
then A14:  s4 = Result s3 by A13,SCMFSA6B:16;
A15:  dom IExec(FOR,s) = the carrier of SCMPDS by AMI_3:36
      .= dom (s +* SAl) by AMI_3:36;
A16:  IExec(FOR,s) = Result s3 +* s | A by SCMPDS_4:def 8;
        now let x be set;
      assume
A17:    x in dom IExec(FOR,s);
A18:    dom SAl = {IC SCMPDS} by AMI_3:34;
       per cases by A17,SCMPDS_4:20;
       suppose
A19:    x is Int_position;
        then x <> IC SCMPDS by SCMPDS_2:52;
then A20:    not x in dom SAl by A18,TARSKI:def 1;
      not x in dom (s | A) by A7,A19,SCMPDS_2:53;
      hence
          IExec(FOR,s).x = s4.x by A14,A16,FUNCT_4:12
       .= s3.x by A4,A19,SCMPDS_2:69
       .= s.x by A19,SCMPDS_5:19
       .= (s +* SAl).x by A20,FUNCT_4:12;
      suppose
A21:    x = IC SCMPDS;
        then x in dom Result s3 & not x in dom (s | A) by A7,AMI_1:48,AMI_5:25
;
      hence
           IExec(FOR,s).x = s4.x by A14,A16,FUNCT_4:12
       .= inspos(card I + 3) by A11,A21,AMI_1:def 15
       .= (s +* SAl).x by A21,Th12;
       suppose x is Instruction-Location of SCMPDS;
       hence IExec(FOR,s).x = (s +* SAl).x by SCMPDS_6:27;
    end;
    hence IExec(FOR,s) = s +* SAl by A15,FUNCT_1:9;
end;

theorem
   for s being State of SCMPDS,I being Program-block,a being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) >= 0
 holds IC IExec(for-up(a,i,n,I),s) = inspos (card I + 3)
proof
  let s be State of SCMPDS,I be Program-block,a be Int_position,
  i be Integer,n be Nat;
  assume s.DataLoc(s.a,i) >= 0;
      then IExec(for-up(a,i,n,I),s) =s +* Start-At inspos (card I+ 3) by Th55;
      hence thesis by AMI_5:79;
end;

theorem
   for s being State of SCMPDS,I being Program-block,a,b being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) >= 0
 holds IExec(for-up(a,i,n,I),s).b = s.b
proof
   let s be State of SCMPDS,I be Program-block,a,b be Int_position,
   i be Integer,n be Nat;
    assume s.DataLoc(s.a,i) >= 0;
then A1: IExec(for-up(a,i,n,I),s) = s +* Start-At inspos (card I + 3) by Th55;
      not b in dom Start-At inspos (card I + 3) by SCMPDS_4:59;
    hence IExec(for-up(a,i,n,I),s).b = s.b by A1,FUNCT_4:12;
end;

Lm4:
 for I being Program-block,a being Int_position,i being Integer,n be Nat
 holds Shift(I,1) c= for-up(a,i,n,I)
proof
  let I be Program-block,a be Int_position,i be Integer,n be Nat;
   set i1=(a,i)>=0_goto (card I+3),
       i2=AddTo(a,i,n),
       i3=goto -(card I+2);
A1: card Load i1=1 by SCMPDS_5:6;
      for-up(a,i,n,I) = i1 ';' I ';' i2 ';' i3 by Def1
     .= i1 ';' I ';' (i2 ';' i3) by SCMPDS_4:49
     .= Load i1 ';' I ';' (i2 ';' i3) by SCMPDS_4:def 4;
    hence thesis by A1,Th16;
end;

theorem Th58:
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a be Int_position, i be Integer,n be Nat,X be set
 st s.DataLoc(s.a,i) < 0 & not DataLoc(s.a,i) in X & n > 0 & card I > 0 &
    a <> DataLoc(s.a,i) & (for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
 holds IExec(I,t).a=t.a & IExec(I,t).DataLoc(s.a,i)=t.DataLoc(s.a,i) &
   I is_closed_on t & I is_halting_on t &
  for y be Int_position st y in X holds IExec(I,t).y=t.y)
 holds
     for-up(a,i,n,I) is_closed_on s & for-up(a,i,n,I) is_halting_on s
proof
  let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
  a be Int_position, i be Integer,n be Nat,X be set;
   set b=DataLoc(s.a,i);
   set FOR=for-up(a,i,n,I),
       pFOR=stop FOR,
       iFOR=Initialized pFOR,
       pI=stop I,
       IsI= Initialized pI;
   set i1=(a,i)>=0_goto (card I+3),
       i2=AddTo(a,i,n),
       i3=goto -(card I+2);

   assume A1: s.b < 0;
   assume A2: not b in X;
   assume A3: n > 0;
   assume A4: card I > 0;
   assume A5: a <> b;
   assume A6: for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
    holds IExec(I,t).a=t.a & IExec(I,t).b=t.b
    & I is_closed_on t & I is_halting_on t &
    for y be Int_position st y in X holds IExec(I,t).y=t.y;

    defpred P[Nat] means
       for t be State of SCMPDS st -t.b <= $1 &
      (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
      holds FOR is_closed_on t & FOR is_halting_on t;

A7:  P[0]
     proof
       let t be State of SCMPDS;
        assume A8: -t.b <= 0;
        assume for x be Int_position st x in X holds t.x=s.x;
        assume A9: t.a=s.a;
          -t.b <= -0 by A8;
        then t.b >= 0 by REAL_1:50;
        hence FOR is_closed_on t & FOR is_halting_on t by A9,Th54;
      end;
A10:  for k be Nat st P[k] holds P[k + 1]
     proof
     let k be Nat;
     assume A11: P[k];
        now
        let t be State of SCMPDS;
        assume A12: -t.b <= k+1;
        assume A13: for x be Int_position st x in X holds t.x=s.x;
        assume A14: t.a=s.a;
        per cases;
        suppose t.b >= 0;
        hence FOR is_closed_on t & FOR is_halting_on t
         by A14,Th54;
        suppose A15: t.b < 0;
        set t2 = t +* IsI,
            t3 = t +* iFOR,
            C3 = Computation t3,
            t4 = C3.1;
A16:     IExec(I,t).a=t.a & IExec(I,t).b=t.b
        & I is_closed_on t & I is_halting_on t &
        for y be Int_position st y in X holds IExec(I,t).y=t.y by A6,A13,A14;
A17:     IsI c= t2 by FUNCT_4:26;
A18:     t2 is halting by A16,SCMPDS_6:def 3;
        then t2 +* IsI is halting by A17,AMI_5:10;
then A19:     I is_halting_on t2 by SCMPDS_6:def 3;
A20:     I is_closed_on t2 by A16,SCMPDS_6:38;
A21:     inspos 0 in dom pFOR by SCMPDS_4:75;
A22:     IC t3 =inspos 0 by SCMPDS_6:21;
          FOR = i1 ';' (I ';' i2 ';' i3) by Lm3;
then A23:     CurInstr t3 = i1 by SCMPDS_6:22;
A24:     (Computation t3).(0 + 1) = Following (Computation t3).0 by AMI_1:def
19
        .= Following t3 by AMI_1:def 19
        .= Exec(i1,t3) by A23,AMI_1:def 18;
A25:     not a in dom iFOR & a in dom t by SCMPDS_2:49,SCMPDS_4:31;
A26:    not b in dom iFOR & b in dom t by SCMPDS_2:49,SCMPDS_4:31;
     A27: t3.DataLoc(t3.a,i)= t3.b by A14,A25,FUNCT_4:12
        .= t.b by A26,FUNCT_4:12;
A28:     IC t4 = t4.IC SCMPDS by AMI_1:def 15
        .= Next IC t3 by A15,A24,A27,SCMPDS_2:69
        .= inspos(0+1) by A22,SCMPDS_4:70;
          t2,t3 equal_outside A by SCMPDS_4:36;
then A29:     t2 | D = t3 | D by SCMPDS_4:24;
          now let a;
          thus t2.a = t3.a by A29,SCMPDS_4:23
          .= t4.a by A24,SCMPDS_2:69;
        end;
then A30:    t2 | D = t4 | D by SCMPDS_4:23;

        set m2=LifeSpan t2,
            t5=(Computation t4).m2,
            l1=inspos (card I + 1);

A31:     IExec(I,t) = Result t2 +* t | A by SCMPDS_4:def 8;
A32:     dom (t | A) = A by SCMPDS_6:1;
then A33:     not a in dom (t | A) by SCMPDS_2:53;
A34:     not b in dom (t | A) by A32,SCMPDS_2:53;
          card I + 1 < card I + 3 by REAL_1:53;
then A35:     l1 in dom FOR by Th52;
A36:     FOR c= iFOR by SCMPDS_6:17;
          iFOR c= t3 by FUNCT_4:26;
then A37:     FOR c= t3 by A36,XBOOLE_1:1;
          Shift(I,1) c= FOR by Lm4;
        then Shift(I,1) c= t3 by A37,XBOOLE_1:1;
then A38:     Shift(I,1) c= t4 by AMI_3:38;
then A39:     (Computation t2).m2 | D = t5 | D by A4,A17,A19,A20,A28,A30,Th36;
then A40:     t5.a=(Computation t2).m2.a by SCMPDS_4:23
        .=(Result t2).a by A18,SCMFSA6B:16
        .=s.a by A14,A16,A31,A33,FUNCT_4:12;

A41:     t5.b=(Computation t2).m2.b by A39,SCMPDS_4:23
        .=(Result t2).b by A18,SCMFSA6B:16
        .=t.b by A16,A31,A34,FUNCT_4:12;

        set m3=m2 +1;
        set t6=(Computation t3).m3;
A42:     IC t5=l1 by A4,A17,A19,A20,A28,A30,A38,Th36;
A43:     t6=t5 by AMI_1:51;
then A44:     CurInstr t6=t5.l1 by A42,AMI_1:def 17
        .=t4.l1 by AMI_1:54
        .=t3.l1 by AMI_1:54
        .=FOR.l1 by A35,A37,GRFUNC_1:8
        .=i2 by Th53;
        set t7=(Computation t3).(m3+ 1);
A45:     t7 = Following t6 by AMI_1:def 19
        .= Exec(i2,t6) by A44,AMI_1:def 18;
A46:    IC t7=t7.IC SCMPDS by AMI_1:def 15
       .=Next IC t6 by A45,SCMPDS_2:60
       .=inspos(card I+1+1) by A42,A43,SCMPDS_4:70
       .=inspos(card I+(1+1)) by XCMPLX_1:1;
     DataLoc(t6.a,i)=b by A40,AMI_1:51;
then A47:    t7.a=t6.a by A5,A45,SCMPDS_2:60
       .=s.a by A40,AMI_1:51;
       set l2=inspos(card I+2);
         card I + 2 < card I + 3 by REAL_1:53;
then A48:    l2 in dom FOR by Th52;
A49:    CurInstr t7=t7.l2 by A46,AMI_1:def 17
       .=t3.l2 by AMI_1:54
       .=FOR.l2 by A37,A48,GRFUNC_1:8
       .=i3 by Th53;
       set m5=m3+1+1,
           t8=(Computation t3).m5;
A50:    t8 = Following t7 by AMI_1:def 19
       .= Exec(i3,t7) by A49,AMI_1:def 18;
A51:    IC t8=t8.IC SCMPDS by AMI_1:def 15
       .=ICplusConst(t7,-(card I+2)) by A50,SCMPDS_2:66
       .=ICplusConst(t7,0-(card I+2)) by XCMPLX_1:150
       .=inspos 0 by A46,Th1;
A52:    t8.a=s.a by A47,A50,SCMPDS_2:66;
A53:   now
         let x be Int_position;
         assume A54:x in X;
       A55:  not x in dom (t | A) by A32,SCMPDS_2:53;
          t5.x=(Computation t2).m2.x by A39,SCMPDS_4:23
            .=(Result t2).x by A18,SCMFSA6B:16
            .=IExec(I,t).x by A31,A55,FUNCT_4:12
            .=t.x by A6,A13,A14,A54
            .=s.x by A13,A54;
       then t7.x=s.x by A2,A40,A43,A45,A54,SCMPDS_2:60;
         hence t8.x=s.x by A50,SCMPDS_2:66;
       end;
A56:    t8.b=t7.b by A50,SCMPDS_2:66
       .=t.b+n by A40,A41,A43,A45,SCMPDS_2:60;
         -(-n) > 0 by A3;
       then -n < 0 by REAL_1:66;
       then -n <= -1 by INT_1:21;
       then -n-t.b <= -1-t.b by REAL_1:49;
then A57:    -n-t.b <= -t.b-1 by XCMPLX_1:144;
         -t.b-1 <= k by A12,REAL_1:86;
then A58:    -n-t.b <= k by A57,AXIOMS:22;
         -t8.b=-n-t.b by A56,XCMPLX_1:161;
then A59:    FOR is_closed_on t8 & FOR is_halting_on t8 by A11,A52,A53,A58;
A60:    t8 +* iFOR=t8 by A51,Th37;
         now
          let k be Nat;
          per cases;
          suppose k < m5;
           then k <= m3+1 by INT_1:20;
           then A61: k <= m3 or k=m3+1 by NAT_1:26;
           hereby
              per cases by A61,NAT_1:26;
              suppose A62:k <= m2;
               hereby
               per cases;
                 suppose k=0;
                 hence IC (Computation t3).k in dom pFOR by A21,A22,AMI_1:def
19;
                 suppose k<>0;
                  then consider kn be Nat such that
              A63: k=kn+1 by NAT_1:22;
                    kn < k by A63,REAL_1:69;
                  then kn < m2 by A62,AXIOMS:22;
              then A64: IC (Computation t2).kn + 1 = IC (Computation t4).kn
                  by A4,A17,A19,A20,A28,A30,A38,Th34;
              A65: IC (Computation t2).kn in dom pI by A16,SCMPDS_6:def 2;
                  consider lm be Nat such that
              A66: IC (Computation t2).kn=inspos lm by SCMPDS_3:32;
                    lm < card pI by A65,A66,SCMPDS_4:1;
                  then lm < card I+1 by SCMPDS_5:7;
              then A67: lm+1 <= card I +1 by INT_1:20;
                    card I + 1 < card I + 4 by REAL_1:53;
                  then lm+1 < card I +4 by A67,AXIOMS:22;
                  then A68: lm+1 < card pFOR by Lm2;
                    IC (Computation t3).k=inspos lm +1 by A63,A64,A66,AMI_1:51
                  .=inspos (lm+1) by SCMPDS_3:def 3;
                  hence IC (Computation t3).k in dom pFOR by A68,SCMPDS_4:1;
               end;
              suppose A69:k=m3;
                 l1 in dom pFOR by A35,SCMPDS_6:18;
               hence IC (Computation t3).k in dom pFOR by A4,A17,A19,A20,A28,
A30,A38,A43,A69,Th36;
              suppose k=m3+1;
               hence IC (Computation t3).k in dom pFOR by A46,A48,SCMPDS_6:18;
            end;
          suppose k >= m5;
          then consider nn be Nat such that
         A70: k=m5+nn by NAT_1:28;
               C3.k=(Computation (t8 +* iFOR)).nn by A60,A70,AMI_1:51;
           hence IC (Computation t3).k in dom pFOR by A59,SCMPDS_6:def 2;
       end;
       hence FOR is_closed_on t by SCMPDS_6:def 2;
         t8 is halting by A59,A60,SCMPDS_6:def 3;
       then t3 is halting by SCM_1:27;
       hence FOR is_halting_on t by SCMPDS_6:def 3;
     end;
     hence P[k+1];
     end;
A71:  for k being Nat holds P[k] from Ind(A7,A10);
      -s.b > 0 by A1,REAL_1:66;
     then reconsider n=-s.b as Nat by INT_1:16;
     A72: P[n] by A71;
    for x be Int_position st x in X holds s.x=s.x;
     hence FOR is_closed_on s & FOR is_halting_on s by A72;
end;

theorem
   for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a be Int_position, i be Integer,n be Nat,X be set
 st s.DataLoc(s.a,i) < 0 & not DataLoc(s.a,i) in X & n > 0 & card I > 0 &
    a <> DataLoc(s.a,i) & (for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
 holds IExec(I,t).a=t.a & IExec(I,t).DataLoc(s.a,i)=t.DataLoc(s.a,i) &
   I is_closed_on t & I is_halting_on t &
  for y be Int_position st y in X holds IExec(I,t).y=t.y)
 holds
 IExec(for-up(a,i,n,I),s) =
 IExec(for-up(a,i,n,I),IExec(I ';' AddTo(a,i,n),s))
proof
  let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
  a be Int_position, i be Integer,n be Nat,X be set;
   set b=DataLoc(s.a,i);
   set FOR=for-up(a,i,n,I),
       iFOR=Initialized stop FOR,
       iI= Initialized stop I,
       s1= s +* iFOR,
       C1=Computation s1,
       ps= s | A;

   set i1=(a,i)>=0_goto (card I+3),
       i2=AddTo(a,i,n),
       i3=goto -(card I+2);

   assume A1: s.b < 0;
   assume A2: not b in X;
   assume A3: n > 0;
   assume A4: card I > 0;
   assume A5: a <> b;
   assume A6: for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
    holds IExec(I,t).a=t.a & IExec(I,t).b=t.b
    & I is_closed_on t & I is_halting_on t &
    for y be Int_position st y in X holds IExec(I,t).y=t.y;

    then FOR is_halting_on s by A1,A2,A3,A4,A5,Th58;
then A7: s1 is halting by SCMPDS_6:def 3;
   set sI= s +* iI,
       m1=LifeSpan sI+3,
       J=I ';' AddTo(a,i,n),
       sJ=s +* Initialized stop J,
       s2=IExec(J,s) +* iFOR,
       C2=Computation s2,
       m2=LifeSpan s2;
       set Es=IExec(J,s),
           bj=DataLoc(Es.a,i);
A8: (for x be Int_position st x in X holds s.x=s.x) & s.a=s.a;
then A9: I is_closed_on s & I is_halting_on s by A6;
A10: IExec(I, s).a=s.a by A6,A8;
A11: Es.a=Exec(i2, IExec(I, s)).a by A9,Th50
    .=s.a by A5,A10,SCMPDS_2:60;
A12: now
    per cases;
    suppose Es.bj >= 0;
    hence FOR is_halting_on Es by Th54;

    suppose A13: Es.bj<0;
      now
      let t be State of SCMPDS;
      assume A14:
      (for x be Int_position st x in X holds t.x=Es.x) & t.a=Es.a;
A15:   now
         let x be Int_position;
         assume A16: x in X;
         hence t.x=Es.x by A14
          .=Exec(i2, IExec(I, s)).x by A9,Th50
          .=IExec(I, s).x by A2,A10,A16,SCMPDS_2:60
          .=s.x by A6,A8,A16;
      end;
      hence IExec(I,t).a=t.a by A6,A11,A14;
      thus IExec(I,t).bj= t.bj by A6,A11,A14,A15;
      thus I is_closed_on t & I is_halting_on t &
       for y be Int_position st y in X holds IExec(I,t).y=t.y by A6,A11,A14,A15
;
     end;
     hence FOR is_halting_on Es by A2,A3,A4,A5,A11,A13,Th58;
   end;
   set s4 = C1.1;
A17:     IExec(I,s).a=s.a & IExec(I,s).b=s.b by A6,A8;
A18:     iI c= sI by FUNCT_4:26;
A19:     sI is halting by A9,SCMPDS_6:def 3;
        then sI +* iI is halting by A18,AMI_5:10;
then A20:     I is_halting_on sI by SCMPDS_6:def 3;
A21:     I is_closed_on sI by A9,SCMPDS_6:38;
A22:     IC s1 =inspos 0 by SCMPDS_6:21;
A23:     FOR = i1 ';' (I ';' i2 ';' i3) by Lm3;
then A24:     CurInstr s1 = i1 by SCMPDS_6:22;
A25:     (Computation s1).(0 + 1) = Following (Computation s1).0 by AMI_1:def
19
        .= Following s1 by AMI_1:def 19
        .= Exec(i1,s1) by A24,AMI_1:def 18;
A26:     not a in dom iFOR & a in dom s by SCMPDS_2:49,SCMPDS_4:31;
A27:    not b in dom iFOR & b in dom s by SCMPDS_2:49,SCMPDS_4:31;
     A28: s1.DataLoc(s1.a,i)=s1.b by A26,FUNCT_4:12
        .= s.b by A27,FUNCT_4:12;
A29:    IC s4 = s4.IC SCMPDS by AMI_1:def 15
        .= Next IC s1 by A1,A25,A28,SCMPDS_2:69
        .= inspos(0+1) by A22,SCMPDS_4:70;
          sI,s1 equal_outside A by SCMPDS_4:36;
then A30:    sI | D = s1 | D by SCMPDS_4:24;
          now let a;
          thus sI.a = s1.a by A30,SCMPDS_4:23
          .= s4.a by A25,SCMPDS_2:69;
        end;
then A31:    sI | D = s4 | D by SCMPDS_4:23;

        set mI=LifeSpan sI,
            s5=(Computation s4).mI,
            l1=inspos (card I + 1);

A32:     IExec(I,s) = Result sI +* s | A by SCMPDS_4:def 8;
A33:     dom (s | A) = A by SCMPDS_6:1;
then A34:     not a in dom (s | A) by SCMPDS_2:53;
A35:     not b in dom (s | A) by A33,SCMPDS_2:53;
          card I + 1 < card I + 3 by REAL_1:53;
then A36:    l1 in dom FOR by Th52;
A37:    FOR c= iFOR by SCMPDS_6:17;
          iFOR c= s1 by FUNCT_4:26;
then A38:    FOR c= s1 by A37,XBOOLE_1:1;
          Shift(I,1) c= FOR by Lm4;
        then Shift(I,1) c= s1 by A38,XBOOLE_1:1;
then A39:     Shift(I,1) c= s4 by AMI_3:38;
then A40:     (Computation sI).mI | D = s5 | D by A4,A18,A20,A21,A29,A31,Th36;
then A41:     s5.a=(Computation sI).mI.a by SCMPDS_4:23
        .=(Result sI).a by A19,SCMFSA6B:16
        .=s.a by A17,A32,A34,FUNCT_4:12;

A42:     s5.b=(Computation sI).mI.b by A40,SCMPDS_4:23
        .=(Result sI).b by A19,SCMFSA6B:16
        .=s.b by A17,A32,A35,FUNCT_4:12;

        set m3=mI +1;
        set s6=(Computation s1).m3;
A43:     IC s5=l1 by A4,A18,A20,A21,A29,A31,A39,Th36;
A44:     s6=s5 by AMI_1:51;
then A45:     CurInstr s6=s5.l1 by A43,AMI_1:def 17
        .=s4.l1 by AMI_1:54
        .=s1.l1 by AMI_1:54
        .=FOR.l1 by A36,A38,GRFUNC_1:8
        .=i2 by Th53;
        set s7=(Computation s1).(m3+ 1);
A46:     s7 = Following s6 by AMI_1:def 19
        .= Exec(i2,s6) by A45,AMI_1:def 18;
A47:    IC s7=s7.IC SCMPDS by AMI_1:def 15
       .=Next IC s6 by A46,SCMPDS_2:60
       .=inspos(card I+1+1) by A43,A44,SCMPDS_4:70
       .=inspos(card I+(1+1)) by XCMPLX_1:1;
       set l2=inspos(card I+2);
         card I + 2 < card I + 3 by REAL_1:53;
then A48:    l2 in dom FOR by Th52;
A49:    CurInstr s7=s7.l2 by A47,AMI_1:def 17
       .=s1.l2 by AMI_1:54
       .=FOR.l2 by A38,A48,GRFUNC_1:8
       .=i3 by Th53;
       set m5=m3+1+1,
           s8=(Computation s1).m5;
A50:    s8 = Following s7 by AMI_1:def 19
       .= Exec(i3,s7) by A49,AMI_1:def 18;
A51:    IC s8=s8.IC SCMPDS by AMI_1:def 15
       .=ICplusConst(s7,-(card I+2)) by A50,SCMPDS_2:66
       .=ICplusConst(s7,0-(card I+2)) by XCMPLX_1:150
       .=inspos 0 by A47,Th1;
A52:    s8.b=s7.b by A50,SCMPDS_2:66
       .=s.b+n by A41,A42,A44,A46,SCMPDS_2:60;

     A53: m5=mI+(1+1)+1 by XCMPLX_1:1
     .=mI+(2+1) by XCMPLX_1:1
     .=mI+3;
A54:  b=DataLoc(IExec(I, s).a,i) by A6,A8;
A55:  Es.b=Exec(i2, IExec(I, s)).b by A9,Th50
     .=IExec(I, s).b+n by A10,SCMPDS_2:60
     .=s.b+n by A6,A8;
       now
       let x be Int_position;
       A56: not x in dom iFOR & x in dom IExec(J,s) by SCMPDS_2:49,SCMPDS_4:31;
then A57:    s2.x=IExec(J,s).x by FUNCT_4:12;
       per cases;
       suppose x=b;
        hence s8.x=s2.x by A52,A55,A56,FUNCT_4:12;
       suppose A58: x<>b;
       A59:  not x in dom (s | A) by A33,SCMPDS_2:53;
       A60:  s5.x=(Computation sI).mI.x by A40,SCMPDS_4:23
            .=(Result sI).x by A19,SCMFSA6B:16
            .=IExec(I,s).x by A32,A59,FUNCT_4:12;
       A61:  s7.x=s5.x by A41,A44,A46,A58,SCMPDS_2:60;
              Es.x=Exec(i2, IExec(I, s)).x by A9,Th50
            .=IExec(I, s).x by A54,A58,SCMPDS_2:60;
        hence s8.x=s2.x by A50,A57,A60,A61,SCMPDS_2:66;
     end;
     then A62: s8 | D = s2 | D by SCMPDS_4:23;
A63:  IC s2 =IC C1.m1 by A51,A53,SCMPDS_6:21;

A64: s2 is halting by A12,SCMPDS_6:def 3;
A65: dom ps = dom s /\ A by RELAT_1:90
    .= ({IC SCMPDS} \/ D \/ A) /\ A by SCMPDS_4:19
    .= A by XBOOLE_1:21;
      s2 | A= (Result sJ +* ps +* iFOR) | A by SCMPDS_4:def 8
    .=(Result sJ +* ps)|A +* iFOR | A by AMI_5:6
    .= ps +* iFOR | A by A65,FUNCT_4:24
    .= s1 | A by AMI_5:6
    .= C1.m1 | A by Th6;
then A66: C1.m1=s2 by A53,A62,A63,Th7;
    then CurInstr C1.m1=i1 by A23,SCMPDS_6:22;
then A67: CurInstr C1.m1 <> halt SCMPDS by SCMPDS_6:31;
    set m0=LifeSpan s1;
      m0 > m1 by A7,A67,SCMPDS_6:2;
    then consider nn be Nat such that
A68: m0=m1+nn by NAT_1:28;
A69: C1.m0 = C2.nn by A66,A68,AMI_1:51;
    then CurInstr C2.nn =halt SCMPDS by A7,SCM_1:def 2;
then A70: nn >= m2 by A64,SCM_1:def 2;
      C1.(m1 + m2) = C2.m2 by A66,AMI_1:51;
    then CurInstr C1.(m1 + m2) = halt SCMPDS by A64,SCM_1:def 2;
    then m1 + m2 >= m0 by A7,SCM_1:def 2;
    then m2 >= nn by A68,REAL_1:53;
then nn=m2 by A70,AXIOMS:21;
then A71: Result s1 = C2.m2 by A7,A69,SCMFSA6B:16;
A72: IExec(J,s) | A= (Result sJ +* ps) | A by SCMPDS_4:def 8
    .= ps by A65,FUNCT_4:24;
    thus IExec(FOR,s)
     = C2.m2 +* ps by A71,SCMPDS_4:def 8
    .= Result s2 +* IExec(J,s) | A by A64,A72,SCMFSA6B:16
    .= IExec(FOR,IExec(J,s)) by SCMPDS_4:def 8;
end;

definition
   let I be shiftable Program-block,
   a be Int_position,i be Integer,n be Nat;
   cluster for-up(a,i,n,I) -> shiftable;
   correctness
   proof
    set FOR=for-up(a,i,n,I),
        i1= (a,i)>=0_goto (card I +3),
        i2= AddTo(a,i,n),
        i3= goto -(card I+2);
    set PF= Load i1 ';' I ';' i2;
A1: PF=i1 ';' I ';' i2 by SCMPDS_4:def 4;
    then card PF=card (i1 ';' I) + 1 by SCMP_GCD:8
     .=card I + 1+1 by SCMPDS_6:15
     .=card I +(1+1) by XCMPLX_1:1;
then A2:  card PF+ -(card I+2) =0 by XCMPLX_0:def 6;
       FOR= PF ';' i3 by A1,Def1;
     hence FOR is shiftable by A2,SCMPDS_4:78;
  end;
end;

definition
   let I be No-StopCode Program-block,
   a be Int_position,i be Integer,n be Nat;
   cluster for-up(a,i,n,I) -> No-StopCode;
   correctness
   proof
       -(card I+2) <> 0 by XCMPLX_1:135;
     then reconsider i3=goto -(card I+2) as No-StopCode Instruction of SCMPDS
     by SCMPDS_5:25;
       for-up(a,i,n,I) =
     (a,i)>=0_goto (card I +3) ';' I ';' AddTo(a,i,n) ';' i3 by Def1;
     hence thesis;
   end;
end;

begin :: The construction of  for-down loop program
:: while (a,i)>=0 do { I, (a,i)-=n }
definition
 let a be Int_position, i be Integer,n be Nat;
 let I be Program-block;
 func for-down(a,i,n,I) -> Program-block equals
:Def2:  ::Def03
   (a,i)<=0_goto (card I +3) ';' I ';' AddTo(a,i,-n) ';' goto -(card I+2);
 coherence;
end;

begin :: The computation of  for-down loop program

theorem Th60:
 for a be Int_position,i be Integer,n be Nat,I be Program-block holds
  card for-down(a,i,n,I)= card I +3
proof
  let a be Int_position,i be Integer,n be Nat,
  I be Program-block;
  set i1=(a,i)<=0_goto (card I +3),
      i2=AddTo(a,i,-n),
      i3=goto -(card I+2);
  set I4=i1 ';' I,
      I5=I4 ';' i2;
  card I4=card I+1 by SCMPDS_6:15;
then A1: card I5=card I +1 +1 by SCMP_GCD:8
    .=card I+ (1+1) by XCMPLX_1:1;
    thus card for-down(a,i,n,I)=card (I5 ';' i3) by Def2
    .=card I +2 +1 by A1,SCMP_GCD:8
    .=card I+ (2+1) by XCMPLX_1:1
    .=card I + 3;
end;

Lm5:
 for a be Int_position,i be Integer,n be Nat,I be Program-block holds
  card stop for-down(a,i,n,I)= card I+4
proof
   let a be Int_position,i be Integer,n be Nat,I be Program-block;
   thus card stop for-down(a,i,n,I)= card for-down(a,i,n,I) +1 by SCMPDS_5:7
   .= card I +3+1 by Th60
   .= card I +(3+1) by XCMPLX_1:1
   .= card I + 4;
end;

theorem Th61:
 for a be Int_position,i be Integer,n,m be Nat,I be Program-block holds
   m < card I+3 iff inspos m in dom for-down(a,i,n,I)
proof
   let a be Int_position,i be Integer,n,m be Nat,I be Program-block;
     card for-down(a,i,n,I)=card I + 3 by Th60;
   hence thesis by SCMPDS_4:1;
end;

theorem Th62:
 for a be Int_position,i be Integer,n be Nat,
 I be Program-block holds
    for-down(a,i,n,I).inspos 0=(a,i)<=0_goto (card I +3) &
    for-down(a,i,n,I).inspos (card I+1)=AddTo(a,i,-n) &
    for-down(a,i,n,I).inspos (card I+2)=goto -(card I+2)
proof
    let a be Int_position,i be Integer,n be Nat,
    I be Program-block;
    set i1=(a,i)<=0_goto (card I +3),
        i2=AddTo(a,i,-n),
        i3=goto -(card I+2);
    set I4=i1 ';' I,
        I5=I4 ';' i2;
A1: card I4=card I+1 by SCMPDS_6:15;
then A2: card I5=card I +1 +1 by SCMP_GCD:8
    .=card I+ (1+1) by XCMPLX_1:1;
    set J6=i2 ';' i3,
         J5=I ';' J6;
    set F_LOOP=for-down(a,i,n,I);
A3: F_LOOP=I5 ';' i3 by Def2;
then F_LOOP=I4 ';' J6 by SCMPDS_4:49;
then F_LOOP=i1 ';' J5 by SCMPDS_4:50;
   hence F_LOOP.inspos 0=i1 by SCMPDS_6:16;
    thus F_LOOP.inspos(card I+1)=i2 by A1,A3,Th14;
    thus F_LOOP.inspos(card I+2)=i3 by A2,A3,SCMP_GCD:10;
end;

Lm6:
 for a be Int_position,i be Integer,n be Nat,
 I be Program-block holds
   for-down(a,i,n,I)= ((a,i)<=0_goto (card I +3)) ';' (I ';'
   AddTo(a,i,-n) ';' goto -(card I+2))
proof
   let a be Int_position,i be Integer,n be Nat,I be Program-block;
   set i1=(a,i)<=0_goto (card I +3),
       i2=AddTo(a,i,-n),
       i3=goto -(card I+2);
   thus for-down(a,i,n,I) = i1 ';' I ';' i2 ';' i3 by Def2
       .= i1 ';' (I ';' i2 ';' i3) by Th15;
end;

theorem Th63:
 for s being State of SCMPDS,I being Program-block,a being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) <= 0 holds
 for-down(a,i,n,I) is_closed_on s & for-down(a,i,n,I) is_halting_on s
proof
  let s be State of SCMPDS,I be Program-block,a be Int_position,
  i be Integer,n be Nat;
  set d1=DataLoc(s.a,i);
  assume A1: s.d1 <= 0;
  set FOR=for-down(a,i,n,I),
       pFOR=stop FOR,
       iFOR=Initialized pFOR,
       s3 = s +* iFOR,
       C3 = Computation s3,
       s4 = C3.1;
  set i1=(a,i)<=0_goto (card I+3),
       i2=AddTo(a,i,-n),
       i3=goto -(card I+2);

A2: IC s3 =inspos 0 by SCMPDS_6:21;
      FOR = i1 ';' (I ';' i2 ';' i3) by Lm6;
then A3: CurInstr s3 = i1 by SCMPDS_6:22;
A4: (Computation s3).(0 + 1) = Following (Computation s3).0 by AMI_1:def 19
     .= Following s3 by AMI_1:def 19
     .= Exec(i1,s3) by A3,AMI_1:def 18;
A5:  not d1 in dom iFOR & d1 in dom s by SCMPDS_2:49,SCMPDS_4:31;
       not a in dom iFOR & a in dom s by SCMPDS_2:49,SCMPDS_4:31;
 then A6: s3.DataLoc(s3.a,i)=s3.d1 by FUNCT_4:12
     .= s.d1 by A5,FUNCT_4:12;

       iFOR c= s3 by FUNCT_4:26;
  then pFOR c= s3 by SCMPDS_4:57;
then A7:  pFOR c= s4 by AMI_3:38;

A8: card FOR=card I+3 by Th60;
then A9: inspos(card I+3) in dom pFOR by SCMPDS_6:25;
A10: IC s4 = s4.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s3,(card I+3)) by A1,A4,A6,SCMPDS_2:68
     .= inspos(0+(card I+3)) by A2,SCMPDS_6:23;
       s4.inspos(card I+3) = pFOR.inspos(card I+3) by A7,A9,GRFUNC_1:8
     .=halt SCMPDS by A8,SCMPDS_6:25;
then A11: CurInstr s4 = halt SCMPDS by A10,AMI_1:def 17;
       now
       let k be Nat;
       per cases by NAT_1:19;
       suppose 0 < k;
         then 1+0 <= k by INT_1:20;
         hence IC C3.k in dom pFOR by A9,A10,A11,AMI_1:52;
      suppose k = 0;
          then C3.k = s3 by AMI_1:def 19;
         hence IC C3.k in dom pFOR by A2,SCMPDS_4:75;
     end;
     hence FOR is_closed_on s by SCMPDS_6:def 2;
       s3 is halting by A11,AMI_1:def 20;
     hence FOR is_halting_on s by SCMPDS_6:def 3;
end;

theorem Th64:
 for s being State of SCMPDS,I being Program-block,a,c being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) <= 0 holds
 IExec(for-down(a,i,n,I),s) = s +* Start-At inspos (card I + 3)
proof
   let s be State of SCMPDS,I be Program-block, a,c be Int_position,
   i be Integer,n be Nat;
   set d1=DataLoc(s.a,i);
   assume A1: s.d1 <= 0;
   set FOR=for-down(a,i,n,I),
       pFOR=stop FOR,
       iFOR=Initialized pFOR,
       s3 = s +* iFOR,
       s4 = (Computation s3).1,
       i1=(a,i)<=0_goto (card I+3),
       i2=AddTo(a,i,-n),
       i3=goto -(card I+2);
   set SAl=Start-At inspos (card I + 3);

A2: IC s3 =inspos 0 by SCMPDS_6:21;
      FOR = i1 ';' (I ';' i2 ';' i3) by Lm6;
then A3: CurInstr s3 = i1 by SCMPDS_6:22;
A4: (Computation s3).(0 + 1) = Following (Computation s3).0 by AMI_1:def 19
     .= Following s3 by AMI_1:def 19
     .= Exec(i1,s3) by A3,AMI_1:def 18;
A5: not d1 in dom iFOR & d1 in dom s by SCMPDS_2:49,SCMPDS_4:31;
      not a in dom iFOR & a in dom s by SCMPDS_2:49,SCMPDS_4:31;
 then A6: s3.DataLoc(s3.a,i)=s3.d1 by FUNCT_4:12
     .= s.d1 by A5,FUNCT_4:12;
A7:  dom (s | A) = A by SCMPDS_6:1;
       iFOR c= s3 by FUNCT_4:26;
     then pFOR c= s3 by SCMPDS_4:57;
then A8:  pFOR c= s4 by AMI_3:38;

A9: card FOR=card I+3 by Th60;
then A10: inspos(card I+3) in dom pFOR by SCMPDS_6:25;
A11: IC s4 = s4.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s3,(card I+3)) by A1,A4,A6,SCMPDS_2:68
     .= inspos(0+(card I+3)) by A2,SCMPDS_6:23;
       s4.inspos(card I+3) = pFOR.inspos(card I+3) by A8,A10,GRFUNC_1:8
     .=halt SCMPDS by A9,SCMPDS_6:25;
then A12: CurInstr s4 = halt SCMPDS by A11,AMI_1:def 17;
then A13: s3 is halting by AMI_1:def 20;
   now let l be Nat;
       assume l < 0+1;
        then l <= 0 by NAT_1:38;
        then l=0 by NAT_1:19;
then CurInstr (Computation s3).l = CurInstr s3 by AMI_1:def 19;
         hence CurInstr (Computation s3).l <> halt SCMPDS by A3,SCMPDS_6:30;
      end;
      then for l be Nat st CurInstr (Computation s3).l = halt SCMPDS
        holds 1 <= l;
  then LifeSpan s3 = 1 by A12,A13,SCM_1:def 2;
then A14:  s4 = Result s3 by A13,SCMFSA6B:16;
A15:  dom IExec(FOR,s) = the carrier of SCMPDS by AMI_3:36
      .= dom (s +* SAl) by AMI_3:36;
A16:  IExec(FOR,s) = Result s3 +* s | A by SCMPDS_4:def 8;
        now let x be set;
      assume
A17:    x in dom IExec(FOR,s);
A18:    dom SAl = {IC SCMPDS} by AMI_3:34;
       per cases by A17,SCMPDS_4:20;
       suppose
A19:    x is Int_position;
        then x <> IC SCMPDS by SCMPDS_2:52;
then A20:    not x in dom SAl by A18,TARSKI:def 1;
      not x in dom (s | A) by A7,A19,SCMPDS_2:53;
      hence
          IExec(FOR,s).x = s4.x by A14,A16,FUNCT_4:12
       .= s3.x by A4,A19,SCMPDS_2:68
       .= s.x by A19,SCMPDS_5:19
       .= (s +* SAl).x by A20,FUNCT_4:12;
      suppose
A21:    x = IC SCMPDS;
        then x in dom Result s3 & not x in dom (s | A) by A7,AMI_1:48,AMI_5:25
;
      hence
           IExec(FOR,s).x = s4.x by A14,A16,FUNCT_4:12
       .= inspos(card I + 3) by A11,A21,AMI_1:def 15
       .= (s +* SAl).x by A21,Th12;
       suppose x is Instruction-Location of SCMPDS;
       hence IExec(FOR,s).x = (s +* SAl).x by SCMPDS_6:27;
    end;
    hence IExec(FOR,s) = s +* SAl by A15,FUNCT_1:9;
end;

theorem
   for s being State of SCMPDS,I being Program-block,a being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) <= 0
 holds IC IExec(for-down(a,i,n,I),s) = inspos (card I + 3)
proof
  let s be State of SCMPDS,I be Program-block,a be Int_position,
  i be Integer,n be Nat;
  assume s.DataLoc(s.a,i) <= 0;
      then IExec(for-down(a,i,n,I),s) =s +* Start-At inspos (card I+ 3) by Th64
;
      hence thesis by AMI_5:79;
end;

theorem Th66:
 for s being State of SCMPDS,I being Program-block,a,b being Int_position,
 i being Integer,n be Nat st s.DataLoc(s.a,i) <= 0
 holds IExec(for-down(a,i,n,I),s).b = s.b
proof
   let s be State of SCMPDS,I be Program-block,a,b be Int_position,
   i be Integer,n be Nat;
    assume s.DataLoc(s.a,i) <= 0;
then A1: IExec(for-down(a,i,n,I),s) = s +* Start-At inspos (card I + 3) by Th64
;
      not b in dom Start-At inspos (card I + 3) by SCMPDS_4:59;
    hence IExec(for-down(a,i,n,I),s).b = s.b by A1,FUNCT_4:12;
end;

Lm7:
 for I being Program-block,a being Int_position,i being Integer,n be Nat
 holds Shift(I,1) c= for-down(a,i,n,I)
proof
  let I be Program-block,a be Int_position,i be Integer,n be Nat;
   set i1=(a,i)<=0_goto (card I+3),
       i2=AddTo(a,i,-n),
       i3=goto -(card I+2);
A1: card Load i1=1 by SCMPDS_5:6;
      for-down(a,i,n,I) = i1 ';' I ';' i2 ';' i3 by Def2
     .= i1 ';' I ';' (i2 ';' i3) by SCMPDS_4:49
     .= Load i1 ';' I ';' (i2 ';' i3) by SCMPDS_4:def 4;
    hence thesis by A1,Th16;
end;

theorem Th67:
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a be Int_position, i be Integer,n be Nat,X be set
 st s.DataLoc(s.a,i) > 0 & not DataLoc(s.a,i) in X & n > 0 & card I > 0 &
    a <> DataLoc(s.a,i) & (for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
 holds IExec(I,t).a=t.a & IExec(I,t).DataLoc(s.a,i)=t.DataLoc(s.a,i) &
   I is_closed_on t & I is_halting_on t &
  for y be Int_position st y in X holds IExec(I,t).y=t.y)
 holds
     for-down(a,i,n,I) is_closed_on s & for-down(a,i,n,I) is_halting_on s
proof
  let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
  a be Int_position, i be Integer,n be Nat,X be set;
   set b=DataLoc(s.a,i);
   set FOR=for-down(a,i,n,I),
       pFOR=stop FOR,
       iFOR=Initialized pFOR,
       pI=stop I,
       IsI= Initialized pI;
   set i1=(a,i)<=0_goto (card I+3),
       i2=AddTo(a,i,-n),
       i3=goto -(card I+2);

   assume A1: s.b > 0;
   assume A2: not b in X;
   assume A3: n > 0;
   assume A4: card I > 0;
   assume A5: a <> b;
   assume A6: for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
    holds IExec(I,t).a=t.a & IExec(I,t).b=t.b
    & I is_closed_on t & I is_halting_on t &
    for y be Int_position st y in X holds IExec(I,t).y=t.y;

    defpred P[Nat] means
       for t be State of SCMPDS st t.b <= $1 &
      (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
      holds FOR is_closed_on t & FOR is_halting_on t;

A7:  P[0] by Th63;
A8:  for k be Nat st P[k] holds P[k + 1]
     proof
     let k be Nat;
     assume A9: P[k];
        now
        let t be State of SCMPDS;
        assume A10: t.b <= k+1;
        assume A11: for x be Int_position st x in X holds t.x=s.x;
        assume A12: t.a=s.a;
        per cases;
        suppose t.b <= 0;
        hence FOR is_closed_on t & FOR is_halting_on t
         by A12,Th63;
        suppose A13: t.b > 0;
        set t2 = t +* IsI,
            t3 = t +* iFOR,
            C3 = Computation t3,
            t4 = C3.1;
A14:     IExec(I,t).a=t.a & IExec(I,t).b=t.b
        & I is_closed_on t & I is_halting_on t &
        for y be Int_position st y in X holds IExec(I,t).y=t.y by A6,A11,A12;
A15:     IsI c= t2 by FUNCT_4:26;
A16:     t2 is halting by A14,SCMPDS_6:def 3;
        then t2 +* IsI is halting by A15,AMI_5:10;
then A17:     I is_halting_on t2 by SCMPDS_6:def 3;
A18:     I is_closed_on t2 by A14,SCMPDS_6:38;
A19:     inspos 0 in dom pFOR by SCMPDS_4:75;
A20:     IC t3 =inspos 0 by SCMPDS_6:21;
          FOR = i1 ';' (I ';' i2 ';' i3) by Lm6;
then A21:     CurInstr t3 = i1 by SCMPDS_6:22;
A22:     (Computation t3).(0 + 1) = Following (Computation t3).0 by AMI_1:def
19
        .= Following t3 by AMI_1:def 19
        .= Exec(i1,t3) by A21,AMI_1:def 18;
A23:     not a in dom iFOR & a in dom t by SCMPDS_2:49,SCMPDS_4:31;
A24:    not b in dom iFOR & b in dom t by SCMPDS_2:49,SCMPDS_4:31;
     A25: t3.DataLoc(t3.a,i)= t3.b by A12,A23,FUNCT_4:12
        .= t.b by A24,FUNCT_4:12;
A26:     IC t4 = t4.IC SCMPDS by AMI_1:def 15
        .= Next IC t3 by A13,A22,A25,SCMPDS_2:68
        .= inspos(0+1) by A20,SCMPDS_4:70;
          t2,t3 equal_outside A by SCMPDS_4:36;
then A27:     t2 | D = t3 | D by SCMPDS_4:24;
          now let a;
          thus t2.a = t3.a by A27,SCMPDS_4:23
          .= t4.a by A22,SCMPDS_2:68;
        end;
then A28:    t2 | D = t4 | D by SCMPDS_4:23;

        set m2=LifeSpan t2,
            t5=(Computation t4).m2,
            l1=inspos (card I + 1);

A29:     IExec(I,t) = Result t2 +* t | A by SCMPDS_4:def 8;
A30:     dom (t | A) = A by SCMPDS_6:1;
then A31:     not a in dom (t | A) by SCMPDS_2:53;
A32:     not b in dom (t | A) by A30,SCMPDS_2:53;
          card I + 1 < card I + 3 by REAL_1:53;
then A33:     l1 in dom FOR by Th61;
A34:     FOR c= iFOR by SCMPDS_6:17;
          iFOR c= t3 by FUNCT_4:26;
then A35:     FOR c= t3 by A34,XBOOLE_1:1;
          Shift(I,1) c= FOR by Lm7;
        then Shift(I,1) c= t3 by A35,XBOOLE_1:1;
then A36:     Shift(I,1) c= t4 by AMI_3:38;
then A37:     (Computation t2).m2 | D = t5 | D by A4,A15,A17,A18,A26,A28,Th36;
then A38:     t5.a=(Computation t2).m2.a by SCMPDS_4:23
        .=(Result t2).a by A16,SCMFSA6B:16
        .=s.a by A12,A14,A29,A31,FUNCT_4:12;

A39:     t5.b=(Computation t2).m2.b by A37,SCMPDS_4:23
        .=(Result t2).b by A16,SCMFSA6B:16
        .=t.b by A14,A29,A32,FUNCT_4:12;

        set m3=m2 +1;
        set t6=(Computation t3).m3;
A40:     IC t5=l1 by A4,A15,A17,A18,A26,A28,A36,Th36;
A41:     t6=t5 by AMI_1:51;
then A42:     CurInstr t6=t5.l1 by A40,AMI_1:def 17
        .=t4.l1 by AMI_1:54
        .=t3.l1 by AMI_1:54
        .=FOR.l1 by A33,A35,GRFUNC_1:8
        .=i2 by Th62;
        set t7=(Computation t3).(m3+ 1);
A43:     t7 = Following t6 by AMI_1:def 19
        .= Exec(i2,t6) by A42,AMI_1:def 18;
A44:    IC t7=t7.IC SCMPDS by AMI_1:def 15
       .=Next IC t6 by A43,SCMPDS_2:60
       .=inspos(card I+1+1) by A40,A41,SCMPDS_4:70
       .=inspos(card I+(1+1)) by XCMPLX_1:1;
     DataLoc(t6.a,i)=b by A38,AMI_1:51;
then A45:    t7.a=t6.a by A5,A43,SCMPDS_2:60
       .=s.a by A38,AMI_1:51;
       set l2=inspos(card I+2);
         card I + 2 < card I + 3 by REAL_1:53;
then A46:    l2 in dom FOR by Th61;
A47:    CurInstr t7=t7.l2 by A44,AMI_1:def 17
       .=t3.l2 by AMI_1:54
       .=FOR.l2 by A35,A46,GRFUNC_1:8
       .=i3 by Th62;
       set m5=m3+1+1,
           t8=(Computation t3).m5;
A48:    t8 = Following t7 by AMI_1:def 19
       .= Exec(i3,t7) by A47,AMI_1:def 18;
A49:    IC t8=t8.IC SCMPDS by AMI_1:def 15
       .=ICplusConst(t7,-(card I+2)) by A48,SCMPDS_2:66
       .=ICplusConst(t7,0-(card I+2)) by XCMPLX_1:150
       .=inspos 0 by A44,Th1;
A50:    t8.a=s.a by A45,A48,SCMPDS_2:66;
A51:   now
         let x be Int_position;
         assume A52:x in X;
       A53:  not x in dom (t | A) by A30,SCMPDS_2:53;
          t5.x=(Computation t2).m2.x by A37,SCMPDS_4:23
            .=(Result t2).x by A16,SCMFSA6B:16
            .=IExec(I,t).x by A29,A53,FUNCT_4:12
            .=t.x by A6,A11,A12,A52
            .=s.x by A11,A52;
       then t7.x=s.x by A2,A38,A41,A43,A52,SCMPDS_2:60;
         hence t8.x=s.x by A48,SCMPDS_2:66;
       end;
A54:    t8.b=t7.b by A48,SCMPDS_2:66
       .=t.b+ -n by A38,A39,A41,A43,SCMPDS_2:60;
         -(-n) > 0 by A3;
       then -n < 0 by REAL_1:66;
       then -n <= -1 by INT_1:21;
       then -n+t.b <= -1+t.b by AXIOMS:24;
then A55:    -n+t.b <= t.b-1 by XCMPLX_0:def 8;
         t.b-1 <= k by A10,REAL_1:86;
    then -n+t.b <= k by A55,AXIOMS:22;
then A56:    FOR is_closed_on t8 & FOR is_halting_on t8 by A9,A50,A51,A54;
A57:    t8 +* iFOR=t8 by A49,Th37;
         now
          let k be Nat;
          per cases;
          suppose k < m5;
           then k <= m3+1 by INT_1:20;
           then A58: k <= m3 or k=m3+1 by NAT_1:26;
           hereby
              per cases by A58,NAT_1:26;
              suppose A59:k <= m2;
               hereby
               per cases;
                 suppose k=0;
                 hence IC (Computation t3).k in dom pFOR by A19,A20,AMI_1:def
19;
                 suppose k<>0;
                  then consider kn be Nat such that
              A60: k=kn+1 by NAT_1:22;
                    kn < k by A60,REAL_1:69;
                  then kn < m2 by A59,AXIOMS:22;
              then A61: IC (Computation t2).kn + 1 = IC (Computation t4).kn
                  by A4,A15,A17,A18,A26,A28,A36,Th34;
              A62: IC (Computation t2).kn in dom pI by A14,SCMPDS_6:def 2;
                  consider lm be Nat such that
              A63: IC (Computation t2).kn=inspos lm by SCMPDS_3:32;
                    lm < card pI by A62,A63,SCMPDS_4:1;
                  then lm < card I+1 by SCMPDS_5:7;
              then A64: lm+1 <= card I +1 by INT_1:20;
                    card I + 1 < card I + 4 by REAL_1:53;
                  then lm+1 < card I +4 by A64,AXIOMS:22;
                  then A65: lm+1 < card pFOR by Lm5;
                    IC (Computation t3).k=inspos lm +1 by A60,A61,A63,AMI_1:51
                  .=inspos (lm+1) by SCMPDS_3:def 3;
                  hence IC (Computation t3).k in dom pFOR by A65,SCMPDS_4:1;
               end;
              suppose A66:k=m3;
                 l1 in dom pFOR by A33,SCMPDS_6:18;
               hence IC (Computation t3).k in dom pFOR by A4,A15,A17,A18,A26,
A28,A36,A41,A66,Th36;
              suppose k=m3+1;
               hence IC (Computation t3).k in dom pFOR by A44,A46,SCMPDS_6:18;
            end;
          suppose k >= m5;
          then consider nn be Nat such that
         A67: k=m5+nn by NAT_1:28;
               C3.k=(Computation (t8 +* iFOR)).nn by A57,A67,AMI_1:51;
           hence IC (Computation t3).k in dom pFOR by A56,SCMPDS_6:def 2;
       end;
       hence FOR is_closed_on t by SCMPDS_6:def 2;
         t8 is halting by A56,A57,SCMPDS_6:def 3;
       then t3 is halting by SCM_1:27;
       hence FOR is_halting_on t by SCMPDS_6:def 3;
     end;
     hence P[k+1];
     end;
A68:  for k being Nat holds P[k] from Ind(A7,A8);
     reconsider n=s.b as Nat by A1,INT_1:16;
     A69: P[n] by A68;
    for x be Int_position st x in X holds s.x=s.x;
     hence FOR is_closed_on s & FOR is_halting_on s by A69;
end;

theorem Th68:
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a be Int_position, i be Integer,n be Nat,X be set
 st s.DataLoc(s.a,i) > 0 & not DataLoc(s.a,i) in X & n > 0 & card I > 0 &
    a <> DataLoc(s.a,i) & (for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
 holds IExec(I,t).a=t.a & IExec(I,t).DataLoc(s.a,i)=t.DataLoc(s.a,i) &
   I is_closed_on t & I is_halting_on t &
  for y be Int_position st y in X holds IExec(I,t).y=t.y)
 holds
 IExec(for-down(a,i,n,I),s) =
 IExec(for-down(a,i,n,I),IExec(I ';' AddTo(a,i,-n),s))
proof
  let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
  a be Int_position, i be Integer,n be Nat,X be set;
   set b=DataLoc(s.a,i);
   set FOR=for-down(a,i,n,I),
       iFOR=Initialized stop FOR,
       iI= Initialized stop I,
       s1= s +* iFOR,
       C1=Computation s1,
       ps= s | A;

   set i1=(a,i)<=0_goto (card I+3),
       i2=AddTo(a,i,-n),
       i3=goto -(card I+2);

   assume A1: s.b > 0;
   assume A2: not b in X;
   assume A3: n > 0;
   assume A4: card I > 0;
   assume A5: a <> b;
   assume A6: for t be State of SCMPDS st
   (for x be Int_position st x in X holds t.x=s.x) & t.a=s.a
    holds IExec(I,t).a=t.a & IExec(I,t).b=t.b
    & I is_closed_on t & I is_halting_on t &
    for y be Int_position st y in X holds IExec(I,t).y=t.y;

    then FOR is_halting_on s by A1,A2,A3,A4,A5,Th67;
then A7: s1 is halting by SCMPDS_6:def 3;
   set sI= s +* iI,
       m1=LifeSpan sI+3,
       J=I ';' AddTo(a,i,-n),
       sJ=s +* Initialized stop J,
       s2=IExec(J,s) +* iFOR,
       C2=Computation s2,
       m2=LifeSpan s2;
       set Es=IExec(J,s),
           bj=DataLoc(Es.a,i);
A8: (for x be Int_position st x in X holds s.x=s.x) & s.a=s.a;
then A9: I is_closed_on s & I is_halting_on s by A6;
A10: IExec(I, s).a=s.a by A6,A8;
A11: Es.a=Exec(i2, IExec(I, s)).a by A9,Th50
    .=s.a by A5,A10,SCMPDS_2:60;
A12: now
    per cases;
    suppose Es.bj <= 0;
    hence FOR is_halting_on Es by Th63;

    suppose A13: Es.bj > 0;
      now
      let t be State of SCMPDS;
      assume A14:
      (for x be Int_position st x in X holds t.x=Es.x) & t.a=Es.a;
A15:   now
         let x be Int_position;
         assume A16: x in X;
         hence t.x=Es.x by A14
          .=Exec(i2, IExec(I, s)).x by A9,Th50
          .=IExec(I, s).x by A2,A10,A16,SCMPDS_2:60
          .=s.x by A6,A8,A16;
      end;
      hence IExec(I,t).a=t.a by A6,A11,A14;
      thus IExec(I,t).bj= t.bj by A6,A11,A14,A15;
      thus I is_closed_on t & I is_halting_on t &
       for y be Int_position st y in X holds IExec(I,t).y=t.y by A6,A11,A14,A15
;
     end;
     hence FOR is_halting_on Es by A2,A3,A4,A5,A11,A13,Th67;
   end;
   set s4 = C1.1;
A17:     IExec(I,s).a=s.a & IExec(I,s).b=s.b by A6,A8;
A18:     iI c= sI by FUNCT_4:26;
A19:     sI is halting by A9,SCMPDS_6:def 3;
        then sI +* iI is halting by A18,AMI_5:10;
then A20:     I is_halting_on sI by SCMPDS_6:def 3;
A21:     I is_closed_on sI by A9,SCMPDS_6:38;
A22:     IC s1 =inspos 0 by SCMPDS_6:21;
A23:     FOR = i1 ';' (I ';' i2 ';' i3) by Lm6;
then A24:     CurInstr s1 = i1 by SCMPDS_6:22;
A25:     (Computation s1).(0 + 1) = Following (Computation s1).0 by AMI_1:def
19
        .= Following s1 by AMI_1:def 19
        .= Exec(i1,s1) by A24,AMI_1:def 18;
A26:     not a in dom iFOR & a in dom s by SCMPDS_2:49,SCMPDS_4:31;
A27:    not b in dom iFOR & b in dom s by SCMPDS_2:49,SCMPDS_4:31;
     A28: s1.DataLoc(s1.a,i)=s1.b by A26,FUNCT_4:12
        .= s.b by A27,FUNCT_4:12;
A29:    IC s4 = s4.IC SCMPDS by AMI_1:def 15
        .= Next IC s1 by A1,A25,A28,SCMPDS_2:68
        .= inspos(0+1) by A22,SCMPDS_4:70;
          sI,s1 equal_outside A by SCMPDS_4:36;
then A30:    sI | D = s1 | D by SCMPDS_4:24;
          now let a;
          thus sI.a = s1.a by A30,SCMPDS_4:23
          .= s4.a by A25,SCMPDS_2:68;
        end;
then A31:    sI | D = s4 | D by SCMPDS_4:23;

        set mI=LifeSpan sI,
            s5=(Computation s4).mI,
            l1=inspos (card I + 1);

A32:     IExec(I,s) = Result sI +* s | A by SCMPDS_4:def 8;
A33:     dom (s | A) = A by SCMPDS_6:1;
then A34:     not a in dom (s | A) by SCMPDS_2:53;
A35:     not b in dom (s | A) by A33,SCMPDS_2:53;
          card I + 1 < card I + 3 by REAL_1:53;
then A36:    l1 in dom FOR by Th61;
A37:    FOR c= iFOR by SCMPDS_6:17;
          iFOR c= s1 by FUNCT_4:26;
then A38:    FOR c= s1 by A37,XBOOLE_1:1;
          Shift(I,1) c= FOR by Lm7;
        then Shift(I,1) c= s1 by A38,XBOOLE_1:1;
then A39:     Shift(I,1) c= s4 by AMI_3:38;
then A40:     (Computation sI).mI | D = s5 | D by A4,A18,A20,A21,A29,A31,Th36;
then A41:     s5.a=(Computation sI).mI.a by SCMPDS_4:23
        .=(Result sI).a by A19,SCMFSA6B:16
        .=s.a by A17,A32,A34,FUNCT_4:12;

A42:     s5.b=(Computation sI).mI.b by A40,SCMPDS_4:23
        .=(Result sI).b by A19,SCMFSA6B:16
        .=s.b by A17,A32,A35,FUNCT_4:12;

        set m3=mI +1;
        set s6=(Computation s1).m3;
A43:     IC s5=l1 by A4,A18,A20,A21,A29,A31,A39,Th36;
A44:     s6=s5 by AMI_1:51;
then A45:     CurInstr s6=s5.l1 by A43,AMI_1:def 17
        .=s4.l1 by AMI_1:54
        .=s1.l1 by AMI_1:54
        .=FOR.l1 by A36,A38,GRFUNC_1:8
        .=i2 by Th62;
        set s7=(Computation s1).(m3+ 1);
A46:     s7 = Following s6 by AMI_1:def 19
        .= Exec(i2,s6) by A45,AMI_1:def 18;
A47:    IC s7=s7.IC SCMPDS by AMI_1:def 15
       .=Next IC s6 by A46,SCMPDS_2:60
       .=inspos(card I+1+1) by A43,A44,SCMPDS_4:70
       .=inspos(card I+(1+1)) by XCMPLX_1:1;
       set l2=inspos(card I+2);
         card I + 2 < card I + 3 by REAL_1:53;
then A48:    l2 in dom FOR by Th61;
A49:    CurInstr s7=s7.l2 by A47,AMI_1:def 17
       .=s1.l2 by AMI_1:54
       .=FOR.l2 by A38,A48,GRFUNC_1:8
       .=i3 by Th62;
       set m5=m3+1+1,
           s8=(Computation s1).m5;
A50:    s8 = Following s7 by AMI_1:def 19
       .= Exec(i3,s7) by A49,AMI_1:def 18;
A51:    IC s8=s8.IC SCMPDS by AMI_1:def 15
       .=ICplusConst(s7,-(card I+2)) by A50,SCMPDS_2:66
       .=ICplusConst(s7,0-(card I+2)) by XCMPLX_1:150
       .=inspos 0 by A47,Th1;
A52:    s8.b=s7.b by A50,SCMPDS_2:66
       .=s.b+ -n by A41,A42,A44,A46,SCMPDS_2:60;

     A53: m5=mI+(1+1)+1 by XCMPLX_1:1
     .=mI+(2+1) by XCMPLX_1:1
     .=mI+3;
A54:  b=DataLoc(IExec(I, s).a,i) by A6,A8;
A55:  Es.b=Exec(i2, IExec(I, s)).b by A9,Th50
     .=IExec(I, s).b+ -n by A10,SCMPDS_2:60
     .=s.b+ -n by A6,A8;
       now
       let x be Int_position;
       A56: not x in dom iFOR & x in dom IExec(J,s) by SCMPDS_2:49,SCMPDS_4:31;
then A57:    s2.x=IExec(J,s).x by FUNCT_4:12;
       per cases;
       suppose x=b;
        hence s8.x=s2.x by A52,A55,A56,FUNCT_4:12;
       suppose A58: x<>b;
       A59:  not x in dom (s | A) by A33,SCMPDS_2:53;
       A60:  s5.x=(Computation sI).mI.x by A40,SCMPDS_4:23
            .=(Result sI).x by A19,SCMFSA6B:16
            .=IExec(I,s).x by A32,A59,FUNCT_4:12;
       A61:  s7.x=s5.x by A41,A44,A46,A58,SCMPDS_2:60;
              Es.x=Exec(i2, IExec(I, s)).x by A9,Th50
            .=IExec(I, s).x by A54,A58,SCMPDS_2:60;
        hence s8.x=s2.x by A50,A57,A60,A61,SCMPDS_2:66;
     end;
     then A62: s8 | D = s2 | D by SCMPDS_4:23;
A63:  IC s2 =IC C1.m1 by A51,A53,SCMPDS_6:21;

A64: s2 is halting by A12,SCMPDS_6:def 3;
A65: dom ps = dom s /\ A by RELAT_1:90
    .= ({IC SCMPDS} \/ D \/ A) /\ A by SCMPDS_4:19
    .= A by XBOOLE_1:21;
      s2 | A= (Result sJ +* ps +* iFOR) | A by SCMPDS_4:def 8
    .=(Result sJ +* ps)|A +* iFOR | A by AMI_5:6
    .= ps +* iFOR | A by A65,FUNCT_4:24
    .= s1 | A by AMI_5:6
    .= C1.m1 | A by Th6;
then A66: C1.m1=s2 by A53,A62,A63,Th7;
    then CurInstr C1.m1=i1 by A23,SCMPDS_6:22;
then A67: CurInstr C1.m1 <> halt SCMPDS by SCMPDS_6:30;
    set m0=LifeSpan s1;
      m0 > m1 by A7,A67,SCMPDS_6:2;
    then consider nn be Nat such that
A68: m0=m1+nn by NAT_1:28;
A69: C1.m0 = C2.nn by A66,A68,AMI_1:51;
    then CurInstr C2.nn =halt SCMPDS by A7,SCM_1:def 2;
then A70: nn >= m2 by A64,SCM_1:def 2;
      C1.(m1 + m2) = C2.m2 by A66,AMI_1:51;
    then CurInstr C1.(m1 + m2) = halt SCMPDS by A64,SCM_1:def 2;
    then m1 + m2 >= m0 by A7,SCM_1:def 2;
    then m2 >= nn by A68,REAL_1:53;
then nn=m2 by A70,AXIOMS:21;
then A71: Result s1 = C2.m2 by A7,A69,SCMFSA6B:16;
A72: IExec(J,s) | A= (Result sJ +* ps) | A by SCMPDS_4:def 8
    .= ps by A65,FUNCT_4:24;
    thus IExec(FOR,s)
     = C2.m2 +* ps by A71,SCMPDS_4:def 8
    .= Result s2 +* IExec(J,s) | A by A64,A72,SCMFSA6B:16
    .= IExec(FOR,IExec(J,s)) by SCMPDS_4:def 8;
end;

definition
   let I be shiftable Program-block,
   a be Int_position,i be Integer,n be Nat;
   cluster for-down(a,i,n,I) -> shiftable;
   correctness
   proof
    set FOR=for-down(a,i,n,I),
        i1= (a,i)<=0_goto (card I +3),
        i2= AddTo(a,i,-n),
        i3= goto -(card I+2);
   reconsider PF= Load i1 ';' I ';' i2 as shiftable Program-block;
A1: PF=i1 ';' I ';' i2 by SCMPDS_4:def 4;
    then card PF=card (i1 ';' I) + 1 by SCMP_GCD:8
     .=card I + 1+1 by SCMPDS_6:15
     .=card I +(1+1) by XCMPLX_1:1;
then A2:  card PF+ -(card I+2) =0 by XCMPLX_0:def 6;
       FOR= PF ';' i3 by A1,Def2;
     hence FOR is shiftable by A2,SCMPDS_4:78;
  end;
end;

definition
   let I be No-StopCode Program-block,
   a be Int_position,i be Integer,n be Nat;
   cluster for-down(a,i,n,I) -> No-StopCode;
   correctness
   proof
       -(card I+2) <> 0 by XCMPLX_1:135;
     then reconsider i3=goto -(card I+2) as No-StopCode Instruction of SCMPDS
     by SCMPDS_5:25;
       for-down(a,i,n,I) =
     (a,i)<=0_goto (card I +3) ';' I ';' AddTo(a,i,-n) ';' i3 by Def2;
     hence thesis;
   end;
end;

begin :: Two Examples for Summing
:: n=Sum 1+1+...+1
definition
 let n be Nat;
 func sum(n) -> Program-block equals
:Def3:  ::Def04
     (GBP:=0) ';' ((GBP,2):=n) ';' ((GBP,3):=0) ';'
     for-down(GBP,2,1, Load AddTo(GBP,3,1));
 coherence;
end;

theorem Th69:
 for s being State of SCMPDS st s.GBP=0 holds
    for-down(GBP,2,1, Load AddTo(GBP,3,1)) is_closed_on s &
    for-down(GBP,2,1, Load AddTo(GBP,3,1)) is_halting_on s
proof
    let s be State of SCMPDS;
    set I= Load AddTo(GBP,3,1);
    assume A1: s.GBP=0;
    per cases;
    suppose s.DataLoc(s.GBP,2) <= 0;
      hence thesis by Th63;

    suppose A2: s.DataLoc(s.GBP,2) > 0;
   DataLoc(s.GBP,2)=intpos(0+2) by A1,SCMP_GCD:5;
then A3: DataLoc(s.GBP,2) <> GBP by SCMP_GCD:4,def 2;
then A4: not DataLoc(s.GBP,2) in {GBP} by TARSKI:def 1;
    A5: card I= 1 by SCMPDS_5:6;
      now
      let t be State of SCMPDS;
      assume A6:
      (for x be Int_position st x in {GBP} holds t.x=s.x) & t.GBP=s.GBP;
      set t0=Initialized t;
      t0.GBP=0 by A1,A6,SCMPDS_5:40;
then A7: DataLoc(t0.GBP,3)=intpos(0+3) by SCMP_GCD:5;
then A8: DataLoc(t0.GBP,3) <> GBP by SCMP_GCD:4,def 2;
     thus
A9:  IExec(I,t).GBP=Exec(AddTo(GBP,3,1),t0).GBP by SCMPDS_5:45
      .=t0.GBP by A8,SCMPDS_2:60
      .=t.GBP by SCMPDS_5:40;
     set cv=DataLoc(s.GBP,2);
   cv=intpos(0+2) by A1,SCMP_GCD:5;
then A10:  DataLoc(t0.GBP,3)<> cv by A7,SCMP_GCD:4;
      thus
        IExec(I,t).cv=Exec(AddTo(GBP,3,1),t0).cv by SCMPDS_5:45
      .=t0.cv by A10,SCMPDS_2:60
      .=t.cv by SCMPDS_5:40;
      thus
        I is_closed_on t & I is_halting_on t by SCMPDS_6:34,35;
      hereby
         let y be Int_position;
         assume y in {GBP};
         then y=GBP by TARSKI:def 1;
         hence IExec(I,t).y=t.y by A9;
      end;
   end;
   hence thesis by A2,A3,A4,A5,Th67;
end;

theorem Th70:
 for s being State of SCMPDS,n be Nat st s.GBP=0 & s.intpos 2=n &
 s.intpos 3=0 holds
    IExec(for-down(GBP,2,1, Load AddTo(GBP,3,1)),s).intpos 3=n
proof
    let s be State of SCMPDS,n be Nat;
    set i= AddTo(GBP,3,1),
        I= Load i,
    FD= for-down(GBP,2,1, I),
    a=intpos 3;
    assume A1: s.GBP=0 & s.intpos 2=n & s.a=0;
    defpred P[Nat] means
     for s be State of SCMPDS st s.intpos 2=$1 & s.GBP=0
       holds IExec(FD,s).a=$1+s.a;
A2: P[0]
    proof
       let s be State of SCMPDS;
       assume A3:s.intpos 2=0 & s.GBP=0;
then DataLoc(s.GBP,2)=intpos(0+2) by SCMP_GCD:5;
       hence IExec(FD,s).a =0+s.a by A3,Th66;
    end;
A4: now
       let k be Nat;
       assume A5: P[k];
         now
       let s be State of SCMPDS;
         assume A6:s.intpos 2=k+1 & s.GBP=0;
then A7:      DataLoc(s.GBP,2)=intpos(0+2) by SCMP_GCD:5;
         then A8: s.DataLoc(s.GBP,2) > 0 by A6,NAT_1:19;
        A9: DataLoc(s.GBP,2) <> GBP by A7,SCMP_GCD:4,def 2;
        then A10: not DataLoc(s.GBP,2) in {GBP} by TARSKI:def 1;
        A11: card I= 1 by SCMPDS_5:6;
    A12: now
           let t be State of SCMPDS;
           assume A13:
           (for x be Int_position st x in {GBP} holds t.x=s.x) & t.GBP=s.GBP;
           set t0=Initialized t;
             t0.GBP=0 by A6,A13,SCMPDS_5:40;
      then A14:  DataLoc(t0.GBP,3)=intpos(0+3) by SCMP_GCD:5;
      then A15: DataLoc(t0.GBP,3) <> GBP by SCMP_GCD:4,def 2;
         thus
       A16: IExec(I,t).GBP=Exec(AddTo(GBP,3,1),t0).GBP by SCMPDS_5:45
           .=t0.GBP by A15,SCMPDS_2:60
           .=t.GBP by SCMPDS_5:40;
       set cv=DataLoc(s.GBP,2);
          cv=intpos(0+2) by A6,SCMP_GCD:5;
      then A17:  DataLoc(t0.GBP,3)<> cv by A14,SCMP_GCD:4;
      thus
        IExec(I,t).cv=Exec(AddTo(GBP,3,1),t0).cv by SCMPDS_5:45
      .=t0.cv by A17,SCMPDS_2:60
      .=t.cv by SCMPDS_5:40;
       thus
         I is_closed_on t & I is_halting_on t by SCMPDS_6:34,35;
       hereby
         let y be Int_position;
         assume y in {GBP};
         then y=GBP by TARSKI:def 1;
         hence IExec(I,t).y=t.y by A16;
       end;
      end;
      set j=AddTo(GBP,2,-1),
          s0=Initialized s,
          s1=IExec(I, s),
          s2=IExec(I ';'j,s),
          l2=intpos 2;
A18:   s0.GBP=0 by A6,SCMPDS_5:40;
then A19:   DataLoc(s0.GBP,3)=intpos(0+3) by SCMP_GCD:5;
then A20:   DataLoc(s0.GBP,3) <> GBP by SCMP_GCD:4,def 2;
A21:   s1.GBP=Exec(i, s0).GBP by SCMPDS_5:45
      .=0 by A18,A20,SCMPDS_2:60;
then A22:   DataLoc(s1.GBP,2)=intpos(0+2) by SCMP_GCD:5;
then A23:   DataLoc(s1.GBP,2) <> a by SCMP_GCD:4;
A24:   DataLoc(s0.GBP,3)<>l2 by A19,SCMP_GCD:4;
A25:   s2.a=Exec(j, s1).a by SCMPDS_5:46
      .=s1.a by A23,SCMPDS_2:60
      .=Exec(i, s0).a by SCMPDS_5:45
      .=s0.a+1 by A19,SCMPDS_2:60
      .=s.a+1 by SCMPDS_5:40;
A26:   s2.l2=Exec(j, s1).l2 by SCMPDS_5:46
      .=s1.l2+ -1 by A22,SCMPDS_2:60
      .=Exec(i, s0).l2+ -1 by SCMPDS_5:45
      .=s0.l2+ -1 by A24,SCMPDS_2:60
      .=k+1+-1 by A6,SCMPDS_5:40
      .=k by XCMPLX_1:137;
A27:   DataLoc(s1.GBP,2) <> GBP by A22,SCMP_GCD:4,def 2;
A28:   s2.GBP=Exec(j, s1).GBP by SCMPDS_5:46
      .=0 by A21,A27,SCMPDS_2:60;
     thus IExec(FD,s).a =IExec(FD,s2).a by A8,A9,A10,A11,A12,Th68
      .=k+s2.a by A5,A26,A28
      .=k+1+s.a by A25,XCMPLX_1:1;
     end;
     hence P[k+1];
   end;
     for k be Nat holds P[k] from Ind(A2,A4);
   hence IExec(FD,s).a=n+0 by A1
   .=n;
end;

theorem
   for s being State of SCMPDS,n be Nat
 holds IExec(sum(n),s).intpos 3 =n
proof
    let s be State of SCMPDS,n be Nat;
    set i1= GBP:=0,
        i2= (GBP,2):=n,
        i3= (GBP,3):=0,
        i4= AddTo(GBP,3,1),
        FD= for-down(GBP,2,1, Load i4),
        a = intpos 3,
        I2=i1 ';' i2,
        s1=IExec(I2, s),
        s2=Exec(i1, Initialized s),
        I3=I2 ';' i3,
        s3=IExec(I3,s);
A1: s2.GBP=0 by SCMPDS_2:57;
then A2: DataLoc(s2.GBP,2)=intpos(0+2) by SCMP_GCD:5;
then A3: DataLoc(s2.GBP,2) <> GBP by SCMP_GCD:4,def 2;
A4: s1.GBP=Exec(i2, s2).GBP by SCMPDS_5:47
    .=0 by A1,A3,SCMPDS_2:58;
then A5: DataLoc(s1.GBP,3)=intpos(0+3) by SCMP_GCD:5;
A6: s3.a=Exec(i3,s1).a by SCMPDS_5:46
    .=0 by A5,SCMPDS_2:58;
A7: DataLoc(s1.GBP,3)<> GBP by A5,SCMP_GCD:4,def 2;
A8: s3.GBP=Exec(i3,s1).GBP by SCMPDS_5:46
    .=0 by A4,A7,SCMPDS_2:58;
A9: DataLoc(s1.GBP,3)<> intpos 2 by A5,SCMP_GCD:4;
A10: s3.intpos 2=Exec(i3,s1).intpos 2 by SCMPDS_5:46
    .=s1.intpos 2 by A9,SCMPDS_2:58
    .=Exec(i2, s2).intpos 2 by SCMPDS_5:47
    .=n by A2,SCMPDS_2:58;
A11: I3 is_closed_on s & I3 is_halting_on s by SCMPDS_6:34,35;
A12: FD is_closed_on s3 & FD is_halting_on s3 by A8,Th69;
    thus IExec(sum(n),s).a = IExec(I3 ';' FD, s).a by Def3
    .= IExec(FD,s3).a by A11,A12,Th49
    .= n by A6,A8,A10,Th70;
end;

:: sum=Sum x1+x2+...+x2
definition
 let sp,control,result,pp,pData be Nat;
 func sum(sp,control,result,pp,pData) -> Program-block equals
:Def4:  ::Def05
  ((intpos sp,result):=0) ';' (intpos pp:=pData) ';'
  for-down(intpos sp,control,1, AddTo(intpos sp,result,intpos pData,0)
   ';' AddTo(intpos pp,0,1));
 coherence;
end;

theorem Th72:
 for s being State of SCMPDS,sp,cv,result,pp,pD be Nat
 st s.intpos sp > sp & cv < result & s.intpos pp=pD &
 s.intpos sp+result < pp & pp <pD & pD < s.intpos pD holds
  for-down(intpos sp,cv,1, AddTo(intpos sp,result,intpos pD,0) ';'
  AddTo(intpos pp,0,1)) is_closed_on s &
  for-down(intpos sp,cv,1, AddTo(intpos sp,result,intpos pD,0) ';'
  AddTo(intpos pp,0,1)) is_halting_on s
proof
  let s be State of SCMPDS, sp,cv,fr,pp,pD be Nat;
  set BP=intpos sp,
      PD=intpos pD,
      PP=intpos pp;
  assume A1: s.BP > sp & cv < fr & s.PP=pD & s.BP+fr <pp
      & pp < pD & pD < s.PD;
  set i2= AddTo(BP,fr,PD,0),
      i3= AddTo(PP,0,1),
      I= i2 ';' i3;
    per cases;
    suppose s.DataLoc(s.BP,cv) <= 0;
      hence thesis by Th63;

    suppose A2: s.DataLoc(s.BP,cv) > 0;
     s.BP > 0 by A1,NAT_1:18;
    then reconsider n=s.BP as Nat by INT_1:16;
A3: DataLoc(n,cv)=intpos(n+cv) by SCMP_GCD:5;
      n <= n+cv by NAT_1:29;
then A4: DataLoc(s.BP,cv) <> BP by A1,A3,SCMP_GCD:4;
A5: n+fr > n+cv by A1,REAL_1:53;
then A6: n+cv < pp by A1,AXIOMS:22;
      DataLoc(s.BP,cv) <> PP by A1,A3,A5,SCMP_GCD:4;
then A7: not DataLoc(s.BP,cv) in {BP,PP} by A4,TARSKI:def 2;
    A8: card I= 2 by SCMP_GCD:9;
      now
      let t be State of SCMPDS;
      assume A9:
      (for x be Int_position st x in {BP,PP} holds t.x=s.x) & t.BP=s.BP;
      set t0=Initialized t,
          t1=Exec(i2, t0);
A10:  DataLoc(t0.BP,fr)=DataLoc(n,fr) by A9,SCMPDS_5:40
     .=intpos(n+fr) by SCMP_GCD:5;
       n <= n+fr by NAT_1:29;
  then DataLoc(t0.BP,fr) <> BP by A1,A10,SCMP_GCD:4;
then A11:  t1.BP=t0.BP by SCMPDS_2:61
     .=t.BP by SCMPDS_5:40;
A12:  PP in {BP,PP} by TARSKI:def 2;
    DataLoc(t0.BP,fr) <> PP by A1,A10,SCMP_GCD:4;
then A13:  t1.PP=t0.PP by SCMPDS_2:61
     .=t.PP by SCMPDS_5:40;
then t1.PP=pD by A1,A9,A12;
then A14:  DataLoc(t1.PP,0)=intpos (pD+0) by SCMP_GCD:5;
       n <= n+fr by NAT_1:29;
     then sp < n+fr by A1,AXIOMS:22;
     then sp < pp by A1,AXIOMS:22;
then A15:  DataLoc(t1.PP,0) <> BP by A1,A14,SCMP_GCD:4;
     thus
A16:  IExec(I,t).BP=Exec(i3, t1).BP by SCMPDS_5:47
     .=t.BP by A11,A15,SCMPDS_2:60;
A17:  IExec(I,t).PP=Exec(i3, t1).PP by SCMPDS_5:47
     .=t.PP by A1,A13,A14,SCMPDS_2:60;

     set Dv=DataLoc(s.BP,cv);
A18:  Dv=intpos(n+cv) by SCMP_GCD:5;
then A19:  DataLoc(t0.BP,fr) <> Dv by A5,A10,SCMP_GCD:4;
A20:  DataLoc(t1.PP,0) <> Dv by A1,A6,A14,A18,SCMP_GCD:4;
     thus
       IExec(I,t).Dv=Exec(i3, t1).Dv by SCMPDS_5:47
     .=t1.Dv by A20,SCMPDS_2:60
     .=t0.Dv by A19,SCMPDS_2:61
     .=t.Dv by SCMPDS_5:40;
      thus
        I is_closed_on t & I is_halting_on t by SCMPDS_6:34,35;
      hereby
         let y be Int_position;
         assume A21: y in {BP,PP};
         per cases by A21,TARSKI:def 2;
         suppose y=BP;
           hence IExec(I,t).y=t.y by A16;
         suppose y=PP;
           hence IExec(I,t).y=t.y by A17;
      end;
   end;
   hence thesis by A2,A4,A7,A8,Th67;
end;

theorem Th73:
  for s being State of SCMPDS,sp,cv,result,pp,pD be Nat,
  f be FinSequence of NAT st
  s.intpos sp > sp & cv < result & s.intpos pp=pD &
  s.intpos sp+result < pp & pp <pD & pD < s.intpos pD &
  s.DataLoc(s.intpos sp,result)=0 & len f = s.DataLoc(s.intpos sp,cv) &
 for k be Nat st k < len f holds f.(k+1)=s.DataLoc(s.intpos pD,k)
 holds
  IExec(for-down(intpos sp,cv,1, AddTo(intpos sp,result,intpos pD,0)
   ';' AddTo(intpos pp,0,1)),s).DataLoc(s.intpos sp,result)=Sum f
proof
  let s be State of SCMPDS, sp,cv,fr,pp,pD be Nat,f be FinSequence of NAT;
  set BP=intpos sp,
      PD=intpos pD,
      PP=intpos pp;
  assume A1: s.BP > sp & cv < fr & s.PP=pD & s.BP+fr <pp
      & pp < pD & pD < s.PD & s.DataLoc(s.BP,fr)=0
      & len f = s.DataLoc(s.BP,cv) &
  for k be Nat st k < len f holds f.(k+1)=s.DataLoc(s.PD,k);
  set i2= AddTo(BP,fr,PD,0),
      i3= AddTo(PP,0,1),
      I= i2 ';' i3,
      FD= for-down(BP,cv,1,I),
      a=DataLoc(s.BP,fr);
    defpred P[Nat] means
     for t be State of SCMPDS,f be FinSequence of NAT
     st t.BP=s.BP & t.PP=pD & pD < t.PD & len f = t.DataLoc(t.BP,cv) &
     len f=$1 & for k be Nat st k < len f holds f.(k+1)=t.DataLoc(t.PD,k)
     holds IExec(FD,t).a=Sum f+t.a;
     now
       let t be State of SCMPDS,f be FinSequence of NAT;
       assume A2: t.BP=s.BP & t.PP=pD & pD < t.PD
       & len f = t.DataLoc(t.BP,cv) & len f=0 &
       for k be Nat st k < len f holds f.(k+1)=t.DataLoc(t.PD,k);
then Sum f=0 by FINSEQ_1:32,RVSUM_1:102;
       hence IExec(FD,t).a =Sum f + t.a by A2,Th66;
    end;
then A3: P[0];
     s.BP > 0 by A1,NAT_1:18;
    then reconsider n=s.BP as Nat by INT_1:16;
    A4: n <= n+cv by NAT_1:29;
    A5: n <= n+fr by NAT_1:29;
A6: n+fr > n+cv by A1,REAL_1:53;
then A7: n+cv < pp by A1,AXIOMS:22;
      n <= n+fr by NAT_1:29;
    then sp < n+fr by A1,AXIOMS:22;
    then A8: sp < pp by A1,AXIOMS:22;
A9: n+cv < pD by A1,A7,AXIOMS:22;
A10: n+fr < pD by A1,AXIOMS:22;
A11: now
       let k be Nat;
       assume A12: P[k];
         now
        let t be State of SCMPDS,f be FinSequence of NAT;
        assume A13: t.BP=s.BP & t.PP=pD & pD < t.PD &
        len f = t.DataLoc(t.BP,cv) & len f=k+1 &
        for i be Nat st i < len f holds f.(i+1)=t.DataLoc(t.PD,i);
            A14: k+1>0 by NAT_1:19;
        A15: DataLoc(t.BP,cv)=intpos(n+cv) by A13,SCMP_GCD:5;
        then A16: DataLoc(t.BP,cv) <> BP by A1,A4,SCMP_GCD:4;
              DataLoc(t.BP,cv) <> PP by A1,A6,A15,SCMP_GCD:4;
        then A17: not DataLoc(t.BP,cv) in {BP,PP} by A16,TARSKI:def 2;
            A18: card I= 2 by SCMP_GCD:9;
        A19: now
           let u be State of SCMPDS;
           assume A20:
           (for x be Int_position st x in {BP,PP} holds u.x=t.x) & u.BP=t.BP;
           set t0=Initialized u,
               t1=Exec(i2, t0);
         A21: DataLoc(t0.BP,fr)=DataLoc(n,fr) by A13,A20,SCMPDS_5:40
             .=intpos(n+fr) by SCMP_GCD:5;
         then DataLoc(t0.BP,fr) <> BP by A1,A5,SCMP_GCD:4;
         then A22: t1.BP=t0.BP by SCMPDS_2:61
             .=u.BP by SCMPDS_5:40;
         A23: PP in {BP,PP} by TARSKI:def 2;
            DataLoc(t0.BP,fr) <> PP by A1,A21,SCMP_GCD:4;
         then A24: t1.PP=t0.PP by SCMPDS_2:61
            .=u.PP by SCMPDS_5:40;
         then t1.PP=pD by A13,A20,A23;
         then A25: DataLoc(t1.PP,0)=intpos (pD+0) by SCMP_GCD:5;
         then A26: DataLoc(t1.PP,0) <> BP by A1,A8,SCMP_GCD:4;
          thus
         A27: IExec(I,u).BP=Exec(i3, t1).BP by SCMPDS_5:47
            .=u.BP by A22,A26,SCMPDS_2:60;
         A28: IExec(I,u).PP=Exec(i3, t1).PP by SCMPDS_5:47
             .=u.PP by A1,A24,A25,SCMPDS_2:60;
      set Dv=DataLoc(t.BP,cv);
       A29: Dv=intpos(n+cv) by A13,SCMP_GCD:5;
       then A30: DataLoc(t0.BP,fr) <> Dv by A6,A21,SCMP_GCD:4;
       A31:  DataLoc(t1.PP,0) <> Dv by A1,A7,A25,A29,SCMP_GCD:4;
       thus
         IExec(I,u).Dv=Exec(i3, t1).Dv by SCMPDS_5:47
       .=t1.Dv by A31,SCMPDS_2:60
       .=t0.Dv by A30,SCMPDS_2:61
       .=u.Dv by SCMPDS_5:40;
       thus
         I is_closed_on u & I is_halting_on u by SCMPDS_6:34,35;
       hereby
         let y be Int_position;
         assume A32: y in {BP,PP};
         per cases by A32,TARSKI:def 2;
         suppose y=BP;
           hence IExec(I,u).y=u.y by A27;
         suppose y=PP;
           hence IExec(I,u).y=u.y by A28;
       end;
      end;
      set j=AddTo(BP,cv,-1),
          s2=IExec(I ';'j,t),
          g=Del(f,1);
      set t0=Initialized t,
          t1=Exec(i2, t0);
      A33: DataLoc(t0.BP,fr)=DataLoc(n,fr) by A13,SCMPDS_5:40
          .=intpos(n+fr) by SCMP_GCD:5;
      then DataLoc(t0.BP,fr) <> BP by A1,A5,SCMP_GCD:4;
      then A34: t1.BP = t0.BP by SCMPDS_2:61
          .=t.BP by SCMPDS_5:40;
         DataLoc(t0.BP,fr) <> PP by A1,A33,SCMP_GCD:4;
      then t1.PP=t0.PP by SCMPDS_2:61
            .=t.PP by SCMPDS_5:40;
      then A35: DataLoc(t1.PP,0)=intpos (pD+0) by A13,SCMP_GCD:5;
      then A36: DataLoc(t1.PP,0) <> BP by A1,A8,SCMP_GCD:4;
          set It=IExec(I,t);
      A37: It.BP=Exec(i3, t1).BP by SCMPDS_5:47
          .=t.BP by A34,A36,SCMPDS_2:60;
      then A38: DataLoc(It.BP,cv)=intpos(n+cv) by A13,SCMP_GCD:5;
      then A39: DataLoc(It.BP,cv) <> BP by A1,A4,SCMP_GCD:4;
      A40: s2.BP=Exec(j, It).BP by SCMPDS_5:46
          .=s.BP by A13,A37,A39,SCMPDS_2:60;
          1 <= k+1 by NAT_1:29;
        then 1 in Seg (k+1) by FINSEQ_1:3;
    then A41: 1 in dom f by A13,FINSEQ_1:def 3;
        then A42: len g +1=len f by WSIERP_1:def 1;
    then A43: len g=k by A13,XCMPLX_1:2;
    A44: DataLoc(s2.BP,cv)=intpos(n+cv) by A40,SCMP_GCD:5;
    A45: DataLoc(t1.PP,0) <> intpos(n+cv) by A1,A7,A35,SCMP_GCD:4;
    A46: DataLoc(t0.BP,fr)<> intpos(n+cv) by A6,A33,SCMP_GCD:4;
    A47: It.intpos(n+cv)=Exec(i3, t1).intpos(n+cv) by SCMPDS_5:47
        .=t1.intpos(n+cv) by A45,SCMPDS_2:60
        .=t0.intpos(n+cv) by A46,SCMPDS_2:61
        .=t.intpos(n+cv) by SCMPDS_5:40
        .=k+1 by A13,SCMP_GCD:5;
    A48: s2.DataLoc(s2.BP,cv)=Exec(j, It).intpos(n+cv) by A44,SCMPDS_5:46
        .=It.intpos(n+cv)+ -1 by A38,SCMPDS_2:60
        .=len g by A13,A42,A47,XCMPLX_1:137;
    A49: 1 <= len f by A13,NAT_1:29;
      then A50: 1 in dom f by FINSEQ_3:27;
          0 < len f by A49,AXIOMS:22;
    then A51: f.(0+1)=t.DataLoc(t.PD,0) by A13
        .=t0.DataLoc(t.PD,0) by SCMPDS_5:40
        .=t0.DataLoc(t0.PD,0) by SCMPDS_5:40;
    A52: a=intpos(n+fr) by SCMP_GCD:5;
    then A53: a <> DataLoc(It.BP,cv) by A6,A38,SCMP_GCD:4;
    A54: DataLoc(t1.PP,0) <> a by A1,A35,A52,SCMP_GCD:4;
    A55: It.a=Exec(i3, t1).a by SCMPDS_5:47
        .=t1.a by A54,SCMPDS_2:60
        .=t0.a + f.1 by A33,A51,A52,SCMPDS_2:61
        .=t.a + f.1 by SCMPDS_5:40;
    A56: s2.a=Exec(j, It).a by SCMPDS_5:46
        .=f.1+t.a by A53,A55,SCMPDS_2:60;
    A57: PP <> DataLoc(It.BP,cv) by A1,A6,A38,SCMP_GCD:4;
    A58: DataLoc(t0.BP,fr)<> PP by A1,A33,SCMP_GCD:4;
    A59: s2.PP=Exec(j, It).PP by SCMPDS_5:46
        .=It.PP by A57,SCMPDS_2:60
        .=Exec(i3, t1).PP by SCMPDS_5:47
        .=t1.PP by A1,A35,SCMPDS_2:60
        .=t0.PP by A58,SCMPDS_2:61
        .=pD by A13,SCMPDS_5:40;
    A60: PD <> DataLoc(It.BP,cv) by A1,A7,A38,SCMP_GCD:4;
    A61: DataLoc(t0.BP,fr)<> PD by A1,A33,SCMP_GCD:4;
    A62: s2.PD=Exec(j, It).PD by SCMPDS_5:46
        .=It.PD by A60,SCMPDS_2:60
        .=Exec(i3, t1).PD by SCMPDS_5:47
        .=t1.PD+1 by A35,SCMPDS_2:60
        .=t0.PD+1 by A61,SCMPDS_2:61
        .=t.PD+1 by SCMPDS_5:40;
        then t.PD < s2.PD by REAL_1:69;
    then A63: pD < s2.PD by A13,AXIOMS:22;
    A64: now
          let i be Nat;
          assume A65: i < len g;
         set SD=DataLoc(s2.PD,i);
           pD >= 0 by NAT_1:18;
         then t.PD >= 0 by A13,AXIOMS:22;
         then reconsider m=t.PD as Nat by INT_1:16;
     A66: SD=intpos(m+1+i) by A62,SCMP_GCD:5
         .=intpos(m+(1+i)) by XCMPLX_1:1;
     A67: n+cv < m by A9,A13,AXIOMS:22;
     A68: m <= m+(1+i) by NAT_1:29;
     then A69: SD <> DataLoc(It.BP,cv) by A38,A66,A67,SCMP_GCD:4;
     A70: DataLoc(t1.PP,0) <> SD by A13,A35,A66,A68,SCMP_GCD:4;
           n+fr < m by A10,A13,AXIOMS:22;
     then A71: DataLoc(t0.BP,fr)<> SD by A33,A66,A68,SCMP_GCD:4;
     A72: s2.SD=Exec(j, It).SD by SCMPDS_5:46
        .=It.SD by A69,SCMPDS_2:60
        .=Exec(i3, t1).SD by SCMPDS_5:47
        .=t1.SD by A70,SCMPDS_2:60
        .=t0.SD by A71,SCMPDS_2:61
        .=t.SD by SCMPDS_5:40;
        A73: i+1 < len g+1 by A65,REAL_1:53;
          0 <= i by NAT_1:18;
        then 0+1 <= i+1 by AXIOMS:24;
     hence g.(i+1)=f.(i+1+1) by A41,WSIERP_1:def 1
        .=t.DataLoc(t.PD,i+1) by A13,A42,A73
        .=s2.SD by A66,A72,SCMP_GCD:5;
        end;
     thus IExec(FD,t).a =IExec(FD,s2).a by A13,A14,A16,A17,A18,A19,Th68
          .=Sum g+s2.a by A12,A40,A43,A48,A59,A63,A64
          .=Sum g+f.1+t.a by A56,XCMPLX_1:1
          .=Sum f+t.a by A50,WSIERP_1:27;
     end;
     hence P[k+1];
   end;
     for k be Nat holds P[k] from Ind(A3,A11);
   hence IExec(FD,s).a=Sum f+0 by A1
   .=Sum f;
end;

theorem
   for s being State of SCMPDS,sp,cv,result,pp,pD be Nat,
 f be FinSequence of NAT st
  s.intpos sp > sp & cv < result & s.intpos sp+result < pp
  & pp <pD & pD < s.intpos pD & len f = s.DataLoc(s.intpos sp,cv) &
 for k be Nat st k < len f holds f.(k+1)=s.DataLoc(s.intpos pD,k)
 holds IExec(sum(sp,cv,result,pp,pD),s).DataLoc(s.intpos sp,result)=Sum f
proof
  let s be State of SCMPDS, sp,cv,fr,pp,pD be Nat,f be FinSequence of NAT;
  set BP=intpos sp,
      PD=intpos pD,
      PP=intpos pp;
  assume A1: s.BP > sp & cv < fr & s.BP+fr <pp
      & pp < pD & pD < s.PD & len f = s.DataLoc(s.BP,cv) &
  for k be Nat st k < len f holds f.(k+1)=s.DataLoc(s.PD,k);
  set i0= (BP,fr):=0,
       i1= PP:=pD,
       Hi= i0 ';' i1,
       i2= AddTo(BP,fr,PD,0),
       i3= AddTo(PP,0,1),
       FD= for-down(BP,cv,1,i2 ';' i3),
       s2=IExec(Hi,s),
       s0=Initialized s,
       s1=Exec(i0, s0),
       a =DataLoc(s.BP,fr),
       a1=DataLoc(s2.BP,fr);
     s.BP > 0 by A1,NAT_1:18;
    then reconsider n=s.BP as Nat by INT_1:16;
    A2: n <= n+fr by NAT_1:37;
then sp < n+fr by A1,AXIOMS:22;
then A3: BP <> PP by A1,SCMP_GCD:4;
A4: DataLoc(s0.BP,fr)=DataLoc(n,fr) by SCMPDS_5:40
    .=intpos(n+fr) by SCMP_GCD:5;
then A5: DataLoc(s0.BP,fr) <> BP by A1,A2,SCMP_GCD:4;
A6: s2.BP=Exec(i1, s1).BP by SCMPDS_5:47
    .=s1.BP by A3,SCMPDS_2:57
    .=s0.BP by A5,SCMPDS_2:58
    .=n by SCMPDS_5:40;
A7: s2.PP=Exec(i1, s1).PP by SCMPDS_5:47
    .=pD by SCMPDS_2:57;
A8: PD <> PP by A1,SCMP_GCD:4;
A9: n+fr < pD by A1,AXIOMS:22;
A10: DataLoc(s0.BP,fr) <> PD by A1,A4,SCMP_GCD:4;
A11: s2.PD=Exec(i1, s1).PD by SCMPDS_5:47
    .=s1.PD by A8,SCMPDS_2:57
    .=s0.PD by A10,SCMPDS_2:58
    .=s.PD by SCMPDS_5:40;
A12: intpos(n+fr) <> PP by A1,SCMP_GCD:4;
A13: s2.DataLoc(s2.BP,fr)=s2.intpos(n+fr) by A6,SCMP_GCD:5
    .=Exec(i1, s1).intpos(n+fr) by SCMPDS_5:47
    .=s1.intpos(n+fr) by A12,SCMPDS_2:57
    .=0 by A4,SCMPDS_2:58;
A14: n+cv < n+fr by A1,REAL_1:53;
then A15: intpos(n+cv) <> PP by A1,SCMP_GCD:4;
A16: DataLoc(s0.BP,fr) <> intpos(n+cv) by A4,A14,SCMP_GCD:4;
A17: s2.DataLoc(s2.BP,cv)=s2.intpos(n+cv) by A6,SCMP_GCD:5
    .=Exec(i1, s1).intpos(n+cv) by SCMPDS_5:47
    .=s1.intpos(n+cv) by A15,SCMPDS_2:57
    .=s0.intpos(n+cv) by A16,SCMPDS_2:58
    .=s.intpos(n+cv) by SCMPDS_5:40
    .=len f by A1,SCMP_GCD:5;
A18:  now
       let k be Nat;
       assume A19: k < len f;
         pD >= 0 by NAT_1:18;
       then s.PD >= 0 by A1,AXIOMS:22;
      then reconsider m=s.PD as Nat by INT_1:16;
  A20: pp < m by A1,AXIOMS:22;
  A21: m <= m + k by NAT_1:29;
  then A22: intpos(m+k) <> PP by A20,SCMP_GCD:4;
        n+fr < m by A1,A9,AXIOMS:22;
  then A23: DataLoc(s0.BP,fr) <> intpos(m+k) by A4,A21,SCMP_GCD:4;
   thus s2.DataLoc(s2.PD,k)=s2.intpos(m+k) by A11,SCMP_GCD:5
      .=Exec(i1, s1).intpos(m+k) by SCMPDS_5:47
      .=s1.intpos(m+k) by A22,SCMPDS_2:57
      .=s0.intpos(m+k) by A23,SCMPDS_2:58
      .=s.intpos(m+k) by SCMPDS_5:40
      .=s.DataLoc(s.PD,k) by SCMP_GCD:5
      .=f.(k+1) by A1,A19;
     end;
A24: Hi is_closed_on s & Hi is_halting_on s by SCMPDS_6:34,35;
A25: FD is_closed_on s2 & FD is_halting_on s2 by A1,A6,A7,A11,Th72;
    thus IExec(sum(sp,cv,fr,pp,pD),s).a
     = IExec(Hi ';' FD, s).a by Def4
    .= IExec(FD,s2).a1 by A6,A24,A25,Th49
    .= Sum f by A1,A6,A7,A11,A13,A17,A18,Th73;
end;

Back to top