-- Mathlib/LinearAlgebra/LinearIndependent/Lemmas.lean
/-- Also see `LinearIndependent.pair_iff'` for a simpler version over fields. -/
lemma LinearIndependent.pair_iff {x y : M} :
    LinearIndependent R ![x, y] ↔ ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0

Proof state:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
⊢ LinearIndependent R ![x, y]

Tactic:
apply Fintype.linearIndependent_iff.2

Result:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
⊢ ∀ (g : Fin (Nat.succ 0).succ → R),
    ∑ i : Fin (Nat.succ 0).succ, g i • ![x, y] i = 0 → ∀ (i : Fin (Nat.succ 0).succ), g i = 0

Proof state:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : ∑ i : Fin (Nat.succ 0).succ, g i • ![x, y] i = 0
⊢ ∀ (i : Fin (Nat.succ 0).succ), g i = 0

Tactic:
simp only [Fin.sum_univ_two, Matrix.cons_val_zero, Matrix.cons_val_one, Matrix.head_cons] at hg

Result:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
⊢ ∀ (i : Fin (Nat.succ 0).succ), g i = 0

Proof state:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
⊢ LinearIndependent R ![x, y] ↔ ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0

Tactic:
refine ⟨fun h s t hst ↦ h.eq_zero_of_pair hst, fun h ↦ ?_⟩

Result:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
⊢ LinearIndependent R ![x, y]

Proof state:
case «0»
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
⊢ g ((fun i => i) ⟨0, ⋯⟩) = 0

case «1»
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
⊢ g ((fun i => i) ⟨1, ⋯⟩) = 0

Tactic:
exacts [(h _ _ hg).1, (h _ _ hg).2]

Result:
no goals

Proof state:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
⊢ ∀ (g : Fin (Nat.succ 0).succ → R),
    ∑ i : Fin (Nat.succ 0).succ, g i • ![x, y] i = 0 → ∀ (i : Fin (Nat.succ 0).succ), g i = 0

Tactic:
intro g hg

Result:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : ∑ i : Fin (Nat.succ 0).succ, g i • ![x, y] i = 0
⊢ ∀ (i : Fin (Nat.succ 0).succ), g i = 0

Proof state:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
⊢ ∀ (i : Fin (Nat.succ 0).succ), g i = 0

Tactic:
intro i

Result:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
i : Fin (Nat.succ 0).succ
⊢ g i = 0

Proof state:
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
i : Fin (Nat.succ 0).succ
⊢ g i = 0

Tactic:
fin_cases i

Result:
case «0»
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
⊢ g ((fun i => i) ⟨0, ⋯⟩) = 0

case «1»
R : Type u_2
M : Type u_4
inst✝² : Ring R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : ∀ (s t : R), s • x + t • y = 0 → s = 0 ∧ t = 0
g : Fin (Nat.succ 0).succ → R
hg : g 0 • x + g 1 • y = 0
⊢ g ((fun i => i) ⟨1, ⋯⟩) = 0