:: Cartesian Products of Relations and Relational Structures :: by Artur Korni{\l}owicz :: :: Received September 25, 1996 :: Copyright (c) 1996-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 XBOOLE_0, SUBSET_1, TARSKI, ORDERS_2, WAYBEL_0, XXREAL_0, ZFMISC_1, RELAT_1, MCART_1, LATTICE3, RELAT_2, LATTICES, YELLOW_0, EQREL_1, REWRITE1, ORDINAL2, FUNCT_1, STRUCT_0, YELLOW_3; notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, SUBSET_1, RELAT_1, RELAT_2, RELSET_1, MCART_1, DOMAIN_1, FUNCT_2, BINOP_1, STRUCT_0, ORDERS_2, LATTICE3, YELLOW_0, WAYBEL_0; constructors DOMAIN_1, LATTICE3, ORDERS_3, WAYBEL_0, RELSET_1, XTUPLE_0; registrations XBOOLE_0, SUBSET_1, RELSET_1, STRUCT_0, LATTICE3, YELLOW_0, WAYBEL_0, RELAT_1, XTUPLE_0; requirements SUBSET, BOOLE; begin :: Preliminaries scheme :: YELLOW_3:sch 1 FraenkelA2 {A() -> non empty set, F(set, set) -> set, P[set, set], Q[set, set] } : { F(s,t) where s is Element of A(), t is Element of A() : P[s,t] } is Subset of A() provided for s being Element of A(), t being Element of A() holds F(s,t) in A (); registration let L be RelStr, X be empty Subset of L; cluster downarrow X -> empty; cluster uparrow X -> empty; end; theorem :: YELLOW_3:1 for X, Y being set, D being Subset of [:X,Y:] holds D c= [:proj1 D, proj2 D:] ; theorem :: YELLOW_3:2 for L being with_infima transitive antisymmetric RelStr for a, b, c, d being Element of L st a <= c & b <= d holds a "/\" b <= c "/\" d; theorem :: YELLOW_3:3 for L being with_suprema transitive antisymmetric RelStr for a, b, c, d being Element of L st a <= c & b <= d holds a "\/" b <= c "\/" d; theorem :: YELLOW_3:4 for L being complete reflexive antisymmetric non empty RelStr for D being Subset of L, x being Element of L st x in D holds (sup D) "/\" x = x; theorem :: YELLOW_3:5 for L being complete reflexive antisymmetric non empty RelStr for D being Subset of L, x being Element of L st x in D holds (inf D) "\/" x = x; theorem :: YELLOW_3:6 for L being RelStr, X, Y being Subset of L st X c= Y holds downarrow X c= downarrow Y; theorem :: YELLOW_3:7 for L being RelStr, X, Y being Subset of L st X c= Y holds uparrow X c= uparrow Y; theorem :: YELLOW_3:8 for S, T being with_infima Poset, f being Function of S, T for x, y being Element of S holds f preserves_inf_of {x,y} iff f.(x "/\" y) = f.x "/\" f .y; theorem :: YELLOW_3:9 for S, T being with_suprema Poset, f being Function of S, T for x, y being Element of S holds f preserves_sup_of {x,y} iff f.(x "\/" y) = f.x "\/" f .y; scheme :: YELLOW_3:sch 2 InfUnion { L() -> complete antisymmetric non empty RelStr, P[set] } : "/\" ({ "/\"(X,L()) where X is Subset of L(): P[X] },L()) >= "/\" (union {X where X is Subset of L(): P[X]},L()); scheme :: YELLOW_3:sch 3 InfofInfs { L() -> complete LATTICE, P[set] } : "/\" ({ "/\"(X,L()) where X is Subset of L(): P[X] },L()) = "/\" (union {X where X is Subset of L(): P[X]}, L()); scheme :: YELLOW_3:sch 4 SupUnion { L() -> complete antisymmetric non empty RelStr, P[set] } : "\/" ({ "\/"(X,L()) where X is Subset of L(): P[X] },L()) <= "\/" (union {X where X is Subset of L(): P[X]},L()); scheme :: YELLOW_3:sch 5 SupofSups { L() -> complete LATTICE, P[set] } : "\/" ({ "\/"(X,L()) where X is Subset of L(): P[X] },L()) = "\/" (union {X where X is Subset of L(): P[X]}, L()); begin :: Properties of Cartesian Products of Relational Structures definition let P, R be Relation; func ["P,R"] -> Relation means :: YELLOW_3:def 1 for x, y being object holds [x,y] in it iff ex p,q,s,t being object st x = [p,q] & y = [s,t] & [p,s] in P & [q,t] in R; end; theorem :: YELLOW_3:10 for P, R being Relation, x being object holds x in ["P,R"] iff [x`1 `1,x`2`1] in P & [x`1`2,x`2`2] in R & (ex a, b being object st x = [a,b]) & (ex c, d being object st x`1 = [c,d]) & ex e, f being object st x`2 = [e,f]; definition let A, B, X, Y be set; let P be Relation of A, B; let R be Relation of X, Y; redefine func ["P,R"] -> Relation of [:A,X:],[:B,Y:]; end; definition let X, Y be RelStr; func [:X,Y:] -> strict RelStr means :: YELLOW_3:def 2 the carrier of it = [:the carrier of X, the carrier of Y:] & the InternalRel of it = ["the InternalRel of X, the InternalRel of Y"]; end; definition let L1, L2 be RelStr, D be Subset of [:L1,L2:]; redefine func proj1 D -> Subset of L1; redefine func proj2 D -> Subset of L2; end; definition let S1, S2 be RelStr, D1 be Subset of S1, D2 be Subset of S2; redefine func [:D1,D2:] -> Subset of [:S1,S2:]; end; definition let S1, S2 be non empty RelStr, x be Element of S1, y be Element of S2; redefine func [x,y] -> Element of [:S1,S2:]; end; definition let L1, L2 be non empty RelStr, x be Element of [:L1,L2:]; redefine func x`1 -> Element of L1; redefine func x`2 -> Element of L2; end; theorem :: YELLOW_3:11 for S1, S2 being non empty RelStr for a, c being Element of S1, b, d being Element of S2 holds a <= c & b <= d iff [a,b] <= [c,d]; theorem :: YELLOW_3:12 for S1, S2 being non empty RelStr, x, y being Element of [:S1,S2 :] holds x <= y iff x`1 <= y`1 & x`2 <= y`2; theorem :: YELLOW_3:13 for A, B being RelStr, C being non empty RelStr for f, g being Function of [:A,B:],C st for x being Element of A, y being Element of B holds f .(x,y) = g.(x,y) holds f = g; registration let X, Y be non empty RelStr; cluster [:X,Y:] -> non empty; end; registration let X, Y be reflexive RelStr; cluster [:X,Y:] -> reflexive; end; registration let X, Y be antisymmetric RelStr; cluster [:X,Y:] -> antisymmetric; end; registration let X, Y be transitive RelStr; cluster [:X,Y:] -> transitive; end; registration let X, Y be with_suprema RelStr; cluster [:X,Y:] -> with_suprema; end; registration let X, Y be with_infima RelStr; cluster [:X,Y:] -> with_infima; end; theorem :: YELLOW_3:14 for X, Y being RelStr st [:X,Y:] is non empty holds X is non empty & Y is non empty; theorem :: YELLOW_3:15 for X, Y being non empty RelStr st [:X,Y:] is reflexive holds X is reflexive & Y is reflexive; theorem :: YELLOW_3:16 for X, Y being non empty reflexive RelStr st [:X,Y:] is antisymmetric holds X is antisymmetric & Y is antisymmetric; theorem :: YELLOW_3:17 for X, Y being non empty reflexive RelStr st [:X,Y:] is transitive holds X is transitive & Y is transitive; theorem :: YELLOW_3:18 for X, Y being non empty reflexive RelStr st [:X,Y:] is with_suprema holds X is with_suprema & Y is with_suprema; theorem :: YELLOW_3:19 for X, Y being non empty reflexive RelStr st [:X,Y:] is with_infima holds X is with_infima & Y is with_infima; registration let S1, S2 be RelStr; let D1 be directed Subset of S1, D2 be directed Subset of S2; cluster [:D1,D2:] -> directed for Subset of [:S1,S2:]; end; theorem :: YELLOW_3:20 for S1, S2 being non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 st [:D1,D2:] is directed holds D1 is directed & D2 is directed; theorem :: YELLOW_3:21 for S1, S2 being non empty RelStr for D being non empty Subset of [:S1,S2:] holds proj1 D is non empty & proj2 D is non empty; theorem :: YELLOW_3:22 for S1, S2 being non empty reflexive RelStr for D being non empty directed Subset of [:S1,S2:] holds proj1 D is directed & proj2 D is directed; registration let S1, S2 be RelStr; let D1 be filtered Subset of S1, D2 be filtered Subset of S2; cluster [:D1,D2:] -> filtered for Subset of [:S1,S2:]; end; theorem :: YELLOW_3:23 for S1, S2 being non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 st [:D1,D2:] is filtered holds D1 is filtered & D2 is filtered; theorem :: YELLOW_3:24 for S1, S2 being non empty reflexive RelStr for D being non empty filtered Subset of [:S1,S2:] holds proj1 D is filtered & proj2 D is filtered; registration let S1, S2 be RelStr, D1 be upper Subset of S1, D2 be upper Subset of S2; cluster [:D1,D2:] -> upper for Subset of [:S1,S2:]; end; theorem :: YELLOW_3:25 for S1, S2 being non empty reflexive RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 st [:D1,D2:] is upper holds D1 is upper & D2 is upper; theorem :: YELLOW_3:26 for S1, S2 being non empty reflexive RelStr for D being non empty upper Subset of [:S1,S2:] holds proj1 D is upper & proj2 D is upper; registration let S1, S2 be RelStr, D1 be lower Subset of S1, D2 be lower Subset of S2; cluster [:D1,D2:] -> lower for Subset of [:S1,S2:]; end; theorem :: YELLOW_3:27 for S1, S2 being non empty reflexive RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 st [:D1,D2:] is lower holds D1 is lower & D2 is lower; theorem :: YELLOW_3:28 for S1, S2 being non empty reflexive RelStr for D being non empty lower Subset of [:S1,S2:] holds proj1 D is lower & proj2 D is lower; definition let R be RelStr; attr R is void means :: YELLOW_3:def 3 the InternalRel of R is empty; end; registration cluster empty -> void for RelStr; end; registration cluster non void non empty strict for Poset; end; registration cluster non void -> non empty for RelStr; end; registration cluster non empty reflexive -> non void for RelStr; end; registration let R be non void RelStr; cluster the InternalRel of R -> non empty; end; theorem :: YELLOW_3:29 for S1, S2 being non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 for x being Element of S1, y being Element of S2 st [x,y] is_>=_than [:D1,D2:] holds x is_>=_than D1 & y is_>=_than D2; theorem :: YELLOW_3:30 for S1, S2 being non empty RelStr for D1 being Subset of S1, D2 being Subset of S2 for x being Element of S1, y being Element of S2 st x is_>=_than D1 & y is_>=_than D2 holds [x,y] is_>=_than [:D1,D2:]; theorem :: YELLOW_3:31 for S1, S2 being non empty RelStr for D being Subset of [:S1,S2 :] for x being Element of S1, y being Element of S2 holds [x,y] is_>=_than D iff x is_>=_than proj1 D & y is_>=_than proj2 D; theorem :: YELLOW_3:32 for S1, S2 being non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 for x being Element of S1, y being Element of S2 st [x,y] is_<=_than [:D1,D2:] holds x is_<=_than D1 & y is_<=_than D2; theorem :: YELLOW_3:33 for S1, S2 being non empty RelStr for D1 being Subset of S1, D2 being Subset of S2 for x being Element of S1, y being Element of S2 st x is_<=_than D1 & y is_<=_than D2 holds [x,y] is_<=_than [:D1,D2:]; theorem :: YELLOW_3:34 for S1, S2 being non empty RelStr for D being Subset of [:S1,S2 :] for x being Element of S1, y being Element of S2 holds [x,y] is_<=_than D iff x is_<=_than proj1 D & y is_<=_than proj2 D; theorem :: YELLOW_3:35 for S1, S2 being antisymmetric non empty RelStr for D1 being Subset of S1, D2 being Subset of S2 for x being Element of S1, y being Element of S2 st ex_sup_of D1,S1 & ex_sup_of D2,S2 & for b being Element of [:S1,S2:] st b is_>=_than [:D1,D2:] holds [x,y] <= b holds (for c being Element of S1 st c is_>=_than D1 holds x <= c) & for d being Element of S2 st d is_>=_than D2 holds y <= d; theorem :: YELLOW_3:36 for S1, S2 being antisymmetric non empty RelStr for D1 being Subset of S1, D2 being Subset of S2 for x being Element of S1, y being Element of S2 st ex_inf_of D1,S1 & ex_inf_of D2,S2 & for b being Element of [:S1,S2:] st b is_<=_than [:D1,D2:] holds [x,y] >= b holds (for c being Element of S1 st c is_<=_than D1 holds x >= c) & for d being Element of S2 st d is_<=_than D2 holds y >= d; theorem :: YELLOW_3:37 for S1, S2 being antisymmetric non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 for x being Element of S1, y being Element of S2 st (for c being Element of S1 st c is_>=_than D1 holds x <= c) & for d being Element of S2 st d is_>=_than D2 holds y <= d holds for b being Element of [:S1,S2:] st b is_>=_than [:D1,D2:] holds [x,y] <= b; theorem :: YELLOW_3:38 for S1, S2 being antisymmetric non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 for x being Element of S1, y being Element of S2 st (for c being Element of S1 st c is_>=_than D1 holds x >= c) & for d being Element of S2 st d is_>=_than D2 holds y >= d holds for b being Element of [:S1,S2:] st b is_>=_than [:D1,D2:] holds [x,y] >= b; theorem :: YELLOW_3:39 for S1, S2 being antisymmetric non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 holds ex_sup_of D1,S1 & ex_sup_of D2,S2 iff ex_sup_of [:D1,D2:],[:S1,S2:]; theorem :: YELLOW_3:40 for S1, S2 being antisymmetric non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 holds ex_inf_of D1,S1 & ex_inf_of D2,S2 iff ex_inf_of [:D1,D2:],[:S1,S2:]; theorem :: YELLOW_3:41 for S1, S2 being antisymmetric non empty RelStr for D being Subset of [:S1,S2:] holds ex_sup_of proj1 D,S1 & ex_sup_of proj2 D,S2 iff ex_sup_of D,[:S1,S2:]; theorem :: YELLOW_3:42 for S1, S2 being antisymmetric non empty RelStr for D being Subset of [:S1,S2:] holds ex_inf_of proj1 D,S1 & ex_inf_of proj2 D,S2 iff ex_inf_of D,[:S1,S2:]; theorem :: YELLOW_3:43 for S1, S2 being antisymmetric non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 st ex_sup_of D1,S1 & ex_sup_of D2,S2 holds sup [:D1,D2:] = [sup D1,sup D2]; theorem :: YELLOW_3:44 for S1, S2 being antisymmetric non empty RelStr for D1 being non empty Subset of S1, D2 being non empty Subset of S2 st ex_inf_of D1,S1 & ex_inf_of D2,S2 holds inf [:D1,D2:] = [inf D1,inf D2]; registration let X, Y be complete antisymmetric non empty RelStr; cluster [:X,Y:] -> complete; end; theorem :: YELLOW_3:45 for X, Y being non empty lower-bounded antisymmetric RelStr st [:X,Y:] is complete holds X is complete & Y is complete; theorem :: YELLOW_3:46 for L1,L2 being antisymmetric non empty RelStr for D being non empty Subset of [:L1,L2:] st [:L1,L2:] is complete or ex_sup_of D,[:L1,L2:] holds sup D = [sup proj1 D,sup proj2 D]; theorem :: YELLOW_3:47 for L1,L2 being antisymmetric non empty RelStr for D being non empty Subset of [:L1,L2:] st [:L1,L2:] is complete or ex_inf_of D,[:L1,L2:] holds inf D = [inf proj1 D,inf proj2 D]; theorem :: YELLOW_3:48 for S1,S2 being non empty reflexive RelStr for D being non empty directed Subset of [:S1,S2:] holds [:proj1 D,proj2 D:] c= downarrow D; theorem :: YELLOW_3:49 for S1,S2 being non empty reflexive RelStr for D being non empty filtered Subset of [:S1,S2:] holds [:proj1 D,proj2 D:] c= uparrow D; scheme :: YELLOW_3:sch 6 Kappa2DS { X,Y,Z() -> non empty RelStr, F(set,set) -> set }: ex f being Function of [:X(),Y():], Z() st for x being Element of X(), y being Element of Y() holds f.(x,y)=F(x,y) provided for x being Element of X(), y being Element of Y() holds F(x,y) is Element of Z();