:: POLYNOM3 semantic presentation

theorem Th1: :: POLYNOM3:1
for b1 being non empty add-associative right_zeroed right_complementable LoopStr
for b2 being FinSequence of the carrier of b1 st ( for b3 being Nat st b3 in dom b2 holds
b2 . b3 = 0. b1 ) holds
Sum b2 = 0. b1
proof end;

theorem Th2: :: POLYNOM3:2
for b1 being non empty Abelian add-associative right_zeroed LoopStr
for b2 being FinSequence of the carrier of b1 holds Sum b2 = Sum (Rev b2)
proof end;

theorem Th3: :: POLYNOM3:3
for b1 being FinSequence of REAL holds Sum b1 = Sum (Rev b1)
proof end;

theorem Th4: :: POLYNOM3:4
for b1 being FinSequence of NAT
for b2 being Nat st b2 in dom b1 holds
Sum b1 >= b1 . b2
proof end;

definition
let c1 be non empty set ;
let c2 be Nat;
let c3 be FinSequence of c1;
redefine func Del as Del c3,c2 -> FinSequence of a1;
coherence
Del c3,c2 is FinSequence of c1
by FINSEQ_3:114;
end;

definition
let c1 be non empty set ;
let c2, c3 be Element of c1;
redefine func <* as <*c2,c3*> -> Element of 2 -tuples_on a1;
coherence
<*c2,c3*> is Element of 2 -tuples_on c1
by FINSEQ_2:121;
end;

definition
let c1 be non empty set ;
let c2, c3 be Nat;
let c4 be Element of c2 -tuples_on c1;
let c5 be Element of c3 -tuples_on c1;
redefine func ^ as c4 ^ c5 -> Element of (a2 + a3) -tuples_on a1;
coherence
c4 ^ c5 is Element of (c2 + c3) -tuples_on c1
by FINSEQ_2:127;
end;

registration
let c1 be non empty set ;
let c2 be Nat;
cluster -> FinSequence-yielding FinSequence of a2 -tuples_on a1;
coherence
for b1 being FinSequence of c2 -tuples_on c1 holds b1 is FinSequence-yielding
proof end;
end;

definition
let c1 be non empty set ;
let c2, c3 be Nat;
let c4 be FinSequence of c2 -tuples_on c1;
let c5 be FinSequence of c3 -tuples_on c1;
redefine func ^^ as c4 ^^ c5 -> Element of ((a2 + a3) -tuples_on a1) * ;
coherence
c4 ^^ c5 is Element of ((c2 + c3) -tuples_on c1) *
proof end;
end;

scheme :: POLYNOM3:sch 1
s1{ F1() -> non empty set , F2() -> Nat, F3( Nat) -> Nat, F4( set , set ) -> Element of F1() } :
ex b1 being FinSequence of F1() * st
( len b1 = F2() & ( for b2 being Nat st b2 in Seg F2() holds
( len (b1 /. b2) = F3(b2) & ( for b3 being Nat st b3 in dom (b1 /. b2) holds
(b1 /. b2) . b3 = F4(b2,b3) ) ) ) )
proof end;

definition
let c1 be Nat;
let c2, c3 be Element of c1 -tuples_on NAT ;
pred c2 < c3 means :Def1: :: POLYNOM3:def 1
ex b1 being Nat st
( b1 in Seg a1 & a2 . b1 < a3 . b1 & ( for b2 being Nat st 1 <= b2 & b2 < b1 holds
a2 . b2 = a3 . b2 ) );
asymmetry
for b1, b2 being Element of c1 -tuples_on NAT st ex b3 being Nat st
( b3 in Seg c1 & b1 . b3 < b2 . b3 & ( for b4 being Nat st 1 <= b4 & b4 < b3 holds
b1 . b4 = b2 . b4 ) ) holds
for b3 being Nat holds
( not b3 in Seg c1 or not b2 . b3 < b1 . b3 or ex b4 being Nat st
( 1 <= b4 & b4 < b3 & not b2 . b4 = b1 . b4 ) )
proof end;
end;

:: deftheorem Def1 defines < POLYNOM3:def 1 :
for b1 being Nat
for b2, b3 being Element of b1 -tuples_on NAT holds
( b2 < b3 iff ex b4 being Nat st
( b4 in Seg b1 & b2 . b4 < b3 . b4 & ( for b5 being Nat st 1 <= b5 & b5 < b4 holds
b2 . b5 = b3 . b5 ) ) );

notation
let c1 be Nat;
let c2, c3 be Element of c1 -tuples_on NAT ;
synonym c3 > c2 for c2 < c3;
end;

definition
let c1 be Nat;
let c2, c3 be Element of c1 -tuples_on NAT ;
pred c2 <= c3 means :Def2: :: POLYNOM3:def 2
( a2 < a3 or a2 = a3 );
reflexivity
for b1 being Element of c1 -tuples_on NAT holds
( b1 < b1 or b1 = b1 )
;
end;

:: deftheorem Def2 defines <= POLYNOM3:def 2 :
for b1 being Nat
for b2, b3 being Element of b1 -tuples_on NAT holds
( b2 <= b3 iff ( b2 < b3 or b2 = b3 ) );

notation
let c1 be Nat;
let c2, c3 be Element of c1 -tuples_on NAT ;
synonym c3 >= c2 for c2 <= c3;
end;

theorem Th5: :: POLYNOM3:5
for b1 being Nat
for b2, b3, b4 being Element of b1 -tuples_on NAT holds
( ( b2 < b3 & b3 < b4 implies b2 < b4 ) & ( ( ( b2 < b3 & b3 <= b4 ) or ( b2 <= b3 & b3 < b4 ) or ( b2 <= b3 & b3 <= b4 ) ) implies b2 <= b4 ) )
proof end;

theorem Th6: :: POLYNOM3:6
for b1 being Nat
for b2, b3 being Element of b1 -tuples_on NAT st b2 <> b3 holds
ex b4 being Nat st
( b4 in Seg b1 & b2 . b4 <> b3 . b4 & ( for b5 being Nat st 1 <= b5 & b5 < b4 holds
b2 . b5 = b3 . b5 ) )
proof end;

theorem Th7: :: POLYNOM3:7
for b1 being Nat
for b2, b3 being Element of b1 -tuples_on NAT holds
( b2 <= b3 or b2 > b3 )
proof end;

definition
let c1 be Nat;
func TuplesOrder c1 -> Order of a1 -tuples_on NAT means :Def3: :: POLYNOM3:def 3
for b1, b2 being Element of a1 -tuples_on NAT holds
( [b1,b2] in a2 iff b1 <= b2 );
existence
ex b1 being Order of c1 -tuples_on NAT st
for b2, b3 being Element of c1 -tuples_on NAT holds
( [b2,b3] in b1 iff b2 <= b3 )
proof end;
uniqueness
for b1, b2 being Order of c1 -tuples_on NAT st ( for b3, b4 being Element of c1 -tuples_on NAT holds
( [b3,b4] in b1 iff b3 <= b4 ) ) & ( for b3, b4 being Element of c1 -tuples_on NAT holds
( [b3,b4] in b2 iff b3 <= b4 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def3 defines TuplesOrder POLYNOM3:def 3 :
for b1 being Nat
for b2 being Order of b1 -tuples_on NAT holds
( b2 = TuplesOrder b1 iff for b3, b4 being Element of b1 -tuples_on NAT holds
( [b3,b4] in b2 iff b3 <= b4 ) );

registration
let c1 be Nat;
cluster TuplesOrder a1 -> being_linear-order ;
coherence
TuplesOrder c1 is being_linear-order
proof end;
end;

definition
let c1 be non empty Nat;
let c2 be Nat;
func Decomp c2,c1 -> FinSequence of a1 -tuples_on NAT means :Def4: :: POLYNOM3:def 4
ex b1 being finite Subset of (a1 -tuples_on NAT ) st
( a3 = SgmX (TuplesOrder a1),b1 & ( for b2 being Element of a1 -tuples_on NAT holds
( b2 in b1 iff Sum b2 = a2 ) ) );
existence
ex b1 being FinSequence of c1 -tuples_on NAT ex b2 being finite Subset of (c1 -tuples_on NAT ) st
( b1 = SgmX (TuplesOrder c1),b2 & ( for b3 being Element of c1 -tuples_on NAT holds
( b3 in b2 iff Sum b3 = c2 ) ) )
proof end;
uniqueness
for b1, b2 being FinSequence of c1 -tuples_on NAT st ex b3 being finite Subset of (c1 -tuples_on NAT ) st
( b1 = SgmX (TuplesOrder c1),b3 & ( for b4 being Element of c1 -tuples_on NAT holds
( b4 in b3 iff Sum b4 = c2 ) ) ) & ex b3 being finite Subset of (c1 -tuples_on NAT ) st
( b2 = SgmX (TuplesOrder c1),b3 & ( for b4 being Element of c1 -tuples_on NAT holds
( b4 in b3 iff Sum b4 = c2 ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines Decomp POLYNOM3:def 4 :
for b1 being non empty Nat
for b2 being Nat
for b3 being FinSequence of b1 -tuples_on NAT holds
( b3 = Decomp b2,b1 iff ex b4 being finite Subset of (b1 -tuples_on NAT ) st
( b3 = SgmX (TuplesOrder b1),b4 & ( for b5 being Element of b1 -tuples_on NAT holds
( b5 in b4 iff Sum b5 = b2 ) ) ) );

registration
let c1 be non empty Nat;
let c2 be Nat;
cluster Decomp a2,a1 -> non empty one-to-one FinSequence-yielding ;
coherence
( not Decomp c2,c1 is empty & Decomp c2,c1 is one-to-one & Decomp c2,c1 is FinSequence-yielding )
proof end;
end;

theorem Th8: :: POLYNOM3:8
for b1 being Nat holds len (Decomp b1,1) = 1
proof end;

theorem Th9: :: POLYNOM3:9
for b1 being Nat holds len (Decomp b1,2) = b1 + 1
proof end;

theorem Th10: :: POLYNOM3:10
for b1 being Nat holds Decomp b1,1 = <*<*b1*>*>
proof end;

theorem Th11: :: POLYNOM3:11
for b1, b2, b3, b4, b5 being Nat st (Decomp b3,2) . b1 = <*b4,(b3 -' b4)*> & (Decomp b3,2) . b2 = <*b5,(b3 -' b5)*> holds
( b1 < b2 iff b4 < b5 )
proof end;

theorem Th12: :: POLYNOM3:12
for b1, b2, b3, b4 being Nat st (Decomp b2,2) . b1 = <*b3,(b2 -' b3)*> & (Decomp b2,2) . (b1 + 1) = <*b4,(b2 -' b4)*> holds
b4 = b3 + 1
proof end;

theorem Th13: :: POLYNOM3:13
for b1 being Nat holds (Decomp b1,2) . 1 = <*0,b1*>
proof end;

theorem Th14: :: POLYNOM3:14
for b1, b2 being Nat st b2 in Seg (b1 + 1) holds
(Decomp b1,2) . b2 = <*(b2 -' 1),((b1 + 1) -' b2)*>
proof end;

definition
let c1 be non empty HGrStr ;
let c2, c3, c4 be sequence of c1;
let c5 be FinSequence of 3 -tuples_on NAT ;
func prodTuples c2,c3,c4,c5 -> Element of the carrier of a1 * means :Def5: :: POLYNOM3:def 5
( len a6 = len a5 & ( for b1 being Nat st b1 in dom a5 holds
a6 . b1 = ((a2 . ((a5 /. b1) /. 1)) * (a3 . ((a5 /. b1) /. 2))) * (a4 . ((a5 /. b1) /. 3)) ) );
existence
ex b1 being Element of the carrier of c1 * st
( len b1 = len c5 & ( for b2 being Nat st b2 in dom c5 holds
b1 . b2 = ((c2 . ((c5 /. b2) /. 1)) * (c3 . ((c5 /. b2) /. 2))) * (c4 . ((c5 /. b2) /. 3)) ) )
proof end;
uniqueness
for b1, b2 being Element of the carrier of c1 * st len b1 = len c5 & ( for b3 being Nat st b3 in dom c5 holds
b1 . b3 = ((c2 . ((c5 /. b3) /. 1)) * (c3 . ((c5 /. b3) /. 2))) * (c4 . ((c5 /. b3) /. 3)) ) & len b2 = len c5 & ( for b3 being Nat st b3 in dom c5 holds
b2 . b3 = ((c2 . ((c5 /. b3) /. 1)) * (c3 . ((c5 /. b3) /. 2))) * (c4 . ((c5 /. b3) /. 3)) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines prodTuples POLYNOM3:def 5 :
for b1 being non empty HGrStr
for b2, b3, b4 being sequence of b1
for b5 being FinSequence of 3 -tuples_on NAT
for b6 being Element of the carrier of b1 * holds
( b6 = prodTuples b2,b3,b4,b5 iff ( len b6 = len b5 & ( for b7 being Nat st b7 in dom b5 holds
b6 . b7 = ((b2 . ((b5 /. b7) /. 1)) * (b3 . ((b5 /. b7) /. 2))) * (b4 . ((b5 /. b7) /. 3)) ) ) );

theorem Th15: :: POLYNOM3:15
for b1 being non empty HGrStr
for b2, b3, b4 being sequence of b1
for b5 being FinSequence of 3 -tuples_on NAT
for b6 being Permutation of dom b5
for b7 being FinSequence of 3 -tuples_on NAT st b7 = b5 * b6 holds
prodTuples b2,b3,b4,b7 = (prodTuples b2,b3,b4,b5) * b6
proof end;

theorem Th16: :: POLYNOM3:16
for b1 being set
for b2 being FinSequence of b1 *
for b3 being Nat holds Card (b2 | b3) = (Card b2) | b3
proof end;

theorem Th17: :: POLYNOM3:17
for b1 being FinSequence of REAL
for b2 being FinSequence of NAT st b1 = b2 holds
for b3 being Nat holds b1 | b3 = b2 | b3
proof end;

theorem Th18: :: POLYNOM3:18
for b1 being FinSequence of NAT
for b2, b3 being Nat st b2 <= b3 holds
Sum (b1 | b2) <= Sum (b1 | b3)
proof end;

theorem Th19: :: POLYNOM3:19
for b1 being set
for b2 being FinSequence of b1
for b3 being Nat st b3 < len b2 holds
b2 | (b3 + 1) = (b2 | b3) ^ <*(b2 . (b3 + 1))*>
proof end;

theorem Th20: :: POLYNOM3:20
for b1 being FinSequence of REAL
for b2 being Nat st b2 < len b1 holds
Sum (b1 | (b2 + 1)) = (Sum (b1 | b2)) + (b1 . (b2 + 1))
proof end;

theorem Th21: :: POLYNOM3:21
for b1 being FinSequence of NAT
for b2, b3, b4, b5 being Nat st b2 < len b1 & b3 < len b1 & 1 <= b4 & 1 <= b5 & b4 <= b1 . (b2 + 1) & b5 <= b1 . (b3 + 1) & (Sum (b1 | b2)) + b4 = (Sum (b1 | b3)) + b5 holds
( b2 = b3 & b4 = b5 )
proof end;

theorem Th22: :: POLYNOM3:22
for b1, b2 being set
for b3 being FinSequence of b1 *
for b4 being FinSequence of b2 *
for b5, b6, b7, b8 being Nat st b5 in dom b3 & b6 in dom b4 & b7 in dom (b3 . b5) & b8 in dom (b4 . b6) & Card b3 = Card b4 & (Sum ((Card b3) | (b5 -' 1))) + b7 = (Sum ((Card b4) | (b6 -' 1))) + b8 holds
( b5 = b6 & b7 = b8 )
proof end;

definition
let c1 be non empty ZeroStr ;
mode Polynomial of a1 is AlgSequence of a1;
end;

theorem Th23: :: POLYNOM3:23
for b1 being non empty ZeroStr
for b2 being Polynomial of b1
for b3 being Nat holds
( b3 >= len b2 iff b3 is_at_least_length_of b2 )
proof end;

scheme :: POLYNOM3:sch 2
s2{ F1() -> non empty LoopStr , F2() -> Nat, F3( Nat) -> Element of F1() } :
ex b1 being Polynomial of F1() st
( len b1 <= F2() & ( for b2 being Nat st b2 < F2() holds
b1 . b2 = F3(b2) ) )
proof end;

definition
let c1 be non empty LoopStr ;
let c2, c3 be sequence of c1;
func c2 + c3 -> sequence of a1 means :Def6: :: POLYNOM3:def 6
for b1 being Nat holds a4 . b1 = (a2 . b1) + (a3 . b1);
existence
ex b1 being sequence of c1 st
for b2 being Nat holds b1 . b2 = (c2 . b2) + (c3 . b2)
proof end;
uniqueness
for b1, b2 being sequence of c1 st ( for b3 being Nat holds b1 . b3 = (c2 . b3) + (c3 . b3) ) & ( for b3 being Nat holds b2 . b3 = (c2 . b3) + (c3 . b3) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines + POLYNOM3:def 6 :
for b1 being non empty LoopStr
for b2, b3, b4 being sequence of b1 holds
( b4 = b2 + b3 iff for b5 being Nat holds b4 . b5 = (b2 . b5) + (b3 . b5) );

registration
let c1 be non empty right_zeroed LoopStr ;
let c2, c3 be Polynomial of c1;
cluster a2 + a3 -> finite-Support ;
coherence
c2 + c3 is finite-Support
proof end;
end;

theorem Th24: :: POLYNOM3:24
for b1 being non empty right_zeroed LoopStr
for b2, b3 being Polynomial of b1
for b4 being Nat st b4 is_at_least_length_of b2 & b4 is_at_least_length_of b3 holds
b4 is_at_least_length_of b2 + b3
proof end;

theorem Th25: :: POLYNOM3:25
for b1 being non empty right_zeroed LoopStr
for b2, b3 being Polynomial of b1 holds support (b2 + b3) c= (support b2) \/ (support b3)
proof end;

definition
let c1 be non empty Abelian LoopStr ;
let c2, c3 be sequence of c1;
redefine func + as c2 + c3 -> sequence of a1;
commutativity
for b1, b2 being sequence of c1 holds b1 + b2 = b2 + b1
proof end;
end;

theorem Th26: :: POLYNOM3:26
for b1 being non empty add-associative LoopStr
for b2, b3, b4 being sequence of b1 holds (b2 + b3) + b4 = b2 + (b3 + b4)
proof end;

definition
let c1 be non empty LoopStr ;
let c2 be sequence of c1;
func - c2 -> sequence of a1 means :Def7: :: POLYNOM3:def 7
for b1 being Nat holds a3 . b1 = - (a2 . b1);
existence
ex b1 being sequence of c1 st
for b2 being Nat holds b1 . b2 = - (c2 . b2)
proof end;
uniqueness
for b1, b2 being sequence of c1 st ( for b3 being Nat holds b1 . b3 = - (c2 . b3) ) & ( for b3 being Nat holds b2 . b3 = - (c2 . b3) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def7 defines - POLYNOM3:def 7 :
for b1 being non empty LoopStr
for b2, b3 being sequence of b1 holds
( b3 = - b2 iff for b4 being Nat holds b3 . b4 = - (b2 . b4) );

registration
let c1 be non empty add-associative right_zeroed right_complementable LoopStr ;
let c2 be Polynomial of c1;
cluster - a2 -> finite-Support ;
coherence
- c2 is finite-Support
proof end;
end;

definition
let c1 be non empty LoopStr ;
let c2, c3 be sequence of c1;
func c2 - c3 -> sequence of a1 equals :: POLYNOM3:def 8
a2 + (- a3);
coherence
c2 + (- c3) is sequence of c1
;
end;

:: deftheorem Def8 defines - POLYNOM3:def 8 :
for b1 being non empty LoopStr
for b2, b3 being sequence of b1 holds b2 - b3 = b2 + (- b3);

registration
let c1 be non empty add-associative right_zeroed right_complementable LoopStr ;
let c2, c3 be Polynomial of c1;
cluster a2 - a3 -> finite-Support ;
coherence
c2 - c3 is finite-Support
;
end;

theorem Th27: :: POLYNOM3:27
for b1 being non empty LoopStr
for b2, b3 being sequence of b1
for b4 being Nat holds (b2 - b3) . b4 = (b2 . b4) - (b3 . b4)
proof end;

definition
let c1 be non empty ZeroStr ;
func 0_. c1 -> sequence of a1 equals :: POLYNOM3:def 9
NAT --> (0. a1);
coherence
NAT --> (0. c1) is sequence of c1
;
end;

:: deftheorem Def9 defines 0_. POLYNOM3:def 9 :
for b1 being non empty ZeroStr holds 0_. b1 = NAT --> (0. b1);

registration
let c1 be non empty ZeroStr ;
cluster 0_. a1 -> finite-Support ;
coherence
0_. c1 is finite-Support
proof end;
end;

theorem Th28: :: POLYNOM3:28
for b1 being non empty ZeroStr
for b2 being Nat holds (0_. b1) . b2 = 0. b1 by FUNCOP_1:13;

theorem Th29: :: POLYNOM3:29
for b1 being non empty right_zeroed LoopStr
for b2 being sequence of b1 holds b2 + (0_. b1) = b2
proof end;

theorem Th30: :: POLYNOM3:30
for b1 being non empty add-associative right_zeroed right_complementable LoopStr
for b2 being sequence of b1 holds b2 - b2 = 0_. b1
proof end;

definition
let c1 be non empty multLoopStr_0 ;
func 1_. c1 -> sequence of a1 equals :: POLYNOM3:def 10
(0_. a1) +* 0,(1. a1);
coherence
(0_. c1) +* 0,(1. c1) is sequence of c1
;
end;

:: deftheorem Def10 defines 1_. POLYNOM3:def 10 :
for b1 being non empty multLoopStr_0 holds 1_. b1 = (0_. b1) +* 0,(1. b1);

registration
let c1 be non empty multLoopStr_0 ;
cluster 1_. a1 -> finite-Support ;
coherence
1_. c1 is finite-Support
proof end;
end;

theorem Th31: :: POLYNOM3:31
for b1 being non empty multLoopStr_0 holds
( (1_. b1) . 0 = 1. b1 & ( for b2 being Nat st b2 <> 0 holds
(1_. b1) . b2 = 0. b1 ) )
proof end;

definition
let c1 be non empty doubleLoopStr ;
let c2, c3 be sequence of c1;
func c2 *' c3 -> sequence of a1 means :Def11: :: POLYNOM3:def 11
for b1 being Nat ex b2 being FinSequence of the carrier of a1 st
( len b2 = b1 + 1 & a4 . b1 = Sum b2 & ( for b3 being Nat st b3 in dom b2 holds
b2 . b3 = (a2 . (b3 -' 1)) * (a3 . ((b1 + 1) -' b3)) ) );
existence
ex b1 being sequence of c1 st
for b2 being Nat ex b3 being FinSequence of the carrier of c1 st
( len b3 = b2 + 1 & b1 . b2 = Sum b3 & ( for b4 being Nat st b4 in dom b3 holds
b3 . b4 = (c2 . (b4 -' 1)) * (c3 . ((b2 + 1) -' b4)) ) )
proof end;
uniqueness
for b1, b2 being sequence of c1 st ( for b3 being Nat ex b4 being FinSequence of the carrier of c1 st
( len b4 = b3 + 1 & b1 . b3 = Sum b4 & ( for b5 being Nat st b5 in dom b4 holds
b4 . b5 = (c2 . (b5 -' 1)) * (c3 . ((b3 + 1) -' b5)) ) ) ) & ( for b3 being Nat ex b4 being FinSequence of the carrier of c1 st
( len b4 = b3 + 1 & b2 . b3 = Sum b4 & ( for b5 being Nat st b5 in dom b4 holds
b4 . b5 = (c2 . (b5 -' 1)) * (c3 . ((b3 + 1) -' b5)) ) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def11 defines *' POLYNOM3:def 11 :
for b1 being non empty doubleLoopStr
for b2, b3, b4 being sequence of b1 holds
( b4 = b2 *' b3 iff for b5 being Nat ex b6 being FinSequence of the carrier of b1 st
( len b6 = b5 + 1 & b4 . b5 = Sum b6 & ( for b7 being Nat st b7 in dom b6 holds
b6 . b7 = (b2 . (b7 -' 1)) * (b3 . ((b5 + 1) -' b7)) ) ) );

registration
let c1 be non empty add-associative right_zeroed right_complementable distributive doubleLoopStr ;
let c2, c3 be Polynomial of c1;
cluster a2 *' a3 -> finite-Support ;
coherence
c2 *' c3 is finite-Support
proof end;
end;

theorem Th32: :: POLYNOM3:32
for b1 being non empty Abelian add-associative right_zeroed right_complementable right-distributive doubleLoopStr
for b2, b3, b4 being sequence of b1 holds b2 *' (b3 + b4) = (b2 *' b3) + (b2 *' b4)
proof end;

theorem Th33: :: POLYNOM3:33
for b1 being non empty Abelian add-associative right_zeroed right_complementable left-distributive doubleLoopStr
for b2, b3, b4 being sequence of b1 holds (b2 + b3) *' b4 = (b2 *' b4) + (b3 *' b4)
proof end;

theorem Th34: :: POLYNOM3:34
for b1 being non empty Abelian add-associative right_zeroed right_complementable unital associative distributive doubleLoopStr
for b2, b3, b4 being sequence of b1 holds (b2 *' b3) *' b4 = b2 *' (b3 *' b4)
proof end;

definition
let c1 be non empty Abelian add-associative right_zeroed commutative doubleLoopStr ;
let c2, c3 be sequence of c1;
redefine func *' as c2 *' c3 -> sequence of a1;
commutativity
for b1, b2 being sequence of c1 holds b1 *' b2 = b2 *' b1
proof end;
end;

theorem Th35: :: POLYNOM3:35
for b1 being non empty add-associative right_zeroed right_complementable right-distributive doubleLoopStr
for b2 being sequence of b1 holds b2 *' (0_. b1) = 0_. b1
proof end;

theorem Th36: :: POLYNOM3:36
for b1 being non empty add-associative right_zeroed right_complementable right-distributive right_unital doubleLoopStr
for b2 being sequence of b1 holds b2 *' (1_. b1) = b2
proof end;

definition
let c1 be non empty add-associative right_zeroed right_complementable distributive doubleLoopStr ;
func Polynom-Ring c1 -> non empty strict doubleLoopStr means :Def12: :: POLYNOM3:def 12
( ( for b1 being set holds
( b1 in the carrier of a2 iff b1 is Polynomial of a1 ) ) & ( for b1, b2 being Element of a2
for b3, b4 being sequence of a1 st b1 = b3 & b2 = b4 holds
b1 + b2 = b3 + b4 ) & ( for b1, b2 being Element of a2
for b3, b4 being sequence of a1 st b1 = b3 & b2 = b4 holds
b1 * b2 = b3 *' b4 ) & 0. a2 = 0_. a1 & 1_ a2 = 1_. a1 );
existence
ex b1 being non empty strict doubleLoopStr st
( ( for b2 being set holds
( b2 in the carrier of b1 iff b2 is Polynomial of c1 ) ) & ( for b2, b3 being Element of b1
for b4, b5 being sequence of c1 st b2 = b4 & b3 = b5 holds
b2 + b3 = b4 + b5 ) & ( for b2, b3 being Element of b1
for b4, b5 being sequence of c1 st b2 = b4 & b3 = b5 holds
b2 * b3 = b4 *' b5 ) & 0. b1 = 0_. c1 & 1_ b1 = 1_. c1 )
proof end;
uniqueness
for b1, b2 being non empty strict doubleLoopStr st ( for b3 being set holds
( b3 in the carrier of b1 iff b3 is Polynomial of c1 ) ) & ( for b3, b4 being Element of b1
for b5, b6 being sequence of c1 st b3 = b5 & b4 = b6 holds
b3 + b4 = b5 + b6 ) & ( for b3, b4 being Element of b1
for b5, b6 being sequence of c1 st b3 = b5 & b4 = b6 holds
b3 * b4 = b5 *' b6 ) & 0. b1 = 0_. c1 & 1_ b1 = 1_. c1 & ( for b3 being set holds
( b3 in the carrier of b2 iff b3 is Polynomial of c1 ) ) & ( for b3, b4 being Element of b2
for b5, b6 being sequence of c1 st b3 = b5 & b4 = b6 holds
b3 + b4 = b5 + b6 ) & ( for b3, b4 being Element of b2
for b5, b6 being sequence of c1 st b3 = b5 & b4 = b6 holds
b3 * b4 = b5 *' b6 ) & 0. b2 = 0_. c1 & 1_ b2 = 1_. c1 holds
b1 = b2
proof end;
end;

:: deftheorem Def12 defines Polynom-Ring POLYNOM3:def 12 :
for b1 being non empty add-associative right_zeroed right_complementable distributive doubleLoopStr
for b2 being non empty strict doubleLoopStr holds
( b2 = Polynom-Ring b1 iff ( ( for b3 being set holds
( b3 in the carrier of b2 iff b3 is Polynomial of b1 ) ) & ( for b3, b4 being Element of b2
for b5, b6 being sequence of b1 st b3 = b5 & b4 = b6 holds
b3 + b4 = b5 + b6 ) & ( for b3, b4 being Element of b2
for b5, b6 being sequence of b1 st b3 = b5 & b4 = b6 holds
b3 * b4 = b5 *' b6 ) & 0. b2 = 0_. b1 & 1_ b2 = 1_. b1 ) );

registration
let c1 be non empty Abelian add-associative right_zeroed right_complementable distributive doubleLoopStr ;
cluster Polynom-Ring a1 -> non empty Abelian strict ;
coherence
Polynom-Ring c1 is Abelian
proof end;
end;

registration
let c1 be non empty add-associative right_zeroed right_complementable distributive doubleLoopStr ;
cluster Polynom-Ring a1 -> non empty add-associative strict ;
coherence
Polynom-Ring c1 is add-associative
proof end;
cluster Polynom-Ring a1 -> non empty right_zeroed strict ;
coherence
Polynom-Ring c1 is right_zeroed
proof end;
cluster Polynom-Ring a1 -> non empty right_complementable strict ;
coherence
Polynom-Ring c1 is right_complementable
proof end;
end;

registration
let c1 be non empty Abelian add-associative right_zeroed right_complementable commutative distributive doubleLoopStr ;
cluster Polynom-Ring a1 -> non empty Abelian add-associative right_zeroed right_complementable commutative strict ;
coherence
Polynom-Ring c1 is commutative
proof end;
end;

registration
let c1 be non empty Abelian add-associative right_zeroed right_complementable unital associative distributive doubleLoopStr ;
cluster Polynom-Ring a1 -> non empty Abelian add-associative right_zeroed right_complementable associative strict ;
coherence
Polynom-Ring c1 is associative
proof end;
end;

E43: now
let c1 be non empty Abelian add-associative right_zeroed right_complementable commutative right_unital distributive doubleLoopStr ;
set c2 = Polynom-Ring c1;
let c3, c4 be Element of (Polynom-Ring c1);
assume E44: c4 = 1_ (Polynom-Ring c1) ;
reconsider c5 = c3 as Polynomial of c1 by Def12;
E45: 1_ (Polynom-Ring c1) = 1_. c1 by Def12;
hence c3 * c4 = c5 *' (1_. c1) by E44, Def12
.= c3 by Th36 ;

reconsider c6 = c3, c7 = c4 as sequence of c1 by Def12;
thus c4 * c3 = c7 *' c6 by Def12
.= c5 *' (1_. c1) by E45, E44
.= c3 by Th36 ;
end;

registration
let c1 be non empty Abelian add-associative right_zeroed right_complementable commutative right_unital distributive doubleLoopStr ;
cluster Polynom-Ring a1 -> non empty Abelian add-associative right_zeroed right_complementable unital commutative strict ;
coherence
Polynom-Ring c1 is unital
proof end;
end;

registration
let c1 be non empty Abelian add-associative right_zeroed right_complementable distributive doubleLoopStr ;
cluster Polynom-Ring a1 -> non empty Abelian add-associative right_zeroed right_complementable strict distributive ;
coherence
Polynom-Ring c1 is distributive
proof end;
end;

theorem Th37: :: POLYNOM3:37
for b1 being non empty Abelian add-associative right_zeroed right_complementable commutative right_unital distributive doubleLoopStr holds 1. (Polynom-Ring b1) = 1_. b1
proof end;