The Mizar article:

Quick Sort on SCMPDS

by
Jing-Chao Chen

Received June 14, 2000

Copyright (c) 2000 Association of Mizar Users

MML identifier: SCPQSORT
[ MML identifier index ]


environ

 vocabulary AMI_3, SCMPDS_2, AMI_1, SCMPDS_4, SCMFSA6A, SCMFSA8A, SCMFSA_7,
      INT_1, SCMFSA8B, CARD_1, SCMPDS_5, FUNCT_1, UNIALG_2, SCMFSA7B, SCMFSA6B,
      FUNCT_4, SCMPDS_3, RELAT_1, AMI_2, SCMFSA_9, ARYTM_1, RELOC, SCM_1,
      FUNCT_7, BOOLE, FUNCOP_1, CARD_3, SCMPDS_8, FINSEQ_1, RFUNCT_2, RFINSEQ,
      FUNCT_2, SCPISORT, SCMP_GCD, SCPQSORT;
 notation TARSKI, XBOOLE_0, FUNCT_2, NUMBERS, XCMPLX_0, XREAL_0, RELAT_1,
      FUNCT_1, FUNCT_4, RECDEF_1, INT_1, NAT_1, 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, CARD_3, FINSEQ_1, SCMPDS_8, SFMASTR3, RFINSEQ, SCPISORT;
 constructors AMI_5, SCMPDS_4, SCM_1, SCMPDS_5, SCMPDS_6, SCMP_GCD, SCMPDS_8,
      SFMASTR3, RFINSEQ, SCPISORT, RECDEF_1, NAT_1, MEMBERED, RAT_1;
 clusters AMI_1, INT_1, FUNCT_1, RELSET_1, FINSEQ_1, SCMPDS_2, SCMFSA_4,
      SCMPDS_4, SCMPDS_5, SCMPDS_6, SCMPDS_8, RFINSEQ, WSIERP_1, NAT_1,
      FRAENKEL, XREAL_0, NUMBERS, ORDINAL2;
 requirements NUMERALS, REAL, SUBSET, BOOLE, ARITHM;
 theorems AMI_1, AMI_3, NAT_1, REAL_1, TARSKI, FUNCT_4, INT_1, AMI_5, SCMPDS_2,
      FUNCT_7, GRFUNC_1, AXIOMS, SCM_1, SCMFSA6B, SCMPDS_4, SCMPDS_5, REAL_2,
      SCMPDS_6, SCMP_GCD, SCMPDS_7, SCMPDS_8, FINSEQ_1, SFMASTR3, FINSEQ_2,
      RFINSEQ, FUNCT_2, FINSEQ_3, RELAT_1, SCMFSA6A, SCPISORT, XBOOLE_0,
      XBOOLE_1, SQUARE_1, XCMPLX_0, XCMPLX_1;
 schemes NAT_1, SCMPDS_8;

begin :: The Several Properties of "while" Program and Finite Sequence

reserve x for Int_position,
        n,p0 for Nat;

Lm1:
 for s being State of SCMPDS, I,J being shiftable Program-block,n being Nat
 holds I ';' Goto n ';' J is shiftable
proof
  let s be State of SCMPDS, I,J be shiftable Program-block,n be Nat;
     I ';' Goto n ';' J = I ';' Load (goto n) ';' J by SCMPDS_6:def 1;
   hence thesis;
end;

definition
   let I,J be shiftable Program-block,
   a be Int_position,k1 be Integer;
   cluster if>0(a,k1,I,J) -> shiftable;
   correctness
   proof
    set i = (a,k1)<=0_goto (card I + 2),
        G =Goto (card J+1);
    reconsider IJ=I ';' G ';' J as shiftable Program-block by Lm1;
      if>0(a,k1,I,J) = i ';' I ';' G ';' J by SCMPDS_6:def 5
     .=i ';' (I ';' G) ';' J by SCMPDS_4:50
     .=i ';' IJ by SCMPDS_4:50
     .=Load i ';' IJ by SCMPDS_4:def 4;
    hence thesis;
  end;
end;

theorem Th1:     :: see SCMPDS_6:87
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 J being shiftable Program-block,a ,b be Int_position,k1 being Integer
 st s.DataLoc(s.a,k1) > 0 & I is_closed_on s & I is_halting_on s
 holds IExec(if>0(a,k1,I,J),s).b = IExec(I,s).b
proof
    let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
    J be shiftable Program-block,a,b be Int_position,k1 be Integer;
    assume s.DataLoc(s.a,k1)>0 & I is_closed_on s & I is_halting_on s;
then A1:  IExec(if>0(a,k1,I,J),s) =
     IExec(I,s) +* Start-At inspos (card I + card J + 2) by SCMPDS_6:84;
      not b in dom Start-At inspos (card I + card J + 2) by SCMPDS_4:59;
    hence IExec(if>0(a,k1,I,J),s).b = IExec(I,s).b by A1,FUNCT_4:12;
end;

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

Lm2:
 for a be Int_position,i be Integer,I be Program-block holds
   while>0(a,i,I)= ((a,i)<=0_goto (card I +2)) ';' (I ';'
   goto -(card I+1))
proof
   let a be Int_position,i be Integer,I be Program-block;
   set i1=(a,i)<=0_goto (card I +2),
       i2=goto -(card I+1);
   thus while>0(a,i,I) = i1 ';' I ';' i2 by SCMPDS_8:def 3
       .= i1 ';' (I ';' i2) by SCMPDS_4:51;
end;

Lm3:
 for I being Program-block,a being Int_position,i being Integer
 holds Shift(I,1) c= while>0(a,i,I)
proof
  let I be Program-block,a be Int_position,i be Integer;
   set i1=(a,i)<=0_goto (card I+2),
       i2=goto -(card I+1);
A1: card Load i1=1 by SCMPDS_5:6;
      while>0(a,i,I) = i1 ';' I ';' i2 by SCMPDS_8:def 3
     .= i1 ';' I ';' Load i2 by SCMPDS_4:def 5
     .= Load i1 ';' I ';' Load i2 by SCMPDS_4:def 4;
    hence thesis by A1,SCMPDS_7:16;
end;

theorem Th2:
 for s,sm be State of SCMPDS,I be No-StopCode shiftable Program-block,
 a be Int_position,i be Integer, m be Nat st card I>0 & I is_closed_on s &
 I is_halting_on s & s.DataLoc(s.a,i) > 0 &
 m=LifeSpan (s +* Initialized stop I)+2 &
 sm=(Computation(s +* Initialized stop while>0(a,i,I))).m holds
 sm | SCM-Data-Loc =IExec(I,s)|SCM-Data-Loc &
 sm +*Initialized stop while>0(a,i,I)=sm
proof
    let s,sm be State of SCMPDS,I be No-StopCode shiftable Program-block,
    a be Int_position,i be Integer,m be Nat;
     set b=DataLoc(s.a,i);
   set WH =while>0(a,i,I),
       iWH=Initialized stop WH,
       IsI=Initialized stop I;
   set i1=(a,i)<=0_goto (card I+2),
       i2=goto -(card I+1);
   set s2 = s +* IsI,
       s3 = s +* iWH,
       s4 = (Computation s3).1;

    assume A1: card I>0 & I is_closed_on s & I is_halting_on s & s.b > 0 &
       m=LifeSpan s2+2 & sm=(Computation(s +* iWH)).m;

A2:   IsI c= s2 by FUNCT_4:26;
A3:   s2 is halting by A1,SCMPDS_6:def 3;
      then s2 +* IsI is halting by A2,AMI_5:10;
then A4:   I is_halting_on s2 by SCMPDS_6:def 3;
A5:   I is_closed_on s2 by A1,SCMPDS_6:38;
A6:   IC s3 =inspos 0 by SCMPDS_6:21;
        WH = i1 ';' (I ';' i2) by Lm2;
then A7:   CurInstr s3 = i1 by SCMPDS_6:22;
A8:   (Computation s3).(0 + 1) = Following (Computation s3).0 by AMI_1:def 19
      .= Following s3 by AMI_1:def 19
      .= Exec(i1,s3) by A7,AMI_1:def 18;
      A9: s3.DataLoc(s3.a,i)= s3.b by SCMPDS_5:19
      .= s.b by SCMPDS_5:19;
A10:   IC s4 = s4.IC SCMPDS by AMI_1:def 15
      .= Next IC s3 by A1,A8,A9,SCMPDS_2:68
      .= inspos(0+1) by A6,SCMPDS_4:70;
        s2,s3 equal_outside A by SCMPDS_4:36;
then A11:   s2 | D = s3 | D by SCMPDS_4:24;
        now let x;
          thus s2.x = s3.x by A11,SCMPDS_4:23
          .= s4.x by A8,SCMPDS_2:68;
      end;
then A12:   s2 | D = s4 | D by SCMPDS_4:23;
      set m2=LifeSpan s2,
          s5=(Computation s4).m2,
          l1=inspos (card I + 1);

A13:   dom (s | A) = A by SCMPDS_6:1;
        card I + 1 < card I + 2 by REAL_1:53;
then A14:   l1 in dom WH by SCMPDS_8:18;
A15:   WH c= iWH by SCMPDS_6:17;
        iWH c= s3 by FUNCT_4:26;
then A16:   WH c= s3 by A15,XBOOLE_1:1;
        Shift(I,1) c= WH by Lm3;
      then Shift(I,1) c= s3 by A16,XBOOLE_1:1;
then A17:   Shift(I,1) c= s4 by AMI_3:38;
then (Computation s2).m2 | D = s5 | D by A1,A2,A4,A5,A10,A12,SCMPDS_7:36;
then A18:   s5|D =(Result s2)|D by A3,SCMFSA6B:16
      .= (Result s2 +* s | A)|D by A13,AMI_5:7,SCMPDS_2:10
      .=IExec(I,s)|D by SCMPDS_4:def 8;

        set m3=m2 +1;
        set s6=(Computation s3).m3;
A19:     IC s5=l1 by A1,A2,A4,A5,A10,A12,A17,SCMPDS_7:36;
A20:     s6=s5 by AMI_1:51;
then A21:     CurInstr s6=s5.l1 by A19,AMI_1:def 17
        .=s4.l1 by AMI_1:54
        .=s3.l1 by AMI_1:54
        .=WH.l1 by A14,A16,GRFUNC_1:8
        .=i2 by SCMPDS_8:19;
        set s7=(Computation s3).(m3+ 1);
A22:     s7 = Following s6 by AMI_1:def 19
        .= Exec(i2,s6) by A21,AMI_1:def 18;
A23:    IC s7=s7.IC SCMPDS by AMI_1:def 15
       .=ICplusConst(s6,-(card I+1)) by A22,SCMPDS_2:66
       .=ICplusConst(s6,0-(card I+1)) by XCMPLX_1:150
       .=inspos 0 by A19,A20,SCMPDS_7:1;
A24:   s7=(Computation s3).(m2+(1+1)) by XCMPLX_1:1
      .=sm by A1;
        now let x;
        thus sm.x=s6.x by A22,A24,SCMPDS_2:66
             .=s5.x by AMI_1:51;
      end;
      hence sm | D =IExec(I,s)|D by A18,SCMPDS_4:23;
      thus sm +* iWH=sm by A23,A24,SCMPDS_7:37;
end;

theorem Th3:
 for s be State of SCMPDS,I be Program-block st
 for t be State of SCMPDS st
  t | SCM-Data-Loc =s | SCM-Data-Loc holds I is_halting_on t
  holds I is_closed_on s
proof
    let s be State of SCMPDS,I be Program-block;
    assume A1: for t be State of SCMPDS st t | D =s | D
               holds I is_halting_on t;
    set pI=stop I,
        II=Initialized pI,
        sI=s +* II;
     defpred X[Nat] means not IC (Computation sI).$1 in dom pI;
    assume not I is_closed_on s;
then A2:  ex k be Nat st X[k] by SCMPDS_6:def 2;
    consider n such that
A3:  X[n] and
A4:  for m be Nat st X[m] holds n <= m from Min(A2);
A5:  not Next IC (Computation sI).n in dom pI by A3,SCMPDS_4:71;
   set s2 = (Computation sI).n,
       Ig = ((IC s2,Next IC s2) --> (goto 1, goto -1)),
       s0 = sI +* Ig,
       s1 = s2 +* Ig,
       t1= sI +* (IC s2,goto 1),
       t2= t1 +* (Next IC s2,goto -1),
       t3= s2 +* (IC s2,goto 1),
       t4= t3 +* (Next IC s2,goto -1),
       IL=the Instruction-Locations of SCMPDS;
   set IAt = pI +* Start-At inspos 0;
         dom stop(I) misses dom Start-At inspos 0 by SCMPDS_4:54;
then A6:  pI c= IAt by FUNCT_4:33;
A7:  II = IAt by SCMPDS_4:def 2;
       (IAt) | IL = pI by SCMPDS_4:58;
then A8: dom stop (I) = dom(IAt) /\ IL by RELAT_1:90;
then A9: not IC s2 in dom IAt by A3,XBOOLE_0:def 3;
A10: not Next IC s2 in dom IAt by A5,A8,XBOOLE_0:def 3;
A11:  II c= sI by FUNCT_4:26;
     then IAt c= t1 by A7,A9,SCMFSA6A:1;
     then IAt c= t2 by A10,SCMFSA6A:1;
then A12: IAt c= s0 by SCMPDS_4:69;
A13: sI,t1 equal_outside IL by SCMFSA6A:3;
       t1,t2 equal_outside IL by SCMFSA6A:3;
     then sI,t2 equal_outside IL by A13,FUNCT_7:29;
     then A14: sI,s0 equal_outside IL by SCMPDS_4:69;
then A15: s0,sI equal_outside IL by FUNCT_7:28;
A16:  for a be Int_position holds s.a = sI.a by SCMPDS_5:19;
       s0 | D = sI | D by A14,SCMPDS_4:24
     .= s | D by A16,SCMPDS_4:23;
     then I is_halting_on s0 by A1;
then A17:  s0 +* II is halting by SCMPDS_6:def 3;
     A18: s0 +* II=s0 by A7,A12,AMI_5:10;
A19: stop I c= s0 by A6,A12,XBOOLE_1:1;
A20: stop I c= sI by A6,A7,A11,XBOOLE_1:1;
       for m be Nat st m < n holds IC((Computation sI).m) in dom pI by A4;
then A21: (Computation s0).n,s2 equal_outside IL by A15,A19,A20,SCMPDS_4:67;
A22: s2,t3 equal_outside IL by SCMFSA6A:3;
       t3,t4 equal_outside IL by SCMFSA6A:3;
     then s2,t4 equal_outside IL by A22,FUNCT_7:29;
     then s2,s1 equal_outside IL by SCMPDS_4:69;
then A23: (Computation s0).n, s1 equal_outside IL by A21,FUNCT_7:29;
        sI | IL = s2 | IL by SCMFSA6B:17;
      then t1 | IL = t3 | IL by SCMFSA6A:5;
      then t2 | IL = t4 | IL by SCMFSA6A:5;
      then s0 | IL = t4 | IL by SCMPDS_4:69;
then s0 | IL = s1 | IL by SCMPDS_4:69;
     then (Computation s0).n | IL = s1 | IL by SCMFSA6B:17;
then A24: (Computation s0).n = s1 by A23,SCMFSA6A:2;
       s1 is not halting by SCMPDS_4:66;
     hence contradiction by A17,A18,A24,SCM_1:27;
end;

theorem Th4:
   for i1,i2,i3,i4 be Instruction of SCMPDS holds
   card (i1 ';' i2 ';' i3 ';' i4)=4
proof
   let x1,x2,x3,x4 be Instruction of SCMPDS;
   thus card (x1 ';' x2 ';' x3 ';' x4)=card (x1 ';' x2 ';' x3)+1 by SCMP_GCD:8
  .=card (x1 ';' x2 )+1+1 by SCMP_GCD:8
  .=2+1+1 by SCMP_GCD:9
  .=4;
end;

theorem Th5:
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a,x,y be Int_position, i,c be Integer st card I > 0 &
  s.x >= c+s.DataLoc(s.a,i) &
   (for t be State of SCMPDS st t.x >= c+t.DataLoc(s.a,i) & t.y=s.y &
     t.a=s.a & t.DataLoc(s.a,i) > 0 holds
     IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
     IExec(I,t).DataLoc(s.a,i) < t.DataLoc(s.a,i) &
     IExec(I,t).x >= c+IExec(I,t).DataLoc(s.a,i) & IExec(I,t).y=t.y)
   holds
     while>0(a,i,I) is_closed_on s & while>0(a,i,I) is_halting_on s &
   (s.DataLoc(s.a,i) > 0 implies
       IExec(while>0(a,i,I),s) =IExec(while>0(a,i,I),IExec(I,s)))
proof
   let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
   a,x1,y1 be Int_position, i,c be Integer;
   set b=DataLoc(s.a,i);
   assume A1: card I > 0;
   assume A2: s.x1 >= c+s.b;
   assume A3: for t be State of SCMPDS st t.x1 >= c+t.b & t.y1=s.y1 &
    t.a=s.a & t.b > 0 holds
    IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
    IExec(I,t).b < t.b & IExec(I,t).x1 >= c+IExec(I,t).b &
    IExec(I,t).y1=t.y1;
A4: for x st x in {x1} holds
       s.x >= c+s.b by A2,TARSKI:def 1;
   now
       let t be State of SCMPDS;
       assume A5: (for x st x in {x1} holds t.x >= c+t.b) &
         (for x st x in {y1} holds t.x=s.x) & t.a=s.a & t.b > 0;
             x1 in {x1} by TARSKI:def 1;
       then A6: t.x1 >= c+t.b by A5;
             y1 in {y1} by TARSKI:def 1;
       then A7: t.y1=s.y1 by A5;
       hence IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
              IExec(I,t).b < t.b by A3,A5,A6;
       hereby
           let x;
           assume A8: x in {x1};
              IExec(I,t).x1 >= c+IExec(I,t).b by A3,A5,A6,A7;
           hence IExec(I,t).x >= c+IExec(I,t).b by A8,TARSKI:def 1;
       end;
       hereby
           let x;
           assume A9: x in {y1};
            hence IExec(I,t).x=IExec(I,t).y1 by TARSKI:def 1
                 .=t.y1 by A3,A5,A6,A7
                 .=t.x by A9,TARSKI:def 1;
       end;
    end;
    hence thesis by A1,A4,SCMPDS_8:27;
end;

theorem Th6:
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a,x,y be Int_position, i,c be Integer st card I > 0 & s.x >= c &
   (for t be State of SCMPDS st t.x >= c & t.y=s.y &
     t.a=s.a & t.DataLoc(s.a,i) > 0 holds
     IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
     IExec(I,t).DataLoc(s.a,i) < t.DataLoc(s.a,i) &
     IExec(I,t).x >= c & IExec(I,t).y=t.y)
   holds
   while>0(a,i,I) is_closed_on s & while>0(a,i,I) is_halting_on s &
   ( s.DataLoc(s.a,i) > 0 implies
   IExec(while>0(a,i,I),s) =IExec(while>0(a,i,I),IExec(I,s)))
proof
  let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
  a,x,y be Int_position, i,c be Integer;
   set b=DataLoc(s.a,i);

   assume A1: card I > 0;
   assume A2: s.x >= c;
   assume A3: for t be State of SCMPDS st t.x >= c & t.y=s.y &
     t.a=s.a & t.b > 0
 holds IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
     IExec(I,t).b < t.b & IExec(I,t).x >= c & IExec(I,t).y=t.y;

     defpred P[set] means ex t be State of SCMPDS st
     t=$1 & t.x >= c & t.y=s.y;

    consider f be Function of product the Object-Kind of SCMPDS,NAT such that
A4:  for s be State of SCMPDS holds
       (s.b <= 0 implies f.s =0) & (s.b > 0 implies f.s=s.b)
     by SCMPDS_8:5;
     deffunc F(State of SCMPDS) = f.$1;
A5:  for t be State of SCMPDS holds F(Dstate t)=0 iff t.b <= 0
     proof
       let t be State of SCMPDS;
       thus F(Dstate t)=0 implies t.b <= 0
       proof
         assume A6: F(Dstate t)=0;
         assume t.b > 0;
    then (Dstate t).b > 0 by SCMPDS_8:4;
         hence contradiction by A4,A6;
       end;
       assume t.b <= 0;
        then (Dstate t).b <= 0 by SCMPDS_8:4;
        hence thesis by A4;
     end;
then A7: for t be State of SCMPDS st
    P[Dstate t] & F(Dstate t)=0 holds t.b <= 0;
A8: P[Dstate s]
    proof
       take t=Dstate s;
       thus t=Dstate s;
      thus t.x >= c by A2,SCMPDS_8:4;
      thus t.y=s.y by SCMPDS_8:4;
    end;
A9: now
         let t be State of SCMPDS;
         assume A10:P[Dstate t] & t.a=s.a & t.b > 0;
         then consider v be State of SCMPDS such that
     A11: v=Dstate t & v.x >= c & v.y=s.y;
     A12: t.x >= c by A11,SCMPDS_8:4;
     A13: t.y=s.y by A11,SCMPDS_8:4;
     hence IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t
        by A3,A10,A12;
        set It=IExec(I,t),
            t2=Dstate It,
            t1=Dstate t;
        thus F(t2) < F(t1)
        proof
          assume A14: F(t2) >= F(t1);
            t1.b > 0 by A10,SCMPDS_8:4;
      then A15: F(t1)=t1.b by A4
           .=t.b by SCMPDS_8:4;
           then It.b > 0 by A5,A10,A14;
           then t2.b > 0 by SCMPDS_8:4;
           then F(t2)=t2.b by A4
           .=It.b by SCMPDS_8:4;
           hence contradiction by A3,A10,A12,A13,A14,A15;
       end;
        thus P[Dstate It]
        proof
            take v=Dstate It;
            thus v=Dstate It;
              It.x >= c by A3,A10,A12,A13;
          hence v.x >= c by SCMPDS_8:4;
                It.y=t.y by A3,A10,A12,A13;
          hence v.y=s.y by A13,SCMPDS_8:4;
        end;
    end;
      (F(s)=F(s) or P[s]) & while>0(a,i,I) is_closed_on s &
    while>0(a,i,I) is_halting_on s from WhileGHalt(A1,A7,A8,A9);
    hence while>0(a,i,I) is_closed_on s & while>0(a,i,I) is_halting_on s;
   assume A16: s.b > 0;
      (F(s)=F(s) or P[s]) &
    IExec(while>0(a,i,I),s) = IExec(while>0(a,i,I),IExec(I,s))
    from WhileGExec(A1,A16,A7,A8,A9);
    hence thesis;
end;

theorem Th7:
 for s being State of SCMPDS,I being No-StopCode shiftable Program-block,
 a,x1,x2,x3,x4 be Int_position, i,c,md be Integer st
  card I > 0 & s.x4=s.x3-c+s.x1 & md <= s.x3-c &
  (for t be State of SCMPDS st t.x4=t.x3-c+t.x1 & md <= t.x3-c &
   t.x2=s.x2 & t.a=s.a & t.DataLoc(s.a,i) > 0 holds
     IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
     IExec(I,t).DataLoc(s.a,i) < t.DataLoc(s.a,i) &
     IExec(I,t).x4=IExec(I,t).x3-c+IExec(I,t).x1 &
     md <= IExec(I,t).x3-c & IExec(I,t).x2=t.x2)
   holds
    while>0(a,i,I) is_closed_on s & while>0(a,i,I) is_halting_on s &
    ( s.DataLoc(s.a,i) > 0 implies
     IExec(while>0(a,i,I),s) =IExec(while>0(a,i,I),IExec(I,s)) )
proof
    let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
     a,x1,x2,x3,x4 be Int_position, i,c,md be Integer;
   set b=DataLoc(s.a,i);

   assume A1: card I > 0;
   assume A2: s.x4=s.x3-c+s.x1 & md <= s.x3-c;
   assume A3: for t be State of SCMPDS st t.x4=t.x3-c+t.x1 & md <= t.x3-c &
           t.x2=s.x2 & t.a=s.a & t.DataLoc(s.a,i) > 0 holds
           IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t &
           IExec(I,t).DataLoc(s.a,i) < t.DataLoc(s.a,i) &
           IExec(I,t).x4=IExec(I,t).x3-c+IExec(I,t).x1 &
           md <= IExec(I,t).x3-c & IExec(I,t).x2=t.x2;

     defpred P[set] means ex t be State of SCMPDS st
     t=$1 & t.x4=t.x3-c+t.x1 & md <= t.x3-c & t.x2=s.x2;

     consider f be Function of product the Object-Kind of SCMPDS,NAT such that
A4:  for s be State of SCMPDS holds
        (s.b <= 0 implies f.s =0) & (s.b > 0 implies f.s=s.b)
     by SCMPDS_8:5;
     deffunc F(State of SCMPDS) = f.$1;
A5:  for t be State of SCMPDS holds F(Dstate t)=0 iff t.b <= 0
     proof
       let t be State of SCMPDS;
       thus F(Dstate t)=0 implies t.b <= 0
       proof
         assume A6: F(Dstate t)=0;
         assume t.b > 0;
        then (Dstate t).b > 0 by SCMPDS_8:4;
         hence contradiction by A4,A6;
       end;
       assume t.b <= 0;
        then (Dstate t).b <= 0 by SCMPDS_8:4;
        hence thesis by A4;
     end;
then A7:  for t be State of SCMPDS st P[Dstate t] & F(Dstate t)=0 holds t.b <=
0;
A8:  P[Dstate s]
     proof
       take t=Dstate s;
       thus t=Dstate s;
           t.x4=s.x3-c+s.x1 by A2,SCMPDS_8:4;
         then t.x4=t.x3-c+s.x1 by SCMPDS_8:4;
      hence t.x4=t.x3-c+t.x1 by SCMPDS_8:4;
      thus md <= t.x3-c by A2,SCMPDS_8:4;
      thus t.x2=s.x2 by SCMPDS_8:4;
    end;
A9: now
         let t be State of SCMPDS;
         assume A10:P[Dstate t] & t.a=s.a & t.b > 0;
         then consider v be State of SCMPDS such that
     A11: v=Dstate t & v.x4=v.x3-c+v.x1 & md <= v.x3-c &
         v.x2=s.x2;
           t.x4=v.x3-c+v.x1 by A11,SCMPDS_8:4;
         then t.x4=t.x3-c+v.x1 by A11,SCMPDS_8:4;
     then A12: t.x4=t.x3-c+t.x1 by A11,SCMPDS_8:4;
     A13: md <= t.x3-c by A11,SCMPDS_8:4;
     A14: t.x2=s.x2 by A11,SCMPDS_8:4;
     hence IExec(I,t).a=t.a & I is_closed_on t & I is_halting_on t
        by A3,A10,A12,A13;
        set It=IExec(I,t),
            t2=Dstate It,
            t1=Dstate t;
        thus F(t2) < F(t1)
        proof
          assume A15: F(t2) >= F(t1);
            t1.b > 0 by A10,SCMPDS_8:4;
      then A16: F(t1)=t1.b by A4
           .=t.b by SCMPDS_8:4;
           then It.b > 0 by A5,A10,A15;
           then t2.b > 0 by SCMPDS_8:4;
           then F(t2)=t2.b by A4
           .=It.b by SCMPDS_8:4;
           hence contradiction by A3,A10,A12,A13,A14,A15,A16;
       end;
        thus P[Dstate It]
        proof
            take v=Dstate It;
            thus v=Dstate It;
              It.x4=It.x3-c+It.x1 by A3,A10,A12,A13,A14;
            then v.x4=It.x3-c+It.x1 by SCMPDS_8:4;
            then v.x4=v.x3-c+It.x1 by SCMPDS_8:4;
         hence v.x4=v.x3-c+v.x1 by SCMPDS_8:4;
              md <= It.x3-c by A3,A10,A12,A13,A14;
         hence md <= v.x3-c by SCMPDS_8:4;
             It.x2=t.x2 by A3,A10,A12,A13,A14;
         hence v.x2=s.x2 by A14,SCMPDS_8:4;
        end;
    end;
      (F(s)=F(s) or P[s]) & while>0(a,i,I) is_closed_on s &
    while>0(a,i,I) is_halting_on s from WhileGHalt(A1,A7,A8,A9);
    hence while>0(a,i,I) is_closed_on s & while>0(a,i,I) is_halting_on s;

  assume A17: s.b > 0;
      (F(s)=F(s) or P[s]) &
    IExec(while>0(a,i,I),s) = IExec(while>0(a,i,I),IExec(I,s))
    from WhileGExec(A1,A17,A7,A8,A9);
    hence thesis;
end;

theorem Th8:
  for f being FinSequence of INT,m,k1,k,n be Nat st m<=k & k <= n &
  k1=k-1 & f is_non_decreasing_on m,k1 & f is_non_decreasing_on k+1,n &
  (for i be Nat st m <= i & i < k holds f.i <= f.k) &
  (for i be Nat st k < i & i <= n holds f.k <= f.i)
  holds
   f is_non_decreasing_on m,n
proof
    let f be FinSequence of INT,m,k1,k,n be Nat;
    assume A1: m<=k & k <= n & k1=k-1;
    assume A2: f is_non_decreasing_on m,k1;
    assume A3: f is_non_decreasing_on k+1,n;
    assume A4: for i be Nat st m <= i & i < k holds f.i <= f.k;
    assume A5: for i be Nat st k < i & i <= n holds f.k <= f.i;
      now
       let i,j be Nat;
       assume A6: m <= i & i <= j & j <= n;
       per cases by REAL_1:def 5;
       suppose j < k;
         then j+1 <= k by INT_1:20;
         then j <= k1 by A1,REAL_1:84;
         hence f.i <= f.j by A2,A6,SFMASTR3:def 4;
       suppose A7: j = k;
         hereby
           per cases;
           suppose i=j;
              hence f.i <= f.j;
           suppose i<>j;
              then i<j by A6,REAL_1:def 5;
            hence f.i <= f.j by A4,A6,A7;
         end;
       suppose A8: j > k;
        hereby
           per cases by REAL_1:def 5;
           suppose A9: i < k;
           A10: f.j >= f.k by A5,A6,A8;
                 f.k >= f.i by A4,A6,A9;
            hence f.i <= f.j by A10,AXIOMS:22;
           suppose A11: i = k;
            hereby
              per cases;
              suppose i=j;
              hence f.i <= f.j;
              suppose i<>j;
                then i<j by A6,REAL_1:def 5;
                hence f.i <= f.j by A5,A6,A11;
           end;
           suppose i > k;
             then i >= k+1 by INT_1:20;
             hence f.i <= f.j by A3,A6,SFMASTR3:def 4;
       end;
   end;
   hence thesis by SFMASTR3:def 4;
end;

theorem Th9:  :: RFINSEQ:17
for f,g be FinSequence,x be set st x in dom g & f,g are_fiberwise_equipotent
 holds ex y be set st y in dom g & f.x=g.y
proof
   let f,g be FinSequence,x be set;
   assume A1:x in dom g & f,g are_fiberwise_equipotent;
   then consider P be Permutation of dom g such that
A2: f = g*P by RFINSEQ:17;
    take y=P.x;
    thus y in dom g by A1,FUNCT_2:7;
    thus f.x=g.y by A1,A2,FUNCT_2:70;
end;

theorem Th10:   ::RFINSEQ:14
 for f,g,h be FinSequence holds
   f,g are_fiberwise_equipotent iff h^f, h^g are_fiberwise_equipotent
proof
  let f,g,h be FinSequence;
  thus f,g are_fiberwise_equipotent implies h^f, h^g are_fiberwise_equipotent
  proof assume
    A1: f,g are_fiberwise_equipotent;
       now let y be set;
        card (f"{y}) = card (g"{y}) by A1,RFINSEQ:def 1;
      hence card ((h^f)"{y}) = card(g"{y}) + card(h"{y}) by FINSEQ_3:63
      .= card((h^g)"{y}) by FINSEQ_3:63;
     end;
    hence thesis by RFINSEQ:def 1;
   end; assume
  A2: h^f,h^g are_fiberwise_equipotent;
     now let x be set;
      card((h^f)"{x}) = card(f"{x})+card(h"{x}) &
    card((h^g)"{x}) = card(g"{x})+card(h"{x}) &
    card((h^f)"{x}) = card((h^g)"{x}) by A2,FINSEQ_3:63,RFINSEQ:def 1;
    hence card(f"{x}) = card(g"{x}) by XCMPLX_1:2;
   end;
  hence thesis by RFINSEQ:def 1;
end;

theorem Th11:
 for f,g be FinSequence,m,n,j be Nat st f,g are_fiberwise_equipotent &
 m<=n & n <= len f & (for i be Nat st 1<=i & i<=m holds f.i=g.i) &
 (for i be Nat st n<i & i<=len f holds f.i=g.i) & (m<j & j<=n)
holds ex k be Nat st m<k & k<=n & f.j=g.k
proof
  let f,g be FinSequence,m,n,j be Nat;
  assume A1: f,g are_fiberwise_equipotent;
  assume A2: m<=n & n <= len f;
  assume A3: for i be Nat st 1<=i & i<=m holds f.i=g.i;
  assume A4: for i be Nat st n<i & i<=len f holds f.i=g.i;
  assume A5: m<j & j<=n;
A6:  len f=len g by A1,RFINSEQ:16;
       n-m >= 0 by A2,SQUARE_1:12;
     then reconsider m2=n-m as Nat by INT_1:16;
       len f-n >= 0 by A2,SQUARE_1:12;
     then reconsider m3=len f-n as Nat by INT_1:16;
A7:  len f=len f+n-n by XCMPLX_1:26
     .=n+m3 by XCMPLX_1:29;
A8:  len g=len f+n-n by A6,XCMPLX_1:26
     .=n+m3 by XCMPLX_1:29;
     consider s1,r1 be FinSequence such that
A9:  len s1 = n & len r1 = m3 & f = s1^r1 by A7,FINSEQ_2:25;
     consider s2,r2 be FinSequence such that
A10:  len s2 = n & len r2 = m3 & g = s2^r2 by A8,FINSEQ_2:25;
   len s1=n+m-m by A9,XCMPLX_1:26
     .=m+m2 by XCMPLX_1:29;
     then consider p1,q1 be FinSequence such that
A11:  len p1 = m & len q1 = m2 & s1 = p1^q1 by FINSEQ_2:25;
   len s2=n+m-m by A10,XCMPLX_1:26
     .=m+m2 by XCMPLX_1:29;
     then consider p2,q2 be FinSequence such that
A12:  len p2 = m & len q2 = m2 & s2 = p2^q2 by FINSEQ_2:25;
A13:  f=p1^(q1^r1) by A9,A11,FINSEQ_1:45;
A14:  g=p2^(q2^r2) by A10,A12,FINSEQ_1:45;
A15:  Seg m = dom p1 by A11,FINSEQ_1:def 3;
A16:  Seg m = dom p2 by A12,FINSEQ_1:def 3;
       now
        let i be Nat;
        assume A17: i in Seg m3;
        then A18: i in dom r1 by A9,FINSEQ_1:def 3;
        A19: i in dom r2 by A10,A17,FINSEQ_1:def 3;
        A20: 1 <= i & i <= m3 by A17,FINSEQ_1:3;
        then A21: n+1 <= n+i by AXIOMS:24;
              n < n+1 by REAL_1:69;
            then A22: n< i+n by A21,AXIOMS:22;
        A23: len s1+i <= len f by A7,A9,A20,AXIOMS:24;
        thus r1.i=f.(len s1+i) by A9,A18,FINSEQ_1:def 7
          .=g.(len s2+i) by A4,A9,A10,A22,A23
          .=r2.i by A10,A19,FINSEQ_1:def 7;
     end;
     then r1=r2 by A9,A10,FINSEQ_2:10;
then A24:  s1,s2 are_fiberwise_equipotent by A1,A9,A10,RFINSEQ:14;
       now
        let i be Nat;
        assume A25: i in Seg m;
        then A26: 1<= i & i <= m by FINSEQ_1:3;
        thus p1.i=f.i by A13,A15,A25,FINSEQ_1:def 7
          .=g.i by A3,A26
          .=p2.i by A14,A16,A25,FINSEQ_1:def 7;
     end;
     then p1=p2 by A11,A12,FINSEQ_2:10;
then A27:  q1,q2 are_fiberwise_equipotent by A11,A12,A24,Th10;
A28:  j-len p1 > 0 by A5,A11,SQUARE_1:11;
     then reconsider x=j-len p1 as Nat by INT_1:16;
A29:  Seg m2 = dom q1 by A11,FINSEQ_1:def 3;
A30:  Seg m2 = dom q2 by A12,FINSEQ_1:def 3;
A31:  1+ 0<= x by A28,INT_1:20;
     A32: x <= n-len p1 by A5,REAL_1:49;
then x in dom q2 by A11,A30,A31,FINSEQ_1:3;
     then consider y be set such that
A33:  y in dom q2 & q1.x=q2.y by A27,Th9;
     reconsider y as Nat by A33;
A34:  1<=y & y<=m2 by A30,A33,FINSEQ_1:3;
     take k=len p2+y;
       A35: k>=len p2+1 by A34,AXIOMS:24;
         m+1 > m by REAL_1:69;
     hence m<k by A12,A35,AXIOMS:22;
         k <= m2+len p2 by A34,AXIOMS:24;
       then k <= n+-m+m by A12,XCMPLX_0:def 8;
     hence k<=n by XCMPLX_1:139;
A36:  j=len p1+x by XCMPLX_1:27;
A37:  x in dom q1 by A11,A29,A31,A32,FINSEQ_1:3;
then A38:  len p1 + x in dom s1 by A11,FINSEQ_1:41;
A39:  len p2 + y in dom s2 by A12,A33,FINSEQ_1:41;
     thus f.j=s1.(len p1+x) by A9,A36,A38,FINSEQ_1:def 7
     .=q2.y by A11,A33,A37,FINSEQ_1:def 7
     .=s2.(len p2+y) by A12,A33,FINSEQ_1:def 7
     .=g.k by A10,A39,FINSEQ_1:def 7;
end;

Lm4:
  for s be State of SCMPDS,I be No-StopCode shiftable Program-block,
  a be Int_position, i,c be Integer,f,g be FinSequence of INT,m,n,m1
 be Nat st card I> 0 & s.a=c & len f=n & len g=n & f is_FinSequence_on s,m &
 g is_FinSequence_on IExec(while>0(a,i,I),s),m & 1=s.DataLoc(c,i) &
   m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1) &
 (for t be State of SCMPDS,f1,f2 be FinSequence of INT,k1,k2,y1,yn be Nat
  st t.a=c & 2*k1+1=t.DataLoc(c,i) & k2=m+n+2*k1+1 & m+y1=t.intpos k2 &
   m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
holds I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a &
    (for j be Nat st (1<=j & j<2*k1+1) holds
           IExec(I,t).intpos(m+n+j)=t.intpos(m+n+j)) &
   (y1>=yn implies IExec(I,t).DataLoc(c,i)=2*k1-1 &
          (for j be Nat st (1<=j & j <= n) holds
          IExec(I,t).intpos (m+j) = t.intpos (m+j))) &
   (y1<yn implies IExec(I,t).DataLoc(c,i)=2*k1+3 &
          (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
           IExec(I,t).intpos(m+j) = t.intpos (m+j)) &
     (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=IExec(I,t).intpos k2 &
        m+ym-1=IExec(I,t).intpos (k2+1) & m+ym+1=IExec(I,t).intpos (k2+2) &
        m+yn=IExec(I,t).intpos (k2+3) &
        (for j be Nat st y1 <= j & j < ym holds
           IExec(I,t).intpos (m+j) <= IExec(I,t).intpos (m+ym)) &
        (for j be Nat st ym < j & j <= yn holds
           IExec(I,t).intpos (m+j) >= IExec(I,t).intpos (m+ym)))) &
    (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,t),m &
    len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent))
    holds
     while>0(a,i,I) is_halting_on s &
     f,g are_fiberwise_equipotent & g is_non_decreasing_on 1,n
proof
   let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
   a be Int_position, i,c be Integer,f,g be FinSequence of INT,
   m,n,m1 be Nat;
   set b=DataLoc(c,i);
   assume A1: card I>0 & s.a=c & len f=n & len g=n;
   assume A2: f is_FinSequence_on s,m;
   assume A3: g is_FinSequence_on IExec(while>0(a,i,I),s),m;
   assume A4: 1=s.b;
   assume A5: m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1);
   assume A6: for t be State of SCMPDS,f1,f2 be FinSequence of INT,
     k1,k2,y1,yn be Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
     m+y1=t.intpos k2 & m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
     holds I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a &
          (for j be Nat st (1<=j & j<2*k1+1) holds
           IExec(I,t).intpos(m+n+j)=t.intpos(m+n+j)) &
         (y1>=yn implies IExec(I,t).b=2*k1-1 &
            (for j be Nat st (1<=j & j <= n) holds
            IExec(I,t).intpos (m+j) = t.intpos (m+j))) &
         (y1<yn implies IExec(I,t).b=2*k1+3 &
            (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
            IExec(I,t).intpos (m+j) = t.intpos (m+j)) &
          (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=IExec(I,t).intpos k2 &
         m+ym-1=IExec(I,t).intpos (k2+1) & m+ym+1=IExec(I,t).intpos (k2+2) &
         m+yn=IExec(I,t).intpos (k2+3) &
          (for j be Nat st y1 <= j & j < ym holds
             IExec(I,t).intpos(m+j) <= IExec(I,t).intpos(m+ym)) &
          (for j be Nat st ym < j & j <= yn holds
              IExec(I,t).intpos(m+j) >= IExec(I,t).intpos(m+ym)))) &
     (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,t),m &
      len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent);

   set WH =while>0(a,i,I),
       sWH=stop WH,
       iWH=Initialized sWH;

    defpred P[Nat] means
    for t be State of SCMPDS,f1 be FinSequence of INT, k1,k2,y1,yn be
    Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
    (1 <= y1 & yn <= n or y1 >= yn) & m+y1=t.intpos k2 &
    m+yn=t.intpos(k2+1) & yn-y1<=$1 & f1 is_FinSequence_on t,m &
    len f1=n holds ex k be Nat,f2 be FinSequence of INT st
    (Computation(t +*iWH)).k+*iWH=(Computation(t +*iWH)).k &
    f2 is_FinSequence_on (Computation(t +*iWH)).k,m & len f2=n &
    f1,f2 are_fiberwise_equipotent & f2 is_non_decreasing_on y1,yn &
   (for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n) holds
   f2.j= t.intpos(m+j)) &
   (for j be Nat st y1>=yn & 1<=j & j<= n holds f2.j= t.intpos(m+j)) &
      (for j be Nat st (1<=j & j<2*k1+1) holds
      (Computation(t +*iWH)).k.intpos(m+n+j)=t.intpos(m+n+j)) &
      (Computation(t +*iWH)).k.b=t.b-2 & (Computation(t +*iWH)).k.a=c;

A7:  P[0]
     proof
         let t be State of SCMPDS,f1 be FinSequence of INT,k1,k2,y1,yn be
         Nat;
         assume A8: t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
                   (1 <= y1 & yn <= n or y1 >= yn) & m+y1=t.intpos k2 &
                   m+yn=t.intpos(k2+1) & yn-y1<=0 &
                   f1 is_FinSequence_on t,m & len f1=n;
        then A9: t.b > 0 by NAT_1:19;
A10:     I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a by A6,A8;
A11:     y1>=yn implies IExec(I,t).b=2*k1-1 & (for j be Nat st (1<=j & j <= n)
        holds IExec(I,t).intpos (m+j) = t.intpos (m+j)) by A6,A8;
A12:     y1>=yn by A8,SQUARE_1:11;
A13:     IExec(I,t).b=2*k1+1-1-1 by A8,A11,SQUARE_1:11,XCMPLX_1:26
        .=t.b-(1+1) by A8,XCMPLX_1:36;
        take k=LifeSpan (t +* Initialized stop I)+2;
        set tk=(Computation(t +* iWH)).k;
A14:     tk | D =IExec(I,t) | D by A1,A8,A9,A10,Th2;
        consider f2 be FinSequence of INT such that
A15:     len f2=n & for i be Nat st 1<=i & i <= len f2 holds
        f2.i=IExec(I,t).intpos(m+i) by SCPISORT:2;
A16:     f2 is_FinSequence_on IExec(I,t),m by A15,SCPISORT:def 1;
        take f2;
        thus tk+*iWH =tk by A1,A8,A9,A10,Th2;
          now
         let i be Nat;
         assume 1<=i & i <= len f2;
         hence f2.i=IExec(I,t).intpos(m+i) by A15
           .=tk.intpos(m+i) by A14,SCMPDS_4:23;
        end;
        hence f2 is_FinSequence_on tk,m by SCPISORT:def 1;
        thus len f2=n by A15;
        thus f1,f2 are_fiberwise_equipotent by A6,A8,A15,A16;
        thus f2 is_non_decreasing_on y1,yn by A12,SCPISORT:1;
        thus for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n) holds
         f2.j= t.intpos(m+j) by A8,SQUARE_1:11;
        hereby
           let j be Nat;
           assume A17: y1>=yn & 1<=j & j<= n;
           hence f2.j=IExec(I,t).intpos (m+j) by A15
           .=t.intpos(m+j) by A6,A8,A17;
        end;
        hereby
         let j be Nat;
         assume A18: 1<=j & j<2*k1+1;
         thus tk.intpos(m+n+j)=IExec(I,t).intpos(m+n+j) by A14,SCMPDS_4:23
           .=t.intpos(m+n+j) by A6,A8,A18;
       end;
       thus tk.b=t.b-2 by A13,A14,SCMPDS_4:23;
       thus tk.a=c by A8,A10,A14,SCMPDS_4:23;
    end;
A19: now let k be Nat;
         assume A20:P[k];
           now let t be State of SCMPDS,f1 be FinSequence of INT,
             k1,k2,y1,ym,yn be Nat;
             assume A21: t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
               (1 <= y1 & yn <= n or y1 >= yn) & m+y1=t.intpos k2 &
               m+yn=t.intpos(k2+1) & yn-y1<=k+1 &
               f1 is_FinSequence_on t,m & len f1=n;
            per cases;
            suppose yn-y1<=0;
            hence ex kk be Nat,f2 be FinSequence of INT st
             (Computation(t +*iWH)).kk+*iWH=(Computation(t +*iWH)).kk &
             f2 is_FinSequence_on (Computation(t +*iWH)).kk,m & len f2=n &
             f1,f2 are_fiberwise_equipotent & f2 is_non_decreasing_on y1,yn &
             (for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n) holds
             f2.j= t.intpos(m+j)) &
             (for j be Nat st y1>=yn & 1<=j & j<= n holds
             f2.j= t.intpos(m+j)) &
             (for j be Nat st (1<=j & j<2*k1+1) holds
             (Computation(t +*iWH)).kk.intpos(m+n+j)=t.intpos(m+n+j)) &
             (Computation(t +*iWH)).kk.b=t.b-2 &
             (Computation(t +*iWH)).kk.a=c by A7,A21;

             suppose A22: yn-y1>0;
        then A23:    yn>y1 by REAL_2:106;
               A24: t.b > 0 by A21,NAT_1:19;
        A25:    I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a
               by A6,A21;
               set It=IExec(I,t);
        A26:    y1<yn implies It.b=2*k1+3 &
               (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
                  IExec(I,t).intpos (m+j) = t.intpos (m+j)) &
               (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=It.intpos k2 &
                m+ym-1=It.intpos (k2+1) & m+ym+1=It.intpos (k2+2) &
                m+yn=It.intpos (k2+3) &
               (for j be Nat st y1 <= j & j < ym holds
                IExec(I,t).intpos(m+j) <= IExec(I,t).intpos(m+ym)) &
               (for j be Nat st ym < j & j <= yn holds
               IExec(I,t).intpos(m+j) >= IExec(I,t).intpos(m+ym))) by A6,A21;
               set m1=LifeSpan (t +* Initialized stop I)+2;
               set t1=(Computation(t +* iWH)).m1;
        A27:    t1 | D =IExec(I,t) | D & t1+*iWH =t1 by A1,A21,A24,A25,Th2;
               consider ym be Nat such that
        A28:    y1 <= ym & ym <= yn & m+y1=It.intpos k2 &
                m+ym-1=It.intpos (k2+1) & m+ym+1=It.intpos (k2+2) &
                m+yn=It.intpos (k2+3) &
               (for j be Nat st y1 <= j & j < ym holds
                IExec(I,t).intpos(m+j) <= IExec(I,t).intpos(m+ym)) &
               (for j be Nat st ym < j & j <= yn holds
               IExec(I,t).intpos(m+j) >= IExec(I,t).intpos(m+ym)) by A22,A26,
REAL_2:106;
               set k3=m+n+2*(k1+1)+1,
                   yd=ym+1;
        A29:    t1.a=c by A21,A25,A27,SCMPDS_4:23;
        A30:    t1.b=2*k1+3 by A22,A26,A27,REAL_2:106,SCMPDS_4:23;
        A31:    t1.b=2*k1+(2*1+1) by A22,A26,A27,REAL_2:106,SCMPDS_4:23
               .=2*k1+2*1+1 by XCMPLX_1:1
               .=2*(k1+1)+1 by XCMPLX_1:8;
        A32:    yd > ym by REAL_1:69;
        then A33:    yd >= y1 by A28,AXIOMS:22;
        then A34:    yd >= 1 by A21,A22,AXIOMS:22,REAL_2:106;
        A35:    k3=m+n+(2*k1+2*1)+1 by XCMPLX_1:8
               .=m+n+2*k1+2*1+1 by XCMPLX_1:1
               .=k2+2 by A21,XCMPLX_1:1;
        then A36:    t1.intpos k3=It.intpos (k2+2) by A27,SCMPDS_4:23
               .=m+yd by A28,XCMPLX_1:1;
                 k3+1=k2+(2+1) by A35,XCMPLX_1:1;
        then A37:    t1.intpos(k3+1)=m+yn by A27,A28,SCMPDS_4:23;
                 ym+(1+k) >= y1+(1+k) by A28,AXIOMS:24;
        then A38:    yd+k >= y1+(1+k) by XCMPLX_1:1;
                 yn <= y1+(k+1) by A21,REAL_1:86;
               then yn <= yd+k by A38,AXIOMS:22;
        then A39:    yn-yd<=k by REAL_1:86;
               consider f2 be FinSequence of INT such that
        A40:    len f2=n & for i be Nat st 1<=i & i <= len f2 holds
               f2.i=t1.intpos(m+i) by SCPISORT:2;
             f2 is_FinSequence_on t1,m by A40,SCPISORT:def 1;
               then consider kl be Nat,f3 be FinSequence of INT such that
        A41:   (Computation(t1 +*iWH)).kl+*iWH=(Computation(t1 +*iWH)).kl &
              f3 is_FinSequence_on (Computation(t1 +*iWH)).kl,m & len f3=n &
              f2,f3 are_fiberwise_equipotent &
              f3 is_non_decreasing_on yd,yn &
              (for j be Nat st yd<yn & (1<=j & j<yd or yn<j & j<= n) holds
              f3.j= t1.intpos(m+j)) &
              (for j be Nat st yd>=yn & 1<=j & j<= n
              holds f3.j=t1.intpos(m+j)) &
              (for j be Nat st (1<=j & j<2*(k1+1)+1) holds
             (Computation(t1 +*iWH)).kl.intpos(m+n+j)=t1.intpos(m+n+j)) &
             (Computation(t1 +*iWH)).kl.b=t1.b-2 &
             (Computation(t1 +*iWH)).kl.a=c by A20,A21,A22,A29,A31,A34,A36,A37,
A39,A40,REAL_2:106;
             set t2=(Computation(t1 +*iWH)).kl;
        A42:    ym >= 1 by A21,A22,A28,AXIOMS:22,REAL_2:106;
            then ym-1 >= 0 by SQUARE_1:12;
               then reconsider yc=ym-1 as Nat by INT_1:16;
        A43:    t2.b=2*k1+(1+2-2) by A30,A41,XCMPLX_1:29
               .=2*k1+1;
        A44:    yc < ym by INT_1:26;
        then A45:    yc <= yn by A28,AXIOMS:22;
        then A46:    yc <= n by A21,A22,AXIOMS:22,REAL_2:106;
               set jj=2*k1+1;
        A47:    k2=m+n+jj by A21,XCMPLX_1:1;
        A48:    jj >= 1 by NAT_1:29;
        A49:    2*k1+3=2*k1+(2*1+1)
               .=2*k1+2*1+1 by XCMPLX_1:1
               .=2*(k1+1)+1 by XCMPLX_1:8;
        then jj < 2*(k1+1)+1 by REAL_1:53;
        then A50:    t2.intpos k2=t1.intpos(m+n+jj) by A41,A47,A48
               .=m+y1 by A27,A28,A47,SCMPDS_4:23;
               set jj=2*k1+2;
        A51:    k2+1=m+n+2*k1+(1+1) by A21,XCMPLX_1:1
               .=m+n+jj by XCMPLX_1:1;
                 jj >= 2 by NAT_1:29;
        then A52:    jj >= 1 by AXIOMS:22;
             jj < 2*(k1+1)+1 by A49,REAL_1:53;
        then A53:    t2.intpos (k2+1)=t1.intpos(m+n+jj) by A41,A51,A52
               .=m+ym-1 by A27,A28,A51,SCMPDS_4:23
               .=m+yc by XCMPLX_1:29;
                 yc <= yn-1 by A28,REAL_1:49;
               then yc-y1 <= yn-1-y1 by REAL_1:49;
        then A54:    yc-y1 <= yn-y1-1 by XCMPLX_1:21;
                 yn-y1-1 <= k+1-1 by A21,REAL_1:49;
               then yn-y1-1 <= k by XCMPLX_1:26;
        then yc-y1<=k by A54,AXIOMS:22;
               then consider km be Nat,f4 be FinSequence of INT such that
        A55:   (Computation(t2 +*iWH)).km+*iWH=(Computation(t2 +*iWH)).km &
              f4 is_FinSequence_on (Computation(t2 +*iWH)).km,m & len f4=n &
              f3,f4 are_fiberwise_equipotent &
              f4 is_non_decreasing_on y1,yc &
              (for j be Nat st y1<yc & (1<=j & j<y1 or yc<j & j<= n) holds
              f4.j= t2.intpos(m+j)) &
              (for j be Nat st y1>=yc & 1<=j & j<= n
              holds f4.j=t2.intpos(m+j)) &
              (for j be Nat st (1<=j & j<2*k1+1) holds
             (Computation(t2 +*iWH)).km.intpos(m+n+j)=t2.intpos(m+n+j)) &
             (Computation(t2 +*iWH)).km.b=t2.b-2 &
             (Computation(t2 +*iWH)).km.a=c by A20,A21,A22,A41,A43,A46,A50,A53,
REAL_2:106;
             take mm=m1+(kl+km);
             set tm=(Computation(t +* iWH)).mm;
             take f4;
        A56:  tm=(Computation (t1+*iWH)).(kl+km) by A27,AMI_1:51
             .=(Computation (t2+*iWH)).km by A41,AMI_1:51;
             hence tm+*iWH =tm by A55;
             thus f4 is_FinSequence_on tm,m by A55,A56;
             thus len f4=n by A55;
               now
                let i be Nat;
                assume 1<=i & i <= len f2;
                hence f2.i=t1.intpos(m+i) by A40
                 .=IExec(I,t).intpos(m+i) by A27,SCMPDS_4:23;
             end;
             then f2 is_FinSequence_on IExec(I,t),m by SCPISORT:def 1;
             then f1,f2 are_fiberwise_equipotent by A6,A21,A40;
             then f1,f3 are_fiberwise_equipotent by A41,RFINSEQ:2;
             hence f1,f4 are_fiberwise_equipotent by A55,RFINSEQ:2;
        A57:  yc < yd by A32,A44,AXIOMS:22;
        A58:  now
                let j be Nat;
                assume A59: yd<=j & j<=yn;
              then A60: j <= n by A21,A22,AXIOMS:22,REAL_2:106;
                  A61: yc < j by A57,A59,AXIOMS:22;
              A62: 1<=j by A34,A59,AXIOMS:22;
                    now
                    per cases;
                    suppose y1<yc;
                    hence f4.j=t2.intpos(m+j) by A55,A60,A61;
                    suppose y1>=yc;
                    hence f4.j=t2.intpos(m+j) by A55,A60,A62;
                  end;
                hence f4.j=f3.j by A41,A60,A62,SCPISORT:def 1;
            end;
              now let i,j be Nat;
               assume A63: yd <= i & i <= j & j <= yn;
              then A64:  i <= yn by AXIOMS:22;
              A65:  yd <= j by A63,AXIOMS:22;
              A66:  f4.i=f3.i by A58,A63,A64;
                     f4.j=f3.j by A58,A63,A65;
              hence f4.i <= f4.j by A41,A63,A66,SFMASTR3:def 4;
            end;
       then A67:  f4 is_non_decreasing_on yd,yn by SFMASTR3:def 4;
              y1-1 >= 0 by A21,A22,REAL_2:106,SQUARE_1:12;
            then reconsider y0=y1-1 as Nat by INT_1:16;
       A68:  y0 <= yc by A28,REAL_1:49;
       A69:  now let i be Nat;
               assume A70:1<=i & i<=y0;
                    i-1 < i by INT_1:26;
                  then i-1 < y1-1 by A70,AXIOMS:22;
               then A71:i<y1 by REAL_1:49;
                    y1 <= n by A21,A23,AXIOMS:22;
               then A72:i<=n by A71,AXIOMS:22;
                 now
                   per cases;
                   suppose y1<yc;
                    hence f4.i= t2.intpos(m+i) by A55,A70,A71;
                   suppose y1>=yc;
                    hence f4.i= t2.intpos(m+i) by A55,A70,A72;
              end;
              hence f4.i=f3.i by A41,A70,A72,SCPISORT:def 1;
            end;
       A73:  now let i be Nat;
                assume A74: yc<i & i<=len f4;
                    0 <= yc by NAT_1:18;
            then A75:  1+0 <= i by A74,INT_1:20;
                  now
                   per cases;
                   suppose y1<yc;
                    hence f4.i= t2.intpos(m+i) by A55,A74;
                   suppose y1>=yc;
                    hence f4.i= t2.intpos(m+i) by A55,A74,A75;
              end;
              hence f4.i=f3.i by A41,A55,A74,A75,SCPISORT:def 1;
            end;
       A76:  ym <= n by A21,A22,A28,AXIOMS:22,REAL_2:106;
       then A77:  f4.ym=f3.ym by A44,A55,A73;
              now
               per cases;
               suppose yd<yn;
                 hence f3.ym= t1.intpos(m+ym) by A32,A41,A42;
               suppose yd>=yn;
                 hence f3.ym= t1.intpos(m+ym) by A41,A42,A76;
            end;
       then A78:  f4.ym=IExec(I,t).intpos(m+ym) by A27,A77,SCMPDS_4:23;
       A79: now let i be Nat;
                assume A80:y1 <= i & i < ym;
                  y0 < y1 by INT_1:26;
         then A81:    y0 < i by A80,AXIOMS:22;
                  i+1 <= ym by A80,INT_1:20;
         then i<=yc by REAL_1:84;
                then consider j be Nat such that
         A82:    y0<j & j<=yc & f4.i=f3.j by A46,A55,A68,A69,A73,A81,Th11;
                  0 <= y0 by NAT_1:18;
         then A83:    1+0 <= j by A82,INT_1:20;
         A84:    j<yd by A57,A82,AXIOMS:22;
         A85:    j<= n by A46,A82,AXIOMS:22;
                  y1-1+1 <= j by A82,INT_1:20;
                then y1-1 <= j-1 by REAL_1:84;
         then A86:    y1 <= j by REAL_1:54;
                  yc < ym by INT_1:26;
         then A87:    j < ym by A82,AXIOMS:22;
                  now
                   per cases;
                   suppose yd<yn;
                   hence f3.j= t1.intpos(m+j) by A41,A83,A84;
                   suppose yd>=yn;
                   hence f3.j= t1.intpos(m+j) by A41,A83,A85;
                end;
                then f4.i=IExec(I,t).intpos(m+j) by A27,A82,SCMPDS_4:23;
               hence f4.i <= f4.ym by A28,A78,A86,A87;
            end;
         A88:  now let i be Nat;
                  assume A89: 1<=i & i<=ym;
               then A90:  i<yd by A32,AXIOMS:22;
               A91:  i<=n by A76,A89,AXIOMS:22;
                     now
                     per cases;
                     suppose yd<yn;
                     hence f3.i= t1.intpos(m+i) by A41,A89,A90;
                     suppose yd>=yn;
                     hence f3.i= t1.intpos(m+i) by A41,A89,A91;
                   end;
                   hence f3.i=f2.i by A40,A89,A91;
              end;
         A92:  now let i be Nat;
                  assume A93: yn<i & i<=len f3;
                        yn>=0 by NAT_1:18;
                  then A94: 1+0<=i by A93,INT_1:20;
                    now
                     per cases;
                     suppose yd<yn;
                     hence f3.i= t1.intpos(m+i) by A41,A93;
                     suppose yd>=yn;
                     hence f3.i= t1.intpos(m+i) by A41,A93,A94;
                   end;
                   hence f3.i=f2.i by A40,A41,A93,A94;
              end;
                now let i be Nat;
                 assume A95: ym < i & i <= yn;
           then A96:   yc < i by A44,AXIOMS:22;
           A97:   i<=len f4 by A21,A22,A55,A95,AXIOMS:22,REAL_2:106;
                consider j be Nat such that
           A98:   ym<j & j<=yn & f3.i=f2.j by A21,A22,A28,A41,A88,A92,A95,Th11,
REAL_2:106;
           A99:   1<=j by A42,A98,AXIOMS:22;
           A100:   j<=len f2 by A21,A22,A40,A98,AXIOMS:22,REAL_2:106;
                   f4.i=f2.j by A73,A96,A97,A98
                .=t1.intpos(m+j) by A40,A99,A100
               .=IExec(I,t).intpos(m+j) by A27,SCMPDS_4:23;
                 hence f4.ym <= f4.i by A28,A78,A98;
            end;
            hence f4 is_non_decreasing_on y1,yn by A28,A55,A67,A79,Th8;
            thus for j be Nat st y1<yn & (1<=j & j<y1 or yn<j & j<= n) holds
                  f4.j= t.intpos(m+j)
             proof
                let j be Nat;
                assume A101: y1<yn & (1<=j & j<y1 or yn<j & j<= n);
              A102: 1<=j & j<y1 or yc<j & j<= n
                proof
                   per cases by A101;
                   suppose 1<=j & j<y1;
                   hence thesis;
                   suppose yn<j & j<=n;
                    hence thesis by A45,AXIOMS:22;
                end;
            A103: 1<=j & j<= n
                proof
                   per cases by A101;
                   suppose A104:1<=j & j<y1;
                     then j<yn by A101,AXIOMS:22;
                     hence thesis by A21,A22,A104,AXIOMS:22,REAL_2:106;
                   suppose A105: yn<j & j<=n;
                     then y1 < j by A101,AXIOMS:22;
                    hence thesis by A21,A22,A105,AXIOMS:22,REAL_2:106;
               end;
           A106: 1<=j & j<yd or yn<j & j<= n
               proof
                   per cases by A101;
                   suppose 1<=j & j<y1;
                   hence thesis by A33,AXIOMS:22;
                   suppose yn<j & j<=n;
                    hence thesis;
             end;
         A107: now
                per cases;
                suppose yd<yn;
                 hence f3.j=t1.intpos(m+j) by A41,A106;
                suppose yd>=yn;
                 hence f3.j=t1.intpos(m+j) by A41,A103;
             end;
               now
                per cases;
                suppose y1<yc;
                 hence f4.j=t2.intpos(m+j) by A55,A102;
                suppose y1>=yc;
                  hence f4.j=t2.intpos(m+j) by A55,A103;
             end;
             hence f4.j=f3.j by A41,A103,SCPISORT:def 1
                   .=IExec(I,t).intpos(m+j) by A27,A107,SCMPDS_4:23
                  .=t.intpos(m+j) by A6,A21,A101;
            end;
            thus for j be Nat st y1>=yn & 1<=j & j<= n holds
                f4.j=t.intpos(m+j) by A22,REAL_2:106;
           hereby
              let j be Nat;
              assume A108: 1<=j & j<2*k1+1;
                2*k1+1 < 2*(k1+1)+1 by A49,REAL_1:53;
          then A109: j < 2*(k1+1)+1 by A108,AXIOMS:22;
             thus tm.intpos(m+n+j)=t2.intpos(m+n+j) by A55,A56,A108
              .=t1.intpos(m+n+j) by A41,A108,A109
              .=IExec(I,t).intpos(m+n+j) by A27,SCMPDS_4:23
              .=t.intpos(m+n+j) by A6,A21,A108;
           end;
           thus tm.b=2*k1+(1+2-2)-2 by A30,A41,A55,A56,XCMPLX_1:29
                .=t.b-2 by A21;
           thus tm.a=c by A55,A56;
         end;
         hence P[k+1];
    end;
A110: for k being Nat holds P[k] from Ind(A7,A19);
A111: m1=m+n+2*0+1 by A5;
  ex k be Nat,f2 be FinSequence of INT st
     (Computation(s +*iWH)).k+*iWH=(Computation(s +*iWH)).k &
     f2 is_FinSequence_on (Computation(s +*iWH)).k,m & len f2=n &
     f,f2 are_fiberwise_equipotent & f2 is_non_decreasing_on 1,n &
     (for j be Nat st 1<n & (1<=j & j<1 or n<j & j<= n) holds
       f2.j= s.intpos(m+j)) &
     (for j be Nat st 1>=n & 1<=j & j<= n holds f2.j= s.intpos(m+j)) &
       (for j be Nat st (1<=j & j<2*0+1) holds
     (Computation(s +*iWH)).k.intpos(m+n+j)=s.intpos(m+n+j)) &
     (Computation(s +*iWH)).k.b=s.b-2 & (Computation(s +*iWH)).k.a=c
     proof
       per cases;
       suppose n-1<=0;
         hence thesis by A1,A2,A4,A5,A110,A111;
       suppose n-1>0;
         then reconsider nn=n-1 as Nat by INT_1:16;
           P[nn] by A110;
         hence thesis by A1,A2,A4,A5,A111;
     end;
     then consider k be Nat,f2 be FinSequence of INT such that
A112:  (Computation(s +*iWH)).k+*iWH=(Computation(s +*iWH)).k &
     f2 is_FinSequence_on (Computation(s +*iWH)).k,m & len f2=n &
     f,f2 are_fiberwise_equipotent & f2 is_non_decreasing_on 1,n &
     (Computation(s +*iWH)).k.b=s.b-2 &
     (Computation(s +*iWH)).k.a=c;
     set sk=(Computation(s +*iWH)).k,
         s1 = sk +* iWH,
         s2 = (Computation s1).1;
     set i1=(a,i)<=0_goto (card I+2),
         i2=goto -(card I+1);

A113: IC s1 =inspos 0 by SCMPDS_6:21;
      WH = i1 ';' (I ';' i2 ) by Lm2;
then A114: CurInstr s1 = i1 by SCMPDS_6:22;
A115: (Computation s1).(0 + 1) = Following (Computation s1).0 by AMI_1:def 19
     .= Following s1 by AMI_1:def 19
     .= Exec(i1,s1) by A114,AMI_1:def 18;
       iWH c= s1 by FUNCT_4:26;
  then sWH c= s1 by SCMPDS_4:57;
then A116:  sWH c= s2 by AMI_3:38;

A117:  card WH=card I+2 by SCMPDS_8:17;
then A118:  inspos(card I+2) in dom sWH by SCMPDS_6:25;
A119:  IC s2 = s2.IC SCMPDS by AMI_1:def 15
     .= ICplusConst(s1,(card I+2)) by A4,A112,A115,SCMPDS_2:68
     .= inspos(0+(card I+2)) by A113,SCMPDS_6:23;
       s2.inspos(card I+2) = sWH.inspos(card I+2) by A116,A118,GRFUNC_1:8
     .=halt SCMPDS by A117,SCMPDS_6:25;
then A120:  CurInstr s2 = halt SCMPDS by A119,AMI_1:def 17;
A121:  s2=(Computation(s +*iWH)).(k+1) by A112,AMI_1:51;
then A122:  s +* iWH is halting by A120,AMI_1:def 20;
then A123:  Result (s +* iWH)=s2 by A120,A121,AMI_1:def 22;
     thus WH is_halting_on s by A122,SCMPDS_6:def 3;
       now let i be Nat;
        assume i in Seg n;
     then A124: 1 <= i & i <= n by FINSEQ_1:3;
     A125: IExec(WH,s)=s2 +* s | A by A123,SCMPDS_4:def 8;
         set xi=intpos (m+i);
           dom (s | A) = A by SCMPDS_6:1;
     then A126: not xi in dom (s | A) by SCMPDS_2:53;
      thus g.i=(s2 +* s | A).xi by A1,A3,A124,A125,SCPISORT:def 1
         .=s2.xi by A126,FUNCT_4:12
         .=s1.xi by A115,SCMPDS_2:68
         .=f2.i by A112,A124,SCPISORT:def 1;
     end;
     hence thesis by A1,A112,FINSEQ_2:10;
end;

Lm5:
  for s be State of SCMPDS,I be No-StopCode shiftable Program-block,
 a be Int_position, i,c be Integer,m,n,m1 be Nat st card I> 0 & s.a=c &
  1=s.DataLoc(c,i) & m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1) &
 (for t be State of SCMPDS,f1,f2 be FinSequence of INT,k1,k2,y1,yn be Nat
  st t.a=c & 2*k1+1=t.DataLoc(c,i) & k2=m+n+2*k1+1 & m+y1=t.intpos k2 &
   m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
holds I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a &
    (for j be Nat st (1<=j & j<2*k1+1) holds
           IExec(I,t).intpos(m+n+j)=t.intpos(m+n+j)) &
   (y1>=yn implies IExec(I,t).DataLoc(c,i)=2*k1-1 &
          (for j be Nat st (1<=j & j <= n) holds
          IExec(I,t).intpos (m+j) = t.intpos (m+j))) &
   (y1<yn implies IExec(I,t).DataLoc(c,i)=2*k1+3 &
          (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
           IExec(I,t).intpos(m+j) = t.intpos (m+j)) &
     (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=IExec(I,t).intpos k2 &
        m+ym-1=IExec(I,t).intpos (k2+1) & m+ym+1=IExec(I,t).intpos (k2+2) &
        m+yn=IExec(I,t).intpos (k2+3) &
        (for j be Nat st y1 <= j & j < ym holds
           IExec(I,t).intpos (m+j) <= IExec(I,t).intpos (m+ym)) &
        (for j be Nat st ym < j & j <= yn holds
           IExec(I,t).intpos (m+j) >= IExec(I,t).intpos (m+ym)))) &
    (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,t),m &
    len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent))
    holds
       while>0(a,i,I) is_halting_on s
proof
   let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
   a be Int_position, i,c be Integer,m,n,m1 be Nat;
   set b=DataLoc(c,i);
   assume A1: card I>0 & s.a=c;
   assume A2: 1=s.b;
   assume A3: m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1);
   assume A4: for t be State of SCMPDS,f1,f2 be FinSequence of INT,
     k1,k2,y1,yn be Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
     m+y1=t.intpos k2 & m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
     holds I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a &
          (for j be Nat st (1<=j & j<2*k1+1) holds
           IExec(I,t).intpos(m+n+j)=t.intpos(m+n+j)) &
         (y1>=yn implies IExec(I,t).b=2*k1-1 &
            (for j be Nat st (1<=j & j <= n) holds
            IExec(I,t).intpos (m+j) = t.intpos (m+j))) &
         (y1<yn implies IExec(I,t).b=2*k1+3 &
            (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
            IExec(I,t).intpos (m+j) = t.intpos (m+j)) &
          (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=IExec(I,t).intpos k2 &
         m+ym-1=IExec(I,t).intpos (k2+1) & m+ym+1=IExec(I,t).intpos (k2+2) &
         m+yn=IExec(I,t).intpos (k2+3) &
          (for j be Nat st y1 <= j & j < ym holds
             IExec(I,t).intpos(m+j) <= IExec(I,t).intpos(m+ym)) &
          (for j be Nat st ym < j & j <= yn holds
              IExec(I,t).intpos(m+j) >= IExec(I,t).intpos(m+ym)))) &
     (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,t),m &
      len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent);

     consider f be FinSequence of INT such that
A5:  len f=n & for i be Nat st 1<=i & i <= len f holds
     f.i=s.intpos(m+i) by SCPISORT:2;
A6:  f is_FinSequence_on s,m by A5,SCPISORT:def 1;
     set ss=IExec(while>0(a,i,I),s);
     consider g be FinSequence of INT such that
A7:  len g=n & for i be Nat st 1<=i & i <= len g holds
     g.i=ss.intpos(m+i) by SCPISORT:2;
   g is_FinSequence_on ss,m by A7,SCPISORT:def 1;
     hence thesis by A1,A2,A3,A4,A5,A6,A7,Lm4;
end;

Lm6:
  for s be State of SCMPDS,I be No-StopCode shiftable Program-block,
 a be Int_position, i,c be Integer,m,n,m1 be Nat st card I> 0 & s.a=c &
  1=s.DataLoc(c,i) & m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1) &
 (for t be State of SCMPDS,f1,f2 be FinSequence of INT,k1,k2,y1,yn be Nat
  st t.a=c & 2*k1+1=t.DataLoc(c,i) & k2=m+n+2*k1+1 & m+y1=t.intpos k2 &
   m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
holds I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a &
    (for j be Nat st (1<=j & j<2*k1+1) holds
           IExec(I,t).intpos(m+n+j)=t.intpos(m+n+j)) &
   (y1>=yn implies IExec(I,t).DataLoc(c,i)=2*k1-1 &
          (for j be Nat st (1<=j & j <= n) holds
          IExec(I,t).intpos (m+j) = t.intpos (m+j))) &
   (y1<yn implies IExec(I,t).DataLoc(c,i)=2*k1+3 &
          (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
           IExec(I,t).intpos(m+j) = t.intpos (m+j)) &
     (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=IExec(I,t).intpos k2 &
        m+ym-1=IExec(I,t).intpos (k2+1) & m+ym+1=IExec(I,t).intpos (k2+2) &
        m+yn=IExec(I,t).intpos (k2+3) &
        (for j be Nat st y1 <= j & j < ym holds
           IExec(I,t).intpos (m+j) <= IExec(I,t).intpos (m+ym)) &
        (for j be Nat st ym < j & j <= yn holds
           IExec(I,t).intpos (m+j) >= IExec(I,t).intpos (m+ym)))) &
    (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,t),m &
    len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent))
    holds
      while>0(a,i,I) is_halting_on s & while>0(a,i,I) is_closed_on s
proof
   let s be State of SCMPDS,I be No-StopCode shiftable Program-block,
   a be Int_position, i,c be Integer,m,n,m1 be Nat;
   set b=DataLoc(c,i);
   assume A1: card I>0;
   assume A2: s.a=c;
   assume A3: 1=s.b;
   assume A4: m1=m+n+1 & m+1=s.intpos m1 & m+n=s.intpos(m1+1);
   assume A5: for t be State of SCMPDS,f1,f2 be FinSequence of INT,
     k1,k2,y1,yn be Nat st t.a=c & 2*k1+1=t.b & k2=m+n+2*k1+1 &
     m+y1=t.intpos k2 & m+yn=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn)
     holds I is_closed_on t & I is_halting_on t & IExec(I,t).a=t.a &
          (for j be Nat st (1<=j & j<2*k1+1) holds
           IExec(I,t).intpos(m+n+j)=t.intpos(m+n+j)) &
         (y1>=yn implies IExec(I,t).b=2*k1-1 &
            (for j be Nat st (1<=j & j <= n) holds
            IExec(I,t).intpos (m+j) = t.intpos (m+j))) &
         (y1<yn implies IExec(I,t).b=2*k1+3 &
            (for j be Nat st (1<=j & j<y1) or (yn<j & j <= n) holds
            IExec(I,t).intpos (m+j) = t.intpos (m+j)) &
          (ex ym be Nat st y1 <= ym & ym <= yn & m+y1=IExec(I,t).intpos k2 &
         m+ym-1=IExec(I,t).intpos (k2+1) & m+ym+1=IExec(I,t).intpos (k2+2) &
         m+yn=IExec(I,t).intpos (k2+3) &
          (for j be Nat st y1 <= j & j < ym holds
             IExec(I,t).intpos(m+j) <= IExec(I,t).intpos(m+ym)) &
          (for j be Nat st ym < j & j <= yn holds
              IExec(I,t).intpos(m+j) >= IExec(I,t).intpos(m+ym)))) &
     (f1 is_FinSequence_on t,m & f2 is_FinSequence_on IExec(I,t),m &
      len f1=n & len f2=n implies f1,f2 are_fiberwise_equipotent);
A6: now let v be State of SCMPDS;
      assume A7: v | D =s | D;
      then A8: v.a =c by A2,SCMPDS_4:23;
      A9: 1 =v.b by A3,A7,SCMPDS_4:23;
      A10: m+1 =v.intpos m1 by A4,A7,SCMPDS_4:23;
            m+n =v.intpos (m1+1) by A4,A7,SCMPDS_4:23;
      hence while>0(a,i,I) is_halting_on v by A1,A4,A5,A8,A9,A10,Lm5;
   end;
   hence while>0(a,i,I) is_halting_on s;
   thus while>0(a,i,I) is_closed_on s by A6,Th3;
end;

begin :: Program Partition is to split a sequence into a "smaller" and
::       a "larger" subsequence

:: a5=a7=length  a2=mid(x[1]), a3=x[2], a4=x[n], a6=save
definition
 func Partition -> Program-block equals
:Def1:
      ((GBP,5):=(GBP,4) ';'
      SubFrom(GBP,5,GBP,2) ';'
      (GBP,3):=(GBP,2) ';'
      AddTo(GBP,3,1)) ';'
      while>0(GBP,5,
        while>0(GBP,5,
            (GBP,7):=(GBP,5) ';' AddTo(GBP,5,-1) ';'
            (GBP,6):=(intpos 4,0) ';'
            SubFrom(GBP,6,intpos 2,0) ';'
            if>0(GBP,6, AddTo(GBP,4,-1) ';' AddTo(GBP,7,-1),
            Load (GBP,5):=0 )
        ) ';'
        while>0(GBP,7,
            (GBP,5):=(GBP,7) ';' AddTo(GBP,7,-1) ';'
            (GBP,6):=(intpos 2,0) ';'
            SubFrom(GBP,6,intpos 3,0) ';'
            if>0(GBP,6, AddTo(GBP,3,1) ';' AddTo(GBP,5,-1),
            Load (GBP,7):=0 )
        ) ';'
        if>0(GBP,5,((GBP,6):=(intpos 4,0) ';'
                    (intpos 4,0):=(intpos 3,0) ';'
                    (intpos 3,0):=(GBP,6) ';' AddTo(GBP,5,-2) ';'
                    AddTo(GBP,3,1)) ';' AddTo(GBP,4,-1)
        )
     ) ';'
     (GBP,6):=(intpos 4,0) ';'
     (intpos 4,0):=(intpos 2,0) ';'
     (intpos 2,0):=(GBP,6);
     coherence;
end;

begin :: The Construction of Quick Sort
:: a0=global, a1=stack, a2=stack depth
definition
 let n,p0 be Nat;
 set pn=p0+n;
 func QuickSort(n,p0) -> Program-block equals
:Def2:
       ((GBP:=0) ';'
       (SBP:=1) ';'
       (SBP,pn):=(p0+1) ';'
       (SBP,pn+1):=pn) ';'
       while>0(GBP,1,
           (GBP,2):=(SBP,pn+1) ';'
           SubFrom(GBP,2,SBP,pn) ';'
           if>0(GBP,2, (GBP,2):=(SBP,pn) ';'
                  (GBP,4):=(SBP,pn+1) ';'
                  Partition ';'
                  (((SBP,pn+3):=(SBP,pn+1) ';'
                  (SBP,pn+1):=(GBP,4) ';'
                  (SBP,pn+2):=(GBP,4) ';'
                  AddTo(SBP,pn+1,-1)) ';'
                  AddTo(SBP,pn+2,1) ';'
                  AddTo(GBP,1,2)),
                  Load AddTo(GBP,1,-2)
          )
       );
       coherence;
end;
  set i1= (GBP,7):=(GBP,5),
       i2= AddTo(GBP,5,-1),
       i3= (GBP,6):=(intpos 4,0),
       i4= SubFrom(GBP,6,intpos 2,0),
       i5= AddTo(GBP,4,-1),
       i6= AddTo(GBP,7,-1),
       i7= Load (GBP,5):=0,
       IF1= if>0(GBP,6,i5 ';' i6,i7),
       WB1= i1 ';' i2 ';' i3 ';' i4 ';' IF1,
       WH1= while>0(GBP,5,WB1),
       j1= (GBP,5):=(GBP,7),
       j2= AddTo(GBP,7,-1),
       j3= (GBP,6):=(intpos 2,0),
       j4= SubFrom(GBP,6,intpos 3,0),
       j5= AddTo(GBP,3,1),
       j6= AddTo(GBP,5,-1),
       j7= Load (GBP,7):=0,
       IF2= if>0(GBP,6,j5 ';' j6, j7),
       WB2= j1 ';' j2 ';' j3 ';' j4 ';' IF2,
       WH2= while>0(GBP,7,WB2),
       k1 = (GBP,5):=(GBP,4),
       k2 = SubFrom(GBP,5,GBP,2),
       k3 = (GBP,3):=(GBP,2),
       k4 = AddTo(GBP,3,1),
       K4 = k1 ';' k2 ';' k3 ';' k4,
       k5 = (GBP,6):=(intpos 4,0),
       k6 = (intpos 4,0):=(intpos 3,0),
       k7 = (intpos 3,0):=(GBP,6),
       k8 = AddTo(GBP,5,-2),
       k9 = AddTo(GBP,3,1),
       k0 = AddTo(GBP,4,-1),
       IF3= if>0(GBP,5, k5 ';' k6 ';' k7 ';' k8 ';' k9 ';' k0),
       WB3= WH1 ';' WH2 ';' IF3,
       WH3= while>0(GBP,5,WB3),
       j8 = (GBP,6):=(intpos 4,0),
       j9 = (intpos 4,0):=(intpos 2,0),
       j0 = (intpos 2,0):=(GBP,6);

 set a1=intpos 1,
       a2=intpos 2,
       a3=intpos 3,
       a4=intpos 4,
       a5=intpos 5,
       a6=intpos 6,
       a7=intpos 7;

Lm7:
  card WB1=9
proof
   thus card WB1= card (i1 ';' i2 ';' i3 ';' i4) + card IF1 by SCMPDS_4:45
      .= 4+card IF1 by Th4
      .= 4+(card (i5 ';' i6)+card i7+2) by SCMPDS_6:79
      .= 4+(2+card i7+2) by SCMP_GCD:9
      .= 4+(2+1+2) by SCMPDS_5:6
      .= 9;
end;

Lm8:
  for s being State of SCMPDS,md,me be Nat st s.a2=md & s.a4=me &
  md >= 8 & me >= 8 & s.GBP=0 & s.a5 > 0 holds
  IExec(WB1,s).GBP=0 & IExec(WB1,s).a1=s.a1 &
  IExec(WB1,s).a2=s.a2 & IExec(WB1,s).a3=s.a3 &
  (for i be Nat st i >= 8 holds IExec(WB1,s).intpos i=s.intpos i) &
  (s.intpos md < s.intpos me implies IExec(WB1,s).a5=s.a5-1 &
  IExec(WB1,s).a4=s.a4-1 & IExec(WB1,s).a7=s.a5-1) &
  (s.intpos md >= s.intpos me implies IExec(WB1,s).a5=0 &
  IExec(WB1,s).a4=s.a4 & IExec(WB1,s).a7=s.a5)
proof
   let s be State of SCMPDS,md,me be Nat;
   set a=GBP;
   assume A1: s.a2=md & s.a4=me & md >= 8 & me >= 8 & s.a=0 & s.a5 > 0;
   set t0=Initialized s,
       t1=IExec(i1 ';' i2 ';' i3 ';' i4,s),
       t2=IExec(i1 ';' i2 ';' i3,s),
       t3=IExec(i1 ';' i2,s),
       t4=Exec(i1, t0);
A2: t0.a=0 by A1,SCMPDS_5:40;
A3: t0.a1=s.a1 by SCMPDS_5:40;
A4: t0.a2=md by A1,SCMPDS_5:40;
A5: t0.a3=s.a3 by SCMPDS_5:40;
A6: t0.a4=me by A1,SCMPDS_5:40;
A7: t0.a5=s.a5 by SCMPDS_5:40;

A8:  DataLoc(t0.a,7)=intpos (0+7) by A2,SCMP_GCD:5;
     then a<>DataLoc(t0.a,7) by SCMP_GCD:4,def 2;
then A9: t4.a =0 by A2,SCMPDS_2:59;
       a1<>DataLoc(t0.a,7) by A8,SCMP_GCD:4;
then A10: t4.a1 =s.a1 by A3,SCMPDS_2:59;
       a2<>DataLoc(t0.a,7) by A8,SCMP_GCD:4;
then A11: t4.a2 =md by A4,SCMPDS_2:59;
       a3<>DataLoc(t0.a,7) by A8,SCMP_GCD:4;
then A12: t4.a3 =s.a3 by A5,SCMPDS_2:59;
   a4<>DataLoc(t0.a,7) by A8,SCMP_GCD:4;
then A13: t4.a4 =me by A6,SCMPDS_2:59;
       a5<>DataLoc(t0.a,7) by A8,SCMP_GCD:4;
then A14: t4.a5 =s.a5 by A7,SCMPDS_2:59;
   DataLoc(t0.a,5)=intpos (0+5) by A2,SCMP_GCD:5;
then A15: t4.a7 =s.a5 by A7,A8,SCMPDS_2:59;
A16: now let i be Nat;
        assume i>=8;
        then i > 7 by AXIOMS:22;
    then intpos i <> DataLoc(t0.a,7) by A8,SCMP_GCD:4;
        hence t4.intpos i=t0.intpos i by SCMPDS_2:59
          .=s.intpos i by SCMPDS_5:40;
     end;

A17:  DataLoc(t4.a,5)=intpos (0+5) by A9,SCMP_GCD:5;
then A18:  a<>DataLoc(t4.a,5) by SCMP_GCD:4,def 2;
A19: t3.a =Exec(i2, t4).a by SCMPDS_5:47
     .=0 by A9,A18,SCMPDS_2:60;
A20:  a1<>DataLoc(t4.a,5) by A17,SCMP_GCD:4;
A21: t3.a1 =Exec(i2, t4).a1 by SCMPDS_5:47
     .=s.a1 by A10,A20,SCMPDS_2:60;
A22:  a2<>DataLoc(t4.a,5) by A17,SCMP_GCD:4;
A23: t3.a2 =Exec(i2, t4).a2 by SCMPDS_5:47
     .=md by A11,A22,SCMPDS_2:60;
A24:  a3<>DataLoc(t4.a,5) by A17,SCMP_GCD:4;
A25: t3.a3 =Exec(i2, t4).a3 by SCMPDS_5:47
     .=s.a3 by A12,A24,SCMPDS_2:60;
A26:  a4<>DataLoc(t4.a,5) by A17,SCMP_GCD:4;
A27: t3.a4 =Exec(i2, t4).a4 by SCMPDS_5:47
     .=me by A13,A26,SCMPDS_2:60;
A28: t3.a5 =Exec(i2, t4).a5 by SCMPDS_5:47
     .=t4.a5+ -1 by A17,SCMPDS_2:60
     .=s.a5-1 by A14,XCMPLX_0:def 8;
A29:  a7<>DataLoc(t4.a,5) by A17,SCMP_GCD:4;
A30: t3.a7 =Exec(i2, t4).a7 by SCMPDS_5:47
     .=s.a5 by A15,A29,SCMPDS_2:60;
A31: now let i be Nat;
        assume A32:i>=8;
        then i > 5 by AXIOMS:22;
    then A33: intpos i <> DataLoc(t4.a,5) by A17,SCMP_GCD:4;
    thus t3.intpos i =Exec(i2, t4).intpos i by SCMPDS_5:47
          .=t4.intpos i by A33,SCMPDS_2:60
          .=s.intpos i by A16,A32;
      end;

A34:  DataLoc(t3.a,6)=intpos (0+6) by A19,SCMP_GCD:5;
then A35:  a<>DataLoc(t3.a,6) by SCMP_GCD:4,def 2;
A36: t2.a =Exec(i3, t3).a by SCMPDS_5:46
     .=0 by A19,A35,SCMPDS_2:59;
A37:  a1<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A38: t2.a1 =Exec(i3, t3).a1 by SCMPDS_5:46
     .=s.a1 by A21,A37,SCMPDS_2:59;
A39:  a2<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A40: t2.a2 =Exec(i3, t3).a2 by SCMPDS_5:46
     .=md by A23,A39,SCMPDS_2:59;
A41:  a3<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A42: t2.a3 =Exec(i3, t3).a3 by SCMPDS_5:46
     .=s.a3 by A25,A41,SCMPDS_2:59;
A43:  a4<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A44: t2.a4 =Exec(i3, t3).a4 by SCMPDS_5:46
     .=me by A27,A43,SCMPDS_2:59;
A45:  a5<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A46: t2.a5 =Exec(i3, t3).a5 by SCMPDS_5:46
     .=s.a5-1 by A28,A45,SCMPDS_2:59;
A47:  DataLoc(t3.a4,0)=intpos (me+0) by A27,SCMP_GCD:5;
A48: t2.a6 =Exec(i3, t3).a6 by SCMPDS_5:46
     .=t3.intpos me by A34,A47,SCMPDS_2:59
     .=s.intpos me by A1,A31;
A49:  a7<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A50: t2.a7 =Exec(i3, t3).a7 by SCMPDS_5:46
     .=s.a5 by A30,A49,SCMPDS_2:59;
A51: now let i be Nat;
        assume A52:i>=8;
        then i > 6 by AXIOMS:22;
    then A53: intpos i <> DataLoc(t3.a,6) by A34,SCMP_GCD:4;
        thus t2.intpos i=Exec(i3, t3).intpos i by SCMPDS_5:46
        .=t3.intpos i by A53,SCMPDS_2:59
        .=s.intpos i by A31,A52;
     end;

A54:  DataLoc(t2.a,6)=intpos (0+6) by A36,SCMP_GCD:5;
then A55:  a<>DataLoc(t2.a,6) by SCMP_GCD:4,def 2;
A56: t1.a =Exec(i4, t2).a by SCMPDS_5:46
     .=0 by A36,A55,SCMPDS_2:62;
A57:  a1<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A58: t1.a1 =Exec(i4, t2).a1 by SCMPDS_5:46
     .=s.a1 by A38,A57,SCMPDS_2:62;
A59:  a2<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A60: t1.a2 =Exec(i4, t2).a2 by SCMPDS_5:46
     .=md by A40,A59,SCMPDS_2:62;
A61:  a3<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A62: t1.a3 =Exec(i4, t2).a3 by SCMPDS_5:46
     .=s.a3 by A42,A61,SCMPDS_2:62;
A63:  a4<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A64: t1.a4 =Exec(i4, t2).a4 by SCMPDS_5:46
     .=me by A44,A63,SCMPDS_2:62;
A65:  a5<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A66: t1.a5 =Exec(i4, t2).a5 by SCMPDS_5:46
     .=s.a5-1 by A46,A65,SCMPDS_2:62;
A67: t1.a6 =Exec(i4, t2).a6 by SCMPDS_5:46
     .=t2.a6-t2.DataLoc(t2.a2,0) by A54,SCMPDS_2:62
     .=t2.a6-t2.intpos(md+0) by A40,SCMP_GCD:5
     .=s.intpos me - s.intpos md by A1,A48,A51;
A68:  a7<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A69: t1.a7 =Exec(i4, t2).a7 by SCMPDS_5:46
     .=s.a5 by A50,A68,SCMPDS_2:62;
A70: now let i be Nat;
        assume A71:i>=8;
        then i > 6 by AXIOMS:22;
    then A72: intpos i <> DataLoc(t2.a,6) by A54,SCMP_GCD:4;
        thus t1.intpos i=Exec(i4, t2).intpos i by SCMPDS_5:46
        .=t2.intpos i by A72,SCMPDS_2:62
        .=s.intpos i by A51,A71;
     end;

     set t01=Initialized t1,
         ii7= (GBP,5):=0,
         t5=Exec(i5,t01);
A73: t01.a=0 by A56,SCMPDS_5:40;
A74: t01.a1=s.a1 by A58,SCMPDS_5:40;
A75: t01.a2=s.a2 by A1,A60,SCMPDS_5:40;
A76: t01.a3=s.a3 by A62,SCMPDS_5:40;
A77: t01.a7=s.a5 by A69,SCMPDS_5:40;
A78:  DataLoc(t01.a,5)=intpos(0+5) by A73,SCMP_GCD:5;
A79:  DataLoc(t01.a,4)=intpos(0+4) by A73,SCMP_GCD:5;
     then a<>DataLoc(t01.a,4) by SCMP_GCD:4,def 2;
then A80: t5.a=0 by A73,SCMPDS_2:60;
       a1<>DataLoc(t01.a,4) by A79,SCMP_GCD:4;
then A81: t5.a1=s.a1 by A74,SCMPDS_2:60;
       a2<>DataLoc(t01.a,4) by A79,SCMP_GCD:4;
then A82: t5.a2=s.a2 by A75,SCMPDS_2:60;
       a3<>DataLoc(t01.a,4) by A79,SCMP_GCD:4;
then A83: t5.a3=s.a3 by A76,SCMPDS_2:60;
A84:  DataLoc(t5.a,7)=intpos(0+7) by A80,SCMP_GCD:5;
A85:  now
         per cases;
         suppose A86: t1.DataLoc(t1.a,6) <= 0;
         A87:  a<>DataLoc(t01.a,5) by A78,SCMP_GCD:4,def 2;
         thus IExec(IF1,t1).a=IExec(i7,t1).a by A86,SCMPDS_6:88
              .=Exec(ii7,t01).a by SCMPDS_5:45
              .=0 by A73,A87,SCMPDS_2:58;
         A88:  a1<>DataLoc(t01.a,5) by A78,SCMP_GCD:4;
         thus IExec(IF1,t1).a1=IExec(i7,t1).a1 by A86,SCMPDS_6:88
              .=Exec(ii7,t01).a1 by SCMPDS_5:45
              .=s.a1 by A74,A88,SCMPDS_2:58;
         A89:  a2<>DataLoc(t01.a,5) by A78,SCMP_GCD:4;
         thus IExec(IF1,t1).a2=IExec(i7,t1).a2 by A86,SCMPDS_6:88
              .=Exec(ii7,t01).a2 by SCMPDS_5:45
              .=s.a2 by A75,A89,SCMPDS_2:58;
         A90:  a3<>DataLoc(t01.a,5) by A78,SCMP_GCD:4;
         thus IExec(IF1,t1).a3=IExec(i7,t1).a3 by A86,SCMPDS_6:88
              .=Exec(ii7,t01).a3 by SCMPDS_5:45
              .=s.a3 by A76,A90,SCMPDS_2:58;
         hereby let i be Nat;
              assume A91:i>=8;
                then i > 5 by AXIOMS:22;
            then A92: intpos i <> DataLoc(t01.a,5) by A78,SCMP_GCD:4;
        thus IExec(WB1,s).intpos i=IExec(IF1,t1).intpos i by SCMPDS_5:39
              .=IExec(i7,t1).intpos i by A86,SCMPDS_6:88
              .=Exec(ii7,t01).intpos i by SCMPDS_5:45
              .=t01.intpos i by A92,SCMPDS_2:58
              .=t1.intpos i by SCMPDS_5:40
              .=s.intpos i by A70,A91;
        end;

         suppose A93: t1.DataLoc(t1.a,6) > 0;
          A94: a<>DataLoc(t5.a,7) by A84,SCMP_GCD:4,def 2;
         thus IExec(IF1,t1).a=IExec(i5 ';' i6,t1).a by A93,SCMPDS_6:87
              .=Exec(i6,t5).a by SCMPDS_5:47
              .=0 by A80,A94,SCMPDS_2:60;
          A95: a1<>DataLoc(t5.a,7) by A84,SCMP_GCD:4;
         thus IExec(IF1,t1).a1=IExec(i5 ';' i6,t1).a1 by A93,SCMPDS_6:87
              .=Exec(i6,t5).a1 by SCMPDS_5:47
              .=s.a1 by A81,A95,SCMPDS_2:60;
         A96:  a2<>DataLoc(t5.a,7) by A84,SCMP_GCD:4;
         thus IExec(IF1,t1).a2=IExec(i5 ';' i6,t1).a2 by A93,SCMPDS_6:87
              .=Exec(i6,t5).a2 by SCMPDS_5:47
              .=s.a2 by A82,A96,SCMPDS_2:60;
         A97:  a3<>DataLoc(t5.a,7) by A84,SCMP_GCD:4;
         thus IExec(IF1,t1).a3=IExec(i5 ';' i6,t1).a3 by A93,SCMPDS_6:87
              .=Exec(i6,t5).a3 by SCMPDS_5:47
              .=s.a3 by A83,A97,SCMPDS_2:60;
         hereby let i be Nat;
              assume A98:i>=8;
                then i > 7 by AXIOMS:22;
            then A99: intpos i <> DataLoc(t5.a,7) by A84,SCMP_GCD:4;
                  i > 4 by A98,AXIOMS:22;
            then A100: intpos i<>DataLoc(t01.a,4) by A79,SCMP_GCD:4;
        thus IExec(WB1,s).intpos i=IExec(IF1,t1).intpos i by SCMPDS_5:39
              .=IExec(i5 ';' i6,t1).intpos i by A93,SCMPDS_6:87
              .=Exec(i6,t5).intpos i by SCMPDS_5:47
              .=t5.intpos i by A99,SCMPDS_2:60
              .=t01.intpos i by A100,SCMPDS_2:60
              .=t1.intpos i by SCMPDS_5:40
              .=s.intpos i by A70,A98;
        end;
     end;
     hence IExec(WB1,s).a=0 & IExec(WB1,s).a1=s.a1 &
        IExec(WB1,s).a2=s.a2 & IExec(WB1,s).a3=s.a3 by SCMPDS_5:39;
   thus for i be Nat st i >= 8 holds IExec(WB1,s).intpos i=s.intpos i by A85;
A101:  t1.DataLoc(t1.a,6)=t1.intpos (0+6) by A56,SCMP_GCD:5
      .=s.intpos me - s.intpos md by A67;
A102: t01.a4=s.a4 by A1,A64,SCMPDS_5:40;
A103: t01.a5=s.a5-1 by A66,SCMPDS_5:40;
      hereby
        assume s.intpos md < s.intpos me;
         then A104: t1.DataLoc(t1.a,6) > 0 by A101,SQUARE_1:11;
         A105:  a5<>DataLoc(t01.a,4) by A79,SCMP_GCD:4;
         A106:  a5<>DataLoc(t5.a,7) by A84,SCMP_GCD:4;
        thus IExec(WB1,s).a5=IExec(IF1,t1).a5 by SCMPDS_5:39
              .=IExec(i5 ';' i6,t1).a5 by A104,SCMPDS_6:87
              .=Exec(i6,t5).a5 by SCMPDS_5:47
              .=t5.a5 by A106,SCMPDS_2:60
               .=s.a5-1 by A103,A105,SCMPDS_2:60;
         A107:  a4<>DataLoc(t5.a,7) by A84,SCMP_GCD:4;
        thus IExec(WB1,s).a4=IExec(IF1,t1).a4 by SCMPDS_5:39
              .=IExec(i5 ';' i6,t1).a4 by A104,SCMPDS_6:87
              .=Exec(i6,t5).a4 by SCMPDS_5:47
              .=t5.a4 by A107,SCMPDS_2:60
              .=t01.a4+-1 by A79,SCMPDS_2:60
              .=s.a4-1 by A102,XCMPLX_0:def 8;
         A108:  a7<>DataLoc(t01.a,4) by A79,SCMP_GCD:4;
        thus IExec(WB1,s).a7=IExec(IF1,t1).a7 by SCMPDS_5:39
              .=IExec(i5 ';' i6,t1).a7 by A104,SCMPDS_6:87
              .=Exec(i6,t5).a7 by SCMPDS_5:47
              .=t5.a7+ -1 by A84,SCMPDS_2:60
              .=t5.a7-1 by XCMPLX_0:def 8
              .=s.a5-1 by A77,A108,SCMPDS_2:60;
      end;
      hereby
        assume s.intpos md >= s.intpos me;
        then A109: t1.DataLoc(t1.a,6) <= 0 by A101,REAL_2:106;
        thus IExec(WB1,s).a5=IExec(IF1,t1).a5 by SCMPDS_5:39
              .=IExec(i7,t1).a5 by A109,SCMPDS_6:88
              .=Exec(ii7,t01).a5 by SCMPDS_5:45
              .=0 by A78,SCMPDS_2:58;
         A110:  a4<>DataLoc(t01.a,5) by A78,SCMP_GCD:4;
        thus IExec(WB1,s).a4=IExec(IF1,t1).a4 by SCMPDS_5:39
              .=IExec(i7,t1).a4 by A109,SCMPDS_6:88
              .=Exec(ii7,t01).a4 by SCMPDS_5:45
              .=s.a4 by A102,A110,SCMPDS_2:58;
         A111:  a7<>DataLoc(t01.a,5) by A78,SCMP_GCD:4;
         thus IExec(WB1,s).a7=IExec(IF1,t1).a7 by SCMPDS_5:39
              .=IExec(i7,t1).a7 by A109,SCMPDS_6:88
              .=Exec(ii7,t01).a7 by SCMPDS_5:45
              .=s.a5 by A77,A111,SCMPDS_2:58;
      end;
end;

Lm9:
 for s being State of SCMPDS,m4,md be Nat st s.GBP=0 & s.a5 > 0
 & s.a4=m4+s.a5 & m4>=8 & s.a2=md & md >= 8 holds IExec(WH1,s).GBP=0 &
  IExec(WH1,s).a1=s.a1 & IExec(WH1,s).a5=0 &
  IExec(WH1,s).a2=s.a2 & IExec(WH1,s).a3=s.a3 &
  (for i be Nat st i >= 8 holds IExec(WH1,s).intpos i=s.intpos i) &
  ex mE be Nat st mE=IExec(WH1,s).a7 & IExec(WH1,s).a4=m4+mE &
  mE <= s.a5 & (for i be Nat st m4+mE < i & i <=s.a4 holds
     IExec(WH1,s).intpos md < IExec(WH1,s).intpos i) &
     (mE = 0 or IExec(WH1,s).intpos md >= IExec(WH1,s).intpos(m4+mE))
proof
    let s be State of SCMPDS,m4,md be Nat;
    assume A1: s.GBP=0 & s.a5 > 0 & s.a4=m4+s.a5 & m4>=8 &
           s.a2=md & md >= 8;
    set a=GBP;
    defpred P[Nat] means
     for t being State of SCMPDS st
   t.a=0 & t.a5 =$1+1 & t.a4=m4+t.a5 & t.a2=md holds IExec(WH1,t).a=0 &
  IExec(WH1,t).a1=t.a1 & IExec(WH1,t).a5=0 &
  IExec(WH1,t).a2=t.a2 & IExec(WH1,t).a3=t.a3 &
 (for i be Nat st i >= 8 holds IExec(WH1,t).intpos i=t.intpos i) &
 ex mE be Nat st mE=IExec(WH1,t).a7 & IExec(WH1,t).a4=m4+mE & mE <= t.a5 &
   (for i be Nat st m4+mE < i & i <=t.a4 holds
     IExec(WH1,t).intpos md < IExec(WH1,t).intpos i) &
     (mE=0 or IExec(WH1,t).intpos md >= IExec(WH1,t).intpos (m4+mE));
     now
       let t be State of SCMPDS;
       set b=DataLoc(t.a,5);
       assume A2: t.a=0 & t.a5 =0+1 & t.a4=m4+t.a5 & t.a2=md;
   set me=m4+1;
         me>=m4 by NAT_1:29;
then A3:    me>=8 by A1,AXIOMS:22;
A4:    b=intpos (0+5) by A2,SCMP_GCD:5;
A5:    now let v be State of SCMPDS;
           assume A6: v.a4 >= m4+v.b & v.a2=t.a2 & v.a=t.a & v.b > 0;
               then A7: m4+v.b>m4+0 by REAL_1:53;
               then A8: v.a4 >=m4 by A6,AXIOMS:22;
                v.a4 > 0 by A1,A6,A7,AXIOMS:22;
               then reconsider ME=v.a4 as Nat by INT_1:16;
           A9: ME >= 8 by A1,A8,AXIOMS:22;
           then A10: (v.intpos md < v.intpos ME implies IExec(WB1,v).a5=v.a5-1
&
               IExec(WB1,v).a4=v.a4-1 & IExec(WB1,v).a7=v.a5-1) &
               (v.intpos md >= v.intpos ME implies IExec(WB1,v).a5=0 &
               IExec(WB1,v).a4=v.a4 & IExec(WB1,v).a7=v.a5)
               by A1,A2,A4,A6,Lm8;
          thus IExec(WB1,v).a=v.a by A1,A2,A4,A6,A9,Lm8;
          thus WB1 is_closed_on v & WB1 is_halting_on v by SCMPDS_6:34,35;
          hereby
              per cases;
              suppose A11: v.intpos md < v.intpos ME;
             hence IExec(WB1,v).b < v.b by A4,A10,INT_1:26;
                 m4+v.b-1=m4+IExec(WB1,v).b by A4,A10,A11,XCMPLX_1:29;
             hence IExec(WB1,v).a4 >= m4+IExec(WB1,v).b by A6,A10,A11,REAL_1:49
;
              suppose A12:v.intpos md >= v.intpos ME;
             hence IExec(WB1,v).b < v.b by A1,A2,A4,A6,A9,Lm8;
                  m4+IExec(WB1,v).b < m4+v.b by A4,A6,A10,A12,REAL_1:53;
              hence IExec(WB1,v).a4 >= m4+IExec(WB1,v).b by A6,A10,A12,AXIOMS:
22
;
          end;
          thus IExec(WB1,v).a2=v.a2 by A1,A2,A4,A6,A9,Lm8;
        end;
       set It=IExec(WB1,t);
A13:    It.a=0 & It.a1=t.a1 & It.a2=t.a2 & It.a3=t.a3 &
       (for i be Nat st i >= 8 holds It.intpos i=t.intpos i) &
       (t.intpos md < t.intpos me implies It.a5=t.a5-1 &
         It.a4=t.a4-1 & It.a7=t.a5-1) &
       (t.intpos md >= t.intpos me implies It.a5=0 &
         It.a4=t.a4 & It.a7=t.a5) by A1,A2,A3,Lm8;
then A14:  It.DataLoc(It.a,5)=It.intpos(0+5) by SCMP_GCD:5
     .=0 by A2,A13;
A15:  now let x;
           thus IExec(WH1,t).x =IExec(WH1,It).x by A2,A4,A5,Lm7,Th5
             .=It.x by A14,SCMPDS_8:23;
     end;
     hence IExec(WH1,t).a=0 by A13;
     thus IExec(WH1,t).a1=t.a1 by A13,A15;
     thus IExec(WH1,t).a5=0 by A2,A13,A15;
     thus IExec(WH1,t).a2=t.a2 by A13,A15;
     thus IExec(WH1,t).a3=t.a3 by A13,A15;
A16:  now let i be Nat;
           assume A17: i >= 8;
           thus IExec(WH1,t).intpos i=It.intpos i by A15
           .=t.intpos i by A1,A2,A3,A17,Lm8;
       end;
    hence for i be Nat st i >= 8 holds IExec(WH1,t).intpos i=t.intpos i;
A18:    IExec(WH1,t).intpos me=t.intpos me by A3,A16;
       hereby
           per cases;
           suppose A19: t.intpos md < t.intpos me;
             take ME=0;
           thus IExec(WH1,t).a7=ME by A2,A13,A15,A19;
           thus IExec(WH1,t).a4=t.a4-1 by A13,A15,A19
             .=m4+ME by A2,XCMPLX_1:26;
             thus ME <= t.a5 by A2;
             hereby
                 let i be Nat;
                 assume A20: m4+ME < i & i <=t.a4;
                 then m4+1 <= i by INT_1:20;
             then i=m4+1 by A2,A20,AXIOMS:21;
              hence IExec(WH1,t).intpos md < IExec(WH1,t).intpos i by A1,A16,
A18,A19;
             end;
             thus
               ME=0 or IExec(WH1,t).intpos md >= IExec(WH1,t).intpos (m4+ME);

           suppose A21: t.intpos md >= t.intpos me;
             take ME=1;
           thus IExec(WH1,t).a7=ME by A2,A13,A15,A21;
          thus IExec(WH1,t).a4=m4+ME by A2,A13,A15,A21;
            thus ME <= t.a5 by A2;
             thus for i be Nat st m4+ME < i & i <=t.a4
                 holds IExec(WH1,t).intpos md < IExec(WH1,t).intpos i by A2;
             thus ME=0 or IExec(WH1,t).intpos md >=
               IExec(WH1,t).intpos (m4+ME) by A1,A16,A18,A21;
       end;
    end;
then A22: P[0];
A23: now
       let k be Nat;
       assume A24:P[k];
       now
       let t be State of SCMPDS;
       set b=DataLoc(t.a,5);
       assume A25: t.a=0 & t.a5 =(k+1)+1 & t.a4=m4+t.a5 & t.a2=md;
      set me=m4+(k+1+1);
         me>=m4 by NAT_1:29;
then A26:    me>=8 by A1,AXIOMS:22;
A27:    t.a5 >= 1 by A25,NAT_1:29;
then A28:    t.a5 > 0 by AXIOMS:22;
A29:    b=intpos (0+5) by A25,SCMP_GCD:5;
then A30:    t.b > 0 by A27,AXIOMS:22;
A31:    now let v be State of SCMPDS;
           assume A32: v.a4 >= m4+v.b & v.a2=t.a2 & v.a=t.a & v.b > 0;
               then A33: m4+v.b>m4+0 by REAL_1:53;
               then A34: v.a4 >=m4 by A32,AXIOMS:22;
                v.a4 > 0 by A1,A32,A33,AXIOMS:22;
               then reconsider ME=v.a4 as Nat by INT_1:16;
           A35: ME >= 8 by A1,A34,AXIOMS:22;
           then A36: (v.intpos md < v.intpos ME implies IExec(WB1,v).a5=v.a5-1
&
               IExec(WB1,v).a4=v.a4-1 & IExec(WB1,v).a7=v.a5-1) &
               (v.intpos md >= v.intpos ME implies IExec(WB1,v).a5=0 &
               IExec(WB1,v).a4=v.a4 & IExec(WB1,v).a7=v.a5)
               by A1,A25,A29,A32,Lm8;
          thus IExec(WB1,v).a=v.a by A1,A25,A29,A32,A35,Lm8;
          thus WB1 is_closed_on v & WB1 is_halting_on v by SCMPDS_6:34,35;
          hereby
              per cases;
              suppose A37:v.intpos md < v.intpos ME;
             hence IExec(WB1,v).b < v.b by A29,A36,INT_1:26;
                 m4+v.b-1=m4+IExec(WB1,v).b by A29,A36,A37,XCMPLX_1:29;
             hence IExec(WB1,v).a4 >= m4+IExec(WB1,v).b by A32,A36,A37,REAL_1:
49;
              suppose A38:v.intpos md >= v.intpos ME;
             hence IExec(WB1,v).b < v.b by A1,A25,A29,A32,A35,Lm8;
                  m4+IExec(WB1,v).b < m4+v.b by A29,A32,A36,A38,REAL_1:53;
              hence IExec(WB1,v).a4 >= m4+IExec(WB1,v).b by A32,A36,A38,AXIOMS:
22;
          end;
          thus IExec(WB1,v).a2=v.a2 by A1,A25,A29,A32,A35,Lm8;
        end;
       set It=IExec(WB1,t);
A39:    It.a=0 & It.a1=t.a1 & It.a2=t.a2 & It.a3=t.a3 &
       (for i be Nat st i >= 8 holds It.intpos i=t.intpos i) &
       (t.intpos md < t.intpos me implies It.a5=t.a5-1 &
         It.a4=t.a4-1 & It.a7=t.a5-1) &
       (t.intpos md >= t.intpos me implies It.a5=0 &
         It.a4=t.a4 & It.a7=t.a5) by A1,A25,A26,A28,Lm8;
then A40:  DataLoc(It.a,5)=intpos(0+5) by SCMP_GCD:5;
     per cases;
     suppose A41: t.intpos md < t.intpos me;
     then A42:  It.a5=k+1 by A25,A39,XCMPLX_1:26;
     A43:  It.a4=t.a4-1 by A1,A25,A26,A28,A41,Lm8;
     A44:  It.a4=m4+It.a5 by A25,A39,A41,XCMPLX_1:29;
     A45:  IExec(WH1,t)=IExec(WH1,It) by A25,A28,A29,A31,Lm7,Th5;
     hence IExec(WH1,t).a=0 by A24,A25,A39,A42,A44;
     thus IExec(WH1,t).a1=t.a1 by A24,A25,A39,A42,A44,A45;
     thus IExec(WH1,t).a5=0 by A24,A25,A39,A42,A44,A45;
     thus IExec(WH1,t).a2=t.a2 by A24,A25,A39,A42,A44,A45;
     thus IExec(WH1,t).a3=t.a3 by A24,A25,A39,A42,A44,A45;
     A46:  now let i be Nat;
             assume A47: i >= 8;
             hence IExec(WH1,t).intpos i=It.intpos i by A24,A25,A39,A42,A44,A45
              .=t.intpos i by A1,A25,A26,A28,A47,Lm8;
          end;
       hence for i be Nat st i >= 8 holds IExec(WH1,t).intpos i=t.intpos i;
          consider mE be Nat such that
      A48:  mE=IExec(WH1,It).a7 & IExec(WH1,It).a4=m4+mE & mE <= It.a5 &
           (for i be Nat st m4+mE < i & i <=It.a4 holds
           IExec(WH1,It).intpos md < IExec(WH1,It).intpos i) &
           (mE=0 or IExec(WH1,It).intpos md >= IExec(WH1,It).intpos (m4+mE))
            by A24,A25,A39,A42,A44;
            take mE;
      thus mE=IExec(WH1,t).a7 by A25,A29,A30,A31,A48,Lm7,Th5;
      thus IExec(WH1,t).a4=m4+mE by A25,A29,A30,A31,A48,Lm7,Th5;
              It.a5 < t.a5 by A39,A41,INT_1:26;
      hence mE <= t.a5 by A48,AXIOMS:22;
            hereby
               let i be Nat;
               assume A49: m4+mE < i & i <=t.a4;
               per cases;
               suppose A50: i=t.a4;
                  IExec(WH1,t).intpos me =t.intpos me by A26,A46;
             hence IExec(WH1,t).intpos md < IExec(WH1,t).intpos i by A1,A25,A41
,A46,A50;

               suppose i<>t.a4;
                  then i < t.a4 by A49,REAL_1:def 5;
                  then i+1 <= t.a4 by INT_1:20;
                  then i <= It.a4 by A43,REAL_1:84;
              hence IExec(WH1,t).intpos md < IExec(WH1,t).intpos i by A45,A48,
A49;
           end;
           thus mE=0 or
            IExec(WH1,t).intpos md >= IExec(WH1,t).intpos (m4+mE) by A45,A48;

   suppose A51: t.intpos md >= t.intpos me;
A52:    now let x;
           thus IExec(WH1,t).x =IExec(WH1,It).x by A25,A28,A29,A31,Lm7,Th5
             .=It.x by A39,A40,A51,SCMPDS_8:23;
       end;
      hence IExec(WH1,t).a=0 by A39;
      thus IExec(WH1,t).a1=t.a1 by A39,A52;
      thus IExec(WH1,t).a5=0 by A39,A51,A52;
      thus IExec(WH1,t).a2=t.a2 by A39,A52;
      thus IExec(WH1,t).a3=t.a3 by A39,A52;
A53:    now let i be Nat;
           assume A54: i >= 8;
           thus IExec(WH1,t).intpos i=It.intpos i by A52
           .=t.intpos i by A1,A25,A26,A28,A54,Lm8;
       end;
    hence for i be Nat st i >= 8 holds IExec(WH1,t).intpos i=t.intpos i;
A55:    IExec(WH1,t).intpos me=t.intpos me by A26,A53;
       take ME=k+1+1;
       thus IExec(WH1,t).a7=ME by A25,A39,A51,A52;
       thus IExec(WH1,t).a4=m4+ME by A25,A39,A51,A52;
       thus ME <= t.a5 by A25;
       thus for i be Nat st m4+ME < i & i <=t.a4 &
          not IExec(WH1,t).intpos md < IExec(WH1,t).intpos i
            holds contradiction by A25;
         thus ME=0 or IExec(WH1,t).intpos md >= IExec(WH1,t).intpos (m4+ME)
          by A1,A51,A53,A55;
     end;
     hence P[k+1];
    end;
A56: for k be Nat holds P[k] from Ind(A22,A23);
      s.a5 >=1+0 by A1,INT_1:20;
    then s.a5-1 >= 0 by SQUARE_1:12;
    then reconsider m5=s.a5-1 as Nat by INT_1:16;
  s.a5=m5+1 by XCMPLX_1:27;
    hence thesis by A1,A56;
end;

Lm10:
 for s being State of SCMPDS,m4,md be Nat st s.GBP=0 & s.a5 > 0
 & s.a4=m4+s.a5 & m4>=8 & s.a2=md & md >= 8 holds
   WH1 is_closed_on s & WH1 is_halting_on s
proof
    let s be State of SCMPDS,m4,md be Nat;
    assume A1: s.GBP=0 & s.a5 > 0 & s.a4=m4+s.a5 & m4>=8 &
           s.a2=md & md >= 8;
    set a=GBP;
    set b=DataLoc(s.a,5);
A2:  b=intpos (0+5) by A1,SCMP_GCD:5;
   now let v be State of SCMPDS;
           assume A3: v.a4 >= m4+v.b & v.a2=s.a2 & v.a=s.a & v.b > 0;
               then A4: m4+v.b>m4+0 by REAL_1:53;
               then A5: v.a4 >=m4 by A3,AXIOMS:22;
                v.a4 > 0 by A1,A3,A4,AXIOMS:22;
               then reconsider ME=v.a4 as Nat by INT_1:16;
           A6: ME >= 8 by A1,A5,AXIOMS:22;
           then A7: (v.intpos md < v.intpos ME implies IExec(WB1,v).a5=v.a5-1 &
               IExec(WB1,v).a4=v.a4-1 & IExec(WB1,v).a7=v.a5-1) &
               (v.intpos md >= v.intpos ME implies IExec(WB1,v).a5=0 &
               IExec(WB1,v).a4=v.a4 & IExec(WB1,v).a7=v.a5)
               by A1,A2,A3,Lm8;
          thus IExec(WB1,v).a=v.a by A1,A2,A3,A6,Lm8;
          thus WB1 is_closed_on v & WB1 is_halting_on v by SCMPDS_6:34,35;
          hereby
              per cases;
              suppose A8: v.intpos md < v.intpos ME;
             hence IExec(WB1,v).b < v.b by A2,A7,INT_1:26;
                 m4+v.b-1=m4+IExec(WB1,v).b by A2,A7,A8,XCMPLX_1:29;
             hence IExec(WB1,v).a4 >= m4+IExec(WB1,v).b by A3,A7,A8,REAL_1:49
;
              suppose A9:v.intpos md >= v.intpos ME;
             hence IExec(WB1,v).b < v.b by A1,A2,A3,A6,Lm8;
                  m4+IExec(WB1,v).b < m4+v.b by A2,A3,A7,A9,REAL_1:53;
              hence IExec(WB1,v).a4 >= m4+IExec(WB1,v).b by A3,A7,A9,AXIOMS:22
;
          end;
          thus IExec(WB1,v).a2=v.a2 by A1,A2,A3,A6,Lm8;
     end;
     hence thesis by A1,A2,Lm7,Th5;
end;

Lm11:
  card WH1=11
proof
   thus card WH1=9+2 by Lm7,SCMPDS_8:17
      .=11;
end;

Lm12:
  card WB2=9
proof
   thus card WB2= card (j1 ';' j2 ';' j3 ';' j4) + card IF2 by SCMPDS_4:45
      .= 4+card IF2 by Th4
      .= 4+(card (j5 ';' j6) +card j7+2) by SCMPDS_6:79
      .= 4+(2+card j7+2) by SCMP_GCD:9
      .= 4+(2+1+2) by SCMPDS_5:6
      .= 9;
end;

Lm13:
  card WH2=11
proof
   thus card WH2= 9+2 by Lm12,SCMPDS_8:17
      .=11;
end;

Lm14:
  for s being State of SCMPDS,md,me be Nat st s.a2=md & s.a3=me &
  md >= 8 & me >= 8 & s.GBP=0 & s.a7 > 0 holds
  IExec(WB2,s).GBP=0 & IExec(WB2,s).a1=s.a1 &
  IExec(WB2,s).a2=s.a2 & IExec(WB2,s).a4=s.a4 &
  (for i be Nat st i >= 8 holds IExec(WB2,s).intpos i=s.intpos i) &
  (s.intpos md > s.intpos me implies IExec(WB2,s).a7=s.a7-1 &
  IExec(WB2,s).a3=s.a3+1 & IExec(WB2,s).a5=s.a7-1) &
  (s.intpos md <= s.intpos me implies IExec(WB2,s).a7=0 &
  IExec(WB2,s).a3=s.a3 & IExec(WB2,s).a5=s.a7)
proof
   let s be State of SCMPDS,md,me be Nat;
   set a=GBP;
   assume A1: s.a2=md & s.a3=me & md >= 8 & me >= 8 & s.a=0 & s.a7 > 0;
   set t0=Initialized s,
       t1=IExec(j1 ';' j2 ';' j3 ';' j4,s),
       t2=IExec(j1 ';' j2 ';' j3,s),
       t3=IExec(j1 ';' j2,s),
       t4=Exec(j1, t0);
A2: t0.a=0 by A1,SCMPDS_5:40;
A3: t0.a1=s.a1 by SCMPDS_5:40;
A4: t0.a2=md by A1,SCMPDS_5:40;
A5: t0.a4=s.a4 by SCMPDS_5:40;
A6: t0.a3=me by A1,SCMPDS_5:40;
A7: t0.a7=s.a7 by SCMPDS_5:40;

A8:  DataLoc(t0.a,5)=intpos (0+5) by A2,SCMP_GCD:5;
     then a<>DataLoc(t0.a,5) by SCMP_GCD:4,def 2;
then A9: t4.a =0 by A2,SCMPDS_2:59;
       a1<>DataLoc(t0.a,5) by A8,SCMP_GCD:4;
then A10: t4.a1 =s.a1 by A3,SCMPDS_2:59;
       a2<>DataLoc(t0.a,5) by A8,SCMP_GCD:4;
then A11: t4.a2 =md by A4,SCMPDS_2:59;
       a4<>DataLoc(t0.a,5) by A8,SCMP_GCD:4;
then A12: t4.a4 =s.a4 by A5,SCMPDS_2:59;
   a3<>DataLoc(t0.a,5) by A8,SCMP_GCD:4;
then A13: t4.a3 =me by A6,SCMPDS_2:59;
       a7<>DataLoc(t0.a,5) by A8,SCMP_GCD:4;
then A14: t4.a7 =s.a7 by A7,SCMPDS_2:59;
   DataLoc(t0.a,7)=intpos (0+7) by A2,SCMP_GCD:5;
then A15: t4.a5 =s.a7 by A7,A8,SCMPDS_2:59;
A16: now let i be Nat;
        assume i>=8;
        then i > 5 by AXIOMS:22;
    then intpos i <> DataLoc(t0.a,5) by A8,SCMP_GCD:4;
        hence t4.intpos i=t0.intpos i by SCMPDS_2:59
          .=s.intpos i by SCMPDS_5:40;
     end;

A17:  DataLoc(t4.a,7)=intpos (0+7) by A9,SCMP_GCD:5;
then A18:  a<>DataLoc(t4.a,7) by SCMP_GCD:4,def 2;
A19: t3.a =Exec(j2, t4).a by SCMPDS_5:47
     .=0 by A9,A18,SCMPDS_2:60;
A20:  a1<>DataLoc(t4.a,7) by A17,SCMP_GCD:4;
A21: t3.a1 =Exec(j2, t4).a1 by SCMPDS_5:47
     .=s.a1 by A10,A20,SCMPDS_2:60;
A22:  a2<>DataLoc(t4.a,7) by A17,SCMP_GCD:4;
A23: t3.a2 =Exec(j2, t4).a2 by SCMPDS_5:47
     .=md by A11,A22,SCMPDS_2:60;
A24:  a4<>DataLoc(t4.a,7) by A17,SCMP_GCD:4;
A25: t3.a4 =Exec(j2, t4).a4 by SCMPDS_5:47
     .=s.a4 by A12,A24,SCMPDS_2:60;
A26:  a3<>DataLoc(t4.a,7) by A17,SCMP_GCD:4;
A27: t3.a3 =Exec(j2, t4).a3 by SCMPDS_5:47
     .=me by A13,A26,SCMPDS_2:60;
A28: t3.a7 =Exec(j2, t4).a7 by SCMPDS_5:47
     .=t4.a7+ -1 by A17,SCMPDS_2:60
     .=s.a7-1 by A14,XCMPLX_0:def 8;
A29:  a5<>DataLoc(t4.a,7) by A17,SCMP_GCD:4;
A30: t3.a5 =Exec(j2, t4).a5 by SCMPDS_5:47
     .=s.a7 by A15,A29,SCMPDS_2:60;
A31: now let i be Nat;
        assume A32:i>=8;
        then i > 7 by AXIOMS:22;
    then A33: intpos i <> DataLoc(t4.a,7) by A17,SCMP_GCD:4;
    thus t3.intpos i =Exec(j2, t4).intpos i by SCMPDS_5:47
          .=t4.intpos i by A33,SCMPDS_2:60
          .=s.intpos i by A16,A32;
      end;

A34:  DataLoc(t3.a,6)=intpos (0+6) by A19,SCMP_GCD:5;
then A35:  a<>DataLoc(t3.a,6) by SCMP_GCD:4,def 2;
A36: t2.a =Exec(j3, t3).a by SCMPDS_5:46
     .=0 by A19,A35,SCMPDS_2:59;
A37:  a1<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A38: t2.a1 =Exec(j3, t3).a1 by SCMPDS_5:46
     .=s.a1 by A21,A37,SCMPDS_2:59;
A39:  a2<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A40: t2.a2 =Exec(j3, t3).a2 by SCMPDS_5:46
     .=md by A23,A39,SCMPDS_2:59;
A41:  a4<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A42: t2.a4 =Exec(j3, t3).a4 by SCMPDS_5:46
     .=s.a4 by A25,A41,SCMPDS_2:59;
A43:  a3<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A44: t2.a3 =Exec(j3, t3).a3 by SCMPDS_5:46
     .=me by A27,A43,SCMPDS_2:59;
A45:  a7<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A46: t2.a7 =Exec(j3, t3).a7 by SCMPDS_5:46
     .=s.a7-1 by A28,A45,SCMPDS_2:59;
A47:  DataLoc(t3.a2,0)=intpos (md+0) by A23,SCMP_GCD:5;
A48: t2.a6 =Exec(j3, t3).a6 by SCMPDS_5:46
     .=t3.intpos md by A34,A47,SCMPDS_2:59
     .=s.intpos md by A1,A31;
A49:  a5<>DataLoc(t3.a,6) by A34,SCMP_GCD:4;
A50: t2.a5 =Exec(j3, t3).a5 by SCMPDS_5:46
     .=s.a7 by A30,A49,SCMPDS_2:59;
A51: now let i be Nat;
        assume A52:i>=8;
        then i > 6 by AXIOMS:22;
    then A53: intpos i <> DataLoc(t3.a,6) by A34,SCMP_GCD:4;
        thus t2.intpos i=Exec(j3, t3).intpos i by SCMPDS_5:46
        .=t3.intpos i by A53,SCMPDS_2:59
        .=s.intpos i by A31,A52;
     end;

A54:  DataLoc(t2.a,6)=intpos (0+6) by A36,SCMP_GCD:5;
then A55:  a<>DataLoc(t2.a,6) by SCMP_GCD:4,def 2;
A56: t1.a =Exec(j4, t2).a by SCMPDS_5:46
     .=0 by A36,A55,SCMPDS_2:62;
A57:  a1<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A58: t1.a1 =Exec(j4, t2).a1 by SCMPDS_5:46
     .=s.a1 by A38,A57,SCMPDS_2:62;
A59:  a2<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A60: t1.a2 =Exec(j4, t2).a2 by SCMPDS_5:46
     .=md by A40,A59,SCMPDS_2:62;
A61:  a4<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A62: t1.a4 =Exec(j4, t2).a4 by SCMPDS_5:46
     .=s.a4 by A42,A61,SCMPDS_2:62;
A63:  a3<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A64: t1.a3 =Exec(j4, t2).a3 by SCMPDS_5:46
     .=me by A44,A63,SCMPDS_2:62;
A65:  a7<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A66: t1.a7 =Exec(j4, t2).a7 by SCMPDS_5:46
     .=s.a7-1 by A46,A65,SCMPDS_2:62;
A67: t1.a6 =Exec(j4, t2).a6 by SCMPDS_5:46
     .=t2.a6-t2.DataLoc(t2.a3,0) by A54,SCMPDS_2:62
     .=t2.a6-t2.intpos(me+0) by A44,SCMP_GCD:5
     .=s.intpos md - s.intpos me by A1,A48,A51;
A68:  a5<>DataLoc(t2.a,6) by A54,SCMP_GCD:4;
A69: t1.a5 =Exec(j4, t2).a5 by SCMPDS_5:46
     .=s.a7 by A50,A68,SCMPDS_2:62;
A70: now let i be Nat;
        assume A71:i>=8;
        then i > 6 by AXIOMS:22;
    then A72: intpos i <> DataLoc(t2.a,6) by A54,SCMP_GCD:4;
        thus t1.intpos i=Exec(j4, t2).intpos i by SCMPDS_5:46
        .=t2.intpos i by A72,SCMPDS_2:62
        .=s.intpos i by A51,A71;
     end;

     set t01=Initialized t1,
         jj7= (GBP,7):=0,
         t5=Exec(j5,t01);
A73: t01.a=0 by A56,SCMPDS_5:40;
A74: t01.a1=s.a1 by A58,SCMPDS_5:40;
A75: t01.a2=s.a2 by A1,A60,SCMPDS_5:40;
A76: t01.a4=s.a4 by A62,SCMPDS_5:40;
A77: t01.a5=s.a7 by A69,SCMPDS_5:40;
A78:  DataLoc(t01.a,7)=intpos(0+7) by A73,SCMP_GCD:5;
A79:  DataLoc(t01.a,3)=intpos(0+3) by A73,SCMP_GCD:5;
     then a<>DataLoc(t01.a,3) by SCMP_GCD:4,def 2;
then A80: t5.a=0 by A73,SCMPDS_2:60;
       a1<>DataLoc(t01.a,3) by A79,SCMP_GCD:4;
then A81: t5.a1=s.a1 by A74,SCMPDS_2:60;
       a2<>DataLoc(t01.a,3) by A79,SCMP_GCD:4;
then A82: t5.a2=s.a2 by A75,SCMPDS_2:60;
       a4<>DataLoc(t01.a,3) by A79,SCMP_GCD:4;
then A83: t5.a4=s.a4 by A76,SCMPDS_2:60;
A84:  DataLoc(t5.a,5)=intpos(0+5) by A80,SCMP_GCD:5;

A85:  now
         per cases;
         suppose A86: t1.DataLoc(t1.a,6) <= 0;
         A87:  a<>DataLoc(t01.a,7) by A78,SCMP_GCD:4,def 2;
         thus IExec(IF2,t1).a=IExec(j7,t1).a by A86,SCMPDS_6:88
              .=Exec(jj7,t01).a by SCMPDS_5:45
              .=0 by A73,A87,SCMPDS_2:58;
         A88:  a1<>DataLoc(t01.a,7) by A78,SCMP_GCD:4;
         thus IExec(IF2,t1).a1=IExec(j7,t1).a1 by A86,SCMPDS_6:88
              .=Exec(jj7,t01).a1 by SCMPDS_5:45
              .=s.a1 by A74,A88,SCMPDS_2:58;
         A89:  a2<>DataLoc(t01.a,7) by A78,SCMP_GCD:4;
         thus IExec(IF2,t1).a2=IExec(j7,t1).a2 by A86,SCMPDS_6:88
              .=Exec(jj7,t01).a2 by SCMPDS_5:45
              .=s.a2 by A75,A89,SCMPDS_2:58;
         A90:  a4<>DataLoc(t01.a,7) by A78,SCMP_GCD:4;
         thus IExec(IF2,t1).a4=IExec(j7,t1).a4 by A86,SCMPDS_6:88
              .=Exec(jj7,t01).a4 by SCMPDS_5:45
              .=s.a4 by A76,A90,SCMPDS_2:58;
         hereby let i be Nat;
              assume A91:i>=8;
                then i > 7 by AXIOMS:22;
            then A92: intpos i <> DataLoc(t01.a,7) by A78,SCMP_GCD:4;
        thus IExec(WB2,s).intpos i=IExec(IF2,t1).intpos i by SCMPDS_5:39
              .=IExec(j7,t1).intpos i by A86,SCMPDS_6:88
              .=Exec(jj7,t01).intpos i by SCMPDS_5:45
              .=t01.intpos i by A92,SCMPDS_2:58
              .=t1.intpos i by SCMPDS_5:40
              .=s.intpos i by A70,A91;
        end;

         suppose A93: t1.DataLoc(t1.a,6) > 0;
          A94: a<>DataLoc(t5.a,5) by A84,SCMP_GCD:4,def 2;
         thus IExec(IF2,t1).a=IExec(j5 ';' j6,t1).a by A93,SCMPDS_6:87
              .=Exec(j6,t5).a by SCMPDS_5:47
              .=0 by A80,A94,SCMPDS_2:60;
         A95:  a1<>DataLoc(t5.a,5) by A84,SCMP_GCD:4;
         thus IExec(IF2,t1).a1=IExec(j5 ';' j6,t1).a1 by A93,SCMPDS_6:87
              .=Exec(j6,t5).a1 by SCMPDS_5:47
              .=s.a1 by A81,A95,SCMPDS_2:60;
         A96:  a2<>DataLoc(t5.a,5) by A84,SCMP_GCD:4;
         thus IExec(IF2,t1).a2=IExec(j5 ';' j6,t1).a2 by A93,SCMPDS_6:87
              .=Exec(j6,t5).a2 by SCMPDS_5:47
              .=s.a2 by A82,A96,SCMPDS_2:60;
         A97:  a4<>DataLoc(t5.a,5) by A84,SCMP_GCD:4;
         thus IExec(IF2,t1).a4=IExec(j5 ';' j6,t1).a4 by A93,SCMPDS_6:87
              .=Exec(j6,t5).a4 by SCMPDS_5:47
              .=s.a4 by A83,A97,SCMPDS_2:60;
         hereby let i be Nat;
              assume A98:i>=8;
                then i > 5 by AXIOMS:22;
            then A99: intpos i <> DataLoc(t5.a,5) by A84,SCMP_GCD:4;
                  i > 3 by A98,AXIOMS:22;
            then A100: intpos i<>DataLoc(t01.a,3) by A79,SCMP_GCD:4;
        thus IExec(WB2,s).intpos i=IExec(IF2,t1).intpos i by SCMPDS_5:39
              .=IExec(j5 ';' j6,t1).intpos i by A93,SCMPDS_6:87
              .=Exec(j6,t5).intpos i by SCMPDS_5:47
              .=t5.intpos i by A99,SCMPDS_2:60
              .=t01.intpos i by A100,SCMPDS_2:60
              .=t1.intpos i by SCMPDS_5:40
              .=s.intpos i by A70,A98;
        end;
     end;
     hence IExec(WB2,s).a=0 & IExec(WB2,s).a1=s.a1 &
        IExec(WB2,s).a2=s.a2 & IExec(WB2,s).a4=s.a4 by SCMPDS_5:39;
   thus for i be Nat st i >= 8 holds IExec(WB2,s).intpos i=s.intpos i by A85;
A101:  t1.DataLoc(t1.a,6)=t1.intpos (0+6) by A56,SCMP_GCD:5
      .=s.intpos md - s.intpos me by A67;
A102: t01.a3=s.a3 by A1,A64,SCMPDS_5:40;
A103: t01.a7=s.a7-1 by A66,SCMPDS_5:40;
      hereby
        assume s.intpos md > s.intpos me;
         then A104: t1.DataLoc(t1.a,6) > 0 by A101,SQUARE_1:11;
         A105:  a7<>DataLoc(t01.a,3) by A79,SCMP_GCD:4;
         A106:  a7<>DataLoc(t5.a,5) by A84,SCMP_GCD:4;
        thus IExec(WB2,s).a7=IExec(IF2,t1).a7 by SCMPDS_5:39
              .=IExec(j5 ';' j6,t1).a7 by A104,SCMPDS_6:87
              .=Exec(j6,t5).a7 by SCMPDS_5:47
              .=t5.a7 by A106,SCMPDS_2:60
               .=s.a7-1 by A103,A105,SCMPDS_2:60;
         A107:  a3<>DataLoc(t5.a,5) by A84,SCMP_GCD:4;
        thus IExec(WB2,s).a3=IExec(IF2,t1).a3 by SCMPDS_5:39
              .=IExec(j5 ';' j6,t1).a3 by A104,SCMPDS_6:87
              .=Exec(j6,t5).a3 by SCMPDS_5:47
              .=t5.a3 by A107,SCMPDS_2:60
              .=s.a3+1 by A79,A102,SCMPDS_2:60;
         A108:  a5<>DataLoc(t01.a,3) by A79,SCMP_GCD:4;
        thus IExec(WB2,s).a5=IExec(IF2,t1).a5 by SCMPDS_5:39
              .=IExec(j5 ';' j6,t1).a5 by A104,SCMPDS_6:87
              .=Exec(j6,t5).a5 by SCMPDS_5:47
              .=t5.a5+ -1 by A84,SCMPDS_2:60
              .=t5.a5-1 by XCMPLX_0:def 8
              .=s.a7-1 by A77,A108,SCMPDS_2:60;
      end;
      hereby
        assume s.intpos md <= s.intpos me;
        then A109: t1.DataLoc(t1.a,6) <= 0 by A101,REAL_2:106;
        thus IExec(WB2,s).a7=IExec(IF2,t1).a7 by SCMPDS_5:39
              .=IExec(j7,t1).a7 by A109,SCMPDS_6:88
              .=Exec(jj7,t01).a7 by SCMPDS_5:45
              .=0 by A78,SCMPDS_2:58;
         A110:  a3<>DataLoc(t01.a,7) by A78,SCMP_GCD:4;
        thus IExec(WB2,s).a3=IExec(IF2,t1).a3 by SCMPDS_5:39
              .=IExec(j7,t1).a3 by A109,SCMPDS_6:88
              .=Exec(jj7,t01).a3 by SCMPDS_5:45
              .=s.a3 by A102,A110,SCMPDS_2:58;
         A111:  a5<>DataLoc(t01.a,7) by A78,SCMP_GCD:4;
         thus IExec(WB2,s).a5=IExec(IF2,t1).a5 by SCMPDS_5:39
              .=IExec(j7,t1).a5 by A109,SCMPDS_6:88
              .=Exec(jj7,t01).a5 by SCMPDS_5:45
              .=s.a7 by A77,A111,SCMPDS_2:58;
      end;
end;

Lm15:
 for s being State of SCMPDS,m3,md be Nat st s.GBP=0 & s.a7 > 0
 & s.a3+s.a7=m3 & s.a3>=8 & s.a2=md & md >= 8 holds IExec(WH2,s).GBP=0 &
  IExec(WH2,s).a1=s.a1 & IExec(WH2,s).a7=0 &
  IExec(WH2,s).a2=s.a2 & IExec(WH2,s).a4=s.a4 &
  (for i be Nat st i >= 8 holds IExec(WH2,s).intpos i=s.intpos i) &
  ex m5,mE3 be Nat st m5=IExec(WH2,s).a5 & IExec(WH2,s).a3=mE3 &
  mE3+m5=m3 & m5 <= s.a7 & (for i be Nat st s.a3 <= i & i < mE3 holds
     IExec(WH2,s).intpos md > IExec(WH2,s).intpos i) &
     (m5 = 0 or IExec(WH2,s).intpos md <= IExec(WH2,s).intpos mE3)
proof
    let s be State of SCMPDS,m3,md be Nat;
    set a=GBP;
    assume A1: s.a=0 & s.a7 > 0 & s.a3+s.a7=m3 & s.a3>=8 & s.a2=md
          & md >= 8;

    defpred P[Nat] means
    for t being State of SCMPDS st t.a=0 & t.a7 =$1+1 & t.a3+t.a7=m3 &
     t.a3>=8 & t.a2=md holds IExec(WH2,t).a=0 & IExec(WH2,t).a1=t.a1 &
     IExec(WH2,t).a7=0 & IExec(WH2,t).a2=t.a2 & IExec(WH2,t).a4=t.a4 &
     (for i be Nat st i >= 8 holds IExec(WH2,t).intpos i=t.intpos i) &
 ex m5,mE3 be Nat st m5=IExec(WH2,t).a5 & IExec(WH2,t).a3=mE3 &
   mE3+m5=m3 & m5 <= t.a7 & (for i be Nat st t.a3 <= i & i < mE3 holds
     IExec(WH2,t).intpos md > IExec(WH2,t).intpos i) &
     (m5=0 or IExec(WH2,t).intpos md <= IExec(WH2,t).intpos mE3);
       now
       let t be State of SCMPDS;
       set b=DataLoc(t.a,7);
       assume A2: t.a=0 & t.a7 =0+1 & t.a3+t.a7=m3 & t.a3>=8 & t.a2=md;
       then t.a3 >= 0 by AXIOMS:22;
       then reconsider me=t.a3 as Nat by INT_1:16;
A3:    me=t.a3;
A4:    b=intpos (0+7) by A2,SCMP_GCD:5;
A5:    now let v be State of SCMPDS;
           assume A6: v.a3 >= 8 & v.a2=t.a2 & v.a=t.a & v.b > 0;
               then v.a3 > 0 by AXIOMS:22;
               then reconsider ME=v.a3 as Nat by INT_1:16;
           A7: ME=v.a3;
           A8: (v.intpos md > v.intpos ME implies IExec(WB2,v).a7=v.a7-1 &
               IExec(WB2,v).a3=v.a3+1 & IExec(WB2,v).a5=v.a7-1) &
               (v.intpos md <= v.intpos ME implies IExec(WB2,v).a7=0 &
               IExec(WB2,v).a3=v.a3 & IExec(WB2,v).a5=v.a7)
               by A1,A2,A4,A6,Lm14;
           thus IExec(WB2,v).a=v.a by A1,A2,A4,A6,A7,Lm14;
           thus WB2 is_closed_on v & WB2 is_halting_on v by SCMPDS_6:34,35;
           hereby
              per cases;
              suppose A9: v.intpos md > v.intpos ME;
             hence IExec(WB2,v).b < v.b by A4,A8,INT_1:26;
               A10: IExec(WB2,v).a3=v.a3+1 by A1,A2,A4,A6,A9,Lm14;
                     v.a3 +1 > v.a3 by REAL_1:69;
             hence IExec(WB2,v).a3 >= 8 by A6,A10,AXIOMS:22;
              suppose A11:v.intpos md <= v.intpos ME;
              hence IExec(WB2,v).b < v.b by A1,A2,A4,A6,Lm14;
              thus IExec(WB2,v).a3 >= 8 by A1,A2,A4,A6,A11,Lm14;
           end;
           thus IExec(WB2,v).a2=v.a2 by A1,A2,A4,A6,A7,Lm14;
        end;
       set It=IExec(WB2,t);
A12:    It.a=0 & It.a1=t.a1 & It.a2=t.a2 & It.a4=t.a4 &
       (for i be Nat st i >= 8 holds It.intpos i=t.intpos i) &
       (t.intpos md > t.intpos me implies It.a7=t.a7-1 &
         It.a3=t.a3+1 & It.a5=t.a7-1) &
       (t.intpos md <= t.intpos me implies It.a7=0 &
         It.a3=t.a3 & It.a5=t.a7) by A1,A2,A3,Lm14;
then A13:  It.DataLoc(It.a,7)=It.intpos(0+7) by SCMP_GCD:5
     .=0 by A2,A12;
A14:  now let x;
           thus IExec(WH2,t).x =IExec(WH2,It).x by A2,A4,A5,Lm12,Th6
             .=It.x by A13,SCMPDS_8:23;
     end;
     hence IExec(WH2,t).a=0 by A12;
     thus IExec(WH2,t).a1=t.a1 by A12,A14;
     thus IExec(WH2,t).a7=0 by A2,A12,A14;
     thus IExec(WH2,t).a2=t.a2 by A12,A14;
     thus IExec(WH2,t).a4=t.a4 by A12,A14;
A15:  now let i be Nat;
           assume A16: i >= 8;
           thus IExec(WH2,t).intpos i=It.intpos i by A14
           .=t.intpos i by A1,A2,A3,A16,Lm14;
       end;
    hence for i be Nat st i >= 8 holds IExec(WH2,t).intpos i=t.intpos i;
A17:    IExec(WH2,t).intpos me=t.intpos me by A2,A15;
       hereby
           per cases;
           suppose A18: t.intpos md > t.intpos me;
             take m5=0;
             take mE3=m3;
           thus IExec(WH2,t).a5=m5 by A2,A12,A14,A18;
           thus IExec(WH2,t).a3 =mE3 by A2,A12,A14,A18;
           thus mE3+m5=m3;
           thus m5 <= t.a7 by A2;
            hereby
                 let i be Nat;
                 assume A19: t.a3 <= i & i < mE3;
                 then i <= me by A2,NAT_1:38;
             then i=t.a3 by A19,AXIOMS:21;
             hence IExec(WH2,t).intpos md > IExec(WH2,t).intpos i by A1,A15,A17
,A18;
           end;
             thus
               m5=0 or IExec(WH2,t).intpos md <= IExec(WH2,t).intpos mE3;

           suppose A20: t.intpos md <= t.intpos me;
             take m5=1;
             take mE3=me;
           thus IExec(WH2,t).a5=m5 by A2,A12,A14,A20;
          thus IExec(WH2,t).a3=mE3 by A12,A14,A20;
           thus mE3+m5=m3 by A2;
           thus m5 <= t.a7 by A2;
           thus for i be Nat st t.a3 <= i & i < mE3
                 holds IExec(WH2,t).intpos md > IExec(WH2,t).intpos i;
            thus m5=0 or IExec(WH2,t).intpos md <= IExec(WH2,t).intpos mE3
               by A1,A15,A17,A20;
       end;
    end;
then A21: P[0];
A22: now
       let k be Nat;
       assume A23:P[k];
       now
       let t be State of SCMPDS;
       set b=DataLoc(t.a,7);
       assume A24: t.a=0 & t.a7 =(k+1)+1 & t.a3+t.a7=m3 & t.a3>=8 & t.a2=md;
       then t.a3 >= 0 by AXIOMS:22;
       then reconsider me=t.a3 as Nat by INT_1:16;
A25:    me=t.a3;
A26:    b=intpos (0+7) by A24,SCMP_GCD:5;
A27:    t.a7 >= 1 by A24,NAT_1:29;
then A28:    t.a7 > 0 by AXIOMS:22;
A29:    t.b > 0 by A26,A27,AXIOMS:22;
A30:    now let v be State of SCMPDS;
           assume A31: v.a3 >= 8 & v.a2=t.a2 & v.a=t.a & v.b > 0;
               then v.a3 > 0 by AXIOMS:22;
               then reconsider ME=v.a3 as Nat by INT_1:16;
           A32: ME=v.a3;
           A33: (v.intpos md > v.intpos ME implies IExec(WB2,v).a7=v.a7-1 &
               IExec(WB2,v).a3=v.a3+1 & IExec(WB2,v).a5=v.a7-1) &
               (v.intpos md <= v.intpos ME implies IExec(WB2,v).a7=0 &
               IExec(WB2,v).a3=v.a3 & IExec(WB2,v).a5=v.a7)
               by A1,A24,A26,A31,Lm14;
           thus IExec(WB2,v).a=v.a by A1,A24,A26,A31,A32,Lm14;
           thus WB2 is_closed_on v & WB2 is_halting_on v by SCMPDS_6:34,35;
           hereby
              per cases;
              suppose A34: v.intpos md > v.intpos ME;
             hence IExec(WB2,v).b < v.b by A26,A33,INT_1:26;
               A35: IExec(WB2,v).a3=v.a3+1 by A1,A24,A26,A31,A34,Lm14;
                     v.a3 +1 > v.a3 by REAL_1:69;
             hence IExec(WB2,v).a3 >= 8 by A31,A35,AXIOMS:22;
              suppose A36:v.intpos md <= v.intpos ME;
              hence IExec(WB2,v).b < v.b by A1,A24,A26,A31,Lm14;
              thus IExec(WB2,v).a3 >= 8 by A1,A24,A26,A31,A36,Lm14;
           end;
           thus IExec(WB2,v).a2=v.a2 by A1,A24,A26,A31,A32,Lm14;
        end;
       set It=IExec(WB2,t);
A37:    It.a=0 & It.a1=t.a1 & It.a2=t.a2 & It.a4=t.a4 &
       (for i be Nat st i >= 8 holds It.intpos i=t.intpos i) &
       (t.intpos md > t.intpos me implies It.a7=t.a7-1 &
         It.a3=t.a3+1 & It.a5=t.a7-1) &
       (t.intpos md <= t.intpos me implies It.a7=0 &
         It.a3=t.a3 & It.a5=t.a7) by A1,A24,A25,A28,Lm14;
then A38:  DataLoc(It.a,7)=intpos(0+7) by SCMP_GCD:5;
     per cases;
     suppose A39: t.intpos md > t.intpos me;
     then A40:  It.a7=k+1 by A24,A37,XCMPLX_1:26;
     A41:  It.a3=t.a3+1 by A1,A24,A28,A39,Lm14;
            t.a3 < It.a3 by A37,A39,REAL_1:69;
     then A42:  It.a3 >= 8 by A24,AXIOMS:22;
     A43: It.a3+It.a7=m3 by A24,A37,A40,XCMPLX_1:1;
     A44:  IExec(WH2,t)=IExec(WH2,It) by A24,A26,A28,A30,Lm12,Th6;
     hence IExec(WH2,t).a=0 by A23,A24,A37,A40,A42,A43;
     thus IExec(WH2,t).a1=t.a1 by A23,A24,A37,A40,A42,A43,A44;
     thus IExec(WH2,t).a7=0 by A23,A24,A37,A40,A42,A43,A44;
     thus IExec(WH2,t).a2=t.a2 by A23,A24,A37,A40,A42,A43,A44;
     thus IExec(WH2,t).a4=t.a4 by A23,A24,A37,A40,A42,A43,A44;
     A45:  now let i be Nat;
             assume A46: i >= 8;
             hence IExec(WH2,t).intpos i=It.intpos i by A23,A24,A37,A40,A42,A43
,A44
              .=t.intpos i by A1,A24,A25,A28,A46,Lm14;
          end;
       hence for i be Nat st i >= 8 holds IExec(WH2,t).intpos i=t.intpos i;
          consider m5,mE3 be Nat such that
      A47: m5=IExec(WH2,It).a5 & IExec(WH2,It).a3=mE3 & mE3+m5=m3 &
          m5 <= It.a7 & (for i be Nat st It.a3 <= i & i < mE3 holds
          IExec(WH2,It).intpos md > IExec(WH2,It).intpos i) &
          (m5=0 or IExec(WH2,It).intpos md <= IExec(WH2,It).intpos mE3)
            by A23,A24,A37,A40,A42,A43;
            take m5;
            take mE3;
      thus m5=IExec(WH2,t).a5 by A24,A29,A30,A47,Lm12,Th6;
      thus IExec(WH2,t).a3=mE3 by A24,A29,A30,A47,Lm12,Th6;
      thus mE3+m5=m3 by A47;
              It.a7 < t.a7 by A37,A39,INT_1:26;
      hence m5 <= t.a7 by A47,AXIOMS:22;
            hereby
               let i be Nat;
               assume A48: t.a3 <= i & i < mE3;
               per cases;
               suppose A49: i=t.a3;
                  IExec(WH2,t).intpos me =t.intpos me by A24,A45;
             hence IExec(WH2,t).intpos md > IExec(WH2,t).intpos i by A1,A39,A45
,A49;

               suppose i<>t.a3;
                  then t.a3 < i by A48,REAL_1:def 5;
                  then It.a3 <= i by A41,INT_1:20;
              hence IExec(WH2,t).intpos md > IExec(WH2,t).intpos i by A44,A47,
A48;
           end;
           thus m5=0 or
            IExec(WH2,t).intpos md <= IExec(WH2,t).intpos mE3 by A44,A47;

   suppose A50: t.intpos md <= t.intpos me;
A51:    now let x;
           thus IExec(WH2,t).x =IExec(WH2,It).x by A24,A26,A28,A30,Lm12,Th6
             .=It.x by A37,A38,A50,SCMPDS_8:23;
       end;
      hence IExec(WH2,t).a=0 by A37;
      thus IExec(WH2,t).a1=t.a1 by A37,A51;
      thus IExec(WH2,t).a7=0 by A37,A50,A51;
      thus IExec(WH2,t).a2=t.a2 by A37,A51;
      thus IExec(WH2,t).a4=t.a4 by A37,A51;
A52:    now let i be Nat;
           assume A53: i >= 8;
           thus IExec(WH2,t).intpos i=It.intpos i by A51
           .=t.intpos i by A1,A24,A25,A28,A53,Lm14;
       end;
    hence for i be Nat st i >= 8 holds IExec(WH2,t).intpos i=t.intpos i;
A54:    IExec(WH2,t).intpos me=t.intpos me by A24,A52;
       take m5=k+1+1;
       take mE3=me;
       thus IExec(WH2,t).a5=m5 by A24,A37,A50,A51;
       thus IExec(WH2,t).a3=mE3 by A37,A50,A51;
      thus mE3+m5=m3 by A24;
       thus m5 <= t.a7 by A24;
       thus for i be Nat st t.a3 <= i & i < mE3
         holds IExec(WH2,t).intpos md > IExec(WH2,t).intpos i;
       thus m5=0 or IExec(WH2,t).intpos md <= IExec(WH2,t).intpos mE3
          by A1,A50,A52,A54;
     end;
     hence P[k+1];
    end;
A55: for k be Nat holds P[k] from Ind(A21,A22);
      s.a7 >=1+0 by A1,INT_1:20;
    then s.a7-1 >= 0 by SQUARE_1:12;
    then reconsider m7=s.a7-1 as Nat by INT_1:16;
  s.a7=m7+1 by XCMPLX_1:27;
    hence thesis by A1,A55;
end;

Lm16:
 for s being State of SCMPDS,md be Nat st s.GBP=0 & s.a7 > 0 &
   s.a3>=8 & s.a2=md & md >= 8 holds
   WH2 is_closed_on s & WH2 is_halting_on s
proof
    let s be State of SCMPDS,md be Nat;
    set a=GBP;
    set b=DataLoc(s.a,7);
    assume A1: s.a=0 & s.a7 > 0 & s.a3>=8 & s.a2=md & md >= 8;
then A2:  b=intpos (0+7) by SCMP_GCD:5;
   now let v be State of SCMPDS;
         assume A3: v.a3 >= 8 & v.a2=s.a2 & v.a=s.a & v.b > 0;
               then v.a3 > 0 by AXIOMS:22;
               then reconsider ME=v.a3 as Nat by INT_1:16;
           A4: ME=v.a3;
           A5: (v.intpos md > v.intpos ME implies IExec(WB2,v).a7=v.a7-1 &
               IExec(WB2,v).a3=v.a3+1 & IExec(WB2,v).a5=v.a7-1) &
               (v.intpos md <= v.intpos ME implies IExec(WB2,v).a7=0 &
               IExec(WB2,v).a3=v.a3 & IExec(WB2,v).a5=v.a7)
               by A1,A2,A3,Lm14;
           thus IExec(WB2,v).a=v.a by A1,A2,A3,A4,Lm14;
           thus WB2 is_closed_on v & WB2 is_halting_on v by SCMPDS_6:34,35;
           hereby
              per cases;
              suppose A6: v.intpos md > v.intpos ME;
             hence IExec(WB2,v).b < v.b by A2,A5,INT_1:26;
               A7: IExec(WB2,v).a3=v.a3+1 by A1,A2,A3,A6,Lm14;
                     v.a3 +1 > v.a3 by REAL_1:69;
             hence IExec(WB2,v).a3 >= 8 by A3,A7,AXIOMS:22;
              suppose A8:v.intpos md <= v.intpos ME;
              hence IExec(WB2,v).b < v.b by A1,A2,A3,Lm14;
              thus IExec(WB2,v).a3 >= 8 by A1,A2,A3,A8,Lm14;
           end;
           thus IExec(WB2,v).a2=v.a2 by A1,A2,A3,A4,Lm14;
    end;
    hence thesis by A1,Lm12,Th6;
end;

Lm17:
  card WB3=29
proof
   thus card WB3=card (WH1 ';' WH2 )+card IF3 by SCMPDS_4:45
    .=11+ 11+card IF3 by Lm11,Lm13,SCMPDS_4:45
    .=22+(card (k5 ';' k6 ';' k7 ';' k8 ';' k9 ';' k0)+1) by SCMPDS_6:89
    .=22+(card (k5 ';' k6 ';' k7 ';' k8 ';' k9)+1+1) by SCMP_GCD:8
    .=22+(card (k5 ';' k6 ';' k7 ';' k8)+1+1+1) by SCMP_GCD:8
    .=22+(card (k5 ';' k6 ';' k7)+1+1+1+1) by SCMP_GCD:8
    .=22+(card (k5 ';' k6)+1+1+1+1+1) by SCMP_GCD:8
    .=22+(2+1+1+1+1+1) by SCMP_GCD:9
    .=29;
end;

Lm18:
  card WH3=31
proof
   thus card WH3=29+2 by Lm17,SCMPDS_8:17
         .=31;
end;

begin :: The Basic Property of Partition Program

theorem Th12:
  card Partition=38
proof
  thus card Partition=card (K4 ';' WH3 ';' j8 ';' j9)+1 by Def1,SCMP_GCD:8
  .=card (K4 ';' WH3 ';' j8)+1+1 by SCMP_GCD:8
  .=card (K4 ';' WH3)+1+1+1 by SCMP_GCD:8
  .=card K4+card WH3+1+1+1 by SCMPDS_4:45
  .=4+31+1+1+1 by Lm18,Th4
  .=38;
end;

Lm19:
 for s be State of SCMPDS,m3,m4 be Nat st s.GBP=0 & s.a5 > 0 &
 s.a3=m3 & s.a4=m4 & m3>6 & m4 > 6 holds
  IExec(IF3,s).GBP=0 & IExec(IF3,s).a1=s.a1 & IExec(IF3,s).a2=s.a2 &
  IExec(IF3,s).intpos m3=s.intpos m4 &
  IExec(IF3,s).intpos m4=s.intpos m3 & IExec(IF3,s).a3=s.a3+1 &
  IExec(IF3,s).a4=s.a4-1 & IExec(IF3,s).a5=s.a5-2 &
  for i be Nat st i >= 8 & i <> m3 & i <> m4 holds
     IExec(IF3,s).intpos i=s.intpos i
proof
   let s be State of SCMPDS,m3,m4 be Nat;
   set a=GBP;
   assume A1: s.a=0 & s.a5 > 0 & s.a3=m3 & s.a4=m4 & m3 > 6 & m4 > 6;
    then A2: DataLoc(s.a,5)=intpos(0+5) by SCMP_GCD:5;
    set x=intpos m3,
        y=intpos m4,
        t0=Initialized s,
        t1=IExec(k5 ';' k6 ';' k7 ';' k8 ';' k9 ';' k0,s),
        t2=IExec(k5 ';' k6 ';' k7 ';' k8 ';' k9,s),
        t3=IExec(k5 ';' k6 ';' k7 ';' k8,s),
        t4=IExec(k5 ';' k6 ';' k7,s),
        t5=IExec(k5 ';' k6,s),
        t6=Exec(k5,t0);
A3:  m4 > 0 by A1,AXIOMS:22;
A4:  m3 > 0 by A1,AXIOMS:22;
A5:  m4 > 3 by A1,AXIOMS:22;
A6:  m4 > 5 by A1,AXIOMS:22;
A7:  m3 > 5 by A1,AXIOMS:22;
A8:  m3 > 3 by A1,AXIOMS:22;
A9: m3 > 4 by A1,AXIOMS:22;
A10: m4 > 4 by A1,AXIOMS:22;

A11: t0.a=0 by A1,SCMPDS_5:40;
A12: t0.a1=s.a1 by SCMPDS_5:40;
A13: t0.a2=s.a2 by SCMPDS_5:40;
A14: t0.a3=m3 by A1,SCMPDS_5:40;
A15: t0.a4=m4 by A1,SCMPDS_5:40;
A16: t0.a5=s.a5 by SCMPDS_5:40;
A17: t0.x=s.x by SCMPDS_5:40;

A18:  DataLoc(t0.a,6)=intpos (0+6) by A11,SCMP_GCD:5;
     then a<>DataLoc(t0.a,6) by SCMP_GCD:4,def 2;
then A19: t6.a =0 by A11,SCMPDS_2:59;
       a1<>DataLoc(t0.a,6) by A18,SCMP_GCD:4;
then A20: t6.a1 =s.a1 by A12,SCMPDS_2:59;
       a2<>DataLoc(t0.a,6) by A18,SCMP_GCD:4;
then A21: t6.a2 =s.a2 by A13,SCMPDS_2:59;
       a3<>DataLoc(t0.a,6) by A18,SCMP_GCD:4;
then A22: t6.a3 =m3 by A14,SCMPDS_2:59;
       a4<>DataLoc(t0.a,6) by A18,SCMP_GCD:4;
then A23: t6.a4 =m4 by A15,SCMPDS_2:59;
       a5<>DataLoc(t0.a,6) by A18,SCMP_GCD:4;
then A24: t6.a5 =s.a5 by A16,SCMPDS_2:59;
A25: t6.a6 =t0.DataLoc(t0.a4,0) by A18,SCMPDS_2:59
      .=t0.intpos(m4+0) by A15,SCMP_GCD:5
      .=s.y by SCMPDS_5:40;
     A26: x<>DataLoc(t0.a,6) by A1,A18,SCMP_GCD:4;
A27: now
       let i be Nat;
       assume i >= 8 & i <> m3 & i <> m4;
       then i > 6 by AXIOMS:22;
       then intpos i<>DataLoc(t0.a,6) by A18,SCMP_GCD:4;
       hence t6.intpos i =t0.intpos i by SCMPDS_2:59
        .=s.intpos i by SCMPDS_5:40;
     end;

A28:  DataLoc(t6.a4,0)=intpos (m4+0) by A23,SCMP_GCD:5;
then A29:  a<>DataLoc(t6.a4,0) by A3,SCMP_GCD:4,def 2;
A30: t5.a =Exec(k6, t6).a by SCMPDS_5:47
     .=0 by A19,A29,SCMPDS_2:59;
       m4 > 1 by A1,AXIOMS:22;
then A31:  a1<>DataLoc(t6.a4,0) by A28,SCMP_GCD:4;
A32: t5.a1 =Exec(k6, t6).a1 by SCMPDS_5:47
     .=s.a1 by A20,A31,SCMPDS_2:59;
       m4 > 2 by A1,AXIOMS:22;
then A33:  a2<>DataLoc(t6.a4,0) by A28,SCMP_GCD:4;
A34: t5.a2 =Exec(k6, t6).a2 by SCMPDS_5:47
     .=s.a2 by A21,A33,SCMPDS_2:59;
A35:  a3<>DataLoc(t6.a4,0) by A5,A28,SCMP_GCD:4;
A36: t5.a3 =Exec(k6, t6).a3 by SCMPDS_5:47
     .=m3 by A22,A35,SCMPDS_2:59;
A37:  a4<>DataLoc(t6.a4,0) by A10,A28,SCMP_GCD:4;
A38: t5.a4 =Exec(k6, t6).a4 by SCMPDS_5:47
     .=m4 by A23,A37,SCMPDS_2:59;
A39:  a5<>DataLoc(t6.a4,0) by A6,A28,SCMP_GCD:4;
A40: t5.a5 =Exec(k6, t6).a5 by SCMPDS_5:47
     .=s.a5 by A24,A39,SCMPDS_2:59;
A41:  a6<>DataLoc(t6.a4,0) by A1,A28,SCMP_GCD:4;
A42: t5.a6 =Exec(k6, t6).a6 by SCMPDS_5:47
     .=s.y by A25,A41,SCMPDS_2:59;
A43: t5.y=Exec(k6, t6).y by SCMPDS_5:47
     .=t6.DataLoc(t6.a3,0) by A28,SCMPDS_2:59
     .=t6.intpos(m3+0) by A22,SCMP_GCD:5
     .=s.x by A17,A26,SCMPDS_2:59;
A44: now
       let i be Nat;
       assume A45: i >= 8 & i <> m3 & i <> m4;
   then A46: intpos i <> DataLoc(t6.a4,0) by A28,SCMP_GCD:4;
       thus t5.intpos i =Exec(k6, t6).intpos i by SCMPDS_5:47
       .=t6.intpos i by A46,SCMPDS_2:59
       .=s.intpos i by A27,A45;
     end;

A47:  DataLoc(t5.a3,0)=intpos (m3+0) by A36,SCMP_GCD:5;
then A48:  a<>DataLoc(t5.a3,0) by A4,SCMP_GCD:4,def 2;
A49: t4.a =Exec(k7, t5).a by SCMPDS_5:46
     .=0 by A30,A48,SCMPDS_2:59;
       m3 > 1 by A1,AXIOMS:22;
then A50:  a1<>DataLoc(t5.a3,0) by A47,SCMP_GCD:4;
A51: t4.a1 =Exec(k7, t5).a1 by SCMPDS_5:46
     .=s.a1 by A32,A50,SCMPDS_2:59;
       m3 > 2 by A1,AXIOMS:22;
then A52:  a2<>DataLoc(t5.a3,0) by A47,SCMP_GCD:4;
A53: t4.a2 =Exec(k7, t5).a2 by SCMPDS_5:46
     .=s.a2 by A34,A52,SCMPDS_2:59;
A54:  a3<>DataLoc(t5.a3,0) by A8,A47,SCMP_GCD:4;
A55: t4.a3 =Exec(k7, t5).a3 by SCMPDS_5:46
     .=m3 by A36,A54,SCMPDS_2:59;
A56:  a4<>DataLoc(t5.a3,0) by A9,A47,SCMP_GCD:4;
A57: t4.a4 =Exec(k7, t5).a4 by SCMPDS_5:46
     .=m4 by A38,A56,SCMPDS_2:59;
A58:  a5<>DataLoc(t5.a3,0) by A7,A47,SCMP_GCD:4;
A59: t4.a5 =Exec(k7, t5).a5 by SCMPDS_5:46
     .=s.a5 by A40,A58,SCMPDS_2:59;
A60:  t5.DataLoc(t5.a,6)=t5.intpos(0+6) by A30,SCMP_GCD:5
     .=s.y by A42;
A61: t4.x=Exec(k7, t5).x by SCMPDS_5:46
     .=s.y by A47,A60,SCMPDS_2:59;
A62: now
        per cases;
        suppose A63: y<>DataLoc(t5.a3,0);
         thus t4.y =Exec(k7, t5).y by SCMPDS_5:46
           .=s.x by A43,A63,SCMPDS_2:59;
        suppose A64: y=DataLoc(t5.a3,0);
         thus t4.y =Exec(k7, t5).y by SCMPDS_5:46
           .=s.x by A47,A60,A64,SCMPDS_2:59;
      end;
A65: now
       let i be Nat;
       assume A66: i >= 8 & i <> m3 & i <> m4;
   then A67: intpos i <> DataLoc(t5.a3,0) by A47,SCMP_GCD:4;
       thus t4.intpos i =Exec(k7, t5).intpos i by SCMPDS_5:46
       .=t5.intpos i by A67,SCMPDS_2:59
       .=s.intpos i by A44,A66;
     end;

A68:  DataLoc(t4.a,5)=intpos (0+5) by A49,SCMP_GCD:5;
then A69:  a<>DataLoc(t4.a,5) by SCMP_GCD:4,def 2;
A70: t3.a =Exec(k8, t4).a by SCMPDS_5:46
     .=0 by A49,A69,SCMPDS_2:60;
A71:  a1<>DataLoc(t4.a,5) by A68,SCMP_GCD:4;
A72: t3.a1 =Exec(k8, t4).a1 by SCMPDS_5:46
     .=s.a1 by A51,A71,SCMPDS_2:60;
A73:  a2<>DataLoc(t4.a,5) by A68,SCMP_GCD:4;
A74: t3.a2 =Exec(k8, t4).a2 by SCMPDS_5:46
     .=s.a2 by A53,A73,SCMPDS_2:60;
A75:  a3<>DataLoc(t4.a,5) by A68,SCMP_GCD:4;
A76: t3.a3 =Exec(k8, t4).a3 by SCMPDS_5:46
     .=m3 by A55,A75,SCMPDS_2:60;
A77:  a4<>DataLoc(t4.a,5) by A68,SCMP_GCD:4;
A78: t3.a4 =Exec(k8, t4).a4 by SCMPDS_5:46
     .=m4 by A57,A77,SCMPDS_2:60;
A79: t3.a5 =Exec(k8, t4).a5 by SCMPDS_5:46
     .=t4.a5+-2 by A68,SCMPDS_2:60
     .=s.a5-2 by A59,XCMPLX_0:def 8;
A80:  x<>DataLoc(t4.a,5) by A7,A68,SCMP_GCD:4;
A81: t3.x =Exec(k8, t4).x by SCMPDS_5:46
     .=s.y by A61,A80,SCMPDS_2:60;
A82:  y<>DataLoc(t4.a,5) by A6,A68,SCMP_GCD:4;
A83: t3.y =Exec(k8, t4).y by SCMPDS_5:46
     .=s.x by A62,A82,SCMPDS_2:60;
A84: now
       let i be Nat;
       assume A85: i >= 8 & i <> m3 & i <> m4;
       then i > 5 by AXIOMS:22;
   then A86: intpos i <> DataLoc(t4.a,5) by A68,SCMP_GCD:4;
       thus t3.intpos i =Exec(k8, t4).intpos i by SCMPDS_5:46
       .=t4.intpos i by A86,SCMPDS_2:60
       .=s.intpos i by A65,A85;
     end;

A87:  DataLoc(t3.a,3)=intpos (0+3) by A70,SCMP_GCD:5;
then A88:  a<>DataLoc(t3.a,3) by SCMP_GCD:4,def 2;
A89: t2.a =Exec(k9, t3).a by SCMPDS_5:46
     .=0 by A70,A88,SCMPDS_2:60;
A90:  a2<>DataLoc(t3.a,3) by A87,SCMP_GCD:4;
A91: t2.a2 =Exec(k9, t3).a2 by SCMPDS_5:46
     .=s.a2 by A74,A90,SCMPDS_2:60;
A92:  a1<>DataLoc(t3.a,3) by A87,SCMP_GCD:4;
A93: t2.a1 =Exec(k9, t3).a1 by SCMPDS_5:46
     .=s.a1 by A72,A92,SCMPDS_2:60;
A94: t2.a3 =Exec(k9, t3).a3 by SCMPDS_5:46
     .=m3+1 by A76,A87,SCMPDS_2:60;
A95:  a4<>DataLoc(t3.a,3) by A87,SCMP_GCD:4;
A96: t2.a4 =Exec(k9, t3).a4 by SCMPDS_5:46
     .=m4 by A78,A95,SCMPDS_2:60;
A97:  a5<>DataLoc(t3.a,3) by A87,SCMP_GCD:4;
A98: t2.a5 =Exec(k9, t3).a5 by SCMPDS_5:46
     .=s.a5-2 by A79,A97,SCMPDS_2:60;
A99:  x<>DataLoc(t3.a,3) by A8,A87,SCMP_GCD:4;
A100: t2.x =Exec(k9, t3).x by SCMPDS_5:46
     .=s.y by A81,A99,SCMPDS_2:60;
A101:  y<>DataLoc(t3.a,3) by A5,A87,SCMP_GCD:4;
A102: t2.y =Exec(k9, t3).y by SCMPDS_5:46
     .=s.x by A83,A101,SCMPDS_2:60;
A103: now
       let i be Nat;
       assume A104: i >= 8 & i <> m3 & i <> m4;
       then i > 3 by AXIOMS:22;
   then A105: intpos i <> DataLoc(t3.a,3) by A87,SCMP_GCD:4;
       thus t2.intpos i =Exec(k9, t3).intpos i by SCMPDS_5:46
       .=t3.intpos i by A105,SCMPDS_2:60
       .=s.intpos i by A84,A104;
     end;

A106:  DataLoc(t2.a,4)=intpos (0+4) by A89,SCMP_GCD:5;
then A107:  a<>DataLoc(t2.a,4) by SCMP_GCD:4,def 2;
A108: t1.a =Exec(k0, t2).a by SCMPDS_5:46
     .=0 by A89,A107,SCMPDS_2:60;
A109:  a1<>DataLoc(t2.a,4) by A106,SCMP_GCD:4;
A110: t1.a1 =Exec(k0, t2).a1 by SCMPDS_5:46
     .=s.a1 by A93,A109,SCMPDS_2:60;
A111:  a2<>DataLoc(t2.a,4) by A106,SCMP_GCD:4;
A112: t1.a2 =Exec(k0, t2).a2 by SCMPDS_5:46
     .=s.a2 by A91,A111,SCMPDS_2:60;
A113:  a3<>DataLoc(t2.a,4) by A106,SCMP_GCD:4;
A114: t1.a3 =Exec(k0, t2).a3 by SCMPDS_5:46
     .=m3+1 by A94,A113,SCMPDS_2:60;
A115: t1.a4 =Exec(k0, t2).a4 by SCMPDS_5:46
     .=t2.a4+-1 by A106,SCMPDS_2:60
     .=s.a4-1 by A1,A96,XCMPLX_0:def 8;
A116:  a5<>DataLoc(t2.a,4) by A106,SCMP_GCD:4;
A117: t1.a5 =Exec(k0, t2).a5 by SCMPDS_5:46
     .=s.a5-2 by A98,A116,SCMPDS_2:60;
A118:  x<>DataLoc(t2.a,4) by A9,A106,SCMP_GCD:4;
A119: t1.x =Exec(k0, t2).x by SCMPDS_5:46
     .=s.y by A100,A118,SCMPDS_2:60;
A120:  y<>DataLoc(t2.a,4) by A10,A106,SCMP_GCD:4;
A121: t1.y =Exec(k0, t2).y by SCMPDS_5:46
     .=s.x by A102,A120,SCMPDS_2:60;
A122: now
       let i be Nat;
       assume A123: i >= 8 & i <> m3 & i <> m4;
       then i > 4 by AXIOMS:22;
   then A124: intpos i <> DataLoc(t2.a,4) by A106,SCMP_GCD:4;
       thus t1.intpos i =Exec(k0, t2).intpos i by SCMPDS_5:46
       .=t2.intpos i by A124,SCMPDS_2:60
       .=s.intpos i by A103,A123;
     end;
    thus IExec(IF3,s).a=0 by A1,A2,A108,SCMPDS_6:97;
    thus IExec(IF3,s).a1=s.a1 by A1,A2,A110,SCMPDS_6:97;
    thus IExec(IF3,s).a2=s.a2 by A1,A2,A112,SCMPDS_6:97;
    thus IExec(IF3,s).x=s.y by A1,A2,A119,SCMPDS_6:97;
    thus IExec(IF3,s).y=s.x by A1,A2,A121,SCMPDS_6:97;
    thus IExec(IF3,s).a3=s.a3+1 by A1,A2,A114,SCMPDS_6:97;
    thus IExec(IF3,s).a4=s.a4-1 by A1,A2,A115,SCMPDS_6:97;
    thus IExec(IF3,s).a5=s.a5-2 by A1,A2,A117,SCMPDS_6:97;
    hereby
       let i be Nat;
       assume A125: i >= 8 & i <> m3 & i <> m4;
       thus IExec(IF3,s).intpos i = t1.intpos i by A1,A2,SCMPDS_6:97
        .=s.intpos i by A122,A125;
    end;
end;

Lm20:
 for s be State of SCMPDS,md,m3 be Nat st s.GBP=0 & s.a5 > 0 &
 s.a4=m3+s.a5 & m3=s.a3-1 & s.a2=md & md >= 8 & md <= m3
 holds WB3 is_closed_on s & WB3 is_halting_on s &
  IExec(WB3,s).GBP=0 & IExec(WB3,s).a1=s.a1 &
  IExec(WB3,s).a2=md & IExec(WB3,s).a3 >= s.a3 &
  IExec(WB3,s).a4 <= s.a4 & IExec(WB3,s).a4 >= m3 &
  IExec(WB3,s).a5 < s.a5 & IExec(WB3,s).a5 >= -1 &
  IExec(WB3,s).a4=IExec(WB3,s).a3-1+IExec(WB3,s).a5 &
  ex n1,n2 be Nat st n1=IExec(WB3,s).a3-1 & n2=IExec(WB3,s).a4+1 &
   (for i be Nat st i >= 8 & i <>n1 & i<> n2 holds
       IExec(WB3,s).intpos i=s.intpos i) &
  (IExec(WB3,s).intpos n1=s.intpos n1 & IExec(WB3,s).intpos n2=s.intpos n2 or
  n1 >= s.a3 & n2 <= s.a4 &
  IExec(WB3,s).intpos n1=s.intpos n2 & IExec(WB3,s).intpos n2=s.intpos n1) &
  (for i be Nat st s.a3<=i & i <= n1 holds
   IExec(WB3,s).intpos md >= IExec(WB3,s).intpos i) &
   (for i be Nat st n2<=i & i <= s.a4 holds
   IExec(WB3,s).intpos md <= IExec(WB3,s).intpos i)
proof
   let s be State of SCMPDS,md,m3 be Nat;
   set a=GBP;
   assume A1: s.a=0 & s.a5 > 0 & s.a4=m3+s.a5 & m3=s.a3-1 &
       s.a2=md & md >= 8 & md <= m3;
     set s1=IExec(WH1,s);
A2:  m3 >= 8 by A1,AXIOMS:22;
then A3:  s1.a=0 & s1.a1=s.a1 & s1.a5=0 & s1.a2=s.a2 & s1.a3=s.a3 &
     (for i be Nat st i >= 8 holds s1.intpos i=s.intpos i) by A1,Lm9;
     consider mE be Nat such that
A4:  mE=s1.a7 & s1.a4=m3+mE & mE <= s.a5 &
     (for i be Nat st m3+mE < i & i <=s.a4 holds s1.intpos md < s1.intpos i)
     & (mE = 0 or s1.intpos md >= s1.intpos(m3+mE)) by A1,A2,Lm9;
A5:  WH1 is_closed_on s & WH1 is_halting_on s by A1,A2,Lm10;
     set s2=IExec(WH2,s1),
         sm=m3+1+mE,
         s12=IExec(WH1 ';' WH2,s),
         s3=IExec(WB3,s),
         m4=m3+mE;
A6:  s1.a3=m3+1 by A1,A3,XCMPLX_1:27;
     then m3 < s1.a3 by REAL_1:69;
then A7:  s1.a3 >= 8 by A2,AXIOMS:22;
A8:  s1.a3+s1.a7=sm by A1,A3,A4,XCMPLX_1:27;
     A9: m3+mE <= m3+s.a5 by A4,AXIOMS:24;
A10:  m4 <= s.a4 by A1,A4,AXIOMS:24;
A11:  m4 >= 8 by A2,NAT_1:37;

     per cases;
     suppose A12: mE <= 0;
       A13: DataLoc(s1.a,7)=intpos(0+7) by A3,SCMP_GCD:5;
then A14:    WH2 is_closed_on s1 & WH2 is_halting_on s1 by A4,A12,SCMPDS_8:20;
then A15:    WH1 ';' WH2 is_closed_on s & WH1 ';' WH2 is_halting_on s
         by A5,SCMPDS_7:43;
    hence WB3 is_closed_on s & WB3 is_halting_on s by SCPISORT:9;
       A16: mE >= 0 by NAT_1:18;
A17:    mE=0 by A12,NAT_1:18;
A18:    s12.a=s2.a by A5,A14,SCMPDS_7:49
       .=0 by A3,A4,A12,A13,SCMPDS_8:23;
A19:    s12.a5=s2.a5 by A5,A14,SCMPDS_7:49
       .=0 by A3,A4,A12,A13,SCMPDS_8:23;
       A20: DataLoc(s12.a,5)=intpos(0+5) by A18,SCMP_GCD:5;
     thus IExec(WB3,s).a=IExec(IF3,s12).a by A15,SCPISORT:7
             .=0 by A18,A19,A20,SCMPDS_6:98;
     thus IExec(WB3,s).a1=IExec(IF3,s12).a1 by A15,SCPISORT:7
             .= s12.a1 by A19,A20,SCMPDS_6:98
             .= s2.a1 by A5,A14,SCMPDS_7:49
             .= s.a1 by A3,A4,A12,A13,SCMPDS_8:23;
     thus s3.a2=IExec(IF3,s12).a2 by A15,SCPISORT:7
             .= s12.a2 by A19,A20,SCMPDS_6:98
             .= s2.a2 by A5,A14,SCMPDS_7:49
             .= md by A1,A3,A4,A12,A13,SCMPDS_8:23;
     A21:   s3.a3=IExec(IF3,s12).a3 by A15,SCPISORT:7
             .= s12.a3 by A19,A20,SCMPDS_6:98
             .= s2.a3 by A5,A14,SCMPDS_7:49
             .= s.a3 by A3,A4,A12,A13,SCMPDS_8:23;
         hence s3.a3 >= s.a3;
     A22:   s3.a4=IExec(IF3,s12).a4 by A15,SCPISORT:7
             .= s12.a4 by A19,A20,SCMPDS_6:98
             .= s2.a4 by A5,A14,SCMPDS_7:49
             .= m4 by A4,A12,A13,SCMPDS_8:23;
         hence s3.a4 <= s.a4 by A1,A4,AXIOMS:24;
         thus s3.a4 >= m3 by A22,NAT_1:37;
     A23:   s3.a5=IExec(IF3,s12).a5 by A15,SCPISORT:7
             .=0 by A19,A20,SCMPDS_6:98;
         hence s3.a5 < s.a5 by A1;
         thus s3.a5 >= -1 by A23;
     thus s3.a4=s3.a3-1+s3.a5 by A1,A12,A16,A21,A22,A23,AXIOMS:21;
          take n1=m4;
          take n2=m4+1;
       thus n1=s3.a3-1 by A1,A17,A21;
       thus n2=s3.a4+1 by A22;
     A24: now
            let x;
            thus s3.x=IExec(IF3,s12).x by A15,SCPISORT:7
              .=s12.x by A19,A20,SCMPDS_6:98
              .=s2.x by A5,A14,SCMPDS_7:49;
         end;
     A25: now
            let i be Nat;
            assume A26: i >= 8;
            thus s3.intpos i=s2.intpos i by A24
              .=s1.intpos i by A4,A12,A13,SCMPDS_8:23
              .=s.intpos i by A1,A2,A26,Lm9;
         end;
         hence for i be Nat st i >= 8 & i <>n1 & i<> n2 holds
             s3.intpos i=s.intpos i;
      A27: m4 < n2 by REAL_1:69;
          then 8 < n2 by A11,AXIOMS:22;
     hence s3.intpos n1=s.intpos n1 & s3.intpos n2=s.intpos n2 or
        n1 >= s.a3 & n2 <= s.a4 &
        s3.intpos n1=s.intpos n2 & s3.intpos n2=s.intpos n1 by A11,A25;
     hereby
         let i be Nat;
         assume A28: s.a3<=i & i <= n1;
         assume not s3.intpos md >= s3.intpos i;
             n1 < s.a3 by A1,A17,INT_1:26;
          hence contradiction by A28,AXIOMS:22;
     end;
     hereby
         let i be Nat;
         assume A29: n2<=i & i <= s.a4;
         then A30: m4 < i by A27,AXIOMS:22;
        A31: s3.intpos md=s2.intpos md by A24
            .=s1.intpos md by A4,A12,A13,SCMPDS_8:23;
              s3.intpos i=s2.intpos i by A24
            .=s1.intpos i by A4,A12,A13,SCMPDS_8:23;
         hence s3.intpos md <= s3.intpos i by A4,A29,A30,A31;
     end;

     suppose A32: mE > 0;
     then A33: m4 > m3+0 by REAL_1:53;
then A34:  m4 >= m3+1 by INT_1:20;
A35: s2.a=0 & s2.a1=s1.a1 & s2.a7=0 & s2.a2=s1.a2 & s2.a4=s1.a4 &
    (for i be Nat st i >= 8 holds s2.intpos i=s1.intpos i)
      by A1,A3,A4,A7,A8,A32,Lm15;
     consider m5,mE3 be Nat such that
A36:  m5=s2.a5 & s2.a3=mE3 & mE3+m5=sm & m5 <= s1.a7 &
     (for i be Nat st s1.a3 <= i & i < mE3 holds s2.intpos md > s2.intpos i)
     & (m5 = 0 or s2.intpos md <= s2.intpos mE3)
       by A1,A3,A4,A6,A7,A32,Lm15;
A37:  WH2 is_closed_on s1 & WH2 is_halting_on s1 by A1,A3,A4,A7,A32,Lm16;
then A38:  WH1 ';' WH2 is_closed_on s & WH1 ';' WH2 is_halting_on s
      by A5,SCMPDS_7:43;
    hence WB3 is_closed_on s & WB3 is_halting_on s by SCPISORT:9;

A39:  s12.a=0 by A5,A35,A37,SCMPDS_7:49;
      A40: mE3+m5 <= mE3+s1.a7 by A36,AXIOMS:24;
     A41: s1.a3+s1.a7 <= mE3+s1.a7 by A8,A36,AXIOMS:24;
A42:  s1.a3 <= mE3 by A8,A36,A40,REAL_1:53;
A43:  s.a3 <= mE3 by A3,A41,REAL_1:53;
A44:  s12.a3=mE3 by A5,A36,A37,SCMPDS_7:49;
A45:  mE3 >= 8 by A3,A7,A43,AXIOMS:22;
then A46:  mE3 > 6 by AXIOMS:22;
A47:  s12.a4=m4 by A4,A5,A35,A37,SCMPDS_7:49;
A48:  m4 > 6 by A11,AXIOMS:22;
A49:  s12.a2=md by A1,A3,A5,A35,A37,SCMPDS_7:49;
A50:  s12.a1=s.a1 by A3,A5,A35,A37,SCMPDS_7:49;
A51:  s12.a5=m5 by A5,A36,A37,SCMPDS_7:49;
     hereby
        per cases;
        suppose A52: s12.a5 > 0;
then A53:      IExec(IF3,s12).a=0 & IExec(IF3,s12).a1=s12.a1 &
         IExec(IF3,s12).a2=s12.a2 &
         IExec(IF3,s12).intpos mE3=s12.intpos m4 &
         IExec(IF3,s12).intpos m4=s12.intpos mE3 &
         IExec(IF3,s12).a3=s12.a3+1 & IExec(IF3,s12).a4=s12.a4-1 &
         IExec(IF3,s12).a5=s12.a5-2 &
          for i be Nat st i >= 8 & i <> mE3 & i <> m4 holds
          IExec(IF3,s12).intpos i=s12.intpos i by A39,A44,A46,A47,A48,Lm19;
         hence IExec(WB3,s).a=0 by A38,SCPISORT:7;
         thus IExec(WB3,s).a1=s.a1 by A38,A50,A53,SCPISORT:7;
         thus s3.a2=md by A38,A49,A53,SCPISORT:7;
   A54:    s3.a3=mE3+1 by A38,A44,A53,SCPISORT:7;
             then mE3 < s3.a3 by REAL_1:69;
         hence s3.a3 >= s.a3 by A3,A42,AXIOMS:22;
   A55:    s3.a4=m4-1 by A38,A47,A53,SCPISORT:7;
             then s3.a4 < m4 by INT_1:26;
         hence s3.a4 <= s.a4 by A1,A9,AXIOMS:22;
         thus s3.a4 >= m3 by A34,A55,REAL_1:84;
  A56:      s3.a5 =s12.a5-2 by A38,A53,SCPISORT:7;
         m5 <= s.a5 by A4,A36,AXIOMS:22;
           then m5-2 < s.a5-0 by REAL_1:92;
         hence s3.a5 < s.a5 by A51,A56;
            s12.a5 >=0+1 by A52,INT_1:20;
          then A57: s12.a5-2 >= 1-2 by REAL_1:49;
          then A58: s12.a5-2 >=-1;
       thus
        s3.a5 >= -1 by A56,A57;
     A59:  s3.a4=m3+mE+1-1-1 by A55,XCMPLX_1:26
           .=m3+mE+1-(1+1) by XCMPLX_1:36
            .=sm-2 by XCMPLX_1:1
            .=mE3+s3.a5 by A36,A51,A56,XCMPLX_1:29;
      hence s3.a4=s3.a3-1+s3.a5 by A54,XCMPLX_1:26;

          take n1=mE3;
          take n2=m4;
          thus n1=s3.a3-1 by A54,XCMPLX_1:26;
          thus
     A60:   n2=m4+-1+1 by XCMPLX_1:139
             .=s3.a4+1 by A55,XCMPLX_0:def 8;
     A61:   now
            let i be Nat;
            assume A62: i >= 8;
            thus s12.intpos i=s2.intpos i by A5,A37,SCMPDS_7:49
              .=s1.intpos i by A1,A3,A4,A7,A8,A32,A62,Lm15
              .=s.intpos i by A1,A2,A62,Lm9;
          end;
     A63:  now
            let i be Nat;
            assume A64: i >= 8 & i <>n1 & i<> n2;
            thus s3.intpos i=IExec(IF3,s12).intpos i by A38,SCPISORT:7
              .=s12.intpos i by A39,A44,A46,A47,A48,A52,A64,Lm19
              .=s.intpos i by A61,A64;
          end;
      hence for i be Nat st i >= 8 & i <>n1 & i<> n2 holds
           s3.intpos i=s.intpos i;
      A65: s3.intpos n1=s12.intpos n2 by A38,A53,SCPISORT:7
          .=s.intpos n2 by A11,A61;
      A66: s3.intpos n2=s12.intpos n1 by A38,A53,SCPISORT:7
          .=s.intpos n1 by A45,A61;
        m3+1 <= n1 by A6,A41,REAL_1:53;
       hence s3.intpos n1=s.intpos n1 & s3.intpos n2=s.intpos n2 or
          s.a3 <= n1 & n2 <= s.a4 &
          s3.intpos n1=s.intpos n2 & s3.intpos n2=s.intpos n1 by A3,A6,A10,A65,
A66;
            m3 < m3+1 by REAL_1:69;
          then A67: m3 < n1 by A6,A42,AXIOMS:22;
      then A68: md < n1 by A1,AXIOMS:22;
      A69: n2=n1+(s3.a5+1) by A59,A60,XCMPLX_1:1;
            s3.a5+1 >= -1+1 by A56,A58,AXIOMS:24;
      then A70: n2 >= n1+0 by A69,AXIOMS:24;
      then A71: md < n2 by A68,AXIOMS:22;
      then A72: n2 >= 8 by A1,AXIOMS:22;
      A73: n1 >= 8 by A1,A68,AXIOMS:22;
      A74: s3.intpos md=s.intpos md by A1,A63,A67,A71;
      A75: s2.intpos md=s1.intpos md by A1,A3,A4,A7,A8,A32,Lm15
          .=s3.intpos md by A1,A2,A74,Lm9;
      A76: s1.intpos md=s3.intpos md by A1,A2,A74,Lm9;
      hereby
             let i be Nat;
             assume A77: s.a3<=i & i <= n1;
          then A78: s1.a3 <= i by A1,A2,Lm9;
          A79: i >= 8 by A3,A7,A77,AXIOMS:22;
           per cases;
           suppose A80: i < n1;
                   s2.intpos i=s1.intpos i by A1,A3,A4,A7,A8,A32,A79,Lm15
                 .=s.intpos i by A1,A2,A79,Lm9
                 .=s3.intpos i by A63,A70,A79,A80;
             hence s3.intpos md >= s3.intpos i by A36,A75,A78,A80;
          suppose i >= n1;
             then A81: i=n1 by A77,AXIOMS:21;
               s1.intpos md >= s1.intpos n2 by A4,A32;
              hence s3.intpos md >= s3.intpos i by A3,A65,A72,A76,A81;
       end;

       hereby let i be Nat;
            assume A82: n2<=i & i <= s.a4;
          A83: m5 > 0 by A5,A36,A37,A52,SCMPDS_7:49;
          A84: i >= 8 by A72,A82,AXIOMS:22;
          per cases;
           suppose A85: n2 < i;
                   s1.intpos i=s.intpos i by A1,A2,A84,Lm9
                 .=s3.intpos i by A63,A70,A84,A85;
             hence s3.intpos md <= s3.intpos i by A4,A76,A82,A85;
          suppose n2 >= i;
             then i=n2 by A82,AXIOMS:21;
                then s3.intpos i=s1.intpos n1 by A1,A2,A66,A73,Lm9
                  .=s2.intpos n1 by A1,A3,A4,A7,A8,A32,A73,Lm15;
              hence s3.intpos md <= s3.intpos i by A36,A75,A83;
       end;

       suppose A86: s12.a5 <= 0;
     A87:  DataLoc(s12.a,5)=intpos(0+5) by A39,SCMP_GCD:5;
         thus IExec(WB3,s).a=IExec(IF3,s12).a by A38,SCPISORT:7
             .=0 by A39,A86,A87,SCMPDS_6:98;
         thus IExec(WB3,s).a1=IExec(IF3,s12).a1 by A38,SCPISORT:7
             .= s.a1 by A50,A86,A87,SCMPDS_6:98;
         thus s3.a2=IExec(IF3,s12).a2 by A38,SCPISORT:7
             .= md by A49,A86,A87,SCMPDS_6:98;
     A88:   s3.a3=IExec(IF3,s12).a3 by A38,SCPISORT:7
             .= mE3 by A44,A86,A87,SCMPDS_6:98;
         hence s3.a3 >= s.a3 by A3,A42;
     A89:   s3.a4=IExec(IF3,s12).a4 by A38,SCPISORT:7
             .= m4 by A47,A86,A87,SCMPDS_6:98;
         hence s3.a4 <= s.a4 by A1,A9;
         thus s3.a4 >= m3 by A33,A89;
           s12.a5 >= 0 by A51,NAT_1:18;
        then A90:  s12.a5=0 by A86;
        A91:  s3.a5=IExec(IF3,s12).a5 by A38,SCPISORT:7
             .=0 by A87,A90,SCMPDS_6:98;
         hence s3.a5 < s.a5 by A1;
         thus s3.a5 >= -1 by A91;
     A92:  m4=m3+mE+1-1 by XCMPLX_1:26
          .=mE3+0-1 by A36,A51,A90,XCMPLX_1:1;
        hence s3.a4=s3.a3-1+s3.a5 by A88,A89,A91;

          take n1=m4;
          take n2=m4+1;
        thus n1=s3.a3-1 by A88,A92;
        thus n2=s3.a4+1 by A89;
     A93: now
            let x;
            thus s3.x=IExec(IF3,s12).x by A38,SCPISORT:7
              .=s12.x by A86,A87,SCMPDS_6:98
              .=s2.x by A5,A37,SCMPDS_7:49;
         end;
     A94: now
            let i be Nat;
            assume A95: i >= 8;
            thus s3.intpos i=s2.intpos i by A93
              .=s1.intpos i by A1,A3,A4,A7,A8,A32,A95,Lm15
              .=s.intpos i by A1,A2,A95,Lm9;
         end;
         hence for i be Nat st i >= 8 & i <>n1 & i<> n2 holds
             s3.intpos i=s.intpos i;
      A96: s3.intpos n1=s.intpos n1 by A11,A94;
      A97: m4 < n2 by REAL_1:69;
          then 8 < n2 by A11,AXIOMS:22;
     hence s3.intpos n1=s.intpos n1 & s3.intpos n2=s.intpos n2 or
        s.a3 <= n1 & n2 <= s.a4 &
        s3.intpos n1=s.intpos n2 & s3.intpos n2=s.intpos n1 by A94,A96;
     hereby
         let i be Nat;
         assume A98: s.a3<=i & i <= n1;
                mE3-1 < mE3 by INT_1:26;
              then i < mE3 by A92,A98,AXIOMS:22;
          then A99: s2.intpos md > s2.intpos i by A3,A36,A98;
            s3.intpos md=s2.intpos md by A93;
          hence s3.intpos md >= s3.intpos i by A93,A99;
     end;
     hereby
         let i be Nat;
         assume A100: n2<=i & i <= s.a4;
        then A101: m4 < i by A97,AXIOMS:22;
        A102: s3.intpos md=s2.intpos md by A93
            .=s1.intpos md by A1,A3,A4,A7,A8,A32,Lm15;
        A103: i >= 8 by A11,A101,AXIOMS:22;
              s3.intpos i=s2.intpos i by A93
            .=s1.intpos i by A1,A3,A4,A7,A8,A32,A103,Lm15;
         hence s3.intpos md <= s3.intpos i by A4,A100,A101,A102;
     end;
   end;
end;

Lm21:
 for i be Integer st i >= -1 & i <= 0 holds i=-1 or i=0
proof
   let i be Integer;
   assume A1: i >= -1 & i <= 0;
   per cases;
   suppose i <= -1;
    hence thesis by A1,AXIOMS:21;
   suppose i > -1;
    then i >= -1+1 by INT_1:20;
    hence thesis by A1;
end;

Lm22:
  for i1,i2 be Integer,n1,n2,i be Nat st i1 >= -1 & i1 <= 0 & n2=i2+1 &
  i2=n1+i1 & i < n2 holds i <= n1
proof
   let i1,i2 be Integer,n1,n2,i be Nat;
    assume A1: i1 >= -1 & i1 <= 0 & n2=i2+1 & i2=n1+i1 & i < n2;
    per cases by A1,Lm21;
    suppose i1=0;
       then n2=n1+1 by A1;
     hence i <= n1 by A1,NAT_1:38;
    suppose i1=-1;
       then n2=n1+-1+1 by A1;
     hence i <= n1 by A1,XCMPLX_1:139;
end;

Lm23:
  for i1,i2 be Integer,n1,n2 be Nat st i1 >= -1 & n2=i2+1 & i2=n1+i1
  holds n1 <= n2
proof
    let i1,i2 be Integer,n1,n2 be Nat;
    assume A1: i1 >= -1 & n2=i2+1 & i2=n1+i1;
    then n1+i1 >= n1+ -1 by AXIOMS:24;
    then i2+1 >= n1+ -1+1 by A1,AXIOMS:24;
   hence n1 <= n2 by A1,XCMPLX_1:139;
end;

Lm24:
 for s,s1 be State of SCMPDS,n0,n1,n2,n be Nat,f,f1 be FinSequence of INT st
 f is_FinSequence_on s,n0 & f1 is_FinSequence_on s1,n0 & len f=n &
 len f1 = n &
  (for i be Nat st i >= n0+1 & i<>n1 & i<>n2 holds s1.intpos i=s.intpos i) &
  (s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or
  n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n &
  s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1)
  holds f,f1 are_fiberwise_equipotent
proof
   let s,s1 be State of SCMPDS,n0,n1,n2,n be Nat,
   f,f1 be FinSequence of INT;
   assume A1: f is_FinSequence_on s,n0 & f1 is_FinSequence_on s1,n0;
   assume A2: len f=n & len f1 = n;
   assume A3: for i be Nat st i >= n0+1 & i<>n1 & i<>n2 holds
              s1.intpos i=s.intpos i;
   assume A4: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or
              n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n &
              s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1;
    per cases by A4;
    suppose A5:s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2;
       now
        let i be Nat;
        assume i in Seg n;
     then A6: 1 <= i & i <= n by FINSEQ_1:3;
     then A7: n0+1 <= n0+i & n0+i <= n0+n by AXIOMS:24;
        per cases;
        suppose A8: n0+i<>n1 & n0+i<>n2;
            thus f1.i=s1.intpos (n0+i) by A1,A2,A6,SCPISORT:def 1
              .=s.intpos (n0+i) by A3,A7,A8
              .=f.i by A1,A2,A6,SCPISORT:def 1;
        suppose A9: not (n0+i<>n1 & n0+i<>n2);
           hereby
                per cases by A9;
                suppose n0+i=n1;
                hence f1.i=s.intpos (n0+i) by A1,A2,A5,A6,SCPISORT:def 1
                 .=f.i by A1,A2,A6,SCPISORT:def 1;
                suppose n0+i=n2;
                hence f1.i=s.intpos (n0+i) by A1,A2,A5,A6,SCPISORT:def 1
                 .=f.i by A1,A2,A6,SCPISORT:def 1;
           end;
      end;
      hence thesis by A2,FINSEQ_2:10;
    suppose A10: n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n &
      s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1;
then A11:  n1-n0 >= 1 by REAL_1:84;
     then n1-n0 > 0 by AXIOMS:22;
     then reconsider m1=n1-n0 as Nat by INT_1:16;
A12:  n2-n0 >= 1 by A10,REAL_1:84;
     then n2-n0 > 0 by AXIOMS:22;
     then reconsider m2=n2-n0 as Nat by INT_1:16;
A13:  m1 <= len f by A2,A10,REAL_1:86;
A14:  m2 <= len f1 by A2,A10,REAL_1:86;
A15:  m2 <= len f by A2,A10,REAL_1:86;
A16:  n1=m1+n0 by XCMPLX_1:27;
A17:  n2=m2+n0 by XCMPLX_1:27;
A18:  f.m1=s1.intpos n2 by A1,A10,A11,A13,A16,SCPISORT:def 1
     .=f1.m2 by A1,A12,A14,A17,SCPISORT:def 1;
A19:  f.m2=s1.intpos n1 by A1,A10,A12,A15,A17,SCPISORT:def 1
     .=f1.m1 by A1,A2,A11,A13,A16,SCPISORT:def 1;
       now
        let k be Nat;
        assume A20: k <> m1 & k <> m2 & 1 <= k & k <= len f;
          then A21: k+n0 <> m1+n0 & k+n0 <> m2+n0 by XCMPLX_1:2;
    A22:   n0+1 <= n0+k by A20,AXIOMS:24;
     thus f.k=s.intpos(k+n0) by A1,A20,SCPISORT:def 1
       .=s1.intpos (k+n0) by A3,A16,A17,A21,A22
       .=f1.k by A1,A2,A20,SCPISORT:def 1;
     end;
     hence thesis by A2,A11,A12,A13,A15,A18,A19,SCPISORT:4;
end;

Lm25:
   for s,s1 be State of SCMPDS,n0,n1,n2 be Nat,c1,c2 be Integer st
   (for i be Nat st i >= n0 & i <>n1 & i<> n2 holds s1.intpos i=s.intpos i) &
    n1 <= n2 & (s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or
 c1 <= n1 & n2 <= c2 & s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1)
holds
   for i be Nat st i >= n0 & (i < c1 or i > c2) holds s1.intpos i=s.intpos i
proof
    let s,s1 be State of SCMPDS,n0,n1,n2 be Nat,c1,c2 be Integer;
    assume
A1:  for i be Nat st i >= n0 & i<>n1 & i<>n2 holds s1.intpos i=s.intpos i;
    assume A2: n1 <= n2;
    assume A3: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2 or
     c1 <= n1 & n2 <= c2 & s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1;
    per cases by A3;
    suppose A4: s1.intpos n1=s.intpos n1 & s1.intpos n2=s.intpos n2;
     hereby
          let i be Nat;
          assume A5: i >= n0 & (i < c1 or i > c2);
         per cases;
         suppose i<>n1 & i<>n2;
            hence s1.intpos i=s.intpos i by A1,A5;
         suppose A6: not (i<>n1 & i<>n2);
           hereby
              per cases by A6;
              suppose i=n1;
                hence s1.intpos i=s.intpos i by A4;
              suppose i=n2;
                hence s1.intpos i=s.intpos i by A4;
           end;
     end;
     suppose A7: c1 <= n1 & n2 <= c2 &
         s1.intpos n1=s.intpos n2 & s1.intpos n2=s.intpos n1;
     hereby
         let i be Nat;
         assume A8: i >= n0 & (i < c1 or i > c2);
         per cases by A8;
         suppose i < c1;
      then i < n1 by A7,AXIOMS:22;
        hence s1.intpos i=s.intpos i by A1,A2,A8;
         suppose i > c2;
      then i > n2 by A7,AXIOMS:22;
        hence s1.intpos i=s.intpos i by A1,A2,A8;
    end;
end;

Lm26:
 for s be State of SCMPDS,md,m3,n0 be Nat,f,f1 be FinSequence of INT
 st s.GBP=0 & s.a5 > 0 & s.a4=m3+s.a5 & m3=s.a3-1 & s.a2=md &
 md >= n0+1 & md <= m3 & n0+1 <= s.a3 & s.a4 <= n0+n &
 f is_FinSequence_on s,n0 &
 f1 is_FinSequence_on IExec(WH3,s),n0 & n0 >= 7 & len f=n & len f1=n
holds IExec(WH3,s).GBP=0 & IExec(WH3,s).a1=s.a1 & IExec(WH3,s).a2=md &
   IExec(WH3,s).a4 >= md & IExec(WH3,s).a4 <= s.a4 &
   f,f1 are_fiberwise_equipotent &
   (for i be Nat st s.a3<=i & i <= IExec(WH3,s).a4 holds
   IExec(WH3,s).intpos md >= IExec(WH3,s).intpos i) &
   (for i be Nat st IExec(WH3,s).a4 < i & i <= s.a4 holds
   IExec(WH3,s).intpos md <= IExec(WH3,s).intpos i) &
   (for i be Nat st i >= n0+1 & (i < s.a3 or i > s.a4) holds
         IExec(WH3,s).intpos i = s.intpos i)
proof
    let s be State of SCMPDS,md,m3,n0 be Nat,f,f1 be FinSequence of INT;
    set a=GBP;
    assume A1: s.a=0 & s.a5 > 0 & s.a4=m3+s.a5 & m3=s.a3-1 &
         s.a2=md & md >= n0+1 & md <= m3 & n0+1 <= s.a3 & s.a4 <= n0+n;
    assume A2: f is_FinSequence_on s,n0;
    assume A3: f1 is_FinSequence_on IExec(WH3,s),n0;
    assume A4: n0 >= 7 & len f=n & len f1=n;
A5: card WB3 > 0 by Lm17;
      n0+1 >= 7+1 by A4,AXIOMS:24;
then A6: md >= 8 by A1,AXIOMS:22;
then A7: md > 0 by AXIOMS:22;
    defpred P[Nat] means
      for t be State of SCMPDS,n3 be Nat,g,g1 be FinSequence of INT st
     t.a=0 & t.a5 > 0 & t.a5<= $1+1 & t.a4=n3+t.a5 & n3=t.a3-1 &
     t.a2=md & md <= n3 & n0+1 <= t.a3 & t.a4 <= n0+n &
     g is_FinSequence_on t,n0 &
         g1 is_FinSequence_on IExec(WH3,t),n0 & len g=n & len g1=n
       holds IExec(WH3,t).a=0 & IExec(WH3,t).a1=t.a1 &
       IExec(WH3,t).a2=md & IExec(WH3,t).a4 >= md &
       IExec(WH3,t).a4 <= t.a4 & g,g1 are_fiberwise_equipotent &
       (for i be Nat st t.a3<=i & i <= IExec(WH3,t).a4 holds
         IExec(WH3,t).intpos md >= IExec(WH3,t).intpos i) &
       (for i be Nat st IExec(WH3,t).a4 < i & i <= t.a4 holds
         IExec(WH3,t).intpos md <= IExec(WH3,t).intpos i) &
       (for i be Nat st i >= n0+1 & (i < t.a3 or i > t.a4) holds
         IExec(WH3,t).intpos i = t.intpos i);
A8: P[0]
    proof
      let t be State of SCMPDS,n3 be Nat,g,g1 be FinSequence of INT;
       assume A9: t.a=0 & t.a5 > 0 & t.a5<= 0+1 & t.a4=n3+t.a5 &
                  n3=t.a3-1 & t.a2=md & md <= n3 & n0+1 <= t.a3 & t.a4 <= n0+n;
       assume A10: g is_FinSequence_on t,n0;
       assume A11: g1 is_FinSequence_on IExec(WH3,t),n0;
       assume A12: len g=n & len g1=n;
       set t1=IExec(WB3,t);

      DataLoc(t.a,5)=intpos(0+5) by A9,SCMP_GCD:5;
then A13:  t.DataLoc(t.a,5) > 0 by A9;
A14:  t.a4=t.a3-1+t.a5 & md <= t.a3-1 by A9;
A15:  now
         let v be State of SCMPDS;
         assume A16: v.a4=v.a3-1+v.a5 & md <= v.a3-1 &
            v.a2=t.a2 & v.a=t.a & v.DataLoc(t.a,5) > 0;
            then v.a3-1 > 0 by A7;
            then reconsider mm=v.a3-1 as Nat by INT_1:16;
      A17:  v.a2=md by A9,A16;
      A18:  v.a=0 by A9,A16;
      A19:  DataLoc(t.a,5)=intpos(0+5) by A9,SCMP_GCD:5;
      then A20:  v.a5 > 0 by A16;
      A21:  v.a4=mm+v.a5 & md <= mm by A16;
           set Iv=IExec(WB3,v);
        thus Iv.a=v.a by A6,A9,A16,A20,A21,Lm20;
        thus WB3 is_closed_on v & WB3 is_halting_on v
          by A6,A9,A16,A20,A21,Lm20;
        thus Iv.DataLoc(t.a,5) < v.DataLoc(t.a,5) by A6,A17,A18,A19,A20,A21,
Lm20;
        thus Iv.a4=Iv.a3-1+Iv.a5 by A6,A9,A16,A20,A21,Lm20;
            Iv.a3 >= v.a3 by A6,A9,A16,A20,A21,Lm20;
          then Iv.a3-1 >= v.a3-1 by REAL_1:49;
        hence md <= Iv.a3-1 by A16,AXIOMS:22;
        thus Iv.a2=v.a2 by A6,A9,A16,A20,A21,Lm20;
     end;
A22: t1.a=0 & t1.a1=t.a1 & t1.a2=md & t1.a3 >= t.a3 & t1.a4 <= t.a4 &
    t1.a4 >= n3 & t1.a5 < t.a5 & t1.a5 >= -1 & t1.a4=t1.a3-1+t1.a5
    by A6,A9,Lm20;
    consider n1,n2 be Nat such that
A23: n1=t1.a3-1 & n2=t1.a4+1 &
    (for i be Nat st i >= 8 & i <>n1 & i<> n2 holds t1.intpos i=t.intpos i) &
    (t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2 or
t.a3 <= n1 & n2 <= t.a4 & t1.intpos n1=t.intpos n2 &
   t1.intpos n2=t.intpos n1) &
    (for i be Nat st t.a3<=i & i <= n1 holds t1.intpos md >= t1.intpos i) &
    (for i be Nat st n2<=i & i <= t.a4 holds t1.intpos md <= t1.intpos i)
     by A6,A9,Lm20;
A24:  DataLoc(t1.a,5)=intpos(0+5) by A22,SCMP_GCD:5;
       t1.a5+1 <= t.a5 by A22,INT_1:20;
     then t1.a5+1 <= 0+1 by A9,AXIOMS:22;
then A25:  t1.a5 <= 0 by REAL_1:53;
     set t2=IExec(WH3,t);
A26:  now let x;
        thus t2.x =IExec(WH3,t1).x by A13,A14,A15,Lm17,Th7
        .=t1.x by A24,A25,SCMPDS_8:23;
     end;
     hence t2.a=0 by A22;
     thus t2.a1=t.a1 by A22,A26;
     thus t2.a2=md by A22,A26;
            t2.a4 >= n3 by A22,A26;
     hence t2.a4 >= md by A9,AXIOMS:22;
     thus t2.a4 <= t.a4 by A22,A26;
A27:  now let i be Nat;
         assume A28: i >= n0+1 & i<>n1 & i<>n2;
             n0+1 >= 7+1 by A4,AXIOMS:24;
       then A29: i >= 8 by A28,AXIOMS:22;
          thus t2.intpos i=t1.intpos i by A26
            .=t.intpos i by A23,A28,A29;
     end;
A30:  n1 <= n2 by A22,A23,Lm23;
A31:  t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or
     t.a3 <= n1 & n2 <= t.a4 &
     t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1
     proof
          per cases by A23;
          suppose t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2;
            hence thesis by A26;
          suppose t.a3 <= n1 & n2 <= t.a4 &
              t1.intpos n1=t.intpos n2 & t1.intpos n2=t.intpos n1;
           hence thesis by A26;
     end;
   t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or
     n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n &
     t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1
     proof
          per cases by A31;
          suppose t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2;
            hence thesis;
          suppose A32:t.a3 <= n1 & n2 <= t.a4 &
              t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1;
          then A33: n1 >= n0+1 by A9,AXIOMS:22;
            n2 <= n0+n by A9,A32,AXIOMS:22;
           hence thesis by A30,A32,A33,AXIOMS:22;
     end;
     hence g,g1 are_fiberwise_equipotent by A10,A11,A12,A27,Lm24;
   t1.a4=n2-1 by A23,XCMPLX_1:26;
then A34:  t2.a4=n2-1 by A26;
     hereby let i be Nat;
        assume A35: t.a3 <= i & i <= t2.a4;
          t2.a4 < n2 by A34,INT_1:26;
        then i < n2 by A35,AXIOMS:22;
        then i <= n1 by A22,A23,A25,Lm22;
        then t1.intpos md >= t1.intpos i by A23,A35;
        then t2.intpos md >= t1.intpos i by A26;
        hence t2.intpos md >= t2.intpos i by A26;
     end;
     hereby let i be Nat;
        assume A36: t2.a4 < i & i <= t.a4;
          t2.a4+1=n2 by A34,XCMPLX_1:27;
        then n2 <= i by A36,INT_1:20;
        then t1.intpos md <= t1.intpos i by A23,A36;
        then t2.intpos md <= t1.intpos i by A26;
      hence t2.intpos md <= t2.intpos i by A26;
     end;
     thus for i be Nat st i >= n0+1 & (i < t.a3 or i > t.a4) holds
         t2.intpos i = t.intpos i by A27,A30,A31,Lm25;
   end;
A37:now
       let k be Nat;
       assume A38: P[k];
         now
          let t be State of SCMPDS,n3 be Nat,g,g1 be FinSequence of INT;
          assume A39: t.a=0 & t.a5 > 0 & t.a5<= (k+1)+1 & t.a4=n3+t.a5 &
                  n3=t.a3-1 & t.a2=md & md <= n3 & n0+1 <= t.a3 & t.a4 <= n0+n;
          assume A40: g is_FinSequence_on t,n0;
          assume A41: g1 is_FinSequence_on IExec(WH3,t),n0;
          assume A42: len g=n & len g1=n;
          set t1=IExec(WB3,t);
           DataLoc(t.a,5)=intpos(0+5) by A39,SCMP_GCD:5;
then A43:     t.DataLoc(t.a,5) > 0 by A39;
A44:     t.a4=t.a3-1+t.a5 & md <= t.a3-1 by A39;
A45:     now
         let v be State of SCMPDS;
         assume A46: v.a4=v.a3-1+v.a5 & md <= v.a3-1 &
            v.a2=t.a2 & v.a=t.a & v.DataLoc(t.a,5) > 0;
            then v.a3-1 > 0 by A7;
            then reconsider mm=v.a3-1 as Nat by INT_1:16;
      A47:  v.a2=md by A39,A46;
      A48:  v.a=0 by A39,A46;
      A49:  DataLoc(t.a,5)=intpos(0+5) by A39,SCMP_GCD:5;
      then A50:  v.a5 > 0 by A46;
      A51:  v.a4=mm+v.a5 & md <= mm by A46;
           set Iv=IExec(WB3,v);
        thus Iv.a=v.a by A6,A39,A46,A50,A51,Lm20;
        thus WB3 is_closed_on v & WB3 is_halting_on v
          by A6,A39,A46,A50,A51,Lm20;
        thus Iv.DataLoc(t.a,5) < v.DataLoc(t.a,5) by A6,A47,A48,A49,A50,A51,
Lm20;
        thus Iv.a4=Iv.a3-1+Iv.a5 by A6,A39,A46,A50,A51,Lm20;
            Iv.a3 >= v.a3 by A6,A39,A46,A50,A51,Lm20;
          then Iv.a3-1 >= v.a3-1 by REAL_1:49;
        hence md <= Iv.a3-1 by A46,AXIOMS:22;
        thus Iv.a2=v.a2 by A6,A39,A46,A50,A51,Lm20;
      end;
A52:   t1.a=0 & t1.a1=t.a1 & t1.a2=md & t1.a3 >= t.a3 & t1.a4 <= t.a4 &
      t1.a4 >= n3 & t1.a5 < t.a5 & t1.a5 >= -1 & t1.a4=t1.a3-1+t1.a5
      by A6,A39,Lm20;
      consider n1,n2 be Nat such that
A53:   n1=t1.a3-1 & n2=t1.a4+1 &
    (for i be Nat st i >= 8 & i <>n1 & i<> n2 holds t1.intpos i=t.intpos i) &
    (t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2 or
 t.a3 <= n1 & n2 <= t.a4 & t1.intpos n1=t.intpos n2 &
 t1.intpos n2=t.intpos n1) &
    (for i be Nat st t.a3<=i & i <= n1 holds t1.intpos md >= t1.intpos i) &
    (for i be Nat st n2<=i & i <= t.a4 holds t1.intpos md <= t1.intpos i)
     by A6,A39,Lm20;
A54:  DataLoc(t1.a,5)=intpos(0+5) by A52,SCMP_GCD:5;
       t1.a5+1 <= t.a5 by A52,INT_1:20;
     then t1.a5+1 <= (k+1)+1 by A39,AXIOMS:22;
then A55:  t1.a5 <= k+1 by REAL_1:53;
A56:  n1 <= n2 by A52,A53,Lm23;
     set t2=IExec(WH3,t);

     per cases;
     suppose A57: t1.a5 > 0;
        set t3=IExec(WH3,t1);
        consider f3 be FinSequence of INT such that
   A58:  len f3=n & for i be Nat st 1<=i & i <= len f3 holds
          f3.i=t1.intpos(n0+i) by SCPISORT:2;
   A59:  f3 is_FinSequence_on t1,n0 by A58,SCPISORT:def 1;
        consider f4 be FinSequence of INT such that
   A60:  len f4=n & for i be Nat st 1<=i & i <= len f4 holds
          f4.i=t3.intpos(n0+i) by SCPISORT:2;
   A61:  f4 is_FinSequence_on t3,n0 by A60,SCPISORT:def 1;
          t1.a3-1 >= t.a3-1 by A52,REAL_1:49;
   then A62:  md <= n1 by A39,A53,AXIOMS:22;
   A63:  n0+1 <= t1.a3 by A39,A52,AXIOMS:22;
   A64:  t1.a4 <= n0+n by A39,A52,AXIOMS:22;
   then A65:  t3.a=0 & t3.a1=t1.a1 & t3.a2=md & t3.a4 >= md & t3.a4 <= t1.a4 &
        f3,f4 are_fiberwise_equipotent &
       (for i be Nat st t1.a3<=i & i <= t3.a4 holds
         t3.intpos md >= t3.intpos i) &
       (for i be Nat st t3.a4 < i & i <= t1.a4 holds
         t3.intpos md <= t3.intpos i) &
         (for i be Nat st i >= n0+1 & (i < t1.a3 or i > t1.a4) holds
         t3.intpos i = t1.intpos i)
           by A38,A52,A53,A55,A57,A58,A59,A60,A61,A62,A63;
   A66:  t2 =t3 by A43,A44,A45,Lm17,Th7;
        hence t2.a=0 by A38,A52,A53,A55,A57,A58,A59,A60,A61,A62,A63,A64;
        thus t2.a1=t.a1 by A6,A39,A65,A66,Lm20;
        thus t2.a2=md by A38,A52,A53,A55,A57,A58,A59,A60,A61,A62,A63,A64,A66;
        thus t2.a4 >= md by A38,A52,A53,A55,A57,A58,A59,A60,A61,A62,A63,A64,A66
;
        thus t2.a4 <= t.a4 by A52,A65,A66,AXIOMS:22;
   A67:  now let i be Nat;
         assume A68: i >= n0+1 & i<>n1 & i<>n2;
             n0+1 >= 7+1 by A4,AXIOMS:24;
       then i >= 8 by A68,AXIOMS:22;
          hence t1.intpos i=t.intpos i by A53,A68;
      end;
      t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2 or
        n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n &
        t1.intpos n1=t.intpos n2 & t1.intpos n2=t.intpos n1
        proof
          per cases by A53;
          suppose t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2;
            hence thesis;
          suppose A69:t.a3 <= n1 & n2 <= t.a4 &
              t1.intpos n1=t.intpos n2 & t1.intpos n2=t.intpos n1;
          then A70: n1 >= n0+1 by A39,AXIOMS:22;
            n2 <= n0+n by A39,A69,AXIOMS:22;
           hence thesis by A56,A69,A70,AXIOMS:22;
      end;
 then A71:  g,f3 are_fiberwise_equipotent by A40,A42,A58,A59,A67,Lm24;
          now
          let i be Nat;
          assume i in Seg n;
           then A72: 1 <= i & i <= n by FINSEQ_1:3;
        hence f4.i=t2.intpos (n0+i) by A60,A66
            .=g1.i by A41,A42,A72,SCPISORT:def 1;
      end;
      then f4=g1 by A42,A60,FINSEQ_2:10;
    hence g,g1 are_fiberwise_equipotent by A65,A71,RFINSEQ:2;
         n1 < t1.a3 by A53,INT_1:26;
   then md < t1.a3 by A62,AXIOMS:22;
   then A73: t2.intpos md = t1.intpos md by A1,A38,A52,A53,A55,A57,A58,A59,A60,
A61,A62,A63,A64,A66;
   A74: t1.a3=n1+1 by A53,XCMPLX_1:27;
      hereby
          let i be Nat;
          assume A75: t.a3<=i & i <= t2.a4;
          then A76: i <= t3.a4 by A5,A43,A44,A45,Th7;
          A77: n0+1 <= i by A39,A75,AXIOMS:22;
          hereby
            per cases;
            suppose A78: i < t1.a3;
            then A79: i <= n1 by A74,INT_1:20;
              t2.intpos i = t1.intpos i by A38,A52,A53,A55,A57,A58,A59,A60,A61,
A62,A63,A64,A66,A77,A78;
             hence t2.intpos md >= t2.intpos i by A53,A73,A75,A79;
            suppose i >= t1.a3;
               then t3.intpos md >= t3.intpos i by A38,A52,A53,A55,A57,A58,A59,
A60,A61,A62,A63,A64,A76;
            hence t2.intpos md >= t2.intpos i by A66;
        end;
      end;
      hereby
          let i be Nat;
          assume A80: t2.a4 < i & i <= t.a4;
          then A81: t3.a4 < i by A5,A43,A44,A45,Th7;
          hereby
            per cases;
            suppose A82: i > t1.a4;
            then A83: i >= n2 by A53,INT_1:20;
                  t1.a4 > n1+0 by A52,A53,A57,REAL_1:53
;
                then n2 > n1+1 by A53,REAL_1:53;
                then n2 >= n0+1 by A63,A74,AXIOMS:22;
            then i >= n0+1 by A83,AXIOMS:22;
            then t2.intpos i = t1.intpos i by A38,A52,A53,A55,A57,A58,A59,A60,
A61,A62,A63,A64,A66,A82;
             hence t2.intpos md <= t2.intpos i by A53,A73,A80,A83;
            suppose i <= t1.a4;
               then t3.intpos md <= t3.intpos i by A38,A52,A53,A55,A57,A58,A59,
A60,A61,A62,A63,A64,A81;
            hence t2.intpos md <= t2.intpos i by A66;
        end;
      end;
      hereby
          let i be Nat;
          assume A84: i >= n0+1 & (i < t.a3 or i > t.a4);
             n0+1 >= 7+1 by A4,AXIOMS:24;
          then i >= 8 by A84,AXIOMS:22;
      then A85: t1.intpos i = t.intpos i by A53,A56,A84,Lm25;
          per cases by A84;
          suppose i < t.a3;
      then i < t1.a3 by A52,AXIOMS:22;
           hence t2.intpos i =t.intpos i by A38,A52,A53,A55,A57,A58,A59,A60,A61
,A62,A63,A64,A66,A84,A85;
          suppose i > t.a4;
      then i > t1.a4 by A52,AXIOMS:22;
           hence t2.intpos i =t.intpos i by A38,A52,A53,A55,A57,A58,A59,A60,A61
,A62,A63,A64,A66,A84,A85;
     end;

     suppose A86: t1.a5 <= 0;
A87:   now let x;
        thus t2.x =IExec(WH3,t1).x by A43,A44,A45,Lm17,Th7
        .=t1.x by A54,A86,SCMPDS_8:23;
      end;
      hence t2.a=0 by A52;
      thus t2.a1=t.a1 by A52,A87;
      thus t2.a2=md by A52,A87;
          t2.a4 >= n3 by A52,A87;
      hence t2.a4 >= md by A39,AXIOMS:22;
      thus t2.a4 <= t.a4 by A52,A87;
A88:   now let i be Nat;
         assume A89: i >= n0+1 & i<>n1 & i<>n2;
             n0+1 >= 7+1 by A4,AXIOMS:24;
       then A90: i >= 8 by A89,AXIOMS:22;
          thus t2.intpos i=t1.intpos i by A87
            .=t.intpos i by A53,A89,A90;
      end;
A91:  t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or
     t.a3 <= n1 & n2 <= t.a4 &
     t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1
     proof
          per cases by A53;
          suppose t1.intpos n1=t.intpos n1 & t1.intpos n2=t.intpos n2;
            hence thesis by A87;
          suppose t.a3 <= n1 & n2 <= t.a4 &
              t1.intpos n1=t.intpos n2 & t1.intpos n2=t.intpos n1;
           hence thesis by A87;
     end;
   t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2 or
     n1 >= n0+1 & n2 >= n0+1 & n1 <= n0+n & n2 <= n0+n &
     t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1
     proof
          per cases by A91;
          suppose t2.intpos n1=t.intpos n1 & t2.intpos n2=t.intpos n2;
            hence thesis;
          suppose A92:t.a3 <= n1 & n2 <= t.a4 &
              t2.intpos n1=t.intpos n2 & t2.intpos n2=t.intpos n1;
          then A93: n1 >= n0+1 by A39,AXIOMS:22;
            n2 <= n0+n by A39,A92,AXIOMS:22;
           hence thesis by A56,A92,A93,AXIOMS:22;
     end;
      hence g,g1 are_fiberwise_equipotent by A40,A41,A42,A88,Lm24;
    t1.a4=n2-1 by A53,XCMPLX_1:26;
then A94:   t2.a4=n2-1 by A87;
      hereby let i be Nat;
        assume A95: t.a3 <= i & i <= t2.a4;
          t2.a4 < n2 by A94,INT_1:26;
        then i < n2 by A95,AXIOMS:22;
        then i <= n1 by A52,A53,A86,Lm22;
        then t1.intpos md >= t1.intpos i by A53,A95;
        then t2.intpos md >= t1.intpos i by A87;
        hence t2.intpos md >= t2.intpos i by A87;
      end;
      hereby let i be Nat;
        assume A96: t2.a4 < i & i <= t.a4;
          t2.a4+1=n2 by A94,XCMPLX_1:27;
        then n2 <= i by A96,INT_1:20;
        then t1.intpos md <= t1.intpos i by A53,A96;
        then t2.intpos md <= t1.intpos i by A87;
       hence t2.intpos md <= t2.intpos i by A87;
      end;
      thus for i be Nat st i >= n0+1 & (i < t.a3 or i > t.a4) holds
         t2.intpos i = t.intpos i by A56,A88,A91,Lm25;
     end;
     hence P[k+1];
   end;
A97: for k be Nat holds P[k] from Ind(A8,A37);
      s.a5 >=1+0 by A1,INT_1:20;
    then s.a5-1 >= 0 by SQUARE_1:12;
    then reconsider m5=s.a5-1 as Nat by INT_1:16;
  s.a5=m5+1 by XCMPLX_1:27;
    hence thesis by A1,A2,A3,A4,A97;
end;

Lm27:
 for s be State of SCMPDS,md,m3,n0 be Nat st s.GBP=0 & s.a5 > 0 &
 s.a4=m3+s.a5 & m3=s.a3-1 & s.a2=md & md >= n0+1 & md <= m3 & n0 >= 7
holds WH3 is_closed_on s & WH3 is_halting_on s
proof
    let s be State of SCMPDS,md,m3,n0 be Nat;
    set a=GBP;
    assume A1: s.a=0 & s.a5 > 0 & s.a4=m3+s.a5 & m3=s.a3-1 & s.a2=md &
       md >= n0+1 & md <= m3 & n0 >= 7;
    then n0+1 >= 7+1 by AXIOMS:24;
then A2: md >= 8 by A1,AXIOMS:22;
then A3: md > 0 by AXIOMS:22;
A4: DataLoc(s.a,5)=intpos(0+5) by A1,SCMP_GCD:5;
A5:  s.a4=s.a3-1+s.a5 & md <= s.a3-1 by A1;
   now
         let v be State of SCMPDS;
         assume A6: v.a4=v.a3-1+v.a5 & md <= v.a3-1 &
            v.a2=s.a2 & v.a=s.a & v.DataLoc(s.a,5) > 0;
            then v.a3-1 > 0 by A3;
            then reconsider mm=v.a3-1 as Nat by INT_1:16;
      A7:  v.a2=md by A1,A6;
      A8:  v.a=0 by A1,A6;
      A9:  v.a5 > 0 by A4,A6;
      A10:  v.a4=mm+v.a5 & md <= mm by A6;
           set Iv=IExec(WB3,v);
        thus Iv.a=v.a by A1,A2,A6,A9,A10,Lm20;
        thus WB3 is_closed_on v & WB3 is_halting_on v
          by A1,A2,A6,A9,A10,Lm20;
        thus Iv.DataLoc(s.a,5) < v.DataLoc(s.a,5) by A2,A4,A7,A8,A9,A10,Lm20;
        thus Iv.a4=Iv.a3-1+Iv.a5 by A1,A2,A6,A9,A10,Lm20;
            Iv.a3 >= v.a3 by A1,A2,A6,A9,A10,Lm20;
          then Iv.a3-1 >= v.a3-1 by REAL_1:49;
        hence md <= Iv.a3-1 by A6,AXIOMS:22;
        thus Iv.a2=v.a2 by A1,A2,A6,A9,A10,Lm20;
     end;
     hence thesis by A5,Lm17,Th7;
end;

Lm28:
  for s being State of SCMPDS st s.GBP=0 holds
    IExec(K4,s).GBP=0 & IExec(K4,s).a1=s.a1 &
    IExec(K4,s).a2=s.a2 & IExec(K4,s).a3=s.a2+1 &
    IExec(K4,s).a4=s.a4 & IExec(K4,s).a5=s.a4-s.a2 &
    (for i be Nat st i >= 8 holds IExec(K4,s).intpos i=s.intpos i)
proof
   let s be State of SCMPDS;
   set a=GBP;
   assume A1: s.a=0;
   set t0=Initialized s,
       t1=IExec(k1 ';' k2 ';' k3 ';' k4,s),
       t2=IExec(k1 ';' k2 ';' k3,s),
       t3=IExec(k1 ';' k2,s),
       t4=Exec(k1, t0);
A2: t0.a=0 by A1,SCMPDS_5:40;
A3: t0.a1=s.a1 by SCMPDS_5:40;
A4: t0.a2=s.a2 by SCMPDS_5:40;
A5: t0.a4=s.a4 by SCMPDS_5:40;

A6:  DataLoc(t0.a,5)=intpos (0+5) by A2,SCMP_GCD:5;
     then a<>DataLoc(t0.a,5) by SCMP_GCD:4,def 2;
then A7: t4.a =0 by A2,SCMPDS_2:59;
       a1<>DataLoc(t0.a,5) by A6,SCMP_GCD:4;
then A8: t4.a1 =s.a1 by A3,SCMPDS_2:59;
     A9: a2<>DataLoc(t0.a,5) by A6,SCMP_GCD:4;
then A10: t4.a2 =s.a2 by A4,SCMPDS_2:59;
       a4<>DataLoc(t0.a,5) by A6,SCMP_GCD:4;
then A11: t4.a4 =s.a4 by A5,SCMPDS_2:59;
A12: t4.a5=t0.DataLoc(t0.a,4) by A6,SCMPDS_2:59
      .=t0.intpos (0+4) by A2,SCMP_GCD:5
      .=s.a4 by SCMPDS_5:40;
A13: now let i be Nat;
        assume i>=8;
        then i > 5 by AXIOMS:22;
    then intpos i <> DataLoc(t0.a,5) by A6,SCMP_GCD:4;
        hence t4.intpos i=t0.intpos i by SCMPDS_2:59
          .=s.intpos i by SCMPDS_5:40;
     end;

A14:  DataLoc(t4.a,5)=intpos (0+5) by A7,SCMP_GCD:5;
then A15:  a<>DataLoc(t4.a,5) by SCMP_GCD:4,def 2;
A16: t3.a=Exec(k2, t4).a by SCMPDS_5:47
     .=0 by A7,A15,SCMPDS_2:62;
A17:  a1<>DataLoc(t4.a,5) by A14,SCMP_GCD:4;
A18: t3.a1=Exec(k2, t4).a1 by SCMPDS_5:47
     .=s.a1 by A8,A17,SCMPDS_2:62;
A19:  a2<>DataLoc(t4.a,5) by A14,SCMP_GCD:4;
A20: t3.a2=Exec(k2, t4).a2 by SCMPDS_5:47
     .=s.a2 by A10,A19,SCMPDS_2:62;
A21:  a4<>DataLoc(t4.a,5) by A14,SCMP_GCD:4;
A22: t3.a4=Exec(k2, t4).a4 by SCMPDS_5:47
     .=s.a4 by A11,A21,SCMPDS_2:62;
A23: t3.a5=Exec(k2, t4).a5 by SCMPDS_5:47
     .=t4.a5-t4.DataLoc(t4.a,2) by A14,SCMPDS_2:62
     .=t4.a5-t4.intpos(0+2) by A7,SCMP_GCD:5
     .=s.a4-s.a2 by A4,A9,A12,SCMPDS_2:59;
A24: now let i be Nat;
        assume A25:i>=8;
        then i > 5 by AXIOMS:22;
    then A26: intpos i <> DataLoc(t4.a,5) by A14,SCMP_GCD:4;
        thus t3.intpos i=Exec(k2, t4).intpos i by SCMPDS_5:47
             .=t4.intpos i by A26,SCMPDS_2:62
             .=s.intpos i by A13,A25;
     end;

A27:  DataLoc(t3.a,3)=intpos (0+3) by A16,SCMP_GCD:5;
then A28:  a <> DataLoc(t3.a,3) by SCMP_GCD:4,def 2;
A29: t2.a =Exec(k3, t3).a by SCMPDS_5:46
     .=0 by A16,A28,SCMPDS_2:59;
A30:  a1 <> DataLoc(t3.a,3) by A27,SCMP_GCD:4;
A31: t2.a1 =Exec(k3, t3).a1 by SCMPDS_5:46
     .=s.a1 by A18,A30,SCMPDS_2:59;
A32:  a2 <> DataLoc(t3.a,3) by A27,SCMP_GCD:4;
A33: t2.a2 =Exec(k3, t3).a2 by SCMPDS_5:46
     .=s.a2 by A20,A32,SCMPDS_2:59;
A34: t2.a3 =Exec(k3, t3).a3 by SCMPDS_5:46
     .=t3.DataLoc(t3.a,2) by A27,SCMPDS_2:59
     .=t3.intpos (0+2) by A16,SCMP_GCD:5
     .=s.a2 by A20;
A35:  a4 <> DataLoc(t3.a,3) by A27,SCMP_GCD:4;
A36: t2.a4 =Exec(k3, t3).a4 by SCMPDS_5:46
     .=s.a4 by A22,A35,SCMPDS_2:59;
A37:  a5<>DataLoc(t3.a,3) by A27,SCMP_GCD:4;
A38: t2.a5 =Exec(k3, t3).a5 by SCMPDS_5:46
     .=s.a4-s.a2 by A23,A37,SCMPDS_2:59;
A39: now let i be Nat;
        assume A40:i>=8;
        then i > 3 by AXIOMS:22;
    then A41: intpos i <> DataLoc(t3.a,3) by A27,SCMP_GCD:4;
        thus t2.intpos i=Exec(k3, t3).intpos i by SCMPDS_5:46
             .=t3.intpos i by A41,SCMPDS_2:59
             .=s.intpos i by A24,A40;
     end;

A42:  DataLoc(t2.a,3)=intpos (0+3) by A29,SCMP_GCD:5;
then A43:  a<>DataLoc(t2.a,3) by SCMP_GCD:4,def 2;
   thus t1.a =Exec(k4, t2).a by SCMPDS_5:46
       .=0 by A29,A43,SCMPDS_2:60;
A44:  a1<>DataLoc(t2.a,3) by A42,SCMP_GCD:4;
   thus t1.a1 =Exec(k4, t2).a1 by SCMPDS_5:46
       .=s.a1 by A31,A44,SCMPDS_2:60;
A45:  a2<>DataLoc(t2.a,3) by A42,SCMP_GCD:4;
   thus t1.a2 =Exec(k4, t2).a2 by SCMPDS_5:46
       .=s.a2 by A33,A45,SCMPDS_2:60;
   thus t1.a3 =Exec(k4, t2).a3 by SCMPDS_5:46
      .=s.a2+1 by A34,A42,SCMPDS_2:60;
A46:  a4<>DataLoc(t2.a,3) by A42,SCMP_GCD:4;
   thus t1.a4 =Exec(k4, t2).a4 by SCMPDS_5:46
       .=s.a4 by A36,A46,SCMPDS_2:60;
A47:  a5<>DataLoc(t2.a,3) by A42,SCMP_GCD:4;
   thus t1.a5 =Exec(k4, t2).a5 by SCMPDS_5:46
       .=s.a4-s.a2 by A38,A47,SCMPDS_2:60;
   hereby let i be Nat;
        assume A48:i>=8;
        then i > 3 by AXIOMS:22;
    then A49: intpos i <> DataLoc(t2.a,3) by A42,SCMP_GCD:4;
        thus t1.intpos i=Exec(k4, t2).intpos i by SCMPDS_5:46
             .=t2.intpos i by A49,SCMPDS_2:60
             .=s.intpos i by A39,A48;
    end;
end;

theorem Th13:
 for s be State of SCMPDS,md,p0 be Nat st s.GBP=0 &
 s.intpos 4-s.intpos 2 > 0 & s.intpos 2=md & md >= p0+1 & p0 >= 7
 holds Partition is_closed_on s & Partition is_halting_on s
proof
    let s be State of SCMPDS,md,n0 be Nat;
    set s2=IExec(K4,s),
        a=GBP;
  assume A1: s.a=0 & s.a4-s.a2 > 0 & s.a2=md & md >= n0+1 & n0 >= 7;
then A2: s2.a=0 & s2.a2=s.a2 & s2.a3=s.a2+1 & s2.a4=s.a4 &
    s2.a5=s.a4-s.a2 by Lm28;
    set m3=md;
A3: s.a2=s2.a3-1 by A2,XCMPLX_1:26;
  s2.a4=m3+s2.a5 by A1,A2,XCMPLX_1:27;
then A4: WH3 is_closed_on s2 & WH3 is_halting_on s2 by A1,A2,A3,Lm27;
    set KW=K4 ';' WH3;
  KW is_closed_on s & KW is_halting_on s by A4,SCPISORT:10;
then KW ';' j8 is_closed_on s & KW ';' j8 is_halting_on s by SCPISORT:11;
then KW ';' j8 ';' j9 is_closed_on s & KW ';' j8 ';' j9 is_halting_on s
     by SCPISORT:11;
    hence Partition is_closed_on s & Partition is_halting_on s by Def1,SCPISORT
:11;
end;

theorem Th14:
 for s be State of SCMPDS,md,p0,n be Nat,f,f1 be FinSequence of INT
 st s.GBP=0 & s.intpos 4-s.intpos 2 > 0 & s.intpos 2=md &
 md >= p0+1 & s.intpos 4 <= p0+n & p0 >= 7 &
 f is_FinSequence_on s,p0 & len f=n &
 f1 is_FinSequence_on IExec(Partition,s),p0 & len f1=n
holds IExec(Partition,s).GBP=0 &
   IExec(Partition,s).intpos 1=s.intpos 1 &
   f,f1 are_fiberwise_equipotent &
   ex m4 be Nat st m4=IExec(Partition,s).intpos 4 &
   md <= m4 & m4 <= s.intpos 4 &
   (for i be Nat st md<=i & i < m4 holds
   IExec(Partition,s).intpos m4 >= IExec(Partition,s).intpos i) &
   (for i be Nat st m4 < i & i <= s.intpos 4 holds
   IExec(Partition,s).intpos m4 <= IExec(Partition,s).intpos i) &
   (for i be Nat st i >= p0+1 & (i < s.intpos 2 or i > s.intpos 4) holds
         IExec(Partition,s).intpos i = s.intpos i)
proof
    let s be State of SCMPDS,md,n0,n be Nat,f,f1 be FinSequence of INT;
    set s1=IExec(Partition,s),
        s2=IExec(K4,s),
        s3=IExec(K4 ';' WH3 ,s),
        a=GBP;
  assume A1: s.a=0 & s.a4-s.a2 > 0 & s.a2=md & md >= n0+1 & s.a4 <= n0+n &
            n0 >= 7;
  assume A2: f is_FinSequence_on s,n0 & len f=n;
  assume A3: f1 is_FinSequence_on s1,n0 & len f1=n;
A4: s2.GBP=0 & s2.a1=s.a1 & s2.a2=s.a2 & s2.a3=s.a2+1 & s2.a4=s.a4 &
    s2.a5=s.a4-s.a2 &
    (for i be Nat st i >= 8 holds s2.intpos i=s.intpos i) by A1,Lm28;
    set m3=md;
A5: s.a2=s2.a3-1 by A4,XCMPLX_1:26;
A6: m3=s2.a3-1 by A1,A4,XCMPLX_1:26;
A7: s2.a4=m3+s2.a5 by A1,A4,XCMPLX_1:27;
      s.a2 < s2.a3 by A4,REAL_1:69;
then A8: n0+1 <= s2.a3 by A1,AXIOMS:22;
    set s4=IExec(WH3,s2);
    consider f2 be FinSequence of INT such that
A9:  len f2=n & for i be Nat st 1<=i & i <= len f2 holds
     f2.i=s2.intpos(n0+i) by SCPISORT:2;
A10:  f2 is_FinSequence_on s2,n0 by A9,SCPISORT:def 1;
    consider f3 be FinSequence of INT such that
A11:  len f3=n & for i be Nat st 1<=i & i <= len f3 holds
     f3.i=s4.intpos(n0+i) by SCPISORT:2;
A12:  f3 is_FinSequence_on s4,n0 by A11,SCPISORT:def 1;
then A13:  s4.a=0 & s4.a1=s2.a1 & s4.a2=md & s4.a4 >= md & s4.a4 <= s2.a4 &
     f2,f3 are_fiberwise_equipotent &
     (for i be Nat st s2.a3<=i & i <= s4.a4 holds
      s4.intpos md >= s4.intpos i) &
     (for i be Nat st s4.a4 < i & i <= s2.a4 holds
      s4.intpos md <= s4.intpos i) &
     (for i be Nat st i >= n0+1 & (i < s2.a3 or i > s2.a4) holds
       s4.intpos i = s2.intpos i)
      by A1,A4,A5,A7,A8,A9,A10,A11,Lm26;
A14: WH3 is_closed_on s2 & WH3 is_halting_on s2 by A1,A4,A5,A7,Lm27;
    set KW=K4 ';' WH3;
A15: KW is_closed_on s & KW is_halting_on s by A14,SCPISORT:10;
then A16: KW ';' j8 is_closed_on s & KW ';' j8 is_halting_on s by SCPISORT:11;
then A17: KW ';' j8 ';' j9 is_closed_on s & KW ';' j8 ';' j9 is_halting_on s
     by SCPISORT:11;
A18:  s3.a=0 by A13,A14,SCPISORT:8;
A19:  n0+1 >= 7+1 by A1,AXIOMS:24;
then A20:  md >= 8 by A1,AXIOMS:22;
then A21:  md > 0 by AXIOMS:22;
A22:  s4.a4 >= 8 by A13,A20,AXIOMS:22;
A23:  s4.a4 > 0 by A13,A21;
     then reconsider m4=s4.a4 as Nat by INT_1:16;
A24:  s3.a2=md by A13,A14,SCPISORT:8;
A25:  s3.a4 =m4 by A14,SCPISORT:8;

    set t2=IExec(KW ';' j8 ';' j9,s),
        t3=IExec(KW ';' j8,s);

A26:  DataLoc(s3.a,6)=intpos(0+6) by A18,SCMP_GCD:5;
then A27:   a <> DataLoc(s3.a,6) by SCMP_GCD:4,def 2;
A28:  t3.a=Exec(j8,s3).a by A15,SCMPDS_7:50
      .=0 by A18,A27,SCMPDS_2:59;
A29:   a1 <> DataLoc(s3.a,6) by A26,SCMP_GCD:4;
A30:  t3.a1=Exec(j8,s3).a1 by A15,SCMPDS_7:50
      .=s3.a1 by A29,SCMPDS_2:59
      .=s.a1 by A4,A13,A14,SCPISORT:8;
A31:   a2 <> DataLoc(s3.a,6) by A26,SCMP_GCD:4;
A32:  t3.a2=Exec(j8,s3).a2 by A15,SCMPDS_7:50
      .=md by A24,A31,SCMPDS_2:59;
A33:   a4 <> DataLoc(s3.a,6) by A26,SCMP_GCD:4;
A34:  t3.a4=Exec(j8,s3).a4 by A15,SCMPDS_7:50
      .=m4 by A25,A33,SCMPDS_2:59;
A35:  t3.a6=Exec(j8,s3).a6 by A15,SCMPDS_7:50
      .=s3.DataLoc(s3.a4,0) by A26,SCMPDS_2:59
      .=s3.intpos(m4+0) by A25,SCMP_GCD:5
      .=s4.intpos m4 by A14,SCPISORT:8;
A36: now
       let i be Nat;
       assume i >= 8;
       then i > 6 by AXIOMS:22;
    then A37: intpos i<>DataLoc(s3.a,6) by A26,SCMP_GCD:4;
     thus t3.intpos i =Exec(j8,s3).intpos i by A15,SCMPDS_7:50
         .=s3.intpos i by A37,SCMPDS_2:59
         .=s4.intpos i by A14,SCPISORT:8;
     end;

A38:  DataLoc(t3.a4,0)=intpos(m4+0) by A34,SCMP_GCD:5;
then A39:   a <> DataLoc(t3.a4,0) by A23,SCMP_GCD:4,def 2;
A40:  t2.a=Exec(j9,t3).a by A16,SCMPDS_7:50
      .=0 by A28,A39,SCMPDS_2:59;
        m4 > 1 by A22,AXIOMS:22;
then A41:   a1 <> DataLoc(t3.a4,0) by A38,SCMP_GCD:4;
A42:  t2.a1=Exec(j9,t3).a1 by A16,SCMPDS_7:50
      .=s.a1 by A30,A41,SCMPDS_2:59;
        m4 > 2 by A22,AXIOMS:22;
then A43:   a2 <> DataLoc(t3.a4,0) by A38,SCMP_GCD:4;
A44:  t2.a2=Exec(j9,t3).a2 by A16,SCMPDS_7:50
      .=md by A32,A43,SCMPDS_2:59;
        m4 > 4 by A22,AXIOMS:22;
then A45:   a4 <> DataLoc(t3.a4,0) by A38,SCMP_GCD:4;
A46:  t2.a4=Exec(j9,t3).a4 by A16,SCMPDS_7:50
      .=m4 by A34,A45,SCMPDS_2:59;
        m4 > 6 by A22,AXIOMS:22;
then A47:   a6 <> DataLoc(t3.a4,0) by A38,SCMP_GCD:4;
A48:  t2.a6=Exec(j9,t3).a6 by A16,SCMPDS_7:50
      .=s4.intpos m4 by A35,A47,SCMPDS_2:59;
A49:  t2.intpos m4=Exec(j9,t3).intpos m4 by A16,SCMPDS_7:50
      .=t3.DataLoc(t3.a2,0) by A38,SCMPDS_2:59
      .=t3.intpos (md+0) by A32,SCMP_GCD:5
      .=s4.intpos md by A20,A36;
A50: now
       let i be Nat;
       assume A51: i >= 8 & i <> m4;
    then A52: intpos i<>DataLoc(t3.a4,0) by A38,SCMP_GCD:4;
     thus t2.intpos i =Exec(j9,t3).intpos i by A16,SCMPDS_7:50
         .=t3.intpos i by A52,SCMPDS_2:59
         .=s4.intpos i by A36,A51;
     end;
A53:  DataLoc(t2.a2,0)=intpos(md+0) by A44,SCMP_GCD:5;
then A54:   a <> DataLoc(t2.a2,0) by A21,SCMP_GCD:4,def 2;
    thus s1.a=Exec(j0,t2).a by A17,Def1,SCMPDS_7:50
      .=0 by A40,A54,SCMPDS_2:59;
        md > 1 by A20,AXIOMS:22;
then A55:   a1 <> DataLoc(t2.a2,0) by A53,SCMP_GCD:4;
   thus s1.a1=Exec(j0,t2).a1 by A17,Def1,SCMPDS_7:50
      .=s.a1 by A42,A55,SCMPDS_2:59;

A56:  s1.intpos md=Exec(j0,t2).intpos md by A17,Def1,SCMPDS_7:50
      .=t2.DataLoc(t2.a,6) by A53,SCMPDS_2:59
      .=t2.intpos (0+6) by A40,SCMP_GCD:5
      .=s4.intpos m4 by A48;
A57:  now
         per cases;
         suppose m4=md;
       hence s1.intpos m4=s4.intpos md by A56;
         suppose m4<>md;
     then A58:  intpos m4 <> DataLoc(t2.a2,0) by A53,SCMP_GCD:4;
         thus s1.intpos m4=Exec(j0,t2).intpos m4 by A17,Def1,SCMPDS_7:50
            .=s4.intpos md by A49,A58,SCMPDS_2:59;
      end;
A59: now
       let i be Nat;
       assume A60: i >= 8 & i <> m4 & i<>md;
    then A61: intpos i<>DataLoc(t2.a2,0) by A53,SCMP_GCD:4;
     thus s1.intpos i =Exec(j0,t2).intpos i by A17,Def1,SCMPDS_7:50
         .=t2.intpos i by A61,SCMPDS_2:59
         .=s4.intpos i by A50,A60;
     end;

A62:   md-n0 >= 1 by A1,REAL_1:84;
      then md-n0 > 0 by AXIOMS:22;
      then reconsider n1=md-n0 as Nat by INT_1:16;
        md < s.a4 by A1,REAL_2:106;
      then md < n0+n by A1,AXIOMS:22;
then A63:   n1 <= len f3 by A11,REAL_1:86;
        m4-n0 >= md-n0 by A13,REAL_1:49;
then A64:   m4-n0 >= 1 by A62,AXIOMS:22;
      then m4-n0 > 0 by AXIOMS:22;
      then reconsider n2=m4-n0 as Nat by INT_1:16;
        m4 <= n0+n by A1,A4,A13,AXIOMS:22;
then A65:   n2 <= len f3 by A11,REAL_1:86;
A66:   md=n0+n1 by XCMPLX_1:27;
A67:   m4=n0+n2 by XCMPLX_1:27;
A68:   f3.n1=s1.intpos m4 by A11,A57,A62,A63,A66
      .=f1.n2 by A3,A11,A64,A65,A67,SCPISORT:def 1;
A69:   f3.n2=s1.intpos md by A11,A56,A64,A65,A67
      .=f1.n1 by A3,A11,A62,A63,A66,SCPISORT:def 1;
   now
         let k be Nat;
         assume A70: k<>n1 & k<>n2 & 1<=k & k <= len f3;
         then A71:  k+n0<>md by A66,XCMPLX_1:2;
         A72:  k+n0<>m4 by A67,A70,XCMPLX_1:2;
                k+n0 >= n0+1 by A70,AXIOMS:24;
         then A73:  k+n0 >= 8 by A19,AXIOMS:22;
         thus f3.k=s4.intpos(n0+k) by A11,A70
         .=s1.intpos(n0+k) by A59,A71,A72,A73
         .=f1.k by A3,A11,A70,SCPISORT:def 1;
     end;
     then f3,f1 are_fiberwise_equipotent
        by A3,A11,A62,A63,A64,A65,A68,A69,SCPISORT:4;
then A74:  f2,f1 are_fiberwise_equipotent by A13,RFINSEQ:2;
       now
        let i be Nat;
         assume i in Seg n;
         then A75: 1 <= i & i <= n by FINSEQ_1:3;
             then i+n0 >= n0+1 by AXIOMS:24;
         then A76: n0+i >= 8 by A19,AXIOMS:22;
        thus f2.i=s2.intpos (n0+i) by A9,A75
            .=s.intpos (n0+i) by A1,A76,Lm28
            .=f.i by A2,A75,SCPISORT:def 1;
      end;
     hence f,f1 are_fiberwise_equipotent by A2,A9,A74,FINSEQ_2:10;
     take m4;
        md > 4 by A20,AXIOMS:22;
then A77:   a4 <> DataLoc(t2.a2,0) by A53,SCMP_GCD:4;
   thus s1.a4=Exec(j0,t2).a4 by A17,Def1,SCMPDS_7:50
      .=m4 by A46,A77,SCMPDS_2:59;
   thus md <= m4 by A1,A4,A6,A7,A8,A9,A10,A11,A12,Lm26;
   thus m4 <= s.a4 by A4,A13;
A78: s2.a3=md+1 by A1,Lm28;
    hereby
         let i be Nat;
         assume A79: md<=i & i < m4;
         per cases;
        suppose A80: i=md;
          then s2.a3 <= m4 by A78,A79,INT_1:20;
          then s4.intpos md >= s4.intpos m4 by A1,A4,A6,A7,A8,A9,A10,A11,A12,
Lm26;
          hence s1.intpos m4 >= s1.intpos i by A56,A57,A80;
        suppose i<>md;
       then A81: md < i by A79,REAL_1:def 5;
           then s2.a3 <= i by A1,A4,INT_1:20;
           then A82: s4.intpos md >= s4.intpos i by A1,A4,A6,A7,A8,A9,A10,A11,
A12,A79,Lm26;
             i >= 8 by A20,A79,AXIOMS:22;
        hence s1.intpos m4 >= s1.intpos i by A57,A59,A81,A82;
    end;
    hereby
        let i be Nat;
        assume A83: m4 < i & i <= s.a4;
            then A84: s4.intpos md <= s4.intpos i by A4,A13;
        A85: md < i by A13,A83,AXIOMS:22;
            then i > 8 by A20,AXIOMS:22;
        hence s1.intpos m4 <= s1.intpos i by A57,A59,A84,A85;
    end;
    hereby
        let i be Nat;
        assume A86: i >= n0+1 & (i < s.a2 or i > s.a4);
      then A87: i >= 8 by A19,AXIOMS:22;
      A88: now
            per cases by A86;
            case A89: i < s.a2;
                s.a2 < s2.a3 by A4,REAL_1:69;
              hence i < s2.a3 by A89,AXIOMS:22;
            case i > s.a4;
              hence i > s2.a4 by A1,Lm28;
         end;
           i<>md & i<>m4
         proof
           per cases by A86;
           suppose i< s.a2;
         then i < md by A1;
             hence thesis by A13;
           suppose i > s.a4;
         then i > m4 by A4,A13,AXIOMS:22;
             hence thesis by A13;
         end;
        hence s1.intpos i = s4.intpos i by A59,A87
          .=s2.intpos i by A1,A4,A6,A7,A8,A9,A10,A11,A12,A86,A88,Lm26
          .=s.intpos i by A1,A87,Lm28;
     end;
end;

theorem
    Partition is No-StopCode shiftable by Def1;

Lm29:
 for s being State of SCMPDS,p0,n being Nat holds
    card QuickSort(n,p0)=57 & (p0 >= 7 implies
    QuickSort(n,p0) is_halting_on s &
    ex f,g be FinSequence of INT st len f=n & f is_FinSequence_on s,p0 &
    len g = n & g is_FinSequence_on IExec(QuickSort(n,p0),s),p0 &
    f,g are_fiberwise_equipotent & g is_non_decreasing_on 1,n)
proof
    let s be State of SCMPDS,p0,n be Nat;
   reconsider Pt=Partition as No-StopCode shiftable Program-block by Def1;
   set pn=p0+n;
   set l1= (GBP,2):=(SBP,pn+1),
        l2= SubFrom(GBP,2,SBP,pn),
        l3= (GBP,2):=(SBP,pn),
        l4= (GBP,4):=(SBP,pn+1),
        l5= (SBP,pn+3):=(SBP,pn+1),
        l6= (SBP,pn+1):=(GBP,4),
        l7= (SBP,pn+2):=(GBP,4),
        l8= AddTo(SBP,pn+1,-1),
        l9= AddTo(SBP,pn+2,1),
        l0= AddTo(GBP,1,2),
        lb= Load AddTo(GBP,1,-2),
        L5= l5 ';' l6 ';' l7 ';' l8 ';' l9 ';' l0,
        TR= l3 ';' l4 ';' Pt ';' L5,
        IF4= if>0(GBP,2,TR,lb),
        WB4= l1 ';' l2 ';' IF4,
        WH4= while>0(GBP,1,WB4);

A1: card L5= card (l5 ';' l6 ';' l7 ';' l8 ';' l9 )+1 by SCMP_GCD:8
    .= card (l5 ';' l6 ';' l7 ';' l8)+1+1 by SCMP_GCD:8
    .= 4+1+1 by Th4;
A2: card WB4=card (l1 ';' l2) + card IF4 by SCMPDS_4:45
    .=2+card IF4 by SCMP_GCD:9
    .=2+(card TR +card lb +2) by SCMPDS_6:79
    .=2+(card TR +1 +2) by SCMPDS_5:6
    .=2+(card (l3 ';' l4 ';' Partition)+ card L5+1+2) by SCMPDS_4:45
    .=2+(card (l3 ';' l4) + card Partition + card L5+1+2) by SCMPDS_4:45
    .=2+(2+ 38 + card L5+1+2) by Th12,SCMP_GCD:9
    .=51 by A1;
    set m1= GBP:=0,
         m2= SBP:=1,
         m3= (SBP,pn):=(p0+1),
         m4= (SBP,pn+1):=pn,
         M4= m1 ';' m2 ';' m3 ';' m4;
    thus card QuickSort(n,p0)=card (M4 ';' WH4) by Def2
     .=card M4 + card WH4 by SCMPDS_4:45
     .=4 + card WH4 by Th4
     .=4 + (51+2) by A2,SCMPDS_8:17
     .=57;
    assume A3: p0 >= 7;
     set s1=IExec(M4,s),
         a=GBP;
A4:  a=intpos 0 by SCMP_GCD:def 2;
A5:  SBP=a1 by SCMP_GCD:def 3;
A6:  pn >= 7+n by A3,AXIOMS:24;
       7+n >= 7 by NAT_1:29;
then A7:  pn >= 7 by A6,AXIOMS:22;
then A8:  pn+1 >= 7+1 by AXIOMS:24;
A9:  pn+2 >= 7+2 by A7,AXIOMS:24;

A10:  for t being State of SCMPDS,m,m1 be Nat st t.a=0 & t.SBP=m1 & m1=m+1
     holds IExec(L5,t).a=0 & IExec(L5,t).SBP=m1+2 &
     IExec(L5,t).intpos (m1+pn)=t.intpos (m1+pn) &
     IExec(L5,t).intpos (m1+pn+1)=t.a4-1 &
     IExec(L5,t).intpos (m1+pn+2)=t.a4+1 &
     IExec(L5,t).intpos (m1+pn+3)=t.intpos (m1+pn+1) &
     (for i be Nat st i >= 8 & i < m1+pn holds
       IExec(L5,t).intpos i=t.intpos i)
    proof
        let t be State of SCMPDS,m,m1 be Nat;
        assume A11:t.a=0 & t.SBP=m1 & m1=m+1;
    set t0=Initialized t,
        t1=IExec(L5,t),
        t2=IExec(l5 ';' l6 ';' l7 ';' l8 ';' l9,t),
        t3=IExec(l5 ';' l6 ';' l7 ';' l8,t),
        t4=IExec(l5 ';' l6 ';' l7 , t),
        t5=IExec(l5 ';' l6, t),
        t6=Exec(l5, t0),
        mp=m1+pn;
       m1 >= 1 by A11,NAT_1:29;
then A12:  mp >= 1+7 by A7,REAL_1:55;
then A13:  mp+1 >= 8+1 by AXIOMS:24;
A14:  mp+2 >= 8+2 by A12,AXIOMS:24;
A15:  mp+3 >= 8+3 by A12,AXIOMS:24;
A16: t0.SBP =m1 by A11,SCMPDS_5:40;

then A17:  DataLoc(t0.SBP,pn+3)=intpos (m1+(pn+3)) by SCMP_GCD:5
     .=intpos (mp+3) by XCMPLX_1:1;
A18:  now
        let i be Nat;
        assume i<>mp+3;
        then intpos i <> DataLoc(t0.SBP,pn+3) by A17,SCMP_GCD:4;
      hence t6.intpos i=t0.intpos i by SCMPDS_2:59
        .=t.intpos i by SCMPDS_5:40;
     end;
then A19: t6.a=0 by A11,SCMP_GCD:def 2;
       mp+3 > 1 by A15,AXIOMS:22;
then A20: t6.SBP=m1 by A11,A18,SCMP_GCD:def 3;
     A21: mp+3 > 4 by A15,AXIOMS:22;
then A22: t6.a4=t.a4 by A18;
       mp+0 <> mp+3 by XCMPLX_1:2;
then A23: t6.intpos mp=t.intpos mp by A18;
A24: t6.intpos (mp+3)=t0.DataLoc(t0.SBP,pn+1) by A17,SCMPDS_2:59
     .=t0.intpos(m1+(pn+1)) by A16,SCMP_GCD:5
     .=t0.intpos (mp+1) by XCMPLX_1:1
     .=t.intpos (mp+1) by SCMPDS_5:40;

A25:  DataLoc(t6.SBP,pn+1)=intpos (m1+(pn+1)) by A20,SCMP_GCD:5
     .=intpos (mp+1) by XCMPLX_1:1;
A26:  now
        let i be Nat;
        assume i<>mp+1;
      then A27: intpos i <> DataLoc(t6.SBP,pn+1) by A25,SCMP_GCD:4;
      thus t5.intpos i=Exec(l6, t6).intpos i by SCMPDS_5:47
           .=t6.intpos i by A27,SCMPDS_2:59;
     end;
then A28: t5.a=0 by A19,SCMP_GCD:def 2;
       mp+1 > 1 by A13,AXIOMS:22;
then A29: t5.SBP=m1 by A20,A26,SCMP_GCD:def 3;
     A30: mp+1 > 4 by A13,AXIOMS:22;
       mp+0 <> mp+1 by XCMPLX_1:2;
then A31: t5.intpos mp=t.intpos mp by A23,A26;
A32: t5.intpos (mp+1)=Exec(l6, t6).intpos(mp+1) by SCMPDS_5:47
     .=t6.DataLoc(t6.GBP,4) by A25,SCMPDS_2:59
     .=t6.intpos(0+4) by A19,SCMP_GCD:5
     .=t.a4 by A18,A21;
       mp+3 <> mp+1 by XCMPLX_1:2;
then A33: t5.intpos(mp+3)=t.intpos(mp+1) by A24,A26;

A34:  DataLoc(t5.SBP,pn+2)=intpos (m1+(pn+2)) by A29,SCMP_GCD:5
     .=intpos (mp+2) by XCMPLX_1:1;
A35:  now
        let i be Nat;
        assume i<>mp+2;
      then A36: intpos i <> DataLoc(t5.SBP,pn+2) by A34,SCMP_GCD:4;
      thus t4.intpos i=Exec(l7, t5).intpos i by SCMPDS_5:46
           .=t5.intpos i by A36,SCMPDS_2:59;
     end;
then A37: t4.a=0 by A28,SCMP_GCD:def 2;
       mp+2 > 1 by A14,AXIOMS:22;
then A38: t4.SBP=m1 by A29,A35,SCMP_GCD:def 3;
       mp+0 <> mp+2 by XCMPLX_1:2;
then A39: t4.intpos mp=t.intpos mp by A31,A35;
       mp+1 <> mp+2 by XCMPLX_1:2;
then A40: t4.intpos (mp+1)=t.a4 by A32,A35;
A41: t4.intpos(mp+2)=Exec(l7, t5).intpos(mp+2) by SCMPDS_5:46
     .=t5.DataLoc(t5.GBP,4) by A34,SCMPDS_2:59
     .=t5.intpos(0+4) by A28,SCMP_GCD:5
     .=t.a4 by A22,A26,A30;
       mp+3 <> mp+2 by XCMPLX_1:2;
then A42: t4.intpos(mp+3)=t.intpos(mp+1) by A33,A35;

A43:  DataLoc(t4.SBP,pn+1)=intpos (m1+(pn+1)) by A38,SCMP_GCD:5
     .=intpos (mp+1) by XCMPLX_1:1;
A44:  now
        let i be Nat;
        assume i<>mp+1;
      then A45: intpos i <> DataLoc(t4.SBP,pn+1) by A43,SCMP_GCD:4;
      thus t3.intpos i=Exec(l8, t4).intpos i by SCMPDS_5:46
           .=t4.intpos i by A45,SCMPDS_2:60;
     end;
then A46: t3.a=0 by A37,SCMP_GCD:def 2;
       m1+pn+1 > 1 by A13,AXIOMS:22;
then A47: t3.SBP=m1 by A38,A44,SCMP_GCD:def 3;
       mp+0 <> mp+1 by XCMPLX_1:2;
then A48: t3.intpos mp=t.intpos mp by A39,A44;
A49: t3.intpos(mp+1)=Exec(l8, t4).intpos(mp+1) by SCMPDS_5:46
     .=t.a4+-1 by A40,A43,SCMPDS_2:60
     .=t.a4-1 by XCMPLX_0:def 8;
       mp+1 <> mp+2 by XCMPLX_1:2;
then A50: t3.intpos(mp+2)=t.a4 by A41,A44;
       mp+3 <> mp+1 by XCMPLX_1:2;
then A51: t3.intpos(mp+3)=t.intpos(mp+1) by A42,A44;

A52:  DataLoc(t3.SBP,pn+2)=intpos (m1+(pn+2)) by A47,SCMP_GCD:5
     .=intpos (mp+2) by XCMPLX_1:1;
A53:  now
        let i be Nat;
        assume i<>mp+2;
      then A54: intpos i <> DataLoc(t3.SBP,pn+2) by A52,SCMP_GCD:4;
      thus t2.intpos i=Exec(l9, t3).intpos i by SCMPDS_5:46
           .=t3.intpos i by A54,SCMPDS_2:60;
     end;
then A55: t2.a=0 by A46,SCMP_GCD:def 2;
       mp+2 > 1 by A14,AXIOMS:22;
then A56: t2.SBP=m1 by A47,A53,SCMP_GCD:def 3;
       mp+0 <> mp+2 by XCMPLX_1:2;
then A57: t2.intpos mp=t.intpos mp by A48,A53;
       mp+1 <> mp+2 by XCMPLX_1:2;
then A58: t2.intpos(mp+1)=t.a4-1 by A49,A53;
A59: t2.intpos(mp+2)=Exec(l9, t3).intpos(mp+2) by SCMPDS_5:46
     .=t.a4+1 by A50,A52,SCMPDS_2:60;
       mp+3 <> mp+2 by XCMPLX_1:2;
then A60: t2.intpos(mp+3)=t.intpos(mp+1) by A51,A53;

A61:  DataLoc(t2.a,1)=intpos (0+1) by A55,SCMP_GCD:5;
A62:  now
        let i be Nat;
        assume i<>1;
      then A63: intpos i <> DataLoc(t2.a,1) by A61,SCMP_GCD:4;
      thus t1.intpos i=Exec(l0, t2).intpos i by SCMPDS_5:46
           .=t2.intpos i by A63,SCMPDS_2:60;
     end;
    hence t1.a=0 by A55,SCMP_GCD:def 2;
    thus t1.SBP=Exec(l0, t2).SBP by SCMPDS_5:46
      .=m1+2 by A56,A61,SCMPDS_2:60,SCMP_GCD:def 3;
       mp > 1 by A12,AXIOMS:22;
   hence t1.intpos mp=t.intpos mp by A57,A62;
       mp+1 > 1 by A13,AXIOMS:22;
   hence t1.intpos(mp+1)=t.a4-1 by A58,A62;
       mp+2 > 1 by A14,AXIOMS:22;
    hence t1.intpos(mp+2)=t.a4+1 by A59,A62;
       mp+3 > 1 by A15,AXIOMS:22;
    hence t1.intpos(mp+3)=t.intpos(mp+1) by A60,A62;
    hereby
         let i be Nat;
         assume A64: i >= 8 & i < mp;
     then A65: i > 1 by AXIOMS:22;
         A66: mp <= mp+2 by NAT_1:29;
         A67: mp <= mp+1 by NAT_1:29;
         A68: mp <= mp+3 by NAT_1:29;
     thus t1.intpos i=t2.intpos i by A62,A65
         .=t3.intpos i by A53,A64,A66
         .=t4.intpos i by A44,A64,A67
         .=t5.intpos i by A35,A64,A66
         .=t6.intpos i by A26,A64,A67
         .=t.intpos i by A18,A64,A68;
     end;
   end;

A69:  for t be State of SCMPDS,m1 be Nat st t.a=0 & t.SBP=m1
    holds IExec(l3 ';' l4, t).a2=t.intpos(m1+pn) &
    IExec(l3 ';' l4, t).a4=t.intpos(m1+pn+1) &
    for i be Nat st i <> 2 & i <> 4 holds
       IExec(l3 ';' l4, t).intpos i=t.intpos i
   proof
      let t be State of SCMPDS,m1 be Nat;
    set t0=Initialized t,
        t2=IExec(l3 ';' l4, t),
        t3=Exec(l3, t0),
        mp=m1+pn;
      assume A70: t.a=0 & t.SBP=m1;
       m1 >= 0 by NAT_1:18;
     then mp >= 0+7 by A7,REAL_1:55;
then A71:  mp+1 >= 7+1 by AXIOMS:24;
A72: t0.a =0 by A70,SCMPDS_5:40;
A73: t0.SBP =m1 by A70,SCMPDS_5:40;

A74:  DataLoc(t0.a,2)=intpos (0+2) by A72,SCMP_GCD:5;
     then a <> DataLoc(t0.a,2) by SCMP_GCD:4,def 2;
then A75: t3.a=0 by A72,SCMPDS_2:59;
       SBP <> DataLoc(t0.a,2) by A74,SCMP_GCD:4,def 3;
then A76: t3.SBP=m1 by A73,SCMPDS_2:59;
A77: t3.a2=t0.DataLoc(t0.SBP,pn) by A74,SCMPDS_2:59
     .=t0.intpos mp by A73,SCMP_GCD:5
     .=t.intpos mp by SCMPDS_5:40;
       mp+1 > 2 by A71,AXIOMS:22;
     then intpos(mp+1) <> DataLoc(t0.a,2) by A74,SCMP_GCD:4;
then A78: t3.intpos(mp+1)=t0.intpos(mp+1) by SCMPDS_2:59
     .=t.intpos(mp+1) by SCMPDS_5:40;

A79:  DataLoc(t3.a,4)=intpos (0+4) by A75,SCMP_GCD:5;
then A80:  a2 <> DataLoc(t3.a,4) by SCMP_GCD:4;
    thus t2.a2=Exec(l4, t3).a2 by SCMPDS_5:47
      .=t.intpos mp by A77,A80,SCMPDS_2:59;
    thus t2.a4=Exec(l4, t3).a4 by SCMPDS_5:47
      .=t3.DataLoc(t3.SBP,pn+1) by A79,SCMPDS_2:59
      .=t3.intpos(m1+(pn+1)) by A76,SCMP_GCD:5
      .=t.intpos(mp+1) by A78,XCMPLX_1:1;
    hereby
        let i be Nat;
        assume A81: i<>2 & i <> 4;
      then A82: intpos i <> DataLoc(t0.a,2) by A74,SCMP_GCD:4;
      A83: intpos i <> DataLoc(t3.a,4) by A79,A81,SCMP_GCD:4;
    thus t2.intpos i =Exec(l4, t3).intpos i by SCMPDS_5:47
         .=t3.intpos i by A83,SCMPDS_2:59
         .=t0.intpos i by A82,SCMPDS_2:59
          .=t.intpos i by SCMPDS_5:40;
     end;
    end;

A84:  for t be State of SCMPDS,m1,md be Nat st t.a=0 & t.SBP=m1 &
     t.intpos(m1+pn)=md & md >= p0+1 & t.intpos(m1+pn+1)-md > 0
    holds TR is_closed_on t & TR is_halting_on t
    proof
       let t be State of SCMPDS,m1,md be Nat;
    set lPt=l3 ';' l4 ';' Pt,
        t2=IExec(l3 ';' l4, t),
        mp=m1+pn;
      assume A85: t.a=0 & t.SBP=m1 & t.intpos mp=md & md >= p0+1 &
          t.intpos (mp+1)-md > 0;
then A86:   t2.a2=t.intpos mp & t2.a4=t.intpos(mp+1) &
    for i be Nat st i <> 2 & i <> 4 holds t2.intpos i=t.intpos i by A69;
then t2.a=0 by A85,SCMP_GCD:def 2;
      then Pt is_closed_on t2 & Pt is_halting_on t2 by A3,A85,A86,Th13;
      then lPt is_closed_on t & lPt is_halting_on t by SCPISORT:10;
     hence TR is_closed_on t & TR is_halting_on t by SCPISORT:9;
   end;

A87:  for t be State of SCMPDS,m,m1,md be Nat,n4 be Integer, f1,f2 be
     FinSequence of INT st t.a=0 & t.SBP=m1 & m1=m+1 & t.intpos(m1+pn)=md &
       md >= p0+1 & n4=t.intpos(m1+pn+1) & n4-md > 0 & n4 <= pn &
       f1 is_FinSequence_on t,p0 & len f1=n &
       f2 is_FinSequence_on IExec(TR,t),p0 & len f2=n
     holds
       IExec(TR,t).a=0 & IExec(TR,t).a1=m1+2 &
       md=IExec(TR,t).intpos(m1+pn) &
       n4=IExec(TR,t).intpos (m1+pn+3) &
      (for j be Nat st 1<=j & j<m1 holds
          IExec(TR,t).intpos(pn+j)=t.intpos(pn+j)) &
       f1,f2 are_fiberwise_equipotent &
       ex m4 be Nat st md <= m4 & m4 <= n4 &
        m4-1=IExec(TR,t).intpos (m1+pn+1) &
        m4+1=IExec(TR,t).intpos (m1+pn+2) &
      (for i be Nat st md<=i & i < m4 holds
      IExec(TR,t).intpos m4 >= IExec(TR,t).intpos i) &
      (for i be Nat st m4 < i & i <= n4 holds
      IExec(TR,t).intpos m4 <= IExec(TR,t).intpos i) &
       (for j be Nat st (p0+1<=j & j<md) or (n4<j & j <= p0+n) holds
        IExec(TR,t).intpos j = t.intpos j)
    proof
      let t be State of SCMPDS,m,m1,md be Nat,n4 be Integer, f1,f2 be
       FinSequence of INT;
    set t1=IExec(TR,t),
        lPt=l3 ';' l4 ';' Pt,
        t2=IExec(lPt,t),
        t4=IExec(l3 ';' l4, t),
        mp=m1+pn;
      set tp=IExec(Pt,t4);
      assume A88: t.a=0 & t.SBP=m1 & m1=m+1 & t.intpos mp=md &
         md >= p0+1 & n4=t.intpos (mp+1) & n4-md > 0 & n4 <= pn;
      assume A89: f1 is_FinSequence_on t,p0 & len f1=n;
      assume A90: f2 is_FinSequence_on IExec(TR,t),p0 & len f2=n;

A91:   t4.a2=t.intpos mp & t4.a4=t.intpos(mp+1) &
    for i be Nat st i <> 2 & i <> 4 holds t4.intpos i=t.intpos i by A69,A88;
then A92: t4.a=0 by A88,SCMP_GCD:def 2;
A93: t4.a4=n4 by A69,A88;
A94:  p0+1 >= 7+1 by A3,AXIOMS:24;
       now let i be Nat;
         assume A95: 1 <= i & i <= len f1;
         then p0+i >= p0+1 by AXIOMS:24;
     then p0+i >= 8 by A94,AXIOMS:22;
     then A96: p0+i > 2 & p0+i > 4 by AXIOMS:22;
         thus f1.i=t.intpos(p0+i) by A89,A95,SCPISORT:def 1
            .=t4.intpos(p0+i) by A69,A88,A96;
     end;
then A97:  f1 is_FinSequence_on t4,p0 by SCPISORT:def 1;
     consider f4 be FinSequence of INT such that
A98:  len f4=n & for i be Nat st 1<=i & i <= len f4 holds
     f4.i=tp.intpos(p0+i) by SCPISORT:2;
A99:  f4 is_FinSequence_on tp,p0 by A98,SCPISORT:def 1;
then A100:  tp.a=0 & tp.a1=t4.a1 & f1,f4 are_fiberwise_equipotent
       by A3,A88,A89,A91,A92,A97,A98,Th14;
    consider m4 be Nat such that
A101:  m4=tp.a4 & md <= m4 & m4 <= t4.a4 &
    (for i be Nat st md<=i & i < m4 holds tp.intpos m4 >= tp.intpos i) &
    (for i be Nat st m4 < i & i <= t4.a4 holds tp.intpos m4 <= tp.intpos i) &
    (for i be Nat st i >= p0+1 & (i < t4.a2 or i > t4.a4) holds
         tp.intpos i = t4.intpos i) by A3,A88,A89,A91,A92,A97,A98,A99,Th14;
A102: Pt is_closed_on t4 & Pt is_halting_on t4 by A3,A88,A91,A92,Th13;
then A103: lPt is_closed_on t & lPt is_halting_on t by SCPISORT:10;
A104:  t2.a=0 by A100,A102,SCPISORT:8;
A105:  t2.SBP=t4.a1 by A100,A102,SCMP_GCD:def 3,SCPISORT:8
     .=m1 by A88,A91,SCMP_GCD:def 3;
then A106:  IExec(L5,t2).a=0 & IExec(L5,t2).SBP=m1+2 &
     IExec(L5,t2).intpos mp=t2.intpos mp &
     IExec(L5,t2).intpos (mp+1)=t2.a4-1 &
     IExec(L5,t2).intpos (mp+2)=t2.a4+1 &
     IExec(L5,t2).intpos (mp+3)=t2.intpos (mp+1) &
     for i be Nat st i >= 8 & i < mp holds
       IExec(L5,t2).intpos i=t2.intpos i by A10,A88,A104;
A107:  m1 >= 1 by A88,NAT_1:29;
then A108:  mp >= 1+7 by A7,REAL_1:55;
A109:  pn >= p0 by NAT_1:29;
then A110:  mp >= p0+1 by A107,REAL_1:55;
A111:  mp >= 1+pn by A107,AXIOMS:24;
A112:  1+pn > pn by REAL_1:69;
then A113:  mp > pn by A111,AXIOMS:22;
then A114:  mp > t4.a4 by A88,A93,AXIOMS:22;
    thus t1.a=0 by A103,A106,SCPISORT:7;
    thus t1.a1=m1+2 by A103,A106,SCMP_GCD:def 3,SCPISORT:7;
        mp > 2 & mp > 4 by A108,AXIOMS:22;
     hence md=t4.intpos mp by A69,A88
      .=tp.intpos mp by A101,A110,A114
      .=IExec(L5,t2).intpos mp by A102,A106,SCPISORT:8
      .=t1.intpos mp by A103,SCPISORT:7;
A115:  mp+1 >= 8+1 by A108,AXIOMS:24;
A116:  mp+1 > mp by REAL_1:69;
then A117:  mp+1 >= p0+1 by A110,AXIOMS:22;
A118:  mp+1 > t4.a4 by A114,A116,AXIOMS:22;
        mp+1 > 2 & mp+1 > 4 by A115,AXIOMS:22;
     hence n4=t4.intpos (mp+1) by A69,A88
      .=tp.intpos (mp+1) by A101,A117,A118
      .=IExec(L5,t2).intpos (mp+3) by A102,A106,SCPISORT:8
      .=t1.intpos (mp+3) by A103,SCPISORT:7;
    hereby
       let j be Nat;
       assume A119: 1<=j & j<m1;
       then A120: pn+j >= 1+7 by A7,REAL_1:55;
       A121: pn+j < mp by A119,REAL_1:53;
       A122: pn+j >= p0+1 by A109,A119,REAL_1:55;
             pn+j >= pn+1 by A119,AXIOMS:24;
           then pn+j > pn by A112,AXIOMS:22;
      then A123:  pn+j > t4.a4 by A88,A93,AXIOMS:22;
      A124:  pn+j > 2 & pn+j > 4 by A120,AXIOMS:22;
       thus t1.intpos(pn+j)=IExec(L5,t2).intpos(pn+j) by A103,SCPISORT:7
          .=t2.intpos (pn+j) by A10,A88,A104,A105,A120,A121
          .=tp.intpos (pn+j) by A102,SCPISORT:8
          .=t4.intpos (pn+j) by A101,A122,A123
          .=t.intpos(pn+j) by A69,A88,A124;
    end;
      now let i be Nat;
         assume i in Seg n;
     then A125:  1 <= i & i <= n by FINSEQ_1:3;
          then p0+i >= p0+1 by AXIOMS:24;
     then A126:  p0+i >= 8 by A94,AXIOMS:22;
            p0+i <= pn by A125,AXIOMS:24;
     then A127:  p0+i < mp by A113,AXIOMS:22;
      thus f2.i = t1.intpos(p0+i) by A90,A125,SCPISORT:def 1
          .=IExec(L5,t2).intpos(p0+i) by A103,SCPISORT:7
          .=t2.intpos (p0+i) by A10,A88,A104,A105,A126,A127
          .=tp.intpos (p0+i) by A102,SCPISORT:8
          .=f4.i by A98,A125;
    end;
  hence f1,f2 are_fiberwise_equipotent by A90,A98,A100,FINSEQ_2:10;
    take m4;
    thus
A128:  md <= m4 & m4 <= n4 by A88,A91,A101;
A129:  md >= 8 by A88,A94,AXIOMS:22;
A130:  m4 < mp by A88,A91,A114,A128,AXIOMS:22;
A131:  m4 >= 8 by A101,A129,AXIOMS:22;

     thus m4-1=t2.a4-1 by A101,A102,SCPISORT:8
      .=t1.intpos (mp+1) by A103,A106,SCPISORT:7;
    thus m4+1=t2.a4+1 by A101,A102,SCPISORT:8
      .=t1.intpos (mp+2) by A103,A106,SCPISORT:7;
    hereby
         let i be Nat;
         assume A132: md<=i & i < m4;
       then A133: i < mp by A130,AXIOMS:22;
       A134: i >= 8 by A129,A132,AXIOMS:22;
       A135: tp.intpos i=t2.intpos i by A102,SCPISORT:8
           .=IExec(L5,t2).intpos i by A10,A88,A104,A105,A133,A134
           .=t1.intpos i by A103,SCPISORT:7;
             tp.intpos m4=t2.intpos m4 by A102,SCPISORT:8
           .=IExec(L5,t2).intpos m4 by A10,A88,A104,A105,A130,A131
           .=t1.intpos m4 by A103,SCPISORT:7;
         hence t1.intpos m4 >= t1.intpos i by A101,A132,A135;
    end;
    hereby
         let i be Nat;
         assume A136: m4 < i & i <= n4;
       then A137: i < mp by A88,A91,A114,AXIOMS:22;
             i >= md by A101,A136,AXIOMS:22;
       then A138: i >= 8 by A129,AXIOMS:22;
       A139: tp.intpos i=t2.intpos i by A102,SCPISORT:8
           .=IExec(L5,t2).intpos i by A10,A88,A104,A105,A137,A138
           .=t1.intpos i by A103,SCPISORT:7;
             tp.intpos m4=t2.intpos m4 by A102,SCPISORT:8
           .=IExec(L5,t2).intpos m4 by A10,A88,A104,A105,A130,A131
           .=t1.intpos m4 by A103,SCPISORT:7;
         hence t1.intpos m4 <= t1.intpos i by A93,A101,A136,A139;
    end;
    hereby
       let j be Nat;
       assume A140: (p0+1<=j & j<md) or (n4<j & j <= pn);
    A141: now
         per cases by A140;
         suppose A142: p0+1<=j & j<md;
          hence j >= p0+1 & (j < t4.a2 or j > t4.a4) by A88,A91;
             md < mp by A101,A130,AXIOMS:22;
          hence j < mp by A142,AXIOMS:22;
        suppose A143: n4<j & j <= pn;
              n4 >= md by A93,A101,AXIOMS:22;
            then j >= md by A143,AXIOMS:22;
         hence j >= p0+1 by A88,AXIOMS:22;
         thus (j < t4.a2 or j > t4.a4) by A88,A91,A143;
         thus j < mp by A113,A143,AXIOMS:22;
       end;
    then A144: j >= 8 by A94,AXIOMS:22;
    then A145: j > 2 & j > 4 by AXIOMS:22;
       thus t1.intpos j=IExec(L5,t2).intpos j by A103,SCPISORT:7
          .=t2.intpos j by A10,A88,A104,A105,A141,A144
          .=tp.intpos j by A102,SCPISORT:8
          .=t4.intpos j by A101,A141
          .=t.intpos j by A69,A88,A145;
     end;
   end;

A146: for t be State of SCMPDS,m be Nat st t.a=0 & t.SBP=m
    holds IExec(l1 ';' l2,t).a2=t.intpos (m+pn+1)-t.intpos (m+pn) &
       for i be Nat st i <> 2 holds IExec(l1 ';' l2,t).intpos i=t.intpos i
   proof
      let t be State of SCMPDS,m be Nat;
      assume A147: t.a=0 & t.SBP=m;
    set t0=Initialized t,
        t1=IExec(l1 ';' l2, t),
        t2=Exec(l1, t0),
        mp=m+pn;
       m >= 0 by NAT_1:18;
then A148:  mp >= 0+7 by A7,REAL_1:55;
A149: t0.a =0 by A147,SCMPDS_5:40;
A150: t0.SBP =m by A147,SCMPDS_5:40;

A151:  DataLoc(t0.a,2)=intpos (0+2) by A149,SCMP_GCD:5;
     then a <> DataLoc(t0.a,2) by SCMP_GCD:4,def 2;
then A152: t2.a=0 by A149,SCMPDS_2:59;
       SBP <> DataLoc(t0.a,2) by A151,SCMP_GCD:4,def 3;
then A153: t2.SBP=m by A150,SCMPDS_2:59;
A154: t2.a2=t0.DataLoc(t0.SBP,pn+1) by A151,SCMPDS_2:59
     .=t0.intpos (m+(pn+1)) by A150,SCMP_GCD:5
     .=t0.intpos (mp+1) by XCMPLX_1:1
     .=t.intpos (mp+1) by SCMPDS_5:40;
       mp > 2 by A148,AXIOMS:22;
     then intpos mp <> DataLoc(t0.a,2) by A151,SCMP_GCD:4;
then A155: t2.intpos mp=t0.intpos mp by SCMPDS_2:59
     .=t.intpos mp by SCMPDS_5:40;

A156: DataLoc(t2.a,2)=intpos (0+2) by A152,SCMP_GCD:5;
    thus t1.a2=Exec(l2, t2).a2 by SCMPDS_5:47
      .=t2.a2-t2.DataLoc(t2.SBP,pn) by A156,SCMPDS_2:62
      .=t.intpos (mp+1)-t.intpos mp by A153,A154,A155,SCMP_GCD:5;
    hereby
         let i be Nat;
         assume A157: i <> 2;
      then A158: intpos i <> DataLoc(t0.a,2) by A151,SCMP_GCD:4;
      A159: intpos i <> DataLoc(t2.a,2) by A156,A157,SCMP_GCD:4;
        thus t1.intpos i=Exec(l2, t2).intpos i by SCMPDS_5:47
      .=t2.intpos i by A159,SCMPDS_2:62
      .=t0.intpos i by A158,SCMPDS_2:59
       .=t.intpos i by SCMPDS_5:40;
      end;
    end;

A160: for t be State of SCMPDS,m,md be Nat st t.a=0 & t.SBP=m &
    t.intpos(m+pn)=md & (md >= p0+1 or t.intpos(m+pn+1)-md <= 0)
    holds WB4 is_closed_on t & WB4 is_halting_on t
    proof
        let t be State of SCMPDS,m,md be Nat;
        set mp=m+pn,
            t1=IExec(l1 ';' l2,t);
        assume A161: t.a=0 & t.SBP=m & t.intpos mp=md &
         (md >= p0+1 or t.intpos(mp+1)-md <= 0);

then A162:  t1.a2=t.intpos (mp+1)-t.intpos mp &
     for i be Nat st i <> 2 holds t1.intpos i=t.intpos i by A146;
A163:  t1.a=0 by A4,A146,A161;
then A164:  DataLoc(t1.a,2)=intpos(0+2) by SCMP_GCD:5;
     per cases;
     suppose A165: t1.DataLoc(t1.a,2) > 0;
         then A166: t1.a2 > 0 by A164;
     A167: t.intpos(mp+1)-md > 0 by A161,A162,A164,A165;
     A168: t1.SBP=m by A5,A146,A161;
            m >= 0 by NAT_1:18;
     then A169:  mp >= 0+7 by A7,REAL_1:55;
          then mp > 2 by AXIOMS:22;
     then A170: t1.intpos mp=md by A146,A161;
       mp+1 >= 7+1 by A169,AXIOMS:24;
          then mp+1 > 2 by AXIOMS:22;
     then t1.intpos(mp+1)-md > 0 by A161,A162,A166;
     then TR is_closed_on t1 & TR is_halting_on t1 by A84,A161,A163,A167,A168,
A170;
     then IF4 is_closed_on t1 & IF4 is_halting_on t1 by A165,SCMPDS_6:82;
      hence thesis by SCPISORT:10;

    suppose A171: t1.DataLoc(t1.a,2) <= 0;
           lb is_closed_on t1 & lb is_halting_on t1 by SCMPDS_6:34,35;
         then IF4 is_closed_on t1 & IF4 is_halting_on t1 by A171,SCMPDS_6:83;
         hence thesis by SCPISORT:10;
    end;

A172:  for t be State of SCMPDS,m,m1,md be Nat,n4 be Integer, f1,f2 be
     FinSequence of INT st t.a=0 & t.SBP=m1 & m1=m+1 & t.intpos(m1+pn)=md &
       md >= p0+1 & n4=t.intpos(m1+pn+1) & n4-md > 0 & n4 <= pn &
       f1 is_FinSequence_on t,p0 & len f1=n &
       f2 is_FinSequence_on IExec(WB4,t),p0 & len f2=n
    holds
       IExec(WB4,t).a=0 & IExec(WB4,t).a1=m1+2 &
       md=IExec(WB4,t).intpos(m1+pn) & n4=IExec(WB4,t).intpos (m1+pn+3) &
   (for j be Nat st (1<=j & j<m1) holds
    IExec(WB4,t).intpos(pn+j)=t.intpos(pn+j)) &
       f1,f2 are_fiberwise_equipotent &
    ex m4 be Nat st md <= m4 & m4 <= n4 &
    m4-1=IExec(WB4,t).intpos (m1+pn+1) & m4+1=IExec(WB4,t).intpos (m1+pn+2) &
    (for i be Nat st md<=i & i < m4 holds
      IExec(WB4,t).intpos m4 >= IExec(WB4,t).intpos i) &
   (for i be Nat st m4 < i & i <= n4 holds
      IExec(WB4,t).intpos m4 <= IExec(WB4,t).intpos i) &
   (for j be Nat st (p0+1<=j & j<md) or (n4<j & j <= p0+n) holds
        IExec(WB4,t).intpos j = t.intpos j)
   proof
      let t be State of SCMPDS,m,m1,md be Nat,n4 be Integer, f1,f2 be
       FinSequence of INT;
     set mp=m1+pn,
         t1=IExec(l1 ';' l2,t);
      assume A173: t.a=0 & t.SBP=m1 & m1=m+1 & t.intpos mp=md &
         md >= p0+1 & n4=t.intpos (mp+1) & n4-md > 0 & n4 <= pn;
      assume A174: f1 is_FinSequence_on t,p0 & len f1=n;
      assume A175: f2 is_FinSequence_on IExec(WB4,t),p0 & len f2=n;
A176:  t1.SBP=m1 by A5,A146,A173;
        m1 >= 0 by NAT_1:18;
then A177:  mp >= 0+7 by A7,REAL_1:55;
      then mp > 2 by AXIOMS:22;
then A178: t1.intpos mp=md by A146,A173;
  mp+1 >= 7+1 by A177,AXIOMS:24;
     then mp+1 > 2 by AXIOMS:22;
then A179:  n4=t1.intpos (mp+1) by A146,A173;
A180:  t1.a=0 by A4,A146,A173;
then A181:  DataLoc(t1.a,2)=intpos(0+2) by SCMP_GCD:5;
     A182: t1.a2 > 0 by A146,A173;
A183:  TR is_closed_on t1 & TR is_halting_on t1 by A84,A173,A176,A178,A179,A180
;
then A184:  IF4 is_closed_on t1 & IF4 is_halting_on t1 by A181,A182,SCMPDS_6:82
;
A185:  now let x;
        thus IExec(WB4,t).x = IExec(IF4,t1).x by A184,SCPISORT:8
        .=IExec(TR,t1).x by A181,A182,A183,Th1;
      end;
A186:  p0+1>= 7+1 by A3,AXIOMS:24;
       now let i be Nat;
       assume A187: 1 <= i & i <= len f1;
         then p0+i >= p0+1 by AXIOMS:24;
     then p0+i >= 8 by A186,AXIOMS:22;
     then A188: p0+i > 2 by AXIOMS:22;
    thus f1.i=t.intpos(p0+i) by A174,A187,SCPISORT:def 1
         .= t1.intpos(p0+i) by A146,A173,A188;
     end;
then A189: f1 is_FinSequence_on t1,p0 by SCPISORT:def 1;
       now let i be Nat;
       assume 1 <= i & i <= len f2;
     hence f2.i=IExec(WB4,t).intpos(p0+i) by A175,SCPISORT:def 1
         .= IExec(TR,t1).intpos(p0+i) by A185;
     end;
then A190:  f2 is_FinSequence_on IExec(TR,t1),p0 by SCPISORT:def 1;
then A191:   IExec(TR,t1).a=0 & IExec(TR,t1).a1=m1+2 &
       md=IExec(TR,t1).intpos mp &
       n4=IExec(TR,t1).intpos (mp+3) &
      (for j be Nat st (1<=j & j<m1) holds
          IExec(TR,t1).intpos(pn+j)=t1.intpos(pn+j))
        by A87,A173,A174,A175,A176,A178,A179,A180,A189;
    hence IExec(WB4,t).a=0 by A185;
    thus IExec(WB4,t).a1=m1+2 by A185,A191;
    thus md=IExec(WB4,t).intpos mp by A185,A191;
    thus n4=IExec(WB4,t).intpos (mp+3) by A185,A191;
    hereby let j be Nat;
       assume A192:1<=j & j<m1;
       then pn+j >= pn+1 by AXIOMS:24;
   then pn+j >= 8 by A8,AXIOMS:22;
   then A193: pn+j > 2 by AXIOMS:22;
     thus IExec(WB4,t).intpos(pn+j)=IExec(TR,t1).intpos(pn+j) by A185
       .=t1.intpos(pn+j) by A87,A173,A174,A175,A176,A178,A179,A180,A189,A190,
A192
       .=t.intpos(pn+j) by A146,A173,A193;
    end;
    thus f1,f2 are_fiberwise_equipotent by A87,A173,A174,A175,A176,A178,A179,
A180,A189,A190;
     consider m4 be Nat such that
A194:     md <= m4 & m4 <= n4 &
        m4-1=IExec(TR,t1).intpos (mp+1) &
        m4+1=IExec(TR,t1).intpos (mp+2) &
      (for i be Nat st md<=i & i < m4 holds
      IExec(TR,t1).intpos m4 >= IExec(TR,t1).intpos i) &
      (for i be Nat st m4 < i & i <= n4 holds
      IExec(TR,t1).intpos m4 <= IExec(TR,t1).intpos i) &
       (for j be Nat st (p0+1<=j & j<md) or (n4<j & j <= p0+n) holds
        IExec(TR,t1).intpos j = t1.intpos j)
          by A87,A173,A174,A175,A176,A178,A179,A180,A189,A190;
       take m4;
    thus md <= m4 & m4 <= n4 by A194;
    thus m4-1=IExec(WB4,t).intpos (mp+1) by A185,A194;
    thus m4+1=IExec(WB4,t).intpos (mp+2) by A185,A194;
    hereby let i be Nat;
       assume md<=i & i < m4;
       then IExec(TR,t1).intpos m4 >= IExec(TR,t1).intpos i by A194;
       then IExec(WB4,t).intpos m4 >= IExec(TR,t1).intpos i by A185;
      hence IExec(WB4,t).intpos m4 >= IExec(WB4,t).intpos i by A185;
    end;
    hereby let i be Nat;
    assume m4 < i & i <= n4;
       then IExec(TR,t1).intpos m4 <= IExec(TR,t1).intpos i by A194;
       then IExec(WB4,t).intpos m4 <= IExec(TR,t1).intpos i by A185;
      hence IExec(WB4,t).intpos m4 <= IExec(WB4,t).intpos i by A185;
    end;
    hereby let j be Nat;
      assume A195: (p0+1<=j & j<md) or (n4<j & j <= p0+n);
        now
         per cases by A195;
         suppose p0+1<=j & j<md;
           hence p0+1<=j;
         suppose n4<j & j <= p0+n;
           then j >= m4 by A194,AXIOMS:22;
           then j >= md by A194,AXIOMS:22;
         hence j >= p0+1 by A173,AXIOMS:22;
      end;
   then j >= 8 by A186,AXIOMS:22;
   then A196: j > 2 by AXIOMS:22;
   thus IExec(WB4,t).intpos j = IExec(TR,t1).intpos j by A185
       .=t1.intpos j by A194,A195
       .=t.intpos j by A146,A173,A196;
      end;
    end;

A197: for t be State of SCMPDS,m be Nat st
    t.a=0 & t.SBP=m & t.intpos (m+pn+1) <= t.intpos (m+pn)
    holds IExec(WB4,t).a=0 & IExec(WB4,t).a1=m-2 &
    (for j be Nat st 1<=j & j<m holds
          IExec(WB4,t).intpos(pn+j)=t.intpos(pn+j)) &
    (for j be Nat st 1<=j & j <= n holds
          IExec(WB4,t).intpos (p0+j) = t.intpos (p0+j))
  proof
    let t be State of SCMPDS,m be Nat;
    set mp=m+pn,
         t1=IExec(l1 ';' l2,t);
    assume A198: t.a=0 & t.SBP=m & t.intpos (mp+1) <= t.intpos mp;
then A199:  t1.a2=t.intpos (mp+1)-t.intpos mp &
     for i be Nat st i <> 2 holds t1.intpos i=t.intpos i by A146;
A200:  t1.a=0 by A4,A146,A198;
then A201:  DataLoc(t1.a,2)=intpos(0+2) by SCMP_GCD:5;
     A202: t1.a2 <= 0 by A198,A199,REAL_2:106;
       lb is_closed_on t1 & lb is_halting_on t1 by SCMPDS_6:34,35;
then A203:  IF4 is_closed_on t1 & IF4 is_halting_on t1 by A201,A202,SCMPDS_6:83
;
     set li=AddTo(GBP,1,-2),
         t0=Initialized t1;
A204:  now let x;
        thus IExec(WB4,t).x = IExec(IF4,t1).x by A203,SCPISORT:8
          .=IExec(lb,t1).x by A201,A202,SCMPDS_6:88
          .=Exec(li,t0).x by SCMPDS_5:45;
     end;
A205:  t1.a1=m by A5,A146,A198;
   t0.a=0 by A200,SCMPDS_5:40;
then A206:  DataLoc(t0.a,1)=intpos (0+1) by SCMP_GCD:5;
A207:  now let i be Nat;
        assume i <> 1;
      then A208: intpos i <> DataLoc(t0.a,1) by A206,SCMP_GCD:4;
       thus IExec(WB4,t).intpos i=Exec(li,t0).intpos i by A204
        .=t0.intpos i by A208,SCMPDS_2:60
        .=t1.intpos i by SCMPDS_5:40;
     end;
     hence IExec(WB4,t).a=0 by A200,SCMP_GCD:def 2;
     thus IExec(WB4,t).a1=Exec(li,t0).a1 by A204
       .=t0.a1+-2 by A206,SCMPDS_2:60
       .=t0.a1-2 by XCMPLX_0:def 8
       .=m-2 by A205,SCMPDS_5:40;
     hereby
        let j be Nat;
        assume 1<=j & j<m;
        then pn+j >= pn+1 by AXIOMS:24;
    then A209: pn+j >= 8 by A8,AXIOMS:22;
    then A210: pn+j > 2 by AXIOMS:22;
          pn+j > 1 by A209,AXIOMS:22;
     hence IExec(WB4,t).intpos(pn+j)=t1.intpos(pn+j) by A207
         .=t.intpos(pn+j) by A146,A198,A210;
     end;
     hereby
        let j be Nat;
        assume 1<=j & j<=n;
     then A211: p0+j >= p0+1 by AXIOMS:24;
           p0+1 >= 7+1 by A3,AXIOMS:24;
     then A212: p0+j >= 8 by A211,AXIOMS:22;
     then A213: p0+j > 2 by AXIOMS:22;
          p0+j > 1 by A212,AXIOMS:22;
     hence IExec(WB4,t).intpos(p0+j)=t1.intpos(p0+j) by A207
         .=t.intpos(p0+j) by A146,A198,A213;
    end;
  end;

    set b1=DataLoc(0,1);
A214: b1=intpos(0+1) by SCMP_GCD:5;
A215: now
      let t be State of SCMPDS,f1,f2 be FinSequence of INT,
      k1,k2,y1,yn be Nat;
      set mm=2*k1+1,
          md=p0+y1,
          n4=p0+yn;
      assume A216: t.a=0 & mm=t.b1 & k2=pn+2*k1+1 & md=t.intpos k2 &
        n4=t.intpos(k2+1) & (1 <= y1 & yn <= n or y1 >= yn);
        set mp=mm+pn;
    A217: k2=mp by A216,XCMPLX_1:1;
    A218: md=t.intpos mp by A216,XCMPLX_1:1;
    A219: n4=t.intpos(mp+1) by A216,XCMPLX_1:1;
    A220: t.SBP=mm by A214,A216,SCMP_GCD:def 3;
          now
          per cases by A216;
          case 1 <= y1 & yn <= n;
           hence p0+1 <= md by AXIOMS:24;
          case y1 >= yn;
           then md >= t.intpos (mp+1) by A216,A217,AXIOMS:24;
           hence t.intpos (mp+1) -md <= 0 by REAL_2:106;
        end;
    hence WB4 is_closed_on t & WB4 is_halting_on t by A5,A160,A214,A216,A218;
     consider f3 be FinSequence of INT such that
A221:  len f3=n & for i be Nat st 1<=i & i <= len f3 holds
     f3.i=t.intpos(p0+i) by SCPISORT:2;
A222:  f3 is_FinSequence_on t,p0 by A221,SCPISORT:def 1;
     consider f4 be FinSequence of INT such that
A223:  len f4=n & for i be Nat st 1<=i & i <= len f4 holds
     f4.i=IExec(WB4,t).intpos(p0+i) by SCPISORT:2;
A224:  f4 is_FinSequence_on IExec(WB4,t),p0 by A223,SCPISORT:def 1;
     hereby
        per cases;
        suppose t.intpos (mp+1) <= t.intpos mp;
         hence IExec(WB4,t).a=t.a &
           for j be Nat st 1<=j & j<mm holds
             IExec(WB4,t).intpos(pn+j)=t.intpos(pn+j) by A5,A197,A214,A216;
        suppose A225: t.intpos (mp+1) > t.intpos mp;
      then A226:  n4-md > 0 by A218,A219,SQUARE_1:11;
             yn > y1 by A218,A219,A225,AXIOMS:24;
           then p0+1 <= md & n4 <= pn by A216,AXIOMS:24;
        hence IExec(WB4,t).a=t.a & for j be Nat st 1<=j & j<mm holds
            IExec(WB4,t).intpos(pn+j)=t.intpos(pn+j)
           by A5,A172,A214,A216,A218,A219,A221,A222,A223,A224,A226;
     end;
     hereby
        assume y1>=yn;
       then A227: t.intpos (mp+1) <= t.intpos mp by A218,A219,AXIOMS:24;
       A228: 1-2=-1;
        thus IExec(WB4,t).b1=2*k1+1-2 by A5,A197,A214,A216,A227
          .=2*k1+ -1 by A228,XCMPLX_1:29
          .=2*k1-1 by XCMPLX_0:def 8;
        thus for j be Nat st (1<=j & j <= n) holds
          IExec(WB4,t).intpos (p0+j) = t.intpos (p0+j) by A5,A197,A214,A216,
A227;
    end;
    hereby
         assume A229: y1<yn;
      then n4 > md by REAL_1:53;
      then A230:  n4-md > 0 by SQUARE_1:11;
             yn > y1 by A229;
      then A231:  p0+1 <= md & n4 <= pn by A216,AXIOMS:24;
      hence IExec(WB4,t).b1=2*k1+1+2 by A5,A172,A214,A216,A218,A219,A221,A222,
A223,A224,A230
           .=2*k1+(1+2) by XCMPLX_1:1
           .=2*k1+3;
           consider m4 be Nat such that
      A232:  md <= m4 & m4 <= n4 & m4-1=IExec(WB4,t).intpos (mp+1) &
           m4+1=IExec(WB4,t).intpos (mp+2) &
           (for i be Nat st md<=i & i < m4 holds
           IExec(WB4,t).intpos m4 >= IExec(WB4,t).intpos i) &
           (for i be Nat st m4 < i & i <= n4 holds
           IExec(WB4,t).intpos m4 <= IExec(WB4,t).intpos i) &
           (for j be Nat st (p0+1<=j & j<md) or (n4<j & j <= p0+n) holds
           IExec(WB4,t).intpos j = t.intpos j)
           by A5,A172,A214,A216,A218,A219,A221,A222,A223,A224,A230,A231;
           hereby
              let j be Nat;
              assume (1<=j & j<y1) or (yn<j & j <= n);
               then (p0+1<=p0+j & p0+j<md) or (n4<p0+j & p0+j <= p0+n) by
AXIOMS:24,REAL_1:53;
             hence IExec(WB4,t).intpos(p0+j) = t.intpos (p0+j) by A232;
           end;
       A233: m4-p0 >= y1 by A232,REAL_1:84;
             y1 >= 0 by NAT_1:18;
           then m4-p0 >= 0 by A233;
           then reconsider ym=m4-p0 as Nat by INT_1:16;
        A234: m4=p0+ym by XCMPLX_1:27;
            take ym;
          thus y1 <= ym & ym <= yn by A232,A234,REAL_1:53;
          thus md=IExec(WB4,t).intpos k2 by A172,A216,A217,A220,A221,A222,A223,
A224,A230,A231;
          thus p0+ym-1=IExec(WB4,t).intpos (k2+1) by A217,A232,XCMPLX_1:27;
          thus p0+ym+1=IExec(WB4,t).intpos (k2+2) by A217,A232,XCMPLX_1:27;
          thus n4=IExec(WB4,t).intpos (k2+3) by A172,A216,A217,A220,A221,A222,
A223,A224,A230,A231;
        hereby
           let j be Nat;
           assume y1 <= j & j < ym;
           then p0+y1 <= p0+j & p0+j < p0+ym by AXIOMS:24,REAL_1:53;
   hence IExec(WB4,t).intpos (p0+j) <= IExec(WB4,t).intpos (p0+ym) by A232,A234
;
       end;
        hereby
           let j be Nat;
           assume ym < j & j <= yn;
            then p0+ym < p0+j & p0+j <= p0+yn by AXIOMS:24,REAL_1:53;
     hence IExec(WB4,t).intpos (p0+j) >= IExec(WB4,t).intpos (p0+ym) by A232,
A234;
       end;
     end;
     hereby
        assume A235: f1 is_FinSequence_on t,p0 &
         f2 is_FinSequence_on IExec(WB4,t),p0 & len f1=n & len f2=n;
        per cases;
        suppose A236: t.intpos (mp+1) <= t.intpos mp;
             now let i be Nat;
              assume i in Seg n;
           then A237: 1 <= i & i <= n by FINSEQ_1:3;
            hence f1.i = t.intpos(p0+i) by A235,SCPISORT:def 1
               .=IExec(WB4,t).intpos(p0+i) by A5,A197,A214,A216,A236,A237
               .=f2.i by A235,A237,SCPISORT:def 1;
           end;
          hence f1,f2 are_fiberwise_equipotent by A235,FINSEQ_2:10;
        suppose A238: t.intpos (mp+1) > t.intpos mp;
      then A239:  n4-md > 0 by A218,A219,SQUARE_1:11;
             yn > y1 by A218,A219,A238,AXIOMS:24;
           then p0+1 <= md & n4 <= pn by A216,AXIOMS:24;
       hence f1,f2 are_fiberwise_equipotent by A5,A172,A214,A216,A218,A219,A235
,A239;
     end;
   end;
A240:  s1.a=0 & s1.a1=1 & s1.intpos(pn+1)=p0+1 & s1.intpos(pn+2)=pn &
     (for i be Nat st i >= 8 & i <= pn holds s1.intpos i=s.intpos i)
    proof
    set t0=Initialized s,
        t2=IExec(m1 ';' m2 ';' m3,s),
        t3=IExec(m1 ';' m2,s),
        t4=Exec(m1, t0);

A241: t4.a =0 by SCMPDS_2:57;
A242: now let i be Nat;
       assume i >= 8;
        then i > 0 by AXIOMS:22;
        then a <> intpos i by SCMP_GCD:4,def 2;
      hence t4.intpos i =t0.intpos i by SCMPDS_2:57
        .=s.intpos i by SCMPDS_5:40;
     end;
A243: t3.a=Exec(m2, t4).a by SCMPDS_5:47
     .=0 by A241,SCMPDS_2:57,SCMP_GCD:7;
A244: t3.SBP=Exec(m2, t4).SBP by SCMPDS_5:47
     .=1 by SCMPDS_2:57;
A245: now let i be Nat;
       assume A246: i >= 8;
        then i > 1 by AXIOMS:22;
    then A247:  SBP <> intpos i by SCMP_GCD:4,def 3;
      thus t3.intpos i =Exec(m2, t4).intpos i by SCMPDS_5:47
        .=t4.intpos i by A247,SCMPDS_2:57
        .=s.intpos i by A242,A246;
     end;

A248:  DataLoc(t3.SBP,pn)=intpos (pn+1) by A244,SCMP_GCD:5;
then A249:  a <> DataLoc(t3.SBP,pn) by SCMP_GCD:4,def 2;
A250: t2.a=Exec(m3,t3).a by SCMPDS_5:46
     .=0 by A243,A249,SCMPDS_2:58;
       pn+1 > 1 by A8,AXIOMS:22;
then A251:  SBP <> DataLoc(t3.SBP,pn) by A248,SCMP_GCD:4,def 3;
A252: t2.SBP=Exec(m3,t3).SBP by SCMPDS_5:46
     .=1 by A244,A251,SCMPDS_2:58;
A253: t2.intpos (pn+1)=Exec(m3,t3).intpos (pn+1) by SCMPDS_5:46
     .=p0+1 by A248,SCMPDS_2:58;
A254: now let i be Nat;
       assume A255: i >= 8 & i <=pn;
          pn+1 > pn by REAL_1:69;
    then A256: DataLoc(t3.SBP,pn) <> intpos i by A248,A255,SCMP_GCD:4;
      thus t2.intpos i =Exec(m3, t3).intpos i by SCMPDS_5:46
        .=t3.intpos i by A256,SCMPDS_2:58
        .=s.intpos i by A245,A255;
     end;

A257:  DataLoc(t2.SBP,pn+1)=intpos (pn+1+1) by A252,SCMP_GCD:5
     .=intpos (pn+(1+1)) by XCMPLX_1:1;
then A258:  a <> DataLoc(t2.SBP,pn+1) by SCMP_GCD:4,def 2;
    thus s1.a=Exec(m4,t2).a by SCMPDS_5:46
     .=0 by A250,A258,SCMPDS_2:58;
       pn+2 > 1 by A9,AXIOMS:22;
then A259:  SBP <> DataLoc(t2.SBP,pn+1) by A257,SCMP_GCD:4,def 3;
    thus s1.a1=Exec(m4,t2).SBP by SCMPDS_5:46,SCMP_GCD:def 3
     .=1 by A252,A259,SCMPDS_2:58;
       pn+2 > pn+1 by REAL_1:53;
then A260:  intpos (pn+1) <> DataLoc(t2.SBP,pn+1) by A257,SCMP_GCD:4;
    thus s1.intpos (pn+1)=Exec(m4,t2).intpos (pn+1) by SCMPDS_5:46
     .=p0+1 by A253,A260,SCMPDS_2:58;
    thus s1.intpos (pn+2)=Exec(m4,t2).intpos (pn+2) by SCMPDS_5:46
     .=pn by A257,SCMPDS_2:58;
    hereby let i be Nat;
       assume A261: i >= 8 & i <=pn;
          pn+2 > pn+0 by REAL_1:53;
    then A262: DataLoc(t2.SBP,pn+1) <> intpos i by A257,A261,SCMP_GCD:4;
      thus s1.intpos i =Exec(m4, t2).intpos i by SCMPDS_5:46
        .=t2.intpos i by A262,SCMPDS_2:58
        .=s.intpos i by A254,A261;
     end;
   end;
then A263: 1=s1.b1 by A214;
A264: s1.intpos(pn+1+1)=s1.intpos(pn+(1+1)) by XCMPLX_1:1
    .=pn by A240;
then A265:  WH4 is_halting_on s1 & WH4 is_closed_on s1
       by A2,A215,A240,A263,Lm6;
      then M4 ';' WH4 is_halting_on s by SCPISORT:10;
     hence QuickSort(n,p0) is_halting_on s by Def2;
   consider f be FinSequence of INT such that
A266:  len f=n & f is_FinSequence_on s,p0 by SCPISORT:3;
   consider g be FinSequence of INT such that
A267:  len g=n & g is_FinSequence_on IExec(QuickSort(n,p0),s),p0 by SCPISORT:3;
   take f,g;
   thus len f=n & f is_FinSequence_on s,p0 & len g=n &
   g is_FinSequence_on IExec(QuickSort(n,p0),s),p0 by A266,A267;
       now let i be Nat;
         assume A268: 1 <= i & i <= len f;
      then A269: p0+i >= p0+1 by AXIOMS:24;
            p0+1 >= 7+1 by A3,AXIOMS:24;
      then A270: p0+i >= 8 by A269,AXIOMS:22;
      A271: p0+i <= pn by A266,A268,AXIOMS:24;
         thus f.i=s.intpos(p0+i) by A266,A268,SCPISORT:def 1
           .=s1.intpos(p0+i) by A240,A270,A271;
     end;
then A272:  f is_FinSequence_on s1,p0 by SCPISORT:def 1;
       now let i be Nat;
         assume 1 <= i & i <= len g;
         hence g.i=IExec(QuickSort(n,p0),s).intpos(p0+i)
            by A267,SCPISORT:def 1
           .=IExec(M4 ';' WH4,s).intpos(p0+i) by Def2
           .=IExec(WH4,s1).intpos(p0+i) by A265,SCPISORT:8;
     end;
then g is_FinSequence_on IExec(WH4,s1),p0 by SCPISORT:def 1;
     hence f,g are_fiberwise_equipotent & g is_non_decreasing_on 1,n
       by A2,A215,A240,A263,A264,A266,A267,A272,Lm4;
end;

begin :: The Basic Property of Quick Sort and Its Correctness

theorem
      card QuickSort(n,p0)=57 by Lm29;

theorem
   for p0,n being Nat st p0 >= 7 holds QuickSort(n,p0) is parahalting
proof
   let p0,n be Nat;
   assume p0 >= 7;
   then for s be State of SCMPDS holds QuickSort(n,p0) is_halting_on s by Lm29
;
   hence thesis by SCMPDS_6:35;
end;

theorem
   for s being State of SCMPDS,p0,n being Nat st p0 >= 7 holds
    ex f,g be FinSequence of INT st len f=n & f is_FinSequence_on s,p0 &
    len g = n & g is_FinSequence_on IExec(QuickSort(n,p0),s),p0 &
    f,g are_fiberwise_equipotent & g is_non_decreasing_on 1,n by Lm29;

Back to top