:: LOPCLSET semantic presentation

definition
let c1 be non empty TopStruct ;
func OpenClosedSet c1 -> Subset-Family of a1 equals :: LOPCLSET:def 1
{ b1 where B is Subset of a1 : ( b1 is open & b1 is closed ) } ;
coherence
{ b1 where B is Subset of c1 : ( b1 is open & b1 is closed ) } is Subset-Family of c1
proof end;
end;

:: deftheorem Def1 defines OpenClosedSet LOPCLSET:def 1 :
for b1 being non empty TopStruct holds OpenClosedSet b1 = { b2 where B is Subset of b1 : ( b2 is open & b2 is closed ) } ;

registration
let c1 be non empty TopSpace;
cluster OpenClosedSet a1 -> non empty ;
coherence
not OpenClosedSet c1 is empty
proof end;
end;

theorem Th1: :: LOPCLSET:1
canceled;

theorem Th2: :: LOPCLSET:2
for b1 being non empty TopSpace
for b2 being Subset of b1 st b2 in OpenClosedSet b1 holds
b2 is open
proof end;

theorem Th3: :: LOPCLSET:3
for b1 being non empty TopSpace
for b2 being Subset of b1 st b2 in OpenClosedSet b1 holds
b2 is closed
proof end;

theorem Th4: :: LOPCLSET:4
for b1 being non empty TopSpace
for b2 being Subset of b1 st b2 is open & b2 is closed holds
b2 in OpenClosedSet b1 ;

definition
let c1 be non empty TopSpace;
let c2, c3 be Element of OpenClosedSet c1;
redefine func \/ as c2 \/ c3 -> Element of OpenClosedSet a1;
coherence
c2 \/ c3 is Element of OpenClosedSet c1
proof end;
redefine func /\ as c2 /\ c3 -> Element of OpenClosedSet a1;
coherence
c2 /\ c3 is Element of OpenClosedSet c1
proof end;
end;

definition
let c1 be non empty TopSpace;
deffunc H1( Element of OpenClosedSet c1, Element of OpenClosedSet c1) -> Element of OpenClosedSet c1 = a1 \/ a2;
func T_join c1 -> BinOp of OpenClosedSet a1 means :Def2: :: LOPCLSET:def 2
for b1, b2 being Element of OpenClosedSet a1 holds a2 . b1,b2 = b1 \/ b2;
existence
ex b1 being BinOp of OpenClosedSet c1 st
for b2, b3 being Element of OpenClosedSet c1 holds b1 . b2,b3 = b2 \/ b3
proof end;
uniqueness
for b1, b2 being BinOp of OpenClosedSet c1 st ( for b3, b4 being Element of OpenClosedSet c1 holds b1 . b3,b4 = b3 \/ b4 ) & ( for b3, b4 being Element of OpenClosedSet c1 holds b2 . b3,b4 = b3 \/ b4 ) holds
b1 = b2
proof end;
deffunc H2( Element of OpenClosedSet c1, Element of OpenClosedSet c1) -> Element of OpenClosedSet c1 = a1 /\ a2;
func T_meet c1 -> BinOp of OpenClosedSet a1 means :Def3: :: LOPCLSET:def 3
for b1, b2 being Element of OpenClosedSet a1 holds a2 . b1,b2 = b1 /\ b2;
existence
ex b1 being BinOp of OpenClosedSet c1 st
for b2, b3 being Element of OpenClosedSet c1 holds b1 . b2,b3 = b2 /\ b3
proof end;
uniqueness
for b1, b2 being BinOp of OpenClosedSet c1 st ( for b3, b4 being Element of OpenClosedSet c1 holds b1 . b3,b4 = b3 /\ b4 ) & ( for b3, b4 being Element of OpenClosedSet c1 holds b2 . b3,b4 = b3 /\ b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines T_join LOPCLSET:def 2 :
for b1 being non empty TopSpace
for b2 being BinOp of OpenClosedSet b1 holds
( b2 = T_join b1 iff for b3, b4 being Element of OpenClosedSet b1 holds b2 . b3,b4 = b3 \/ b4 );

:: deftheorem Def3 defines T_meet LOPCLSET:def 3 :
for b1 being non empty TopSpace
for b2 being BinOp of OpenClosedSet b1 holds
( b2 = T_meet b1 iff for b3, b4 being Element of OpenClosedSet b1 holds b2 . b3,b4 = b3 /\ b4 );

theorem Th5: :: LOPCLSET:5
for b1 being non empty TopSpace
for b2, b3 being Element of LattStr(# (OpenClosedSet b1),(T_join b1),(T_meet b1) #)
for b4, b5 being Element of OpenClosedSet b1 st b2 = b4 & b3 = b5 holds
b2 "\/" b3 = b4 \/ b5 by Def2;

theorem Th6: :: LOPCLSET:6
for b1 being non empty TopSpace
for b2, b3 being Element of LattStr(# (OpenClosedSet b1),(T_join b1),(T_meet b1) #)
for b4, b5 being Element of OpenClosedSet b1 st b2 = b4 & b3 = b5 holds
b2 "/\" b3 = b4 /\ b5 by Def3;

theorem Th7: :: LOPCLSET:7
for b1 being non empty TopSpace holds {} b1 is Element of OpenClosedSet b1
proof end;

theorem Th8: :: LOPCLSET:8
for b1 being non empty TopSpace holds [#] b1 is Element of OpenClosedSet b1
proof end;

theorem Th9: :: LOPCLSET:9
for b1 being non empty TopSpace
for b2 being Element of OpenClosedSet b1 holds b2 ` is Element of OpenClosedSet b1
proof end;

theorem Th10: :: LOPCLSET:10
for b1 being non empty TopSpace holds LattStr(# (OpenClosedSet b1),(T_join b1),(T_meet b1) #) is Lattice
proof end;

definition
let c1 be non empty TopSpace;
func OpenClosedSetLatt c1 -> Lattice equals :: LOPCLSET:def 4
LattStr(# (OpenClosedSet a1),(T_join a1),(T_meet a1) #);
coherence
LattStr(# (OpenClosedSet c1),(T_join c1),(T_meet c1) #) is Lattice
by Th10;
end;

:: deftheorem Def4 defines OpenClosedSetLatt LOPCLSET:def 4 :
for b1 being non empty TopSpace holds OpenClosedSetLatt b1 = LattStr(# (OpenClosedSet b1),(T_join b1),(T_meet b1) #);

theorem Th11: :: LOPCLSET:11
for b1 being non empty TopSpace
for b2, b3 being Element of (OpenClosedSetLatt b1) holds b2 "\/" b3 = b2 \/ b3 by Th5;

theorem Th12: :: LOPCLSET:12
for b1 being non empty TopSpace
for b2, b3 being Element of (OpenClosedSetLatt b1) holds b2 "/\" b3 = b2 /\ b3 by Th6;

theorem Th13: :: LOPCLSET:13
for b1 being non empty TopSpace holds the carrier of (OpenClosedSetLatt b1) = OpenClosedSet b1 ;

theorem Th14: :: LOPCLSET:14
for b1 being non empty TopSpace holds OpenClosedSetLatt b1 is Boolean
proof end;

theorem Th15: :: LOPCLSET:15
for b1 being non empty TopSpace holds [#] b1 is Element of (OpenClosedSetLatt b1) by Th8;

theorem Th16: :: LOPCLSET:16
for b1 being non empty TopSpace holds {} b1 is Element of (OpenClosedSetLatt b1) by Th7;

registration
cluster non trivial LattStr ;
existence
not for b1 being B_Lattice holds b1 is trivial
proof end;
end;

definition
let c1 be non trivial B_Lattice;
func ultraset c1 -> Subset-Family of a1 equals :: LOPCLSET:def 5
{ b1 where B is Filter of a1 : b1 is_ultrafilter } ;
coherence
{ b1 where B is Filter of c1 : b1 is_ultrafilter } is Subset-Family of c1
proof end;
end;

:: deftheorem Def5 defines ultraset LOPCLSET:def 5 :
for b1 being non trivial B_Lattice holds ultraset b1 = { b2 where B is Filter of b1 : b2 is_ultrafilter } ;

registration
let c1 be non trivial B_Lattice;
cluster ultraset a1 -> non empty ;
coherence
not ultraset c1 is empty
proof end;
end;

theorem Th17: :: LOPCLSET:17
canceled;

theorem Th18: :: LOPCLSET:18
for b1 being set
for b2 being non trivial B_Lattice holds
( b1 in ultraset b2 iff ex b3 being Filter of b2 st
( b3 = b1 & b3 is_ultrafilter ) ) ;

theorem Th19: :: LOPCLSET:19
for b1 being non trivial B_Lattice
for b2 being Element of b1 holds { b3 where B is Filter of b1 : ( b3 is_ultrafilter & b2 in b3 ) } c= ultraset b1
proof end;

definition
let c1 be non trivial B_Lattice;
func UFilter c1 -> Function means :Def6: :: LOPCLSET:def 6
( dom a2 = the carrier of a1 & ( for b1 being Element of a1 holds a2 . b1 = { b2 where B is Filter of a1 : ( b2 is_ultrafilter & b1 in b2 ) } ) );
existence
ex b1 being Function st
( dom b1 = the carrier of c1 & ( for b2 being Element of c1 holds b1 . b2 = { b3 where B is Filter of c1 : ( b3 is_ultrafilter & b2 in b3 ) } ) )
proof end;
uniqueness
for b1, b2 being Function st dom b1 = the carrier of c1 & ( for b3 being Element of c1 holds b1 . b3 = { b4 where B is Filter of c1 : ( b4 is_ultrafilter & b3 in b4 ) } ) & dom b2 = the carrier of c1 & ( for b3 being Element of c1 holds b2 . b3 = { b4 where B is Filter of c1 : ( b4 is_ultrafilter & b3 in b4 ) } ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines UFilter LOPCLSET:def 6 :
for b1 being non trivial B_Lattice
for b2 being Function holds
( b2 = UFilter b1 iff ( dom b2 = the carrier of b1 & ( for b3 being Element of b1 holds b2 . b3 = { b4 where B is Filter of b1 : ( b4 is_ultrafilter & b3 in b4 ) } ) ) );

theorem Th20: :: LOPCLSET:20
for b1 being set
for b2 being non trivial B_Lattice
for b3 being Element of b2 holds
( b1 in (UFilter b2) . b3 iff ex b4 being Filter of b2 st
( b4 = b1 & b4 is_ultrafilter & b3 in b4 ) )
proof end;

theorem Th21: :: LOPCLSET:21
for b1 being non trivial B_Lattice
for b2 being Element of b1
for b3 being Filter of b1 holds
( b3 in (UFilter b1) . b2 iff ( b3 is_ultrafilter & b2 in b3 ) )
proof end;

theorem Th22: :: LOPCLSET:22
for b1 being non trivial B_Lattice
for b2, b3 being Element of b1
for b4 being Filter of b1 st b4 is_ultrafilter holds
( b2 "\/" b3 in b4 iff ( b2 in b4 or b3 in b4 ) )
proof end;

theorem Th23: :: LOPCLSET:23
for b1 being non trivial B_Lattice
for b2, b3 being Element of b1 holds (UFilter b1) . (b2 "/\" b3) = ((UFilter b1) . b2) /\ ((UFilter b1) . b3)
proof end;

theorem Th24: :: LOPCLSET:24
for b1 being non trivial B_Lattice
for b2, b3 being Element of b1 holds (UFilter b1) . (b2 "\/" b3) = ((UFilter b1) . b2) \/ ((UFilter b1) . b3)
proof end;

definition
let c1 be non trivial B_Lattice;
redefine func UFilter as UFilter c1 -> Function of the carrier of a1, bool (ultraset a1);
coherence
UFilter c1 is Function of the carrier of c1, bool (ultraset c1)
proof end;
end;

definition
let c1 be non trivial B_Lattice;
func StoneR c1 -> set equals :: LOPCLSET:def 7
rng (UFilter a1);
coherence
rng (UFilter c1) is set
;
end;

:: deftheorem Def7 defines StoneR LOPCLSET:def 7 :
for b1 being non trivial B_Lattice holds StoneR b1 = rng (UFilter b1);

registration
let c1 be non trivial B_Lattice;
cluster StoneR a1 -> non empty ;
coherence
not StoneR c1 is empty
proof end;
end;

theorem Th25: :: LOPCLSET:25
for b1 being non trivial B_Lattice holds StoneR b1 c= bool (ultraset b1) by RELSET_1:12;

theorem Th26: :: LOPCLSET:26
for b1 being set
for b2 being non trivial B_Lattice holds
( b1 in StoneR b2 iff ex b3 being Element of b2 st (UFilter b2) . b3 = b1 )
proof end;

definition
let c1 be non trivial B_Lattice;
func StoneSpace c1 -> strict TopSpace means :Def8: :: LOPCLSET:def 8
( the carrier of a2 = ultraset a1 & the topology of a2 = { (union b1) where B is Subset-Family of (ultraset a1) : b1 c= StoneR a1 } );
existence
ex b1 being strict TopSpace st
( the carrier of b1 = ultraset c1 & the topology of b1 = { (union b2) where B is Subset-Family of (ultraset c1) : b2 c= StoneR c1 } )
proof end;
uniqueness
for b1, b2 being strict TopSpace st the carrier of b1 = ultraset c1 & the topology of b1 = { (union b3) where B is Subset-Family of (ultraset c1) : b3 c= StoneR c1 } & the carrier of b2 = ultraset c1 & the topology of b2 = { (union b3) where B is Subset-Family of (ultraset c1) : b3 c= StoneR c1 } holds
b1 = b2
;
end;

:: deftheorem Def8 defines StoneSpace LOPCLSET:def 8 :
for b1 being non trivial B_Lattice
for b2 being strict TopSpace holds
( b2 = StoneSpace b1 iff ( the carrier of b2 = ultraset b1 & the topology of b2 = { (union b3) where B is Subset-Family of (ultraset b1) : b3 c= StoneR b1 } ) );

registration
let c1 be non trivial B_Lattice;
cluster StoneSpace a1 -> non empty strict ;
coherence
not StoneSpace c1 is empty
proof end;
end;

theorem Th27: :: LOPCLSET:27
for b1 being non trivial B_Lattice
for b2 being Element of b1
for b3 being Filter of b1 st b3 is_ultrafilter & not b3 in (UFilter b1) . b2 holds
not b2 in b3 by Th21;

theorem Th28: :: LOPCLSET:28
for b1 being non trivial B_Lattice
for b2 being Element of b1 holds (ultraset b1) \ ((UFilter b1) . b2) = (UFilter b1) . (b2 ` )
proof end;

definition
let c1 be non trivial B_Lattice;
func StoneBLattice c1 -> Lattice equals :: LOPCLSET:def 9
OpenClosedSetLatt (StoneSpace a1);
coherence
OpenClosedSetLatt (StoneSpace c1) is Lattice
;
end;

:: deftheorem Def9 defines StoneBLattice LOPCLSET:def 9 :
for b1 being non trivial B_Lattice holds StoneBLattice b1 = OpenClosedSetLatt (StoneSpace b1);

Lemma28: for b1 being non trivial B_Lattice
for b2 being Subset of (StoneSpace b1) st b2 in StoneR b1 holds
b2 is open
proof end;

theorem Th29: :: LOPCLSET:29
for b1 being non trivial B_Lattice holds UFilter b1 is one-to-one
proof end;

theorem Th30: :: LOPCLSET:30
for b1 being non trivial B_Lattice holds union (StoneR b1) = ultraset b1
proof end;

theorem Th31: :: LOPCLSET:31
canceled;

theorem Th32: :: LOPCLSET:32
for b1 being non empty set holds
not for b2 being Finite_Subset of b1 holds b2 is empty
proof end;

registration
let c1 be non empty set ;
cluster non empty Element of Fin a1;
existence
not for b1 being Finite_Subset of c1 holds b1 is empty
by Th32;
end;

theorem Th33: :: LOPCLSET:33
canceled;

theorem Th34: :: LOPCLSET:34
for b1 being non trivial B_Lattice
for b2 being non empty Subset of b1 st Bottom b1 in <.b2.) holds
ex b3 being non empty Finite_Subset of the carrier of b1 st
( b3 c= b2 & FinMeet b3 = Bottom b1 )
proof end;

theorem Th35: :: LOPCLSET:35
for b1 being 0_Lattice
for b2 being Filter of b1 holds
( not b2 is_ultrafilter or not Bottom b1 in b2 )
proof end;

theorem Th36: :: LOPCLSET:36
for b1 being non trivial B_Lattice holds (UFilter b1) . (Bottom b1) = {}
proof end;

theorem Th37: :: LOPCLSET:37
for b1 being non trivial B_Lattice holds (UFilter b1) . (Top b1) = ultraset b1
proof end;

theorem Th38: :: LOPCLSET:38
for b1 being set
for b2 being non trivial B_Lattice st ultraset b2 = union b1 & b1 is Subset of (StoneR b2) holds
ex b3 being Finite_Subset of b1 st ultraset b2 = union b3
proof end;

Lemma35: for b1 being non trivial B_Lattice holds StoneR b1 c= OpenClosedSet (StoneSpace b1)
proof end;

theorem Th39: :: LOPCLSET:39
canceled;

theorem Th40: :: LOPCLSET:40
for b1 being non trivial B_Lattice holds StoneR b1 = OpenClosedSet (StoneSpace b1)
proof end;

definition
let c1 be non trivial B_Lattice;
redefine func UFilter as UFilter c1 -> Homomorphism of a1, StoneBLattice a1;
coherence
UFilter c1 is Homomorphism of c1, StoneBLattice c1
proof end;
end;

theorem Th41: :: LOPCLSET:41
for b1 being non trivial B_Lattice holds rng (UFilter b1) = the carrier of (StoneBLattice b1)
proof end;

theorem Th42: :: LOPCLSET:42
for b1 being non trivial B_Lattice holds UFilter b1 is isomorphism
proof end;

theorem Th43: :: LOPCLSET:43
for b1 being non trivial B_Lattice holds b1, StoneBLattice b1 are_isomorphic
proof end;

theorem Th44: :: LOPCLSET:44
for b1 being non trivial B_Lattice ex b2 being non empty TopSpace st b1, OpenClosedSetLatt b2 are_isomorphic
proof end;