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

Proof steps:
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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
⊢ LinearIndependent R (v ∘ f)
state_after: ι : 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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
⊢ ∀ (l : ι' →₀ R), (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0 → l = 0
tactic: rw [linearIndependent_iff, Finsupp.total_comp]
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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
⊢ ∀ (l : ι' →₀ R), (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0 → l = 0
state_after: ι : 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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
⊢ l = 0
tactic: intro l hl
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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
⊢ l = 0
state_after: ι : 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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
h_map_domain : ∀ (x : ι'), (Finsupp.mapDomain f l) (f x) = 0
⊢ l = 0
tactic: have h_map_domain : ∀ x, (Finsupp.mapDomain f l) (f x) = 0 := by
    rw [linearIndependent_iff.1 h (Finsupp.mapDomain f l) hl]; simp
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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
h_map_domain : ∀ (x : ι'), (Finsupp.mapDomain f l) (f x) = 0
⊢ l = 0
state_after: case h
ι : 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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
h_map_domain : ∀ (x : ι'), (Finsupp.mapDomain f l) (f x) = 0
x : ι'
⊢ l x = 0 x
tactic: ext x
state_before: case h
ι : 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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
h_map_domain : ∀ (x : ι'), (Finsupp.mapDomain f l) (f x) = 0
x : ι'
⊢ l x = 0 x
state_after: case h.e'_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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
h_map_domain : ∀ (x : ι'), (Finsupp.mapDomain f l) (f x) = 0
x : ι'
⊢ l x = (Finsupp.mapDomain f l) (f x)
tactic: convert h_map_domain x
state_before: case h.e'_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
h : LinearIndependent R v
f : ι' → ι
hf : Injective f
l : ι' →₀ R
hl : (Finsupp.total ι M R v ∘ₗ Finsupp.lmapDomain R R f) l = 0
h_map_domain : ∀ (x : ι'), (Finsupp.mapDomain f l) (f x) = 0
x : ι'
⊢ l x = (Finsupp.mapDomain f l) (f x)
state_after: no goals
tactic: rw [Finsupp.mapDomain_apply hf]