Theorem: Module.exists_nontrivial_relation_of_finrank_lt_card
File: Mathlib/LinearAlgebra/Dimension/Finite.lean

tactic: obtain ⟨g, sum, z, nonzero⟩ := Fintype.not_linearIndependent_iff.mp
  (mt LinearIndependent.finset_card_le_finrank h.not_le)
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
⊢ ∃ f, ∑ e ∈ t, f e • e = 0 ∧ ∃ x ∈ t, f x ≠ 0
state_after: case intro.intro.intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ ∃ f, ∑ e ∈ t, f e • e = 0 ∧ ∃ x ∈ t, f x ≠ 0

tactic: refine ⟨Subtype.val.extend g 0, ?_, z, z.2, by rwa [Subtype.val_injective.extend_apply]⟩
state_before: case intro.intro.intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ ∃ f, ∑ e ∈ t, f e • e = 0 ∧ ∃ x ∈ t, f x ≠ 0
state_after: case intro.intro.intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ ∑ e ∈ t, Function.extend Subtype.val g 0 e • e = 0

tactic: rw [← Finset.sum_finset_coe]
state_before: case intro.intro.intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ ∑ e ∈ t, Function.extend Subtype.val g 0 e • e = 0
state_after: case intro.intro.intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ ∑ i : ↑↑t, Function.extend Subtype.val g 0 ↑i • ↑i = 0

tactic: convert sum
state_before: case intro.intro.intro
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ ∑ i : ↑↑t, Function.extend Subtype.val g 0 ↑i • ↑i = 0
state_after: case h.e'_2.a.h.e'_5
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
x✝ : ↑↑t
a✝ : x✝ ∈ Finset.univ
⊢ Function.extend Subtype.val g 0 ↑x✝ = g x✝

tactic: apply Subtype.val_injective.extend_apply
state_before: case h.e'_2.a.h.e'_5
R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
x✝ : ↑↑t
a✝ : x✝ ∈ Finset.univ
⊢ Function.extend Subtype.val g 0 ↑x✝ = g x✝
state_after: no goals

tactic: rwa [Subtype.val_injective.extend_apply]
state_before: R : Type u
M M₁ : Type v
M' : Type v'
ι : Type w
inst✝⁹ : Ring R
inst✝⁸ : AddCommGroup M
inst✝⁷ : AddCommGroup M'
inst✝⁶ : AddCommGroup M₁
inst✝⁵ : Module R M
inst✝⁴ : Module R M'
inst✝³ : Module R M₁
inst✝² : StrongRankCondition R
inst✝¹ : Finite R M
inst✝ : NoZeroSMulDivisors R M
t : Finset M
h : finrank R M < t.card
g : { x // x ∈ t } → R
sum : ∑ i : { x // x ∈ t }, g i • ↑i = 0
z : { x // x ∈ t }
nonzero : g z ≠ 0
⊢ Function.extend Subtype.val g 0 ↑z ≠ 0
state_after: no goals