Module docstring
{"# Projective modules
This file contains a definition of a projective module, the proof that our definition is equivalent to a lifting property, and the proof that all free modules are projective.
Main definitions
Let R be a ring (or a semiring) and let M be an R-module.
Module.Projective R M: the proposition saying thatMis a projectiveR-module.
Main theorems
Module.projective_lifting_property: a map from a projective module can be lifted along a surjection.Module.Projective.of_lifting_property: If for all R-module surjectionsA →ₗ B, all mapsM →ₗ Blift toM →ₗ A, thenMis projective.Module.Projective.of_free: Free modules are projective
Implementation notes
The actual definition of projective we use is that the natural R-module map from the free R-module on the type M down to M splits. This is more convenient than certain other definitions which involve quantifying over universes, and also universe-polymorphic (the ring and module can be in different universes).
We require that the module sits in at least as high a universe as the ring: without this, free modules don't even exist, and it's unclear if projective modules are even a useful notion.
References
https://en.wikipedia.org/wiki/Projective_module
TODO
- Direct sum of two projective modules is projective.
- Arbitrary sum of projective modules is projective.
All of these should be relatively straightforward.
Tags
projective module
"}