Journal of Formalized Mathematics
Volume 4, 1992
University of Bialystok
Copyright (c) 1992 Association of Mizar Users

### Complete Lattices

by
Grzegorz Bancerek

MML identifier: LATTICE3
[ Mizar article, MML identifier index ]

```environ

vocabulary LATTICES, FUNCT_1, BOOLE, BINOP_1, SUBSET_1, FILTER_1, ORDERS_1,
RELAT_1, RELAT_2, BHSP_3, FILTER_0, TARSKI, ZF_LANG, LATTICE3, PARTFUN1;
notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, DOMAIN_1, STRUCT_0, FUNCT_1,
FUNCT_2, BINOP_1, LATTICES, FILTER_0, LATTICE2, FILTER_1, RELAT_1,
RELAT_2, RELSET_1, PARTFUN1, ORDERS_1;
constructors DOMAIN_1, BINOP_1, LATTICE2, FILTER_1, RELAT_2, ORDERS_1,
ORDERS_2, MEMBERED, PARTFUN1, XBOOLE_0;
clusters LATTICE2, ORDERS_1, RELSET_1, STRUCT_0, RLSUB_2, SUBSET_1, LATTICES,
MEMBERED, ZFMISC_1, XBOOLE_0;
requirements SUBSET, BOOLE;

begin

definition let X be set;
func BooleLatt X -> strict LattStr means
:: LATTICE3:def 1
the carrier of it = bool X &
for Y,Z being Element of bool X holds
(the L_join of it).(Y,Z) = Y \/ Z & (the L_meet of it).(Y,Z) = Y /\ Z;
end;

reserve X for set,
x,y,z for Element of BooleLatt X, s for set;

definition let X be set;
cluster BooleLatt X -> non empty;
end;

theorem :: LATTICE3:1
x "\/" y = x \/ y & x "/\" y = x /\ y;

theorem :: LATTICE3:2
x [= y iff x c= y;

definition let X;
cluster BooleLatt X -> Lattice-like;
end;

reserve y for Element of BooleLatt X;

theorem :: LATTICE3:3
BooleLatt X is lower-bounded & Bottom BooleLatt X = {};

theorem :: LATTICE3:4
BooleLatt X is upper-bounded & Top BooleLatt X = X;

definition let X;
cluster BooleLatt X -> Boolean Lattice-like;
end;

theorem :: LATTICE3:5
for x being Element of BooleLatt X holds x` = X \ x;

begin :: Correspondence Between Lattices and Posets

definition let L be Lattice;
redefine func LattRel L -> Order of the carrier of L;
end;

definition let L be Lattice;
func LattPOSet L -> strict Poset equals
:: LATTICE3:def 2
RelStr(#the carrier of L, LattRel L#);
end;

definition let L be Lattice;
cluster LattPOSet L -> non empty;
end;

theorem :: LATTICE3:6
for L1,L2 being Lattice st LattPOSet L1 = LattPOSet L2 holds
the LattStr of L1 = the LattStr of L2;

definition let L be Lattice, p be Element of L;
func p% -> Element of LattPOSet L equals
:: LATTICE3:def 3
p;
end;

definition let L be Lattice, p be Element of LattPOSet L;
func %p -> Element of L equals
:: LATTICE3:def 4
p;
end;

reserve L for Lattice, p,q for Element of L;

theorem :: LATTICE3:7
p [= q iff p% <= q%;

definition let X be set, O be Order of X;
redefine func O~ -> Order of X;
end;

definition let A be RelStr;
func A~ -> strict RelStr equals
:: LATTICE3:def 5

RelStr(#the carrier of A, (the InternalRel of A)~#);
end;

definition let A be Poset;
cluster A~ -> reflexive transitive antisymmetric;
end;

definition let A be non empty RelStr;
cluster A~ -> non empty;
end;

reserve A for RelStr, a,b,c for Element of A;

theorem :: LATTICE3:8
A~~ = the RelStr of A;

definition let A be RelStr, a be Element of A;
func a~ -> Element of A~ equals
:: LATTICE3:def 6
a;
end;

definition let A be RelStr, a be Element of A~;
func ~a -> Element of A equals
:: LATTICE3:def 7
a;
end;

theorem :: LATTICE3:9
a <= b iff b~ <= a~;

definition let A be RelStr, X be set, a be Element of A;
pred a is_<=_than X means
:: LATTICE3:def 8
for b being Element of A st b in X
holds a <= b;
synonym X is_>=_than a;
pred X is_<=_than a means
:: LATTICE3:def 9

for b being Element of A st b in X holds b <= a;
synonym a is_>=_than X;
end;

definition let IT be RelStr;
attr IT is with_suprema means
:: LATTICE3:def 10

for x,y being Element of IT
ex z being Element of IT st x <= z & y <= z &
for z' being Element of IT st x <= z' & y <= z' holds z <= z';
attr IT is with_infima means
:: LATTICE3:def 11

for x,y being Element of IT
ex z being Element of IT st z <= x & z <= y &
for z' being Element of IT st z' <= x & z' <= y holds z' <= z;
end;

definition
cluster with_suprema -> non empty RelStr;
cluster with_infima -> non empty RelStr;
end;

theorem :: LATTICE3:10
A is with_suprema iff A~ is with_infima;

theorem :: LATTICE3:11
for L being Lattice holds LattPOSet L is with_suprema with_infima;

definition let IT be RelStr;
attr IT is complete means
:: LATTICE3:def 12

for X being set ex a being Element of IT st X is_<=_than a &
for b being Element of IT st X is_<=_than b holds a <= b;
end;

definition
cluster strict complete non empty Poset;
end;

reserve A for non empty RelStr, a,b,c,c' for Element of A;

theorem :: LATTICE3:12
A is complete implies A is with_suprema with_infima;

definition
cluster complete with_suprema with_infima strict non empty Poset;
end;

definition let A be RelStr such that
A is antisymmetric;
let a,b be Element of A such that
ex x being Element of A st a <= x & b <= x &
for c being Element of A st a <= c & b <= c holds x <= c;
func a"\/"b -> Element of A means
:: LATTICE3:def 13
a <= it & b <= it &
for c being Element of A st a <= c & b <= c holds it <= c;
end;

definition let A be RelStr such that
A is antisymmetric;
let a,b be Element of A such that
ex x being Element of A st a >= x & b >= x &
for c being Element of A st a >= c & b >= c holds x >= c;
func a"/\"b -> Element of A means
:: LATTICE3:def 14
it <= a & it <= b &
for c being Element of A st c <= a & c <= b holds c <= it;
end;

reserve V for with_suprema antisymmetric RelStr,
u1,u2,u3,u4 for Element of V;
reserve N for with_infima antisymmetric RelStr,
n1,n2,n3,n4 for Element of N;
reserve K for with_suprema with_infima reflexive antisymmetric RelStr,
k1,k2,k3 for Element of K;

theorem :: LATTICE3:13
u1 "\/" u2 = u2 "\/" u1;

theorem :: LATTICE3:14
V is transitive implies (u1 "\/" u2) "\/" u3 = u1 "\/" (u2 "\/" u3);

theorem :: LATTICE3:15
n1 "/\" n2 = n2 "/\" n1;

theorem :: LATTICE3:16
N is transitive implies (n1 "/\" n2) "/\" n3 = n1 "/\" (n2 "/\" n3);

definition let L be with_infima antisymmetric RelStr,
x, y be Element of L;
redefine func x "/\" y;
commutativity;
end;

definition let L be with_suprema antisymmetric RelStr,
x, y be Element of L;
redefine func x "\/" y;
commutativity;
end;

theorem :: LATTICE3:17
(k1 "/\" k2) "\/" k2 = k2;

theorem :: LATTICE3:18
k1 "/\" (k1 "\/" k2) = k1;

theorem :: LATTICE3:19
for A being with_suprema with_infima Poset
ex L being strict Lattice st the RelStr of A = LattPOSet L;

definition let A be RelStr such that
A is with_suprema with_infima Poset;
func latt A -> strict Lattice means
:: LATTICE3:def 15

the RelStr of A = LattPOSet it;
end;

theorem :: LATTICE3:20
(LattRel L)~ = LattRel (L.:) & (LattPOSet L)~ = LattPOSet (L.:);

begin :: Complete Lattice

definition
let L be non empty LattStr, p be Element of L, X be set;
pred p is_less_than X means
:: LATTICE3:def 16
for q being Element of L st q in X holds p [= q;
synonym X is_great_than p;

pred X is_less_than p means
:: LATTICE3:def 17
for q being Element of L st q in X holds q [= p;
synonym p is_great_than X;
end;

theorem :: LATTICE3:21
for L being Lattice, p,q,r being Element of L holds
p is_less_than {q,r} iff p [= q"/\"r;

theorem :: LATTICE3:22
for L being Lattice, p,q,r being Element of L holds
p is_great_than {q,r} iff q"\/"r [= p;

definition let IT be non empty LattStr;
attr IT is complete means
:: LATTICE3:def 18
for X being set ex p being Element of IT st X is_less_than p &
for r being Element of IT st X is_less_than r holds p [= r;

attr IT is \/-distributive means
:: LATTICE3:def 19
for X for a,b,c being Element of IT st X is_less_than a &
(for d being Element of IT st X is_less_than d holds a [= d)
& {b"/\"a' where a' is Element of IT: a' in
X} is_less_than c &
for d being Element of IT st
{b"/\"a' where a' is Element of IT: a' in X} is_less_than d
holds c [= d
holds b"/\"a [= c;

attr IT is /\-distributive means
:: LATTICE3:def 20
for X for a,b,c being Element of IT st X is_great_than a &
(for d being Element of IT st X is_great_than d holds d [= a)
& {b"\/"a' where a' is Element of IT: a' in
X} is_great_than c &
for d being Element of IT st
{b"\/"a' where a' is Element of IT: a' in X} is_great_than d
holds d [= c
holds c [= b"\/"a;
end;

theorem :: LATTICE3:23
for B being B_Lattice, a being Element of B holds
X is_less_than a iff {b` where b is Element of B: b in X}
is_great_than a`;

theorem :: LATTICE3:24
for B being B_Lattice, a being Element of B holds
X is_great_than a iff {b` where b is Element of B: b in X}
is_less_than a`;

theorem :: LATTICE3:25
BooleLatt X is complete;

theorem :: LATTICE3:26
BooleLatt X is \/-distributive;

theorem :: LATTICE3:27
BooleLatt X is /\-distributive;

definition
cluster complete \/-distributive /\-distributive strict Lattice;
end;

reserve p',q' for Element of LattPOSet L;

theorem :: LATTICE3:28
p is_less_than X iff p% is_<=_than X;

theorem :: LATTICE3:29
p' is_<=_than X iff %p' is_less_than X;

theorem :: LATTICE3:30
X is_less_than p iff X is_<=_than p%;

theorem :: LATTICE3:31
X is_<=_than p' iff X is_less_than %p';

definition let A be complete (non empty Poset);
cluster latt A -> complete;
end;

definition let L be non empty LattStr such that
L is complete Lattice;
let X be set;
func "\/"(X,L) -> Element of L means
:: LATTICE3:def 21

X is_less_than it &
for r being Element of L st X is_less_than r holds it [= r;
end;

definition let L be non empty LattStr, X be set;
func "/\"(X,L) -> Element of L equals
:: LATTICE3:def 22
"\/"({p where p is Element of L: p is_less_than X},L);
end;

definition let L be non empty LattStr, X be Subset of L;
redefine func "\/"(X,L); synonym "\/" X; func "/\"(X,L); synonym "/\" X;
end;

reserve C for complete Lattice,
a,a',b,b',c,d for Element of C, X,Y for set;

theorem :: LATTICE3:32
"\/"({a"/\"b: b in X}, C) [= a"/\""\/"(X,C);

theorem :: LATTICE3:33
C is \/-distributive iff for X, a holds a"/\""\/"(X,C) [= "\/"({a"/\"
b: b in X}, C);

theorem :: LATTICE3:34
a = "/\"(X,C) iff a is_less_than X & for b st b is_less_than X holds b [= a;

theorem :: LATTICE3:35
a"\/""/\"(X,C) [= "/\"({a"\/"b: b in X}, C);

theorem :: LATTICE3:36
C is /\-distributive iff for X, a holds "/\"({a"\/"b: b in X}, C) [= a"\/""/\"
(X,C);

theorem :: LATTICE3:37
"\/"(X,C) = "/\"({a: a is_great_than X}, C);

theorem :: LATTICE3:38
a in X implies a [= "\/"(X,C) & "/\"(X,C) [= a;

canceled;

theorem :: LATTICE3:40
a is_less_than X implies a [= "/\"(X,C);

theorem :: LATTICE3:41
a in X & X is_less_than a implies "\/"(X,C) = a;

theorem :: LATTICE3:42
a in X & a is_less_than X implies "/\"(X,C) = a;

theorem :: LATTICE3:43
"\/"{a} = a & "/\"{a} = a;

theorem :: LATTICE3:44
a"\/"b = "\/"{a,b} & a"/\"b = "/\"{a,b};

theorem :: LATTICE3:45
a = "\/"({b: b [= a}, C) & a = "/\"({c: a [= c}, C);

theorem :: LATTICE3:46
X c= Y implies "\/"(X,C) [= "\/"(Y,C) & "/\"(Y,C) [= "/\"(X,C);

theorem :: LATTICE3:47
"\/"(X,C) = "\/"({a: ex b st a [= b & b in X}, C) &
"/\"(X,C) = "/\"({b: ex a st a [= b & a in X}, C);

theorem :: LATTICE3:48
(for a st a in X ex b st a [= b & b in Y) implies "\/"(X,C) [= "\/"(Y,C);

theorem :: LATTICE3:49
X c= bool the carrier of C implies
"\/"(union X, C) = "\/"({"\/"
Y where Y is Subset of C: Y in X}, C);

theorem :: LATTICE3:50
C is 0_Lattice & Bottom C = "\/"({},C);

theorem :: LATTICE3:51
C is 1_Lattice & Top C = "\/"(the carrier of C, C);

theorem :: LATTICE3:52
C is I_Lattice implies a => b = "\/"({c: a"/\"c [= b}, C);

theorem :: LATTICE3:53
C is I_Lattice implies C is \/-distributive;

theorem :: LATTICE3:54
for D being complete \/-distributive Lattice,
a being Element of D holds
a "/\" "\/"(X,D) = "\/"({a"/\"
b1 where b1 is Element of D: b1 in
X}, D) &
"\/"(X,D) "/\" a = "\/"({b2"/\"
a where b2 is Element of D: b2 in
X}, D);

theorem :: LATTICE3:55
for D being complete /\-distributive Lattice,
a being Element of D holds
a "\/" "/\"(X,D)
= "/\"({a"\/"b1 where b1 is Element of D: b1 in X}, D) &
"/\"(X,D) "\/" a = "/\"({b2"\/"
a where b2 is Element of D: b2 in
X}, D);

scheme SingleFraenkel{A()->set, B()->non empty set, P[set]}:
{A() where a is Element of B(): P[a]} = {A()}
provided
ex a being Element of B() st P[a];

scheme FuncFraenkel{B()->non empty set, C()->non empty set,
A(set)->Element of C(),f()->Function, P[set]}:
f().:{A(x) where x is Element of B(): P[x]} =
{f().A(x) where x is Element of B(): P[x]}
provided
C() c= dom f();

theorem :: LATTICE3:56
for D being non empty set, f being Function of bool D, D st
(for a being Element of D holds f.{a} = a) &
for X being Subset of bool D holds f.(f.:X) = f.(union X)
ex L being complete strict Lattice st the carrier of L = D &
for X being Subset of L holds "\/" X = f.X;

```