:: 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 holds
( b2 in Seg F2() implies P1[b2,b1 /. b2] ) ) )
provided
E1: for b1 being Nat holds
not ( b1 in Seg F2() & ( for b2 being Element of F1() holds
not 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 holds
( 1 <= b2 & b2 <= F3() - 1 implies P1[b2,b1 /. b2,b1 /. (b2 + 1)] ) ) )
provided
E1: for b1 being Nat holds
( 1 <= b1 & b1 <= F3() - 1 implies for b2 being Element of F1() holds
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 holds
( 1 <= b1 & b1 <= F3() - 1 implies for b2, b3, b4 being Element of F1() holds
( P1[b1,b2,b3] & P1[b1,b2,b4] implies b3 = b4 ) ) and E2: ( len F4() = F3() & ( F4() /. 1 = F2() or F3() = 0 ) & ( for b1 being Nat holds
( 1 <= b1 & b1 <= F3() - 1 implies P1[b1,F4() /. b1,F4() /. (b1 + 1)] ) ) ) and E3: ( len F5() = F3() & ( F5() /. 1 = F2() or F3() = 0 ) & ( for b1 being Nat holds
( 1 <= b1 & b1 <= F3() - 1 implies P1[b1,F5() /. b1,F5() /. (b1 + 1)] ) ) )
proof end;

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

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

scheme :: POLYNOM2:sch 6
s6{ F1() -> set , F2() -> FinSequence of F1(), P1[ set ] } :
for b1 being Nat holds
( 1 <= b1 & b1 <= len F2() implies P1[F2() . b1] )
provided
E1: P1[F2() . 1] and E2: for b1 being Nat holds
( 1 <= b1 & b1 < len F2() & P1[F2() . b1] implies 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 holds
( b3 is_connected_in b1 implies b3 is_connected_in b2 )
proof end;

Lemma3: for b1 being set
for b2 being Subset of b1
for b3 being Order of b1 holds
( b3 is_linear-order implies 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 holds
( b2 in dom b1 implies for b3 being Nat holds
( 1 <= b3 & b3 <= b2 implies 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 holds
( b4 linearly_orders {b3} \/ b2 implies 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 holds
( b3 in dom b2 & ( for b4 being Nat holds
( b4 in dom b2 & b4 <> b3 implies b2 /. b4 = 0. b1 ) ) implies 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 holds
( ex b3 being Nat st
( b3 in dom b2 & b2 /. b3 = 0. b1 ) implies 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 holds
( len b3 = len b4 & ex b5 being Nat st
( b5 in dom b3 & b4 /. b5 = b2 + (b3 /. b5) & ( for b6 being Nat holds
( b6 in dom b3 & b6 <> b5 implies b4 /. b6 = b3 /. b6 ) ) ) implies 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 holds
( len b3 = len b4 & ex b5 being Nat st
( b5 in dom b3 & b4 /. b5 = b2 * (b3 /. b5) & ( for b6 being Nat holds
( b6 in dom b3 & b6 <> b5 implies b4 /. b6 = b3 /. b6 ) ) ) implies 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 holds
( b3 linearly_orders b2 implies 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 holds
( b3 linearly_orders b2 implies for b4, b5 being Nat holds
( b4 in dom (SgmX b3,b2) & b5 in dom (SgmX b3,b2) & (SgmX b3,b2) /. b4 = (SgmX b3,b2) /. b5 implies b4 = b5 ) )
proof end;

Lemma12: for b1 being set
for b2 being FinSequence of b1 holds
( dom b2 <> {} implies 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 holds
( not b3 in b2 implies for b4 being finite Subset of b1 holds
( b4 = {b3} \/ b2 implies for b5 being Order of b1 holds
( b5 linearly_orders b4 implies for b6 being Nat holds
( b6 in dom (SgmX b5,b4) & (SgmX b5,b4) /. b6 = b3 implies for b7 being Nat holds
( 1 <= b7 & b7 <= b6 - 1 implies (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 holds
( not b3 in b2 implies for b4 being finite Subset of b1 holds
( b4 = {b3} \/ b2 implies for b5 being Order of b1 holds
( b5 linearly_orders b4 implies for b6 being Nat holds
( b6 in dom (SgmX b5,b4) & (SgmX b5,b4) /. b6 = b3 implies for b7 being Nat holds
( b6 <= b7 & b7 <= len (SgmX b5,b2) implies (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 holds
( not b3 in b2 implies for b4 being finite Subset of b1 holds
( b4 = {b3} \/ b2 implies for b5 being Order of b1 holds
( b5 linearly_orders b4 implies for b6 being Nat holds
( b6 + 1 in dom (SgmX b5,b4) & (SgmX b5,b4) /. (b6 + 1) = b3 implies 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 holds
( support b2 = {} implies 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 M36(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 holds
( 1 <= b2 & b2 <= len b1 implies 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 holds
( 1 <= b3 & b3 <= len b2 implies 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 holds
( 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 holds
( 1 <= b4 & b4 <= len b3 implies 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 holds
( 1 <= b4 & b4 <= len b3 implies b3 /. b4 = (power c3) . ((c4 * (SgmX (RelIncl c1),(support c2))) /. b4),((c2 * (SgmX (RelIncl c1),(support c2))) /. b4) ) ) ) implies 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 holds
( 1 <= b7 & b7 <= len b6 implies 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 holds
( support b4 = {b3} implies 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 holds
( not b5 in support b3 & support b4 = (support b3) \/ {b5} & ( for b6 being set holds
( b6 <> b5 implies b4 . b6 = b3 . b6 ) ) implies for b6 being Function of b1,b2
for b7 being Element of b2 holds
( b7 = (power b2) . (b6 . b5),(b4 . b5) implies 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 holds
( ex b4 being set st support b3 = {b4} implies 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 holds
( Support b3 = {} implies 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 holds
( 1 <= b2 & b2 <= len b1 implies 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 holds
( 1 <= b3 & b3 <= len b2 implies 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 holds
( 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 holds
( 1 <= b4 & b4 <= len b3 implies 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 holds
( 1 <= b4 & b4 <= len b3 implies b3 /. b4 = ((c3 * (SgmX (BagOrder c1),(Support c3))) /. b4) * (eval (((SgmX (BagOrder c1),(Support c3)) /. b4) @ ),c4) ) ) ) implies 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 holds
( 1 <= b7 & b7 <= len b6 implies 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 holds
( Support b3 = {b4} implies 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 holds
( not b6 in Support b3 & Support b4 = (Support b3) \/ {b6} & ( for b7 being bag of b1 holds
( b7 <> b6 implies b4 . b7 = b3 . b7 ) ) implies 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 holds
( ex b4 being bag of b1 st Support b3 = {b4} implies 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 holds
( Support b3 = {b5} & Support b4 = {b6} implies 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 holds
( ex b4 being bag of b1 st Support b3 = {b4} implies 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 holds
( ( 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 ) implies 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 multiplicative unity-preserving ;
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 -> additive multiplicative unity-preserving RingHomomorphism ;
coherence
Polynom-Evaluation c1,c2,c3 is RingHomomorphism
proof end;
end;