reserve f, g, h for Function;
reserve x, y, z, u, X for set,
  A for non empty set,
  n for Element of NAT,
  f for Function of X, X;
reserve f for c=-monotone Function of bool X, bool X,
  S for Subset of X;
reserve X, Y for non empty set,
  f for Function of X, Y,
  g for Function of Y, X;
reserve L for Lattice,
  f for Function of the carrier of L, the carrier of L,
  x for Element of L,
  O, O1, O2, O3, O4 for Ordinal,
  T for Sequence;
reserve L for complete Lattice,
  f for monotone UnOp of L,
  a, b for Element of L;

theorem Th34:
  a [= b & b is_a_fixpoint_of f implies for O2 holds (f, O2)+.a [= b
proof
  assume that
A1: a [= b and
A2: b is_a_fixpoint_of f;
  defpred S[Ordinal] means (f, $1)+.a [= b;
A3: f.b = b by A2;
A4: now
    let O1;
    assume S[O1];
    then f.(f, O1)+.a [= f.b by QUANTAL1:def 12;
    hence S[succ O1] by A3,Th15;
  end;
A5: now
    deffunc F(Ordinal)=(f, $1)+.a;
    let O1;
    assume that
A6: O1 <> 0 & O1 is limit_ordinal and
A7: for O2 st O2 in O1 holds S[O2];
    consider L1 being Sequence such that
A8: dom L1 = O1 & for O3 st O3 in O1 holds L1.O3 = F(O3) from
    ORDINAL2:sch 2;
A9: rng L1 is_less_than b
    proof
      let q be Element of L;
      assume q in rng L1;
      then consider O3 being object such that
A10:  O3 in dom L1 and
A11:  q = L1.O3 by FUNCT_1:def 3;
      reconsider O3 as Ordinal by A10;
      (f, O3)+.a [= b by A7,A8,A10;
      hence q [= b by A8,A10,A11;
    end;
    (f, O1)+.a = "\/"(rng L1, L) by A6,A8,Th17;
    hence S[O1] by A9,LATTICE3:def 21;
  end;
A12: S[0] by A1,Th13;
  thus for O2 holds S[O2] from ORDINAL2:sch 1(A12, A4, A5);
end;
