Sindbad~EG File Manager

Current Path : /usr/home/beeson/MathXpert/trigcalc/
Upload File :
Current File : /usr/home/beeson/MathXpert/trigcalc/loglim.c

/*  M. Beeson, logarithmic limit operators, for MathXpert
Original date 8.17.98
2.9.05 modified includes
*/

#include <string.h>
#include <assert.h>
#include <math.h>
#include "globals.h"
#include "ops.h"
#include "trig.h"
#include "calc.h"
#include "prover.h"
#include "order.h"
#include "checkarg.h"
#include "cancel.h"
#include "factor.h"
#include "autosub.h"
#include "algaux.h"
#include "mplimits.h"
#include "deriv.h"
#include "graphstr.h"
#include "mpdoc.h"
#include "automode.h"
#include "deval.h"
#include "symbols.h"
#include "mathmode.h"  /* set_substitutionflag */
#include "pvalaux.h" /* is_linear_in */
#include "solvelin.h" /* solve_linear_ineq_for */
#include "probtype.h"
#include "psubst.h"
#include "errbuf.h"
#include "limval2.h"
#include "polynoms.h"   /* polyform */
#include "autosimp.h"   /* SetShowStepOperation */
#include "maxsub.h"
#include "dispfunc.h"
#include "trigpoly.h"   /* algpoly */

/*_________________________________________________________________*/
int limtlnt(term t, term arg, term *next, char *reason)
/* lim(t->0+, t ln t) = 0 */
{ term x,w,u,v,temp;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 3)
     return 1;
  if(!ZERO(ARG(1,ARG(0,t))))
     return 1;
  w = LIMITAND(t);
  if(FUNCTOR(w) != '*' || ARITY(w) != 2)
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(FUNCTOR(u) != LN && FUNCTOR(v) != LN)
     return 1;
  if(FUNCTOR(v) != LN)
     { temp = u;
       u = v;
       v = temp;
     }
  if(!equals(ARG(0,v),x))
     return 1;
  if(!equals(u,x))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->0+,t ln t)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limtpowerlnt(term t, term arg, term *next, char *reason)
/* lim(t->0+, t^n  ln t) = 0 */
{ term x,w,u,v,temp;
  unsigned short g;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 3)
     return 1;
  if(!ZERO(ARG(1,ARG(0,t))))
     return 1;
  w = LIMITAND(t);
  if(FUNCTOR(w) != '*' || ARITY(w) != 2)
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(FUNCTOR(u) != LN && FUNCTOR(v) != LN)
     return 1;
  if(FUNCTOR(v) != LN)
     { temp = u;
       u = v;
       v = temp;
     }
  if(!equals(ARG(0,v),x))
     return 1;
  if(equals(u,x))
     /* x ln x */
     goto out;
  g = FUNCTOR(u);
  if(g == SQRT && equals(ARG(0,u),x))
     /* sqrt x ln x */
     goto out;
  if(g == ROOT && equals(ARG(1,u),x) && INTEGERP(ARG(0,u)))
     goto out;
  if(g != '^' || !equals(ARG(0,u),x))
     return 1;
  if(contains(ARG(1,u),FUNCTOR(x)))
     return 1;
  if(obviously_positive(ARG(1,u)))
     goto out;
  out:
     *next = zero;
     HIGHLIGHT(*next);
     strcpy(reason, "$$lim(t->0+,t^n ln t)=0$$");
     return 0;
}
/*_________________________________________________________________*/
int limtlntpower(term t, term arg, term *next, char *reason)
/* lim(t->0+, t (ln t)^n) = 0 */
{ term x,w,u,v,temp;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 3)
     return 1;
  if(!ZERO(ARG(1,ARG(0,t))))
     return 1;
  w = LIMITAND(t);
  if(FUNCTOR(w) != '*' || ARITY(w) != 2)
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(!equals(u,x) && !equals(v,x))
     return 1;
  if(!equals(u,x))
     { temp = u;
       u = v;
       v = temp;
     }
  if(FUNCTOR(v) != '^')
     return 1;
  if(FUNCTOR(ARG(0,v)) != LN)
     return 1;
  if(!equals(ARG(0,ARG(0,v)),x))
     return 1;
  if(!obviously_positive(ARG(1,v)))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->0+,t (ln t)^n)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limtpowerlntpower(term t, term arg, term *next, char *reason)
/* lim(t->0+, t (ln t)^n) = 0 */
{ term x,w,u,v,temp;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 3)
     return 1;
  if(!ZERO(ARG(1,ARG(0,t))))
     return 1;
  w = LIMITAND(t);
  if(FUNCTOR(w) != '*' || ARITY(w) != 2)
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(FUNCTOR(u) != '^' && FUNCTOR(u) != SQRT)
     return 1;
  if(FUNCTOR(v) != '^' && FUNCTOR(v) != SQRT)
     return 1;
  if(!equals(ARG(0,u),x) && !equals(ARG(0,v),x))
     return 1;
  if(!equals(ARG(0,u),x))
     { temp = u;
       u = v;
       v = temp;
     }
  if(FUNCTOR(ARG(0,v)) != LN)
     return 1;
  if(!equals(ARG(0,ARG(0,v)),x))
     return 1;
  if(!obviously_positive(ARG(1,v)))
     return 1;
  if(!obviously_positive(ARG(1,u)))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->0+,t^k (ln t)^n)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limlntovert(term t, term arg, term *next, char *reason)
   /* lim(t->infinity,ln(t)/t)=0   */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(!equals(v,x))
     return 1;
  if(FUNCTOR(u) != LN || !equals(ARG(0,u),x))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,ln(t)/t)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limlntpowerovert(term t, term arg, term *next, char *reason)
   /* lim(t->infinity,ln(t)^n/t)=0 */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);   /* w = u/v */
  if(!equals(v,x))
     return 1;
  if(FUNCTOR(u) != '^')
     return 1;
  if(FUNCTOR(ARG(0,u)) != LN)
     return 1;
  if(!equals(ARG(0,ARG(0,u)),x))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,ln(t)^n/t)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limlntovertpower(term t, term arg, term *next, char *reason)
   /* lim(t->infinity,ln(t)/t^n)=0 */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(FUNCTOR(v) != '^')
     return 1;
  if(!equals(ARG(0,v),x))
     return 1;
  if(FUNCTOR(u) != LN)
     return 1;
  if(!equals(ARG(0,u),x))
     return 1;
  if(!obviously_positive(ARG(1,v)))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,ln(t)/t^n)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limlntpowerovertpower(term t, term arg, term *next, char *reason)
   /* lim(t->infinity,ln(t)^n/t^k)=0 */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(0,w);
  v = ARG(1,w);
  if(FUNCTOR(v) != '^')
     return 1;
  if(!equals(ARG(0,v),x))
     return 1;
  if(FUNCTOR(u) != '^')
     return 1;
  if(FUNCTOR(ARG(0,u)) != LN)
     return 1;
  if(!equals(ARG(0,ARG(0,u)),x))
     return 1;
  *next = zero;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,ln(t)^n/t^k)=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limtoverlnt(term t, term arg, term *next, char *reason)
 /* lim(t->infinity,t/ln(t))=0 */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  v = ARG(0,w);
  u = ARG(1,w);
  if(!equals(v,x))
     return 1;
  if(FUNCTOR(u) != LN || !equals(ARG(0,u),x))
     return 1;
  *next = infinity;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,t/ln(t))=0$$");
  return 0;
}

/*_________________________________________________________________*/
int limtoverlntpower(term t, term arg, term *next, char *reason)
/* lim(t->infinity,t/ln(t)^n)=infinity  */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  v = ARG(0,w);
  u = ARG(1,w);
  if(!equals(v,x))
     return 1;
  if(FUNCTOR(u) != '^')
     return 1;
  if(FUNCTOR(ARG(0,u)) != LN)
     return 1;
  if(!equals(ARG(0,ARG(0,u)),x))
     return 1;
  *next = infinity;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,t/ln(t)^n)=infinity$$");
  return 0;
}


/*_________________________________________________________________*/
int limtpoweroverlnt(term t, term arg, term *next, char *reason)
/* lim(t->infinity,t^n/ln(t))=infinity */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  v = ARG(0,w);
  u = ARG(1,w);
  if(FUNCTOR(v) != '^')
     return 1;
  if(!equals(ARG(0,v),x))
     return 1;
  if(FUNCTOR(u) != LN)
     return 1;
  if(!equals(ARG(0,u),x))
     return 1;
  if(!obviously_positive(ARG(1,v)))
     return 1;
  *next = infinity;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,t^n/ln(t))=infinity$$");
  return 0;
}


/*_________________________________________________________________*/
int limtpoweroverlntpower(term t, term arg, term *next, char *reason)
   /*lim(t->infinity,t^n/(ln t)^k)=infinity */
{ term x,w,u,v;
  if(FUNCTOR(t) != LIMIT)
     return 1;
  if(ARITY(t) != 2)
     return 1;
  if(!equals(ARG(1,ARG(0,t)),infinity))
     return 1;
  w = LIMITAND(t);
  if(!FRACTION(w))
     return 1;
  x = ARG(0,ARG(0,t));
  u = ARG(1,w);
  v = ARG(0,w);
  if(FUNCTOR(v) != '^')
     return 1;
  if(!equals(ARG(0,v),x))
     return 1;
  if(FUNCTOR(u) != '^')
     return 1;
  if(FUNCTOR(ARG(0,u)) != LN)
     return 1;
  if(!equals(ARG(0,ARG(0,u)),x))
     return 1;
  *next = infinity;
  HIGHLIGHT(*next);
  strcpy(reason, "$$lim(t->infinity,t^n/(ln t)^k)=infinity$$");
  return 0;
}


Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists