Article FINSOP_1, MML version 4.99.1005

:: FINSOP_1:funcnot 1 => FINSOP_1:func 1
definition
  let a1 be non empty set;
  let a2 be Element of NAT;
  let a3 be Element of a1;
  redefine func a2 |-> a3 -> FinSequence of a1;
end;

:: FINSOP_1:funcnot 2 => FINSOP_1:func 2
definition
  let a1 be non empty set;
  let a2 be FinSequence of a1;
  let a3 be Function-like quasi_total Relation of [:a1,a1:],a1;
  assume (a3 is having_a_unity(a1) or 1 <= len a2);
  func A3 "**" A2 -> Element of a1 means
    it = the_unity_wrt a3
    if a3 is having_a_unity(a1) & len a2 = 0
    otherwise ex b1 being Function-like quasi_total Relation of NAT,a1 st
       b1 . 1 = a2 . 1 &
        (for b2 being Element of NAT
              st 0 <> b2 & b2 < len a2
           holds b1 . (b2 + 1) = a3 .(b1 . b2,a2 . (b2 + 1))) &
        it = b1 . len a2;
end;

:: FINSOP_1:def 1
theorem
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
   st (b3 is having_a_unity(b1) or 1 <= len b2)
for b4 being Element of b1 holds
   (b3 is having_a_unity(b1) & len b2 = 0 implies    (b4 = b3 "**" b2
    iff
       b4 = the_unity_wrt b3)) &
    (b3 is having_a_unity(b1) & len b2 = 0 or    (b4 = b3 "**" b2
    iff
       ex b5 being Function-like quasi_total Relation of NAT,b1 st
          b5 . 1 = b2 . 1 &
           (for b6 being Element of NAT
                 st 0 <> b6 & b6 < len b2
              holds b5 . (b6 + 1) = b3 .(b5 . b6,b2 . (b6 + 1))) &
           b4 = b5 . len b2));

:: FINSOP_1:th 2
theorem
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
      st 1 <= len b2
   holds ex b4 being Function-like quasi_total Relation of NAT,b1 st
      b4 . 1 = b2 . 1 &
       (for b5 being Element of NAT
             st 0 <> b5 & b5 < len b2
          holds b4 . (b5 + 1) = b3 .(b4 . b5,b2 . (b5 + 1))) &
       b3 "**" b2 = b4 . len b2;

:: FINSOP_1:th 3
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being FinSequence of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
      st 1 <= len b3 &
         (ex b5 being Function-like quasi_total Relation of NAT,b1 st
            b5 . 1 = b3 . 1 &
             (for b6 being Element of NAT
                   st 0 <> b6 & b6 < len b3
                holds b5 . (b6 + 1) = b4 .(b5 . b6,b3 . (b6 + 1))) &
             b2 = b5 . len b3)
   holds b2 = b4 "**" b3;

:: FINSOP_1:funcnot 3 => FINSOP_1:func 3
definition
  let a1 be non empty set;
  let a2 be Function-like quasi_total Relation of NAT,a1;
  let a3 be FinSequence of a1;
  redefine func a2 +* a3 -> Function-like quasi_total Relation of NAT,a1;
  idempotence;
::  for a1 being non empty set
::  for a2 being Function-like quasi_total Relation of NAT,a1 holds
::     a2 +* a2 = a2;
end;

:: FINSOP_1:funcnot 4 => RELAT_1:func 1
notation
  let a1 be Relation-like Function-like FinSequence-like set;
  synonym findom a1 for proj1 a1;
end;

:: FINSOP_1:funcnot 5 => FINSOP_1:func 4
definition
  let a1 be Relation-like Function-like FinSequence-like set;
  redefine func findom a1 -> Element of Fin NAT;
end;

:: FINSOP_1:th 4
theorem
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
      st (b3 is having_a_unity(b1) or 1 <= len b2) & b3 is associative(b1) & b3 is commutative(b1)
   holds b3 "**" b2 = b3 $$(findom b2,(NAT --> the_unity_wrt b3) +* b2);

:: FINSOP_1:th 5
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being FinSequence of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
      st (b4 is having_a_unity(b1) or 1 <= len b3)
   holds b4 "**" (b3 ^ <*b2*>) = b4 .(b4 "**" b3,b2);

:: FINSOP_1:th 6
theorem
for b1 being non empty set
for b2, b3 being FinSequence of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
      st b4 is associative(b1) &
         (b4 is having_a_unity(b1) or 1 <= len b2 & 1 <= len b3)
   holds b4 "**" (b2 ^ b3) = b4 .(b4 "**" b2,b4 "**" b3);

:: FINSOP_1:th 7
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being FinSequence of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
      st b4 is associative(b1) & (b4 is having_a_unity(b1) or 1 <= len b3)
   holds b4 "**" (<*b2*> ^ b3) = b4 .(b2,b4 "**" b3);

:: FINSOP_1:th 8
theorem
for b1 being non empty set
for b2, b3 being FinSequence of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
for b5 being Function-like quasi_total bijective Relation of dom b2,dom b2
      st b4 is commutative(b1) & b4 is associative(b1) & (b4 is having_a_unity(b1) or 1 <= len b2) & b3 = b5 * b2
   holds b4 "**" b2 = b4 "**" b3;

:: FINSOP_1:th 9
theorem
for b1 being non empty set
for b2, b3 being FinSequence of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
      st (b4 is having_a_unity(b1) or 1 <= len b2) & b4 is associative(b1) & b4 is commutative(b1) & b2 is one-to-one & b3 is one-to-one & proj2 b2 = proj2 b3
   holds b4 "**" b2 = b4 "**" b3;

:: FINSOP_1:th 10
theorem
for b1 being non empty set
for b2, b3, b4 being FinSequence of b1
for b5 being Function-like quasi_total Relation of [:b1,b1:],b1
      st b5 is associative(b1) &
         b5 is commutative(b1) &
         (b5 is having_a_unity(b1) or 1 <= len b2) &
         len b2 = len b3 &
         len b2 = len b4 &
         (for b6 being Element of NAT
               st b6 in dom b2
            holds b2 . b6 = b5 .(b3 . b6,b4 . b6))
   holds b5 "**" b2 = b5 .(b5 "**" b3,b5 "**" b4);

:: FINSOP_1:th 11
theorem
for b1 being non empty set
for b2 being Function-like quasi_total Relation of [:b1,b1:],b1
      st b2 is having_a_unity(b1)
   holds b2 "**" <*> b1 = the_unity_wrt b2;

:: FINSOP_1:th 12
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1 holds
   b3 "**" <*b2*> = b2;

:: FINSOP_1:th 13
theorem
for b1 being non empty set
for b2, b3 being Element of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1 holds
   b4 "**" <*b2,b3*> = b4 .(b2,b3);

:: FINSOP_1:th 14
theorem
for b1 being non empty set
for b2, b3 being Element of b1
for b4 being Function-like quasi_total Relation of [:b1,b1:],b1
      st b4 is commutative(b1)
   holds b4 "**" <*b2,b3*> = b4 "**" <*b3,b2*>;

:: FINSOP_1:th 15
theorem
for b1 being non empty set
for b2, b3, b4 being Element of b1
for b5 being Function-like quasi_total Relation of [:b1,b1:],b1 holds
   b5 "**" <*b2,b3,b4*> = b5 .(b5 .(b2,b3),b4);

:: FINSOP_1:th 16
theorem
for b1 being non empty set
for b2, b3, b4 being Element of b1
for b5 being Function-like quasi_total Relation of [:b1,b1:],b1
      st b5 is commutative(b1)
   holds b5 "**" <*b2,b3,b4*> = b5 "**" <*b3,b2,b4*>;

:: FINSOP_1:th 17
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1 holds
   b3 "**" (1 |-> b2) = b2;

:: FINSOP_1:th 18
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1 holds
   b3 "**" (2 |-> b2) = b3 .(b2,b2);

:: FINSOP_1:th 19
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
for b4, b5 being Element of NAT
      st b3 is associative(b1) &
         (b3 is having_a_unity(b1) or b4 <> 0 & b5 <> 0)
   holds b3 "**" ((b4 + b5) |-> b2) = b3 .(b3 "**" (b4 |-> b2),b3 "**" (b5 |-> b2));

:: FINSOP_1:th 20
theorem
for b1 being non empty set
for b2 being Element of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
for b4, b5 being Element of NAT
      st b3 is associative(b1) &
         (b3 is having_a_unity(b1) or b4 <> 0 & b5 <> 0)
   holds b3 "**" ((b4 * b5) |-> b2) = b3 "**" (b5 |-> (b3 "**" (b4 |-> b2)));

:: FINSOP_1:th 21
theorem
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
      st len b2 = 1
   holds b3 "**" b2 = b2 . 1;

:: FINSOP_1:th 22
theorem
for b1 being non empty set
for b2 being FinSequence of b1
for b3 being Function-like quasi_total Relation of [:b1,b1:],b1
      st len b2 = 2
   holds b3 "**" b2 = b3 .(b2 . 1,b2 . 2);