:: On the Many Sorted Closure Operator and the Many Sorted Closure :: System :: by Artur Korni{\l}owicz :: :: Received February 7, 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 PBOOLE, FUNCT_1, RELAT_1, TARSKI, FUNCT_4, FUNCOP_1, XBOOLE_0, SUBSET_1, FINSEQ_4, PARTFUN1, FUNCT_6, MEMBER_1, MSUALG_3, FINSET_1, ZFMISC_1, RELAT_2, MSAFREE2, BINOP_1, YELLOW_6, STRUCT_0, MSUALG_1, CLOSURE2, MSSUBFAM, SETFAM_1, CLOSURE1, SETLIM_2; notations TARSKI, XBOOLE_0, SUBSET_1, STRUCT_0, SETFAM_1, RELAT_1, FUNCT_1, FINSET_1, PARTFUN1, FUNCT_2, FUNCOP_1, FUNCT_4, PBOOLE, FUNCT_6, MSUALG_1, MSUALG_3, PRALG_1, MSSUBFAM; constructors SETFAM_1, PZFMISC1, MSSUBFAM, PRALG_1, MSUALG_3, RELSET_1, FUNCT_4, FUNCT_6; registrations SUBSET_1, FUNCT_1, RELSET_1, FUNCOP_1, FINSET_1, PBOOLE, MSSUBFAM, MSUALG_1, RELAT_1, PRALG_1; requirements SUBSET, BOOLE; begin :: Preliminaries reserve i, x, I for set, A, M for ManySortedSet of I, f for Function, F for ManySortedFunction of I; scheme :: CLOSURE1:sch 1 MSSUBSET { I() -> set, A() -> non-empty ManySortedSet of I(), B() -> ManySortedSet of I(), P[set] } : (for X being ManySortedSet of I() holds X in A () iff X in B() & P[X]) implies A() c= B(); theorem :: CLOSURE1:1 for X being non empty set for x, y being set st x c= y holds { t where t is Element of X : y c= t } c= { z where z is Element of X : x c= z }; theorem :: CLOSURE1:2 (ex A st A in M) implies M is non-empty; registration let I, F, A; cluster F..A -> total for I-defined Function; end; definition let I; let A, B be non-empty ManySortedSet of I; let F be ManySortedFunction of A, B; let X be Element of A; redefine func F..X -> Element of B; end; theorem :: CLOSURE1:3 for A, X being ManySortedSet of I for B being non-empty ManySortedSet of I for F being ManySortedFunction of A, B st X in A holds F..X in B; theorem :: CLOSURE1:4 for F, G being ManySortedFunction of I for A being ManySortedSet of I st A in doms G holds F..(G..A) = (F ** G)..A; theorem :: CLOSURE1:5 F is "1-1" implies for A, B being ManySortedSet of I st A in doms F & B in doms F & F..A = F..B holds A = B; theorem :: CLOSURE1:6 doms F is non-empty & (for A, B being ManySortedSet of I st A in doms F & B in doms F & F..A = F..B holds A = B) implies F is "1-1"; theorem :: CLOSURE1:7 :: FUNCT_2:18 for A, B being non-empty ManySortedSet of I for F, G being ManySortedFunction of A, B st for M st M in A holds F..M = G..M holds F = G; registration let I, M; cluster empty-yielding finite-yielding for Element of bool M; end; begin :: Properties of Many Sorted Closure Operators definition let I, M; mode MSSetOp of M is ManySortedFunction of bool M, bool M; end; definition let I, M; let O be MSSetOp of M; let X be Element of bool M; redefine func O..X -> Element of bool M; end; definition let I, M; let IT be MSSetOp of M; attr IT is reflexive means :: CLOSURE1:def 1 for X being Element of bool M holds X c= IT..X; attr IT is monotonic means :: CLOSURE1:def 2 for X, Y being Element of bool M st X c= Y holds IT..X c= IT..Y; attr IT is idempotent means :: CLOSURE1:def 3 for X being Element of bool M holds IT..X = IT..(IT..X); attr IT is topological means :: CLOSURE1:def 4 for X, Y being Element of bool M holds IT..(X (\/) Y) = (IT..X) (\/) (IT..Y); end; theorem :: CLOSURE1:8 for M being non-empty ManySortedSet of I for X being Element of M holds X = (id M)..X; theorem :: CLOSURE1:9 for M being non-empty ManySortedSet of I for X, Y being Element of M st X c= Y holds (id M)..X c= (id M)..Y; theorem :: CLOSURE1:10 for M being non-empty ManySortedSet of I for X, Y being Element of M st X (\/) Y is Element of M holds (id M)..(X (\/) Y) = ((id M)..X) (\/) ((id M) ..Y); theorem :: CLOSURE1:11 for X being Element of bool M for i, x being set st i in I & x in ((id (bool M))..X).i ex Y being finite-yielding Element of bool M st Y c= X & x in ((id (bool M))..Y).i; registration let I, M; cluster reflexive monotonic idempotent topological for MSSetOp of M; end; theorem :: CLOSURE1:12 id (bool A) is reflexive MSSetOp of A; theorem :: CLOSURE1:13 id (bool A) is monotonic MSSetOp of A; theorem :: CLOSURE1:14 id (bool A) is idempotent MSSetOp of A; theorem :: CLOSURE1:15 id (bool A) is topological MSSetOp of A; reserve P, R for MSSetOp of M, E, T for Element of bool M; theorem :: CLOSURE1:16 E = M & P is reflexive implies E = P..E; theorem :: CLOSURE1:17 (P is reflexive & for X being Element of bool M holds P..X c= X) implies P is idempotent; theorem :: CLOSURE1:18 P is monotonic implies P..(E (/\) T) c= P..E (/\) P..T; registration let I, M; cluster topological -> monotonic for MSSetOp of M; end; theorem :: CLOSURE1:19 P is topological implies P..E (\) P..T c= P..(E (\) T); definition let I, M, R, P; redefine func P ** R -> MSSetOp of M; end; theorem :: CLOSURE1:20 P is reflexive & R is reflexive implies P ** R is reflexive; theorem :: CLOSURE1:21 P is monotonic & R is monotonic implies P ** R is monotonic; theorem :: CLOSURE1:22 P is idempotent & R is idempotent & P**R = R**P implies P ** R is idempotent; theorem :: CLOSURE1:23 P is topological & R is topological implies P ** R is topological; theorem :: CLOSURE1:24 P is reflexive & i in I & f = P.i implies for x being Element of bool (M.i) holds x c= f.x; theorem :: CLOSURE1:25 P is monotonic & i in I & f = P.i implies for x, y being Element of bool (M.i) st x c= y holds f.x c= f.y; theorem :: CLOSURE1:26 P is idempotent & i in I & f = P.i implies for x being Element of bool (M.i) holds f.x = f.(f.x); theorem :: CLOSURE1:27 P is topological & i in I & f = P.i implies for x, y being Element of bool (M.i) holds f.(x \/ y) = (f.x) \/ (f.y); begin :: On the Many Sorted Closure Operator :: and the Many Sorted Closure System reserve S for 1-sorted; definition let S; struct(many-sorted over S) MSClosureStr over S (# Sorts -> ManySortedSet of the carrier of S, Family -> MSSubsetFamily of the Sorts #); end; reserve MS for many-sorted over S; definition let S; let IT be MSClosureStr over S; attr IT is additive means :: CLOSURE1:def 5 the Family of IT is additive; attr IT is absolutely-additive means :: CLOSURE1:def 6 the Family of IT is absolutely-additive; attr IT is multiplicative means :: CLOSURE1:def 7 the Family of IT is multiplicative; attr IT is absolutely-multiplicative means :: CLOSURE1:def 8 the Family of IT is absolutely-multiplicative; attr IT is properly-upper-bound means :: CLOSURE1:def 9 the Family of IT is properly-upper-bound; attr IT is properly-lower-bound means :: CLOSURE1:def 10 the Family of IT is properly-lower-bound; end; definition let S, MS; func MSFull MS -> MSClosureStr over S equals :: CLOSURE1:def 11 MSClosureStr (#the Sorts of MS, bool the Sorts of MS#); end; registration let S, MS; cluster MSFull MS -> strict additive absolutely-additive multiplicative absolutely-multiplicative properly-upper-bound properly-lower-bound; end; registration let S; let MS be non-empty many-sorted over S; cluster MSFull MS -> non-empty; end; registration let S; cluster strict non-empty additive absolutely-additive multiplicative absolutely-multiplicative properly-upper-bound properly-lower-bound for MSClosureStr over S; end; registration let S; let CS be additive MSClosureStr over S; cluster the Family of CS -> additive; end; registration let S; let CS be absolutely-additive MSClosureStr over S; cluster the Family of CS -> absolutely-additive; end; registration let S; let CS be multiplicative MSClosureStr over S; cluster the Family of CS -> multiplicative; end; registration let S; let CS be absolutely-multiplicative MSClosureStr over S; cluster the Family of CS -> absolutely-multiplicative; end; registration let S; let CS be properly-upper-bound MSClosureStr over S; cluster the Family of CS -> properly-upper-bound; end; registration let S; let CS be properly-lower-bound MSClosureStr over S; cluster the Family of CS -> properly-lower-bound; end; registration let S; let M be non-empty ManySortedSet of the carrier of S; let F be MSSubsetFamily of M; cluster MSClosureStr (#M, F#) -> non-empty; end; registration let S, MS; let F be additive MSSubsetFamily of the Sorts of MS; cluster MSClosureStr (#the Sorts of MS, F#) -> additive; end; registration let S, MS; let F be absolutely-additive MSSubsetFamily of the Sorts of MS; cluster MSClosureStr (#the Sorts of MS, F#) -> absolutely-additive; end; registration let S, MS; let F be multiplicative MSSubsetFamily of the Sorts of MS; cluster MSClosureStr (#the Sorts of MS, F#) -> multiplicative; end; registration let S, MS; let F be absolutely-multiplicative MSSubsetFamily of the Sorts of MS; cluster MSClosureStr (#the Sorts of MS, F#) -> absolutely-multiplicative; end; registration let S, MS; let F be properly-upper-bound MSSubsetFamily of the Sorts of MS; cluster MSClosureStr (#the Sorts of MS, F#) -> properly-upper-bound; end; registration let S, MS; let F be properly-lower-bound MSSubsetFamily of the Sorts of MS; cluster MSClosureStr (#the Sorts of MS, F#) -> properly-lower-bound; end; registration let S; cluster absolutely-additive -> additive for MSClosureStr over S; end; registration let S; cluster absolutely-multiplicative -> multiplicative for MSClosureStr over S; end; registration let S; cluster absolutely-multiplicative -> properly-upper-bound for MSClosureStr over S; end; registration let S; cluster absolutely-additive -> properly-lower-bound for MSClosureStr over S; end; definition let S; mode MSClosureSystem of S is absolutely-multiplicative MSClosureStr over S; end; definition let I, M; mode MSClosureOperator of M is reflexive monotonic idempotent MSSetOp of M; end; definition let I, M; let F be ManySortedFunction of M, M; func MSFixPoints F -> ManySortedSubset of M means :: CLOSURE1:def 12 for i being object st i in I holds x in it.i iff ex f being Function st f = F.i & x in dom f & f.x = x; end; registration let I; let M be empty-yielding ManySortedSet of I; let F be ManySortedFunction of M, M; cluster MSFixPoints F -> empty-yielding; end; theorem :: CLOSURE1:28 for F being ManySortedFunction of M, M holds A in M & F..A = A iff A in MSFixPoints F; theorem :: CLOSURE1:29 MSFixPoints id A = A; theorem :: CLOSURE1:30 for A being ManySortedSet of the carrier of S for J being reflexive monotonic MSSetOp of A for D being MSSubsetFamily of A st D = MSFixPoints J holds MSClosureStr (#A, D#) is MSClosureSystem of S; theorem :: CLOSURE1:31 for D being properly-upper-bound MSSubsetFamily of M for X being Element of bool M ex SF being non-empty MSSubsetFamily of M st for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y; theorem :: CLOSURE1:32 for D being properly-upper-bound MSSubsetFamily of M for X being Element of bool M for SF being non-empty MSSubsetFamily of M st (for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y) holds for i being set, Di being non empty set st i in I & Di = D.i holds SF.i = { z where z is Element of Di: X.i c= z }; theorem :: CLOSURE1:33 for D being properly-upper-bound MSSubsetFamily of M ex J being MSSetOp of M st for X being Element of bool M for SF being non-empty MSSubsetFamily of M st (for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y) holds J..X = meet SF; theorem :: CLOSURE1:34 for D being properly-upper-bound MSSubsetFamily of M for A being Element of bool M for J being MSSetOp of M st A in D & for X being Element of bool M for SF being non-empty MSSubsetFamily of M st (for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y) holds J..X = meet SF holds J..A = A; theorem :: CLOSURE1:35 for D being absolutely-multiplicative MSSubsetFamily of M for A being Element of bool M for J being MSSetOp of M st J..A = A & for X being Element of bool M for SF being non-empty MSSubsetFamily of M st (for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y) holds J..X = meet SF holds A in D; theorem :: CLOSURE1:36 for D being properly-upper-bound MSSubsetFamily of M for J being MSSetOp of M st for X being Element of bool M for SF being non-empty MSSubsetFamily of M st (for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y) holds J..X = meet SF holds J is reflexive monotonic; theorem :: CLOSURE1:37 for D being absolutely-multiplicative MSSubsetFamily of M for J being MSSetOp of M st for X being Element of bool M for SF being non-empty MSSubsetFamily of M st (for Y being ManySortedSet of I holds Y in SF iff Y in D & X c= Y) holds J..X = meet SF holds J is idempotent; theorem :: CLOSURE1:38 for D being MSClosureSystem of S for J being MSSetOp of the Sorts of D st for X being Element of bool the Sorts of D for SF being non-empty MSSubsetFamily of the Sorts of D st (for Y being ManySortedSet of the carrier of S holds Y in SF iff Y in the Family of D & X c= Y) holds J..X = meet SF holds J is MSClosureOperator of the Sorts of D; definition let S; let A be ManySortedSet of the carrier of S; let C be MSClosureOperator of A; func ClOp->ClSys C -> MSClosureSystem of S means :: CLOSURE1:def 13 ex D being MSSubsetFamily of A st D = MSFixPoints C & it = MSClosureStr (#A, D#); end; registration let S; let A be ManySortedSet of the carrier of S; let C be MSClosureOperator of A; cluster ClOp->ClSys C -> strict; end; registration let S; let A be non-empty ManySortedSet of the carrier of S; let C be MSClosureOperator of A; cluster ClOp->ClSys C -> non-empty; end; definition let S; let D be MSClosureSystem of S; func ClSys->ClOp D -> MSClosureOperator of the Sorts of D means :: CLOSURE1:def 14 for X being Element of bool the Sorts of D for SF being non-empty MSSubsetFamily of the Sorts of D st (for Y being ManySortedSet of the carrier of S holds Y in SF iff Y in the Family of D & X c= Y) holds it..X = meet SF; end; theorem :: CLOSURE1:39 for A being ManySortedSet of the carrier of S for J being MSClosureOperator of A holds ClSys->ClOp (ClOp->ClSys J) = J; theorem :: CLOSURE1:40 for D being MSClosureSystem of S holds ClOp->ClSys (ClSys->ClOp D) = the MSClosureStr of D;