home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e032 / 3.ddi / FILES / CALCULUS.PAK / LIMIT.M < prev    next >
Encoding:
Text File  |  1992-07-29  |  75.9 KB  |  2,284 lines

  1.  
  2. (* :Name: Calculus`Limit` *)
  3.  
  4. (* :Author:
  5.     Victor S. Adamchik, Summer 1991.
  6. *)
  7.  
  8. (* :Version: Mathematica 2.0 *)
  9.  
  10. (* :Context Calculus`Limit` *)
  11.  
  12. (* :Keywords:
  13.     Limit
  14. *)
  15.  
  16. (* :Copyright: Copyright 1990  Wolfram Research, Inc.
  17.         Permission is hereby granted to modify and/or make copies of
  18.         this file for any purpose other than direct profit, or as part
  19.         of a commercial product, provided this copyright notice is left
  20.         intact.  Sale, other than for the cost of media, is prohibited.
  21.  
  22.         Permission is hereby granted to reproduce part or all of
  23.         this file, provided that the source is acknowledged.
  24. *)
  25.  
  26. (* :Requirements: none. *)
  27.  
  28. (* :Limitations:
  29.     This package contains a development version of code for the
  30.     evaluation of Limits of elementary and special functions.
  31.     It will eventually replace the present Limit code.
  32.  
  33.     If this package is loaded the internal Limit is overwritten.
  34.  
  35.     This package cannot evaluate limits of hypergeometric
  36.         and elliptic functions 
  37. *)
  38.  
  39. (*========================================================================*)
  40.  
  41.  Unprotect[Limit]
  42.  
  43.  BeginPackage["Calculus`Limit`"]
  44.  
  45.  Begin["`Private`"] 
  46.  
  47.  messages = Messages[Limit]
  48.  
  49.  If[ Length[ messages] > 1, Limit::usage = Last[messages][[2]]]
  50.  If[ Length[ messages] > 1,Limit::ldir  = messages[[1,2]] ]
  51.  If[ Length[ messages] > 1,Limit::lim   = messages[[2,2]] ]
  52.  
  53. (*========================================================================*)
  54.  
  55.  context = ToString[$Context]
  56.  direction = False
  57.  
  58.  Limit[ a_/;!FreeQ[Hold[a],Integrate], x_->s_, d___ ] := 
  59.    Module[ {answer},
  60.      analytic = cardFlag = False;
  61.      asymptotic = True; sub={};
  62.      answer = LimitN[Release[Hold[a]/.Integrate->integrate],x->s,d];
  63.      (answer/.sub) /; FreeQ[answer,FailLimit]
  64.    ]   
  65.  
  66.  Limit[ a_/;!FreeQ[Hold[a],If], x_->s_, d___ ] := 
  67.    Module[ {answer},
  68.      analytic = cardFlag = False;
  69.      asymptotic = True; sub={};
  70.      answer = LimitN[Release[Hold[a]/.If->if],x->s,d];
  71.      (answer/.sub) /; FreeQ[answer,FailLimit]
  72.    ]  
  73.  
  74.  Limit[ c_. Literal[Nest[w__]], x_->s_, d___ ] := 
  75.   Module[ {answer},
  76.      analytic = cardFlag = False;
  77.      asymptotic = True; sub={};
  78.      answer = If[ FreeQ[{w},x], 
  79.           Nest[w] * Limit[c,x->s,d],
  80.           LimitN[c nest[w], x->s, d] ];
  81.      (answer/.sub) /; FreeQ[answer,FailLimit]
  82.    ] 
  83.  
  84.  Limit[ a__ ] := 
  85.    Module[ {answer},
  86.      analytic = cardFlag = False;
  87.      asymptotic = True; sub={};
  88.      answer = LimitN[a];
  89.      (answer/.sub) /; FreeQ[answer,LimitN] && FreeQ[answer,FailLimit]
  90.    ] /;
  91.   And@@(FreeQ[Hold[a],#]&/@{Integrate,If,Nest})
  92.  
  93.  LimitN[ a___/;Length[{a}]<2 ] := 
  94.    ( Message[Limit::argrx,Limit,Length[{a}],2]; FailLimit )
  95.  
  96.  LimitN[ a___/;Length[{a}]>2 && FreeQ[{a},Rule] ] := 
  97.    ( Message[Limit::nonopt,Last[{a}],2,HoldForm[Limit[a]]]; FailLimit )
  98.  
  99.  LimitN[ expr__/;Length[{expr}]==2,Rule[w_,f_] ] :=
  100.    ( Message[Limit::optx,w,HoldForm[Limit[expr,w->f]]]; FailLimit )/;
  101.  w=!=Direction && w=!=Analytic
  102.  
  103.  LimitN[ a_List,x__ ] := LimitN[#,x]&/@a
  104.    
  105.  LimitN[ expr__, Direction -> Automatic ] := 
  106.    LimitN[expr]
  107.  
  108.  LimitN[ expr__, Analytic -> w_ ] := 
  109.    Module[ {answer},
  110.     If[ w,analytic = True,analytic = False,
  111.         Message[ Limit::opttf,Analytic,w];
  112.         Return[FailLimit] ];
  113.     answer = LimitN[expr];
  114.     analytic = False;
  115.     answer
  116.    ]
  117.   
  118.  LimitN[ expr_,x_ -> s_, Direction -> w_ ] := 
  119.    (Message[ Limit::ldir,w];
  120.     Limit[expr,x->s,Direction->w] /; Fail ) /;!NumberQ[N[w]]
  121.  
  122.  LimitN[expr_,x_->s_/;FreeQ[s,DirectedInfinity],Direction -> w_] := 
  123.    Module[ {var,answer},
  124.      direction = True;
  125.      answer = expr/.{x->(s-If[Sign[w]==0,1,Sign[w]] var)}//.{
  126.         Abs[n_?NumberQ z_] :> Abs[n] Abs[z]};
  127.      answer = LimitN[
  128.      If[ FreeQ[answer, Abs],
  129.      answer,
  130.      answer/.{Abs[rt_] :> 
  131.      If[ FreeQ[rt,var], Abs[rt], 
  132.          sign[0] If[ ZnakLim[Limit[rt,var->0],var->0], -rt, rt]]}
  133.      ], var->0];
  134.      direction = False;
  135.      answer
  136.    ] /; NumberQ[N[w]] 
  137.   
  138.  LimitN[ expr_, x_->s_, Direction -> w_ ] := 
  139.    Module[ {var,answer},
  140.      direction = True;
  141.      answer = 
  142.      If[ Znak[s w],
  143.      expr/.x->-var,
  144.          expr/.x->var
  145.      ]//.{ Abs[n_?NumberQ z_] :> Abs[n] Abs[z] };
  146.      answer = LimitN[
  147.      If[ FreeQ[answer, Abs],
  148.          answer,  
  149.          answer/.{Abs[rt_] :> 
  150.      If[ FreeQ[rt,var], Abs[rt], 
  151.          sign[0] If[ ZnakLim[Limit[rt,var->s],var->s],-rt, rt]]}
  152.      ], var->s];
  153.      direction = False;
  154.      answer
  155.    ] /; NumberQ[N[w]] 
  156.  
  157.  LimitN[ c_. if[ f_[body__],a__ ], x_->s_ ] :=
  158.    Module[ {r},
  159.      r = Analys[SimpFunction[#,x->s],x->s]&/@{body};
  160.      If[ !FreeQ[r,FailLimit],r,
  161.        If[ Length[{body}] == Length[Union[r]],
  162.          If[ Length[{a}]==1,
  163.              If[ f@@r, LimitN[c a[[1]],x->s] ],
  164.          If[ Length[{a}]==2,
  165.              If[ f@@r, LimitN[c {a}[[1]],x->s], LimitN[c {a}[[2]],x->s] ],
  166.              If[ f@@r, LimitN[c {a}[[1]],x->s], LimitN[c {a}[[2]],x->s],
  167.                  LimitN[c {a}[[3]],x->s] ]
  168.            ]],
  169.          If[ Length[{a}]==3, LimitN[c {a}[[3]],x->s], FailLimit ]
  170.        ] ] 
  171.    ]
  172.  
  173.  LimitN[ c_. nest[ f_,expr_,n_ ], x_->s_ ] :=
  174.    LimitN[ c Nest[f,expr,n], x->s ] /; FreeQ[n, x]
  175.  
  176.  LimitN[ c_. nest[ f_,expr_,x_ ], x_->Infinity ] :=
  177.    Module[ { answer },
  178.      Off[Solve::ifun,Solve::tdep];
  179.      answer = Solve@@{Solve`var == f[Solve`var],Solve`var};
  180.      answer = 
  181.      If[ Head[answer] === List,
  182.      If[ Znak[expr],
  183.          Max[Select[Flatten[answer/.Rule[a_,b_]:> b],N[#]<0&]],
  184.          Min[Select[Flatten[answer/.Rule[a_,b_]:> b],N[#]>0&]]
  185.          ],
  186.      FailLimit    
  187.      ];
  188.      On[Solve::ifun,Solve::tdep];
  189.      answer LimitN[c, x->Infinity]
  190.    ]
  191.  
  192.  LimitN[ expr_/;!FreeQ[expr,nest] ] := FailLimit         
  193.  
  194.  LimitN[ c_. integrate[expr_,x_], x_->s_ ] :=
  195.    Module[ {inter},
  196.      inter = Integrate[expr,x];
  197.      If[ FreeQ[inter,Integrate],
  198.          LimitN[ c inter,x->s ],
  199.          FailLimit]
  200.    ]
  201.  
  202.  LimitN[ c_. integrate[expr_,{x_,a_,b_}], x_->s_ ] :=
  203.    Module[ {var},
  204.      LimitN[ c integrate[ expr/.x->var,{var,a,b} ],x->s ]/.
  205.      {var->x,integrate->Integrate} 
  206.    ]
  207.  
  208.  LimitN[ expr_,x_->s_ ] := (expr/.x->s) /;!direction &&
  209.  Determinate[ expr, x->s]
  210.  
  211.  LimitN[ expr_,x_->s_/;FreeQ[s,DirectedInfinity] ] := 
  212.    Module[ {var,answer},
  213.      card = 1;
  214.      Map[Simp1[#]&,expr/.x->(var+s),{0,-2}]//.{
  215.         Simp1[ a_ ] :> a /; FreeQ[a,var],
  216.         Simp1[ a_Symbol ] :> a,
  217.         Simp1[ a_Times ]  :> a,
  218.         Simp1[ a_Plus ]   :> a,
  219.         Simp1[ var^n_ ] :> 
  220.            (If[ card < Round[Abs[N[n]]], 
  221.                 card = Round[Abs[N[n]]] ]; var^n ) /;
  222.            NumberQ[N[n]] };
  223.      answer = Taylor1[expr/.x->(var+s),var->0];
  224.      answer /; FreeQ[answer,FailLimit]
  225.    ] /;
  226.   And@@(FreeQ[expr,#]&/@listfun) 
  227.  
  228.  LimitN[ expr_, x_->s_ ] :=
  229.    Module[ { answer = Together[expr],num,den },
  230.      num = LimitN[Numerator[answer],x->s];
  231.      den = LimitN[Denominator[answer],x->s];
  232.      If[ If[ !FreeQ[expr,Sin[_]] || !FreeQ[expr, Cos[_]],
  233.              Simplify[{num,den}, Trig->True],
  234.          {num,den} ]==={0,0} || (
  235.          !FreeQ[num,DirectedInfinity] && !FreeQ[den,DirectedInfinity]),
  236.      answer = LimitN[
  237.            If[ !FreeQ[expr,Sin[_]] || !FreeQ[expr, Cos[_]],
  238.                Simplify[ D[Numerator[answer],x], Trig->True ]/
  239.             Simplify[ D[Denominator[answer],x], Trig->True ],
  240.            D[Numerator[answer],x]/D[Denominator[answer],x]
  241.         ] ,x->s],
  242.      answer = FailLimit
  243.      ];
  244.      answer /; FreeQ[answer,Indeterminate] && FreeQ[answer,FailLimit]
  245.   ] /; !direction &&
  246.  LHospital[ Together[expr], x->s ]
  247.  
  248.  LHospital[ u_, x_->s_ ] := True /; 
  249.  !FreeQ[u,x] && 
  250.  Determinate[Numerator[u],x->s] && Determinate[Denominator[u],x->s] &&
  251.  And@@(FreeQ[u,#]&/@{Abs,Sign,Factorial,Binomial})  
  252.  
  253.  LimitN[ expr_,x_->s_/;s=!=0 && FreeQ[s,DirectedInfinity] ] :=
  254.   Module[ {var,answer},
  255.     card = 1;
  256.     answer = GeneralRule[expr,x];
  257.     Analys[
  258.     SimpAllFunction[Simplify[answer/.x->(var+s)],var->0]/.var->x,x->0]
  259.   ]
  260.  
  261.  LimitN[ expr_,x_->DirectedInfinity[-1] ] :=
  262.   Module[ {answer,var},
  263.     card = 1;
  264.     answer = GeneralRule[expr,x];
  265.     Analys[ 
  266.     SimpAllFunction[answer/.x->-var, var->Infinity]/.var->x,x->Infinity]
  267.   ]
  268.  
  269.  LimitN[ expr_,x_->s_ ] :=
  270.   Module[ {answer},
  271.     card = 1;
  272.     answer = GeneralRule[expr,x];
  273.     Analys[ SimpAllFunction[answer, x->s], x->s]
  274.   ]
  275.  
  276.  LimitN[ expr_,x_/;Head[x]=!=Rule ] :=
  277.    (Message[ Limit::lim,x];
  278.     Limit[expr,x] /; Fail ) 
  279.    
  280.  SimpAllFunction[ expr_,w_ ] := 
  281.    SimpFunction[ Expand[Numerator[expr]]/Denominator[expr],w]
  282.   
  283.  SimpFunction[ expr_/;!FreeQ[expr,If],w_ ] := 
  284.    SimpFunction[expr//.If->if,w]
  285.  
  286.  SimpFunction[ c_. Power[a_,expr_],x_->s_ ] := 
  287.    AsymptoticPower[ E, SimpFunction[expr ,x->s] *
  288.                     AsymptoticLog[SimpFunction[a,x->s],x->s], x->s] *
  289.    SimpFunction[ c,x->s] /; !FreeQ[expr,x]
  290.  
  291.  SimpFunction[ expr_,x_->s_ ] := 
  292.    Block[ { Simp,AsymptoticPower,answer },
  293.     answer = 
  294.     Map[Simp[#,x->s]&,expr,{0,-2}]//.{
  295.         Simp[ a_,z_->_ ]:>ExpandAll[a]/;And@@(FreeQ[a,#]&/@{z,integrate,if}),
  296.         Simp[ a_Symbol, _ ] :> a,
  297.         Simp[ a_Plus, _ ]   :> a, 
  298.     Simp[ PolyGamma[n_Integer?Positive,e_], w_] :> 
  299.         (card=n; Simp[PolyGamma[n,e], w]),
  300.         Simp[ a_ b_,z_ ] :> Simp[a,z] Simp[b,z],
  301.         Simp[ a_^n_,z_->w_] :> 
  302.         (If[ card < Round[Abs[N[n]]] && asymptotic, 
  303.           If[ Round[Abs[N[n]]]>10, cardFlag=True ];
  304.       card = Round[Abs[N[n]]] 
  305.     ]; 
  306.          If[a===z,z^n,AsymptoticPower[a,n,z->w] ]) /;
  307.         NumberQ[N[n]]
  308.         };
  309.    answer//.{Simp[ Simp[a__],_ ] :> Simp[a],
  310.          Simp[ AsymptoticPower[a__],_ ] :> AsymptoticPower[a]}
  311.    ] 
  312.  
  313.  Simp[ a_List,_ ] := a
  314.  Simp[ expr_,w_ ] := expr /; !FreeQ[expr,FailLimit]
  315.  Simp[ a_ expr_,w_ ] := Simp[a,w] Simp[expr,w]
  316.  Simp[ a_^expr_,x_->s_ ] := AsymptoticPower[a,expr,x->s] /; !FreeQ[expr,x] 
  317.  Simp[ x^n_,x_->s_] := 
  318.    (If[ card < Round[Abs[N[n]]] && asymptotic, 
  319.       If[Round[Abs[N[n]]]>10,cardFlag=True];card = Round[Abs[N[n]]] ]; x^n )/;
  320.  NumberQ[N[n]]
  321.  Simp[ LInfinity[n_]^k_.,x_->s_ ] :=
  322.    ( If[ asymptotic && card <= Round[Abs[N[k]]]-1,card = Round[Abs[N[k]]]-1 ];
  323.      LInfinity[n]^k) 
  324.  Simp[ f_[n_]^k_.,x_->s_ ] := f[n]^k/;
  325.  Complement[{f},{EInfinity,EZero,TInfinity}]==={} 
  326.  Simp[ w_Plus,x_ ] := Simp[#,x]&/@w
  327.  
  328.  Simp[ f_[u__],x_->s_ ] :=
  329.    Module[ {answer},
  330.     Off[General::spell1];
  331.     answer = ToExpression[StringJoin[context,"Asymptotic",
  332.              ToString[f] ]]@@Join[ Expand[{u}],{x->s}];
  333.     On[General::spell1];
  334.     answer
  335.    ]/; s===DirectedInfinity[1] ||
  336.        Or@@(!FreeQ[f[u],#]&/@{LInfinity,EInfinity,TInfinity,Abs,Sign}) ||
  337.        !Determinate[f[u],x->s] 
  338.  
  339.  Simp[ u_,w_ ] := Taylor[ExpandAll[u],w]
  340.  
  341.  AsymptoticComplex[a_, b_, x_] := a + I b
  342.  
  343.  GeneralPolynomialQ[ a_ + b_,x_ ] :=
  344.    GeneralPolynomialQ[a,x] && GeneralPolynomialQ[b,x]
  345.  
  346.  GeneralPolynomialQ[ x_^n_.,x_ ] := If[ FreeQ[n,x], True, False]  
  347.  
  348.  GeneralPolynomialQ[ a_ * b_,x_ ] :=
  349.    GeneralPolynomialQ[a,x] && GeneralPolynomialQ[b,x]
  350.  
  351.  GeneralPolynomialQ[ a_,x_ ] := True /; 
  352.  And@@(FreeQ[a,#]&/@{x,TInfinity,LInfinity,EInfinity,EZero}) 
  353.  
  354.  GeneralPolynomialQ[ a__ ] := False
  355.  
  356.  Taylor1[ expr_,x_->s_ ] := expr /; FreeQ[expr,x]
  357.  
  358.  Taylor1[ a_^b_ ,x_->s_ ] := FailLimit /; !FreeQ[a,x] && !FreeQ[b,x]
  359.  
  360.  Taylor1[ f_[___,a_^b_,___],x_->s_ ] := FailLimit /; 
  361.  !FreeQ[a,x] && !FreeQ[b,x]
  362.  
  363.  Taylor1[ expr_,x_->s_ ] :=
  364.    Module[ {answer,i=0,r,rr},
  365.      Off[Power::infy,Power::indet,Infinity::indet,General::indet,
  366.          General::dbyz,Series::esss,Series::lss,SeriesData::csa];
  367.      answer = 
  368.      If[ GeneralPolynomialQ[expr,x],
  369.          Analys[expr,x->s],
  370. (*         r = 
  371.           If[ analytic,
  372.               Series[expr,{x,s,card},Analytic -> True],
  373.               Series[expr,{x,s,card},Analytic -> False]
  374.             ];*)
  375.          r = Series[expr,{x,s,card}];
  376.          If[ !FreeQ[r,Series] || !FreeQ[r,ComposeSeries] ||        
  377.          Head[r]=!=SeriesData || Length[Normal[r]//Expand]>15 ||
  378.          !FreeQ[Normal[r]//N,ComplexInfinity] ||     
  379.          !FreeQ[Normal[r]//N,Indeterminate] ||
  380.              !FreeQ[rr = Simplify[GeneralRule[Normal[r],x]//ExpandAll, 
  381.                        Trig->True],
  382.                  DirectedInfinity] ||
  383.              !FreeQ[GeneralRule[Normal[r],x]//.
  384.           {a_. Log[z_] + b_. Log[u_] + c_. :> Log[Simplify[z^a u^b]] + c},
  385.              DirectedInfinity],
  386.          FailLimit,
  387.              i+=2; 
  388.          r = Series[expr,{x,s,card+i}];
  389.              If[ FreeQ[r,Log],
  390.                  Analys[If[i==0,rr, SimplifyLength[GeneralRule[Normal[r],x]]],
  391.              x->s],
  392.                  If[ FreeQ[Cases[r,a_/;!FreeQ[a,Log] ]/.
  393.                            a_. Log[b_]^n_. :> b , x],
  394.                      Analys[SimplifyLength[GeneralRule[Normal[r],x]],x->s],
  395.                      FailLimit
  396.                    ]
  397.              ]
  398.       ]
  399.        ];
  400.      On[Power::infy,Power::indet,Infinity::indet,General::indet,
  401.         General::dbyz,Series::esss,Series::lss,SeriesData::csa];
  402.      answer 
  403.    ]
  404.  
  405.  SimplifyLength[ expr_, r___ ] := If[ Length[expr] < 8, Simplify[expr,r],expr ]
  406.  
  407.  Taylor[ expr_,x_->s_] := expr /;
  408.  GeneralPolynomialQ[Expand[expr],x]
  409.  
  410.  Taylor[ expr_,x_->s_] := Normal[Series[ expr,{x,0,card+1} ]] /;
  411.  GeneralPolynomialQ[PowerExpand[Expand[expr]],x]
  412.  
  413.  Taylor[f_,x_->s_] := NormalSeries[f,{x,s,2}] /; cardFlag
  414.  
  415.  Taylor[f_,x_->s_] :=
  416.    If[ s=!=Infinity,
  417.        NormalSeries[f,{x,s,If[card==1,2,card]}],
  418.        NormalSeries[f,{x,s,2 card}] 
  419.      ] 
  420.  
  421.  NormalSeries[ expr_,{x_,Infinity,max_} ] :=
  422.    Module[ {r},
  423. (*    r = If[ analytic,
  424.             Series[expr,{x,Infinity,max},Analytic -> True],
  425.             Series[expr,{x,Infinity,max},Analytic -> False]
  426.           ];*)
  427.     r = Series[expr,{x,Infinity,max}];
  428.     If[ !FreeQ[r,ExpIntegralEi],
  429.         r = r/.ExpIntegralEi[ Log[z_] ] :> LogIntegral[z]
  430.     ];
  431.     If[ Head[r]===Series || (Head[r]=!=SeriesData && !FreeQ[r,SeriesData]), 
  432.     FailLimit,
  433.     If[ Head[r]===SeriesData && Length[r[[3]]] > If[cardFlag,1,2 card] &&
  434.         (r[[5]]-1)/r[[6]] >= 2 If[cardFlag,1,card],
  435.         Normal[r],
  436.         NormalSeries[expr,{x,Infinity,max+
  437.         If[Head[r]===SeriesData,If[r[[4]]==0,1,r[[4]] ], 1]}] 
  438.     ]]
  439.   ]
  440.  
  441.  NormalSeries[ expr_,{x_,min_,max_} ] :=
  442.    Module[ {r},
  443. (*    r = If[ analytic,
  444.             Series[expr,{x,min,max},Analytic -> True],
  445.             Series[expr,{x,min,max},Analytic -> False]
  446.           ];*)
  447.     r = Series[expr,{x,min,max}];
  448.     If[ !FreeQ[r,ExpIntegralEi],
  449.         r = r/.ExpIntegralEi[ Log[z_] ] :> LogIntegral[z]
  450.     ];
  451.     If[ Head[r]===Series || (Head[r]=!=SeriesData && !FreeQ[r,SeriesData]), 
  452.     FailLimit,
  453.     If[ Head[r]===SeriesData && Length[r[[3]]] >= card &&
  454.         (r[[5]]-1)/r[[6]] >= card,
  455.         Normal[r],
  456.         NormalSeries[expr,{x,min,max+
  457.         If[Head[r]===SeriesData,If[r[[4]]==0,1,r[[4]] ], 1]}] 
  458.      ]]
  459.   ]
  460.  
  461. (*===================== Asymptotic LOG =====================================*)
  462.  
  463.  AsymptoticLog[ a_/;NumberQ[N[a]],x_->s_ ] := 
  464.  (Log[Abs[a]] + I Arg[a])//.LogRule 
  465.  
  466.  AsymptoticLog[ sign[0] , x_ ] := LInfinity[1]
  467.  
  468.  AsymptoticLog[ a_. x_^n_.,x_->s_ ] := AsymptoticLog[a,x->s] + n LInfinity[1] 
  469.  
  470.  AsymptoticLog[ a_. f_[n_]^k_.,w_ ] := 
  471.    ( AsymptoticLog[a,w] +
  472.      If[f===LInfinity, k LInfinity[n+1], k n] )/;
  473.  Complement[{f},{EInfinity,EZero,TInfinity, LInfinity}]==={} 
  474.  
  475.  AsymptoticLog[ 1,w_ ] := 0
  476.  
  477.  AsymptoticLog[ expr_,x_->s_ ] :=
  478.    Module[ {var,main},
  479.      main = MainTerm[expr,x->s];
  480.      If[ !FreeQ[main,FailLimit], var FailLimit,
  481.      If[ main===expr, 
  482.          If[ And@@(FreeQ[main,#]&/@{x,LInfinity,EInfinity}),
  483.              Log[expr]//.LogRule ,
  484.              FailLimit
  485.            ],
  486.          AsymptoticLog[main,x->s] +
  487.          (main = Expand[If[ s===0,
  488.              Taylor[Log[1+var],var->0]/.
  489.               var->((expr-main)/main),
  490.              Taylor[Log[1+1/var],var->Infinity]/.
  491.               var->(main/(expr-main))
  492.             ]/.EInfinity[a_]^k_?Negative :> EZero[a k]];
  493.           If[ !cardFlag,
  494.            var = CasesN[main,a_. x^m_];
  495.            main = (main-Plus@@var) + 
  496.                   Plus@@(var/.a_. x^m_ :> 0/;Abs[N[m]]>2 card+1);
  497.            var = CasesN[main,a_. LInfinity[_]^m_];
  498.            (main-Plus@@var) + 
  499.            Plus@@(var/.a_. LInfinity[_]^m_ :> 0/;Abs[N[m]]>card+1),
  500.            main 
  501.           ]
  502.          )
  503.      ]]
  504.    ] 
  505.  
  506. (*===================== Asymptotic TRIG ====================================*)
  507.  
  508.  AsymptoticSin[ expr_,x_->s_ ] := 
  509.    AsymptoticForSin[expr,x->s,Analys[PowerExpand[expr],x->s]]
  510.  
  511.  AsymptoticForSin[ expr_,x_->s_,w_ ] :=
  512.    Module[ {var}, 
  513.      Taylor[Sin[var],var->w]/.var->expr
  514.    ]/;
  515.  And@@(FreeQ[w,#]&/@{DirectedInfinity,Indeterminate})
  516.  
  517.  AsymptoticForSin[ expr_,x_->s_,w_ ] :=
  518.    Module[ {rr = PowerExpand[expr],r},
  519.      r = CasesN[rr,a_. x^m_];
  520.      AsymptoticSin1[ rr - Plus@@r + 
  521.          Plus@@(r/.{a_. x^m_ :> 0/;Abs[N[m]] > card+1}),x->s]
  522.    ]
  523.  
  524.  AsymptoticSin1[ a_,x_->s_ ] := Sin[a] /; NumberQ[N[a]]
  525.  
  526.  AsymptoticSin1[ a_ + b_,x_->s_ ] :=
  527.    AsymptoticSin[a,x->s] AsymptoticCos[b,x->s] +
  528.    AsymptoticCos[a,x->s] AsymptoticSin[b,x->s]
  529.  
  530.  AsymptoticSin1[ expr_,x_->s_ ] := AsymptoticTrig[expr,x->s,Sin]
  531.  
  532.  AsymptoticCos[ expr_,x_->s_ ] := 
  533.    AsymptoticForCos[expr,x->s,Analys[PowerExpand[expr],x->s]]
  534.  
  535.  AsymptoticForCos[ expr_,x_->s_,w_ ] :=
  536.    Module[ {var}, 
  537.      Taylor[Cos[var],var->w]/.var->expr
  538.    ]/;
  539.  And@@(FreeQ[w,#]&/@{DirectedInfinity,Indeterminate})
  540.  
  541.  AsymptoticForCos[ expr_,x_->s_,w_ ] :=
  542.    Module[ {rr = PowerExpand[expr],r},
  543.      r = CasesN[rr,a_. x^m_];
  544.      AsymptoticCos1[ rr - Plus@@r + 
  545.          Plus@@(r/.{a_. x^m_ :> 0/;Abs[N[m]] > card+1}),x->s]
  546.    ]
  547.  
  548.  AsymptoticCos1[ a_,x_->s_ ] := Cos[a] /; NumberQ[N[a]]
  549.  
  550.  AsymptoticCos1[ expr_,x_->s_ ] := AsymptoticTrig[expr,x->s,Cos]
  551.  
  552.  AsymptoticCos1[ a_ + b_,x_->s_ ] :=
  553.    AsymptoticCos[a,x->s] AsymptoticCos[b,x->s] -
  554.    AsymptoticSin[a,x->s] AsymptoticSin[b,x->s]
  555.  
  556.  AsymptoticSec[ expr_,x_->s_ ] := 
  557.    AsymptoticForSec[expr,x->s,Analys[PowerExpand[expr],x->s]]
  558.  
  559.  AsymptoticForSec[ expr_,x_->s_,w_ ] :=
  560.    Module[ {var}, 
  561.      Taylor[Sec[var],var->w]/.var->expr
  562.    ]/;
  563.  And@@(FreeQ[w,#]&/@{DirectedInfinity,Indeterminate})
  564.  
  565.  AsymptoticSec[ expr_,x_->s_ ] :=
  566.    Module[ {rr = PowerExpand[expr],r},
  567.      r = CasesN[rr,a_. x^m_];
  568.      AsymptoticSec1[ rr - Plus@@r + 
  569.          Plus@@(r/.{a_. x^m_ :> 0/;Abs[N[m]] > card+1}),x->s]
  570.    ]
  571.  
  572.  AsymptoticSec1[ a_,x_->s_ ] := Sec[a] /; NumberQ[N[a]]
  573.  
  574.  AsymptoticSec1[ a_ + b_,x_->s_ ] :=
  575.    Module[ {rr,r},
  576.      rr = Expand[ AsymptoticCos1[a,x->s] AsymptoticCos1[b,x->s] -
  577.           AsymptoticSin1[a,x->s] AsymptoticSin1[b,x->s] ];
  578.      r = CasesN[rr,c_. x^m_];
  579.      rr = Expand[AsymptoticPower[rr - Plus@@r + 
  580.           Plus@@(r/.{c_. x^m_ :> 0/;Abs[N[m]] > card+1}),-1,x->s]];
  581.      r = CasesN[rr,c_. x^m_];
  582.      rr - Plus@@r + 
  583.      Plus@@(r/.{c_. x^m_ :> 0/;Abs[N[m]] > card+1})
  584.    ]
  585.  
  586.  AsymptoticCsc[ expr_,x_->s_ ] := 
  587.    AsymptoticForCsc[expr,x->s,Analys[PowerExpand[expr],x->s]]
  588.  
  589.  AsymptoticForCsc[ expr_,x_->s_,w_ ] :=
  590.    Module[ {var}, 
  591.      Taylor[Csc[var],var->w]/.var->expr
  592.    ]/;
  593.  And@@(FreeQ[w,#]&/@{DirectedInfinity,Indeterminate})
  594.  
  595.  AsymptoticCsc[ expr_,x_->s_ ] :=
  596.    Module[ {rr = PowerExpand[expr],r},
  597.      r = CasesN[rr,a_. x^m_];
  598.      AsymptoticCsc1[ rr - Plus@@r + 
  599.          Plus@@(r/.{a_. x^m_ :> 0/;Abs[N[m]] > card+1}),x->s]
  600.    ]
  601.  
  602.  AsymptoticCsc1[ a_,x_->s_ ] := Csc[a] /; NumberQ[N[a]]
  603.  
  604.  AsymptoticCsc1[ a_ + b_,x_->s_ ] :=
  605.    Module[ {rr,r},
  606.      rr = Expand[ AsymptoticSin1[a,x->s] AsymptoticCos1[b,x->s] -
  607.           AsymptoticCos1[a,x->s] AsymptoticSin1[b,x->s] ];
  608.      r = CasesN[rr,c_. x^m_];
  609.      rr = Expand[AsymptoticPower[ rr - Plus@@r + 
  610.          Plus@@(r/.{c_. x^m_ :> 0/;Abs[N[m]] > card+1}),-1,x->s]];
  611.      r = CasesN[rr,c_. x^m_];
  612.      rr - Plus@@r + 
  613.      Plus@@(r/.{c_. x^m_ :> 0/;Abs[N[m]] > card+1})
  614.    ]
  615.  
  616.  AsymptoticSec1[ expr_,x_->s_ ] := 
  617.     AsymptoticPower[AsymptoticTrig[expr,x->s,Cos],-1,x->s]
  618.  
  619.  AsymptoticCsc1[ expr_,x_->s_ ] := 
  620.     AsymptoticPower[AsymptoticTrig[expr,x->s,Sin],-1,x->s]
  621.  
  622.  AsymptoticTan[ expr_,x_->s_ ] :=
  623.    AsymptoticForTan[expr,x->s,Analys[expr,x->s]]
  624.  
  625.  AsymptoticForTan[ expr_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  626.    TInfinity[Tan[expr]]
  627.    
  628.  AsymptoticForTan[ expr_,x_->s_,Indeterminate ] :=
  629.    TInfinity[ Tan[expr] ] 
  630.  
  631.  AsymptoticForTan[ expr_,x_->s_,w_ ] :=
  632.    Module[ {var},
  633.      Taylor[ Tan[var],var->w ]/.var->expr
  634.    ]
  635.  
  636.  AsymptoticCot[ expr_,x_->s_ ] :=
  637.    AsymptoticForCot[expr,x->s,Analys[expr,x->s]]
  638.  
  639.  AsymptoticForCot[ expr_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  640.    TInfinity[ Cot[expr] ]
  641.    
  642.  AsymptoticForCot[ expr_,x_->s_,Indeterminate ] :=
  643.    TInfinity[ Cot[expr] ] 
  644.  
  645.  AsymptoticForCot[ expr_,x_->s_,w_ ] :=
  646.    Module[ {var},
  647.      Taylor[ Cot[var],var->w ]/.var->expr
  648.    ]
  649.  
  650.  AsymptoticTrig[ a_. x_^n_.,x_->DirectedInfinity[1],fun_ ] := 
  651.    Which[ Positive[N[n]], TInfinity[a,n,fun],
  652.           Negative[N[n]], Taylor[fun@@{a x^n},x->DirectedInfinity[1]],
  653.       True,           TInfinity[expr,0,fun] ] /; 
  654.  FreeQ[a,x]
  655.  
  656.  AsymptoticTrig[ a_. x_^n_.,x_->0,fun_ ] := 
  657.    Which[ Negative[N[n]], TInfinity[a,n,fun],
  658.           Positive[N[n]], Taylor[fun@@{a x^n},x->0],
  659.       True,           TInfinity[expr,0,fun] ] /; 
  660.  FreeQ[a,x]
  661.  
  662.  AsymptoticTrig[ expr_,x_->s_,fun_ ] := TInfinity[expr,0,fun]
  663.  
  664. (*===================== Asymptotic POWER ==================================*)
  665.   
  666.  AsymptoticPower[ u_, 0, _] := 1
  667.  
  668.  AsymptoticPower[ u_/;NumberQ[N[u]], v_/;NumberQ[N[v]], x_ ] :=  u^v 
  669.  
  670.  AsymptoticPower[ u_,v_/;!FreeQ[v,FailLimit],x_ ] := u FailLimit
  671.  
  672.  AsymptoticPower[ E,expr1_ + expr2_,x_->s_ ] :=
  673.    AsymptoticPower[ E,expr1,x->s] AsymptoticPower[ E,expr2,x->s] /;
  674.  !FreeQ[expr1,Complex] || !FreeQ[expr2,Complex]
  675.  
  676.  AsymptoticPower[ E,expr_. Complex[0,n_],x_->s_ ] :=
  677.    AsymptoticCos[expr n,x->s] + I AsymptoticSin[expr n,x->s] /;
  678.  FreeQ[expr,Complex]
  679.  
  680.  AsymptoticPower[ E,expr_/;!FreeQ[expr,Complex],x_->s_ ] :=
  681.    AsymptoticPower[ E,Expand[expr],x->s]
  682.  
  683.  AsymptoticPower[ E,expr_,x_->s_ ] :=
  684.    AsymptoticExp[{ FreeQ[expr,EInfinity], FreeQ[expr,EZero] },
  685.          If[ FreeQ[expr,x], 
  686.              Expand[expr], 
  687.              AsympSimplify[expr,x,card,False]
  688.          ], x->s]//.
  689.    { EInfinity[ a_. LInfinity[n_] + b_.] :> 
  690.     If[ n==1, x^a, LInfinity[n-1]^a ] EInfinity[b] /; NumberQ[a],
  691.      EZero[a_. LInfinity[n_] + b_.]:>
  692.     If[ n==1, x^a, LInfinity[n-1]^a ] EZero[b] /; NumberQ[a]
  693.    } 
  694.  
  695.  AsymptoticPower[ u_ w_,v_,x_ ] := 
  696.    AsymptoticPower[u,v,x] AsymptoticPower[w,v,x]
  697.  
  698.  AsymptoticPower[ EZero[a_],v_?Negative,w_ ] := 
  699.    EInfinity[Expand[v a]] 
  700.  
  701.  AsymptoticPower[ EInfinity[a_],v_?Negative,w_ ] := 
  702.    EZero[Expand[v a]] 
  703.  
  704.  AsymptoticPower[ expr_,v_?NumberQ,x_->0 ] :=  
  705.    Normal[Series[ SimplifyPolynom[ CollectSign[  
  706.            CoefficientList[CollectSign[expr],x]], x,     
  707.            0]^v, {x,0,card} ]] /; 
  708.  And@@(FreeQ[expr,#]&/@{LInfinity,EInfinity,EZero,TInfinity}) &&
  709.  PolynomialQ[expr,x] 
  710.  
  711.  CollectSign[ expr_ ] :=
  712.    Module[ {r},
  713.      r = Union[Level[ expr, {2,Depth[expr]-3} ]];
  714.      If[ !FreeQ[r, Abs] && !FreeQ[r,Sign],
  715.          r = Cases[r, Sign[w_]];
  716.          (Map[ Collect[#,r]&, expr, Depth[expr]-3  ])//.{
  717.        w_/Sign[w_] :> Abs[w]},
  718.      expr
  719.      ]
  720.   ]    
  721.  
  722.  AsymptoticPower[ expr_,v_?NumberQ,x_->s_ ] :=  
  723.    Module[ {var,main,exprn,r,k},
  724.     exprn = Together[CompDegree[expr/.w_/Sign[w_] :> Abs[w],x]];
  725.     main = MainTerm[ exprn,x->s ] //.
  726.     { EInfinity[ a_ + b_ ] :> EInfinity[a] EInfinity[b] };
  727.     If[ FreeQ[main,EInfinity], k=card,k=1 ];
  728.     exprn = Expand[exprn]/.{
  729.         EZero[a_ x^m_.] :>0 /;Abs[a]>card||Abs[m]>card,
  730.         EInfinity[a_ x^m_.] :>0 /;Abs[a]>card||Abs[m]>card };
  731.     r = CasesN[exprn,a_. x^m_.];
  732.     exprn = (exprn-Plus@@r) + 
  733.                 Plus@@(r/.a_. x^m_ :> 0/;Abs[N[m]]>2 k+1) ;
  734.     If[ !FreeQ[main,FailLimit], FailLimit,
  735.         AsympSimplify[ main^v *
  736.         If[exprn===main,1,
  737.            If[ s===0,
  738.                Normal[Series[(1+var)^v,{var,0,k+1}]]/.
  739.                  var^n_. :> AsympSimplify1[((exprn-main)/main)^n,x,k,False],
  740.                Normal[Series[(1+var)^v,{var,0,2 k}]]/.
  741.                  var^n_. :> AsympSimplify1[((exprn-main)/main)^n,x,k,False]
  742.              ]/.AsympSimplify1->AsympSimplify  
  743.           ],x,k+1,False]
  744.       ] 
  745.    ] 
  746.  
  747.  AsymptoticPower[ u_/;u=!=E,v_Plus,x_->s_ ] := 
  748.    Module[ { par },
  749.     sub = Join[sub, {par->v}];
  750.     AsymptoticPower[E,par AsymptoticLog[u,x->s],x->s]
  751.    ]/;!FreeQ[u,x] && And@@(FreeQ[v,#]&/@{x,TInfinity,LInfinity,EInfinity})
  752.  
  753.  AsymptoticPower[ u_/;u=!=E,v_,x_->s_ ] := 
  754.    AsymptoticPower[E,v AsymptoticLog[u,x->s],x->s]
  755.  
  756.  AsymptoticPower[ u_,v_,x_->s_ ] := u^v
  757.  
  758.  SimplifyPolynom[ {0,list__},x_,n_ ] := SimplifyPolynom[{list},x,n+1]
  759.  
  760.  SimplifyPolynom[ {a_},x_,n_ ] := a x^n
  761.  
  762.  SimplifyPolynom[ list_,x_,0 ] := 
  763.    (SimplifyM[#]&/@Take[list,If[card==1,2,card] ]).Table[x^k,
  764.    {k,0,If[card==1,1,card-1]}]
  765.  
  766.  SimplifyPolynom[ list_,x_,n_ ] := 
  767.    (SimplifyM[#]&/@Take[list,If[card==n,1,card-n]]).Table[x^k,
  768.    {k,n,If[card==n,n,card-1]}] /; card>=n
  769.  
  770.  SimplifyPolynom[ list_,x_,n_ ] := FailLimit /; card < n
  771.  
  772.  SimplifyM[ expr_/;!FreeQ[expr,FresnelS] || !FreeQ[expr,FresnelC] ] := expr
  773.  
  774.  SimplifyM[ expr_ ] := Simplify[expr]
  775.  
  776.  AsympSimplify[ expr_,__] := expr /; cardFlag
  777.  
  778.  AsympSimplify[ expr_, x_, k_, t_ ] :=
  779.    Module[ {r,answer},
  780.     answer = CompDegree[Expand[expr],x];
  781.     r = CasesN[answer,a_. x^m_];
  782.     answer = (answer-Plus@@r) + 
  783.                 Plus@@(r/.a_. x^m_ :> 0/;
  784.         If[!t, Abs[N[m]] > 2 k, Abs[N[m]] > k]);
  785.     If[ !FreeQ[answer,LInfinity],
  786.         r = CasesN[answer,a_. LInfinity[_]^m_];
  787.         answer = (answer-Plus@@r) + 
  788.              Plus@@(r/.a_. LInfinity[_]^m_ :> 0/;Abs[N[m]] > k) 
  789.       ];
  790.     If[ FreeQ[answer,EInfinity], 
  791.     answer,
  792.         r = CasesN[answer,a_. EInfinity[_]^m_];
  793.         (answer-Plus@@r) + 
  794.              Plus@@(r/.a_. EInfinity[_]^m_ :> 0/;Abs[N[m]] > k) 
  795.       ]
  796.    ]
  797.         
  798.  AsymptoticExp[ w_,a_?NumberQ ,x_ ] := E^a (*
  799.    AsymptoticExp[w,expr,x] *)
  800.         
  801.  AsymptoticExp[ {True,True},a_. x_^n_.,x_->DirectedInfinity[1] ] := 
  802.    Module[ {r,var},
  803.      r = { Positive[N[n]],Positive[N[a]] };
  804.      If[ card < Floor[Abs[a]],card = Floor[Abs[a]] ];
  805.       If[ r==={True,True},  EInfinity[a x^n],
  806.        If[ r==={True,False}, EZero[a x^n],
  807.         If[ r[[1]]===False, 
  808.             1 + Sum[ a^k x^(n k)/k!,
  809.                 {k,1,If[card==1 || cardFlag,2,card]}],
  810.             EInfinity[a x^n] ]]]
  811.    ] /;
  812.  And@@(FreeQ[a,#]&/@{x,TInfinity,LInfinity})
  813.         
  814.  AsymptoticExp[ {True,True},expr_,x_->DirectedInfinity[1] ] :=  
  815.    Module[ {r,var,rr=Collect[expr,x],rest,c},     
  816.      r = Cases[rr+var,a_. x^n_./;Positive[N[n]]];
  817.      If[ Length[r]==0, 
  818.          r = Cases[rr+var,a_. LInfinity[n_]^k_./;Positive[k]&&FreeQ[a,x]];
  819.          If[ Length[r]==0,
  820.              r = Plus@@Cases[rr+var,a_/;
  821.                  And@@(FreeQ[a,#]&/@{x,var,LInfinity,TInfinity})];
  822.              rest = rr-r;
  823.              rr= Plus@@Cases[rest+var,a_/;!FreeQ[a,TInfinity]];
  824.              E^r E^rr *
  825.              (1+Sum[var^k/k!,{k,1,If[cardFlag,2,card]}]/.var->(rest-rr))
  826.          ,
  827.              rest = rr - Plus@@r;
  828.              rr = Cases[r,m_ LInfinity[n_]^k_./;ZnakLim[m,x->Infinity]];
  829.          c = Plus@@Cases[rest+var,a_/;
  830.                  And@@(FreeQ[a,#]&/@{x,var,LInfinity,TInfinity})];
  831.              EZero[Plus@@rr] * E^c * 
  832.              EInfinity[Plus@@r-Plus@@rr] * 
  833.              (1 + Sum[var^k/k!,
  834.                   {k,1,If[card==1 || cardFlag,2,card]}]/.var->(rest-c))
  835.            ],
  836.          rest = rr - Plus@@r;
  837.          rr = Cases[r,a_ x^n_./;ZnakLim[a,x->Infinity]];
  838.          r = Complement[r,rr];
  839.          If[ MaxM[Cases[rr,a_. x^n_. :> n]] > MaxM[Cases[r, a_. x^n_. :> n]], 
  840.              EZero[Plus@@r+Plus@@rr],
  841.              EInfinity[Plus@@r+Plus@@rr] ] *
  842.          If[ rest===0,1,
  843.          (r = Plus@@Cases[rest+var,a_/;!FreeQ[a,TInfinity]];
  844.           rest = rest-r;
  845.           TInfinity[EInfinity[r]] *
  846.           (r = Cases[rest+var,
  847.                a_. LInfinity[n_]^k_./;Positive[k]&&FreeQ[a,x]];
  848.            rest = rest-Plus@@r;
  849.            If[ Length[r]!=0,
  850.                rr=Cases[r, a_. LInfinity[n_]^k_./;
  851.                   ZnakLim[a,x->Infinity]];
  852.                EZero[Plus@@rr]* EInfinity[Plus@@r-Plus@@rr],
  853.                1 ] *
  854.            (r = Plus@@Cases[rest+var,a_/;
  855.                  And@@(FreeQ[a,#]&/@{x,var,LInfinity,TInfinity})];
  856.              rest = rest-r;
  857.              E^r * 
  858.              (1 + Sum[var^k/k!,
  859.                   {k,1,If[card==1 || cardFlag,2,card]}]/.var->rest))))
  860.           ]
  861.        ]
  862.    ] 
  863.         
  864.  AsymptoticExp[ {True,True},a_. x_^n_.,x_->0 ] := 
  865.    Module[ {r,var},
  866.      r = { Positive[N[n]],Positive[N[a]] };
  867.      If[ r==={False,True},  EInfinity[a x^n],
  868.        If[ r==={False,False}, EZero[a x^n],
  869.         If[ r[[1]]===True, 
  870.             1+Sum[ a^k x^(n k)/k!,
  871.               {k,1,If[card==1 || cardFlag,2,card]}],
  872.             var FailLimit]]]
  873.    ] /;
  874.  And@@(FreeQ[a,#]&/@{x,TInfinity,LInfinity})
  875.  
  876.  AsymptoticExp[ {True,True},expr_,x_->0 ] :=  
  877.    Module[ {r,var,rr=expr,rest},
  878.      r = Cases[rr+var,a_. x^n_/;Negative[N[n]]];
  879.      If[ Length[r]==0, 
  880.          r = Cases[rr+var,a_. LInfinity[n_]^k_./;Positive[k]&&FreeQ[a,x]];
  881.          If[ Length[r]==0,
  882.              r=Cases[rr+var,a_/;FreeQ[a,x]&&FreeQ[a,var]&&FreeQ[a,LInfinity]];
  883.              E^(Plus@@r) *
  884.              (1+Sum[(rr-Plus@@r)^k/k!,
  885.         {k,1,If[card==1 || cardFlag,2,card]}])
  886.          ,
  887.              rest = rr - Plus@@r;
  888.              rr = Cases[r,m_. LInfinity[n_]^k_./;!ZnakLim[m,x->0]&&OddQ[k] ||
  889.                   ZnakLim[m,x->0]&&EvenQ[k]];
  890.              EZero[Plus@@rr] *
  891.              EInfinity[Plus@@r-Plus@@rr] * 
  892.              (1+Sum[rest^k/k!,{k,1,If[card==1 || cardFlag,2,card]}])
  893.            ],
  894.          rest = rr - Plus@@r;
  895.          rr = Cases[r,a_ x^n_/;ZnakLim[a,x->0]];
  896.          r = Complement[r,rr];
  897.          If[ MinM[Cases[rr,a_. x^n_ :> n]] < MinM[Cases[r, a_. x^n_ :> n]], 
  898.              EZero[Plus@@rr+Plus@@r],
  899.              EInfinity[Plus@@r+Plus@@rr] ] *
  900.          (1+Sum[rest^k/k!,{k,1,If[card==1 || cardFlag,2,card]}])
  901.       ]
  902.    ]  
  903.  
  904.  AsymptoticExp[ {t_,False},expr_,x_->s_ ] :=  
  905.    Module[ {r,var},
  906.      r = Plus@@Cases[expr+var,a_. EZero[_]];
  907.      If[ FreeQ[r,EInfinity],
  908.          AsymptoticExp[ {t,True},expr-r,x->s] *
  909.            (1 + Sum[var^k/k!,
  910.         {k,1,If[card==1 || cardFlag,2,card]}]/.var->r),
  911.          EInfinity[expr]
  912.        ]
  913.    ] 
  914.  
  915.  AsymptoticExp[ {False,t_},expr_,x_->s_ ] :=  
  916.    Module[ {r,rr,var},
  917.      r = Cases[(expr/.{EInfinity[a_]^k_ :> EInfinity[k a]}) + var,
  918.                a_. EInfinity[_]];
  919.      If[ r==={}, EInfinity[expr],
  920.          rr = Cases[r,a_/;ZnakLim[a,x->s] ];
  921.          AsymptoticExp[ {True,t},expr-Plus@@r,x->s] *
  922.          EInfinity[Plus@@r-Plus@@rr] *
  923.          EZero[Plus@@rr]
  924.        ]
  925.    ] 
  926.  
  927. (*===================== Find the Main Term =================================*)
  928.  
  929.  MainTerm[ 0,_ ] := 0
  930.  
  931.  MainTerm[ expr_,x_->Infinity ] := 
  932.    Module[ {r = Expand[expr],var,const,max},
  933.      const = Plus@@Cases[r+var,a_/;FreeQ[a,x]&&FreeQ[a,var]];
  934.      max = MaxM[(r=CasesN[r,a_. x^n_.])/. a_. x^n_. :> n];
  935.      If[ NumberQ[max] || max===-Infinity,
  936.          If[ const=!=0, max=MaxM[0,max] ];
  937.          If[ max==0, const,
  938.          x^max(Plus@@(Cases[r,a_. x^n_./;n===max]/x^max))
  939.          ],
  940.          If[ FreeQ[max,Max],
  941.          x^max(Plus@@(Cases[r,a_. x^n_./;n===max]/x^max)),
  942.          expr 
  943.          ]
  944.      ]
  945.    ] /;
  946.  GeneralPolynomialQ[expr,x]
  947.  
  948.  MainTerm[ expr_,x_->0 ] := 
  949.    Module[ {r = Expand[expr],var,const,min},
  950.      const = Plus@@Cases[r+var,a_/;FreeQ[a,x]&&FreeQ[a,var]];
  951.      min = MinM[(r=Cases[r+var,a_. x^n_.])/. a_. x^n_. :> n];
  952.      If[ NumberQ[min] || min===Infinity,
  953.          If[ const=!=0, min=MinM[0,min] ];
  954.          If[ min==0, const,
  955.          x^min (Plus@@(Cases[r,a_. x^n_./;n===min]/x^min)) 
  956.          ],
  957.          If[ FreeQ[min,Min],
  958.          x^min (Plus@@(Cases[r,a_. x^n_./;n===min]/x^min)),
  959.          expr 
  960.          ]
  961.     ]
  962.    ] /;
  963.  GeneralPolynomialQ[expr,x]
  964.  
  965.  MainTerm[ expr1_ expr2_,x_->s_ ] :=
  966.    MainTerm[expr1,x->s] MainTerm[expr2,x->s] 
  967.  
  968.  MainTerm[ expr_Plus,x_->s_ ] :=
  969.    Module[ {r,rr},
  970.      r = expr/.{EZero[a_] :> 1/EInfinity[-a]};
  971.      If[ !FreeQ[r,EInfinity],
  972.          rr = r/.{a_. EInfinity[w_]^n_ :> 
  973.                 If[ n<0 && FreeQ[a,EInfinity],0,
  974.                     a EInfinity[w]^n] };
  975.          If[rr=!=0,r=rr]
  976.        ];
  977.      r = Together[r];
  978.      Expand[
  979.      FindMainTerm[ Numerator[r],x->s] /
  980.      FindMainTerm[ Denominator[r]//Factor,x->s]]
  981.    ] 
  982.  
  983.  MainTerm[ expr_^n_,x_->s_ ] := MainTerm[expr,x->s]^n
  984.  
  985.  MainTerm[ EInfinity[expr_],x_->s_ ] := EInfinity[MainTerm[expr,x->s]]
  986.  
  987.  MainTerm[ expr_,x_->s_ ] := expr
  988.   
  989.  FindMainTerm[ expr_,x_->s_ ] := 
  990.      (Expand[expr]//.TInfinity[a_,b_,c_] :> limit)  /;
  991.    Module[ {ind},
  992.      If[ !FreeQ[expr,FailLimit] ||
  993.          !FreeQ[expr//.TInfinity[a_,b_,c_] :> ind /; !NumberQ[N[a]] &&
  994.                     And@@(FreeQ[a,#]&/@{TInfinity,LInfinity,EInfinity}),ind],
  995.        True, False]
  996.    ]
  997.  
  998.  FindMainTerm[ expr_,x_->s_ ] :=
  999.    FindMainTerm[ Together[expr//.{EZero[a_] :> 1/EInfinity[-a]}],x->s ] /; 
  1000.  !FreeQ[expr,EZero]
  1001.  
  1002.  FindMainTerm[ expr_,x_->s_ ] := expr /;
  1003.  And@@(FreeQ[expr,#]&/@{x,LInfinity,EInfinity,TInfinity}) 
  1004.  
  1005.  FindMainTerm[ expr1_ expr2_,x_->s_ ] :=
  1006.    FindMainTerm[expr1,x->s] FindMainTerm[expr2,x->s]
  1007.  
  1008.  FindMainTerm[ expr_Plus,x_->DirectedInfinity[1] ] :=
  1009.    Module[ {max,r,var},
  1010.      max = MaxM[(r=Cases[expr+var, a_. x^n_.])/.a_. x^n_.:>n];
  1011.      If[ !FreeQ[max,Max], FailLimit,
  1012.     If[ Length[r]==0,
  1013.         r=Cases[expr+var,a_. LInfinity[_]^_.]; var=expr,
  1014.         r = Cases[Cases[var=Cases[r,a_. x^max],a_/;!FreeQ[a,LInfinity] ],
  1015.         a_. LInfinity[_]^_. x^max] 
  1016.     ];
  1017.     If[ Length[r]==0, 
  1018.         Plus@@var,
  1019.         If[ Length[r]<2, 
  1020.         Plus@@r,
  1021.         FindMainLog[r,x->Infinity] 
  1022.         ] 
  1023.     ]
  1024.      ]
  1025.    ] /; 
  1026.  FreeQ[expr,EInfinity]
  1027.  
  1028.  FindMainTerm[ expr_Plus,x_->0 ] :=
  1029.    Module[ {r,var},
  1030.      r = Cases[expr+var, a_/;And@@(FreeQ[a,#]&/@{x,var,TInfinity})];
  1031.      If[ Length[r]==0,
  1032.          r=MinM[Cases[expr+var, a_. x^n_.]/.a_. x^n_.:>n];
  1033.          If[ FreeQ[r,Min] && FreeQ[r,DirectedInfinity] &&FreeQ[expr,TInfinity]
  1034.          ,
  1035.              x^r FindMainTerm[Expand[expr/x^r]/.
  1036.                {
  1037.                 (w_. x^p_)^n_ :> w^n x^Expand[p n]
  1038.                },x->0],
  1039.              expr
  1040.            ],
  1041.          var = Cases[r,a_/;!FreeQ[a,LInfinity]];
  1042.          If[ Length[var]==0,
  1043.          If[ FreeQ[expr-r,TInfinity], Plus@@r, expr ],
  1044.              If[ Length[var]<2, Plus@@var, FindMainLog[var,x->0] ]
  1045.          ]
  1046.        ]
  1047.    ] /; 
  1048.  FreeQ[expr,EInfinity]
  1049.  
  1050.  FindMainTerm[ expr_Plus,x_->s_ ] :=
  1051.    Module[ {max,var,i=0,buft=1,main,exprn,k,level},
  1052.     exprn = ExpandAll[expr]//.EInfinityRule;
  1053.     If[ !FreeQ[ exprn, LInfinity[_] ],
  1054.         max =
  1055.         Plus@@((level[0]=Cases[exprn, a_. x^p_./;FreeQ[{a,p}, EInfinity[_]]])/.
  1056.         x^p_.->EInfinity[p LInfinity[1]]//.EInfinityRule);
  1057.         exprn = exprn - Plus@@level[0] + max
  1058.     ];
  1059.     level[0] = main = CasesN[exprn, a_. EInfinity[b_] ];
  1060.     If[ Length[main] == 0, expr, 
  1061.      If[ Length[main] == 1, 
  1062.          If[ FreeQ[SimpEInfinity[main[[1]],x->s],Sign], main[[1]], expr ],
  1063.      While[ !FreeQ[main,EInfinity],
  1064.             i+=1;
  1065.             level[i] = main =
  1066.              Complement[Union[(Plus@@Union[
  1067.                 CasesN[#,a_. EInfinity[_]]/.a_. EInfinity[b_]:>b])&/@main],
  1068.                 {0}]
  1069.           ];
  1070.      k = i;
  1071.      While[ Length[main]==1 && k>0, 
  1072.             k-=1; 
  1073.             main = level[k]; 
  1074.             buft = EInfinity[ level[k+1][[1]] ] 
  1075.           ];
  1076.      main = If[ FreeQ[main,EInfinity], main,
  1077.               If[Length[main] > 1,
  1078.                  Union[Flatten[Cases[#+var,a_/;!FreeQ[a,EInfinity]]&/@main]/. 
  1079.                        a_. EInfinity[_] :> a],
  1080.                  Union[Cases[main,a_/;!FreeQ[a,EInfinity]]/.
  1081.                        a_. EInfinity[_] :> a]
  1082.                 ]
  1083.               ];
  1084.      If[ !FreeQ[main,TInfinity],expr,
  1085.       max = 
  1086.       If[ s===0,
  1087.           MinM[(Cases[#+var,a_. x^n_.]&/@main)/. a_. x^n_. :> n,
  1088.               If[ Length[k=Complement[Cases[#+var,a_/;
  1089.                    FreeQ[a,x]&&FreeQ[a,var]]&/@main,{{}}]] != 0,
  1090.                   0,Infinity ]],
  1091.           MaxM[(Cases[#+var,a_. x^n_.]&/@main)/. a_. x^n_. :> n,
  1092.               If[ Length[k=Complement[Cases[#+var,a_/;
  1093.                    FreeQ[a,x]&&FreeQ[a,var]]&/@main,{{}}]] != 0,
  1094.                   0,-Infinity ]] 
  1095.        ];
  1096.       If[ !FreeQ[max,Max] || !FreeQ[max,Min],
  1097.           FailLimit,
  1098.           main = 
  1099.           If[ max=!=0 && FreeQ[max,DirectedInfinity], 
  1100.               Cases[main, a_/;!FreeQ[a,x^max]],
  1101.               Cases[main, a_/;FreeQ[a,x]]
  1102.             ];
  1103.           If[ Length[main]==1,
  1104.             main = exprn = {main[[1]] buft}; i-=1;
  1105.             If[ i==0 && buft == 1, main = EInfinity[#]&/@main];
  1106.             While[ i>0,
  1107.                    main = If[main==={},exprn,EInfinity[#]&/@((
  1108.                       Cases[level[i],w_/;!FreeQ[w,#]]&/@main)[[1]])];
  1109.                    i-=1
  1110.                  ];
  1111.             If[main==={},main=exprn];
  1112.             main = 
  1113.             If[ Length[main] > 1,
  1114.                 (Cases[level[i],w_/;!FreeQ[w,#]]&/@main)[[1]],
  1115.                 Cases[level[i],w_/;!FreeQ[w,main[[1]]] ]
  1116.               ];
  1117.             If[ Length[main]<2, Plus@@main,
  1118.                 (CasesN[main,a_. EInfinity[_]]/.
  1119.                  a_. EInfinity[b_] :> EInfinity[b])[[1]] *
  1120.                 MainTerm[
  1121.                 Plus@@(CasesN[main,a_. EInfinity[_]]/.
  1122.                        a_. EInfinity[b_] :> a),x->s]
  1123.               ]
  1124.         ,
  1125.             If[ !FreeQ[main,LInfinity],
  1126.               main = Cases[main,a_/;!FreeQ[a,LInfinity]];
  1127.               If[ Length[main]!=1,
  1128.                If[ max=!=0 && FreeQ[max,DirectedInfinity],                   
  1129.                    main = x^max FindMainLogForExp[main/x^max,x->s],
  1130.                    main = FindMainLogForExp[main,x->s]
  1131.                ]
  1132.               ];
  1133.           If[ !FreeQ[ main, FailLimit ], expr,
  1134.                   main = If[ Head[main]===List,{main[[1]] buft},
  1135.                          {main buft} ]; i-=1;
  1136.               If[ i==0, main = EInfinity[#]&/@main,
  1137.                       While[ i>0,
  1138.                           main = EInfinity[#]&/@((
  1139.                             Cases[level[i],w_/;!FreeQ[w,#]]&/@main)[[1]]);
  1140.                           i-=1
  1141.                       ]
  1142.               ];
  1143.               Plus@@((Cases[level[i],w_/;!FreeQ[w,#]]&/@main)[[1]])
  1144.           ]  
  1145.           ,
  1146.               If[ max!=0,
  1147.                If[ Length[main] > 1,
  1148.                    coef = 
  1149.                    MaxM[(Cases[#+var,a_. x^max]&/@main)/.a_. x^_. :> a],
  1150.                    coef = 
  1151.                    MaxM[Cases[main,a_. x^max]/.a_. x^_. :> a]
  1152.                  ];
  1153.                If[ FreeQ[coef,Max], 
  1154.                    main = Cases[main, a_/;!FreeQ[a,coef x^max] ]
  1155.                  ];
  1156.                ];
  1157.               main *= buft; i-=1;
  1158.               If[ i==0 && buft == 1, main = EInfinity[#]&/@main];
  1159.               While[ i>0,
  1160.                      If[ Length[main] > 1,
  1161.                          main = EInfinity[#]&/@((
  1162.                          Cases[level[i],w_/;!FreeQ[w,#]]&/@main)[[1]]),
  1163.                          main = EInfinity@@
  1164.                          Cases[level[i],w_/;!FreeQ[w,main]]
  1165.                        ];
  1166.                      i-=1
  1167.                    ];
  1168.               If[ Length[main]==1 && Length[ var=Union[Flatten[
  1169.                    Cases[level[i],w_/;!FreeQ[w,#]]&/@main]] ] > 1,
  1170.                   main[[1]] MainTerm[Plus@@var/main[[1]],x->s],
  1171.                   Plus@@Union[Flatten[
  1172.                    Cases[level[i],w_/;!FreeQ[w,#]]&/@main]] 
  1173.                 ]
  1174.             ](* !FreeQ[main,LInfinity]           *)
  1175.           ] (* Length[main]==1                   *)
  1176.          ] (* !FreeQ[max,Max] || !FreeQ[max,Min] *)
  1177.         ] (* !FreeQ[main,TInfinity]              *)
  1178.        ] (* Length[main] == 1                    *)
  1179.       ] (* Length[main] == 0                     *)
  1180.   ]
  1181.  
  1182.  FindMainTerm[ expr_,x_->s_ ] := expr
  1183.  
  1184.  FindMainLog[ expr_List,x_->s_ ] :=
  1185.    Module[ {min,max,r,rr},
  1186.      min = Min[(r=expr//.TimesLog)//.{
  1187.            a_. LInfinity[n__]^_. :> a ws[{n}]}/.
  1188.            {ws[a_] ws[b_] :> ws[{a,b}]}/.c_. ws[a_] :> a ];
  1189.      max = Max[(rr=(r=Cases[r,a_. LInfinity[n___,min,m___]^_.])//.{
  1190.            a_. LInfinity[n__]^_. :> a ws[Count[{n},min]]}/.
  1191.            {ws[a_] ws[b_] :> ws[a+b]})/.c_. ws[a_] :> a ];
  1192.      r = Part[r,Flatten[Position[rr/.c_. ws[a_] :> a ,max]]];
  1193.      If[ Length[r]==1,
  1194.          Plus@@(r/. LInfinity[n__] :> Times@@(LInfinity[#]&/@{n})),
  1195.          ((LInfinity@@Table[min,{j,max}])/. 
  1196.             LInfinity[m__] :> Times@@(LInfinity[#]&/@{m})) *
  1197.          MainTerm[ Plus@@((r/LInfinity@@Table[min,{j,max}])/.
  1198.              {LInfinity[n__] LInfinity[k__]^(-1) :>
  1199.               If[ Length[{n}] > Length[{k}],
  1200.                   LInfinity@@ReducePar[{n},{k}],
  1201.                   1/(LInfinity@@ReducePar[{k},{n}])
  1202.                 ]
  1203.              }/.{LInfinity[] :> 1}/. 
  1204.              LInfinity[n__] :> Times@@(LInfinity[#]&/@{n})),x->s ]
  1205.        ]
  1206.    ]
  1207.  
  1208.  ReducePar[{w1___,u_,w2___},{w3___,v_,w4___}] :=
  1209.       ReducePar[{w1,w2},{w3,w4}]/;u===v
  1210.  
  1211.  ReducePar[w_,{}] := w
  1212.  
  1213.  ReducePar[{},w_] := w
  1214.  
  1215.  FindMainLogForExp[ expr_List,x_->s_ ] :=
  1216.    Module[ {min,max,r,rr},
  1217.      min = Min[(r=expr//.TimesLog)//.{
  1218.            a_. LInfinity[n__]^_. :> a ws[{n}]}/.
  1219.            {ws[a_] ws[b_] :> ws[{a,b}]}/.c_. ws[a_] :> a ];
  1220.      max = Max[(rr=(r=Cases[r,a_. LInfinity[n___,min,m___]^_.])//.{
  1221.            a_. LInfinity[n__]^_. :> a ws[Count[{n},min]]}/.
  1222.            {ws[a_] ws[b_] :> ws[a+b]})/.c_. ws[a_] :> a ];
  1223.      r = Part[r,Flatten[Position[rr/.c_. ws[a_] :> a ,max]]];
  1224.      If[ Length[r]==1,
  1225.          Plus@@(r/. LInfinity[n__] :> Times@@(LInfinity[#]&/@{n})),
  1226.          (LInfinity@@Table[min,{j,max}])/. 
  1227.             LInfinity[m__] :> Times@@(LInfinity[#]&/@{m}) *
  1228.          (rr = (r/LInfinity@@Table[min,{j,max}])/.
  1229.              {LInfinity[n__] LInfinity[k__]^(-1) :>
  1230.               If[ Length[{n}] > Length[{k}],
  1231.                   LInfinity@@ReducePar[{n},{k}],
  1232.                   1/(LInfinity@@ReducePar[{k},{n}])
  1233.                 ]
  1234.              }/.{LInfinity[] :> 1}/. 
  1235.              LInfinity[n__] :> Times@@(LInfinity[#]&/@{n});
  1236.           If[ s===Infinity, 
  1237.           If[ FreeQ[r = MaxM[rr],Max],
  1238.                   r,FailLimit ],
  1239.           If[ FreeQ[r = MinM[rr],Min],
  1240.                   r,FailLimit ]
  1241.       ]  
  1242.           )
  1243.        ]
  1244.    ]
  1245.  
  1246.  GeneralRule[ expr_,x_ ] := 
  1247.    GeneralRule[expr/.
  1248.   {
  1249.   Sinh[a_] :> E^a/2 - E^(-a)/2,
  1250.   Csch[a_] :> 2E^a/(E^(2a) - 1),
  1251.   Cosh[a_] :> E^a/2 + E^(-a)/2,
  1252.   Sech[a_] :> 2E^a/(E^(2a) + 1)
  1253.   },x] /;
  1254.  Or@@(!FreeQ[expr,#]&/@{Sinh,Sech,Csch,Cosh})
  1255.  
  1256.  GeneralRule[ expr_,x_ ] := 
  1257.   (expr//.LogRule/.
  1258.        {Beta[a_,b_]       :> Gamma[a] Gamma[b]/Gamma[a+b]}/.
  1259.        {Binomial[a_,b_]   :> Gamma[a+1]/(Gamma[b+1] Gamma[a-b+1])}/.
  1260.        {Pochhammer[a_,b_] :> Gamma[a+b]/Gamma[a]}/.
  1261.        {Gamma[a_,0,z_]    :> Gamma[a] - Gamma[a,z]}/.
  1262.        {Literal[ Derivative[q_,w_,e_][Gamma][a_,0,s_] ] :>
  1263.          Derivative[q][Gamma][a] -
  1264.          Derivative[q,e][Gamma][a,s]}/.
  1265.        {LogIntegral[z_/;!FreeQ[z,x]] :> ExpIntegralEi[Log[z]]})/.
  1266.        {Tanh[a_/;FreeQ[a,x]] :> (E^a-E^(-a))/(E^a+E^(-a)),
  1267.         Coth[a_/;FreeQ[a,x]] :> (E^a+E^(-a))/(E^a-E^(-a))
  1268.        }/.AbsRule
  1269.  
  1270.  
  1271.  LogRule = 
  1272.  {
  1273.   Log[a_ b_] :> Log[a]+Log[b],
  1274.   Log[a_^n_] :> n Log[a],
  1275.   Log[Complex[a_,b_]] :> Log[Abs[a+I b]] + I Arg[a+I b],
  1276.   Arg[a_/;FreeQ[a,Complex]] :> If[ N[a] >=0,0,Pi,Arg[a] ],
  1277.   Abs[a_/;FreeQ[a,Complex]] :> If[ N[a] >=0,a,-a,Abs[a] ],
  1278.   Sign[a_/;FreeQ[a,Complex] && NumberQ[N[a]]]:>
  1279.        If@@{N[a] >0, 1,If@@{N[a]<0,-1,If@@{N[a]===0,0,Sign[a]}}},
  1280.   Log[ E^a_ ] :> a 
  1281.  }
  1282.  
  1283.  TimesLog =
  1284.  { 
  1285.    LInfinity[n_]^k_Interger?Positive :> LInfinity@@Table[n,{i,k}],
  1286.    LInfinity[n_]^k_?Positive /; k>1 :> 
  1287.      LInfinity@@Table[n,{i,Floor[k]}] * LInfinity[n]^(k-Floor[k]),
  1288.    LInfinity[n__] LInfinity[m__] :> LInfinity[n,m]
  1289.  }
  1290.  
  1291.  OutputRule[ expr_,x_->s_ ] := expr//.
  1292.    {
  1293.    LInfinity[n_,m__] :> LInfinity[n] LInfinity[m],
  1294.    LInfinity[n_] :> Nest[Log,s,n]   
  1295.    }//.
  1296.    { 
  1297.    Log[Infinity]:>Infinity,
  1298.    Log[-Infinity]:>ComplexInfinity,
  1299.    TInfinity[a__] :> Indeterminate
  1300.    }//.EInfinity[n_] :> Exp[n]
  1301.  
  1302.  EInfinityRule =
  1303.   { 
  1304.     EInfinity[a_] EInfinity[b_] :> EInfinity[Expand[a+b]],
  1305.     EInfinity[a_]^n_ :> EInfinity[Expand[a n]],
  1306.     EZero[a_] :> EInfinity[a]
  1307.   } 
  1308.  
  1309.  EInfinityInv =
  1310.   {
  1311.     EInfinity[a_ + b_] :> EInfinity[a] EInfinity[b]
  1312.   }
  1313.  
  1314.  EInfinity[0] = 1
  1315.  EInfinity[DirectedInfinity[-1]] = 0
  1316.  EInfinity[DirectedInfinity[]] = DirectedInfinity[]
  1317.  EInfinity[DirectedInfinity[1]] = DirectedInfinity[1]
  1318.  EZero[0] = 1
  1319.  TInfinity[1] = 1
  1320.  
  1321.  CompDegree[expr_,x_] := expr//.
  1322.   {(a_ x)^m_     :> x^m a^m,
  1323.    (a_. x^p_)^m_ :> x^Expand[p m] a^m}
  1324.  
  1325.  FirstNotZero[ {0,w___} ] := 0
  1326.  
  1327.  FirstNotZero[ {a_,w___} ] := a/.{sign[0] :> If[ direction,1,0 ]}
  1328.  
  1329.  listfun = {integrate,Factorial,Gamma,Binomial,ExpIntegralE,
  1330.   ExpIntegralEi,SinIntegral,CosIntegral,Erf,Erfc,PolyGamma,LogIntegral,
  1331.   FresnelS,FresnelC,Zeta,PolyLog,PolyGamma,Sign,Abs,sign,ChebyshevU,
  1332.   ChebyshevT}
  1333.   
  1334.  AnalysList[ expr_List,x_ ] := Analys[#,x]&/@expr
  1335.  
  1336.  Analys[ 0,x_->s_ ] := 0
  1337.  Analys[ Indeterminate,x_->s_ ] := Indeterminate  
  1338.  Analys[ expr_,x_->s_ ] := FailLimit /; BadWords[ToString[expr]]
  1339.  
  1340.  Analys[ expr_,x_->0 ] := FirstNotZero[CoefficientList[expr,x]] /;
  1341.  PolynomialQ[expr,x] &&
  1342.  And@@(FreeQ[expr,#]&/@{LInfinity,EInfinity,EZero,TInfinity,sign}) 
  1343.  
  1344.  Analys[ expr_,x_->s_ ] := 
  1345.    Module[ {r,rr},
  1346.    rr = expr//.{TInfinity[a_] d_ :> TInfinity[a d],
  1347.                 TInfinity[a_] + TInfinity[d_] :> TInfinity[a+d],
  1348.                 TInfinity[a_] + d_ :> TInfinity[a + d]}/.
  1349.         TInfinity[ TInfinity[a__] ] :> TInfinity[a];
  1350.    rr = rr//.w_/Sign[w_] :> Abs[w];
  1351.    If[ MatchQ[ rr,TInfinity[a_] ],rr = rr[[1]] ];
  1352.    If[ !FreeQ[rr,EInfinity] || !FreeQ[rr,EZero],
  1353.        r = PartEZero[ rr,x,card],
  1354.        r = Expand[rr]];
  1355.    If[ !FreeQ[expr,LInfinity] && Head[r]===Plus,
  1356.        rr = CasesN[r,a_. LInfinity[_]^_];
  1357.        r = (r-Plus@@rr) + 
  1358.            Plus@@(rr/.{a_. LInfinity[_]^m_ :> 0 /; Abs[N[m]] > card+1}) ];
  1359.    r = CompDegree[r,x];
  1360.    If[ !cardFlag,
  1361.        rr = CasesN[r,a_. x^m_.];
  1362.        r = (r-Plus@@rr) + Plus@@(rr/.{a_. x^m_ :> 0 /; 
  1363.            Abs[N[m]] > If[card==1,2,card]})
  1364.      ];
  1365.    r = r//.{ (LInfinity[a_]^n_)^p_ :> LInfinity[a]^(n p) };
  1366.    Analys1[ MainTerm[r,x->s]//.EInfinityRule, x->s]
  1367.    ]
  1368.  
  1369.  Analys1[ expr_,x_->s_ ] := FailLimit /; !FreeQ[expr,FailLimit]
  1370.  
  1371.  Analys1[ expr_,x_->s_ ] := 
  1372.    Module[ {inter,ind,infinity},
  1373.      Off[Power::infy,Power::indet,Infinity::indet,General::indet,
  1374.          General::dbyz,Min::nord,Max::nord,List::nord];
  1375.      If[ direction,
  1376.      Unprotect[Integer];
  1377.      Power[0,n_?Negative] ^:= DirectedInfinity[1]
  1378.      ];
  1379.       Unprotect[Power,Plus,Log];
  1380.       E^RealInterval[z_] := RealInterval[Exp@@{z}];
  1381.       Log[RealInterval[z_]] := RealInterval[Log@@{z}];
  1382.       c_. RealInterval[z_] + d_. RealInterval[y_] := Indeterminate/;
  1383.       z===y && (c+d)===0;
  1384.      inter = 
  1385.      If[ !FreeQ[expr//.TInfinity[__]^k_?Negative :> ind,ind],
  1386.          Indeterminate,
  1387.      If[ !FreeQ[expr//.TInfinity[a_,b__] :> ind /;And@@(FreeQ[a,#]&/@{
  1388.          LInfinity,TInfinity,EInfinity}) && !NumberQ[N[a]],ind],
  1389.          FailLimit,
  1390.      ind =    
  1391.          SimpEInfinity[expr,x->s] //.{
  1392.              Sign[Abs[w_]] :> 1,
  1393.              EInfinity[a_/;Znak[a]] :> 1/EInfinity[-a],
  1394.          TInfinity[a_,0,c_]     :> c@@{OutputRule[a,x->s]},
  1395.              TInfinity[a_,b_,c_]    :> c@@{a s^b}  
  1396.                  }//.{
  1397.              Sin[ComplexInfinity] :> RealInterval[{-1,1}],
  1398.              Cos[ComplexInfinity] :> RealInterval[{-1,1}],
  1399.              f_[RealInterval[{c_,d_}] ] :>
  1400.                N[RealInterval[{f[c],f[d]}]],
  1401.              TInfinity[a_]:>a
  1402.                  }/.{Min->MinM,Max->MaxM};
  1403.       E^RealInterval[z_] =.;
  1404.       Log[RealInterval[z_]] = .;
  1405.       c_. RealInterval[z_] + d_. RealInterval[y_] =.;
  1406.       Protect[Power,Plus,Log];
  1407.           ind = Block[ {DirectedInfinity}, ind/.x->s/.
  1408.         {
  1409.             Literal[ DirectedInfinity[] c_ ] :> c DirectedInfinity[1] /;
  1410.             And@@(FreeQ[c,#]&/@{EInfinity})&&!NumberQ[N[c]] 
  1411.         } ]/.Infinity -> infinity/.infinity -> DirectedInfinity[1];
  1412.       ind/.{Min->MinM,Max->MaxM}/.{
  1413.              RealInterval[{a_/;Znak[a],b_}] :>
  1414.                          -RealInterval[ {-b,-a} ] }//.
  1415.              {0^Abs[_] :> 0,
  1416.              RealInterval[{ComplexInfinity,ComplexInfinity}] :>
  1417.                                 ComplexInfinity,
  1418.              DirectedInfinity[a_] LInfinity[_]^_. :>
  1419.               If[s===0 && !direction, -1,1] DirectedInfinity[a]}/.{
  1420.              RealInterval[a_] :> Indeterminate/;FreeQ[a,LInfinity]}
  1421.        ]];
  1422.      If[ !FreeQ[inter,LInfinity] && Head[inter]===Times,
  1423.          ind = Cases[inter,a_. LInfinity[_]^_.];
  1424.          If[ Length[ind] > 1,
  1425.              inter = FindMainLog[ind,x->s]
  1426.        ]];
  1427.      If[ direction, 
  1428.      Integer/:Power[0,n_?Negative] =.;
  1429.      Protect[Integer]
  1430.      ];
  1431.      inter = OutputRule[ SimplifyLength[inter],x->s]/.
  1432.       {DirectedInfinity[a_/;!FreeQ[a,Complex]] :> ComplexInfinity}/.
  1433.         {sign[0]^_?Negative :> If[ direction,1, Indeterminate ]}/.
  1434.     {sign[0] :> If[ direction,1,0 ]};
  1435.      On[ Power::infy,Power::indet,Infinity::indet,General::indet,
  1436.          General::dbyz,Min::nord,Max::nord,List::nord]; 
  1437.      If[ !FreeQ[inter,sign],FailLimit,inter ]
  1438.    ]
  1439.  
  1440.  SimpEInfinity[ a_,x_ ] := a /; FreeQ[a,EInfinity]
  1441.  
  1442.  SimpEInfinity[ a_ + b_,x_ ] := 
  1443.     SimpEInfinity[a,x] + SimpEInfinity[b,x] /; !FreeQ[{a,b},EInfinity]
  1444.  
  1445.  SimpEInfinity[ a_. EInfinity[b_],x_->s_ ] :=
  1446.     SignN[a,x,1] EInfinity[ SimpEInfinity1[b,x->s] ]
  1447.  
  1448.  SimpEInfinity[ b_,x_->s_ ] := b
  1449.  
  1450.  SimpEInfinity1[ a_. EInfinity[b_],x_->s_ ] :=
  1451.     SignN[a,x,2] *
  1452.     EInfinity[ SimpEInfinity1[b,x->s] ]
  1453.  
  1454.  SimpEInfinity1[ b_Plus,x_->s_ ] := 
  1455.    Module[ {answer}, 
  1456.      answer = 
  1457.       MainTerm[MainTerm[
  1458.         If[ !FreeQ[b,EInfinity] || !FreeQ[b,EZero],
  1459.             PartEZero[ b,x->s,card],
  1460.             b],
  1461.       x->s]//.EInfinityRule,x->s];
  1462.       If[ Head[answer]===Times,
  1463.           SimpEInfinity1[answer,x->s],
  1464.           answer]
  1465.    ]
  1466.  
  1467.  SimpEInfinity1[ b_,x_->s_ ] := SignN[b,x,2]
  1468.  
  1469.  SignN[ expr_Times,x_,n_ ] := 
  1470.  (SignN[#,x,n]&/@expr)//.{
  1471.  Sign[ w_/;!FreeQ[w,LInfinity] || !FreeQ[w,TInfinity] ] :> w}//.{
  1472.  Sign[a_] Sign[b_] :> Sign[a b]} 
  1473.  
  1474.  SignN[ expr_,x_,n_ ] :=    
  1475.    If[ NumberQ[N[expr]] && FreeQ[N[expr],Complex],
  1476.        Sign[N[expr]],
  1477.        If[n==1,expr,Sign[expr] ]
  1478.      ] /; 
  1479.  And@@(FreeQ[expr,#]&/@{x,LInfinity,TInfinity})
  1480.  
  1481.  SignN[ expr_,x_,1] := 1
  1482.  
  1483.  SignN[ expr_,x_,2] := expr
  1484.  
  1485.  PartEZero[ c_ expr_,x_,n_ ] := c PartEZero[expr,x,n] /; 
  1486.  FreeQ[c,EInfinity] && FreeQ[c,EZero]
  1487.  
  1488.  PartEZero[ expr_,x_,n_ ] :=
  1489.    Module[ { r,rr},
  1490.      rr=Expand[expr]//.EInfinityRule;
  1491.      If[ FreeQ[rr,EInfinity], rr,
  1492.          r = CasesN[rr,a_. EInfinity[w_] ];
  1493.          (rr - Plus@@r) + Plus@@(PartEZero1[#,x,n]&/@r)
  1494.        ]
  1495.    ]
  1496.  
  1497.  PartEZero1[ b_. EInfinity[expr_/;!FreeQ[expr,EInfinity]],x_,n_ ] :=
  1498.    Module[ {r,var,exprm,exprn},
  1499.     exprm = PartEZero[expr,x,n];
  1500.     r = CasesN[exprm,a_. x^m_];
  1501.     If[ Length[r]==0, exprn = exprm,
  1502.       exprn = (exprm-Plus@@r) + 
  1503.       Plus@@(r/.{a_. x^m_. :> 0 /; Abs[N[m]] > n || Abs[N[a]] > n}) ];
  1504.     If[ exprn===0,0,
  1505.         r = Cases[exprn+var,a_/;Znak[a]];
  1506.         EInfinity[exprn-Plus@@r]/ EInfinity[-Plus@@r]
  1507.       ] *
  1508.     ( r = CasesN[b,a_. x^m_];
  1509.       If[ Length[r]==0,b,
  1510.           (b-Plus@@r) + 
  1511.           Plus@@(r/.{a_. x^m_. :> 0 /; Abs[N[m]] > n})
  1512.         ]
  1513.     )
  1514.    ] /; !cardFlag
  1515.  
  1516.  PartEZero1[ b_. EInfinity[a_. x_^m_.],x_,n_ ] :=  0 /;!cardFlag &&
  1517.  Abs[N[m]] > n || Abs[a] > n
  1518.  
  1519.  PartEZero1[ b_. EInfinity[a_ x_^m_.],x_,n_ ] :=  
  1520.    b/EInfinity[-a x^m] /;Znak[a] 
  1521.  
  1522.  PartEZero1[ b_. EInfinity[expr_],x_,n_ ] := 
  1523.    Module[ {r,var,exprn},
  1524.     r = CasesN[expr,a_. x^m_];
  1525.     If[ Length[r]==0, exprn=expr,
  1526.       exprn = (expr-Plus@@r) + 
  1527.       Plus@@(r/.{a_. x^m_. :> 0 /; Abs[N[m]] > n || Abs[N[a]] > n})];
  1528.     If[ exprn===0,0,
  1529.         r = Cases[exprn+var,a_/;Znak[a]];
  1530.         EInfinity[exprn-Plus@@r]/ EInfinity[-Plus@@r]
  1531.       ] *
  1532.     ( r = CasesN[b,a_. x^m_];
  1533.       If[ Length[r]==0,b,
  1534.           (b-Plus@@r) + 
  1535.             Plus@@(r/.{a_. x^m_. :> 0 /; Abs[N[m]] > n})
  1536.        ]
  1537.     )
  1538.    ] /; !cardFlag
  1539.  
  1540.  PartEZero1[ expr_,x_,n_ ] := expr
  1541.  
  1542.  MinM[a___] := MinM1[Union[Flatten[{a}]]] 
  1543.  
  1544.  MinM1[{}] := DirectedInfinity[1]
  1545.  
  1546.  MinM1[{ComplexInfinity,a__}] := MinM1[{a}]
  1547.  
  1548.  MinM1[{DirectedInfinity[w_/;!FreeQ[w,Complex]],a__}] := MinM1[{a}]
  1549.  
  1550.  MinM1[{ComplexInfinity}] := ComplexInfinity
  1551.  
  1552.  MinM1[{DirectedInfinity[w_/;!FreeQ[w,Complex]]}] := ComplexInfinity
  1553.  
  1554.  MinM1[a_List] := MinMM[Flatten[a]] 
  1555.  
  1556.  MinMM[a_List] := 
  1557.    If[ !FreeQ[a,Complex], MinMMM[a],
  1558.        Module[ {r},
  1559.         r = Min[N[a]];
  1560.         If[ FreeQ[r,Min],
  1561.             a[[ Position[ N[a],r ][[1,1]] ]] ,
  1562.             MinMMM[a]
  1563.           ]
  1564.        ]
  1565.    ]
  1566.  
  1567.  MinMMM[ {a___,0,b___} ] := 0
  1568.  
  1569.  MinMMM[ a_ ] := 
  1570.    Module[ {r},
  1571.      If[ Znak[ N[a[[1]]] ], 
  1572.          r = N[-a[[1]]] * Min[N[a/(-a[[1]]) ]],
  1573.          r = N[a[[1]]] * Min[N[a/a[[1]] ]]
  1574.        ];
  1575.      If[ FreeQ[r,Min],
  1576.          a[[ Position[ N[a]/1.,r ][[1,1]] ]] ,
  1577.           Min[a]
  1578.        ] 
  1579.   ] 
  1580.  
  1581.  MaxM[a___] := MaxM1[Union[Flatten[{a}]]] 
  1582.  
  1583.  MaxM[{}] := DirectedInfinity[-1]
  1584.  
  1585.  MaxM1[{ComplexInfinity,a___}] := ComplexInfinity
  1586.  
  1587.  MaxM1[{DirectedInfinity[w_/;!FreeQ[w,Complex]],a___}] := 
  1588.  ComplexInfinity
  1589.  
  1590.  MaxM1[a_List] := MaxMM[Flatten[a]] 
  1591.  
  1592.  MaxMM[a_List] := 
  1593.    If[ !FreeQ[a,Complex], MaxMMM[a],
  1594.        Module[ {r},
  1595.         r = Max[N[a]];
  1596.         If[ FreeQ[r,Max],
  1597.             a[[ Position[ N[a],r ][[1,1]] ]] ,
  1598.             MaxMMM[a]
  1599.           ]
  1600.        ]
  1601.    ]
  1602.  
  1603.  MaxMMM[ {a___,0,b___} ] := MaxMMM[{a,b}]
  1604.  
  1605.  MaxMMM[ a_ ] :=
  1606.    Module[ {r},
  1607.      If[ Znak[ N[a[[1]]] ], 
  1608.          r = N[-a[[1]]] * Max[N[a/(-a[[1]]) ]],
  1609.          r = N[a[[1]]] * Max[N[a/a[[1]] ]]
  1610.        ];
  1611.      If[ FreeQ[r,Max],
  1612.          a[[ Position[ N[a]/1.,r ][[1,1]] ]] ,
  1613.             Max[a]
  1614.        ] 
  1615.   ] 
  1616.  
  1617.  CasesN[expr_,w_] := 
  1618.   If[ MatchQ[expr,w],{expr}, Cases[expr,w] ] 
  1619.  
  1620.  BadWords[ expr_ ] := True /;
  1621.  Or@@(!SameQ[Length[StringPosition[expr,#]],0]&/@{
  1622.  "Asymptotic","Simp","Fail"})
  1623.  
  1624.  BadWords[ _ ] := False
  1625.  
  1626.  Determinate[ expr_,x_->s_ ] := False /; 
  1627.  Or@@(!FreeQ[expr,#]&/@{integrate,if,sign,next})
  1628.  
  1629.  Determinate[ expr_,x_->s_ ] := 
  1630.    Module[ 
  1631.     {answer =
  1632.       Module[ {test},
  1633.         Off[Power::infy,Power::indet,Infinity::indet,General::indet,
  1634.             General::dbyz];
  1635.     Unprotect[Integer,Log,Factorial,Binomial];
  1636.     Power[ 0, n_?Negative ] ^:= Indeterminate;
  1637.         Power[ 1, c_/;!FreeQ[c,DirectedInfinity] ] ^:= Indeterminate;
  1638.            Log[ c__/;!FreeQ[{c},DirectedInfinity]||!FreeQ[{c},Indeterminate]] = 
  1639.         Indeterminate;
  1640.     Factorial[ c_/;!FreeQ[c,DirectedInfinity] ] = Indeterminate;      
  1641.     Binomial[ c__/;!FreeQ[{c},DirectedInfinity] ] = Indeterminate;      
  1642.         Times[ 0, c_/;!FreeQ[c,Indeterminate] || 
  1643.               !FreeQ[c,DirectedInfinity]] ^:= Indeterminate;
  1644.         test = {expr/.x->s,N[expr]/.x->s}/.{
  1645.        0^n_ -> Indeterminate, 0.^n_ -> Indeterminate};    
  1646.         On[ Power::infy,Power::indet,Infinity::indet,General::indet,
  1647.             General::dbyz]; 
  1648.     Integer/:Power[ 0, n_?Negative ] =.;
  1649.     Integer/:Power[ 1, c_/;!FreeQ[c,DirectedInfinity] ] =.;
  1650.     Integer/:Times[ 0,c_/;!FreeQ[c,Indeterminate] || 
  1651.                   !FreeQ[c, DirectedInfinity]] =.;
  1652.     Log[ c__/;!FreeQ[{c},DirectedInfinity]||!FreeQ[{c},Indeterminate]] =.;
  1653.     Factorial[ c_/;!FreeQ[c,DirectedInfinity] ] =.;
  1654.     Binomial[ c__/;!FreeQ[{c},DirectedInfinity] ] =.;      
  1655.     Protect[Integer,Log,Factorial,Binomial];
  1656.         test
  1657.      ]},
  1658.    True /; And@@(FreeQ[answer,#]&/@{
  1659.     DirectedInfinity,ComplexInfinity,Indeterminate,RealInterval})
  1660.   ]
  1661.  
  1662.  Determinate[ __ ] := False
  1663.  
  1664.  IntegerNonPositive[ expr_Integer /; expr<=0 ] :=  True
  1665.  
  1666.  IntegerNonPositive[ _ ] := False
  1667.  
  1668.  ZnakLim[ n_?NumberQ a_.,x_->s_] := True /; Negative[n]
  1669.  
  1670.  ZnakLim[ expr_,x_->s_] := Znak[ N[Analys1[expr,x->s]] ]
  1671.  
  1672.  Znak[ DirectedInfinity[-1] a_. ] := True
  1673.  
  1674.  Znak[ n_?NumberQ a_ ] := True /; Negative[n]
  1675.  
  1676.  Znak[ n_?NumberQ ] := True /; Negative[n]
  1677.  
  1678.  Znak[ _ ] := False
  1679.  
  1680. (*======================= INTEGRATE ======================================*)
  1681.  
  1682.  ToExpression[StringJoin[
  1683.  context,"Asymptotic",context,"integrate"]][ expr_,arg_,x_->s_ ] :=
  1684.    Integrate@@{Analys[expr,x->s],arg}
  1685.  
  1686. (*======================= SIGN, ABS ======================================*)
  1687.  
  1688.  AsymptoticSign[ expr_,x_->s_ ] :=
  1689.    AsymptoticForSign[ expr,x->s,Analys[expr,x->s] ]
  1690.  
  1691.  AsymptoticForSign[ expr_,x_->s_,w_/;Positive[N[w]] ] := 1
  1692.  
  1693.  AsymptoticForSign[ expr_,x_->s_,w_/;Negative[N[w]] ] := -1
  1694.  
  1695.  AsymptoticForSign[ expr_,x_->s_,0 ] := 
  1696.  If[ ZnakLim[expr,x->s], -sign[0], sign[0] ]
  1697.  
  1698.  AsymptoticForSign[ expr_,x_->s_,w_ ] := Sign[w]
  1699.  
  1700.  AsymptoticAbs[ expr_/;FreeQ[expr,Complex],x_->s_ ] :=
  1701.     expr/AsymptoticForSign[ expr,x->s,Analys[expr,x->s] ]
  1702.  
  1703.  AsymptoticAbs[ expr_,x_->s_ ] :=
  1704.    Module[ { i,r },
  1705.      r = Collect[expr//.Complex[a_,b_] :> a+ i b,i];
  1706.      If[ MatchQ[r, a_. i + b_/; FreeQ[{a,b},i]],
  1707.      r = Sqrt[(r/.i->0)^2 + ((r - (r/.i->0))/.i->1)^2];
  1708.      asymptotic = False;
  1709.      SimpFunction[ r,x->s ],
  1710.      FailLimit
  1711.      ]
  1712.    ]
  1713.  
  1714.  AbsRule =
  1715.   {
  1716.     Abs[ z_/;NumberQ[N[z]] && FreeQ[z,Complex] ] :> 
  1717.     If[ Positive[N[z]],z,-z] /; Accuracy[z] === Infinity, 
  1718.     Abs[ z_/;NumberQ[N[z]] && !FreeQ[z,Complex] ] :> 
  1719.     Block[ { answer,Abs },
  1720.         answer = SimpNumbAbs[z];
  1721.         answer /; Head[answer] =!=Abs
  1722.     ] /; Accuracy[z] === Infinity 
  1723.   }
  1724.  
  1725.  SimpNumbAbs[ a_ b_ ] := SimpNumbAbs[a] SimpNumbAbs[b]
  1726.  
  1727.  SimpNumbAbs[ a_^b_/;FreeQ[b,Complex] ] := SimpNumbAbs[a]^b
  1728.  
  1729.  SimpNumbAbs[ a_^b_/;!FreeQ[b,Complex] ] := Abs[a^b]
  1730.  
  1731.  SimpNumbAbs[ expr_Plus ] :=
  1732.    Module[ { i,r },
  1733.      r = Collect[expr//.Complex[a_,b_] :> a+ i b,i];
  1734.      If[ MatchQ[r, a_. i + b_/; FreeQ[{a,b},i]],
  1735.      Sqrt[(r/.i->0)^2 + ((r - (r/.i->0))/.i->1)^2],
  1736.      Abs[expr]
  1737.      ]
  1738.    ] /; !FreeQ[expr,Complex]
  1739.  
  1740.  SimpNumbAbs[ Complex[a_,b_] ] := Sqrt[a^2 + b^2] 
  1741.  
  1742.  SimpNumbAbs[ z_/;FreeQ[z,Complex] ] := If[ Positive[N[z]],z,-z]
  1743.  
  1744.  SimpNumbAbs[ expr_ ] := Abs[expr]
  1745.  
  1746. (*======================= GAMMA ==========================================*)
  1747.  
  1748.  AsymptoticFactorial[a_. x_,x_->DirectedInfinity[1] ] := 
  1749.     Sqrt[2 Pi a] Sqrt[x] *
  1750.     EInfinity[a x (-1 + LInfinity[1]) + a x Log[a]] /;
  1751.  card==1 && NumberQ[N[a]] && Positive[N[a]]
  1752.  
  1753.  AsymptoticFactorial[u_,x_->s_] := 
  1754.    AsymptoticForGamma[u+1,x->s,Analys[u+1,x->s]]
  1755.  
  1756.  AsymptoticGamma[u_,x_->s_] := AsymptoticForGamma[u,x->s,Analys[u,x->s]]
  1757.  
  1758.  AsymptoticForGamma[u_,x_->s_,w_] := 
  1759.     AsymptoticForGamma[u+1,x->s,w+1] AsymptoticPower[u,-1,x->s] /;
  1760.  IntegerNonPositive[w]
  1761.  
  1762.  AsymptoticForGamma[u_,x_->s_,w_. DirectedInfinity[-1]] := 
  1763.    Pi AsymptoticPower[AsymptoticSin[Pi u,x->s],-1,x->s] *
  1764.    AsymptoticPower[AsymptoticForGamma[1-u,x->s,Infinity],-1,x->s]
  1765.  
  1766.  AsymptoticForGamma[u_,x_->s_,w_. DirectedInfinity[1] ] := 
  1767.    AsymptoticPower[E,Expand[-u +(u-1/2) AsymptoticLog[u,x->s]] /.
  1768.    {a_. x^n_. :>0 /; Abs[n]>card },x->s] *
  1769.    Sqrt[2] Sqrt[Pi] (Expand[Times@@Table[ Sum[
  1770.    (-1)^(indsum (indpr+1))  If[BernoulliB[indpr+1]==0,1,
  1771.    BernoulliB[indpr+1]^indsum ] *
  1772.    AsymptoticPower[u,-indpr indsum,x->s] / 
  1773.    (indpr^indsum (indpr+1)^indsum indsum!),
  1774.    {indsum,0,If[cardFlag,1,card-1]}],{indpr,1,If[cardFlag,2,card]}]]/.
  1775.    a_. x^n_. :>0 /; Abs[n]>card)
  1776.  
  1777.  AsymptoticForGamma[u_,x_->s_,Indeterminate] := TInfinity[Gamma[u]]
  1778.  
  1779.  AsymptoticForGamma[u_,x_->s_,w_ ] :=
  1780.    Module[ {var},
  1781.      Normal[Series[Gamma[var],{var,w,card}]]/.var->u
  1782.    ]
  1783.  
  1784. (*------------------------------------------------------------------------*)
  1785.  
  1786.  AsymptoticGamma[u_,0,v_,x_->s_] := 
  1787.    AsymptoticForGammaD[u,0,v,x->s,Analys[u,x->s],Analys[v,x->s]]
  1788.  
  1789.  AsymptoticForGammaD[u_,0,v_,x_->s_,w_,ww_] := 
  1790.    AsymptoticForGamma[u,x->s,w] -
  1791.    AsymptoticForGammaDD[u,v,x->s,w,ww]
  1792.  
  1793. (*------------------------------------------------------------------------*)
  1794.  
  1795.  AsymptoticGamma[ u_,v_,x_->s_ ] := 
  1796.    AsymptoticForGammaDD[u,v,x->s,Analys[u,x->s],Analys[v,x->s]]
  1797.  
  1798.  AsymptoticForGammaDD[ u_,v_,x_->s_,w_,ww_ ] := 
  1799.      Normal[Series[Gamma[u,v],{x,s,card}]] /;
  1800.  FreeQ[{ww,w},DirectedInfinity] && FreeQ[{ww,w},Indeterminate]
  1801.  
  1802.  AsymptoticForGammaDD[ a_,u_,x_->s_,w_,ww_. DirectedInfinity[1] ] := 
  1803.    AsymptoticPower[u,a-1,x->s] AsymptoticPower[E,-u,x->s]*
  1804.    Sum[ (-1)^ind Pochhammer[1-a,ind] AsymptoticPower[u,-ind,x->s],
  1805.       {ind,0,If[cardFlag,1,card-1]}] /;
  1806.  And@@(FreeQ[w,#]&/@{DirectedInfinity,Indeterminate})
  1807.  
  1808.  AsymptoticForGammaDD[ a_,u_,x_->s_,w_. DirectedInfinity[1],ww_ ] := 
  1809.    AsymptoticForGamma[a,x->s,Infinity] -
  1810.    Sum[ (-1)^ind AsymptoticPower[u,a+ind,x->s]/
  1811.         ((a+ind) ind!), {ind,0,If[cardFlag,1,card-1]}] /;
  1812.  And@@(FreeQ[w,#]&/@{DirectedInfinity,Indeterminate})
  1813.  
  1814.  AsymptoticForGammaDD[ __ ] := FailLimit 
  1815.  
  1816. (*===================== POLYGAMMA ==========================================*)
  1817.  
  1818.  AsymptoticPolyGamma[u_,x_->s_] := 
  1819.    AsymptoticForPolyGamma[0,u,x->s,Analys[u,x->s]]
  1820.  
  1821.  AsymptoticPolyGamma[k_Integer?NonNegative,u_,x_->s_] := 
  1822.    AsymptoticForPolyGamma[k,u,x->s,Analys[u,x->s]]
  1823.  
  1824.  AsymptoticPolyGamma[ u__ ] := {u} FailLimit
  1825.  
  1826.  AsymptoticForPolyGamma[k_,u_,x_->s_,w_] := 
  1827.    ( AsymptoticForPolyGamma[k,u+1,x->s,w+1] - 
  1828.      (-1)^k k! AsymptoticPower[u,-k-1,x->s] ) /;
  1829.  IntegerNonPositive[w] 
  1830.  
  1831.  AsymptoticForPolyGamma[ 0,u_,x_->s_,
  1832.                          w_/;!FreeQ[w, DirectedInfinity] ] := 
  1833.    AsymptoticLog[u,x->s] - AsymptoticPower[u,-1,x->s]/2 -
  1834.    Sum[ BernoulliB[2 ind]/(2 ind) AsymptoticPower[u,-2 ind,x->s],
  1835.       {ind,1,If[cardFlag,2,card]}]
  1836.  
  1837.  AsymptoticForPolyGamma[ k_,u_,x_->s_,
  1838.                          w_/;!FreeQ[w, DirectedInfinity] ] := 
  1839.    (-1)^(k-1) *
  1840.    ( (k-1)! AsymptoticPower[u,-k,x->s] +
  1841.      k!/2  AsymptoticPower[u,-k-1,x->s] +
  1842.      Sum[ AsymptoticPower[u,-2ind-k,x->s] BernoulliB[2 ind] *
  1843.           (2ind+k-1)!/(2 ind)!,
  1844.         {ind,1,If[cardFlag,1,card-1]} ] ) 
  1845.  
  1846.  AsymptoticForPolyGamma[k_,u_,x_->s_,Indeterminate] := 
  1847.    TInfinity[PolyGamma[k,u]]
  1848.  
  1849.  AsymptoticForPolyGamma[k_,u_,x_->s_,w_ ] :=
  1850.    Module[ {var},
  1851.      Normal[Series[PolyGamma[k,var],{var,w,card}]]/.{ var :> u}
  1852.    ]
  1853.  
  1854. (*===================== ZETA ===============================================*)
  1855.  
  1856.  AsymptoticZeta[ u_,x_->s_ ] := 
  1857.    AsymptoticForZeta[u,x->s,Analys[u,x->s]] 
  1858.  
  1859.  AsymptoticForZeta[ u_,x_->s_,1 ] := 
  1860.    Pi^(-1)*
  1861.    AsymptoticPower[2 Pi,u,x->s] * 
  1862.    AsymptoticForGamma[2-u,x->s,1] *
  1863.    AsymptoticForZeta[1-u,x->s,0] *
  1864.    AsymptoticSin[Pi u/2,x->s] AsymptoticPower[1-u,-1,x->s] 
  1865.  
  1866.  AsymptoticZeta[u_,v_,x_->s_] := 
  1867.    (AsymptoticPower[u-1,-1,x->s] - AsymptoticPolyGamma[0,v,x->s]) /;
  1868.  Analys[u,x->s]===1   
  1869.  
  1870.  AsymptoticZeta[ u_,v_,x_->s_ ] := 
  1871.    AsymptoticForZeta[u,v,x->s,Analys[v,x->s]] /;
  1872.  And@@(FreeQ[u,#]&/@{x,LInfinity,EInfinity,TInfinity})
  1873.  
  1874.  AsymptoticZeta[ u__ ] := {u} FailLimit
  1875.  
  1876.  AsymptoticForZeta[ u_,v_,x_->s_,w_ ] :=
  1877.    (Sum[ AsymptoticPower[ind+v,-u,x->s],{ind,0,-w} ] + 
  1878.     AsymptoticForZeta[u,v-w+1,x->s,1] ) /;
  1879.  IntegerNonPositive[w]
  1880.  
  1881.  AsymptoticForZeta[ u__,x_->s_,Indeterminate ] := TInfinity[Zeta[u]]
  1882.  
  1883.  AsymptoticForZeta[ u__,x_->s_,w_/;FreeQ[w,DirectedInfinity] ] := 
  1884.  Taylor[Zeta[u],x->s] 
  1885.  
  1886.  AsymptoticForZeta[ u__ ] := {u} FailLimit
  1887.  
  1888. (*===================== ExpIntegralE ========================================*)
  1889.  
  1890.  AsymptoticExpIntegralE[ k_,u_,x_->s_ ] := 
  1891.    AsymptoticForExpIntegralE[k,u,x->s,Analys[u,x->s]] /;
  1892.  And@@(FreeQ[k,#]&/@{x,LInfinity,EInfinity,TInfinity})
  1893.  
  1894.  AsymptoticExpIntegralE[ u__ ] := {u} FailLimit
  1895.  
  1896.  AsymptoticForExpIntegralE[ k_,u_,x_->s_,
  1897.                              w_/;!FreeQ[w,DirectedInfinity] ] :=
  1898.    AsymptoticPower[E,-u,x->s] *
  1899.    Sum[ (-1)^ind Pochhammer[k,ind] AsymptoticPower[u,-ind-1,x->s],
  1900.       {ind,0,If[cardFlag,1,card]}] 
  1901.  
  1902.  AsymptoticForExpIntegralE[ k_,u_,x_->s_,Indeterminate ] :=
  1903.    TInfinity[ExpIntegralE[k,u]]
  1904.  
  1905.  AsymptoticForExpIntegralE[ k_,u_,x_->s_,w_ ] :=
  1906.    Module[ {var},
  1907.      AsympSimplify[SimpFunction[
  1908.      Taylor[ ExpIntegralE[k,var],var->w ]/.var->u,x->s],x,card,True]
  1909.    ]
  1910.  
  1911. (*===================== ExpIntegralEi =======================================*)
  1912.  
  1913.  AsymptoticExpIntegralEi[ u_,x_->s_ ] := 
  1914.    AsymptoticForExpIntegralEi[u,x->s,Analys[u,x->s]] 
  1915.  
  1916.  AsymptoticForExpIntegralEi[ u_,x_->s_,
  1917.                              w_/;!FreeQ[w,DirectedInfinity] ] :=
  1918.    AsymptoticPower[E,u,x->s] *
  1919.    Sum[ (ind-1)! AsymptoticPower[u,-ind,x->s],{ind,1,If[cardFlag,2,card+1]}] 
  1920.  
  1921.  AsymptoticForExpIntegralEi[ u_,x_->s_,Indeterminate ] :=
  1922.    TInfinity[ExpIntegralEi[u]]
  1923.  
  1924.  AsymptoticForExpIntegralEi[ u_,x_->s_,0 ] :=
  1925.    EulerGamma + AsymptoticLog[u,x->s] +
  1926.    Sum[ AsymptoticPower[u,ind,x->s]/(ind ind!),{ind,1,If[cardFlag,2,card]} ]
  1927.  
  1928.  AsymptoticForExpIntegralEi[ u_,x_->s_,w_ ] :=
  1929.    Module[ {var},
  1930.      AsympSimplify[SimpFunction[
  1931.      Taylor[ ExpIntegralEi[var],var->w ]/.var->u,x->s],x,card,True]
  1932.    ]
  1933.  
  1934. (*===================== Erf && Erfc ========================================*)
  1935.  
  1936.  AsymptoticErfc[ u_,x_->s_ ] := 
  1937.    AsymptoticForErfc[u,x->s,Analys[u,x->s]]
  1938.  
  1939.  AsymptoticForErfc[ u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  1940.    2 - AsymptoticForErfc[-u,x->s,Infinity]
  1941.  
  1942.  AsymptoticForErfc[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  1943.    AsymptoticPower[E,-u^2,x->s]/Sqrt[Pi] *
  1944.    AsymptoticPower[u,-1,x->s] * 
  1945.    (1 + Sum[ (-1)^ind (2 ind-1)!! 2^(-ind) *
  1946.              AsymptoticPower[u,-2 ind,x->s],{ind,1,If[cardFlag,2,card]}])
  1947.  
  1948.  AsymptoticForErfc[ u_,x_->s_,Indeterminate ] := TInfinity[ Erfc[u] ]
  1949.  
  1950.  AsymptoticForErfc[ u_,x_->s_,w_ ] := 
  1951.    Module[ {var},
  1952.      Taylor[ Erfc[var],var->w ]/.var->u
  1953.    ]
  1954.  
  1955.  AsymptoticErf[ u_,x_->s_ ] := 
  1956.    1 - AsymptoticForErfc[u,x->s,Analys[u,x->s]]
  1957.  
  1958.  
  1959. (*===================== ArcTan ==============================================*)
  1960.  
  1961.  AsymptoticArcTan[ u_,x_->s_ ] := 
  1962.    AsymptoticForArcTan[u,x->s,Analys[u,x->s]]
  1963.  
  1964.  AsymptoticForArcTan[ u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  1965.    -Pi/2 - 
  1966.    Sum[ (-1)^ind AsymptoticPower[u,-2 ind+1,x->s]/(2 ind-1),
  1967.       {ind,1,If[cardFlag,2,card]}] 
  1968.  
  1969.  AsymptoticForArcTan[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  1970.    Pi/2 + 
  1971.    Sum[ (-1)^ind AsymptoticPower[u,-2 ind+1,x->s]/(2 ind-1),
  1972.       {ind,1,If[cardFlag,2,card]}] 
  1973.  
  1974.  AsymptoticForArcTan[ u_,x_->s_,Indeterminate ] :=
  1975.    TInfinity[ ArcTan[u] ]
  1976.  
  1977.  AsymptoticForArcTan[ u_,x_->s_,w_ ] :=
  1978.    Module[ {var},
  1979.      AsympSimplify[
  1980.     SimpFunction[Taylor[ ArcTan[var],var->w ]/.var->u,x->s],x,card,True]
  1981.    ]
  1982.  
  1983. (*===================== ArcCot ==============================================*)
  1984.  
  1985.  AsymptoticArcCot[ u_,x_->s_ ] := 
  1986.    AsymptoticForArcCot[u,x->s,Analys[u,x->s]]
  1987.  
  1988.  AsymptoticForArcCot[u_/; FreeQ[u,Complex],x_->s_,w_. DirectedInfinity[-1] ] :=
  1989.    Sum[ (-1)^ind AsymptoticPower[u,-2 ind+1,x->s]/(2 ind-1),
  1990.       {ind,1,If[cardFlag,2,card]}] 
  1991.  
  1992.  AsymptoticForArcCot[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  1993.    Sum[ (-1)^(ind-1) AsymptoticPower[u,-2 ind+1,x->s]/(2 ind-1),
  1994.       {ind,1,If[cardFlag,2,card]}] 
  1995.  
  1996.  AsymptoticForArcCot[ u_,x_->s_,Indeterminate ] :=
  1997.    TInfinity[ ArcCot[u] ]
  1998.  
  1999.  AsymptoticForArcCot[ u_,x_->s_,w_ ] :=
  2000.    Module[ {var},
  2001.      AsympSimplify[
  2002.     SimpFunction[Taylor[ ArcCot[var],var->w ]/.var->u,x->s],x,card,True]
  2003.    ]
  2004.  
  2005. (*========================================================================
  2006.              ArcSec && ArcCsc & ArcSin && ArcCos         
  2007.  =========================================================================*)
  2008.  
  2009.  AsymptoticArcSec[ u_,x_->s_ ] := 
  2010.    AsymptoticArcCos[AsymptoticPower[u,-1,x->s],x->s]
  2011.  
  2012.  AsymptoticArcCsc[ u_,x_->s_ ] := 
  2013.    AsymptoticArcSin[AsymptoticPower[u,-1,x->s],x->s]
  2014.  
  2015.  AsymptoticArcSin[ u_,x_->s_ ] := 
  2016.    AsymptoticForArcSin[u,x->s,Analys[u,x->s]]
  2017.  
  2018.  AsymptoticArcCos[ u_,x_->s_ ] := 
  2019.    AsymptoticForArcCos[u,x->s,Analys[u,x->s]]
  2020.  
  2021.  AsymptoticForArcSin[u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] := 
  2022.    -I AsymptoticForArcSinh[I u,x->s,w]
  2023.  
  2024.  AsymptoticForArcSin[u_,x_->s_,w_ ] := 
  2025.    Module[ {var},
  2026.      AsympSimplify[
  2027.     SimpFunction[Taylor[ ArcSin[var],var->w ]/.var->u,x->s],x,card,True]
  2028.    ]
  2029.  
  2030.  AsymptoticForArcCos[u_,x_->s_,w_. DirectedInfinity[-1] ] := 
  2031.    -I AsymptoticForArcCosh[u,x->s,DirectedInfinity[-1]]
  2032.  
  2033.  AsymptoticForArcCos[u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] := 
  2034.    I AsymptoticForArcCosh[u,x->s,w]
  2035.  
  2036.  AsymptoticForArcCos[u_,x_->s_,w_ ] := 
  2037.    Module[ {var},
  2038.      AsympSimplify[
  2039.     SimpFunction[Taylor[ ArcCos[var],var->w ]/.var->u,x->s],x,card,True]
  2040.    ]
  2041.  
  2042. (*===================== ArcSinh =============================================*)
  2043.  
  2044.  AsymptoticArcSinh[ u_,x_->s_ ] := 
  2045.    AsymptoticForArcSinh[u,x->s,Analys[u,x->s]]
  2046.  
  2047.  AsymptoticForArcSinh[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2048.    Log[2] + AsympSimplify[ AsymptoticLog[u,x->s] + 
  2049.    Sum[ (-1)^ind (2 ind-1)!!/( (2 ind)!! (2 ind) ) *
  2050.       AsymptoticPower[u,-2 ind,x->s],
  2051.       {ind,1,If[cardFlag,2,card]}],
  2052.    x,card,True] 
  2053.  
  2054.  AsymptoticForArcSinh[ u_,x_->s_,Indeterminate ] := TInfinity[ ArcSinh[u] ]
  2055.  
  2056.  AsymptoticForArcSinh[ u_,x_->s_,w_ ] := 
  2057.    Module[ {var},
  2058.      SimpFunction[Taylor[ ArcSinh[var],var->w ]/.var->u,x->s]
  2059.    ]
  2060.  
  2061. (*===================== ArcCosh =============================================*)
  2062.  
  2063.  AsymptoticArcCosh[ u_,x_->s_ ] := 
  2064.    AsymptoticForArcCosh[u,x->s,Analys[u,x->s]]
  2065.  
  2066.  AsymptoticForArcCosh[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2067.    Log[2] + AsymptoticLog[u,x->s] - 
  2068.    Sum[ (2 ind-1)!!/( (2 ind)!! (2 ind) ) *
  2069.       AsymptoticPower[u,-2 ind,x->s],
  2070.       {ind,1,If[cardFlag,2,card]}] 
  2071.  
  2072.  AsymptoticForArcCosh[ u_,x_->s_,Indeterminate ] := TInfinity[ ArcCosh[u] ]
  2073.  
  2074.  AsymptoticForArcCosh[ u_,x_->s_,w_ ] := 
  2075.    Module[ {var},
  2076.      AsympSimplify[
  2077.     SimpFunction[Taylor[ ArcCosh[var],var->w ]/.var->u,x->s],x,card,True]
  2078.    ]
  2079.  
  2080. (*===================== ArcTanh ============================================*)
  2081.  
  2082.  AsymptoticArcTanh[ u_,x_->s_ ] :=
  2083.    AsymptoticForArcTanh[ u,x->s,Analys[u,x->s] ]
  2084.  
  2085.  AsymptoticForArcTanh[ u_,x_->s_,Indeterminate ] := TInfinity[ ArcTanh[u] ]
  2086.  
  2087.  AsymptoticForArcTanh[ u_,x_->s_, 1] :=
  2088.    1/2 AsymptoticLog[1+u, x->s] - 1/2 AsymptoticLog[1-u, x->s]
  2089.  
  2090.  AsymptoticForArcTanh[ u_,x_->s_,w_ ] :=    
  2091.    Module[ {var},
  2092.      AsympSimplify[
  2093.     SimpFunction[Taylor[ ArcTanh[var],var->w ]/.var->u,x->s],x,card,True]
  2094.    ]
  2095.  
  2096. (*===================== Tanh ===============================================*)
  2097.  
  2098.  AsymptoticTanh[ expr_,x_->s_ ] :=
  2099.    AsymptoticForTanh[expr,x->s,Analys[expr,x->s]]
  2100.  
  2101.  AsymptoticForTanh[ expr_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2102.    1 - 2 Sum[ (-1)^p AsymptoticPower[ E,-2 expr (p+1),x->s ],
  2103.         {p, 0, card-1} ]
  2104.  
  2105.  AsymptoticForTanh[ expr_,x_->s_,Indeterminate ] :=
  2106.    TInfinity[ Tanh[expr] ] 
  2107.  
  2108.  AsymptoticForTanh[ expr_,x_->s_,w_ ] :=
  2109.    Module[ {var},
  2110.      SimpFunction[ Taylor[ Tanh[var],var->w ]/.var->expr,x->s]
  2111.    ]
  2112.  
  2113. (*===================== Coth ===============================================*)
  2114.  
  2115.  AsymptoticCoth[ expr_,x_->s_ ] :=
  2116.    AsymptoticForCoth[expr,x->s,Analys[expr,x->s]]
  2117.  
  2118.  AsymptoticForCoth[ expr_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2119.    1 + 2 Sum[ AsymptoticPower[ E,-2 expr (p+1),x->s ],
  2120.         {p, 0, card-1} ]
  2121.  
  2122.  AsymptoticForCoth[ expr_,x_->s_,Indeterminate ] :=
  2123.    TInfinity[ Coth[expr] ] 
  2124.  
  2125.  AsymptoticForCoth[ expr_,x_->s_,w_ ] :=
  2126.    Module[ {var},
  2127.      SimpFunction[ Taylor[ Coth[var],var->w ]/.var->expr,x->s]
  2128.    ]
  2129.  
  2130. (*===================== ArcCoth =============================================*)
  2131.  
  2132.  AsymptoticArcCoth[ u_,x_->s_ ] :=  
  2133.    AsymptoticArcTanh[ AsymptoticPower[u,-1,x->s],x->s ]
  2134.  
  2135. (*===================== ArcSech =============================================*)
  2136.  
  2137.  AsymptoticArcSech[ u_,x_->s_ ] :=  
  2138.    AsymptoticArcCosh[ AsymptoticPower[u,-1,x->s],x->s ]
  2139.  
  2140. (*===================== ArcCsch =============================================*)
  2141.  
  2142.  AsymptoticArcCsch[ u_,x_->s_ ] :=  
  2143.    AsymptoticArcSinh[ AsymptoticPower[u,-1,x->s],x->s ]
  2144.  
  2145. (*===================== SinIntegral =========================================*)
  2146.  
  2147.  AsymptoticSinIntegral[ u_,x_->s_ ] :=
  2148.    AsymptoticForSinIntegral[u,x->s,Analys[u,x->s]]
  2149.  
  2150.  AsymptoticForSinIntegral[ u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  2151.    - AsymptoticForSinIntegral[ -u,x->s,Infinity ]
  2152.  
  2153.  AsymptoticForSinIntegral[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2154.    Pi/2 - 
  2155.    AsymptoticForCos[u,x->s,w] *
  2156.    Sum[ (-1)^(ind+1) (2 ind-2)! AsymptoticPower[u,-2 ind+1,x->s],
  2157.       {ind,1,If[cardFlag,2,card]}] -
  2158.    If[ card==1,0,
  2159.        AsymptoticForSin[u,x->s,w] *
  2160.        Sum[ (-1)^(ind+1) (2 ind-1)! AsymptoticPower[u,-2 ind,x->s],
  2161.           {ind,1,If[cardFlag,2,card-1]} ]
  2162.      ] 
  2163.  
  2164.  AsymptoticForSinIntegral[ u_,x_->s_,Indeterminate ] :=
  2165.    TInfinity[ SinIntegral[u] ]
  2166.  
  2167.  AsymptoticForSinIntegral[ u_,x_->s_,w_ ] :=
  2168.    Module[ {var},
  2169.      Taylor[ SinIntegral[var],var->w ]/.var->u
  2170.    ]
  2171.  
  2172. (*===================== CosIntegral =========================================*)
  2173.  
  2174.  AsymptoticCosIntegral[ u_,x_->s_ ] :=
  2175.    AsymptoticForCosIntegral[u,x->s,Analys[u,x->s]]
  2176.  
  2177.  AsymptoticForCosIntegral[ u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  2178.    -Pi I +  AsymptoticForCosIntegral[ -u,x->s,Infinity ]
  2179.  
  2180.  AsymptoticForCosIntegral[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2181.    AsymptoticForSin[u,x->s,w] *
  2182.    Sum[ (-1)^(ind+1) (2 ind-2)! AsymptoticPower[u,-2 ind+1,x->s],
  2183.       {ind,1,If[cardFlag,2,card]}] -
  2184.    If[ card==1,0,
  2185.        AsymptoticForCos[u,x->s,w] *
  2186.        Sum[ (-1)^(ind+1) (2 ind-1)! AsymptoticPower[u,-2 ind,x->s],
  2187.           {ind,1,If[cardFlag,2,card-1]} ]
  2188.      ]
  2189.  
  2190.  AsymptoticForCosIntegral[ u_,x_->s_,Indeterminate ] :=
  2191.    TInfinity[ CosIntegral[u] ]
  2192.  
  2193.  AsymptoticForCosIntegral[ u_,x_->s_,w_ ] :=
  2194.    Module[ {var},
  2195.      Taylor[ CosIntegral[var],var->w ]/.var->u
  2196.    ]
  2197.  
  2198. (*===================== FresnelS  ===========================================*)
  2199.  
  2200.  AsymptoticFresnelS[ u_,x_->s_ ] :=
  2201.    AsymptoticForFresnelS[u,x->s,Analys[u,x->s]]
  2202.  
  2203.  AsymptoticForFresnelS[ u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  2204.    - AsymptoticForFresnelS[-u,x->s,Infinity]
  2205.  
  2206.  AsymptoticForFresnelS[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2207.    1/2 - 
  2208.    AsymptoticForCos[Expand[Pi/2 u^2],x->s,Infinity]/Pi *
  2209.    ( AsymptoticPower[u,-1,x->s] +
  2210.      Sum[ (-1)^ind Product[4 indpr-1,{indpr,1,ind}] Pi^(-2 ind) *
  2211.           AsymptoticPower[u,-4 ind -1,x->s],
  2212.         {ind,1,If[cardFlag,2,Round[card/2] ]}]) -
  2213.    AsymptoticForSin[Expand[Pi/2 u^2],x->s,Infinity]/Pi *
  2214.    If[card==1,0,
  2215.       Sum[ (-1)^ind Product[4 indpr+1,{indpr,1,ind}] Pi^(-2 ind) *
  2216.           AsymptoticPower[u,-4 ind -3,x->s],
  2217.          {ind,0,If[cardFlag,1,Floor[card/2] ]}]
  2218.      ] 
  2219.  
  2220.  AsymptoticForFresnelS[ u_,x_->s_,Indeterminate ] :=
  2221.    TInfinity[ FresnelS[u] ]
  2222.  
  2223.  AsymptoticForFresnelS[ u_,x_->s_,w_ ] :=
  2224.    Module[ {var},
  2225.      Taylor[ FresnelS[var],var->w ]/.var->u
  2226.    ]
  2227.  
  2228. (*===================== FresnelC ===========================================*)
  2229.  
  2230.  AsymptoticFresnelC[ u_,x_->s_ ] :=
  2231.    AsymptoticForFresnelC[u,x->s,Analys[u,x->s]]
  2232.   
  2233.  AsymptoticForFresnelC[ u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  2234.    - AsymptoticForFresnelC[-u,x->s,Infinity]
  2235.  
  2236.  AsymptoticForFresnelC[ u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2237.    1/2 + 
  2238.    AsymptoticForSin[Expand[Pi/2 u^2],x->s,Infinity]/Pi *
  2239.    ( AsymptoticPower[u,-1,x->s] +
  2240.      Sum[ (-1)^ind Product[4 indpr-1,{indpr,1,ind}] Pi^(-2 ind) *
  2241.           AsymptoticPower[u,-4 ind -1,x->s],
  2242.         {ind,1,If[cardFlag,2,Round[card/2] ]}]) -
  2243.    AsymptoticForCos[Expand[Pi/2 u^2],x->s,Infinity]/Pi *
  2244.    If[card==1,0,
  2245.       Sum[ (-1)^ind Product[4 indpr+1,{indpr,1,ind}] Pi^(-2 ind) *
  2246.           AsymptoticPower[u,-4 ind -3,x->s],
  2247.          {ind,0,If[cardFlag,1,Floor[card/2] ]}]
  2248.      ] 
  2249.  
  2250.  AsymptoticForFresnelC[ u_,x_->s_,Indeterminate ] :=
  2251.    TInfinity[ FresnelC[u] ]
  2252.  
  2253.  AsymptoticForFresnelC[ u_,x_->s_,w_ ] :=
  2254.    Module[ {var},
  2255.      Taylor[ FresnelC[var],var->w ]/.var->u
  2256.    ]
  2257.  
  2258. (*===================== PolyLog  ===========================================*)
  2259.  
  2260.  AsymptoticPolyLog[ k_Integer?Positive,u_,x_->s_ ] :=
  2261.    AsymptoticForPolyLog[k,u,x->s,Analys[u,x->s]]
  2262.  
  2263.  AsymptoticForPolyLog[ k_,u_,x_->s_,w_. DirectedInfinity[-1] ] :=
  2264.    (-1)^(k+1) AsymptoticForPolyLog[k,AsymptoticPower[u,-1,x->s],x->s,0] -
  2265.    (2 Pi I)^k/k! BernoulliB[k,AsymptoticLog[u,x->s]/(2 Pi I)]
  2266.  
  2267.  AsymptoticForPolyLog[ k_,u_,x_->s_,w_/;!FreeQ[w,DirectedInfinity] ] :=
  2268.    (-1)^(k+1) AsymptoticForPolyLog[k,AsymptoticPower[u,-1,x->s],x->s,0] -
  2269.    (-2 Pi I)^k/k! BernoulliB[k,I AsymptoticLog[u,x->s]/(2 Pi)]
  2270.  
  2271.  AsymptoticForPolyLog[ k_,u_,x_->s_,Indeterminate ] :=
  2272.    TInfinity[ PolyLog[k,u] ]
  2273.  
  2274.  AsymptoticForPolyLog[ k_,u_,x_->s_,w_ ] :=
  2275.    Sum[ u^ind/ind^k,{ind,1,If[cardFlag,2,card]}]
  2276.  
  2277. (*========================================================================*)
  2278.  
  2279.  Attributes[ Limit ] = {HoldFirst,ReadProtected,Protected} 
  2280.  End[]  (* Calculus`Limit`Private` *)
  2281.  
  2282.  EndPackage[]   (* Calculus`Limit` *)
  2283.  
  2284.