reserve A for preIfWhileAlgebra,
  C,I,J for Element of A;
reserve S for non empty set,
  T for Subset of S,
  s for Element of S;
reserve f for ExecutionFunction of A,S,T;

theorem Th87:
  for I being Element of A for s being Element of S holds
  not f iteration_terminates_for I,s iff (curry' f).I orbit s c= T
proof
  let I be Element of A;
  let s be Element of S;
  set g = (curry' f).I;
  hereby
    assume
A1: not f iteration_terminates_for I,s;
    thus g orbit s c= T
    proof
      let x be object;
      assume x in g orbit s;
      then
A2:   ex n being Element of NAT st ( x = iter(g, n).s)&( s in dom iter(g, n));
      defpred P[Nat] means iter(g,$1).s nin T;
      assume x nin T;
      then
A3:   ex n being Nat st P[n] by A2;
      consider n being Nat such that
A4:   P[n] & for m being Nat st P[m] holds n <= m from NAT_1:sch 5(A3);
      deffunc F(Nat) = iter(g,$1-'1).s;
      consider r being FinSequence such that
A5:   len r = n+1 & for k being Nat st k in dom r holds r.k = F(k)
      from FINSEQ_1:sch 2;
      rng r c= S
      proof
        let a be object;
        assume a in rng r;
        then consider b being object such that
A6:     b in dom r and
A7:     a = r.b by FUNCT_1:def 3;
        reconsider b as Element of NAT by A6;
        r.b = iter(g,b-'1).s by A5,A6;
        hence thesis by A7;
      end;
      then reconsider r as non empty FinSequence of S
      by A5,FINSEQ_1:def 4;
A8:   1 <= n+1 by NAT_1:11;
      then
A9:   1 in dom r by A5,FINSEQ_3:25;
A10:  n+1 in dom r by A5,A8,FINSEQ_3:25;
A11:  1-'1 = 0 by XREAL_1:232;
A12:  n+1-'1 = n by NAT_D:34;
A13:  iter(g,0) = id S by FUNCT_7:84;
      r.1 = F(1) by A5,A9;
      then
A14:  r.1 = s by A11,A13;
A15:  r.len r nin T by A4,A5,A10,A12;
      now
        let i be Nat such that
A16:    1 <= i and
A17:    i < len r;
        consider j being Nat such that
A18:    i = 1+j by A16,NAT_1:10;
        reconsider j as Element of NAT by ORDINAL1:def 12;
A19:    i-'1 = j by A18,NAT_D:34;
A20:    (i+1)-'1 = i by NAT_D:34;
A21:    dom curry' f = the carrier of A by FUNCT_2:def 1;
        dom g = S by FUNCT_2:def 1;
        then
A22:    g.(iter(g,j).s) = f.(iter(g,j).s, I) by A21,FUNCT_5:34;
A23:    iter(g,i) = g*iter( g,j) by A18,FUNCT_7:71;
A24:    1 <= i+1 by A16,NAT_1:13;
A25:    i+1 <= n+1 by A5,A17,NAT_1:13;
A26:    i-'1 < n by A5,A17,A18,A19,XREAL_1:6;
A27:    i in dom r by A16,A17,FINSEQ_3:25;
A28:    i+1 in dom r by A5,A24,A25,FINSEQ_3:25;
A29:    r.i = iter(g,i-'1).s by A5,A27;
        r.(i+1) = iter(g,i).s by A5,A20,A28;
        hence r.i in T & r.(i+1) = f.(r.i, I) by A4,A19,A22,A23,A26,A29,
FUNCT_2:15;
      end;
      hence contradiction by A1,A14,A15;
    end;
  end;
  assume
A30: (curry' f).I orbit s c= T;
  given r being non empty FinSequence of S such that
A31: r.1 = s and
A32: r.len r nin T and
A33: for i being Nat st 1 <= i & i < len r
  holds r.i in T & r.(i+1) = f.(r.i, I);
  defpred P[Nat] means $1+1 <= len r implies r.($1+1) in (curry' f).I orbit s;
  dom g = S by FUNCT_2:def 1;
  then
A34: P[0] by A31,Th6;
A35: for i being Nat st P[i] holds P[i+1]
  proof
    let i be Nat such that
A36: P[i] and
A37: i+1+1 <= len r;
A38: 1 <= i+1 by NAT_1:11;
A39: i+1 < len r by A37,NAT_1:13;
    then i+1 in dom r by A38,FINSEQ_3:25;
    then
A40: r.(i+1) in rng r by FUNCT_1:3;
    dom f = [:S, the carrier of A:] by FUNCT_2:def 1;
    then
A41: [r.(i+1), I] in dom f by A40,ZFMISC_1:87;
    consider n being Element of NAT such that
A42: r.(i+1) = iter((curry' f).I,n).s and s in dom iter((curry' f).I,n)
    by A36,A37,NAT_1:13;
A43: r.(i+1+1) = f.(r.(i+1), I) by A33,A38,A39
      .= (curry' f).I.(r.(i+1)) by A41,FUNCT_5:22
      .= (g*iter(g,n)).s by A42,FUNCT_2:15
      .= iter((curry' f).I,n+1).s by FUNCT_7:71;
    dom iter(g,n+1) = S by FUNCT_2:def 1;
    hence r.(i+1+1) in g orbit s by A43;
  end;
  consider i being Nat such that
A44: len r = i+1 by NAT_1:6;
  for n being Nat holds P[n] from NAT_1:sch 2(A34,A35);
  then r.(i+1) in g orbit s by A44;
  hence contradiction by A30,A32,A44;
end;
