

#include "BUILTIN.h"

#include "Nat.h"
extern OBJ _ATreeReduce_3(OBJ,OBJ,OBJ);extern OBJ __ATreeReduce_3;
extern OBJ _ATreeReduce_4(OBJ,OBJ,OBJ);extern OBJ __ATreeReduce_4;
extern OBJ _ATreeReduce_5(OBJ,OBJ,OBJ);extern OBJ __ATreeReduce_5;
extern OBJ _ATreeReduce_6(OBJ,OBJ,OBJ);extern OBJ __ATreeReduce_6;
extern OBJ _ABSTreeReduce_4(OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeReduce_4; /* / */
extern OBJ _ABSTreeReduce_5(OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeReduce_5; /* /_pre */
extern OBJ _ABSTreeReduce_6(OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeReduce_6; /* /_in */
extern OBJ _ABSTreeReduce_7(OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeReduce_7; /* /_post */
extern OBJ _ABSTreeReduce_8(OBJ,OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeReduce_8; /* ` */
extern OBJ _ABSTreeReduce_9(OBJ,OBJ,OBJ,OBJ);OBJ __ABSTreeReduce_9; /* `,1 */

extern OBJ _ABSTreeReduce_4(OBJ x1,OBJ x2,OBJ x3,OBJ x4) /* / */
{OBJ r;
 CPCLS(__ABSTreeReduce_8,1);
 {OBJ x5;
  x5=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__ABSTreeReduce_8,2))(__ABSTreeReduce_8,x1,x2);
  r=_ATreeReduce_3(x5,x3,x4);}
 return r;}

extern OBJ _ABSTreeReduce_5(OBJ x1,OBJ x2,OBJ x3,OBJ x4) /* /_pre */
{OBJ r;
 CPCLS(__ABSTreeReduce_9,1);
 {OBJ x5;
  x5=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__ABSTreeReduce_9,2))(__ABSTreeReduce_9,x1,x2);
  r=_ATreeReduce_4(x5,x3,x4);}
 return r;}

extern OBJ _ABSTreeReduce_6(OBJ x1,OBJ x2,OBJ x3,OBJ x4) /* /_in */
{OBJ r;
 CPCLS(__ABSTreeReduce_9,1);
 {OBJ x5;
  x5=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__ABSTreeReduce_9,2))(__ABSTreeReduce_9,x1,x2);
  r=_ATreeReduce_5(x5,x3,x4);}
 return r;}

extern OBJ _ABSTreeReduce_7(OBJ x1,OBJ x2,OBJ x3,OBJ x4) /* /_post */
{OBJ r;
 CPCLS(__ABSTreeReduce_9,1);
 {OBJ x5;
  x5=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(__ABSTreeReduce_9,2))(__ABSTreeReduce_9,x1,x2);
  r=_ATreeReduce_6(x5,x3,x4);}
 return r;}

extern OBJ _ABSTreeReduce_8(OBJ x1,OBJ x2,OBJ x3,OBJ x4,OBJ x5) /* ` */
{OBJ r;
 FRCLS(x1,1);
 {OBJ x12=FLD1(x3,1);
  if(EXPRD(x3,1)){
   DSPRDF(x3);
  }else{
   COPY(x12,1);
   FRPRD(x3,1);}
  r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ))METHOD(x2,3))(x2,x12,x4,x5);}
 return r;}

extern OBJ _ABSTreeReduce_9(OBJ x1,OBJ x2,OBJ x3,OBJ x4) /* `,1 */
{OBJ r;
 FRCLS(x1,1);
 {OBJ x11=FLD1(x3,1);
  if(EXPRD(x3,1)){
   DSPRDF(x3);
  }else{
   COPY(x11,1);
   FRPRD(x3,1);}
  r=(*(OBJ(*)(OBJ,OBJ,OBJ))METHOD(x2,2))(x2,x11,x4);}
 return r;}

static OBJ _mt_5_0_2(OBJ t,OBJ t1,OBJ t2) 
{OBJ r;
 DPCLS(t,r);
 INCCLS(r,0,2);
 FLDCLS(r,1)=t1;
 FLDCLS(r,2)=t2;
 return r;}

static OBJ _mt_5_1_1(OBJ t,OBJ t1) 
{OBJ r;
 if(EXCLS(t)){
  r=t;
 }else{
  DPCLS(t,r);
  FLDCLS(r,1)=FLDCLS(t,1);
  COPY(FLDCLS(r,1),1);}
 INCCLS(r,1,1);
 FLDCLS(r,2)=t1;
 return r;}

static OBJ _mt_5_2_3(OBJ t,OBJ t1,OBJ t2,OBJ t3) 
{OBJ r;
 if(EXCLS(t)){
  DSCLSF(t);
 }else{
  COPY(FLDCLS(t,1),1);
  COPY(FLDCLS(t,2),1);
  DCCLS(t,1);}
 r=(*(OBJ(*)(OBJ,OBJ,OBJ,OBJ,OBJ))ENTRY(t))(FLDCLS(t,1),FLDCLS(t,2),t1,t2,t3);
 return r;}

init_ABSTreeReduce()
{
 static int visited=0; if(visited) return; visited=1;
 init_ABSTree();
 init_ANat();
 init_AOption();
 init_ASeq();
 init_ATree();
 init_APair();
 init_ATreeReduce();
 init_ARelCmp();
 CLS(4,_ABSTreeReduce_9,__ABSTreeReduce_9);
 CLS(5,_ABSTreeReduce_8,__ABSTreeReduce_8);
 CLS(4,_ABSTreeReduce_7,__ABSTreeReduce_7);
 CLS(4,_ABSTreeReduce_6,__ABSTreeReduce_6);
 CLS(4,_ABSTreeReduce_5,__ABSTreeReduce_5);
 CLS(4,_ABSTreeReduce_4,__ABSTreeReduce_4);
 MTH(5,0,2,_mt_5_0_2);LZYMTH(5,0,2,_mt_5_0_2);
 MTH(5,1,1,_mt_5_1_1);LZYMTH(5,1,1,_mt_5_1_1);
 MTH(5,2,3,_mt_5_2_3);LZYMTH(5,2,3,_mt_5_2_3);}

