Theorem: LinearMap.smulRight_apply_eq_zero_iff
File: Mathlib/Algebra/Module/LinearMap/End.lean

tactic: rcases eq_or_ne x 0 with rfl | hx
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
⊢ f.smulRight x = 0 ↔ f = 0 ∨ x = 0
state_after: case inl
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
inst✝ : NoZeroSMulDivisors S M
⊢ f.smulRight 0 = 0 ↔ f = 0 ∨ 0 = 0

case inr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
⊢ f.smulRight x = 0 ↔ f = 0 ∨ x = 0

tactic: refine ⟨fun h ↦ Or.inl ?_, fun h ↦ by simp [h.resolve_right hx]⟩
state_before: case inr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
⊢ f.smulRight x = 0 ↔ f = 0 ∨ x = 0
state_after: case inr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
h : f.smulRight x = 0
⊢ f = 0

tactic: ext v
state_before: case inr
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
h : f.smulRight x = 0
⊢ f = 0
state_after: case inr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
h : f.smulRight x = 0
v : M₁
⊢ f v = 0 v

tactic: replace h : f v • x = 0 := by simpa only [LinearMap.zero_apply] using LinearMap.congr_fun h v
state_before: case inr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
h : f.smulRight x = 0
v : M₁
⊢ f v = 0 v
state_after: case inr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
v : M₁
h : f v • x = 0
⊢ f v = 0 v

tactic: rw [smul_eq_zero] at h
state_before: case inr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
v : M₁
h : f v • x = 0
⊢ f v = 0 v
state_after: case inr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
v : M₁
h : f v = 0 ∨ x = 0
⊢ f v = 0 v

tactic: tauto
state_before: case inr.h
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
v : M₁
h : f v = 0 ∨ x = 0
⊢ f v = 0 v
state_after: no goals

tactic: simp
state_before: case inl
R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
inst✝ : NoZeroSMulDivisors S M
⊢ f.smulRight 0 = 0 ↔ f = 0 ∨ 0 = 0
state_after: no goals

tactic: simp [h.resolve_right hx]
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
h : f = 0 ∨ x = 0
⊢ f.smulRight x = 0
state_after: no goals

tactic: simpa only [LinearMap.zero_apply] using LinearMap.congr_fun h v
state_before: R : Type u_1
R₁ : Type u_2
R₂ : Type u_3
S : Type u_4
M : Type u_5
M₁ : Type u_6
M₂ : Type u_7
M₃ : Type u_8
N : Type u_9
N₁ : Type u_10
N₂ : Type u_11
inst✝¹⁰ : Semiring R
inst✝⁹ : Semiring R₂
inst✝⁸ : AddCommMonoid M
inst✝⁷ : AddCommMonoid M₁
inst✝⁶ : Module R M
inst✝⁵ : Module R M₁
inst✝⁴ : Semiring S
inst✝³ : Module R S
inst✝² : Module S M
inst✝¹ : IsScalarTower R S M
f : M₁ →ₗ[R] S
x : M
inst✝ : NoZeroSMulDivisors S M
hx : x ≠ 0
h : f.smulRight x = 0
v : M₁
⊢ f v • x = 0
state_after: no goals