reserve
  S for (4,1) integer bool-correct non empty non void BoolSignature,
  X for non-empty ManySortedSet of the carrier of S,
  T for vf-free integer all_vars_including inheriting_operations free_in_itself
  (X,S)-terms VarMSAlgebra over S,
  C for (4,1) integer bool-correct non-empty image of T,
  G for basic GeneratorSystem over S,X,T,
  A for IfWhileAlgebra of the generators of G,
  I for integer SortSymbol of S,
  x,y,z,m for pure (Element of (the generators of G).I),
  b for pure (Element of (the generators of G).the bool-sort of S),
  t,t1,t2 for Element of T,I,
  P for Algorithm of A,
  s,s1,s2 for Element of C-States(the generators of G);
reserve
  f for ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G, b);
reserve u for ManySortedFunction of FreeGen T, the Sorts of C;
reserve
  S for 1-1-connectives (4,1) integer (11,1,1)-array 11 array-correct
  bool-correct non empty non void BoolSignature,
  X for non-empty ManySortedSet of the carrier of S,
  T for vf-free all_vars_including inheriting_operations free_in_itself
  (X,S)-terms integer-array non-empty VarMSAlgebra over S,
  C for (11,1,1)-array (4,1) integer bool-correct non-empty image of T,
  G for basic GeneratorSystem over S,X,T,
  A for IfWhileAlgebra of the generators of G,
  I for integer SortSymbol of S,
  x,y,m,i for pure (Element of (the generators of G).I),
  M,N for pure (Element of (the generators of G).the_array_sort_of S),
  b for pure (Element of (the generators of G).the bool-sort of S),
  s,s1 for (Element of C-States(the generators of G));
reserve u for ManySortedFunction of FreeGen T, the Sorts of C;

theorem Th94:
  for A being elementary IfWhileAlgebra of the generators of G
  for f being ExecutionFunction of A, C-States(the generators of G),
  (\falseC)-States(the generators of G,b) st
  f in C-Execution(A,b,\falseC) & G is C-supported
  for t0,t1 being Element of T,I for J being Algorithm of A
  for P being set st
  P is_invariant_wrt i:=(t0,A),f &
  P is_invariant_wrt b gt(t1,@i,A),f &
  P is_invariant_wrt i:=(@i+\1(T,I),A),f &
  P is_invariant_wrt J,f & J is_terminating_wrt f,P &
  for s holds f.(s,J).I.i = s.I.i & f.(s,b gt(t1,@i,A)).I.i = s.I.i &
  t1 value_at(C,f.(s, b gt(t1,@i,A))) = t1 value_at(C,s) &
  t1 value_at(C,f.(s, J\;i:=(@i+\1(T,I),A))) =
  t1 value_at(C,s)
  holds
  for-do(i:=(t0,A),b gt(t1,@i,A),i:=(@i+\1(T,I),A), J) is_terminating_wrt f, P
  proof
    let A be elementary IfWhileAlgebra of the generators of G;
    let f be ExecutionFunction of A, C-States(the generators of G),
    (\falseC)-States(the generators of G,b);
    assume
A1: f in C-Execution(A,b,\falseC) & G is C-supported;
    let t0,t1 be Element of T,I;
    let J be Algorithm of A;
    let P be set;
    assume A2: P is_invariant_wrt i:=(t0,A),f;
    assume A3: P is_invariant_wrt b gt(t1,@i,A),f;
    assume A4: P is_invariant_wrt i:=(@i+\1(T,I),A),f;
    assume A5: P is_invariant_wrt J,f;
    assume A6: J is_terminating_wrt f,P;
    set W = b gt(t1,@i,A);
    set L = i:=(@i+\1(T,I),A);
    set K = i:=(t0,A);
    set ST = C-States(the generators of G);
    set TV = (\falseC)-States(the generators of G, b);
    assume A7: for s holds f.(s,J).I.i = s.I.i & f.(s,W).I.i = s.I.i &
    t1 value_at(C,f.(s, W)) = t1 value_at(C,s) &
    t1 value_at(C,f.(s, J\;L)) = t1 value_at(C,s);
A8: K is_terminating_wrt f, P by AOFA_000:107;
    L is_terminating_wrt f,P by AOFA_000:107;
    then
A9: W is_terminating_wrt f & J\;L is_terminating_wrt f,P
    by A5,A6,AOFA_000:104,111;
A10: for s st s in P & f.(f.(s,J\;L),W) in TV holds f.(s,J\;L) in P
    by A5,A4,AOFA_000:109,def 39;
    for s st f.(s,W) in P holds f iteration_terminates_for J\;L\;W, f.(s,W)
    proof let s; assume
      f.(s,W) in P;
      defpred P[Element of ST] means $1.I.i < t1 value_at(C,$1);
      deffunc F(Element of ST) = In((t1 value_at(C,$1))-$1.I.i, NAT);
      @i value_at(C,s) = s.I.i &
      f.(s,W).I.i = s.I.i & t1 value_at(C,f.(s,W)) = t1 value_at(C,s)
      by A7,Th61;
      then
A11:   f.(s,W) in TV iff P[f.(s,W)] by A1,Th66;
A12:   for s being Element of ST st P[s]
      holds (P[f.(s,J\;L\;W)] iff f.(s,J\;L\;W) in TV) &
      F(f.(s,J\;L\;W)) < F(s)
      proof
        let s; assume
A13:     P[s];
A14:     f.(s,J\;L\;W) = f.(f.(s, J\;L), W) by AOFA_000:def 29;
        then @i value_at(C,f.(s,J\;L)) = f.(s,J\;L).I.i &
        f.(s,J\;L\;W).I.i = f.(s,J\;L).I.i &
        t1 value_at(C,f.(s,J\;L\;W)) = t1 value_at(C,f.(s,J\;L))
        by A7,Th61;
        hence P[f.(s,J\;L\;W)] iff f.(s,J\;L\;W) in TV by A14,A1,Th66;
A15:     s.I.i+1 <= t1 value_at(C,s) by A13,INT_1:7;
A16:     (@i value_at(C,f.(s,J)))+(\1(T,I)value_at(C,f.(s,J)))
        = (@i value_at(C,f.(s,J)) qua Integer)+(\1(T,I)value_at(C,f.(s,J)))
        by AOFA_A00:55;
        F(f.(s,J\;L\;W))
        = In((t1 value_at(C,f.(f.(s,J\;L),W)))-f.(s,J\;L\;W).I.i, NAT)
        by AOFA_000:def 29
        .= In((t1 value_at(C,f.(s,J\;L)))-f.(s,J\;L\;W).I.i, NAT) by A7
        .= In((t1 value_at(C,s))-f.(s,J\;L\;W).I.i, NAT) by A7
        .= In((t1 value_at(C,s))-f.(f.(s,J\;L),W).I.i, NAT) by AOFA_000:def 29
        .= In((t1 value_at(C,s))-f.(s,J\;L).I.i, NAT) by A7
        .= In((t1 value_at(C,s))-f.(f.(s,J),L).I.i, NAT) by AOFA_000:def 29
        .= In((t1 value_at(C,s) qua Integer)
        -((@i+\1(T,I))value_at(C,f.(s,J))), NAT) by A1,Th65
        .= In((t1 value_at(C,s))-((@i value_at(C,f.(s,J)) qua Integer)+
        (\1(T,I)value_at(C,f.(s,J)))), NAT) by A16,Th39
        .= In((t1 value_at(C,s))-(f.(s,J).I.i+
        (\1(T,I)value_at(C,f.(s,J)))), NAT) by Th61
        .= In((t1 value_at(C,s))-(s.I.i+(\1(T,I)value_at(C,f.(s,J)))), NAT)
        by A7
        .= In((t1 value_at(C,s))-(s.I.i+1), NAT) by Th37
        .= (t1 value_at(C,s))-s.I.i-1 by A15,INT_1:5,SUBSET_1:def 8
        .= F(s)-1 by A13,INT_1:5,SUBSET_1:def 8;
        hence F(f.(s,J\;L\;W)) < F(s) by XREAL_1:44;
      end;
      thus f iteration_terminates_for J\;L\;W, f.(s,W)
      from AOFA_000:sch 3(A11,A12);
    end;
    then while(W,J\;L) is_terminating_wrt f, P by A3,A9,A10,AOFA_000:118;
    hence for-do(K,W,L, J) is_terminating_wrt f, P by A2,A8,AOFA_000:111;
  end;
