Theorem: Matrix.SemiconjBy.zpow_right
File: Mathlib/LinearAlgebra/Matrix/ZPow.lean

tactic: simp [h.pow_right n]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
⊢ SemiconjBy A (X ^ ↑n) (Y ^ ↑n)

tactic: have hx' : IsUnit (X ^ n.succ).det := by
  rw [det_pow]
  exact hx.pow n.succ
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
⊢ SemiconjBy A (X ^ -[n+1]) (Y ^ -[n+1])

tactic: have hy' : IsUnit (Y ^ n.succ).det := by
  rw [det_pow]
  exact hy.pow n.succ
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
⊢ SemiconjBy A (X ^ -[n+1]) (Y ^ -[n+1])

tactic: rw [zpow_negSucc, zpow_negSucc, nonsing_inv_apply _ hx', nonsing_inv_apply _ hy', SemiconjBy]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
hy' : IsUnit (det (Y ^ Nat.succ n))
⊢ SemiconjBy A (X ^ -[n+1]) (Y ^ -[n+1])

tactic: refine' (isRegular_of_isLeftRegular_det hy'.isRegular.left).left _
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
hy' : IsUnit (det (Y ^ Nat.succ n))
⊢ A * ↑(IsUnit.unit hx')⁻¹ • adjugate (X ^ Nat.succ n) = ↑(IsUnit.unit hy')⁻¹ • adjugate (Y ^ Nat.succ n) * A

tactic: dsimp only
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
hy' : IsUnit (det (Y ^ Nat.succ n))
⊢ (fun x => Y ^ Nat.succ n * x) (A * ↑(IsUnit.unit hx')⁻¹ • adjugate (X ^ Nat.succ n)) =
    (fun x => Y ^ Nat.succ n * x) (↑(IsUnit.unit hy')⁻¹ • adjugate (Y ^ Nat.succ n) * A)

tactic: rw [← mul_assoc, ← (h.pow_right n.succ).eq, mul_assoc, mul_eq_mul (X ^ _), mul_smul,
  mul_adjugate, mul_eq_mul, mul_eq_mul, mul_eq_mul, ← Matrix.mul_assoc,
  mul_smul (Y ^ _) (↑hy'.unit⁻¹ : R), mul_adjugate, smul_smul, smul_smul, hx'.val_inv_mul,
  hy'.val_inv_mul, one_smul, Matrix.mul_one, Matrix.one_mul]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
hy' : IsUnit (det (Y ^ Nat.succ n))
⊢ Y ^ Nat.succ n * (A * ↑(IsUnit.unit hx')⁻¹ • adjugate (X ^ Nat.succ n)) =
    Y ^ Nat.succ n * (↑(IsUnit.unit hy')⁻¹ • adjugate (Y ^ Nat.succ n) * A)

tactic: rw [det_pow]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
⊢ IsUnit (det (X ^ Nat.succ n))

tactic: exact hx.pow n.succ
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
⊢ IsUnit (det X ^ Nat.succ n)

tactic: rw [det_pow]
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
⊢ IsUnit (det (Y ^ Nat.succ n))

tactic: exact hy.pow n.succ
state_before: n' : Type u_1
inst✝² : DecidableEq n'
inst✝¹ : Fintype n'
R : Type u_2
inst✝ : CommRing R
A X Y : M
hx : IsUnit (det X)
hy : IsUnit (det Y)
h : SemiconjBy A X Y
n : ℕ
hx' : IsUnit (det (X ^ Nat.succ n))
⊢ IsUnit (det Y ^ Nat.succ n)