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 Th29:
  f.a [= 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: f.a [= 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:   (f, O2)-.a [= fa by A1,Th25;
      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:   fa is_less_than rng L1
      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 fa [= (f, O3)-.a by A5,A7,A9;
          hence fa [= q by A7,A9,A10;
        end;
        suppose
          O3 c= O1;
          then fa [= (f, O3)-.a by A1,Th25;
          hence fa [= q by A7,A9,A10;
        end;
      end;
      (f, O2)-.a = "/\"(rng L1, L) by A4,A7,Th18;
      then fa [= (f, O2)-.a by A8,LATTICE3:39;
      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 Th16;
      end;
    end;
  end;
A14: S[0];
  thus for O2 holds S[O2] from ORDINAL2:sch 1(A14, A11, A3);
end;
