Theorem: Matrix.exists_mulVec_eq_zero_iff'
File: Mathlib/LinearAlgebra/Matrix/ToLinearEquiv.lean

tactic: have : (∃ v ≠ 0, (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ _ :=
  exists_mulVec_eq_zero_iff_aux
state_before: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ M.det = 0
state_after: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ ((algebraMap A K).mapMatrix M).det = 0
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ M.det = 0

tactic: rw [← RingHom.map_det, IsFractionRing.to_map_eq_zero_iff] at this
state_before: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ ((algebraMap A K).mapMatrix M).det = 0
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ M.det = 0
state_after: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ M.det = 0

tactic: refine Iff.trans ?_ this
state_before: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ M.det = 0
state_after: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ ∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0

tactic: constructor <;> rintro ⟨v, hv, mul_eq⟩
state_before: n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
⊢ (∃ v, v ≠ 0 ∧ M *ᵥ v = 0) ↔ ∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0
state_after: case mp.intro.intro
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
⊢ ∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0

case mpr.intro.intro
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0

tactic: refine ⟨fun i => algebraMap _ _ (v i), mt (fun h => funext fun i => ?_) hv, ?_⟩
state_before: case mp.intro.intro
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
⊢ ∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0
state_after: case mp.intro.intro.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
h : (fun i => (algebraMap A K) (v i)) = 0
i : n
⊢ v i = 0 i

case mp.intro.intro.refine_2
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
⊢ ((algebraMap A K).mapMatrix M *ᵥ fun i => (algebraMap A K) (v i)) = 0

tactic: exact IsFractionRing.to_map_eq_zero_iff.mp (congr_fun h i)
state_before: case mp.intro.intro.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
h : (fun i => (algebraMap A K) (v i)) = 0
i : n
⊢ v i = 0 i
state_after: no goals

tactic: ext i
state_before: case mp.intro.intro.refine_2
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
⊢ ((algebraMap A K).mapMatrix M *ᵥ fun i => (algebraMap A K) (v i)) = 0
state_after: case mp.intro.intro.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
i : n
⊢ ((algebraMap A K).mapMatrix M *ᵥ fun i => (algebraMap A K) (v i)) i = 0 i

tactic: refine (RingHom.map_mulVec _ _ _ i).symm.trans ?_
state_before: case mp.intro.intro.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
i : n
⊢ ((algebraMap A K).mapMatrix M *ᵥ fun i => (algebraMap A K) (v i)) i = 0 i
state_after: case mp.intro.intro.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
i : n
⊢ (algebraMap A K) ((M *ᵥ v) i) = 0 i

tactic: rw [mul_eq, Pi.zero_apply, RingHom.map_zero, Pi.zero_apply]
state_before: case mp.intro.intro.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → A
hv : v ≠ 0
mul_eq : M *ᵥ v = 0
i : n
⊢ (algebraMap A K) ((M *ᵥ v) i) = 0 i
state_after: no goals

tactic: letI := Classical.decEq K
state_before: case mpr.intro.intro
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0
state_after: case mpr.intro.intro
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0

tactic: obtain ⟨⟨b, hb⟩, ba_eq⟩ :=
  IsLocalization.exist_integer_multiples_of_finset (nonZeroDivisors A) (Finset.univ.image v)
state_before: case mpr.intro.intro
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0
state_after: case mpr.intro.intro.intro.mk
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
ba_eq : ∀ a ∈ Finset.image v Finset.univ, IsLocalization.IsInteger A (↑⟨b, hb⟩ • a)
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0

tactic: choose f hf using ba_eq
state_before: case mpr.intro.intro.intro.mk
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
ba_eq : ∀ a ∈ Finset.image v Finset.univ, IsLocalization.IsInteger A (↑⟨b, hb⟩ • a)
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0
state_after: case mpr.intro.intro.intro.mk
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0

tactic: refine
  ⟨fun i => f _ (Finset.mem_image.mpr ⟨i, Finset.mem_univ i, rfl⟩),
    mt (fun h => funext fun i => ?_) hv, ?_⟩
state_before: case mpr.intro.intro.intro.mk
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
⊢ ∃ v, v ≠ 0 ∧ M *ᵥ v = 0
state_after: case mpr.intro.intro.intro.mk.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
h : (fun i => f (v i) ⋯) = 0
i : n
⊢ v i = 0 i

case mpr.intro.intro.intro.mk.refine_2
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
⊢ (M *ᵥ fun i => f (v i) ⋯) = 0

tactic: have := congr_arg (algebraMap A K) (congr_fun h i)
state_before: case mpr.intro.intro.intro.mk.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
h : (fun i => f (v i) ⋯) = 0
i : n
⊢ v i = 0 i
state_after: case mpr.intro.intro.intro.mk.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝¹ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this✝ : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
h : (fun i => f (v i) ⋯) = 0
i : n
this : (algebraMap A K) (f (v i) ⋯) = (algebraMap A K) (0 i)
⊢ v i = 0 i

tactic: rw [hf, Subtype.coe_mk, Pi.zero_apply, RingHom.map_zero, Algebra.smul_def, mul_eq_zero,
  IsFractionRing.to_map_eq_zero_iff] at this
state_before: case mpr.intro.intro.intro.mk.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝¹ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this✝ : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
h : (fun i => f (v i) ⋯) = 0
i : n
this : (algebraMap A K) (f (v i) ⋯) = (algebraMap A K) (0 i)
⊢ v i = 0 i
state_after: case mpr.intro.intro.intro.mk.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝¹ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this✝ : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
h : (fun i => f (v i) ⋯) = 0
i : n
this : b = 0 ∨ v i = 0
⊢ v i = 0 i

tactic: exact this.resolve_left (nonZeroDivisors.ne_zero hb)
state_before: case mpr.intro.intro.intro.mk.refine_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝¹ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this✝ : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
h : (fun i => f (v i) ⋯) = 0
i : n
this : b = 0 ∨ v i = 0
⊢ v i = 0 i
state_after: no goals

tactic: ext i
state_before: case mpr.intro.intro.intro.mk.refine_2
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
⊢ (M *ᵥ fun i => f (v i) ⋯) = 0
state_after: case mpr.intro.intro.intro.mk.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ (M *ᵥ fun i => f (v i) ⋯) i = 0 i

tactic: refine IsFractionRing.injective A K ?_
state_before: case mpr.intro.intro.intro.mk.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ (M *ᵥ fun i => f (v i) ⋯) i = 0 i
state_after: case mpr.intro.intro.intro.mk.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ (algebraMap A K) ((M *ᵥ fun i => f (v i) ⋯) i) = (algebraMap A K) (0 i)

tactic: calc
  algebraMap A K ((M *ᵥ (fun i : n => f (v i) _)) i) =
      ((algebraMap A K).mapMatrix M *ᵥ algebraMap _ K b • v) i := ?_
  _ = 0 := ?_
  _ = algebraMap A K 0 := (RingHom.map_zero _).symm
state_before: case mpr.intro.intro.intro.mk.refine_2.h
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ (algebraMap A K) ((M *ᵥ fun i => f (v i) ⋯) i) = (algebraMap A K) (0 i)
state_after: case mpr.intro.intro.intro.mk.refine_2.h.calc_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ (algebraMap A K) ((M *ᵥ fun i => f (v i) ⋯) i) = ((algebraMap A K).mapMatrix M *ᵥ (algebraMap A K) b • v) i

case mpr.intro.intro.intro.mk.refine_2.h.calc_2
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ ((algebraMap A K).mapMatrix M *ᵥ (algebraMap A K) b • v) i = 0

tactic: simp_rw [RingHom.map_mulVec, mulVec, dotProduct, Function.comp_apply, hf,
  RingHom.mapMatrix_apply, Pi.smul_apply, smul_eq_mul, Algebra.smul_def]
state_before: case mpr.intro.intro.intro.mk.refine_2.h.calc_1
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ (algebraMap A K) ((M *ᵥ fun i => f (v i) ⋯) i) = ((algebraMap A K).mapMatrix M *ᵥ (algebraMap A K) b • v) i
state_after: no goals

tactic: rw [mulVec_smul, mul_eq, Pi.smul_apply, Pi.zero_apply, smul_zero]
state_before: case mpr.intro.intro.intro.mk.refine_2.h.calc_2
n : Type u_1
inst✝⁹ : Fintype n
R : Type u_2
M✝ : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : AddCommGroup M✝
inst✝⁶ : Module R M✝
A : Type u_4
K : Type u_5
inst✝⁵ : DecidableEq n
inst✝⁴ : CommRing A
inst✝³ : Nontrivial A
inst✝² : Field K
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
M : Matrix n n A
this✝ : (∃ v, v ≠ 0 ∧ (algebraMap A K).mapMatrix M *ᵥ v = 0) ↔ M.det = 0
v : n → K
hv : v ≠ 0
mul_eq : (algebraMap A K).mapMatrix M *ᵥ v = 0
this : DecidableEq K := Classical.decEq K
b : A
hb : b ∈ nonZeroDivisors A
f : (a : K) → a ∈ Finset.image v Finset.univ → A
hf : ∀ (a : K) (a_1 : a ∈ Finset.image v Finset.univ), (algebraMap A K) (f a a_1) = ↑⟨b, hb⟩ • a
i : n
⊢ ((algebraMap A K).mapMatrix M *ᵥ (algebraMap A K) b • v) i = 0
state_after: no goals