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

theorem Th21:
  for I,J being Program of SCMPDS,
      s being 0-started State of SCMPDS st I
  is_closed_on s,P & I is_halting_on s,P holds I ';' Goto (card J + 1) ';' J
  is_halting_on s,P & I ';' Goto (card J + 1) ';' J is_closed_on s,P
proof
  let I,J be Program of SCMPDS,s be 0-started State of SCMPDS;
  set G = Goto (card J + 1), IJ = I ';' G ';' J, J2 = I ';' (G ';' J), pJ =
stop J2, pI =stop I, P1 = P +* pI, P2 = P +* pJ,
  m=LifeSpan(P1,s), SS=Stop SCMPDS,
  s3= Comput(P1, s,m), s4= Comput(P2, s,m),
  P3= P1, P4 = P2;
A1: Initialize s = s by MEMSTR_0:44;
A2: IJ=I ';' (G ';' J) by AFINSQ_1:27;
A3: I c= stop I by AFINSQ_1:74;
  pI c= P3 by FUNCT_4:25;
  then
A4: I c= P3 by A3,XBOOLE_1:1;
A5: dom pI c= dom pJ by SCMPDS_5:13;
  set JS=G ';' J ';' SS;
  reconsider n = IC s3 as Nat;
A6: card pI=card I + 1 by COMPOS_1:55;
  assume
A7: I is_closed_on s,P;
  then IC s3 in dom pI by A1;
  then n < card I + 1 by A6,AFINSQ_1:66;
  then
A8: n <= card I by INT_1:7;
A9: pJ c= P2 by FUNCT_4:25;
A10: pJ =I ';' (G ';' J) ';' SS
    .=I ';' JS by AFINSQ_1:27;
  then I c= pJ by AFINSQ_1:74;
  then I c= P2 by A9,XBOOLE_1:1;
  then
A11: I c= P4;
  assume
A12: I is_halting_on s,P;
  then
A13: P1 halts_on s by A1;
A14: P3/.IC s3
 = P3.IC s3 by PBOOLE:143;
A15:  P4/.IC s4
 = P4.IC s4 by PBOOLE:143;
  per cases;
  suppose
    IC s3 <>  card I;
    then n < card I by A8,XXREAL_0:1;
    then
A16: IC s3 in dom I by AFINSQ_1:66;
A17: halt SCMPDS=CurInstr(P1,s3) by A13,EXTPRO_1:def 15
      .=I.IC s3 by A4,A16,A14,GRFUNC_1:2
      .=P4.IC s3 by A11,A16,GRFUNC_1:2
      .=CurInstr(P4,s4) by A7,A12,Th16,A15;
    then
A18: P2 halts_on s by EXTPRO_1:29;
    hence IJ is_halting_on s,P by A2,A1;
    now
      let k be Nat;
      set C1k=IC Comput(P1, s,k), C2k=IC Comput(P2
, s,k);
      per cases;
      suppose
A19:    k <= m;
        C1k in dom pI by A7,A1;
        then C1k in dom pJ by A5;
        hence C2k in dom pJ by A7,A12,A19,Th16;
      end;
      suppose
A20:    k > m;
        set m2=LifeSpan(P2,s);
A21:    m2 <= m by A17,A18,EXTPRO_1:def 15;
        then C2k=IC Comput(P2, s,m2) by A18,A20,EXTPRO_1:25,XXREAL_0:2
          .=IC Comput(P1, s,m2) by A7,A12,A21,Th16;
        then C2k in dom pI by A7,A1;
        hence C2k in dom pJ by A5;
      end;
    end;
    hence thesis by A2,A1;
  end;
  suppose
A22: IC s3 = card I;
    then
A23: IC s4= card I by A7,A12,Th16;
A24:  0 in dom G by Th10;
A25: card Stop SCMPDS = 1 by AFINSQ_1:34;
A26: JS =G ';' (J ';' SS) by AFINSQ_1:27;
    then
A27: card JS =card G + card (J ';' SS) by AFINSQ_1:17
      .= 1 + card (J ';' SS) by COMPOS_1:54
      .= card J + 1 + 1 by A25,AFINSQ_1:17;
    then
A28:  0 in dom JS by AFINSQ_1:66;
    card J + 1 < card JS by A27,NAT_1:13;
    then
A29:  (card J + 1) in dom JS by AFINSQ_1:66;
    card pJ = card I + (card J + (1 + 1)) by A10,A27,AFINSQ_1:17
      .= card I + card J + 1 + 1;
    then
A30: card I + card J + 1 < card pJ by NAT_1:13;
    then
A31:  (card I + card J + 1) in dom pJ by AFINSQ_1:66;
A32:  P4/.IC s4
 = P4.IC s4 by PBOOLE:143;
A33:    card pJ = card I + card JS by A10,AFINSQ_1:17;
    0 < card JS;
    then card I + 0 < card pJ by XREAL_1:6,A33;
    then
A34:  card I in dom pJ by AFINSQ_1:66;
A35: CurInstr(P4,s4)= P4. card I by A7,A12,A22,Th16,A32
      .= P2. card I
      .= (I ';' JS).(0+card I) by A10,A9,A34,GRFUNC_1:2
      .= JS. 0 by A28,AFINSQ_1:def 3
      .=G. 0 by A26,A24,AFINSQ_1:def 3
      .=goto (card J + 1);
    card (G ';' J) = card G + card J by AFINSQ_1:17
      .=1 + card J by COMPOS_1:54;
    then
A36: JS. (card J + 1)=JS.(0+card (G ';' J))
      .=halt SCMPDS by Lm1,Lm2,AFINSQ_1:def 3;
A37:  P2/.IC Comput(P2,s,m+1) = P2.IC Comput(P2,s,m+1) by PBOOLE:143;
A38: IC Comput(P2, s,m + 1) = IC Following(P2,s4) by EXTPRO_1:3
      .= ICplusConst(s4,card J +1) by A35,SCMPDS_2:54
      .= (card I + (card J + 1)) by A23,Th4
      .= (card I + card J + 1);
    then
A39: CurInstr(P2,Comput(P2,s,m+1))
 = P2. (card I + card J + 1) by A37
      .= (I ';' JS).(card I+(card J+1)) by A10,A9,A31,GRFUNC_1:2
      .= halt SCMPDS by A29,A36,AFINSQ_1:def 3;
    then
A40: P2 halts_on s by EXTPRO_1:29;
    hence IJ is_halting_on s,P by A2,A1;
    now
      let k be Nat;
      set C1k=IC Comput(P1, s,k), C2k=IC Comput(P2, s,k);
      per cases;
      suppose
A41:    k <= m;
        C1k in dom pI by A7,A1;
        then C1k in dom pJ by A5;
        hence C2k in dom pJ by A7,A12,A41,Th16;
      end;
      suppose
A42:    k > m;
        set m2=LifeSpan(P2,s);
A43:    m2 <= m+1 by A39,A40,EXTPRO_1:def 15;
        k >= m+1 by A42,INT_1:7;
        then C2k=IC Comput(P2, s,m2) by A40,A43,EXTPRO_1:25,XXREAL_0:2
          .= (card I + card J + 1) by A38,A40,A43,EXTPRO_1:25;
        hence C2k in dom pJ by A30,AFINSQ_1:66;
      end;
    end;
    hence thesis by A2,A1;
  end;
end;
