Theorem: LinearMap.lift_rank_le_of_injective
File: Mathlib/LinearAlgebra/Dimension.lean

tactic: simp only [Module.rank_def]
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.4903
R : Type u
inst✝⁶ : Ring R
M : Type v
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
M' : Type v'
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
M₁ : Type v
inst✝¹ : AddCommGroup M₁
inst✝ : Module R M₁
f : M →ₗ[R] M'
i : Injective ↑f
⊢ lift (Module.rank R M) ≤ lift (Module.rank R M')

tactic: rw [Cardinal.lift_iSup (Cardinal.bddAbove_range.{v', v'} _),
  Cardinal.lift_iSup (Cardinal.bddAbove_range.{v, v} _)]
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.4903
R : Type u
inst✝⁶ : Ring R
M : Type v
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
M' : Type v'
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
M₁ : Type v
inst✝¹ : AddCommGroup M₁
inst✝ : Module R M₁
f : M →ₗ[R] M'
i : Injective ↑f
⊢ lift (⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι) ≤
    lift (⨆ (ι : { s // LinearIndependent R Subtype.val }), #↑↑ι)

tactic: apply ciSup_mono' (Cardinal.bddAbove_range.{v', v} _)
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.4903
R : Type u
inst✝⁶ : Ring R
M : Type v
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
M' : Type v'
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
M₁ : Type v
inst✝¹ : AddCommGroup M₁
inst✝ : Module R M₁
f : M →ₗ[R] M'
i : Injective ↑f
⊢ (⨆ (i : { s // LinearIndependent R Subtype.val }), lift (#↑↑i)) ≤
    ⨆ (i : { s // LinearIndependent R Subtype.val }), lift (#↑↑i)

tactic: rintro ⟨s, li⟩
state_before: K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.4903
R : Type u
inst✝⁶ : Ring R
M : Type v
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
M' : Type v'
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
M₁ : Type v
inst✝¹ : AddCommGroup M₁
inst✝ : Module R M₁
f : M →ₗ[R] M'
i : Injective ↑f
⊢ ∀ (i : { s // LinearIndependent R Subtype.val }), ∃ i', lift (#↑↑i) ≤ lift (#↑↑i')

tactic: refine' ⟨⟨f '' s, _⟩, Cardinal.lift_mk_le'.mpr ⟨(Equiv.Set.image f s i).toEmbedding⟩⟩
state_before: case mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.4903
R : Type u
inst✝⁶ : Ring R
M : Type v
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
M' : Type v'
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
M₁ : Type v
inst✝¹ : AddCommGroup M₁
inst✝ : Module R M₁
f : M →ₗ[R] M'
i : Injective ↑f
s : Set M
li : LinearIndependent R Subtype.val
⊢ ∃ i', lift (#↑↑{ val := s, property := li }) ≤ lift (#↑↑i')

tactic: exact (li.map' _ <| LinearMap.ker_eq_bot.mpr i).image
state_before: case mk
K : Type u
V V₁ V₂ V₃ : Type v
V' V'₁ : Type v'
V'' : Type v''
ι : Type w
ι' : Type w'
η : Type u₁'
φ : η → Type ?u.4903
R : Type u
inst✝⁶ : Ring R
M : Type v
inst✝⁵ : AddCommGroup M
inst✝⁴ : Module R M
M' : Type v'
inst✝³ : AddCommGroup M'
inst✝² : Module R M'
M₁ : Type v
inst✝¹ : AddCommGroup M₁
inst✝ : Module R M₁
f : M →ₗ[R] M'
i : Injective ↑f
s : Set M
li : LinearIndependent R Subtype.val
⊢ LinearIndependent R Subtype.val