Theorem: Submodule.closure_induction
File: Mathlib/LinearAlgebra/Span.lean

Proof steps:
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ span R s
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
⊢ p x
state_after: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ AddSubmonoid.closure (univ • s)
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
⊢ p x
tactic: rw [← mem_toAddSubmonoid, span_eq_closure] at h
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ AddSubmonoid.closure (univ • s)
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
⊢ p x
state_after: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ AddSubmonoid.closure (univ • s)
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
⊢ ∀ x ∈ univ • s, p x
tactic: refine AddSubmonoid.closure_induction h ?_ zero add
state_before: R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ AddSubmonoid.closure (univ • s)
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
⊢ ∀ x ∈ univ • s, p x
state_after: case intro.intro.intro.intro
R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ AddSubmonoid.closure (univ • s)
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
r : R
m : M
hm : m ∈ s
⊢ p ((fun x x_1 => x • x_1) r m)
tactic: rintro _ ⟨r, -, m, hm, rfl⟩
state_before: case intro.intro.intro.intro
R : Type u_1
R₂ : Type u_2
K : Type u_3
M : Type u_4
M₂ : Type u_5
V : Type u_6
S : Type u_7
inst✝⁷ : Semiring R
inst✝⁶ : AddCommMonoid M
inst✝⁵ : Module R M
x : M
p✝ p' : Submodule R M
inst✝⁴ : Semiring R₂
σ₁₂ : R →+* R₂
inst✝³ : AddCommMonoid M₂
inst✝² : Module R₂ M₂
F : Type u_8
inst✝¹ : FunLike F M M₂
inst✝ : SemilinearMapClass F σ₁₂ M M₂
s t : Set M
p : M → Prop
h : x ∈ AddSubmonoid.closure (univ • s)
zero : p 0
add : ∀ (x y : M), p x → p y → p (x + y)
smul_mem : ∀ (r : R), ∀ x ∈ s, p (r • x)
r : R
m : M
hm : m ∈ s
⊢ p ((fun x x_1 => x • x_1) r m)
state_after: no goals
tactic: exact smul_mem r m hm