:: Quantales
:: by Grzegorz Bancerek
::
:: Received May 9, 1994
:: Copyright (c) 1994-2017 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 XBOOLE_0, SUBSET_1, TARSKI, LATTICES, STRUCT_0, ALGSTR_0,
EQREL_1, PBOOLE, LATTICE3, BINOP_1, FUNCT_1, WAYBEL_0, FINSET_1, RELAT_1,
VECTSP_1, FINSEQ_1, GROUP_1, REWRITE1, SETWISEO, ZFMISC_1, SEQM_3,
GRAPH_1, FUNCT_3, SETFAM_1, QUANTAL1;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, SETFAM_1, FUNCT_1, RELSET_1,
SETWISEO, PARTFUN1, FUNCT_2, BINOP_1, STRUCT_0, ALGSTR_0, FINSET_1,
DOMAIN_1, LATTICES, LATTICE3, MONOID_0;
constructors SETFAM_1, BINOP_1, DOMAIN_1, SETWISEO, VECTSP_1, LATTICE3,
RELSET_1, GROUP_1;
registrations XBOOLE_0, SUBSET_1, RELAT_1, FUNCT_1, FUNCT_2, FINSET_1,
STRUCT_0, LATTICES, LATTICE3, ALGSTR_0, RELSET_1;
requirements BOOLE, SUBSET;
begin
scheme :: QUANTAL1:sch 1
DenestFraenkel {A()->non empty set, B()->non empty set, F(set)->set, G(set)
->Element of B(), P[set]}: {F(a) where a is Element of B(): a in {G(b) where b
is Element of A(): P[b]}} = {F(G(a)) where a is Element of A(): P[a]};
scheme :: QUANTAL1:sch 2
EmptyFraenkel {A() -> non empty set, f(set) -> set, P[set]}: {f(a) where a
is Element of A(): P[a]} = {}
provided
not ex a being Element of A() st P[a];
theorem :: QUANTAL1:1
for L1,L2 being non empty LattStr st the LattStr of L1 = the
LattStr of L2 for a1,b1 being Element of L1, a2,b2 being Element of L2 st a1 =
a2 & b1 = b2 holds a1"\/"b1 = a2"\/"b2 & a1"/\"b1 = a2"/\"b2 & (a1 [= b1 iff a2
[= b2);
theorem :: QUANTAL1:2
for L1,L2 being non empty LattStr st the LattStr of L1 = the
LattStr of L2 for a being Element of L1, b being Element of L2, X being set st
a = b holds (a is_less_than X iff b is_less_than X) & (a is_greater_than X iff
b is_greater_than X);
definition
let L be non empty LattStr, X be Subset of L;
attr X is directed means
:: QUANTAL1:def 1
for Y being finite Subset of X ex x being Element
of L st "\/"(Y, L) [= x & x in X;
end;
theorem :: QUANTAL1:3
for L being non empty LattStr, X being Subset of L st X is directed
holds X is non empty;
definition
struct (LattStr, multMagma) QuantaleStr (# carrier -> set, L_join, L_meet,
multF -> BinOp of the carrier #);
end;
registration
cluster non empty for QuantaleStr;
end;
definition
struct (QuantaleStr, multLoopStr) QuasiNetStr (# carrier -> set, L_join,
L_meet, multF -> (BinOp of the carrier), OneF -> Element of the carrier #);
end;
registration
cluster non empty for QuasiNetStr;
end;
definition
let IT be non empty multMagma;
attr IT is with_left-zero means
:: QUANTAL1:def 2
ex a being Element of IT st for b being Element of IT holds a*b = a;
attr IT is with_right-zero means
:: QUANTAL1:def 3
ex b being Element of IT st for a being Element of IT holds a*b = b;
end;
definition
let IT be non empty multMagma;
attr IT is with_zero means
:: QUANTAL1:def 4
IT is with_left-zero with_right-zero;
end;
registration
cluster with_zero -> with_left-zero with_right-zero for
non empty multMagma;
cluster with_left-zero with_right-zero -> with_zero for
non empty multMagma;
end;
registration
cluster with_zero for non empty multMagma;
end;
definition
let IT be non empty QuantaleStr;
attr IT is right-distributive means
:: QUANTAL1:def 5
for a being Element of IT, X
being set holds a [*] "\/"(X,IT) = "\/"({a [*] b where b is Element of IT: b in
X},IT);
attr IT is left-distributive means
:: QUANTAL1:def 6
for a being Element of IT, X
being set holds "\/"(X,IT) [*] a = "\/"({b [*] a where b is Element of IT: b in
X},IT);
attr IT is times-additive means
:: QUANTAL1:def 7
for a,b,c being Element of IT holds (a"\/"b)
[*]c = (a[*]c)"\/"(b[*]c) & c[*](a"\/"b) = (c[*]a)"\/"(c[*]b);
attr IT is times-continuous means
:: QUANTAL1:def 8
for X1, X2 being Subset of IT st X1 is
directed & X2 is directed holds ("\/"X1)[*]("\/"X2) = "\/"({a [*] b where a is
Element of IT, b is Element of IT: a in X1 & b in X2},IT);
end;
reserve x,y,z for set;
theorem :: QUANTAL1:4
for Q being non empty QuantaleStr st the LattStr of Q = BooleLatt
{} holds Q is associative commutative unital with_zero complete
right-distributive left-distributive Lattice-like;
registration
let A be non empty set, b1,b2,b3 be BinOp of A;
cluster QuantaleStr(#A,b1,b2,b3#) -> non empty;
end;
registration
cluster associative commutative unital with_zero left-distributive
right-distributive complete Lattice-like for non empty QuantaleStr;
end;
scheme :: QUANTAL1:sch 3
LUBFraenkelDistr {Q() -> complete Lattice-like non empty QuantaleStr, f(
set, set) -> Element of Q(), X, Y() -> set}: "\/"({"\/"({f(a,b) where b is
Element of Q(): b in Y()},Q()) where a is Element of Q(): a in X()}, Q()) =
"\/"({f(a,b) where a is Element of Q(), b is Element of Q(): a in X() & b in Y(
)}, Q());
reserve Q for left-distributive right-distributive complete Lattice-like non
empty QuantaleStr,
a, b, c, d for Element of Q;
theorem :: QUANTAL1:5
for Q for X,Y being set holds "\/"(X,Q) [*] "\/"(Y,Q) = "\/"({a
[*] b: a in X & b in Y}, Q);
theorem :: QUANTAL1:6
(a"\/"b) [*] c = (a [*] c) "\/" (b [*] c) & c [*] (a"\/"b) = (c
[*] a) "\/" (c [*] b);
registration
let A be non empty set, b1,b2,b3 be (BinOp of A), e be Element of A;
cluster QuasiNetStr(#A,b1,b2,b3,e#) -> non empty;
end;
registration
cluster complete Lattice-like for non empty QuasiNetStr;
end;
registration
cluster left-distributive right-distributive -> times-continuous
times-additive for complete Lattice-like non empty QuasiNetStr;
end;
registration
cluster associative commutative unital with_zero with_left-zero
left-distributive right-distributive complete Lattice-like for non empty
QuasiNetStr;
end;
definition
mode Quantale is associative left-distributive right-distributive complete
Lattice-like non empty QuantaleStr;
mode QuasiNet is unital associative with_left-zero times-continuous
times-additive complete Lattice-like non empty QuasiNetStr;
end;
definition
mode BlikleNet is with_zero non empty QuasiNet;
end;
theorem :: QUANTAL1:7
for Q being unital non empty QuasiNetStr st Q is Quantale holds Q is
BlikleNet;
reserve Q for Quantale,
a,a9,b,b9,c,d,d1,d2,D for Element of Q;
theorem :: QUANTAL1:8
a [= b implies a [*] c [= b [*] c & c [*] a [= c [*] b;
theorem :: QUANTAL1:9
a [= b & c [= d implies a [*] c [= b [*] d;
definition
let f be Function;
attr f is idempotent means
:: QUANTAL1:def 9
f * f = f;
end;
definition
let L be non empty LattStr;
let IT be UnOp of L;
attr IT is inflationary means
:: QUANTAL1:def 10
for p being Element of L holds p [= IT.p;
attr IT is deflationary means
:: QUANTAL1:def 11
for p being Element of L holds IT.p [= p;
attr IT is monotone means
:: QUANTAL1:def 12
for p,q being Element of L st p [= q holds IT.p [= IT.q;
attr IT is \/-distributive means
:: QUANTAL1:def 13
for X being Subset of L holds IT."\/"X [=
"\/"({IT.a where a is Element of L: a in X}, L);
end;
registration
let L be Lattice;
cluster inflationary deflationary monotone for UnOp of L;
end;
theorem :: QUANTAL1:10
for L being complete Lattice, j being UnOp of L st j is monotone
holds j is \/-distributive iff for X being Subset of L holds j."\/"X = "\/"({j.
a where a is Element of L: a in X}, L);
definition
let Q be non empty QuantaleStr;
let IT be UnOp of Q;
attr IT is times-monotone means
:: QUANTAL1:def 14
for a,b being Element of Q holds IT.a [*] IT .b [= IT.(a [*] b);
end;
definition
let Q be non empty QuantaleStr, a,b be Element of Q;
func a -r> b -> Element of Q equals
:: QUANTAL1:def 15
"\/"({ c where c is Element of Q: c [*]
a [= b }, Q);
func a -l> b -> Element of Q equals
:: QUANTAL1:def 16
"\/"({ c where c is Element of Q: a [*]
c [= b }, Q);
end;
theorem :: QUANTAL1:11
a [*] b [= c iff b [= a -l> c;
theorem :: QUANTAL1:12
a [*] b [= c iff a [= b -r> c;
theorem :: QUANTAL1:13
for Q being Quantale, s,a,b being Element of Q st a [= b holds b
-r>s [= a-r>s & b-l>s [= a-l>s;
theorem :: QUANTAL1:14
for Q being Quantale, s being Element of Q, j being UnOp of Q st for a
being Element of Q holds j.a = (a-r>s)-r>s holds j is monotone;
definition
let Q be non empty QuantaleStr;
let IT be Element of Q;
attr IT is dualizing means
:: QUANTAL1:def 17
for a being Element of Q holds (a-r>IT) -l>IT = a & (a-l>IT)-r>IT = a;
attr IT is cyclic means
:: QUANTAL1:def 18
for a being Element of Q holds a -r> IT = a -l> IT;
end;
theorem :: QUANTAL1:15
c is cyclic iff for a,b st a [*] b [= c holds b [*] a [= c;
theorem :: QUANTAL1:16
for Q being Quantale, s,a being Element of Q st s is cyclic
holds a [= (a-r>s)-r>s & a [= (a-l>s)-l>s;
theorem :: QUANTAL1:17
for Q being Quantale, s,a being Element of Q st s is cyclic holds a-r>
s = ((a-r>s)-r>s)-r>s & a-l>s = ((a-l>s)-l>s)-l>s;
theorem :: QUANTAL1:18
for Q being Quantale, s,a,b being Element of Q holds ((a-r>s)-r>s)[*](
(b-r>s)-r>s) [= ((a[*]b)-r>s)-r>s;
theorem :: QUANTAL1:19
D is dualizing implies Q is unital & the_unity_wrt the multF of
Q = D -r> D & the_unity_wrt the multF of Q = D -l> D;
theorem :: QUANTAL1:20
a is dualizing implies b -r> c = (b [*] (c -l> a)) -r> a & b -l> c = (
(c -r> a) [*] b) -l> a;
definition
struct (QuasiNetStr) Girard-QuantaleStr (# carrier -> set, L_join, L_meet,
multF -> (BinOp of the carrier), OneF, absurd -> Element of the carrier #);
end;
registration
cluster non empty for Girard-QuantaleStr;
end;
definition
let IT be non empty Girard-QuantaleStr;
attr IT is cyclic means
:: QUANTAL1:def 19
the absurd of IT is cyclic;
attr IT is dualized means
:: QUANTAL1:def 20
the absurd of IT is dualizing;
end;
theorem :: QUANTAL1:21
for Q being non empty Girard-QuantaleStr st the LattStr of Q =
BooleLatt {} holds Q is cyclic dualized;
registration
let A be non empty set, b1,b2,b3 be (BinOp of A), e1,e2 be Element of A;
cluster Girard-QuantaleStr(#A,b1,b2,b3,e1,e2#) -> non empty;
end;
registration
cluster associative commutative unital left-distributive right-distributive
complete Lattice-like cyclic dualized strict for
non empty Girard-QuantaleStr;
end;
definition
mode Girard-Quantale is associative unital left-distributive
right-distributive complete Lattice-like cyclic dualized non empty
Girard-QuantaleStr;
end;
definition
let G be Girard-QuantaleStr;
func Bottom G -> Element of G equals
:: QUANTAL1:def 21
the absurd of G;
end;
definition
let G be non empty Girard-QuantaleStr;
func Top G -> Element of G equals
:: QUANTAL1:def 22
(Bottom G) -r> Bottom G;
let a be Element of G;
func Bottom a -> Element of G equals
:: QUANTAL1:def 23
a -r> Bottom G;
end;
definition
let G be non empty Girard-QuantaleStr;
func Negation G -> UnOp of G means
:: QUANTAL1:def 24
for a being Element of G holds it.a = Bottom a;
end;
definition
let G be non empty Girard-QuantaleStr, u be UnOp of G;
func Bottom u -> UnOp of G equals
:: QUANTAL1:def 25
Negation(G)*u;
end;
definition
let G be non empty Girard-QuantaleStr, o be BinOp of G;
func Bottom o -> BinOp of G equals
:: QUANTAL1:def 26
Negation(G)*o;
end;
reserve Q for Girard-Quantale,
a,a1,a2,b,b1,b2,c,d for Element of Q,
X for set;
theorem :: QUANTAL1:22
Bottom Bottom a = a;
theorem :: QUANTAL1:23
a [= b implies Bottom b [= Bottom a;
theorem :: QUANTAL1:24
Bottom "\/"(X,Q) = "/\"({Bottom a: a in X}, Q);
theorem :: QUANTAL1:25
Bottom "/\"(X,Q) = "\/"({Bottom a: a in X}, Q);
theorem :: QUANTAL1:26
Bottom (a"\/"b) = Bottom a"/\"Bottom b & Bottom (a"/\"b) =
Bottom a"\/"Bottom b;
definition
let Q,a,b;
func a delta b -> Element of Q equals
:: QUANTAL1:def 27
Bottom (Bottom a [*] Bottom b);
end;
theorem :: QUANTAL1:27
a [*] "\/"(X,Q) = "\/"({a [*] b: b in X}, Q) & a delta "/\"(X,Q) =
"/\"({a delta c: c in X}, Q);
theorem :: QUANTAL1:28
"\/"(X,Q) [*] a = "\/"({b [*] a: b in X}, Q) & "/\"(X,Q) delta a =
"/\"({c delta a: c in X}, Q);
theorem :: QUANTAL1:29
a delta (b"/\"c) = (a delta b)"/\"(a delta c) & (b"/\"c) delta a = (b
delta a)"/\"(c delta a);
theorem :: QUANTAL1:30
a1 [= b1 & a2 [= b2 implies a1 delta a2 [= b1 delta b2;
theorem :: QUANTAL1:31
a delta b delta c = a delta (b delta c);
theorem :: QUANTAL1:32
a [*] Top Q = a & Top Q [*] a = a;
theorem :: QUANTAL1:33
a delta Bottom Q = a & (Bottom Q) delta a = a;
theorem :: QUANTAL1:34
for Q being Quantale for j being UnOp of Q st j is monotone idempotent
\/-distributive ex L being complete Lattice st the carrier of L = rng j & for X
being Subset of L holds "\/"X = j."\/"(X,Q);