Sindbad~EG File Manager
/* 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