reserve l, m, n for Nat,
  i,j,k for Instruction of SCMPDS,
  I,J,K for Program of SCMPDS,
  p,q,r for PartState of SCMPDS;
reserve a,b,c for Int_position,
  s,s1,s2 for State of SCMPDS,
  k1,k2 for Integer;
reserve x for set;
reserve l,l1,loc for Nat;
reserve l1,l2 for Nat,
  i1,i2 for Instruction of SCMPDS;
reserve l for Nat;

theorem
  for P1,P2 being Instruction-Sequence of SCMPDS
  for s1 being 0-started State of SCMPDS
  for J being parahalting shiftable Program of SCMPDS st stop J c= P1
  for n being Nat st Shift(stop J,n) c= P2 &
    IC s2 = n & DataPart s1 = DataPart s2
  for i being Nat holds
   IC Comput(P1,s1,i) + n = IC Comput(P2,s2,i) &
    CurInstr(P1,Comput(P1,s1,i)) =
     CurInstr(P2,Comput(P2,s2,i)) &
    DataPart Comput(P1,s1,i) = DataPart
       Comput(P2,s2,i)
proof
  let P1,P2 be Instruction-Sequence of SCMPDS;
  let s1 be 0-started State of SCMPDS;
  let I be parahalting shiftable Program of SCMPDS;
  set SI=stop I;
  assume
A1: SI c= P1;
  let n be Nat;
  assume that
A2: Shift(SI,n) c= P2 and
A3: IC s2 =  n and
A4: DataPart s1 = DataPart s2;
A5:  0 in dom SI by COMPOS_1:36;
  then
A6: 0 + n in dom Shift(SI,n) by VALUED_1:24;
  defpred P[Nat] means IC Comput(P1,s1,$1) + n = IC Comput(
P2,s2,$1) &
  CurInstr(P1,Comput(P1,s1,$1))
   = CurInstr(P2,Comput(P2,s2,$1)) & DataPart
  Comput(P1,s1,$1) = DataPart Comput(P2,s2,$1);
A7: for k being Nat st P[k] holds P[k + 1]
  proof
    let k be Nat;
    assume
A8: P[k];
    reconsider m = IC Comput(P1,s1,k) as Nat;
    set i = CurInstr(P1,Comput(P1,s1,k));
A9: Comput(P1,s1,k+1) =
   Following(P1,Comput(P1,s1,k))
 by EXTPRO_1:3
      .= Exec(CurInstr(P1,Comput(P1,s1,k)),
      Comput(P1,s1,k));
    reconsider l = IC Comput(P1,s1,k+1) as Nat;
A10: IC Comput(P1,s1,k+1) in dom SI by A1,Def6;
    then
A11: l+n in dom Shift(SI,n) by VALUED_1:24;
A12: Comput(P2,s2,k+1) =
   Following(P2,Comput(P2,s2,k))
 by EXTPRO_1:3
      .= Exec(CurInstr(P2,Comput(P2,s2,k)),
      Comput(P2,s2,k));
A13: IC Comput(P1,s1,k)
 in dom SI by A1,Def6;
A14: i = P1.IC Comput(P1,s1,k) by PBOOLE:143
      .= SI.IC Comput(P1,s1,k) by A1,A13,GRFUNC_1:2;
    then
A15: InsCode i <> 1 & InsCode i <> 3 by A13,Def9;
A16: i valid_at m by A13,A14,Def9;
    hence
A17: IC Comput(P1,s1,k+1) + n = IC Comput(P2,s2,k+1)
       by A8,A9,A12,A15,Th26;
    CurInstr(P1,Comput(P1,s1,k+1)) = P1.l by PBOOLE:143
      .= SI.l by A1,A10,GRFUNC_1:2;
    hence CurInstr(P1,Comput(P1,s1,k+1))
     = Shift(SI,n).(IC Comput(P2,s2,k+1)) by A17,A10,VALUED_1:def 12
      .= P2.IC Comput(P2,s2,k+1) by A2,A17,A11,GRFUNC_1:2
      .= CurInstr(P2,Comput(P2,s2,k+1)) by PBOOLE:143;
    thus thesis by A8,A9,A12,A15,A16,Th26;
  end;
A18: P1.IC s1 = P1. 0 by MEMSTR_0:def 11
    .= SI. 0 by A1,A5,GRFUNC_1:2;
  let i be Nat;
A19: DataPart Comput(P1,s1,0) = DataPart s2 by A4
    .= DataPart Comput(P2,s2,0);
A20: IC Comput(P1,s1,0)
     = IC s1
    .=  0 by MEMSTR_0:def 11;
A21:  P2/.IC s2 = P2.IC s2 by PBOOLE:143;
A22:  P1/.IC s1 = P1.IC s1 by PBOOLE:143;
  CurInstr(P1,Comput(P1,s1,0))
     = CurInstr(P1,s1)
    .= Shift(SI,n).( 0 + n) by A5,A18,A22,VALUED_1:def 12
    .= CurInstr(P2,Comput(P2,s2,0))
     by A2,A3,A6,A21,GRFUNC_1:2;
  then
A23: P[0] by A3,A20,A19;
  for k being Nat holds P[k] from NAT_1:sch 2(A23,A7);
  hence thesis;
end;
