(* ----------------------------------------------------------------------------
 * $Id: DIPCJ.md,v 1.2 1995/12/16 12:21:52 kredel Exp $
 * ----------------------------------------------------------------------------
 * This file is part of MAS.
 * ----------------------------------------------------------------------------
 * Copyright (c) 1995 Universitaet Passau
 * ----------------------------------------------------------------------------
 * $Log: DIPCJ.md,v $
 * Revision 1.2  1995/12/16 12:21:52  kredel
 * Comments slightly changed.
 *
 * Revision 1.1  1995/10/12  14:44:45  pesch
 * Diplomarbeit Rainer Grosse-Gehling.
 * Involutive Bases.
 * Slightly edited.
 *
 * ----------------------------------------------------------------------------
 *)

DEFINITION MODULE DIPCJ;

(* DIP Common Polynomial System Definition Module in the sense of Janet. *)

(* Import lists and declarations. *)

FROM MASSTOR 	IMPORT 	LIST;

FROM MASLISPU 	IMPORT 	PROCF1;

CONST rcsid = "$Id: DIPCJ.md,v 1.2 1995/12/16 12:21:52 kredel Exp $";
CONST copyright = "Copyright (c) 1995 Universitaet Passau";

PROCEDURE ADDTDG(deg, P: LIST): LIST;
(* Add total degree.
   Input: polynomial degree deg and polynomial P in distributive list
          representation.
   Output: polynom P with first list entry now total degree of the
           leading exponent vector. *)

PROCEDURE ADVTDG(P: LIST; VAR p, PP: LIST);
(* Advance total degree.
   Input: polynom P in distributive list representation. The first entry of the
          list is the total degree of the leading exponent vector.
   Output: p - the first entry of the list; PP - the polynom without the
           first entry *)

PROCEDURE DILEBBS(A: LIST);
(* Distributive List Extended Bubble Sort.
   Sort a list of polynoms in decreasing order of the total degree of the
   leading exponent. The total degree must be the first entry of each polynom. 
   Input: A is a list of polynoms.
   A is changed *)

PROCEDURE DILBBS(A: LIST);
(* Distributive List Bubble Sort.
   Sort a list of polynoms in decreasing order of the total degree of the
   leading exponent.
   Input: A is a list of polynoms.
   A is changed *)

PROCEDURE DILEP2P(P: LIST): LIST;
(* Distributive polynom list extended polynom to polynom.
   Input: P - a list of extended polynoms.
   Output: a list of polynoms whithout the first entry. *)

PROCEDURE DILATDG(P: LIST): LIST;
(* Distributive polynom list add total degree. 
   P is a list of distributive polynomials. 
   The result is a list of distributive polynoms with total
   degree of the leading term as first entry of each polynomial. *)

PROCEDURE DILTDG(A: LIST): LIST;
(* Distributive polynomial list total degree
   Input: A is a list of distributive polynomials, 
   Output tdg: the total degree of A *)

PROCEDURE DIPCLP(P: LIST): LIST;
(* Distributiv Polynomial Class of Polynomial.
   Input: P is a polynomial, 
   Output: t is the index of the lowest variable of the leading
           term of P, t=0 if P is Empty *)

PROCEDURE DIPCLT(P: LIST): LIST;
(* Distributiv Polynomial Class of Term.
   Input: P is a term, 
   Output: t is the index of the lowest variable in P,
           t=0 if P is empty *)

PROCEDURE DIPFIRST(P: LIST; extended: BOOLEAN; VAR pp, PP: LIST);
(* Distributive polynomial first polynomial,
   P is a list of polynomials,
   pp is the first polynomial and PP is the reductum of P.*)

PROCEDURE DIPSSM(P: LIST; extended: BOOLEAN; VAR pp, PP: LIST);
(* Distributive polynomial sort and select minimal.
   Input: P - a list of polynoms,
          extended is TRUE iff the first entry of each polynimial in P is the
          total degree of the leading exponent vector.
   Output: pp - the minimal polynom w.r.t. the admissible term order.
           PP - sorted list of P without pp.
   P is changed *)

PROCEDURE DILCAN(P: LIST; F: PROCF1): LIST;
(* Distributive Polynomial Cancel. 
   P is a list of distributive polynomials. F is the cancel-function.
   Output is a list of distributive polynomials or an empty list if all 
   polynomials in A equal 0. The coefficients of each polynomial are canceld
   down by F. *)

PROCEDURE DIILPP(P: LIST): LIST;
(* Distributive integral polynomial list primitive part. 
   P is a list of distributive integral polynoms. The result is the positive
   primitive part of each polynomial in P. The list-order is reversed. *)

PROCEDURE DIRPMV(A,B: LIST): LIST;
(* Distributiv Polynomial multiplication with a variable.
   Input: A is the polynomial, B is an exponent vector.
   Output:  A*B  *)

PROCEDURE EVDIF2(U,V: LIST): LIST;
(* Exponent vector difference. 
   Input: U=(u1, ...,ur), V=(v1, ...,vr)
          are exponent vectors of length r. 
   Output: W=(w1, ...,wr) is the componentwise difference of U and V.
   Unlike procedure EVDIV this procedure returns 0 and not (0...0) if U=V *)

PROCEDURE EVMTJ(U,V: LIST): LIST;
(* Exponent vector multiple test in the sense of Janet. 
   Input: U=(u1, ...,ur), V=(v1, ...,vr) are exponent vectors of length r.
   Output: t=1 if U is a multiple in the sense of Janet of V, t=0 else. *)

PROCEDURE DIPNML(G: LIST): LIST;
(* Distributive polynomial nonmultiple variable list.
   Compute for a polynom G the List of nonmultiplicative variables.
   Input: G is a polynomial.
   Output: a list of non-multiplicative variables for the leading term of G. *)

PROCEDURE DIPPGL2(F, V, LL: LIST): LIST;
(* Distributive polynomial prolongation list.
   Input: F - polynomial which first entry is the total degree of the leading
              term; V - list of variables; LL - number of different variables 
	      in F.
   Output: PP - List of prolongations of F with non-multiplicative variables 
                for F from V. *) 

PROCEDURE DIPPGL3(F, V, LL: LIST): LIST;
(* Distributive polynom prolongation list.
   Input: F - polynomial; V - list of variables; LL - number of variables in F.
   Output: PP - List of prolongations of F with non-multiplicative variables 
                for F from V. *) 

PROCEDURE DIPPGL(V: LIST): LIST;
(* Distributive polynomial prolongation list. 
   Input: V is an arbitrary domain polynomial.  
   Output: List of prolongations of V with nonmultiplicative variables for V.*)

PROCEDURE DIPVL(V: LIST): LIST;
(* Distributive Polynomial List of Variables.
   Input: a polynomial V.
   Output: list of variables with class > 1. *)


END DIPCJ.

(* -EOF- *)