```(* ----------------------------------------------------------------------------
* \$Id: DIPRNPOL.md,v 1.3 1992/06/12 13:36:28 kredel Exp \$
* ----------------------------------------------------------------------------
* This file is part of MAS.
* ----------------------------------------------------------------------------
* Copyright (c) 1989 - 1992 Universitaet Passau
* ----------------------------------------------------------------------------
* \$Log: DIPRNPOL.md,v \$
* Revision 1.3  1992/06/12  13:36:28  kredel
* Added GCD and LCM for rational univariate polynomials and some others.
*
* Revision 1.2  1992/02/12  17:33:53  pesch
* Moved CONST definition to the right place
*
* Revision 1.1  1992/01/22  15:13:45  kredel
* Initial revision
*
* ----------------------------------------------------------------------------
*)

DEFINITION MODULE DIPRNPOL;

(* DIP Rational Number Polynomial Definition Module. *)

FROM MASSTOR IMPORT LIST;

CONST rcsid = "\$Id: DIPRNPOL.md,v 1.3 1992/06/12 13:36:28 kredel Exp \$";

PROCEDURE RPABS(RL,A: LIST): LIST;
(*Rational polynomial absolute value.  A is a rational polynomial in
r variables.  B is the absolute value of A.*)

PROCEDURE RPCONST(RL,A: LIST): LIST;
(*Rational polynomial constant.  A is a rational polynomial in r
variables.  If A is a non-zero rational number then t=1,
otherwise t=0. *)

PROCEDURE RPEXP(RL,A,NL: LIST): LIST;
(*Rational polynomial exponentiation.  A is a rational polynomial in
r variables, r ge 0.  n is a non-negative integer.  B=A**n.*)

PROCEDURE RPMON(RL,A: LIST): LIST;
(*Rational polynomial monic.  A is a rational polynomial in r variables.
If A is non-zero then AP is the polynomial similar to A with LBCF(AP)=1.
If A=0 then AP=0.*)

PROCEDURE RPONE(RL,A: LIST): LIST;
(*Rational polynomial one.  A is a rational polynomial in r
variables.  If A=1 then t=1, otherwise t=0. *)

PROCEDURE RPSIGN(RL,A: LIST): LIST;
(*Rational polynomial sign.  A is a rational polynomial in r
variables.  s is the sign of A.*)

PROCEDURE RPLWRS(RL,A,V,S: LIST);
(*Rational polynomial list write.  A is a list of rational
polynomial in r variables, r ge 0.  V is a variable list for
the polynomials in A. S is a decimal flag. A is written in the
output stream in external canonical form.*)

PROCEDURE RPWRTS(RL,A,V,S: LIST);
(*Rational polynomial write.  A is a rational polynomial in r
variables, r ge 0.  V is a variable list for A. S is a decimal
flag. A is written in the output stream in external canonical form.*)

PROCEDURE RUPEGC(A,B: LIST;  VAR C,U,V: LIST);
(*Rational univariate polynomial extended greatest common divisor.
A and B are rational univariate polynomials. C=gcd(A,B).
A*U+B*V=C, and, if deg(A/C) gt 0, then deg(V) lt
deg(A/C), else deg(V)=0.  Similarly, if deg(B/C) gt 0, then deg(U) lt
deg(B/C), else deg(U)=0.  If A=0, U=0.  If B=0, V=0.*)

PROCEDURE RUPGCD(A,B: LIST): LIST;
(*Rational univariate polynomial greatest common divisor.  A and B are
rational univariate polynomials. C=gcd(A,B).*)

PROCEDURE RUPHEG(A,B: LIST;  VAR C,V: LIST);
(*Rational univariate polynomial half-extended greatest common divisor.
A and B are rational univariate polynomials.  C=gcd(A,B).
There exists a polynomial U such that A*U+B*V=C, and, if deg(A/C) gt 0,
then deg(V) lt deg(A/C).  If deg(A/C)=0, deg(V) is also 0.  If B=0, V=0.*)

PROCEDURE RUPLCM(A,B: LIST): LIST;
(*Rational univariate polynomial least common multiple. A and B are
rational univariate polynomials. C=LCM(A,B), a nonnegative
rational univariate polynomial.*)

END DIPRNPOL.

(* -EOF- *)
```