reserve x for Int_position,
  n,p0 for Nat;
reserve P,Q,V for Instruction-Sequence of SCMPDS;

theorem Th7:
  for s being 0-started State of SCMPDS,I being halt-free shiftable Program
of SCMPDS, a,x1,x2,x3,x4 be Int_position, i,c,md be Integer st s.
x4=s.x3-c+s.x1 & md <= s.x3-c &
 (for t be 0-started State of SCMPDS,Q 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,Q,t).a=t.
  a & I is_closed_on t,Q & I is_halting_on t,Q
   & IExec(I,Q,t).DataLoc(s.a,i) < t.
DataLoc(s.a,i) & IExec(I,Q,t).x4=
IExec(I,Q,t).x3-c+IExec(I,Q,t).x1
 & md <= IExec(I,Q,t)
.x3-c & IExec(I,Q,t).x2=t.x2) holds while>0(a,i,I) is_closed_on s,P
 & while>0(a,i,I) is_halting_on s,P & ( s.DataLoc(s.a,i) > 0
   implies IExec(while>0(a,i,I),P,s) =
  IExec(while>0(a,i,I),P,Initialize IExec(I,P,s)) )
proof
  let s be 0-started State of SCMPDS,
      I be halt-free shiftable Program of SCMPDS, a,x1,
  x2,x3,x4 be Int_position, i,c,md be Integer;
  set b=DataLoc(s.a,i);
  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;
  assume that
A1: s.x4=s.x3-c+s.x1 and
A2: md <= s.x3-c;
  consider f be Function of product the_Values_of SCMPDS,NAT such that
A3: 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;
A4: for t be 0-started State of SCMPDS st P[t] & F(t)=0 holds t.b <= 0 by A3;
  assume
A5: for t be 0-started State of SCMPDS,Q
   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,Q,t).a=t.a
 & I is_closed_on t,Q
& I is_halting_on t,Q & IExec(I,Q,t).DataLoc(s.a,i) <
t.DataLoc(s.a,i)
 & IExec(I,Q,t).x4=IExec(I,Q,t).x3-c+IExec(I,Q,t).x1
  & md <= IExec(I,Q,t).x3-c & IExec(I,Q,t).x2=t.x2;
A6: now
    let t be 0-started State of SCMPDS, Q;
    assume that
A7: P[t] and
A8: t.a=s.a and
A9: t.b > 0;
    set It=IExec(I,Q,t), t2=Initialize It;
    consider v be State of SCMPDS such that
A10: v=t and
A11: v.x4=v.x3-c+v.x1 and
A12: md <= v.x3-c and
A13: v.x2=s.x2 by A7;
A14: t.x2=s.x2 by A10,A13;
A15: t.x4=t.x3-c+t.x1 by A10,A11;
A16: md <= t.x3-c by A10,A12;
    thus IExec(I,Q,t).a=t.a & I is_closed_on t,Q & I is_halting_on t,Q
     by A5,A8,A9,A15,A13,A10,A12;
    thus F(t2) < F(t)
    proof
A17:  F(t)=t.b by A3,A9;
      assume
A18:  F(t2) >= F(t);
      then t2.b > 0 by A3,A9,A17;
      then F(t2)=t2.b by A3
        .=It.b by SCMPDS_5:15;
      hence contradiction by A5,A8,A9,A15,A16,A10,A13,A18,A17;
    end;
    thus P[Initialize It]
    proof
      take v=Initialize It;
      thus v=Initialize It;
      It.x4=It.x3-c+It.x1 by A5,A8,A9,A15,A16,A14;
      then v.x4=It.x3-c+It.x1 by SCMPDS_5:15;
      then v.x4=v.x3-c+It.x1 by SCMPDS_5:15;
      hence v.x4=v.x3-c+v.x1 by SCMPDS_5:15;
      md <= It.x3-c by A5,A8,A9,A15,A16,A14;
      hence md <= v.x3-c by SCMPDS_5:15;
      It.x2=t.x2 by A5,A8,A9,A15,A16,A10,A13;
      hence thesis by A10,A13,SCMPDS_5:15;
    end;
  end;
A19: P[s] by A1,A2;
  while>0(a,i,I) is_closed_on s,P & while>0(a,i,I)
  is_halting_on s,P from SCMPDS_8:sch 3(A4,A19,A6);
  hence while>0(a,i,I) is_closed_on s,P & while>0(a,i,I) is_halting_on s,P;
  assume
A20: s.b > 0;
  IExec(while>0(a,i,I),P,s) = IExec(while>0(a,i,I),P,
  Initialize IExec(I,P,s)) from SCMPDS_8:sch 4(A20,A4,A19,A6);
  hence thesis;
end;
