Using the algorithms in Logar-Sturmfels and Fabianska-Quadrat, this package computes a free basis of a projective module over a polynomial ring with coefficients in the rationals, integers, or a finite field. It also provides methods to solve related problems involving completing a unimodular matrix to a square invertible matrix over a polynomial ring with coefficients in the rationals, integers, or a finite field, or a Laurent polynomial ring with coefficients in the rationals or a finite field.

For mathematical background and applications, see

- A. Fabianska.
*Algorithmic analysis of presentations of groups and modules.*http://darwin.bth.rwth-aachen.de/opus/volltexte/2009/2950/, Jan 2009. - T. Y. Lam.
*Serre's problem on projective modules.*Springer Monographs in Mathematics. Springer-Verlag, Berlin, 2006. - A. Logar and B. Sturmfels.
*Algorithms for the Quillen-Suslin theorem.*J. Algebra, 145(1):231-239, 1992. - A. Fabianska and A. Quadrat.
*Applications of the Quillen-Suslin theorem to multidimensional systems theory.*Grobner bases in control theory and signal processing. Radon Series Comp. Appl. Math (3):23-106, 2007.

Version **1.7** of this package was accepted for publication in volume 5 of the journal The Journal of Software for Algebra and Geometry on 2013-09-18, in the article Computing free bases for projective modules. That version can be obtained from the journal or from the *Macaulay2* source code repository, http://github.com/Macaulay2/M2/blob/master/M2/Macaulay2/packages/GraphicalModels.m2, commit number 8a3b2962b97153977eeaf6f92b5f48e246dd8e69.

- Functions and commands
- changeVar -- computes a change of variables which make the first entry of a unimodular row monic in a specified variable
- completeMatrix -- completes a unimodular matrix over a polynomial ring or Laurent polynomial ring to a square invertible matrix
- computeFreeBasis -- computes a free basis of a projective module
- getMaxIdeal -- computes a maximal ideal containing a given ideal in a polynomial ring
- horrocks -- computes a local solution to the unimodular row problem over a localization at a maximal ideal
- isProjective -- determines if a given module is projective with constant rank over a Noetherian ring
- isUnimodular -- determines if a given matrix is unimodular
- maxMinors -- computes the ideal generated by the maximal non-vanishing minors of a given matrix
- patch -- patch together local solutions to eliminate a variable
- qsAlgorithm -- computes a solution to the unimodular matrix problem
- qsIsomorphism -- computes an isomorphism between a free module and a given projective module

- Symbols
- CheckProjective -- optional input which gives the user the option to check whether the given module is projective
- CheckUnimodular -- optional input which gives the user the option to check whether the given matrix is unimodular