Free modules #
A free R
-module M
is a module with a basis over R
,
equivalently it is an R
-module linearly equivalent to ι →₀ R
for some ι
.
This file proves a submodule of a free R
-module of finite rank is also
a free R
-module of finite rank, if R
is a principal ideal domain.
We express "free R
-module of finite rank" as a module M
which has a basis
b : ι → R
, where ι
is a fintype
.
We call the cardinality of ι
the rank of M
in this file;
it would be equal to finrank R M
if R
is a field and M
is a vector space.
Main results #
-
submodule.induction_on_rank
: ifM
is free and finitely generated, ifP
holds for⊥ : submodule R M
and ifP N
follows fromP N'
for allN'
that are of lower rank, thenP
holds on all submodules -
submodule.exists_basis_of_pid
: ifM
is free and finitely generated andR
is a PID, thenN : submodule R M
is free and finitely generated. This is the first part of the structure theorem for modules.
Tags #
free module, finitely generated module, rank, structure theorem
If N
is a submodule with finite rank, do induction on adjoining a linear independent
element to a submodule.
Equations
- submodule.induction_on_rank_aux b P ih n N rank_le = nat.rec (λ (N : submodule R M) (rank_le : ∀ {m : ℕ} (v : fin m → ↥N), linear_independent R (coe ∘ v) → m ≤ 0), _.mpr (ih ⊥ (λ (N : submodule R M) (N_le : N ≤ ⊥) (x : M) (x_mem : x ∈ ⊥) (x_ortho : ∀ (c : R) (y : M), y ∈ N → c • x + y = 0 → c = 0), false.rec (P N) _))) (λ (n : ℕ) (rank_ih : Π (N : submodule R M), (∀ {m : ℕ} (v : fin m → ↥N), linear_independent R (coe ∘ v) → m ≤ n) → P N) (N : submodule R M) (rank_le : ∀ {m : ℕ} (v : fin m → ↥N), linear_independent R (coe ∘ v) → m ≤ n.succ), ih N (λ (N' : submodule R M) (N'_le : N' ≤ N) (x : M) (x_mem : x ∈ N) (x_ortho : ∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0), rank_ih N' _)) n N rank_le
In an n
-dimensional space, the rank is at most m
.
If N
is a submodule in a free, finitely generated module,
do induction on adjoining a linear independent element to a submodule.
Equations
- submodule.induction_on_rank b P ih N = submodule.induction_on_rank_aux b P ih (fintype.card ι) N _
A submodule of a free R
-module of finite rank is also a free R
-module of finite rank,
if R
is a principal ideal domain.
Equations
- submodule.basis_of_pid b N = submodule.induction_on_rank b (λ (N : submodule R M), Σ (n : ℕ), basis (fin n) R ↥N) (λ (N : submodule R M) (ih : Π (N' : submodule R M), N' ≤ N → Π (x : M), x ∈ N → (∀ (c : R) (y : M), y ∈ N' → c • x + y = 0 → c = 0) → (Σ (n : ℕ), basis (fin n) R ↥N')), let ϕ : M →ₗ[R] R := Exists.some _ in dite (N = ⊥) (λ (N_bot : N = ⊥), _.mpr ⟨0, basis.empty ↥⊥ submodule.basis_of_pid._proof_4⟩) (λ (N_bot : ¬N = ⊥), dite (submodule.is_principal.generator (submodule.map ϕ N) = 0) (λ (a_zero : submodule.is_principal.generator (submodule.map ϕ N) = 0), absurd _ N_bot) (λ (a_zero : ¬submodule.is_principal.generator (submodule.map ϕ N) = 0), let y : M := Exists.some _ in and.dcases_on _ (λ (y_mem : Exists.some _ ∈ ↑N) (ϕy_eq : ⇑ϕ (Exists.some _) = submodule.is_principal.generator (submodule.map ϕ N)), (ih (ϕ.ker ⊓ N) _ y y_mem _).cases_on (λ (nN' : ℕ) (bN' : basis (fin nN') R ↥(ϕ.ker ⊓ N)), ⟨nN'.succ, id (let bN'y : fin nN'.succ → ↥N := fin.cons ⟨y, y_mem⟩ (⇑(submodule.of_le _) ∘ ⇑bN') in basis.mk _ _)⟩))))) N
A submodule inside a free R
-submodule of finite rank is also a free R
-module of finite rank,
if R
is a principal ideal domain.
Equations
- submodule.basis_of_pid_of_le hNO b = submodule.basis_of_pid_of_le._match_1 hNO (submodule.basis_of_pid b (submodule.comap O.subtype N))
- submodule.basis_of_pid_of_le._match_1 hNO ⟨n, bN'⟩ = ⟨n, bN'.map (submodule.comap_subtype_equiv_of_le hNO)⟩
A submodule inside the span of a linear independent family is a free R
-module of finite rank,
if R
is a principal ideal domain.
Equations
A finite type torsion free module over a PID is free.
Equations
- module.free_of_finite_type_torsion_free hs = let I : set ι := module.free_of_finite_type_torsion_free._proof_1.some in and.dcases_on module.free_of_finite_type_torsion_free._proof_3 (λ (indepI : linear_independent R (λ (x : ↥(module.free_of_finite_type_torsion_free._proof_2.some)), s ↑x)) (hI : ∀ (i : ι), i ∉ module.free_of_finite_type_torsion_free._proof_2.some → (∃ (a : R), a ≠ 0 ∧ a • s i ∈ submodule.span R (s '' module.free_of_finite_type_torsion_free._proof_2.some))), id (λ (indepI : linear_independent R (s ∘ coe)), id (λ (hI : ∀ (i : ι), i ∉ I → (∃ (a : R), a ≠ 0 ∧ a • s i ∈ submodule.span R (s '' I))), let N : submodule R M := submodule.span R (set.range (s ∘ coe)), sI : ↥I → ↥N := λ (i : ↥I), ⟨s i.val, _⟩, sI_basis : basis ↥I R ↥N := basis.span indepI in (λ (_x : ∀ (i : ι), (λ (i : ι), classical.some _) i ≠ 0 ∧ (λ (i : ι), classical.some _) i • s i ∈ N), let A : R := ∏ (i : ι), (λ (i : ι), classical.some _) i, φ : M →ₗ[R] M := ⇑(linear_map.lsmul R M) A, ψ : M ≃ₗ[R] ↥(φ.range) := linear_equiv.of_injective φ _ in (submodule.basis_of_pid_of_le _ sI_basis).cases_on (λ (n : ℕ) (b : basis (fin n) R ↥(φ.range)), ⟨n, b.map ψ.symm⟩)) _) hI) indepI)
A finite type torsion free module over a PID is free.
Equations
- module.free_of_finite_type_torsion_free' = module.free_of_finite_type_torsion_free module.free_of_finite_type_torsion_free'._proof_3
A set of linearly independent vectors in a module M
over a semiring S
is also linearly
independent over a subring R
of K
.