```(* ----------------------------------------------------------------------------
* \$Id: DIPE.md,v 1.2 1992/02/12 17:33:26 pesch Exp \$
* ----------------------------------------------------------------------------
* This file is part of MAS.
* ----------------------------------------------------------------------------
* Copyright (c) 1989 - 1992 Universitaet Passau
* ----------------------------------------------------------------------------
* \$Log: DIPE.md,v \$
* Revision 1.2  1992/02/12  17:33:26  pesch
* Moved CONST definition to the right place
*
* Revision 1.1  1992/01/22  15:13:11  kredel
* Initial revision
*
* ----------------------------------------------------------------------------
*)

DEFINITION MODULE DIPE;

(* DIP Exterior Algebra Definition Module. *)

FROM MASSTOR IMPORT LIST;

CONST rcsid = "\$Id: DIPE.md,v 1.2 1992/02/12 17:33:26 pesch Exp \$";

PROCEDURE COPYOB(A: LIST): LIST;
(*Copy object. A is an object. B is the copy of A.*)

PROCEDURE EIMWRT(A: LIST);
(*Exterior integral matrix write. A is an exterior
integral matrix. A is written in the output stream.*)

PROCEDURE EIVABS(U: LIST): LIST;
(*Exterior integral vector absolute value. U is an
exterior integral vector. V is the absolute value of U. *)

PROCEDURE EIVAPP(U: LIST): LIST;
(*Exterior integral vector absolute primitive part. U is an
exterior integral vector. V is the absolute primitive part of U. *)

PROCEDURE EIVCPP(U: LIST;  VAR V,VL: LIST);
(*Exterior integral vector content and primitive part.
U is an exterior integral vector. v is the content and
V is the primitive part of U. *)

PROCEDURE EIVEPR(U,V: LIST): LIST;
(*Exterior integral vector exterior product. U and V are exterior
integral vectors. W is the exterior product of U and V.*)

PROCEDURE EIVFUP(A,PL: LIST): LIST;
(*Exterior integral vector from univariate integral polynomial
with multiplication by power of main variable. A is an
univariate integral polynomial. p is a beta-integer. B is the
exterior integral vector from A(x)*(x**p). *)

PROCEDURE EIVILP(U,V: LIST): LIST;
(*Exterior integral vector inner left product. U and V are
exterior integral vectors. W is the inner left
product of U and V.*)

PROCEDURE EIVIP(A,BL: LIST): LIST;
(*Exterior integral vector integer product. A is an
exterior integral vector, b is an integer, C=A*b. *)

PROCEDURE EIVIQ(A,BL: LIST): LIST;
(*Exterior integral vector integer quotient. A is an
exterior integral vector, b is a nonzero integer,
and b divides any coefficient of A. C=A/b.*)

PROCEDURE EIVIRP(U,V: LIST): LIST;
(*Exterior integral vector inner right product. U and V are
exterior integral vectors. W is the inner right
product of U and V.*)

PROCEDURE EIVNEG(U: LIST): LIST;
(*Exterior integral vector negative. U is an exterior
integral vector. V is the negative of U. *)

PROCEDURE EIVPP(U: LIST): LIST;
(*Exterior integral vector primitive part. U is an
exterior integral vector. V is the primitive part of U. *)

PROCEDURE EIVSIG(U: LIST): LIST;
(*Exterior integral vector sign. U is an exterior
integral vector. s is the sign of U. *)

PROCEDURE EIVSUM(U,V: LIST): LIST;
(*Exterior integral vector sum. U and V are exterior
integral vectors. W is the sum of U and V.*)

PROCEDURE EIVWRT(A: LIST);
(*Exterior integral vector write. A is an exterior
integral vector. A is written in the output stream.*)

PROCEDURE EXIDET(M: LIST): LIST;
(*Exterior integral matrix determinant. M is an exterior integral
matrix. d is the determinant of A.*)

PROCEDURE EXIDT2(M: LIST): LIST;
(*Exterior integral matrix determinant 2. M is an exterior integral
matrix. d is the determinant of A.*)

PROCEDURE EXMHOM(M: LIST): LIST;
(*Exterior matrix homomorphism. M=(m1,... ,mn) is a
vector of integral vectors mi, 0 le i le n. MS is a
vector of exterior integral vectors, MS=(ms1,... ,msn).
were msi=EXVHOM(mi). *)

PROCEDURE EXVHOM(U,SL: LIST): LIST;
(*Exterior vector homomorphism. U=(u1,... ,un) is an
integral vector of n components, 0 le n. s is the
starting index for the exterior index list.
V=(u1,(s),... ,un,(s+n)).  *)

PROCEDURE ITD(A: LIST): LIST;
(*Integer trailing digit. A is an integer,
A = b mod beta.*)

PROCEDURE IJACS(X,Y: LIST): LIST;
(*Integer Jacobi symbol algorithm. Y is an odd
positive integer, X is an integer relatively prime
to Y. s=(X/Y). *)

(*Index list addition of constant. U is an index list, c is
a beta-integer. V=(u1+c, ...,un+c) where U=(u1, ...,un).
n ge 0. *)

PROCEDURE ILEXPR(U,V: LIST;  VAR W,SL: LIST);
(*Index list exterior product. U, V and W are index lists.
W is the exterior product of U and V. s is the sign
of the exterior product. If s = 0 then W = ().  *)

PROCEDURE ILILPR(U,V: LIST;  VAR W,SL: LIST);
(*Index list inner left product. U, V and W are index lists.
W is the inner left product of U and V. s is the sign
of the inner left product. If s = 0 then W = ().  *)

PROCEDURE ILINPR(U,V: LIST;  VAR W,SL: LIST);
(*Index list inner product. U, V and W are index lists. W
is the inner product of U and V, i.e. if U is contained
in V then W is the complement of U in V, otherwise the sign
of the inner product is set to zero. s is the sign of
the inner product. *)

PROCEDURE ILIRPR(U,V: LIST;  VAR W,SL: LIST);
(*Index list inner right product. U, V and W are index lists.
W is the inner right product of U and V. s is the sign
of the inner right product. if s = 0 then W = ().  *)

PROCEDURE ILSCMP(U,V: LIST): LIST;
(*Index list strong compare. U=(u1,... ,un), V=(v1,... vm)
are index lists with length n and m. t=1 if n gt m,
t=-1 if n lt m. If n=m then t=0 if U=V,
t=1 if U gt V, t=-1 if U lt V.*)

PROCEDURE ILWCMP(U,V: LIST): LIST;
(*Index list week compare. U=(u1,... ,un), V=(v1,... vm) are
index lists. t=0 if U=V, t=1 if U gt V, t=-1 if U lt V.*)

PROCEDURE INDLST(RL,SL: LIST): LIST;
(*Index list. Starting with r and ending with s.*)

PROCEDURE INLWRT(U: LIST);
(*Index list write. U is an exterior index list.
U is written in the output stream.*)

PROCEDURE IPSR(R: LIST): LIST;
(*Integral polynomial specified roots. R is a list of integers.
A is an integral univariate polynomial with roots from R. *)

PROCEDURE IVHOM(U,IL,JL: LIST): LIST;
(*Integer vector homomorphism. U=(u1,(s),... ,un,(r))
is an exterior integral vector. i is the starting index
for the integral vector and j is its ending index.
V=(vi,... ,vj). *)

PROCEDURE IVRAND(KL,QL,NL: LIST): LIST;
(*Integer vector random. U is an random integer vector with
n components, 0 le n, and the absolut value of each
component is lt 2**k. q is a rational number qd/qn,
with 0 lt qd le qn lt beta. So q is the propability
that any particular component of V is not zero.*)

PROCEDURE KREISP(NL: LIST): LIST;
(*Kreisteilungs polynom. n is a beta-integer gt 1.
A is an univariate integral polynomial. *)

PROCEDURE MDVHOM(ML,U: LIST): LIST;
(*Modular vector homomorphism. U is an integral vector.
V is a modular vector. m is a beta-integer.*)

PROCEDURE MIRAND(KL,QL,NL,ML: LIST): LIST;
(*Matrix random. M is an integral matrix with n rows generated
by IVRAND(k,q,m). *)

PROCEDURE POWSEV(PL,A: LIST): LIST;
(*Power of variable symmetric product with exterior vector.
p is a beta-integer. A is an exterior vector. B is the
symmetric product of x**p and A.*)

PROCEDURE UIPRES(A,B: LIST;  VAR CL,KL: LIST);
(*Univariate integral polynomials resultant. A and B are
univariate integral polynomials. c is the resultant of
A and B. k is the degree of the common factor. *)

PROCEDURE UIPRS1(A,B: LIST): LIST;
(*Univariate integral polynomials resultant 1. A and B are
univariate integral polynomials. c is the resultant of
A and B. *)

PROCEDURE UIPSIL(A,EL: LIST): LIST;
(*Univariate integral polynomial symmetric product with exterior index list.
A is an univariate integral polynomial. e is an exterior index
list. B is the symmetric product of A and e.*)

PROCEDURE UIPSIV(A,B: LIST): LIST;
(*Univariate integral polynomial symmetric product with exterior integral vector.
A is an univariate integral polynomial. B is an exterior integral
vector. C is the symmetric product of A and B.*)

END DIPE.
(* -EOF- *)
```