reserve x,a for Int_position,
  s for State of SCMPDS;
reserve P,Q for Instruction-Sequence of SCMPDS;

theorem
  for s being 0-started State of SCMPDS,I being halt-free shiftable Program of
  SCMPDS , a be Int_position, i be Integer,X be set st
   (for t be 0-started State of SCMPDS,Q
    st (for x st x in X holds t.x=s.x) &
    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) & for x st x in X
   holds IExec(I,Q,t).x=t.x)
  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 be
  Int_position, i be Integer,X be set;
  set b=DataLoc(s.a,i);
  assume
A1: for t be 0-started State of SCMPDS,Q
 st (for x st x in X holds t.x=s.x) & t.a=s.
  a & t.b > 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).b < t.b & for x st x in X
   holds IExec(I,Q,t).x=t.x;
  then
A2: for t being 0-started State of SCMPDS,Q
   st (for x st x in {} holds t.x >= 0+t.b) & (
  for x st x in X holds t.x=s.x) & t.a=s.a & t.b > 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).b < t.b
   & (for x st x in {}
holds IExec(I,Q,t).x >= 0+IExec(I,Q,t).b)
 & for x st x in X holds IExec(I,Q,t).x=t.x;
A3: for x st x in {} holds s.x >= 0+s.b;
  for t being 0-started State of SCMPDS,Q
   st (for x st x in {} holds t.x >= 0+t.b) & (
  for x st x in X holds t.x=s.x) & t.a=s.a & t.b > 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).b < t.b
   & (for x st x in {}
holds IExec(I,Q,t).x >= 0+IExec(I,Q,t).b) &
for x st x in X
 holds IExec(I,Q,t).x=t.x
  by A1;
  hence
  while>0(a,i,I) is_closed_on s, P
   & while>0(a,i,I) is_halting_on s, P by A3,Th25;
  assume s.b > 0;
  hence thesis by A3,A2,Th25;
end;
