:: OPENLATT semantic presentation

registration
cluster Heyting -> implicative LattStr ;
coherence
for b1 being 0_Lattice st b1 is Heyting holds
b1 is implicative
by LATTICE2:def 6;
cluster implicative -> upper-bounded LattStr ;
coherence
for b1 being Lattice st b1 is implicative holds
b1 is upper-bounded
by FILTER_0:37;
end;

theorem Th1: :: OPENLATT:1
for b1 being TopSpace
for b2, b3 being Subset of b1 holds b2 /\ (Int ((b2 ` ) \/ b3)) c= b3
proof end;

theorem Th2: :: OPENLATT:2
for b1 being TopSpace
for b2, b3, b4 being Subset of b1 st b4 is open & b2 /\ b4 c= b3 holds
b4 c= Int ((b2 ` ) \/ b3)
proof end;

definition
let c1 be TopStruct ;
func Topology_of c1 -> Subset-Family of a1 equals :: OPENLATT:def 1
the topology of a1;
coherence
the topology of c1 is Subset-Family of c1
;
end;

:: deftheorem Def1 defines Topology_of OPENLATT:def 1 :
for b1 being TopStruct holds Topology_of b1 = the topology of b1;

registration
let c1 be TopSpace;
cluster Topology_of a1 -> non empty ;
coherence
not Topology_of c1 is empty
by PRE_TOPC:5;
end;

theorem Th3: :: OPENLATT:3
for b1 being TopSpace
for b2 being Subset of b1 holds
( b2 is open iff b2 in Topology_of b1 ) by PRE_TOPC:def 5;

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

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

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

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

Lemma6: for b1 being non empty TopSpace
for b2, b3 being Element of LattStr(# (Topology_of b1),(Top_Union b1),(Top_Meet b1) #) holds b2 "\/" b3 = b2 \/ b3
by Def2;

Lemma7: for b1 being non empty TopSpace
for b2, b3 being Element of LattStr(# (Topology_of b1),(Top_Union b1),(Top_Meet b1) #) holds b2 "/\" b3 = b2 /\ b3
by Def3;

theorem Th4: :: OPENLATT:4
for b1 being non empty TopSpace holds LattStr(# (Topology_of b1),(Top_Union b1),(Top_Meet b1) #) is Lattice
proof end;

definition
let c1 be non empty TopSpace;
func Open_setLatt c1 -> Lattice equals :: OPENLATT:def 4
LattStr(# (Topology_of a1),(Top_Union a1),(Top_Meet a1) #);
coherence
LattStr(# (Topology_of c1),(Top_Union c1),(Top_Meet c1) #) is Lattice
by Th4;
end;

:: deftheorem Def4 defines Open_setLatt OPENLATT:def 4 :
for b1 being non empty TopSpace holds Open_setLatt b1 = LattStr(# (Topology_of b1),(Top_Union b1),(Top_Meet b1) #);

theorem Th5: :: OPENLATT:5
for b1 being non empty TopSpace holds the carrier of (Open_setLatt b1) = Topology_of b1 ;

theorem Th6: :: OPENLATT:6
for b1 being non empty TopSpace
for b2, b3 being Element of (Open_setLatt b1) holds
( b2 "\/" b3 = b2 \/ b3 & b2 "/\" b3 = b2 /\ b3 ) by Def2, Def3;

theorem Th7: :: OPENLATT:7
for b1 being non empty TopSpace
for b2, b3 being Element of (Open_setLatt b1) holds
( b2 [= b3 iff b2 c= b3 )
proof end;

theorem Th8: :: OPENLATT:8
for b1 being non empty TopSpace
for b2, b3 being Element of (Open_setLatt b1)
for b4, b5 being Element of Topology_of b1 st b2 = b4 & b3 = b5 holds
( b2 [= b3 iff b4 c= b5 )
proof end;

theorem Th9: :: OPENLATT:9
for b1 being non empty TopSpace holds Open_setLatt b1 is implicative
proof end;

theorem Th10: :: OPENLATT:10
for b1 being non empty TopSpace holds
( Open_setLatt b1 is lower-bounded & Bottom (Open_setLatt b1) = {} )
proof end;

registration
let c1 be non empty TopSpace;
cluster Open_setLatt a1 -> upper-bounded Heyting ;
coherence
Open_setLatt c1 is Heyting
proof end;
end;

theorem Th11: :: OPENLATT:11
for b1 being non empty TopSpace holds Top (Open_setLatt b1) = the carrier of b1
proof end;

definition
let c1 be D_Lattice;
func F_primeSet c1 -> set equals :: OPENLATT:def 5
{ b1 where B is Filter of a1 : ( b1 <> the carrier of a1 & b1 is prime ) } ;
coherence
{ b1 where B is Filter of c1 : ( b1 <> the carrier of c1 & b1 is prime ) } is set
;
end;

:: deftheorem Def5 defines F_primeSet OPENLATT:def 5 :
for b1 being D_Lattice holds F_primeSet b1 = { b2 where B is Filter of b1 : ( b2 <> the carrier of b1 & b2 is prime ) } ;

theorem Th12: :: OPENLATT:12
for b1 being D_Lattice
for b2 being Filter of b1 holds
( b2 in F_primeSet b1 iff ( b2 <> the carrier of b1 & b2 is prime ) )
proof end;

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

:: deftheorem Def6 defines StoneH OPENLATT:def 6 :
for b1 being D_Lattice
for b2 being Function holds
( b2 = StoneH b1 iff for b3 being Element of b1 holds
( dom b2 = the carrier of b1 & b2 . b3 = { b4 where B is Filter of b1 : ( b4 in F_primeSet b1 & b3 in b4 ) } ) );

theorem Th13: :: OPENLATT:13
for b1 being D_Lattice
for b2 being Filter of b1
for b3 being Element of b1 holds
( b2 in (StoneH b1) . b3 iff ( b2 in F_primeSet b1 & b3 in b2 ) )
proof end;

theorem Th14: :: OPENLATT:14
for b1 being D_Lattice
for b2 being Element of b1
for b3 being set holds
( b3 in (StoneH b1) . b2 iff ex b4 being Filter of b1 st
( b4 = b3 & b4 <> the carrier of b1 & b4 is prime & b2 in b4 ) )
proof end;

definition
let c1 be D_Lattice;
func StoneS c1 -> set equals :: OPENLATT:def 7
rng (StoneH a1);
coherence
rng (StoneH c1) is set
;
end;

:: deftheorem Def7 defines StoneS OPENLATT:def 7 :
for b1 being D_Lattice holds StoneS b1 = rng (StoneH b1);

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

theorem Th15: :: OPENLATT:15
for b1 being D_Lattice
for b2 being set holds
( b2 in StoneS b1 iff ex b3 being Element of b1 st b2 = (StoneH b1) . b3 )
proof end;

theorem Th16: :: OPENLATT:16
for b1 being D_Lattice
for b2, b3 being Element of b1 holds (StoneH b1) . (b2 "\/" b3) = ((StoneH b1) . b2) \/ ((StoneH b1) . b3)
proof end;

theorem Th17: :: OPENLATT:17
for b1 being D_Lattice
for b2, b3 being Element of b1 holds (StoneH b1) . (b2 "/\" b3) = ((StoneH b1) . b2) /\ ((StoneH b1) . b3)
proof end;

definition
let c1 be D_Lattice;
let c2 be Element of c1;
func SF_have c2 -> Subset-Family of a1 equals :: OPENLATT:def 8
{ b1 where B is Filter of a1 : a2 in b1 } ;
coherence
{ b1 where B is Filter of c1 : c2 in b1 } is Subset-Family of c1
proof end;
end;

:: deftheorem Def8 defines SF_have OPENLATT:def 8 :
for b1 being D_Lattice
for b2 being Element of b1 holds SF_have b2 = { b3 where B is Filter of b1 : b2 in b3 } ;

registration
let c1 be D_Lattice;
let c2 be Element of c1;
cluster SF_have a2 -> non empty ;
coherence
not SF_have c2 is empty
proof end;
end;

theorem Th18: :: OPENLATT:18
for b1 being D_Lattice
for b2 being Element of b1
for b3 being set holds
( b3 in SF_have b2 iff ( b3 is Filter of b1 & b2 in b3 ) )
proof end;

Lemma23: for b1 being D_Lattice
for b2 being Filter of b1
for b3, b4 being Element of b1 holds
( b2 in (SF_have b3) \ (SF_have b4) iff ( b3 in b2 & not b4 in b2 ) )
proof end;

theorem Th19: :: OPENLATT:19
for b1 being D_Lattice
for b2, b3 being Element of b1
for b4 being set st b4 in (SF_have b2) \ (SF_have b3) holds
( b4 is Filter of b1 & b2 in b4 & not b3 in b4 )
proof end;

theorem Th20: :: OPENLATT:20
for b1 being D_Lattice
for b2, b3 being Element of b1
for b4 being set st b4 <> {} & b4 c= (SF_have b2) \ (SF_have b3) & b4 is c=-linear holds
ex b5 being set st
( b5 in (SF_have b2) \ (SF_have b3) & ( for b6 being set st b6 in b4 holds
b6 c= b5 ) )
proof end;

theorem Th21: :: OPENLATT:21
for b1 being D_Lattice
for b2, b3 being Element of b1 st not b2 [= b3 holds
<.b2.) in (SF_have b2) \ (SF_have b3)
proof end;

theorem Th22: :: OPENLATT:22
for b1 being D_Lattice
for b2, b3 being Element of b1 st not b2 [= b3 holds
ex b4 being Filter of b1 st
( b4 in F_primeSet b1 & not b3 in b4 & b2 in b4 )
proof end;

theorem Th23: :: OPENLATT:23
for b1 being D_Lattice
for b2, b3 being Element of b1 st b2 <> b3 holds
ex b4 being Filter of b1 st b4 in F_primeSet b1
proof end;

theorem Th24: :: OPENLATT:24
for b1 being D_Lattice
for b2, b3 being Element of b1 st b2 <> b3 holds
(StoneH b1) . b2 <> (StoneH b1) . b3
proof end;

theorem Th25: :: OPENLATT:25
for b1 being D_Lattice holds StoneH b1 is one-to-one
proof end;

definition
let c1 be D_Lattice;
let c2, c3 be Element of StoneS c1;
redefine func \/ as c2 \/ c3 -> Element of StoneS a1;
coherence
c2 \/ c3 is Element of StoneS c1
proof end;
redefine func /\ as c2 /\ c3 -> Element of StoneS a1;
coherence
c2 /\ c3 is Element of StoneS c1
proof end;
end;

definition
let c1 be D_Lattice;
func Set_Union c1 -> BinOp of StoneS a1 means :Def9: :: OPENLATT:def 9
for b1, b2 being Element of StoneS a1 holds a2 . b1,b2 = b1 \/ b2;
existence
ex b1 being BinOp of StoneS c1 st
for b2, b3 being Element of StoneS c1 holds b1 . b2,b3 = b2 \/ b3
proof end;
uniqueness
for b1, b2 being BinOp of StoneS c1 st ( for b3, b4 being Element of StoneS c1 holds b1 . b3,b4 = b3 \/ b4 ) & ( for b3, b4 being Element of StoneS c1 holds b2 . b3,b4 = b3 \/ b4 ) holds
b1 = b2
proof end;
func Set_Meet c1 -> BinOp of StoneS a1 means :Def10: :: OPENLATT:def 10
for b1, b2 being Element of StoneS a1 holds a2 . b1,b2 = b1 /\ b2;
existence
ex b1 being BinOp of StoneS c1 st
for b2, b3 being Element of StoneS c1 holds b1 . b2,b3 = b2 /\ b3
proof end;
uniqueness
for b1, b2 being BinOp of StoneS c1 st ( for b3, b4 being Element of StoneS c1 holds b1 . b3,b4 = b3 /\ b4 ) & ( for b3, b4 being Element of StoneS c1 holds b2 . b3,b4 = b3 /\ b4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def9 defines Set_Union OPENLATT:def 9 :
for b1 being D_Lattice
for b2 being BinOp of StoneS b1 holds
( b2 = Set_Union b1 iff for b3, b4 being Element of StoneS b1 holds b2 . b3,b4 = b3 \/ b4 );

:: deftheorem Def10 defines Set_Meet OPENLATT:def 10 :
for b1 being D_Lattice
for b2 being BinOp of StoneS b1 holds
( b2 = Set_Meet b1 iff for b3, b4 being Element of StoneS b1 holds b2 . b3,b4 = b3 /\ b4 );

Lemma33: for b1 being D_Lattice
for b2, b3 being Element of LattStr(# (StoneS b1),(Set_Union b1),(Set_Meet b1) #) holds b2 "\/" b3 = b2 \/ b3
by Def9;

Lemma34: for b1 being D_Lattice
for b2, b3 being Element of LattStr(# (StoneS b1),(Set_Union b1),(Set_Meet b1) #) holds b2 "/\" b3 = b2 /\ b3
by Def10;

theorem Th26: :: OPENLATT:26
for b1 being D_Lattice holds LattStr(# (StoneS b1),(Set_Union b1),(Set_Meet b1) #) is Lattice
proof end;

definition
let c1 be D_Lattice;
func StoneLatt c1 -> Lattice equals :: OPENLATT:def 11
LattStr(# (StoneS a1),(Set_Union a1),(Set_Meet a1) #);
coherence
LattStr(# (StoneS c1),(Set_Union c1),(Set_Meet c1) #) is Lattice
by Th26;
end;

:: deftheorem Def11 defines StoneLatt OPENLATT:def 11 :
for b1 being D_Lattice holds StoneLatt b1 = LattStr(# (StoneS b1),(Set_Union b1),(Set_Meet b1) #);

theorem Th27: :: OPENLATT:27
for b1 being D_Lattice holds the carrier of (StoneLatt b1) = StoneS b1 ;

theorem Th28: :: OPENLATT:28
for b1 being D_Lattice
for b2, b3 being Element of (StoneLatt b1) holds
( b2 "\/" b3 = b2 \/ b3 & b2 "/\" b3 = b2 /\ b3 ) by Lemma33, Lemma34;

theorem Th29: :: OPENLATT:29
for b1 being D_Lattice
for b2, b3 being Element of (StoneLatt b1) holds
( b2 [= b3 iff b2 c= b3 )
proof end;

definition
let c1 be D_Lattice;
redefine func StoneH as StoneH c1 -> Homomorphism of a1, StoneLatt a1;
coherence
StoneH c1 is Homomorphism of c1, StoneLatt c1
proof end;
end;

theorem Th30: :: OPENLATT:30
for b1 being D_Lattice holds StoneH b1 is isomorphism
proof end;

theorem Th31: :: OPENLATT:31
for b1 being D_Lattice holds StoneLatt b1 is distributive
proof end;

theorem Th32: :: OPENLATT:32
for b1 being D_Lattice holds b1, StoneLatt b1 are_isomorphic
proof end;

registration
cluster upper-bounded non trivial LattStr ;
existence
not for b1 being H_Lattice holds b1 is trivial
proof end;
end;

theorem Th33: :: OPENLATT:33
for b1 being non trivial H_Lattice holds (StoneH b1) . (Top b1) = F_primeSet b1
proof end;

theorem Th34: :: OPENLATT:34
for b1 being non trivial H_Lattice holds (StoneH b1) . (Bottom b1) = {}
proof end;

theorem Th35: :: OPENLATT:35
for b1 being non trivial H_Lattice holds StoneS b1 c= bool (F_primeSet b1)
proof end;

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

definition
let c1 be non trivial H_Lattice;
func HTopSpace c1 -> strict TopStruct means :Def12: :: OPENLATT:def 12
( the carrier of a2 = F_primeSet a1 & the topology of a2 = { (union b1) where B is Subset of (StoneS a1) : verum } );
existence
ex b1 being strict TopStruct st
( the carrier of b1 = F_primeSet c1 & the topology of b1 = { (union b2) where B is Subset of (StoneS c1) : verum } )
proof end;
uniqueness
for b1, b2 being strict TopStruct st the carrier of b1 = F_primeSet c1 & the topology of b1 = { (union b3) where B is Subset of (StoneS c1) : verum } & the carrier of b2 = F_primeSet c1 & the topology of b2 = { (union b3) where B is Subset of (StoneS c1) : verum } holds
b1 = b2
;
end;

:: deftheorem Def12 defines HTopSpace OPENLATT:def 12 :
for b1 being non trivial H_Lattice
for b2 being strict TopStruct holds
( b2 = HTopSpace b1 iff ( the carrier of b2 = F_primeSet b1 & the topology of b2 = { (union b3) where B is Subset of (StoneS b1) : verum } ) );

registration
let c1 be non trivial H_Lattice;
cluster HTopSpace a1 -> non empty strict TopSpace-like ;
coherence
( not HTopSpace c1 is empty & HTopSpace c1 is TopSpace-like )
proof end;
end;

theorem Th36: :: OPENLATT:36
for b1 being non trivial H_Lattice holds the carrier of (Open_setLatt (HTopSpace b1)) = { (union b2) where B is Subset of (StoneS b1) : verum } by Def12;

theorem Th37: :: OPENLATT:37
for b1 being non trivial H_Lattice holds StoneS b1 c= the carrier of (Open_setLatt (HTopSpace b1))
proof end;

definition
let c1 be non trivial H_Lattice;
redefine func StoneH as StoneH c1 -> Homomorphism of a1, Open_setLatt (HTopSpace a1);
coherence
StoneH c1 is Homomorphism of c1, Open_setLatt (HTopSpace c1)
proof end;
end;

theorem Th38: :: OPENLATT:38
for b1 being non trivial H_Lattice holds StoneH b1 is monomorphism
proof end;

theorem Th39: :: OPENLATT:39
for b1 being non trivial H_Lattice
for b2, b3 being Element of b1 holds (StoneH b1) . (b2 => b3) = ((StoneH b1) . b2) => ((StoneH b1) . b3)
proof end;

theorem Th40: :: OPENLATT:40
for b1 being non trivial H_Lattice holds StoneH b1 preserves_implication
proof end;

theorem Th41: :: OPENLATT:41
for b1 being non trivial H_Lattice holds StoneH b1 preserves_top
proof end;

theorem Th42: :: OPENLATT:42
for b1 being non trivial H_Lattice holds StoneH b1 preserves_bottom
proof end;