let s be State of SCMPDS; for I being halt-free shiftable Program of SCMPDS
for a being Int_position
for i being Integer
for X being set st card I > 0 & ( for t being State of SCMPDS st ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) ) ) 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))) ) )
let I be halt-free shiftable Program of SCMPDS; for a being Int_position
for i being Integer
for X being set st card I > 0 & ( for t being State of SCMPDS st ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) ) ) 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))) ) )
let a be Int_position ; for i being Integer
for X being set st card I > 0 & ( for t being State of SCMPDS st ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) ) ) 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))) ) )
let i be Integer; for X being set st card I > 0 & ( for t being State of SCMPDS st ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) ) ) 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))) ) )
let X be set ; ( card I > 0 & ( for t being State of SCMPDS st ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) ) ) implies ( 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))) ) ) )
set b = DataLoc ((s . a),i);
assume A1:
card I > 0
; ( ex t being State of SCMPDS st
( ( for x being Int_position st x in X holds
t . x = s . x ) & t . a = s . a & t . (DataLoc ((s . a),i)) > 0 & not ( (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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) ) ) or ( 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))) ) ) )
assume A2:
for t being State of SCMPDS st ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) )
; ( 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))) ) )
then A3:
for t being State of SCMPDS st ( for x being Int_position st x in {} holds
t . x >= 0 + (t . (DataLoc ((s . a),i))) ) & ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in {} holds
(IExec (I,t)) . x >= 0 + ((IExec (I,t)) . (DataLoc ((s . a),i))) ) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) )
;
A4:
for x being Int_position st x in {} holds
s . x >= 0 + (s . (DataLoc ((s . a),i)))
;
for t being State of SCMPDS st ( for x being Int_position st x in {} holds
t . x >= 0 + (t . (DataLoc ((s . a),i))) ) & ( for x being Int_position st x in X holds
t . x = s . x ) & 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)) & ( for x being Int_position st x in {} holds
(IExec (I,t)) . x >= 0 + ((IExec (I,t)) . (DataLoc ((s . a),i))) ) & ( for x being Int_position st x in X holds
(IExec (I,t)) . x = t . x ) )
by A2;
hence
( while>0 (a,i,I) is_closed_on s & while>0 (a,i,I) is_halting_on s )
by A1, A4, Th27; ( s . (DataLoc ((s . a),i)) > 0 implies IExec ((while>0 (a,i,I)),s) = IExec ((while>0 (a,i,I)),(IExec (I,s))) )
assume
s . (DataLoc ((s . a),i)) > 0
; IExec ((while>0 (a,i,I)),s) = IExec ((while>0 (a,i,I)),(IExec (I,s)))
hence
IExec ((while>0 (a,i,I)),s) = IExec ((while>0 (a,i,I)),(IExec (I,s)))
by A1, A4, A3, Th27; verum