:: The Vector Space of Subsets of a Set Based on Symmetric Difference :: by Jesse Alama :: :: Received October 9, 2007 :: Copyright (c) 2007-2021 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 NUMBERS, STRUCT_0, FINSEQ_1, SUBSET_1, RELAT_1, FUNCT_1, NAT_1, ORDINAL4, VECTSP_1, INT_3, CARD_1, SUPINF_2, MESFUNC1, ARYTM_3, INT_1, QC_LANG1, XBOOLE_0, TARSKI, BINOP_1, ZFMISC_1, RLVECT_1, ALGSTR_0, GROUP_1, RLVECT_2, XXREAL_0, CARD_3, RLVECT_3, REALSET1, VALUED_1, FINSEQ_2, PARTFUN1, FINSET_1, FUNCT_4, RLVECT_5, ORDINAL2, BSPACE; notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, RELAT_1, DOMAIN_1, RELSET_1, FUNCT_1, ORDINAL1, NUMBERS, NAT_1, INT_1, PARTFUN1, FUNCT_2, BINOP_1, FUNCT_7, XXREAL_0, CARD_1, FINSET_1, FINSEQ_1, FINSEQ_2, FINSEQOP, CARD_2, STRUCT_0, ALGSTR_0, GROUP_1, RLVECT_1, VECTSP_1, VECTSP_6, VECTSP_7, MATRLIN, VECTSP_9, INT_3, RANKNULL; constructors FINSEQOP, VECTSP_7, VECTSP_9, REALSET1, WELLORD2, NAT_D, FUNCT_7, CARD_2, RANKNULL, INT_3, GR_CY_1, RELSET_1, BINOP_2, BINOP_1; registrations STRUCT_0, CARD_1, FINSET_1, FINSEQ_1, SUBSET_1, XBOOLE_0, VECTSP_1, ORDINAL1, XREAL_0, INT_1, VECTSP_7, RELSET_1; requirements NUMERALS, BOOLE, ARITHM, SUBSET, REAL; begin definition let S be 1-sorted; func <*>S -> FinSequence of S equals :: BSPACE:def 1 <*>([#]S); end; :: exactly as in FINSEQ_2 reserve S for 1-sorted, i for Element of NAT, p for FinSequence, X for set; :: copied from FINSEQ_2:13 theorem :: BSPACE:1 for p being FinSequence of S st i in dom p holds p.i in S; :: copied from FINSEQ_2:14 theorem :: BSPACE:2 (for i being Nat st i in dom p holds p.i in S) implies p is FinSequence of S; scheme :: BSPACE:sch 1 IndSeqS{S() -> 1-sorted, P[set]}: for p being FinSequence of S() holds P[p] provided P[<*> S()] and for p being FinSequence of S() for x being Element of S() st P[p] holds P[p^<*x*>]; begin :: The two-element field Z_2 definition func Z_2 -> Field equals :: BSPACE:def 2 INT.Ring(2); end; theorem :: BSPACE:3 [#]Z_2 = {0,1}; theorem :: BSPACE:4 for a being Element of Z_2 holds a = 0 or a = 1; theorem :: BSPACE:5 0.Z_2 = 0; theorem :: BSPACE:6 1.Z_2 = 1; theorem :: BSPACE:7 1.Z_2 + 1.Z_2 = 0.Z_2; theorem :: BSPACE:8 for x being Element of Z_2 holds x = 0.Z_2 iff x <> 1.Z_2; begin :: Set-theoretical Preliminaries definition let X be set,x be object; func X@x -> Element of Z_2 equals :: BSPACE:def 3 1.Z_2 if x in X otherwise 0.Z_2; end; theorem :: BSPACE:9 for X,x being set holds X@x = 1.Z_2 iff x in X; theorem :: BSPACE:10 for X,x being set holds X@x = 0.Z_2 iff not x in X; theorem :: BSPACE:11 for X,x being set holds X@x <> 0.Z_2 iff X@x = 1.Z_2; theorem :: BSPACE:12 for X,x,y being set holds X@x = X@y iff (x in X iff y in X); theorem :: BSPACE:13 for X,Y,x being set holds X@x = Y@x iff (x in X iff x in Y); theorem :: BSPACE:14 for x being set holds {}@x = 0.Z_2; theorem :: BSPACE:15 for X being set, u,v being Subset of X, x being Element of X holds (u \+\ v)@x = u@x + v@x; theorem :: BSPACE:16 for X,Y being set holds X = Y iff for x being object holds X@x = Y@x; begin :: The Boolean Bector Space of Subsets of a Set definition let X be set, a be Element of Z_2, c be Subset of X; func a \*\ c -> Subset of X equals :: BSPACE:def 4 c if a = 1.Z_2, {}X if a = 0.Z_2; end; definition let X be set; func bspace-sum(X) -> BinOp of bool X means :: BSPACE:def 5 for c,d being Subset of X holds it.(c,d) = c \+\ d; end; theorem :: BSPACE:17 for a being Element of Z_2, c,d being Subset of X holds a \*\ (c \+\ d) = (a \*\ c) \+\ (a \*\ d); theorem :: BSPACE:18 for a,b being Element of Z_2, c being Subset of X holds (a+b) \*\ c = (a \*\ c) \+\ (b \*\ c); theorem :: BSPACE:19 for c being Subset of X holds (1.Z_2) \*\ c = c; theorem :: BSPACE:20 for a,b being Element of Z_2, c being Subset of X holds a \*\ (b \*\ c) = (a*b) \*\ c; definition let X be set; func bspace-scalar-mult(X) -> Function of [:the carrier of Z_2,bool X:],bool X means :: BSPACE:def 6 for a being Element of Z_2, c being Subset of X holds it.(a,c) = a \*\ c; end; definition let X be set; func bspace(X) -> non empty ModuleStr over Z_2 equals :: BSPACE:def 7 ModuleStr (# bool X, bspace-sum(X), {}X, bspace-scalar-mult(X) #); end; theorem :: BSPACE:21 bspace(X) is Abelian; theorem :: BSPACE:22 bspace(X) is add-associative; theorem :: BSPACE:23 bspace(X) is right_zeroed; theorem :: BSPACE:24 bspace(X) is right_complementable; theorem :: BSPACE:25 for a being Element of Z_2, x,y being Element of bspace(X) holds a*(x+y) = (a*x)+(a*y); theorem :: BSPACE:26 for a,b being Element of Z_2, x being Element of bspace(X) holds (a+b)*x = (a*x)+(b*x); theorem :: BSPACE:27 for a,b being Element of Z_2, x being Element of bspace(X) holds (a*b)*x = a*(b*x); theorem :: BSPACE:28 for x being Element of bspace(X) holds (1_Z_2)*x = x; theorem :: BSPACE:29 bspace(X) is vector-distributive scalar-distributive scalar-associative scalar-unital; registration let X be set; cluster bspace(X) -> vector-distributive scalar-distributive scalar-associative scalar-unital Abelian right_complementable add-associative right_zeroed; end; begin :: The Linear Independence and Linear Span of 1-element Subsets definition let X be set; func singletons(X) -> set equals :: BSPACE:def 8 { f where f is Subset of X : f is 1-element }; end; definition let X be set; redefine func singletons(X) -> Subset of bspace(X); end; registration let X be non empty set; cluster singletons(X) -> non empty; end; theorem :: BSPACE:30 for X being non empty set, f being Subset of X st f is Element of singletons(X) holds f is 1-element; definition let F be Field, V be VectSp of F, l be Linear_Combination of V, x be Element of V; redefine func l.x -> Element of F; end; definition let X be non empty set, s be FinSequence of bspace(X), x be Element of X; func s@x -> FinSequence of Z_2 means :: BSPACE:def 9 len it = len s & for j being Nat st 1 <= j & j <= len s holds it.j = (s.j)@x; end; theorem :: BSPACE:31 for X being non empty set, x being Element of X holds (<*>( bspace(X)))@x = <*>Z_2; theorem :: BSPACE:32 for X being set, u,v being Element of bspace(X), x being Element of X holds (u + v)@x = u@x + v@x; theorem :: BSPACE:33 for X being non empty set, s being FinSequence of bspace(X), f being Element of bspace(X), x being Element of X holds (s ^ <*f*>)@x = (s@x) ^ <*f@x*>; theorem :: BSPACE:34 for X being non empty set, s being FinSequence of bspace(X), x being Element of X holds (Sum s)@x = Sum (s@x); theorem :: BSPACE:35 for X being non empty set, l being Linear_Combination of bspace( X), x being Element of bspace(X) st x in Carrier l holds l.x = 1_Z_2; registration let X be empty set; cluster singletons X -> empty; end; theorem :: BSPACE:36 singletons(X) is linearly-independent; theorem :: BSPACE:37 for f being Element of bspace(X) st (ex x being set st x in X & f = {x }) holds f in singletons(X); theorem :: BSPACE:38 for X being finite set, A being Subset of X ex l being Linear_Combination of singletons(X) st Sum l = A; theorem :: BSPACE:39 for X being finite set holds Lin(singletons(X)) = bspace(X); theorem :: BSPACE:40 for X being finite set holds singletons(X) is Basis of bspace(X); registration let X be finite set; cluster singletons(X) -> finite; end; registration let X be finite set; cluster bspace(X) -> finite-dimensional; end; theorem :: BSPACE:41 card (singletons X) = card X; theorem :: BSPACE:42 card [#](bspace X) = exp(2,card(X)); theorem :: BSPACE:43 dim bspace {} = 0;