FPINT  {
        ADD (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPADD (e1) e2 >;
        SUB (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPSUB (e1) e2 >;
        MUL (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPMUL (e1) e2 >;
        DIV (e1) (e2) (e3) , <BR 'PX=' e3>:ex = <FPDIV (e1) e2 >;
        INV (e1)      (e3) , <BR 'PX=' e3>:ex = <FPINV  e1     >;
       }
*                                              Сложение
FPADD  {  (e1) e2 = <COKP <FPADD1 (e1) e2>>;  }

FPADD1  {
          (e1 (e2)) e3 (e4) =  <FPADD1 (e1) e3> <PADD (e2) (e4)>;
          (e1)      e2      =  e1 e2;
        }

COKP  {  e1  =  e1;  }

*                                                Вычитание
FPSUB  {  (e1) e2  =  <COKP <FPSUB1 (e1) e2>>;  }

FPSUB1  {
         (e1 (e2)) e3 (e4) = <FPSUB1 (e1) e3> <PSUB (e2) (e4)>;
         (e1)              =  e1;
         (  )      e2      =  <FPSUB1 ( (0) ) e2 >;
        }
*                                                 Умножение
FPMUL  {
        (e1)     = ;
        (  ) e2  = ;
        (e1) e2, <CP 'PX'>: e.PX = <FPMUL9
                                   <FPDO (<FPM ( ) (e1) e2>)  e.PX >>;
       }

FPMUL9  {  e0 (eR)  =  eR;  }

FPM  {
          (e1) (e2)         =  e1;
          (e1) (e2) (e3) e4 = <FPM (<FPADD (<FPX e1>)
                                    <FPMQ (e2) (e3)>>) (e2) e4>;
     }

FPX  {            = ;
             e1   = e1 (0);
     }

FPMQ  {
         (e1)             = ;
         ((e1) e2) (e3)   =  <PMUL (e1) (e3)> <FPMQ (e2) (e3)>;
         ( )       (e3)   = ;
      }
*                                     Деление с остатком
FPDO  {
         ( )  e1 = ( );
         (e1) e2 = <FPDOA ( ) (e1) ( ) (e2)>;
     }

FPDOA  {
        (e1) ((e2) e3) (e4) ((e5) e6) =
                       <FPDOA (e1 (e2)) (e3) (e4 (e5)) (e6)>;
        (e1) ( )       (e4) ((e5) e6) =  (e1);
        (e1) (e2)      (e4) ()        = <FPDOB (e1) (e2) (e4)>;
       }

FPDOB  {
         ((e1) e2) (e3) ((e4) e5) =
                 <FPDOC  <PDR (e1) (e4)> ((e1) e2) (e3) ((e4) e5)>;
       }

FPDOC  {
  (e1) ((ex) e2) (e3) ((ey) e4) = (e1) <FPDOD
                                  ( <FPSUB1 (e2) <FPMQ (e4) (e1)>> )
                                  (e3) ((ey) e4) >;
       }

FPDOD  {
        (e1) ( )       (e4) = ( <COKP e1> );
        (e1) ((e2) e3) (e4) = <FPDOB (e1 (e2)) (e3) (e4)>;
       }
* -------------------------------------------------
PADD { (e1) (e2) , <Q_add (e1) e2> : e3 = (e3) ; }
PSUB { (e1) (e2) , <Q_sub (e1) e2> : e3 = (e3) ; }
PMUL { (e1) (e2) , <Q_mul (e1) e2> : e3 = (e3) ; }
PDR  { (e1) (e2) , <Q_div (e1) e2> : e3 = (e3) ; }
* -------------------------------------------------
*                                Обратный элемент 

FPINV  {  eM, <CP 'PX' >: e.PX = <FPINV1 (e.PX) ( ) (eM) (( 1 )) >; }

FPINV1  {
      (eA) (eX) ((e.S)) (eJ) = <FPINV7 (eJ) (e.S)>;
      (eA) (eX) (eB)    (eJ) = <FPINV1 (eB) (eJ)
                               <FPINV2 (eX) (eJ) <FPDO (eA) eB>>>;
       }

FPINV2  {
         (eX) (eJ) eQ (eR) = (eR) (<FPSUB (eX) <FPMUL (eJ) eQ >>);
        }

FPINV7 {
        ((e1) e2) (e3) = <PDR (e1) (e3)> <FPINV7 (e2) (e3)>;
        (       ) (e3) = ;
       }

FPDIV  {  (e1) e2 = <FPMUL (e1) <FPINV e2>>;  }
*