:: Complete Lattices
:: by Grzegorz Bancerek
::
:: Received May 13, 1992
:: Copyright (c) 1992-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 LATTICES, STRUCT_0, ZFMISC_1, SUBSET_1, FUNCT_1, XBOOLE_0,
BINOP_1, EQREL_1, PBOOLE, TARSKI, FILTER_1, ORDERS_1, RELAT_1, RELAT_2,
ORDERS_2, XXREAL_0, REWRITE1, FILTER_0, XBOOLEAN, SETFAM_1, LATTICE3;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, SETFAM_1, DOMAIN_1, STRUCT_0,
FUNCT_1, FUNCT_2, BINOP_1, LATTICES, FILTER_0, LATTICE2, FILTER_1,
RELAT_1, RELAT_2, RELSET_1, ORDERS_1, ORDERS_2;
constructors BINOP_1, DOMAIN_1, ORDERS_2, LATTICE2, FILTER_1, RELSET_1,
FILTER_0;
registrations XBOOLE_0, SUBSET_1, RELSET_1, STRUCT_0, LATTICES, ORDERS_2,
LATTICE2, RELAT_2;
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 Subset of 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;
registration
let X be set;
cluster BooleLatt X -> non empty;
end;
registration
let X;
let x,y;
let x9,y9 be set;
identify x "\/" y with x9 \/ y9 when x = x9, y = y9;
identify x "/\" y with x9 /\ y9 when x = x9, y = y9;
end;
theorem :: LATTICE3:1
x "\/" y = x \/ y & x "/\" y = x /\ y;
theorem :: LATTICE3:2
x [= y iff x c= y;
registration
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;
registration
let X;
cluster BooleLatt X -> Boolean;
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;
registration
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;
registration
let A be Poset;
cluster A~ -> reflexive transitive antisymmetric;
end;
registration
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;
pred X is_<=_than a means
:: LATTICE3:def 9
for b being Element of A st b in X holds b <= a;
end;
notation
let A be RelStr, X be set, a be Element of A;
synonym X is_>=_than a for a is_<=_than X; synonym a is_>=_than X for
X is_<=_than a;
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 z9 being Element of IT st x <= z9 & y <= z9 holds z <= z9;
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 z9 being Element of IT st z9 <= x & z9 <= y holds z9 <= z;
end;
registration
cluster with_suprema -> non empty for RelStr;
cluster with_infima -> non empty for 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;
registration
cluster strict complete non empty for Poset;
end;
reserve A for non empty RelStr,
a,b,c,c9 for Element of A;
theorem :: LATTICE3:12
A is complete implies A is with_suprema with_infima;
registration
cluster complete with_suprema with_infima strict non empty for 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;
pred X is_less_than p means
:: LATTICE3:def 17
for q being Element of L st q in X holds q [= p;
end;
notation
let L be non empty LattStr, p be Element of L, X be set;
synonym X is_greater_than p for p is_less_than X;
synonym p is_greater_than X for X is_less_than p;
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_greater_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"/\"a9 where a9 is Element of IT: a9 in X} is_less_than c &
for d being Element of IT st
{b"/\"a9 where a9 is Element of IT: a9 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_greater_than a &
(for d being Element of IT st X is_greater_than d holds d [= a)
& {b"\/"a9 where a9 is Element of IT: a9 in X} is_greater_than c &
for d being Element of IT st
{b"\/"a9 where a9 is Element of IT: a9 in X} is_greater_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_greater_than a`;
theorem :: LATTICE3:24
for B being B_Lattice, a being Element of B holds
X is_greater_than a iff {b` where b is Element of B: b in X} is_less_than a`;
theorem :: LATTICE3:25
BooleLatt X is complete;
registration
let X be set;
cluster BooleLatt X -> complete;
end;
theorem :: LATTICE3:26
BooleLatt X is \/-distributive;
theorem :: LATTICE3:27
BooleLatt X is /\-distributive;
registration
cluster complete \/-distributive /\-distributive strict for Lattice;
end;
reserve p9,q9 for Element of LattPOSet L;
theorem :: LATTICE3:28
p is_less_than X iff p% is_<=_than X;
theorem :: LATTICE3:29
p9 is_<=_than X iff %p9 is_less_than X;
theorem :: LATTICE3:30
X is_less_than p iff X is_<=_than p%;
theorem :: LATTICE3:31
X is_<=_than p9 iff X is_less_than %p9;
registration
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;
notation
let L be non empty LattStr, X be Subset of L;
synonym "\/" X for "\/"(X,L); synonym "/\" X for "/\"(X,L);
end;
reserve C for complete Lattice,
a,a9,b,b9,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_greater_than X}, C);
theorem :: LATTICE3:38
a in X implies a [= "\/"(X,C) & "/\"(X,C) [= a;
theorem :: LATTICE3:39
a is_less_than X implies a [= "/\"(X,C);
theorem :: LATTICE3:40
a in X & X is_less_than a implies "\/"(X,C) = a;
theorem :: LATTICE3:41
a in X & a is_less_than X implies "/\"(X,C) = a;
theorem :: LATTICE3:42
"\/"{a} = a & "/\"{a} = a;
theorem :: LATTICE3:43
a"\/"b = "\/"{a,b} & a"/\"b = "/\"{a,b};
theorem :: LATTICE3:44
a = "\/"({b: b [= a}, C) & a = "/\"({c: a [= c}, C);
theorem :: LATTICE3:45
X c= Y implies "\/"(X,C) [= "\/"(Y,C) & "/\"(Y,C) [= "/\"(X,C);
theorem :: LATTICE3:46
"\/"(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:47
(for a st a in X ex b st a [= b & b in Y) implies "\/"(X,C) [= "\/"(Y, C );
theorem :: LATTICE3:48
X c= bool the carrier of C implies "\/"(union X, C) = "\/"({"\/"
Y where Y is Subset of C: Y in X}, C);
theorem :: LATTICE3:49
C is 0_Lattice & Bottom C = "\/"({},C);
theorem :: LATTICE3:50
C is 1_Lattice & Top C = "\/"(the carrier of C, C);
theorem :: LATTICE3:51
C is I_Lattice implies a => b = "\/"({c: a"/\"c [= b}, C);
theorem :: LATTICE3:52
C is I_Lattice implies C is \/-distributive;
theorem :: LATTICE3:53
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: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);
scheme :: LATTICE3:sch 1
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 :: LATTICE3:sch 2
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:55
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-Family of 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;