Theorem: Matrix.SpecialLinearGroup.center_equiv_rootsOfUnity'_apply
File: Mathlib/LinearAlgebra/Matrix/SpecialLinearGroup.lean

Proof steps:
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
state_after: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
this : Nonempty n
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
tactic: have : Nonempty n := ⟨i⟩
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
this : Nonempty n
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
state_after: case intro.intro
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
this : Nonempty n
r : R
hr : r ^ Fintype.card n = 1
hr' : (scalar n) r = ↑↑A
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
tactic: obtain ⟨r, hr, hr'⟩ := mem_center_iff.mp A.property
state_before: case intro.intro
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
this : Nonempty n
r : R
hr : r ^ Fintype.card n = 1
hr' : (scalar n) r = ↑↑A
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
state_after: case intro.intro
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
this : Nonempty n
r : R
hr : r ^ Fintype.card n = 1
hr' : ↑↑A i i = r
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
tactic: replace hr' : A.val i i = r := by simp [← hr']
state_before: case intro.intro
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
this : Nonempty n
r : R
hr : r ^ Fintype.card n = 1
hr' : ↑↑A i i = r
⊢ ↑↑A i i ^ ↑(Fintype.card n).toPNat' = 1
state_after: no goals
tactic: simp [hr, hr']
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
a : ↥(rootsOfUnity (Fintype.card n).toPNat' R)
⊢ (a • 1).det = 1
state_after: no goals
tactic: aesop
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
a : ↥(rootsOfUnity (Fintype.card n).toPNat' R)
B : SpecialLinearGroup n R
⊢ ↑(B * ⟨a • 1, ⋯⟩) = ↑(⟨a • 1, ⋯⟩ * B)
state_after: no goals
tactic: simp [coe_mul]
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
⊢ (fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ((fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯) A) = A
state_after: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
⊢ ↑↑((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ((fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯) A)) = ↑↑A
tactic: refine SetCoe.ext <| SetCoe.ext ?_
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
⊢ ↑↑((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ((fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯) A)) = ↑↑A
state_after: case intro.intro
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
r : R
left✝ : r ^ Fintype.card n = 1
hr : (scalar n) r = ↑↑A
⊢ ↑↑((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ((fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯) A)) = ↑↑A
tactic: obtain ⟨r, _, hr⟩ := mem_center_iff.mp A.property
state_before: case intro.intro
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A : ↥(center (SpecialLinearGroup n R))
r : R
left✝ : r ^ Fintype.card n = 1
hr : (scalar n) r = ↑↑A
⊢ ↑↑((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ((fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯) A)) = ↑↑A
state_after: no goals
tactic: simpa [← hr, Submonoid.smul_def, Units.smul_def] using smul_one_eq_diagonal r
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
a : ↥(rootsOfUnity (Fintype.card n).toPNat' R)
⊢ (fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯) ((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) a) = a
state_after: case mk.mk
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
a inv✝ : R
val_inv✝ : a * inv✝ = 1
inv_val✝ : inv✝ * a = 1
ha : { val := a, inv := inv✝, val_inv := val_inv✝, inv_val := inv_val✝ } ∈ rootsOfUnity (Fintype.card n).toPNat' R
⊢ (fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯)
      ((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ⟨{ val := a, inv := inv✝, val_inv := val_inv✝, inv_val := inv_val✝ }, ha⟩) =
    ⟨{ val := a, inv := inv✝, val_inv := val_inv✝, inv_val := inv_val✝ }, ha⟩
tactic: obtain ⟨⟨a, _⟩, ha⟩ := a
state_before: case mk.mk
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
a inv✝ : R
val_inv✝ : a * inv✝ = 1
inv_val✝ : inv✝ * a = 1
ha : { val := a, inv := inv✝, val_inv := val_inv✝, inv_val := inv_val✝ } ∈ rootsOfUnity (Fintype.card n).toPNat' R
⊢ (fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯)
      ((fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩) ⟨{ val := a, inv := inv✝, val_inv := val_inv✝, inv_val := inv_val✝ }, ha⟩) =
    ⟨{ val := a, inv := inv✝, val_inv := val_inv✝, inv_val := inv_val✝ }, ha⟩
state_after: no goals
tactic: exact SetCoe.ext <| Units.eq_iff.mp <| by simp
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ { toFun := fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯, invFun := fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩, left_inv := ⋯,
          right_inv := ⋯ }.toFun
      (A * B) =
    { toFun := fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯, invFun := fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩, left_inv := ⋯,
            right_inv := ⋯ }.toFun
        A *
      { toFun := fun A => rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯, invFun := fun a => ⟨⟨a • 1, ⋯⟩, ⋯⟩, left_inv := ⋯,
            right_inv := ⋯ }.toFun
        B
state_after: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ rootsOfUnity.mkOfPowEq ((↑↑A * ↑↑B) i i) ⋯ = rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯ * rootsOfUnity.mkOfPowEq (↑↑B i i) ⋯
tactic: dsimp
state_before: n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ rootsOfUnity.mkOfPowEq ((↑↑A * ↑↑B) i i) ⋯ = rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯ * rootsOfUnity.mkOfPowEq (↑↑B i i) ⋯
state_after: case a.a
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ ↑↑(rootsOfUnity.mkOfPowEq ((↑↑A * ↑↑B) i i) ⋯) =
    ↑↑(rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯ * rootsOfUnity.mkOfPowEq (↑↑B i i) ⋯)
tactic: ext
state_before: case a.a
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ ↑↑(rootsOfUnity.mkOfPowEq ((↑↑A * ↑↑B) i i) ⋯) =
    ↑↑(rootsOfUnity.mkOfPowEq (↑↑A i i) ⋯ * rootsOfUnity.mkOfPowEq (↑↑B i i) ⋯)
state_after: case a.a
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ (↑↑A * ↑↑B) i i = ↑↑A i i * ↑↑B i i
tactic: simp only [Submonoid.coe_mul, coe_mul, rootsOfUnity.val_mkOfPowEq_coe, Units.val_mul]
state_before: case a.a
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ (↑↑A * ↑↑B) i i = ↑↑A i i * ↑↑B i i
state_after: case a.a
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ ((scalar n) (↑↑A i i) * (scalar n) (↑↑B i i)) i i = (scalar n) (↑↑A i i) i i * (scalar n) (↑↑B i i) i i
tactic: rw [← scalar_eq_coe_self_center A i, ← scalar_eq_coe_self_center B i]
state_before: case a.a
n : Type u
inst✝³ : DecidableEq n
inst✝² : Fintype n
R : Type v
inst✝¹ : CommRing R
S : Type u_1
inst✝ : CommRing S
i : n
A B : ↥(center (SpecialLinearGroup n R))
⊢ ((scalar n) (↑↑A i i) * (scalar n) (↑↑B i i)) i i = (scalar n) (↑↑A i i) i i * (scalar n) (↑↑B i i) i i
state_after: no goals
tactic: simp