Theorem: linearIndependent_comp_subtype
File: Mathlib/LinearAlgebra/LinearIndependent.lean

tactic: constructor
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0) ↔
    ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
state_after: case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0) →
    ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0

case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0) →
    ∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0

tactic: intro h l hl₁ hl₂
state_before: case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0) →
    ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
state_after: case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0
l : ι →₀ R
hl₁ : ∀ x ∈ l.support, x ∈ s
hl₂ : (l.sum fun i a => a • v i) = 0
⊢ l = 0

tactic: have := h (l.subtypeDomain s) ((Finsupp.sum_subtypeDomain_index hl₁).trans hl₂)
state_before: case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0
l : ι →₀ R
hl₁ : ∀ x ∈ l.support, x ∈ s
hl₂ : (l.sum fun i a => a • v i) = 0
⊢ l = 0
state_after: case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0
l : ι →₀ R
hl₁ : ∀ x ∈ l.support, x ∈ s
hl₂ : (l.sum fun i a => a • v i) = 0
this : Finsupp.subtypeDomain s l = 0
⊢ l = 0

tactic: exact (Finsupp.subtypeDomain_eq_zero_iff hl₁).1 this
state_before: case mp
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0
l : ι →₀ R
hl₁ : ∀ x ∈ l.support, x ∈ s
hl₂ : (l.sum fun i a => a • v i) = 0
this : Finsupp.subtypeDomain s l = 0
⊢ l = 0
state_after: no goals

tactic: intro h l hl
state_before: case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
⊢ (∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0) →
    ∀ (l : ↑s →₀ R), (l.sum fun i a => a • v ↑i) = 0 → l = 0
state_after: case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ l = 0

tactic: refine Finsupp.embDomain_eq_zero.1 (h (l.embDomain <| Function.Embedding.subtype s) ?_ ?_)
state_before: case mpr
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ l = 0
state_after: case mpr.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ x ∈ (Finsupp.embDomain (Embedding.subtype s) l).support, x ∈ s

case mpr.refine_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ((Finsupp.embDomain (Embedding.subtype s) l).sum fun i a => a • v i) = 0

tactic: suffices ∀ i hi, ¬l ⟨i, hi⟩ = 0 → i ∈ s by simpa
state_before: case mpr.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ x ∈ (Finsupp.embDomain (Embedding.subtype s) l).support, x ∈ s
state_after: case mpr.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ (i : ι) (hi : i ∈ s), ¬l ⟨i, hi⟩ = 0 → i ∈ s

tactic: intros
state_before: case mpr.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ (i : ι) (hi : i ∈ s), ¬l ⟨i, hi⟩ = 0 → i ∈ s
state_after: case mpr.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
i✝ : ι
hi✝ : i✝ ∈ s
a✝ : ¬l ⟨i✝, hi✝⟩ = 0
⊢ i✝ ∈ s

tactic: assumption
state_before: case mpr.refine_1
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
i✝ : ι
hi✝ : i✝ ∈ s
a✝ : ¬l ⟨i✝, hi✝⟩ = 0
⊢ i✝ ∈ s
state_after: no goals

tactic: simpa
state_before: ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
this : ∀ (i : ι) (hi : i ∈ s), ¬l ⟨i, hi⟩ = 0 → i ∈ s
⊢ ∀ x ∈ (Finsupp.embDomain (Embedding.subtype s) l).support, x ∈ s
state_after: no goals

tactic: rwa [Finsupp.embDomain_eq_mapDomain, Finsupp.sum_mapDomain_index]
state_before: case mpr.refine_2
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ((Finsupp.embDomain (Embedding.subtype s) l).sum fun i a => a • v i) = 0
state_after: case mpr.refine_2.h_zero
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ (b : ι), 0 • v b = 0

case mpr.refine_2.h_add
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ (b : ι) (m₁ m₂ : R), (m₁ + m₂) • v b = m₁ • v b + m₂ • v b

tactic: exacts [fun _ => zero_smul _ _, fun _ _ _ => add_smul _ _ _]
state_before: case mpr.refine_2.h_zero
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ (b : ι), 0 • v b = 0

case mpr.refine_2.h_add
ι : Type u'
ι' : Type u_1
R : Type u_2
K : Type u_3
M : Type u_4
M' : Type u_5
M'' : Type u_6
V : Type u
V' : Type u_7
v : ι → M
inst✝⁶ : Semiring R
inst✝⁵ : AddCommMonoid M
inst✝⁴ : AddCommMonoid M'
inst✝³ : AddCommMonoid M''
inst✝² : Module R M
inst✝¹ : Module R M'
inst✝ : Module R M''
a b : R
x y : M
s : Set ι
h : ∀ (l : ι →₀ R), (∀ x ∈ l.support, x ∈ s) → (l.sum fun i a => a • v i) = 0 → l = 0
l : ↑s →₀ R
hl : (l.sum fun i a => a • v ↑i) = 0
⊢ ∀ (b : ι) (m₁ m₂ : R), (m₁ + m₂) • v b = m₁ • v b + m₂ • v b
state_after: no goals