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;