:: QUANTAL1 semantic presentation

scheme :: QUANTAL1:sch 1
s1{ F1() -> non empty set , F2() -> non empty set , F3( set ) -> set , F4( set ) -> Element of F2(), P1[ set ] } :
{ F3(b1) where B is Element of F2() : b1 in { F4(b2) where B is Element of F1() : P1[b2] } } = { F3(F4(b1)) where B is Element of F1() : P1[b1] }
proof end;

scheme :: QUANTAL1:sch 2
s2{ F1() -> non empty set , F2( set ) -> set , P1[ set ] } :
{ F2(b1) where B is Element of F1() : P1[b1] } = {}
provided
E1: for b1 being Element of F1() holds P1[b1]
proof end;

deffunc H1( non empty LattStr ) -> set = the carrier of a1;

deffunc H2( LattStr ) -> M5([:the carrier of a1,the carrier of a1:],the carrier of a1) = the L_join of a1;

deffunc H3( LattStr ) -> M5([:the carrier of a1,the carrier of a1:],the carrier of a1) = the L_meet of a1;

deffunc H4( HGrStr ) -> M5([:the carrier of a1,the carrier of a1:],the carrier of a1) = the mult of a1;

theorem Th1: :: QUANTAL1:1
for b1, b2 being non empty LattStr st LattStr(# the carrier of b1,the L_join of b1,the L_meet of b1 #) = LattStr(# the carrier of b2,the L_join of b2,the L_meet of b2 #) holds
for b3, b4 being Element of b1
for b5, b6 being Element of b2 st b3 = b5 & b4 = b6 holds
( b3 "\/" b4 = b5 "\/" b6 & b3 "/\" b4 = b5 "/\" b6 & ( b3 [= b4 implies b5 [= b6 ) & ( b5 [= b6 implies b3 [= b4 ) )
proof end;

theorem Th2: :: QUANTAL1:2
for b1, b2 being non empty LattStr st LattStr(# the carrier of b1,the L_join of b1,the L_meet of b1 #) = LattStr(# the carrier of b2,the L_join of b2,the L_meet of b2 #) holds
for b3 being Element of b1
for b4 being Element of b2
for b5 being set st b3 = b4 holds
( ( b3 is_less_than b5 implies b4 is_less_than b5 ) & ( b4 is_less_than b5 implies b3 is_less_than b5 ) & ( b3 is_great_than b5 implies b4 is_great_than b5 ) & ( b4 is_great_than b5 implies b3 is_great_than b5 ) )
proof end;

definition
let c1 be 1-sorted ;
mode UnOp of a1 is Function of a1,a1;
end;

definition
let c1 be non empty LattStr ;
let c2 be Subset of c1;
attr a2 is directed means :: QUANTAL1:def 1
for b1 being finite Subset of a2 ex b2 being Element of a1 st
( "\/" b1,a1 [= b2 & b2 in a2 );
end;

:: deftheorem Def1 defines directed QUANTAL1:def 1 :
for b1 being non empty LattStr
for b2 being Subset of b1 holds
( b2 is directed iff for b3 being finite Subset of b2 ex b4 being Element of b1 st
( "\/" b3,b1 [= b4 & b4 in b2 ) );

theorem Th3: :: QUANTAL1:3
for b1 being non empty LattStr
for b2 being Subset of b1 st b2 is directed holds
not b2 is empty
proof end;

definition
attr a1 is strict;
struct QuantaleStr -> LattStr , HGrStr ;
aggr QuantaleStr(# carrier, L_join, L_meet, mult #) -> QuantaleStr ;
end;

registration
cluster non empty QuantaleStr ;
existence
not for b1 being QuantaleStr holds b1 is empty
proof end;
end;

definition
attr a1 is strict;
struct QuasiNetStr -> QuantaleStr , multLoopStr ;
aggr QuasiNetStr(# carrier, L_join, L_meet, mult, unity #) -> QuasiNetStr ;
end;

registration
cluster non empty QuasiNetStr ;
existence
not for b1 being QuasiNetStr holds b1 is empty
proof end;
end;

definition
let c1 be non empty HGrStr ;
attr a1 is with_left-zero means :: QUANTAL1:def 2
ex b1 being Element of a1 st
for b2 being Element of a1 holds b1 * b2 = b1;
attr a1 is with_right-zero means :: QUANTAL1:def 3
ex b1 being Element of a1 st
for b2 being Element of a1 holds b2 * b1 = b1;
end;

:: deftheorem Def2 defines with_left-zero QUANTAL1:def 2 :
for b1 being non empty HGrStr holds
( b1 is with_left-zero iff ex b2 being Element of b1 st
for b3 being Element of b1 holds b2 * b3 = b2 );

:: deftheorem Def3 defines with_right-zero QUANTAL1:def 3 :
for b1 being non empty HGrStr holds
( b1 is with_right-zero iff ex b2 being Element of b1 st
for b3 being Element of b1 holds b3 * b2 = b2 );

definition
let c1 be non empty HGrStr ;
attr a1 is with_zero means :Def4: :: QUANTAL1:def 4
( a1 is with_left-zero & a1 is with_right-zero );
end;

:: deftheorem Def4 defines with_zero QUANTAL1:def 4 :
for b1 being non empty HGrStr holds
( b1 is with_zero iff ( b1 is with_left-zero & b1 is with_right-zero ) );

registration
cluster non empty with_zero -> non empty with_left-zero with_right-zero HGrStr ;
coherence
for b1 being non empty HGrStr st b1 is with_zero holds
( b1 is with_left-zero & b1 is with_right-zero )
by Def4;
cluster non empty with_left-zero with_right-zero -> non empty with_zero HGrStr ;
coherence
for b1 being non empty HGrStr st b1 is with_left-zero & b1 is with_right-zero holds
b1 is with_zero
by Def4;
end;

registration
cluster non empty with_left-zero with_right-zero with_zero HGrStr ;
existence
ex b1 being non empty HGrStr st b1 is with_zero
proof end;
end;

definition
let c1 be non empty QuantaleStr ;
attr a1 is right-distributive means :Def5: :: QUANTAL1:def 5
for b1 being Element of a1
for b2 being set holds b1 [*] ("\/" b2,a1) = "\/" { (b1 [*] b3) where B is Element of a1 : b3 in b2 } ,a1;
attr a1 is left-distributive means :Def6: :: QUANTAL1:def 6
for b1 being Element of a1
for b2 being set holds ("\/" b2,a1) [*] b1 = "\/" { (b3 [*] b1) where B is Element of a1 : b3 in b2 } ,a1;
attr a1 is times-additive means :: QUANTAL1:def 7
for b1, b2, b3 being Element of a1 holds
( (b1 "\/" b2) [*] b3 = (b1 [*] b3) "\/" (b2 [*] b3) & b3 [*] (b1 "\/" b2) = (b3 [*] b1) "\/" (b3 [*] b2) );
attr a1 is times-continuous means :: QUANTAL1:def 8
for b1, b2 being Subset of a1 st b1 is directed & b2 is directed holds
("\/" b1) [*] ("\/" b2) = "\/" { (b3 [*] b4) where B is Element of a1, B is Element of a1 : ( b3 in b1 & b4 in b2 ) } ,a1;
end;

:: deftheorem Def5 defines right-distributive QUANTAL1:def 5 :
for b1 being non empty QuantaleStr holds
( b1 is right-distributive iff for b2 being Element of b1
for b3 being set holds b2 [*] ("\/" b3,b1) = "\/" { (b2 [*] b4) where B is Element of b1 : b4 in b3 } ,b1 );

:: deftheorem Def6 defines left-distributive QUANTAL1:def 6 :
for b1 being non empty QuantaleStr holds
( b1 is left-distributive iff for b2 being Element of b1
for b3 being set holds ("\/" b3,b1) [*] b2 = "\/" { (b4 [*] b2) where B is Element of b1 : b4 in b3 } ,b1 );

:: deftheorem Def7 defines times-additive QUANTAL1:def 7 :
for b1 being non empty QuantaleStr holds
( b1 is times-additive iff for b2, b3, b4 being Element of b1 holds
( (b2 "\/" b3) [*] b4 = (b2 [*] b4) "\/" (b3 [*] b4) & b4 [*] (b2 "\/" b3) = (b4 [*] b2) "\/" (b4 [*] b3) ) );

:: deftheorem Def8 defines times-continuous QUANTAL1:def 8 :
for b1 being non empty QuantaleStr holds
( b1 is times-continuous iff for b2, b3 being Subset of b1 st b2 is directed & b3 is directed holds
("\/" b2) [*] ("\/" b3) = "\/" { (b4 [*] b5) where B is Element of b1, B is Element of b1 : ( b4 in b2 & b5 in b3 ) } ,b1 );

theorem Th4: :: QUANTAL1:4
for b1 being non empty QuantaleStr st LattStr(# the carrier of b1,the L_join of b1,the L_meet of b1 #) = BooleLatt {} holds
( b1 is associative & b1 is commutative & b1 is unital & b1 is with_zero & b1 is complete & b1 is right-distributive & b1 is left-distributive & b1 is Lattice-like )
proof end;

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

registration
cluster non empty Lattice-like complete unital associative commutative with_left-zero with_right-zero with_zero right-distributive left-distributive QuantaleStr ;
existence
ex b1 being non empty QuantaleStr st
( b1 is associative & b1 is commutative & b1 is unital & b1 is with_zero & b1 is left-distributive & b1 is right-distributive & b1 is complete & b1 is Lattice-like )
proof end;
end;

scheme :: QUANTAL1:sch 3
s3{ F1() -> non empty Lattice-like complete QuantaleStr , F2( set , set ) -> Element of F1(), F3() -> set , F4() -> set } :
"\/" { ("\/" { F2(b1,b2) where B is Element of F1() : b2 in F4() } ,F1()) where B is Element of F1() : b1 in F3() } ,F1() = "\/" { F2(b1,b2) where B is Element of F1(), B is Element of F1() : ( b1 in F3() & b2 in F4() ) } ,F1()
proof end;

theorem Th5: :: QUANTAL1:5
for b1 being non empty Lattice-like complete right-distributive left-distributive QuantaleStr
for b2, b3 being set holds ("\/" b2,b1) [*] ("\/" b3,b1) = "\/" { (b4 [*] b5) where B is Element of b1, B is Element of b1 : ( b4 in b2 & b5 in b3 ) } ,b1
proof end;

theorem Th6: :: QUANTAL1:6
for b1 being non empty Lattice-like complete right-distributive left-distributive QuantaleStr
for b2, b3, b4 being Element of b1 holds
( (b2 "\/" b3) [*] b4 = (b2 [*] b4) "\/" (b3 [*] b4) & b4 [*] (b2 "\/" b3) = (b4 [*] b2) "\/" (b4 [*] b3) )
proof end;

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

registration
cluster non empty Lattice-like complete QuasiNetStr ;
existence
ex b1 being non empty QuasiNetStr st
( b1 is complete & b1 is Lattice-like )
proof end;
end;

registration
cluster non empty Lattice-like complete right-distributive left-distributive -> non empty Lattice-like complete times-additive times-continuous QuasiNetStr ;
coherence
for b1 being non empty Lattice-like complete QuasiNetStr st b1 is left-distributive & b1 is right-distributive holds
( b1 is times-continuous & b1 is times-additive )
proof end;
end;

registration
cluster non empty Lattice-like complete unital associative commutative with_left-zero with_right-zero with_zero right-distributive left-distributive times-additive times-continuous QuasiNetStr ;
existence
ex b1 being non empty QuasiNetStr st
( b1 is associative & b1 is commutative & b1 is unital & b1 is with_zero & b1 is with_left-zero & b1 is left-distributive & b1 is right-distributive & b1 is complete & b1 is Lattice-like )
proof end;
end;

definition
mode Quantale is non empty Lattice-like complete associative right-distributive left-distributive QuantaleStr ;
mode QuasiNet is non empty Lattice-like complete unital associative with_left-zero times-additive times-continuous QuasiNetStr ;
end;

definition
mode BlikleNet is non empty with_zero QuasiNet;
end;

theorem Th7: :: QUANTAL1:7
for b1 being non empty unital QuasiNetStr st b1 is Quantale holds
b1 is BlikleNet
proof end;

theorem Th8: :: QUANTAL1:8
for b1 being Quantale
for b2, b3, b4 being Element of b1 st b2 [= b3 holds
( b2 [*] b4 [= b3 [*] b4 & b4 [*] b2 [= b4 [*] b3 )
proof end;

theorem Th9: :: QUANTAL1:9
for b1 being Quantale
for b2, b3, b4, b5 being Element of b1 st b2 [= b3 & b4 [= b5 holds
b2 [*] b4 [= b3 [*] b5
proof end;

definition
let c1 be Function;
attr a1 is idempotent means :: QUANTAL1:def 9
a1 * a1 = a1;
end;

:: deftheorem Def9 defines idempotent QUANTAL1:def 9 :
for b1 being Function holds
( b1 is idempotent iff b1 * b1 = b1 );

Lemma11: for b1 being non empty set
for b2 being UnOp of b1 st b2 is idempotent holds
for b3 being Element of b1 holds b2 . (b2 . b3) = b2 . b3
proof end;

definition
let c1 be non empty LattStr ;
let c2 be UnOp of c1;
attr a2 is inflationary means :: QUANTAL1:def 10
for b1 being Element of a1 holds b1 [= a2 . b1;
attr a2 is deflationary means :: QUANTAL1:def 11
for b1 being Element of a1 holds a2 . b1 [= b1;
attr a2 is monotone means :Def12: :: QUANTAL1:def 12
for b1, b2 being Element of a1 st b1 [= b2 holds
a2 . b1 [= a2 . b2;
attr a2 is \/-distributive means :: QUANTAL1:def 13
for b1 being Subset of a1 holds a2 . ("\/" b1) [= "\/" { (a2 . b2) where B is Element of a1 : b2 in b1 } ,a1;
end;

:: deftheorem Def10 defines inflationary QUANTAL1:def 10 :
for b1 being non empty LattStr
for b2 being UnOp of b1 holds
( b2 is inflationary iff for b3 being Element of b1 holds b3 [= b2 . b3 );

:: deftheorem Def11 defines deflationary QUANTAL1:def 11 :
for b1 being non empty LattStr
for b2 being UnOp of b1 holds
( b2 is deflationary iff for b3 being Element of b1 holds b2 . b3 [= b3 );

:: deftheorem Def12 defines monotone QUANTAL1:def 12 :
for b1 being non empty LattStr
for b2 being UnOp of b1 holds
( b2 is monotone iff for b3, b4 being Element of b1 st b3 [= b4 holds
b2 . b3 [= b2 . b4 );

:: deftheorem Def13 defines \/-distributive QUANTAL1:def 13 :
for b1 being non empty LattStr
for b2 being UnOp of b1 holds
( b2 is \/-distributive iff for b3 being Subset of b1 holds b2 . ("\/" b3) [= "\/" { (b2 . b4) where B is Element of b1 : b4 in b3 } ,b1 );

registration
let c1 be Lattice;
cluster inflationary deflationary monotone M4(the carrier of a1,the carrier of a1);
existence
ex b1 being UnOp of c1 st
( b1 is inflationary & b1 is deflationary & b1 is monotone )
proof end;
end;

theorem Th10: :: QUANTAL1:10
for b1 being complete Lattice
for b2 being UnOp of b1 st b2 is monotone holds
( b2 is \/-distributive iff for b3 being Subset of b1 holds b2 . ("\/" b3) = "\/" { (b2 . b4) where B is Element of b1 : b4 in b3 } ,b1 )
proof end;

definition
let c1 be non empty QuantaleStr ;
let c2 be UnOp of c1;
attr a2 is times-monotone means :: QUANTAL1:def 14
for b1, b2 being Element of a1 holds (a2 . b1) [*] (a2 . b2) [= a2 . (b1 [*] b2);
end;

:: deftheorem Def14 defines times-monotone QUANTAL1:def 14 :
for b1 being non empty QuantaleStr
for b2 being UnOp of b1 holds
( b2 is times-monotone iff for b3, b4 being Element of b1 holds (b2 . b3) [*] (b2 . b4) [= b2 . (b3 [*] b4) );

definition
let c1 be non empty QuantaleStr ;
let c2, c3 be Element of c1;
func c2 -r> c3 -> Element of a1 equals :: QUANTAL1:def 15
"\/" { b1 where B is Element of a1 : b1 [*] a2 [= a3 } ,a1;
correctness
coherence
"\/" { b1 where B is Element of c1 : b1 [*] c2 [= c3 } ,c1 is Element of c1
;
;
func c2 -l> c3 -> Element of a1 equals :: QUANTAL1:def 16
"\/" { b1 where B is Element of a1 : a2 [*] b1 [= a3 } ,a1;
correctness
coherence
"\/" { b1 where B is Element of c1 : c2 [*] b1 [= c3 } ,c1 is Element of c1
;
;
end;

:: deftheorem Def15 defines -r> QUANTAL1:def 15 :
for b1 being non empty QuantaleStr
for b2, b3 being Element of b1 holds b2 -r> b3 = "\/" { b4 where B is Element of b1 : b4 [*] b2 [= b3 } ,b1;

:: deftheorem Def16 defines -l> QUANTAL1:def 16 :
for b1 being non empty QuantaleStr
for b2, b3 being Element of b1 holds b2 -l> b3 = "\/" { b4 where B is Element of b1 : b2 [*] b4 [= b3 } ,b1;

theorem Th11: :: QUANTAL1:11
for b1 being Quantale
for b2, b3, b4 being Element of b1 holds
( b2 [*] b3 [= b4 iff b3 [= b2 -l> b4 )
proof end;

theorem Th12: :: QUANTAL1:12
for b1 being Quantale
for b2, b3, b4 being Element of b1 holds
( b2 [*] b3 [= b4 iff b2 [= b3 -r> b4 )
proof end;

theorem Th13: :: QUANTAL1:13
for b1 being Quantale
for b2, b3, b4 being Element of b1 st b3 [= b4 holds
( b4 -r> b2 [= b3 -r> b2 & b4 -l> b2 [= b3 -l> b2 )
proof end;

theorem Th14: :: QUANTAL1:14
for b1 being Quantale
for b2 being Element of b1
for b3 being UnOp of b1 st ( for b4 being Element of b1 holds b3 . b4 = (b4 -r> b2) -r> b2 ) holds
b3 is monotone
proof end;

definition
let c1 be non empty QuantaleStr ;
let c2 be Element of c1;
attr a2 is dualizing means :Def17: :: QUANTAL1:def 17
for b1 being Element of a1 holds
( (b1 -r> a2) -l> a2 = b1 & (b1 -l> a2) -r> a2 = b1 );
attr a2 is cyclic means :Def18: :: QUANTAL1:def 18
for b1 being Element of a1 holds b1 -r> a2 = b1 -l> a2;
end;

:: deftheorem Def17 defines dualizing QUANTAL1:def 17 :
for b1 being non empty QuantaleStr
for b2 being Element of b1 holds
( b2 is dualizing iff for b3 being Element of b1 holds
( (b3 -r> b2) -l> b2 = b3 & (b3 -l> b2) -r> b2 = b3 ) );

:: deftheorem Def18 defines cyclic QUANTAL1:def 18 :
for b1 being non empty QuantaleStr
for b2 being Element of b1 holds
( b2 is cyclic iff for b3 being Element of b1 holds b3 -r> b2 = b3 -l> b2 );

theorem Th15: :: QUANTAL1:15
for b1 being Quantale
for b2 being Element of b1 holds
( b2 is cyclic iff for b3, b4 being Element of b1 st b3 [*] b4 [= b2 holds
b4 [*] b3 [= b2 )
proof end;

theorem Th16: :: QUANTAL1:16
for b1 being Quantale
for b2, b3 being Element of b1 st b2 is cyclic holds
( b3 [= (b3 -r> b2) -r> b2 & b3 [= (b3 -l> b2) -l> b2 )
proof end;

theorem Th17: :: QUANTAL1:17
for b1 being Quantale
for b2, b3 being Element of b1 st b2 is cyclic holds
( b3 -r> b2 = ((b3 -r> b2) -r> b2) -r> b2 & b3 -l> b2 = ((b3 -l> b2) -l> b2) -l> b2 )
proof end;

theorem Th18: :: QUANTAL1:18
for b1 being Quantale
for b2, b3, b4 being Element of b1 st b2 is cyclic holds
((b3 -r> b2) -r> b2) [*] ((b4 -r> b2) -r> b2) [= ((b3 [*] b4) -r> b2) -r> b2
proof end;

theorem Th19: :: QUANTAL1:19
for b1 being Quantale
for b2 being Element of b1 st b2 is dualizing holds
( b1 is unital & the_unity_wrt the mult of b1 = b2 -r> b2 & the_unity_wrt the mult of b1 = b2 -l> b2 )
proof end;

theorem Th20: :: QUANTAL1:20
for b1 being Quantale
for b2, b3, b4 being Element of b1 st b2 is dualizing holds
( b3 -r> b4 = (b3 [*] (b4 -l> b2)) -r> b2 & b3 -l> b4 = ((b4 -r> b2) [*] b3) -l> b2 )
proof end;

definition
attr a1 is strict;
struct Girard-QuantaleStr -> QuasiNetStr ;
aggr Girard-QuantaleStr(# carrier, L_join, L_meet, mult, unity, absurd #) -> Girard-QuantaleStr ;
sel absurd c1 -> Element of the carrier of a1;
end;

registration
cluster non empty Girard-QuantaleStr ;
existence
not for b1 being Girard-QuantaleStr holds b1 is empty
proof end;
end;

definition
let c1 be non empty Girard-QuantaleStr ;
attr a1 is cyclic means :Def19: :: QUANTAL1:def 19
the absurd of a1 is cyclic;
attr a1 is dualized means :Def20: :: QUANTAL1:def 20
the absurd of a1 is dualizing;
end;

:: deftheorem Def19 defines cyclic QUANTAL1:def 19 :
for b1 being non empty Girard-QuantaleStr holds
( b1 is cyclic iff the absurd of b1 is cyclic );

:: deftheorem Def20 defines dualized QUANTAL1:def 20 :
for b1 being non empty Girard-QuantaleStr holds
( b1 is dualized iff the absurd of b1 is dualizing );

theorem Th21: :: QUANTAL1:21
for b1 being non empty Girard-QuantaleStr st LattStr(# the carrier of b1,the L_join of b1,the L_meet of b1 #) = BooleLatt {} holds
( b1 is cyclic & b1 is dualized )
proof end;

registration
let c1 be non empty set ;
let c2, c3, c4 be BinOp of c1;
let c5, c6 be Element of c1;
cluster Girard-QuantaleStr(# a1,a2,a3,a4,a5,a6 #) -> non empty ;
coherence
not Girard-QuantaleStr(# c1,c2,c3,c4,c5,c6 #) is empty
by STRUCT_0:def 1;
end;

registration
cluster non empty Lattice-like complete unital associative commutative right-distributive left-distributive times-additive times-continuous strict cyclic dualized Girard-QuantaleStr ;
existence
ex b1 being non empty Girard-QuantaleStr st
( b1 is associative & b1 is commutative & b1 is unital & b1 is left-distributive & b1 is right-distributive & b1 is complete & b1 is Lattice-like & b1 is cyclic & b1 is dualized & b1 is strict )
proof end;
end;

definition
mode Girard-Quantale is non empty Lattice-like complete unital associative right-distributive left-distributive cyclic dualized Girard-QuantaleStr ;
end;

definition
let c1 be Girard-QuantaleStr ;
func Bottom c1 -> Element of a1 equals :: QUANTAL1:def 21
the absurd of a1;
correctness
coherence
the absurd of c1 is Element of c1
;
;
end;

:: deftheorem Def21 defines Bottom QUANTAL1:def 21 :
for b1 being Girard-QuantaleStr holds Bottom b1 = the absurd of b1;

definition
let c1 be non empty Girard-QuantaleStr ;
func Top c1 -> Element of a1 equals :: QUANTAL1:def 22
(Bottom a1) -r> (Bottom a1);
correctness
coherence
(Bottom c1) -r> (Bottom c1) is Element of c1
;
;
let c2 be Element of c1;
func Bottom c2 -> Element of a1 equals :: QUANTAL1:def 23
a2 -r> (Bottom a1);
correctness
coherence
c2 -r> (Bottom c1) is Element of c1
;
;
end;

:: deftheorem Def22 defines Top QUANTAL1:def 22 :
for b1 being non empty Girard-QuantaleStr holds Top b1 = (Bottom b1) -r> (Bottom b1);

:: deftheorem Def23 defines Bottom QUANTAL1:def 23 :
for b1 being non empty Girard-QuantaleStr
for b2 being Element of b1 holds Bottom b2 = b2 -r> (Bottom b1);

definition
let c1 be non empty Girard-QuantaleStr ;
func Negation c1 -> UnOp of a1 means :: QUANTAL1:def 24
for b1 being Element of a1 holds a2 . b1 = Bottom b1;
existence
ex b1 being UnOp of c1 st
for b2 being Element of c1 holds b1 . b2 = Bottom b2
proof end;
uniqueness
for b1, b2 being UnOp of c1 st ( for b3 being Element of c1 holds b1 . b3 = Bottom b3 ) & ( for b3 being Element of c1 holds b2 . b3 = Bottom b3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def24 defines Negation QUANTAL1:def 24 :
for b1 being non empty Girard-QuantaleStr
for b2 being UnOp of b1 holds
( b2 = Negation b1 iff for b3 being Element of b1 holds b2 . b3 = Bottom b3 );

definition
let c1 be non empty Girard-QuantaleStr ;
let c2 be UnOp of c1;
func Bottom c2 -> UnOp of a1 equals :: QUANTAL1:def 25
(Negation a1) * a2;
correctness
coherence
(Negation c1) * c2 is UnOp of c1
;
;
end;

:: deftheorem Def25 defines Bottom QUANTAL1:def 25 :
for b1 being non empty Girard-QuantaleStr
for b2 being UnOp of b1 holds Bottom b2 = (Negation b1) * b2;

definition
let c1 be non empty Girard-QuantaleStr ;
let c2 be BinOp of c1;
func Bottom c2 -> BinOp of a1 equals :: QUANTAL1:def 26
(Negation a1) * a2;
correctness
coherence
(Negation c1) * c2 is BinOp of c1
;
;
end;

:: deftheorem Def26 defines Bottom QUANTAL1:def 26 :
for b1 being non empty Girard-QuantaleStr
for b2 being BinOp of b1 holds Bottom b2 = (Negation b1) * b2;

theorem Th22: :: QUANTAL1:22
for b1 being Girard-Quantale
for b2 being Element of b1 holds Bottom (Bottom b2) = b2
proof end;

theorem Th23: :: QUANTAL1:23
for b1 being Girard-Quantale
for b2, b3 being Element of b1 st b2 [= b3 holds
Bottom b3 [= Bottom b2 by Th13;

theorem Th24: :: QUANTAL1:24
for b1 being Girard-Quantale
for b2 being set holds Bottom ("\/" b2,b1) = "/\" { (Bottom b3) where B is Element of b1 : b3 in b2 } ,b1
proof end;

theorem Th25: :: QUANTAL1:25
for b1 being Girard-Quantale
for b2 being set holds Bottom ("/\" b2,b1) = "\/" { (Bottom b3) where B is Element of b1 : b3 in b2 } ,b1
proof end;

theorem Th26: :: QUANTAL1:26
for b1 being Girard-Quantale
for b2, b3 being Element of b1 holds
( Bottom (b2 "\/" b3) = (Bottom b2) "/\" (Bottom b3) & Bottom (b2 "/\" b3) = (Bottom b2) "\/" (Bottom b3) )
proof end;

definition
let c1 be Girard-Quantale;
let c2, c3 be Element of c1;
func c2 delta c3 -> Element of a1 equals :: QUANTAL1:def 27
Bottom ((Bottom a2) [*] (Bottom a3));
correctness
coherence
Bottom ((Bottom c2) [*] (Bottom c3)) is Element of c1
;
;
end;

:: deftheorem Def27 defines delta QUANTAL1:def 27 :
for b1 being Girard-Quantale
for b2, b3 being Element of b1 holds b2 delta b3 = Bottom ((Bottom b2) [*] (Bottom b3));

theorem Th27: :: QUANTAL1:27
for b1 being Girard-Quantale
for b2 being Element of b1
for b3 being set holds
( b2 [*] ("\/" b3,b1) = "\/" { (b2 [*] b4) where B is Element of b1 : b4 in b3 } ,b1 & b2 delta ("/\" b3,b1) = "/\" { (b2 delta b4) where B is Element of b1 : b4 in b3 } ,b1 )
proof end;

theorem Th28: :: QUANTAL1:28
for b1 being Girard-Quantale
for b2 being Element of b1
for b3 being set holds
( ("\/" b3,b1) [*] b2 = "\/" { (b4 [*] b2) where B is Element of b1 : b4 in b3 } ,b1 & ("/\" b3,b1) delta b2 = "/\" { (b4 delta b2) where B is Element of b1 : b4 in b3 } ,b1 )
proof end;

theorem Th29: :: QUANTAL1:29
for b1 being Girard-Quantale
for b2, b3, b4 being Element of b1 holds
( b2 delta (b3 "/\" b4) = (b2 delta b3) "/\" (b2 delta b4) & (b3 "/\" b4) delta b2 = (b3 delta b2) "/\" (b4 delta b2) )
proof end;

theorem Th30: :: QUANTAL1:30
for b1 being Girard-Quantale
for b2, b3, b4, b5 being Element of b1 st b2 [= b3 & b4 [= b5 holds
b2 delta b4 [= b3 delta b5
proof end;

theorem Th31: :: QUANTAL1:31
for b1 being Girard-Quantale
for b2, b3, b4 being Element of b1 holds (b2 delta b3) delta b4 = b2 delta (b3 delta b4)
proof end;

theorem Th32: :: QUANTAL1:32
for b1 being Girard-Quantale
for b2 being Element of b1 holds
( b2 [*] (Top b1) = b2 & (Top b1) [*] b2 = b2 )
proof end;

theorem Th33: :: QUANTAL1:33
for b1 being Girard-Quantale
for b2 being Element of b1 holds
( b2 delta (Bottom b1) = b2 & (Bottom b1) delta b2 = b2 )
proof end;

theorem Th34: :: QUANTAL1:34
for b1 being Quantale
for b2 being UnOp of b1 st b2 is monotone & b2 is idempotent & b2 is \/-distributive holds
ex b3 being complete Lattice st
( the carrier of b3 = rng b2 & ( for b4 being Subset of b3 holds "\/" b4 = b2 . ("\/" b4,b1) ) )
proof end;