:: LATTICES semantic presentation

definition
attr a1 is strict;
struct /\-SemiLattStr -> 1-sorted ;
aggr /\-SemiLattStr(# carrier, L_meet #) -> /\-SemiLattStr ;
sel L_meet c1 -> BinOp of the carrier of a1;
end;

definition
attr a1 is strict;
struct \/-SemiLattStr -> 1-sorted ;
aggr \/-SemiLattStr(# carrier, L_join #) -> \/-SemiLattStr ;
sel L_join c1 -> BinOp of the carrier of a1;
end;

definition
attr a1 is strict;
struct LattStr -> /\-SemiLattStr , \/-SemiLattStr ;
aggr LattStr(# carrier, L_join, L_meet #) -> LattStr ;
end;

registration
let c1 be non empty set ;
let c2 be BinOp of c1;
cluster \/-SemiLattStr(# a1,a2 #) -> non empty ;
coherence
not \/-SemiLattStr(# c1,c2 #) is empty
by STRUCT_0:def 1;
cluster /\-SemiLattStr(# a1,a2 #) -> non empty ;
coherence
not /\-SemiLattStr(# c1,c2 #) is empty
by STRUCT_0:def 1;
end;

registration
let c1 be non empty set ;
let c2, c3 be BinOp of c1;
cluster LattStr(# a1,a2,a3 #) -> non empty ;
coherence
not LattStr(# c1,c2,c3 #) is empty
by STRUCT_0:def 1;
end;

registration
cluster non empty strict \/-SemiLattStr ;
existence
ex b1 being \/-SemiLattStr st
( b1 is strict & not b1 is empty )
proof end;
cluster non empty strict /\-SemiLattStr ;
existence
ex b1 being /\-SemiLattStr st
( b1 is strict & not b1 is empty )
proof end;
cluster non empty strict LattStr ;
existence
ex b1 being LattStr st
( b1 is strict & not b1 is empty )
proof end;
end;

definition
let c1 be non empty \/-SemiLattStr ;
let c2, c3 be Element of c1;
func c2 "\/" c3 -> Element of a1 equals :: LATTICES:def 1
the L_join of a1 . a2,a3;
coherence
the L_join of c1 . c2,c3 is Element of c1
;
end;

:: deftheorem Def1 defines "\/" LATTICES:def 1 :
for b1 being non empty \/-SemiLattStr
for b2, b3 being Element of b1 holds b2 "\/" b3 = the L_join of b1 . b2,b3;

definition
let c1 be non empty /\-SemiLattStr ;
let c2, c3 be Element of c1;
func c2 "/\" c3 -> Element of a1 equals :: LATTICES:def 2
the L_meet of a1 . a2,a3;
coherence
the L_meet of c1 . c2,c3 is Element of c1
;
end;

:: deftheorem Def2 defines "/\" LATTICES:def 2 :
for b1 being non empty /\-SemiLattStr
for b2, b3 being Element of b1 holds b2 "/\" b3 = the L_meet of b1 . b2,b3;

definition
let c1 be non empty \/-SemiLattStr ;
let c2, c3 be Element of c1;
pred c2 [= c3 means :Def3: :: LATTICES:def 3
a2 "\/" a3 = a3;
end;

:: deftheorem Def3 defines [= LATTICES:def 3 :
for b1 being non empty \/-SemiLattStr
for b2, b3 being Element of b1 holds
( b2 [= b3 iff b2 "\/" b3 = b3 );

Lemma2: for b1, b2 being BinOp of bool {}
for b3, b4 being Element of LattStr(# (bool {} ),b1,b2 #) holds b3 = b4
proof end;

Lemma3: for b1 being BinOp of bool {}
for b2, b3 being Element of \/-SemiLattStr(# (bool {} ),b1 #) holds b2 = b3
proof end;

Lemma4: for b1 being BinOp of bool {}
for b2, b3 being Element of /\-SemiLattStr(# (bool {} ),b1 #) holds b2 = b3
proof end;

definition
let c1 be non empty \/-SemiLattStr ;
attr a1 is join-commutative means :Def4: :: LATTICES:def 4
for b1, b2 being Element of a1 holds b1 "\/" b2 = b2 "\/" b1;
attr a1 is join-associative means :Def5: :: LATTICES:def 5
for b1, b2, b3 being Element of a1 holds b1 "\/" (b2 "\/" b3) = (b1 "\/" b2) "\/" b3;
end;

:: deftheorem Def4 defines join-commutative LATTICES:def 4 :
for b1 being non empty \/-SemiLattStr holds
( b1 is join-commutative iff for b2, b3 being Element of b1 holds b2 "\/" b3 = b3 "\/" b2 );

:: deftheorem Def5 defines join-associative LATTICES:def 5 :
for b1 being non empty \/-SemiLattStr holds
( b1 is join-associative iff for b2, b3, b4 being Element of b1 holds b2 "\/" (b3 "\/" b4) = (b2 "\/" b3) "\/" b4 );

definition
let c1 be non empty /\-SemiLattStr ;
attr a1 is meet-commutative means :Def6: :: LATTICES:def 6
for b1, b2 being Element of a1 holds b1 "/\" b2 = b2 "/\" b1;
attr a1 is meet-associative means :Def7: :: LATTICES:def 7
for b1, b2, b3 being Element of a1 holds b1 "/\" (b2 "/\" b3) = (b1 "/\" b2) "/\" b3;
end;

:: deftheorem Def6 defines meet-commutative LATTICES:def 6 :
for b1 being non empty /\-SemiLattStr holds
( b1 is meet-commutative iff for b2, b3 being Element of b1 holds b2 "/\" b3 = b3 "/\" b2 );

:: deftheorem Def7 defines meet-associative LATTICES:def 7 :
for b1 being non empty /\-SemiLattStr holds
( b1 is meet-associative iff for b2, b3, b4 being Element of b1 holds b2 "/\" (b3 "/\" b4) = (b2 "/\" b3) "/\" b4 );

definition
let c1 be non empty LattStr ;
attr a1 is meet-absorbing means :Def8: :: LATTICES:def 8
for b1, b2 being Element of a1 holds (b1 "/\" b2) "\/" b2 = b2;
attr a1 is join-absorbing means :Def9: :: LATTICES:def 9
for b1, b2 being Element of a1 holds b1 "/\" (b1 "\/" b2) = b1;
end;

:: deftheorem Def8 defines meet-absorbing LATTICES:def 8 :
for b1 being non empty LattStr holds
( b1 is meet-absorbing iff for b2, b3 being Element of b1 holds (b2 "/\" b3) "\/" b3 = b3 );

:: deftheorem Def9 defines join-absorbing LATTICES:def 9 :
for b1 being non empty LattStr holds
( b1 is join-absorbing iff for b2, b3 being Element of b1 holds b2 "/\" (b2 "\/" b3) = b2 );

definition
let c1 be non empty LattStr ;
attr a1 is Lattice-like means :Def10: :: LATTICES:def 10
( a1 is join-commutative & a1 is join-associative & a1 is meet-absorbing & a1 is meet-commutative & a1 is meet-associative & a1 is join-absorbing );
end;

:: deftheorem Def10 defines Lattice-like LATTICES:def 10 :
for b1 being non empty LattStr holds
( b1 is Lattice-like iff ( b1 is join-commutative & b1 is join-associative & b1 is meet-absorbing & b1 is meet-commutative & b1 is meet-associative & b1 is join-absorbing ) );

registration
cluster non empty Lattice-like -> non empty join-commutative join-associative meet-commutative meet-associative meet-absorbing join-absorbing LattStr ;
coherence
for b1 being non empty LattStr st b1 is Lattice-like holds
( b1 is join-commutative & b1 is join-associative & b1 is meet-absorbing & b1 is meet-commutative & b1 is meet-associative & b1 is join-absorbing )
by Def10;
cluster non empty join-commutative join-associative meet-commutative meet-associative meet-absorbing join-absorbing -> non empty Lattice-like LattStr ;
coherence
for b1 being non empty LattStr st b1 is join-commutative & b1 is join-associative & b1 is meet-absorbing & b1 is meet-commutative & b1 is meet-associative & b1 is join-absorbing holds
b1 is Lattice-like
by Def10;
end;

registration
cluster non empty strict join-commutative join-associative \/-SemiLattStr ;
existence
ex b1 being non empty \/-SemiLattStr st
( b1 is strict & b1 is join-commutative & b1 is join-associative )
proof end;
cluster non empty strict meet-commutative meet-associative /\-SemiLattStr ;
existence
ex b1 being non empty /\-SemiLattStr st
( b1 is strict & b1 is meet-commutative & b1 is meet-associative )
proof end;
cluster non empty strict join-commutative join-associative meet-commutative meet-associative meet-absorbing join-absorbing Lattice-like LattStr ;
existence
ex b1 being non empty LattStr st
( b1 is strict & b1 is Lattice-like )
proof end;
end;

definition
mode Lattice is non empty Lattice-like LattStr ;
end;

definition
let c1 be non empty join-commutative \/-SemiLattStr ;
let c2, c3 be Element of c1;
redefine func "\/" as c2 "\/" c3 -> Element of a1;
commutativity
for b1, b2 being Element of c1 holds b1 "\/" b2 = b2 "\/" b1
by Def4;
end;

definition
let c1 be non empty meet-commutative /\-SemiLattStr ;
let c2, c3 be Element of c1;
redefine func "/\" as c2 "/\" c3 -> Element of a1;
commutativity
for b1, b2 being Element of c1 holds b1 "/\" b2 = b2 "/\" b1
by Def6;
end;

definition
let c1 be non empty LattStr ;
attr a1 is distributive means :Def11: :: LATTICES:def 11
for b1, b2, b3 being Element of a1 holds b1 "/\" (b2 "\/" b3) = (b1 "/\" b2) "\/" (b1 "/\" b3);
end;

:: deftheorem Def11 defines distributive LATTICES:def 11 :
for b1 being non empty LattStr holds
( b1 is distributive iff for b2, b3, b4 being Element of b1 holds b2 "/\" (b3 "\/" b4) = (b2 "/\" b3) "\/" (b2 "/\" b4) );

definition
let c1 be non empty LattStr ;
attr a1 is modular means :Def12: :: LATTICES:def 12
for b1, b2, b3 being Element of a1 st b1 [= b3 holds
b1 "\/" (b2 "/\" b3) = (b1 "\/" b2) "/\" b3;
end;

:: deftheorem Def12 defines modular LATTICES:def 12 :
for b1 being non empty LattStr holds
( b1 is modular iff for b2, b3, b4 being Element of b1 st b2 [= b4 holds
b2 "\/" (b3 "/\" b4) = (b2 "\/" b3) "/\" b4 );

definition
let c1 be non empty /\-SemiLattStr ;
attr a1 is lower-bounded means :Def13: :: LATTICES:def 13
ex b1 being Element of a1 st
for b2 being Element of a1 holds
( b1 "/\" b2 = b1 & b2 "/\" b1 = b1 );
end;

:: deftheorem Def13 defines lower-bounded LATTICES:def 13 :
for b1 being non empty /\-SemiLattStr holds
( b1 is lower-bounded iff ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b2 "/\" b3 = b2 & b3 "/\" b2 = b2 ) );

definition
let c1 be non empty \/-SemiLattStr ;
attr a1 is upper-bounded means :Def14: :: LATTICES:def 14
ex b1 being Element of a1 st
for b2 being Element of a1 holds
( b1 "\/" b2 = b1 & b2 "\/" b1 = b1 );
end;

:: deftheorem Def14 defines upper-bounded LATTICES:def 14 :
for b1 being non empty \/-SemiLattStr holds
( b1 is upper-bounded iff ex b2 being Element of b1 st
for b3 being Element of b1 holds
( b2 "\/" b3 = b2 & b3 "\/" b2 = b2 ) );

Lemma16: for b1, b2 being BinOp of bool {} holds LattStr(# (bool {} ),b1,b2 #) is Lattice
proof end;

registration
cluster strict distributive modular lower-bounded upper-bounded LattStr ;
existence
ex b1 being Lattice st
( b1 is strict & b1 is distributive & b1 is lower-bounded & b1 is upper-bounded & b1 is modular )
proof end;
end;

definition
mode D_Lattice is distributive Lattice;
mode M_Lattice is modular Lattice;
mode 0_Lattice is lower-bounded Lattice;
mode 1_Lattice is upper-bounded Lattice;
end;

Lemma17: for b1, b2 being BinOp of bool {} holds LattStr(# (bool {} ),b1,b2 #) is 0_Lattice
proof end;

Lemma18: for b1, b2 being BinOp of bool {} holds LattStr(# (bool {} ),b1,b2 #) is 1_Lattice
proof end;

definition
let c1 be non empty LattStr ;
attr a1 is bounded means :Def15: :: LATTICES:def 15
( a1 is lower-bounded & a1 is upper-bounded );
end;

:: deftheorem Def15 defines bounded LATTICES:def 15 :
for b1 being non empty LattStr holds
( b1 is bounded iff ( b1 is lower-bounded & b1 is upper-bounded ) );

registration
cluster non empty lower-bounded upper-bounded -> non empty bounded LattStr ;
coherence
for b1 being non empty LattStr st b1 is lower-bounded & b1 is upper-bounded holds
b1 is bounded
by Def15;
cluster non empty bounded -> non empty lower-bounded upper-bounded LattStr ;
coherence
for b1 being non empty LattStr st b1 is bounded holds
( b1 is lower-bounded & b1 is upper-bounded )
by Def15;
end;

registration
cluster strict lower-bounded upper-bounded bounded LattStr ;
existence
ex b1 being Lattice st
( b1 is bounded & b1 is strict )
proof end;
end;

definition
mode 01_Lattice is bounded Lattice;
end;

definition
let c1 be non empty /\-SemiLattStr ;
assume E20: c1 is lower-bounded ;
func Bottom c1 -> Element of a1 means :Def16: :: LATTICES:def 16
for b1 being Element of a1 holds
( a2 "/\" b1 = a2 & b1 "/\" a2 = a2 );
existence
ex b1 being Element of c1 st
for b2 being Element of c1 holds
( b1 "/\" b2 = b1 & b2 "/\" b1 = b1 )
by E20, Def13;
uniqueness
for b1, b2 being Element of c1 st ( for b3 being Element of c1 holds
( b1 "/\" b3 = b1 & b3 "/\" b1 = b1 ) ) & ( for b3 being Element of c1 holds
( b2 "/\" b3 = b2 & b3 "/\" b2 = b2 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def16 defines Bottom LATTICES:def 16 :
for b1 being non empty /\-SemiLattStr st b1 is lower-bounded holds
for b2 being Element of b1 holds
( b2 = Bottom b1 iff for b3 being Element of b1 holds
( b2 "/\" b3 = b2 & b3 "/\" b2 = b2 ) );

definition
let c1 be non empty \/-SemiLattStr ;
assume E21: c1 is upper-bounded ;
func Top c1 -> Element of a1 means :Def17: :: LATTICES:def 17
for b1 being Element of a1 holds
( a2 "\/" b1 = a2 & b1 "\/" a2 = a2 );
existence
ex b1 being Element of c1 st
for b2 being Element of c1 holds
( b1 "\/" b2 = b1 & b2 "\/" b1 = b1 )
by E21, Def14;
uniqueness
for b1, b2 being Element of c1 st ( for b3 being Element of c1 holds
( b1 "\/" b3 = b1 & b3 "\/" b1 = b1 ) ) & ( for b3 being Element of c1 holds
( b2 "\/" b3 = b2 & b3 "\/" b2 = b2 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def17 defines Top LATTICES:def 17 :
for b1 being non empty \/-SemiLattStr st b1 is upper-bounded holds
for b2 being Element of b1 holds
( b2 = Top b1 iff for b3 being Element of b1 holds
( b2 "\/" b3 = b2 & b3 "\/" b2 = b2 ) );

definition
let c1 be non empty LattStr ;
let c2, c3 be Element of c1;
pred c2 is_a_complement_of c3 means :Def18: :: LATTICES:def 18
( a2 "\/" a3 = Top a1 & a3 "\/" a2 = Top a1 & a2 "/\" a3 = Bottom a1 & a3 "/\" a2 = Bottom a1 );
end;

:: deftheorem Def18 defines is_a_complement_of LATTICES:def 18 :
for b1 being non empty LattStr
for b2, b3 being Element of b1 holds
( b2 is_a_complement_of b3 iff ( b2 "\/" b3 = Top b1 & b3 "\/" b2 = Top b1 & b2 "/\" b3 = Bottom b1 & b3 "/\" b2 = Bottom b1 ) );

definition
let c1 be non empty LattStr ;
attr a1 is complemented means :Def19: :: LATTICES:def 19
for b1 being Element of a1 ex b2 being Element of a1 st b2 is_a_complement_of b1;
end;

:: deftheorem Def19 defines complemented LATTICES:def 19 :
for b1 being non empty LattStr holds
( b1 is complemented iff for b2 being Element of b1 ex b3 being Element of b1 st b3 is_a_complement_of b2 );

registration
cluster strict lower-bounded upper-bounded bounded complemented LattStr ;
existence
ex b1 being Lattice st
( b1 is bounded & b1 is complemented & b1 is strict )
proof end;
end;

definition
mode C_Lattice is complemented 01_Lattice;
end;

definition
let c1 be non empty LattStr ;
attr a1 is Boolean means :Def20: :: LATTICES:def 20
( a1 is bounded & a1 is complemented & a1 is distributive );
end;

:: deftheorem Def20 defines Boolean LATTICES:def 20 :
for b1 being non empty LattStr holds
( b1 is Boolean iff ( b1 is bounded & b1 is complemented & b1 is distributive ) );

registration
cluster non empty Boolean -> non empty distributive lower-bounded upper-bounded bounded complemented LattStr ;
coherence
for b1 being non empty LattStr st b1 is Boolean holds
( b1 is bounded & b1 is complemented & b1 is distributive )
by Def20;
cluster non empty distributive bounded complemented -> non empty Boolean LattStr ;
coherence
for b1 being non empty LattStr st b1 is bounded & b1 is complemented & b1 is distributive holds
b1 is Boolean
by Def20;
end;

registration
cluster strict distributive lower-bounded upper-bounded bounded complemented Boolean LattStr ;
existence
ex b1 being Lattice st
( b1 is Boolean & b1 is strict )
proof end;
end;

definition
mode B_Lattice is Boolean Lattice;
end;

theorem Th1: :: LATTICES:1
canceled;

theorem Th2: :: LATTICES:2
canceled;

theorem Th3: :: LATTICES:3
canceled;

theorem Th4: :: LATTICES:4
canceled;

theorem Th5: :: LATTICES:5
canceled;

theorem Th6: :: LATTICES:6
canceled;

theorem Th7: :: LATTICES:7
canceled;

theorem Th8: :: LATTICES:8
canceled;

theorem Th9: :: LATTICES:9
canceled;

theorem Th10: :: LATTICES:10
canceled;

theorem Th11: :: LATTICES:11
canceled;

theorem Th12: :: LATTICES:12
canceled;

theorem Th13: :: LATTICES:13
canceled;

theorem Th14: :: LATTICES:14
canceled;

theorem Th15: :: LATTICES:15
canceled;

theorem Th16: :: LATTICES:16
canceled;

theorem Th17: :: LATTICES:17
for b1 being non empty meet-commutative meet-absorbing join-absorbing LattStr
for b2 being Element of b1 holds b2 "\/" b2 = b2
proof end;

theorem Th18: :: LATTICES:18
for b1 being non empty meet-commutative meet-absorbing join-absorbing LattStr
for b2 being Element of b1 holds b2 "/\" b2 = b2
proof end;

theorem Th19: :: LATTICES:19
for b1 being Lattice holds
( ( for b2, b3, b4 being Element of b1 holds b2 "/\" (b3 "\/" b4) = (b2 "/\" b3) "\/" (b2 "/\" b4) ) iff for b2, b3, b4 being Element of b1 holds b2 "\/" (b3 "/\" b4) = (b2 "\/" b3) "/\" (b2 "\/" b4) )
proof end;

theorem Th20: :: LATTICES:20
canceled;

theorem Th21: :: LATTICES:21
for b1 being non empty meet-absorbing join-absorbing LattStr
for b2, b3 being Element of b1 holds
( b2 [= b3 iff b2 "/\" b3 = b2 )
proof end;

theorem Th22: :: LATTICES:22
for b1 being non empty join-associative meet-commutative meet-absorbing join-absorbing LattStr
for b2, b3 being Element of b1 holds b2 [= b2 "\/" b3
proof end;

theorem Th23: :: LATTICES:23
for b1 being non empty meet-commutative meet-absorbing LattStr
for b2, b3 being Element of b1 holds b2 "/\" b3 [= b2
proof end;

definition
let c1 be non empty meet-commutative meet-absorbing join-absorbing LattStr ;
let c2, c3 be Element of c1;
redefine pred [= as c2 [= c3;
reflexivity
for b1 being Element of c1 holds b1 [= b1
proof end;
end;

theorem Th24: :: LATTICES:24
canceled;

theorem Th25: :: LATTICES:25
for b1 being non empty join-associative \/-SemiLattStr
for b2, b3, b4 being Element of b1 st b2 [= b3 & b3 [= b4 holds
b2 [= b4
proof end;

theorem Th26: :: LATTICES:26
for b1 being non empty join-commutative \/-SemiLattStr
for b2, b3 being Element of b1 st b2 [= b3 & b3 [= b2 holds
b2 = b3
proof end;

theorem Th27: :: LATTICES:27
for b1 being non empty meet-associative meet-absorbing join-absorbing LattStr
for b2, b3, b4 being Element of b1 st b2 [= b3 holds
b2 "/\" b4 [= b3 "/\" b4
proof end;

theorem Th28: :: LATTICES:28
canceled;

theorem Th29: :: LATTICES:29
for b1 being Lattice st ( for b2, b3, b4 being Element of b1 holds ((b2 "/\" b3) "\/" (b3 "/\" b4)) "\/" (b4 "/\" b2) = ((b2 "\/" b3) "/\" (b3 "\/" b4)) "/\" (b4 "\/" b2) ) holds
b1 is distributive
proof end;

theorem Th30: :: LATTICES:30
canceled;

theorem Th31: :: LATTICES:31
for b1 being D_Lattice
for b2, b3, b4 being Element of b1 holds b2 "\/" (b3 "/\" b4) = (b2 "\/" b3) "/\" (b2 "\/" b4)
proof end;

theorem Th32: :: LATTICES:32
for b1 being D_Lattice
for b2, b3, b4 being Element of b1 st b2 "/\" b3 = b2 "/\" b4 & b2 "\/" b3 = b2 "\/" b4 holds
b3 = b4
proof end;

theorem Th33: :: LATTICES:33
canceled;

theorem Th34: :: LATTICES:34
for b1 being D_Lattice
for b2, b3, b4 being Element of b1 holds ((b2 "\/" b3) "/\" (b3 "\/" b4)) "/\" (b4 "\/" b2) = ((b2 "/\" b3) "\/" (b3 "/\" b4)) "\/" (b4 "/\" b2)
proof end;

registration
cluster distributive -> join-commutative join-associative meet-commutative meet-associative meet-absorbing join-absorbing modular LattStr ;
coherence
for b1 being Lattice st b1 is distributive holds
b1 is modular
proof end;
end;

theorem Th35: :: LATTICES:35
canceled;

theorem Th36: :: LATTICES:36
canceled;

theorem Th37: :: LATTICES:37
canceled;

theorem Th38: :: LATTICES:38
canceled;

theorem Th39: :: LATTICES:39
for b1 being 0_Lattice
for b2 being Element of b1 holds (Bottom b1) "\/" b2 = b2
proof end;

theorem Th40: :: LATTICES:40
for b1 being 0_Lattice
for b2 being Element of b1 holds (Bottom b1) "/\" b2 = Bottom b1 by Def16;

theorem Th41: :: LATTICES:41
for b1 being 0_Lattice
for b2 being Element of b1 holds Bottom b1 [= b2
proof end;

theorem Th42: :: LATTICES:42
canceled;

theorem Th43: :: LATTICES:43
for b1 being 1_Lattice
for b2 being Element of b1 holds (Top b1) "/\" b2 = b2
proof end;

theorem Th44: :: LATTICES:44
for b1 being 1_Lattice
for b2 being Element of b1 holds (Top b1) "\/" b2 = Top b1 by Def17;

theorem Th45: :: LATTICES:45
for b1 being 1_Lattice
for b2 being Element of b1 holds b2 [= Top b1
proof end;

definition
let c1 be non empty LattStr ;
let c2 be Element of c1;
assume E37: c1 is complemented D_Lattice ;
func c2 ` -> Element of a1 means :Def21: :: LATTICES:def 21
a3 is_a_complement_of a2;
existence
ex b1 being Element of c1 st b1 is_a_complement_of c2
by E37, Def19;
uniqueness
for b1, b2 being Element of c1 st b1 is_a_complement_of c2 & b2 is_a_complement_of c2 holds
b1 = b2
proof end;
end;

:: deftheorem Def21 defines ` LATTICES:def 21 :
for b1 being non empty LattStr
for b2 being Element of b1 st b1 is complemented D_Lattice holds
for b3 being Element of b1 holds
( b3 = b2 ` iff b3 is_a_complement_of b2 );

theorem Th46: :: LATTICES:46
canceled;

theorem Th47: :: LATTICES:47
for b1 being B_Lattice
for b2 being Element of b1 holds (b2 ` ) "/\" b2 = Bottom b1
proof end;

theorem Th48: :: LATTICES:48
for b1 being B_Lattice
for b2 being Element of b1 holds (b2 ` ) "\/" b2 = Top b1
proof end;

theorem Th49: :: LATTICES:49
for b1 being B_Lattice
for b2 being Element of b1 holds (b2 ` ) ` = b2
proof end;

theorem Th50: :: LATTICES:50
for b1 being B_Lattice
for b2, b3 being Element of b1 holds (b2 "/\" b3) ` = (b2 ` ) "\/" (b3 ` )
proof end;

theorem Th51: :: LATTICES:51
for b1 being B_Lattice
for b2, b3 being Element of b1 holds (b2 "\/" b3) ` = (b2 ` ) "/\" (b3 ` )
proof end;

theorem Th52: :: LATTICES:52
for b1 being B_Lattice
for b2, b3 being Element of b1 holds
( b2 "/\" b3 = Bottom b1 iff b2 [= b3 ` )
proof end;

theorem Th53: :: LATTICES:53
for b1 being B_Lattice
for b2, b3 being Element of b1 st b2 [= b3 holds
b3 ` [= b2 `
proof end;