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 Th22:
  for a st a [= f.a for O holds a [= (f, O)+.a
proof
  let a;
  defpred S[Ordinal] means a [= (f, $1)+.a;
  deffunc F(Ordinal)=(f, $1)+.a;
A1: now
    let O1;
    assume that
A2: O1 <> 0 and
A3: O1 is limit_ordinal and
A4: for O2 st O2 in O1 holds S[O2];
    consider O2 being object such that
A5: O2 in O1 by A2,XBOOLE_0:def 1;
    reconsider O2 as Ordinal by A5;
A6: S[O2] by A4,A5;
    consider Ls being Sequence such that
A7: dom Ls = O1 & for O2 being Ordinal st O2 in O1 holds Ls.O2 = F(O2
    ) from ORDINAL2:sch 2;
    Ls.O2 = (f, O2)+.a & Ls.O2 in rng Ls by A7,A5,FUNCT_1:def 3;
    then (f, O2)+.a [= "\/"(rng Ls, L) by LATTICE3:38;
    then a [= "\/"(rng Ls, L) by A6,LATTICES:7;
    hence S[O1] by A2,A3,A7,Th17;
  end;
  assume
A8: a [= f.a;
A9: now
    let O1;
    assume S[O1];
    then f.a [= f.((f, O1)+.a) by QUANTAL1:def 12;
    then a [= f.((f, O1)+.a) by A8,LATTICES:7;
    hence S[succ O1] by Th15;
  end;
A10: S[0] by Th13;
  thus for O holds S[O] from ORDINAL2:sch 1(A10, A9, A1);
end;
