Unprotect[C,D,N];
Clear[C];
Format[C,TeXForm]="C";
Format[D,TeXForm]="D";
Format[N,TeXForm]="N";

If[$VersionNumber>=2.,$Messages=OutputStream["",1],$Messages={}]

(*Abfrage, ob DOS-Version*)
DOSFrage=MemberQ[{"MS-DOS 386","387","DOS 387"},$System];

(*Neue Syntax in Subscript ab Version 8*)
If[$VersionNumber>=8.,
   Unprotect[Subscript];
   Subscript[x_]:=Subscript["",x]
   ]

BeginPackage["Hyp`m`"]

SUM::usage =
 "\nDescription: This is HYP's internal object for entering sums.
  \n  It should be used instead of Mathematica's \"Sum\".
  \nUsage: SUM[Summand,{summation-index,lower-bound,upper-bound}].
  \nSee also: SUMRegeln, SUMErw1, SUMErw2, SUMZerl, SUMShift, SUMSammle, 
  \n  SUMTausche."
hypAttributes::usage =
 "\nDescription: Shows the current setup of the session. The setup can be 
  \n  changed by the switches \"P\", \"FCancel\", \"TeX\", and \"TeXFV\". The 
  \n  default-setup is shown in the following Example.
  \nUsage: hypAttributes.
  \nSee also: P, FCancel, AmSTeX, AmSLaTeX, LaTeX, TeX, TeXFV."
SUMRegeln::usage =
 "\nDescription: Rule that transforms the expressions in a SUM[] into a
  \n  form that could also be expressed in hypergeometric notation.
  \n  This is useful, if you want to convert a SUM[] into hypergeometric
  \n  notation but without using the F[]-notation. In particular, expressions
  \n  of the form (-1)^(d*k), where d is an integer and k is the summation
  \n  index, will simplify. 
  \nUsage: Expr/.SUMRegeln
  \nSee also: SUM, F, H, SUMF, SUMH, FSUM, HSUM, MinusOne, Ers, PosListe.";
SUMSammle::usage =
 "\nDescription: Rule that causes all terms of an expression Expr, which involves  
  \n  a SUM[] to be put into the SUM[].
  \nUsage: Expr/.SUMSammle.
  \nSee also: SUM, SUMRegeln, SUMErw1, SUMErw2, SUMZerl, SUMShift, SUMTausche, 
    \n  pzus, Gzus, Ers, PosListe."
SUMF::usage =
 "\nDescription: Rule that transforms a SUM[] into hypergeometric notation,
  \n  if possible. If the upper bound is not \"Infinity\" you have to apply
  \n  \"SUMInfinity\" first (if allowed).
  \nUsage: Expr/.SUMF.
  \nSee also: SUM, F, SUMRegeln, SUMH, SUMInfinity, FSUM, Ers, PosListe."
SUMH::usage=
 "\nDescription: Rule that transforms a bilateral SUM[] into hypergeometric 
  \n  notation, if possible. If the upper bound is not \"Infinity\" you have 
  \n  to apply \"SUMInfinity\" first (if allowed). If the lower bound is not
  \n  \"Infinity\" then \"SUMF\" is applied.
  \nUsage: Expr/.SUMH.
  \nSee also: SUM, H, SUMRegeln, SUMF, SUMInfinity, HSUM, Ers, PosListe."
FSUM::usage =
 "\nDescription: Rule that transforms a F[] into a SUM[].
  \nUsage: Expr/.FSUM.
  \nSee also: F, SUM, SUMF, Ers, PosListe."
HSUM::usage =
 "\nDescription: Rule that transforms a H[] into a SUM[].
  \nUsage: Expr/.HSUM.
  \nSee also: H, SUM, SUMH, Ers, PosListe."
HF::usage=
 "\nDescription: Rule that transforms a H[] into a sum of two F[]'s.
  \n  The index where the bilateral series is to be split has to be 
  \n  entered on request.
  \nUsage: Expr/.HF.
  \nSee also: H, F, FH, Ers, PosListe."
FH::usage=
 "\nDescription: Rule that transforms a F[] into a difference of a H[]
  \n  and a F[].
  \nUsage: Expr/.FH.
  \nSee also: F, H, HF, Ers, PosListe."
SUMInfinity::usage =
 "\nDescription: Rule that changes the upper bound of a SUM[] into \"Infinity\".
  \nUsage: Expr/.SUMInfinity.
  \nSee also: SUM, SUMF, SUMH, Ers, PosListe.";
Gleichung::usage =
 "\nDescription: Is a variable which stores equations. The equation \"Gleichung\"
  \n  can be manipulated using the functions \"Add\", \"Sub\", \"Mal\", \"Div\", 
  \n  \"Hoch\", \"Ers\", and SUM[m_Integer,n_Integer]. The last command causes 
  \n  the equation to be summed from m to n.
  \nUsage: Gleichung.
  \nSee also: SumListe$gl, TransListe$gl, LS, RS, Mal, Add, Div, Sub, Hoch,
  \n  GlTausche, Ers, Subst, PSort.";
LS::usage =
 "\nDescription: \"LS\" is the left-hand side in \"Gleichung\".
  \nUsage: LS.
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, RS, Mal, Add, Div, Sub, 
  \n  Hoch, GlTausche, Ers, Subst.";
RS::usage =
 "\nDescription: \"RS\" is the right-hand side in \"Gleichung\".
  \nUsage: RS.
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, Mal, Add, Div, Sub, 
  \n  Hoch, GlTausche, Ers, Subst.";
GlTausche::usage =
 "\nDescription: \"GlTausche\" interchanges right-hand and left-hand sides in
  \n  \"Gleichung\".
  \nUsage: GlTausche.
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, RS, Mal, Add, Div, 
  \n  Sub, Hoch, Ers, Subst.";
Mal::usage =
 "\nDescription: Function that multiplies \"Gleichung\" by Expr.
  \nUsage: Mal[Expr].
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, RS, Add, Div, Sub, 
  \n  Hoch, GlTausche, Ers.";
Add::usage =
 "\nDescription: Function that adds Expr to \"Gleichung\".
  \nUsage: Add[Expr].
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, RS, Mal, Div, Sub, 
  \n  Hoch, GlTausche, Ers.";
Div::usage =
 "\nDescription: Function that divides \"Gleichung\" by Expr.
  \nUsage: Div[Expr].
  \nSee also: Gleichung, SumListe$gl, TransListe$gl LS, RS, Mal, Add, Sub, 
  \n  Hoch, GlTausche, Ers.";
Sub::usage =
 "\nDescription: Function that subtracts Expr from \"Gleichung\".
  \nUsage: Sub[Expr].
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, RS, Mal, Add, Div, 
  \n  Hoch, GlTausche, Ers.";
Hoch::usage =
 "\nDescription: Function that takes \"Gleichung\" to the Expr-th power.
  \nUsage: Hoch[Expr].
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, RS, Mal, Add, Div, 
  \n  Sub, GlTausche, Ers.";
Subst::usage =
 "\nDescription: Function that substitutes RS instead of LS at position
  \n  Position in Expr. The parameters LS and RS are optional. If they are
  \n  omitted, the right-hand side \"RS\" of \"Gleichung\" is substituted
  \n  instead of the left-hand side \"LS\" of \"Gleichung\". 
  \nUsage: Subst[Expr,Position,LS,RS].
  \nSee also: Gleichung, SumListe$gl, TransListe$gl, LS, RS, GlTausche, Ers,
  \n  PosListe."
Expandq::usage =
 "\nDescription: Rule that expands all the exponents in powers.
  \nUsage: Expr/.Expandq.
  \nSee also: SimplifyP, MinusOne, SUMExpand, Ers, PosListe."
p::usage =
 "\nDescription: p[x,n] is the upper-factorial symbol (x)_n. 
  \n  p[List1,List2,n] is also provided as the usual abbreviation for the
  \n  quotient of upper-factorial symbols (see Slater's book). 
  \nUsage: p[x,n]
  \n   or: p[List1,List2,n].
  \nSee also: GAMMA, Binomialp, Multinomialp, Factorialp, P, paufl, pzerl, 
  \n  pzus, FFormat."
Binomialp::usage =
 "\nDescription: Binomialp[n,k] is the binomial coefficient, written in terms
  \n  of upper-factorial symbols \"p\". 
  \nUsage: Binomialp[n,k].
  \nSee also: Factorialp, Multinomialp."
Multinomialp::usage =
 "\nDescription: Multinomialp[n1,n2,...] is the multinomial coefficient, 
  \n  written in terms of upper-factorial symbols \"p\". 
  \nUsage: Multinomialp[n1,n2,...].
  \nSee also: Binomialp, Factorialp."
Factorialp::usage =
 "\nDescription: Factorialp[n,k] is the usual factorial, written in terms
  \n  of upper-factorial symbols \"p\". 
  \nUsage: Factorialp[n,k].
  \nSee also: Binomialp, Multinomialp."
paufl::usage =
 "\nDescription: Rule that writes p[x,n] as the defining product
  \n  Product[x+i,{i,0,n-1}], if n is an integer.
  \nUsage: Expr/.paufl.
  \nSee also: pzerl, pzus, p, Gzerl, Gzus, Ers, PosListe."
pzerl::usage =
 "\nDescription: Rule that splits p[List1,List2,n] into a quotient of 
  \n  products of upper-factorial symbols.
  \nUsage: Expr/.pzerl.
  \nSee also: paufl, pzus, p, Gzerl, Gzus, Ers, PosListe."
pzus::usage =
 "\nDescription: Rule that collects several upper-factorial symbols p[x_i,n] to
  \n  an expression p[List1,List2,n]. 
  \nUsage: Expr/.pzus[n].
  \nSee also: paufl, pzerl, p, Gzus, Gzerl, Ers, PosListe."
GAMMA::usage =
 "\nDescription: GAMMA[x] is the Gamma-function.
  \n  GAMMA[List1,List2] is also provided as the usual abbreviation for the
  \n  quotient of Gamma-functions (see Slater's book). 
  \nUsage: GAMMA[x],
  \n   or: GAMMA[List1,List2].
  \nSee also: p, P, Gzerl, Gzus, FFormat."
Gzerl::usage =
 "\nDescription: Rule that splits GAMMA[List1,List2] into a quotient of 
  \n  products of Gamma-functions.
  \nUsage: Expr/.Gzerl.
  \nSee also: paufl, pzerl, pzus, GAMMA, Gzus, Ers, PosListe."
Gzus::usage =
 "\nDescription: Rule that collects several Gamma-functions 
  \n  GAMMA[x_i] to an expression GAMMA[List1,List2]. 
  \nUsage: Expr/.Gzus.
  \nSee also: paufl, pzerl, pzus, GAMMA, Gzerl, Ers, PosListe."
F::usage =
 "\nDescription: F[List1,List2,z] is the hypergeometric series with 
  \n  upper parameters List1, lower parameters List2, and argument z.
  \nUsage: F[List1,List2,z].
  \nSee also: SListe, TListe, SUMRegeln, SUMF, FSUM, H, p, GAMMA, FCancel, 
  \n  FOrdne, FPerm, FTausche, P, FFormat."
V::usage =
 "\nDescription: V[a,List,z] is the very well-poised hypergeometric
  \n  series.
  \nUsage: V[a,List,z].
  \nSee also: F, TeXFV, P, FFormat."
H::usage =
 "\nDescription: H[List1,List2,z] is the bilateral hypergeometric series 
  \n  with upper parameters List1, lower parameters List2, and argument z.
  \nUsage: H[List1,List2,z].
  \nSee also: SListe, TListe, SUMRegeln, SUMH, HSUM, F, p, GAMMA, FCancel, 
  \n  FOrdne, FPerm, FTausche, P, FFormat."
P::usage =
 "\nDescription: Is a switch that activates automatic evaluating of upper-factorial
  \n  symbols p and hypergeometric series F, H, or makes it inactive, 
  \n  respectively. By default automatic evaluating is inactive.
  \nUsage: P.
  \nSee also: F, H, p, hypAttributes."
TeXFV::usage =
 "\nDescription: Switch that toggles between writing very well-poised 
  \n  hypergeometric series in terms of \"V\" and in terms of \"F\", respectively,
  \n  when written in TeXForm. By default very well-poised hypergeometric series 
  \n  are written in terms of \"V\".
  \nUsage: TeXFV.
  \nSee also: F, V, hypAttributes."
FCancel::usage =
 "\nDescription: Switch that activates automatic cancelling of the upper and 
  \n  lower parameters in F[] and H[], or makes it inactive, respectively. 
  \n  By default automatic cancelling is active.
  \nUsage: FCancel.
  \nSee also: F, H, V, hypAttributes."
FFormat::usage =
 "\nDescription: Switch that activates hypergeometric output, or makes 
  \n  it inactive, respectively. By default hypergeometric output is 
  \n  active.
  \nUsage: FFormat."
TeX::usage =
 "\nDescription: Switch that changes the output of TeXForm to be usable with
  \n  Plain-TeX and LaTeX. By default the output of TeXForm is usable with 
  \n  AmS-TeX.
  \nUsage: TeX.
  \nSee also: AmSTeX, AmSLaTeX, LaTeX, TeXMat, TeXphW."
LaTeX::usage =
 "\nDescription: Switch that changes the output of TeXForm to be usable with
  \n  Plain-TeX and LaTeX. By default the output of TeXForm is usable with 
  \n  AmS-TeX.
  \nUsage: LaTeX.
  \nSee also: AmSTeX, AmSLaTeX, TeX, TeXMat, TeXphW."
AmSTeX::usage =
 "\nDescription: Switch that changes the output of TeXForm to be usable with
  \n  AmS-TeX. By default the output of TeXForm is usable with AmS-TeX.
  \nUsage: AmSTeX.
  \nSee also: AmSLaTeX, LaTeX, TeX, TeXMat, TeXphW."
AmSLaTeX::usage =
 "\nDescription: Switch that changes the output of TeXForm to be usable with
  \n  AmS-LaTeX. By default the output of TeXForm is usable with AmS-TeX.
  \nUsage: AmSLaTeX.
  \nSee also: AmSTeX, LaTeX, TeX, TeXMat, TeXphW."
ManipulationsListe::usage =
 "\nDescription: Gives a list of all available rules for manipulating 
  \n  upper-factorial symbols and Gamma-functions.
  \nUsage: ManipulationsListe.";
neg1::usage =
 "\nDescription: (a)_n -> 1/(a+n)_(-n).
  \nUsage: Expr/.neg1.
  \nSee also: neg2, Ers, PosListe, ManipulationsListe.";
neg2::usage =
 "\nDescription: (a)_n -> (-1)^n/(1-a)_(-n)).
  \nUsage: Expr/.neg2.
  \nSee also: neg1, Ers, PosListe, ManipulationsListe.";
trans::usage =
 "\nDescription: (a)_n -> (1-n-a)_n*(-1)^n.
  \nUsage: Expr/.trans.
  \nSee also: Ers, PosListe, ManipulationsListe.";
inv::usage =
 "\nDescription: GAMMA[a] -> Pi/(Sin[Pi*a]*GAMMA[1-a]),
  \nUsage: Expr/.inv.
  \nSee also: Ers, PosListe, ManipulationsListe.";
lina1::usage =
 "\nDescription: (a)_n -> a*(a+1)_(n-1),
  \n             GAMMA[a] -> (a-1)*GAMMA[a-1].
  \nUsage: Expr/.lina1.
  \nSee also: lina2, linz, Ers, PosListe, ManipulationsListe.";
lina2::usage =
 "\nDescription: (a)_n -> (a+n-1)*(a)_(n-1).
  \nUsage: Expr/.lina2.
  \nSee also: lina1, linz, Ers, PosListe, ManipulationsListe.";
linz::usage =
 "\nDescription: Rule that absorbs linear terms.
  \nUsage: Expr/.linz.
  \nSee also: lina1, lina2, Ers, PosListe, ManipulationsListe.";
zus1::usage =
 "\nDescription: (a)_n*(a+n)_m -> (a)_(n+m),
  \n             (a)_n/GAMMA[a+n] -> 1/GAMMA[a].
  \nUsage: Expr/.zus1.
  \nSee also: zus2, zus3, erw1, erw2, Ers, PosListe, ManipulationsListe.";
zus2::usage =
 "\nDescription: (a)_n/(a)_m -> (a+m)_(n-m),
  \n             GAMMA[a]*(a)_m -> GAMMA[a+m].
  \nUsage: Expr/.zus2.
  \nSee also: zus1, zus3, erw1, erw2, Ers, PosListe, ManipulationsListe.";
zus3::usage =
 "\nDescription: (a)_n/(b)_m -> (a)_(n-m),
  \n  provided a+n=b+m, and
  \n             GAMMA[a+n]/GAMMA[a] -> (a)_(n).
  \nUsage: Expr/.zus3.
  \nSee also: zus1, zus2, erw1, erw2, Ers, PosListe, ManipulationsListe.";
erw1::usage =
 "\nDescription: (a)_n -> (a)_(m+n)/(a+n)_m,
  \n             (a)_n -> GAMMA[a+n]/GAMMA[a].
  \n  The parameter m has to be entered on request. To apply the second rule,
  \n  m has to be \"Infinity\".
  \nUsage: Expr/.erw1.
  \nSee also: erw2, zus1, zus2, zus3, Ers, PosListe, ManipulationsListe.";
erw2::usage =
 "\nDescription: (a)_n -> (a-m)_(m+n)/(a-m)_m,
  \n             GAMMA[a] -> GAMMA[a-m]*(a-m)_m.
  \n  The parameter m has to be entered on request. To apply the second rule,
  \n  m has to be \"Infinity\".
  \nUsage: Expr/.erw2.
  \nSee also: erw1, zus1, zus2, zus3, Ers, PosListe, ManipulationsListe.";
zerl::usage =
 "\nDescription: (a)_n -> (a)_m*(a+m)_(n-m),
  \n             GAMMA[a] -> GAMMA[a+m]/(a)_m.
  \n  The parameter m has to be entered on request.
  \nUsage: Expr/.zerl.
  \nSee also: Ers, PosListe, ManipulationsListe.";
baszerl::usage =
 "\nDescription: (a)_n -> m^n*Product[((a+k)/m)_(n/m),{k,0,m-1}],
  \n             GAMMA[a] -> m^(a-1/2)*(2*Pi)^((1-m)/2)*
                             Product[GAMMA[(a+k)/m],{k,0,m-1}].
  \n  The parameter m has to be entered on request.
  \nUsage: Expr/.baszerl.
  \nSee also: baszerl2, baszus, baszus2, Ers, PosListe, ManipulationsListe.";
baszus::usage =
 "\nDescription: (a)_n -> m^(-m*n)*(a*m)_(m*n)/
  \n                                 Product[(a+k/m)_n,{k,1,m-1}],
  \n             GAMMA[a] -> m^(1/2-a*m)*(2*Pi)^((m-1)/2)*GAMMA[a*m]/
  \n                                 Product[GAMMA[a+k/m],{k,1,m-1}].
  \n  The parameter m has to be entered on request.
  \n  This operation is basically the inverse of baszerl.
  \nUsage: Expr/.baszus.
  \nSee also: Ers, PosListe, ManipulationsListe.";
Ers::usage =
 "\nDescription: Function for controlled application of rules and functions.
  \nUsage: Ers[Expr,Rules,PosList].
  \n  \"Rules\" can be a rule, a list of rules, or a function. PosList must 
  \n  be a list of positions in Expr to which \"Rules\" should be applied. 
  \n  For instance, if PosList={{1,2},{4}}, then \"Rules\" is applied to
  \n  Expr[[1,2]] and Expr[[4]] in Expr. If PosList={2,3}, then \"Rules\" is
  \n  applied to Expr[[2]] and Expr[[3]] in Expr. The positions of 
  \n  subexpressions can be found by the function \"PosListe\".
  \nSee also: PosListe, ManipulationsListe, Subst.";
PosListe::usage =
 "\nDescription: Function that provides a list of subexpressions of Expr
  \n  together with the respective positions in Expr. This helps to use 
  \n  controlled application of rules or functions by means of \"Ers\".
  \nUsage: PosListe[Expr].
  \nSee also: Ers, Subst.";
SimplifyP::usage =
 "\nDescription: Rule that simplifies arguments in p, GAMMA, F, H, V, SUM, 
  \n  and expands exponents in powers.
  \nUsage: Expr/.SimplifyP.
  \nSee also: Expandq, MinusOne, SUMExpand, PSort."
SUMExpand::usage =
 "\nDescription: Rule that expands SUMs.
  \nUsage: Expr/.SUMExpand.
  \nSee also: SUM, SimplifyP, Expandq, MinusOne, PSort."
PSort::usage =
 "\nDescription: Rule that orders the parameters of hypergeometric series 
  \n  F[List1,List2,z], H[...], V[...], of \"multiple\" Pochhammer symbols 
  \n  p[List1,List2,n], and of \"multiple\" Gamma functions GAMMA[List1,List2] 
  \n  in a standard order. This function should be used for a quick test of 
  \n  the validity of an equation.
  \nUsage: Expr/.PSort.
  \nSee also: SimplifyP, SUMExpand, FEinf, FOrdne, FPerm, FTausche, F, H, V, p, 
  \n  GAMMA."
FEinf::usage =
 "\nDescription: Rule that inactivates automatic cancelling in F[] and then
  \n  adds a parameter which has to be entered on request to the upper and
  \n  lower parameters of F[].
  \nUsage: Expr/.FEinf.
  \nSee also: FCancel, FOrdne, FPerm, FTausche, PSort, SUMRegeln, SUMUmkehr, 
  \n  Ers, PosListe."
HEinf::usage =
 "\nDescription: Rule that inactivates automatic cancelling in H[] and then
  \n  adds a parameter which has to be entered on request to the upper and
  \n  lower parameters of H[].
  \nUsage: Expr/.HEinf.
  \nSee also: FCancel, HOrdne, HPerm, PSort, SUMRegeln, SUMUmkehr, Ers, PosListe."
FOrdne::usage =
 "\nDescription: Rule that tries to order the parameters of a 
  \n  hypergeometric series in \"well-poised\" order. If there is an
  \n  upper parameter of the form (-n_NonnegativeInteger), then it
  \n  is put at the very last place in the upper list. If the parameters
  \n  could be paired such that the sum of each pair equals A, however A is
  \n  missing in the upper parameters, then you have to add A to the upper
  \n  and lower parameters by \"FEinf\" before applying \"FOrdne\".
  \nUsage: Expr/.FOrdne.
  \nSee also: FEinf, FPerm, FTausche, F, V, PSort, Ers, PosListe."
HOrdne::usage=
 "\nDescription: Rule that tries to order the parameters of a bilateral
  \n  hypergeometric series in \"well-poised\" order. If there is an
  \n  upper parameter of the form (-n_NonnegativeInteger), then it
  \n  is put at the very last place in the upper list. If the parameters
  \n  could be paired such that the sum of each pair equals A, however A is
  \n  missing in the upper parameters, then you have to add A to the upper
  \n  and lower parameters by \"HEinf\" before applying \"HOrdne\".
  \nUsage: Expr/.HOrdne.
  \nSee also: HEinf, HPerm, H, PSort, Ers, PosListe."
HShift::usage=
 "\nDescription: Rule that shifts the summation index in a bilateral
  \n  hypergeometric series. The amount of shift has to be entered on request.
  \nUsage: Expr/.HShift.
  \nSee also: HEinf, HPerm, H, PSort, Ers, PosListe."
FPerm::usage =
 "\nDescription: Rule for permuting parameters in hypergeometric series.
  \nUsage: Expr/.FPerm[<Permutation>,x].
  \n  x can be u,l,b. u causes a permutation of upper parameters, l causes a 
  \n  permutation of lower parameters, b causes a simultaneous permutation 
  \n  of respective upper and lower parameters. \"Permutation\" must be a 
  \n  sequence of positive numbers forming a permutation. The effect is that
  \n  the new parameter at position i is the old parameter from position
  \n  Permutation[i].
  \nSee also: FOrdne, F, V, PSort, Ers, PosListe, HPerm."
HPerm::usage =
 "\nDescription: Rule for permuting parameters in bilateral hypergeometric 
  \n  series.
  \nUsage: Expr/.HPerm[<Permutation>,x].
  \n  x can be u,l,b. u causes a permutation of upper parameters, l causes a 
  \n  permutation of lower parameters, b causes a simultaneous permutation 
  \n  of respective upper and lower parameters. \"Permutation\" must be a 
  \n  sequence of positive numbers forming a permutation. The effect is that
  \n  the new parameter at position i is the old parameter from position
  \n  Permutation[i].
  \nSee also: HOrdne, H, PSort, Ers, PosListe, FPerm."
FTausche::usage =
 "\nDescription: Rule for reordering parameters in hypergeometric series.
  \nUsage: Expr/.FTausche[n1,n2,x].
  \n  x can be u,l,b. u causes a reordering of upper parameters, l causes a 
  \n  reordering of lower parameters, b causes a simultaneous reordering 
  \n  of respective upper and lower parameters. n1 is the position of the
  \n  parameter to be reordered, n2 is the new position.
  \nSee also: FPerm, FOrdne, F, V, PSort, Ers, PosListe."
SUMErw1::usage =
 "\nDescription: Rule that extends a SUM[] at the top. 
  \n             SUM[Expr,{k,l,n}] -> SUM[Expr,{k,l,n+m}]-SUM[Expr,{k,n+1,n+m}].
  \n  The parameter m has to be entered on request.
  \nUsage: Expr/.SUMErw1.
  \nSee also: SUM, SUMErw2, SUMZerl, SUMShift, SUMTausche, SUMRegeln, 
    \n  SUMUmkehr, Ers, PosListe."
SUMErw2::usage =
 "\nDescription: Rule that extends a SUM[] at the bottom. 
  \n             SUM[Expr,{k,l,n}] -> SUM[Expr,{k,l-m,n}]-SUM[Expr,{k,l-m,l-1}].
  \n  The parameter m has to be entered on request.
  \nUsage: Expr/.SUMErw2.
  \nSee also: SUM, SUMErw1, SUMZerl, SUMShift, SUMTausche, SUMRegeln, 
    \n  SUMUmkehr, Ers, PosListe."
SUMTausche::usage =
 "\nDescription: Rule that exchanges summations. 
  \n             SUM[SUM[Expr,{k1,l1,n1}],{k2,l2,n2}] 
  \n                            -> SUM[SUM[Expr,{k2,l2,n2}],{k1,l1,n1}].
  \nUsage: Expr/.SUMTausche.
  \nSee also: SUM, SUMErw1, SUMErw2, SUMSammle, SUMShift, SUMZerl, SUMRegeln, 
  \n  SUMUmkehr, Ers, PosListe."
SUMZerl::usage =
 "\nDescription: Rule that splits a SUM[] into two parts. 
  \n             SUM[Expr,{k,l,n}] -> SUM[Expr,{k,l,l+m-1}]+SUM[Expr,{k,l+m,n}].
  \n  The parameter m has to be entered on request.
  \nUsage: Expr/.SUMZerl.
  \nSee also: SUM, SUMErw1, SUMErw2, SUMShift, SUMTausche, SUMRegeln, 
    \n  SUMUmkehr, Ers, PosListe."
SUMShift::usage =
 "\nDescription: Rule that shifts the index in a SUM[].
  \n             SUM[Expr[k],{k,l,n}] -> SUM[Expr[k+m],{k,l-m,n-m}].
  \n  The parameter m has to be entered on request.
  \nUsage: Expr/.SUMShift.
  \nSee also: SUM, SUMErw1, SUMErw2, SUMTausche, SUMZerl, SUMRegeln, 
    \n  SUMUmkehr, Ers, PosListe."
SUMUmkehr::usage =
 "\nDescription: Rule that reverses the order of summation. \"SUMUmkehr\"
  \n  applies to SUM[] as well as F[].
  \nUsage: Expr/.SUMUmkehr.
  \nSee also: SUM, SUMErw1, SUMErw2, SUMZerl, SUMShift, SUMTausche, SUMRegeln, 
    \n  Ers, PosListe.";
TeXMat::usage =
 "\nDescription: Function that writes (to be precise: appends) an expression 
  \n  Expr in InputForm to a file \"[name].m\" and the TeXForm of Expr to the 
  \n  file \"[name].tex\". The expressions are numbered automatically. The 
  \n  number can be reset by \"SchreibeZahl\". The string \"comment\" is 
  \n  optional. It allows to place the comment \"comment\" above the expression 
  \n  in each of the two files.
  \nUsage: TeXMat[Expr,name,comment].
  \nSee also: AmSTeX, AmSLaTeX, LaTeX, TeX, TeXFV, SchreibeZahl.";
SchreibeZahl::usage =
 "\nDescription: Variable that counts the number of expressions already written
  \n  by using \"TeXMat\". Can be reset by defining a new value.
  \nUsage: SchreibeZahl=n_Integer.
  \nSee also: TeXMat.";
Drucke::usage =
 "\nDescription: Function that directly sends an expression Expr in the 
  \n  Form PrintedForm to the printer. PrintedForm is an optional parameter
  \n  which can be any of the format types (\"InputForm\", \"OutputForm\", 
  \n  \"TeXForm\", ...). The default is \"OutputForm\".
  \nUsage: Drucke[Expr,PrintedForm].
  \nSee also: TeXMat, AmSTeX, AmSLaTeX, LaTeX, TeX, TeXFV.";
Limes::usage =
 "\nDescription: Function for doing formal limits of hypergeometric 
  \n  expressions. If required for taking the limit, you will be asked whether
  \n  or not the absolute value of some variable or expression is smaller than
  \n  1. Your decision is stored for the rest of your MATHEMATICA session. If
  \n  you want to change your decision later, use \"AbsGreater\", \"AbsSmaller\",
  \n  or \"AbsUndetermined\", respectively.
  \nWarning: This function uses primitive algebraic techniques to do the 
  \n  limit. There is no check if taking the limit is actually allowed. So it
  \n  is left to you to check the validity of a result of \"Limes\".
  \nUsage: Limes[Expr, x->x0].
  \nSee also: AbsGreater, AbsSmaller, AbsUndetermined, MinusOne.";
AbsGreater::usage =
 "\nDescription: Function for declaring the absolute value of a variable or 
  \n  expression to be greater than 1. This declaration is used by \"Limes\".
  \nUsage: AbsGreater[Expr].
  \nSee also: AbsSmaller, AbsUndetermined, Limes.";
AbsSmaller::usage =
 "\nDescription: Function for declaring the absolute value of a variable or 
  \n  expression to be smaller than 1. This declaration is used by \"Limes\".
  \nUsage: AbsSmaller[Expr].
  \nSee also: AbsGreater, AbsUndetermined, Limes.";
AbsUndetermined::usage =
 "\nDescription: Function for declaring the absolute value of a variable or 
  \n  expression to be neither smaller nor greater than 1. This declaration 
  \n  is used by \"Limes\".
  \nUsage: AbsUndetermined[Expr].
  \nSee also: AbsGreater, AbsSmaller, Limes.";
MinusOne::usage =
 "\nDescription: Rule for getting rid of expressions of the form (-1)^N where
  \n  N is an even or odd integer.
  \nUsage: Expr/.MinusOne.
  \nSee also: SimplifyP, Expandq, SUMExpand."


Begin["`Private`"]

(*Hilfsdefinition f�r den Durchschnitt zur Umgehung des Bugs in Version 1.2*)
intersection[L1_List,L2_List]:=If[$VersionNumber<2.,
     Select[Intersection[L1,L2],(MemberQ[L1,#]&&MemberQ[L2,#])&],
     Intersection[L1,L2]];
(*Belegen von Module durch Block f�r Versionen 1.?*)
If[$VersionNumber<2.,Module=Block];

Unprotect[Power];
Power[a_*b_,m_]:=a^m*b^m/;!(NumberQ[N[a]]&&NumberQ[N[b]]);
Power[Power[q_,n_],m_]:=Power[q,Expand[n*m]];
Protect[Power];


(*Definieren der OutputForm und TeXForm von p, F und GAMMA*)

  (*Der TeX-Switch ist auf Plain-TeX, LaTeX eingestellt, falls ifTeX=TeXtrue,
    auf AmS-TeX, falls ifTeX=AmSTeXtrue, auf AmS-LaTeX, falls ifTeX=AmSLaTeXtrue.*)
ifTeX=AmSTeXtrue;
TeX:=(ifTeX=TeXtrue;);
LaTeX:=(ifTeX=TeXtrue;);
AmSTeX:=(ifTeX=AmSTeXtrue;);
AmSLaTeX:=(ifTeX=AmSLaTeXtrue;);


Argument[List[x___]]:=x;
POS[Liste_List,X_]:=Select[Position[Liste,X],(Length[#]<=1)&][[1,1]];
Beistrich[B_]:=Sequence[B,", "];
pOutput[x__]:=Apply[SequenceForm,Drop[Map[Beistrich,{x}],-1]];
pOutput[]:="-";
pTeXForm[]:="-";
pTeXForm[x__]:=(X=Map[ToString[TeXForm[#]]&,{x}];
                   X=Argument[X];
                   ToString[StringForm[StringJoin[Argument[Table["``, ",{Length[{x}]-1}]],"``"],X]]
                   );
TeXRules:=
(Format[p[{a__},{},n_]]:=
        SequenceForm["(",pOutput[a],")",Subscript[n]];
Format[p[{},{b__},n_]]:=
        1/SequenceForm["(",pOutput[b],")",Subscript[n]];
Format[p[{a__},{b__},n_]]:=
        SequenceForm["(",pOutput[a],")",Subscript[n]]/
        SequenceForm["(",pOutput[b],")",Subscript[n]];
Format[p[{a__},{},n_],TeXForm]:=
        StringJoin["({ \\textstyle ",pTeXForm[a],"}) _{",ToString[TeXForm[n]],"} "];
Format[p[{},{b__},n_],TeXForm]:=Switch[ifTeX,
        TeXtrue,StringJoin["{1 \\over  {({ \\textstyle ",pTeXForm[b],"}) _{",ToString[TeXForm[n]],"}}} "],
        _,StringJoin["\\frac 1 {({ \\textstyle ",pTeXForm[b],"}) _{",ToString[TeXForm[n]],"}} "]
        ];
Format[p[{a__},{b__},n_],TeXForm]:=Switch[ifTeX,
        TeXtrue,StringJoin["{{({ \\textstyle ",pTeXForm[a],"}) _{",ToString[TeXForm[n]],"}} \\over  ",
                   "{({ \\textstyle ",pTeXForm[b],"}) _{",ToString[TeXForm[n]],"}}} "],
        _,StringJoin["\\frac {({ \\textstyle ",pTeXForm[a],"}) _{",ToString[TeXForm[n]],"}} ",
                   "{({ \\textstyle ",pTeXForm[b],"}) _{",ToString[TeXForm[n]],"}} "]
        ];
Format[p[{a__},n_]]:=SequenceForm["(",pOutput[a],")",Subscript[n]];
Format[p[{a__},n_],TeXForm]:=
        StringJoin["({ \\textstyle ",ToString[pTeXForm[a]],"}) _{",ToString[TeXForm[n]],"} "];
Format[p[a_,n_]]:=SequenceForm["(",a,")",Subscript[n]];
Format[p[a_,n_],TeXForm]:=
        StringJoin["({ \\textstyle ",ToString[TeXForm[a]],"}) _{",ToString[TeXForm[n]],"} "];
Format[GAMMA[{a___},{b___}]]:=
   If[Global`DOSFrage,
       SequenceForm["â",
        ColumnForm[{"Ú ","³ ","³ ","³ ","À "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        ColumnForm[{" ¿"," ³"," ³"," ³"," Ù"},Center,Center]],
       SequenceForm["Ga",
        ColumnForm[{"[ ","| ","| ","| ","[ "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        ColumnForm[{" ]"," |"," |"," |"," ]"},Center,Center]]];
Format[GAMMA[a_]]:=If[Global`DOSFrage,
	SequenceForm["â(",a,")"],SequenceForm["Ga(",a,")"]];
Format[GAMMA[{a___},{b___}],TeXForm]:=
  Switch[ifTeX,
      TeXtrue,StringJoin["\\Gamma \\left [ \\matrix { ",
        pTeXForm[a],"\\cr ",
        pTeXForm[b],"} \\right ]"],
      AmSTeXtrue,StringJoin["\\Gamma \\left [ \\matrix ",
        pTeXForm[a],"\\\\ ",
        pTeXForm[b],"\\endmatrix \\right ]"],
      AmSLaTeXtrue,StringJoin["\\Gamma \\left [ \\begin{matrix} ",
        pTeXForm[a],"\\\\ ",
        pTeXForm[b],"\\end{matrix} \\right ]"]
        ];
Format[GAMMA[a_],TeXForm]:=
        StringJoin["\\Gamma({ \\textstyle ",ToString[TeXForm[a]],"}) "];
Format[SUM[Expr_,{i_,m_,n_}],TeXForm]:=
        StringJoin["\\sum _{",ToString[TeXForm[i]],"=",
           ToString[TeXForm[m]],"} ^{",
           ToString[TeXForm[n]],"} ",
           ToString[TeXForm[Expr]]];
Format[F[{La___},{Lb___},z_],TeXForm]:=Module[{ErgEx},
   If[Switch[ifTeXFV,1,(Length[{La}]>=2&&Length[{Lb}]>=1&&
        Length[{La}]-Length[{Lb}]===1&&
        Factor[{La}[[1]]-({La}[[2]])*2+2]===0&&
        Factor[Map[(1+{La}[[1]]-#)&,Drop[{La},1]]-{Lb}]===Table[0,{Length[{Lb}]}]),
                0,False],
     Unprotect[Power,Times];
     Power[a_*b_,m_]=.;
     If[$VersionNumber>=2.,a_^m_*b_^m_ :=(a*b)^m/;Head[m]=!=Integer];
     ErgEx=StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} V _{",
        ToString[TeXForm[Length[{Lb}]]],"} ({\\displaystyle ",ToString[TeXForm[{La}[[1]]]],"; ",
        pTeXForm[Argument[Drop[{La},2]]],"}; {\\displaystyle ",
        ToString[TeXForm[z]],"})"];
     If[$VersionNumber>=2.,a_^m_*b_^m_=.];
     Power[a_*b_,m_]:=a^m*b^m/;!(NumberQ[N[a]]&&NumberQ[N[b]]);
     Protect[Power,Times];
     ErgEx,
     Unprotect[Power,Times];
     Power[a_*b_,m_]=.;
     If[$VersionNumber>=2.,a_^m_*b_^m_ :=(a*b)^m/;Head[m]=!=Integer];
     ErgEx=Switch[ifTeX,
      TeXtrue,StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} F _{",
        ToString[TeXForm[Length[{Lb}]]],"} \\!\\left [ \\matrix { ",
        pTeXForm[La],"\\cr ",pTeXForm[Lb],"} ; {\\displaystyle ",
        ToString[TeXForm[z]],"} \\right ] "],
      AmSTeXtrue,StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} F _{",
        ToString[TeXForm[Length[{Lb}]]],"} \\!\\left [ \\matrix { ",
        pTeXForm[La],"}\\\\ { ",pTeXForm[Lb],"}\\endmatrix ; {\\displaystyle ",
        ToString[TeXForm[z]],"}\\right ] "],
      AmSLaTeXtrue,StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} F _{",
        ToString[TeXForm[Length[{Lb}]]],"} \\!\\left [ \\begin{matrix} { ",
        pTeXForm[La],"}\\\\ { ",pTeXForm[Lb],"}\\end{matrix} ; {\\displaystyle ",
        ToString[TeXForm[z]],"}\\right ] "]
        ];
     If[$VersionNumber>=2.,a_^m_*b_^m_=.];
     Power[a_*b_,m_]:=a^m*b^m/;!(NumberQ[N[a]]&&NumberQ[N[b]]);
     Protect[Power,Times];
     ErgEx
     ]];
Format[F[{a___},{b___},z_]]:=
	If[Global`DOSFrage,
       SequenceForm[Subscript[Length[{a}]],"F",Subscript[Length[{b}]],
        ColumnForm[{"Ú ","³ ","³ ","³ ","À "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        "; ",z,
        ColumnForm[{" ¿"," ³"," ³"," ³"," Ù"},Center,Center]],
        SequenceForm[Subscript[Length[{a}]],"F",Subscript[Length[{b}]],
        ColumnForm[{"[ ","| ","| ","| ","[ "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        "; ",z,
        ColumnForm[{" ]"," |"," |"," |"," ]"},Center,Center]]];
(*Definitionen f�r bilaterale Reihen*)
Format[H[{La___},{Lb___},z_],TeXForm]:=Module[{ErgEx},
     Unprotect[Power,Times];
     Power[a_*b_,m_]=.;
     If[$VersionNumber>=2.,a_^m_*b_^m_ :=(a*b)^m/;Head[m]=!=Integer];
     ErgEx=Switch[ifTeX,
      TeXtrue,StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} H _{",
        ToString[TeXForm[Length[{Lb}]]],"} \\!\\left [ \\matrix { ",
        pTeXForm[La],"\\cr ",pTeXForm[Lb],"} ; {\\displaystyle ",
        ToString[TeXForm[z]],"} \\right ] "],
      AmSTeXtrue,StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} H _{",
        ToString[TeXForm[Length[{Lb}]]],"} \\!\\left [ \\matrix { ",
        pTeXForm[La],"}\\\\ { ",pTeXForm[Lb],"}\\endmatrix ; {\\displaystyle ",
        ToString[TeXForm[z]],"}\\right ] "],
      AmSLaTeXtrue,StringJoin["{} _{",ToString[TeXForm[Length[{La}]]],"} H _{",
        ToString[TeXForm[Length[{Lb}]]],"} \\!\\left [ \\begin{matrix} { ",
        pTeXForm[La],"}\\\\ { ",pTeXForm[Lb],"}\\end{matrix} ; {\\displaystyle ",
        ToString[TeXForm[z]],"}\\right ] "]
        ];
     If[$VersionNumber>=2.,a_^m_*b_^m_=.];
     Power[a_*b_,m_]:=a^m*b^m/;!(NumberQ[N[a]]&&NumberQ[N[b]]);
     Protect[Power,Times];
     ErgEx
     ];
Format[H[{a___},{b___},z_]]:=
	If[Global`DOSFrage,
       SequenceForm[Subscript[Length[{a}]],"H",Subscript[Length[{b}]],
        ColumnForm[{"Ú ","³ ","³ ","³ ","À "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        "; ",z,
        ColumnForm[{" ¿"," ³"," ³"," ³"," Ù"},Center,Center]],
        SequenceForm[Subscript[Length[{a}]],"H",Subscript[Length[{b}]],
        ColumnForm[{"[ ","| ","| ","| ","[ "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        "; ",z,
        ColumnForm[{" ]"," |"," |"," |"," ]"},Center,Center]]];
        );
TeXRules;

Format::toobig="Expression too big for output.\nEnter \"FFormat\" and retry.";
ifFFormat=1;
FFormat:=(Switch[ifFFormat,
      0,Unprotect[F,H,p,GAMMA];
        Attributes[Format]={Protected,HoldAll};
        TeXRules;
        Attributes[Format]={Protected};
        Protect[F,H,p,GAMMA],
      1,Unprotect[F,H,p,GAMMA];
        Attributes[Format]={Protected,HoldAll};
        Format[F[{a___},{b___},z_]]=.;
        Format[H[{a___},{b___},z_]]=.;
        Format[GAMMA[a_]]=.;
        Format[GAMMA[{a___},{b___}]]=.;
        Format[p[a_,n_]]=.;
        Format[p[{a__},n_]]=.;
        Format[p[{a__},{b__},n_]]=.;
        Format[p[{},{b__},n_]]=.;
        Format[p[{a__},{},n_]]=.;
        Attributes[Format]={Protected};
        Protect[F,H,p,GAMMA];
        ];ifFFormat=1-ifFFormat;);


(*Rechenregeln f�r p, F, V und GAMMA*)

ListTest[Liste_]:=MemberQ[{Head[Liste]},List];
V[a_,x_List,z_]:=F[Join[{a,1+a/2},x],
                       Join[{a/2},Map[Simplify[1+a-#]&,x]],z];
Rules:=
(Unprotect[Times,Power];
p[x_,0]=1;
p[0,n_]:=0/;n>0;
p[x_List,y_List,0]=1;
p[x_List,y_List,n_]:=Module[{POSX,POSY,Intsec,X=x,Y=y},
   While[(Intsec=intersection[X,Y])!={},
         Intsec=Intsec[[1]];
         POSX=POS[X,Intsec];
         POSY=POS[Y,Intsec];
         X=Drop[X,{POSX,POSX}];
         Y=Drop[Y,{POSY,POSY}];
        ];
   p[X,Y,n]
   ] /; intersection[x,y]!={};
p/:
p[x_List,y_List,n_]*p[z_List,u_List,n_]:=
         p[Join[x,z],Join[y,u],n];
p/:
p[x_List,y_List,n_]^(-1):=p[y,x,n];
p/:
p[x_List,y_List,n_]*p[z_,n_]^(exp_:1):=
   p[Join[x,Table[z,{exp}]],y,n]/;exp>0;
p/:
p[x_List,y_List,n_]*p[z_,n_]^(exp_:1):=
   p[x,Join[y,Table[z,{-exp}]],n]/;exp<0;
p[{},{},n_]:=1;

GAMMA[x_List,y_List]:=Module[{POSX,POSY,Intsec,X=x,Y=y},
   While[(Intsec=intersection[X,Y])!={},
         Intsec=Intsec[[1]];
         POSX=POS[X,Intsec];
         POSY=POS[Y,Intsec];
         X=Drop[X,{POSX,POSX}];
         Y=Drop[Y,{POSY,POSY}];
        ];
   GAMMA[X,Y]
   ] /; intersection[x,y]!={};
GAMMA/:
GAMMA[x_List,y_List]*GAMMA[z_List,u_List]:=
         GAMMA[Join[x,z],Join[y,u]];
GAMMA/:
GAMMA[x_List,y_List]^(-1):=GAMMA[y,x];

GAMMA/:
GAMMA[x_List,y_List]*GAMMA[z_]^(exp_:1):=
   GAMMA[Join[x,Table[z,{exp}]],y]/;exp>0;

GAMMA/:
GAMMA[x_List,y_List]*GAMMA[z_]^(exp_:1):=
   GAMMA[x,Join[y,Table[z,{-exp}]]]/;exp<0;
GAMMA[{},{}]:=1;

F[List1_List,List2_List,0]=1;
F[List1_List,List2_List,z_]:=1/;MemberQ[List1,0]&&
  !(Apply[Or,Map[(#<=0)&&(IntegerQ[#])&,List2]]);
FRun=False;
FOrdneRun=False;
(*F[x_,y_,v_]:=Module[{POSX,POSY,Intsec,X=x,Y=y,POSL},
   While[(Intsec=intersection[X,Y])!={},
         Intsec=Intsec[[1]];
         POSL=Select[Position[X,Intsec],(Length[#]<=1)&];
         POSX=POSL[[1,1]];
         POSY=POS[Y,Intsec];
         If[!FRun,
         If[Length[POSL]<=1&&IntegerTest[Intsec],
            Print[""];
            Print["Warning: The expression"];
            Print[""];
            FCancel;
            Print[F[x,y,v]];
            FCancel;
            Print[""];
            Print["was obtained, which contains ",Intsec,", a"];
            Print["nonpositive integer, as top and bottom argument. The"];
            Print["cancellation performed below might be incorrect."];
            Print[""];
           ]
           ];
         X=Drop[X,{POSX,POSX}];
         Y=Drop[Y,{POSY,POSY}];
        ];
   F[X,Y,v](*/.FOrdne*)
   ] /; Switch[ifFCancel,1,intersection[x,y]!={},0,False];*)
F[x_,y_,v_]:=Module[{POSX,POSY,Intsec,X=x,Y=y,POSL},
   While[(Intsec=intersection[X,Y])!={},
         Intsec=Intsec[[1]];
         POSL=Select[Position[X,Intsec],(Length[#]<=1)&];
         POSX=POSL[[1,1]];
         POSY=POS[Y,Intsec];
         If[!FRun,
         If[Length[POSL]<=1&&IntegerTest[Intsec],
            Print[""];
            Print["Warning: The expression"];
            Print[""];
            FCancel;
            Print[F[x,y,v]];
            FCancel;
            Print[""];
            Print["was obtained, which contains ",Intsec,", a"];
            Print["nonpositive integer, as top and bottom argument. The"];
            Print["cancellation performed below might be incorrect."];
            Print[""];
           ]
           ];
         X=Drop[X,{POSX,POSX}];
         Y=Drop[Y,{POSY,POSY}];
        ];
   If[FOrdneRun,
      F[X,Y,v],
      F[X,Y,v]/.FOrdne
     ]
   ] /; Switch[ifFCancel,1,intersection[x,y]!={},0,False];
H[x_,y_,v_]:=Module[{POSX,POSY,Intsec,X=x,Y=y,POSL},
   While[(Intsec=intersection[X,Y])!={},
         Intsec=Intsec[[1]];
         POSL=Select[Position[X,Intsec],(Length[#]<=1)&];
         POSX=POSL[[1,1]];
         POSY=POS[Y,Intsec];
         If[!FRun,
         If[Length[POSL]<=1&&IntegerTest[Intsec],
            Print[""];
            Print["Warning: The expression"];
            Print[""];
            FCancel;
            Print[H[x,y,v]];
            FCancel;
            Print[""];
            Print["was obtained, which contains ",Intsec,", a"];
            Print["nonpositive integer, as top and bottom argument. The"];
            Print["cancellation performed below might be incorrect."];
            Print[""];
           ]
           ];
         X=Drop[X,{POSX,POSX}];
         Y=Drop[Y,{POSY,POSY}];
        ];
   H[X,Y,v](*/.HOrdne*)
   ] /; Switch[ifFCancel,1,intersection[x,y]!={},0,False];
Protect[Times,Power];);
Rules;

(*Definition der Binomialkoeffizienten, Multinomialkoeffizienten und
  Faktoriellen*)

Unprotect[Binomial]
Format[Binomial[n_,k_],TeXForm]:=
   If[Hyp`m`Private`ifTeX===Hyp`m`Private`AmSLaTeXtrue,
        StringJoin[" \\binom {",ToString[TeXForm[n]],"} {",
                       ToString[TeXForm[k]],"} "],
        StringJoin[" {",ToString[TeXForm[n]]," \\choose ",
                       ToString[TeXForm[k]],"} "]];
Protect[Binomial]

Binomialp[n_,k_]:=p[n-k+1,k]/p[1,k];
Factorialp[n_]:=p[1,n];

Unprotect[Multinomial];
Format[Multinomial[n__],TeXForm]:=
  Switch[ifTeX,
      TeXtrue,StringJoin["\\left ( \\matrix { ",
        ToString[TeXForm[Apply[Plus,{n}]]]," \\cr ",pTeXForm[n],
        " } \\right )"],
      AmSTeXtrue,StringJoin["\\left ( \\matrix ",
        ToString[TeXForm[Apply[Plus,{n}]]]," \\\\ ",pTeXForm[n],
        " \\endmatrix \\right )"],
      AmSLaTeXtrue,StringJoin["\\left ( \\begin{matrix} ",
        ToString[TeXForm[Apply[Plus,{n}]]]," \\\\ ",pTeXForm[n],
        " \\end{matrix} \\right )"]
        ];
Format[Multinomial[n__]]:=
 SequenceForm[ColumnForm[{"( ","( ","( ","( ","( "},Center,Center],
              ColumnForm[{Apply[Plus,{n}]," ",pOutput[n]},Center,Center],
              ColumnForm[{" )"," )"," )"," )"," )"},Center,Center]];
Multinomial[n__]:=Multinomial[Argument[MComplement[{n},{0}]]]/;MemberQ[{n},0];
Multinomial[a_]:=1;
Multinomial[a_,b_]:=Binomial[a+b,a];
Multinomialp[n__]:=p[1,Apply[Plus,{n}]]/Product[p[1,{n}[[i]]],{i,1,Length[{n}]}];
Protect[Multinomial];

Unprotect[Product];
Product/:
  Product[t_, {x_, a_, n_, 1}]/Product[t_, {x_, a_, n1_, 1}] :=
    (t /. x-> n)/; Factor[n1 - (n-1)]===0;
Unprotect[Product];
Product/:
  Product[t_, {x_, a_, n_, 1}]/Product[t_, {x_, a_, n1_, 1}] :=
    (t /. x-> n)/; n1 === n-1;
Product/:
  Product[t_, {x_, a_, n1_, 1}]/Product[t_, {x_, a_, n_, 1}] :=
    1/(t /. x-> n)/; Factor[n1 - (n-1)]===0;
Protect[Product];


(*Definition von paufl, pzerl, pzus, Gzerl und Gzus*)

paufl:={p[{List1___},{List2___},k_]^(exp_:1):>
         Product[Product[{List1}[[jj]]+ii,{ii,0,k-1}],{jj,1,Length[{List1}]}]^exp/
         Product[Product[{List2}[[jj]]+ii,{ii,0,k-1}],{jj,1,Length[{List2}]}]^exp/;
            IntegerQ[Factor[k]]&&k>=0,
        p[{List1___},{List2___},k_]^(exp_:1):>
         Product[Product[{List2}[[jj]]+ii,{ii,k,-1}],{jj,1,Length[{List2}]}]^exp/
         Product[Product[{List1}[[jj]]+ii,{ii,k,-1}],{jj,1,Length[{List1}]}]^exp/;
            IntegerQ[Factor[k]]&&k<0,
        p[x_,k_]^(exp_:1):>Product[x+i,{i,0,k-1}]^exp/;IntegerQ[Factor[k]]&&k>=0,
        p[x_,k_]^(exp_:1):>1/Product[x+i,{i,k,-1}]^exp/;IntegerQ[Factor[k]]&&k<0
        };

pzerl:=(p[{List1___},{List2___},n_]:>
             Module[{jj},Product[p[{List1}[[jj]],n],{jj,1,Length[{List1}]}]/
                     Product[p[{List2}[[jj]],n],{jj,1,Length[{List2}]}]]);
pzus[n_]:=(Expr_ :>pzusH[Expr,n]);
pzusH[Expr_,n_]:=(Expr*pH[{},{},n]/.pH->p);
pH/:
pH[x_List,y_List,n_]*p[z_,n_]^(exp_:1):=pH[Join[x,Table[z,{exp}]],y,n]/;exp>0;
pH/:
pH[x_List,y_List,n_]*p[z_,n_]^(exp_:1):=pH[x,Join[y,Table[z,{-exp}]],n]/;exp<0;
Gzerl:=(GAMMA[{List1___},{List2___}]:>
             Module[{jj},Product[GAMMA[{List1}[[jj]]],{jj,1,Length[{List1}]}]/
                     Product[GAMMA[{List2}[[jj]]],{jj,1,Length[{List2}]}]]);
Gzus:=(Expr_ :>GzusH[Expr]);
GzusH[Expr_]:=(Expr*GAMMAH[{},{}]/.GAMMAH->GAMMA);
GAMMAH/:
GAMMAH[x_List,y_List]*GAMMA[z_]^(exp_:1):=GAMMAH[Join[x,Table[z,{exp}]],y]/;exp>0;
GAMMAH/:
GAMMAH[x_List,y_List]*GAMMA[z_]^(exp_:1):=GAMMAH[x,Join[y,Table[z,{-exp}]]]/;exp<0;
Expandq:=(bas_^exp_ :>bas^Expand[exp]);


(*Ersetzungsregeln zum Rechnen mit p und GAMMA*)

GrenzeO[x_]:=If[IntegerTest[x],{-x},{},{}];
GrenzeU[x_]:=If[IntegerTest[-x],{-x},{},{}];
P:=(If[ValueQ[p[PPP,1]],
        Unprotect[p,F,H,SUM,GAMMA];Clear[p,F,H,GAMMA];Rules;TeXRules;
                If[ifFFormat===0,ifFFormat=1;FFormat];
                Protect[p,F,H,GAMMA];,
        Unprotect[p,F,H,SUM,GAMMA];
        p[{List1___},{List2___},k_]:=
            Module[{jj},Product[p[{List1}[[jj]],k],{jj,1,Length[{List1}]}]/
                     Product[p[{List2}[[jj]],k],{jj,1,Length[{List2}]}]];
        p[x_,k_]:=Product[x+i,{i,0,k-1}]/;IntegerQ[Factor[k]]&&k>=0;
        p[x_,k_]:=1/Product[x+i,{i,k,-1}]/;IntegerQ[Factor[k]]&&k<0;
        p[x_,k_]:=Gamma[x+k]/Gamma[x]/;NumberQ[Factor[k]]&&NumberQ[Factor[x]];
        GAMMA[x_]:=Gamma[x]/;NumberQ[x];
        F[List1_,List2_,z_]:=Module[{SUMGrenze,SUMVar,SUMVars},
          SUMGrenze=Min[Flatten[Map[GrenzeO,List1]]];
          If[!IntegerQ[SUMGrenze],
            SUMVar=Input[StringJoin["A hypergeometric series is converted into a sum.\n",
                       "Enter a variable for the summation index: "]];
            ];
          SUMVars={SUMVar,0,SUMGrenze};
          SUM[(p[List1,Join[List2,{1}],SUMVar]/.pzerl)*z^SUMVar,
                Release[SUMVars]]/.SUM->Sum/.Sum->SUM];
        H[List1_,List2_,z_]:=Module[{SUMGrenzeO,SUMGrenzeU,SUMVar,SUMVars},
          SUMGrenzeO=Min[Flatten[Map[GrenzeO,List1]]];
          SUMGrenzeU=Max[Flatten[Map[GrenzeU,List2]]];
          If[!IntegerQ[SUMGrenzeO]||!IntegerQ[SUMGrenzeU],
            SUMVar=Input[StringJoin["A bilateral hypergeometric series is converted into a sum.\n",
                       "Enter a variable for the summation index: "]];
            ];
          SUMVars={SUMVar,SUMGrenzeU+1,SUMGrenzeO};
          SUM[(p[List1,List2,SUMVar]/.pzerl)*z^SUMVar,
                Release[SUMVars]]/.SUM->Sum/.Sum->SUM];
        Protect[p,F,H,GAMMA];
       ]);


ifTeXFV=1;
TeXFV:=(ifTeXFV=1-ifTeXFV;);
ifFCancel=1;
FCancel:=(ifFCancel=1-ifFCancel;);
hypAttributes:=(Print[""];
        If[ValueQ[p[PPP,1]],
                Print["Automatic evaluation of p, F and H is active."],
                Print["Automatic evaluation of p, F and H is inactive."]];
        Switch[ifFCancel,0,Print["Automatic cancelling in F and H is inactive."],
                1,Print["Automatic cancelling in F and H is active."]];
        Switch[ifTeX,TeXtrue,Print["The output of TeXForm can be used with Plain-TeX and LaTeX."],
                AmSTeXtrue,Print["The output of TeXForm can be used with AmS-TeX."],
                AmSLaTeXtrue,Print["The output of TeXForm can be used with AmS-LaTeX."]];
        Switch[ifTeXFV,0,Print["TeXForm uses F[] for very well-poised hypergeometric series."],
                1,Print["TeXForm uses V[] for very well-poised hypergeometric series."]];
        );

        
neg1:={p[a_,n_]^(exp_:1):>p[a+n,-n]^(-exp)};
neg2:={p[a_,n_]^(exp_:1):>(-1)^(-n*exp)*p[1-a,-n]^(-exp)};
trans:={p[a_,n_]^(exp_:1):>p[1-n-a,n]^exp*(-1)^(n*exp)};
inv:={GAMMA[a_]^(exp_:1):>Pi^exp/(Sin[Pi*a]*GAMMA[1-a])^exp};
lina1:={p[a_,n_]^(exp_:1):>(a)^exp*p[a+1,n-1]^exp,
       GAMMA[a_]^(exp_:1):>(a-1)^exp*GAMMA[a-1]^exp};
lina2:={p[a_,n_]^(exp_:1):>(a+n-1)^exp*p[a,n-1]^exp};
linz:={p[a_,n_]^(exp_:1)*b_^(nexp_:1):>
          p[a-1,n+1]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*
          Factor[b/(a-1)]^EX*b^(nexp-EX)/;
                  nexp*exp>0&&Factor[a-1]=!=0&&NumberQ[Factor[b/(a-1)]],
        GAMMA[a_]^(exp_:1)*b_^(nexp_:1):>
          GAMMA[a+1]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*GAMMA[a]^(exp-EX)*
          Factor[b/a]^EX*b^(nexp-EX)/;
                  nexp*exp>0&&NumberQ[Factor[b/a]],
        p[a_,n_]^(exp_:1)*b_^(nexp_:1):>
          p[a,n+1]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*
          Factor[b/(a+n)]^EX*b^(nexp-EX)/;
                  nexp*exp>0&&Factor[a+n]=!=0&&NumberQ[Factor[b/(a+n)]],
        p[a_,n_]^(exp_:1)*(b_)^(nexp_:1):>
          p[a+1,n-1]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*
          Factor[b/a]^-EX*b^(nexp+EX)/;
                  nexp*exp<0&&Factor[a]=!=1&&NumberQ[Factor[b/a]],
        GAMMA[a_]^(exp_:1)*(b_)^(nexp_:1):>
          GAMMA[a-1]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*GAMMA[a]^(exp-EX)*
          Factor[b/(a-1)]^-EX*b^(nexp+EX)/;
                  nexp*exp<0&&Factor[a-1]=!=0&&NumberQ[Factor[b/(a-1)]],
        p[a_,n_]^(exp_:1)*(b_)^(nexp_:1):>
          p[a,n-1]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*
          Factor[b/(a+n-1)]^-EX*b^(nexp+EX)/;
                  nexp*exp<0&&Factor[a+n-1]=!=0&&NumberQ[Factor[b/(a+n-1)]]}
zus1:={p[a_,n_]^(exp_:1)*p[b_,m_]^(nexp_:1):>
        p[a,m+n]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*p[b,m]^(nexp-EX)/;
            Factor[(b)-(a+n)]===0&&exp*nexp>0,
       p[a_,n_]^(exp_:1)*GAMMA[b_]^(nexp_:1):>
        GAMMA[a]^(EX=Sign[nexp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp+EX)*GAMMA[b]^(nexp-EX)/;
            Factor[(b)-(a+n)]===0&&exp*nexp<0};
zus2:={p[a_,n_]^(exp_:1)*p[b_,m_]^(nexp_:1):>
        p[b+n,m-n]^(EX=Sign[nexp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp+EX)*p[b,m]^(nexp-EX)/;
            Factor[(b)-(a)]===0&&exp*nexp<0,
       p[a_,n_]^(exp_:1)*GAMMA[b_]^(nexp_:1):>
        GAMMA[b+n]^(EX=Sign[nexp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*GAMMA[b]^(nexp-EX)/;
            Factor[(b)-(a)]===0&&exp*nexp>0};
zus3:={p[a_,n_]^(exp_:1)*p[b_,m_]^(nexp_:1):>
        p[a,n-m]^(EX=Sign[exp]*Min[Abs[exp],Abs[nexp]])*p[a,n]^(exp-EX)*p[b,m]^(nexp+EX)/;
            Factor[(b+m)-(a+n)]===0&&exp*nexp<0,
       GAMMA[a_]^(exp_:1)*GAMMA[b_]^(nexp_:1):>
        p[a,b-a]^(EX=Sign[nexp]*Min[Abs[exp],Abs[nexp]])*GAMMA[a]^(exp+EX)*GAMMA[b]^(nexp-EX)/;
            exp*nexp<0};
erw1:=Module[{m},m=Input["top-extend by: "];
         If[m===Infinity,
              {p[a_,n_]^(exp_:1)->GAMMA[a+n]^exp/GAMMA[a]^exp},
              {p[a_,n_]^(exp_:1)->p[a,n+m]^exp/p[a+n,m]^exp},
              {p[a_,n_]^(exp_:1)->p[a,n+m]^exp/p[a+n,m]^exp}]];
erw2:=Module[{m},m=Input["bottom-extend by: "];
              {p[a_,n_]^(exp_:1)->p[a-m,n+m]^exp/p[a-m,m]^exp,
               GAMMA[a_]^(exp_:1)->GAMMA[a-m]^exp*p[a-m,m]^exp}];
zerl:=Module[{m},m=Input["bottom-split by: "];
              {p[a_,n_]^(exp_:1)->p[a,m]^exp*p[a+m,n-m]^exp,
               GAMMA[a_]^(exp_:1)->GAMMA[a+m]^exp/p[a,m]^exp}];
baszerl:=Module[{m,k},m=Input["split into ? terms: "];
              {p[a_,n_]^(exp_:1)->m^(n*exp)*Product[p[(a+k)/m,n/m],{k,0,m-1}]^exp,
               GAMMA[a_]^(exp_:1)->m^(exp*(a-1/2))*(2*Pi)^(exp*(1-m)/2)*
                  Product[GAMMA[(a+k)/m],{k,0,m-1}]^exp}];
baszus:=Module[{m,k},m=Input["put together ? terms: "];
       {p[a_,nn_]^(exp_:1)->m^(-m*nn*exp)*p[a*m,m*nn]^exp/
                        (Product[p[a+k/m,nn],{k,1,m-1}])^exp,
        GAMMA[a_]^(exp_:1)->m^(exp*(1/2-a*m))*(2*Pi)^(exp*(m-1)/2)*GAMMA[a*m]^exp/
                        (Product[GAMMA[a+k/m],{k,1,m-1}])^exp}
   ];
ManipulationsListe={"neg1","neg2","trans","inv","lina1","lina2",
        "linz","zus1","zus2","zus3","erw1","erw2","zerl","baszerl","baszus"}

(*Funktionen un Definitionen, die das Manipulieren von Ausdr�cken
  und Gleichungen erm”glichen*)
Listwrap[L_]:=If[ListTest[L],L,{L}];
Ers[Term_,Rules_,Positions_]:=Module[{Erg},
    If[MemberQ[{List,Rule,RuleDelayed},Head[Rules]],
       Erg=MapAt[ReplaceAll[#,Rules]&,Term,Map[Listwrap,Positions]],
       Erg=MapAt[Rules,Term,Map[Listwrap,Positions]]];
       If[Head[Erg]===Equal,LS=Erg[[1]];RS=Erg[[2]];];
       Erg
      ];
Subst[Expr_,Pos_,LiS_:LS,ReS_:RS]:=Ers[Expr,Ausdr_ :>Ausdr*ReS/LiS,{Pos}];

PosListe[Expr_]:=PosListe[Expr,1];
PosListe[Expr_,lev_]:=Module[{ZwErg,Var},
   If[$VersionNumber==2.,
        ZwErg=R[Cases[Expr,x_->{x,Hold[Select[Position[Expr,x],
                Function[Var,Length[Var]===lev]]]},{lev}]],
        ZwErg=Map[{#,Select[Position[Expr,#],
                Function[Var,Length[Var]===lev]]}&,Level[Expr,{lev}]];
   ZwErg=Select[ZwErg,(Length[#[[2,1]]]===lev)&];
   Union[ZwErg]
   ]
];
R:=Release;

SimplifyP:=(Expr_ :>(Expr//.simplifyP/.MinusOne));
simplifyP:={p[x_,y_]^(exp_:1):>p[Expand[x],Expand[y]]^exp,
          p[x_List,y_List,k_]^(exp_:1):>p[Expand[x],Expand[y],Expand[k]]^exp,
          GAMMA[x_]^(exp_:1):>GAMMA[Expand[x]]^exp,
          Binomial[x_,y_]^(exp_:1):>Binomial[Expand[x],Expand[y]]^exp,
          Factorial[x_]^(exp_:1):>Factorial[Expand[x]]^exp,
          Factorial2[x_]^(exp_:1):>Factorial2[Expand[x]]^exp,
          GAMMA[x_List,y_List]^(exp_:1):>GAMMA[Expand[x],Expand[y]]^exp,
          F[x_List,y_List,z_]^(exp_:1):>(F[Expand[x],Expand[y],Factor[z]](*/.FOrdne*))^exp,
          H[x_List,y_List,z_]^(exp_:1):>(H[Expand[x],Expand[y],Factor[z]](*/.HOrdne*))^exp,
          SUM[x_,{l1_,l2_,l3_}]^(exp_:1):>SUM[x,{l1,Expand[Factor[l2]],Expand[Factor[l3]]}]^exp/;
              Expand[Factor[l2]]=!=l2||Expand[Factor[l3]]=!=l3,
          Expandq};

SUMExpand:=(Expr_ :>(Expr//.sumExpand));
sumExpand:={SUM[x_,{l___}]:>SUM[Expand[x],{l}]/;Expand[x]=!=x,
            SUM[x_-y_,{l___}]:>SUM[x,{l}]-SUM[y,{l}],
            SUM[x_+y_,{l___}]:>SUM[x,{l}]+SUM[y,{l}],
            SUM[x_,{l1_,l2_,l3_}]^(exp_:1):>SUM[x,{l1,Expand[Factor[l2]],Expand[Factor[l3]]}]^exp/;
              Expand[Factor[l2]]=!=l2||Expand[Factor[l3]]=!=l3
            };

PSort:={F[List1_List,List2_List,z_]:>(F[Sort[List1],Sort[List2],z]/.SimplifyP),
   p[List1_List,List2_List,n_]:>(p[Sort[List1],Sort[List2],n]/.SimplifyP),
   GAMMA[List1_List,List2_List]:>
        (GAMMA[Sort[List1],Sort[List2]]/.SimplifyP)};

FEinf:=(F[List1_List,List2_List,z_]:>
   Module[{A},A=Input["Add the parameter: "];
        If[ifFCancel===1,FCancel];
        F[Join[{A},List1],Join[{A},List2],z]]);
HEinf:=(H[List1_List,List2_List,z_]:>
   Module[{A},A=Input["Add the parameter: "];
        If[ifFCancel===1,FCancel];
        H[Join[{A},List1],Join[{A},List2],z]]);

FPerm[Perm__,Wahl_]:=(F[List1_List,List2_List,z_]:>
 Module[{HPerm1,HPerm2,ii},
  If[Sort[{Perm}]===Table[ii,{ii,Length[{Perm}]}],
   Switch[Wahl,
     Global`u,
      If[Length[List1]<Length[{Perm}],
        Print[""];
        Print["The permutation is too long!"];
        F[List1,List2,z],
        HPerm1=Join[{Perm},Table[ii,{ii,Length[{Perm}]+1,Length[List1]}]];
        F[Table[List1[[HPerm1[[ii]]]],{ii,Length[HPerm1]}],List2,z]],
     Global`l,
      If[Length[List2]<Length[{Perm}],
        Print[""];
        Print["The permutation is too long!"];
        F[List1,List2,z],
        HPerm2=Join[{Perm},Table[ii,{ii,Length[{Perm}]+1,Length[List2]}]];
        F[List1,Table[List2[[HPerm2[[ii]]]],{ii,Length[HPerm2]}],z]],
     Global`b,
      If[Length[List1]=!=Length[List2]+1,
        Print[""];
        Print["This makes no sense:"];
        Print["The number of upper parameters is not 1 more"];
        Print["than the number of lower parameters are different!"];
        F[List1,List2,z],
        If[Length[List1]<Length[{Perm}]+1&&Length[List2]<Length[{Perm}],
                Print[""];
                Print["The permutation is too long!"];
                F[List1,List2,z],
                HPerm1=Join[{1},{Perm}+1,Table[ii,{ii,Length[{Perm}]+2,Length[List1]}]];
                HPerm2=Join[{Perm},Table[ii,{ii,Length[{Perm}]+1,Length[List2]}]];
                F[Table[List1[[HPerm1[[ii]]]],{ii,Length[HPerm1]}],
                   Table[List2[[HPerm2[[ii]]]],{ii,Length[HPerm2]}],z]]
        ]
     ],
   Print[""];
   Print["The first parameters of \"FPerm\" are no permutation!"];
   F[List1,List2,z]]]);
HPerm[Perm__,Wahl_]:=(H[List1_List,List2_List,z_]:>
 Module[{HPerm1,ii},
  If[Sort[{Perm}]===Table[ii,{ii,Length[{Perm}]}],
   Switch[Wahl,
     Global`u,
      If[Length[List1]<Length[{Perm}],
        Print[""];
        Print["The permutation is too long!"];
        H[List1,List2,z],
        HPerm1=Join[{Perm},Table[ii,{ii,Length[{Perm}]+1,Length[List1]}]];
        H[Table[List1[[HPerm1[[ii]]]],{ii,Length[HPerm1]}],List2,z]],
     Global`l,
      If[Length[List2]<Length[{Perm}],
        Print[""];
        Print["The permutation is too long!"];
        H[List1,List2,z],
        HPerm1=Join[{Perm},Table[ii,{ii,Length[{Perm}]+1,Length[List2]}]];
        H[List1,Table[List2[[HPerm1[[ii]]]],{ii,Length[HPerm1]}],z]],
     Global`b,
      If[Length[List1]=!=Length[List2],
        Print[""];
        Print["This makes no sense:"];
        Print["The numbers of upper and lower parameters are different!"];
        H[List1,List2,z],
        If[Length[List1]<Length[{Perm}],
                Print[""];
                Print["The permutation is too long!"];
                H[List1,List2,z],
                HPerm1=Join[{Perm},Table[ii,{ii,Length[{Perm}]+1,Length[List1]}]];
                H[Table[List1[[HPerm1[[ii]]]],{ii,Length[HPerm1]}],
                   Table[List2[[HPerm1[[ii]]]],{ii,Length[HPerm1]}],z]]
        ]
     ],
   Print[""];
   Print["The first parameters of \"HPerm\" are no permutation!"];
   H[List1,List2,z]]]);
FTausche[n1_,n2_,Wahl_]:=(F[List1_List,List2_List,z_]:>
   Switch[Wahl,
          Global`u,F[Insert[Drop[List1,{n1,n1}],List1[[n1]],n2],List2,z],
          Global`l,F[List1,Insert[Drop[List2,{n1,n1}],List2[[n1]],n2],z],
          Global`b,F[Insert[Drop[List1,{n1+1,n1+1}],List1[[n1+1]],n2+1],
               Insert[Drop[List2,{n1,n1}],List2[[n1]],n2],z]
        ]);



PoisEliminate[Liste1_List,Liste2_List,Liste3_List,Liste4_List,x_,y_]:=
  Module[{POSX,LIST1=Liste1,LIST2=Liste2,LIST3=Liste3,LIST4=Liste4,HList1,HList2},
        HList1=Map[Factor[#-x]&,Liste1];
        HList2=Map[Factor[#-y]&,Liste2];
        If[MemberQ[HList1,0]&&MemberQ[HList2,0],
           POSX=POS[HList1,0];
           LIST1=Drop[Liste1,{POSX,POSX}];
           LIST3=Join[Liste3,{x}];
           POSX=POS[HList2,0];
           LIST2=Drop[Liste2,{POSX,POSX}];
           LIST4=Join[Liste4,{y}];
          ];
        {LIST1,LIST2,LIST3,LIST4}
       ];

(*FOrdne:=(F[List1_List,List2_List,z_]:>
   Module[{Intsec,GesList,ii,Var1,Var2,MaxEl,POSX,NewList1=List1,NewList2=List2,
                ProvList1,ProvList2},
      GesList=Table[Map[List1[[ii]]+#&,List2],{ii,1,Length[List1]}];
      GesList=Apply[Join,GesList];
      Intsec=intersection[GesList,1+List1];
      If[Intsec=!={},
         Intsec=Table[Var1=Intsec[[ii]];
                      {Var1,Count[GesList,Var1]},
                      {ii,1,Length[Intsec]}];
         MaxEl=Max[Table[Intsec[[ii,2]],{ii,1,Length[Intsec]}]];
         Intsec=Select[Intsec,(#[[2]]===MaxEl)&][[1,1]];
         POSX=POS[List1,Intsec-1];
         NewList1={Intsec-1};NewList2={};
         ProvList1=Drop[List1,{POSX,POSX}];ProvList2=List2;
         {ProvList1,ProvList2,NewList1,NewList2}=
           PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                           Expand[(Intsec+1)/2],Expand[(Intsec-1)/2]];
         GesList=ProvList1;
         For[ii=1,ii<=Length[GesList],ii++,
             {ProvList1,ProvList2,NewList1,NewList2}=
                PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                              GesList[[ii]],Intsec-GesList[[ii]]]];
         Clear[ii];
         NewList1=Join[NewList1,ProvList1];
         NewList2=Join[NewList2,ProvList2];
        ];
      F[NewList1,NewList2,z]
   ]);*)

Format[f[{a___},{b___},z_]]:=
	If[Global`DOSFrage,
       SequenceForm[Subscript[Length[{a}]],"F",Subscript[Length[{b}]],
        ColumnForm[{"Ú ","³ ","³ ","³ ","À "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        "; ",z,
        ColumnForm[{" ¿"," ³"," ³"," ³"," Ù"},Center,Center]],
        SequenceForm[Subscript[Length[{a}]],"F",Subscript[Length[{b}]],
        ColumnForm[{"[ ","| ","| ","| ","[ "},Center,Center],
        ColumnForm[{pOutput[a]," ",pOutput[b]},Center,Center],
        "; ",z,
        ColumnForm[{" ]"," |"," |"," |"," ]"},Center,Center]]];

FOrdne:=(F[List1_List,List2_List,z_]:>
   Module[{Intsec,GesList,ii,Var1,Var2,MaxEl,POSX,NewList1={},NewList2={},
        ProvList1=Expand[Factor[List1]],ProvList2=Expand[Factor[List2]],
        GesList1,GesList2,GesList3,GesList4,
        NewList1a,NewList1b,NewList1c,NewList1d,
        NewList2a,NewList2b,NewList2c,NewList2d,
        Erg,Fehler},
      FOrdneRun=True;
(*Test auf very-well-poisedness*)
      GesList=Table[Map[ProvList1[[ii]]+#&,ProvList2],{ii,1,Length[List1]}];
      Intsec=Apply[Join,GesList];
      If[Intsec=!={},
         Intsec=Table[Var1=Intsec[[ii]];
                      {Var1,Count[Intsec,Var1]},
                      {ii,1,Length[Intsec]}];
         MaxEl=Max[Table[Intsec[[ii,2]],{ii,1,Length[Intsec]}]];
         Intsec=Select[Intsec,(#[[2]]===MaxEl)&][[1,1]];
         If[MemberQ[ProvList1,Intsec-1],
            POSX=POS[ProvList1,Intsec-1];
            NewList1={Intsec-1};
            ProvList1=Drop[ProvList1,{POSX,POSX}]
           ];
         {ProvList1,ProvList2,NewList1,NewList2}=
           PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                           Expand[(Intsec+1)/2],Expand[(Intsec-1)/2]];
         GesList=ProvList1;
         For[ii=1,ii<=Length[GesList],ii++,
             {ProvList1,ProvList2,NewList1,NewList2}=
                PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                              GesList[[ii]],Intsec-GesList[[ii]]]];
         Clear[ii];
         If[!MemberQ[NewList1,Intsec-1],
           If[ProvList1==={1}&&ProvList2==={},
             If[ifFCancel==1,
                Print[""];Print["The series"];Print[""];
                Print[f[Join[{Intsec-1},NewList1,{1}],Join[NewList2,{Intsec-1}],z]];Print[""];
                Print["was obtained, which is very-well-poised with cancelling leading"];
                Print["parameter. Do you want to do the cancellation?"];
                If[Input["[y|n]:  "]===Global`n,FCancel;
                  Print[""];
                  Print["Automatic cancelling in F and H was made inactive!"],
                  Null];
               ];
             If[ifFCancel==0,
               NewList1=Join[{Intsec-1},NewList1];
               ProvList2={Intsec-1},
               Null],
             If[Length[NewList1]>=2&&ProvList1=!={},
                NewList1=Join[{ProvList1[[1]]},NewList1];
                ProvList1=Drop[ProvList1,1];
               ]
             ];
           ];
        ];
      NewList1=Join[NewList1,ProvList1];
      NewList2=Join[NewList2,ProvList2];
      Erg=F[NewList1,NewList2,z];
   If[ProvList1=!={}&&ProvList1=!={1},
      Fehler=Length[ProvList1];
      ProvList1=Expand[Factor[List1]];ProvList2=Expand[Factor[List2]];
      NewList1={};NewList2={};
      NewList1a={};NewList1b={};NewList2a={};NewList2b={};
(*Test auf strange very-well-poisedness der ersten Art*)
      GesList1=Table[Map[Expand[2ProvList1[[ii]]+#]&,ProvList2]-1,{ii,1,Length[List1]}];
      GesList1=Apply[Join,GesList1];
      GesList2=Table[Map[Expand[ProvList1[[ii]]+2#]&,ProvList2]-2,{ii,1,Length[List1]}];
      GesList2=Apply[Join,GesList2];
      Intsec=Join[GesList1,GesList2];
      If[Intsec=!={},
         Intsec=Table[Var1=Intsec[[ii]];
                      {Var1,Count[Intsec,Var1]},
                      {ii,1,Length[Intsec]}];
         MaxEl=Max[Table[Intsec[[ii,2]],{ii,1,Length[Intsec]}]];
         Intsec=Select[Intsec,(#[[2]]===MaxEl)&][[1,1]];
         {ProvList1,ProvList2,NewList1,NewList2}=
           PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                           Expand[(Intsec)/3+1],Expand[(Intsec)/3]];
         GesList=ProvList1;
         For[ii=1,ii<=Length[GesList],ii++,
             {ProvList1,ProvList2,NewList1a,NewList2a}=
                PoisEliminate[ProvList1,ProvList2,NewList1a,NewList2a,
                              GesList[[ii]],Expand[Intsec/2-GesList[[ii]]/2+1]];
             {ProvList1,ProvList2,NewList1b,NewList2b}=
                PoisEliminate[ProvList1,ProvList2,NewList1b,NewList2b,
                              GesList[[ii]],Expand[Intsec-2*GesList[[ii]]+1]]];
         Clear[ii];
         If[MemberQ[ProvList1,Intsec],
            POSX=POS[ProvList1,Intsec];
            NewList1=Join[{Intsec},NewList1];
            ProvList1=Drop[ProvList1,{POSX,POSX}],
            If[MemberQ[ProvList1,Expand[Intsec/2]],
               POSX=POS[ProvList1,Expand[Intsec/2]];
               NewList1=Join[{Expand[Intsec/2]},NewList1];
               ProvList1=Drop[ProvList1,{POSX,POSX}]
              ]
           ];
         If[!MemberQ[NewList1,Intsec]&&
                !MemberQ[NewList1,Expand[Intsec/2]],
           MaxEl=ProvList1;
           If[(MaxEl==={2-Intsec}||MaxEl==={1/2}||
                MaxEl==={2}||MaxEl==={Expand[Intsec/4+1/2]})&&
                ProvList2==={},
             If[ifFCancel==1,
                Print[""];Print["The series"];Print[""];
               Switch[MaxEl,
                {2-Intsec},
                Print[f[Join[{Intsec},NewList1,NewList1a,{2-Intsec},NewList1b],
                        Join[NewList2,NewList2a,{Intsec},NewList2b],z]];Print[""],
                {1/2},
                Print[f[Join[{Intsec},NewList1,NewList1a,NewList1b,{1/2}],
                        Join[NewList2,NewList2a,NewList2b,{Intsec}],z]];Print[""],
                {2},
                Print[f[Join[{Expand[Intsec/2]},NewList1,NewList1a,{2},NewList1b],
                        Join[NewList2,NewList2a,{Expand[Intsec/2]},NewList2b],z]];Print[""],
                {Expand[Intsec/4+1/2]},
                Print[f[Join[{Expand[Intsec/2]},NewList1,NewList1a,NewList1b,{Expand[Intsec/4+1/2]}],
                        Join[NewList2,NewList2a,NewList2b,{Expand[Intsec/2]}],z]];Print[""]
                 ];
                Print["was obtained, which is strangely very-well-poised with cancelling"];
                Print["leading parameter. Do you want to do the cancellation?"];
                If[Input["[y|n]:  "]===Global`n,FCancel;
                  Print[""];
                  Print["Automatic cancelling in F and H was made inactive!"],
                  Null];
               ];
             If[MaxEl==={2}||MaxEl==={Expand[Intsec/4+1/2]},Intsec=Expand[Intsec/2]];
             If[ifFCancel==0,
               NewList1=Join[{Intsec},NewList1];
              If[MaxEl==={1/2}||MaxEl==={Expand[Intsec/4+1/2]},
               NewList1b=Join[NewList1b,ProvList1];
               ProvList1={};
               NewList2b=Join[NewList2b,{Intsec}],
               NewList1a=Join[NewList1a,ProvList1];
               ProvList1={};
               NewList2a=Join[NewList2a,{Intsec}];
                ]
               ],
             If[Length[NewList1]+Length[NewList1a]+Length[NewList1b]>=2,
                NewList1=Join[{ProvList1[[1]]},NewList1];
                ProvList1=Drop[ProvList1,1];
               ]
             ];
           ];
         NewList1=Join[NewList1,NewList1a,NewList1b,ProvList1];
         NewList2=Join[NewList2,NewList2a,NewList2b,ProvList2];
        ];
      If[Length[ProvList1]<Fehler,
         Fehler=Length[ProvList1];
         Erg=F[NewList1,NewList2,z];
        ]
     ];
   If[Fehler>0,
      ProvList1=Expand[Factor[List1]];ProvList2=Expand[Factor[List2]];
      NewList1={};NewList2={};
      NewList1a={};NewList1b={};NewList1c={};
      NewList2a={};NewList2b={};NewList2c={};
(*Test auf strange very-well-poisedness der zweiten Art*)
      GesList1=Table[Map[Expand[3ProvList1[[ii]]+#]&,ProvList2]-1,{ii,1,Length[List1]}];
      GesList1=Apply[Join,GesList1];
      GesList2=Table[Map[Expand[2ProvList1[[ii]]+2#]&,ProvList2]-2,{ii,1,Length[List1]}];
      GesList2=Apply[Join,GesList2];
      GesList3=Table[Map[Expand[ProvList1[[ii]]+3#]&,ProvList2]-3,{ii,1,Length[List1]}];
      GesList3=Apply[Join,GesList3];
      Intsec=Join[GesList1,GesList2,GesList3];
      If[Intsec=!={},
         Intsec=Table[Var1=Intsec[[ii]];
                      {Var1,Count[Intsec,Var1]},
                      {ii,1,Length[Intsec]}];
         MaxEl=Max[Table[Intsec[[ii,2]],{ii,1,Length[Intsec]}]];
         Intsec=Select[Intsec,(#[[2]]===MaxEl)&][[1,1]];
         {ProvList1,ProvList2,NewList1,NewList2}=
           PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                           Expand[(Intsec)/4+1],Expand[(Intsec)/4]];
         GesList=ProvList1;
         For[ii=1,ii<=Length[GesList],ii++,
             {ProvList1,ProvList2,NewList1a,NewList2a}=
                PoisEliminate[ProvList1,ProvList2,NewList1a,NewList2a,
                              GesList[[ii]],Expand[Intsec/3-GesList[[ii]]/3+1]];
             {ProvList1,ProvList2,NewList1b,NewList2b}=
                PoisEliminate[ProvList1,ProvList2,NewList1b,NewList2b,
                              GesList[[ii]],Expand[Intsec/2-GesList[[ii]]+1]];
             {ProvList1,ProvList2,NewList1c,NewList2c}=
                PoisEliminate[ProvList1,ProvList2,NewList1c,NewList2c,
                              GesList[[ii]],Expand[Intsec-3*GesList[[ii]]+1]]];
         Clear[ii];
         If[MemberQ[ProvList1,Intsec],
            POSX=POS[ProvList1,Intsec];
            NewList1=Join[{Intsec},NewList1];
            ProvList1=Drop[ProvList1,{POSX,POSX}],
            If[MemberQ[ProvList1,Expand[Intsec/2]],
               POSX=POS[ProvList1,Expand[Intsec/2]];
               NewList1=Join[{Expand[Intsec/2]},NewList1];
               ProvList1=Drop[ProvList1,{POSX,POSX}],
               If[MemberQ[ProvList1,Expand[Intsec/3]],
                  POSX=POS[ProvList1,Expand[Intsec/3]];
                  NewList1=Join[{Expand[Intsec/3]},NewList1];
                  ProvList1=Drop[ProvList1,{POSX,POSX}]
                 ]
              ]
           ];
         If[!MemberQ[NewList1,Intsec]&&
                !MemberQ[NewList1,Expand[Intsec/2]]&&
                    !MemberQ[NewList1,Expand[Intsec/3]],
           MaxEl=ProvList1;
           If[(MaxEl==={Expand[3-2Intsec]}||MaxEl==={Expand[1-Intsec/2]}||
                        MaxEl==={1/3}||
                MaxEl==={Expand[3-Intsec/2]}||MaxEl==={1}||
                        MaxEl==={Expand[1/3+Intsec/6]}||
                MaxEl==={3}||MaxEl==={Expand[1+Intsec/6]}||
                        MaxEl==={Expand[1/3+2Intsec/9]})&&
                ProvList2==={},
             If[ifFCancel==1,
                Print[""];Print["The series"];Print[""];
               Switch[MaxEl,
                {Expand[3-2Intsec]},
                Print[f[Join[{Intsec},NewList1,NewList1a,{Expand[3-2Intsec]},NewList1b,NewList1c],
                        Join[NewList2,NewList2a,{Intsec},NewList2b,NewList2c],z]];Print[""],
                {Expand[1-Intsec/2]},
                Print[f[Join[{Expand[Intsec]},NewList1,NewList1a,NewList1b,{Expand[1-Intsec/2]},NewList1c],
                        Join[NewList2,NewList2a,NewList2b,{Expand[Intsec]},NewList2c],z]];Print[""],
                {1/3},
                Print[f[Join[{Expand[Intsec]},NewList1,NewList1a,NewList1b,NewList1c,{1/3}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Expand[Intsec]}],z]];Print[""],
                {Expand[3-Intsec/2]},
                Print[f[Join[{Intsec/2},NewList1,NewList1a,{Expand[3-Intsec/2]},NewList1b,NewList1c],
                        Join[NewList2,NewList2a,{Intsec/2},NewList2b,NewList2c],z]];Print[""],
                {1},
                Print[f[Join[{Expand[Intsec/2]},NewList1,NewList1a,NewList1b,{1},NewList1c],
                        Join[NewList2,NewList2a,NewList2b,{Expand[Intsec/2]},NewList2c],z]];Print[""],
                {Expand[1/3+Intsec/6]},
                Print[f[Join[{Expand[Intsec/2]},NewList1,NewList1a,NewList1b,NewList1c,{Expand[1/3+Intsec/6]}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Expand[Intsec/2]}],z]];Print[""],
                {3},
                Print[f[Join[{Intsec/3},NewList1,NewList1a,{3},NewList1b,NewList1c],
                        Join[NewList2,NewList2a,{Intsec/3},NewList2b,NewList2c],z]];Print[""],
                {Expand[1+Intsec/6]},
                Print[f[Join[{Expand[Intsec/3]},NewList1,NewList1a,NewList1b,{Expand[1+Intsec/6]},NewList1c],
                        Join[NewList2,NewList2a,NewList2b,{Expand[Intsec/3]},NewList2c],z]];Print[""],
                {Expand[1/3+2Intsec/9]},
                Print[f[Join[{Expand[Intsec/3]},NewList1,NewList1a,NewList1b,NewList1c,{Expand[1/3+2Intsec/9]}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Expand[Intsec/3]}],z]];Print[""]
                 ];
                Print["was obtained, which is strangely very-well-poised with cancelling"];
                Print["leading parameter. Do you want to do the cancellation?"];
                If[Input["[y|n]:  "]===Global`n,FCancel;
                  Print[""];
                  Print["Automatic cancelling in F and H was made inactive!"],
                  Null];
               ];
             If[MaxEl==={Expand[3-Intsec/2]}||MaxEl==={1}||
                        MaxEl==={Expand[1/3+Intsec/6]},Intsec=Expand[Intsec/2],
               If[MaxEl==={3}||MaxEl==={Expand[1+Intsec/6]}||
                        MaxEl==={Expand[1/3+2Intsec/9]},Intsec=Expand[Intsec/3]
                 ];
               ];
             If[ifFCancel==0,
               NewList1=Join[{Intsec},NewList1];
              If[MaxEl==={Expand[3-2Intsec]}||MaxEl==={Expand[3-Intsec/2]}||
                        MaxEl==={3},
               NewList1a=Join[NewList1a,ProvList1];
               ProvList1={};
               NewList2a=Join[NewList2a,{Intsec}],
               If[MaxEl==={Expand[3-2Intsec]}||MaxEl==={Expand[3-Intsec/2]}||
                        MaxEl==={3},
                 NewList1b=Join[NewList1b,ProvList1];
                 ProvList1={};
                 NewList2b=Join[NewList2b,{Intsec}],
                 NewList1c=Join[NewList1c,ProvList1];
                 ProvList1={};
                 NewList2c=Join[NewList2c,{Intsec}]
                 ]
                ]
               ],
             If[Length[NewList1]+Length[NewList1a]+Length[NewList1b]+Length[NewList1c]>=2,
                NewList1=Join[{ProvList1[[1]]},NewList1];
                ProvList1=Drop[ProvList1,1];
               ]
             ];
           ];
         NewList1=Join[NewList1,NewList1a,NewList1b,NewList1c,ProvList1];
         NewList2=Join[NewList2,NewList2a,NewList2b,NewList2c,ProvList2];
        ];
      If[Length[ProvList1]<Fehler,
         Fehler=Length[ProvList1];
         Erg=F[NewList1,NewList2,z];
        ]
     ];
   If[Fehler>0,
      ProvList1=Expand[Factor[List1]];ProvList2=Expand[Factor[List2]];
      NewList1={};NewList2={};
      NewList1a={};NewList1b={};NewList1c={};NewList1d={};
      NewList2a={};NewList2b={};NewList2c={};NewList2d={};
(*Test auf strange very-well-poisedness der dritten Art*)
      GesList1=Table[Map[Expand[4ProvList1[[ii]]+#]&,ProvList2]-1,{ii,1,Length[List1]}];
      GesList1=Apply[Join,GesList1];
      GesList2=Table[Map[Expand[3ProvList1[[ii]]+2#]&,ProvList2]-2,{ii,1,Length[List1]}];
      GesList2=Apply[Join,GesList2];
      GesList3=Table[Map[Expand[2ProvList1[[ii]]+3#]&,ProvList2]-3,{ii,1,Length[List1]}];
      GesList3=Apply[Join,GesList3];
      GesList4=Table[Map[Expand[ProvList1[[ii]]+4#]&,ProvList2]-4,{ii,1,Length[List1]}];
      GesList4=Apply[Join,GesList4];
      Intsec=Join[GesList1,GesList2,GesList3,GesList4];
      If[Intsec=!={},
         Intsec=Table[Var1=Intsec[[ii]];
                      {Var1,Count[Intsec,Var1]},
                      {ii,1,Length[Intsec]}];
         MaxEl=Max[Table[Intsec[[ii,2]],{ii,1,Length[Intsec]}]];
         Intsec=Select[Intsec,(#[[2]]===MaxEl)&][[1,1]];
         {ProvList1,ProvList2,NewList1,NewList2}=
           PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                           Expand[(Intsec)/5+1],Expand[(Intsec)/5]];
         GesList=ProvList1;
         For[ii=1,ii<=Length[GesList],ii++,
             {ProvList1,ProvList2,NewList1a,NewList2a}=
                PoisEliminate[ProvList1,ProvList2,NewList1a,NewList2a,
                              GesList[[ii]],Expand[Intsec/4-GesList[[ii]]/4+1]];
             {ProvList1,ProvList2,NewList1b,NewList2b}=
                PoisEliminate[ProvList1,ProvList2,NewList1b,NewList2b,
                              GesList[[ii]],Expand[Intsec/3-2GesList[[ii]]/3+1]];
             {ProvList1,ProvList2,NewList1c,NewList2c}=
                PoisEliminate[ProvList1,ProvList2,NewList1c,NewList2c,
                              GesList[[ii]],Expand[Intsec/2-3*GesList[[ii]]/2+1]];
             {ProvList1,ProvList2,NewList1d,NewList2d}=
                PoisEliminate[ProvList1,ProvList2,NewList1d,NewList2d,
                              GesList[[ii]],Expand[Intsec-4*GesList[[ii]]+1]]];
         Clear[ii];
         If[MemberQ[ProvList1,Intsec],
            POSX=POS[ProvList1,Intsec];
            NewList1=Join[{Intsec},NewList1];
            ProvList1=Drop[ProvList1,{POSX,POSX}],
            If[MemberQ[ProvList1,Expand[Intsec/2]],
               POSX=POS[ProvList1,Expand[Intsec/2]];
               NewList1=Join[{Expand[Intsec/2]},NewList1];
               ProvList1=Drop[ProvList1,{POSX,POSX}],
               If[MemberQ[ProvList1,Expand[Intsec/3]],
                  POSX=POS[ProvList1,Expand[Intsec/3]];
                  NewList1=Join[{Expand[Intsec/3]},NewList1];
                  ProvList1=Drop[ProvList1,{POSX,POSX}],
                  If[MemberQ[ProvList1,Expand[Intsec/4]],
                     POSX=POS[ProvList1,Expand[Intsec/4]];
                     NewList1=Join[{Expand[Intsec/4]},NewList1];
                     ProvList1=Drop[ProvList1,{POSX,POSX}]
                    ]
                 ]
              ]
           ];
         If[!MemberQ[NewList1,Intsec]&&
                !MemberQ[NewList1,Expand[Intsec/2]]&&
                    !MemberQ[NewList1,Expand[Intsec/3]]&&
                        !MemberQ[NewList1,Expand[Intsec/4]],
           MaxEl=ProvList1;
           If[(MaxEl==={Expand[4-3Intsec]}||MaxEl==={3/2-Intsec}||
                        MaxEl==={Expand[2/3-Intsec/3]}||MaxEl==={1/4}||
                MaxEl==={4-Intsec}||MaxEl==={Expand[3/2-Intsec/4]}||
                        MaxEl==={2/3}||MaxEl==={Expand[1/4+Intsec/8]}||
                MaxEl==={Expand[4-Intsec/3]}||MaxEl==={3/2}||
                        MaxEl==={Expand[2/3+Intsec/9]}||MaxEl==={Expand[1/4+Intsec/6]}||
                MaxEl==={4}||MaxEl==={Expand[3/2+Intsec/8]}||
                        MaxEl==={Expand[2/3+Intsec/6]}||MaxEl==={Expand[1/4+3Intsec/16]})&&
                ProvList2==={},
             If[ifFCancel==1,
                Print[""];Print["The series"];Print[""];
               Switch[MaxEl,
                {Expand[4-3Intsec]},
                Print[f[Join[{Intsec},NewList1,NewList1a,{Expand[4-3Intsec]},NewList1b,NewList1c,NewList1d],
                        Join[NewList2,NewList2a,{Intsec},NewList2b,NewList2c,NewList1d],z]];Print[""],
                {3/2-Intsec},
                Print[f[Join[{Intsec},NewList1,NewList1a,NewList1b,{3/2-Intsec},NewList1c,NewList1d],
                        Join[NewList2,NewList2a,NewList2b,{Intsec},NewList2c,NewList1d],z]];Print[""],
                {Expand[2/3-Intsec/3]},
                Print[f[Join[{Intsec},NewList1,NewList1a,NewList1b,NewList1c,{Expand[2/3-Intsec/3]},NewList1d],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Intsec},NewList1d],z]];Print[""],
                {1/4},
                Print[f[Join[{Intsec},NewList1,NewList1a,NewList1b,NewList1c,NewList1d,{1/4}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,NewList1d,{Intsec}],z]];Print[""],
                {4-Intsec},
                Print[f[Join[{Intsec/2},NewList1,NewList1a,{4-Intsec},NewList1b,NewList1c,NewList1d],
                        Join[NewList2,NewList2a,{Intsec/2},NewList2b,NewList2c,NewList1d],z]];Print[""],
                {Expand[3/2-Intsec/4]},
                Print[f[Join[{Intsec/2},NewList1,NewList1a,NewList1b,{Expand[3/2-Intsec/4]},NewList1c,NewList1d],
                        Join[NewList2,NewList2a,NewList2b,{Intsec/2},NewList2c,NewList1d],z]];Print[""],
                {2/3},
                Print[f[Join[{Intsec/2},NewList1,NewList1a,NewList1b,NewList1c,{2/3},NewList1d],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Intsec/2},NewList1d],z]];Print[""],
                {Expand[1/4+Intsec/8]},
                Print[f[Join[{Intsec/2},NewList1,NewList1a,NewList1b,NewList1c,NewList1d,{Expand[1/4+Intsec/8]}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,NewList1d,{Intsec/2}],z]];Print[""],
                {Expand[4-Intsec/3]},
                Print[f[Join[{Intsec/3},NewList1,NewList1a,{Expand[4-Intsec/3]},NewList1b,NewList1c,NewList1d],
                        Join[NewList2,NewList2a,{Intsec/3},NewList2b,NewList2c,NewList1d],z]];Print[""],
                {3/2},
                Print[f[Join[{Intsec/3},NewList1,NewList1a,NewList1b,{3/2},NewList1c,NewList1d],
                        Join[NewList2,NewList2a,NewList2b,{Intsec/3},NewList2c,NewList1d],z]];Print[""],
                {Expand[2/3+Intsec/9]},
                Print[f[Join[{Intsec/3},NewList1,NewList1a,NewList1b,NewList1c,{Expand[2/3+Intsec/9]},NewList1d],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Intsec/3},NewList1d],z]];Print[""],
                {Expand[1/4+Intsec/6]},
                Print[f[Join[{Intsec/3},NewList1,NewList1a,NewList1b,NewList1c,NewList1d,{Expand[1/4+Intsec/6]}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,NewList1d,{Intsec/3}],z]];Print[""],
                {4},
                Print[f[Join[{Intsec/4},NewList1,NewList1a,{4},NewList1b,NewList1c,NewList1d],
                        Join[NewList2,NewList2a,{Intsec/4},NewList2b,NewList2c,NewList1d],z]];Print[""],
                {Expand[3/2+Intsec/8]},
                Print[f[Join[{Intsec/4},NewList1,NewList1a,NewList1b,{Expand[3/2+Intsec/8]},NewList1c,NewList1d],
                        Join[NewList2,NewList2a,NewList2b,{Intsec/4},NewList2c,NewList1d],z]];Print[""],
                {Expand[2/3+Intsec/6]},
                Print[f[Join[{Intsec/4},NewList1,NewList1a,NewList1b,NewList1c,{Expand[2/3+Intsec/6]},NewList1d],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,{Intsec/4},NewList1d],z]];Print[""],
                {Expand[1/4+3Intsec/16]},
                Print[f[Join[{Intsec/4},NewList1,NewList1a,NewList1b,NewList1c,NewList1d,{Expand[1/4+3Intsec/16]}],
                        Join[NewList2,NewList2a,NewList2b,NewList2c,NewList1d,{Intsec/4}],z]];Print[""]
                 ];
                Print["was obtained, which is strangely very-well-poised with cancelling"];
                Print["leading parameter. Do you want to do the cancellation?"];
                If[Input["[y|n]:  "]===Global`n,FCancel;
                  Print[""];
                  Print["Automatic cancelling in F and H was made inactive!"],
                  Null];
               ];
             If[MaxEl==={4-Intsec}||MaxEl==={Expand[3/2-Intsec/4]}||MaxEl==={2/3}||
                        MaxEl==={Expand[1/4+Intsec/8]},Intsec=Expand[Intsec/2],
               If[MaxEl==={Expand[4-Intsec/3]}||MaxEl==={3/2}||MaxEl==={Expand[2/3+Intsec/9]}||
                        MaxEl==={Expand[1/4+Intsec/6]},Intsec=Expand[Intsec/3],
                 If[MaxEl==={4}||MaxEl==={Expand[3/2+Intsec/8]}||MaxEl==={Expand[2/3+Intsec/6]}||
                          MaxEl==={Expand[1/4+3Intsec/16]},Intsec=Expand[Intsec/4]
                   ];
                 ];
               ];
             If[ifFCancel==0,
               NewList1=Join[{Intsec},NewList1];
              If[MaxEl==={Expand[4-3Intsec]}||MaxEl==={4-Intsec}||
                        MaxEl==={Expand[4-Intsec/3]}||MaxEl==={4},
               NewList1a=Join[NewList1a,ProvList1];
               ProvList1={};
               NewList2a=Join[NewList2a,{Intsec}],
               If[MaxEl==={3/2-Intsec}||MaxEl==={Expand[3/2-Intsec/4]}||
                        MaxEl==={3/2}||MaxEl==={Expand[3/2+Intsec/8]},
                 NewList1b=Join[NewList1b,ProvList1];
                 ProvList1={};
                 NewList2b=Join[NewList2b,{Intsec}],
                 If[MaxEl==={2/3-Intsec/3}||MaxEl==={2/3}||
                          MaxEl==={Expand[2/3+Intsec/9]}||MaxEl==={Expand[2/3+Intsec/6]},
                   NewList1c=Join[NewList1c,ProvList1];
                   ProvList1={};
                   NewList2c=Join[NewList2c,{Intsec}],
                   NewList1d=Join[NewList1d,ProvList1];
                   ProvList1={};
                   NewList2d=Join[NewList2d,{Intsec}]
                   ]
                 ]
                ]
               ],
             If[Length[NewList1]+Length[NewList1a]+Length[NewList1b]+
                        Length[NewList1c]+Length[NewList1d]>=2,
                NewList1=Join[{ProvList1[[1]]},NewList1];
                ProvList1=Drop[ProvList1,1];
               ]
             ];
           ];
         NewList1=Join[NewList1,NewList1a,NewList1b,NewList1c,NewList1d,ProvList1];
         NewList2=Join[NewList2,NewList2a,NewList2b,NewList2c,NewList2d,ProvList2];
        ];
      If[Length[ProvList1]<Fehler,
         Fehler=Length[ProvList1];
         Erg=F[NewList1,NewList2,z];
        ]
     ];
     FOrdneRun=False;
     Erg
   ]);

HOrdne:=(H[List1_List,List2_List,z_]:>
   Module[{Intsec,GesList,ii,Var1,Var2,MaxEl,POSX,NewList1=List1,NewList2=List2,
                ProvList1,ProvList2},
      GesList=Table[Map[List1[[ii]]+#&,List2],{ii,1,Length[List1]}];
      Intsec=Apply[Join,GesList];
      If[Intsec=!={},
         Intsec=Table[Var1=Intsec[[ii]];
                      {Var1,Count[Intsec,Var1]},
                      {ii,1,Length[Intsec]}];
         MaxEl=Max[Table[Intsec[[ii,2]],{ii,1,Length[Intsec]}]];
         Intsec=Select[Intsec,(#[[2]]===MaxEl)&][[1,1]];
         NewList1={};NewList2={};
         ProvList1=List1;ProvList2=List2;
         {ProvList1,ProvList2,NewList1,NewList2}=
           PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                           Expand[(Intsec+1)/2],Expand[(Intsec-1)/2]];
         GesList=ProvList1;
         For[ii=1,ii<=Length[GesList],ii++,
             {ProvList1,ProvList2,NewList1,NewList2}=
                PoisEliminate[ProvList1,ProvList2,NewList1,NewList2,
                              GesList[[ii]],Intsec-GesList[[ii]]]];
         Clear[ii];
         NewList1=Join[NewList1,ProvList1];
         NewList2=Join[NewList2,ProvList2];
        ];
      H[NewList1,NewList2,z]
   ]);
HF:=(H[List1_List,List2_List,z_]:>Module[{m,TopL,BottomL},
   m=Input["Split at: "];
   p[List1,List2,m]*z^m*F[Join[List1+m,{1}],List2+m,z]+
   p[List1,List2,m-1]*z^(m-1)*
    F[Join[-List2-(m-2),{1}],-List1-(m-2),
        1/z*(-1)^(Length[List2]-Length[List1])]
   ]);

FH:=(F[List1_List,List2_List,z_]:>Module[{m,TopL,BottomL},
   TopL=List1;
   BottomL=Join[List2,{1}];
   H[TopL,BottomL,z]-
   p[BottomL-1,TopL-1,1]*z^(-1)*
    F[Join[-BottomL+2,{1}],-TopL+2,1/z*(-1)^(Length[List1]-Length[List2]-1)]
   ]);

HShift:=(H[List1_List,List2_List,z_]:>Module[{m},
   m=Input["shift by: "];
   p[List1,List2,m]*z^m*H[List1+m,List2+m,z]
   ]);


Gleichung:=(LS==RS);
GlTausche:=Module[{ZwExpr},ZwExpr=LS;LS=RS;RS=ZwExpr;Gleichung];
Mal[expr_]:=(LS=LS*expr;RS=RS*expr;Gleichung);
Add[expr_]:=(LS=LS+expr;RS=RS+expr;Gleichung);
Div[expr_]:=(LS=LS/expr;RS=RS/expr;Gleichung);
Sub[expr_]:=(LS=LS-expr;RS=RS-expr;Gleichung);
Hoch[expr_]:=(LS=LS^expr;RS=RS^expr;Gleichung);
Ers[Regel_]:=(LS=(LS/.Regel);RS=(RS/.Regel);Gleichung);
Unprotect[SUM];
SUMDef:=
(
SUM[x__,y_]:=Module[{SUMVar,SUMVars,bottom},
   If[Length[{x}]<=1,
      Switch[{FreeQ[LS==RS,Global`kk],FreeQ[LS==RS,Global`ii],
              FreeQ[LS==RS,Global`jj],FreeQ[LS==RS,Global`ll],
              FreeQ[LS==RS,Global`mm]},
       {True,___},SUMVar=Global`kk,
       {False,True,___},SUMVar=Global`ii,
       {False,False,True,___},SUMVar=Global`jj,
       {False,False,False,True,___},SUMVar=Global`ll,
       {False,False,False,False,True,___},SUMVar=Global`mm,
       _,SUMVar=Global`nn
       ];
       bottom={x}[[1]],
       SUMVar={x}[[1]];
       bottom={x}[[2]]
      ];
    SUMVars={SUMVar,bottom,y};
    LS=SUM[LS,Release[SUMVars]];
    RS=SUM[RS,Release[SUMVars]];
    Gleichung/.SUMRegeln
   ]/;If[Length[{x}]>=2,!ListTest[{x}[[2]]],!ListTest[y]];
Protect[SUM];
);
(*SUMDef;*)

ExprtoF[Expr_^(exp_:1),k_,SUMFSUMR_]:=Module[{Expo},
     Expo=Expand[Factor[exp]];
     If[Head[Expo]===Integer,
       Switch[Expr,p[a___],ptoF[Expr^Expo,k],
              GAMMA[a_],GAMMAtoF[Expr^Expo,k],
              Dummy,Null,
              SUM[a_,{l1_,l2_,l3_}],SUMtoF[Expr^Expo,k,SUMFSUMR],
              _,factoF[Expr^Expo,k]],
       If[FreeQ[Expr,k]&&PolynomialQ[Expo,k]&&Exponent[Expo,k]<=1,
         ConstF=ConstF*Expr^(Expo/.k->0);
         ArgF=ArgF*Expr^Coefficient[Expo,k,1],
         TermF=TermF*Expr^Expo;
         TopF=Join[TopF,{ptoFfail}]
         ]
       ]
     ];
SUMtoF[Expr_^(exp_:1),k_,SUMFSUMR_]:=Module[{ConstH,TopH,BottomH,ArgH,TermH},
     ConstH=ConstF;
     TopH=TopF;
     BottomH=BottomF;
     ArgH=ArgF;
     TermH=TermF;
     TermH=TermH*(Expr/.If[SUMFSUMR===SUMV,SUMF,SUMRegeln])^exp;
     ConstF=ConstH;
     TopF=TopH;
     BottomF=BottomH;
     ArgF=ArgH;
     TermF=TermH;
     TopF=Join[TopF,{ptoFfail}]
   ];
GAMMAtoF[GAMMA[x_]^(exp_:1),k_]:=
   (ConstF=ConstF*GAMMA[x/.k->0]^exp;ptoF[p[x/.k->0,x-(x/.k->0)]^exp,k]);
ptoF[p[x_,y_]^(exp_:1),k_]:=Module[{COEFFx,ConstFx,COEFFy,ConstFy,aplusc,bplusd},
   ConstFx=(x/.k->0);
   ConstFy=(y/.k->0);
   COEFFx=Expand[Cancel[x-ConstFx]];
   COEFFy=Expand[Cancel[y-ConstFy]];
   If[PolynomialQ[COEFFx,k]&&Exponent[COEFFx,k]<=1&&
      PolynomialQ[COEFFy,k]&&Exponent[COEFFy,k]<=1,
    COEFFx=Coefficient[COEFFx,k];
    COEFFy=Coefficient[COEFFy,k];
    ConstF=ConstF*p[ConstFx,ConstFy]^exp;
    aplusc=Expand[COEFFx+COEFFy];
    bplusd=Expand[ConstFx+ConstFy];
    If[IntegerQ[aplusc],
     If[aplusc=!=0,
      ArgF=ArgF*(aplusc^aplusc)^exp;
      If[aplusc>0,
        TermF=TermF*Product[p[(bplusd+ii)/aplusc,k],{ii,0,aplusc-1}]^exp;
        If[exp>0,
          TopF=Join[TopF,Flatten[Table[Table[(bplusd+ii)/aplusc,{exp}],{ii,0,aplusc-1}]]],
          BottomF=Join[BottomF,Flatten[Table[Table[(bplusd+ii)/aplusc,{-exp}],{ii,0,aplusc-1}]]];
          ],
        TermF=TermF/Product[p[(1-bplusd+ii)/-aplusc,k],{ii,0,-aplusc-1}]^exp;
        If[exp>0,
          BottomF=Join[BottomF,Flatten[Table[Table[(1-bplusd+ii)/-aplusc,{exp}],{ii,0,-aplusc-1}]]],
          TopF=Join[TopF,Flatten[Table[Table[(1-bplusd+ii)/-aplusc,{-exp}],{ii,0,-aplusc-1}]]];
          ]
        ]
       ],
      TopF=Join[TopF,{ptoFfail}];
      TermF=TermF*p[bplusd,aplusc*k]^exp;
      ];
    If[IntegerQ[COEFFx],
     If[COEFFx=!=0,
      ArgF=ArgF/(COEFFx^COEFFx)^exp;
      If[COEFFx>0,
        TermF=TermF/Product[p[(ConstFx+ii)/COEFFx,k],{ii,0,COEFFx-1}]^exp;
        If[exp>0,
          BottomF=Join[BottomF,Flatten[Table[Table[(ConstFx+ii)/COEFFx,{exp}],{ii,0,COEFFx-1}]]],
          TopF=Join[TopF,Flatten[Table[Table[(ConstFx+ii)/COEFFx,{-exp}],{ii,0,COEFFx-1}]]]
          ],
        TermF=TermF*Product[p[(1-ConstFx+ii)/-COEFFx,k],{ii,0,-COEFFx-1}]^exp;
        If[exp>0,
          TopF=Join[TopF,Flatten[Table[Table[(1-ConstFx+ii)/-COEFFx,{exp}],{ii,0,-COEFFx-1}]]],
          BottomF=Join[BottomF,Flatten[Table[Table[(1-ConstFx+ii)/-COEFFx,{-exp}],{ii,0,-COEFFx-1}]]];
          ]
        ]
       ],
      BottomF=Join[BottomF,{ptoFfail}];
      TermF=TermF/p[ConstFx,COEFFx*k]^exp;
      ],
   TermF=TermF*p[x,y]^exp;
   TopF=Join[TopF,{ptoFfail}];
   ];
   ];

factoF[Expr_^(exp_:1),k_]:=Module[{ZwExpr,c0,c1,c2,x1,x2,
                                 ConstH,TopH,BottomH,ArgH,TermH},
     If[FreeQ[Expr,k],
       ConstF=ConstF*Expr^exp,
       ZwExpr=Expand[Expr];
       If[PolynomialQ[ZwExpr,k]&&Exponent[ZwExpr,k]<=2,
         c0=Coefficient[ZwExpr,k,0];
         c1=Coefficient[ZwExpr,k,1];
         c2=Coefficient[ZwExpr,k,2];
         ConstF=ConstF*c0^exp;
         If[c2===0,
           TermF=TermF*p[c0/c1+1,k]^exp/p[c0/c1,k]^exp;
           If[exp>0,
             TopF=Join[TopF,Table[c0/c1+1,{exp}]];
             BottomF=Join[BottomF,Table[c0/c1,{exp}]],
             BottomF=Join[BottomF,Table[c0/c1+1,{-exp}]];
             TopF=Join[TopF,Table[c0/c1,{-exp}]]
             ],
           x1=(c1+Sqrt[c1^2-4*c0*c2])/2/c2;
           x2=(c1-Sqrt[c1^2-4*c0*c2])/2/c2;
           TermF=TermF*p[x1+1,k]^exp/p[x1,k]^exp*p[x2+1,k]^exp/p[x2,k]^exp;
           If[exp>0,
             TopF=Join[TopF,Table[x1+1,{exp}],Table[x2+1,{exp}]];
             BottomF=Join[BottomF,Table[x1,{exp}],Table[x2,{exp}]],
             BottomF=Join[BottomF,Table[x1+1,{-exp}],Table[x2+1,{-exp}]];
             TopF=Join[TopF,Table[x1,{-exp}],Table[x2,{-exp}]]
             ]           
           ],
         TermF=TermF*Expr^exp;
         TopF=Join[TopF,{ptoFfail}];
         ]
       ]
   ];

sumRegeln:={
    SUM[an_+bn_,{var_,n0_,n1_}]:>
	SUM[an,{var,n0,n1}]+SUM[bn,{var,n0,n1}]
    };
sumF:=(SUM[Expr_,{var_,n0_,n1_}]:>Module[{SExpr},
   If[n1=!=Infinity,
        Print[" \nThe upper bound is not Infinity. Apply \"SUMInfinity\" if possible."];
        SUM[Expr,{var,n0,n1}],
   If[n0===-Infinity,
        Print[" \nThe lower bound is -Infinity. Specify a terminating lower bound \nif possible."];
        SUM[Expr,{var,n0,n1}],
   SExpr=Factor[Expr];
   SExpr=Dummy*(SExpr/.Binomial->Binomialp/.Factorial->Factorialp/.Gzerl/.pzerl/.Expandq/.
           Gamma->GAMMA/.
           Factorial2[x_]:>Module[{even},
              Print["Is ",Factor[x]," even, odd, or neither of both?"];
              even=Input["[e|o|n]: "];
              Switch[even,Global`e,2^(x/2)*p[1,x/2],
                     Global`o,2^((x+1)/2)*p[1/2,(x+1)/2],
                     Global`n,Factorial2[x],
                     _,Print["Warning: Erroneous input. Only e, o or n is allowed."];
                        Factorial2[x]]]);
   SExpr=Table[SExpr[[ii]],{ii,1,Length[SExpr]}];
   ConstF=1;
   TopF={};
   BottomF={};
   ArgF=1;
   TermF=1;
   Map[ExprtoF[#,var,SUMV]&,SExpr];
   If[MemberQ[TopF,0],
      Print[""];
      Print["Warning: ",ExpandAll[p[0,var]]," was obtained in the numerator."];
      Print["         The result might be incorrect. Maybe you should change"];
      Print["         the lower boundary of the summation index and only then"];
      Print["         apply \"SUMF\"."];
      ];
   If[MemberQ[BottomF,0],
      Print[""];
      Print["Warning: ",ExpandAll[p[0,var]]," was obtained in the denominator."];
      Print["         The result might be incorrect. Maybe you should change"];
      Print["         the lower boundary of the summation index and only then"];
      Print["         apply \"SUMF\"."];
      ];
   If[FreeQ[TopF,ptoFfail]&&FreeQ[BottomF,ptoFfail],
     ConstF*F[Join[TopF,{1}],BottomF,ArgF]/.SimplifyP/.FOrdne,
     ConstF*SUM[TermF*ArgF^var,{var,n0,n1}]/.SimplifyP
     ]
   ]
   ]
   ]);
sumR:=(SUM[Expr_,{var_,n0_,n1_}]:>Module[{SExpr},
   SExpr=Factor[Expr];
   SExpr=Dummy*(SExpr/.Binomial->Binomialp/.Factorial->Factorialp/.Gzerl/.pzerl/.Expandq/.
           Gamma->GAMMA/.
           Factorial2[x_]:>Module[{even},
              Print["Is ",Factor[x]," even, odd, or neither of both?"];
              even=Input["[e|o|n]: "];
              Switch[even,Global`e,2^x*p[1/2,x/2]*p[1,x/2],
                     Global`o,2^x*p[1/2,(x+1)/2]*p[1,(x-1)/2],
                     Global`n,Factorial2[x],
                     _,Print["Warning: Erroneous input. Only e, o or n is allowed."];
                        Factorial2[x]]]);
   SExpr=Table[SExpr[[ii]],{ii,1,Length[SExpr]}];
   ConstF=1;
   TopF={};
   BottomF={};
   ArgF=1;
   TermF=1;
   Map[ExprtoF[#,var,SUMREGELN]&,SExpr];
   If[MemberQ[BottomF,0],
      Print[""];
      Print["Warning: ",ExpandAll[p[0,var]]," was obtained in the denominator."];
      Print["         The result might be incorrect. Maybe you should apply"];
      Print["         \"SUMShift\" before applying \"SUMRegeln\"."];
      ];
   ConstF*SUM[TermF*ArgF^var,{var,n0,n1}]/.SimplifyP
   ]);

sumshift:=(SUM[Expr_,{var_,n0_,n1_}]:>SUM[Expr/.var->var+n0,{var,0,n1-n0}]/;
         n0=!=0&&n0=!=-Infinity);


SUMF:=(SUM[Args___]:>(If[ValueQ[p[PPP,1]],P];
               SUM[Args]//.Join[{sumshift},sumRegeln,{sumF}]));
SUMRegeln:=(SUM[Args___]:>(SUM[Args]//.Join[sumRegeln,{sumR}]));

sumH:=(SUM[Expr_,{var_,n0_,n1_}]:>Module[{SExpr},
   If[n1=!=Infinity,
        Print[" \nThe upper bound is not Infinity. Apply \"SUMInfinity\" if possible."];
        SUM[Expr,{var,n0,n1}],
   If[n0=!=-Infinity,
        Print[" \nThe lower bound is not -Infinity. The sum is converted into "];
        Print["a hypergeometric series."];
        SUM[Expr,{var,n0,n1}]/.SUMF,
   SExpr=Factor[Expr];
   SExpr=Dummy*(SExpr/.Binomial->Binomialp/.Factorial->Factorialp/.Gzerl/.pzerl/.Expandq/.
           Gamma->GAMMA/.
           Factorial2[x_]:>Module[{even},
              Print["Is ",Factor[x]," even, odd, or neither of both?"];
              even=Input["[e|o|n]: "];
              Switch[even,Global`e,2^(x/2)*p[1,x/2],
                     Global`o,2^((x+1)/2)*p[1/2,(x+1)/2],
                     Global`n,Factorial2[x],
                     _,Print["Warning: Erroneous input. Only e, o or n is allowed."];
                        Factorial2[x]]]);
   SExpr=Table[SExpr[[ii]],{ii,1,Length[SExpr]}];
   ConstF=1;
   TopF={};
   BottomF={};
   ArgF=1;
   TermF=1;
   Map[ExprtoF[#,var,SUMV]&,SExpr];
(*   If[MemberQ[TopF,0],
      Print[""];
      Print["Warning: ",ExpandAll[p[0,var]]," was obtained in the numerator."];
      Print["         The result might be incorrect. Maybe you should change"];
      Print["         the lower boundary of the summation index and only then"];
      Print["         apply \"SUMF\"."];
      ];
   If[MemberQ[BottomF,0],
      Print[""];
      Print["Warning: ",ExpandAll[p[0,var]]," was obtained in the denominator."];
      Print["         The result might be incorrect. Maybe you should change"];
      Print["         the lower boundary of the summation index and only then"];
      Print["         apply \"SUMF\"."];
      ];*)
   If[FreeQ[TopF,ptoFfail]&&FreeQ[BottomF,ptoFfail],
     ConstF*H[TopF,BottomF,ArgF]/.SimplifyP/.HOrdne,
     ConstF*SUM[TermF*ArgF^var,{var,n0,n1}]/.SimplifyP
     ]
   ]
   ]
   ]);

SUMH:=(SUM[Args___]:>(If[ValueQ[p[PPP,1]],P];
               SUM[Args]//.Join[sumRegeln,{sumH}]));


SUMSammle:=(c_*SUM[Expr_,{var_,n0_,n1_}]:>SUM[c*Expr,{var,n0,n1}]);
SUMInfinity:=(SUM[Expr_,{var_,n0_,n1_}]:>SUM[Expr,{var,n0,Infinity}]/;
              n1=!=Infinity);
FSUM:=(F[List1_List,List2_List,z_]:>Module[{SUMGrenze,SUMVar,SUMVars},
          SUMGrenze=Min[Flatten[Map[GrenzeO[#]&,List1]]];
          If[!IntegerQ[SUMGrenze],
            SUMVar=Input[StringJoin["A hypergeometric series is converted into a sum.\n",
                       "Enter a variable for the summation index: "]];
            ];
          SUMVars={SUMVar,0,SUMGrenze};
          SUM[(p[List1,Join[List2,{1}],SUMVar]/.pzerl)*z^SUMVar,
                Release[SUMVars]]/.SUM->Sum/.Sum->SUM]);
HSUM:=(H[List1_List,List2_List,z_]:>Module[{SUMGrenzeO,SUMGrenzeU,SUMVar,SUMVars},
          SUMGrenzeO=Min[Flatten[Map[GrenzeO,List1]]];
          SUMGrenzeU=Max[Flatten[Map[GrenzeU,List2]]];
          If[!IntegerQ[SUMGrenzeO]||!IntegerQ[SUMGrenzeU],
            SUMVar=Input[StringJoin["A basic hypergeometric series is converted into a sum.\n",
                       "Enter a variable for the summation index: "]];
            ];
          SUMVars={SUMVar,SUMGrenzeU+1,SUMGrenzeO};
          SUM[(p[List1,List2,SUMVar]/.pzerl)*
                z^SUMVar,
                Release[SUMVars]]/.SUM->Sum/.Sum->SUM]);

MComplement[x__]:=Module[{ZwErg={},i,j},
    For[i=1,i<=Length[{x}[[1]]],i++,
        If[!MemberQ[ZwErg,{x}[[1,i]]],
          ZwErg=Join[ZwErg,Table[{x}[[1,i]],
           {Count[{x}[[1]],{x}[[1,i]]]-
            Max[Table[Count[{x}[[j]],{x}[[1,i]]],{j,2,Length[{x}]}]]}]]
          ]
       ];
    ZwErg
];

SUMErw1:=SUM[Expr_,{var_,unt_,ob_}]:>
   Module[{m},m=Input["top-extend by: "];
      SUM[Expr,{var,unt,ob+m}]-SUM[Expr,{var,ob+1,ob+m}]
   ];
SUMErw2:=SUM[Expr_,{var_,unt_,ob_}]:>
   Module[{m},m=Input["bottom-extend by: "];
      SUM[Expr,{var,unt-m,ob}]-SUM[Expr,{var,unt-m,unt-1}]
   ];
Idem[x_]:=x;
SUMTausche:=SUM[SUM[Expr_,{var2_,unt2_,ob2_}],{var1_,unt1_,ob1_}]:>
  Module[{jcd,jab,AA,BB,aa,bb,cc,dd,Var1,Var2,VarH,Iu,Io,Erg},
If[$VersionNumber>=2.,$Messages=OutputStream["",1],$Messages={}];
   Var1=Expand[unt2];
   Var2=Expand[ob2];
   If[PolynomialQ[Var1,var1]&&PolynomialQ[Var2,var1]&&
      Exponent[Var1,var1]<=1&&Exponent[Var2,var1]<=1,
     aa=Coefficient[Var1,var1,1];
     bb=Coefficient[Var1,var1,0];
     cc=Coefficient[Var2,var1,1];
     dd=Coefficient[Var2,var1,0];
     AA=unt1;
     BB=ob1;
     jcd=If[cc===0,
          Dummy,
          (var2-dd)/cc
          ];
     jab=If[aa===0,
          Dummy,
          (var2-bb)/aa
          ];
     VarH=(aa*dd-cc*bb)/(aa-cc);
     Switch[{aa>=0,cc>=0},
       {True,True},
         If[cc=!=0,
           If[unt1<=If[aa===0,(bb-dd)/cc,(aa*unt1+bb-dd)/cc],
             AA=Dummy;
             ];
           ];
         If[aa=!=0,
           If[ob1>=If[cc===0,(dd-bb)/aa,(cc*ob1+dd-bb)/aa],
             BB=Dummy;
             ];
           ];
         Iu=Select[{AA,If[cc=!=0&&IntegerQ[1/cc],Idem,Ceiling][jcd]},FreeQ[#,Dummy]&];
         Io=Select[{BB,If[aa=!=0&&IntegerQ[1/aa],Idem,Floor][jab]},FreeQ[#,Dummy]&];
         Erg=SUM[SUM[Expr,{var1,Max[Iu],Min[Io]}],
                 {var2,If[aa===0,bb,aa*unt1+bb],If[cc===0,dd,cc*ob1+dd]}],
       {True,False},
         If[If[aa===0,bb,aa*AA+bb]>=VarH,
           jab=Dummy
           ];
         If[cc*AA+dd<=VarH,
           jcd=Dummy
           ];
         If[((aa=!=0)&&(BB>=If[cc===0,(dd-bb)/aa,(cc*AA+dd-bb)/aa]))||BB>=(aa*AA+bb-dd)/cc,
           BB=Dummy
           ];
         Iu=AA;
         Io=Select[{BB,If[aa=!=0&&IntegerQ[1/aa],Idem,Floor][jab],
                    If[IntegerQ[1/cc],Idem,Floor][jcd]},FreeQ[#,Dummy]&];
         Erg=SUM[SUM[Expr,{var1,Iu,Min[Io]}],
                 {var2,If[aa===0,bb,aa*unt1+bb],If[cc===0,dd,cc*unt1+dd]}],
       {False,True},
         If[aa*BB+bb>=VarH,
           jab=Dummy
           ];
         If[If[cc===0,dd,cc*BB+dd]<=VarH,
           jcd=Dummy
           ];
         If[AA<=If[cc===0,(dd-bb)/aa,(cc*BB+dd-bb)/aa]||((cc=!=0)&&(AA<=(aa*BB+bb-dd)/cc)),
           AA=Dummy
           ];
         Iu=Select[{AA,If[IntegerQ[1/aa],Idem,Ceiling][jab],
                    If[cc=!=0&&IntegerQ[1/cc],Idem,Ceiling][jcd]},FreeQ[#,Dummy]&];
         Io=BB;
         Erg=SUM[SUM[Expr,{var1,Max[Iu],Io}],
                 {var2,If[aa===0,bb,aa*ob1+bb],If[cc===0,dd,cc*ob1+dd]}],
       {False,False},
         If[unt1<=(cc*unt1+dd-bb)/aa,
           AA=Dummy;
           ];
         If[ob1>=(aa*ob1+bb-dd)/cc,
           BB=Dummy;
           ];
         Iu=Select[{AA,If[IntegerQ[1/aa],Idem,Ceiling][jab]},FreeQ[#,Dummy]&];
         Io=Select[{BB,If[IntegerQ[1/cc],Idem,Floor][jcd]},FreeQ[#,Dummy]&];
         Erg=SUM[SUM[Expr,{var1,Max[Iu],Min[Io]}],
                 {var2,If[aa===0,bb,aa*ob1+bb],If[cc===0,dd,cc*unt1+dd]}],
       _,Erg=SUM[SUM[Expr,{var1,unt1,ob1}],{var2,unt2,ob2}]
       ],
     Erg=SUM[SUM[Expr,{var1,unt1,ob1}],{var2,unt2,ob2}],
     Erg=SUM[SUM[Expr,{var1,unt1,ob1}],{var2,unt2,ob2}]
     ];
If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];
     Erg
  ];
Summe[Expr_,{var_,low_,upp_}]:=If[Factor[upp-low]>=0,SUM[Expr,{var,low,upp}],
              -SUM[Expr,{var,upp+1,low-1}],SUM[Expr,{var,low,upp}]];
SUMZerl:=SUM[Expr_,{var_,unt_,ob_}]:>
   Module[{m},m=Input["bottom-split by: "];
      Summe[Expr,{var,unt,unt+m-1}]+Summe[Expr,{var,unt+m,ob}]
   ];
SUMShift:=SUM[Expr_,{var_,unt_,ob_}]:>
   Module[{m},m=Input["shift summation index by: "];
      SUM[Expr/.var->var+m,{var,unt-m,ob-m}]
   ];
SUMUmkehr:=(If[ValueQ[p[PPP,1]],
        Print[""];
        Print["For your information:"];
        Print["Automatic evaluation of p and F is active!"];
        Print[""];
        If[$VersionNumber>=2.,$Messages=OutputStream["",1],$Messages={}];
        ];
    {F[List1_List,List2_List,z_]:>Module[{SUMGrenze,LIST1,LIST2},
     SUMGrenze=Min[Union[Flatten[Map[GrenzeO[#]&,List1]]]];
     If[SUMGrenze===Infinity||!FreeQ[SUMGrenze,Min],
        F[List1,List2,z],
        LIST1=MComplement[List1,{(-SUMGrenze)}];
        LIST2=List2;
        p[LIST1,LIST2,SUMGrenze]*
         (z)^SUMGrenze*(-1)^SUMGrenze*
         F[Join[{(-SUMGrenze)},Map[(1-SUMGrenze-#)&,LIST2]],
            Map[(1-SUMGrenze-#)&,LIST1],
            (-1)^(1+Length[List2]-Length[List1])/z]/.FOrdne
       ]
     ],
   SUM[Expr_,{var_,unt_,ob_}]:>Module[{SUMGrenze,ExList},
     ExList=Join[Cases[Dummy*Expr/.pzerl,p[vars__]]/.p[x_,y_]->{x},
                 Cases[Dummy*Expr/.pzerl,p[vars__]^y_?Positive]/.
                        p[x_,y_]^z_->{x}];
     SUMGrenze=Min[Union[Flatten[Map[Apply[GrenzeO,#]&,ExList]]]];
     SUMGrenze=Min[Union[{SUMGrenze,ob}]];
     If[SUMGrenze===Infinity||!FreeQ[SUMGrenze,Min],
        SUM[Expr,{var,unt,ob}],
        SUM[ExpandAll[Expr/.var->(SUMGrenze-var)],
                {var,0,SUMGrenze-unt}]/.SUMRegeln
       ]
     ]});

IntegerTestIf=True;
IntegerTest:=If[IntegerTestIf,IntegerTest1,IntegerTestTli];
IntegerTest1[x_]:=If[!MemberQ[{Rational,Real,Complex},Head[x]],
           If[Head[x]===Integer,
              If[x<=0,True,False,False],
              Switch[
                Input[StringJoin["Is ",ToString[InputForm[Expand[-x]]],
                        " a nonnegative integer?\n[y|n]:  "]],
                Global`y,True,Global`n,False]],
           False
        ];
IntegerTestTliDef:=(
IntegerTestTli[x_]:=If[!MemberQ[{Rational,Real,Complex},Head[x]],
           If[Head[x]===Integer,
              If[x<=0,True,False,False],
              Switch[
                Input[StringJoin["Is ",ToString[InputForm[Expand[-x]]],
                        " a nonnegative integer?\n[y|n]:  "]],
                Global`y,IntegerTestTli[x]=True,
                Global`n,IntegerTestTli[x]=False]],
           False
        ]);
IntegerTestTliDef;
IntegerTestClear:=(Clear[IntegerTestTli];
        IntegerTestIf=True;
        IntegerTestTliDef);

(*Funktionen f�r die Limes-Bildung*)
Unprotect[DirectedInfinity]
DirectedInfinity/:
  (-1)^DirectedInfinity[x___]:=Indeterminate;
DirectedInfinity/:
  q_^DirectedInfinity[1]:=Module[{m},
        Switch[AbsLimes[q],
               Global`n,ComplexInfinity,
               Global`y,0,
               Global`u,AbsLimes[q]=.;
                  Switch[AbsLimes[q],
                     Global`n,ComplexInfinity,
                     Global`y,0,
                     _,Indeterminate],
               _,Indeterminate]
        ];
DirectedInfinity/:
  q_^DirectedInfinity[-1]:=Module[{m},
        Switch[AbsLimes[q],
               Global`n,0,
               Global`y,ComplexInfinity,
               Global`u,AbsLimes[q]=.;
                  Switch[AbsLimes[q],
                     Global`n,0,
                     Global`y,ComplexInfinity,
                     _,Indeterminate],
               _,Indeterminate]
        ];
Protect[DirectedInfinity];
p[Indeterminate,n_]=Indeterminate
p[a_,Indeterminate]=Indeterminate
F[Indeterminate,List2_List,z_]=Indeterminate
F[List1_List,Indeterminate,z_]=Indeterminate
F[List1_List,List2_list,Indeterminate]=Indeterminate
p[DirectedInfinity[x___],n_]=Indeterminate
p[a_,DirectedInfinity[x___]]=Indeterminate
GAMMA[DirectedInfinity[x___],n_]=Indeterminate
GAMMA[a_,DirectedInfinity[x___]]=Indeterminate
F[DirectedInfinity[x___],List2_List,z_]=Indeterminate
F[List1_List,DirectedInfinity[x___],z_]=Indeterminate
F[List1_List,List2_List,DirectedInfinity[x___]]=Indeterminate

AbsSmaller[x_]:=Module[{AbsDiff},
        AbsDiff=Select[AbsList,!FreeQ[#,x]&];
        Map[(AbsLimes[#]=.)&,AbsDiff];
        AbsList=Complement[AbsList,AbsDiff];
        AbsLimes[x]=Global`y;
        AbsList=Union[AbsList,{x}];];
AbsGreater[x_]:=Module[{AbsDiff},
        AbsDiff=Select[AbsList,!FreeQ[#,x]&];
        Map[(AbsLimes[#]=.)&,AbsDiff];
        AbsList=Complement[AbsList,AbsDiff];
        AbsLimes[x]=Global`n;
        AbsList=Union[AbsList,{x}];];
AbsUndetermined[x_]:=Module[{AbsDiff},
        AbsDiff=Select[AbsList,!FreeQ[#,x]&];
        Map[(AbsLimes[#]=.)&,AbsDiff];
        AbsList=Complement[AbsList,AbsDiff];
        AbsLimes[x]=Global`u;];

AbsList={};
AbsLimes[q_]:=Module[{Bas,Expo},
   Bas=(q/.x_^exp_ :>x);
   If[NumberQ[Expo=Log[Bas,q]],
      If[MemberQ[AbsList,Bas],
         Switch[AbsLimes[Bas],
           Global`y,If[Expo>0,AbsSmaller[q],AbsGreater[q]],
           Global`n,If[Expo>0,AbsGreater[q],AbsSmaller[q]],
           Global`u,AbsUndetermined[q],
           _,Print["Error: AbsLimes[",Bas,"] is neither y, n nor u"]
           ],
			If[Global`DOSFrage,
          Print["Is ³",Bas,"³ smaller than 1?"],
          Print["Is |",Bas,"| smaller than 1?"]];
         AbsLimes[Bas]=Input["[y|n|u]: "];
         AbsList=Union[AbsList,{Bas}];
         Switch[AbsLimes[Bas],
            Global`y,If[Expo>0,AbsSmaller[q],AbsGreater[q]],
            Global`n,If[Expo>0,AbsGreater[q],AbsSmaller[q]],
            Global`u,AbsUndetermined[q],
            _,Print["Warning: Erroneous input. Only y, n, or u is allowed."]
            ]
        ],
		If[Global`DOSFrage,
       Print["Is ³",q,"³ smaller than 1?"],
       Print["Is |",q,"| smaller than 1?"]];
      AbsLimes[q]=Input["[y|n|u]: "];
     ];
   AbsLimes[q]
   ];


pLimes[p[A_,N_],Regel_Rule]:=Module[{pExpr=p[Expand[A],Expand[N]],ZwExpr,mExt},
   ZwExpr=(pExpr/.p[aa_,nn_]^(exp_:1):>
                        p[aa/.Regel,nn/.Regel]^exp);
   If[FreeQ[ZwExpr,Indeterminate]&&
            FreeQ[ZwExpr,DirectedInfinity],
      Return[ZwExpr],
      ZwExpr=(Cases[Dummy*pExpr,p[aa_,nn_]^(exp_:1)][[1]]/.
                  p[aa_,nn_]^(exp_:1):>nn/.Regel);
      If[FreeQ[ZwExpr,Indeterminate]&&FreeQ[ZwExpr,DirectedInfinity],
        Return[pExpr/.p[aa_,nn_]^(exp_:1):>
                      (mExt=Limit[Log[Regel[[1]],aa],Regel];
                      (Limit[aa/Regel[[1]]^mExt,Regel]*Regel[[1]]^mExt)^(nn*exp))],
        Switch[ZwExpr,
           -Infinity,pExpr=ExpandAll[pExpr/.neg1],
           Infinity,1,
           _,Return[Indeterminate]
           ];
        ZwExpr=(Cases[Dummy*pExpr,p[aa_,nn_]^(exp_:1)][[1]]/.
                  p[aa_,nn_]^(exp_:1):>aa/.Regel);
        If[(!FreeQ[ZwExpr,Indeterminate]||!FreeQ[ZwExpr,DirectedInfinity])&&
            ZwExpr=!=Infinity,
           pExpr=ExpandAll[pExpr/.trans];
          ];
        pExpr/.p[aa_,nn_]^(exp_:1)->GAMMA[aa+nn]^exp/GAMMA[aa]^exp
        ]
      ]
   ];

GAMMALimes[GAMMA[A_],Regel_Rule]:=Module[{GAMMAExpr=GAMMA[Expand[A]],ZwExpr,mExt},
   ZwExpr=(GAMMAExpr/.GAMMA[aa_]^(exp_:1):>aa/.Regel);
   If[FreeQ[ZwExpr,Indeterminate]&&
            FreeQ[ZwExpr,DirectedInfinity],
      Return[GAMMAExpr],
      mExt=Regel[[1]];
      Switch[mExt/.Regel,
         Infinity,1,-Infinity,mExt=-mExt,_,Return[GAMMAExpr]];
      If[ZwExpr===-Infinity,GAMMAExpr=GAMMAExpr/.inv];
      ZwExpr=(Cases[Dummy*GAMMAExpr,GAMMA[aa_]^(exp_:1)][[1]]/.
                  GAMMA[aa_]^(exp_:1):>aa-1);
      mExt=mExt*Limit[ZwExpr/mExt,Regel];
      GAMMAExpr/.GAMMA[aa_]->Sqrt[2*Pi]*mExt^(ZwExpr+1/2)/E^mExt
      ]
   ];


FLimes[F[List1_,List2_,z_],Regel_Rule]:=
 Module[{FErg=F[List1,List2,z],Liste1,Liste2,FArgu},
   FArgu=FErg[[3]];
   parLimesoben[par_,Regel1_Rule]:=
        If[FreeQ[Expand[par]/.Regel1,Indeterminate]&&FreeQ[Expand[par]/.Regel1,DirectedInfinity],
           par/.Regel1,
           FArgu*=par;Empty];
   parLimesunten[par_,Regel2_Rule]:=
        If[FreeQ[Expand[par]/.Regel2,Indeterminate]&&FreeQ[Expand[par]/.Regel2,DirectedInfinity],
           par/.Regel2,
           FArgu/=par;Empty];
        Liste1=Map[parLimesoben[#,Regel]&,FErg[[1]]];
        Liste1=Select[Liste1,(#=!=Empty)&];
        Liste2=Map[parLimesunten[#,Regel]&,FErg[[2]]];
        Liste2=Select[Liste2,(#=!=Empty)&];
        F[Liste1,Liste2,Limit[FArgu,Regel]]/.FOrdne
        ];

HLimes[H[List1_,List2_,z_],Regel_Rule]:=
 Module[{HErg=H[List1,List2,z],Liste1,Liste2,HArgu},
   HArgu=HErg[[3]];
   parLimesoben[par_,Regel1_Rule]:=
        If[FreeQ[Expand[par]/.Regel1,Indeterminate]&&FreeQ[Expand[par]/.Regel1,DirectedInfinity],
           par/.Regel1,
           HArgu*=par;Empty];
   parLimesunten[par_,Regel2_Rule]:=
        If[FreeQ[Expand[par]/.Regel2,Indeterminate]&&FreeQ[Expand[par]/.Regel2,DirectedInfinity],
           par/.Regel2,
           HArgu/=par;Empty];
        Liste1=Map[parLimesoben[#,Regel]&,HErg[[1]]];
        Liste1=Select[Liste1,(#=!=Empty)&];
        Liste2=Map[parLimesunten[#,Regel]&,HErg[[2]]];
        Liste2=Select[Liste2,(#=!=Empty)&];
        H[Liste1,Liste2,Limit[HArgu,Regel]]/.HOrdne
        ];

MinusOne:=((-1)^exp_ :>Module[{even},
        Print["Is ",Factor[exp]," even, odd, or neither of both?"];
        even=Input["[e|o|n]: "];
        Switch[even,Global`e,1,Global`o,-1,Global`n,(-1)^exp,
               _,Print["Warning: Erroneous input. Only e, o or n is allowed."]]]);
MinusOneLim[var_]:=((-1)^exp_ :>Module[{even},
        Print["Is ",Factor[exp]," even, odd, or neither of both?"];
        even=Input["[e|o|n]: "];
        Switch[even,Global`e,1,Global`o,-1,Global`n,(-1)^exp,
               _,Print["Warning: Erroneous input. Only e, o or n is allowed."]]]/;
        !FreeQ[exp,var]);

Limes[Expr_,Regel_Rule]:=Module[{Eingabe,ZwAusgabe,Ausgabe,even},
        If[$VersionNumber>=2.,$Messages=OutputStream["",1],$Messages={}];
        Eingabe=Expr/.DirectedInfinity->SInfinity;
        ZwAusgabe=(Eingabe/.pzerl/.Gzerl
                     /.(p[a_,n_]^(exp_:1):>pLimes[p[a,n],Regel]^exp)
                     /.(GAMMA[a_]^(exp_:1):>GAMMALimes[GAMMA[a],Regel]^exp)
                     /.(F[List1_,List2_,z_]^(exp_:1):>FLimes[F[List1,List2,z],Regel]^exp)
                     /.(H[List1_,List2_,z_]^(exp_:1):>HLimes[H[List1,List2,z],Regel]^exp)
                     /.(SUM[SExpr_,{Grenzen__}]^(exp_:1):>SUM[Limit[SExpr//.Expandq,Regel],
                        {Limit[{Grenzen}[[1]],Regel],Limit[{Grenzen}[[2]]//.Expandq,Regel],
                         Limit[{Grenzen}[[3]]//.Expandq/.DirectedInfinity->SInfinity,Regel]}]^exp)
                     //.Expandq/.MinusOneLim[Regel[[1]]]);
        Ausgabe=Limit[ZwAusgabe,Regel];
        If[!FreeQ[Ausgabe,Limit],Ausgabe=Ausgabe[[1]]/.Regel];
        If[!FreeQ[Ausgabe,DirectedInfinity],Ausgabe=ZwAusgabe/.Regel];
        If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];
        If[FreeQ[Ausgabe,DirectedInfinity]&&FreeQ[Ausgabe,Indeterminate]&&
                  FreeQ[Ausgabe,GDummy],
           If[Head[Expr]===Equal,LS=Ausgabe[[1]];RS=Ausgabe[[2]];];
           Ausgabe/.SInfinity->DirectedInfinity,
           Print[""];Print["The expression"];Print[""];
           Print[ZwAusgabe/.SInfinity->DirectedInfinity];Print[""];Print["was obtained."];
           Print[""];Print["Therefore the limit ", Regel, " could not be determined."];
           Print["Here is your expression:"];Expr]
        ];

(*Funktionen f�r das Schreiben in Dateien und zum Ausdrucken*)
SchreibeZahl=0;
TeXMat[Expr_,Datei_,Komment_:0]:=Module[{TeXExpr,MatDat,TeXDat},
   SchreibeZahl+=1;TeXExpr=TeXForm[Expr];
   MatDat=StringJoin[ToString[Datei],".m"];
   TeXDat=StringJoin[ToString[Datei],".tex"];
   If[Komment=!=0,
     PutAppend[Komment,MatDat];
     ];
   OpenAppend[MatDat];
   Write[MatDat,OutputForm[StringJoin["A[",ToString[SchreibeZahl],"]:="]]];
   Close[MatDat];
   PutAppend[Expr,MatDat];
   If[Komment=!=0,
     PutAppend[Komment,TeXDat];
     ];
   OpenAppend[TeXDat];
   Write[TeXDat,OutputForm[StringJoin["A[",ToString[SchreibeZahl],"]:="]]];
   Close[TeXDat];
   PutAppend[TeXExpr,TeXDat];
];

Drucke[x_,y_:OutputForm]:=Module[{}, OpenWrite["druck", FormatType -> y];
             Write["druck",x]; Close["druck"];
             Run["copy druck prn"]; Run["del druck"];
            ];


End[]

Protect[
SUM,
hypAttributes,
SUMRegeln,
SUMSammle,
SUMF,
SUMH,
FSUM,
HSUM,
HF,
FH,
HShift,
SUMInfinity,
Gleichung,
GlTausche,
Mal,
Add,
Div,
Sub,
Hoch,
negpos,
Freek,
IntegerTest,
Expandq,
p,
Binomialp,
Multinomialp,
Factorialp,
paufl,
pzerl,
pzus,
GAMMA,
Gzerl,
Gzus,
F,
H,
V,
P,
TeXFV,
FCancel,
FFormat,
TeX,
LaTeX,
AmSTeX,
AmSLaTeX,
ManipulationsListe,
neg1,
neg2,
trans,
inv,
lina1,
lina2,
linz,
zus1,
zus2,
zus3,
erw1,
erw2,
zerl,
baszerl,
baszus,
Ers,
Subst,
PSort,
FEinf,
HEinf,
FOrdne,
HOrdne,
FPerm,
HPerm,
FTausche,
PosListe,
SUMErw1,
SUMErw2,
SUMShift,
SUMTausche,
SUMZerl,
SUMUmkehr,
Limes,
AbsGreater,
AbsSmaller,
AbsUndetermined,
MinusOne,
TeXMat,
Drucke
]
EndPackage[]

(*Vorausdefinieren von summatio.m*)
BeginPackage["Summatio`m`"]

SListe::usage =
 "\nDescription: Rule that gives for a hypergeometric series a list of 
  \n  applicable summation formulas. Each entry of this list has the format 
  \n  {S<number>}, where \"S<number>\" is the name of the summation in form 
  \n  of a rule which can be applied subsequently. You should be aware that 
  \n  \"SListe\" automatically applies \"FOrdne\" before checking which 
  \n  summation could be applied.
  \nUsage: Expr/.SListe.
  \nSee also: TListe, FPerm, FTausche, SumListe."

Srs01::usage =
 "\nSummation formula (Gasper, (1)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
Srs03::usage =
 "\nSummation formula (Gasper, (2,3)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S1001::usage =
 "\nSummation formula (Slater, Appendix (III.1)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2101::usage =
 "\nSummation formula (Slater, Appendix (III.4)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2103::usage =
 "\nSummation formula (Slater, Appendix (III.3)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2104::usage =
 "\nSummation formula (Slater, Appendix (III.5)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2105::usage =
 "\nSummation formula (Gasper/Rahman, Ex. 1.6(i), q->1) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2106::usage =
 "\nSummation formula (Slater (1.5.21)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2131::usage =
 "\nSummation formula (Slater, Appendix (III.7)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2132::usage =
 "\nSummation formula (Slater, Appendix (III.6)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3201::usage =
 "\nSummation formula (Slater, Appendix (III.2)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3202::usage =
 "\nSummation formula (Slater, Appendix (III.8), terminated in the first
  \n  variable) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3204::usage =
 "\nSummation formula (Gasper/Rahman, Ex. 3.9, q->1) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3231::usage =
 "\nSummation formula (Slater, Appendix (III.8)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3232::usage =
 "\nSummation formula (Slater, Appendix (III.9)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3233::usage =
 "\nSummation formula (Slater, Appendix (III.23)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3234::usage =
 "\nSummation formula (Slater, Appendix (III.24)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3235::usage =
 "\nSummation formula (Slater, Appendix (III.16)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S4306::usage =
 "\nSummation formula (Slater, Appendix (III.17)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S4307::usage =
 "\nSummation formula (Slater, Appendix (III.10)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S4331::usage =
 "\nSummation formula (Slater, Appendix (III.22)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S4332::usage =
 "\nSummation formula (Slater, Appendix (III.18)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S5431::usage =
 "\nSummation formula (Slater, Appendix (III.12)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S5432::usage =
 "\nSummation formula (Slater, Appendix (III.13)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S6531::usage =
 "\nSummation formula (Gasper/Rahman, Appendix (III.16), q->1) in form 
  \n  of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S6532::usage =
 "\nSummation formula (Slater, Appendix (III.27), corrected) in form 
  \n  of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S7631::usage =
 "\nSummation formula (Slater, Appendix (III.14)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S7632::usage =
 "\nSummation formula (Slater, Appendix (III.19)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3261::usage =
 "\nSummation formula (Slater, Appendix (III.31)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3291::usage =
 "\nSummation formula (Gasper/Rahman, Ex. 2.9, q->1) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S7691::usage =
 "\nSummation formula (Slater, Appendix (III.32)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2210::usage =
 "\nSummation formula (Slater, (6.1.2.6), d->-Infinity) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S2240::usage =
 "\nSummation formula (Slater, Appendix (III.28)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S3340::usage =
 "\nSummation formula (Slater, Appendix (III.30)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
S5540::usage =
 "\nSummation formula (Slater, Appendix (III.29)) in form of a rule.
  \nSee also: SListe, SumListe, Ers, PosListe.";
SumListe::usage =
  "\nList of all summation formulas.
  \nSee also: SumListe$gl, SListe.";

SListe:=(<<summatio.m;SListe);
Srs01:=(<<summatio.m;Srs01);
Srs03:=(<<summatio.m;Srs03);
S1001:=(<<summatio.m;S1001);
S2101:=(<<summatio.m;S2101);
S2103:=(<<summatio.m;S2103);
S2104:=(<<summatio.m;S2104);
S2105:=(<<summatio.m;S2105);
S2106:=(<<summatio.m;S2106);
S2131:=(<<summatio.m;S2131);
S2132:=(<<summatio.m;S2132);
S3201:=(<<summatio.m;S3201);
S3202:=(<<summatio.m;S3202);
S3204:=(<<summatio.m;S3204);
S3231:=(<<summatio.m;S3231);
S3232:=(<<summatio.m;S3232);
S3233:=(<<summatio.m;S3233);
S3234:=(<<summatio.m;S3234);
S3235:=(<<summatio.m;S3235);
S4306:=(<<summatio.m;S4306);
S4307:=(<<summatio.m;S4307);
S4331:=(<<summatio.m;S4331);
S4332:=(<<summatio.m;S4332);
S5431:=(<<summatio.m;S5431);
S5432:=(<<summatio.m;S5432);
S6531:=(<<summatio.m;S6531);
S6532:=(<<summatio.m;S6532);
S7631:=(<<summatio.m;S7631);
S7632:=(<<summatio.m;S7632);
S3261:=(<<summatio.m;S3261);
S3291:=(<<summatio.m;S3291);
S7691:=(<<summatio.m;S7691);
S2210:=(<<summatio.m;S2210);
S2240:=(<<summatio.m;S2240);
S3340:=(<<summatio.m;S3340);
S5540:=(<<summatio.m;S5540);
SumListe={"S1001","S2101","S2103","S2104",
"S2105","S2106","S2131",
"S2132","S2210","S2240","S3201","S3202","S3204",
"S3231","S3232","S3233",
"S3234","S3235","S3261","S3291","S3340",
"S4306","S4307","S4331","S4332",
"S5431","S5432","S5540","S6531","S6532","S7631","S7632","S7691"};

EndPackage[]

(*Vorausdefinieren von summatio.mgl*)

BeginPackage["Summatio`mgl`"]

Sglrs01::usage =
 "\nSummation formula (Gasper, (1)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sglrs03::usage =
 "\nSummation formula (Gasper, (2,3)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl1001::usage =
 "\nSummation formula (Slater, Appendix (III.1)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2101::usage =
 "\nSummation formula (Slater, Appendix (III.4)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2103::usage =
 "\nSummation formula (Slater, Appendix (III.3)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2104::usage =
 "\nSummation formula (Slater, Appendix (III.5)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2105::usage =
 "\nSummation formula (Gasper/Rahman, Ex. 1.6(i), q->1) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2106::usage =
 "\nSummation formula (Slater, (1.5.21)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2131::usage =
 "\nSummation formula (Slater, Appendix (III.7)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2132::usage =
 "\nSummation formula (Slater, Appendix (III.6) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3201::usage =
 "\nSummation formula (Slater, Appendix (III.2)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3202::usage =
 "\nSummation formula (Slater, Appendix (III.8), terminated in the first
  \n  variable) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3204::usage =
 "\nSummation formula (Gasper/Rahman, Ex. 3.9, q->1) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3231::usage =
 "\nSummation formula (Slater, Appendix (III.8)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3232::usage =
 "\nSummation formula (Slater, Appendix (III.9)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3233::usage =
 "\nSummation formula (Slater, Appendix (III.23)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3234::usage =
 "\nSummation formula (Slater, Appendix (III.24)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3235::usage =
 "\nSummation formula (Slater, Appendix (III.16)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl4306::usage =
 "\nSummation formula (Slater, Appendix (III.17)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl4307::usage =
 "\nSummation formula (Slater, Appendix (III.10)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl4331::usage =
 "\nSummation formula (Slater, Appendix (III.22)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl4332::usage =
 "\nSummation formula (Slater, Appendix (III.18)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl5431::usage =
 "\nSummation formula (Slater, Appendix (III.12)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl5432::usage =
 "\nSummation formula (Slater, Appendix (III.13)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl6531::usage =
 "\nSummation formula (Gasper/Rahman, Appendix (III.16), q->1) in form of
  \n  an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl6532::usage =
 "\nSummation formula (Slater, Appendix (III.27), corrected) in form of 
  \n  an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl7631::usage =
 "\nSummation formula (Slater, Appendix (III.14)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl7632::usage =
 "\nSummation formula (Slater, Appendix (III.19)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3261::usage =
 "\nSummation formula (Slater, Appendix (III.31)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3291::usage =
 "\nSummation formula (Gasper/Rahman, Ex. 2.9, q->1) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl7691::usage =
 "\nSummation formula (Slater, Appendix (III.32)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2210::usage =
 "\nSummation formula (Slater, (6.1.2.6), d->-Infinity) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl2240::usage =
 "\nSummation formula (Slater, Appendix (III.28)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl3340::usage =
 "\nSummation formula (Slater, Appendix (III.30)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
Sgl5540::usage =
 "\nSummation formula (Slater, Appendix (III.29)) in form of an equation.
  \nSee also: SumListe$gl, Gleichung.";
SumListe$gl::usage =
  "\nList of all summation formulas.
  \nSee also: SumListe.";

Sglrs01:=(<<summatio.mgl;Sglrs01);
Sglrs03:=(<<summatio.mgl;Sglrs03);
Sgl1001:=(<<summatio.mgl;Sgl1001);
Sgl2101:=(<<summatio.mgl;Sgl2101);
Sgl2103:=(<<summatio.mgl;Sgl2103);
Sgl2104:=(<<summatio.mgl;Sgl2104);
Sgl2105:=(<<summatio.mgl;Sgl2105);
Sgl2106:=(<<summatio.mgl;Sgl2106);
Sgl2131:=(<<summatio.mgl;Sgl2131);
Sgl2132:=(<<summatio.mgl;Sgl2132);
Sgl3201:=(<<summatio.mgl;Sgl3201);
Sgl3202:=(<<summatio.mgl;Sgl3202);
Sgl3204:=(<<summatio.mgl;Sgl3204);
Sgl3202:=(<<summatio.mgl;Sgl3202);
Sgl3231:=(<<summatio.mgl;Sgl3231);
Sgl3232:=(<<summatio.mgl;Sgl3232);
Sgl3233:=(<<summatio.mgl;Sgl3233);
Sgl3234:=(<<summatio.mgl;Sgl3234);
Sgl3235:=(<<summatio.mgl;Sgl3235);
Sgl4306:=(<<summatio.mgl;Sgl4306);
Sgl4307:=(<<summatio.mgl;Sgl4307);
Sgl4331:=(<<summatio.mgl;Sgl4331);
Sgl4332:=(<<summatio.mgl;Sgl4332);
Sgl5431:=(<<summatio.mgl;Sgl5431);
Sgl5432:=(<<summatio.mgl;Sgl5432);
Sgl6531:=(<<summatio.mgl;Sgl6531);
Sgl6532:=(<<summatio.mgl;Sgl6532);
Sgl7631:=(<<summatio.mgl;Sgl7631);
Sgl7632:=(<<summatio.mgl;Sgl7632);
Sgl3261:=(<<summatio.mgl;Sgl3261);
Sgl3291:=(<<summatio.mgl;Sgl3291);
Sgl7691:=(<<summatio.mgl;Sgl7691);
Sgl2210:=(<<summatio.mgl;Sgl2210);
Sgl2240:=(<<summatio.mgl;Sgl2240);
Sgl3340:=(<<summatio.mgl;Sgl3340);
Sgl5540:=(<<summatio.mgl;Sgl5540);
SumListe$gl={"Sgl1001","Sgl2101","Sgl2103","Sgl2104",
"Sgl2105","Sgl2106","Sgl2131",
"Sgl2132","Sgl2210","Sgl2240","Sgl3201","Sgl3202","Sgl3204",
"Sgl3231","Sgl3232","Sgl3233",
"Sgl3234","Sgl3235","Sgl3261","Sgl3291","Sgl3340",
"Sgl4306","Sgl4307","Sgl4331","Sgl4332",
"Sgl5431","Sgl5432","Sgl5540",
"Sgl6531","Sgl6532","Sgl7631","Sgl7632","Sgl7691"}

EndPackage[]

(*Vorausdefinieren von transfor.m*)

BeginPackage["Transfor`m`"]

Trs01::usage =
 "\nSummation formula (Gasper, (18)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
TListe::usage =
 "\nDescription: Rule that gives for a hypergeometric series a list of 
  \n  applicable transformation formulas. Each entry of this list has the 
  \n  format {ArgumentPermutations,T<number>}, where \"ArgumentPermutations\" 
  \n  is a sequence of reorderings of the parameters of the hypergeometric
  \n  series (given in terms of \"FPerm\" and \"FTausche\") and \"T<number>\" 
  \n  is the name of the transformation in form of a rule which can be applied 
  \n  subsequently. You should be aware that \"TListe\" automatically applies
  \n  \"FOrdne\" before checking which transformation could be applied.
  \nUsage: Expr/.TListe.
  \nSee also: SListe, FPerm, FTausche, TransListe."

T2103::usage =
 "\nTransformation formula (Slater, (1.3.15)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2104::usage =
 "\nTransformation formula (Slater, (1.7.1.3)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2106::usage =
 "\nTransformation formula (Slater, (1.7.1.3), sum reversed at the right-hand 
  \n  side) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2107::usage =
 "\nTransformation formula (Slater, (1.8.10), terminating form) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2131::usage =
 "\nTransformation formula (Slater, (1.8.10), terminating form, sum reversed
  \n  at the right-hand side) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3204::usage =
 "\nTransformation formula (Bailey, Ex. 7, p. 98) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3205::usage =
 "\nTransformation formula (Slater, (2.3.3.7)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3206::usage =
 "\nTransformation formula (Bailey, Ex. 7, p. 98, terminating form) in 
  \n  form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3207::usage =
 "\nTransformation formula (Gasper/Rahman (3.1.1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3217::usage =
 "\nTransformation formula (Bailey, 4.4(2), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3239::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iv), p. 97) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4301::usage =
 "\nTransformation formula (Slater, (4.3.5.1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4302::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.16), q->1) in 
  \n  form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7631::usage =
 "\nTransformation formula (Slater, (2.4.1.1), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7632::usage =
 "\nTransformation formula (Slater, (2.4.1.1), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4303::usage =
 "\nTransformation formula (Slater, (2.4.1.1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4304::usage =
 "\nTransformation formula (Slater, (4.3.6.4)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7633::usage =
 "\nTransformation formula (Slater, (4.3.6.4), reversed) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3231::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.21), q->1) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3232::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iv), p. 97, reversed, first form) 
  \n  in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3233::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iv), p. 97, reversed, second form) 
  \n  in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3234::usage =
 "\nTransformation formula (Slater, (2.5.7), reversed) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4306::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.21), q->1, reversed) 
  \n  in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2132::usage =
 "\nTransformation formula (Slater, (2.5.7)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7634::usage =
 "\nTransformation formula (Bailey, 7.5.(1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7635::usage =
 "\nTransformation formula (Bailey, 7.5.(2)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T5401::usage =
 "\nTransformation formula (Slater, (2.4.3.4)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9832::usage =
 "\nTransformation formula (Slater, (2.4.3.4), reversed) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T5402::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.26), q->1) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9833::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.26), q->1, reversed) 
  \n  in form of a rule.
 \nSee also: TListe, TransListe, Ers, PosListe.";
T6531::usage =
 "\nTransformation formula (Slater, (2.4.3.5)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T6534::usage =
 "\nTransformation formula (Bailey, 4.4(2)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9834::usage =
 "\nTransformation formula (Slater, (2.4.3.5), reversed) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9831::usage =
 "\nTransformation formula (Slater, (2.4.4.1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2191::usage =
 "\nTransformation formula (Slater, (1.8.10)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3261::usage =
 "\nTransformation formula (Gasper/Rahman, (III.33), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3262::usage =
 "\nTransformation formula (Slater, (4.3.4.2)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7691::usage =
 "\nTransformation formula (Slater, (2.4.4.3)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7692::usage =
 "\nTransformation formula (Slater, (4.3.7.8)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9891::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.39), q->1) in form 
  \n  of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2110::usage =
 "\nTransformation formula (Rahman/Verma, (3.2)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2112::usage =
 "\nTransformation formula (Rahman/Verma, (5.10)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2133::usage =
 "\nTransformation formula (Rahman/Verma, (5.12)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2134::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iii), p. 97, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2135::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iii), p. 97) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2136::usage =
 "\nTransformation formula (Rahman/Verma, (5.10), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2137::usage =
 "\nTransformation formula (Rahman/Verma, (5.12), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2138::usage =
 "\nTransformation formula (Rahman/Verma, (3.31), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2139::usage =
 "\nTransformation formula (Rahman/Verma, (3.31)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2163::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.8, q->1; Slater pp. 36/37) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3235::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.4, q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3236::usage =
 "\nTransformation formula (Gasper/Rahman, (3.4.8), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3263::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.33), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3264::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.34), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3267::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 3.6, q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3268::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 3.6, q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2192::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.8, q->1, reversed; 
  \n  Slater pp. 36/37) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3238::usage =
 "\nTransformation formula (Bailey, Ex. 6, p. 97) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4309::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(i), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4310::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(ii), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4312::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.4, q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4313::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 8.15, q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4362::usage =
 "\nTransformation formula (Slater, (2.4.4.3), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4391::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.7), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4331::usage =
 "\nTransformation formula (Bailey, Ex. 6, p. 97, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T5403::usage =
 "\nTransformation formula (Bailey, 4.6(1), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T5468::usage =
 "\nTransformation formula (Gasper/Rahman, Ex, 2.25, q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T6501::usage =
 "\nTransformation formula (Slater, (2.4.3.3)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T6532::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(ii), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T6533::usage =
 "\nTransformation formula (Gasper/Rahman, (3.10.4), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7636::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.10), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7637::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(i), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7693::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.15, q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7694::usage =
 "\nTransformation formula (Slater, (4.3.7.8), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T8731::usage =
 "\nTransformation formula (Rahman/Verma, (7.7), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T8732::usage =
 "\nTransformation formula (Rahman/Verma, (7.8), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9835::usage =
 "\nTransformation formula (Bailey, 7.6(1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9836::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 3.21(iii), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9837::usage =
 "\nTransformation formula (Slater, (2.4.3.3), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9892::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.7), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9893::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.30, q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9894::usage =
 "\nTransformation formula (Gasper/Rahman, Ex, 2.25, q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T111031::usage =
 "\nTransformation formula (Rahman/Verma, (7.8), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T111032::usage =
 "\nTransformation formula (Rahman/Verma, (7.7), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9838::usage =
 "\nTransformation formula (Gasper/Rahmen, Ex. 8.15, q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2140::usage =
 "\nTransformation formula (Rahman/Verma, (3.2), reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T2141::usage =
 "\nTransformation formula (Gasper/Rahman, (3.4.8), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3237::usage =
 "\nTransformation formula (Gasper/Rahman, (3.10.4), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T3240::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.10), q->1, reversed) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T4332::usage =
 "\nTransformation formula (Bailey, 4.6(1)) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T7740::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.38), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
T9940::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.40), q->1) in form of a rule.
  \nSee also: TListe, TransListe, Ers, PosListe.";
TransListe::usage =
  "\nList of all transformation formulas.
  \nSee also: TransListe$gl, TListe.";

TListe:=(<<transfor.m;TListe);
Trs01:=(<<transfor.m;Trs01);
T2103:=(<<transfor.m;T2103);
T2104:=(<<transfor.m;T2104);
T2106:=(<<transfor.m;T2106);
T2107:=(<<transfor.m;T2107);
T2131:=(<<transfor.m;T2131);
T3204:=(<<transfor.m;T3204);
T3205:=(<<transfor.m;T3205);
T3206:=(<<transfor.m;T3206);
T3207:=(<<transfor.m;T3207);
T3217:=(<<transfor.m;T3217);
T6534:=(<<transfor.m;T6534);
T3239:=(<<transfor.m;T3239);
T4301:=(<<transfor.m;T4301);
T4302:=(<<transfor.m;T4302);
T7631:=(<<transfor.m;T7631);
T7632:=(<<transfor.m;T7632);
T4303:=(<<transfor.m;T4303);
T4304:=(<<transfor.m;T4304);
T7633:=(<<transfor.m;T7633);
T3231:=(<<transfor.m;T3231);
T3232:=(<<transfor.m;T3232);
T3233:=(<<transfor.m;T3233);
T3234:=(<<transfor.m;T3234);
T4306:=(<<transfor.m;T4306);
T2132:=(<<transfor.m;T2132);
T7634:=(<<transfor.m;T7634);
T7635:=(<<transfor.m;T7635);
T5401:=(<<transfor.m;T5401);
T9832:=(<<transfor.m;T9832);
T5402:=(<<transfor.m;T5402);
T9833:=(<<transfor.m;T9833);
T6531:=(<<transfor.m;T6531);
T9834:=(<<transfor.m;T9834);
T9831:=(<<transfor.m;T9831);
T2191:=(<<transfor.m;T2191);
T3261:=(<<transfor.m;T3261);
T3262:=(<<transfor.m;T3262);
T3263:=(<<transfor.m;T3263);
T7691:=(<<transfor.m;T7691);
T7692:=(<<transfor.m;T7692);
T9891:=(<<transfor.m;T9891);
T2110:=(<<transfor.m;T2110);
T2112:=(<<transfor.m;T2112);
T2133:=(<<transfor.m;T2133);
T2134:=(<<transfor.m;T2134);
T2135:=(<<transfor.m;T2135);
T2136:=(<<transfor.m;T2136);
T2137:=(<<transfor.m;T2137);
T2138:=(<<transfor.m;T2138);
T2139:=(<<transfor.m;T2139);
T2163:=(<<transfor.m;T2163);
T3235:=(<<transfor.m;T3235);
T3236:=(<<transfor.m;T3236);
T3263:=(<<transfor.m;T3263);
T3264:=(<<transfor.m;T3264);
T3267:=(<<transfor.m;T3267);
T3268:=(<<transfor.m;T3268);
T2192:=(<<transfor.m;T2192);
T3238:=(<<transfor.m;T3238);
T4309:=(<<transfor.m;T4309);
T4310:=(<<transfor.m;T4310);
T4312:=(<<transfor.m;T4312);
T4313:=(<<transfor.m;T4313);
T4362:=(<<transfor.m;T4362);
T4391:=(<<transfor.m;T4391);
T4331:=(<<transfor.m;T4331);
T5403:=(<<transfor.m;T5403);
T5468:=(<<transfor.m;T5468);
T6501:=(<<transfor.m;T6501);
T6532:=(<<transfor.m;T6532);
T6533:=(<<transfor.m;T6533);
T7636:=(<<transfor.m;T7636);
T7637:=(<<transfor.m;T7637);
T7693:=(<<transfor.m;T7693);
T7694:=(<<transfor.m;T7694);
T8731:=(<<transfor.m;T8731);
T8732:=(<<transfor.m;T8732);
T9835:=(<<transfor.m;T9835);
T9836:=(<<transfor.m;T9836);
T9837:=(<<transfor.m;T9837);
T9892:=(<<transfor.m;T9892);
T9893:=(<<transfor.m;T9893);
T9894:=(<<transfor.m;T9894);
T111031:=(<<transfor.m;T111031);
T111032:=(<<transfor.m;T111032);
T9838:=(<<transfor.m;T9838);
T2140:=(<<transfor.m;T2140);
T2141:=(<<transfor.m;T2141);
T3237:=(<<transfor.m;T3237);
T3240:=(<<transfor.m;T3240);
T4332:=(<<transfor.m;T4332);
T7740:=(<<transfor.m;T7740);
T9940:=(<<transfor.m;T9940);
TransListe:={"T2103","T2104","T2106","T2107","T2110","T2112",
  "T2131","T2132","T2133","T2134","T2135",
  "T2136","T2137","T2138","T2139","T2140","T2141","T2163",
  "T2191","T2192","T3204","T3205",
  "T3206","T3207","T3217","T3231","T3232","T3233","T3234",
  "T3235","T3236","T3237",
  "T3238","T3239","T3240","T3261","T3262","T3263","T3264",
  "T3267","T3268",
  "T4301","T4302","T4303","T4304",
  "T4306","T4309","T4310","T4312","T4313","T4331","T4332","T4362",
  "T4391","T5401","T5402","T5403",
  "T5468","T6501","T6531","T6532","T6533","T6534",
  "T7631","T7632","T7633","T7634","T7635",
  "T7636","T7637","T7691","T7692","T7693",
  "T7694","T7740","T8731","T8732",
  "T9831","T9832","T9833","T9834","T9835",
  "T9836","T9837","T9838","T9891","T9892","T9893",
  "T9894","T9940","T111031","T111032"};

EndPackage[]

(*Vorausdefinieren von transfor.mgl*)

BeginPackage["Transfor`mgl`"]

Tglrs01::usage =
 "\nTransformation formula (Gasper, (18)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2103::usage =
 "\nTransformation formula (Slater, (3)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2104::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.4), q->1) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2106::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.6), q->1) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2107::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.7), q->1) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2131::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.6), reversed, q->1) 
  \n  in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3204::usage =
 "\nTransformation formula (Bailey, Ex. 7, p. 98) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3205::usage =
 "\nTransformation formula (Slater, (2.3.3.7)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3206::usage =
 "\nTransformation formula (Bailey, Ex. 7, p. 98, terminating form) in 
  \n  form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3207::usage =
 "\nTransformation formula (Gasper/Rahman (3.1.1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3217::usage =
 "\nTransformation formula (Bailey, 4.4(2), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3239::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iv), p. 97) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4301::usage =
 "\nTransformation formula (Slater, (4.3.5.1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4302::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.16), q->1) in 
  \n  form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7631::usage =
 "\nTransformation formula (Slater, (2.4.1.1), reversed) in form of 
  \n  an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7632::usage =
 "\nTransformation formula (Slater, (2.4.1.1), reversed) in form of 
  \n  an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4303::usage =
 "\nTransformation formula (Slater, (2.4.1.1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4304::usage =
 "\nTransformation formula (Slater, (4.3.6.4)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7633::usage =
 "\nTransformation formula (Slater, (4.3.6.4), reversed) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3231::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.21)) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3232::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iv), p. 97, reversed, first form) 
  \n  in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3233::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iv), p. 97, reversed, second form) 
  \n  in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3234::usage =
 "\nTransformation formula (Slater, (2.5.7), reversed) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4306::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.21), q->1, reversed) 
  \n  in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2132::usage =
 "\nTransformation formula (Slater, (2.5.7)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7634::usage =
 "\nTransformation formula (Bailey, 7.5.(1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7635::usage =
 "\nTransformation formula (Bailey, 7.5.(2)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl5401::usage =
 "\nTransformation formula (Slater, (2.4.3.4)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9832::usage =
 "\nTransformation formula (Slater, (2.4.3.4), reversed) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl5402::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.26), q->1) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9833::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.26), q->1, reversed) 
  \n  in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl6531::usage =
 "\nTransformation formula (Slater, (2.4.3.5)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl6534::usage =
 "\nTransformation formula (Bailey, 4.4(2)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9834::usage =
 "\nTransformation formula (Slater, (2.4.3.5), reversed) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9831::usage =
 "\nTransformation formula (Slater, (2.4.4.1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2191::usage =
 "\nTransformation formula (Slater, (1.8.10)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3261::usage =
 "\nTransformation formula (Gasper/Rahman, (III.33), q->1) in form of 
  \n  an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3262::usage =
 "\nTransformation formula (Slater, (4.3.4.2)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7691::usage =
 "\nTransformation formula (Slater, (2.4.4.3)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7692::usage =
 "\nTransformation formula (Slater, (4.3.7.8)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9891::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.39), q->1) in form 
  \n  of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2110::usage =
 "\nTransformation formula (Rahman/Verma, (3.2)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2112::usage =
 "\nTransformation formula (Rahman/Verma, (5.10)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2133::usage =
 "\nTransformation formula (Rahman/Verma, (5.12)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2134::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iii), p. 97, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2135::usage =
 "\nTransformation formula (Bailey, Ex. 4.(iii), p. 97) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2136::usage =
 "\nTransformation formula (Rahman/Verma, (5.10), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2137::usage =
 "\nTransformation formula (Rahman/Verma, (5.12), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2138::usage =
 "\nTransformation formula (Rahman/Verma, (3.31), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2139::usage =
 "\nTransformation formula (Rahman/Verma, (3.31)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2163::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.8, q->1; Slater pp. 36/37) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3235::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.4, q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3236::usage =
 "\nTransformation formula (Gasper/Rahman, (3.4.8), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3263::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.33), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3264::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.34), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3267::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 3.6, q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3268::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 3.6, q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2192::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.8, q->1, reversed; 
  \n  Slater pp. 36/37) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3238::usage =
 "\nTransformation formula (Bailey, Ex. 6, p. 97) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4309::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(i), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4310::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(ii), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4312::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 3.4, q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4313::usage =
 "\nTransformation formula (Gasper/Rahman, Ex 8.15, q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4362::usage =
 "\nTransformation formula (Slater, (2.4.4.3), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4391::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.7), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4331::usage =
 "\nTransformation formula (Bailey, Ex. 6, p. 97, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl5403::usage =
 "\nTransformation formula (Bailey, 4.6(1), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl5468::usage =
 "\nTransformation formula (Gasper/Rahman, Ex, 2.25, q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl6501::usage =
 "\nTransformation formula (Slater, (2.4.3.3)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl6532::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(ii), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl6533::usage =
 "\nTransformation formula (Gasper/Rahman, (3.10.4), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7636::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.10), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7637::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.13(i), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7693::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.15, q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7694::usage =
 "\nTransformation formula (Slater, (4.3.7.8), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl8731::usage =
 "\nTransformation formula (Rahman/Verma, (7.7), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl8732::usage =
 "\nTransformation formula (Rahman/Verma, (7.8), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9835::usage =
 "\nTransformation formula (Bailey, 7.6(1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9836::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 3.21(iii), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9837::usage =
 "\nTransformation formula (Slater, (2.4.3.3), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9892::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.7), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9893::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 2.30, q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9894::usage =
 "\nTransformation formula (Gasper/Rahman, Ex, 2.25, q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl111031::usage =
 "\nTransformation formula (Rahman/Verma, (7.8), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl111032::usage =
 "\nTransformation formula (Rahman/Verma, (7.7), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9838::usage =
 "\nTransformation formula (Gasper/Rahman, Ex. 8.15, q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2140::usage =
 "\nTransformation formula (Rahman/Verma, (3.2), reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl2141::usage =
 "\nTransformation formula (Gasper/Rahman, (3.4.8), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3237::usage =
 "\nTransformation formula (Gasper/Rahman, (3.10.4), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl3240::usage =
 "\nTransformation formula (Gasper/Rahman, (3.5.10), q->1, reversed) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl4332::usage =
 "\nTransformation formula (Bailey, 4.6(1)) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl7740::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.38), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
Tgl9940::usage =
 "\nTransformation formula (Gasper/Rahman, Appendix (III.40), q->1) in form of an equation.
  \nSee also: TransListe$gl, Gleichung.";
TransListe$gl::usage =
  "\nList of all transformation formulas.
  \nSee also: TransListe.";

Tglrs01:=(<<transfor.mgl;Tglrs01);
Tgl2103:=(<<transfor.mgl;Tgl2103);
Tgl2104:=(<<transfor.mgl;Tgl2104);
Tgl2106:=(<<transfor.mgl;Tgl2106);
Tgl2107:=(<<transfor.mgl;Tgl2107);
Tgl2131:=(<<transfor.mgl;Tgl2131);
Tgl3204:=(<<transfor.mgl;Tgl3204);
Tgl3205:=(<<transfor.mgl;Tgl3205);
Tgl3206:=(<<transfor.mgl;Tgl3206);
Tgl3207:=(<<transfor.mgl;Tgl3207);
Tgl3217:=(<<transfor.mgl;Tgl3217);
Tgl6534:=(<<transfor.mgl;Tgl6534);
Tgl3239:=(<<transfor.mgl;Tgl3239);
Tgl4301:=(<<transfor.mgl;Tgl4301);
Tgl4302:=(<<transfor.mgl;Tgl4302);
Tgl7631:=(<<transfor.mgl;Tgl7631);
Tgl7632:=(<<transfor.mgl;Tgl7632);
Tgl4303:=(<<transfor.mgl;Tgl4303);
Tgl4304:=(<<transfor.mgl;Tgl4304);
Tgl7633:=(<<transfor.mgl;Tgl7633);
Tgl3231:=(<<transfor.mgl;Tgl3231);
Tgl3232:=(<<transfor.mgl;Tgl3232);
Tgl3233:=(<<transfor.mgl;Tgl3233);
Tgl3234:=(<<transfor.mgl;Tgl3234);
Tgl4306:=(<<transfor.mgl;Tgl4306);
Tgl2132:=(<<transfor.mgl;Tgl2132);
Tgl7634:=(<<transfor.mgl;Tgl7634);
Tgl7635:=(<<transfor.mgl;Tgl7635);
Tgl5401:=(<<transfor.mgl;Tgl5401);
Tgl9832:=(<<transfor.mgl;Tgl9832);
Tgl5402:=(<<transfor.mgl;Tgl5402);
Tgl9833:=(<<transfor.mgl;Tgl9833);
Tgl6531:=(<<transfor.mgl;Tgl6531);
Tgl9834:=(<<transfor.mgl;Tgl9834);
Tgl9831:=(<<transfor.mgl;Tgl9831);
Tgl2191:=(<<transfor.mgl;Tgl2191);
Tgl3261:=(<<transfor.mgl;Tgl3261);
Tgl3262:=(<<transfor.mgl;Tgl3262);
Tgl7691:=(<<transfor.mgl;Tgl7691);
Tgl7692:=(<<transfor.mgl;Tgl7692);
Tgl9891:=(<<transfor.mgl;Tgl9891);
Tgl2110:=(<<transfor.mgl;Tgl2110);
Tgl2112:=(<<transfor.mgl;Tgl2112);
Tgl2133:=(<<transfor.mgl;Tgl2133);
Tgl2134:=(<<transfor.mgl;Tgl2134);
Tgl2135:=(<<transfor.mgl;Tgl2135);
Tgl2136:=(<<transfor.mgl;Tgl2136);
Tgl2137:=(<<transfor.mgl;Tgl2137);
Tgl2138:=(<<transfor.mgl;Tgl2138);
Tgl2139:=(<<transfor.mgl;Tgl2139);
Tgl2163:=(<<transfor.mgl;Tgl2163);
Tgl3235:=(<<transfor.mgl;Tgl3235);
Tgl3236:=(<<transfor.mgl;Tgl3236);
Tgl3263:=(<<transfor.mgl;Tgl3263);
Tgl3264:=(<<transfor.mgl;Tgl3264);
Tgl3267:=(<<transfor.mgl;Tgl3267);
Tgl3268:=(<<transfor.mgl;Tgl3268);
Tgl2192:=(<<transfor.mgl;Tgl2192);
Tgl3238:=(<<transfor.mgl;Tgl3238);
Tgl4309:=(<<transfor.mgl;Tgl4309);
Tgl4310:=(<<transfor.mgl;Tgl4310);
Tgl4312:=(<<transfor.mgl;Tgl4312);
Tgl4313:=(<<transfor.mgl;Tgl4313);
Tgl4362:=(<<transfor.mgl;Tgl4362);
Tgl4391:=(<<transfor.mgl;Tgl4391);
Tgl4331:=(<<transfor.mgl;Tgl4331);
Tgl5403:=(<<transfor.mgl;Tgl5403);
Tgl5468:=(<<transfor.mgl;Tgl5468);
Tgl6501:=(<<transfor.mgl;Tgl6501);
Tgl6532:=(<<transfor.mgl;Tgl6532);
Tgl6533:=(<<transfor.mgl;Tgl6533);
Tgl7636:=(<<transfor.mgl;Tgl7636);
Tgl7637:=(<<transfor.mgl;Tgl7637);
Tgl7693:=(<<transfor.mgl;Tgl7693);
Tgl7694:=(<<transfor.mgl;Tgl7694);
Tgl8731:=(<<transfor.mgl;Tgl8731);
Tgl8732:=(<<transfor.mgl;Tgl8732);
Tgl9835:=(<<transfor.mgl;Tgl9835);
Tgl9836:=(<<transfor.mgl;Tgl9836);
Tgl9837:=(<<transfor.mgl;Tgl9837);
Tgl9892:=(<<transfor.mgl;Tgl9892);
Tgl9893:=(<<transfor.mgl;Tgl9893);
Tgl9894:=(<<transfor.mgl;Tgl9894);
Tgl111031:=(<<transfor.mgl;Tgl111031);
Tgl111032:=(<<transfor.mgl;Tgl111032);
Tgl9838:=(<<transfor.mgl;Tgl9838);
Tgl2140:=(<<transfor.mgl;Tgl2140);
Tgl2141:=(<<transfor.mgl;Tgl2141);
Tgl3237:=(<<transfor.mgl;Tgl3237);
Tgl3240:=(<<transfor.mgl;Tgl3240);
Tgl4332:=(<<transfor.mgl;Tgl4332);
Tgl7740:=(<<transfor.mgl;Tgl7740);
Tgl9940:=(<<transfor.mgl;Tgl9940);
TransListe$gl:={"Tgl2103","Tgl2104","Tgl2106","Tgl2107","Tgl2110","Tgl2112",
  "Tgl2131","Tgl2132","Tgl2133","Tgl2134","Tgl2135",
  "Tgl2136","Tgl2137","Tgl2138","Tgl2139","Tgl2140","Tgl2141","Tgl2163",
  "Tgl2191","Tgl2192","Tgl3204","Tgl3205",
  "Tgl3206","Tgl3207","Tgl3217","Tgl3231","Tgl3232","Tgl3233","Tgl3234",
  "Tgl3235","Tgl3236","Tgl3237",
  "Tgl3238","Tgl3239","Tgl3240","Tgl3261","Tgl3262","Tgl3263","Tgl3264",
  "Tgl3267","Tgl3268",
  "Tgl4301","Tgl4302","Tgl4303","Tgl4304",
  "Tgl4306","Tgl4309","Tgl4310","Tgl4312",
  "Tgl4313","Tgl4331","Tgl4332","Tgl4362",
  "Tgl4391","Tgl5401","Tgl5402","Tgl5403",
  "Tgl5468","Tgl6501","Tgl6531","Tgl6532","Tgl6533","Tgl6534",
  "Tgl7631","Tgl7632","Tgl7633","Tgl7634","Tgl7635",
  "Tgl7636","Tgl7637","Tgl7691","Tgl7692","Tgl7693",
  "Tgl7694","Tgl77740","Tgl8731","Tgl8732",
  "Tgl9831","Tgl9832","Tgl9833","Tgl9834","Tgl9835",
  "Tgl9836","Tgl9837","Tgl9838","Tgl9891","Tgl9892","Tgl9893",
  "Tgl9894","Tgl9940","Tgl111031","Tgl111032"};

EndPackage[]

(*Vorausdefinieren von transfor.mli*)

BeginPackage["Transfor`mli`"]

Tli2103::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (1.3.15)).
  \nSee also: T2103.";
Tli2104::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (1.7.1.3)).
  \nSee also: T2104.";
Tli2106::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (1.7.1.3), sum reversed at the right-hand 
  \n  side).
  \nSee also: T2106.";
Tli2107::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (1.8.10), terminating form).
  \nSee also: T2107.";
Tli2131::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (1.8.10), terminating form, sum reversed
  \n  at the right-hand side).
  \nSee also: T2131.";
Tli3204::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 7, p. 98).
  \nSee also: T3204.";
Tli3205::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.3.3.7)).
  \nSee also: T3205.";
Tli3206::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 7, p. 98, terminating form).
  \nSee also: T3206.";
Tli3207::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman (3.1.1)).
  \nSee also: T3207.";
Tli3217::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 4.4(2), reversed).
  \nSee also: T3217.";
Tli3239::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 4.(iv), p. 97).
  \nSee also: T3239.";
Tli4301::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (4.3.5.1)).
  \nSee also: T4301.";
Tli4302::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.16), q->1).
  \nSee also: T4302.";
Tli7631::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.1.1), reversed).
  \nSee also: T7631.";
Tli7632::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.1.1), reversed).
  \nSee also: T7632.";
Tli4303::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.1.1)).
  \nSee also: T4303.";
Tli4304::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (4.3.6.4)).
  \nSee also: T4304.";
Tli7633::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (4.3.6.4), reversed).
  \nSee also: T7633.";
Tli3231::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.21), q->1).
  \nSee also: T3231.";
Tli3232::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex, 4.(iv), p. 97, reversed, first form).
  \nSee also: T3232.";
Tli3233::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex, 4.(iv), p. 97, reversed, second form).
  \nSee also: T3233.";
Tli3234::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.5.7), reversed).
  \nSee also: T3234.";
Tli4306::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.21), q->1, reversed) 
  \n .
  \nSee also: T4306.";
Tli2132::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.5.7)).
  \nSee also: T2132.";
Tli7634::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 7.5.(1)).
  \nSee also: T7634.";
Tli7635::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 7.5.(2)).
  \nSee also: T7635.";
Tli5401::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.3.4)).
  \nSee also: T5401.";
Tli9832::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.3.4), reversed).
  \nSee also: T9832.";
Tli5402::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.26), q->1).
  \nSee also: T5402.";
Tli9833::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.26), q->1, reversed) 
  \n .
  \nSee also: T9833.";
Tli6531::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.3.5)).
  \nSee also: T6531.";
Tli6534::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 4.4(2)).
  \nSee also: T6534.";
Tli9834::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.3.5), reversed).
  \nSee also: T9834.";
Tli9831::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.4.1)).
  \nSee also: T9831.";
Tli2191::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (1.8.10)).
  \nSee also: T2191.";
Tli3261::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (III.33), q->1).
  \nSee also: T3261.";
Tli3262::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (4.3.4.2)).
  \nSee also: T3262.";
Tli7691::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.4.3)).
  \nSee also: T7691.";
Tli7692::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (4.3.7.8)).
  \nSee also: T7692.";
Tli9891::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.39), q->1).
  \nSee also: T9891.";
Tli2110::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (3.2)).
  \nSee also: T2110.";
Tli2112::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (5.10)).
  \nSee also: T2112.";
Tli2133::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (5.12)).
  \nSee also: T2133.";
Tli2134::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 4.(iii), p. 97, reversed).
  \nSee also: T2134.";
Tli2135::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 4.(iii), p. 97).
  \nSee also: T2135.";
Tli2136::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (5.10), reversed).
  \nSee also: T2136.";
Tli2137::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (5.12), reversed).
  \nSee also: T2137.";
Tli2138::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (3.31), reversed).
  \nSee also: T2138.";
Tli2139::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (3.31)).
  \nSee also: T2139.";
Tli2140::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (3.2), reversed).
  \nSee also: T2140.";
Tli2141::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.4.8), q->1, reversed).
  \nSee also: T2141.";
Tli2163::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex 3.8, q->1; Slater pp. 36/37).
  \nSee also: T2163.";
Tli2192::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex 3.8, q->1, reversed; Slater pp. 36/37).
  \nSee also: T2192.";
Tli3235::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex 3.4, q->1, reversed).
  \nSee also: T3235.";
Tli3236::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.4.8), q->1).
  \nSee also: T3236.";
Tli3237::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.10.4), q->1, reversed).
  \nSee also: T3237.";
Tli3238::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 6, p. 97).
  \nSee also: T3238.";
Tli3240::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.5.10), q->1, reversed).
  \nSee also: T3240.";
Tli3263::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.33), q->1, reversed).
  \nSee also: T3263.";
Tli3264::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Appendix (III.34), q->1, reversed).
  \nSee also: T3264.";
Tli3267::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 3.6, q->1).
  \nSee also: T3267.";
Tli3268::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 3.6, q->1, reversed).
  \nSee also: T3268.";
Tli4309::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 2.13(i), q->1).
  \nSee also: T4309.";
Tli4310::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 2.13(ii), q->1).
  \nSee also: T4310.";
Tli4312::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex 3.4, q->1).
  \nSee also: T4312.";
Tli4313::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex 8.15, q->1).
  \nSee also: T4313.";
Tli4331::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, Ex. 6, p. 97, reversed).
  \nSee also: T4331.";
Tli4332::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 4.6(1)).
  \nSee also: T4332.";
Tli4362::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.4.3), reversed).
  \nSee also: T4362.";
Tli4391::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.5.7), q->1, reversed).
  \nSee also: T4391.";
Tli5403::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 4.6(1), reversed).
  \nSee also: T5403.";
Tli5468::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex, 2.25, q->1).
  \nSee also: T5468.";
Tli6501::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.3.3)).
  \nSee also: T6501.";
Tli6532::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 2.13(ii), q->1, reversed).
  \nSee also: T6532.";
Tli6533::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.10.4), q->1).
  \nSee also: T6533.";
Tli7636::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.5.10), q->1).
  \nSee also: T7636.";
Tli7637::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 2.13(i), q->1, reversed).
  \nSee also: T7637.";
Tli7693::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 2.15, q->1).
  \nSee also: T7693.";
Tli7694::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (4.3.7.8), reversed).
  \nSee also: T7694.";
Tli8731::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (7.7), q->1, reversed).
  \nSee also: T8731.";
Tli8732::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (7.8), q->1, reversed).
  \nSee also: T8732.";
Tli9835::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Bailey, 7.6(1)).
  \nSee also: T9835.";
Tli9836::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 3.21(iii), q->1).
  \nSee also: T9836.";
Tli9837::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Slater, (2.4.3.3), reversed).
  \nSee also: T9837.";
Tli9892::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, (3.5.7), q->1).
  \nSee also: T9892.";
Tli9893::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 2.30, q->1).
  \nSee also: T9893.";
Tli9894::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex, 2.25, q->1, reversed).
  \nSee also: T9894.";
Tli111031::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (7.8), q->1).
  \nSee also: T111031.";
Tli111032::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Rahman/Verma, (7.7), q->1).
  \nSee also: T111032.";
Tli9838::usage =
 "\nRule that gives a list of all possible outcomes under application of the
  \n  transformation formula (Gasper/Rahman, Ex. 8.15, q->1, reversed).
  \nSee also: T9838.";


  
Tli2103:=(<<transfor.mli;Tli2103);
Tli2104:=(<<transfor.mli;Tli2104);
Tli2106:=(<<transfor.mli;Tli2106);
Tli2107:=(<<transfor.mli;Tli2107);
Tli2131:=(<<transfor.mli;Tli2131);
Tli3204:=(<<transfor.mli;Tli3204);
Tli3205:=(<<transfor.mli;Tli3205);
Tli3206:=(<<transfor.mli;Tli3206);
Tli3207:=(<<transfor.mli;Tli3207);
Tli3217:=(<<transfor.mli;Tli3217);
Tli6534:=(<<transfor.mli;Tli6534);
Tli3239:=(<<transfor.mli;Tli3239);
Tli4301:=(<<transfor.mli;Tli4301);
Tli4302:=(<<transfor.mli;Tli4302);
Tli7631:=(<<transfor.mli;Tli7631);
Tli7632:=(<<transfor.mli;Tli7632);
Tli4303:=(<<transfor.mli;Tli4303);
Tli4304:=(<<transfor.mli;Tli4304);
Tli7633:=(<<transfor.mli;Tli7633);
Tli3231:=(<<transfor.mli;Tli3231);
Tli3232:=(<<transfor.mli;Tli3232);
Tli3233:=(<<transfor.mli;Tli3233);
Tli3234:=(<<transfor.mli;Tli3234);
Tli4306:=(<<transfor.mli;Tli4306);
Tli2132:=(<<transfor.mli;Tli2132);
Tli7634:=(<<transfor.mli;Tli7634);
Tli7635:=(<<transfor.mli;Tli7635);
Tli5401:=(<<transfor.mli;Tli5401);
Tli9832:=(<<transfor.mli;Tli9832);
Tli5402:=(<<transfor.mli;Tli5402);
Tli9833:=(<<transfor.mli;Tli9833);
Tli6531:=(<<transfor.mli;Tli6531);
Tli9834:=(<<transfor.mli;Tli9834);
Tli9831:=(<<transfor.mli;Tli9831);
Tli2191:=(<<transfor.mli;Tli2191);
Tli3261:=(<<transfor.mli;Tli3261);
Tli3262:=(<<transfor.mli;Tli3262);
Tli3263:=(<<transfor.mli;Tli3263);
Tli7691:=(<<transfor.mli;Tli7691);
Tli7692:=(<<transfor.mli;Tli7692);
Tli9891:=(<<transfor.mli;Tli9891);
Tli2110:=(<<transfor.mli;Tli2110);
Tli2112:=(<<transfor.mli;Tli2112);
Tli2133:=(<<transfor.mli;Tli2133);
Tli2134:=(<<transfor.mli;Tli2134);
Tli2135:=(<<transfor.mli;Tli2135);
Tli2136:=(<<transfor.mli;Tli2136);
Tli2137:=(<<transfor.mli;Tli2137);
Tli2138:=(<<transfor.mli;Tli2138);
Tli2139:=(<<transfor.mli;Tli2139);
Tli2163:=(<<transfor.mli;Tli2163);
Tli3235:=(<<transfor.mli;Tli3235);
Tli3236:=(<<transfor.mli;Tli3236);
Tli3263:=(<<transfor.mli;Tli3263);
Tli3264:=(<<transfor.mli;Tli3264);
Tli3267:=(<<transfor.mli;Tli3267);
Tli3268:=(<<transfor.mli;Tli3268);
Tli2192:=(<<transfor.mli;Tli2192);
Tli3238:=(<<transfor.mli;Tli3238);
Tli4309:=(<<transfor.mli;Tli4309);
Tli4310:=(<<transfor.mli;Tli4310);
Tli4312:=(<<transfor.mli;Tli4312);
Tli4313:=(<<transfor.mli;Tli4313);
Tli4362:=(<<transfor.mli;Tli4362);
Tli4391:=(<<transfor.mli;Tli4391);
Tli4331:=(<<transfor.mli;Tli4331);
Tli5403:=(<<transfor.mli;Tli5403);
Tli5468:=(<<transfor.mli;Tli5468);
Tli6501:=(<<transfor.mli;Tli6501);
Tli6532:=(<<transfor.mli;Tli6532);
Tli6533:=(<<transfor.mli;Tli6533);
Tli7636:=(<<transfor.mli;Tli7636);
Tli7637:=(<<transfor.mli;Tli7637);
Tli7693:=(<<transfor.mli;Tli7693);
Tli7694:=(<<transfor.mli;Tli7694);
Tli8731:=(<<transfor.mli;Tli8731);
Tli8732:=(<<transfor.mli;Tli8732);
Tli9835:=(<<transfor.mli;Tli9835);
Tli9836:=(<<transfor.mli;Tli9836);
Tli9837:=(<<transfor.mli;Tli9837);
Tli9892:=(<<transfor.mli;Tli9892);
Tli9893:=(<<transfor.mli;Tli9893);
Tli9894:=(<<transfor.mli;Tli9894);
Tli111031:=(<<transfor.mli;Tli111031);
Tli111032:=(<<transfor.mli;Tli111032);
Tli9838:=(<<transfor.mli;Tli9838);
Tli2140:=(<<transfor.mli;Tli2140);
Tli2141:=(<<transfor.mli;Tli2141);
Tli3237:=(<<transfor.mli;Tli3237);
Tli3240:=(<<transfor.mli;Tli3240);
Tli4332:=(<<transfor.mli;Tli4332);

EndPackage[]

(*Vorausdefinieren von contig.m*)

BeginPackage["Contig`m`"]

C01::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C02::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
(*C03::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C04::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C05::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C06::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C07::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C08::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C09::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C10::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C11::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C12::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C13::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";*)
C14::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C15::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C16::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C17::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C18::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C19::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C20::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C21::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C22::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C23::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C24::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C25::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C26::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C27::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
(*C28::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C29::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";*)
C30::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C31::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C32::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C33::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C34::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C35::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C36::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
(*C37::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C38::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C39::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";*)
C40::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C41::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C42::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C43::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C44::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C45::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C46::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
(*C47::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C48::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";*)
C49::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C50::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C51::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C52::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C53::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C54::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C55::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C56::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C57::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C58::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C59::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C60::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C61::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C62::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C63::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C64::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C65::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C66::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C67::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C68::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C69::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C70::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C71::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C72::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C73::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C74::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C75::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C76::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C77::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C78::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C79::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C80::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C81::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C82::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C83::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C84::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C85::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C86::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C87::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C88::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C89::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C90::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C91::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C92::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C93::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C94::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C95::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C96::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C97::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C98::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C99::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C100::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C101::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C102::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C103::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C104::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C105::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C106::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C107::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C108::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C109::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C110::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C111::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C112::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C113::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C114::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C115::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C116::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C117::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C118::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C119::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C120::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
C121::usage =
 "\nContiguous relation in form of a rule.
  \nSee also: ContigListe, Ers, PosListe.";
ContigListe::usage =
  "\nList of all contiguous relations.";



C01:=(<<contig.m;C01);
C02:=(<<contig.m;C02);
(*C03:=(<<contig.m;C03);
C04[n1_]:=(<<contig.m;C04[n1]);
C05[n1_]:=(<<contig.m;C05[n1]);
C06[n1_]:=(<<contig.m;C06[n1]);
C07[n1_]:=(<<contig.m;C07[n1]);
C08[n1_]:=(<<contig.m;C08[n1]);
C09[n1_]:=(<<contig.m;C09[n1]);
C10[n2_]:=(<<contig.m;C10[n2]);*)
C11:=(<<contig.m;C11);
C12:=(<<contig.m;C12);
C13:=(<<contig.m;C13);
C14[n1_]:=(<<contig.m;C14[n1]);
C15[n1_]:=(<<contig.m;C15[n1]);
C16[n1_]:=(<<contig.m;C16[n1]);
C17[n1_]:=(<<contig.m;C17[n1]);
C18[n1_]:=(<<contig.m;C18[n1]);
C19[n1_]:=(<<contig.m;C19[n1]);
C20[n1_]:=(<<contig.m;C20[n1]);
C21[n1_]:=(<<contig.m;C21[n1]);
C22[n1_]:=(<<contig.m;C22[n1]);
C23[n1_]:=(<<contig.m;C23[n1]);
C24[n1_]:=(<<contig.m;C24[n1]);
C25[n1_]:=(<<contig.m;C25[n1]);
C26[n1_,n2_]:=(<<contig.m;C26[n1,n2]);
C27[n1_,n2_]:=(<<contig.m;C27[n1,n2]);
(*C28[n1_,n2_]:=(<<contig.m;C28[n1,n2]);
C29[n1_,n2_]:=(<<contig.m;C29[n1,n2]);*)
C30[n1_,n2_]:=(<<contig.m;C30[n1,n2]);
C31[n1_,n2_]:=(<<contig.m;C31[n1,n2]);
C32[n1_,n2_]:=(<<contig.m;C32[n1,n2]);
C33[n1_,n2_]:=(<<contig.m;C33[n1,n2]);
C34[n1_,n2_]:=(<<contig.m;C34[n1,n2]);
C35[n1_,n2_]:=(<<contig.m;C35[n1,n2]);
C36[n1_,n2_]:=(<<contig.m;C36[n1,n2]);
(*C37[n1_,n2_]:=(<<contig.m;C37[n1,n2]);
C38[n1_,n2_]:=(<<contig.m;C38[n1,n2]);
C39[n1_,n2_]:=(<<contig.m;C39[n1,n2]);*)
C40[n1_,n2_]:=(<<contig.m;C40[n1,n2]);
C41[n1_,n2_]:=(<<contig.m;C41[n1,n2]);
C42[n1_,n2_]:=(<<contig.m;C42[n1,n2]);
C43[n1_,n2_]:=(<<contig.m;C43[n1,n2]);
C44[n1_,n2_]:=(<<contig.m;C44[n1,n2]);
C45[n1_,n2_]:=(<<contig.m;C45[n1,n2]);
C46[n1_,n2_]:=(<<contig.m;C46[n1,n2]);
(*C47[n1_,n2_]:=(<<contig.m;C47[n1,n2]);
C48[n1_,n2_]:=(<<contig.m;C48[n1,n2]);*)
C49[n1_,n2_]:=(<<contig.m;C49[n1,n2]);
C50[n1_,n2_]:=(<<contig.m;C50[n1,n2]);
C51[n1_,n2_]:=(<<contig.m;C51[n1,n2]);
C52[n1_,n2_]:=(<<contig.m;C52[n1,n2]);
C53[n1_,n2_,n3_]:=(<<contig.m;C53[n1,n2,n3]);
C54[n1_,n2_,n3_]:=(<<contig.m;C54[n1,n2,n3]);
C55[n1_,n2_,n3_]:=(<<contig.m;C55[n1,n2,n3]);
C56[n1_,n2_,n3_]:=(<<contig.m;C56[n1,n2,n3]);
C57[n1_,n2_,n3_]:=(<<contig.m;C57[n1,n2,n3]);
C58[n1_,n2_,n3_]:=(<<contig.m;C58[n1,n2,n3]);
C59[n1_,n2_,n3_,n4_]:=(<<contig.m;C59[n1,n2,n3,n4]);
C60[n1_,n2_,n3_,n4_]:=(<<contig.m;C60[n1,n2,n3,n4]);
C61[n1_,n2_,n3_,n4_]:=(<<contig.m;C61[n1,n2,n3,n4]);
C62[n1_,n2_,n3_,n4_]:=(<<contig.m;C62[n1,n2,n3,n4]);
C63[n1_,n2_,n3_,n4_,dd_]:=(<<contig.q;C63[n1,n2,n3,n4,dd]);
C64[n1_,n2_,n3_,n4_]:=(<<contig.m;C64[n1,n2,n3,n4]);
C65[n1_,n2_,n3_,n4_]:=(<<contig.m;C65[n1,n2,n3,n4]);
C66[n1_,n2_,n3_,n4_]:=(<<contig.m;C66[n1,n2,n3,n4]);
C67[n1_,n2_,n3_,n4_]:=(<<contig.m;C67[n1,n2,n3,n4]);
C68[n1_,n2_,n3_,n4_]:=(<<contig.m;C68[n1,n2,n3,n4]);
C69[n1_,n2_,n3_,n4_]:=(<<contig.m;C69[n1,n2,n3,n4]);
C70[n1_,n2_,n3_,n4_]:=(<<contig.m;C70[n1,n2,n3,n4]);
C71[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C71[n1,n2,n3,n4,dd]);
C72[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C72[n1,n2,n3,n4,dd]);
C73[n1_,n2_,n3_,n4_]:=(<<contig.m;C73[n1,n2,n3,n4]);
C74[n1_,n2_,n3_,n4_]:=(<<contig.m;C74[n1,n2,n3,n4]);
C75[n1_,n2_,n3_,n4_]:=(<<contig.m;C75[n1,n2,n3,n4]);
C76[n1_,n2_,n3_,n4_]:=(<<contig.m;C76[n1,n2,n3,n4]);
C77[n1_,n2_,n3_,n4_]:=(<<contig.m;C77[n1,n2,n3,n4]);
C78[n1_,n2_,n3_,n4_]:=(<<contig.m;C78[n1,n2,n3,n4]);
C79[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C79[n1,n2,n3,n4,dd]);
C80[n1_,n2_,n3_,n4_]:=(<<contig.m;C80[n1,n2,n3,n4]);
C81[n1_,n2_,n3_,n4_]:=(<<contig.m;C81[n1,n2,n3,n4]);
C82[n1_,n2_,n3_,n4_]:=(<<contig.m;C82[n1,n2,n3,n4]);
C83[n1_,n2_,n3_,n4_]:=(<<contig.m;C83[n1,n2,n3,n4]);
C84[n1_,n2_,n3_,n4_]:=(<<contig.m;C84[n1,n2,n3,n4]);
C85[n1_,n2_,n3_,n4_]:=(<<contig.m;C85[n1,n2,n3,n4]);
C86[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C86[n1,n2,n3,n4,dd]);
C87[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C87[n1,n2,n3,n4,dd]);
C88[n1_,n2_,n3_,n4_]:=(<<contig.m;C88[n1,n2,n3,n4]);
C89[n1_,n2_,n3_,n4_]:=(<<contig.m;C89[n1,n2,n3,n4]);
C90[n1_,n2_,n3_,n4_]:=(<<contig.m;C90[n1,n2,n3,n4]);
C91[n1_,n2_,n3_,n4_]:=(<<contig.m;C91[n1,n2,n3,n4]);
C92[n1_,n2_,n3_,n4_]:=(<<contig.m;C92[n1,n2,n3,n4]);
C93[n1_,n2_,n3_,n4_]:=(<<contig.m;C93[n1,n2,n3,n4]);
C94[n1_,n2_,n3_,n4_]:=(<<contig.m;C94[n1,n2,n3,n4]);
C95[n1_,n2_,n3_,n4_]:=(<<contig.m;C95[n1,n2,n3,n4]);
C96[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C96[n1,n2,n3,n4,dd]);
C97[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C97[n1,n2,n3,n4,dd]);
C98[n1_,n2_,n3_,n4_]:=(<<contig.m;C98[n1,n2,n3,n4]);
C99[n1_,n2_,n3_,n4_]:=(<<contig.m;C99[n1,n2,n3,n4]);
C100[n1_,n2_,n3_,n4_]:=(<<contig.m;C100[n1,n2,n3,n4]);
C101[n1_,n2_,n3_,n4_]:=(<<contig.m;C101[n1,n2,n3,n4]);
C102[n1_,n2_,n3_,n4_]:=(<<contig.m;C102[n1,n2,n3,n4]);
C103[n1_,n2_,n3_,n4_,dd_]:=(<<contig.m;C103[n1,n2,n3,n4,dd]);
C104[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C104[n1,n2,n3,n4,n5,n6]);
C105[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C105[n1,n2,n3,n4,n5,n6]);
C106[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C106[n1,n2,n3,n4,n5,n6]);
C107[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C107[n1,n2,n3,n4,n5,n6]);
C108[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C108[n1,n2,n3,n4,n5,n6]);
C109[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C109[n1,n2,n3,n4,n5,n6]);
C110[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C110[n1,n2,n3,n4,n5,n6]);
C111[n1_,n2_,n3_,n4_,n5_,n6_,n7_,n8_]:=(<<contig.m;C111[n1,n2,n3,n4,n5,n6,n7,n8]);
C112[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C112[n1,n2,n3,n4,n5,n6]);
C113[n1_,n2_,n3_,n4_,n5_,n6_,n7_,n8_]:=(<<contig.m;C113[n1,n2,n3,n4,n5,n6,n7,n8]);
C114[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C114[n1,n2,n3,n4,n5,n6]);
C115[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C115[n1,n2,n3,n4,n5,n6]);
C116[n1_,n2_,n3_,n4_,n5_,n6_,n7_,n8_]:=(<<contig.m;C116[n1,n2,n3,n4,n5,n6,n7,n8]);
C117[n1_,n2_,n3_,n4_,n5_,n6_,n7_,n8_]:=(<<contig.m;C117[n1,n2,n3,n4,n5,n6,n7,n8]);
C118[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C118[n1,n2,n3,n4,n5,n6]);
C119[n1_,n2_,n3_,n4_,n5_,n6_,n7_,n8_]:=(<<contig.m;C119[n1,n2,n3,n4,n5,n6,n7,n8]);
C120[n1_,n2_,n3_,n4_,n5_,n6_]:=(<<contig.m;C120[n1,n2,n3,n4,n5,n6]);
C121[n1_,n2_,n3_,n4_,n5_,n6_,n7_,n8_]:=(<<contig.m;C121[n1,n2,n3,n4,n5,n6,n7,n8]);
ContigListe={"C01", "C02", "C14", "C15", "C16", "C17",
"C18", "C19", "C20", "C21", "C22", "C23", "C24", "C25", "C26", "C27",
"C30", "C31", "C32", "C33", "C34", "C35", "C36", 
"C40", "C41", "C42", "C43", "C44", "C45", "C46", "C49", "C50",
"C51", "C52", "C53", "C54", "C55", "C56", "C57", "C58", "C59", "C60", "C61",
"C62", "C63", "C64", "C65", "C66", "C67", "C68", "C69", "C70", "C71", "C72",
"C73", "C74", "C75", "C76", "C77", "C78", "C79", "C80", "C81", "C82", "C83",
"C84", "C85", "C86", "C87", "C88", "C89", "C90", "C91", "C92", "C93", "C94",
"C95", "C96", "C97", "C98", "C99", "C100", "C101", "C102", "C103", "C104",
"C105", "C106", "C107", "C108", "C109", "C110", "C111", "C112", "C113", "C114",
"C115", "C116", "C117", "C118", "C119", "C120", "C121"};


EndPackage[]

(*Vorausdefinieren von zb_alg.m*)

BeginPackage["zbAlg`m`"]

ZB::usage = 
 "\nDescription: Rule that looks for a recurrence relation for a sum or 
  \n  hypergeometric series using Zeilberger's algorithm.
  \nUsage: Expr/.ZB[recvar, order].
  \nSee also: GOSPER, RunMode, FileName, SolAmount, Fnk, GoRat, GoSol, Cert, 
  \n  DegBound, System, SystemDimension.";
GOSPER::usage = 
 "\nDescription: Rule that does symbolic summation using Gosper's algorithm.
  \nUsage: Expr/.GOSPER[]
  \n   or: Expr/.GOSPER[order]
  \n       (Runs Gosper's trying an additional polynomial Ansatz of degree 
  \n        'order'.)
  \nSee also: ZB.";
Fnk::usage = 
 "\nDescription: Variable that stores the non-rational part of the 
  \n  summation-function in the Zeilberger-algorithm.
  \nSee also: ZB."
GoRat::usage = 
 "\nDescription: GoRat Fnk is summed using Gosper's algorithm.
  \nSee also: GOSPER, ZB, RunMode, Fnk."
GoSol::usage = 
 "\nDescription: GoSol Fnk is the Stammfunktion of Gosper's algorithm.
  \nSee also: GOSPER, ZB, RunMode, Fnk."
Cert::usage = 
 "\nDescription: Variable that stores the certificate of Fnk computed by the 
  \n  Zeilberger algorithm.
  \nSee also: ZB."
DegBound::usage = 
 "\nDescription: Variable that stores the degree-bound in Gosper's algorithm.
  \nSee also: GOSPER, ZB."
System::usage = 
 "\nDescription: Variable that stores the system of equations solved in Gosper's
  \n  algorithm.
  \nSee also: GOSPER, ZB."
SystemDimension::usage = 
 "\nDescription: Variable that stores the size of the linear system to be solved
  \n  in Gosper's algorithm.
  \nSee also: GOSPER, ZB."
RunMode::usage = 
 "\nDescription: Variable that determines the mode of running during the 
  \n  Zeilberger algorithm. \"RunMode\" is initialized to \"Fast\".
  \nUsage: RunMode = Fast
  \n         (Only what is really necessary to solve the given problem is done,
  \n          you are not able to obtain a computer proof afterwards.)
  \n       RunMode = Provable
  \n         (You can obtain a computer proof afterwards by using \"Prove\".)
  \n       RunMode = Proving
  \n         (A computer proof is generated any time you run \"ZB\".)
  \nSee also: ZB, Prove, FileName."
SolAmount::usage = 
 "\nDescription: If the order supplied to the algorithm is higher than 
  \n  necessary the algorithm may find more than one solution. By 
  \n  \"SolAmount\" you specify in how many solutions you are interested.
  \n  \"SolAmount\" is initialized to 1.
  \nUsage: SolAmount = n.
  \nSee also: ZB."
FileName::usage = 
 "\nDescription: Variable that stores the file name into which a computer
  \n  proof generated by the Zeilberger algorithm would be appended.
  \n  \"FileName\" is initialized to \"proof\".
  \nUsage: FileName = <string>
  \nSee also: ZB, RunMode."
Prove::usage = 
 "\nDescription: Entering \"Prove\" at the prompt creates a proof of the 
  \n  last example solved by ZB.
  \nUsage: Prove.
  \nSee also: ZB, RunMode, FileName."

Begin["`Private`"]

ZB[recvar_,order_]:=Module[{Zw1},Expr_ :>
(   If[$ContextPath[[1]]=!=Hyp`m,
       $ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}];
       $ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}]];
    If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
    If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];
      If[ValueQ[Hyp`m`p[PPP,1]],
      Zw1=(Expr/.Hyp`m`SUMSammle/.Hyp`m`pzerl/.Hyp`m`Gzerl/.Hyp`m`GAMMA[xx_]:>(xx-1)!/.
            Hyp`m`p[xx_,nn_]:>(xx+nn-1)!/(xx-1)!/.Binomial[nn_,k_]:>nn!/k!/(nn-k)!);
      Unprotect[Hyp`m`SUM];
      (*Hyp`m`SUM[Hyp`m`Private`x__,Hyp`m`Private`y_]=.;*)
      Zw1=(Zw1/.Hyp`m`SUM[Summand_,{svar_,do_,up_}]:>
         fastZeil`Zb[Summand,{svar,If[Position[Denominator[Summand],Expand[svar-do]!]=!={},-Infinity,do],up},recvar,order]);
      (*Hyp`m`Private`SUMDef;*)
      Zw1/.RISCComb`F->Hyp`m`F/.RISCComb`SUM->Hyp`m`SUM,
      Hyp`m`Private`GrenzeO[-recvar]={Infinity};
      Hyp`m`P;
      Zw1=(Expr/.Hyp`m`SUMSammle/.Hyp`m`pzerl/.Hyp`m`Gzerl/.Hyp`m`GAMMA[xx_]:>(xx-1)!/.
            Hyp`m`p[xx_,nn_]:>(xx+nn-1)!/(xx-1)!/.Binomial[nn_,k_]:>nn!/k!/(nn-k)!);
      Unprotect[Hyp`m`SUM];
      (*Hyp`m`SUM[Hyp`m`Private`x__,Hyp`m`Private`y_]=.;*)
      Zw1=(Zw1/.Hyp`m`SUM[Summand_,{svar_,do_,up_}]:>
         fastZeil`Zb[Summand,{svar,If[Position[Denominator[Summand],Expand[svar-do]!]=!={},-Infinity,do],up},recvar,order]);
      Hyp`m`Private`GrenzeO[-recvar]=.;
      Hyp`m`P;
      (*Hyp`m`Private`SUMDef;*)
      Zw1/.RISCComb`F->Hyp`m`F/.RISCComb`SUM->Hyp`m`SUM
     ])]
GOSPER[order_:0]:=Module[{Zw1},Expr_ :>
  (   If[$ContextPath[[1]]=!=Hyp`m,
       $ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}];
       $ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}]];
    If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
    If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];
      If[ValueQ[Hyp`m`p[PPP,1]],
      Zw1=Expr/.Hyp`m`SUMSammle/.Hyp`m`pzerl/.Hyp`m`Gzerl/.Hyp`m`GAMMA[xx_]:>(xx-1)!/.
            Hyp`m`p[xx_,nn_]:>(xx+nn-1)!/(xx-1)!;
      Unprotect[Hyp`m`SUM];
      (*Hyp`m`SUM[Hyp`m`Private`x__,Hyp`m`Private`y_]=.;*)
      Zw1=(Zw1/.Hyp`m`SUM[Summand_,{svar_,do_,up_}]:>
         fastZeil`Zb[Summand,{svar,If[Position[Denominator[Summand],Expand[svar-do]!]=!={},-Infinity,do],up},recvar,-order]);
      (*Hyp`m`Private`SUMDef;*)
      Zw1,
      Hyp`m`Private`GrenzeO[-recvar]={Infinity};
      Hyp`m`P;
      Zw1=Expr/.Hyp`m`SUMSammle/.Hyp`m`pzerl/.Hyp`m`Gzerl/.Hyp`m`GAMMA[xx_]:>(xx-1)!/.
            Hyp`m`p[xx_,nn_]:>(xx+nn-1)!/(xx-1)!;
      Unprotect[Hyp`m`SUM];
      (*Hyp`m`SUM[Hyp`m`Private`x__,Hyp`m`Private`y_]=.;*)
      Zw1=Zw1/.Hyp`m`SUM[Summand_,{svar_,do_,up_}]:>
         fastZeil`Zb[Summand,{svar,If[Position[Denominator[Summand],Expand[svar-do]!]=!={},-Infinity,do],up},recvar,-order];
      Hyp`m`Private`GrenzeO[-recvar]=.;
      Hyp`m`P;
      (*Hyp`m`Private`SUMDef;*)
      Zw1
     ])]
Fnk:=fastZeil`Fnk;
GoRat:=fastZeil`GoRat;
GoSol:=fastZeil`GoSol;
Cert:=fastZeil`Cert;
DegBound:=fastZeil`DegBound;
System:=fastZeil`System;
SystemDimension:=fastZeil`SystemDimension;
Prove:=fastZeil`Prove;
RunMode:=fastZeil`RunMode;
SolAmount:=fastZeil`SolAmount;
FileName:=System`FileName;

Protect[
ZB,
GOSPER
]

End[]
EndPackage[]

BeginPackage["fastZeil`"]

Zb[X___]:=(Clear[Zb];
If[$VersionNumber>=2.,$Messages=OutputStream["",1],$Messages={}];
<<zb.m;
$ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}];
$ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}];
If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];
Zb[X]/.RISCComb`SUM->Hyp`m`SUM);

Gosper[X___]:=(Clear[Gosper];
If[$VersionNumber>=2.,$Messages=OutputStream["",1],$Messages={}];
<<zb.m;
$ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}];
$ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}];
If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];
Gosper[X]);


EndPackage[]

$ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}]
$ContextPath=Join[Drop[$ContextPath,1],{$ContextPath[[1]]}]

<<output;

If[$VersionNumber>=2.,$Messages=OutputStream["stdout",1],$Messages={"stdout"}];
If[$VersionNumber>=5.,$Messages={OutputStream["stdout",1]},Null];


