Theorem: LinearMap.range_dualMap_dual_eq_span_singleton
File: Mathlib/LinearAlgebra/Dual.lean

tactic: ext m
state_before: R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f : Dual R M₁
⊢ range (dualMap f) = Submodule.span R {f}
state_after: case h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
⊢ m ∈ range (dualMap f) ↔ m ∈ Submodule.span R {f}

tactic: rw [Submodule.mem_span_singleton]
state_before: case h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
⊢ m ∈ range (dualMap f) ↔ m ∈ Submodule.span R {f}
state_after: case h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
⊢ m ∈ range (dualMap f) ↔ ∃ a, a • f = m

tactic: refine ⟨fun ⟨r, hr⟩ ↦ ⟨r 1, ?_⟩, fun ⟨r, hr⟩ ↦ ⟨r • LinearMap.id, ?_⟩⟩
state_before: case h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
⊢ m ∈ range (dualMap f) ↔ ∃ a, a • f = m
state_after: case h.refine_1
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝ : m ∈ range (dualMap f)
r : Dual R R
hr : (dualMap f) r = m
⊢ r 1 • f = m

case h.refine_2
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝ : ∃ a, a • f = m
r : R
hr : r • f = m
⊢ (dualMap f) (r • id) = m

tactic: ext
state_before: case h.refine_1
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝ : m ∈ range (dualMap f)
r : Dual R R
hr : (dualMap f) r = m
⊢ r 1 • f = m
state_after: case h.refine_1.h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝¹ : m ∈ range (dualMap f)
r : Dual R R
hr : (dualMap f) r = m
x✝ : M₁
⊢ (r 1 • f) x✝ = m x✝

tactic: simp [dualMap_apply', ← hr]
state_before: case h.refine_1.h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝¹ : m ∈ range (dualMap f)
r : Dual R R
hr : (dualMap f) r = m
x✝ : M₁
⊢ (r 1 • f) x✝ = m x✝
state_after: no goals

tactic: ext
state_before: case h.refine_2
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝ : ∃ a, a • f = m
r : R
hr : r • f = m
⊢ (dualMap f) (r • id) = m
state_after: case h.refine_2.h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝¹ : ∃ a, a • f = m
r : R
hr : r • f = m
x✝ : M₁
⊢ ((dualMap f) (r • id)) x✝ = m x✝

tactic: simp [dualMap_apply', ← hr]
state_before: case h.refine_2.h
R : Type u
inst✝⁴ : CommSemiring R
M₁ : Type v
M₂ : Type v'
inst✝³ : AddCommMonoid M₁
inst✝² : Module R M₁
inst✝¹ : AddCommMonoid M₂
inst✝ : Module R M₂
f m : Dual R M₁
x✝¹ : ∃ a, a • f = m
r : R
hr : r • f = m
x✝ : M₁
⊢ ((dualMap f) (r • id)) x✝ = m x✝
state_after: no goals