Article MSAFREE2, MML version 4.99.1005

:: MSAFREE2:modenot 1
definition
  let a1 be ManySortedSign;
  mode Vertex of a1 is Element of the carrier of a1;
end;

:: MSAFREE2:funcnot 1 => MSAFREE2:func 1
definition
  let a1 be non empty ManySortedSign;
  func SortsWithConstants A1 -> Element of bool the carrier of a1 equals
    {b1 where b1 is Element of the carrier of a1: b1 is with_const_op(a1)}
    if a1 is not void
    otherwise {};
end;

:: MSAFREE2:def 1
theorem
for b1 being non empty ManySortedSign holds
   (b1 is void or SortsWithConstants b1 = {b2 where b2 is Element of the carrier of b1: b2 is with_const_op(b1)}) &
    (b1 is void implies SortsWithConstants b1 = {});

:: MSAFREE2:funcnot 2 => MSAFREE2:func 2
definition
  let a1 be non empty ManySortedSign;
  func InputVertices A1 -> Element of bool the carrier of a1 equals
    (the carrier of a1) \ rng the ResultSort of a1;
end;

:: MSAFREE2:def 2
theorem
for b1 being non empty ManySortedSign holds
   InputVertices b1 = (the carrier of b1) \ rng the ResultSort of b1;

:: MSAFREE2:funcnot 3 => MSAFREE2:func 3
definition
  let a1 be non empty ManySortedSign;
  func InnerVertices A1 -> Element of bool the carrier of a1 equals
    rng the ResultSort of a1;
end;

:: MSAFREE2:def 3
theorem
for b1 being non empty ManySortedSign holds
   InnerVertices b1 = rng the ResultSort of b1;

:: MSAFREE2:th 1
theorem
for b1 being non empty void ManySortedSign holds
   InputVertices b1 = the carrier of b1;

:: MSAFREE2:th 2
theorem
for b1 being non empty non void ManySortedSign
for b2 being Element of the carrier of b1
   st b2 in InputVertices b1
for b3 being Element of the OperSymbols of b1 holds
   the_result_sort_of b3 <> b2;

:: MSAFREE2:th 5
theorem
for b1 being non empty ManySortedSign holds
   SortsWithConstants b1 c= InnerVertices b1;

:: MSAFREE2:th 6
theorem
for b1 being non empty ManySortedSign holds
   InputVertices b1 misses SortsWithConstants b1;

:: MSAFREE2:attrnot 1 => MSAFREE2:attr 1
definition
  let a1 be non empty ManySortedSign;
  attr a1 is with_input_V means
    InputVertices a1 <> {};
end;

:: MSAFREE2:dfs 4
definiens
  let a1 be non empty ManySortedSign;
To prove
     a1 is with_input_V
it is sufficient to prove
  thus InputVertices a1 <> {};

:: MSAFREE2:def 4
theorem
for b1 being non empty ManySortedSign holds
      b1 is with_input_V
   iff
      InputVertices b1 <> {};

:: MSAFREE2:exreg 1
registration
  cluster non empty non void with_input_V ManySortedSign;
end;

:: MSAFREE2:funcreg 1
registration
  let a1 be non empty with_input_V ManySortedSign;
  cluster InputVertices a1 -> non empty;
end;

:: MSAFREE2:funcnot 4 => MSAFREE2:func 4
definition
  let a1 be non empty non void ManySortedSign;
  redefine func InnerVertices a1 -> non empty Element of bool the carrier of a1;
end;

:: MSAFREE2:modenot 2 => MSAFREE2:mode 1
definition
  let a1 be non empty ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  mode InputValues of A2 -> ManySortedSet of InputVertices a1 means
    for b1 being Element of the carrier of a1
          st b1 in InputVertices a1
       holds it . b1 in (the Sorts of a2) . b1;
end;

:: MSAFREE2:dfs 5
definiens
  let a1 be non empty ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  let a3 be ManySortedSet of InputVertices a1;
To prove
     a3 is InputValues of a2
it is sufficient to prove
  thus for b1 being Element of the carrier of a1
          st b1 in InputVertices a1
       holds a3 . b1 in (the Sorts of a2) . b1;

:: MSAFREE2:def 5
theorem
for b1 being non empty ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being ManySortedSet of InputVertices b1 holds
      b3 is InputValues of b2
   iff
      for b4 being Element of the carrier of b1
            st b4 in InputVertices b1
         holds b3 . b4 in (the Sorts of b2) . b4;

:: MSAFREE2:attrnot 2 => MSAFREE2:attr 2
definition
  let a1 be non empty ManySortedSign;
  attr a1 is Circuit-like means
    for b1 being non empty non void ManySortedSign
       st b1 = a1
    for b2, b3 being Element of the OperSymbols of b1
          st the_result_sort_of b2 = the_result_sort_of b3
       holds b2 = b3;
end;

:: MSAFREE2:dfs 6
definiens
  let a1 be non empty ManySortedSign;
To prove
     a1 is Circuit-like
it is sufficient to prove
  thus for b1 being non empty non void ManySortedSign
       st b1 = a1
    for b2, b3 being Element of the OperSymbols of b1
          st the_result_sort_of b2 = the_result_sort_of b3
       holds b2 = b3;

:: MSAFREE2:def 6
theorem
for b1 being non empty ManySortedSign holds
      b1 is Circuit-like
   iff
      for b2 being non empty non void ManySortedSign
         st b2 = b1
      for b3, b4 being Element of the OperSymbols of b2
            st the_result_sort_of b3 = the_result_sort_of b4
         holds b3 = b4;

:: MSAFREE2:condreg 1
registration
  cluster non empty void -> Circuit-like (ManySortedSign);
end;

:: MSAFREE2:exreg 2
registration
  cluster non empty strict non void Circuit-like ManySortedSign;
end;

:: MSAFREE2:funcnot 5 => MSAFREE2:func 5
definition
  let a1 be non empty non void Circuit-like ManySortedSign;
  let a2 be Element of the carrier of a1;
  assume a2 in InnerVertices a1;
  func action_at A2 -> Element of the OperSymbols of a1 means
    the_result_sort_of it = a2;
end;

:: MSAFREE2:def 7
theorem
for b1 being non empty non void Circuit-like ManySortedSign
for b2 being Element of the carrier of b1
   st b2 in InnerVertices b1
for b3 being Element of the OperSymbols of b1 holds
      b3 = action_at b2
   iff
      the_result_sort_of b3 = b2;

:: MSAFREE2:th 7
theorem
for b1 being non empty non void ManySortedSign
for b2 being MSAlgebra over b1
for b3 being Element of the OperSymbols of b1
for b4 being Relation-like Function-like FinSequence-like set
      st len b4 = len the_arity_of b3 &
         (for b5 being natural set
               st b5 in dom b4
            holds b4 . b5 in (the Sorts of b2) . ((the_arity_of b3) /. b5))
   holds b4 in Args(b3,b2);

:: MSAFREE2:funcnot 6 => MSAFREE2:func 6
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  func FreeEnv A2 -> strict non-empty free MSAlgebra over a1 equals
    FreeMSA the Sorts of a2;
end;

:: MSAFREE2:def 8
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1 holds
   FreeEnv b2 = FreeMSA the Sorts of b2;

:: MSAFREE2:funcnot 7 => MSAFREE2:func 7
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty MSAlgebra over a1;
  func Eval A2 -> ManySortedFunction of the Sorts of FreeEnv a2,the Sorts of a2 means
    it is_homomorphism FreeEnv a2,a2 &
     (for b1 being Element of the carrier of a1
     for b2, b3 being set
           st b3 in FreeSort(the Sorts of a2,b1) & b3 = root-tree [b2,b1] & b2 in (the Sorts of a2) . b1
        holds (it . b1) . b3 = b2);
end;

:: MSAFREE2:def 9
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being ManySortedFunction of the Sorts of FreeEnv b2,the Sorts of b2 holds
      b3 = Eval b2
   iff
      b3 is_homomorphism FreeEnv b2,b2 &
       (for b4 being Element of the carrier of b1
       for b5, b6 being set
             st b6 in FreeSort(the Sorts of b2,b4) & b6 = root-tree [b5,b4] & b5 in (the Sorts of b2) . b4
          holds (b3 . b4) . b6 = b5);

:: MSAFREE2:th 9
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1 holds
   the Sorts of b2 is GeneratorSet of b2;

:: MSAFREE2:attrnot 3 => MSAFREE2:attr 3
definition
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
  attr a2 is finitely-generated means
    for b1 being non empty non void ManySortedSign
       st b1 = a1
    for b2 being MSAlgebra over b1
          st b2 = a2
       holds ex b3 being GeneratorSet of b2 st
          b3 is finite-yielding
    if a1 is not void
    otherwise the Sorts of a2 is finite-yielding;
end;

:: MSAFREE2:dfs 10
definiens
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
To prove
     a2 is finitely-generated
it is sufficient to prove
  per cases;
  case a1 is not void;
    thus for b1 being non empty non void ManySortedSign
       st b1 = a1
    for b2 being MSAlgebra over b1
          st b2 = a2
       holds ex b3 being GeneratorSet of b2 st
          b3 is finite-yielding;
  end;
  case a1 is void;
    thus the Sorts of a2 is finite-yielding;
  end;

:: MSAFREE2:def 10
theorem
for b1 being non empty ManySortedSign
for b2 being MSAlgebra over b1 holds
   (b1 is void or    (b2 is finitely-generated(b1)
    iff
       for b3 being non empty non void ManySortedSign
          st b3 = b1
       for b4 being MSAlgebra over b3
             st b4 = b2
          holds ex b5 being GeneratorSet of b4 st
             b5 is finite-yielding)) &
    (b1 is void implies    (b2 is finitely-generated(b1)
    iff
       the Sorts of b2 is finite-yielding));

:: MSAFREE2:attrnot 4 => MSAFREE2:attr 4
definition
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
  attr a2 is locally-finite means
    the Sorts of a2 is finite-yielding;
end;

:: MSAFREE2:dfs 11
definiens
  let a1 be non empty ManySortedSign;
  let a2 be MSAlgebra over a1;
To prove
     a2 is locally-finite
it is sufficient to prove
  thus the Sorts of a2 is finite-yielding;

:: MSAFREE2:def 11
theorem
for b1 being non empty ManySortedSign
for b2 being MSAlgebra over b1 holds
      b2 is locally-finite(b1)
   iff
      the Sorts of b2 is finite-yielding;

:: MSAFREE2:condreg 2
registration
  let a1 be non empty ManySortedSign;
  cluster non-empty locally-finite -> finitely-generated (MSAlgebra over a1);
end;

:: MSAFREE2:funcnot 8 => MSAFREE2:func 8
definition
  let a1 be non empty ManySortedSign;
  func Trivial_Algebra A1 -> strict MSAlgebra over a1 means
    the Sorts of it = (the carrier of a1) --> {{}};
end;

:: MSAFREE2:def 12
theorem
for b1 being non empty ManySortedSign
for b2 being strict MSAlgebra over b1 holds
      b2 = Trivial_Algebra b1
   iff
      the Sorts of b2 = (the carrier of b1) --> {{}};

:: MSAFREE2:exreg 3
registration
  let a1 be non empty ManySortedSign;
  cluster strict non-empty locally-finite MSAlgebra over a1;
end;

:: MSAFREE2:attrnot 5 => MSAFREE2:attr 5
definition
  let a1 be non empty ManySortedSign;
  attr a1 is monotonic means
    for b1 being non-empty finitely-generated MSAlgebra over a1 holds
       b1 is locally-finite(a1);
end;

:: MSAFREE2:dfs 13
definiens
  let a1 be non empty ManySortedSign;
To prove
     a1 is monotonic
it is sufficient to prove
  thus for b1 being non-empty finitely-generated MSAlgebra over a1 holds
       b1 is locally-finite(a1);

:: MSAFREE2:def 13
theorem
for b1 being non empty ManySortedSign holds
      b1 is monotonic
   iff
      for b2 being non-empty finitely-generated MSAlgebra over b1 holds
         b2 is locally-finite(b1);

:: MSAFREE2:exreg 4
registration
  cluster non empty finite non void Circuit-like monotonic ManySortedSign;
end;

:: MSAFREE2:th 10
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty ManySortedSet of the carrier of b1
for b3 being Element of the carrier of b1
for b4 being Element of (the Sorts of FreeMSA b2) . b3 holds
   b4 is Relation-like Function-like finite DecoratedTree-like set;

:: MSAFREE2:th 11
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty finite-yielding ManySortedSet of the carrier of b1 holds
   FreeMSA b2 is finitely-generated(b1);

:: MSAFREE2:th 12
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty MSAlgebra over b1
for b3 being Element of the carrier of b1
for b4 being Element of (the Sorts of FreeEnv b2) . b3
      st b3 in InputVertices b1
   holds ex b5 being Element of (the Sorts of b2) . b3 st
      b4 = root-tree [b5,b3];

:: MSAFREE2:th 13
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty ManySortedSet of the carrier of b1
for b3 being Element of the OperSymbols of b1
for b4 being Relation-like Function-like FinSequence-like DTree-yielding set
      st [b3,the carrier of b1] -tree b4 in (the Sorts of FreeMSA b2) . the_result_sort_of b3
   holds len b4 = len the_arity_of b3;

:: MSAFREE2:th 14
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty ManySortedSet of the carrier of b1
for b3 being Element of the OperSymbols of b1
for b4 being Relation-like Function-like FinSequence-like DTree-yielding set
   st [b3,the carrier of b1] -tree b4 in (the Sorts of FreeMSA b2) . the_result_sort_of b3
for b5 being natural set
      st b5 in dom the_arity_of b3
   holds b4 . b5 in (the Sorts of FreeMSA b2) . ((the_arity_of b3) . b5);

:: MSAFREE2:condreg 3
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty ManySortedSet of the carrier of a1;
  let a3 be Element of the carrier of a1;
  cluster -> Relation-like Function-like non empty finite (Element of (the Sorts of FreeMSA a2) . a3);
end;

:: MSAFREE2:exreg 5
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty ManySortedSet of the carrier of a1;
  let a3 be Element of the carrier of a1;
  cluster Relation-like Function-like non empty finite Element of (the Sorts of FreeMSA a2) . a3;
end;

:: MSAFREE2:condreg 4
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty ManySortedSet of the carrier of a1;
  let a3 be Element of the carrier of a1;
  cluster Relation-like Function-like -> DecoratedTree-like (Element of (the Sorts of FreeMSA a2) . a3);
end;

:: MSAFREE2:exreg 6
registration
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty ManySortedSet of the carrier of a1;
  let a3 be Element of the carrier of a1;
  cluster Relation-like Function-like non empty finite DecoratedTree-like Element of (the Sorts of FreeMSA a2) . a3;
end;

:: MSAFREE2:th 15
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty ManySortedSet of the carrier of b1
for b3 being Element of the carrier of b1
for b4 being Element of the OperSymbols of b1
for b5 being Element of (the Sorts of FreeMSA b2) . b3
      st b3 in InnerVertices b1 &
         b5 . {} = [b4,the carrier of b1]
   holds ex b6 being Relation-like Function-like FinSequence-like DTree-yielding set st
      len b6 = len the_arity_of b4 &
       (for b7 being natural set
             st b7 in dom b6
          holds b6 . b7 in (the Sorts of FreeMSA b2) . ((the_arity_of b4) . b7));

:: MSAFREE2:funcnot 9 => MSAFREE2:func 9
definition
  let a1 be non empty non void ManySortedSign;
  let a2 be non-empty ManySortedSet of the carrier of a1;
  let a3 be Element of the carrier of a1;
  let a4 be Element of (the Sorts of FreeMSA a2) . a3;
  func depth A4 -> natural set means
    ex b1 being Relation-like Function-like finite DecoratedTree-like set st
       ex b2 being non empty finite Tree-like set st
          b1 = a4 & b2 = proj1 b1 & it = height b2;
end;

:: MSAFREE2:def 14
theorem
for b1 being non empty non void ManySortedSign
for b2 being non-empty ManySortedSet of the carrier of b1
for b3 being Element of the carrier of b1
for b4 being Element of (the Sorts of FreeMSA b2) . b3
for b5 being natural set holds
      b5 = depth b4
   iff
      ex b6 being Relation-like Function-like finite DecoratedTree-like set st
         ex b7 being non empty finite Tree-like set st
            b6 = b4 & b7 = proj1 b6 & b5 = height b7;