:: POLYNOM2 semantic presentation

scheme :: POLYNOM2:sch 1
s1{ F1() -> non empty set , F2() -> Nat, P1[ set , set ] } :
ex b1 being FinSequence of F1() st
( dom b1 = Seg F2() & ( for b2 being Nat st b2 in Seg F2() holds
P1[b2,b1 /. b2] ) )
provided
E1: for b1 being Nat st b1 in Seg F2() holds
ex b2 being Element of F1() st P1[b1,b2]
proof end;

scheme :: POLYNOM2:sch 2
s2{ F1() -> non empty set , F2() -> Element of F1(), F3() -> Nat, P1[ set , set , set ] } :
ex b1 being FinSequence of F1() st
( len b1 = F3() & ( b1 /. 1 = F2() or F3() = 0 ) & ( for b2 being Nat st 1 <= b2 & b2 <= F3() - 1 holds
P1[b2,b1 /. b2,b1 /. (b2 + 1)] ) )
provided
E1: for b1 being Nat st 1 <= b1 & b1 <= F3() - 1 holds
for b2 being Element of F1() ex b3 being Element of F1() st P1[b1,b2,b3]
proof end;

scheme :: POLYNOM2:sch 3
s3{ F1() -> set , F2() -> Element of F1(), F3() -> Nat, F4() -> FinSequence of F1(), F5() -> FinSequence of F1(), P1[ set , set , set ] } :
F4() = F5()
provided
E1: for b1 being Nat st 1 <= b1 & b1 <= F3() - 1 holds
for b2, b3, b4 being Element of F1() st P1[b1,b2,b3] & P1[b1,b2,b4] holds
b3 = b4 and
E2: ( len F4() = F3() & ( F4() /. 1 = F2() or F3() = 0 ) & ( for b1 being Nat st 1 <= b1 & b1 <= F3() - 1 holds
P1[b1,F4() /. b1,F4() /. (b1 + 1)] ) ) and
E3: ( len F5() = F3() & ( F5() /. 1 = F2() or F3() = 0 ) & ( for b1 being Nat st 1 <= b1 & b1 <= F3() - 1 holds
P1[b1,F5() /. b1,F5() /. (b1 + 1)] ) )
proof end;

scheme :: POLYNOM2:sch 4
s4{ F1() -> Nat, F2() -> Nat, P1[ Nat] } :
for b1 being Nat st F1() <= b1 & b1 <= F2() holds
P1[b1]
provided
E1: P1[F1()] and
E2: for b1 being Nat st F1() <= b1 & b1 < F2() & P1[b1] holds
P1[b1 + 1]
proof end;

scheme :: POLYNOM2:sch 5
s5{ F1() -> Nat, F2() -> Nat, P1[ Nat] } :
for b1 being Nat st F1() <= b1 & b1 <= F2() holds
P1[b1]
provided
E1: P1[F1()] and
E2: for b1 being Nat st F1() <= b1 & b1 < F2() & ( for b2 being Nat st F1() <= b2 & b2 <= b1 holds
P1[b2] ) holds
P1[b1 + 1]
proof end;

scheme :: POLYNOM2:sch 6
s6{ F1() -> set , F2() -> FinSequence of F1(), P1[ set ] } :
for b1 being Nat st 1 <= b1 & b1 <= len F2() holds
P1[F2() . b1]
provided
E1: P1[F2() . 1] and
E2: for b1 being Nat st 1 <= b1 & b1 < len F2() & P1[F2() . b1] holds
P1[F2() . (b1 + 1)]
proof end;

Lemma1: for b1 being set
for b2 being Subset of b1
for b3 being Order of b1 holds
( b3 is_reflexive_in b2 & b3 is_antisymmetric_in b2 & b3 is_transitive_in b2 )
proof end;

Lemma2: for b1 being set
for b2 being Subset of b1
for b3 being Order of b1 st b3 is_connected_in b1 holds
b3 is_connected_in b2
proof end;

Lemma3: for b1 being set
for b2 being Subset of b1
for b3 being Order of b1 st b3 is_linear-order holds
b3 linearly_orders b2
proof end;

theorem Th1: :: POLYNOM2:1
canceled;

theorem Th2: :: POLYNOM2:2
for b1 being non empty unital associative HGrStr
for b2 being Element of b1
for b3, b4 being Nat holds (power b1) . b2,(b3 + b4) = ((power b1) . b2,b3) * ((power b1) . b2,b4)
proof end;

registration
cluster non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr ;
existence
ex b1 being non empty doubleLoopStr st
( b1 is Abelian & b1 is right_zeroed & b1 is add-associative & b1 is right_complementable & b1 is unital & b1 is distributive & b1 is commutative & b1 is associative & not b1 is trivial )
proof end;
end;

theorem Th3: :: POLYNOM2:3
canceled;

theorem Th4: :: POLYNOM2:4
for b1 being FinSequence
for b2 being Nat st b2 in dom b1 holds
for b3 being Nat st 1 <= b3 & b3 <= b2 holds
b3 in dom b1
proof end;

Lemma6: for b1 being set
for b2 being finite Subset of b1
for b3 being Element of b1
for b4 being Order of b1 st b4 linearly_orders {b3} \/ b2 holds
b4 linearly_orders b2
proof end;

theorem Th5: :: POLYNOM2:5
for b1 being non empty right_zeroed left_zeroed LoopStr
for b2 being FinSequence of the carrier of b1
for b3 being Nat st b3 in dom b2 & ( for b4 being Nat st b4 in dom b2 & b4 <> b3 holds
b2 /. b4 = 0. b1 ) holds
Sum b2 = b2 /. b3
proof end;

theorem Th6: :: POLYNOM2:6
for b1 being non empty add-associative right_zeroed right_complementable unital distributive doubleLoopStr
for b2 being FinSequence of the carrier of b1 st ex b3 being Nat st
( b3 in dom b2 & b2 /. b3 = 0. b1 ) holds
Product b2 = 0. b1
proof end;

theorem Th7: :: POLYNOM2:7
for b1 being non empty Abelian add-associative LoopStr
for b2 being Element of b1
for b3, b4 being FinSequence of the carrier of b1 st len b3 = len b4 & ex b5 being Nat st
( b5 in dom b3 & b4 /. b5 = b2 + (b3 /. b5) & ( for b6 being Nat st b6 in dom b3 & b6 <> b5 holds
b4 /. b6 = b3 /. b6 ) ) holds
Sum b4 = b2 + (Sum b3)
proof end;

theorem Th8: :: POLYNOM2:8
for b1 being non empty associative commutative doubleLoopStr
for b2 being Element of b1
for b3, b4 being FinSequence of the carrier of b1 st len b3 = len b4 & ex b5 being Nat st
( b5 in dom b3 & b4 /. b5 = b2 * (b3 /. b5) & ( for b6 being Nat st b6 in dom b3 & b6 <> b5 holds
b4 /. b6 = b3 /. b6 ) ) holds
Product b4 = b2 * (Product b3)
proof end;

theorem Th9: :: POLYNOM2:9
for b1 being set
for b2 being empty Subset of b1
for b3 being Order of b1 st b3 linearly_orders b2 holds
SgmX b3,b2 = {}
proof end;

theorem Th10: :: POLYNOM2:10
for b1 being set
for b2 being finite Subset of b1
for b3 being Order of b1 st b3 linearly_orders b2 holds
for b4, b5 being Nat st b4 in dom (SgmX b3,b2) & b5 in dom (SgmX b3,b2) & (SgmX b3,b2) /. b4 = (SgmX b3,b2) /. b5 holds
b4 = b5
proof end;

Lemma12: for b1 being set
for b2 being FinSequence of b1 st dom b2 <> {} holds
1 in dom b2
proof end;

theorem Th11: :: POLYNOM2:11
for b1 being set
for b2 being finite Subset of b1
for b3 being Element of b1 st not b3 in b2 holds
for b4 being finite Subset of b1 st b4 = {b3} \/ b2 holds
for b5 being Order of b1 st b5 linearly_orders b4 holds
for b6 being Nat st b6 in dom (SgmX b5,b4) & (SgmX b5,b4) /. b6 = b3 holds
for b7 being Nat st 1 <= b7 & b7 <= b6 - 1 holds
(SgmX b5,b4) /. b7 = (SgmX b5,b2) /. b7
proof end;

theorem Th12: :: POLYNOM2:12
for b1 being set
for b2 being finite Subset of b1
for b3 being Element of b1 st not b3 in b2 holds
for b4 being finite Subset of b1 st b4 = {b3} \/ b2 holds
for b5 being Order of b1 st b5 linearly_orders b4 holds
for b6 being Nat st b6 in dom (SgmX b5,b4) & (SgmX b5,b4) /. b6 = b3 holds
for b7 being Nat st b6 <= b7 & b7 <= len (SgmX b5,b2) holds
(SgmX b5,b4) /. (b7 + 1) = (SgmX b5,b2) /. b7
proof end;

theorem Th13: :: POLYNOM2:13
for b1 being non empty set
for b2 being finite Subset of b1
for b3 being Element of b1 st not b3 in b2 holds
for b4 being finite Subset of b1 st b4 = {b3} \/ b2 holds
for b5 being Order of b1 st b5 linearly_orders b4 holds
for b6 being Nat st b6 + 1 in dom (SgmX b5,b4) & (SgmX b5,b4) /. (b6 + 1) = b3 holds
SgmX b5,b4 = Ins (SgmX b5,b2),b6,b3
proof end;

theorem Th14: :: POLYNOM2:14
for b1 being set
for b2 being bag of b1 st support b2 = {} holds
b2 = EmptyBag b1
proof end;

Lemma17: for b1 being set
for b2 being bag of b1 holds b2 is PartFunc of b1, NAT
proof end;

definition
let c1 be set ;
let c2 be bag of c1;
attr a2 is empty means :Def1: :: POLYNOM2:def 1
a2 = EmptyBag a1;
end;

:: deftheorem Def1 defines empty POLYNOM2:def 1 :
for b1 being set
for b2 being bag of b1 holds
( b2 is empty iff b2 = EmptyBag b1 );

registration
let c1 be non empty set ;
cluster non empty M28(a1);
existence
not for b1 being bag of c1 holds b1 is empty
proof end;
end;

definition
let c1 be set ;
let c2 be bag of c1;
redefine func support as support c2 -> finite Subset of a1;
coherence
support c2 is finite Subset of c1
proof end;
end;

theorem Th15: :: POLYNOM2:15
for b1 being Ordinal
for b2 being bag of b1 holds RelIncl b1 linearly_orders support b2
proof end;

definition
let c1 be set ;
let c2 be FinSequence of c1;
let c3 be bag of c1;
redefine func * as c3 * c2 -> PartFunc of NAT , NAT ;
coherence
c2 * c3 is PartFunc of NAT , NAT
proof end;
end;

definition
let c1 be Ordinal;
let c2 be bag of c1;
let c3 be non empty unital non trivial doubleLoopStr ;
let c4 be Function of c1,c3;
func eval c2,c4 -> Element of a3 means :Def2: :: POLYNOM2:def 2
ex b1 being FinSequence of the carrier of a3 st
( len b1 = len (SgmX (RelIncl a1),(support a2)) & a5 = Product b1 & ( for b2 being Nat st 1 <= b2 & b2 <= len b1 holds
b1 /. b2 = (power a3) . ((a4 * (SgmX (RelIncl a1),(support a2))) /. b2),((a2 * (SgmX (RelIncl a1),(support a2))) /. b2) ) );
existence
ex b1 being Element of c3ex b2 being FinSequence of the carrier of c3 st
( len b2 = len (SgmX (RelIncl c1),(support c2)) & b1 = Product b2 & ( for b3 being Nat st 1 <= b3 & b3 <= len b2 holds
b2 /. b3 = (power c3) . ((c4 * (SgmX (RelIncl c1),(support c2))) /. b3),((c2 * (SgmX (RelIncl c1),(support c2))) /. b3) ) )
proof end;
uniqueness
for b1, b2 being Element of c3 st ex b3 being FinSequence of the carrier of c3 st
( len b3 = len (SgmX (RelIncl c1),(support c2)) & b1 = Product b3 & ( for b4 being Nat st 1 <= b4 & b4 <= len b3 holds
b3 /. b4 = (power c3) . ((c4 * (SgmX (RelIncl c1),(support c2))) /. b4),((c2 * (SgmX (RelIncl c1),(support c2))) /. b4) ) ) & ex b3 being FinSequence of the carrier of c3 st
( len b3 = len (SgmX (RelIncl c1),(support c2)) & b2 = Product b3 & ( for b4 being Nat st 1 <= b4 & b4 <= len b3 holds
b3 /. b4 = (power c3) . ((c4 * (SgmX (RelIncl c1),(support c2))) /. b4),((c2 * (SgmX (RelIncl c1),(support c2))) /. b4) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def2 defines eval POLYNOM2:def 2 :
for b1 being Ordinal
for b2 being bag of b1
for b3 being non empty unital non trivial doubleLoopStr
for b4 being Function of b1,b3
for b5 being Element of b3 holds
( b5 = eval b2,b4 iff ex b6 being FinSequence of the carrier of b3 st
( len b6 = len (SgmX (RelIncl b1),(support b2)) & b5 = Product b6 & ( for b7 being Nat st 1 <= b7 & b7 <= len b6 holds
b6 /. b7 = (power b3) . ((b4 * (SgmX (RelIncl b1),(support b2))) /. b7),((b2 * (SgmX (RelIncl b1),(support b2))) /. b7) ) ) );

Lemma21: for b1 being set holds support (EmptyBag b1) = {}
proof end;

theorem Th16: :: POLYNOM2:16
for b1 being Ordinal
for b2 being non empty unital non trivial doubleLoopStr
for b3 being Function of b1,b2 holds eval (EmptyBag b1),b3 = 1. b2
proof end;

theorem Th17: :: POLYNOM2:17
for b1 being Ordinal
for b2 being non empty unital non trivial doubleLoopStr
for b3 being set
for b4 being bag of b1 st support b4 = {b3} holds
for b5 being Function of b1,b2 holds eval b4,b5 = (power b2) . (b5 . b3),(b4 . b3)
proof end;

Lemma24: for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr
for b3, b4 being bag of b1
for b5 being set st not b5 in support b3 & support b4 = (support b3) \/ {b5} & ( for b6 being set st b6 <> b5 holds
b4 . b6 = b3 . b6 ) holds
for b6 being Function of b1,b2
for b7 being Element of b2 st b7 = (power b2) . (b6 . b5),(b4 . b5) holds
eval b4,b6 = b7 * (eval b3,b6)
proof end;

Lemma25: for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr
for b3 being bag of b1 st ex b4 being set st support b3 = {b4} holds
for b4 being bag of b1
for b5 being Function of b1,b2 holds eval (b3 + b4),b5 = (eval b3,b5) * (eval b4,b5)
proof end;

theorem Th18: :: POLYNOM2:18
for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr
for b3, b4 being bag of b1
for b5 being Function of b1,b2 holds eval (b3 + b4),b5 = (eval b3,b5) * (eval b4,b5)
proof end;

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

theorem Th19: :: POLYNOM2:19
for b1 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b2 being Ordinal
for b3 being Polynomial of b2,b1 st Support b3 = {} holds
b3 = 0_ b2,b1
proof end;

registration
let c1 be Ordinal;
let c2 be non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr ;
let c3 be Polynomial of c1,c2;
cluster Support a3 -> finite ;
coherence
Support c3 is finite
by POLYNOM1:def 10;
end;

theorem Th20: :: POLYNOM2:20
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Polynomial of b1,b2 holds BagOrder b1 linearly_orders Support b3
proof end;

definition
let c1 be Ordinal;
let c2 be Element of Bags c1;
func c2 @ -> bag of a1 equals :: POLYNOM2:def 3
a2;
correctness
coherence
c2 is bag of c1
;
;
end;

:: deftheorem Def3 defines @ POLYNOM2:def 3 :
for b1 being Ordinal
for b2 being Element of Bags b1 holds b2 @ = b2;

definition
let c1 be Ordinal;
let c2 be non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr ;
let c3 be Polynomial of c1,c2;
let c4 be Function of c1,c2;
func eval c3,c4 -> Element of a2 means :Def4: :: POLYNOM2:def 4
ex b1 being FinSequence of the carrier of a2 st
( len b1 = len (SgmX (BagOrder a1),(Support a3)) & a5 = Sum b1 & ( for b2 being Nat st 1 <= b2 & b2 <= len b1 holds
b1 /. b2 = ((a3 * (SgmX (BagOrder a1),(Support a3))) /. b2) * (eval (((SgmX (BagOrder a1),(Support a3)) /. b2) @ ),a4) ) );
existence
ex b1 being Element of c2ex b2 being FinSequence of the carrier of c2 st
( len b2 = len (SgmX (BagOrder c1),(Support c3)) & b1 = Sum b2 & ( for b3 being Nat st 1 <= b3 & b3 <= len b2 holds
b2 /. b3 = ((c3 * (SgmX (BagOrder c1),(Support c3))) /. b3) * (eval (((SgmX (BagOrder c1),(Support c3)) /. b3) @ ),c4) ) )
proof end;
uniqueness
for b1, b2 being Element of c2 st ex b3 being FinSequence of the carrier of c2 st
( len b3 = len (SgmX (BagOrder c1),(Support c3)) & b1 = Sum b3 & ( for b4 being Nat st 1 <= b4 & b4 <= len b3 holds
b3 /. b4 = ((c3 * (SgmX (BagOrder c1),(Support c3))) /. b4) * (eval (((SgmX (BagOrder c1),(Support c3)) /. b4) @ ),c4) ) ) & ex b3 being FinSequence of the carrier of c2 st
( len b3 = len (SgmX (BagOrder c1),(Support c3)) & b2 = Sum b3 & ( for b4 being Nat st 1 <= b4 & b4 <= len b3 holds
b3 /. b4 = ((c3 * (SgmX (BagOrder c1),(Support c3))) /. b4) * (eval (((SgmX (BagOrder c1),(Support c3)) /. b4) @ ),c4) ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def4 defines eval POLYNOM2:def 4 :
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Function of b1,b2
for b5 being Element of b2 holds
( b5 = eval b3,b4 iff ex b6 being FinSequence of the carrier of b2 st
( len b6 = len (SgmX (BagOrder b1),(Support b3)) & b5 = Sum b6 & ( for b7 being Nat st 1 <= b7 & b7 <= len b6 holds
b6 /. b7 = ((b3 * (SgmX (BagOrder b1),(Support b3))) /. b7) * (eval (((SgmX (BagOrder b1),(Support b3)) /. b7) @ ),b4) ) ) );

theorem Th21: :: POLYNOM2:21
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being bag of b1 st Support b3 = {b4} holds
for b5 being Function of b1,b2 holds eval b3,b5 = (b3 . b4) * (eval b4,b5)
proof end;

theorem Th22: :: POLYNOM2:22
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Function of b1,b2 holds eval (0_ b1,b2),b3 = 0. b2
proof end;

theorem Th23: :: POLYNOM2:23
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Function of b1,b2 holds eval (1_ b1,b2),b3 = 1. b2
proof end;

theorem Th24: :: POLYNOM2:24
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Function of b1,b2 holds eval (- b3),b4 = - (eval b3,b4)
proof end;

Lemma34: for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3, b4 being Polynomial of b1,b2
for b5 being Function of b1,b2
for b6 being bag of b1 st not b6 in Support b3 & Support b4 = (Support b3) \/ {b6} & ( for b7 being bag of b1 st b7 <> b6 holds
b4 . b7 = b3 . b7 ) holds
eval b4,b5 = (eval b3,b5) + ((b4 . b6) * (eval b6,b5))
proof end;

Lemma35: for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Polynomial of b1,b2 st ex b4 being bag of b1 st Support b3 = {b4} holds
for b4 being Polynomial of b1,b2
for b5 being Function of b1,b2 holds eval (b3 + b4),b5 = (eval b3,b5) + (eval b4,b5)
proof end;

theorem Th25: :: POLYNOM2:25
for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3, b4 being Polynomial of b1,b2
for b5 being Function of b1,b2 holds eval (b3 + b4),b5 = (eval b3,b5) + (eval b4,b5)
proof end;

theorem Th26: :: POLYNOM2:26
for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3, b4 being Polynomial of b1,b2
for b5 being Function of b1,b2 holds eval (b3 - b4),b5 = (eval b3,b5) - (eval b4,b5)
proof end;

Lemma37: for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr
for b3, b4 being Polynomial of b1,b2
for b5, b6 being bag of b1 st Support b3 = {b5} & Support b4 = {b6} holds
for b7 being Function of b1,b2 holds eval (b3 *' b4),b7 = (eval b3,b7) * (eval b4,b7)
proof end;

Lemma38: for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr
for b3 being Polynomial of b1,b2 st ex b4 being bag of b1 st Support b3 = {b4} holds
for b4 being Polynomial of b1,b2
for b5 being Function of b1,b2 holds eval (b4 *' b3),b5 = (eval b4,b5) * (eval b3,b5)
proof end;

theorem Th27: :: POLYNOM2:27
for b1 being Ordinal
for b2 being non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr
for b3, b4 being Polynomial of b1,b2
for b5 being Function of b1,b2 holds eval (b3 *' b4),b5 = (eval b3,b5) * (eval b4,b5)
proof end;

definition
let c1 be Ordinal;
let c2 be non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr ;
let c3 be Function of c1,c2;
func Polynom-Evaluation c1,c2,c3 -> Function of (Polynom-Ring a1,a2),a2 means :Def5: :: POLYNOM2:def 5
for b1 being Polynomial of a1,a2 holds a4 . b1 = eval b1,a3;
existence
ex b1 being Function of (Polynom-Ring c1,c2),c2 st
for b2 being Polynomial of c1,c2 holds b1 . b2 = eval b2,c3
proof end;
uniqueness
for b1, b2 being Function of (Polynom-Ring c1,c2),c2 st ( for b3 being Polynomial of c1,c2 holds b1 . b3 = eval b3,c3 ) & ( for b3 being Polynomial of c1,c2 holds b2 . b3 = eval b3,c3 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def5 defines Polynom-Evaluation POLYNOM2:def 5 :
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Function of b1,b2
for b4 being Function of (Polynom-Ring b1,b2),b2 holds
( b4 = Polynom-Evaluation b1,b2,b3 iff for b5 being Polynomial of b1,b2 holds b4 . b5 = eval b5,b3 );

registration
let c1 be Ordinal;
let c2 be non empty Abelian add-associative right_zeroed right_complementable unital associative distributive non trivial doubleLoopStr ;
cluster Polynom-Ring a1,a2 -> unital ;
coherence
Polynom-Ring c1,c2 is unital
;
end;

registration
let c1 be Ordinal;
let c2 be non empty Abelian add-associative right_zeroed right_complementable unital associative distributive non trivial doubleLoopStr ;
let c3 be Function of c1,c2;
cluster Polynom-Evaluation a1,a2,a3 -> unity-preserving ;
coherence
Polynom-Evaluation c1,c2,c3 is unity-preserving
proof end;
end;

registration
let c1 be Ordinal;
let c2 be non empty Abelian add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr ;
let c3 be Function of c1,c2;
cluster Polynom-Evaluation a1,a2,a3 -> additive ;
coherence
Polynom-Evaluation c1,c2,c3 is additive
proof end;
end;

registration
let c1 be Ordinal;
let c2 be non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr ;
let c3 be Function of c1,c2;
cluster Polynom-Evaluation a1,a2,a3 -> additive unity-preserving multiplicative ;
coherence
Polynom-Evaluation c1,c2,c3 is multiplicative
proof end;
end;

registration
let c1 be Ordinal;
let c2 be non empty Abelian add-associative right_zeroed right_complementable unital associative commutative distributive non trivial doubleLoopStr ;
let c3 be Function of c1,c2;
cluster Polynom-Evaluation a1,a2,a3 -> RingHomomorphism additive unity-preserving multiplicative ;
coherence
Polynom-Evaluation c1,c2,c3 is RingHomomorphism
proof end;
end;