////////////////////////////////////////////////////////////////////////////// version="version polyclass.lib 4.2.0.0 Dec_2020 "; // $Id$ category="Commutative Algebra"; info=" LIBRARY: polyclass.lib Data types for normal form equations AUTHORS: Janko Boehm, email: boehm@mathematik.uni-kl.de Magdaleen Marais, email: magdaleen.marais@up.ac.za Gerhard Pfister, email: pfister@mathematik.uni-kl.de OVERVIEW: This library implements a ring independent polynomial type used for the return value in classify2.lib and realclassify.lib. You can use +, * and == for addition, multiplication and comparison. The key over contains the base ring of the polynomial, the key value its value as a polynomial of type poly. The constructor can be called by assigning a polynomial of type poly to a polynomial of type Poly via =. Moreover the library implements a class NormalformEquation consisting out of a string type, an integer milnorNumber, a Poly normalFormEquation, and integer modality, a list of numbers parameters, a list variables, an integer corank, in the real case, an integer inertiaIndex, a list of open intervals represented as lists consisting out of two rationals used to select a real root of the minimal polynomial (which is stored in the variable minpoly of the polynomial ring containing normalFormEquation, that is, in normalFormEquation.in), or if no minimal polynomial is defined then an interval containing the rational parameter value. Acknowledgements: This research was supported by the Staff Exchange Bursary Programme of the University of Pretoria, DFG SPP 1489, DFG TRR 195. The financial assistance of the National Research Foundation (NRF), South Africa, towards this research is hereby acknowledged. Opinions expressed and conclusions arrived at are those of the author and are not necessarily to be attributed to the National Research Foundation, South Africa. KEYWORDS: polynomials SEE ALSO: realclassify_lib, classify2_lib PROCEDURES: makePoly(f); constructor for ring independent polynomial type Poly printPoly(f); print routine for polynomial type Poly printNormalFormEquation(F); print routine for normal form equations "; LIB "sing.lib"; static proc mod_init() { newstruct("Poly","ring in,poly value"); newstruct("NormalFormEquation","list vars, string singularityType, int milnorNumber, Poly normalFormEquation, int modality, list parameters, int corank, int inertiaIndex, int determinacy, int realCase"); system("install","Poly","print",printPoly,1); system("install","Poly","string",stringPoly,4); system("install","Poly","+",addPoly,2); system("install","Poly","*",multPoly,2); system("install","Poly","^",expPoly,2); system("install","Poly","==",equalPoly,2); system("install","Poly","=",makePoly,1); system("install","NormalFormEquation","print",printNormalFormEquation,1); } proc printNormalFormEquation(NormalFormEquation F) "USAGE: printNormalFormEquation(F); F NormalFormEquation RETURN: print a normal form equation EXAMPLE: example printNormalFormEquation, shows an example" { def R=basering; Poly f=F.normalFormEquation; def SS=f.in; setring SS; "Corank = "+string(F.corank); if (F.realCase){"Inertia index = "+string(F.inertiaIndex);} "Normalform equation of type = "+(F.singularityType); "Normalform equation = "+string(f.value); "Milnor number = "+string(F.milnorNumber); "Modality = "+string(F.modality); if (F.modality>=1){ if (F.modality==1){ "Parameter term = "+string(F.parameters[1][1]); } else { string paraterms="Parameter terms = "; for (int i =1;i<=size(F.parameters);i++){ paraterms=paraterms+string(F.parameters[i][1]); if (i