Theorem: LinearMap.isUnit_det
File: Mathlib/LinearAlgebra/Determinant.lean

tactic: obtain ⟨g, hg⟩ : ∃ g, f.comp g = 1 := hf.exists_right_inv
state_before: R : Type u_1
inst✝¹¹ : CommRing R
M : Type u_2
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
M' : Type u_3
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
ι : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
e : Basis ι R M
A✝ : Type u_5
inst✝⁴ : CommRing A✝
inst✝³ : Module A✝ M
κ : Type u_6
inst✝² : Fintype κ
A : Type u_7
inst✝¹ : CommRing A
inst✝ : Module A M
f : M →ₗ[A] M
hf : IsUnit f
⊢ IsUnit (LinearMap.det f)
state_after: case intro
R : Type u_1
inst✝¹¹ : CommRing R
M : Type u_2
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
M' : Type u_3
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
ι : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
e : Basis ι R M
A✝ : Type u_5
inst✝⁴ : CommRing A✝
inst✝³ : Module A✝ M
κ : Type u_6
inst✝² : Fintype κ
A : Type u_7
inst✝¹ : CommRing A
inst✝ : Module A M
f : M →ₗ[A] M
hf : IsUnit f
g : M →ₗ[A] M
hg : f ∘ₗ g = 1
⊢ IsUnit (LinearMap.det f)

tactic: have : LinearMap.det f * LinearMap.det g = 1 := by
  simp only [← LinearMap.det_comp, hg, MonoidHom.map_one]
state_before: case intro
R : Type u_1
inst✝¹¹ : CommRing R
M : Type u_2
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
M' : Type u_3
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
ι : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
e : Basis ι R M
A✝ : Type u_5
inst✝⁴ : CommRing A✝
inst✝³ : Module A✝ M
κ : Type u_6
inst✝² : Fintype κ
A : Type u_7
inst✝¹ : CommRing A
inst✝ : Module A M
f : M →ₗ[A] M
hf : IsUnit f
g : M →ₗ[A] M
hg : f ∘ₗ g = 1
⊢ IsUnit (LinearMap.det f)
state_after: case intro
R : Type u_1
inst✝¹¹ : CommRing R
M : Type u_2
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
M' : Type u_3
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
ι : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
e : Basis ι R M
A✝ : Type u_5
inst✝⁴ : CommRing A✝
inst✝³ : Module A✝ M
κ : Type u_6
inst✝² : Fintype κ
A : Type u_7
inst✝¹ : CommRing A
inst✝ : Module A M
f : M →ₗ[A] M
hf : IsUnit f
g : M →ₗ[A] M
hg : f ∘ₗ g = 1
this : LinearMap.det f * LinearMap.det g = 1
⊢ IsUnit (LinearMap.det f)

tactic: exact isUnit_of_mul_eq_one _ _ this
state_before: case intro
R : Type u_1
inst✝¹¹ : CommRing R
M : Type u_2
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
M' : Type u_3
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
ι : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
e : Basis ι R M
A✝ : Type u_5
inst✝⁴ : CommRing A✝
inst✝³ : Module A✝ M
κ : Type u_6
inst✝² : Fintype κ
A : Type u_7
inst✝¹ : CommRing A
inst✝ : Module A M
f : M →ₗ[A] M
hf : IsUnit f
g : M →ₗ[A] M
hg : f ∘ₗ g = 1
this : LinearMap.det f * LinearMap.det g = 1
⊢ IsUnit (LinearMap.det f)
state_after: no goals

tactic: simp only [← LinearMap.det_comp, hg, MonoidHom.map_one]
state_before: R : Type u_1
inst✝¹¹ : CommRing R
M : Type u_2
inst✝¹⁰ : AddCommGroup M
inst✝⁹ : Module R M
M' : Type u_3
inst✝⁸ : AddCommGroup M'
inst✝⁷ : Module R M'
ι : Type u_4
inst✝⁶ : DecidableEq ι
inst✝⁵ : Fintype ι
e : Basis ι R M
A✝ : Type u_5
inst✝⁴ : CommRing A✝
inst✝³ : Module A✝ M
κ : Type u_6
inst✝² : Fintype κ
A : Type u_7
inst✝¹ : CommRing A
inst✝ : Module A M
f : M →ₗ[A] M
hf : IsUnit f
g : M →ₗ[A] M
hg : f ∘ₗ g = 1
⊢ LinearMap.det f * LinearMap.det g = 1
state_after: no goals