Sindbad~EG File Manager
/*
M. Beeson, for MathXpert
9.22.92 code written
2.26.98 last modified
4.2.00 modified abssinineq and abscosineq
10.2.09 corrected abssinineq and abscosineq
10.22.23 replaced OEM symbols with TeX
*/
#include <string.h>
#include "globals.h"
#include <assert.h>
#include "ops.h"
#include "operator.h"
#include "probtype.h"
#include "prover.h"
#include "symbols.h"
#include "errbuf.h"
/*______________________________________________________ */
int abssinineq(term ineq, term arg, term *next, char *reason)
/* |sin u|\\le 1 */
{ unsigned f = FUNCTOR(ineq);
term a,b;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(a) == ABSFUNCTOR)
a = ARG(0,a);
if(FUNCTOR(a) != SIN)
return 1;
if(f == LE)
err = infer(le(one,b));
else // if f == '<'
err = infer(lessthan(one,b));
if(!err)
{ *next = trueterm;
strcpy(reason,"$|sin u| \\le 1$");
return 0;
}
return 1; // fail
}
/*______________________________________________________ */
int abscosineq(term ineq, term arg, term *next, char *reason)
/* |cos u| <= 1 */
{ unsigned f = FUNCTOR(ineq);
term a,b;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(a) == ABSFUNCTOR)
a = ARG(0,a);
if(FUNCTOR(a) != COS)
return 1;
if(f == LE)
err = infer(le(one,b));
else // if f == '<'
err = infer(lessthan(one,b));
if(!err)
{ *next = trueterm;
strcpy(reason,"$|cos u|\\le 1$");
return 0;
}
return 1; // fail
}
/*______________________________________________________ */
int sinineq(term ineq, term arg, term *next, char *reason)
/* sin u <= u if u >= 0 */
{ unsigned f = FUNCTOR(ineq);
term a,b,u;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(a) != SIN)
return 1;
u = ARG(0,a);
err = infer(le(zero,u));
if(err)
return 1;
err = infer(le(u,b));
if(err) return 1;
*next = trueterm;
strcpy(reason, english(2159));
/* $|sin u|\\le u$ if $u \\ge 0$ */
return 0;
}
/*______________________________________________________ */
int coslowerbound(term ineq, term arg, term *next, char *reason)
/* 1 - u^2/2\\le cos u */
{ unsigned f = FUNCTOR(ineq);
term a,b,u,left;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(b) != COS)
return 1;
u = ARG(0,b);
left = sum(one,tnegate(product(make_fraction(one,two),make_power(u,two))));
err = infer(le(a,left));
if(err)
return 1;
*next = trueterm;
strcpy(reason,"$1 - u^2/2\\le cos u$");
return 0;
}
/*______________________________________________________ */
int absarctanineq(term ineq, term arg, term *next, char *reason)
/* |arctan u| \le \pi/2 */
{ unsigned f = FUNCTOR(ineq);
term a,b;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(a) == ABSFUNCTOR)
{ if (FUNCTOR(ARG(0,a)) != ATAN)
return 1;
}
else if (FUNCTOR(a) != ATAN)
return 1;
err = infer(le(piover2,b));
if(err)
return 1;
*next = trueterm;
strcpy(reason,"$|arctan u| \\le \\pi/2$");
return 0;
}
/*______________________________________________________ */
int arctanineq(term ineq, term arg, term *next, char *reason)
/* arctan u <= u if u >= 0 */
{ unsigned f = FUNCTOR(ineq);
term a,b,u;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(a) != ATAN)
return 1;
u = ARG(0,a);
err = infer(le(zero,u));
if(err)
return 1;
err = infer(le(u,b));
if(err)
return 1;
*next = trueterm;
strcpy(reason, english(2160));
/* $|atan u|\\le u$ if $u \ge 0$" */
return 0;
}
/*______________________________________________________ */
int tanineq(term ineq, term arg, term *next, char *reason)
/* u <= tan u if 0 <= u <= pi/2 */
{ unsigned f = FUNCTOR(ineq);
term a,b,u;
int err;
if(f != '<' && f != LE)
return 1;
a = ARG(0,ineq);
b = ARG(1,ineq);
if(FUNCTOR(b) != TAN)
return 1;
u = ARG(0,b);
err = infer(le(zero,u));
if(err)
return 1;
err = infer(le(u,piover2));
if(err)
return 1;
err = infer(le(a,u));
if(err)
return 1;
err = infer(le(zero,a));
if(err)
return 1;
*next = trueterm;
strcpy(reason, english(2161));
/* $|tan u|\\le u$ if $0\\le u\\le \\pi /2$ */
return 0;
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists