Free modules #
We introduce a class module.free R M, for R a semiring and M an R-module and we provide
several basic instances for this class.
Use finsupp.total_id_surjective to prove that any module is the quotient of a free module.
Main definition #
module.free R M: the class of freeR-modules.
module.free R M is the statement that the R-module M is free.
Instances
If [finite_free R M] then choose_basis_index R M is the ι which indexes the basis
ι → M.
Equations
If [finite_free R M] then choose_basis : ι → M is the basis.
Here ι = choose_basis_index R M.
Equations
- module.free.choose_basis R M = _.some.snd
The isomorphism M ≃ₗ[R] (choose_basis_index R M →₀ R).
Equations
- module.free.repr R M = (module.free.choose_basis R M).repr
The universal property of free modules: giving a functon (choose_basis_index R M) → N, for N
an R-module, is the same as giving an R-linear map M →ₗ[R] N.
This definition is parameterized over an extra semiring S,
such that smul_comm_class R S M' holds.
If R is commutative, you can set S := R; if R is not commutative,
you can recover an add_equiv by setting S := ℕ.
See library note [bundled maps over different rings].
Equations
- module.free.constr R M N = (module.free.choose_basis R M).constr S
The product of finitely many free modules is free.
The module of finite matrices is free.
A variation of of_equiv: the assumption module.free R P here is explicit rather than an
instance.