Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit c544742

Browse files
fpvandoornkim-em
andcommitted
feat(linear_algebra/finite_dimensional): add finrank_map_le (#8815)
Co-authored-by: Scott Morrison <scott@tqft.net>
1 parent 6a41805 commit c544742

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/linear_algebra/dimension.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,11 @@ lemma dim_eq_of_injective (f : M →ₗ[R] M₁) (h : injective f) :
195195
module.rank R M = module.rank R f.range :=
196196
(linear_equiv.of_injective f (linear_map.ker_eq_bot.mpr h)).dim_eq
197197

198+
/-- Pushforwards of submodules along a `linear_equiv` have the same dimension. -/
199+
lemma linear_equiv.dim_map_eq (f : M ≃ₗ[R] M₁) (p : submodule R M) :
200+
module.rank R (p.map (f : M →ₗ[R] M₁)) = module.rank R p :=
201+
(f.of_submodule p).dim_eq.symm
202+
198203
variables (R M)
199204

200205
@[simp] lemma dim_top : module.rank R (⊤ : submodule R M) = module.rank R M :=

src/linear_algebra/finite_dimensional.lean

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ open_locale classical
8181
open cardinal submodule module function
8282

8383
variables {K : Type u} {V : Type v} [field K] [add_comm_group V] [module K V]
84-
{V₂ : Type v'} [add_comm_group V₂] [module K V₂]
84+
variables {V₂ : Type v'} [add_comm_group V₂] [module K V₂]
8585

8686
/-- `finite_dimensional` vector spaces are defined to be noetherian modules.
8787
Use `finite_dimensional.iff_fg` or `finite_dimensional.of_fintype_basis` to prove finite dimension
@@ -521,6 +521,26 @@ is_noetherian_span_of_finite K hA
521521
/-- The submodule generated by a single element is finite-dimensional. -/
522522
instance (x : V) : finite_dimensional K (K ∙ x) := by {apply span_of_finite, simp}
523523

524+
/-- Pushforwards of finite-dimensional submodules are finite-dimensional. -/
525+
instance (f : V →ₗ[K] V₂) (p : submodule K V) [h : finite_dimensional K p] :
526+
finite_dimensional K (p.map f) :=
527+
begin
528+
unfreezingI { rw [finite_dimensional, is_noetherian.iff_dim_lt_omega ] at h ⊢ },
529+
rw [← cardinal.lift_lt.{v' v}],
530+
rw [← cardinal.lift_lt.{v v'}] at h,
531+
rw [cardinal.lift_omega] at h ⊢,
532+
exact (lift_dim_map_le f p).trans_lt h
533+
end
534+
535+
/-- Pushforwards of finite-dimensional submodules have a smaller finrank. -/
536+
lemma finrank_map_le (f : V →ₗ[K] V₂) (p : submodule K V) [finite_dimensional K p] :
537+
finrank K (p.map f) ≤ finrank K p :=
538+
begin
539+
rw [← cardinal.nat_cast_le.{max v v'}, ← cardinal.lift_nat_cast.{v' v},
540+
← cardinal.lift_nat_cast.{v v'}, finrank_eq_dim K p, finrank_eq_dim K (p.map f)],
541+
exact lift_dim_map_le f p
542+
end
543+
524544
end finite_dimensional
525545

526546
section zero_dim
@@ -709,6 +729,11 @@ begin
709729
simpa [← finrank_eq_dim] using f.lift_dim_eq
710730
end
711731

732+
/-- Pushforwards of finite-dimensional submodules along a `linear_equiv` have the same finrank. -/
733+
lemma finrank_map_eq (f : V ≃ₗ[K] V₂) (p : submodule K V) [finite_dimensional K p] :
734+
finrank K (p.map (f : V →ₗ[K] V₂)) = finrank K p :=
735+
(f.of_submodule p).finrank_eq.symm
736+
712737
end linear_equiv
713738

714739
instance finite_dimensional_finsupp {ι : Type*} [fintype ι] [finite_dimensional K V] :

0 commit comments

Comments
 (0)