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 Th28:
  a [= f.a & (f, O1)+.a is_a_fixpoint_of f implies for O2 st O1 c=
  O2 holds (f, O1)+.a = (f, O2)+.a
proof
  assume that
A1: a [= f.a and
A2: (f, O1)+.a is_a_fixpoint_of f;
  set fa = (f, O1)+.a;
  defpred S[Ordinal] means O1 c= $1 implies fa = (f, $1)+.a;
A3: now
    let O2;
    assume that
A4: O2 <> 0 & O2 is limit_ordinal and
A5: for O3 st O3 in O2 holds S[O3];
    thus S[O2]
    proof
      assume O1 c= O2;
      then
A6:   fa [= (f, O2)+.a by A1,Th24;
      deffunc F(Ordinal)=(f, $1)+.a;
      consider L1 being Sequence such that
A7:   dom L1 = O2 & for O3 st O3 in O2 holds L1.O3 = F(O3) from
      ORDINAL2:sch 2;
A8:   rng L1 is_less_than fa
      proof
        let q be Element of L;
        assume q in rng L1;
        then consider O3 being object such that
A9:     O3 in dom L1 and
A10:    q = L1.O3 by FUNCT_1:def 3;
        reconsider O3 as Ordinal by A9;
        per cases;
        suppose
          O1 c= O3;
          then (f, O3)+.a [= fa by A5,A7,A9;
          hence q [= fa by A7,A9,A10;
        end;
        suppose
          O3 c= O1;
          then (f, O3)+.a [= fa by A1,Th24;
          hence q [= fa by A7,A9,A10;
        end;
      end;
      (f, O2)+.a = "\/"(rng L1, L) by A4,A7,Th17;
      then (f, O2)+.a [= fa by A8,LATTICE3:def 21;
      hence thesis by A6,LATTICES:8;
    end;
  end;
A11: now
    let O2;
    assume
A12: S[O2];
    thus S[succ O2]
    proof
      assume
A13:  O1 c= succ O2;
      per cases;
      suppose
        O1 = succ O2;
        hence thesis;
      end;
      suppose
        O1 <> succ O2;
        then O1 c< succ O2 by A13;
        then O1 in succ O2 by ORDINAL1:11;
        hence fa = f.(f, O2)+.a by A2,A12,ORDINAL1:22
          .= (f, succ O2)+.a by Th15;
      end;
    end;
  end;
A14: S[0];
  thus for O2 holds S[O2] from ORDINAL2:sch 1(A14, A11, A3);
end;
