@@ -70,13 +70,52 @@ theorem Module.finrank_mul_finrank : finrank F K * finrank K A = finrank F A :=
7070end Tower
7171
7272variable {R : Type u} {S : Type *} {M M₁ : Type v} {M' : Type v'}
73- variable [Semiring R] [StrongRankCondition R]
73+ variable [Semiring R]
7474variable [AddCommMonoid M] [Module R M] [Module.Free R M]
7575variable [AddCommMonoid M'] [Module R M'] [Module.Free R M']
7676variable [AddCommMonoid M₁] [Module R M₁] [Module.Free R M₁]
7777
7878namespace Module.Free
7979
80+ variable {N : Type v} [AddCommMonoid N] [Module R N]
81+ variable {N' : Type v'} [AddCommMonoid N'] [Module R N']
82+
83+ theorem exists_linearMap_injective_of_linearIndependent_of_lift_rank_le
84+ {ι : Type w} {v : ι → N'} (hv : LinearIndependent R v)
85+ (cnd : Cardinal.lift.{w} (Module.rank R M) ≤ Cardinal.lift.{v} #ι) :
86+ ∃ f : M →ₗ[R] N', Function.Injective f := by
87+ nontriviality M
88+ have := Module.nontrivial R M
89+ rcases Module.Free.exists_set R M with ⟨_, ⟨B⟩⟩
90+ replace cnd := (Cardinal.lift_le.2 B.linearIndependent.cardinal_le_rank).trans cnd
91+ rw [Cardinal.lift_mk_le'] at cnd
92+ rcases cnd with ⟨i, hi⟩
93+ refine ⟨B.constr ℕ (v ∘ i), B.injective_constr_of_linearIndependent (hv.comp _ hi)⟩
94+
95+ theorem exists_linearMap_injective_of_linearIndependent_of_rank_le
96+ {ι : Type v} {v : ι → N} (hv : LinearIndependent R v) (cnd : Module.rank R M ≤ #ι) :
97+ ∃ f : M →ₗ[R] N, Function.Injective f :=
98+ exists_linearMap_injective_of_linearIndependent_of_lift_rank_le hv (by simpa using cnd)
99+
100+ theorem exists_linearMap_injective_of_lift_rank_lt
101+ (cnd : Cardinal.lift.{v'} (Module.rank R M) < Cardinal.lift.{v} (Module.rank R N')) :
102+ ∃ f : M →ₗ[R] N', Function.Injective f := by
103+ rcases exists_set_linearIndependent_of_lt_lift_rank cnd with ⟨s, hs, hs₂⟩
104+ exact exists_linearMap_injective_of_linearIndependent_of_lift_rank_le
105+ hs₂.linearIndependent hs.symm.le
106+
107+ theorem exists_linearMap_injective_of_rank_lt (cnd : Module.rank R M < Module.rank R N) :
108+ ∃ f : M →ₗ[R] N, Function.Injective f :=
109+ exists_linearMap_injective_of_lift_rank_lt (by simpa using cnd)
110+
111+ end Module.Free
112+
113+ section StrongRankCondition
114+
115+ variable [StrongRankCondition R]
116+
117+ namespace Module.Free
118+
80119variable (R M)
81120
82121/-- The rank of a free module `M` over `R` is the cardinality of `ChooseBasisIndex R M`. -/
@@ -105,6 +144,23 @@ open Module.Free
105144
106145open Cardinal
107146
147+ theorem lift_rank_le_iff_exists_linearMap :
148+ Cardinal.lift.{v'} (Module.rank R M) ≤ Cardinal.lift.{v} (Module.rank R M') ↔
149+ ∃ f : M →ₗ[R] M', Function.Injective f where
150+ mp h := by
151+ rcases Module.Free.exists_set R M' with ⟨_, ⟨B⟩⟩
152+ exact exists_linearMap_injective_of_linearIndependent_of_lift_rank_le B.linearIndependent
153+ (B.mk_eq_rank''.symm ▸ h)
154+ mpr := fun ⟨f, hf⟩ ↦ LinearMap.lift_rank_le_of_injective f hf
155+
156+ theorem rank_le_iff_exists_linearMap :
157+ Module.rank R M ≤ Module.rank R M₁ ↔ ∃ f : M →ₗ[R] M₁, Function.Injective f := by
158+ simp [← lift_rank_le_iff_exists_linearMap]
159+
160+ theorem finrank_le_iff_exists_linearMap [Module.Finite R M] [Module.Finite R M'] :
161+ finrank R M ≤ finrank R M' ↔ ∃ f : M →ₗ[R] M', Function.Injective f := by
162+ simp [← lift_rank_le_iff_exists_linearMap, ← finrank_eq_rank]
163+
108164/-- Two vector spaces are isomorphic if they have the same dimension. -/
109165theorem nonempty_linearEquiv_of_lift_rank_eq
110166 (cnd : Cardinal.lift.{v'} (Module.rank R M) = Cardinal.lift.{v} (Module.rank R M')) :
@@ -306,6 +362,8 @@ noncomputable def _root_.LinearEquiv.smul_id_of_finrank_eq_one (d1 : Module.finr
306362
307363end Module
308364
365+ end StrongRankCondition
366+
309367namespace Algebra
310368
311369instance (R S : Type *) [CommSemiring R] [StrongRankCondition R] [Semiring S] [Algebra R S]
0 commit comments