@c Language: Brazilian Portuguese, Encoding: iso-8859-1
@c /zeilberger.texi/1.6/Sat Jun  2 00:13:35 2007//
@menu
* Introdu@value{cedilha}@~{a}o a zeilberger::
* Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para zeilberger::
@end menu

@node Introdu@value{cedilha}@~{a}o a zeilberger, Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para zeilberger, zeilberger, zeilberger
@section Introdu@value{cedilha}@~{a}o a zeilberger

@code{zeilberger} @'{e} uma implementa@value{cedilha}@~{a}o do algor@'{i}tmo de Zeilberger
para somat@'{o}rio hipergeom@'{e}tricos definidos, e tamb@'{e}m 
para o algor@'{i}tmo de Gosper para somat@'{o}rios hipergeom@'{e}tricos
indefinidos.

@code{zeilberger} faz uso do m@'{e}todo de otimiza@value{cedilha}@~{a}o "filtering" desenvolvido por Axel Riese.

@code{zeilberger} foi desenvolvido por Fabrizio Caruso.

@code{load (zeilberger)} torna esse pacote dispon@'{i}vel para uso.

@subsection O problema dos somat@'{o}rios hipergeom@'{e}tricos indefinidos

@code{zeilberger} implementa o algor@'{i}tmo de Gosper
para somat@'{o}rio hipergeom@'{e}trico indefinido.
Dado um termo hipergeom@'{e}trico @math{F_k} em @math{k} queremos encontrar sua anti-diferen@value{cedilha}a
hipergeom@'{e}trica, isto @'{e}, um termo hipergeom@'{e}trico @math{f_k} tal que @math{F_k = f_(k+1) - f_k}.

@subsection O problema dos somat@'{o}rios hipergeom@'{e}tricos definidos

@code{zeilberger} implementa o algor@'{i}tmo de Zeilberger
para somat@'{o}rio hipergeom@'{e}trico definido.
Dado um termo hipergeom@'{e}trico apropriado (em @math{n} e @math{k}) @math{F_(n,k)} e um
inteiro positivo @math{d} queremos encontrar um @math{d}-@'{e}sima ordem de recorr@^{e}ncia
linear com coeficientes polinomiais (em @math{n}) para @math{F_(n,k)}
e uma fun@value{cedilha}@~{a}o racional @math{R} em @math{n} e @math{k} tal que

@math{a_0 F_(n,k) + ... + a_d F_(n+d),k = Delta_K(R(n,k) F_(n,k))}

onde @math{Delta_k} @'{e} o @math{k}-seguinte operador de diferen@value{cedilha}a, i.e.,
@math{Delta_k(t_k) := t_(k+1) - t_k}.

@subsection N@'{i}veis de detalhe nas informa@value{cedilha}@~{o}es

Existe tamb@'{e}m vers@~{o}es de n@'{i}veis de detalhe fornecidos pelos comandos
que s@~{a}o chamados (os n@'{i}veis) atrav@'{e}s da adi@value{cedilha}@~{a}o de um dos seguintes prefixos:

@table @code
@item Summary
Apenas um sum@'{a}rio @'{e} mostrado no final
@item Verbose
Algumas informa@value{cedilha}@~{o}es nos passos intermedi@'{a}rios
@item VeryVerbose
Muita informa@value{cedilha}@~{a}o
@item Extra
Muito mais informa@value{cedilha}@~{a}o incluindo informa@value{cedilha}@~{a}o sobre
o sistema linear no algor@'{i}tmo de Zeilberger
@end table

Por exemplo:
@code{GosperVerbose}, @code{parGosperVeryVerbose},
@code{ZeilbergerExtra}, @code{AntiDifferenceSummary}.


@node Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para zeilberger, , Introdu@value{cedilha}@~{a}o a zeilberger, zeilberger
@section Fun@value{cedilha}@~{o}es e Vari@'{a}veis Definidas para zeilberger

@deffn {Fun@value{cedilha}@~{a}o} AntiDifference (@var{F_k}, @var{k})

Retorna a anti-diferen@value{cedilha}a hipergeom@'{e}trica
de @var{F_k}, se essa anti-diferen@value{cedilha}a.
De outra forma @code{AntiDifference} retorna @code{no_hyp_antidifference}.
@end deffn

@deffn {Fun@value{cedilha}@~{a}o} Gosper (@var{F_k}, @var{k})
Retorna o certificado racional @var{R(k)} para @var{F_k}, isto @'{e},
uma fun@value{cedilha}@~{a}o racional tal que

@math{F_k = R(k+1) F_(k+1) - R(k) F_k}
 
se essa fun@value{cedilha}@~{a}o racional exitir.
De outra forma, @code{Gosper} retorna @code{no_hyp_sol}.
@end deffn

@deffn {Fun@value{cedilha}@~{a}o} GosperSum (@var{F_k}, @var{k}, @var{a}, @var{b}) 

Retorna o somat@'{o}rio de @var{F_k} de @math{@var{k} = @var{a}} a @math{@var{k} = @var{b}}
se @var{F_k} tiver ma diferen@value{cedilha}a hipergeom@'{e}trica.
De outra forma, @code{GosperSum} retorna @code{nongosper_summable}.

Exemplos:

@c ===beg===
@c load (zeilberger);
@c GosperSum ((-1)^k*k / (4*k^2 - 1), k, 1, n);
@c GosperSum (1 / (4*k^2 - 1), k, 1, n);
@c GosperSum (x^k, k, 1, n);
@c GosperSum ((-1)^k*a! / (k!*(a - k)!), k, 1, n);
@c GosperSum (k*k!, k, 1, n);
@c GosperSum ((k + 1)*k! / (k + 1)!, k, 1, n);
@c GosperSum (1 / ((a - k)!*k!), k, 1, n);
@c ===end===
@example
(%i1) load (zeilberger);
(%o1)  /usr/share/maxima/share/contrib/Zeilberger/zeilberger.mac
(%i2) GosperSum ((-1)^k*k / (4*k^2 - 1), k, 1, n);

Dependent equations eliminated:  (1)
                           3       n + 1
                      (n + -) (- 1)
                           2               1
(%o2)               - ------------------ - -
                                  2        4
                      2 (4 (n + 1)  - 1)
(%i3) GosperSum (1 / (4*k^2 - 1), k, 1, n);
                                3
                          - n - -
                                2       1
(%o3)                  -------------- + -
                                2       2
                       4 (n + 1)  - 1
(%i4) GosperSum (x^k, k, 1, n);
                          n + 1
                         x          x
(%o4)                    ------ - -----
                         x - 1    x - 1
(%i5) GosperSum ((-1)^k*a! / (k!*(a - k)!), k, 1, n);
                                n + 1
                a! (n + 1) (- 1)              a!
(%o5)       - ------------------------- - ----------
              a (- n + a - 1)! (n + 1)!   a (a - 1)!
(%i6) GosperSum (k*k!, k, 1, n);

Dependent equations eliminated:  (1)
(%o6)                     (n + 1)! - 1
(%i7) GosperSum ((k + 1)*k! / (k + 1)!, k, 1, n);
                  (n + 1) (n + 2) (n + 1)!
(%o7)             ------------------------ - 1
                          (n + 2)!
(%i8) GosperSum (1 / ((a - k)!*k!), k, 1, n);
(%o8)                  nonGosper_summable
@end example
@end deffn

@deffn {Fun@value{cedilha}@~{a}o} parGosper (@var{F_@{n,k@}}, @var{k}, @var{n}, @var{d})
Tenta encontrar uma recorr@^{e}ncia de @var{d}-@'{e}sima ordem para @var{F_@{n,k@}}.

O algor@'{i}tmo retorna uma seq@"{u}@^{e}ncia
@math{[s_1, s_2, ..., s_m]} de solu@value{cedilha}@~{o}es.
Cada solu@value{cedilha}@~{a}o tem a forma

@math{[R(n, k), [a_0, a_1, ..., a_d]]}

@code{parGosper} retorna @code{[]} caso n@~{a}o consiga encontrar uma recorr@^{e}ncia.
@end deffn

@deffn {Fun@value{cedilha}@~{a}o} Zeilberger (@var{F_@{n,k@}}, @var{k}, @var{n})
Tenta calcular o somat@'{o}rio hipergeom@'{e}trico indefinido de @var{F_@{n,k@}}.

@code{Zeilberger} primeiro invoca @code{Gosper}, e se @code{Gosper} n@~{a}o conseguir encontrar uma solu@value{cedilha}@~{a}o, ent@~{a}o @code{Zeilberger} invoca
@code{parGosper}com ordem 1, 2, 3, ..., acima de @code{MAX_ORD}.
Se Zeilberger encontrar uma solu@value{cedilha}@~{a}o antes de esticar @code{MAX_ORD},
Zeilberger para e retorna a solu@value{cedilha}@~{a}o.

O algor@'{i}tmo retorna uma seq@"{u}@^{e}ncia
@math{[s_1, s_2, ..., s_m]} de solu@value{cedilha}@~{o}es.
Cada solu@value{cedilha}@~{a}o tem a forma

@math{[R(n,k), [a_0, a_1, ..., a_d]]}

@code{Zeilberger} retorna @code{[]} se n@~{a}o conseguir encontrar uma solu@value{cedilha}@~{a}o.

@code{Zeilberger} invoca @code{Gosper} somente se @code{gosper_in_zeilberger} for @code{true}.
@end deffn

@section Vari@'{a}veis globais gerais

@defvr {Vari@'{a}vel global} MAX_ORD
Valor padr@~{a}o: 5

@code{MAX_ORD} @'{e} a ordem m@'{a}xima de recorr@^{e}ncia tentada por @code{Zeilberger}.
@end defvr

@defvr {Vari@'{a}vel global} simplified_output
Valor padr@~{a}o: @code{false}

Quando @code{simplified_output} for @code{true},
fun@value{cedilha}@~{o}es no pacote @code{zeilberger} tentam
simplifica@value{cedilha}@~{a}o adicional da solu@value{cedilha}@~{a}o.
@end defvr

@defvr {Vari@'{a}vel global} linear_solver
Valor padr@~{a}o: @code{linsolve}

@code{linear_solver} nomeia o resolvedor que @'{e} usado para resolver o sistema
de equa@value{cedilha}@~{o}es no algor@'{i}tmo de Zeilberger.
@end defvr

@defvr {Vari@'{a}vel global} warnings
Valor padr@~{a}o: @code{true}

Quando @code{warnings} for @code{true},
fun@value{cedilha}@~{o}es no pacote @code{zeilberger} imprimem
mensagens de alerta durante a execu@value{cedilha}@~{a}o.
@end defvr

@defvr {Vari@'{a}vel global} gosper_in_zeilberger
Valor padr@~{a}o: @code{true}

Quando @code{gosper_in_zeilberger} for @code{true},
a fun@value{cedilha}@~{a}o @code{Zeilberger} chama @code{Gosper} antes de chamar @code{parGosper}.
De outra forma, @code{Zeilberger} vai imediatamente para @code{parGosper}.
@end defvr

@defvr {Vari@'{a}vel global} trivial_solutions
Valor padr@~{a}o: @code{true}

Quando @code{trivial_solutions} for @code{true},
@code{Zeilberger} retorna solu@value{cedilha}@~{o}es
que possuem certificado igual a zero, ou todos os coeficientes iguais a zero.
@end defvr

@section Vari@'{a}veis relacionadas ao teste modular

@defvr {Vari@'{a}vel global} mod_test
Valor padr@~{a}o: @code{false}

Quando @code{mod_test} for @code{true},
@code{parGosper} executa um
teste modular discartando sistemas sem solu@value{cedilha}@~{a}o.
@end defvr

@defvr {Vari@'{a}vel global} modular_linear_solver
Valor padr@~{a}o: @code{linsolve}

@code{modular_linear_solver} nomeia o resolvedor linear usado pelo  teste modular em @code{parGosper}.
@end defvr

@defvr {Vari@'{a}vel global} ev_point
Valor padr@~{a}o: @code{big_primes[10]}

@code{ev_point} @'{e} o valor no qual a vari@'{a}vel @var{n} @'{e} avaliada
no momento da execu@value{cedilha}@~{a}o do teste modular em @code{parGosper}.
@end defvr

@defvr {Vari@'{a}vel global} mod_big_prime
Valor padr@~{a}o: @code{big_primes[1]}

@code{mod_big_prime} @'{e} o m@'{o}dulo usado pelo teste modular em @code{parGosper}.
@end defvr

@defvr {Vari@'{a}vel global} mod_threshold
Valor padr@~{a}o: 4

@code{mod_threshold} is the
maior ordem para a qual o teste modular em @code{parGosper} @'{e} tentado.
@end defvr

