Article POLYNOM8, MML version 4.99.1005

:: POLYNOM8:th 1
theorem
for b1 being Element of NAT
for b2 being non empty non degenerated well-unital domRing-like doubleLoopStr
for b3 being Element of the carrier of b2
      st b3 <> 0. b2
   holds b3 |^ b1 <> 0. b2;

:: POLYNOM8:condreg 1
registration
  cluster non empty right_complementable almost_left_invertible associative right-distributive well-unital add-associative right_zeroed -> domRing-like (doubleLoopStr);
end;

:: POLYNOM8:th 2
theorem
for b1 being non empty right_complementable almost_left_invertible associative commutative well-unital distributive add-associative right_zeroed doubleLoopStr
for b2, b3 being Element of the carrier of b1
      st b2 <> 0. b1 & b3 <> 0. b1
   holds (b2 * b3) " = b2 " * (b3 ");

:: POLYNOM8:th 3
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2, b3 being Element of the carrier of b1
      st b2 <> 0. b1
   holds b3 = (b3 * b2) / b2;

:: POLYNOM8:th 4
theorem
for b1 being non empty right_complementable add-associative right_zeroed left_zeroed doubleLoopStr
for b2 being Element of NAT
for b3 being FinSequence of the carrier of b1
      st len b3 = b2 &
         (for b4 being Element of NAT
               st 1 <= b4 & b4 <= b2
            holds b3 /. b4 = 1. b1)
   holds Sum b3 = b2 * 1. b1;

:: POLYNOM8:th 5
theorem
for b1 being non empty right_complementable almost_left_invertible associative commutative well-unital distributive add-associative right_zeroed doubleLoopStr
for b2 being FinSequence of the carrier of b1
for b3 being Element of the carrier of b1
      st b3 <> 1. b1 &
         (for b4 being natural set
               st 1 <= b4 & b4 <= len b2
            holds b2 . b4 = b3 |^ (b4 -' 1))
   holds Sum b2 = ((1. b1) - (b3 |^ len b2)) / ((1. b1) - b3);

:: POLYNOM8:funcnot 1 => POLYNOM8:func 1
definition
  let a1 be non empty well-unital doubleLoopStr;
  let a2 be Element of NAT;
  func emb(A2,A1) -> Element of the carrier of a1 equals
    a2 * 1. a1;
end;

:: POLYNOM8:def 1
theorem
for b1 being non empty well-unital doubleLoopStr
for b2 being Element of NAT holds
   emb(b2,b1) = b2 * 1. b1;

:: POLYNOM8:th 6
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2, b3, b4 being Element of NAT
   st 0 < b2 & 0 < b3
for b5 being Matrix of b2,b3,the carrier of b1
for b6 being Matrix of b3,b4,the carrier of b1 holds
   ((emb(b2,b1)) * b5) * b6 = (emb(b2,b1)) * (b5 * b6);

:: POLYNOM8:th 7
theorem
for b1 being non empty ZeroStr
for b2 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
for b3 being Element of NAT
      st b2 . b3 <> 0. b1
   holds b3 + 1 <= len b2;

:: POLYNOM8:th 8
theorem
for b1 being non empty ZeroStr
for b2 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
      st 0 < len b2
   holds b2 . ((len b2) - 1) <> 0. b1;

:: POLYNOM8:th 9
theorem
for b1 being non empty right_complementable associative commutative well-unital distributive add-associative right_zeroed domRing-like doubleLoopStr
for b2, b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
      st 0 < len b2 & 0 < len b3
   holds len (b2 *' b3) <= (len b2) + len b3;

:: POLYNOM8:th 10
theorem
for b1 being non empty associative doubleLoopStr
for b2, b3 being Element of the carrier of b1
for b4 being Function-like quasi_total Relation of NAT,the carrier of b1 holds
   b2 * (b3 * b4) = (b2 * b3) * b4;

:: POLYNOM8:funcnot 2 => POLYNOM8:func 2
definition
  let a1 be non empty doubleLoopStr;
  let a2, a3 be Function-like quasi_total Relation of NAT,the carrier of a1;
  func A2 * A3 -> Function-like quasi_total Relation of NAT,the carrier of a1 means
    for b1 being natural set holds
       it . b1 = (a2 . b1) * (a3 . b1);
end;

:: POLYNOM8:def 2
theorem
for b1 being non empty doubleLoopStr
for b2, b3, b4 being Function-like quasi_total Relation of NAT,the carrier of b1 holds
   b4 = b2 * b3
iff
   for b5 being natural set holds
      b4 . b5 = (b2 . b5) * (b3 . b5);

:: POLYNOM8:funcreg 1
registration
  let a1 be non empty right_complementable left-distributive add-associative right_zeroed doubleLoopStr;
  let a2, a3 be Function-like quasi_total finite-Support Relation of NAT,the carrier of a1;
  cluster a2 * a3 -> Function-like quasi_total finite-Support;
end;

:: POLYNOM8:th 11
theorem
for b1 being non empty right_complementable distributive add-associative right_zeroed doubleLoopStr
for b2, b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1 holds
len (b2 * b3) <= min(len b2,len b3);

:: POLYNOM8:th 12
theorem
for b1 being non empty right_complementable distributive add-associative right_zeroed domRing-like doubleLoopStr
for b2, b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
      st len b2 = len b3
   holds len (b2 * b3) = len b2;

:: POLYNOM8:funcnot 3 => POLYNOM8:func 3
definition
  let a1 be non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr;
  let a2 be Element of the carrier of a1;
  let a3 be integer set;
  func pow(A2,A3) -> Element of the carrier of a1 equals
    (power a1) .(a2,a3)
    if 0 <= a3
    otherwise ((power a1) .(a2,abs a3)) ";
end;

:: POLYNOM8:def 3
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1
for b3 being integer set holds
   (0 <= b3 implies pow(b2,b3) = (power b1) .(b2,b3)) &
    (0 <= b3 or pow(b2,b3) = ((power b1) .(b2,abs b3)) ");

:: POLYNOM8:th 13
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1 holds
   pow(b2,0) = 1. b1;

:: POLYNOM8:th 14
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1 holds
   pow(b2,1) = b2;

:: POLYNOM8:th 15
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1 holds
   pow(b2,- 1) = b2 ";

:: POLYNOM8:th 16
theorem
for b1 being non empty non degenerated almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being integer set holds
   pow(1. b1,b2) = 1. b1;

:: POLYNOM8:th 17
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1
for b3 being Element of NAT holds
   pow(b2,b3 + 1) = (pow(b2,b3)) * b2 &
    pow(b2,b3 + 1) = b2 * pow(b2,b3);

:: POLYNOM8:th 18
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive add-associative right_zeroed doubleLoopStr
for b2 being integer set
for b3 being Element of the carrier of b1
      st b3 <> 0. b1
   holds (pow(b3,b2)) " = pow(b3,- b2);

:: POLYNOM8:th 19
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being integer set
for b3 being Element of the carrier of b1
      st b3 <> 0. b1
   holds pow(b3,b2 + 1) = (pow(b3,b2)) * pow(b3,1);

:: POLYNOM8:th 20
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being integer set
for b3 being Element of the carrier of b1
      st b3 <> 0. b1
   holds pow(b3,b2 - 1) = (pow(b3,b2)) * pow(b3,- 1);

:: POLYNOM8:th 21
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2, b3 being integer set
for b4 being Element of the carrier of b1
      st b4 <> 0. b1
   holds (pow(b4,b2)) * pow(b4,b3) = pow(b4,b2 + b3);

:: POLYNOM8:th 22
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative left-distributive well-unital add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT
for b3 being Element of the carrier of b1
      st b3 <> 0. b1
   holds pow(b3 ",b2) = pow(b3,- b2);

:: POLYNOM8:th 23
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of the carrier of b1
   st b2 <> 0. b1
for b3, b4, b5 being natural set holds
(pow(b2,(b3 - 1) * (b5 - 1))) * pow(b2,- ((b4 - 1) * (b5 - 1))) = pow(b2,(b3 - b4) * (b5 - 1));

:: POLYNOM8:th 24
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1
for b3, b4 being Element of NAT holds
pow(b2,b3 * b4) = pow(pow(b2,b3),b4);

:: POLYNOM8:th 25
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of the carrier of b1
   st b2 <> 0. b1
for b3 being integer set holds
   pow(b2 ",b3) = (pow(b2,b3)) ";

:: POLYNOM8:th 26
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of the carrier of b1
   st b2 <> 0. b1
for b3, b4 being integer set holds
pow(b2,b3 * b4) = pow(pow(b2,b3),b4);

:: POLYNOM8:th 27
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being Element of the carrier of b1
for b3, b4 being Element of NAT
      st 1 <= b4
   holds pow(b2,b3 * (b4 - 1)) = pow(b2 |^ b3,b4 - 1);

:: POLYNOM8:funcnot 4 => POLYNOM8:func 4
definition
  let a1 be natural set;
  let a2 be non empty ZeroStr;
  let a3 be Function-like quasi_total finite-Support Relation of NAT,the carrier of a2;
  func mConv(A3,A1) -> Matrix of a1,1,the carrier of a2 means
    for b1 being natural set
          st 1 <= b1 & b1 <= a1
       holds it *(b1,1) = a3 . (b1 - 1);
end;

:: POLYNOM8:def 4
theorem
for b1 being natural set
for b2 being non empty ZeroStr
for b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b2
for b4 being Matrix of b1,1,the carrier of b2 holds
      b4 = mConv(b3,b1)
   iff
      for b5 being natural set
            st 1 <= b5 & b5 <= b1
         holds b4 *(b5,1) = b3 . (b5 - 1);

:: POLYNOM8:th 28
theorem
for b1 being natural set
   st 0 < b1
for b2 being non empty ZeroStr
for b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b2 holds
   len mConv(b3,b1) = b1 &
    width mConv(b3,b1) = 1 &
    (for b4 being natural set
          st b4 < b1
       holds (mConv(b3,b1)) *(b4 + 1,1) = b3 . b4);

:: POLYNOM8:th 29
theorem
for b1 being natural set
   st 0 < b1
for b2 being non empty ZeroStr
for b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b2
for b4 being Matrix of b1,1,the carrier of b2
      st for b5 being natural set
              st b5 < b1
           holds b4 *(b5 + 1,1) = b3 . b5
   holds mConv(b3,b1) = b4;

:: POLYNOM8:funcnot 5 => POLYNOM8:func 5
definition
  let a1 be non empty ZeroStr;
  let a2 be tabular FinSequence of (the carrier of a1) *;
  func aConv A2 -> Function-like quasi_total finite-Support Relation of NAT,the carrier of a1 means
    (for b1 being natural set
           st b1 < len a2
        holds it . b1 = a2 *(b1 + 1,1)) &
     (for b1 being natural set
           st len a2 <= b1
        holds it . b1 = 0. a1);
end;

:: POLYNOM8:def 5
theorem
for b1 being non empty ZeroStr
for b2 being tabular FinSequence of (the carrier of b1) *
for b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1 holds
      b3 = aConv b2
   iff
      (for b4 being natural set
             st b4 < len b2
          holds b3 . b4 = b2 *(b4 + 1,1)) &
       (for b4 being natural set
             st len b2 <= b4
          holds b3 . b4 = 0. b1);

:: POLYNOM8:prednot 1 => POLYNOM8:pred 1
definition
  let a1 be non empty well-unital doubleLoopStr;
  let a2 be Element of the carrier of a1;
  let a3 be Element of NAT;
  pred A2 is_primitive_root_of_degree A3 means
    a3 <> 0 &
     a2 |^ a3 = 1. a1 &
     (for b1 being Element of NAT
           st 0 < b1 & b1 < a3
        holds a2 |^ b1 <> 1. a1);
end;

:: POLYNOM8:dfs 6
definiens
  let a1 be non empty well-unital doubleLoopStr;
  let a2 be Element of the carrier of a1;
  let a3 be Element of NAT;
To prove
     a2 is_primitive_root_of_degree a3
it is sufficient to prove
  thus a3 <> 0 &
     a2 |^ a3 = 1. a1 &
     (for b1 being Element of NAT
           st 0 < b1 & b1 < a3
        holds a2 |^ b1 <> 1. a1);

:: POLYNOM8:def 6
theorem
for b1 being non empty well-unital doubleLoopStr
for b2 being Element of the carrier of b1
for b3 being Element of NAT holds
      b2 is_primitive_root_of_degree b3
   iff
      b3 <> 0 &
       b2 |^ b3 = 1. b1 &
       (for b4 being Element of NAT
             st 0 < b4 & b4 < b3
          holds b2 |^ b4 <> 1. b1);

:: POLYNOM8:th 30
theorem
for b1 being non empty non degenerated right_complementable right-distributive well-unital add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT holds
   not 0. b1 is_primitive_root_of_degree b2;

:: POLYNOM8:th 31
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT
for b3 being Element of the carrier of b1
      st b3 is_primitive_root_of_degree b2
   holds b3 " is_primitive_root_of_degree b2;

:: POLYNOM8:th 32
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT
for b3 being Element of the carrier of b1
   st b3 is_primitive_root_of_degree b2
for b4, b5 being natural set
      st 1 <= b4 & b4 <= b2 & 1 <= b5 & b5 <= b2 & b4 <> b5
   holds pow(b3,b4 - b5) <> 1. b1;

:: POLYNOM8:funcnot 6 => POLYNOM8:func 6
definition
  let a1 be natural set;
  let a2 be non empty well-unital doubleLoopStr;
  let a3 be Function-like quasi_total finite-Support Relation of NAT,the carrier of a2;
  let a4 be Element of the carrier of a2;
  func DFT(A3,A4,A1) -> Function-like quasi_total finite-Support Relation of NAT,the carrier of a2 means
    (for b1 being natural set
           st b1 < a1
        holds it . b1 = eval(a3,a4 |^ b1)) &
     (for b1 being natural set
           st a1 <= b1
        holds it . b1 = 0. a2);
end;

:: POLYNOM8:def 7
theorem
for b1 being natural set
for b2 being non empty well-unital doubleLoopStr
for b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b2
for b4 being Element of the carrier of b2
for b5 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b2 holds
      b5 = DFT(b3,b4,b1)
   iff
      (for b6 being natural set
             st b6 < b1
          holds b5 . b6 = eval(b3,b4 |^ b6)) &
       (for b6 being natural set
             st b1 <= b6
          holds b5 . b6 = 0. b2);

:: POLYNOM8:th 33
theorem
for b1 being natural set
for b2 being non empty well-unital doubleLoopStr
for b3 being Element of the carrier of b2 holds
   DFT(0_. b2,b3,b1) = 0_. b2;

:: POLYNOM8:th 34
theorem
for b1 being natural set
for b2 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b3, b4 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b2
for b5 being Element of the carrier of b2 holds
   (DFT(b3,b5,b1)) * DFT(b4,b5,b1) = DFT(b3 *' b4,b5,b1);

:: POLYNOM8:funcnot 7 => POLYNOM8:func 7
definition
  let a1 be non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr;
  let a2 be natural set;
  let a3 be Element of the carrier of a1;
  func Vandermonde(A3,A2) -> Matrix of a2,a2,the carrier of a1 means
    for b1, b2 being natural set
          st 1 <= b1 & b1 <= a2 & 1 <= b2 & b2 <= a2
       holds it *(b1,b2) = pow(a3,(b1 - 1) * (b2 - 1));
end;

:: POLYNOM8:def 8
theorem
for b1 being non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr
for b2 being natural set
for b3 being Element of the carrier of b1
for b4 being Matrix of b2,b2,the carrier of b1 holds
      b4 = Vandermonde(b3,b2)
   iff
      for b5, b6 being natural set
            st 1 <= b5 & b5 <= b2 & 1 <= b6 & b6 <= b2
         holds b4 *(b5,b6) = pow(b3,(b5 - 1) * (b6 - 1));

:: POLYNOM8:funcnot 8 => POLYNOM8:func 7
notation
  let a1 be non empty almost_left_invertible associative commutative well-unital distributive doubleLoopStr;
  let a2 be natural set;
  let a3 be Element of the carrier of a1;
  synonym VM(a3,a2) for Vandermonde(a3,a2);
end;

:: POLYNOM8:th 35
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2, b3 being natural set
   st 0 < b2
for b4 being Matrix of b2,b3,the carrier of b1 holds
   (1.(b1,b2)) * b4 = b4;

:: POLYNOM8:th 36
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT
   st 0 < b2
for b3, b4, b5 being Matrix of b2,b2,the carrier of b1
      st for b6, b7 being natural set
              st 1 <= b6 & b6 <= b2 & 1 <= b7 & b7 <= b2
           holds (b3 * b4) *(b6,b7) = (emb(b2,b1)) * (b5 *(b6,b7))
   holds b3 * b4 = (emb(b2,b1)) * b5;

:: POLYNOM8:th 37
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of the carrier of b1
for b3 being FinSequence of the carrier of b1
for b4, b5, b6 being Element of NAT
      st b2 is_primitive_root_of_degree b6 &
         1 <= b4 &
         b4 <= b6 &
         1 <= b5 &
         b5 <= b6 &
         len b3 = b6 &
         (for b7 being natural set
               st 1 <= b7 & b7 <= b6
            holds b3 /. b7 = pow(b2,(b4 - b5) * (b7 - 1)))
   holds ((Vandermonde(b2,b6)) * Vandermonde(b2 ",b6)) *(b4,b5) = Sum b3;

:: POLYNOM8:th 38
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2, b3, b4 being Element of NAT
for b5 being Element of the carrier of b1
      st b3 <> b4 & 1 <= b3 & b3 <= b2 & 1 <= b4 & b4 <= b2 & b5 is_primitive_root_of_degree b2
   holds ((Vandermonde(b5,b2)) * Vandermonde(b5 ",b2)) *(b3,b4) = 0. b1;

:: POLYNOM8:th 39
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT
   st 0 < b2
for b3 being Element of the carrier of b1
      st b3 is_primitive_root_of_degree b2
   holds (Vandermonde(b3,b2)) * Vandermonde(b3 ",b2) = (emb(b2,b1)) * 1.(b1,b2);

:: POLYNOM8:th 40
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Element of NAT
for b3 being Element of the carrier of b1
      st 0 < b2 & b3 is_primitive_root_of_degree b2
   holds (Vandermonde(b3,b2)) * Vandermonde(b3 ",b2) = (Vandermonde(b3 ",b2)) * Vandermonde(b3,b2);

:: POLYNOM8:th 41
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
for b3 being Element of NAT
   st 0 < b3 & len b2 <= b3
for b4 being Element of the carrier of b1
for b5 being Element of NAT
      st b5 < b3
   holds (DFT(b2,b4,b3)) . b5 = ((Vandermonde(b4,b3)) * mConv(b2,b3)) *(b5 + 1,1);

:: POLYNOM8:th 42
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
for b3 being natural set
   st 0 < b3 & len b2 <= b3
for b4 being Element of the carrier of b1 holds
   DFT(b2,b4,b3) = aConv ((Vandermonde(b4,b3)) * mConv(b2,b3));

:: POLYNOM8:th 43
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2, b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
for b4 being Element of NAT
   st 0 < b4 & len b2 <= b4 & len b3 <= b4
for b5 being Element of the carrier of b1
      st b5 is_primitive_root_of_degree 2 * b4
   holds DFT(DFT(b2 *' b3,b5,2 * b4),b5 ",2 * b4) = (emb(2 * b4,b1)) * (b2 *' b3);

:: POLYNOM8:th 44
theorem
for b1 being non empty non degenerated right_complementable almost_left_invertible associative commutative well-unital distributive Abelian add-associative right_zeroed doubleLoopStr
for b2, b3 being Function-like quasi_total finite-Support Relation of NAT,the carrier of b1
for b4 being Element of NAT
   st 0 < b4 & len b2 <= b4 & len b3 <= b4
for b5 being Element of the carrier of b1
      st b5 is_primitive_root_of_degree 2 * b4 & emb(2 * b4,b1) <> 0. b1
   holds (emb(2 * b4,b1)) " * DFT((DFT(b2,b5,2 * b4)) * DFT(b3,b5,2 * b4),b5 ",2 * b4) = b2 *' b3;