:: POLYNOM7 semantic presentation

registration
cluster non empty non trivial ZeroStr ;
existence
not for b1 being non empty ZeroStr holds b1 is trivial
proof end;
end;

registration
cluster non trivial -> non empty ZeroStr ;
coherence
for b1 being ZeroStr st not b1 is trivial holds
not b1 is empty
proof end;
end;

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

registration
let c1 be non trivial ZeroStr ;
cluster non-zero Element of the carrier of a1;
existence
ex b1 being Element of c1 st b1 is non-zero
proof end;
end;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Series of c1,c2;
canceled;
attr a3 is non-zero means :Def2: :: POLYNOM7:def 2
a3 <> 0_ a1,a2;
end;

:: deftheorem Def1 POLYNOM7:def 1 :
canceled;

:: deftheorem Def2 defines non-zero POLYNOM7:def 2 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 is non-zero iff b3 <> 0_ b1,b2 );

registration
let c1 be set ;
let c2 be non trivial ZeroStr ;
cluster non-zero Relation of Bags a1,the carrier of a2;
existence
ex b1 being Series of c1,c2 st b1 is non-zero
proof end;
end;

registration
let c1 be Ordinal;
let c2 be non trivial ZeroStr ;
cluster non-zero Relation of Bags a1,the carrier of a2;
existence
ex b1 being Polynomial of c1,c2 st b1 is non-zero
proof end;
end;

theorem Th1: :: POLYNOM7:1
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 = 0_ b1,b2 iff Support b3 = {} )
proof end;

theorem Th2: :: POLYNOM7:2
for b1 being set
for b2 being non empty ZeroStr holds
( not b2 is trivial iff ex b3 being Series of b1,b2 st Support b3 <> {} )
proof end;

definition
let c1 be set ;
let c2 be bag of c1;
attr a2 is univariate means :Def3: :: POLYNOM7:def 3
ex b1 being Element of a1 st support a2 = {b1};
end;

:: deftheorem Def3 defines univariate POLYNOM7:def 3 :
for b1 being set
for b2 being bag of b1 holds
( b2 is univariate iff ex b3 being Element of b1 st support b2 = {b3} );

registration
let c1 be non empty set ;
cluster univariate M32(a1);
existence
ex b1 being bag of c1 st b1 is univariate
proof end;
end;

registration
let c1 be non empty set ;
cluster univariate -> non empty M32(a1);
coherence
for b1 being bag of c1 st b1 is univariate holds
not b1 is empty
proof end;
end;

theorem Th3: :: POLYNOM7:3
for b1 being bag of {} holds b1 = EmptyBag {}
proof end;

Lemma4: for b1 being non empty doubleLoopStr
for b2 being Polynomial of {} ,b1 ex b3 being Element of b1 st b2 = {(EmptyBag {} )} --> b3
proof end;

theorem Th4: :: POLYNOM7:4
for b1 being add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b2 being Polynomial of {} ,b1
for b3 being Function of {} ,b1 holds eval b2,b3 = b2 . (EmptyBag {} )
proof end;

theorem Th5: :: POLYNOM7:5
for b1 being Abelian add-associative right_zeroed right_complementable unital associative distributive non trivial doubleLoopStr holds Polynom-Ring {} ,b1 is_ringisomorph_to b1
proof end;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Series of c1,c2;
attr a3 is monomial-like means :Def4: :: POLYNOM7:def 4
ex b1 being bag of a1 st
for b2 being bag of a1 st b2 <> b1 holds
a3 . b2 = 0. a2;
end;

:: deftheorem Def4 defines monomial-like POLYNOM7:def 4 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 is monomial-like iff ex b4 being bag of b1 st
for b5 being bag of b1 st b5 <> b4 holds
b3 . b5 = 0. b2 );

registration
let c1 be set ;
let c2 be non empty ZeroStr ;
cluster monomial-like Relation of Bags a1,the carrier of a2;
existence
ex b1 being Series of c1,c2 st b1 is monomial-like
proof end;
end;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
mode Monomial of a1,a2 is monomial-like Series of a1,a2;
end;

registration
let c1 be set ;
let c2 be non empty ZeroStr ;
cluster monomial-like -> finite-Support Relation of Bags a1,the carrier of a2;
coherence
for b1 being Series of c1,c2 st b1 is monomial-like holds
b1 is finite-Support
proof end;
end;

theorem Th6: :: POLYNOM7:6
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 is Monomial of b1,b2 iff ( Support b3 = {} or ex b4 being bag of b1 st Support b3 = {b4} ) )
proof end;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Element of c2;
let c4 be bag of c1;
func Monom c3,c4 -> Monomial of a1,a2 equals :: POLYNOM7:def 5
(0_ a1,a2) +* a4,a3;
coherence
(0_ c1,c2) +* c4,c3 is Monomial of c1,c2
proof end;
end;

:: deftheorem Def5 defines Monom POLYNOM7:def 5 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Element of b2
for b4 being bag of b1 holds Monom b3,b4 = (0_ b1,b2) +* b4,b3;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Monomial of c1,c2;
func term c3 -> bag of a1 means :Def6: :: POLYNOM7:def 6
( a3 . a4 <> 0. a2 or ( Support a3 = {} & a4 = EmptyBag a1 ) );
existence
ex b1 being bag of c1 st
( c3 . b1 <> 0. c2 or ( Support c3 = {} & b1 = EmptyBag c1 ) )
proof end;
uniqueness
for b1, b2 being bag of c1 st ( c3 . b1 <> 0. c2 or ( Support c3 = {} & b1 = EmptyBag c1 ) ) & ( c3 . b2 <> 0. c2 or ( Support c3 = {} & b2 = EmptyBag c1 ) ) holds
b1 = b2
proof end;
end;

:: deftheorem Def6 defines term POLYNOM7:def 6 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Monomial of b1,b2
for b4 being bag of b1 holds
( b4 = term b3 iff ( b3 . b4 <> 0. b2 or ( Support b3 = {} & b4 = EmptyBag b1 ) ) );

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Monomial of c1,c2;
func coefficient c3 -> Element of a2 equals :: POLYNOM7:def 7
a3 . (term a3);
coherence
c3 . (term c3) is Element of c2
;
end;

:: deftheorem Def7 defines coefficient POLYNOM7:def 7 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Monomial of b1,b2 holds coefficient b3 = b3 . (term b3);

theorem Th7: :: POLYNOM7:7
for b1 being set
for b2 being non empty ZeroStr
for b3 being Monomial of b1,b2 holds
( Support b3 = {} or Support b3 = {(term b3)} )
proof end;

theorem Th8: :: POLYNOM7:8
for b1 being set
for b2 being non empty ZeroStr
for b3 being bag of b1 holds
( coefficient (Monom (0. b2),b3) = 0. b2 & term (Monom (0. b2),b3) = EmptyBag b1 )
proof end;

theorem Th9: :: POLYNOM7:9
for b1 being set
for b2 being non empty ZeroStr
for b3 being Element of b2
for b4 being bag of b1 holds coefficient (Monom b3,b4) = b3
proof end;

theorem Th10: :: POLYNOM7:10
for b1 being set
for b2 being non trivial ZeroStr
for b3 being non-zero Element of b2
for b4 being bag of b1 holds term (Monom b3,b4) = b4
proof end;

theorem Th11: :: POLYNOM7:11
for b1 being set
for b2 being non empty ZeroStr
for b3 being Monomial of b1,b2 holds Monom (coefficient b3),(term b3) = b3
proof end;

theorem Th12: :: POLYNOM7:12
for b1 being Ordinal
for b2 being add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Monomial of b1,b2
for b4 being Function of b1,b2 holds eval b3,b4 = (coefficient b3) * (eval (term b3),b4)
proof end;

theorem Th13: :: POLYNOM7:13
for b1 being Ordinal
for b2 being add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Element of b2
for b4 being bag of b1
for b5 being Function of b1,b2 holds eval (Monom b3,b4),b5 = b3 * (eval b4,b5)
proof end;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Series of c1,c2;
attr a3 is Constant means :Def8: :: POLYNOM7:def 8
for b1 being bag of a1 st b1 <> EmptyBag a1 holds
a3 . b1 = 0. a2;
end;

:: deftheorem Def8 defines Constant POLYNOM7:def 8 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 is Constant iff for b4 being bag of b1 st b4 <> EmptyBag b1 holds
b3 . b4 = 0. b2 );

registration
let c1 be set ;
let c2 be non empty ZeroStr ;
cluster Constant Relation of Bags a1,the carrier of a2;
existence
ex b1 being Series of c1,c2 st b1 is Constant
proof end;
end;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
mode ConstPoly of a1,a2 is Constant Series of a1,a2;
end;

registration
let c1 be set ;
let c2 be non empty ZeroStr ;
cluster Constant -> finite-Support monomial-like Relation of Bags a1,the carrier of a2;
coherence
for b1 being Series of c1,c2 st b1 is Constant holds
b1 is monomial-like
proof end;
end;

theorem Th14: :: POLYNOM7:14
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 is ConstPoly of b1,b2 iff ( b3 = 0_ b1,b2 or Support b3 = {(EmptyBag b1)} ) )
proof end;

registration
let c1 be set ;
let c2 be non empty ZeroStr ;
cluster 0_ a1,a2 -> finite-Support monomial-like Constant ;
coherence
0_ c1,c2 is Constant
proof end;
end;

registration
let c1 be set ;
let c2 be non empty unital doubleLoopStr ;
cluster 1_ a1,a2 -> finite-Support monomial-like Constant ;
coherence
1_ c1,c2 is Constant
proof end;
end;

Lemma15: for b1 being set
for b2 being non empty ZeroStr
for b3 being ConstPoly of b1,b2 holds
( term b3 = EmptyBag b1 & coefficient b3 = b3 . (EmptyBag b1) )
proof end;

theorem Th15: :: POLYNOM7:15
for b1 being set
for b2 being non empty ZeroStr
for b3 being ConstPoly of b1,b2 holds
( Support b3 = {} or Support b3 = {(EmptyBag b1)} )
proof end;

theorem Th16: :: POLYNOM7:16
for b1 being set
for b2 being non empty ZeroStr
for b3 being ConstPoly of b1,b2 holds
( term b3 = EmptyBag b1 & coefficient b3 = b3 . (EmptyBag b1) ) by Lemma15;

definition
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Element of c2;
func c3 | c1,c2 -> Series of a1,a2 equals :: POLYNOM7:def 9
(0_ a1,a2) +* (EmptyBag a1),a3;
coherence
(0_ c1,c2) +* (EmptyBag c1),c3 is Series of c1,c2
;
end;

:: deftheorem Def9 defines | POLYNOM7:def 9 :
for b1 being set
for b2 being non empty ZeroStr
for b3 being Element of b2 holds b3 | b1,b2 = (0_ b1,b2) +* (EmptyBag b1),b3;

registration
let c1 be set ;
let c2 be non empty ZeroStr ;
let c3 be Element of c2;
cluster a3 | a1,a2 -> finite-Support monomial-like Constant ;
coherence
c3 | c1,c2 is Constant
proof end;
end;

Lemma17: for b1 being set
for b2 being non empty ZeroStr holds (0. b2) | b1,b2 = 0_ b1,b2
proof end;

theorem Th17: :: POLYNOM7:17
for b1 being set
for b2 being non empty ZeroStr
for b3 being Series of b1,b2 holds
( b3 is ConstPoly of b1,b2 iff ex b4 being Element of b2 st b3 = b4 | b1,b2 )
proof end;

theorem Th18: :: POLYNOM7:18
for b1 being set
for b2 being non empty multLoopStr_0
for b3 being Element of b2 holds
( (b3 | b1,b2) . (EmptyBag b1) = b3 & ( for b4 being bag of b1 st b4 <> EmptyBag b1 holds
(b3 | b1,b2) . b4 = 0. b2 ) )
proof end;

theorem Th19: :: POLYNOM7:19
for b1 being set
for b2 being non empty ZeroStr holds (0. b2) | b1,b2 = 0_ b1,b2 by Lemma17;

theorem Th20: :: POLYNOM7:20
for b1 being set
for b2 being non empty unital multLoopStr_0 holds (1. b2) | b1,b2 = 1_ b1,b2
proof end;

theorem Th21: :: POLYNOM7:21
for b1 being set
for b2 being non empty ZeroStr
for b3, b4 being Element of b2 holds
( b3 | b1,b2 = b4 | b1,b2 iff b3 = b4 )
proof end;

theorem Th22: :: POLYNOM7:22
for b1 being set
for b2 being non empty ZeroStr
for b3 being Element of b2 holds
( Support (b3 | b1,b2) = {} or Support (b3 | b1,b2) = {(EmptyBag b1)} ) by Th15;

theorem Th23: :: POLYNOM7:23
for b1 being set
for b2 being non empty ZeroStr
for b3 being Element of b2 holds
( term (b3 | b1,b2) = EmptyBag b1 & coefficient (b3 | b1,b2) = b3 )
proof end;

theorem Th24: :: POLYNOM7:24
for b1 being Ordinal
for b2 being add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being ConstPoly of b1,b2
for b4 being Function of b1,b2 holds eval b3,b4 = coefficient b3
proof end;

theorem Th25: :: POLYNOM7:25
for b1 being Ordinal
for b2 being add-associative right_zeroed right_complementable unital distributive non trivial doubleLoopStr
for b3 being Element of b2
for b4 being Function of b1,b2 holds eval (b3 | b1,b2),b4 = b3
proof end;

definition
let c1 be set ;
let c2 be non empty multLoopStr_0 ;
let c3 be Series of c1,c2;
let c4 be Element of c2;
func c4 * c3 -> Series of a1,a2 means :Def10: :: POLYNOM7:def 10
for b1 being bag of a1 holds a5 . b1 = a4 * (a3 . b1);
existence
ex b1 being Series of c1,c2 st
for b2 being bag of c1 holds b1 . b2 = c4 * (c3 . b2)
proof end;
uniqueness
for b1, b2 being Series of c1,c2 st ( for b3 being bag of c1 holds b1 . b3 = c4 * (c3 . b3) ) & ( for b3 being bag of c1 holds b2 . b3 = c4 * (c3 . b3) ) holds
b1 = b2
proof end;
func c3 * c4 -> Series of a1,a2 means :Def11: :: POLYNOM7:def 11
for b1 being bag of a1 holds a5 . b1 = (a3 . b1) * a4;
existence
ex b1 being Series of c1,c2 st
for b2 being bag of c1 holds b1 . b2 = (c3 . b2) * c4
proof end;
uniqueness
for b1, b2 being Series of c1,c2 st ( for b3 being bag of c1 holds b1 . b3 = (c3 . b3) * c4 ) & ( for b3 being bag of c1 holds b2 . b3 = (c3 . b3) * c4 ) holds
b1 = b2
proof end;
end;

:: deftheorem Def10 defines * POLYNOM7:def 10 :
for b1 being set
for b2 being non empty multLoopStr_0
for b3 being Series of b1,b2
for b4 being Element of b2
for b5 being Series of b1,b2 holds
( b5 = b4 * b3 iff for b6 being bag of b1 holds b5 . b6 = b4 * (b3 . b6) );

:: deftheorem Def11 defines * POLYNOM7:def 11 :
for b1 being set
for b2 being non empty multLoopStr_0
for b3 being Series of b1,b2
for b4 being Element of b2
for b5 being Series of b1,b2 holds
( b5 = b3 * b4 iff for b6 being bag of b1 holds b5 . b6 = (b3 . b6) * b4 );

registration
let c1 be set ;
let c2 be non empty right_zeroed distributive left_zeroed add-cancelable doubleLoopStr ;
let c3 be finite-Support Series of c1,c2;
let c4 be Element of c2;
cluster a4 * a3 -> finite-Support ;
coherence
c4 * c3 is finite-Support
proof end;
cluster a3 * a4 -> finite-Support ;
coherence
c3 * c4 is finite-Support
proof end;
end;

theorem Th26: :: POLYNOM7:26
for b1 being set
for b2 being non empty commutative multLoopStr_0
for b3 being Series of b1,b2
for b4 being Element of b2 holds b4 * b3 = b3 * b4
proof end;

theorem Th27: :: POLYNOM7:27
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable left-distributive doubleLoopStr
for b3 being Series of b1,b2
for b4 being Element of b2 holds b4 * b3 = (b4 | b1,b2) *' b3
proof end;

theorem Th28: :: POLYNOM7:28
for b1 being Ordinal
for b2 being non empty add-associative right_zeroed right_complementable right-distributive doubleLoopStr
for b3 being Series of b1,b2
for b4 being Element of b2 holds b3 * b4 = b3 *' (b4 | b1,b2)
proof end;

Lemma26: for b1 being Ordinal
for b2 being Abelian add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval ((b4 | b1,b2) *' b3),b5 = b4 * (eval b3,b5)
proof end;

Lemma27: for b1 being Ordinal
for b2 being Abelian add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval (b3 *' (b4 | b1,b2)),b5 = (eval b3,b5) * b4
proof end;

theorem Th29: :: POLYNOM7:29
for b1 being Ordinal
for b2 being Abelian add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval (b4 * b3),b5 = b4 * (eval b3,b5)
proof end;

theorem Th30: :: POLYNOM7:30
for b1 being Ordinal
for b2 being add-associative right_zeroed right_complementable unital associative distributive left_zeroed add-left-cancelable domRing-like non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval (b4 * b3),b5 = b4 * (eval b3,b5)
proof end;

theorem Th31: :: POLYNOM7:31
for b1 being Ordinal
for b2 being Abelian add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval (b3 * b4),b5 = (eval b3,b5) * b4
proof end;

theorem Th32: :: POLYNOM7:32
for b1 being Ordinal
for b2 being add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed add-left-cancelable domRing-like non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval (b3 * b4),b5 = (eval b3,b5) * b4
proof end;

theorem Th33: :: POLYNOM7:33
for b1 being Ordinal
for b2 being Abelian add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval ((b4 | b1,b2) *' b3),b5 = b4 * (eval b3,b5) by Lemma26;

theorem Th34: :: POLYNOM7:34
for b1 being Ordinal
for b2 being Abelian add-associative right_zeroed right_complementable unital associative commutative distributive left_zeroed non trivial doubleLoopStr
for b3 being Polynomial of b1,b2
for b4 being Element of b2
for b5 being Function of b1,b2 holds eval (b3 *' (b4 | b1,b2)),b5 = (eval b3,b5) * b4
proof end;