-- Mathlib/LinearAlgebra/LinearIndependent/Lemmas.lean
/-- If two vectors `x` and `y` are linearly independent, so are their linear combinations
`a x + b y` and `c x + d y` provided the determinant `a * d - b * c` is nonzero. -/
lemma LinearIndependent.linear_combination_pair_of_det_ne_zero {R M : Type*} [CommRing R]
    [NoZeroDivisors R] [AddCommGroup M] [Module R M]
    {x y : M} (h : LinearIndependent R ![x, y])
    {a b c d : R} (h' : a * d - b * c ≠ 0) :
    LinearIndependent R ![a • x + b • y, c • x + d • y]

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
⊢ LinearIndependent R ![a • x + b • y, c • x + d • y]

Tactic:
apply LinearIndependent.pair_iff.2 (fun s t hst ↦ ?_)

Result:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
⊢ s = 0 ∧ t = 0

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
J1 : (a * d - b * c) * s = 0
⊢ s = 0 ∧ t = 0

Tactic:
have J2 : (a * d - b * c) * t = 0 := by linear_combination -b * I1 + a * I2

Result:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
J1 : (a * d - b * c) * s = 0
J2 : (a * d - b * c) * t = 0
⊢ s = 0 ∧ t = 0

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
J1 : (a * d - b * c) * s = 0
J2 : (a * d - b * c) * t = 0
⊢ s = 0

Tactic:
simpa [h'] using mul_eq_zero.1 J1

Result:
no goals

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
⊢ s = 0 ∧ t = 0

Tactic:
have I2 : s * b + t * d = 0 := (h.eq_zero_of_pair H).2

Result:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
⊢ s = 0 ∧ t = 0

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
⊢ s = 0 ∧ t = 0

Tactic:
have H : (s * a + t * c) • x + (s * b + t * d) • y = 0 := by
  convert hst using 1
  module

Result:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
⊢ s = 0 ∧ t = 0

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
⊢ s = 0 ∧ t = 0

Tactic:
have I1 : s * a + t * c = 0 := (h.eq_zero_of_pair H).1

Result:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
⊢ s = 0 ∧ t = 0

Proof state:
case h.e'_2
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
⊢ (s * a + t * c) • x + (s * b + t * d) • y = s • (a • x + b • y) + t • (c • x + d • y)

Tactic:
module

Result:
no goals

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
J1 : (a * d - b * c) * s = 0
J2 : (a * d - b * c) * t = 0
⊢ t = 0

Tactic:
simpa [h'] using mul_eq_zero.1 J2

Result:
no goals

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
⊢ (s * a + t * c) • x + (s * b + t * d) • y = 0

Tactic:
convert hst using 1

Result:
case h.e'_2
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
⊢ (s * a + t * c) • x + (s * b + t * d) • y = s • (a • x + b • y) + t • (c • x + d • y)

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
⊢ s = 0 ∧ t = 0

Tactic:
have J1 : (a * d - b * c) * s = 0 := by linear_combination d * I1 - c * I2

Result:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
J1 : (a * d - b * c) * s = 0
⊢ s = 0 ∧ t = 0

Proof state:
R : Type u_6
M : Type u_7
inst✝³ : CommRing R
inst✝² : NoZeroDivisors R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
x y : M
h : LinearIndependent R ![x, y]
a b c d : R
h' : a * d - b * c ≠ 0
s t : R
hst : s • (a • x + b • y) + t • (c • x + d • y) = 0
H : (s * a + t * c) • x + (s * b + t * d) • y = 0
I1 : s * a + t * c = 0
I2 : s * b + t * d = 0
J1 : (a * d - b * c) * s = 0
⊢ (a * d - b * c) * t = 0

Tactic:
linear_combination -b * I1 + a * I2

Result:
no goals