:: Fix-points in complete lattices :: by Piotr Rudnicki and Andrzej Trybulec :: :: Received September 16, 1996 :: Copyright (c) 1996-2021 Association of Mizar Users :: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland). :: This code can be distributed under the GNU General Public Licence :: version 3.0 or later, or the Creative Commons Attribution-ShareAlike :: License version 3.0 or later, subject to the binding interpretation :: detailed in file COPYING.interpretation. :: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these :: licenses, or see http://www.gnu.org/licenses/gpl.html and :: http://creativecommons.org/licenses/by-sa/3.0/. environ vocabularies FUNCT_1, XBOOLE_0, RELAT_1, FUNCT_4, SUBSET_1, NUMBERS, ABIAN, FUNCT_7, ARYTM_3, COHSP_1, TARSKI, FUNCOP_1, ZFMISC_1, SETFAM_1, FUNCT_2, LATTICES, STRUCT_0, ORDINAL1, ORDINAL2, EQREL_1, CARD_1, BINOP_1, LATTICE3, PBOOLE, FILTER_0, FILTER_1, WELLORD1, RELAT_2, ORDERS_1, ORDERS_2, XXREAL_0, REWRITE1, XXREAL_2, SEQM_3, KNASTER, NAT_1; notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, CARD_1, ORDINAL1, NUMBERS, XCMPLX_0, NAT_1, RELAT_1, RELAT_2, ORDERS_1, FUNCT_1, RELSET_1, PARTFUN1, FUNCT_2, BINOP_1, FUNCOP_1, SETFAM_1, FUNCT_4, WELLORD1, ORDINAL2, STRUCT_0, COHSP_1, LATTICES, LATTICE3, QUANTAL1, ORDERS_2, ABIAN; constructors WELLORD1, WELLORD2, BINOP_1, DOMAIN_1, ORDINAL2, NAT_1, ABIAN, BOOLEALG, QUANTAL1, COHSP_1, RELSET_1, NUMBERS; registrations XBOOLE_0, SUBSET_1, FUNCT_1, ORDINAL1, RELSET_1, CARD_1, STRUCT_0, LATTICES, LATTICE3, QUANTAL1; requirements NUMERALS, BOOLE, SUBSET; begin :: Preliminaries reserve f, g, h for Function; theorem :: KNASTER:1 h = f \/ g & dom f misses dom g implies (h is one-to-one iff f is one-to-one & g is one-to-one & rng f misses rng g); begin :: Fix points in general reserve x, y, z, u, X for set, A for non empty set, n for Element of NAT, f for Function of X, X; theorem :: KNASTER:2 x is_a_fixpoint_of iter(f,n) implies f.x is_a_fixpoint_of iter(f, n); theorem :: KNASTER:3 (ex n st x is_a_fixpoint_of iter(f,n) & for y st y is_a_fixpoint_of iter(f,n) holds x = y) implies x is_a_fixpoint_of f; definition let A, B be non empty set, f be Function of A, B; redefine attr f is c=-monotone means :: KNASTER:def 1 for x, y being Element of A st x c= y holds f.x c= f.y; end; registration let A be set, B be non empty set; cluster c=-monotone for Function of A, B; end; definition let X be set; let f be c=-monotone Function of bool X, bool X; func lfp (X, f) -> Subset of X equals :: KNASTER:def 2 meet {h where h is Subset of X : f.h c= h}; func gfp (X, f) -> Subset of X equals :: KNASTER:def 3 union {h where h is Subset of X : h c= f.h }; end; reserve f for c=-monotone Function of bool X, bool X, S for Subset of X; theorem :: KNASTER:4 lfp(X, f) is_a_fixpoint_of f; theorem :: KNASTER:5 gfp(X, f) is_a_fixpoint_of f; theorem :: KNASTER:6 f.S c= S implies lfp(X,f) c= S; theorem :: KNASTER:7 S c= f.S implies S c= gfp(X,f); theorem :: KNASTER:8 S is_a_fixpoint_of f implies lfp(X,f) c= S & S c= gfp(X,f); ::$N Knaster Theorem scheme :: KNASTER:sch 1 Knaster{A() -> set, F(object) -> set}: ex D being set st F(D) = D & D c= A() provided for X, Y being set st X c= Y holds F(X) c= F(Y) and F(A()) c= A(); reserve X, Y for non empty set, f for Function of X, Y, g for Function of Y, X; :: Banach decomposition theorem :: KNASTER:9 ex Xa, Xb, Ya, Yb being set st Xa misses Xb & Ya misses Yb & Xa \/ Xb = X & Ya \/ Yb = Y & f.:Xa = Ya & g.:Yb = Xb; ::$N Schroeder Bernstein theorem theorem :: KNASTER:10 for X, Y being non empty set, f being Function of X, Y, g being Function of Y, X st f is one-to-one & g is one-to-one holds ex h being Function of X,Y st h is bijective; theorem :: KNASTER:11 ::: EULER_1:12 f is bijective implies X,Y are_equipotent; theorem :: KNASTER:12 f is one-to-one & g is one-to-one implies X,Y are_equipotent; begin :: The lattice of a lattice subset definition let L be Lattice, f be Function of the carrier of L, the carrier of L, x be Element of L, O be Ordinal; func (f, O)+.x -> set means :: KNASTER:def 4 ex L0 being Sequence st it = last L0 & dom L0 = succ O & L0.0 = x & (for C being Ordinal st succ C in succ O holds L0.succ C = f.(L0.C)) & for C being Ordinal st C in succ O & C <> 0 & C is limit_ordinal holds L0.C = "\/"(rng(L0|C), L); func (f, O)-.x -> set means :: KNASTER:def 5 ex L0 being Sequence st it = last L0 & dom L0 = succ O & L0.0 = x & (for C being Ordinal st succ C in succ O holds L0.succ C = f.(L0.C)) & for C being Ordinal st C in succ O & C <> 0 & C is limit_ordinal holds L0.C = "/\"(rng(L0|C) , L); end; 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; theorem :: KNASTER:13 (f, 0)+.x = x; theorem :: KNASTER:14 (f, 0)-.x = x; theorem :: KNASTER:15 (f, succ O)+.x = f.(f, O)+.x; theorem :: KNASTER:16 (f, succ O)-.x = f.(f, O)-.x; theorem :: KNASTER:17 O <> 0 & O is limit_ordinal & dom T = O & (for A being Ordinal st A in O holds T.A = (f, A)+.x) implies (f, O)+.x = "\/"(rng T, L); theorem :: KNASTER:18 O <> 0 & O is limit_ordinal & dom T = O & (for A being Ordinal st A in O holds T.A = (f, A)-.x) implies (f, O)-.x = "/\"(rng T, L); theorem :: KNASTER:19 iter(f, n).x = (f, n)+.x; theorem :: KNASTER:20 iter(f, n).x = (f, n)-.x; definition let L be Lattice, f be (UnOp of the carrier of L), a be Element of L, O be Ordinal; redefine func (f, O)+.a -> Element of L; end; definition let L be Lattice, f be (UnOp of the carrier of L), a be Element of L, O be Ordinal; redefine func (f, O)-.a -> Element of L; end; definition let L be non empty LattStr, P be Subset of L; attr P is with_suprema means :: KNASTER:def 6 for x,y being Element of L st x in P & y in P ex z being Element of L st z in P & x [= z & y [= z & for z9 being Element of L st z9 in P & x [= z9 & y [= z9 holds z [= z9; attr P is with_infima means :: KNASTER:def 7 for x,y being Element of L st x in P & y in P ex z being Element of L st z in P & z [= x & z [= y & for z9 being Element of L st z9 in P & z9 [= x & z9 [= y holds z9 [= z; end; registration let L be Lattice; cluster non empty with_suprema with_infima for Subset of L; end; definition let L be Lattice, P be non empty with_suprema with_infima Subset of L; func latt P -> strict Lattice means :: KNASTER:def 8 the carrier of it = P & for x, y being Element of it ex x9, y9 being Element of L st x = x9 & y = y9 & (x [= y iff x9 [= y9); end; begin :: Complete lattices registration cluster complete -> bounded for Lattice; end; reserve L for complete Lattice, f for monotone UnOp of L, a, b for Element of L; theorem :: KNASTER:21 ex a st a is_a_fixpoint_of f; theorem :: KNASTER:22 for a st a [= f.a for O holds a [= (f, O)+.a; theorem :: KNASTER:23 for a st f.a [= a for O holds (f, O)-.a [= a; theorem :: KNASTER:24 for a st a [= f.a for O1, O2 st O1 c= O2 holds (f, O1)+.a [= (f, O2)+.a; theorem :: KNASTER:25 for a st f.a [= a for O1, O2 st O1 c= O2 holds (f, O2)-.a [= (f, O1)-.a; theorem :: KNASTER:26 for a st a [= f.a for O1, O2 st O1 c< O2 & not (f, O2)+.a is_a_fixpoint_of f holds (f, O1)+.a <> (f, O2)+.a; theorem :: KNASTER:27 for a st f.a [= a for O1, O2 st O1 c< O2 & not (f, O2)-.a is_a_fixpoint_of f holds (f, O1)-.a <> (f, O2)-.a; theorem :: KNASTER:28 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; theorem :: KNASTER:29 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; theorem :: KNASTER:30 for a st a [= f.a ex O st card O c= card the carrier of L & (f, O)+.a is_a_fixpoint_of f; theorem :: KNASTER:31 for a st f.a [= a ex O st card O c= card the carrier of L & (f, O)-.a is_a_fixpoint_of f; theorem :: KNASTER:32 for a, b st a is_a_fixpoint_of f & b is_a_fixpoint_of f ex O st card O c= card the carrier of L & (f, O)+.(a"\/"b) is_a_fixpoint_of f & a [= (f , O)+.(a"\/"b) & b [= (f, O)+.(a"\/"b); theorem :: KNASTER:33 for a, b st a is_a_fixpoint_of f & b is_a_fixpoint_of f ex O st card O c= card the carrier of L & (f, O)-.(a"/\"b) is_a_fixpoint_of f & (f, O) -.(a"/\"b) [= a & (f, O)-.(a"/\"b) [= b; theorem :: KNASTER:34 a [= b & b is_a_fixpoint_of f implies for O2 holds (f, O2)+.a [= b; theorem :: KNASTER:35 b [= a & b is_a_fixpoint_of f implies for O2 holds b [= (f, O2) -.a; definition let L be complete Lattice, f be UnOp of L such that f is monotone; func FixPoints f -> strict Lattice means :: KNASTER:def 9 ex P being non empty with_suprema with_infima Subset of L st P = {x where x is Element of L: x is_a_fixpoint_of f} & it = latt P; end; theorem :: KNASTER:36 the carrier of FixPoints f = {x where x is Element of L: x is_a_fixpoint_of f}; theorem :: KNASTER:37 the carrier of FixPoints f c= the carrier of L; theorem :: KNASTER:38 a in the carrier of FixPoints f iff a is_a_fixpoint_of f; theorem :: KNASTER:39 for x, y being Element of FixPoints f, a, b st x = a & y = b holds (x [= y iff a [= b); theorem :: KNASTER:40 FixPoints f is complete; definition let L, f; func lfp f -> Element of L equals :: KNASTER:def 10 (f, nextcard the carrier of L)+.Bottom L; func gfp f -> Element of L equals :: KNASTER:def 11 (f, nextcard the carrier of L)-.Top L; end; theorem :: KNASTER:41 lfp f is_a_fixpoint_of f & ex O st card O c= card the carrier of L & (f, O)+.Bottom L = lfp f; theorem :: KNASTER:42 gfp f is_a_fixpoint_of f & ex O st card O c= card the carrier of L & (f, O)-.Top L = gfp f; theorem :: KNASTER:43 a is_a_fixpoint_of f implies lfp f [= a & a [= gfp f; theorem :: KNASTER:44 f.a [= a implies lfp f [= a; theorem :: KNASTER:45 a [= f.a implies a [= gfp f; begin :: Boolean Lattices reserve f for monotone UnOp of BooleLatt A; theorem :: KNASTER:46 for f being UnOp of BooleLatt A holds f is monotone iff f is c=-monotone; theorem :: KNASTER:47 ex g being c=-monotone Function of bool A, bool A st lfp (A, g) = lfp f; theorem :: KNASTER:48 ex g being c=-monotone Function of bool A, bool A st gfp (A, g) = gfp f;