:: Yet another construction of free algebra :: by Grzegorz Bancerek and Artur Korni{\l}owicz :: :: Received August 8, 2001 :: Copyright (c) 2001-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, STRUCT_0, MSUALG_1, CARD_3, RELAT_1, FUNCT_1, SUBSET_1, PBOOLE, MSUALG_3, TARSKI, FUNCT_6, MEMBER_1, CATALG_1, ZF_MODEL, MSUALG_2, MSAFREE, FUNCOP_1, CARD_1, LANG1, ZFMISC_1, TREES_4, MCART_1, MARGREL1, FINSEQ_1, MSATERM, UNIALG_2, DTCONSTR, FINSET_1, TREES_2, TREES_9, ZF_LANG1, TREES_3, TREES_A, NUMBERS, ARYTM_3, ORDINAL4, XXREAL_0, NAT_1, PARTFUN1, MSUALG_6, PRELAMB, SETLIM_2; notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, SUBSET_1, DOMAIN_1, RELAT_1, FUNCT_1, RELSET_1, STRUCT_0, ORDINAL1, NUMBERS, XCMPLX_0, NAT_1, MCART_1, FINSET_1, CARD_3, FINSEQ_1, FINSEQ_2, TREES_1, TREES_2, FUNCT_6, TREES_3, TREES_4, DTCONSTR, LANG1, PBOOLE, TREES_9, MSUALG_1, MSUALG_2, MSAFREE, FUNCOP_1, MSUALG_3, EQUATION, MSATERM, MSUALG_6, CATALG_1, XXREAL_0; constructors DOMAIN_1, TREES_9, MSUALG_3, MSATERM, MSUALG_6, CATALG_1, EQUATION, SEQ_4, RELSET_1, XTUPLE_0; registrations XBOOLE_0, SUBSET_1, RELAT_1, FUNCT_1, ORDINAL1, FUNCOP_1, XREAL_0, FINSEQ_1, TREES_2, TREES_3, TREES_9, STRUCT_0, RELSET_1, MSUALG_1, MSUALG_2, MSUALG_3, MSAFREE, MSATERM, INDEX_1, MSUALG_6, MSUALG_9, INSTALG1, CATALG_1, MSSUBFAM, PBOOLE, XTUPLE_0; requirements BOOLE, SUBSET, NUMERALS; begin reserve x,y,z for set; registration let S be non empty non void ManySortedSign; let A be non empty MSAlgebra over S; cluster Union the Sorts of A -> non empty; end; definition let S be non empty non void ManySortedSign; let A be non empty MSAlgebra over S; mode Element of A is Element of Union the Sorts of A; end; theorem :: MSAFREE3:1 for I being set, A being ManySortedSet of I for F being ManySortedFunction of I st F is "1-1" & A c= doms F holds F""(F.:.:A) = A; definition let S be non void Signature; let X be ManySortedSet of the carrier of S; func Free(S, X) -> strict MSAlgebra over S means :: MSAFREE3:def 1 ex A being MSSubset of FreeMSA (X (\/) ((the carrier of S) --> {0})) st it = GenMSAlg A & A = ( Reverse (X (\/) ((the carrier of S) --> {0})))""X; end; theorem :: MSAFREE3:2 for S being non void Signature for X being ManySortedSet of the carrier of S for s being SortSymbol of S holds [x,s] in the carrier of DTConMSA X iff x in X.s; theorem :: MSAFREE3:3 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S for s being SortSymbol of S holds x in X.s & x in Y.s iff root-tree [x,s] in (( Reverse Y)""X).s; theorem :: MSAFREE3:4 for S being non void Signature for X being ManySortedSet of the carrier of S for s being SortSymbol of S st x in X.s holds root-tree [x,s] in ( the Sorts of Free(S, X)).s; theorem :: MSAFREE3:5 for S being non void Signature for X being ManySortedSet of the carrier of S for o being OperSymbol of S st the_arity_of o = {} holds root-tree [o, the carrier of S] in (the Sorts of Free(S, X)).the_result_sort_of o; registration let S be non void Signature; let X be non empty-yielding ManySortedSet of the carrier of S; cluster Free(S, X) -> non empty; end; theorem :: MSAFREE3:6 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S holds x is Element of FreeMSA X iff x is Term of S, X; theorem :: MSAFREE3:7 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S for s being SortSymbol of S for x being Term of S, X holds x in (the Sorts of FreeMSA X).s iff the_sort_of x = s; theorem :: MSAFREE3:8 for S being non void Signature for X being non empty-yielding ManySortedSet of the carrier of S for x being Element of Free(S, X) holds x is Term of S, X (\/) ((the carrier of S) --> {0}); registration let S be non empty non void ManySortedSign; let X be non empty-yielding ManySortedSet of the carrier of S; cluster -> Relation-like Function-like for Element of Free(S, X); end; registration let S be non empty non void ManySortedSign; let X be non empty-yielding ManySortedSet of the carrier of S; cluster -> finite DecoratedTree-like for Element of Free(S, X); end; registration let S be non empty non void ManySortedSign; let X be non empty-yielding ManySortedSet of the carrier of S; cluster -> finite-branching for Element of Free(S, X); end; registration cluster -> non empty for DecoratedTree; end; definition let S be ManySortedSign; let t be non empty Relation; func S variables_in t -> ManySortedSet of the carrier of S means :: MSAFREE3:def 2 for s being object st s in the carrier of S holds it.s = {a`1 where a is Element of rng t: a`2 = s}; end; definition let S be ManySortedSign; let X be ManySortedSet of the carrier of S; let t be non empty Relation; func X variables_in t -> ManySortedSubset of X equals :: MSAFREE3:def 3 X (/\) (S variables_in t); end; theorem :: MSAFREE3:9 for S being ManySortedSign, X being ManySortedSet of the carrier of S for t being non empty Relation, V being ManySortedSubset of X holds V = X variables_in t iff for s being set st s in the carrier of S holds V.s = (X.s) /\ {a`1 where a is Element of rng t: a`2 = s}; theorem :: MSAFREE3:10 for S being ManySortedSign, s,x being object holds (s in the carrier of S implies (S variables_in root-tree [x,s]).s = {x}) & for s9 being object st s9 <> s or not s in the carrier of S holds (S variables_in root-tree [x,s]).s9 = {}; theorem :: MSAFREE3:11 for S being ManySortedSign, s being set st s in the carrier of S for p being DTree-yielding FinSequence holds x in (S variables_in ([z, the carrier of S]-tree p)).s iff ex t being DecoratedTree st t in rng p & x in (S variables_in t).s; theorem :: MSAFREE3:12 for S being ManySortedSign for X being ManySortedSet of the carrier of S for s,x being set holds (x in X.s implies (X variables_in root-tree [x,s]).s = {x}) & for s9 being set st s9 <> s or not x in X.s holds ( X variables_in root-tree [x,s]).s9 = {}; theorem :: MSAFREE3:13 for S being ManySortedSign for X being ManySortedSet of the carrier of S for s being set st s in the carrier of S for p being DTree-yielding FinSequence holds x in (X variables_in ([z, the carrier of S] -tree p)).s iff ex t being DecoratedTree st t in rng p & x in (X variables_in t ).s; theorem :: MSAFREE3:14 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S for t being Term of S, X holds S variables_in t c= X; definition let S be non void Signature; let X be non-empty ManySortedSet of the carrier of S; let t be Term of S, X; func variables_in t -> ManySortedSubset of X equals :: MSAFREE3:def 4 S variables_in t; end; theorem :: MSAFREE3:15 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S for t being Term of S, X holds variables_in t = X variables_in t; definition let S be non void Signature; let Y be non-empty ManySortedSet of the carrier of S; let X be ManySortedSet of the carrier of S; func S-Terms(X,Y) -> MSSubset of FreeMSA Y means :: MSAFREE3:def 5 for s being SortSymbol of S holds it.s = {t where t is Term of S,Y: the_sort_of t = s & variables_in t c= X}; end; theorem :: MSAFREE3:16 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S for s being SortSymbol of S st x in S-Terms(X,Y).s holds x is Term of S,Y; theorem :: MSAFREE3:17 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S for t being Term of S, Y for s being SortSymbol of S st t in S-Terms(X,Y).s holds the_sort_of t = s & variables_in t c= X; theorem :: MSAFREE3:18 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S for s being SortSymbol of S holds root-tree [x,s] in (S-Terms(X,Y)).s iff x in X.s & x in Y.s; theorem :: MSAFREE3:19 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S for o being OperSymbol of S for p being ArgumentSeq of Sym(o,Y) holds Sym(o,Y) -tree p in (S-Terms(X,Y)).the_result_sort_of o iff rng p c= Union (S-Terms(X,Y) ); theorem :: MSAFREE3:20 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S for A being MSSubset of FreeMSA X holds A is opers_closed iff for o being OperSymbol of S, p being ArgumentSeq of Sym(o,X) st rng p c= Union A holds Sym(o,X)-tree p in A.the_result_sort_of o; theorem :: MSAFREE3:21 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S holds S-Terms(X,Y) is opers_closed; theorem :: MSAFREE3:22 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for X being ManySortedSet of the carrier of S holds (Reverse Y)""X c= S-Terms(X,Y); theorem :: MSAFREE3:23 for S being non void Signature for X being ManySortedSet of the carrier of S for t being Term of S, X (\/) ((the carrier of S)-->{0}) for s being SortSymbol of S st t in S-Terms(X, X (\/) ((the carrier of S)-->{0})).s holds t in (the Sorts of Free(S, X)).s; theorem :: MSAFREE3:24 for S being non void Signature for X being ManySortedSet of the carrier of S holds the Sorts of Free(S, X) = S-Terms(X, X (\/) ((the carrier of S)-->{0})); theorem :: MSAFREE3:25 for S being non void Signature for X being ManySortedSet of the carrier of S holds (FreeMSA (X (\/) ((the carrier of S)-->{0})))| (S-Terms(X, X (\/) ((the carrier of S)-->{0}))) = Free(S, X); theorem :: MSAFREE3:26 for S being non void Signature for X,Y being non-empty ManySortedSet of the carrier of S for A being MSSubAlgebra of FreeMSA X for B being MSSubAlgebra of FreeMSA Y st the Sorts of A = the Sorts of B holds the MSAlgebra of A = the MSAlgebra of B; theorem :: MSAFREE3:27 for S being non void Signature for X being non empty-yielding ManySortedSet of the carrier of S for Y being ManySortedSet of the carrier of S for t being Element of Free(S, X) holds S variables_in t c= X; theorem :: MSAFREE3:28 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S for t being Term of S,X holds variables_in t c= X; theorem :: MSAFREE3:29 for S being non void Signature for X,Y being non-empty ManySortedSet of the carrier of S for t1 being Term of S,X, t2 being Term of S, Y st t1 = t2 holds the_sort_of t1 = the_sort_of t2; theorem :: MSAFREE3:30 for S being non void Signature for X,Y being non-empty ManySortedSet of the carrier of S for t being Term of S,Y st variables_in t c= X holds t is Term of S,X; theorem :: MSAFREE3:31 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S holds Free(S, X) = FreeMSA X; theorem :: MSAFREE3:32 for S being non void Signature for Y being non-empty ManySortedSet of the carrier of S for t being Term of S,Y for p being Element of dom t holds variables_in (t|p) c= variables_in t; theorem :: MSAFREE3:33 for S being non void Signature for X being non empty-yielding ManySortedSet of the carrier of S for t being Element of Free(S, X) for p being Element of dom t holds t|p is Element of Free(S, X); theorem :: MSAFREE3:34 for S being non void Signature for X being non-empty ManySortedSet of the carrier of S for t being Term of S,X for a being Element of rng t holds a = [a`1,a`2]; theorem :: MSAFREE3:35 for S being non void Signature for X being non empty-yielding ManySortedSet of the carrier of S for t being Element of Free(S, X) for s being SortSymbol of S holds (x in (S variables_in t).s implies [x,s] in rng t) & ([x, s] in rng t implies x in (S variables_in t).s & x in X.s); theorem :: MSAFREE3:36 for S being non void Signature for X being ManySortedSet of the carrier of S st for s being SortSymbol of S st X.s = {} ex o being OperSymbol of S st the_result_sort_of o = s & the_arity_of o = {} holds Free(S, X) is non-empty; theorem :: MSAFREE3:37 for S being non void non empty ManySortedSign for A being MSAlgebra over S for B being MSSubAlgebra of A for o being OperSymbol of S holds Args(o,B) c= Args(o,A); theorem :: MSAFREE3:38 for S being non void Signature for A being feasible MSAlgebra over S for B being MSSubAlgebra of A holds B is feasible; registration let S be non void Signature, A be feasible MSAlgebra over S; cluster -> feasible for MSSubAlgebra of A; end; theorem :: MSAFREE3:39 for S being non void Signature for X being ManySortedSet of the carrier of S holds Free(S, X) is feasible free; registration let S be non void Signature, X be ManySortedSet of the carrier of S; cluster Free(S, X) -> feasible free; end;