reserve A for preIfWhileAlgebra;
reserve A for Euclidean preIfWhileAlgebra;
reserve X for non empty countable set;
reserve T for Subset of Funcs(X, INT);
reserve f for Euclidean ExecutionFunction of A, Funcs(X, INT), T;
reserve A for Euclidean preIfWhileAlgebra,
  X for non empty countable set,
   z for (Element of X),
  s,s9 for (Element of Funcs(X, INT)),
  T for Subset of Funcs(X, INT),
  f for Euclidean ExecutionFunction of A, Funcs(X, INT), T,
  v for INT-Variable of A,f,
  t for INT-Expression of A,f;
reserve i for Integer;
reserve b for (Element of X),
  g for Euclidean ExecutionFunction of A, Funcs(X, INT), Funcs(X, INT)\(b,0);

theorem Th54:
  for I being Element of A st I is_terminating_wrt g for i,n being
  Variable of g st (ex d being Function st d.b = 0 & d.n = 1 & d.i = 2) & for s
  holds g.(s,I).n = s.n & g.(s,I).i = s.i holds for-do(i:=t, i leq n, i+=1, I)
  is_terminating_wrt g
proof
  set S = Funcs(X, INT);
  set T = Funcs(X, INT)\(b,0);
  let I be Element of A such that
A1: I is_terminating_wrt g;
  let i,n be Variable of g;
  i+=1 is_terminating_wrt g by AOFA_000:104;
  then
A2: I\; i+=1 is_terminating_wrt g by A1,AOFA_000:110;
  set Q = while(i leq n, I\; i+=1);
  given d being Function such that
A3: d.b = 0 and
A4: d.n = 1 and
A5: d.i = 2;
  assume
A6: for s holds g.(s,I).n = s.n & g.(s,I).i = s.i;
  let s;
A7: [s, i:=t] in TerminatingPrograms(A,S,T,g) by AOFA_000:def 36;
A8: i leq n is_terminating_wrt g by AOFA_000:104;
  g iteration_terminates_for I\; i+=1\; i leq n, g.(g.(s, i:=t), i leq n)
  by A3,A4,A5,A6,Th52;
  then [g.(s, i:=t), Q] in TerminatingPrograms(A,S,T,g) by A8,A2,AOFA_000:114;
  hence thesis by A7,AOFA_000:def 35;
end;
