Sindbad~EG File Manager

Current Path : /usr/home/beeson/Otter-Lambda/yyy/algebra/
Upload File :
Current File : /usr/home/beeson/Otter-Lambda/yyy/algebra/trigineq.c

/*
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