Article BIRKHOFF, MML version 4.99.1005

:: BIRKHOFF:funcnot 1 => BIRKHOFF:func 1
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty ManySortedSet of the carrier of a1;
  let a3 be non-empty MSAlgebra over a1;
  let a4 be ManySortedFunction of a2,the Sorts of a3;
  func A4 -hash -> ManySortedFunction of the Sorts of FreeMSA a2,the Sorts of a3 means
    it is_homomorphism FreeMSA a2,a3 & it || FreeGen a2 = a4 ** Reverse a2;
end;

:: BIRKHOFF:def 1
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty ManySortedSet of the carrier of b1
for b3 being non-empty MSAlgebra over b1
for b4 being ManySortedFunction of b2,the Sorts of b3
for b5 being ManySortedFunction of the Sorts of FreeMSA b2,the Sorts of b3 holds
      b5 = b4 -hash
   iff
      b5 is_homomorphism FreeMSA b2,b3 & b5 || FreeGen b2 = b4 ** Reverse b2;

:: BIRKHOFF:th 1
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being non-empty ManySortedSet of the carrier of b1
for b4 being ManySortedFunction of b3,the Sorts of b2 holds
   rngs b4 c= rngs (b4 -hash);

:: BIRKHOFF:sch 1
scheme BIRKHOFF:sch 1
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty MSAlgebra over F1()}:
ex b1 being strict non-empty MSAlgebra over F1() st
   ex b2 being ManySortedFunction of the Sorts of F2(),the Sorts of b1 st
      P1[b1] &
       b2 is_epimorphism F2(),b1 &
       (for b3 being non-empty MSAlgebra over F1()
       for b4 being ManySortedFunction of the Sorts of F2(),the Sorts of b3
             st b4 is_homomorphism F2(),b3 & P1[b3]
          holds ex b5 being ManySortedFunction of the Sorts of b1,the Sorts of b3 st
             b5 is_homomorphism b1,b3 &
              b5 ** b2 = b4 &
              (for b6 being ManySortedFunction of the Sorts of b1,the Sorts of b3
                    st b6 ** b2 = b4
                 holds b5 = b6))
provided
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2]
and
   for b1 being set
   for b2 being MSAlgebra-Family of b1,F1()
         st for b3 being set
                 st b3 in b1
              holds ex b4 being MSAlgebra over F1() st
                 b4 = b2 . b3 & P1[b4]
      holds P1[product b2];


:: BIRKHOFF:sch 2
scheme BIRKHOFF:sch 2
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty ManySortedSet of the carrier of F1()}:
ex b1 being strict non-empty MSAlgebra over F1() st
   ex b2 being ManySortedFunction of F2(),the Sorts of b1 st
      P1[b1] &
       (for b3 being non-empty MSAlgebra over F1()
       for b4 being ManySortedFunction of F2(),the Sorts of b3
             st P1[b3]
          holds ex b5 being ManySortedFunction of the Sorts of b1,the Sorts of b3 st
             b5 is_homomorphism b1,b3 &
              b5 ** b2 = b4 &
              (for b6 being ManySortedFunction of the Sorts of b1,the Sorts of b3
                    st b6 is_homomorphism b1,b3 & b6 ** b2 = b4
                 holds b5 = b6))
provided
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2]
and
   for b1 being set
   for b2 being MSAlgebra-Family of b1,F1()
         st for b3 being set
                 st b3 in b1
              holds ex b4 being MSAlgebra over F1() st
                 b4 = b2 . b3 & P1[b4]
      holds P1[product b2];


:: BIRKHOFF:sch 3
scheme BIRKHOFF:sch 3
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty MSAlgebra over F1(),
  F3 -> non-empty MSAlgebra over F1(),
  F4 -> ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of F2(),
  F5 -> ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of F3()}:
ex b1 being ManySortedFunction of the Sorts of F2(),the Sorts of F3() st
   b1 is_homomorphism F2(),F3() & F5() -hash = b1 ** (F4() -hash)
provided
   P1[F3()]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of b1
         st P1[b1]
      holds ex b3 being ManySortedFunction of the Sorts of F2(),the Sorts of b1 st
         b3 is_homomorphism F2(),b1 & b2 = b3 ** F4();


:: BIRKHOFF:sch 4
scheme BIRKHOFF:sch 4
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty MSAlgebra over F1(),
  F3 -> ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of F2(),
  F4 -> Element of the carrier of F1(),
  F5 -> Element of (the Sorts of TermAlg F1()) . F4(),
  F6 -> Element of (the Sorts of TermAlg F1()) . F4()}:
for b1 being non-empty MSAlgebra over F1()
      st P1[b1]
   holds b1 |= F5() '=' F6()
provided
   (F3() -hash . F4()) . F5() = (F3() -hash . F4()) . F6()
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of b1
         st P1[b1]
      holds ex b3 being ManySortedFunction of the Sorts of F2(),the Sorts of b1 st
         b3 is_homomorphism F2(),b1 & b2 = b3 ** F3();


:: BIRKHOFF:sch 5
scheme BIRKHOFF:sch 5
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty ManySortedSet of the carrier of F1(),
  F3 -> strict non-empty MSAlgebra over F1(),
  F4 -> ManySortedFunction of F2(),the Sorts of F3()}:
F4() .:.: F2() is non-empty GeneratorSet of F3()
provided
   for b1 being non-empty MSAlgebra over F1()
   for b2 being ManySortedFunction of F2(),the Sorts of b1
         st P1[b1]
      holds ex b3 being ManySortedFunction of the Sorts of F3(),the Sorts of b1 st
         b3 is_homomorphism F3(),b1 &
          b3 ** F4() = b2 &
          (for b4 being ManySortedFunction of the Sorts of F3(),the Sorts of b1
                st b4 is_homomorphism F3(),b1 & b4 ** F4() = b2
             holds b3 = b4)
and
   P1[F3()]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2];


:: BIRKHOFF:sch 6
scheme BIRKHOFF:sch 6
{F1 -> non empty non void ManySortedSign,
  F2 -> strict non-empty MSAlgebra over F1(),
  F3 -> ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of F2()}:
F3() -hash is_epimorphism FreeMSA ((the carrier of F1()) --> NAT),F2()
provided
   for b1 being non-empty MSAlgebra over F1()
   for b2 being ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of b1
         st P1[b1]
      holds ex b3 being ManySortedFunction of the Sorts of F2(),the Sorts of b1 st
         b3 is_homomorphism F2(),b1 &
          b3 ** F3() = b2 &
          (for b4 being ManySortedFunction of the Sorts of F2(),the Sorts of b1
                st b4 is_homomorphism F2(),b1 & b4 ** F3() = b2
             holds b3 = b4)
and
   P1[F2()]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2];


:: BIRKHOFF:sch 7
scheme BIRKHOFF:sch 7
{F1 -> non empty non void ManySortedSign,
  F2 -> strict non-empty finitely-generated MSAlgebra over F1(),
  F3 -> non-empty MSAlgebra over F1(),
  F4 -> ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of F3()}:
P1[F2()]
provided
   P2[F2()]
and
   P1[F3()]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of b1
         st P2[b1]
      holds ex b3 being ManySortedFunction of the Sorts of F3(),the Sorts of b1 st
         b3 is_homomorphism F3(),b1 & b2 = b3 ** F4()
and
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b1,the Sorts of b1
         st P1[b1]
      holds P1[QuotMSAlg(b1,b2)];


:: BIRKHOFF:sch 8
scheme BIRKHOFF:sch 8
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty MSAlgebra over F1(),
  F3 -> non-empty MSAlgebra over F1()}:
P1[F3()]
provided
   ex b1 being ManySortedFunction of the Sorts of F2(),the Sorts of F3() st
      b1 is_epimorphism F2(),F3()
and
   P1[F2()]
and
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b1,the Sorts of b1
         st P1[b1]
      holds P1[QuotMSAlg(b1,b2)];


:: BIRKHOFF:sch 9
scheme BIRKHOFF:sch 9
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty MSAlgebra over F1()}:
P1[F2()]
provided
   for b1 being strict non-empty finitely-generated MSSubAlgebra of F2() holds
      P1[b1]
and
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b1,the Sorts of b1
         st P1[b1]
      holds P1[QuotMSAlg(b1,b2)]
and
   for b1 being set
   for b2 being MSAlgebra-Family of b1,F1()
         st for b3 being set
                 st b3 in b1
              holds ex b4 being MSAlgebra over F1() st
                 b4 = b2 . b3 & P1[b4]
      holds P1[product b2];


:: BIRKHOFF:sch 10
scheme BIRKHOFF:sch 10
{F1 -> non empty non void ManySortedSign,
  F2 -> non-empty MSAlgebra over F1()}:
P2[F2()]
provided
   for b1 being non-empty MSAlgebra over F1() holds
         P2[b1]
      iff
         for b2 being Element of the carrier of F1()
         for b3 being Element of (Equations F1()) . b2
               st for b4 being non-empty MSAlgebra over F1()
                       st P1[b4]
                    holds b4 |= b3
            holds b1 |= b3
and
   P1[F2()];


:: BIRKHOFF:sch 11
scheme BIRKHOFF:sch 11
{F1 -> non empty non void ManySortedSign,
  F2 -> strict non-empty MSAlgebra over F1(),
  F3 -> ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of F2()}:
P1[F2()]
provided
   for b1 being non-empty MSAlgebra over F1() holds
         P2[b1]
      iff
         for b2 being Element of the carrier of F1()
         for b3 being Element of (Equations F1()) . b2
               st for b4 being non-empty MSAlgebra over F1()
                       st P1[b4]
                    holds b4 |= b3
            holds b1 |= b3
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being ManySortedFunction of (the carrier of F1()) --> NAT,the Sorts of b1
         st P2[b1]
      holds ex b3 being ManySortedFunction of the Sorts of F2(),the Sorts of b1 st
         b3 is_homomorphism F2(),b1 &
          b3 ** F3() = b2 &
          (for b4 being ManySortedFunction of the Sorts of F2(),the Sorts of b1
                st b4 is_homomorphism F2(),b1 & b4 ** F3() = b2
             holds b3 = b4)
and
   P2[F2()]
and
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2]
and
   for b1 being set
   for b2 being MSAlgebra-Family of b1,F1()
         st for b3 being set
                 st b3 in b1
              holds ex b4 being MSAlgebra over F1() st
                 b4 = b2 . b3 & P1[b4]
      holds P1[product b2];


:: BIRKHOFF:sch 12
scheme BIRKHOFF:sch 12
{F1 -> non empty non void ManySortedSign}:
ex b1 being ManySortedSubset of Equations F1() st
   for b2 being non-empty MSAlgebra over F1() holds
         P1[b2]
      iff
         b2 |= b1
provided
   for b1, b2 being non-empty MSAlgebra over F1()
         st b1,b2 are_isomorphic & P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being strict non-empty MSSubAlgebra of b1
         st P1[b1]
      holds P1[b2]
and
   for b1 being non-empty MSAlgebra over F1()
   for b2 being MSEquivalence-like MSCongruence-like ManySortedRelation of the Sorts of b1,the Sorts of b1
         st P1[b1]
      holds P1[QuotMSAlg(b1,b2)]
and
   for b1 being set
   for b2 being MSAlgebra-Family of b1,F1()
         st for b3 being set
                 st b3 in b1
              holds ex b4 being MSAlgebra over F1() st
                 b4 = b2 . b3 & P1[b4]
      holds P1[product b2];