(* ---------------------------------------------------------------------------- * $Id: DIPZ.mi,v 1.3 1992/10/15 16:29:41 kredel Exp $ * ---------------------------------------------------------------------------- * This file is part of MAS. * ---------------------------------------------------------------------------- * Copyright (c) 1989 - 1992 Universitaet Passau * ---------------------------------------------------------------------------- * $Log: DIPZ.mi,v $ * Revision 1.3 1992/10/15 16:29:41 kredel * Changed rcsid variable * * Revision 1.2 1992/02/12 17:34:27 pesch * Moved CONST definition to the right place * * Revision 1.1 1992/01/22 15:15:04 kredel * Initial revision * * ---------------------------------------------------------------------------- *) IMPLEMENTATION MODULE DIPZ; (* DIP Zero Dimensional Ideal Implementation Module. *) (* Import lists and declarations. *) FROM MASSTOR IMPORT LIST, SIL, BETA, LIST1, FIRST, RED, ADV, COMP, INV, LENGTH; FROM MASBIOS IMPORT SWRITE, BLINES, TAB, SOLINE; FROM SACLIST IMPORT LELT, CCONC, EQUAL, MEMBER, LIST2, ADV2, ADV4, ADV3, FIRST4, FIRST2; FROM SACRN IMPORT RNINT, RNNEG, RNSUM; FROM SACPOL IMPORT PINV, PMON; FROM SACRPOL IMPORT RPSUM; FROM DIPC IMPORT DIPEVL, DIPNOV, EVDOV, DILFPL, DIPFMO, DIPFP, VALIS, EVORD, INVLEX, DIPMPV, DIPTBC, DIPBSO, PFDIP, PMPV, PBCLI; FROM DIPRN IMPORT DIRPEM; FROM DIPRNGB IMPORT DIRPNF, DIRLIS; FROM DIPDIM IMPORT DIGBZT; CONST rcsidi = "$Id: DIPZ.mi,v 1.3 1992/10/15 16:29:41 kredel Exp $"; CONST copyrighti = "Copyright (c) 1989 - 1992 Universitaet Passau"; PROCEDURE DIRMPG(IL,F: LIST): LIST; (*Distributive rational minimal polynomial for a groebner basis. F is a groebner basis. PP is the minimal polynomial for the i-th variable for F. *) VAR C, CL, CLP, CP, CS, EINS, EL, J1Y, JL, EVOREM, EVOCOR, LL, NL, P, PL, PP, RL, RLS, TL, X, XP, YP: LIST; ec: BOOLEAN; BEGIN (*1*) (*initialise. *) IF F = SIL THEN PP:=0; RETURN(PP); END; J1Y:=FIRST(F); RL:=DIPNOV(J1Y); EINS:=RNINT(1); EVOREM:=EVORD; EVOCOR:=INVLEX; ec:=(EVOREM = EVOCOR); EL:=BETA; FOR JL:=1 TO RL DO EL:=COMP(0,EL); END; X:=DIPFMO(EINS,EL); LL:=1; NL:=RL+LL; PFDIP(X, RLS,P); P:=PINV(RL,P,1); P:=PMPV(NL,P,LL,1); (*2*) (*solve linear systems of equations to get the coefficients. *) REPEAT XP:=DIPMPV(X,IL,LL); LL:=LL+1; XP:=DIRPNF(F,XP); IF NOT ec THEN EVORD:=EVOCOR; DIPBSO(XP); END; PFDIP(XP, RLS,YP); YP:=PINV(RL,YP,LL); NL:=RL+LL; YP:=PMPV(NL,YP,LL,1); P:=PINV(RL,P,1); P:=RPSUM(NL,P,YP); CP:=PBCLI(RL,P); C:=DILFPL(LL,CP); CS:=BETA; WHILE C <> SIL DO ADV(C, CL,C); CL:=DIRPEM(CL,EINS); CS:=COMP(CL,CS); END; C:=INV(CS); C:=DIRLIS(C); TL:=DIGBZT(C); IF NOT ec THEN EVORD:=EVOREM; END; UNTIL TL = 0; LL:=LL-1; (*3*) (*constuct minimal polynomial. *) PP:=PMON(EINS,LL); WHILE C <> SIL DO ADV(C, CL,C); EL:=DIPEVL(CL); J1Y:=EVDOV(EL); J1Y:=FIRST(J1Y); NL:=LL-J1Y; J1Y:=DIPTBC(CL); CLP:=RNNEG(J1Y); PL:=PMON(CLP,NL); PP:=RPSUM(1,PP,PL); END; PP:=DIPFP(1,PP); (*6*) RETURN(PP); END DIRMPG; END DIPZ. (* -EOF- *)