Journal of Formalized Mathematics
Volume 6, 1994
University of Bialystok
Copyright (c) 1994 Association of Mizar Users

The abstract of the Mizar article:

Free Many Sorted Universal Algebra

by
Beata Perkowska

Received April 27, 1994

MML identifier: MSAFREE
[ Mizar article, MML identifier index ]


environ

 vocabulary FUNCT_1, PBOOLE, TDGROUP, CARD_3, RELAT_1, MSUALG_2, PRALG_1,
      REALSET1, BOOLE, ZF_REFLE, PROB_1, TARSKI, AMI_1, MSUALG_1, FREEALG,
      PRELAMB, ALG_1, FINSEQ_1, QC_LANG1, LANG1, DTCONSTR, TREES_4, TREES_2,
      TREES_3, FUNCT_6, MCART_1, UNIALG_2, GROUP_6, MSUALG_3, MSAFREE,
      FINSEQ_4;
 notation TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, XREAL_0, NAT_1, RELAT_1,
      RELSET_1, STRUCT_0, FUNCT_1, MCART_1, FUNCT_2, FINSEQ_1, FINSEQ_2,
      TREES_2, PROB_1, CARD_3, FINSEQ_4, LANG1, TREES_3, FUNCT_6, TREES_4,
      DTCONSTR, PBOOLE, PRALG_1, MSUALG_1, MSUALG_2, MSUALG_3;
 constructors NAT_1, MCART_1, MSUALG_3, FINSOP_1, FINSEQ_4, FINSEQOP, PROB_1,
      MEMBERED, XBOOLE_0;
 clusters SUBSET_1, FUNCT_1, FINSEQ_1, PBOOLE, TREES_3, TREES_4, DTCONSTR,
      PRALG_1, MSUALG_1, MSUALG_3, RELSET_1, STRUCT_0, XBOOLE_0, ARYTM_3,
      MEMBERED, ZFMISC_1, NUMBERS, ORDINAL2;
 requirements NUMERALS, BOOLE, SUBSET;


begin

::
:: Preliminaries
::

theorem :: MSAFREE:1
for I be set, J be non empty set, f be Function of I,J*,
    X be ManySortedSet of J, p be Element of J*, x be set
st x in I & p = f.x holds (X# * f).x = product (X * p);

definition
 let I be set,
     A,B be ManySortedSet of I,
     C be ManySortedSubset of A,
     F be ManySortedFunction of A,B;
func F || C -> ManySortedFunction of C,B means
:: MSAFREE:def 1
for i be set st i in I
 for f be Function of A.i,B.i st f = F.i holds it.i = f | (C.i);
end;

definition let I be set,
               X be ManySortedSet of I,
               i be set;
 assume  i in I;
func coprod(i,X) -> set means
:: MSAFREE:def 2
for x be set holds x in it iff ex a be set st a in X.i & x = [a,i];
end;

definition let I be set,
               X be ManySortedSet of I;
 redefine func disjoin X -> ManySortedSet of I means
:: MSAFREE:def 3
   for i be set st i in I holds it.i = coprod(i,X);
 synonym coprod X;
end;

definition
 let I be non empty set,
     X be non-empty ManySortedSet of I;
 cluster coprod X -> non-empty;
end;

definition
 let I be non empty set,
     X be non-empty ManySortedSet of I;
 cluster Union X -> non empty;
end;

theorem :: MSAFREE:2
  for I be set, X be ManySortedSet of I, i be set st i in I holds
X.i <> {} iff (coprod X).i <> {};

begin
::
:: Free Many Sorted Universal Algebra - General Notions
::

reserve S for non void non empty ManySortedSign,
        U0 for MSAlgebra over S;

definition
 let S be non void non empty ManySortedSign,
     U0 be MSAlgebra over S;
mode GeneratorSet of U0 -> MSSubset of U0 means
:: MSAFREE:def 4
the Sorts of GenMSAlg(it) = the Sorts of U0;
end;

theorem :: MSAFREE:3
  for S be non void non empty ManySortedSign,
    U0 be strict non-empty MSAlgebra over S,
    A be MSSubset of U0 holds
          A is GeneratorSet of U0 iff GenMSAlg(A) = U0;

definition
 let S,U0;
 let IT be GeneratorSet of U0;
attr IT is free means
:: MSAFREE:def 5
for U1 be non-empty MSAlgebra over S
 for f be ManySortedFunction of IT,the Sorts of U1
  ex h be ManySortedFunction of U0,U1
                  st h is_homomorphism U0,U1 & h || IT = f;
end;

definition
 let S be non void non empty ManySortedSign;
 let IT be MSAlgebra over S;
attr IT is free means
:: MSAFREE:def 6
 ex G being GeneratorSet of IT st G is free;
end;

theorem :: MSAFREE:4
for S be non void non empty ManySortedSign,
    X be ManySortedSet of the carrier of S
holds Union coprod X misses [:the OperSymbols of S,{the carrier of S}:];

begin
::
:: Construction of Free Many Sorted Algebras for Given Signature
::

definition
 let S be non void ManySortedSign;
 cluster the OperSymbols of S -> non empty;
end;

definition
 let S be non void non empty ManySortedSign,
     X be ManySortedSet of the carrier of S;
 canceled 2;

func REL(X) -> Relation of
   ([:the OperSymbols of S,{the carrier of S}:] \/ Union (coprod X)),
   (([:the OperSymbols of S,{the carrier of S}:] \/ Union (coprod X))*) means
:: MSAFREE:def 9

for a be Element of
        [:the OperSymbols of S,{the carrier of S}:] \/ Union (coprod X),
    b be Element of
       ([:the OperSymbols of S,{the carrier of S}:] \/ Union (coprod X))*
 holds
 [a,b] in it iff
  a in [:the OperSymbols of S,{the carrier of S}:] &
  for o be OperSymbol of S st [o,the carrier of S] = a holds
   len b = len (the_arity_of o) &
   for x be set st x in dom b holds
    (b.x in [:the OperSymbols of S,{the carrier of S}:] implies
    for o1 be OperSymbol of S st [o1,the carrier of S] = b.x
      holds the_result_sort_of o1 = (the_arity_of o).x) &
    (b.x in Union (coprod X) implies b.x in coprod((the_arity_of o).x,X));
end;

reserve S for non void non empty ManySortedSign,
         X for ManySortedSet of the carrier of S,
         o for OperSymbol of S,
         b for Element of
            ([:the OperSymbols of S,{the carrier of S}:] \/ Union (coprod X))*
;

theorem :: MSAFREE:5
               [[o,the carrier of S],b] in REL(X)
                            iff
   len b = len (the_arity_of o) &
   for x be set st x in dom b holds
    (b.x in [:the OperSymbols of S,{the carrier of S}:] implies
     for o1 be OperSymbol of S st [o1,the carrier of S] = b.x
    holds the_result_sort_of o1 = (the_arity_of o).x) &
    (b.x in Union (coprod X) implies b.x in coprod((the_arity_of o).x,X));

definition
 let S be non void non empty ManySortedSign,
     X be ManySortedSet of the carrier of S;
func DTConMSA(X) -> DTConstrStr equals
:: MSAFREE:def 10
 DTConstrStr (# [:the OperSymbols of S,{the carrier of S}:]
                   \/ Union (coprod X), REL(X) #);
end;

definition
 let S be non void non empty ManySortedSign,
     X be ManySortedSet of the carrier of S;
 cluster DTConMSA(X) -> strict non empty;
end;

theorem :: MSAFREE:6
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S holds
NonTerminals(DTConMSA(X)) = [:the OperSymbols of S,{the carrier of S}:] &
Terminals (DTConMSA(X)) = Union (coprod X);

reserve x for set;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
cluster DTConMSA(X) -> with_terminals with_nonterminals
   with_useful_nonterminals;
end;

theorem :: MSAFREE:7
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S,
    t be set holds
               t in Terminals DTConMSA(X)
                          iff
 ex s be SortSymbol of S, x be set st x in X.s & t = [x,s];

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     o be OperSymbol of S;
func Sym(o,X) ->Symbol of DTConMSA(X) equals
:: MSAFREE:def 11
 [o,the carrier of S];
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     s be SortSymbol of S;
func FreeSort(X,s) -> Subset of TS(DTConMSA(X)) equals
:: MSAFREE:def 12
 {a where a is Element of TS(DTConMSA(X)):
       (ex x be set st x in X.s & a = root-tree [x,s]) or
       ex o be OperSymbol of S st [o,the carrier of S] = a.{}
           & the_result_sort_of o = s};
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     s be SortSymbol of S;
cluster FreeSort(X,s) -> non empty;
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
func FreeSort(X) -> ManySortedSet of the carrier of S means
:: MSAFREE:def 13
for s be SortSymbol of S holds it.s = FreeSort(X,s);
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
cluster FreeSort(X) -> non-empty;
end;

theorem :: MSAFREE:8
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S, o be OperSymbol of S,
    x be set
 st x in ((FreeSort X)# * (the Arity of S)).o holds
    x is FinSequence of TS(DTConMSA(X));

theorem :: MSAFREE:9
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S, o be OperSymbol of S,
    p be FinSequence of TS(DTConMSA(X))
holds p in ((FreeSort X)# * (the Arity of S)).o iff
 dom p = dom (the_arity_of o) &
 for n be Nat st n in dom p holds p.n in FreeSort(X,(the_arity_of o)/.n);

theorem :: MSAFREE:10
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S, o be OperSymbol of S,
    p be FinSequence of TS(DTConMSA(X)) holds
 Sym(o,X) ==> roots p iff p in ((FreeSort X)# * (the Arity of S)).o;

canceled;

theorem :: MSAFREE:12
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S holds
 union rng (FreeSort X) = TS (DTConMSA(X));

theorem :: MSAFREE:13
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S, s1,s2 be SortSymbol of S
 st s1 <> s2 holds (FreeSort X).s1 misses (FreeSort X).s2;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     o be OperSymbol of S;
func DenOp(o,X) ->
Function of ((FreeSort X)# * (the Arity of S)).o,
            ((FreeSort X) * (the ResultSort of S)).o means
:: MSAFREE:def 14
for p be FinSequence of TS(DTConMSA(X)) st Sym(o,X) ==> roots p holds
  it.p = (Sym(o,X))-tree p;
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
func FreeOper(X) -> ManySortedFunction of (FreeSort X)# * (the Arity of S),
              (FreeSort X) * (the ResultSort of S) means
:: MSAFREE:def 15
for o be OperSymbol of S holds it.o = DenOp(o,X);
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
func FreeMSA(X) -> MSAlgebra over S equals
:: MSAFREE:def 16
 MSAlgebra (# FreeSort(X), FreeOper(X) #);
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
cluster FreeMSA(X) -> strict non-empty;
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     s be SortSymbol of S;
func FreeGen(s,X) -> Subset of (FreeSort(X)).s means
:: MSAFREE:def 17
for x be set holds
     x in it iff ex a be set st a in X.s & x = root-tree [a,s];
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     s be SortSymbol of S;
cluster FreeGen(s,X) -> non empty;
end;

theorem :: MSAFREE:14
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S,
    s be SortSymbol of S holds
FreeGen(s,X) = {root-tree t where t is Symbol of DTConMSA(X):
               t in Terminals DTConMSA(X) & t`2 = s};

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
func FreeGen(X) -> GeneratorSet of FreeMSA(X) means
:: MSAFREE:def 18
for s be SortSymbol of S holds it.s = FreeGen(s,X);
end;

theorem :: MSAFREE:15
  for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S
holds FreeGen(X)is non-empty;

theorem :: MSAFREE:16
  for S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S holds
union rng FreeGen(X) = {root-tree t where t is Symbol of DTConMSA(X):
                           t in Terminals DTConMSA(X)};

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     s be SortSymbol of S;
func Reverse(s,X) -> Function of FreeGen(s,X),X.s means
:: MSAFREE:def 19
for t be Symbol of DTConMSA(X) st
  root-tree t in FreeGen(s,X) holds it.(root-tree t) = t`1;
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S;
func Reverse(X) -> ManySortedFunction of FreeGen(X),X means
:: MSAFREE:def 20
for s be SortSymbol of S holds it.s = Reverse(s,X);
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     A be non-empty ManySortedSet of the carrier of S,
     F be ManySortedFunction of FreeGen(X), A,
     t be Symbol of DTConMSA(X);
assume  t in Terminals (DTConMSA(X));
func pi(F,A,t) -> Element of Union A means
:: MSAFREE:def 21
 for f be Function st f = F.(t`2) holds it = f.(root-tree t);
end;

definition
 let S be non void non empty ManySortedSign,
     X be non-empty ManySortedSet of the carrier of S,
     t be Symbol of DTConMSA(X);
assume  ex p be FinSequence st t ==> p;
func @(X,t) -> OperSymbol of S means
:: MSAFREE:def 22
  [it,the carrier of S] = t;
end;

definition
 let S be non void non empty ManySortedSign,
    U0 be non-empty MSAlgebra over S,
    o be OperSymbol of S,
    p be FinSequence;
assume  p in Args(o,U0);
func pi(o,U0,p) -> Element of Union (the Sorts of U0) equals
:: MSAFREE:def 23
  Den(o,U0).p;
end;

theorem :: MSAFREE:17
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S holds FreeGen(X) is free;

theorem :: MSAFREE:18
for S be non void non empty ManySortedSign,
    X be non-empty ManySortedSet of the carrier of S holds
FreeMSA(X) is free;

definition
 let S be non void non empty ManySortedSign;
cluster free strict (non-empty MSAlgebra over S);
end;

definition
 let S be non void non empty ManySortedSign,
    U0 be free MSAlgebra over S;
cluster free GeneratorSet of U0;
end;

theorem :: MSAFREE:19
for S be non void non empty ManySortedSign,
    U1 be non-empty MSAlgebra over S
 ex U0 be strict free (non-empty MSAlgebra over S),
    F be ManySortedFunction of U0,U1
       st F is_epimorphism U0,U1;

theorem :: MSAFREE:20
  for S be non void non empty ManySortedSign,
    U1 be strict non-empty MSAlgebra over S
 ex U0 be strict free (non-empty MSAlgebra over S),
    F be ManySortedFunction of U0,U1
       st F is_epimorphism U0,U1 & Image F = U1;

Back to top