Sindbad~EG File Manager

Current Path : /usr/home/beeson/MathXpert/algebra/
Upload File :
Current File : /usr/home/beeson/MathXpert/algebra/trigineq.c

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