products/sources/formale Sprachen/PVS/reals image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: polynomials.pvs   Sprache: PVS

Original von: PVS©

polynomials: THEORY
%------------------------------------------------------------------------------
%
%          Anthony Narkawicz    NASA
%
%          David Lester                    Manchester University
%
%------------------------------------------------------------------------------
BEGIN

  IMPORTING sigma_nat
  IMPORTING factorial, % series@nth_derivatives, 
            binomial,
     sigma_swap[nat]

  IMPORTING real_fun_ops

  x,y,c,r,MM,A,B: VAR real
  n,m,i,j: VAR nat
  pn:  VAR posnat
  a,b: VAR sequence[real]
  lb,ub: VAR bool

  expt_plus2: LEMMA x^(i+j) = x^i*x^j

  polynomial(a,n): [real->real] = LAMBDA (x:real): 
             sigma(0,n, LAMBDA (i:nat): a(i)*(IF i = 0 THEN 1 ELSE x^i ENDIF))

  polynomial_n0: LEMMA polynomial(a,0)    = LAMBDA (x:real): a(0)
  polynomial_x0: LEMMA polynomial(a,n)(0) = a(0)
  polynomial_x1: LEMMA polynomial(a,n)(1) = sigma(0,n,a)

  polynomial_eq_a0_plus: LEMMA n>0 IMPLIES polynomial(a,n)(x) = a(0) + x*polynomial(LAMBDA (i:nat): a(i+1),n-1)(x)

  polynomial_rec: LEMMA n>0 IMPLIES polynomial(a,n)(x) = polynomial(a,n-1)(x) + a(n)*x^n


% derivable_polynomial: LEMMA derivable(polynomial(a,n))

% deriv_polynomial    : LEMMA deriv(polynomial(a,n))
%                       = IF n = 0 THEN (LAMBDA (x:real): 0)
%                         ELSE polynomial((LAMBDA (i:nat): (i+1)*a(i+1)),n-1) 
%                         ENDIF

% derivable_n_times_polynomial: LEMMA derivable_n_times(polynomial(b,m),n)

% nderiv_polynomial  : LEMMA nderiv(n,polynomial(b,m))
%           = IF n > m THEN (LAMBDA (x:real): 0)
%             ELSE polynomial(LAMBDA (i:nat): C(i+n,n)*factorial(n)*b(i+n),m-n)
%             ENDIF


  extend_polynomial  : LEMMA (FORALL (i:posnat): a(n+i) = 0) IMPLIES
                                   polynomial(a,n) = polynomial(a,n+m)

  sum_polynomial     : LEMMA (FORALL (i:posnat): a(n+i) = 0) AND
                             (FORALL (i:posnat): b(m+i) = 0)
         IMPLIES polynomial(a,n) + polynomial(b,m) = polynomial(a+b,max(n,m))

  sum_polynomial_eq_degree     : LEMMA 
    polynomial(a,n) + polynomial(b,n) = polynomial(a+b,n)

  sum_polynomial_eq_degree_eval: LEMMA
    polynomial(a,n)(x) + polynomial(b,n)(x) = polynomial(a+b,n)(x)

  neg_polynomial     : LEMMA - polynomial(a,n) = polynomial(-a,n)

  diff_polynomial    : LEMMA (FORALL (i:posnat): a(n+i) = 0) AND
                      (FORALL (i:posnat): b(m+i) = 0)
        IMPLIES polynomial(a,n) - polynomial(b,m) = polynomial(a-b,max(n,m))

  polynomial_sub: LEMMA polynomial(a-b,n) = polynomial(a,n)-polynomial(b,n)

  mul_x_to_n_polynomial: LEMMA   polynomial(a,n) * (LAMBDA (x:real): x^pn)
       = polynomial(LAMBDA (i:nat): IF i < pn THEN 0 ELSE a(i-pn) ENDIF,n+pn)

  first_polynomial   : LEMMA polynomial(a,pn)(x) = 
                         a(0) + x*polynomial(LAMBDA (i:nat): a(i+1),pn-1)(x)

  scal_polynomial    : LEMMA const_fun(y) * polynomial(a,n) 
                               = polynomial(const_fun(y)*a,n)

  scal_polynomial2   : LEMMA polynomial(c*a,n)(x) = c*polynomial(a,n)(x)

  even_fs?(a:sequence[real]):bool = (FORALL (i:nat): odd?(i) => a(i) = 0)

  even_polynomial    : LEMMA even_fs?(a) IMPLIES
         polynomial(a,2*n)(x) = polynomial(LAMBDA (i:nat): a(2*i),n)(x^2)

  odd_fs?(a:sequence[real]):bool = (FORALL (i:nat): even?(i) => a(i) = 0)

  odd_polynomial: LEMMA odd_fs?(a) IMPLIES
    polynomial(a,2*n+1)(x) = x*polynomial(LAMBDA (i:nat): a(2*i+1),n)(x^2)

  alternating_fs?(a:sequence[real],n:nat):bool
     = FORALL (i:nat): 0 <= i AND i < n IMPLIES a(i)*a(i+1) < 0

  neg_even_polynomial: LEMMA even_fs?(a) IMPLIES
    polynomial(a,n)(-x) = polynomial(a,n)(x)

  abs_polynomial_le: LEMMA
    abs(polynomial(a,n)(x)) <= polynomial(LAMBDA (i:nat): abs(a(i)),n)(abs(x))

  nn_le_polynomial : LEMMA
    (FORALL (i:nat): a(i) >= 0) AND (FORALL (i:nat): b(i) >= a(i)) AND
     x >= 0 AND n <= m IMPLIES polynomial(a,n)(x) <= polynomial(b,m)(x)

  power_fs(n:nat): [nat->nat] =
    (LAMBDA (i:nat): IF i > n THEN 0 ELSE C(n,i) ENDIF)

  power_polynomial : LEMMA (LAMBDA (x:real): (1+x)^pn) 
                          = polynomial(power_fs(pn),pn)

  neg_power_fs(n:nat):[nat->int] = 
    (LAMBDA (i:nat): IF i > n THEN 0 ELSE (-1)^i * C(n,i) ENDIF)

  neg_power_polynomial: LEMMA
    (LAMBDA (x:real): (1-x)^pn) = polynomial(neg_power_fs(pn),pn)

  binomial_theorem: LEMMA
    (x+y)^n = sigma(0,n,(LAMBDA (i:nat): IF i > n THEN 0 ELSE C(n,i)*x^i*y^(n-i) ENDIF))

  power_linear(c,r,n)(i:nat): real =
    IF i > n THEN 0 ELSE r^i*c^(n-i)*C(n,i) ENDIF

  power_linear_polynomial: LEMMA FORALL (k:nat): k>=n IMPLIES
    (c+r*x)^n = polynomial(power_linear(c,r,n),k)(x)

  polynomial_prod(a,n,b,m)(i:nat): real = sigma(max(i-m,0),n,LAMBDA (k:nat): IF k<=i THEN a(k)*b(i-k) ELSE 0 ENDIF)

  polynomial_prod_def: LEMMA
    polynomial(a,n)(x)*polynomial(b,m)(x) = polynomial(polynomial_prod(a,n,b,m),n+m)(x)

  % Added May 2010

  poly_shift(a,n)(c): sequence[real] =
    (LAMBDA (j:nat): sigma(j,n,(LAMBDA (i:nat): If (i<j OR i>n) THEN 0 ELSE a(i)*C(i,j)*c^(i-j) ENDIF)))

  poly_shift_id: LEMMA
    polynomial(a,n)(x+c) = polynomial(poly_shift(a,n)(c),n)(x)

  % Added March 2012

  poly_scal(a,n,c): sequence[real] =
    (LAMBDA (j:nat): c^j*a(j))

  poly_scal_def: LEMMA
    polynomial(a,n)(c*x) = polynomial(poly_scal(a,n,c),n)(x)

  % Added Dec 2012

  poly_eq_le_degree: LEMMA
    (FORALL (ii:nat): ii<=n IMPLIES a(ii) = b(ii))
    IMPLIES
    polynomial(a,n)(x) = polynomial(b,n)(x)

  poly_reduce_degree: LEMMA
    m<=n AND
    (FORALL (ii:nat): ii>m AND ii<=n IMPLIES a(ii)=0)
    IMPLIES
    polynomial(a,n)(x) = polynomial(a,m)(x)

  poly_eq: LEMMA
    (FORALL (ii:nat): ii>min(n,m) IMPLIES 
      (ii<=n IMPLIES a(ii)=0) AND (ii<=m IMPLIES b(ii)=0)) AND
    (FORALL (ii:nat): ii<=min(n,m) IMPLIES a(ii)=b(ii))
    IMPLIES
    polynomial(a,n)(x) = polynomial(b,m)(x)

  %poly_translate_rat(a,n)(A,B,C,D:real): =

  prop_extends_monomial: LEMMA
    LET eventzero = (LAMBDA (ab:sequence[real]): EXISTS (kk:nat): FORALL (mm:nat):
                          mm>kk IMPLIES ab(mm) = 0)
    IN
    FORALL (P:[sequence[real]->bool]):
    (FORALL (j:nat,ar:real): P(LAMBDA (i:nat): IF i = j THEN ar ELSE 0 ENDIF))
    AND
    (FORALL (a,b): P(a) AND P(b) IMPLIES P(a+b))
    IMPLIES
    (FORALL (a): eventzero(a) IMPLIES P(a))
  

  % The next function turns a polynomial on [A,B] into a polynomial on [0,1]

  poly_translate(a,n)(A:real,B:real): sequence[real] =
    (LAMBDA (j:nat): (B-A)^j*sigma(j,n,(LAMBDA (i:nat): If (i<j OR i>n) THEN 0 ELSE a(i)*C(i,j)*A^(i-j) ENDIF)))

  poly_translate_id: LEMMA FORALL (A:real,(B:real|A/=B)):polynomial(a,n)(x) = polynomial(poly_translate(a,n)(A,B),n)((x-A)/(B-A))

  polynomial_zero_factor: LEMMA
    polynomial(a,pn)(y) = 0 IMPLIES
    EXISTS (g:sequence[real]):
    (FORALL (x:real): polynomial(a,pn)(x) = (x-y)*polynomial(g,pn-1)(x))

  polynomial_zero_factor2: LEMMA
    polynomial(a,pn)(y)=0 IMPLIES
      LET g = poly_shift(LAMBDA (i): poly_shift(a,pn)(y)(i+1),pn-1)(-y) IN
        (FORALL (x:real): polynomial(a,pn)(x) = (x-y)*polynomial(g,pn-1)(x))

  polynomial_linear_divisor: LEMMA
    EXISTS (g:sequence[real]): FORALL (x:real): polynomial(a,pn)(x) = (x-y)*polynomial(g,pn-1)(x)+polynomial(a,pn)(y)
  
  polynomial_eq_coeff: LEMMA
    polynomial(a,n) = polynomial(b,n)
    IFF
    (FORALL (jj: upto(n)): a(jj) = b(jj))

  poly_eq_0_le_degree: LEMMA
    (FORALL (ii:nat): ii<=n IMPLIES a(ii)=0)
    IFF
    (FORALL (x:real): polynomial(a,n)(x)=0)

  poly_image_size: LEMMA n>0 AND
    (EXISTS (fp:[below(n+1)->real]): FORALL (i,j:below(n+1)):
      (i/=j IMPLIES fp(i)/=fp(j)) AND polynomial(a,n)(fp(i))=polynomial(a,n)(fp(j)))
    IMPLIES FORALL (k:subrange(1,n)): a(k)=0

  poly_constant_on_interval: LEMMA
    x<y AND (FORALL (r1,r2:real): x<r1 AND r1<=r2 AND r2<y IMPLIES polynomial(a,n)(r1)=polynomial(a,n)(r2))
    IMPLIES FORALL (k:subrange(1,n)): a(k)=0
      

  polynomial_div_id: LEMMA LET idf = (LAMBDA (x:real): x) IN
    idf*polynomial(a,n) = idf*polynomial(b,n) IMPLIES
    polynomial(a,n) = polynomial(b,n)

  % The next function gives the translation of a polynomial on x when x is translated
  % by the fractional linear transformation x -> (A*x + B)/(C*x + D)

  poly_translate_rat(A,B,C,D:real)(a,n)(d:nat): real =
    sigma(0,n,LAMBDA (i:nat): a(i)*sigma(0, n - i, LAMBDA (k: nat): IF (k < d - i OR k > d OR k > n - i) THEN 0
                            ELSE (C(n - i, k) * D ^ (-1 * k - i + n)) * C ^ k * ((C(i, d - k) * B ^ (k - d + i)) * A ^ (d - k)) ENDIF))

  poly_translate_rat_def: LEMMA FORALL (A,B,C,D,x:real): C*x+D/=0 IMPLIES
    (C*x+D)^n*polynomial(a,n)((A*x+B)/(C*x+D)) = polynomial(poly_translate_rat(A,B,C,D)(a,n),n)(x)

  poly_translate_rat_bounded_left: LEMMA
    x/=A IMPLIES (x-A)^n*polynomial(a,n)(((B+1)*x-B*(A+1))/(x-A)) =
      polynomial(poly_translate_rat(B+1,-B*(A+1),1,-A)(a,n),n)(x)

  poly_translate_rat_bounded_right: LEMMA
    x/=B IMPLIES (B-x)^n*polynomial(a,n)(((1-A)*x + A*(B-1))/(B-x)) =
      polynomial(poly_translate_rat(1-A,A*(B-1),-1,B)(a,n),n)(x)

  poly_translate_rat2(A,B,C,D,E,F:real)(a,n)(q:nat): real=
    sigma(0,n,LAMBDA (k:nat): a(k)*sigma(0, n, LAMBDA (i: nat): sigma(0,k,LAMBDA (j: nat):
          IF (q > 2 * n-k OR i < n - q OR i > -1 * q - k + 2 * n 
              OR j < i - n + k OR j > i OR j > k OR k>n) THEN 0
          ELSE C(k,j)*B^j*A^(k-j)*C(n-k,i-j)*D^(i-j)*C^(j-i-k+n)*
        C(n-k,-1*i-q-k+2*n)*F^(-1*i-q-k+2*n)*E^(i+q-n)
               ENDIF)))

  poly_translate_rat2_def: LEMMA FORALL (A,B,C,D,E,F,x:real): (C*x+D)/=0 AND (E*x+F)/=0 IMPLIES
    (C*x+D)^n*(E*x+F)^n*polynomial(a,n)((A*x+B)/((C*x+D)*(E*x+F))) =
    polynomial(poly_translate_rat2(A,B,C,D,E,F)(a,n),2*n)(x)

  poly_translate_inf_pos(a,n)(A:real) : sequence[real] = 
    (LAMBDA (j:nat): IF j>n THEN 0 ELSE sigma(n-j,n,LAMBDA (i:nat): IF (i<n-j OR i>n) THEN 0 ELSE
                              a(i)*C(i,i-n+j)*(A-1)^(i-n+j) ENDIFENDIF)

  poly_translate_inf_neg(a,n)(A:real) : sequence[real] = 
    (LAMBDA (j:nat): IF j>n THEN 0 ELSE sigma(n-j,n,LAMBDA (i:nat): IF (i<n-j OR i>n) THEN 0 ELSE
                              (-1)^i*a(i)*C(i,i-n+j)*(-A-1)^(i-n+j) ENDIFENDIF)

  poly_translate_inf_pos_def: LEMMA x/=0 IMPLIES x^n*polynomial(a,n)((1+x*(A-1))/x) = polynomial(poly_translate_inf_pos(a,n)(A),n)(x)

  poly_translate_inf_pos_def_rev: LEMMA x/=A-1 IMPLIES polynomial(a,n)(x) = (x-A+1)^n*polynomial(poly_translate_inf_pos(a,n)(A),n)(1/(x-A+1))

  poly_translate_inf_neg_def: LEMMA x/=0 IMPLIES x^n*polynomial(a,n)((-1-x*(-A-1))/x) = polynomial(poly_translate_inf_neg(a,n)(A),n)(x)



  poly_translate_inf_neg_def_rev: LEMMA x/=A+1 IMPLIES polynomial(a,n)(x) = (A+1-x)^n*polynomial(poly_translate_inf_neg(a,n)(A),n)(1/(A+1-x))

  rel : VAR [[real,real]->bool]

  poly_translate_inf_pos_rel: LEMMA ((rel = (<=)) OR (rel = (<)) OR (rel = (>=)) OR (rel = (>)))
           IMPLIES
         ((FORALL (x:real): x>=A IMPLIES rel(polynomial(a,n)(x),0))
          IFF
          (FORALL (x:real): 0<x AND x<=1 IMPLIES rel(polynomial(poly_translate_inf_pos(a,n)(A),n)(x),0)))

  poly_translate_inf_neg_rel: LEMMA ((rel = (<=)) OR (rel = (<)) OR (rel = (>=)) OR (rel = (>)))
           IMPLIES
         ((FORALL (x:real): x<=A IMPLIES rel(polynomial(a,n)(x),0))
          IFF
          (FORALL (x:real): 0<x AND x<=1 IMPLIES rel(polynomial(poly_translate_inf_neg(a,n)(A),n)(x),0)))

  %%% Special Derivatives: Derivatives of Polynomials. This does not import analysis. %%%

  poly_deriv(a)(n): real = (n+1)*a(n+1)

  poly_deriv_plus: LEMMA
    poly_deriv(a+b)(n) = poly_deriv(a)(n) + poly_deriv(b)(n)

  poly_deriv_scal: LEMMA FORALL (cc:real):
    poly_deriv(cc*a) = cc*poly_deriv(a)

  poly_deriv_minus: LEMMA
    poly_deriv(a-b)(n) = poly_deriv(a)(n) - poly_deriv(b)(n)

  poly_deriv_sub: LEMMA
    poly_deriv(a-b) = poly_deriv(a) - poly_deriv(b)

  poly_deriv_plus_eval: LEMMA
    polynomial(poly_deriv(a+b),n) = polynomial(poly_deriv(a),n) + polynomial(poly_deriv(b),n)

  poly_eq_deriv_plus: LEMMA
    n > 0 IMPLIES
    EXISTS (nseq:[nat->nat],pseq:[nat->sequence[real]]):
        FORALL (h:real,x): polynomial(a,n)(x+h) = polynomial(a,n)(x)+ h*polynomial(poly_deriv(a),n-1)(x) + h^2*polynomial(LAMBDA (ii:nat): polynomial(pseq(ii),nseq(ii))(h),n-1)(x)

  poly_deriv_const: LEMMA
    poly_deriv(c*a) = c*poly_deriv(a)

  %%% deriv properties

  poly_product_rule: LEMMA n>0 AND m>0 IMPLIES
    polynomial(poly_deriv(polynomial_prod(a,n,b,m)),n+m-1)(x) =
    polynomial(a,n)(x)*polynomial(poly_deriv(b),m-1)(x) +
    polynomial(poly_deriv(a),n-1)(x)*polynomial(b,m)(x)

  deriv_power_linear: LEMMA
    poly_deriv(power_linear(c,r,n)) =
    r*n*power_linear(c,r,max(n-1,0))

  %%% n derivatives

  poly_n_deriv(a,n)(i): real = C(n+i,n)*factorial(n)*a(n+i)

  poly_n_deriv_def: LEMMA
    poly_n_deriv(a,0) = a AND
    poly_n_deriv(a,1) = poly_deriv(a) AND
    FORALL (n): poly_deriv(poly_n_deriv(a,n)) = poly_n_deriv(a,n+1)

  poly_n_deriv_0: LEMMA m>=n IMPLIES
    polynomial(poly_n_deriv(a,n),m)(0) = factorial(n)*a(n)


  %%% Polynomials are continuous

  poly_continuous: LEMMA FORALL (x:real,epsil:posreal): EXISTS (delta:posreal):
    FORALL (y:real): abs(x-y)<=delta IMPLIES abs(polynomial(a,n)(x)-polynomial(a,n)(y)) < epsil

  %%% Polys attain maximum

  poly_attains_maximum: LEMMA
    x<=y IMPLIES EXISTS (c:real): x<=c AND c<=y AND
    FORALL (cc:real): x<=cc AND cc<=y IMPLIES polynomial(a,n)(cc)<=polynomial(a,n)(c)

  poly_attains_minimum: LEMMA
    x<=y IMPLIES EXISTS (c:real): x<=c AND c<=y AND
    FORALL (cc:real): x<=cc AND cc<=y IMPLIES polynomial(a,n)(cc)>=polynomial(a,n)(c)

  %%% increasing from derivative

  poly_strictly_increasing: LEMMA
    n > 0 AND x < y AND
    (FORALL (c): x <= c AND c <= y IMPLIES polynomial(poly_deriv(a),n-1)(c) > 0)
    IMPLIES
    polynomial(a,n)(x) < polynomial(a,n)(y)

  poly_increasing: LEMMA
    x <= y AND n > 0 AND
    (FORALL (c): x <= c AND c <= y IMPLIES polynomial(poly_deriv(a),n-1)(c) >= 0)
    IMPLIES
    polynomial(a,n)(x) <= polynomial(a,n)(y)

  poly_strictly_decreasing: LEMMA
    n > 0 AND x < y AND
    (FORALL (c): x <= c AND c <= y IMPLIES polynomial(poly_deriv(a),n-1)(c) < 0)
    IMPLIES
    polynomial(a,n)(x) > polynomial(a,n)(y)

  poly_decreasing: LEMMA
    x <= y AND n > 0 AND
    (FORALL (c): x <= c AND c <= y IMPLIES polynomial(poly_deriv(a),n-1)(c) <= 0)
    IMPLIES
    polynomial(a,n)(x) >= polynomial(a,n)(y)

  poly_intermediate_value_increasing_0: LEMMA
    x<=y AND polynomial(a,n)(x) <= 0 AND polynomial(a,n)(y)>=0 IMPLIES
    EXISTS (cc:real): x<=cc AND cc<=y AND polynomial(a,n)(cc) = 0

  poly_intermediate_value_inc: LEMMA
    x<=y AND polynomial(a,n)(x) <= c AND polynomial(a,n)(y)>=c IMPLIES
    EXISTS (cc:real): x<=cc AND cc<=y AND polynomial(a,n)(cc) = c

  poly_intermediate_value_dec: LEMMA
    x<=y AND polynomial(a,n)(x) >=c AND polynomial(a,n)(y)<=c IMPLIES
    EXISTS (cc:real): x<=cc AND cc<=y AND polynomial(a,n)(cc) = c

  %%% Polynomial mean value

  poly_Rolle: LEMMA
    x<y AND n>0 AND polynomial(a,n)(x) = polynomial(a,n)(y) IMPLIES
    EXISTS (c:real): x<c AND c<y AND polynomial(poly_deriv(a),n-1)(c)=0

  poly_mean_value: LEMMA x < y AND n > 0 IMPLIES
    EXISTS (cc:real): x<=cc AND cc<=y AND
      polynomial(poly_deriv(a),n-1)(cc) = (polynomial(a,n)(y)-polynomial(a,n)(x))/(y-x)

  %%% Integration of polynomials

  poly_integral(a,c)(n): real = IF n = 0 THEN c ELSE a(n-1)/n ENDIF

  polynomial_int(a,n,x,y): real = polynomial(poly_integral(a,0),n+1)(y)-
           polynomial(poly_integral(a,0),n+1)(x)

  polynomial_int_sum: LEMMA polynomial_int(a,n,x,y) + polynomial_int(b,n,x,y) = polynomial_int(a+b,n,x,y)

  polynomial_ftc: THEOREM n>0 IMPLIES polynomial_int(poly_deriv(a),n-1,x,y) =
         polynomial(a,n)(y) - polynomial(a,n)(x)

  antideriv_power_linear: LEMMA r/=0 IMPLIES
    poly_deriv(1/r*1/(n+1)*power_linear(c,r,n+1)) =
    power_linear(c,r,n)

  poly_local_max_deriv: LEMMA FORALL (epsil:posreal):
    n>0 AND (FORALL (y): abs(x-y)<epsil IMPLIES
      polynomial(a,n)(y)<=polynomial(a,n)(x))
    IMPLIES polynomial(poly_deriv(a),n-1)(x)=0

  poly_local_min_deriv: LEMMA FORALL (epsil:posreal):
    n>0 AND (FORALL (y): abs(x-y)<epsil IMPLIES
      polynomial(a,n)(y)>=polynomial(a,n)(x))
    IMPLIES polynomial(poly_deriv(a),n-1)(x)=0

  %%% Integration by Parts

  polynomial_integration_by_parts: LEMMA % int u*dv = u*v - int du*v
    n>0 AND m>0 IMPLIES
    polynomial_int(polynomial_prod(a,n,poly_deriv(b),m-1),n+m-1,x,y) =
    (polynomial(a,n)(y)*polynomial(b,m)(y) - polynomial(a,n)(x)*polynomial(b,m)(x)) - polynomial_int(polynomial_prod(poly_deriv(a),n-1,b,m),n+m-1,x,y)


  %%% Taylor Series

  poly_maclaurin: LEMMA FORALL (k:nat,br:real): k>=n AND n>0 AND br>0 AND
    (FORALL (ii:nat): ii>k IMPLIES a(ii) = 0)
    IMPLIES
    EXISTS (c:real): 0<=c AND c<=br AND
    LET fk = polynomial(a,k),
     fn1 = polynomial(a,n-1) IN
      fk(br) = fn1(br) + (1/factorial(n))*polynomial(poly_n_deriv(a,n),k-n)(c)*br^n

  % Expansion point is y

  % n is the power to go to in the expansion and k is the actual degree of the polynomial

  taylor_poly(a,(k:nat),n,(rr:real))(i:nat): real = 
   sigma(i,n,LAMBDA (d:nat): 
  IF i<=d AND d<=k THEN 
    (polynomial(poly_n_deriv(a,d),k-d)(rr)/factorial(d))*C(d,i)*(-rr)^(d-i) 
  ELSE 0 ENDIF)

  taylor_poly_def: LEMMA FORALL (k:nat,rr:real): polynomial(taylor_poly(a,k,0,rr),k)(x) = polynomial(a,k)(rr) AND
         FORALL (n): n<k IMPLIES polynomial(taylor_poly(a,k,n+1,rr),k)(x) = 
              polynomial(taylor_poly(a,k,n,rr),k)(x)+
     (polynomial(poly_n_deriv(a,n+1),k-n-1)(rr)/factorial(n+1))*(x-rr)^(n+1)

  poly_taylor: LEMMA FORALL (k:nat): k>=n AND n>0 IMPLIES
    EXISTS (c:real): ((y<=c AND c<=x) OR (x<=c AND c<=y)) AND
    LET fk = polynomial(a,k),
     fn1 = polynomial(taylor_poly(a,k,n-1,y),n-1) IN
      fk(x) = fn1(x) + (1/factorial(n))*polynomial(poly_n_deriv(a,n),k-n)(c)*(x-y)^n




END polynomials

¤ Dauer der Verarbeitung: 0.17 Sekunden  (vorverarbeitet)  ¤





Kontakt
Drucken
Kontakt
sprechenden Kalenders

in der Quellcodebibliothek suchen




schauen Sie vor die Tür

Fenster


Die Firma ist wie angegeben erreichbar.

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff