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
*/
#define ALGEBRA_DLL
#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"
/*______________________________________________________ */
MEXPORT_ALGEBRA int abssinineq(term ineq, term arg, term *next, char *reason)
/* |sin 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) == ABS)
a = ARG(0,a);
if(FUNCTOR(a) != SIN)
return 1;
err = infer(le(one,b));
if(err)
return 1;
*next = true;
strcpy(reason,"$|sin u| � 1$");
return 0;
}
/*______________________________________________________ */
MEXPORT_ALGEBRA 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) == ABS)
a = ARG(0,a);
if(FUNCTOR(a) != COS)
return 1;
err = infer(le(one,b));
if(err)
return 1;
*next = true;
strcpy(reason,"$|cos u| � 1$");
return 0;
}
/*______________________________________________________ */
MEXPORT_ALGEBRA 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 = true;
strcpy(reason, english(2159));
/* $|sin u| � u$ if $u�0$ */
return 0;
}
/*______________________________________________________ */
MEXPORT_ALGEBRA int coslowerbound(term ineq, term arg, term *next, char *reason)
/* 1 - u^2/2 � 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 = true;
strcpy(reason,"$1 - u^2/2 � cos u$");
return 0;
}
/*______________________________________________________ */
MEXPORT_ALGEBRA int absarctanineq(term ineq, term arg, term *next, char *reason)
/* |arctan u| � �/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) == ABS)
{ 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 = true;
strcpy(reason,"$|arctan u| � �/2$");
return 0;
}
/*______________________________________________________ */
MEXPORT_ALGEBRA 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 = true;
strcpy(reason, english(2160));
/* $|atan u| � u$ if $u�0$" */
return 0;
}
/*______________________________________________________ */
MEXPORT_ALGEBRA 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 = true;
strcpy(reason, english(2161));
/* $|tan u| � u$ if $0�u��/2$ */
return 0;
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists