:: Evaluation of Multivariate Polynomials
:: by Christoph Schwarzweller and Andrzej Trybulec
::
:: Received April 14, 2000
:: Copyright (c) 2000-2019 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies NUMBERS, XBOOLE_0, SUBSET_1, FINSEQ_1, RELAT_1, PARTFUN1, CARD_1,
FUNCT_1, TARSKI, XXREAL_0, ARYTM_1, ARYTM_3, NAT_1, ORDERS_1, RELAT_2,
GROUP_1, BINOP_1, ALGSTR_0, RLVECT_1, VECTSP_1, LATTICES, ZFMISC_1,
FINSET_1, ALGSTR_1, STRUCT_0, SUPINF_2, CARD_3, FINSOP_1, ORDINAL4,
PRE_POLY, FINSEQ_5, FUNCT_4, FUNCOP_1, ORDINAL1, WELLORD2, MESFUNC1,
RFINSEQ, POLYNOM1, ALGSEQ_1, MSSUBFAM, QUOFIELD, POLYNOM2;
notations TARSKI, XBOOLE_0, ZFMISC_1, SUBSET_1, CARD_1, ORDINAL1, NUMBERS,
RELAT_1, FINSOP_1, RELAT_2, RELSET_1, FUNCT_1, FINSET_1, XCMPLX_0,
PARTFUN1, FUNCT_2, BINOP_1, FUNCT_4, FUNCT_7, REAL_1, NAT_1, ALGSTR_1,
ORDERS_1, FINSEQ_1, STRUCT_0, ALGSTR_0, RLVECT_1, FUNCOP_1, VFUNCT_1,
VECTSP_1, GROUP_1, GROUP_4, QUOFIELD, FINSEQ_5, GRCAT_1, RFINSEQ,
YELLOW_1, GROUP_6, XXREAL_0, RECDEF_1, PRE_POLY, POLYNOM1;
constructors REAL_1, FINSOP_1, RFINSEQ, BINARITH, FINSEQ_5, GROUP_4, GRCAT_1,
GROUP_6, MONOID_0, TRIANG_1, YELLOW_1, QUOFIELD, POLYNOM1, RECDEF_1,
ALGSTR_1, RELSET_1, FUNCT_7, FVSUM_1, VFUNCT_1, DOMAIN_1, RINGCAT1;
registrations XBOOLE_0, ORDINAL1, RELSET_1, FUNCOP_1, FINSET_1, XREAL_0,
NAT_1, INT_1, FINSEQ_1, STRUCT_0, VECTSP_1, ALGSTR_1, MONOID_0, POLYNOM1,
VALUED_0, CARD_1, SUBSET_1, PRE_POLY, RELAT_1, VFUNCT_1, FUNCT_2,
FUNCT_1, PBOOLE, RINGCAT1;
requirements NUMERALS, BOOLE, SUBSET, REAL, ARITHM;
begin
theorem :: POLYNOM2:1
for L being unital associative non empty multMagma, a being Element of L,
n,m being Element of NAT holds
power(L).(a,n+m) = power(L).(a,n) * power(L).(a,m);
registration
cluster Abelian right_zeroed add-associative right_complementable
well-unital distributive commutative associative for non trivial
doubleLoopStr;
end;
begin
::$CT
theorem :: POLYNOM2:3
for L being left_zeroed right_zeroed non empty addLoopStr, p
being FinSequence of the carrier of L, i being Element of NAT st i in dom p &
for i9 being Element of NAT st i9 in dom p & i9 <> i holds p/.i9 = 0.L holds
Sum p = p/.i;
theorem :: POLYNOM2:4
for L being add-associative right_zeroed right_complementable
distributive well-unital non empty doubleLoopStr, p being FinSequence of the
carrier of L st ex i being Element of NAT st i in dom p & p/.i = 0.L holds
Product p = 0.L;
theorem :: POLYNOM2:5
for L being Abelian add-associative non empty addLoopStr, a
being Element of L, p,q being FinSequence of the carrier of L st len p = len q
& ex i being Element of NAT st i in dom p & q/.i = a + p/.i & for i9 being
Element of NAT st i9 in dom p & i9 <> i holds q/.i9 = p/.i9 holds Sum q = a +
Sum p;
theorem :: POLYNOM2:6
for L being commutative associative non empty doubleLoopStr, a
being Element of L, p,q being FinSequence of the carrier of L st len p = len q
& ex i being Element of NAT st i in dom p & q/.i = a * p/.i & for i9 being
Element of NAT st i9 in dom p & i9 <> i holds q/.i9 = p/.i9 holds Product q = a
* Product p;
begin :: Evaluation of Bags -------------------------------------------------------
definition
::$CD
let n be Ordinal, b be bag of n, L be well-unital non trivial
doubleLoopStr, x be Function of n, L;
func eval(b,x) -> Element of L means
:: POLYNOM2:def 2
ex y being FinSequence of the carrier of L st
len y = len SgmX(RelIncl n, support b) & it = Product y &
for i being Element of NAT st 1 <= i & i <= len y holds
y/.i = power(L).((x * SgmX(RelIncl n, support b))/.i,
(b * SgmX(RelIncl n, support b))/.i);
end;
::$CT 7
theorem :: POLYNOM2:14
for n being Ordinal, L being well-unital non trivial
doubleLoopStr, x being Function of n, L holds eval(EmptyBag n,x) = 1.L;
theorem :: POLYNOM2:15
for n being Ordinal, L being well-unital non trivial
doubleLoopStr, u being set, b being bag of n st support b = {u} for x being
Function of n, L holds eval(b,x) = power(L).(x.u,b.u);
theorem :: POLYNOM2:16
for n being Ordinal, L being right_zeroed add-associative
right_complementable well-unital distributive Abelian non trivial commutative
associative non empty doubleLoopStr, b1,b2 being bag of n, x being Function
of n, L holds eval(b1+b2,x) = eval(b1,x) * eval(b2,x);
begin :: Evaluation of Polynomials ------------------------------------------------
registration
let n be Ordinal, L be add-associative right_zeroed right_complementable
non empty addLoopStr, p,q be Polynomial of n, L;
cluster p - q -> finite-Support;
end;
theorem :: POLYNOM2:17
for L being right_zeroed add-associative right_complementable
well-unital distributive non trivial doubleLoopStr, n being Ordinal
, p being Polynomial of n,L st Support p = {} holds p = 0_(n,L);
registration
let n be Ordinal, L be right_zeroed add-associative right_complementable
well-unital distributive non trivial doubleLoopStr, p be Polynomial
of n,L;
cluster Support p -> finite;
end;
theorem :: POLYNOM2:18
for n being Ordinal, L being right_zeroed add-associative
right_complementable well-unital distributive non trivial
doubleLoopStr, p being Polynomial of n,L holds BagOrder n linearly_orders
Support p;
definition
::$CD
let n be Ordinal, L be right_zeroed add-associative right_complementable
well-unital distributive non trivial doubleLoopStr, p be Polynomial
of n,L, x be Function of n, L;
func eval(p,x) -> Element of L means
:: POLYNOM2:def 4
ex y being FinSequence of the
carrier of L st len y = len SgmX(BagOrder n, Support p) & it = Sum y & for i
being Element of NAT st 1 <= i & i <= len y holds y/.i = (p * SgmX(BagOrder n,
Support p))/.i * eval(((SgmX(BagOrder n, Support p))/.i),x);
end;
theorem :: POLYNOM2:19
for n being Ordinal, L being right_zeroed add-associative
right_complementable well-unital distributive non trivial
doubleLoopStr, p being Polynomial of n,L, b being bag of n st Support p = {b}
for x being Function of n, L holds eval(p,x) = p.b * eval(b,x);
theorem :: POLYNOM2:20
for n being Ordinal, L being right_zeroed add-associative
right_complementable well-unital distributive non trivial
doubleLoopStr, x being Function of n, L holds eval(0_(n,L),x) = 0.L;
theorem :: POLYNOM2:21
for n being Ordinal, L being right_zeroed add-associative
right_complementable well-unital distributive non trivial
doubleLoopStr, x being Function of n, L holds eval(1_(n,L),x) = 1.L;
theorem :: POLYNOM2:22
for n being Ordinal, L being right_zeroed add-associative
right_complementable well-unital distributive non trivial
doubleLoopStr, p being Polynomial of n,L, x being Function of n, L holds eval(
-p,x) = - eval(p,x);
theorem :: POLYNOM2:23
for n being Ordinal, L being right_zeroed add-associative
right_complementable Abelian well-unital distributive non trivial
doubleLoopStr, p,q being Polynomial of n,L, x being Function of n, L holds
eval(p+q,x) = eval(p,x) + eval(q,x);
theorem :: POLYNOM2:24
for n being Ordinal, L being right_zeroed add-associative
right_complementable Abelian well-unital distributive non trivial
doubleLoopStr, p,q being Polynomial of n,L, x being Function of n, L holds
eval(p-q,x) = eval(p,x) - eval(q,x);
theorem :: POLYNOM2:25
for n being Ordinal, L being right_zeroed add-associative
right_complementable Abelian well-unital distributive non trivial commutative
associative non empty doubleLoopStr, p,q being Polynomial of n,L, x being
Function of n, L holds eval(p*'q,x) = eval(p,x) * eval(q,x);
begin :: Evaluation Homomorphism --------------------------------------------------
definition
let n be Ordinal, L be right_zeroed add-associative right_complementable
well-unital distributive non trivial doubleLoopStr, x be Function
of n, L;
func Polynom-Evaluation(n,L,x) -> Function of Polynom-Ring(n,L),L means
:: POLYNOM2:def 5
for p being Polynomial of n,L holds it.p = eval(p,x);
end;
registration
let n be Ordinal, L be right_zeroed Abelian add-associative
right_complementable well-unital distributive associative non trivial non
empty doubleLoopStr;
cluster Polynom-Ring (n, L) -> well-unital;
end;
registration
let n be Ordinal, L be Abelian right_zeroed add-associative
right_complementable well-unital distributive associative non trivial non
empty doubleLoopStr, x be Function of n, L;
cluster Polynom-Evaluation(n,L,x) -> unity-preserving;
end;
registration
let n be Ordinal, L be right_zeroed add-associative right_complementable
Abelian well-unital distributive non trivial doubleLoopStr, x be
Function of n, L;
cluster Polynom-Evaluation(n,L,x) -> additive;
end;
registration
let n be Ordinal, L be right_zeroed add-associative right_complementable
Abelian well-unital distributive commutative associative non trivial
doubleLoopStr, x be Function of n, L;
cluster Polynom-Evaluation(n,L,x) -> multiplicative;
end;
registration
let n be Ordinal, L be right_zeroed add-associative right_complementable
Abelian well-unital distributive commutative associative non trivial
doubleLoopStr, x be Function of n, L;
cluster Polynom-Evaluation(n,L,x) -> RingHomomorphism;
end;